@cran/gql.core
Version:
Cran/GraphQL Core Utilities
41 lines (40 loc) • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseLiteral = exports.parseObject = exports.parseError = void 0;
const kinds_1 = require("graphql/language/kinds");
const ast_1 = require("graphql/language/ast");
const printer_1 = require("graphql/language/printer");
function parseError(type, ast, reason = "input syntax") {
throw new TypeError(`invalid ${reason} for type ${type}: ${(0, ast_1.isNode)(ast) ? (0, printer_1.print)(ast) : ast}`);
}
exports.parseError = parseError;
function parseObject(type, ast, variables) {
const value = Object.create(null);
for (const field of ast.fields) {
value[field.name.value] = parseLiteral(type, field.value, variables);
}
return value;
}
exports.parseObject = parseObject;
function parseLiteral(type, ast, variables) {
switch (ast.kind) {
case kinds_1.Kind.STRING:
case kinds_1.Kind.BOOLEAN:
case kinds_1.Kind.INT:
case kinds_1.Kind.FLOAT:
return ast.value;
case kinds_1.Kind.OBJECT:
return parseObject(type, ast, variables);
case kinds_1.Kind.LIST:
return ast.values.map(function mapValue(value) {
return parseLiteral(type, value, variables);
});
case kinds_1.Kind.NULL:
return null;
case kinds_1.Kind.VARIABLE:
return variables?.[ast.name.value];
default:
parseError(type, ast);
}
}
exports.parseLiteral = parseLiteral;