JSPM

  • Created
  • Published
  • Downloads 6102
  • Score
    100M100P100Q149117F
  • License MIT

Convert Sequelize models into various JSON Schema variants (using the Strategy Pattern)

Package Exports

  • @alt3/sequelize-to-json-schemas

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@alt3/sequelize-to-json-schemas) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

NPM Version Build Status Greenkeeper Enabled NPM Total Downloads Code Coverage Code Climate maintainability

sequelize-to-json-schemas

Convert Sequelize models into various JSON Schema variants (using the Strategy Pattern).

Supported Schemas

  • JSON Schema v7
  • OpenAPI v3

More strategies welcome, inspiration found here

Installation

npm install @alt3/sequelize-to-json-schemas --save

Example

const { SchemaManager, JsonSchema7Strategy, OpenApi3Strategy } = require('@alt3/sequelize-to-json-schemas');
const schemaManager = new SchemaManager();

// generate a JSON Schema Draft-07 model schema
let schema = schemaManager.generate(userModel, new JsonSchema7Strategy());

// and/or the OpenAPI 3.0 equivalent
schema = schemaManager.generate(userModel, new OpenApi3Strategy());

Additional Information

  • understandable code
  • compatible with Sequelize v4 and v5
  • generates valid schemas (test suite using ajv and Swagger Parser validators)
  • uses the Strategy Pattern for (rock solid) core functionality while easily implementing new schema variants

Configuration

To configure global options use the SchemaManager initialization:

const schemaManager = new SchemaManager({
  baseUri: '/',
  absolutePaths: true,
});

To configure (per) model options use the generate() method:

const userSchema = schemaManager.generate(userModel, strategy, {
  title: 'MyUser',
  description: 'My Description',
  exclude: ['someAttribute'],
});

To enrich your attributes add one or more jsonSchema options to your Sequelize attribute definitions:

module.exports = sequelize => {
  const Model = sequelize.define('user', {
    userName: {
      type: DataTypes.STRING,
      jsonSchema: {
        description: 'My attribute description',
        examples: ['My example 1', 'My example 2'],
      },
    },
  });

  return Model;
};

License

This project is released under MIT LICENSE.

Contributing

Please refer to the guidelines for contributing.