swaggerizer 0.0.0-stage → 1.0.1

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 (64) 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-DXI-TbMN.mjs +371 -0
  8. package/dist/chunks/scenario-DXI-TbMN.mjs.map +1 -0
  9. package/dist/chunks/scenario-_ZBu5fJX.js +391 -0
  10. package/dist/chunks/scenario-_ZBu5fJX.js.map +1 -0
  11. package/dist/cli.d.ts +2 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +2977 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +100 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +129 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/config.mjs +120 -0
  20. package/dist/config.mjs.map +1 -0
  21. package/dist/contract.d.ts +60 -0
  22. package/dist/contract.d.ts.map +1 -0
  23. package/dist/debug-menu.d.ts +20 -0
  24. package/dist/debug-menu.d.ts.map +1 -0
  25. package/dist/debug-menu.js +238 -0
  26. package/dist/debug-menu.js.map +1 -0
  27. package/dist/debug-menu.mjs +236 -0
  28. package/dist/debug-menu.mjs.map +1 -0
  29. package/dist/generate.d.ts +74 -0
  30. package/dist/generate.d.ts.map +1 -0
  31. package/dist/index.d.ts +14 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +2397 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/index.mjs +2343 -0
  36. package/dist/index.mjs.map +1 -0
  37. package/dist/load-config.d.ts +15 -0
  38. package/dist/load-config.d.ts.map +1 -0
  39. package/dist/msw.d.ts +48 -0
  40. package/dist/msw.d.ts.map +1 -0
  41. package/dist/msw.js +324 -0
  42. package/dist/msw.js.map +1 -0
  43. package/dist/msw.mjs +317 -0
  44. package/dist/msw.mjs.map +1 -0
  45. package/dist/paths.d.ts +14 -0
  46. package/dist/paths.d.ts.map +1 -0
  47. package/dist/pull.d.ts +31 -0
  48. package/dist/pull.d.ts.map +1 -0
  49. package/dist/scenario.d.ts +86 -0
  50. package/dist/scenario.d.ts.map +1 -0
  51. package/dist/schema.d.ts +13 -0
  52. package/dist/schema.d.ts.map +1 -0
  53. package/dist/server.d.ts +83 -0
  54. package/dist/server.d.ts.map +1 -0
  55. package/dist/spec.d.ts +36 -0
  56. package/dist/spec.d.ts.map +1 -0
  57. package/dist/types.d.ts +175 -0
  58. package/dist/types.d.ts.map +1 -0
  59. package/dist/ui/app.css +1119 -0
  60. package/dist/ui/app.js +806 -0
  61. package/dist/ui/index.html +77 -0
  62. package/dist/ui-assets.d.ts +9 -0
  63. package/dist/ui-assets.d.ts.map +1 -0
  64. package/package.json +99 -4
@@ -0,0 +1,371 @@
1
+ /*
2
+ * Shared types. This file must stay free of Node imports: it is used by the server, the MSW
3
+ * runtime (browser + node) and the in-page debug menu.
4
+ */
5
+ const HTTP_METHODS = [
6
+ "get",
7
+ "put",
8
+ "post",
9
+ "delete",
10
+ "options",
11
+ "head",
12
+ "patch",
13
+ "trace"
14
+ ];
15
+ /** Variant name used for a response that has a body but no explicit examples in the spec. */
16
+ const GENERATED = "generated";
17
+ /** Variant name used for a response that declares no body at all. */
18
+ const EMPTY = "empty";
19
+
20
+ /*
21
+ * The scenario planner: which response each operation serves. Pure and browser-safe — shared by
22
+ * the Node mock server, the MSW runtime and the in-page debug menu so they all behave the same.
23
+ */
24
+ const SCENARIO_HEADER = "x-swaggerizer-scenario";
25
+ const MODES = ["mock", "custom", "proxy"];
26
+ const MAX_DELAY_MS = 120_000;
27
+ function operationKey(method, route) {
28
+ return `${String(method).toLowerCase()}:${route}`;
29
+ }
30
+ /** Every selectable (code, example) pair for an operation. */
31
+ function variantsOf(op) {
32
+ const list = [];
33
+ for (const response of op.responses) {
34
+ if (response.examples.length > 0) {
35
+ for (const ex of response.examples) {
36
+ list.push({
37
+ code: response.code,
38
+ example: ex.name,
39
+ kind: "example",
40
+ value: ex.value,
41
+ response,
42
+ ...(ex.contentType ? { contentType: ex.contentType } : {}),
43
+ ...(ex.headers ? { headers: ex.headers } : {})
44
+ });
45
+ }
46
+ }
47
+ else if (response.hasBody) {
48
+ list.push({ code: response.code, example: GENERATED, kind: "generated", value: response.generated, response });
49
+ }
50
+ else {
51
+ list.push({ code: response.code, example: EMPTY, kind: "empty", value: undefined, response });
52
+ }
53
+ }
54
+ return list;
55
+ }
56
+ function findResponse(op, code) {
57
+ return (op.responses.find(r => r.code === code) ||
58
+ op.responses.find(r => String(r.status) === code) ||
59
+ op.responses.find(r => r.code.toUpperCase() === code.toUpperCase()));
60
+ }
61
+ /** The variant that will actually be served for a code + requested example name. */
62
+ function effectiveExample(op, code, requested) {
63
+ const variants = variantsOf(op).filter(v => v.code === code);
64
+ if (variants.length === 0)
65
+ return EMPTY;
66
+ return (variants.find(v => v.example === requested) || variants[0]).example;
67
+ }
68
+ function buildOperationStates(specs, scenarios, options = {}) {
69
+ const servedBy = new Map();
70
+ const states = [];
71
+ for (const spec of specs) {
72
+ for (const op of spec.operations) {
73
+ let active = spec.enabled && !spec.error;
74
+ let shadowedBy;
75
+ if (active) {
76
+ const owner = servedBy.get(op.key);
77
+ if (owner) {
78
+ active = false;
79
+ shadowedBy = owner;
80
+ }
81
+ else {
82
+ servedBy.set(op.key, spec.id);
83
+ }
84
+ }
85
+ states.push({ ...stateOf(op, scenarios[op.key], options), active, ...(shadowedBy ? { shadowedBy } : {}) });
86
+ }
87
+ }
88
+ return states;
89
+ }
90
+ function stateOf(op, scenario = {}, options = {}) {
91
+ const response = scenario.code ? findResponse(op, scenario.code) : undefined;
92
+ const selectedCode = response ? response.code : op.defaultCode;
93
+ const selectedExample = effectiveExample(op, selectedCode, scenario.example);
94
+ const mode = scenario.mode && MODES.includes(scenario.mode) ? scenario.mode : "mock";
95
+ const defaultDelay = Math.max(0, Number(options.defaultDelay) || 0);
96
+ const delay = scenario.delay === undefined ? defaultDelay : Math.max(0, Number(scenario.delay) || 0);
97
+ const modified = mode !== "mock" ||
98
+ delay !== defaultDelay ||
99
+ selectedCode !== op.defaultCode ||
100
+ selectedExample !== effectiveExample(op, op.defaultCode, op.defaultExample);
101
+ return {
102
+ ...op,
103
+ mode,
104
+ selectedCode,
105
+ selectedExample,
106
+ delay,
107
+ ...(scenario.custom ? { custom: scenario.custom } : {}),
108
+ modified,
109
+ active: true
110
+ };
111
+ }
112
+ function isSet(value) {
113
+ return value !== undefined && value !== null && value !== "";
114
+ }
115
+ function normaliseCustom(raw, label) {
116
+ if (!raw || typeof raw !== "object")
117
+ throw new Error(`${label}: custom must be an object with a status.`);
118
+ const status = Number(raw.status);
119
+ if (!Number.isInteger(status) || status < 100 || status > 599) {
120
+ throw new Error(`${label}: custom.status must be an HTTP status between 100 and 599.`);
121
+ }
122
+ let body = raw.body;
123
+ let contentType = isSet(raw.contentType) ? String(raw.contentType) : undefined;
124
+ // Bodies typed into a form arrive as strings: keep JSON as data so it is re-serialised cleanly.
125
+ if (typeof body === "string" && (!contentType || /json/i.test(contentType))) {
126
+ const trimmed = body.trim();
127
+ if (trimmed === "")
128
+ body = undefined;
129
+ else {
130
+ try {
131
+ body = JSON.parse(trimmed);
132
+ }
133
+ catch {
134
+ if (contentType)
135
+ throw new Error(`${label}: custom.body is not valid JSON.`);
136
+ // Not JSON and no content type given: send it exactly as typed.
137
+ contentType = "text/plain";
138
+ }
139
+ }
140
+ }
141
+ const headers = {};
142
+ if (raw.headers && typeof raw.headers === "object") {
143
+ for (const [k, v] of Object.entries(raw.headers))
144
+ headers[k] = String(v);
145
+ }
146
+ return {
147
+ status,
148
+ ...(body !== undefined ? { body } : {}),
149
+ ...(contentType ? { contentType } : {}),
150
+ ...(Object.keys(headers).length ? { headers } : {})
151
+ };
152
+ }
153
+ /**
154
+ * Validates a selection against an operation and returns the complete scenario to store. Throws a
155
+ * readable error for unknown codes, examples or modes. Unset fields keep their current value.
156
+ */
157
+ function applySelection(op, selection, current = {}) {
158
+ const label = `${op.method.toUpperCase()} ${op.route}`;
159
+ const next = { ...current };
160
+ if (isSet(selection.mode)) {
161
+ const mode = String(selection.mode);
162
+ if (!MODES.includes(mode))
163
+ throw new Error(`${label}: mode must be one of ${MODES.join(", ")}.`);
164
+ next.mode = mode;
165
+ }
166
+ let code = isSet(selection.code) ? String(selection.code) : undefined;
167
+ const example = isSet(selection.example) ? String(selection.example) : undefined;
168
+ if (!code && example) {
169
+ // Allow `?example=notFound` on its own: find the response that declares it.
170
+ const owner = variantsOf(op).find(v => v.example === example);
171
+ if (!owner)
172
+ throw new Error(`${label} has no example named '${example}'.`);
173
+ code = owner.code;
174
+ }
175
+ if (code) {
176
+ const response = findResponse(op, code);
177
+ if (!response)
178
+ throw new Error(`${label} does not declare a ${code} response.`);
179
+ code = response.code;
180
+ if (example) {
181
+ const known = variantsOf(op).some(v => v.code === code && v.example === example);
182
+ if (!known)
183
+ throw new Error(`The ${code} response of ${label} has no example named '${example}'.`);
184
+ }
185
+ next.code = code;
186
+ next.example = example ?? effectiveExample(op, code);
187
+ if (!isSet(selection.mode))
188
+ next.mode = "mock";
189
+ }
190
+ if (selection.custom !== undefined && selection.custom !== null) {
191
+ next.custom = normaliseCustom(selection.custom, label);
192
+ if (!isSet(selection.mode))
193
+ next.mode = "custom";
194
+ }
195
+ if (next.mode === "custom" && !next.custom) {
196
+ // Start the editor from whatever is currently being served.
197
+ const state = stateOf(op, current);
198
+ const variant = variantsOf(op).find(v => v.code === state.selectedCode && v.example === state.selectedExample);
199
+ next.custom = {
200
+ status: variant?.response.status ?? 200,
201
+ ...(variant?.value !== undefined ? { body: variant.value } : {})
202
+ };
203
+ }
204
+ if (isSet(selection.delay)) {
205
+ const delay = Number(selection.delay);
206
+ if (!Number.isFinite(delay) || delay < 0 || delay > MAX_DELAY_MS) {
207
+ throw new Error(`${label}: delay must be between 0 and ${MAX_DELAY_MS} ms.`);
208
+ }
209
+ next.delay = Math.round(delay);
210
+ }
211
+ if (next.mode === "mock")
212
+ delete next.mode;
213
+ // An explicit 0 is kept: it overrides a server-wide default delay.
214
+ if (next.delay === undefined)
215
+ delete next.delay;
216
+ return next;
217
+ }
218
+ /** Parses the per-request override header: `404`, `404:notFound`, `notFound`, `proxy`, `custom`. */
219
+ function parseScenarioHeader(value) {
220
+ if (!value)
221
+ return undefined;
222
+ const raw = String(value).trim();
223
+ if (!raw)
224
+ return undefined;
225
+ if (MODES.includes(raw))
226
+ return { mode: raw };
227
+ const [first, ...rest] = raw.split(":");
228
+ if (/^(\d{3}|[1-5]XX|default)$/i.test(first)) {
229
+ return { code: first, ...(rest.length ? { example: rest.join(":") } : {}), mode: "mock" };
230
+ }
231
+ return { example: raw, mode: "mock" };
232
+ }
233
+ /** Decides what to send for one request to an operation. */
234
+ function resolveResponse(op, override) {
235
+ let state = op;
236
+ if (override) {
237
+ try {
238
+ const scenario = applySelection(op, override, scenarioFromState(op));
239
+ state = { ...op, ...stateOf(op, { delay: op.delay, ...scenario }) };
240
+ }
241
+ catch {
242
+ // An override that does not fit this operation is ignored rather than failing the request.
243
+ }
244
+ }
245
+ if (state.mode === "proxy")
246
+ return { kind: "proxy", delay: state.delay };
247
+ if (state.mode === "custom" && state.custom) {
248
+ return {
249
+ kind: "respond",
250
+ status: state.custom.status,
251
+ contentType: state.custom.contentType ?? (state.custom.body !== undefined ? "application/json" : undefined),
252
+ headers: state.custom.headers,
253
+ body: state.custom.body,
254
+ variant: "custom",
255
+ code: String(state.custom.status),
256
+ delay: state.delay
257
+ };
258
+ }
259
+ const variant = variantsOf(state).find(v => v.code === state.selectedCode && v.example === state.selectedExample);
260
+ if (!variant) {
261
+ return { kind: "respond", status: 200, body: {}, contentType: "application/json", variant: EMPTY, code: "200", delay: state.delay };
262
+ }
263
+ const contentType = variant.contentType || variant.response.contentTypes.find(t => /json/i.test(t)) || variant.response.contentTypes[0];
264
+ return {
265
+ kind: "respond",
266
+ status: variant.response.status,
267
+ contentType,
268
+ ...(variant.headers ? { headers: variant.headers } : {}),
269
+ body: variant.kind === "empty" ? undefined : variant.value,
270
+ variant: variant.example,
271
+ code: variant.code,
272
+ delay: state.delay
273
+ };
274
+ }
275
+ function scenarioFromState(op) {
276
+ return {
277
+ code: op.selectedCode,
278
+ example: op.selectedExample,
279
+ ...(op.mode !== "mock" ? { mode: op.mode } : {}),
280
+ ...(op.custom ? { custom: op.custom } : {}),
281
+ delay: op.delay
282
+ };
283
+ }
284
+ /** Serialises a resolved body for the wire. */
285
+ function encodeBody(body, contentType) {
286
+ if (body === undefined)
287
+ return undefined;
288
+ if (typeof body === "string" && contentType && !/json/i.test(contentType))
289
+ return body;
290
+ return JSON.stringify(body);
291
+ }
292
+ const routeCache = new Map();
293
+ function escapeRegex(text) {
294
+ return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
295
+ }
296
+ function compileRoute(route) {
297
+ const cached = routeCache.get(route);
298
+ if (cached)
299
+ return cached;
300
+ let statics = 0;
301
+ let params = 0;
302
+ const pattern = route
303
+ .split("/")
304
+ .map(segment => {
305
+ if (!segment)
306
+ return "";
307
+ if (/\{[^}]+\}/.test(segment)) {
308
+ params++;
309
+ return segment
310
+ .split(/(\{[^}]+\})/)
311
+ .map(part => (/^\{[^}]+\}$/.test(part) ? "([^/]+)" : escapeRegex(part)))
312
+ .join("");
313
+ }
314
+ statics++;
315
+ return escapeRegex(segment);
316
+ })
317
+ .join("/");
318
+ const compiled = { regex: new RegExp(`^${pattern || "/"}/?$`), statics, params };
319
+ routeCache.set(route, compiled);
320
+ return compiled;
321
+ }
322
+ /** Converts `/pets/{petId}` to the `/pets/:petId` syntax used by MSW. */
323
+ function toMswPath(route) {
324
+ return route.replace(/\{([^}]+)\}/g, (_m, name) => `:${name.replace(/[^A-Za-z0-9_]/g, "_")}`);
325
+ }
326
+ /** Static segments beat templated ones, so `/pets/mine` wins over `/pets/{petId}`. */
327
+ function routeSpecificity(a, b) {
328
+ const ra = compileRoute(a.route);
329
+ const rb = compileRoute(b.route);
330
+ return rb.statics - ra.statics || ra.params - rb.params || a.route.localeCompare(b.route);
331
+ }
332
+ /**
333
+ * Finds the active operation that serves `method` + `pathname`, trying the path as-is and with
334
+ * each known base path (from `servers`) stripped.
335
+ */
336
+ function matchOperation(operations, method, pathname, basePaths = [], aliases = {}) {
337
+ const m = method.toLowerCase();
338
+ const candidates = operations.filter(op => op.active && op.method === m).sort(routeSpecificity);
339
+ return candidatePaths(pathname, basePaths, aliases)
340
+ .map(path => candidates.find(op => compileRoute(op.route).regex.test(path)))
341
+ .find(Boolean);
342
+ }
343
+ /** Replaces a matching alias prefix: `/online-banking/bff/v4/x` with `{ "/online-banking/bff/v4/": "/v4/online-banking/" }` → `/v4/online-banking/x`. */
344
+ function applyAliases(pathname, aliases = {}) {
345
+ const out = [];
346
+ for (const [from, to] of Object.entries(aliases)) {
347
+ if (from && pathname.startsWith(from))
348
+ out.push(to + pathname.slice(from.length));
349
+ }
350
+ return out;
351
+ }
352
+ /** Every spelling of a request path worth matching: as-is, de-aliased, and with base paths stripped. */
353
+ function candidatePaths(pathname, basePaths = [], aliases = {}) {
354
+ const paths = [pathname, ...applyAliases(pathname, aliases)];
355
+ for (const path of [...paths]) {
356
+ for (const base of basePaths) {
357
+ if (base && (path === base || path.startsWith(base + "/")))
358
+ paths.push(path.slice(base.length) || "/");
359
+ }
360
+ }
361
+ return [...new Set(paths)];
362
+ }
363
+ /** The base path that prefixes `pathname` (after aliases), and the path relative to it. */
364
+ function relativeToBase(pathname, basePaths = [], aliases = {}) {
365
+ const [aliased = pathname] = applyAliases(pathname, aliases);
366
+ const base = basePaths.find(b => aliased === b || aliased.startsWith(b + "/"));
367
+ return base ? aliased.slice(base.length) || "/" : aliased;
368
+ }
369
+
370
+ export { EMPTY as E, GENERATED as G, HTTP_METHODS as H, SCENARIO_HEADER as S, applySelection as a, buildOperationStates as b, candidatePaths as c, relativeToBase as d, encodeBody as e, applyAliases as f, effectiveExample as g, routeSpecificity as h, matchOperation as m, operationKey as o, parseScenarioHeader as p, resolveResponse as r, scenarioFromState as s, toMswPath as t, variantsOf as v };
371
+ //# sourceMappingURL=scenario-DXI-TbMN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-DXI-TbMN.mjs","sources":["../../src/types.ts","../../src/scenario.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}