date.mjs 667 B

123456789101112131415161718192021222324252627
  1. import gql from 'graphql'
  2. import { DateTime } from 'luxon'
  3. function parseDateTime (value) {
  4. const nDate = DateTime.fromISO(value)
  5. return nDate.isValid ? nDate : null
  6. }
  7. export default new gql.GraphQLScalarType({
  8. name: 'Date',
  9. description: 'ISO date-time string at UTC',
  10. parseValue(value) {
  11. if (typeof value !== 'string') {
  12. throw new TypeError('Date value must be an string!')
  13. }
  14. return parseDateTime(value)
  15. },
  16. serialize(value) {
  17. return value.toISOString()
  18. },
  19. parseLiteral(ast) {
  20. if (ast.kind !== gql.Kind.STRING) {
  21. throw new TypeError('Date value must be an string!')
  22. }
  23. return parseDateTime(ast.value)
  24. }
  25. })