runmd.onRequire = path => path == 'sequelize-json-schema' ? '.' : path;
Generate JSON Schema structures from Sequelize instances, models, and model attributes.
Schemas may be generated at three levels of granularity:
getSequelizeSchema() |
Generate a full description of your database (all models, attributes, and associations) |
getModelSchema() |
Generate the schema definitions entry for a specific model (all attributes) |
getAttributeSchema() |
Generate the properties entry for a specific attribute |
See API documentation below for details and examples.
npm install sequelize-json-schema
The version 1 API of this module is available as getModelSchema()
, with the following changes:
private
option has been removed. Useexclude
instead.alwaysRequired
option has been removed. Schemas should be manually amended if needed usingschema.required.push(...Object.keys(schema.properties))
.allowNull
option has been removed. (Schema reflects theallowNull
property of individual attributes).
Note: Examples below assume the following [fairly standard] setup code for Sequelize:
// Import this module
const sjs = require('sequelize-json-schema');
// Import Sequelize thingz
const Sequelize = require('Sequelize');
const {DataTypes} = Sequelize;
// Create a sequelize instance
const sequelize = new Sequelize('database', 'username', 'password', {dialect: 'sqlite'});
sequelize |
Sequelize A Sequelize instance |
options.useRefs |
Default for useRefs model option |
options.attributes |
Default for attributes model option |
options.exclude |
Default for exclude model option |
options.modelOptions |
Model-specific options |
(returns) | Object JSON Schema object |
Schema for simple one-model schema:
const Person = sequelize.define('Person', {name: DataTypes.STRING});
console.log(sjs.getSequelizeSchema(sequelize));
... continuing on, use options
to exclude a few properties:
const options = {exclude: ['id', 'createdAt', 'updatedAt']};
console.log(sjs.getSequelizeSchema(sequelize, options));
... continuing on, add another model and some associations:
const Address = sequelize.define('Address', {
street: DataTypes.STRING('tiny'),
city: DataTypes.STRING,
state: {type: DataTypes.STRING(2)},
zipcode: DataTypes.NUMBER,
});
Person.hasOne(Address);
Address.hasMany(Person);
console.log(sjs.getSequelizeSchema(sequelize, options));
... continuing (customizing with options
and modelOptions
):
console.log(sjs.getSequelizeSchema(sequelize, {
exclude: ['createdAt', 'updatedAt'],
modelOptions: {
Person: {exclude: ['id']},
Address: {attributes: ['id']},
}
}));
model |
Sequelize.Model |
options |
Object |
options.useRefs |
Boolean = true Determines how associations are described in the schema. If true, model.associations are described as $ref s to the appropriate entry in the schema definitions . If false, assiciations are described as plain attributes |
options.attributes |
Array Attributes to include in the schema |
options.exclude |
Array Attributes to exclude from the schema |
(return) | Object JSON Schema definition for the model |
... continuing getSequelizeSchema()
example, above:
console.log(sjs.getModelSchema(Person));
... continuing (useRefs = false to treat associations as plain attributes):
console.log(sjs.getModelSchema(Person, {useRefs: false}));
attribute |
Sequelize.Model attribute |
(returns) | Object JSON Schema property for the attribute |
... continuing getModelSchema()
example, above:
console.log(sjs.getAttributeSchema(Person.rawAttributes.name));