From 19a3206772f488ec0a099e17d1b3ac6492a56610 Mon Sep 17 00:00:00 2001 From: Gitesh Khanna Date: Sun, 6 Apr 2025 00:45:46 +0530 Subject: [PATCH 1/6] allow reusing resolvers. --- index.js | 2 +- types/index.d.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 5721eb4..90b4529 100644 --- a/index.js +++ b/index.js @@ -353,4 +353,4 @@ function mergeSchemas (schemas, options = {}) { return _mergeSchemas(schemas, options) } -module.exports = { mergeSchemas, keywordsResolvers, defaultResolver, ...errors } +module.exports = { mergeSchemas, keywordsResolvers, defaultResolver, resolvers, ...errors } diff --git a/types/index.d.ts b/types/index.d.ts index ab29554..c6dc8b6 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -59,3 +59,15 @@ export function mergeSchemas (schemas: any[], options?: MergeOptions): any export const keywordsResolvers: KeywordResolvers export const defaultResolver: KeywordResolver +export const resolvers: { + arraysIntersection: KeywordResolver; + hybridArraysIntersection: KeywordResolver; + arraysUnion: KeywordResolver; + minNumber: KeywordResolver; + maxNumber: KeywordResolver; + commonMultiple: KeywordResolver; + allEqual: KeywordResolver; + booleanAnd: KeywordResolver; + booleanOr: KeywordResolver; + skip: KeywordResolver; +}; From 3036aba6394f54dd780335bfb289dec7be8bb424 Mon Sep 17 00:00:00 2001 From: Gitesh Khanna Date: Mon, 7 Apr 2025 23:44:57 +0530 Subject: [PATCH 2/6] type tests + lint fixes --- types/index.d.ts | 2 +- types/index.test-d.ts | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index c6dc8b6..8754569 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -70,4 +70,4 @@ export const resolvers: { booleanAnd: KeywordResolver; booleanOr: KeywordResolver; skip: KeywordResolver; -}; +} diff --git a/types/index.test-d.ts b/types/index.test-d.ts index 7d82a14..e6eace9 100644 --- a/types/index.test-d.ts +++ b/types/index.test-d.ts @@ -1,4 +1,4 @@ -import { mergeSchemas, MergeOptions } from '..' +import { mergeSchemas, MergeOptions, resolvers, KeywordResolver } from '..' import { expectType } from 'tsd' { @@ -50,3 +50,14 @@ import { expectType } from 'tsd' mergeSchemas([schema1, schema2], mergeOptions) } + +expectType(resolvers.arraysIntersection) +expectType(resolvers.hybridArraysIntersection) +expectType(resolvers.arraysUnion) +expectType(resolvers.minNumber) +expectType(resolvers.maxNumber) +expectType(resolvers.commonMultiple) +expectType(resolvers.allEqual) +expectType(resolvers.booleanAnd) +expectType(resolvers.booleanOr) +expectType(resolvers.skip) From 1e671c964c786cc9c28dcb7d80463f55958123ba Mon Sep 17 00:00:00 2001 From: Gitesh Khanna Date: Sat, 19 Apr 2025 19:28:45 +0530 Subject: [PATCH 3/6] add tests for exporting resolvers --- test/exports.test.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 test/exports.test.js diff --git a/test/exports.test.js b/test/exports.test.js new file mode 100644 index 0000000..1c6332e --- /dev/null +++ b/test/exports.test.js @@ -0,0 +1,22 @@ +const { resolvers } = require('../index') +const assert = require('node:assert/strict') +const { test } = require('node:test') + +test('Exported resolvers: should export all expected resolvers', () => { + assert(Object.prototype.hasOwnProperty.call(resolvers, 'arraysIntersection')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'hybridArraysIntersection')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'arraysUnion')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'minNumber')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'maxNumber')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'commonMultiple')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'allEqual')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'booleanAnd')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'booleanOr')) + assert(Object.prototype.hasOwnProperty.call(resolvers, 'skip')) +}) + +test('Exported resolvers: should ensure each resolver is a function', () => { + Object.values(resolvers).forEach((resolver) => { + assert.strictEqual(typeof resolver, 'function') + }) +}) From 3aae65eed17c3034a4419dce7137db3992dcd996 Mon Sep 17 00:00:00 2001 From: Gitesh Khanna Date: Sun, 20 Apr 2025 19:35:45 +0530 Subject: [PATCH 4/6] doc update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b5120cc..d28f57a 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Builds a logical conjunction (AND) of multiple [JSON schemas](https://json-schem #### resolvers -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](#keywordresolver-keyword-values-mergedschema-parentschemas-options). +A list of default resolvers that __merge-json-schema__ uses to merge JSON schemas. You can override the default resolvers by passing resolver functions against the keywords in the `options` argument of `mergeSchemas`. You may either use your own custom resolver functions or utilise the ones exposed as `resolvers` from the library. See [keywordResolver](#keywordresolver-keyword-values-mergedschema-parentschemas-options). #### defaultResolver From 11e94b214df74a37abf40d7529c4bfe230cd91b2 Mon Sep 17 00:00:00 2001 From: Gitesh Khanna Date: Sun, 20 Apr 2025 19:47:52 +0530 Subject: [PATCH 5/6] adding example in the doc --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d28f57a..9cd700a 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,21 @@ Builds a logical conjunction (AND) of multiple [JSON schemas](https://json-schem #### resolvers -A list of default resolvers that __merge-json-schema__ uses to merge JSON schemas. You can override the default resolvers by passing resolver functions against the keywords in the `options` argument of `mergeSchemas`. You may either use your own custom resolver functions or utilise the ones exposed as `resolvers` from the library. See [keywordResolver](#keywordresolver-keyword-values-mergedschema-parentschemas-options). +A list of default resolvers that __merge-json-schema__ uses to merge JSON schemas. You can override the default resolvers by passing resolver functions against the keywords in the `options` argument of `mergeSchemas`. You may either pass in your own custom resolver functions or utilise the ones exposed via the `resolvers` object from the library. See [keywordResolver](#keywordresolver-keyword-values-mergedschema-parentschemas-options). + +__Example:__ Overriding the default resolver(intersection) with a union function for the `enum` keyword. + +```javascript +const schemaMerger = require('@fastify/merge-json-schemas'); +const mergedSchema = schemaMerger.mergeSchemas( + schemas, + { + resolvers: { + enum: schemaMerger.resolvers.arraysUnion + }, + } +); +``` #### defaultResolver From 3dc7e66836cde390037457c731eabca8757c5076 Mon Sep 17 00:00:00 2001 From: Frazer Smith Date: Fri, 2 May 2025 08:26:29 +0100 Subject: [PATCH 6/6] Update README.md Signed-off-by: Frazer Smith --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9cd700a..d77d33b 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Builds a logical conjunction (AND) of multiple [JSON schemas](https://json-schem #### resolvers -A list of default resolvers that __merge-json-schema__ uses to merge JSON schemas. You can override the default resolvers by passing resolver functions against the keywords in the `options` argument of `mergeSchemas`. You may either pass in your own custom resolver functions or utilise the ones exposed via the `resolvers` object from the library. See [keywordResolver](#keywordresolver-keyword-values-mergedschema-parentschemas-options). +A list of default resolvers that __merge-json-schema__ uses to merge JSON schemas. You can override the default resolvers by passing resolver functions against the keywords in the `options` argument of `mergeSchemas`. You may either pass in your own custom resolver functions or utilize the ones exposed via the `resolvers` object from the library. See [keywordResolver](#keywordresolver-keyword-values-mergedschema-parentschemas-options). __Example:__ Overriding the default resolver(intersection) with a union function for the `enum` keyword.