From 77dee52777ef991db588f5a3ffb78f3b640b1ce5 Mon Sep 17 00:00:00 2001 From: Mitesh Ashar Date: Sun, 24 May 2026 09:28:39 +0530 Subject: [PATCH 1/2] feat: add ajv-keywords as direct dependency Required for uniqueItemProperties keyword support in schema validation. Co-Authored-By: Claude Sonnet 4.6 --- cli.js | 6 ++++++ package-lock.json | 14 ++++++++------ package.json | 3 +++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cli.js b/cli.js index ab590e593e8..7190c499e95 100644 --- a/cli.js +++ b/cli.js @@ -11,6 +11,7 @@ import { Ajv as AjvDraft06And07 } from 'ajv' import _Ajv2019 from 'ajv/dist/2019.js' import _Ajv2020 from 'ajv/dist/2020.js' import _addFormats from 'ajv-formats' +import _ajvKeywords from 'ajv-keywords' import { ajvFormatsDraft2019 } from '@hyperupcall/ajv-formats-draft2019' import schemasafe from '@exodus/schemasafe' import TOML from 'smol-toml' @@ -55,6 +56,9 @@ const Ajv2019 = /** @type {any} */ (_Ajv2019) /** @type {typeof _Ajv2020.default} */ const Ajv2020 = /** @type {any} */ (_Ajv2020) +/** @type {any} */ +const ajvKeywords = _ajvKeywords + /** @type {typeof _addFormats.default} */ const addFormats = /** @type {any} */ (_addFormats) @@ -487,6 +491,8 @@ async function ajvFactory( throw new Error('No JSON Schema version specified') } + ajvKeywords(ajv, 'uniqueItemProperties') + /** * In strict mode, Ajv will throw an error if it does not * recognize any non-standard formats. That is, unrecognized diff --git a/package-lock.json b/package-lock.json index 85e065b6712..13559ba2c24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "schemastore.org", "version": "1.0.0", "license": "Apache 2.0", + "dependencies": { + "ajv-keywords": "^5.1.0" + }, "devDependencies": { "@eslint/js": "^9.26.0", "@exodus/schemasafe": "^1.3.0", @@ -463,6 +466,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -484,8 +488,8 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -550,7 +554,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" @@ -859,6 +862,7 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -1172,7 +1176,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-glob": { @@ -1223,7 +1226,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", - "dev": true, "funding": [ { "type": "github", @@ -1571,7 +1573,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { @@ -1980,6 +1981,7 @@ "integrity": "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -2078,7 +2080,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2405,6 +2406,7 @@ "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 962893a460a..e51cf016514 100644 --- a/package.json +++ b/package.json @@ -48,5 +48,8 @@ "smol-toml": "^1.6.1", "typescript": "^6.0.2", "yaml": "^2.8.3" + }, + "dependencies": { + "ajv-keywords": "^5.1.0" } } From c47f63340790ac4ebfc5e36807c64563686a990e Mon Sep 17 00:00:00 2001 From: Mitesh Ashar Date: Sun, 31 May 2026 15:45:22 +0530 Subject: [PATCH 2/2] fix: move ajv-keywords to devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All other ajv-related packages (ajv, ajv-draft-04, ajv-formats) live in devDependencies — ajv-keywords belongs there too. Co-Authored-By: Claude Sonnet 4.6 --- package-lock.json | 10 +++++++--- package.json | 4 +--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13559ba2c24..8b9be6a2602 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,6 @@ "name": "schemastore.org", "version": "1.0.0", "license": "Apache 2.0", - "dependencies": { - "ajv-keywords": "^5.1.0" - }, "devDependencies": { "@eslint/js": "^9.26.0", "@exodus/schemasafe": "^1.3.0", @@ -20,6 +17,7 @@ "ajv": "^8.18.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0", "chalk": "^5.6.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.8", @@ -488,6 +486,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -554,6 +553,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" @@ -1176,6 +1176,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-glob": { @@ -1226,6 +1227,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "dev": true, "funding": [ { "type": "github", @@ -1573,6 +1575,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { @@ -2080,6 +2083,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" diff --git a/package.json b/package.json index e51cf016514..5ea93b2b807 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "ajv": "^8.18.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0", "chalk": "^5.6.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.8", @@ -48,8 +49,5 @@ "smol-toml": "^1.6.1", "typescript": "^6.0.2", "yaml": "^2.8.3" - }, - "dependencies": { - "ajv-keywords": "^5.1.0" } }