Builds a logical conjunction (AND) of multiple JSON schemas
MIT License
merge-json-schemas is a javascript library that build a logical product (AND) for multiple JSON schemas.
npm install @fastify/merge-json-schemas
const assert = require('node:assert')
const { mergeSchemas } = require('@fastify/merge-json-schemas');
const schema1 = {
$id: 'schema1',
type: 'object',
properties: {
foo: { type: 'string', enum: ['foo1', 'foo2'] },
bar: { type: 'string', minLength: 3 }
}
}
const schema2 = {
$id: 'schema1',
type: 'object',
properties: {
foo: { type: 'string', enum: ['foo1', 'foo3'] },
bar: { type: 'string', minLength: 5 }
},
required: ['foo']
}
const mergedSchema = mergeSchemas([schema1, schema2])
assert.deepStrictEqual(mergedSchema, {
$id: 'schema1',
type: 'object',
properties: {
foo: { type: 'string', enum: ['foo1'] },
bar: { type: 'string', minLength: 5 }
},
required: ['foo']
})
Builds a logical conjunction (AND) of multiple JSON schemas.
schemas
<objects[]> - list of JSON schemas to merge.options
<object> - optional options.
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.defaultResolver
<function> - custom default resolver for JSON schema keywords. See keywordResolver.onConflict
<string> - action to take when a conflict is found. Used by the default defaultResolver
. Default is throw
. Possible values are:
throw
- throws an error if found a multiple different schemas for the same keyword.ignore
- do nothing if found a multiple different schemas for the same keyword.first
- use the value of the first schema if found a multiple different schemas for the same keyword.A 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.
A 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:
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:
keyword
<string> - the name of the keyword to merge.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
.mergedSchema
<object> - an instance of the merged schema.parentSchemas
<object[]> - the list of parent schemas.options
<object> - the options passed to mergeSchemas
.The resolver must set the merged value of the keyword
in the mergedSchema
object.
Example: resolver for the minNumber
keyword.
function minNumberResolver (keyword, values, mergedSchema) {
mergedSchema[keyword] = Math.min(...values)
}
MIT