API
scalarType
scalarType
Nexus allows you to provide an asNexusMethod
property which will make the scalar available as a builtin on the definition block object. We automatically generate and merge the types so you get type-safety just like the scalar types specified in the spec:
1const DateScalar = scalarType({2 name: 'Date',3 asNexusMethod: 'date',4 description: 'Date custom scalar type',5 parseValue(value) {6 return new Date(value)7 },8 serialize(value) {9 return value.getTime()10 },11 parseLiteral(ast) {12 if (ast.kind === Kind.INT) {13 return new Date(ast.value)14 }15 return null16 },17})
Example of Upload scalar
1import { GraphQLUpload } from 'graphql-upload'23export const Upload = GraphQLUpload
Example of DateTime scalar
1import { GraphQLDate } from 'graphql-iso-date'23export const DateTime = GraphQLDate
Exposing scalar as method
If you have an existing GraphQL scalar and you'd like to expose it as a method on the builder, call asNexusMethod
:
1import { GraphQLDate } from 'graphql-iso-date'23export const GQLDate = asNexusMethod(GraphQLDate, 'date')
1const SomeObject = objectType({2 name: 'SomeObject',3 definition(t) {4 t.date('createdAt') // t.date() is now available (with types!) because of `asNexusMethod`5 },6})
Check the type-definitions or the examples for a full illustration of the various options for scalarType
, or feel free to open a PR on the docs to help document!
Pass scalar to schema generation
It's important to list the scalar in the types
attribute of makeSchema
1const schema = makeSchema({2 types: [GQLDate] // Add Scalar to Array3})