UNPKG

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