Function Resolver
name
Type
string!
Values
function:run
options
The options object contains configuration specific to the type of resolver you select.
args
Type
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
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.
Your code can either be written "inline", e.g., ({sum: 1 + 1})
or as a valid ESM, e.g., export default function() { return {sum: 1 + 1}; }
.
For inline code the FunctionResolverContext is present as globals, e.g., ({sum: $args.input + 42})
,
while for ESM code the context is exposed as the args object to the entrypoint function, e.g., export default function({$args}) { return {sum: $args.input + 42}; }
.
Imports
When writing ESM code you can use remote imports, similar to what you'd use in a browser. For example, the code below will
make use of the htmlparser2
library.
import {parseDocument} from 'https://esm.sh/htmlparser2@9.1.0';
export default function({$args}) {
return parseDocument(\\`<span>hello \${$args.input}</span>\\`).firstChild.firstChild.data;
}
System-Cached Imports
A few libraries are cached and can be imported without a network request. Note that the import URL must match this URL exactly to take advantage of the system-cached library imports.
- https://esm.sh/htmlparser2@9.1.0
- https://esm.sh/lodash@4.17.21
- https://esm.sh/date-fns@4.1.0
- https://esm.sh/uuid@11.0.5
If you would like to see additional libraries cached, please open a support request.
Because non-cached imports can have a significant and unpredictable impact on performance, we recommend only using system-cached imports in production.
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": {
"type": "object",
"properties": {
"name": { "type": "string" }
}
},
"shape": "Score"
},
"shapes": {
"Score": {
"name": "Score",
"title": "Score",
"schema": {
"type": "object",
"properties": {
"score": {
"type": "string"
}
}
}
}
}
}
export default function ({ $args, $results, $resultsById, $resultsByIndex }) {
const { name } = $args;
const sum = $resultsById.second.value + $resultsByIndex[0].value + $results.value;
return { score: `${name}: ${sum}` };
}
{
getScore(name: 'Beagles') {score}
}
{
"data": {
"getScore": { "score": "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": "export default 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.