@maeum/schema-controller
v1.7.0
Published
maeum framework schema-controller
Downloads
19
Maintainers
Readme
@maeum/schema-controller
The @maeum/schema-controller
is a package that helps developer to integreate schema-nozzle and fastify.js. Developer can generate a json-schema
via schema-nozzle and then use as a schema in fastify.js request/response.
Why use @maeum/schema-controller
?
- You can decouple the schema-controller from fastify.js
- Less effort to set up route configuration in fastify.js
- You can add json-schema validation to messages received from MQ (RabbitMQ, ActiveMQ, SQS, etc), server configurations, and anywhere else you want.
Table of Contents
Getting Started
installation
npm install @maeum/schema-controller --save
Configuration
import fastify from 'fastify';
import { SchemaController } from '@maeum/schema-controller';
const listen = () => {
// step 01. bootstrap your json-schema database
SchemaController.bootstrap(false, {
// set your json-schema database file-path
filePath: path.join(getCwd(process.env), 'resources', 'configs', 'store.json'),
});
const server = fastify()
// step 02. your schema controller pass to fastify.js
server.setSchemaController(SchemaController.it.getFastifyController(server));
}
listen();
How to work?
The schema-nozzle
generate as json-schema database file that is available in @maeum/schema-controller
. This generated json-schema database file is read from @ameum/schema-controller
and then use to set up the schema in fastify.js routing.
server.post('/pet', { schema: { querystring: { $ref: 'ICreatePetDto' } } }, (req: FastifyRequest<{ Querystring: ICreatePetDto }>, reply) => {
// ...your code
// You can use auto-complete and intellisence Request Object like that,
// `req.query.name`
})
flowchart LR
SN[schema-nozzle]
DB[store.json]
SC[schema-controller]
RC[fastify.js<br /> route configuration<br /> swagger document]
SN-->|TypeScript interface<br />convert to json-schema|DB
DB-->SC
SC-->|fastify.js schema-controller|RC
Custom ajv Options
fastify.js uses ajv for request data validation. If you want to change the options of the ajv instance, you can pass custom options as shown below.
SchemaController.bootstrap(false, {
filePath: path.join(getCwd(process.env), 'resources', 'configs', 'store.json'),
ajv: {
// custom option of ajv instance
options: {
coerceTypes: 'array',
keywords: ['collectionFormat', 'example', 'binary'],
formats: {
binary: { type: 'string', validate: () => true },
byte: { type: 'string', validate: () => true },
},
},
// extension apply on ajv
extension: (ajv) => {
ajvFormat(ajv);
},
});
Relate To
- schema-nozzle
- json-schema database generator
- ts-json-schema-generator
- json-schema generator
- ts-morph
- TypeScript Compiler API wrapper
License
This software is licensed under the MIT.