1.5.2 • Published 4 months ago

@maeum/schema-controller v1.5.2

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

@maeum/schema-controller

ts Download Status Github Star Github Issues NPM version @maeum/schema-controller License codecov code style: prettier

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

License

This software is licensed under the MIT.

1.5.2

4 months ago

1.5.1

6 months ago

1.5.0

6 months ago

1.4.0

7 months ago

1.3.0

7 months ago

1.2.0

7 months ago

1.1.0

8 months ago

1.0.1

8 months ago

1.0.0

8 months ago