yılmaz
yılmaz

Reputation: 419

Custom formatter for fastify

I want to add a custom schema formatter for fastify.

import fastify from 'fastify'
import AjvCompiler from '@fastify/ajv-compiler'

const ajvFormatter = AjvCompiler(ajv);
ajvFormatter.addFormat('new-format', /hello/);

const app = fastify({
  schemaController: {
    compilersFactory: {
      buildValidator: ajvFormatter
    }
  }
})

I add the format but still gives the error:

 Failed building the validation schema for POST: /hey, due to error unknown format 
"new-format" ignored in schema at path

I guess latest fastify does not support this functionality.

Upvotes: 0

Views: 1179

Answers (1)

Manuel Spigolon
Manuel Spigolon

Reputation: 12900

You are using in the wrong way the @fastify/ajv-compiler module. It does not accept an ajv input parameter at all. not it exports an addFormat method.

You need to use the customOption option:

const fastify = require('fastify')

const app = fastify({
  logger: true,
  ajv: {
    customOptions: {
      formats: {
        'new-format': /hello/,
      },
    },
  },
})

app.get(
  '/:hello',
  {
    schema: {
      params: {
        type: 'object',
        properties: {
          hello: {
            type: 'string',
            format: 'new-format',
          },
        },
      },
    },
  },
  async (request, reply) => {
    return request.params
  }
)
app.listen(8080, '0.0.0.0')

// curl http://127.0.0.1:8080/hello
// curl http://127.0.0.1:8080/hello-foo

Upvotes: 3

Related Questions