@haddowg/json-api-codegen 1.0.0 → 1.1.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/dist/cli.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { r as CodegenConfig } from "./index-C0becRSc.mjs";
1
+ import { r as CodegenConfig } from "./index-JD2FpQHX.mjs";
2
2
 
3
3
  //#region src/cli.d.ts
4
4
  declare const USAGE = "Usage: json-api-codegen --input <url|file> --output <file> [--server <name>] [--schemas <url|file>] [--check]";
@@ -9,6 +9,12 @@ declare const USAGE = "Usage: json-api-codegen --input <url|file> --output <file
9
9
  */
10
10
  declare function parseArgs(argv: string[]): Partial<CodegenConfig>;
11
11
  declare function run(argv: string[]): Promise<number>;
12
+ /**
13
+ * Whether the module at `moduleUrl` is the script node was asked to run (`argv1`). Compares real
14
+ * paths, because a package manager installs the bin as a symlink (`node_modules/.bin/...`) and
15
+ * node reports the symlink in `process.argv[1]` but the resolved file in `import.meta.url`.
16
+ */
17
+ declare function isEntry(moduleUrl: string, argv1: string | undefined): boolean;
12
18
  //#endregion
13
- export { USAGE, parseArgs, run };
19
+ export { USAGE, isEntry, parseArgs, run };
14
20
  //# sourceMappingURL=cli.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.mts","names":[],"sources":["../src/cli.ts"],"mappings":";;;cAIa,KAAA;AAAb;;;;AAAkB;AAAlB,iBAQgB,SAAA,CAAU,IAAA,aAAiB,OAAO,CAAC,aAAA;AAAA,iBA6B7B,GAAA,CAAI,IAAA,aAAiB,OAAO"}
1
+ {"version":3,"file":"cli.d.mts","names":[],"sources":["../src/cli.ts"],"mappings":";;;cAKa,KAAA;AAAb;;;;AAAkB;AAAlB,iBAQgB,SAAA,CAAU,IAAA,aAAiB,OAAO,CAAC,aAAA;AAAA,iBA6B7B,GAAA,CAAI,IAAA,aAAiB,OAAO;;;;;;iBAgClC,OAAA,CAAQ,SAAA,UAAmB,KAAyB"}
package/dist/cli.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { n as generate, t as check } from "./src-B24cYyjM.mjs";
3
- import { pathToFileURL } from "node:url";
2
+ import { n as generate, r as schemasOutputPath, t as check } from "./src-CDV4z7In.mjs";
3
+ import { realpathSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
4
5
  //#region src/cli.ts
5
6
  const USAGE = "Usage: json-api-codegen --input <url|file> --output <file> [--server <name>] [--schemas <url|file>] [--check]";
6
7
  /**
@@ -50,17 +51,31 @@ async function run(argv) {
50
51
  return 0;
51
52
  }
52
53
  await generate(config);
54
+ console.error(`wrote ${config.output}`);
55
+ if (config.schemas !== void 0) console.error(`wrote ${schemasOutputPath(config.output)}`);
53
56
  return 0;
54
57
  }
58
+ /**
59
+ * Whether the module at `moduleUrl` is the script node was asked to run (`argv1`). Compares real
60
+ * paths, because a package manager installs the bin as a symlink (`node_modules/.bin/...`) and
61
+ * node reports the symlink in `process.argv[1]` but the resolved file in `import.meta.url`.
62
+ */
63
+ function isEntry(moduleUrl, argv1) {
64
+ if (argv1 === void 0) return false;
65
+ try {
66
+ return realpathSync(fileURLToPath(moduleUrl)) === realpathSync(argv1);
67
+ } catch {
68
+ return false;
69
+ }
70
+ }
55
71
  async function main() {
56
72
  process.exitCode = await run(process.argv.slice(2));
57
73
  }
58
- const entry = process.argv[1];
59
- if (entry !== void 0 && import.meta.url === pathToFileURL(entry).href) main().catch((error) => {
74
+ if (isEntry(import.meta.url, process.argv[1])) main().catch((error) => {
60
75
  console.error(error instanceof Error ? error.message : error);
61
76
  process.exitCode = 1;
62
77
  });
63
78
  //#endregion
64
- export { USAGE, parseArgs, run };
79
+ export { USAGE, isEntry, parseArgs, run };
65
80
 
66
81
  //# sourceMappingURL=cli.mjs.map
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { pathToFileURL } from 'node:url'\nimport { check, generate, type CodegenConfig } from './index'\n\nexport const USAGE =\n 'Usage: json-api-codegen --input <url|file> --output <file> [--server <name>] [--schemas <url|file>] [--check]'\n\n/**\n * Thin CLI wrapper. Real arg parsing + `japi.config.ts` discovery land with the\n * generator itself; this stub establishes the bin entry and the shape of invocation.\n * `--check` is a boolean flag (drift gate) with no value.\n */\nexport function parseArgs(argv: string[]): Partial<CodegenConfig> {\n const config: Partial<CodegenConfig> = {}\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]\n if (arg === '--check') {\n config.check = true\n continue\n }\n const next = argv[i + 1]\n if (next === undefined) {\n continue\n }\n if (arg === '--input') {\n config.input = next\n i++\n } else if (arg === '--output') {\n config.output = next\n i++\n } else if (arg === '--server') {\n config.server = next\n i++\n } else if (arg === '--schemas') {\n config.schemas = next\n i++\n }\n }\n return config\n}\n\nexport async function run(argv: string[]): Promise<number> {\n const config = parseArgs(argv)\n if (!config.input || !config.output) {\n console.error(USAGE)\n return 1\n }\n if (config.check) {\n const result = await check(config as CodegenConfig)\n for (const { path, upToDate } of result.artifacts) {\n console.error(`${upToDate ? 'ok ' : 'DRIFT'} ${path}`)\n }\n if (!result.ok) {\n console.error(\n 'Generated client is out of date with the source spec. Regenerate (drop --check) and commit the result.',\n )\n return 1\n }\n return 0\n }\n await generate(config as CodegenConfig)\n return 0\n}\n\nasync function main(): Promise<void> {\n process.exitCode = await run(process.argv.slice(2))\n}\n\n// Only run when invoked as the bin, not when imported (e.g. by tests).\nconst entry = process.argv[1]\nif (entry !== undefined && import.meta.url === pathToFileURL(entry).href) {\n main().catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : error)\n process.exitCode = 1\n })\n}\n"],"mappings":";;;;AAIA,MAAa,QACX;;;;;;AAOF,SAAgB,UAAU,MAAwC;CAChE,MAAM,SAAiC,CAAC;CACxC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,MAAM,KAAK;EACjB,IAAI,QAAQ,WAAW;GACrB,OAAO,QAAQ;GACf;EACF;EACA,MAAM,OAAO,KAAK,IAAI;EACtB,IAAI,SAAS,KAAA,GACX;EAEF,IAAI,QAAQ,WAAW;GACrB,OAAO,QAAQ;GACf;EACF,OAAO,IAAI,QAAQ,YAAY;GAC7B,OAAO,SAAS;GAChB;EACF,OAAO,IAAI,QAAQ,YAAY;GAC7B,OAAO,SAAS;GAChB;EACF,OAAO,IAAI,QAAQ,aAAa;GAC9B,OAAO,UAAU;GACjB;EACF;CACF;CACA,OAAO;AACT;AAEA,eAAsB,IAAI,MAAiC;CACzD,MAAM,SAAS,UAAU,IAAI;CAC7B,IAAI,CAAC,OAAO,SAAS,CAAC,OAAO,QAAQ;EACnC,QAAQ,MAAM,KAAK;EACnB,OAAO;CACT;CACA,IAAI,OAAO,OAAO;EAChB,MAAM,SAAS,MAAM,MAAM,MAAuB;EAClD,KAAK,MAAM,EAAE,MAAM,cAAc,OAAO,WACtC,QAAQ,MAAM,GAAG,WAAW,SAAS,QAAQ,GAAG,MAAM;EAExD,IAAI,CAAC,OAAO,IAAI;GACd,QAAQ,MACN,wGACF;GACA,OAAO;EACT;EACA,OAAO;CACT;CACA,MAAM,SAAS,MAAuB;CACtC,OAAO;AACT;AAEA,eAAe,OAAsB;CACnC,QAAQ,WAAW,MAAM,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAC;AACpD;AAGA,MAAM,QAAQ,QAAQ,KAAK;AAC3B,IAAI,UAAU,KAAA,KAAa,OAAO,KAAK,QAAQ,cAAc,KAAK,CAAC,CAAC,MAClE,KAAK,CAAC,CAAC,OAAO,UAAmB;CAC/B,QAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,KAAK;CAC5D,QAAQ,WAAW;AACrB,CAAC"}
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { realpathSync } from 'node:fs'\nimport { fileURLToPath } from 'node:url'\nimport { check, generate, schemasOutputPath, type CodegenConfig } from './index'\n\nexport const USAGE =\n 'Usage: json-api-codegen --input <url|file> --output <file> [--server <name>] [--schemas <url|file>] [--check]'\n\n/**\n * Thin CLI wrapper. Real arg parsing + `japi.config.ts` discovery land with the\n * generator itself; this stub establishes the bin entry and the shape of invocation.\n * `--check` is a boolean flag (drift gate) with no value.\n */\nexport function parseArgs(argv: string[]): Partial<CodegenConfig> {\n const config: Partial<CodegenConfig> = {}\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]\n if (arg === '--check') {\n config.check = true\n continue\n }\n const next = argv[i + 1]\n if (next === undefined) {\n continue\n }\n if (arg === '--input') {\n config.input = next\n i++\n } else if (arg === '--output') {\n config.output = next\n i++\n } else if (arg === '--server') {\n config.server = next\n i++\n } else if (arg === '--schemas') {\n config.schemas = next\n i++\n }\n }\n return config\n}\n\nexport async function run(argv: string[]): Promise<number> {\n const config = parseArgs(argv)\n if (!config.input || !config.output) {\n console.error(USAGE)\n return 1\n }\n if (config.check) {\n const result = await check(config as CodegenConfig)\n for (const { path, upToDate } of result.artifacts) {\n console.error(`${upToDate ? 'ok ' : 'DRIFT'} ${path}`)\n }\n if (!result.ok) {\n console.error(\n 'Generated client is out of date with the source spec. Regenerate (drop --check) and commit the result.',\n )\n return 1\n }\n return 0\n }\n await generate(config as CodegenConfig)\n console.error(`wrote ${config.output}`)\n if (config.schemas !== undefined) {\n console.error(`wrote ${schemasOutputPath(config.output)}`)\n }\n return 0\n}\n\n/**\n * Whether the module at `moduleUrl` is the script node was asked to run (`argv1`). Compares real\n * paths, because a package manager installs the bin as a symlink (`node_modules/.bin/...`) and\n * node reports the symlink in `process.argv[1]` but the resolved file in `import.meta.url`.\n */\nexport function isEntry(moduleUrl: string, argv1: string | undefined): boolean {\n if (argv1 === undefined) {\n return false\n }\n try {\n return realpathSync(fileURLToPath(moduleUrl)) === realpathSync(argv1)\n } catch {\n return false\n }\n}\n\nasync function main(): Promise<void> {\n process.exitCode = await run(process.argv.slice(2))\n}\n\n// Only run when invoked as the bin, not when imported (e.g. by tests).\nif (isEntry(import.meta.url, process.argv[1])) {\n main().catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : error)\n process.exitCode = 1\n })\n}\n"],"mappings":";;;;;AAKA,MAAa,QACX;;;;;;AAOF,SAAgB,UAAU,MAAwC;CAChE,MAAM,SAAiC,CAAC;CACxC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,MAAM,KAAK;EACjB,IAAI,QAAQ,WAAW;GACrB,OAAO,QAAQ;GACf;EACF;EACA,MAAM,OAAO,KAAK,IAAI;EACtB,IAAI,SAAS,KAAA,GACX;EAEF,IAAI,QAAQ,WAAW;GACrB,OAAO,QAAQ;GACf;EACF,OAAO,IAAI,QAAQ,YAAY;GAC7B,OAAO,SAAS;GAChB;EACF,OAAO,IAAI,QAAQ,YAAY;GAC7B,OAAO,SAAS;GAChB;EACF,OAAO,IAAI,QAAQ,aAAa;GAC9B,OAAO,UAAU;GACjB;EACF;CACF;CACA,OAAO;AACT;AAEA,eAAsB,IAAI,MAAiC;CACzD,MAAM,SAAS,UAAU,IAAI;CAC7B,IAAI,CAAC,OAAO,SAAS,CAAC,OAAO,QAAQ;EACnC,QAAQ,MAAM,KAAK;EACnB,OAAO;CACT;CACA,IAAI,OAAO,OAAO;EAChB,MAAM,SAAS,MAAM,MAAM,MAAuB;EAClD,KAAK,MAAM,EAAE,MAAM,cAAc,OAAO,WACtC,QAAQ,MAAM,GAAG,WAAW,SAAS,QAAQ,GAAG,MAAM;EAExD,IAAI,CAAC,OAAO,IAAI;GACd,QAAQ,MACN,wGACF;GACA,OAAO;EACT;EACA,OAAO;CACT;CACA,MAAM,SAAS,MAAuB;CACtC,QAAQ,MAAM,SAAS,OAAO,QAAQ;CACtC,IAAI,OAAO,YAAY,KAAA,GACrB,QAAQ,MAAM,SAAS,kBAAkB,OAAO,MAAM,GAAG;CAE3D,OAAO;AACT;;;;;;AAOA,SAAgB,QAAQ,WAAmB,OAAoC;CAC7E,IAAI,UAAU,KAAA,GACZ,OAAO;CAET,IAAI;EACF,OAAO,aAAa,cAAc,SAAS,CAAC,MAAM,aAAa,KAAK;CACtE,QAAQ;EACN,OAAO;CACT;AACF;AAEA,eAAe,OAAsB;CACnC,QAAQ,WAAW,MAAM,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAC;AACpD;AAGA,IAAI,QAAQ,OAAO,KAAK,KAAK,QAAQ,KAAK,EAAE,GAC1C,KAAK,CAAC,CAAC,OAAO,UAAmB;CAC/B,QAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,KAAK;CAC5D,QAAQ,WAAW;AACrB,CAAC"}
@@ -42,6 +42,8 @@ interface ParameterObject {
42
42
  in?: string;
43
43
  $ref?: string;
44
44
  schema?: SchemaObject;
45
+ style?: string;
46
+ explode?: boolean;
45
47
  /** The negotiation profile a client must opt into to use this parameter (e.g. `withCount`). */
46
48
  'x-profile'?: string;
47
49
  }
@@ -55,6 +57,10 @@ type PathItemObject = Partial<Record<HttpMethod, OperationObject>>;
55
57
  interface InfoObject {
56
58
  title?: string;
57
59
  version?: string;
60
+ /** The projector's generator contract, bumped whenever the emitted structure changes. */
61
+ 'x-generator'?: {
62
+ contract?: number;
63
+ };
58
64
  }
59
65
  interface OpenApiDocument {
60
66
  openapi?: string;
@@ -160,15 +166,24 @@ declare class DescriptorBuilder {
160
166
  /** Any `P/{id}/<rel>` related path (excludes relationships/ and custom `-actions`). */
161
167
  private hasRelatedPath;
162
168
  private hasRelationshipPath;
163
- /** Detect the paginator kind from the fetchMany operation's query parameter names. */
169
+ /** Detect the paginator from the fetchMany operation's page parameters. */
164
170
  private paginator;
165
171
  /**
166
- * Detect the paginator kind an operation advertises from its `page[...]` query parameter names.
167
- * `page[number]`+`page[size]` = `page`; `page[offset]`+`page[limit]` = `offset`; either cursor
168
- * bound (`page[after]`/`page[before]`) = `cursor` (link-driven, D44); anything else = `none`.
169
- * `label` (a path, for the drift warning) names the endpoint when page params match no known kind.
172
+ * Detect the paginator an operation advertises. A page schema stamped with `x-paginator`
173
+ * (contract 3) names its strategy and the wire key for each role, so it decides both. Without
174
+ * the stamp, the strategy is inferred from canonical member names (see {@link kindOfMembers}).
175
+ * Anything unrecognised warns and generates as unpaginated. `label` (a path) names the endpoint
176
+ * in the warning; without it nothing is logged.
177
+ */
178
+ private paginatorOf;
179
+ /**
180
+ * The `page` members an operation accepts, from either wire form: one `page` parameter
181
+ * (`style: deepObject`) whose schema `properties` name the members, as `haddowg/json-api` v1
182
+ * projects it, or the older flattened `page[number]`/`page[size]` parameters. A `oneOf` page
183
+ * schema (a MultiPaginator menu) yields each arm's members in `menu` instead, minus the
184
+ * `kind` discriminator.
170
185
  */
171
- private paginatorKindOf;
186
+ private pageMembers;
172
187
  /**
173
188
  * The `withCount` capability (Countable profile) for a type's COLLECTION read (`list`): the
174
189
  * count tokens (`schema.items.enum`) + the negotiation profile (`x-profile`) carried by the
@@ -206,7 +221,6 @@ declare class DescriptorBuilder {
206
221
  * deliberately not captured — `filter` values stay `unknown` (out of scope for v0.1).
207
222
  */
208
223
  private filterable;
209
- private queryParamNames;
210
224
  private operation;
211
225
  private requestBodyRef;
212
226
  private okResponseRef;
@@ -216,6 +230,19 @@ declare function buildDescriptor(doc: OpenApiDocument): ApiDescriptor;
216
230
  /** Detect the server-level Atomic Operations capability (`null` when none). */
217
231
  declare function buildAtomic(doc: OpenApiDocument): AtomicDescriptor | null;
218
232
  //#endregion
233
+ //#region src/contract.d.ts
234
+ /** Below this the document predates the structures this codegen reads. */
235
+ declare const MINIMUM_CONTRACT = 1;
236
+ /** Above this the document carries structures this codegen does not read. */
237
+ declare const MAXIMUM_CONTRACT = 4;
238
+ /**
239
+ * Check the document's `info.x-generator.contract` against the range this codegen reads. A
240
+ * document older than the range throws; a newer one returns a warning, because its new
241
+ * structures would go unread and the client would silently miss what the server offers. A
242
+ * document with no contract (json-api before 1.1.0) passes.
243
+ */
244
+ declare function checkContract(doc: OpenApiDocument): string | undefined;
245
+ //#endregion
219
246
  //#region src/emit.d.ts
220
247
  /** A relation name that will later collide with a fluent-surface verb. */
221
248
  interface VerbCollision {
@@ -347,6 +374,41 @@ declare class Emitter {
347
374
  */
348
375
  declare function emit(doc: OpenApiDocument, descriptor: ApiDescriptor, atomic?: AtomicDescriptor | null): string;
349
376
  //#endregion
377
+ //#region src/error-codes.d.ts
378
+ /** One documented error code, with whatever the document says about it. */
379
+ interface DocumentedErrorCode {
380
+ code: string;
381
+ /** The `<Code>Error` component's `description`, when the document has one (contract 4). */
382
+ description?: string;
383
+ /** Example `detail` values, from the component's `detail` property (`example` / `examples`). */
384
+ examples: unknown[];
385
+ }
386
+ /** The server's error catalogue as the codegen reads it. */
387
+ interface ErrorCatalogue {
388
+ /** Every code any error document offers, sorted by code. */
389
+ codes: DocumentedErrorCode[];
390
+ /**
391
+ * Per status, the codes its `ErrorDocument<NNN>` offers, sorted by code. A status whose
392
+ * document offers only the generic `Error` maps to an empty list.
393
+ */
394
+ byStatus: Map<number, string[]>;
395
+ }
396
+ /**
397
+ * Read the documented error codes off a document's error documents. `ErrorDocument` and each
398
+ * `ErrorDocument<NNN>` offer their codes as `errors.items.anyOf` branches that `$ref` a
399
+ * `<Code>Error` component; a branch with a `code` const names a code, and the generic `Error`
400
+ * branch (no const) names none.
401
+ */
402
+ declare function readErrorCatalogue(doc: OpenApiDocument): ErrorCatalogue;
403
+ /**
404
+ * Emit `ErrorCodes`, a const object keyed by every documented code with its TSDoc on the key
405
+ * (editors show TSDoc on an object key, not on a string-literal union member), the `ErrorCode`
406
+ * union derived from it, and `ErrorCodeByStatus`, the codes each status's error document offers.
407
+ * A document with no code catalogue gets an empty `ErrorCodes` and `ErrorCode = string`, so the
408
+ * bound guard still takes any code.
409
+ */
410
+ declare function emitErrorCodes(catalogue: ErrorCatalogue): string;
411
+ //#endregion
350
412
  //#region src/reader.d.ts
351
413
  /** A self-contained JSON Schema document, keyed by JSON:API type, as served at `GET /schemas.json`. */
352
414
  type SchemaBundle = Record<string, SchemaObject>;
@@ -467,5 +529,5 @@ declare function generate(config: CodegenConfig): Promise<string>;
467
529
  */
468
530
  declare function check(config: CodegenConfig): Promise<CheckResult>;
469
531
  //#endregion
470
- export { ResponseObject as A, InfoObject as C, ParameterObject as D, OperationObject as E, SchemaOrBool as M, PathItemObject as O, HttpMethod as S, OpenApiDocument as T, detectVerbCollisions as _, generate as a, buildAtomic as b, deriveProvenance as c, emitSchemas as d, SchemaBundle as f, VerbCollision as g, Emitter as h, check as i, SchemaObject as j, RequestBodyObject as k, hashJson as l, readSchemas as m, CheckResult as n, schemasOutputPath as o, readDocument as p, CodegenConfig as r, Provenance as s, ArtifactDrift as t, provenanceLines as u, emit as v, MediaTypeObject as w, buildDescriptor as x, DescriptorBuilder as y };
471
- //# sourceMappingURL=index-C0becRSc.d.mts.map
532
+ export { InfoObject as A, MAXIMUM_CONTRACT as C, buildAtomic as D, DescriptorBuilder as E, PathItemObject as F, RequestBodyObject as I, ResponseObject as L, OpenApiDocument as M, OperationObject as N, buildDescriptor as O, ParameterObject as P, SchemaObject as R, emit as S, checkContract as T, emitErrorCodes as _, generate as a, VerbCollision as b, deriveProvenance as c, emitSchemas as d, SchemaBundle as f, ErrorCatalogue as g, DocumentedErrorCode as h, check as i, MediaTypeObject as j, HttpMethod as k, hashJson as l, readSchemas as m, CheckResult as n, schemasOutputPath as o, readDocument as p, CodegenConfig as r, Provenance as s, ArtifactDrift as t, provenanceLines as u, readErrorCatalogue as v, MINIMUM_CONTRACT as w, detectVerbCollisions as x, Emitter as y, SchemaOrBool as z };
533
+ //# sourceMappingURL=index-JD2FpQHX.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-JD2FpQHX.d.mts","names":[],"sources":["../src/openapi.ts","../src/build-descriptor.ts","../src/contract.ts","../src/emit.ts","../src/error-codes.ts","../src/reader.ts","../src/emit-schemas.ts","../src/provenance.ts","../src/index.ts"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as ResponseObject, C as InfoObject, D as ParameterObject, E as OperationObject, M as SchemaOrBool, O as PathItemObject, S as HttpMethod, T as OpenApiDocument, _ as detectVerbCollisions, a as generate, b as buildAtomic, c as deriveProvenance, d as emitSchemas, f as SchemaBundle, g as VerbCollision, h as Emitter, i as check, j as SchemaObject, k as RequestBodyObject, l as hashJson, m as readSchemas, n as CheckResult, o as schemasOutputPath, p as readDocument, r as CodegenConfig, s as Provenance, t as ArtifactDrift, u as provenanceLines, v as emit, w as MediaTypeObject, x as buildDescriptor, y as DescriptorBuilder } from "./index-C0becRSc.mjs";
2
- export { ArtifactDrift, CheckResult, CodegenConfig, DescriptorBuilder, Emitter, type HttpMethod, type InfoObject, type MediaTypeObject, type OpenApiDocument, type OperationObject, type ParameterObject, type PathItemObject, type Provenance, type RequestBodyObject, type ResponseObject, type SchemaBundle, type SchemaObject, type SchemaOrBool, type VerbCollision, buildAtomic, buildDescriptor, check, deriveProvenance, detectVerbCollisions, emit, emitSchemas, generate, hashJson, provenanceLines, readDocument, readSchemas, schemasOutputPath };
1
+ import { A as InfoObject, C as MAXIMUM_CONTRACT, D as buildAtomic, E as DescriptorBuilder, F as PathItemObject, I as RequestBodyObject, L as ResponseObject, M as OpenApiDocument, N as OperationObject, O as buildDescriptor, P as ParameterObject, R as SchemaObject, S as emit, T as checkContract, _ as emitErrorCodes, a as generate, b as VerbCollision, c as deriveProvenance, d as emitSchemas, f as SchemaBundle, g as ErrorCatalogue, h as DocumentedErrorCode, i as check, j as MediaTypeObject, k as HttpMethod, l as hashJson, m as readSchemas, n as CheckResult, o as schemasOutputPath, p as readDocument, r as CodegenConfig, s as Provenance, t as ArtifactDrift, u as provenanceLines, v as readErrorCatalogue, w as MINIMUM_CONTRACT, x as detectVerbCollisions, y as Emitter, z as SchemaOrBool } from "./index-JD2FpQHX.mjs";
2
+ export { ArtifactDrift, CheckResult, CodegenConfig, DescriptorBuilder, type DocumentedErrorCode, Emitter, type ErrorCatalogue, type HttpMethod, type InfoObject, MAXIMUM_CONTRACT, MINIMUM_CONTRACT, type MediaTypeObject, type OpenApiDocument, type OperationObject, type ParameterObject, type PathItemObject, type Provenance, type RequestBodyObject, type ResponseObject, type SchemaBundle, type SchemaObject, type SchemaOrBool, type VerbCollision, buildAtomic, buildDescriptor, check, checkContract, deriveProvenance, detectVerbCollisions, emit, emitErrorCodes, emitSchemas, generate, hashJson, provenanceLines, readDocument, readErrorCatalogue, readSchemas, schemasOutputPath };
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { a as readSchemas, c as detectVerbCollisions, d as hashJson, f as provenanceLines, h as buildDescriptor, i as readDocument, l as emit, m as buildAtomic, n as generate, o as emitSchemas, p as DescriptorBuilder, r as schemasOutputPath, s as Emitter, t as check, u as deriveProvenance } from "./src-B24cYyjM.mjs";
2
- export { DescriptorBuilder, Emitter, buildAtomic, buildDescriptor, check, deriveProvenance, detectVerbCollisions, emit, emitSchemas, generate, hashJson, provenanceLines, readDocument, readSchemas, schemasOutputPath };
1
+ import { _ as checkContract, a as readSchemas, b as buildDescriptor, c as detectVerbCollisions, d as hashJson, f as provenanceLines, g as MINIMUM_CONTRACT, h as MAXIMUM_CONTRACT, i as readDocument, l as emit, m as readErrorCatalogue, n as generate, o as emitSchemas, p as emitErrorCodes, r as schemasOutputPath, s as Emitter, t as check, u as deriveProvenance, v as DescriptorBuilder, y as buildAtomic } from "./src-CDV4z7In.mjs";
2
+ export { DescriptorBuilder, Emitter, MAXIMUM_CONTRACT, MINIMUM_CONTRACT, buildAtomic, buildDescriptor, check, checkContract, deriveProvenance, detectVerbCollisions, emit, emitErrorCodes, emitSchemas, generate, hashJson, provenanceLines, readDocument, readErrorCatalogue, readSchemas, schemasOutputPath };