@contractual/differs.openapi 0.1.0-beta.3 → 0.1.0-beta.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"differ.d.ts","sourceRoot":"","sources":["../src/differ.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAkB,UAAU,EAAa,MAAM,oBAAoB,CAAC;AAKhF;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAK/F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,UAAU,CAGZ"}
1
+ {"version":3,"file":"differ.d.ts","sourceRoot":"","sources":["../src/differ.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAkB,UAAU,EAAa,MAAM,oBAAoB,CAAC;AAMhF;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAK/F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,UAAU,CAiBZ"}
package/dist/differ.js CHANGED
@@ -7,6 +7,7 @@
7
7
  import { assembleResult, classify, classifyPropertyAdded } from '@contractual/differs.core';
8
8
  import { resolveOpenApiSpec } from './resolver.js';
9
9
  import { diffStructural } from './structural.js';
10
+ import { classifyPropertyAddition, supportedDialect } from './property-addition.js';
10
11
  /**
11
12
  * Diff two OpenAPI specification files
12
13
  *
@@ -28,9 +29,14 @@ export async function diffOpenApi(oldSpecPath, newSpecPath) {
28
29
  */
29
30
  export function diffOpenApiObjects(oldSpec, newSpec) {
30
31
  const rawChanges = diffStructural(oldSpec, newSpec);
31
- return assembleResult(rawChanges, newSpec, { classifyFn: classifyOpenApiChange });
32
+ const oldUsesNullable = typeof oldSpec.openapi === 'string' && oldSpec.openapi.startsWith('3.0.');
33
+ const newUsesNullable = typeof newSpec.openapi === 'string' && newSpec.openapi.startsWith('3.0.');
34
+ const supportedDocumentDialects = [oldSpec, newSpec].every((spec) => !Object.hasOwn(spec, 'jsonSchemaDialect') || supportedDialect(spec.jsonSchemaDialect));
35
+ return assembleResult(rawChanges, newSpec, {
36
+ classifyFn: (change, schema) => classifyOpenApiChange(change, schema, oldUsesNullable, newUsesNullable, supportedDocumentDialects),
37
+ });
32
38
  }
33
- function classifyOpenApiChange(change, newSpec) {
39
+ function classifyOpenApiChange(change, newSpec, oldUsesNullable, newUsesNullable, supportedDocumentDialects) {
34
40
  if (change.enumConstraintEquivalent)
35
41
  return 'non-breaking';
36
42
  // oneOf accepts exactly one matching branch. Either narrowing or widening
@@ -62,6 +68,8 @@ function classifyOpenApiChange(change, newSpec) {
62
68
  }
63
69
  }
64
70
  if (change.type === 'property-added') {
71
+ if (change.propertyAddition)
72
+ return classifyPropertyAddition(change, oldUsesNullable, newUsesNullable, supportedDocumentDialects);
65
73
  return classifyPropertyAdded(change, newSpec);
66
74
  }
67
75
  return classify(change);
@@ -1 +1 @@
1
- {"version":3,"file":"differ.js","sourceRoot":"","sources":["../src/differ.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,WAAmB;IACxE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAEtD,OAAO,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAgC,EAChC,OAAgC;IAEhC,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAiB,EAAE,OAAgB;IAChE,IAAI,MAAM,CAAC,wBAAwB;QAAE,OAAO,cAAc,CAAC;IAE3D,0EAA0E;IAC1E,8EAA8E;IAC9E,0EAA0E;IAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1E,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxC,4EAA4E;QAC5E,uEAAuE;QACvE,kEAAkE;QAClE,IACE,MAAM,CAAC,IAAI,KAAK,oBAAoB;YACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC9B,MAAM,CAAC,QAAQ,KAAK,SAAS,EAC7B,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACzE,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACzE,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACvC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACrC,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACrC,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"differ.js","sourceRoot":"","sources":["../src/differ.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ChangeSeverity, RawChange } from '@contractual/types';
2
+ /**
3
+ * Prove compatibility for named property additions using their actual parents.
4
+ * Unproved schema implications are conservative breaking findings, not an
5
+ * assertion that this implements general JSON Schema subsumption.
6
+ */
7
+ export declare function classifyPropertyAddition(change: RawChange, oldUsesNullable: boolean, newUsesNullable: boolean, supportedDocumentDialects?: boolean): ChangeSeverity;
8
+ export declare function supportedDialect(dialect: unknown): boolean;
9
+ //# sourceMappingURL=property-addition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-addition.d.ts","sourceRoot":"","sources":["../src/property-addition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAmDpE;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,OAAO,EACxB,eAAe,EAAE,OAAO,EACxB,yBAAyB,UAAO,GAC/B,cAAc,CAwChB;AA6ED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQ1D"}
@@ -0,0 +1,196 @@
1
+ import { deepEqual, isSchemaObject } from '@contractual/differs.core';
2
+ // These are annotations under the existing differ policy, including format.
3
+ const ANNOTATIONS = new Set([
4
+ 'title',
5
+ 'description',
6
+ 'default',
7
+ 'examples',
8
+ '$comment',
9
+ 'deprecated',
10
+ 'readOnly',
11
+ 'writeOnly',
12
+ 'format',
13
+ 'contentEncoding',
14
+ 'contentMediaType',
15
+ 'contentSchema',
16
+ ]);
17
+ // Independent assertions can be retained alongside extra constraints. Object
18
+ // applicators such as additionalProperties cannot: properties changes their scope.
19
+ const INDEPENDENT_ASSERTIONS = new Set([
20
+ 'type',
21
+ 'enum',
22
+ 'const',
23
+ 'minimum',
24
+ 'maximum',
25
+ 'exclusiveMinimum',
26
+ 'exclusiveMaximum',
27
+ 'multipleOf',
28
+ 'minLength',
29
+ 'maxLength',
30
+ 'pattern',
31
+ 'minItems',
32
+ 'maxItems',
33
+ 'uniqueItems',
34
+ 'minProperties',
35
+ 'maxProperties',
36
+ 'required',
37
+ ]);
38
+ const UNSUPPORTED_PARENT_KEYS = [
39
+ '$ref',
40
+ 'propertyNames',
41
+ 'dependentSchemas',
42
+ 'dependentRequired',
43
+ 'dependencies',
44
+ 'unevaluatedProperties',
45
+ 'unevaluatedItems',
46
+ ];
47
+ /**
48
+ * Prove compatibility for named property additions using their actual parents.
49
+ * Unproved schema implications are conservative breaking findings, not an
50
+ * assertion that this implements general JSON Schema subsumption.
51
+ */
52
+ export function classifyPropertyAddition(change, oldUsesNullable, newUsesNullable, supportedDocumentDialects = true) {
53
+ const context = change.propertyAddition;
54
+ if (!context || !change.schemaDirection)
55
+ return 'breaking';
56
+ // Equal nested schemas need not have equal semantics across dialect changes.
57
+ if (!supportedDocumentDialects || oldUsesNullable !== newUsesNullable)
58
+ return 'breaking';
59
+ if (context.schemaDialects?.some((dialect) => oldUsesNullable || !supportedDialect(dialect)))
60
+ return 'breaking';
61
+ const { name, oldParent, newParent } = context;
62
+ if (context.uncertain ||
63
+ UNSUPPORTED_PARENT_KEYS.some((key) => Object.hasOwn(oldParent, key) || Object.hasOwn(newParent, key)))
64
+ return 'breaking';
65
+ const oldRequired = Array.isArray(oldParent.required) && oldParent.required.includes(name);
66
+ const newRequired = Array.isArray(newParent.required) && newParent.required.includes(name);
67
+ if (change.schemaDirection === 'input' && newRequired && !oldRequired)
68
+ return 'breaking';
69
+ const oldConstraints = matchingPatterns(oldParent.patternProperties, name);
70
+ const newConstraints = matchingPatterns(newParent.patternProperties, name);
71
+ if (!oldConstraints || !newConstraints)
72
+ return 'breaking';
73
+ // patternProperties always applies to matching names, even when the property
74
+ // also appears in properties. additionalProperties applies only otherwise.
75
+ if (oldConstraints.length === 0)
76
+ oldConstraints.push(oldParent.additionalProperties ?? true);
77
+ newConstraints.push(change.newValue);
78
+ if ([...oldConstraints, ...newConstraints].some((schema) => containsUnsupportedDialect(schema, oldUsesNullable)))
79
+ return 'breaking';
80
+ const compatible = change.schemaDirection === 'input'
81
+ ? implies(oldConstraints, newConstraints, oldUsesNullable)
82
+ : implies(newConstraints, oldConstraints, oldUsesNullable);
83
+ return compatible ? 'non-breaking' : 'breaking';
84
+ }
85
+ function matchingPatterns(patterns, name) {
86
+ if (patterns === undefined)
87
+ return [];
88
+ if (!isSchemaObject(patterns))
89
+ return null;
90
+ try {
91
+ return Object.entries(patterns)
92
+ .filter(([pattern]) => new RegExp(pattern, 'u').test(name))
93
+ .map(([, schema]) => schema);
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ }
99
+ function assertions(schema, usesNullable) {
100
+ if (!isSchemaObject(schema))
101
+ return schema;
102
+ const result = Object.fromEntries(Object.entries(schema).filter(([key]) => !ANNOTATIONS.has(key) && key !== 'nullable' && key !== '$schema'));
103
+ // OpenAPI 3.0 adds null only to an explicit, local type. Other assertions,
104
+ // including enum, still apply. In 3.1 nullable is not a validation keyword.
105
+ if (usesNullable && schema.nullable === true && typeof schema.type === 'string') {
106
+ result.type = [schema.type, 'null'];
107
+ }
108
+ return result;
109
+ }
110
+ function unconstrained(schema) {
111
+ return schema === true || (isSchemaObject(schema) && Object.keys(schema).length === 0);
112
+ }
113
+ /** A bounded proof over conjunctions; unsupported implications remain unproved. */
114
+ function implies(source, target, usesNullable) {
115
+ const from = source.map((schema) => assertions(schema, usesNullable));
116
+ const to = target.map((schema) => assertions(schema, usesNullable));
117
+ if (from.includes(false))
118
+ return true;
119
+ return to.every((constraint) => {
120
+ if (unconstrained(constraint))
121
+ return true;
122
+ if (!isSchemaObject(constraint))
123
+ return from.some((item) => deepEqual(item, constraint));
124
+ if (containsReference(constraint) || from.some((item) => containsReference(item)))
125
+ return false;
126
+ if (from.some((item) => deepEqual(item, constraint)))
127
+ return true;
128
+ // Each independent target assertion must follow from a source constraint.
129
+ // Matching patterns can contribute different assertions; types allow subsets.
130
+ return Object.entries(constraint).every(([key, value]) => INDEPENDENT_ASSERTIONS.has(key) &&
131
+ from.some((item) => isSchemaObject(item) &&
132
+ Object.hasOwn(item, key) &&
133
+ (key === 'type' ? typeImplies(item[key], value) : deepEqual(item[key], value))));
134
+ });
135
+ }
136
+ function typeImplies(source, target) {
137
+ const from = Array.isArray(source) ? source : [source];
138
+ const to = Array.isArray(target) ? target : [target];
139
+ return from.every((type) => to.includes(type) || (type === 'integer' && to.includes('number')));
140
+ }
141
+ // Equal unresolved references can denote different schemas in old/new documents.
142
+ function containsReference(value, seen = new Set()) {
143
+ if (typeof value !== 'object' || value === null)
144
+ return false;
145
+ if (seen.has(value))
146
+ return true;
147
+ seen.add(value);
148
+ const found = Object.entries(value).some(([key, child]) => key === '$ref' || key === '$dynamicRef' || containsReference(child, seen));
149
+ seen.delete(value);
150
+ return found;
151
+ }
152
+ // Only dialects whose assertion semantics this bounded proof implements.
153
+ export function supportedDialect(dialect) {
154
+ return (typeof dialect === 'string' &&
155
+ [
156
+ 'https://spec.openapis.org/oas/3.1/dialect/base',
157
+ 'https://json-schema.org/draft/2020-12/schema',
158
+ ].includes(dialect.replace(/#$/, '')));
159
+ }
160
+ // Traverse schema positions only: annotations, enum/const values, and names in
161
+ // property maps can contain arbitrary JSON, including a literal "$schema" key.
162
+ function containsUnsupportedDialect(value, usesNullable, seen = new Set()) {
163
+ if (!isSchemaObject(value))
164
+ return false;
165
+ if (seen.has(value))
166
+ return true;
167
+ if (Object.hasOwn(value, '$schema') && (usesNullable || !supportedDialect(value.$schema)))
168
+ return true;
169
+ seen.add(value);
170
+ const singleSchemas = [
171
+ 'additionalProperties',
172
+ 'unevaluatedProperties',
173
+ 'propertyNames',
174
+ 'items',
175
+ 'contains',
176
+ 'additionalItems',
177
+ 'unevaluatedItems',
178
+ 'not',
179
+ 'if',
180
+ 'then',
181
+ 'else',
182
+ ].flatMap((key) => (Array.isArray(value[key]) ? value[key] : [value[key]]));
183
+ const schemaArrays = ['allOf', 'anyOf', 'oneOf', 'prefixItems'].flatMap((key) => Array.isArray(value[key]) ? value[key] : []);
184
+ const schemaMaps = [
185
+ 'properties',
186
+ 'patternProperties',
187
+ '$defs',
188
+ 'definitions',
189
+ 'dependentSchemas',
190
+ 'dependencies',
191
+ ].flatMap((key) => (isSchemaObject(value[key]) ? Object.values(value[key]) : []));
192
+ const found = [...singleSchemas, ...schemaArrays, ...schemaMaps].some((schema) => containsUnsupportedDialect(schema, usesNullable, seen));
193
+ seen.delete(value);
194
+ return found;
195
+ }
196
+ //# sourceMappingURL=property-addition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-addition.js","sourceRoot":"","sources":["../src/property-addition.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@contractual/differs.openapi",
3
3
  "private": false,
4
- "version": "0.1.0-beta.3",
4
+ "version": "0.1.0-beta.4",
5
5
  "description": "OpenAPI 3.0/3.1 breaking change detection for Contractual",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -30,8 +30,8 @@
30
30
  "README.md"
31
31
  ],
32
32
  "dependencies": {
33
- "@contractual/differs.core": "0.1.0-beta.2",
34
- "@contractual/types": "0.1.0-beta.2",
33
+ "@contractual/differs.core": "0.1.0-beta.3",
34
+ "@contractual/types": "0.1.0-beta.3",
35
35
  "@redocly/openapi-core": "^2.72.1"
36
36
  },
37
37
  "devDependencies": {
@@ -42,5 +42,5 @@
42
42
  "access": "public",
43
43
  "provenance": true
44
44
  },
45
- "gitHead": "90c5cd6a9b16f10521fe90c1dd37af431c836da2"
45
+ "gitHead": "ea95db232152938072c9829ab9b89ecb6107df9a"
46
46
  }