{"_id":"@fastify/merge-json-schemas","_rev":"3737100","name":"@fastify/merge-json-schemas","description":"Builds a logical conjunction (AND) of multiple JSON schemas","dist-tags":{"latest":"0.2.1"},"maintainers":[{"name":"airhorns","email":"harry@harry.me"},{"name":"climba03003","email":"kaka@kakawebsitedemo.com"},{"name":"delvedor","email":""},{"name":"eomm","email":"behemoth89@gmail.com"},{"name":"fdawgs","email":""},{"name":"fox1t","email":""},{"name":"galvez","email":""},{"name":"gurgunday","email":""},{"name":"ivan-tymoshenko","email":""},{"name":"jean-michelet","email":""},{"name":"jsumners","email":"james.sumners@gmail.com"},{"name":"kibertoad","email":"iselwin@gmail.com"},{"name":"matteo.collina","email":""},{"name":"metcoder95","email":""},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"simoneb","email":"simone.busoli@gmail.com"},{"name":"tony133","email":""},{"name":"zekth","email":"vince.legoff@gmail.com"}],"time":{"modified":"2025-02-13T06:16:47.000Z","created":"2024-01-16T15:39:02.623Z","0.2.1":"2025-01-06T16:15:51.010Z","0.2.0":"2024-09-04T08:21:57.492Z","0.1.0":"2024-01-16T15:39:02.623Z","0.1.1":"2024-01-16T15:41:07.834Z"},"users":{},"author":{"name":"Ivan Tymoshenko","email":"ivan@tymoshenko.me"},"repository":{"type":"git","url":"git+https://github.com/fastify/merge-json-schemas.git"},"versions":{"0.2.1":{"name":"@fastify/merge-json-schemas","version":"0.2.1","description":"Builds a logical conjunction (AND) of multiple JSON schemas","main":"index.js","type":"commonjs","types":"types/index.d.ts","scripts":{"lint":"eslint","lint:fix":"eslint --fix","test":"npm run test:unit && npm run test:types","test:unit":"c8 --100 node --test","test:types":"tsd"},"repository":{"type":"git","url":"git+https://github.com/fastify/merge-json-schemas.git"},"keywords":["json","schema","merge","allOf"],"author":{"name":"Ivan Tymoshenko","email":"ivan@tymoshenko.me"},"contributors":[{"name":"Matteo Collina","email":"hello@matteocollina.com"},{"name":"Frazer Smith","email":"frazer.dev@icloud.com","url":"https://github.com/fdawgs"},{"name":"Gürgün Dayıoğlu","email":"hey@gurgun.day","url":"https://heyhey.to/G"}],"license":"MIT","bugs":{"url":"https://github.com/fastify/merge-json-schemas/issues"},"homepage":"https://github.com/fastify/merge-json-schemas#readme","funding":[{"type":"github","url":"https://github.com/sponsors/fastify"},{"type":"opencollective","url":"https://opencollective.com/fastify"}],"devDependencies":{"@fastify/pre-commit":"^2.1.0","c8":"^10.1.3","eslint":"^9.17.0","neostandard":"^0.12.0","tsd":"^0.31.2"},"dependencies":{"dequal":"^2.0.3"},"_id":"@fastify/merge-json-schemas@0.2.1","gitHead":"ed66b9028266f09cd7a1b0ba115a042f6f436413","_nodeVersion":"20.18.1","_npmVersion":"10.8.2","dist":{"shasum":"3aa30d2f0c81a8ac5995b6d94ed4eaa2c3055824","size":12528,"noattachment":false,"key":"/@fastify/merge-json-schemas/-/@fastify/merge-json-schemas-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@fastify/merge-json-schemas/download/@fastify/merge-json-schemas-0.2.1.tgz"},"_npmUser":{"name":"fdawgs","email":"frazer.dev@icloud.com"},"directories":{},"maintainers":[{"name":"airhorns","email":"harry@harry.me"},{"name":"climba03003","email":"kaka@kakawebsitedemo.com"},{"name":"delvedor","email":""},{"name":"eomm","email":"behemoth89@gmail.com"},{"name":"fdawgs","email":""},{"name":"fox1t","email":""},{"name":"galvez","email":""},{"name":"gurgunday","email":""},{"name":"ivan-tymoshenko","email":""},{"name":"jean-michelet","email":""},{"name":"jsumners","email":"james.sumners@gmail.com"},{"name":"kibertoad","email":"iselwin@gmail.com"},{"name":"matteo.collina","email":""},{"name":"metcoder95","email":""},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"simoneb","email":"simone.busoli@gmail.com"},{"name":"tony133","email":""},{"name":"zekth","email":"vince.legoff@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/merge-json-schemas_0.2.1_1736180150828_0.20433204493767043"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-01-06T16:15:51.010Z","publish_time":1736180151010,"_source_registry_name":"default","_cnpm_publish_time":1736180151010},"0.2.0":{"name":"@fastify/merge-json-schemas","version":"0.2.0","description":"Builds a logical conjunction (AND) of multiple JSON schemas","main":"index.js","type":"commonjs","types":"types/index.d.ts","scripts":{"lint":"standard","lint:fix":"standard --fix","test":"npm run test:unit && npm run test:types","test:unit":"c8 --100 node --test","test:types":"tsd"},"repository":{"type":"git","url":"git+https://github.com/fastify/merge-json-schemas.git"},"keywords":["json","schema","merge","allOf"],"author":{"name":"Ivan Tymoshenko","email":"ivan@tymoshenko.me"},"license":"MIT","bugs":{"url":"https://github.com/fastify/merge-json-schemas/issues"},"homepage":"https://github.com/fastify/merge-json-schemas#readme","devDependencies":{"@fastify/pre-commit":"^2.1.0","c8":"^8.0.1","standard":"^17.1.0","tsd":"^0.30.3"},"dependencies":{"dequal":"^2.0.3"},"_id":"@fastify/merge-json-schemas@0.2.0","gitHead":"11d70798b3a0dc8f0bc5e0f0b6eb9e079e7bbb2c","_nodeVersion":"20.16.0","_npmVersion":"10.8.1","dist":{"shasum":"13ebd4f2b57ed3be83421e2e83bc7cbb9cec237d","size":11937,"noattachment":false,"key":"/@fastify/merge-json-schemas/-/@fastify/merge-json-schemas-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@fastify/merge-json-schemas/download/@fastify/merge-json-schemas-0.2.0.tgz"},"_npmUser":{"name":"matteo.collina","email":"hello@matteocollina.com"},"directories":{},"maintainers":[{"name":"airhorns","email":"harry@harry.me"},{"name":"climba03003","email":"kaka@kakawebsitedemo.com"},{"name":"delvedor","email":""},{"name":"eomm","email":"behemoth89@gmail.com"},{"name":"fdawgs","email":""},{"name":"fox1t","email":""},{"name":"galvez","email":""},{"name":"gurgunday","email":""},{"name":"ivan-tymoshenko","email":""},{"name":"jean-michelet","email":""},{"name":"jsumners","email":"james.sumners@gmail.com"},{"name":"kibertoad","email":"iselwin@gmail.com"},{"name":"matteo.collina","email":""},{"name":"metcoder95","email":""},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"simoneb","email":"simone.busoli@gmail.com"},{"name":"tony133","email":""},{"name":"zekth","email":"vince.legoff@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/merge-json-schemas_0.2.0_1725438117363_0.4328192242996358"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-09-04T08:21:57.492Z","publish_time":1725438117492,"_source_registry_name":"default","_cnpm_publish_time":1725438117492},"0.1.0":{"name":"@fastify/merge-json-schemas","version":"0.1.0","description":"Builds a logical conjunction (AND) of multiple JSON schemas","main":"index.js","type":"commonjs","types":"types/index.d.ts","scripts":{"lint":"standard","lint:fix":"standard --fix","test:unit":"c8 --100 node --test","test:types":"tsd","test":"npm run lint && npm run test:unit && npm run test:types"},"repository":{"type":"git","url":"git+https://github.com/fastify/merge-json-schemas.git"},"keywords":["json","schema","merge","allOf"],"author":{"name":"Ivan Tymoshenko","email":"ivan@tymoshenko.me"},"license":"MIT","bugs":{"url":"https://github.com/fastify/merge-json-schemas/issues"},"homepage":"https://github.com/fastify/merge-json-schemas#readme","devDependencies":{"c8":"^8.0.1","standard":"^17.1.0","tsd":"^0.30.3"},"dependencies":{"fast-deep-equal":"^3.1.3"},"_id":"@fastify/merge-json-schemas@0.1.0","gitHead":"3e43524cc93f811555739c1620c8fb01bedfe23a","_nodeVersion":"20.11.0","_npmVersion":"10.2.4","dist":{"shasum":"ff175d13a16f322736aaac621dd7fcb0bb3349ea","size":12010,"noattachment":false,"key":"/@fastify/merge-json-schemas/-/@fastify/merge-json-schemas-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@fastify/merge-json-schemas/download/@fastify/merge-json-schemas-0.1.0.tgz"},"_npmUser":{"name":"matteo.collina","email":"hello@matteocollina.com"},"directories":{},"maintainers":[{"name":"airhorns","email":"harry@harry.me"},{"name":"climba03003","email":"kaka@kakawebsitedemo.com"},{"name":"delvedor","email":""},{"name":"eomm","email":"behemoth89@gmail.com"},{"name":"fdawgs","email":""},{"name":"fox1t","email":""},{"name":"galvez","email":""},{"name":"gurgunday","email":""},{"name":"ivan-tymoshenko","email":""},{"name":"jean-michelet","email":""},{"name":"jsumners","email":"james.sumners@gmail.com"},{"name":"kibertoad","email":"iselwin@gmail.com"},{"name":"matteo.collina","email":""},{"name":"metcoder95","email":""},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"simoneb","email":"simone.busoli@gmail.com"},{"name":"tony133","email":""},{"name":"zekth","email":"vince.legoff@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/merge-json-schemas_0.1.0_1705419542435_0.8764459782311311"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-01-16T15:39:02.623Z","publish_time":1705419542623,"_source_registry_name":"default","_cnpm_publish_time":1705419542623},"0.1.1":{"name":"@fastify/merge-json-schemas","version":"0.1.1","description":"Builds a logical conjunction (AND) of multiple JSON schemas","main":"index.js","type":"commonjs","types":"types/index.d.ts","scripts":{"lint":"standard","lint:fix":"standard --fix","test:unit":"c8 --100 node --test","test:types":"tsd","test":"npm run lint && npm run test:unit && npm run test:types"},"repository":{"type":"git","url":"git+https://github.com/fastify/merge-json-schemas.git"},"keywords":["json","schema","merge","allOf"],"author":{"name":"Ivan Tymoshenko","email":"ivan@tymoshenko.me"},"license":"MIT","bugs":{"url":"https://github.com/fastify/merge-json-schemas/issues"},"homepage":"https://github.com/fastify/merge-json-schemas#readme","devDependencies":{"c8":"^8.0.1","standard":"^17.1.0","tsd":"^0.30.3"},"dependencies":{"fast-deep-equal":"^3.1.3"},"_id":"@fastify/merge-json-schemas@0.1.1","gitHead":"8f46867bec724bad9cd427ecf7c4825ead295cd4","_nodeVersion":"20.11.0","_npmVersion":"10.2.4","dist":{"shasum":"3551857b8a17a24e8c799e9f51795edb07baa0bc","size":12013,"noattachment":false,"key":"/@fastify/merge-json-schemas/-/@fastify/merge-json-schemas-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@fastify/merge-json-schemas/download/@fastify/merge-json-schemas-0.1.1.tgz"},"_npmUser":{"name":"matteo.collina","email":"hello@matteocollina.com"},"directories":{},"maintainers":[{"name":"airhorns","email":"harry@harry.me"},{"name":"climba03003","email":"kaka@kakawebsitedemo.com"},{"name":"delvedor","email":""},{"name":"eomm","email":"behemoth89@gmail.com"},{"name":"fdawgs","email":""},{"name":"fox1t","email":""},{"name":"galvez","email":""},{"name":"gurgunday","email":""},{"name":"ivan-tymoshenko","email":""},{"name":"jean-michelet","email":""},{"name":"jsumners","email":"james.sumners@gmail.com"},{"name":"kibertoad","email":"iselwin@gmail.com"},{"name":"matteo.collina","email":""},{"name":"metcoder95","email":""},{"name":"simenb","email":"sbekkhus91@gmail.com"},{"name":"simoneb","email":"simone.busoli@gmail.com"},{"name":"tony133","email":""},{"name":"zekth","email":"vince.legoff@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/merge-json-schemas_0.1.1_1705419667696_0.8117343245874205"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-01-16T15:41:07.834Z","publish_time":1705419667834,"_source_registry_name":"default","_cnpm_publish_time":1705419667834}},"readme":"# @fastify/merge-json-schemas\n\n[![CI](https://github.com/fastify/merge-json-schemas/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/fastify/merge-json-schemas/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/@fastify/merge-json-schemas)](https://www.npmjs.com/package/@fastify/merge-json-schemas)\n[![neostandard javascript style](https://img.shields.io/badge/code_style-neostandard-brightgreen?style=flat)](https://github.com/neostandard/neostandard)\n\n__merge-json-schemas__ is a JavaScript library that builds a logical product (AND) for multiple [JSON schemas](https://json-schema.org/draft/2020-12/json-schema-core#name-introduction).\n\n- [Installation](#installation)\n- [Usage](#usage)\n- [API](#api)\n  - [mergeSchemas(schemas, options)](#mergeschemasschemas-options)\n  - [resolvers](#resolvers)\n  - [defaultResolver](#defaultresolver)\n- [License](#license)\n\n<a name=\"installation\"></a>\n\n## Installation\n\n```bash\nnpm i @fastify/merge-json-schemas\n```\n\n<a name=\"usage\"></a>\n\n## Usage\n\n```javascript\nconst assert = require('node:assert')\nconst { mergeSchemas } = require('@fastify/merge-json-schemas');\n\nconst schema1 = {\n  $id: 'schema1',\n  type: 'object',\n  properties: {\n    foo: { type: 'string', enum: ['foo1', 'foo2'] },\n    bar: { type: 'string', minLength: 3 }\n  }\n}\n\nconst schema2 = {\n  $id: 'schema1',\n  type: 'object',\n  properties: {\n    foo: { type: 'string', enum: ['foo1', 'foo3'] },\n    bar: { type: 'string', minLength: 5 }\n  },\n  required: ['foo']\n}\n\nconst mergedSchema = mergeSchemas([schema1, schema2])\nassert.deepStrictEqual(mergedSchema, {\n  $id: 'schema1',\n  type: 'object',\n  properties: {\n    foo: { type: 'string', enum: ['foo1'] },\n    bar: { type: 'string', minLength: 5 }\n  },\n  required: ['foo']\n})\n```\n\n<a name=\"api\"></a>\n\n## API\n\n<a name=\"merge-schemas\"></a>\n\n#### mergeSchemas(schemas, options)\n\nBuilds a logical conjunction (AND) of multiple [JSON schemas](https://json-schema.org/draft/2020-12/json-schema-core#name-introduction).\n\n- `schemas` __\\<objects[]\\>__ - list of JSON schemas to merge\n- `options` __\\<object\\>__ - optional options\n  - `resolvers` __\\<object\\>__ - custom resolvers for JSON schema keywords. Each key is the name of a JSON schema keyword. Each value is a resolver function. See [keywordResolver](#keywordresolver-keyword-values-mergedschema-parentschemas-options)\n  - `defaultResolver` __\\<function\\>__ - custom default resolver for JSON schema keywords. See [keywordResolver](#keywordresolver-keyword-values-mergedschema-parentschemas-options)\n  - `onConflict` __\\<string\\>__ - action to take when a conflict is found. Used by the default `defaultResolver`. Default is `throw`. Possible values are:\n    - `throw` - throws an error multiple different schemas for the same keyword are found\n    - `ignore` - do nothing if multiple different schemas for the same keyword are found\n    - `first` - use the value of the first schema if multiple different schemas for the same keyword are found\n\n#### resolvers\n\nA list of default resolvers that __merge-json-schema__ uses to merge JSON schemas. You can override the default resolvers by passing a list of custom resolvers in the `options` argument of `mergeSchemas`. See [keywordResolver](#keywordresolver-keyword-values-mergedschema-parentschemas-options).\n\n#### defaultResolver\n\nA default resolver that __merge-json-schema__ uses to merge JSON schemas. Default resolver is used when no custom resolver is defined for a JSON schema keyword. By default, the default resolver works as follows:\n\n- If only one schema contains the keyword, the value of the keyword is used as the merged value\n- If multiple schemas contain the exact same value for the keyword, the value of the keyword is used as the merged value\n- If multiple schemas contain different values for the keyword, it throws an error\n\n#### keywordResolver (keyword, values, mergedSchema, parentSchemas, options)\n\n__merge-json-schema__ uses a set of resolvers to merge JSON schemas. Each resolver is associated with a JSON schema keyword. The resolver is called when the keyword is found in the schemas to merge. The resolver is called with the following arguments:\n\n- `keyword` __\\<string\\>__ - the name of the keyword to merge\n- `values` __\\<any[]\\>__ - the values of the keyword to merge. The length of the array is equal to the number of schemas to merge. If a schema does not contain the keyword, the value is `undefined`\n- `mergedSchema` __\\<object\\>__ - an instance of the merged schema\n- `parentSchemas` __\\<object[]\\>__ - the list of parent schemas\n- `options` __\\<object\\>__ - the options passed to `mergeSchemas`\n\nThe resolver must set the merged value of the `keyword` in the `mergedSchema` object.\n\n__Example:__ resolver for the `minNumber` keyword.\n\n```javascript\nfunction minNumberResolver (keyword, values, mergedSchema) {\n  mergedSchema[keyword] = Math.min(...values)\n}\n```\n\n<a name=\"license\"></a>\n\n## License\n\nLicensed under [MIT](./LICENSE).\n","_attachments":{},"homepage":"https://github.com/fastify/merge-json-schemas#readme","bugs":{"url":"https://github.com/fastify/merge-json-schemas/issues"},"license":"MIT"}