From aced2dada22c5e74246409341ad1f54c04b07f97 Mon Sep 17 00:00:00 2001 From: ivan-tymoshenko Date: Tue, 14 Jun 2022 16:36:32 +0300 Subject: [PATCH 1/2] Remove schema from external schemas --- index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/index.js b/index.js index 2f14dd0..cde7b05 100644 --- a/index.js +++ b/index.js @@ -10,6 +10,10 @@ function SerializerSelector () { } function responseSchemaCompiler (fjsOpts, { schema /* method, url, httpStatus */ }) { + if (fjsOpts.schema && schema.$id) { + fjsOpts.schema = { ...fjsOpts.schema } + delete fjsOpts.schema[schema.$id] + } return fastJsonStringify(schema, fjsOpts) } From 5a31483381240c4c285935673088ac5e0bd5dbcd Mon Sep 17 00:00:00 2001 From: ivan-tymoshenko Date: Sun, 19 Jun 2022 14:59:07 +0300 Subject: [PATCH 2/2] test: add test for input schema duplicate --- index.js | 2 +- test/duplicate-schema.test.js | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 test/duplicate-schema.test.js diff --git a/index.js b/index.js index cde7b05..836b4c7 100644 --- a/index.js +++ b/index.js @@ -10,7 +10,7 @@ function SerializerSelector () { } function responseSchemaCompiler (fjsOpts, { schema /* method, url, httpStatus */ }) { - if (fjsOpts.schema && schema.$id) { + if (fjsOpts.schema && schema.$id && fjsOpts.schema[schema.$id]) { fjsOpts.schema = { ...fjsOpts.schema } delete fjsOpts.schema[schema.$id] } diff --git a/test/duplicate-schema.test.js b/test/duplicate-schema.test.js new file mode 100644 index 0000000..d6904ed --- /dev/null +++ b/test/duplicate-schema.test.js @@ -0,0 +1,26 @@ +'use strict' + +const t = require('tap') +const FjsCompiler = require('../index') + +t.test('Use input schema duplicate in the externalSchemas', async t => { + t.plan(1) + const externalSchemas = { + schema1: { + $id: 'schema1', + type: 'number' + }, + schema2: { + $id: 'schema2', + type: 'string' + } + } + + const factory = FjsCompiler() + const compiler = factory(externalSchemas) + + compiler({ schema: externalSchemas.schema1 }) + compiler({ schema: externalSchemas.schema2 }) + + t.pass() +})