Skip to main content

Function Resolver

name

Type

string!

Values

function:run


options

The options object contains configuration specific to the type of resolver you select.


args

Type

ParameterConfig?

Description

Allows mapping from the QueryContext to the args values (input arguments) for the resolver. Results are not serialized. For more information read about the ParameterConfig.


results

Type

ParameterConfig?

Description

Allows mapping from the QueryContext to the results for the resolver step in a ComposeResolver or whole query. Results are not serialized. For more information read about the ParameterConfig.

javascript

Type

string!

Description

Allows writing arbitrary Javascript code with access to the FunctionResolverContext.

This code must include a function named handler which will be executed in a sandbox. hander is passed the FunctionResolverContext.

Utilities

Utility function are provided in the sandboxed runtime.

These include:

_.get - lodash get _.set - lodash set

Javascript Function Example

{
"getScore": {
"resolver": {
"compose": [
{
"id": "first",
"name": "util:noop",
"value": {
"value": 1
}
},
{
"id": "second",
"name": "util:noop",
"value": {
"value": 2
}
},
{
"name": "function:run",
"javascript": "// see below"
}
]
},
"args": {
"name": {
"type": "string"
}
}
}
}
function handler({
$args,
$results,
$resultsByIndex
}) {
const {name} = $args;
const sum = $resultsById.second.value + $resultsByIndex[0].value + $results.value;
return \\`\${name}: \${sum}\\`;
}
{
getScore(name: 'Beagles')
}
{
"data": {
"getScore": "Beagles: 5"
}
}

Schema Example

Using https://api.weather.gov/gridpoints/OKX/36,34/forecast as a data source.

{
"properties": {
"units": "us",
"forecastGenerator": "BaselineForecastGenerator",
"generatedAt": "2024-07-02T17:33:30+00:00",
"updateTime": "2024-07-02T16:32:21+00:00",
"validTimes": "2024-07-02T10:00:00+00:00/P7DT3H",
"elevation": {
"unitCode": "wmoUnit:m",
"value": 18.897600000000001
},
"periods": [
{
"number": 1,
"name": "This Afternoon",
"startTime": "2024-07-02T13:00:00-04:00",
"endTime": "2024-07-02T18:00:00-04:00",
"isDaytime": true,
"temperature": 84,
"temperatureUnit": "F",
"temperatureTrend": "",
"probabilityOfPrecipitation": {
"unitCode": "wmoUnit:percent",
"value": null
},
"windSpeed": "5 to 9 mph",
"windDirection": "SE",
"icon": "/icons/land/day/few?size=medium",
"shortForecast": "Sunny",
"detailedForecast": "Sunny. High near 84, with temperatures falling to around 80 in the afternoon. Southeast wind 5 to 9 mph."
}
]
}
}
{
"getForecast": {
"resolver": {
"compose": [
{
"id": "weather",
"name": "rest:get",
"service": "weather",
"path": "/gridpoints/OKX/36,34/forecast"
},
{
"name": "function:run",
"javascript": "function handler({ $resultsById }) { const period = $resultsById.weather.properties.periods[0]; return `${period.name} will be ${period.temperature}${period.temperatureUnit}.`}"
}
]
}
}
}
query {
getForecast
}
{
"data": {
"getForecast": "This Afternoon will be 84F."
}
}

Function Resolver Context

A special context available to the function resolver. Contains the follow properties.

$args

See the definition


$claims

See the definition


$source

See the definition


$request

See the definition


$resolver

Type

FunctionResolver!

Description

The resolver config that is running this function.


$first

Type

any!

Description

The results of the first resolver to execute.


$results

Type

any!

Description

The results of the last (most recent or previous) resolver to execute.


$resultsById

Type

Record<string, any>!

Description

The results of a resolver by the provided id.


$resultsByIndex

Type

Array<any>!

Description

An array of zero-indexed resolver results.