@cran/lib.gql.core
Version:
GQL Core Functionality
61 lines (60 loc) • 1.94 kB
JavaScript
;
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;