GraphQLTimestamp.js

May 6, 2016 ยท View on GitHub

import { Kind } from 'graphql/language'; import { GraphQLScalarType } from 'graphql';

function serializeDate(value) { if (value instanceof Date) { return value.getTime(); } else if (typeof value === 'number') { return Math.trunc(value); } else if (typeof value === 'string') { return Date.parse(value); } return null; }

function parseDate(value) { if (value === null) { return null; }

try { return new Date(value); } catch (err) { return null; } }

function parseDateFromLiteral(ast) { if (ast.kind === Kind.INT) { const num = parseInt(ast.value, 10); return new Date(num); } else if (ast.kind === Kind.STRING) { return parseDate(ast.value); } return null; }

const TimestampType = new GraphQLScalarType({ name: 'Timestamp', description: 'The javascript Date as integer. Type represents date and time ' + 'as number of milliseconds from start of UNIX epoch.', serialize: serializeDate, parseValue: parseDate, parseLiteral: parseDateFromLiteral, });

export default TimestampType;