ajv-validator / ajv-keywords

Additional JSON-Schema keywords for Ajv JSON validator
https://ajv.js.org
MIT License
257 stars 49 forks source link

fastify v3 requires using ajv v6 and ajv-keywords v3 #164

Open matt212 opened 3 years ago

matt212 commented 3 years ago

Hi Below is Details ,

Node version : v14.16.0 Npm version: 7.7.6 Dependencies Details "ajv": "^8.0.1", "ajv-keywords": "^5.0.0",

Code Snippet

const fastify = require("fastify")({
   ajv: {
    plugins: [[require("ajv-keywords"), ["transform"]]],
  },
});

stack trace Error

image

Help here would great !

Eomm commented 3 years ago

Fastify v3 does not support ajv 8 out of the box

You need to configure your server with ajv6 compatibility plugins, or follow this pr https://github.com/fastify/fastify/pull/2862

Or customizer the validator compiler by yourself

matt212 commented 3 years ago

Hi @Eomm , I downgraded to "ajv-keywords": "^3.5.2", and removed "ajv": "^8.0.1", altogether and error seems to go away. However it would better to keep this issue open until the dependency with fastify 3 is resolved

epoberezkin commented 3 years ago

@Eomm thank you - I was thinking it is probably this issue.

let me know if you need any advice on migrating to v8 in fastify v4.

devlzcode commented 3 years ago

@Eomm thank you - I was thinking it is probably this issue.

let me know if you need any advice on migrating to v8 in fastify v4.

I'd like to know how we'd migrate to v8 in fastify v4

Eomm commented 3 years ago

We don't have a release date for fastify v4 yet, but for sure it will support ajv 8 by default 👍🏼

bacloud22 commented 3 months ago

Hi I came from Fastify as well, and saw that there is this option to set transform, but I'm not using plain JSON schemas , I'm using fastify's library: "fluent-json-schema". Is there a way to add a transform function on fields ?

like:

export const userLoginSchema = S.object()
    .prop('firstName', S.string().minLength(2).maxLength(40)), //<-- trim and lowercase for example. or even add a custom transformer 
    .prop('username', S.string().format(S.FORMATS.EMAIL))
    .prop('password', S.string().minLength(8).maxLength(40))
    .required(['username', 'password'])

Is this possible @Eomm thanks a lot

Eomm commented 3 months ago

This issue is solved IMHO and should be closed: fastify v4 supports ajv v8

Hi I came from Fastify as well, and saw that there is this option to set transform, but I'm not using plain JSON schemas , I'm using fastify's library: "fluent-json-schema". Is there a way to add a transform function on fields ?

Fastify supports fluent-json-schema out of the box. If you have a Minimal, Reproducible Example to show us the issue, please open a new issue on the fluent-json-schema repository.