@paroicms/server
Version:
The ParoiCMS server
31 lines • 1.15 kB
JavaScript
import { GraphQLScalarType, Kind } from "graphql";
export const ScalarDateTime = new GraphQLScalarType({
name: "DateTime",
description: "A custom scalar for ISO 8601 formatted date-time strings",
serialize(value) {
if (!(value instanceof Date)) {
throw new TypeError(`DateTime.serialize: Value is not a Date object: ${value}`);
}
return value.toISOString();
},
parseValue(value) {
if (typeof value !== "string" || !isValidISODate(value)) {
throw new TypeError(`DateTime.parseValue: Invalid ISO 8601 date string: ${value}`);
}
return new Date(value);
},
parseLiteral(ast) {
if (ast.kind !== Kind.STRING) {
throw new TypeError(`DateTime.parseLiteral: Invalid date type: ${ast.kind}`);
}
if (!isValidISODate(ast.value)) {
throw new TypeError(`DateTime.parseLiteral: Invalid ISO 8601 date string: ${ast.value}`);
}
return new Date(ast.value);
},
});
function isValidISODate(value) {
const date = Date.parse(value);
return !Number.isNaN(date);
}
//# sourceMappingURL=DateTime.js.map