@simplyhexagonal/json-schema-to-mongoose-schema
v1.2.5
Published
Type-safe function to convert JSON Schema (draft v4+) to Mongoose (v5, v6) Schema
Downloads
903
Maintainers
Readme
JSON Schema to Mongoose Schema
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:
- Buying me a coffee ☕
- Supporting Simply Hexagonal on Open Collective 🏆
- Starring this repo on Github 🌟
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):
License
Copyright (c) 2021-Present JSON Schema to Mongoose Schema Contributors. Licensed under the Apache License 2.0.