import { keyValMap } from '../jsutils/keyValMap' ; import type { Maybe } from '../jsutils/Maybe' ; import type { ObjMap } from '../jsutils/ObjMap' ; import type { ValueNode } from '../language/ast' ; import { Kind } from '../language/kinds' ; /**
 * Produces a JavaScript value given a GraphQL Value AST.
 *
 * Unlike `valueFromAST()`, no type is provided. The resulting JavaScript value
 * will reflect the provided GraphQL value AST.
 *
 * | GraphQL Value        | JavaScript Value |
 * | -------------------- | ---------------- |
 * | Input Object         | Object           |
 * | List                 | Array            |
 * | Boolean              | Boolean          |
 * | String / Enum        | String           |
 * | Int / Float          | Number           |
 * | Null                 | null             |
 *
 */ export function valueFromASTUntyped ( valueNode , variables ? ) { switch ( valueNode . kind ) { case Kind . NULL : return null ; case Kind . INT : return parseInt ( valueNode . value , 10 ) ; case Kind . FLOAT : return parseFloat ( valueNode . value ) ; case Kind . STRING : case Kind . ENUM : case Kind . BOOLEAN : return valueNode . value ; case Kind . LIST : return valueNode . values . map ( ( node ) => valueFromASTUntyped ( node , variables ) ) ; case Kind . OBJECT : return keyValMap ( valueNode . fields , ( field ) => field . name . value , ( field ) => valueFromASTUntyped ( field . value , variables ) ) ; case Kind . VARIABLE : return variables ?. [ valueNode . name . value ] ; } }