swaggerizer 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +359 -2
  3. package/dist/admin.d.ts +35 -0
  4. package/dist/admin.d.ts.map +1 -0
  5. package/dist/catalogue.d.ts +22 -0
  6. package/dist/catalogue.d.ts.map +1 -0
  7. package/dist/chunks/scenario-5a1VnDmg.mjs +345 -0
  8. package/dist/chunks/scenario-5a1VnDmg.mjs.map +1 -0
  9. package/dist/chunks/scenario-BeXAfctR.mjs +347 -0
  10. package/dist/chunks/scenario-BeXAfctR.mjs.map +1 -0
  11. package/dist/chunks/scenario-CGR-NuEy.mjs +371 -0
  12. package/dist/chunks/scenario-CGR-NuEy.mjs.map +1 -0
  13. package/dist/chunks/scenario-DKCQMD5-.js +364 -0
  14. package/dist/chunks/scenario-DKCQMD5-.js.map +1 -0
  15. package/dist/chunks/scenario-DXI-TbMN.mjs +371 -0
  16. package/dist/chunks/scenario-DXI-TbMN.mjs.map +1 -0
  17. package/dist/chunks/scenario-_ZBu5fJX.js +391 -0
  18. package/dist/chunks/scenario-_ZBu5fJX.js.map +1 -0
  19. package/dist/chunks/scenario-yqSnVp0L.js +362 -0
  20. package/dist/chunks/scenario-yqSnVp0L.js.map +1 -0
  21. package/dist/cli.d.ts +2 -0
  22. package/dist/cli.d.ts.map +1 -0
  23. package/dist/cli.js +2977 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/config.d.ts +100 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +129 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/config.mjs +120 -0
  30. package/dist/config.mjs.map +1 -0
  31. package/dist/contract.d.ts +60 -0
  32. package/dist/contract.d.ts.map +1 -0
  33. package/dist/debug-menu.d.ts +20 -0
  34. package/dist/debug-menu.d.ts.map +1 -0
  35. package/dist/debug-menu.js +238 -0
  36. package/dist/debug-menu.js.map +1 -0
  37. package/dist/debug-menu.mjs +236 -0
  38. package/dist/debug-menu.mjs.map +1 -0
  39. package/dist/generate.d.ts +74 -0
  40. package/dist/generate.d.ts.map +1 -0
  41. package/dist/index.d.ts +14 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +2397 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/index.mjs +2343 -0
  46. package/dist/index.mjs.map +1 -0
  47. package/dist/load-config.d.ts +15 -0
  48. package/dist/load-config.d.ts.map +1 -0
  49. package/dist/msw.d.ts +48 -0
  50. package/dist/msw.d.ts.map +1 -0
  51. package/dist/msw.js +324 -0
  52. package/dist/msw.js.map +1 -0
  53. package/dist/msw.mjs +317 -0
  54. package/dist/msw.mjs.map +1 -0
  55. package/dist/paths.d.ts +14 -0
  56. package/dist/paths.d.ts.map +1 -0
  57. package/dist/pull.d.ts +31 -0
  58. package/dist/pull.d.ts.map +1 -0
  59. package/dist/scenario.d.ts +86 -0
  60. package/dist/scenario.d.ts.map +1 -0
  61. package/dist/schema.d.ts +13 -0
  62. package/dist/schema.d.ts.map +1 -0
  63. package/dist/server.d.ts +83 -0
  64. package/dist/server.d.ts.map +1 -0
  65. package/dist/spec.d.ts +36 -0
  66. package/dist/spec.d.ts.map +1 -0
  67. package/dist/types.d.ts +175 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/ui/app.css +1119 -0
  70. package/dist/ui/app.js +806 -0
  71. package/dist/ui/index.html +77 -0
  72. package/dist/ui-assets.d.ts +9 -0
  73. package/dist/ui-assets.d.ts.map +1 -0
  74. package/package.json +99 -4
package/dist/spec.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ import { type Contract } from "./contract";
2
+ import type { CatalogueOperation } from "./types";
3
+ export declare const SPEC_FILE_PATTERN: RegExp;
4
+ export interface LoadedSpec {
5
+ file: string;
6
+ /** "2.0" for Swagger, otherwise the `openapi` version. */
7
+ specVersion?: string;
8
+ /** Bundled OpenAPI 3 document (Swagger 2 is converted). */
9
+ doc: any;
10
+ /** The bundled document as published (before any Swagger 2 conversion); what orval is given for URL specs. */
11
+ raw?: any;
12
+ warnings: string[];
13
+ }
14
+ export interface LoadSpecOptions {
15
+ /** Request headers for spec URLs, e.g. `{ Authorization: "Bearer …" }` for a protected api-docs endpoint. */
16
+ headers?: Record<string, string>;
17
+ /** Give up on a spec URL after this many ms (default 30000). */
18
+ timeout?: number;
19
+ }
20
+ /** Quick check used when scanning folders: is this YAML/JSON file an OpenAPI or Swagger document? */
21
+ export declare function looksLikeSpec(file: string): Promise<boolean>;
22
+ export declare function listSpecFiles(folder: string): Promise<string[]>;
23
+ export declare function loadSpecFile(file: string, options?: LoadSpecOptions): Promise<LoadedSpec>;
24
+ /** Stable id for a spec file: its basename without extensions (`users.swagger.json` → `users`). */
25
+ export declare function specIdFor(file: string): string;
26
+ export interface AnalysedSpec extends LoadedSpec {
27
+ id: string;
28
+ operations: CatalogueOperation[];
29
+ contract: Contract;
30
+ basePaths: string[];
31
+ serverUrl?: string;
32
+ }
33
+ export declare function analyseSpecFile(file: string, id?: string, options?: LoadSpecOptions): Promise<AnalysedSpec>;
34
+ /** Accepts a mix of spec files and folders and returns every spec file, folder contents sorted. */
35
+ export declare function resolveSpecInputs(inputs: string[]): Promise<string[]>;
36
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,iBAAiB,QAAqB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,GAAG,EAAE,GAAG,CAAC;IACT,8GAA8G;IAC9G,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,6GAA6G;IAC7G,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmED,qGAAqG;AACrG,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUrE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoCnG;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAkB,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAU9H;AAED,mGAAmG;AACnG,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAa3E"}
@@ -0,0 +1,175 @@
1
+ export type HttpMethod = "get" | "put" | "post" | "delete" | "options" | "head" | "patch" | "trace";
2
+ export declare const HTTP_METHODS: HttpMethod[];
3
+ /** Variant name used for a response that has a body but no explicit examples in the spec. */
4
+ export declare const GENERATED = "generated";
5
+ /** Variant name used for a response that declares no body at all. */
6
+ export declare const EMPTY = "empty";
7
+ /** How an operation is answered. */
8
+ export type ScenarioMode =
9
+ /** Serve one of the responses declared in the spec (named example or generated sample). */
10
+ "mock"
11
+ /** Serve a response typed in by hand in the admin page / debug menu. */
12
+ | "custom"
13
+ /** Forward the request to the real API (proxy on the server, `passthrough()` in MSW). */
14
+ | "proxy";
15
+ export interface CustomResponse {
16
+ status: number;
17
+ body?: unknown;
18
+ contentType?: string;
19
+ headers?: Record<string, string>;
20
+ }
21
+ /** What the admin has chosen for one method + route. Every field is optional: unset means default. */
22
+ export interface Scenario {
23
+ code?: string;
24
+ example?: string;
25
+ mode?: ScenarioMode;
26
+ custom?: CustomResponse;
27
+ /** Artificial latency in milliseconds. */
28
+ delay?: number;
29
+ }
30
+ export type ScenarioMap = Record<string, Scenario>;
31
+ /** A single named example (or synthesised payload) that a response can serve. */
32
+ export interface CatalogueExample {
33
+ name: string;
34
+ summary?: string;
35
+ value: unknown;
36
+ /** Overrides the response's content type for this example (scenario overlays). */
37
+ contentType?: string;
38
+ headers?: Record<string, string>;
39
+ /** True when the example came from a scenario overlay rather than the spec. */
40
+ overlay?: boolean;
41
+ }
42
+ /** One response code declared for an operation. */
43
+ export interface CatalogueResponse {
44
+ /** As written in the spec: "200", "404", "2XX" or "default". */
45
+ code: string;
46
+ /** The HTTP status actually sent for this response. */
47
+ status: number;
48
+ description?: string;
49
+ contentTypes: string[];
50
+ hasBody: boolean;
51
+ examples: CatalogueExample[];
52
+ /** Deterministic sample synthesised from the schema; present when there are no explicit examples. */
53
+ generated?: unknown;
54
+ }
55
+ /** One HTTP method on one route, as declared by a single spec file. */
56
+ export interface CatalogueOperation {
57
+ /** `${method}:${route}` – the key used by the scenario planner. */
58
+ key: string;
59
+ method: HttpMethod;
60
+ /** OpenAPI path template, e.g. `/pets/{petId}`. */
61
+ route: string;
62
+ specId: string;
63
+ operationId?: string;
64
+ summary?: string;
65
+ description?: string;
66
+ tags: string[];
67
+ deprecated?: boolean;
68
+ responses: CatalogueResponse[];
69
+ defaultCode: string;
70
+ defaultExample: string;
71
+ }
72
+ export interface OperationState extends CatalogueOperation {
73
+ mode: ScenarioMode;
74
+ selectedCode: string;
75
+ /** The variant that will actually be served (falls back to the first variant of the code). */
76
+ selectedExample: string;
77
+ delay: number;
78
+ custom?: CustomResponse;
79
+ modified: boolean;
80
+ /** False when the spec is disabled or another enabled spec already serves this method + route. */
81
+ active: boolean;
82
+ shadowedBy?: string;
83
+ }
84
+ /** The parts of a loaded spec the scenario planner needs. */
85
+ export interface PlannerSpec {
86
+ id: string;
87
+ enabled: boolean;
88
+ error?: string;
89
+ operations: CatalogueOperation[];
90
+ }
91
+ /** Everything the MSW runtime needs to know about one spec, embedded in generated code. */
92
+ export interface SwaggerizerManifest {
93
+ specId: string;
94
+ title?: string;
95
+ version?: string;
96
+ /** Path prefixes taken from `servers` (e.g. `/v1`); requests may arrive with or without them. */
97
+ basePaths: string[];
98
+ operations: CatalogueOperation[];
99
+ /** Scenario defaults saved from the admin page when the code was generated. */
100
+ scenarios?: ScenarioMap;
101
+ /** Request path prefixes that are rewritten before matching, e.g. `{ "/bff/v4/": "/v4/" }`. */
102
+ aliases?: Record<string, string>;
103
+ }
104
+ export interface SpecSummary {
105
+ id: string;
106
+ file: string;
107
+ name: string;
108
+ title?: string;
109
+ version?: string;
110
+ /** "2.0", "3.0.3", "3.1.0"… */
111
+ specVersion?: string;
112
+ enabled: boolean;
113
+ loadedAt: string;
114
+ error?: string;
115
+ warnings: string[];
116
+ basePaths: string[];
117
+ aliases?: Record<string, string>;
118
+ /** Where the spec was loaded from when it is not a local file. */
119
+ source?: string;
120
+ proxyTarget?: string;
121
+ operationCount: number;
122
+ }
123
+ export interface SwaggerizerState {
124
+ endpoint: string;
125
+ defaultDelay?: number;
126
+ fallback?: string;
127
+ specs: SpecSummary[];
128
+ operations: OperationState[];
129
+ lastReload?: string;
130
+ changes: ChangeReport[];
131
+ }
132
+ export interface ScenarioSelection extends Scenario {
133
+ method: string;
134
+ route: string;
135
+ }
136
+ export interface RequestLogEntry {
137
+ id: number;
138
+ time: string;
139
+ method: string;
140
+ path: string;
141
+ route?: string;
142
+ status: number;
143
+ /** Variant served, or "custom" / "proxy" / "unmatched". */
144
+ example: string;
145
+ specId?: string;
146
+ contentType?: string;
147
+ /** "server" for the Node mock server, "msw" for requests reported by the MSW runtime. */
148
+ source: "server" | "msw";
149
+ ms?: number;
150
+ }
151
+ export type ChangeSeverity = "breaking" | "warning" | "info";
152
+ export type ChangeKind = "operation-added" | "operation-removed" | "operation-renamed" | "operation-deprecated" | "parameter-added" | "parameter-removed" | "parameter-changed" | "request-body-added" | "request-body-removed" | "request-body-changed" | "response-added" | "response-removed" | "response-changed";
153
+ export interface ContractChange {
154
+ severity: ChangeSeverity;
155
+ kind: ChangeKind;
156
+ /** e.g. `GET /pets/{petId}` */
157
+ operation: string;
158
+ /** e.g. `response 200 body.items[].name` */
159
+ location?: string;
160
+ message: string;
161
+ }
162
+ export interface ChangeReport {
163
+ specId: string;
164
+ title?: string;
165
+ /** What the spec was compared against. */
166
+ baseline: "snapshot" | "previous-load";
167
+ fromVersion?: string;
168
+ toVersion?: string;
169
+ added: string[];
170
+ removed: string[];
171
+ changed: string[];
172
+ changes: ContractChange[];
173
+ counts: Record<ChangeSeverity, number>;
174
+ }
175
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}