/json-schema-to-mongoose-schema

Function to convert JSON Schema (draft v4+) to Mongoose (v5, v6) Schema

Primary LanguageTypeScript

JSON Schema to Mongoose Schema

Tests

This package was inspired by convert-json-schema-to-mongoose, but it's a bit more flexible and addresses the following:

  • ability to parse JSON schemas that are greater than JSON-Schema draft-04
  • parses sub-schemas into their own nested Schema instances to avoid required properties in them to cause false validation errors on their optional parents
  • ability to parse "anyOf" properties*
  • fully type-safe
  • thoroughly tested

*as long as all alternatives are of "type": "object" and properties with the same name have the same value types across alternatives

There are examples of highly complex valid schemas within the fixtures directory.

IMPORTANT: $ref is currently not supported.

We use this project along typescript-json-schema to have our Typescript interfaces be the single source of truth that generate the JSON schema that we then translate to Mongoose schema for each entity within our apps.

Open source notice

This project is open to updates by its users, I ensure that PRs are relevant to the community. In other words, if you find a bug or want a new feature, please help us by becoming one of the contributors ✌️ ! See the contributing section

Like this module? ❤

Please consider:

Install

(Note: this package depends on lodash and mongoose)

pnpm i lodash mongoose @simplyhexagonal/json-schema-to-mongoose-schema

# or
yarn add lodash mongoose @simplyhexagonal/json-schema-to-mongoose-schema

# or
npm install lodash mongoose @simplyhexagonal/json-schema-to-mongoose-schema

Usage

import jsonSchemaToMongooseSchema from '@simplyhexagonal/json-schema-to-mongoose-schema';

const userSchema = require('./schemas/User.json');
// {
//   "$schema": "http://json-schema.org/draft-07/schema#",
//   "definitions": {
//     "User": {
//       ...
//     }
//   }
// }

const mongooseSchema = jsonSchemaToMongooseSchema(userSchema, 'User');

// Then simply use your newly generated mongoose schema
const model = await mongoose.model(modelName, mongooseSchema);

Contributing

Yes, thank you! This plugin is community-driven, most of its features are from different authors. Please update the docs and tests and add your name to the package.json file.

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Jean Lescure

🚧 💻 📓 ⚠️ 💡 📖

License

Copyright (c) 2021-Present JSON Schema to Mongoose Schema Contributors.
Licensed under the Apache License 2.0.