UNPKG

@cran/lib.gql.core

Version:

GQL Core Functionality

61 lines (60 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createScalarCast = exports.createScalar = void 0; const parse_1 = require("./parse"); const graphql_1 = require("graphql"); function getTypeOf(value) { return (value instanceof Array ? "array" : typeof value); } function createScalar(name, description, casts, serialize) { const asType = createScalarCast(name, casts); return { typeDefs: `scalar ${name}`, resolvers: { [name]: new graphql_1.GraphQLScalarType({ name, description, serialize: serialize, parseValue: asType, parseLiteral(ast, variables) { return asType((0, parse_1.parseLiteral)(name, ast, variables)); }, }), }, }; } exports.createScalar = createScalar; function createScalarCast(name, casts) { return function asType(value, ast) { if (null === value) { return null; } const type = getTypeOf(value); let result = null; try { const cast = casts[type]; if (cast instanceof Function) { result = cast(value, function invalid(reason) { (0, parse_1.parseError)(type, ast ?? value, reason); }); } else if (cast) { switch (type) { case "object": case "array": result = JSON.stringify(value); break; default: result = String(value); break; } } } catch { /* ignored */ } if (null === result) { (0, parse_1.parseError)(name, ast ?? value); } return result; }; } exports.createScalarCast = createScalarCast;