@nifrajs/schema 3.3.0 → 4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../src/formats.ts"],"names":[],"mappings":"AAyBA,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAEvF;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAM3C"}
1
+ {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../src/formats.ts"],"names":[],"mappings":"AA2BA,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAEvF;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAM3C"}
package/dist/formats.js CHANGED
@@ -13,7 +13,9 @@ import { FormatRegistry } from "@sinclair/typebox";
13
13
  * that registered its own validator first wins.
14
14
  */
15
15
  const DEFAULT_FORMATS = {
16
- email: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
16
+ // Dot-separated labels that cannot contain a dot: linear on any input (an overlapping `[^\s@]+\.`
17
+ // backtracks quadratically on a long run of dots).
18
+ email: /^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/,
17
19
  uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
18
20
  "date-time": /^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})$/,
19
21
  date: /^\d{4}-\d{2}-\d{2}$/,
@@ -1 +1 @@
1
- {"version":3,"file":"formats.js","sourceRoot":"","sources":["../src/formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,eAAe,GAAqC;IACxD,KAAK,EAAE,4BAA4B;IACnC,IAAI,EAAE,iEAAiE;IACvE,WAAW,EAAE,4EAA4E;IACzF,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,wDAAwD;IAC9D,GAAG,EAAE,0BAA0B;IAC/B,IAAI,EAAE,qEAAqE;CAC5E,CAAA;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAoC;IAC/E,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACpC,CAAC;AAED,IAAI,kBAAkB,GAAG,KAAK,CAAA;AAE9B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,kBAAkB;QAAE,OAAM;IAC9B,kBAAkB,GAAG,IAAI,CAAA;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACzF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../src/formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,eAAe,GAAqC;IACxD,kGAAkG;IAClG,mDAAmD;IACnD,KAAK,EAAE,mCAAmC;IAC1C,IAAI,EAAE,iEAAiE;IACvE,WAAW,EAAE,4EAA4E;IACzF,IAAI,EAAE,qBAAqB;IAC3B,IAAI,EAAE,wDAAwD;IAC9D,GAAG,EAAE,0BAA0B;IAC/B,IAAI,EAAE,qEAAqE;CAC5E,CAAA;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAoC;IAC/E,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACpC,CAAC;AAED,IAAI,kBAAkB,GAAG,KAAK,CAAA;AAE9B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,kBAAkB;QAAE,OAAM;IAC9B,kBAAkB,GAAG,IAAI,CAAA;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACzF,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -8,7 +8,8 @@
8
8
  */
9
9
  export { fromTypeBox, type NifraSchema } from "./adapter.js";
10
10
  export { registerFormat } from "./formats.js";
11
- export { type OpenAPIDocument, type OpenAPIInfo, toOpenAPI } from "./openapi.js";
11
+ export { type OpenAPIDocument, type OpenAPIInfo, toOpenAPI, toOpenAPIFromEvidence, } from "./openapi.js";
12
+ export { diffOpenApiInventory, type ImportedApiInventory, type ImportedRoute, type ImportedRouteQuery, type ImportOpenAPIOptions, importOpenAPI, OpenAPIImportError, type OpenApiInventoryDrift, } from "./openapi-import.js";
12
13
  export { decodeCursor, encodeCursor, type Page, paginate } from "./pagination.js";
13
- export { t } from "./t.js";
14
+ export { type DeferredValue, t } from "./t.js";
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAEhF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,SAAS,EACT,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,aAAa,EACb,kBAAkB,EAClB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,EAAE,KAAK,aAAa,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA"}
package/dist/index.js CHANGED
@@ -11,7 +11,8 @@ export { fromTypeBox } from "./adapter.js";
11
11
  // install themselves lazily from the validate path (see ./adapter.ts) - NOT as an import side
12
12
  // effect of this module, which a production bundler would tree-shake away.
13
13
  export { registerFormat } from "./formats.js";
14
- export { toOpenAPI } from "./openapi.js";
14
+ export { toOpenAPI, toOpenAPIFromEvidence, } from "./openapi.js";
15
+ export { diffOpenApiInventory, importOpenAPI, OpenAPIImportError, } from "./openapi-import.js";
15
16
  // Cursor-pagination runtime helpers - pair with `t.paginated` / `t.pageQuery`.
16
17
  export { decodeCursor, encodeCursor, paginate } from "./pagination.js";
17
18
  export { t } from "./t.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAoB,MAAM,cAAc,CAAA;AAC5D,gGAAgG;AAChG,8FAA8F;AAC9F,2EAA2E;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAA0C,SAAS,EAAE,MAAM,cAAc,CAAA;AAChF,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAa,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAoB,MAAM,cAAc,CAAA;AAC5D,gGAAgG;AAChG,8FAA8F;AAC9F,2EAA2E;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAGL,SAAS,EACT,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,oBAAoB,EAKpB,aAAa,EACb,kBAAkB,GAEnB,MAAM,qBAAqB,CAAA;AAC5B,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAa,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,EAAsB,CAAC,EAAE,MAAM,QAAQ,CAAA"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * OpenAPI 3.x inventory import - the structural half of an export/import roundtrip.
3
+ *
4
+ * `toOpenAPI` renders a Nifra app (or contract) as an OpenAPI 3.1 document. This module reads such
5
+ * a document back into a canonical route inventory: method, Nifra-templated path (`{id}` back to
6
+ * `:id`), required query names, body presence, and response statuses. `diffOpenApiInventory` then
7
+ * compares two inventories, so `export -> import -> diff` proves the cycle survives in CI.
8
+ *
9
+ * Deliberate boundaries, all fail-closed or explicitly documented:
10
+ *
11
+ * - Offline and ref-opaque. `$ref`s are never resolved and nothing is fetched. A `$ref` parameter
12
+ * cannot yield a name without resolution, so it throws with the location; `$ref` bodies and
13
+ * response schemas only assert presence, which needs no resolution.
14
+ * - No schema reconstruction. JSON Schema is not turned back into `t` builders here - that is a
15
+ * separate codegen step needing consumer evidence. The inventory proves the route table survived;
16
+ * field-level types ride along in the source document, not in this comparison.
17
+ * - No auth interpretation. `security`, `securitySchemes`, and `servers` are never read. Importing
18
+ * an API must not silently adopt its auth model.
19
+ * - Templated paths degrade conservatively. `/files/*path` exports as `/files/{path}`, indistinguishable
20
+ * from a single-segment `:path`. Import yields `:path` and records a note for every OpenAPI template;
21
+ * a greedy remainder needs a manual `*path` rewrite.
22
+ * - Nifra parameter names follow `/^[A-Za-z_][A-Za-z0-9_]*$/`; `__proto__`, `constructor`, and
23
+ * `prototype` are rejected. Mixed templates are converted only when their boundaries are representable.
24
+ * - Bounded. Path/operation/parameter counts are capped (`ImportOpenAPIOptions`); a document over
25
+ * the caps throws rather than allocating.
26
+ */
27
+ export declare class OpenAPIImportError extends Error {
28
+ constructor(message: string);
29
+ }
30
+ export interface ImportOpenAPIOptions {
31
+ /** Maximum entries under `paths`. Default 5000. */
32
+ readonly maxPaths?: number;
33
+ /** Maximum operations on one path item. Default 8. */
34
+ readonly maxOperationsPerPath?: number;
35
+ /** Maximum merged parameters per operation. Default 100. */
36
+ readonly maxParameters?: number;
37
+ }
38
+ export interface ImportedRouteQuery {
39
+ readonly name: string;
40
+ readonly required: boolean;
41
+ }
42
+ export interface ImportedRoute {
43
+ /** Lowercase HTTP method as it appears in the document. */
44
+ readonly method: string;
45
+ /** Nifra-templated path (`/users/:id`). */
46
+ readonly path: string;
47
+ readonly operationId?: string;
48
+ /** Template parameter names in path order. */
49
+ readonly pathParams: readonly string[];
50
+ readonly query: readonly ImportedRouteQuery[];
51
+ readonly hasBody: boolean;
52
+ readonly requestBodyRequired: boolean;
53
+ /** Response status keys (`"200"`, `"404"`, `"default"`). */
54
+ readonly responseStatuses: readonly string[];
55
+ /** Per-route degradations (wildcard rewrites). */
56
+ readonly notes: readonly string[];
57
+ }
58
+ export interface ImportedApiInventory {
59
+ readonly title: string;
60
+ readonly version: string;
61
+ readonly routes: readonly ImportedRoute[];
62
+ readonly warnings: readonly string[];
63
+ }
64
+ export interface OpenApiInventoryDrift {
65
+ /** `METHOD /path`, or `inventory` for route-set level drift. */
66
+ readonly route: string;
67
+ readonly message: string;
68
+ }
69
+ /** Parse an OpenAPI 3.0/3.1 document into a canonical route inventory. Throws on invalid input. */
70
+ export declare function importOpenAPI(document: unknown, options?: ImportOpenAPIOptions): ImportedApiInventory;
71
+ /** Compare two inventories. Empty means the export/import cycle preserved the route table. */
72
+ export declare function diffOpenApiInventory(expected: ImportedApiInventory, actual: ImportedApiInventory): readonly OpenApiInventoryDrift[];
73
+ //# sourceMappingURL=openapi-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-import.d.ts","sourceRoot":"","sources":["../src/openapi-import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IACtC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,4DAA4D;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;IACzC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAgJD,mGAAmG;AACnG,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,oBAAyB,GACjC,oBAAoB,CA+HtB;AAMD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,oBAAoB,GAC3B,SAAS,qBAAqB,EAAE,CAgDlC"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * OpenAPI 3.x inventory import - the structural half of an export/import roundtrip.
3
+ *
4
+ * `toOpenAPI` renders a Nifra app (or contract) as an OpenAPI 3.1 document. This module reads such
5
+ * a document back into a canonical route inventory: method, Nifra-templated path (`{id}` back to
6
+ * `:id`), required query names, body presence, and response statuses. `diffOpenApiInventory` then
7
+ * compares two inventories, so `export -> import -> diff` proves the cycle survives in CI.
8
+ *
9
+ * Deliberate boundaries, all fail-closed or explicitly documented:
10
+ *
11
+ * - Offline and ref-opaque. `$ref`s are never resolved and nothing is fetched. A `$ref` parameter
12
+ * cannot yield a name without resolution, so it throws with the location; `$ref` bodies and
13
+ * response schemas only assert presence, which needs no resolution.
14
+ * - No schema reconstruction. JSON Schema is not turned back into `t` builders here - that is a
15
+ * separate codegen step needing consumer evidence. The inventory proves the route table survived;
16
+ * field-level types ride along in the source document, not in this comparison.
17
+ * - No auth interpretation. `security`, `securitySchemes`, and `servers` are never read. Importing
18
+ * an API must not silently adopt its auth model.
19
+ * - Templated paths degrade conservatively. `/files/*path` exports as `/files/{path}`, indistinguishable
20
+ * from a single-segment `:path`. Import yields `:path` and records a note for every OpenAPI template;
21
+ * a greedy remainder needs a manual `*path` rewrite.
22
+ * - Nifra parameter names follow `/^[A-Za-z_][A-Za-z0-9_]*$/`; `__proto__`, `constructor`, and
23
+ * `prototype` are rejected. Mixed templates are converted only when their boundaries are representable.
24
+ * - Bounded. Path/operation/parameter counts are capped (`ImportOpenAPIOptions`); a document over
25
+ * the caps throws rather than allocating.
26
+ */
27
+ export class OpenAPIImportError extends Error {
28
+ constructor(message) {
29
+ super(`openapi import: ${message}`);
30
+ this.name = "OpenAPIImportError";
31
+ }
32
+ }
33
+ const SUPPORTED_METHODS = new Set([
34
+ "get",
35
+ "put",
36
+ "post",
37
+ "delete",
38
+ "patch",
39
+ "head",
40
+ "options",
41
+ "trace",
42
+ ]);
43
+ const PATH_ITEM_METADATA = new Set(["$ref", "summary", "description", "servers", "parameters"]);
44
+ const RESPONSE_KEY = /^(?:[1-5][0-9]{2}|default)$/;
45
+ const TEMPLATE_EXPRESSION = /\{([^{}]*)\}/g;
46
+ const NIFRA_PARAM = /^[A-Za-z_][A-Za-z0-9_]*$/;
47
+ const RESERVED_PARAM_NAMES = new Set(["__proto__", "constructor", "prototype"]);
48
+ function isRecord(value) {
49
+ return typeof value === "object" && value !== null && !Array.isArray(value);
50
+ }
51
+ function normalizedLimit(value, fallback, label) {
52
+ const max = value ?? fallback;
53
+ if (!Number.isSafeInteger(max) || max < 0)
54
+ throw new OpenAPIImportError(`${label} limit must be a finite safe integer >= 0`);
55
+ return max;
56
+ }
57
+ function assertLimit(count, max, label) {
58
+ if (count > max)
59
+ throw new OpenAPIImportError(`${label} count ${count} exceeds limit ${max}`);
60
+ }
61
+ /** Collect own keys while stopping as soon as a bounded collection is over its cap. */
62
+ function ownKeysWithinLimit(record, max, label, include = () => true) {
63
+ const keys = [];
64
+ for (const key in record) {
65
+ if (!Object.hasOwn(record, key) || !include(key))
66
+ continue;
67
+ if (keys.length >= max)
68
+ throw new OpenAPIImportError(`${label} count ${keys.length + 1} exceeds limit ${max}`);
69
+ keys.push(key);
70
+ }
71
+ return keys;
72
+ }
73
+ function toNifraPath(openapiPath) {
74
+ const segments = openapiPath.split("/");
75
+ let templated = false;
76
+ const pathParams = [];
77
+ const out = segments.map((segment) => {
78
+ if (!segment.includes("{") && !segment.includes("}"))
79
+ return segment;
80
+ const matches = [...segment.matchAll(TEMPLATE_EXPRESSION)];
81
+ if (matches.length === 0)
82
+ throw new OpenAPIImportError(`unparseable path template ${openapiPath}`);
83
+ let cursor = 0;
84
+ let converted = "";
85
+ for (const match of matches) {
86
+ if (match.index === undefined)
87
+ throw new OpenAPIImportError(`unparseable path template ${openapiPath}`);
88
+ const start = match.index;
89
+ const end = start + match[0].length;
90
+ const name = match[1] ?? "";
91
+ const previous = segment[start - 1];
92
+ const next = segment[end];
93
+ // Nifra's mixed grammar needs a non-identifier delimiter after a parameter. A terminal
94
+ // `foo{bar}` or adjacent `{a}{b}` cannot be represented without changing the capture.
95
+ if (next === "{" ||
96
+ (next !== undefined && /[A-Za-z0-9_]/.test(next)) ||
97
+ (next === undefined && previous !== undefined && /[A-Za-z0-9_]/.test(previous)))
98
+ throw new OpenAPIImportError(`path template ${openapiPath} is not representable in Nifra`);
99
+ if (!NIFRA_PARAM.test(name) || RESERVED_PARAM_NAMES.has(name))
100
+ throw new OpenAPIImportError(`invalid path parameter ${name}`);
101
+ if (pathParams.includes(name))
102
+ throw new OpenAPIImportError(`duplicate path parameter ${name} on ${openapiPath}`);
103
+ pathParams.push(name);
104
+ converted += `${segment.slice(cursor, start)}:${name}`;
105
+ cursor = end;
106
+ templated = true;
107
+ }
108
+ const tail = segment.slice(cursor);
109
+ if (tail.includes("{") || tail.includes("}"))
110
+ throw new OpenAPIImportError(`unparseable path template ${openapiPath}`);
111
+ return converted + tail;
112
+ });
113
+ return { path: out.join("/"), templated, pathParams: Object.freeze(pathParams) };
114
+ }
115
+ function mergedParameters(pathItem, operation, max) {
116
+ const merged = new Map();
117
+ for (const source of [pathItem.parameters, operation.parameters]) {
118
+ if (source === undefined)
119
+ continue;
120
+ if (!Array.isArray(source))
121
+ throw new OpenAPIImportError("parameters must be an array");
122
+ assertLimit(source.length, max, "parameters");
123
+ for (const entry of source) {
124
+ if (!isRecord(entry))
125
+ throw new OpenAPIImportError("parameter entries must be objects");
126
+ if ("$ref" in entry)
127
+ throw new OpenAPIImportError("parameter $refs must be inlined before import - refs are never resolved");
128
+ const { name, in: location, required, } = entry;
129
+ if (typeof name !== "string" || name === "")
130
+ throw new OpenAPIImportError("parameters need a non-empty name");
131
+ if (typeof location !== "string" || location === "")
132
+ throw new OpenAPIImportError(`parameter ${name} needs an 'in' location`);
133
+ merged.set(`${location} ${name}`, {
134
+ name,
135
+ location,
136
+ required: required === true,
137
+ });
138
+ }
139
+ }
140
+ assertLimit(merged.size, max, "merged parameters");
141
+ return [...merged.values()];
142
+ }
143
+ /** Parse an OpenAPI 3.0/3.1 document into a canonical route inventory. Throws on invalid input. */
144
+ export function importOpenAPI(document, options = {}) {
145
+ const maxPaths = normalizedLimit(options.maxPaths, 5000, "maxPaths");
146
+ const maxOperations = normalizedLimit(options.maxOperationsPerPath, 8, "maxOperationsPerPath");
147
+ const maxParameters = normalizedLimit(options.maxParameters, 100, "maxParameters");
148
+ if (!isRecord(document))
149
+ throw new OpenAPIImportError("document must be an object");
150
+ const { openapi, info, paths } = document;
151
+ if (typeof openapi !== "string" || !/^3\.(0|1)\.\d+$/.test(openapi))
152
+ throw new OpenAPIImportError(`unsupported OpenAPI version ${JSON.stringify(openapi)} - 3.0.x and 3.1.x only`);
153
+ if (!isRecord(info))
154
+ throw new OpenAPIImportError("document.info must be an object");
155
+ const title = typeof info.title === "string" ? info.title : "";
156
+ const version = typeof info.version === "string" ? info.version : "";
157
+ if (paths === undefined)
158
+ return { title, version, routes: Object.freeze([]), warnings: Object.freeze([]) };
159
+ if (!isRecord(paths))
160
+ throw new OpenAPIImportError("document.paths must be an object");
161
+ const pathKeys = ownKeysWithinLimit(paths, maxPaths, "paths");
162
+ const warnings = [];
163
+ const routes = [];
164
+ for (const openapiPath of pathKeys) {
165
+ if (!openapiPath.startsWith("/"))
166
+ throw new OpenAPIImportError(`path ${openapiPath} must start with /`);
167
+ const pathItem = paths[openapiPath];
168
+ if (!isRecord(pathItem))
169
+ throw new OpenAPIImportError(`path item ${openapiPath} must be an object`);
170
+ if (Object.hasOwn(pathItem, "$ref"))
171
+ throw new OpenAPIImportError(`path item $refs must be inlined before import - refs are never resolved`);
172
+ const operationKeys = ownKeysWithinLimit(pathItem, maxOperations, `operations on ${openapiPath}`, (key) => key !== "parameters" && !PATH_ITEM_METADATA.has(key) && !key.startsWith("x-"));
173
+ const { path, templated, pathParams } = toNifraPath(openapiPath);
174
+ const seenMethods = new Set();
175
+ for (const rawMethod of operationKeys) {
176
+ const method = rawMethod.toLowerCase();
177
+ if (!SUPPORTED_METHODS.has(method))
178
+ throw new OpenAPIImportError(`unsupported method ${rawMethod} on ${openapiPath}`);
179
+ if (seenMethods.has(method))
180
+ throw new OpenAPIImportError(`duplicate method ${rawMethod} on ${openapiPath}`);
181
+ seenMethods.add(method);
182
+ const rawOperation = pathItem[rawMethod];
183
+ if (!isRecord(rawOperation))
184
+ throw new OpenAPIImportError(`operation ${rawMethod} ${openapiPath} must be an object`);
185
+ const params = mergedParameters(pathItem, rawOperation, maxParameters);
186
+ const query = [];
187
+ for (const param of params) {
188
+ if (param.location === "query")
189
+ query.push({ name: param.name, required: param.required });
190
+ else if (param.location !== "path" && param.location !== "header")
191
+ warnings.push(`${method.toUpperCase()} ${path}: '${param.location}' parameter '${param.name}' skipped`);
192
+ else if (param.location === "header")
193
+ warnings.push(`${method.toUpperCase()} ${path}: header parameters are not inventoried`);
194
+ }
195
+ const declaredPathParams = new Set(params.filter((param) => param.location === "path").map((param) => param.name));
196
+ for (const name of pathParams) {
197
+ if (!declaredPathParams.has(name))
198
+ throw new OpenAPIImportError(`path parameter ${name} is not declared on ${method.toUpperCase()} ${path}`);
199
+ }
200
+ for (const name of declaredPathParams) {
201
+ if (!pathParams.includes(name))
202
+ throw new OpenAPIImportError(`declared path parameter ${name} is not in ${path}`);
203
+ }
204
+ const rawBody = rawOperation.requestBody;
205
+ const hasBody = rawBody !== undefined;
206
+ if (hasBody && !isRecord(rawBody))
207
+ throw new OpenAPIImportError(`requestBody on ${method.toUpperCase()} ${path} must be an object`);
208
+ const rawResponses = rawOperation.responses;
209
+ if (rawResponses === undefined)
210
+ throw new OpenAPIImportError(`responses are required on ${method.toUpperCase()} ${path}`);
211
+ if (!isRecord(rawResponses))
212
+ throw new OpenAPIImportError(`responses on ${method.toUpperCase()} ${path} must be an object`);
213
+ const responseStatuses = [];
214
+ for (const status of Object.keys(rawResponses)) {
215
+ if (!RESPONSE_KEY.test(status))
216
+ throw new OpenAPIImportError(`invalid response status ${status} on ${method.toUpperCase()} ${path}`);
217
+ if (!isRecord(rawResponses[status]))
218
+ throw new OpenAPIImportError(`response ${status} on ${method.toUpperCase()} ${path} must be an object`);
219
+ responseStatuses.push(status);
220
+ }
221
+ const notes = templated
222
+ ? [
223
+ "OpenAPI path templates import as single-segment :params - greedy remainders (*rest) cannot be distinguished and need manual rewrites",
224
+ ]
225
+ : [];
226
+ const operationId = rawOperation.operationId;
227
+ routes.push(Object.freeze({
228
+ method,
229
+ path,
230
+ ...(typeof operationId === "string" && operationId !== "" ? { operationId } : {}),
231
+ pathParams,
232
+ query: Object.freeze(query),
233
+ hasBody,
234
+ requestBodyRequired: hasBody && rawBody.required === true,
235
+ responseStatuses: Object.freeze(responseStatuses),
236
+ notes: Object.freeze(notes),
237
+ }));
238
+ }
239
+ }
240
+ if (routes.some((route) => route.pathParams.length > 0))
241
+ warnings.push("OpenAPI path templates import as single-segment :params - greedy remainders (*rest) cannot be distinguished and need manual rewrites; see route notes");
242
+ return {
243
+ title,
244
+ version,
245
+ routes: Object.freeze(routes),
246
+ warnings: Object.freeze(warnings),
247
+ };
248
+ }
249
+ function routeKey(method, path) {
250
+ return `${method.toUpperCase()} ${path}`;
251
+ }
252
+ /** Compare two inventories. Empty means the export/import cycle preserved the route table. */
253
+ export function diffOpenApiInventory(expected, actual) {
254
+ const drift = [];
255
+ const actualByKey = new Map(actual.routes.map((route) => [routeKey(route.method, route.path), route]));
256
+ const expectedKeys = new Set();
257
+ for (const want of expected.routes) {
258
+ const key = routeKey(want.method, want.path);
259
+ expectedKeys.add(key);
260
+ const got = actualByKey.get(key);
261
+ if (got === undefined) {
262
+ drift.push({ route: key, message: "route missing after import" });
263
+ continue;
264
+ }
265
+ const wantQuery = new Map(want.query.map((param) => [param.name, param.required]));
266
+ const gotQuery = new Map(got.query.map((param) => [param.name, param.required]));
267
+ for (const [name, required] of wantQuery) {
268
+ if (!gotQuery.has(name))
269
+ drift.push({ route: key, message: `query parameter '${name}' lost` });
270
+ else if (gotQuery.get(name) !== required)
271
+ drift.push({ route: key, message: `query parameter '${name}' required flag flipped` });
272
+ }
273
+ for (const name of gotQuery.keys()) {
274
+ if (!wantQuery.has(name))
275
+ drift.push({ route: key, message: `unexpected query parameter '${name}'` });
276
+ }
277
+ if (want.hasBody !== got.hasBody)
278
+ drift.push({
279
+ route: key,
280
+ message: want.hasBody ? "request body lost" : "unexpected request body",
281
+ });
282
+ else if (want.hasBody && want.requestBodyRequired !== got.requestBodyRequired)
283
+ drift.push({ route: key, message: "request body required flag flipped" });
284
+ const wantStatuses = new Set(want.responseStatuses);
285
+ const gotStatuses = new Set(got.responseStatuses);
286
+ for (const status of wantStatuses) {
287
+ if (!gotStatuses.has(status))
288
+ drift.push({ route: key, message: `response status ${status} lost` });
289
+ }
290
+ for (const status of gotStatuses) {
291
+ if (!wantStatuses.has(status))
292
+ drift.push({ route: key, message: `unexpected response status ${status}` });
293
+ }
294
+ }
295
+ for (const got of actual.routes) {
296
+ const key = routeKey(got.method, got.path);
297
+ if (!expectedKeys.has(key))
298
+ drift.push({ route: key, message: "unexpected route after import" });
299
+ }
300
+ return Object.freeze(drift);
301
+ }
302
+ //# sourceMappingURL=openapi-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-import.js","sourceRoot":"","sources":["../src/openapi-import.ts"],"names":[],"mappings":"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"}
package/dist/openapi.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { ContractShape } from "@nifrajs/core/contract";
2
+ import { type ProjectEvidenceSnapshot } from "@nifrajs/core/evidence";
2
3
  import { type JsonSchema } from "@nifrajs/core/reflection";
3
4
  import type { Server } from "@nifrajs/core/server";
4
5
  /**
@@ -39,6 +40,11 @@ export interface ToOpenAPIOptions {
39
40
  readonly securitySchemes?: Readonly<Record<string, Record<string, unknown>>>;
40
41
  /** Document-wide security requirement; a per-operation `security` (incl. `[]` for public) overrides it. */
41
42
  readonly security?: readonly SecurityRequirement[];
43
+ /**
44
+ * Reuse a canonical token-only route-evidence pass. This is useful for build artifacts and CLI
45
+ * projections that already evaluated the project; it never supplies runtime validators.
46
+ */
47
+ readonly evidence?: ProjectEvidenceSnapshot;
42
48
  /**
43
49
  * Per-operation overrides, shallow-merged over the generated operation. Keyed by `operationId`
44
50
  * (contract op name) or `"METHOD /path"` (e.g. `"GET /users/:id"`). The escape hatch for detail that
@@ -58,7 +64,7 @@ export interface ToOpenAPIOptions {
58
64
  }
59
65
  interface OpenAPIParameter {
60
66
  readonly name: string;
61
- readonly in: "path" | "query" | "header";
67
+ readonly in: "path" | "query" | "header" | "cookie";
62
68
  readonly required: boolean;
63
69
  readonly schema: JsonSchema;
64
70
  }
@@ -99,5 +105,7 @@ export interface OpenAPIDocument {
99
105
  }
100
106
  /** Generate an OpenAPI 3.1 document from a contract or a running app. See the module doc for the detail model. */
101
107
  export declare function toOpenAPI(input: ContractShape | Server, options?: ToOpenAPIOptions): OpenAPIDocument;
108
+ /** Generate OpenAPI from an existing canonical project-evidence snapshot without loading a server. */
109
+ export declare function toOpenAPIFromEvidence(evidence: ProjectEvidenceSnapshot, options?: Omit<ToOpenAPIOptions, "evidence">): OpenAPIDocument;
102
110
  export {};
103
111
  //# sourceMappingURL=openapi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}