UNPKG

@cran/gql.core

Version:

Cran/GraphQL Core Utilities

60 lines (59 loc) 1.96 kB
"use strict"; /* eslint-disable prefer-template */ Object.defineProperty(exports, "__esModule", { value: true }); exports.createScalar = void 0; const graphql_1 = require("graphql"); const parse_1 = require("./parse"); function getTypeof(value) { return (value instanceof Array ? "array" : typeof value); } // eslint-disable-next-line max-lines-per-function function createScalar(name, description, casts, serialize) { // eslint-disable-next-line complexity 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); throw new Error(); // invariant }); } else if (cast) { switch (type) { case "object": case "array": result = JSON.stringify(value); break; // eslint-disable-next-line @typescript-eslint/no-base-to-string default: result = "" + value; } } } catch { /* */ } if (null === result) { (0, parse_1.parseError)(name, ast || value); } return result; } return { typeDefs: `scalar ${name}`, resolvers: { [name]: new graphql_1.GraphQLScalarType({ name, description, serialize, parseValue: asType, parseLiteral(ast, variables) { return asType((0, parse_1.parseLiteral)(name, ast, variables)); }, }), }, }; } exports.createScalar = createScalar;