@erenthedeveloper0/zen-openapi 0.1.0-alpha.1 → 0.1.0-alpha.3

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 CHANGED
@@ -61,6 +61,12 @@ narrowing a request type or renaming an `operationId` is breaking; adding an
61
61
  optional response field is not. Run it in CI against a committed baseline and an
62
62
  API change is reviewed as an API change.
63
63
 
64
+ What is compared is what a schema says, not how a converter spelled it: zod
65
+ 4.4's `anyOf: [{ type: 'string' }, { type: 'null' }]` and 4.6's
66
+ `type: ['string', 'null']` are one schema, a field removed from inside a
67
+ nullable object is breaking, and a recursive component is compared down to
68
+ where it repeats.
69
+
64
70
  ## Options
65
71
 
66
72
  `title` and `version` are required. Also: `servers`, `tags`, `security`,
package/dist/diff.js CHANGED
@@ -153,31 +153,136 @@ function diffResponses(from, to, where, ctx) {
153
153
  }
154
154
  }
155
155
  }
156
- function diffSchema(rawBefore, rawAfter, direction, where, ctx, seen) {
157
- const guard = `${rawBefore.$ref ?? ''}|${rawAfter.$ref ?? ''}|${where}`;
158
- if (rawBefore.$ref !== undefined || rawAfter.$ref !== undefined) {
159
- if (seen.has(guard))
156
+ /**
157
+ * Compare two schemas, as what they say rather than as how they are spelled.
158
+ *
159
+ * `active` holds the components being compared further up *this* descent, and
160
+ * nothing else. A component that contains itself — a tree, a comment thread —
161
+ * is compared once per path into it, and the recursion stops where it would
162
+ * start repeating. The guard used to be a set of `ref|ref|location` keys, and a
163
+ * location grows by a segment at every level, so it never repeated: any
164
+ * recursive schema overflowed the stack, which is how `openapi:check` died on an
165
+ * API whose response was a tree. Keyed on the pair alone, across the whole
166
+ * operation, it would also have stopped at a component's *second use*, and a
167
+ * change is reported once per use (§29.7) — `billing` and `shipping` are two
168
+ * places a client reads an `Address`.
169
+ */
170
+ function diffSchema(rawBefore, rawAfter, direction, where, ctx, active) {
171
+ const before = viewOf(ctx.before, rawBefore);
172
+ const after = viewOf(ctx.after, rawAfter);
173
+ const key = before.ref === undefined && after.ref === undefined ? null : `${before.ref ?? ''}|${after.ref ?? ''}`;
174
+ if (key !== null) {
175
+ if (active.has(key))
160
176
  return;
161
- seen.add(guard);
177
+ active.add(key);
162
178
  }
163
- const before = ctx.before.resolve(rawBefore);
164
- const after = ctx.after.resolve(rawAfter);
165
- diffTypes(before, after, direction, where, ctx);
166
- diffEnum(before, after, direction, where, ctx);
167
- if (before.format !== after.format) {
168
- ctx.changes.push(breaking('OAS_FORMAT_CHANGED', `Format changed from ${before.format ?? 'none'} to ${after.format ?? 'none'}.`, where));
179
+ try {
180
+ diffTypes(before.types, after.types, direction, where, ctx);
181
+ // Several branches left after a union is read: their types were compared
182
+ // above, and nothing else can be — which branch of one document is which of
183
+ // the other is not knowable in general (§28.8).
184
+ if (before.union || after.union)
185
+ return;
186
+ diffEnum(before.node, after.node, direction, where, ctx);
187
+ if (before.node.format !== after.node.format) {
188
+ ctx.changes.push(breaking('OAS_FORMAT_CHANGED', `Format changed from ${before.node.format ?? 'none'} to ${after.node.format ?? 'none'}.`, where));
189
+ }
190
+ diffProperties(before.node, after.node, direction, where, ctx, active);
191
+ const beforeItems = typeof before.node.items === 'object' ? before.node.items : undefined;
192
+ const afterItems = typeof after.node.items === 'object' ? after.node.items : undefined;
193
+ if (beforeItems !== undefined && afterItems !== undefined) {
194
+ diffSchema(beforeItems, afterItems, direction, `${where}[]`, ctx, active);
195
+ }
196
+ if (direction === 'request' &&
197
+ before.node.additionalProperties !== false &&
198
+ after.node.additionalProperties === false) {
199
+ ctx.changes.push(breaking('OAS_ADDITIONAL_PROPERTIES_CLOSED', 'Extra properties are no longer accepted.', where));
200
+ }
201
+ }
202
+ finally {
203
+ if (key !== null)
204
+ active.delete(key);
169
205
  }
170
- diffProperties(before, after, direction, where, ctx, seen);
171
- const beforeItems = typeof before.items === 'object' ? before.items : undefined;
172
- const afterItems = typeof after.items === 'object' ? after.items : undefined;
173
- if (beforeItems !== undefined && afterItems !== undefined) {
174
- diffSchema(beforeItems, afterItems, direction, `${where}[]`, ctx, seen);
206
+ }
207
+ function viewOf(resolver, raw) {
208
+ if (raw === undefined)
209
+ return { node: {}, types: new Set(), union: false, ref: undefined };
210
+ const node = resolver.resolve(raw);
211
+ const branches = branchesOf(resolver, node, 0);
212
+ if (branches === null)
213
+ return plainView(node, raw.$ref);
214
+ const others = branches.filter((b) => !isNullSchema(b.node));
215
+ const nullable = others.length < branches.length;
216
+ if (others.length === 1) {
217
+ const only = others[0];
218
+ const inner = plainView(only.node, raw.$ref ?? only.ref);
219
+ if (!nullable)
220
+ return inner;
221
+ const enumWithNull = inner.node.enum === undefined || inner.node.enum.includes(null)
222
+ ? inner.node
223
+ : { ...inner.node, enum: [...inner.node.enum, null] };
224
+ return {
225
+ node: enumWithNull,
226
+ types: inner.types.size === 0 ? inner.types : new Set([...inner.types, 'null']),
227
+ union: false,
228
+ ref: inner.ref,
229
+ };
175
230
  }
176
- if (direction === 'request' && before.additionalProperties !== false && after.additionalProperties === false) {
177
- ctx.changes.push(breaking('OAS_ADDITIONAL_PROPERTIES_CLOSED', 'Extra properties are no longer accepted.', where));
231
+ // Every branch has to state its types for the union of them to mean anything:
232
+ // one unconstrained branch admits every type, and an empty set is how "not
233
+ // stated" is spelled everywhere else in this file.
234
+ const types = new Set();
235
+ let stated = branches.length > 0;
236
+ for (const branch of branches) {
237
+ const own = typeSet(branch.node);
238
+ if (own.size === 0)
239
+ stated = false;
240
+ for (const type of own)
241
+ types.add(type);
178
242
  }
243
+ return { node: {}, types: stated ? types : new Set(), union: others.length > 1, ref: raw.$ref };
244
+ }
245
+ function plainView(node, ref) {
246
+ const spelled = node.const !== undefined && node.enum === undefined ? { ...node, enum: [node.const] } : node;
247
+ return { node: spelled, types: typeSet(node), union: false, ref };
248
+ }
249
+ /**
250
+ * A union's branches, resolved and flattened — or `null` when `node` is not a
251
+ * union standing alone. Depth-bounded, because two components can be unions of
252
+ * each other, and a schema that never bottoms out is compared as written.
253
+ */
254
+ function branchesOf(resolver, node, depth) {
255
+ const listed = node.anyOf ?? node.oneOf;
256
+ if (!Array.isArray(listed) || listed.length === 0 || depth > 8)
257
+ return null;
258
+ if (node.type !== undefined || node.properties !== undefined || node.items !== undefined ||
259
+ node.enum !== undefined || node.const !== undefined) {
260
+ return null;
261
+ }
262
+ const out = [];
263
+ for (const entry of listed) {
264
+ const schema = asSchema(entry);
265
+ const resolved = resolver.resolve(schema);
266
+ const nested = branchesOf(resolver, resolved, depth + 1);
267
+ if (nested === null)
268
+ out.push({ node: resolved, ref: schema.$ref });
269
+ else
270
+ out.push(...nested);
271
+ }
272
+ return out;
273
+ }
274
+ /** `{ type: 'null' }`, and its other spellings — `const: null`, `enum: [null]`. */
275
+ function isNullSchema(node) {
276
+ const type = node.type;
277
+ if (type === 'null')
278
+ return true;
279
+ if (Array.isArray(type) && type.length === 1 && type[0] === 'null')
280
+ return true;
281
+ if (type === undefined && node.const === null)
282
+ return true;
283
+ return type === undefined && node.enum !== undefined && node.enum.length === 1 && node.enum[0] === null;
179
284
  }
180
- function diffProperties(before, after, direction, where, ctx, seen) {
285
+ function diffProperties(before, after, direction, where, ctx, active) {
181
286
  const beforeProps = before.properties;
182
287
  const afterProps = after.properties;
183
288
  if (beforeProps === undefined && afterProps === undefined)
@@ -220,12 +325,10 @@ function diffProperties(before, after, direction, where, ctx, seen) {
220
325
  ? breaking('OAS_RESPONSE_FIELD_NOW_OPTIONAL', `Response field "${name}" may now be absent.`, at)
221
326
  : compatible('OAS_REQUEST_FIELD_NOW_OPTIONAL', `Request field "${name}" became optional.`, at));
222
327
  }
223
- diffSchema(from, to, direction, at, ctx, seen);
328
+ diffSchema(from, to, direction, at, ctx, active);
224
329
  }
225
330
  }
226
- function diffTypes(before, after, direction, where, ctx) {
227
- const from = typeSet(before);
228
- const to = typeSet(after);
331
+ function diffTypes(from, to, direction, where, ctx) {
229
332
  if (from.size === 0 && to.size === 0)
230
333
  return;
231
334
  const added = [...to].filter((t) => !from.has(t));
package/dist/diff.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,MAAM,EAAE,MAAM,6BAA6B,CAAA;AAE/E,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAIxF;;;;;;;;GAQG;AAEH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IAC1C,iEAAiE;IACjE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IACxC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACrC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAA;CACpF;AASD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,oBAAoB,EAAE,EAAE,CA6DzD,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,MAAM,EAAY,MAAM,6BAA6B,CAAA;AAEzF,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAIxF;;;;;;;;GAQG;AAEH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IAC1C,iEAAiE;IACjE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IACxC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACrC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAA;CACpF;AASD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,oBAAoB,EAAE,EAAE,CAkEzD,CAAA"}
package/dist/plugin.js CHANGED
@@ -1,4 +1,4 @@
1
- import { BootError, definePlugin } from '@erenthedeveloper0/zen-core';
1
+ import { BootError, definePlugin, unsafeHtml } from '@erenthedeveloper0/zen-core';
2
2
  import { openapiDocument } from "./document.js";
3
3
  import { renderReference } from "./ui.js";
4
4
  export const openapiPlugin = definePlugin({
@@ -7,7 +7,7 @@ export const openapiPlugin = definePlugin({
7
7
  setup(app, options) {
8
8
  const jsonPath = options.json === undefined ? '/openapi.json' : options.json;
9
9
  const uiPath = options.ui === undefined ? '/docs' : options.ui;
10
- const served = { result: null, json: '{}', etag: '', html: '' };
10
+ const served = { result: null, json: '{}', etag: '', html: unsafeHtml('') };
11
11
  if (jsonPath !== false) {
12
12
  app.route({
13
13
  method: 'GET',
@@ -40,9 +40,14 @@ export const openapiPlugin = definePlugin({
40
40
  served.result = result;
41
41
  served.json = JSON.stringify(result.document, null, 2);
42
42
  served.etag = weakEtag(served.json);
43
- served.html = uiPath === false
43
+ // `unsafeHtml`, once, at boot: the page inlines the document in a JSON
44
+ // island and a script, which `html` rightly refuses to fill from holes,
45
+ // and `renderReference` escapes both itself (`<` as `<` in the
46
+ // island, every text value through `escapeHtml`). The mark is the
47
+ // statement that it did, made where a reviewer can check it (§19.5).
48
+ served.html = unsafeHtml(uiPath === false
44
49
  ? ''
45
- : renderReference(result.document, { jsonPath: jsonPath === false ? null : jsonPath });
50
+ : renderReference(result.document, { jsonPath: jsonPath === false ? null : jsonPath }));
46
51
  if (options.strict === true && result.diagnostics.length > 0) {
47
52
  throw new BootError(result.diagnostics.map(toBootDiagnostic));
48
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/dist/ui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,GAAE;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAuB,GAAG,MAAM,CA6B5H"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,GAAE;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAuB,GAAG,MAAM,CA6B5H"}
package/dist/ui.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { escapeHtml } from '@erenthedeveloper0/zen-core';
1
2
  /**
2
3
  * A self-contained API reference — rfcs/0001 §29.2.
3
4
  *
@@ -41,12 +42,6 @@ export function renderReference(document, options = { jsonPath: null }) {
41
42
  </html>
42
43
  `;
43
44
  }
44
- function escapeHtml(raw) {
45
- return raw.replace(/[&<>"']/g, (char) => HTML_ESCAPES[char] ?? char);
46
- }
47
- const HTML_ESCAPES = {
48
- '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;',
49
- };
50
45
  const STYLE = `
51
46
  :root{--bg:#fff;--fg:#1a1a1a;--muted:#666;--line:#e3e3e3;--code:#f6f6f7;--accent:#3060d0}
52
47
  @media(prefers-color-scheme:dark){:root{--bg:#16171a;--fg:#e8e8ea;--muted:#9a9aa2;--line:#2c2d33;--code:#1e1f24;--accent:#7aa2f7}}
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,QAAyB,EAAE,UAAuC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClH,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7C,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI;QACxC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,8BAA8B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAA;IAElF,OAAO;;;;;;SAMA,KAAK;SACL,KAAK;;;;QAIN,KAAK;wBACW,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ;;;4CAGxB,OAAO;UACzC,MAAM;;;CAGf,CAAA;AACD,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,YAAY,GAAqC;IACrD,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO;CACpE,CAAA;AAED,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb,CAAA;AAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Gd,CAAA"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,QAAyB,EAAE,UAAuC,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClH,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC7C,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI;QACxC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,8BAA8B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAA;IAElF,OAAO;;;;;;SAMA,KAAK;SACL,KAAK;;;;QAIN,KAAK;wBACW,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ;;;4CAGxB,OAAO;UACzC,MAAM;;;CAGf,CAAA;AACD,CAAC;AAED,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb,CAAA;AAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Gd,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erenthedeveloper0/zen-openapi",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.3",
4
4
  "description": "Zen OpenAPI: the application graph as an OAS 3.1 document, $ref deduplication, breaking-change detection and a dependency-free viewer.",
5
5
  "keywords": [
6
6
  "openapi",
@@ -52,7 +52,7 @@
52
52
  "test": "node --test \"test/**/*.test.ts\""
53
53
  },
54
54
  "dependencies": {
55
- "@erenthedeveloper0/zen-core": "0.1.0-alpha.1"
55
+ "@erenthedeveloper0/zen-core": "0.1.0-alpha.3"
56
56
  },
57
57
  "peerDependencies": {
58
58
  "typescript": ">=5.0"
package/src/diff.ts CHANGED
@@ -227,49 +227,199 @@ function diffResponses(
227
227
 
228
228
  type Direction = 'request' | 'response'
229
229
 
230
+ /**
231
+ * Compare two schemas, as what they say rather than as how they are spelled.
232
+ *
233
+ * `active` holds the components being compared further up *this* descent, and
234
+ * nothing else. A component that contains itself — a tree, a comment thread —
235
+ * is compared once per path into it, and the recursion stops where it would
236
+ * start repeating. The guard used to be a set of `ref|ref|location` keys, and a
237
+ * location grows by a segment at every level, so it never repeated: any
238
+ * recursive schema overflowed the stack, which is how `openapi:check` died on an
239
+ * API whose response was a tree. Keyed on the pair alone, across the whole
240
+ * operation, it would also have stopped at a component's *second use*, and a
241
+ * change is reported once per use (§29.7) — `billing` and `shipping` are two
242
+ * places a client reads an `Address`.
243
+ */
230
244
  function diffSchema(
231
- rawBefore: OpenApiSchema,
232
- rawAfter: OpenApiSchema,
245
+ rawBefore: OpenApiSchema | undefined,
246
+ rawAfter: OpenApiSchema | undefined,
233
247
  direction: Direction,
234
248
  where: string,
235
249
  ctx: Context,
236
- seen: Set<string>,
250
+ active: Set<string>,
237
251
  ): void {
238
- const guard = `${rawBefore.$ref ?? ''}|${rawAfter.$ref ?? ''}|${where}`
239
- if (rawBefore.$ref !== undefined || rawAfter.$ref !== undefined) {
240
- if (seen.has(guard)) return
241
- seen.add(guard)
252
+ const before = viewOf(ctx.before, rawBefore)
253
+ const after = viewOf(ctx.after, rawAfter)
254
+
255
+ const key = before.ref === undefined && after.ref === undefined ? null : `${before.ref ?? ''}|${after.ref ?? ''}`
256
+ if (key !== null) {
257
+ if (active.has(key)) return
258
+ active.add(key)
242
259
  }
243
260
 
244
- const before = ctx.before.resolve(rawBefore)
245
- const after = ctx.after.resolve(rawAfter)
261
+ try {
262
+ diffTypes(before.types, after.types, direction, where, ctx)
263
+ // Several branches left after a union is read: their types were compared
264
+ // above, and nothing else can be — which branch of one document is which of
265
+ // the other is not knowable in general (§28.8).
266
+ if (before.union || after.union) return
267
+
268
+ diffEnum(before.node, after.node, direction, where, ctx)
269
+
270
+ if (before.node.format !== after.node.format) {
271
+ ctx.changes.push(breaking(
272
+ 'OAS_FORMAT_CHANGED',
273
+ `Format changed from ${before.node.format ?? 'none'} to ${after.node.format ?? 'none'}.`,
274
+ where,
275
+ ))
276
+ }
277
+
278
+ diffProperties(before.node, after.node, direction, where, ctx, active)
246
279
 
247
- diffTypes(before, after, direction, where, ctx)
248
- diffEnum(before, after, direction, where, ctx)
280
+ const beforeItems = typeof before.node.items === 'object' ? before.node.items : undefined
281
+ const afterItems = typeof after.node.items === 'object' ? after.node.items : undefined
282
+ if (beforeItems !== undefined && afterItems !== undefined) {
283
+ diffSchema(beforeItems, afterItems, direction, `${where}[]`, ctx, active)
284
+ }
249
285
 
250
- if (before.format !== after.format) {
251
- ctx.changes.push(breaking(
252
- 'OAS_FORMAT_CHANGED',
253
- `Format changed from ${before.format ?? 'none'} to ${after.format ?? 'none'}.`,
254
- where,
255
- ))
286
+ if (
287
+ direction === 'request' &&
288
+ before.node.additionalProperties !== false &&
289
+ after.node.additionalProperties === false
290
+ ) {
291
+ ctx.changes.push(breaking(
292
+ 'OAS_ADDITIONAL_PROPERTIES_CLOSED',
293
+ 'Extra properties are no longer accepted.',
294
+ where,
295
+ ))
296
+ }
297
+ } finally {
298
+ if (key !== null) active.delete(key)
256
299
  }
300
+ }
257
301
 
258
- diffProperties(before, after, direction, where, ctx, seen)
302
+ /**
303
+ * What a schema says — the only thing a comparison should read.
304
+ *
305
+ * A converter is free to spell one schema several ways, and two of them used
306
+ * to diff as a change. zod 4.4 wrote a nullable string as
307
+ * `anyOf: [{ type: 'string' }, { type: 'null' }]` and zod 4.6 writes
308
+ * `type: ['string', 'null']`; the type set was read off `type` alone, so the
309
+ * first looked like a schema with no type and the second like one that had
310
+ * gained two, and a dependency bump that changed no byte on the wire failed the
311
+ * gate with two breaking changes. The other half was quieter and worse: nothing
312
+ * looked inside `anyOf` at all, so a field removed from
313
+ * `z.object({…}).nullable()` — the most common union there is — passed.
314
+ *
315
+ * So a union is read before it is compared:
316
+ *
317
+ * - `$ref`s are followed, in the schema and in each branch, and nested unions
318
+ * are flattened;
319
+ * - `null` branches are set aside, and if **one** branch is left, the view is
320
+ * that branch, nullable — its fields, items, enum and format compared exactly
321
+ * as a plain schema's are, with `null` in its type set and, if it has one, in
322
+ * its enum, which is what `enum: […, null]` would have said;
323
+ * - if **several** are left, the view is the union of the types they admit,
324
+ * and only that is compared (`union: true`).
325
+ *
326
+ * And `const: v` is `enum: [v]`, which is what it means.
327
+ *
328
+ * A union is only read this way when it is the whole schema. `type` or
329
+ * `properties` beside an `anyOf` is an intersection, and reading that as a
330
+ * union would be a guess; it is compared as it was, keyword by keyword.
331
+ */
332
+ interface SchemaView {
333
+ /** The schema whose keywords are compared: a branch, for a nullable union. */
334
+ readonly node: OpenApiSchema
335
+ /** The types it admits; empty when it states none. */
336
+ readonly types: ReadonlySet<JsonType>
337
+ /** Several non-null branches: their types are compared, nothing else is. */
338
+ readonly union: boolean
339
+ /** The component this view was reached through — for the cycle guard. */
340
+ readonly ref: string | undefined
341
+ }
259
342
 
260
- const beforeItems = typeof before.items === 'object' ? before.items : undefined
261
- const afterItems = typeof after.items === 'object' ? after.items : undefined
262
- if (beforeItems !== undefined && afterItems !== undefined) {
263
- diffSchema(beforeItems, afterItems, direction, `${where}[]`, ctx, seen)
343
+ function viewOf(resolver: Resolver, raw: OpenApiSchema | undefined): SchemaView {
344
+ if (raw === undefined) return { node: {}, types: new Set(), union: false, ref: undefined }
345
+ const node = resolver.resolve(raw)
346
+ const branches = branchesOf(resolver, node, 0)
347
+ if (branches === null) return plainView(node, raw.$ref)
348
+
349
+ const others = branches.filter((b) => !isNullSchema(b.node))
350
+ const nullable = others.length < branches.length
351
+
352
+ if (others.length === 1) {
353
+ const only = others[0] as Branch
354
+ const inner = plainView(only.node, raw.$ref ?? only.ref)
355
+ if (!nullable) return inner
356
+ const enumWithNull = inner.node.enum === undefined || inner.node.enum.includes(null)
357
+ ? inner.node
358
+ : { ...inner.node, enum: [...inner.node.enum, null] }
359
+ return {
360
+ node: enumWithNull,
361
+ types: inner.types.size === 0 ? inner.types : new Set([...inner.types, 'null' as const]),
362
+ union: false,
363
+ ref: inner.ref,
364
+ }
264
365
  }
265
366
 
266
- if (direction === 'request' && before.additionalProperties !== false && after.additionalProperties === false) {
267
- ctx.changes.push(breaking(
268
- 'OAS_ADDITIONAL_PROPERTIES_CLOSED',
269
- 'Extra properties are no longer accepted.',
270
- where,
271
- ))
367
+ // Every branch has to state its types for the union of them to mean anything:
368
+ // one unconstrained branch admits every type, and an empty set is how "not
369
+ // stated" is spelled everywhere else in this file.
370
+ const types = new Set<JsonType>()
371
+ let stated = branches.length > 0
372
+ for (const branch of branches) {
373
+ const own = typeSet(branch.node)
374
+ if (own.size === 0) stated = false
375
+ for (const type of own) types.add(type)
272
376
  }
377
+ return { node: {}, types: stated ? types : new Set(), union: others.length > 1, ref: raw.$ref }
378
+ }
379
+
380
+ function plainView(node: OpenApiSchema, ref: string | undefined): SchemaView {
381
+ const spelled = node.const !== undefined && node.enum === undefined ? { ...node, enum: [node.const] } : node
382
+ return { node: spelled, types: typeSet(node), union: false, ref }
383
+ }
384
+
385
+ interface Branch {
386
+ readonly node: OpenApiSchema
387
+ readonly ref: string | undefined
388
+ }
389
+
390
+ /**
391
+ * A union's branches, resolved and flattened — or `null` when `node` is not a
392
+ * union standing alone. Depth-bounded, because two components can be unions of
393
+ * each other, and a schema that never bottoms out is compared as written.
394
+ */
395
+ function branchesOf(resolver: Resolver, node: OpenApiSchema, depth: number): Branch[] | null {
396
+ const listed = node.anyOf ?? node.oneOf
397
+ if (!Array.isArray(listed) || listed.length === 0 || depth > 8) return null
398
+ if (
399
+ node.type !== undefined || node.properties !== undefined || node.items !== undefined ||
400
+ node.enum !== undefined || node.const !== undefined
401
+ ) {
402
+ return null
403
+ }
404
+
405
+ const out: Branch[] = []
406
+ for (const entry of listed) {
407
+ const schema = asSchema(entry) as OpenApiSchema
408
+ const resolved = resolver.resolve(schema)
409
+ const nested = branchesOf(resolver, resolved, depth + 1)
410
+ if (nested === null) out.push({ node: resolved, ref: schema.$ref })
411
+ else out.push(...nested)
412
+ }
413
+ return out
414
+ }
415
+
416
+ /** `{ type: 'null' }`, and its other spellings — `const: null`, `enum: [null]`. */
417
+ function isNullSchema(node: OpenApiSchema): boolean {
418
+ const type = node.type
419
+ if (type === 'null') return true
420
+ if (Array.isArray(type) && type.length === 1 && type[0] === 'null') return true
421
+ if (type === undefined && node.const === null) return true
422
+ return type === undefined && node.enum !== undefined && node.enum.length === 1 && node.enum[0] === null
273
423
  }
274
424
 
275
425
  function diffProperties(
@@ -278,7 +428,7 @@ function diffProperties(
278
428
  direction: Direction,
279
429
  where: string,
280
430
  ctx: Context,
281
- seen: Set<string>,
431
+ active: Set<string>,
282
432
  ): void {
283
433
  const beforeProps = before.properties
284
434
  const afterProps = after.properties
@@ -323,19 +473,17 @@ function diffProperties(
323
473
  : compatible('OAS_REQUEST_FIELD_NOW_OPTIONAL', `Request field "${name}" became optional.`, at))
324
474
  }
325
475
 
326
- diffSchema(from, to, direction, at, ctx, seen)
476
+ diffSchema(from, to, direction, at, ctx, active)
327
477
  }
328
478
  }
329
479
 
330
480
  function diffTypes(
331
- before: OpenApiSchema,
332
- after: OpenApiSchema,
481
+ from: ReadonlySet<JsonType>,
482
+ to: ReadonlySet<JsonType>,
333
483
  direction: Direction,
334
484
  where: string,
335
485
  ctx: Context,
336
486
  ): void {
337
- const from = typeSet(before)
338
- const to = typeSet(after)
339
487
  if (from.size === 0 && to.size === 0) return
340
488
 
341
489
  const added = [...to].filter((t) => !from.has(t))
package/src/plugin.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { AppGraph, Diagnostic, Plugin } from '@erenthedeveloper0/zen-core'
2
- import { BootError, definePlugin } from '@erenthedeveloper0/zen-core'
1
+ import type { AppGraph, Diagnostic, Plugin, SafeHtml } from '@erenthedeveloper0/zen-core'
2
+ import { BootError, definePlugin, unsafeHtml } from '@erenthedeveloper0/zen-core'
3
3
  import { openapiDocument, type OpenApiOptions, type OpenApiResult } from './document.ts'
4
4
  import type { DocDiagnostic } from './schema.ts'
5
5
  import { renderReference } from './ui.ts'
@@ -35,7 +35,7 @@ interface Served {
35
35
  result: OpenApiResult | null
36
36
  json: string
37
37
  etag: string
38
- html: string
38
+ html: SafeHtml
39
39
  }
40
40
 
41
41
  export const openapiPlugin: Plugin<OpenApiPluginOptions, {}> = definePlugin<OpenApiPluginOptions, {}>({
@@ -45,7 +45,7 @@ export const openapiPlugin: Plugin<OpenApiPluginOptions, {}> = definePlugin<Open
45
45
  setup(app, options) {
46
46
  const jsonPath = options.json === undefined ? '/openapi.json' : options.json
47
47
  const uiPath = options.ui === undefined ? '/docs' : options.ui
48
- const served: Served = { result: null, json: '{}', etag: '', html: '' }
48
+ const served: Served = { result: null, json: '{}', etag: '', html: unsafeHtml('') }
49
49
 
50
50
  if (jsonPath !== false) {
51
51
  app.route({
@@ -80,9 +80,14 @@ export const openapiPlugin: Plugin<OpenApiPluginOptions, {}> = definePlugin<Open
80
80
  served.result = result
81
81
  served.json = JSON.stringify(result.document, null, 2)
82
82
  served.etag = weakEtag(served.json)
83
- served.html = uiPath === false
83
+ // `unsafeHtml`, once, at boot: the page inlines the document in a JSON
84
+ // island and a script, which `html` rightly refuses to fill from holes,
85
+ // and `renderReference` escapes both itself (`<` as `<` in the
86
+ // island, every text value through `escapeHtml`). The mark is the
87
+ // statement that it did, made where a reviewer can check it (§19.5).
88
+ served.html = unsafeHtml(uiPath === false
84
89
  ? ''
85
- : renderReference(result.document, { jsonPath: jsonPath === false ? null : jsonPath })
90
+ : renderReference(result.document, { jsonPath: jsonPath === false ? null : jsonPath }))
86
91
 
87
92
  if (options.strict === true && result.diagnostics.length > 0) {
88
93
  throw new BootError(result.diagnostics.map(toBootDiagnostic))
@@ -106,7 +111,7 @@ interface DocsContext {
106
111
  readonly headers: Readonly<Record<string, string | undefined>>
107
112
  empty(status?: 204 | 205 | 304): unknown
108
113
  text(body: string, init?: { media?: string; headers?: Record<string, string> }): unknown
109
- html(body: string): unknown
114
+ html(body: SafeHtml): unknown
110
115
  }
111
116
 
112
117
  function toBootDiagnostic(diagnostic: DocDiagnostic): Diagnostic {
package/src/ui.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { escapeHtml } from '@erenthedeveloper0/zen-core'
1
2
  import type { OpenApiDocument } from './types.ts'
2
3
 
3
4
  /**
@@ -45,14 +46,6 @@ export function renderReference(document: OpenApiDocument, options: { jsonPath:
45
46
  `
46
47
  }
47
48
 
48
- function escapeHtml(raw: string): string {
49
- return raw.replace(/[&<>"']/g, (char) => HTML_ESCAPES[char] ?? char)
50
- }
51
-
52
- const HTML_ESCAPES: Readonly<Record<string, string>> = {
53
- '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;',
54
- }
55
-
56
49
  const STYLE = `
57
50
  :root{--bg:#fff;--fg:#1a1a1a;--muted:#666;--line:#e3e3e3;--code:#f6f6f7;--accent:#3060d0}
58
51
  @media(prefers-color-scheme:dark){:root{--bg:#16171a;--fg:#e8e8ea;--muted:#9a9aa2;--line:#2c2d33;--code:#1e1f24;--accent:#7aa2f7}}