Type-safe function to convert JSON Schema (draft v4+) to Mongoose (v5, v6) Schema
npm install @simplyhexagonal/json-schema-to-mongoose-schemaThis 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.
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
Please consider:
- Buying me a coffee ☕
- Supporting Simply Hexagonal on Open Collective 🏆
- Starring this repo on Github 🌟
_(Note: this package depends on lodash and mongoose)_
``sh
pnpm i lodash mongoose @simplyhexagonal/json-schema-to-mongoose-schema
Usage
`ts
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.Thanks goes to these wonderful people (emoji key):
Jean Lescure 🚧 💻 📓 ⚠️ 💡 📖 |
Copyright (c) 2021-Present JSON Schema to Mongoose Schema Contributors.
Licensed under the Apache License 2.0.