Skip to Content
GraphQL Scalars
DocumentationUsageGenerate your own scalars from regex

Using the RegularExpression scalar

First an explanation: To create a new scalar type for the GraphQL schema language, you must create an instance of a new GraphQLScalarType object that implements three general functions/methods: serialize, parseValue and parseLiteral which are used at different stages of processing your GraphQL types during queries and mutations. So creating a new scalar looks like this:

const MyScalar = new GraphQLScalarType({ name: 'MyScalar', description: 'A description of my scalar', serialize(value) { // ... return value }, parseValue(value) { // ... return value }, parseLiteral(ast) { // ... return ast.value } })

Given this, if we want to create a new type that is essentially the same except for one little customizable aspect (e.g., a regular expression type that has all the same code except the regex is different) then we need to dynamically generate a new GraphQLScalarType object given some parameters. That’s the approach we take here.

Therefore, the RegularExpression scalar type is really a GraphQLScalarType object generator that takes two arguments:

  • A name
  • The regex you want it to use

So to create a new scalar for a given regex, you will do this:

const MyRegexType = new RegularExpression('MyRegexType', /^ABC$/)

Now MyRegexType is your new GraphQL scalar type that will enforce a value of, in this case, “ABC”.

Add your new scalar type to your resolver map:

resolvers.js
export default { MyRegexType // ... }

And to your schema:

schema.graphql
scalar MyRegexType

That’s it. Now you can use MyRegexType as a type in the rest of your schema.

RegularExpression options

There is an optional third options argument to the RegularExpression constructor that can be used like this:

const options = { errorMessage(regex, value) { return process.env.NODE_ENV === 'production' ? `Value is invalid format: ${value}` : `Value does not match the regular expression ${regex}: ${value}` } } const MyRegexType = new RegularExpression('MyRegexType', /^ABC$/, options)
Last updated on