Skip to content

Commit cfdb917

Browse files
deps: use merge-json-schema package
1 parent cd77a40 commit cfdb917

File tree

3 files changed

+18
-63
lines changed

3 files changed

+18
-63
lines changed

lib/merge-schemas.js

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,9 @@
11
'use strict'
22

3-
const mergeAllOf = require('json-schema-merge-allof')
4-
5-
const failOnConflictResolver = mergeAllOf.options.resolvers.type
6-
const pickFirstResolver = mergeAllOf.options.resolvers.title
7-
8-
const resolvers = {
9-
format: failOnConflictResolver,
10-
nullable: failOnConflictResolver,
11-
defaultResolver: pickFirstResolver
12-
}
3+
const { mergeSchemas: _mergeSchemas } = require('merge-json-schemas')
134

145
function mergeSchemas (schemas) {
15-
let mergedSchema = null
16-
try {
17-
mergedSchema = mergeAllOf({ allOf: schemas }, { resolvers })
18-
} catch (error) {
19-
const failedPath = /^Could not resolve values for path:"(.*)"\./.exec(error.message)
20-
/* istanbul ignore else */
21-
if (failedPath) {
22-
throw new Error(`Failed to merge schemas on "${failedPath[1]}".`)
23-
} else {
24-
throw new Error(`Failed to merge schemas: ${error.message}`)
25-
}
26-
}
27-
28-
// This is needed because fjs treats `additionalProperties` as false by default
29-
// which is not true for JSON Schema.
30-
if (mergedSchema.additionalProperties === undefined) {
31-
for (const schema of schemas) {
32-
if (schema.additionalProperties === true) {
33-
mergedSchema.additionalProperties = true
34-
break
35-
}
36-
}
37-
}
38-
39-
return mergedSchema
6+
return _mergeSchemas(schemas, { onConflict: 'skip' })
407
}
418

429
module.exports = mergeSchemas

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"fast-uri": "^2.1.0",
5555
"rfdc": "^1.2.0",
5656
"json-schema-ref-resolver": "^1.0.1",
57-
"json-schema-merge-allof": "^0.8.1"
57+
"merge-json-schemas": "fastify/merge-json-schemas#add-merge-json-schemas-function"
5858
},
5959
"standard": {
6060
"ignore": [

test/allof.test.js

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -606,51 +606,39 @@ test('allOf: multiple nested $ref properties', (t) => {
606606
})
607607

608608
test('allOf: throw Error if types mismatch ', (t) => {
609-
t.plan(1)
609+
t.plan(3)
610610

611611
const schema = {
612612
allOf: [
613613
{ type: 'string' },
614614
{ type: 'number' }
615615
]
616616
}
617-
t.throws(() => build(schema), new Error('Failed to merge schemas on "type".'))
617+
try {
618+
build(schema)
619+
} catch (error) {
620+
t.ok(error instanceof Error)
621+
t.equal(error.message, 'Failed to merge "type" keyword schemas.')
622+
t.same(error.schemas, [['string'], ['number']])
623+
}
618624
})
619625

620626
test('allOf: throw Error if format mismatch ', (t) => {
621-
t.plan(1)
627+
t.plan(3)
622628

623629
const schema = {
624630
allOf: [
625631
{ format: 'date' },
626632
{ format: 'time' }
627633
]
628634
}
629-
t.throws(() => build(schema), new Error('Failed to merge schemas on "format".'))
630-
})
631-
632-
test('allOf: throw Error if nullable mismatch /1', (t) => {
633-
t.plan(1)
634-
635-
const schema = {
636-
allOf: [
637-
{ nullable: true },
638-
{ nullable: false }
639-
]
640-
}
641-
t.throws(() => build(schema), new Error('Failed to merge schemas on "nullable".'))
642-
})
643-
644-
test('allOf: throw Error if nullable mismatch /2', (t) => {
645-
t.plan(1)
646-
647-
const schema = {
648-
allOf: [
649-
{ nullable: false },
650-
{ nullable: true }
651-
]
635+
try {
636+
build(schema)
637+
} catch (error) {
638+
t.ok(error instanceof Error)
639+
t.equal(error.message, 'Failed to merge "format" keyword schemas.')
640+
t.same(error.schemas, ['date', 'time'])
652641
}
653-
t.throws(() => build(schema), new Error('Failed to merge schemas on "nullable".'))
654642
})
655643

656644
test('recursive nested allOfs', (t) => {

0 commit comments

Comments
 (0)