json-schema-compatibility-checker 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2021 -0
- package/dist/chunk-2vpph7cy.js +5 -0
- package/dist/chunk-2vpph7cy.js.map +10 -0
- package/dist/chunk-cspd2zw4.js +6 -0
- package/dist/chunk-cspd2zw4.js.map +10 -0
- package/dist/chunk-e4501gq7.js +5 -0
- package/dist/chunk-e4501gq7.js.map +10 -0
- package/dist/chunk-g0pfcnm5.js +5 -0
- package/dist/chunk-g0pfcnm5.js.map +10 -0
- package/dist/chunk-h080ggvf.js +5 -0
- package/dist/chunk-h080ggvf.js.map +10 -0
- package/dist/chunk-pw49kj6f.js +5 -0
- package/dist/chunk-pw49kj6f.js.map +10 -0
- package/dist/chunk-v5tqyc67.js +5 -0
- package/dist/chunk-v5tqyc67.js.map +10 -0
- package/dist/chunk-vcwsxmk4.js +5 -0
- package/dist/chunk-vcwsxmk4.js.map +10 -0
- package/dist/chunk-w7qcey06.js +5 -0
- package/dist/chunk-w7qcey06.js.map +10 -0
- package/dist/condition-resolver.d.ts +26 -0
- package/dist/condition-resolver.js +4 -0
- package/dist/condition-resolver.js.map +9 -0
- package/dist/differ.d.ts +15 -0
- package/dist/differ.js +4 -0
- package/dist/differ.js.map +9 -0
- package/dist/format-validator.d.ts +78 -0
- package/dist/format-validator.js +4 -0
- package/dist/format-validator.js.map +9 -0
- package/dist/formatter.d.ts +22 -0
- package/dist/formatter.js +4 -0
- package/dist/formatter.js.map +9 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +9 -0
- package/dist/json-schema-compatibility-checker.d.ts +73 -0
- package/dist/json-schema-compatibility-checker.js +4 -0
- package/dist/json-schema-compatibility-checker.js.map +9 -0
- package/dist/merge-engine.d.ts +30 -0
- package/dist/merge-engine.js +4 -0
- package/dist/merge-engine.js.map +9 -0
- package/dist/normalizer.d.ts +18 -0
- package/dist/normalizer.js +4 -0
- package/dist/normalizer.js.map +9 -0
- package/dist/pattern-subset.d.ts +55 -0
- package/dist/pattern-subset.js +4 -0
- package/dist/pattern-subset.js.map +9 -0
- package/dist/subset-checker.d.ts +76 -0
- package/dist/subset-checker.js +4 -0
- package/dist/subset-checker.js.map +9 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +9 -0
- package/package.json +50 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { JSONSchema7Definition } from "json-schema";
|
|
2
|
+
import type { MergeEngine } from "./merge-engine";
|
|
3
|
+
import type { SubsetResult } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Type de branchement détecté dans un schema.
|
|
6
|
+
*
|
|
7
|
+
* Point 6 — Distingue `anyOf` de `oneOf` pour produire des messages
|
|
8
|
+
* de diff plus précis. `"none"` indique un schema atomique (pas de branches).
|
|
9
|
+
*
|
|
10
|
+
* Note : la sémantique d'exclusivité de `oneOf` n'est pas vérifiée
|
|
11
|
+
* (ce serait un problème NP-hard en général). Le checker traite `oneOf`
|
|
12
|
+
* comme `anyOf` pour le subset checking, ce qui est correct pour le cas
|
|
13
|
+
* `sub ⊆ sup` mais peut produire des faux-positifs si les branches
|
|
14
|
+
* du sub se chevauchent.
|
|
15
|
+
*/
|
|
16
|
+
export type BranchType = "anyOf" | "oneOf" | "none";
|
|
17
|
+
export interface BranchResult {
|
|
18
|
+
/** Les branches extraites du schema */
|
|
19
|
+
branches: JSONSchema7Definition[];
|
|
20
|
+
/** Le type de branchement détecté */
|
|
21
|
+
type: BranchType;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extrait les branches d'un schema et le type de branchement.
|
|
25
|
+
*
|
|
26
|
+
* Retourne les éléments de `anyOf`/`oneOf` s'ils existent, sinon retourne
|
|
27
|
+
* le schema lui-même dans un tableau avec type `"none"`.
|
|
28
|
+
*
|
|
29
|
+
* Point 6 — Distingue `anyOf` de `oneOf` dans les paths de diff.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getBranchesTyped(def: JSONSchema7Definition): BranchResult;
|
|
32
|
+
/**
|
|
33
|
+
* Vérifie si `sub ⊆ sup` pour deux schemas sans anyOf/oneOf (ou avec
|
|
34
|
+
* anyOf/oneOf uniquement côté sup).
|
|
35
|
+
*
|
|
36
|
+
* Point 7 — Intègre un pré-check `not` étendu (`evaluateNot`) avant le merge.
|
|
37
|
+
*
|
|
38
|
+
* Quand `evaluateNot` confirme la compatibilité (`true`), on retire le `not`
|
|
39
|
+
* de `sup` avant le merge pour éviter que le merge engine ajoute une contrainte
|
|
40
|
+
* `not` que `sub` n'a pas (ce qui ferait échouer `isEqual(merged, sub)`).
|
|
41
|
+
*
|
|
42
|
+
* Pattern pre-check — Quand les deux schemas ont des patterns différents,
|
|
43
|
+
* vérifie l'inclusion par échantillonnage via `isPatternSubset`. Si confirmé,
|
|
44
|
+
* retire le pattern de sup avant le merge (même stratégie que pour `not`).
|
|
45
|
+
*
|
|
46
|
+
* Principe : merge(sub, sup) ≡ sub → sub est un sous-ensemble de sup.
|
|
47
|
+
*
|
|
48
|
+
* Utilise `_.some`, `_.has`, `_.omit`, `_.keys`, `_.isEmpty` pour la logique.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isAtomicSubsetOf(sub: JSONSchema7Definition, sup: JSONSchema7Definition, engine: MergeEngine): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Vérifie `sub ⊆ sup` pour un sub qui a des branches (anyOf/oneOf).
|
|
53
|
+
* Chaque branche de sub doit être acceptée par sup.
|
|
54
|
+
*
|
|
55
|
+
* Point 6 — Utilise `getBranchesTyped` pour distinguer `anyOf[i]` de
|
|
56
|
+
* `oneOf[i]` dans les paths de diff.
|
|
57
|
+
*
|
|
58
|
+
* Utilise `_.every` / `_.flatMap` / `_.map` pour une itération idiomatique.
|
|
59
|
+
*/
|
|
60
|
+
export declare function checkBranchedSub(subBranches: JSONSchema7Definition[], sup: JSONSchema7Definition, engine: MergeEngine, branchType?: BranchType): SubsetResult;
|
|
61
|
+
/**
|
|
62
|
+
* Vérifie `sub ⊆ sup` pour un sup qui a des branches (anyOf/oneOf).
|
|
63
|
+
* Au moins une branche de sup doit accepter sub.
|
|
64
|
+
*
|
|
65
|
+
* Point 6 — Utilise le type de branche de sup pour des messages plus précis.
|
|
66
|
+
*
|
|
67
|
+
* Utilise `_.some` pour trouver la première branche compatible.
|
|
68
|
+
*/
|
|
69
|
+
export declare function checkBranchedSup(sub: JSONSchema7Definition, supBranches: JSONSchema7Definition[], engine: MergeEngine, branchType?: BranchType): SubsetResult;
|
|
70
|
+
/**
|
|
71
|
+
* Vérifie `sub ⊆ sup` pour deux schemas atomiques (sans anyOf/oneOf).
|
|
72
|
+
* Utilise `mergeOrThrow` pour capturer les erreurs d'incompatibilité.
|
|
73
|
+
*
|
|
74
|
+
* Utilise `_.isEqual` via engine.isEqual pour la comparaison structurelle.
|
|
75
|
+
*/
|
|
76
|
+
export declare function checkAtomic(sub: JSONSchema7Definition, sup: JSONSchema7Definition, engine: MergeEngine): SubsetResult;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{b as a,c as b,d as c,e as d,f as e}from"./chunk-e4501gq7.js";import"./chunk-vcwsxmk4.js";import"./chunk-v5tqyc67.js";import"./chunk-g0pfcnm5.js";import"./chunk-pw49kj6f.js";export{b as isAtomicSubsetOf,a as getBranchesTyped,d as checkBranchedSup,c as checkBranchedSub,e as checkAtomic};
|
|
2
|
+
|
|
3
|
+
//# debugId=E49CFA87DE09786B64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=subset-checker.js.map
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { JSONSchema7, JSONSchema7Definition } from "json-schema";
|
|
2
|
+
export interface SchemaDiff {
|
|
3
|
+
/** Chemin JSON-path-like vers la divergence (ex: "properties.user.required") */
|
|
4
|
+
path: string;
|
|
5
|
+
/** Type de divergence */
|
|
6
|
+
type: "added" | "removed" | "changed";
|
|
7
|
+
/** Valeur dans le schema original (sub) */
|
|
8
|
+
expected: unknown;
|
|
9
|
+
/** Valeur dans le schema mergé (intersection) */
|
|
10
|
+
actual: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface SubsetResult {
|
|
13
|
+
/** true si sub ⊆ sup (toute valeur valide pour sub est valide pour sup) */
|
|
14
|
+
isSubset: boolean;
|
|
15
|
+
/** Le schema résultant de l'intersection allOf(sub, sup), ou null si incompatible */
|
|
16
|
+
merged: JSONSchema7Definition | null;
|
|
17
|
+
/** Différences structurelles détectées entre sub et l'intersection */
|
|
18
|
+
diffs: SchemaDiff[];
|
|
19
|
+
}
|
|
20
|
+
export interface ConnectionResult extends SubsetResult {
|
|
21
|
+
/** Direction lisible du check */
|
|
22
|
+
direction: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ResolvedConditionResult {
|
|
25
|
+
/** Le schema avec les if/then/else résolus (aplatis) */
|
|
26
|
+
resolved: JSONSchema7;
|
|
27
|
+
/** La branche qui a été appliquée ("then" | "else" | null si pas de condition) */
|
|
28
|
+
branch: "then" | "else" | null;
|
|
29
|
+
/** Le discriminant utilisé pour résoudre */
|
|
30
|
+
discriminant: Record<string, unknown>;
|
|
31
|
+
}
|
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "json-schema-compatibility-checker",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"description": "A tool to check compatibility between two JSON Schemas.",
|
|
6
|
+
"author": {
|
|
7
|
+
"email": "arthurtinseau@live.fr",
|
|
8
|
+
"url": "https://github.com/atinseau/json-schema-compatibility-checker",
|
|
9
|
+
"name": "atinseau"
|
|
10
|
+
},
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"types": "dist/index.d.ts",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"README.md"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"postinstall": "lefthook install",
|
|
27
|
+
"build:bun": "bun build src/*.ts --outdir ./dist --production --minify --root src --sourcemap --splitting --target node --format esm --packages external --chunk-naming='chunk-[hash].js'",
|
|
28
|
+
"build:tsc": "tsc --project tsconfig.build.json",
|
|
29
|
+
"build": "bun --parallel build:bun build:tsc",
|
|
30
|
+
"prepublishOnly": "bun run build",
|
|
31
|
+
"check-types": "tsc --noEmit",
|
|
32
|
+
"check": "biome check --write --unsafe",
|
|
33
|
+
"test": "bun test"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@biomejs/biome": "2.4.3",
|
|
37
|
+
"@types/bun": "latest",
|
|
38
|
+
"@types/lodash": "4.17.23",
|
|
39
|
+
"lefthook": "^2.1.1"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"typescript": "^5"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@x0k/json-schema-merge": "1.0.2",
|
|
46
|
+
"class-validator": "0.14.3",
|
|
47
|
+
"lodash": "4.17.23",
|
|
48
|
+
"randexp": "0.5.3"
|
|
49
|
+
}
|
|
50
|
+
}
|