UNPKG

loopback-graphql-server

Version:

Add Relay based Apollo Server or GraphQL queries on your Loopback server

38 lines (36 loc) 1.22 kB
const { GraphQLScalarType } = require('graphql'); const { GraphQLError } = require('graphql/error'); const { Kind } = require('graphql/language'); module.exports = new GraphQLScalarType({ name: 'DateTime', serialize(value) { if (!(value instanceof Date)) { // Is this how you raise a 'field error'? throw new Error('Field error: value is not an instance of Date'); } if (isNaN(value.getTime())) { throw new Error('Field error: value is an invalid Date'); } return value.toJSON(); }, parseValue(value) { const date = new Date(value); if (isNaN(date.getTime())) { throw new Error('Field error: value is an invalid Date'); } return date; }, parseLiteral(ast) { if (ast.kind !== Kind.STRING) { throw new GraphQLError(`Query error: Can only parse strings to dates but got a: ${ast.kind}`, [ast]); } const result = new Date(ast.value); if (isNaN(result.getTime())) { throw new GraphQLError('Query error: Invalid date', [ast]); } if (ast.value !== result.toJSON()) { throw new GraphQLError('Query error: Invalid date format, only accepts: YYYY-MM-DDTHH:MM:SS.SSSZ', [ast]); } return result; } });