UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

29 lines (28 loc) 1.31 kB
//#region src/services/graphql/schema/parse-args.ts /** * GraphQL's regular resolver `args` variable only contains the "top-level" arguments. Seeing that we convert the * whole nested tree into one big query using Directus' own query resolver, we want to have a nested structure of * arguments for the whole resolving tree, which can later be transformed into Directus' AST using `deep`. * In order to do that, we'll parse over all ArgumentNodes and ObjectFieldNodes to manually recreate an object structure * of arguments */ function parseArgs(args, variableValues) { if (!args || args["length"] === 0) return {}; const parse = (node) => { switch (node.kind) { case "Variable": return variableValues[node.name.value]; case "ListValue": return node.values.map(parse); case "ObjectValue": return Object.fromEntries(node.fields.map((node$1) => [node$1.name.value, parse(node$1.value)])); case "NullValue": return null; case "StringValue": return String(node.value); case "IntValue": case "FloatValue": return Number(node.value); case "BooleanValue": return Boolean(node.value); case "EnumValue": default: return "value" in node ? node.value : null; } }; return Object.fromEntries(args["map"]((arg) => [arg.name.value, parse(arg.value)])); } //#endregion export { parseArgs };