fastify
Version:
Fast and low overhead web framework, for Node.js
115 lines (100 loc) • 2.5 kB
text/typescript
import { StandaloneValidator } from '@fastify/ajv-compiler'
import { StandaloneSerializer } from '@fastify/fast-json-stringify-compiler'
import Ajv from 'ajv'
import { expectAssignable } from 'tsd'
import fastify, { FastifyInstance, FastifySchema } from '../../fastify'
const server = fastify()
expectAssignable<FastifyInstance>(server.get(
'/full-schema',
{
schema: {
body: { type: 'null' },
querystring: { type: 'null' },
params: { type: 'null' },
headers: { type: 'null' },
response: { type: 'null' }
}
},
() => { }
))
expectAssignable<FastifyInstance>(server.post(
'/multiple-content-schema',
{
schema: {
body: {
content: {
'application/json': {
schema: { type: 'object' }
},
'text/plain': {
schema: { type: 'string' }
}
}
}
}
},
() => { }
))
expectAssignable<FastifyInstance>(server.get(
'/empty-schema',
{
schema: {}
},
() => { }
))
expectAssignable<FastifyInstance>(server.get(
'/no-schema',
{},
() => { }
))
expectAssignable<FastifyInstance>(server.setValidatorCompiler(({ schema }) => {
return new Ajv().compile(schema)
}))
expectAssignable<FastifyInstance>(server.setSerializerCompiler(() => {
return data => JSON.stringify(data)
}))
expectAssignable<FastifyInstance>(server.post('/test', {
validatorCompiler: ({ schema }) => {
return data => {
if (!data || data.constructor !== Object) {
return { error: new Error('value is not an object') }
}
return { value: data }
}
}
}, async req => req.body))
expectAssignable<FastifyInstance>(server.setValidatorCompiler<FastifySchema & { validate: Record<string, unknown> }>(
function ({ schema }) {
return new Ajv().compile(schema)
}
))
expectAssignable<FastifyInstance>(server.setSerializerCompiler<FastifySchema & { validate: string }>(
() => data => JSON.stringify(data)
))
// https://github.com/fastify/ajv-compiler/issues/95
{
const factory = StandaloneValidator({
readMode: false,
storeFunction (routeOpts, schemaValidationCode) { }
})
fastify({
schemaController: {
compilersFactory: {
buildValidator: factory
}
}
})
}
{
const factory = StandaloneSerializer({
readMode: false,
storeFunction (routeOpts, schemaValidationCode) { }
})
fastify({
schemaController: {
compilersFactory: {
buildSerializer: factory
}
}
})
}