-
-
Save prowlee/640efd800c8ed98b301064a7b38938d0 to your computer and use it in GitHub Desktop.
GraphQLTimestamp.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment