UNPKG

1.77 kBJavaScriptView Raw
1import inspect from "../jsutils/inspect.mjs";
2import invariant from "../jsutils/invariant.mjs";
3import keyValMap from "../jsutils/keyValMap.mjs";
4import { Kind } from "../language/kinds.mjs";
5
6/**
7 * Produces a JavaScript value given a GraphQL Value AST.
8 *
9 * Unlike `valueFromAST()`, no type is provided. The resulting JavaScript value
10 * will reflect the provided GraphQL value AST.
11 *
12 * | GraphQL Value | JavaScript Value |
13 * | -------------------- | ---------------- |
14 * | Input Object | Object |
15 * | List | Array |
16 * | Boolean | Boolean |
17 * | String / Enum | String |
18 * | Int / Float | Number |
19 * | Null | null |
20 *
21 */
22export function valueFromASTUntyped(valueNode, variables) {
23 switch (valueNode.kind) {
24 case Kind.NULL:
25 return null;
26
27 case Kind.INT:
28 return parseInt(valueNode.value, 10);
29
30 case Kind.FLOAT:
31 return parseFloat(valueNode.value);
32
33 case Kind.STRING:
34 case Kind.ENUM:
35 case Kind.BOOLEAN:
36 return valueNode.value;
37
38 case Kind.LIST:
39 return valueNode.values.map(function (node) {
40 return valueFromASTUntyped(node, variables);
41 });
42
43 case Kind.OBJECT:
44 return keyValMap(valueNode.fields, function (field) {
45 return field.name.value;
46 }, function (field) {
47 return valueFromASTUntyped(field.value, variables);
48 });
49
50 case Kind.VARIABLE:
51 return variables === null || variables === void 0 ? void 0 : variables[valueNode.name.value];
52 } // istanbul ignore next (Not reachable. All possible value nodes have been considered)
53
54
55 false || invariant(0, 'Unexpected value node: ' + inspect(valueNode));
56}