swaggerizer 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/types.d.ts CHANGED
@@ -128,11 +128,38 @@ export interface SwaggerizerState {
128
128
  operations: OperationState[];
129
129
  lastReload?: string;
130
130
  changes: ChangeReport[];
131
+ validation: ValidationInfo;
131
132
  }
132
133
  export interface ScenarioSelection extends Scenario {
133
134
  method: string;
134
135
  route: string;
135
136
  }
137
+ /** How requests are checked against the spec: never, recorded only, or rejected with a 400. */
138
+ export type ValidationMode = "off" | "warn" | "enforce";
139
+ /** One contract violation found in a request. */
140
+ export interface ValidationIssue {
141
+ /** Dotted location: "query.limit", "body.ownerId", "header.x-tenant". */
142
+ location: string;
143
+ message: string;
144
+ /** Ajv keyword: "required", "type", "enum", "format"… */
145
+ keyword?: string;
146
+ }
147
+ export interface ValidationSummary {
148
+ request: ValidationIssue[];
149
+ /** Why a check did not run: "unsupported-media-type", "object-style", "form-nesting", "invalid-schema". */
150
+ skipped?: string;
151
+ }
152
+ /** What the admin page and `GET {endpoint}/api/validation` report about the active configuration. */
153
+ export interface ValidationInfo {
154
+ mode: ValidationMode;
155
+ /** Specs that override `mode`. */
156
+ perSpec: Record<string, ValidationMode>;
157
+ operations: Array<{
158
+ specId: string;
159
+ key: string;
160
+ hasRequestSchema: boolean;
161
+ }>;
162
+ }
136
163
  export interface RequestLogEntry {
137
164
  id: number;
138
165
  time: string;
@@ -140,13 +167,15 @@ export interface RequestLogEntry {
140
167
  path: string;
141
168
  route?: string;
142
169
  status: number;
143
- /** Variant served, or "custom" / "proxy" / "unmatched". */
170
+ /** Variant served, or "custom" / "proxy" / "unmatched" / "validation". */
144
171
  example: string;
145
172
  specId?: string;
146
173
  contentType?: string;
147
174
  /** "server" for the Node mock server, "msw" for requests reported by the MSW runtime. */
148
175
  source: "server" | "msw";
149
176
  ms?: number;
177
+ /** Present when validation ran and found issues, or could not check part of the request. */
178
+ validation?: ValidationSummary;
150
179
  }
151
180
  export type ChangeSeverity = "breaking" | "warning" | "info";
152
181
  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";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/ui/app.css CHANGED
@@ -1117,3 +1117,13 @@ pre.code {
1117
1117
  color: #0d1117;
1118
1118
  }
1119
1119
  }
1120
+
1121
+ /* Request validation chip in the live-request log. */
1122
+ .log-invalid {
1123
+ font: 700 11px/1 var(--mono);
1124
+ padding: 2px 6px;
1125
+ border-radius: 999px;
1126
+ background: var(--warn-soft);
1127
+ color: var(--warn);
1128
+ cursor: help;
1129
+ }
package/dist/ui/app.js CHANGED
@@ -103,6 +103,21 @@
103
103
  return "status status-" + ("12345".indexOf(first) >= 0 ? first : "5");
104
104
  }
105
105
 
106
+ /* Request validation: one chip whose tooltip lists the contract violations. */
107
+ function validationChip(validation) {
108
+ if (!validation) return null;
109
+ var issues = validation.request || [];
110
+ if (!issues.length && !validation.skipped) return null;
111
+ var title = issues.length
112
+ ? issues.map(function (issue) { return issue.location + ": " + issue.message; }).join("\n")
113
+ : "Not checked: " + validation.skipped;
114
+ return h("span", {
115
+ class: "log-invalid",
116
+ title: title,
117
+ text: issues.length ? "⚠ " + issues.length : "?"
118
+ });
119
+ }
120
+
106
121
  function methodBadge(method) {
107
122
  var m = String(method).toLowerCase();
108
123
  return h("span", { class: "method method-" + m, text: m.toUpperCase() });
@@ -258,10 +273,19 @@
258
273
  var active = ops.filter(function (o) { return o.active; });
259
274
  var changed = active.filter(function (o) { return o.modified; }).length;
260
275
  var breaking = (ui.data.changes || []).reduce(function (n, r) { return n + r.counts.breaking; }, 0);
276
+ var validation = ui.data.validation || {};
277
+ var mode = validation.mode || "off";
278
+ var perSpec = validation.perSpec || {};
279
+ var specModes = Object.keys(perSpec).map(function (id) { return perSpec[id]; }).filter(function (m) { return m !== mode; });
280
+ // Shown only when something is checked; specs that differ from the server mode are listed after it.
281
+ var showMode = mode !== "off" || specModes.some(function (m) { return m !== "off"; });
282
+ var modeTitle = "Requests are checked against the spec: off, warn or enforce" +
283
+ Object.keys(perSpec).map(function (id) { return "\n" + id + ": " + perSpec[id]; }).join("");
261
284
  el.stats.replaceChildren(
262
285
  h("span", null, h("strong", { text: String(enabled) }), " / " + specs.length + " specs on"),
263
286
  h("span", null, h("strong", { text: String(active.length) }), " endpoints served"),
264
287
  h("span", null, h("strong", { text: String(changed) }), " switched"),
288
+ showMode ? h("span", { title: modeTitle }, "validation ", h("strong", { text: mode + (specModes.length ? " +" + specModes.length : "") })) : null,
265
289
  breaking ? h("span", { class: "status-5" }, h("strong", { text: String(breaking) }), " breaking change" + (breaking === 1 ? "" : "s")) : null
266
290
  );
267
291
  }
@@ -711,6 +735,7 @@
711
735
  return h("li", { class: ui.freshLogIds.has(entry.id) ? "is-new" : "" },
712
736
  methodBadge(entry.method),
713
737
  h("span", { class: statusClass(entry.status), text: entry.status ? String(entry.status) : "→" }),
738
+ validationChip(entry.validation),
714
739
  h("span", { class: "log-path", text: entry.path }),
715
740
  h("span", { class: "log-meta" },
716
741
  entry.source === "msw" ? h("span", { class: "log-source", title: "Answered by MSW in a browser or test", text: "msw" }) : null,
@@ -0,0 +1,33 @@
1
+ import type { CatalogueOperation, ValidationIssue, ValidationMode, ValidationSummary } from "./types";
2
+ export declare const VALIDATION_HEADER = "x-swaggerizer-validation";
3
+ export interface ValidationInput {
4
+ /** Path parameters, already extracted for the matched route. */
5
+ params: Record<string, string>;
6
+ query: URLSearchParams;
7
+ headers: Record<string, string | string[] | undefined>;
8
+ /** Parsed JSON or form fields; undefined when the request carried no body. */
9
+ body?: unknown;
10
+ /** Set when the body could not be parsed. Reported as an issue rather than guessed at. */
11
+ bodyError?: string;
12
+ contentType?: string;
13
+ }
14
+ export interface Validator {
15
+ validateRequest: (op: CatalogueOperation, input: ValidationInput) => ValidationSummary;
16
+ /** True when the operation declares any parameter or a request body. */
17
+ hasRequestSchema: (op: CatalogueOperation) => boolean;
18
+ }
19
+ export declare function normaliseContentType(value: string | undefined): string | undefined;
20
+ /** The declared media type this request should be checked against, if any. */
21
+ export declare function matchMediaType(declared: string[], actual: string | undefined): string | undefined;
22
+ /** True when the operation (or its path item) declares any parameter or a request body. */
23
+ export declare function hasRequestSchema(doc: any, op: Pick<CatalogueOperation, "route" | "method">): boolean;
24
+ /** `X-Swaggerizer-Validation: off | warn | enforce`; unknown values fall back to the configured mode. */
25
+ export declare function parseValidationMode(value: string | undefined): ValidationMode | undefined;
26
+ /** True when one of `validateIgnore`'s operationIds or `"METHOD /route"` entries covers `op`. */
27
+ export declare function matchesIgnore(ignore: string[] | undefined, op: Pick<CatalogueOperation, "operationId" | "method" | "route" | "key">): boolean;
28
+ /** `validateIgnore` entries that match no operation, reported as a spec warning. */
29
+ export declare function unmatchedIgnore(ignore: string[] | undefined, operations: CatalogueOperation[]): string[];
30
+ /** "query.limit: must be integer" — used for log tooltips and CLI output. */
31
+ export declare function formatIssues(issues: ValidationIssue[]): string;
32
+ export declare function createValidator(doc: any, specId: string, specVersion?: string): Validator;
33
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEtG,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAQ5D,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,KAAK,iBAAiB,CAAC;IACvF,wEAAwE;IACxE,gBAAgB,EAAE,CAAC,EAAE,EAAE,kBAAkB,KAAK,OAAO,CAAC;CACvD;AAmND,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKlF;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAYjG;AAaD,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAQpG;AA+BD,yGAAyG;AACzG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAIzF;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAC5B,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC,GACvE,OAAO,CAMT;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAWxG;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAE9D;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAgLzF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swaggerizer",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "A strategizer for OpenAPI/Swagger: live-switchable mock APIs with an admin page and debug menu, orval-generated clients and MSW mocks, and contract-change warnings before you regenerate",
5
5
  "keywords": [
6
6
  "openapi",
@@ -71,6 +71,8 @@
71
71
  "homepage": "https://github.com/jayjaybeeuk/swaggerizer#readme",
72
72
  "dependencies": {
73
73
  "@apidevtools/swagger-parser": "^13.1.0",
74
+ "ajv": "^8.20.0",
75
+ "ajv-formats": "^3.0.1",
74
76
  "jiti": "^2.7.0",
75
77
  "orval": "^8.47.0",
76
78
  "swagger2openapi": "^7.0.8",
@@ -1,345 +0,0 @@
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({ code: response.code, example: ex.name, kind: "example", value: ex.value, response });
37
- }
38
- }
39
- else if (response.hasBody) {
40
- list.push({ code: response.code, example: GENERATED, kind: "generated", value: response.generated, response });
41
- }
42
- else {
43
- list.push({ code: response.code, example: EMPTY, kind: "empty", value: undefined, response });
44
- }
45
- }
46
- return list;
47
- }
48
- function findResponse(op, code) {
49
- return (op.responses.find(r => r.code === code) ||
50
- op.responses.find(r => String(r.status) === code) ||
51
- op.responses.find(r => r.code.toUpperCase() === code.toUpperCase()));
52
- }
53
- /** The variant that will actually be served for a code + requested example name. */
54
- function effectiveExample(op, code, requested) {
55
- const variants = variantsOf(op).filter(v => v.code === code);
56
- if (variants.length === 0)
57
- return EMPTY;
58
- return (variants.find(v => v.example === requested) || variants[0]).example;
59
- }
60
- /**
61
- * Combines every loaded spec with the scenario map. Specs are evaluated in order, so when two
62
- * enabled specs declare the same method + route the first one serves it and the others are
63
- * reported as shadowed.
64
- */
65
- function buildOperationStates(specs, scenarios) {
66
- const servedBy = new Map();
67
- const states = [];
68
- for (const spec of specs) {
69
- for (const op of spec.operations) {
70
- let active = spec.enabled && !spec.error;
71
- let shadowedBy;
72
- if (active) {
73
- const owner = servedBy.get(op.key);
74
- if (owner) {
75
- active = false;
76
- shadowedBy = owner;
77
- }
78
- else {
79
- servedBy.set(op.key, spec.id);
80
- }
81
- }
82
- states.push({ ...stateOf(op, scenarios[op.key]), active, ...(shadowedBy ? { shadowedBy } : {}) });
83
- }
84
- }
85
- return states;
86
- }
87
- function stateOf(op, scenario = {}) {
88
- const response = scenario.code ? findResponse(op, scenario.code) : undefined;
89
- const selectedCode = response ? response.code : op.defaultCode;
90
- const selectedExample = effectiveExample(op, selectedCode, scenario.example);
91
- const mode = scenario.mode && MODES.includes(scenario.mode) ? scenario.mode : "mock";
92
- const delay = Math.max(0, Number(scenario.delay) || 0);
93
- const modified = mode !== "mock" ||
94
- delay > 0 ||
95
- selectedCode !== op.defaultCode ||
96
- selectedExample !== effectiveExample(op, op.defaultCode, op.defaultExample);
97
- return {
98
- ...op,
99
- mode,
100
- selectedCode,
101
- selectedExample,
102
- delay,
103
- ...(scenario.custom ? { custom: scenario.custom } : {}),
104
- modified,
105
- active: true
106
- };
107
- }
108
- function isSet(value) {
109
- return value !== undefined && value !== null && value !== "";
110
- }
111
- function normaliseCustom(raw, label) {
112
- if (!raw || typeof raw !== "object")
113
- throw new Error(`${label}: custom must be an object with a status.`);
114
- const status = Number(raw.status);
115
- if (!Number.isInteger(status) || status < 100 || status > 599) {
116
- throw new Error(`${label}: custom.status must be an HTTP status between 100 and 599.`);
117
- }
118
- let body = raw.body;
119
- const contentType = isSet(raw.contentType) ? String(raw.contentType) : undefined;
120
- // Bodies typed into a form arrive as strings: keep JSON as data so it is re-serialised cleanly.
121
- if (typeof body === "string" && (!contentType || /json/i.test(contentType))) {
122
- const trimmed = body.trim();
123
- if (trimmed === "")
124
- body = undefined;
125
- else {
126
- try {
127
- body = JSON.parse(trimmed);
128
- }
129
- catch {
130
- if (contentType)
131
- throw new Error(`${label}: custom.body is not valid JSON.`);
132
- }
133
- }
134
- }
135
- const headers = {};
136
- if (raw.headers && typeof raw.headers === "object") {
137
- for (const [k, v] of Object.entries(raw.headers))
138
- headers[k] = String(v);
139
- }
140
- return {
141
- status,
142
- ...(body !== undefined ? { body } : {}),
143
- ...(contentType ? { contentType } : {}),
144
- ...(Object.keys(headers).length ? { headers } : {})
145
- };
146
- }
147
- /**
148
- * Validates a selection against an operation and returns the complete scenario to store. Throws a
149
- * readable error for unknown codes, examples or modes. Unset fields keep their current value.
150
- */
151
- function applySelection(op, selection, current = {}) {
152
- const label = `${op.method.toUpperCase()} ${op.route}`;
153
- const next = { ...current };
154
- if (isSet(selection.mode)) {
155
- const mode = String(selection.mode);
156
- if (!MODES.includes(mode))
157
- throw new Error(`${label}: mode must be one of ${MODES.join(", ")}.`);
158
- next.mode = mode;
159
- }
160
- let code = isSet(selection.code) ? String(selection.code) : undefined;
161
- const example = isSet(selection.example) ? String(selection.example) : undefined;
162
- if (!code && example) {
163
- // Allow `?example=notFound` on its own: find the response that declares it.
164
- const owner = variantsOf(op).find(v => v.example === example);
165
- if (!owner)
166
- throw new Error(`${label} has no example named '${example}'.`);
167
- code = owner.code;
168
- }
169
- if (code) {
170
- const response = findResponse(op, code);
171
- if (!response)
172
- throw new Error(`${label} does not declare a ${code} response.`);
173
- code = response.code;
174
- if (example) {
175
- const known = variantsOf(op).some(v => v.code === code && v.example === example);
176
- if (!known)
177
- throw new Error(`The ${code} response of ${label} has no example named '${example}'.`);
178
- }
179
- next.code = code;
180
- next.example = example ?? effectiveExample(op, code);
181
- if (!isSet(selection.mode))
182
- next.mode = "mock";
183
- }
184
- if (selection.custom !== undefined && selection.custom !== null) {
185
- next.custom = normaliseCustom(selection.custom, label);
186
- if (!isSet(selection.mode))
187
- next.mode = "custom";
188
- }
189
- if (next.mode === "custom" && !next.custom) {
190
- // Start the editor from whatever is currently being served.
191
- const state = stateOf(op, current);
192
- const variant = variantsOf(op).find(v => v.code === state.selectedCode && v.example === state.selectedExample);
193
- next.custom = {
194
- status: variant?.response.status ?? 200,
195
- ...(variant?.value !== undefined ? { body: variant.value } : {})
196
- };
197
- }
198
- if (isSet(selection.delay)) {
199
- const delay = Number(selection.delay);
200
- if (!Number.isFinite(delay) || delay < 0 || delay > MAX_DELAY_MS) {
201
- throw new Error(`${label}: delay must be between 0 and ${MAX_DELAY_MS} ms.`);
202
- }
203
- next.delay = Math.round(delay);
204
- }
205
- if (next.mode === "mock")
206
- delete next.mode;
207
- if (!next.delay)
208
- delete next.delay;
209
- return next;
210
- }
211
- /** Parses the per-request override header: `404`, `404:notFound`, `notFound`, `proxy`, `custom`. */
212
- function parseScenarioHeader(value) {
213
- if (!value)
214
- return undefined;
215
- const raw = String(value).trim();
216
- if (!raw)
217
- return undefined;
218
- if (MODES.includes(raw))
219
- return { mode: raw };
220
- const [first, ...rest] = raw.split(":");
221
- if (/^(\d{3}|[1-5]XX|default)$/i.test(first)) {
222
- return { code: first, ...(rest.length ? { example: rest.join(":") } : {}), mode: "mock" };
223
- }
224
- return { example: raw, mode: "mock" };
225
- }
226
- /** Decides what to send for one request to an operation. */
227
- function resolveResponse(op, override) {
228
- let state = op;
229
- if (override) {
230
- try {
231
- state = { ...op, ...stateOf(op, applySelection(op, override, scenarioFromState(op))) };
232
- }
233
- catch {
234
- // An override that does not fit this operation is ignored rather than failing the request.
235
- }
236
- }
237
- if (state.mode === "proxy")
238
- return { kind: "proxy", delay: state.delay };
239
- if (state.mode === "custom" && state.custom) {
240
- return {
241
- kind: "respond",
242
- status: state.custom.status,
243
- contentType: state.custom.contentType ?? (state.custom.body !== undefined ? "application/json" : undefined),
244
- headers: state.custom.headers,
245
- body: state.custom.body,
246
- variant: "custom",
247
- code: String(state.custom.status),
248
- delay: state.delay
249
- };
250
- }
251
- const variant = variantsOf(state).find(v => v.code === state.selectedCode && v.example === state.selectedExample);
252
- if (!variant) {
253
- return { kind: "respond", status: 200, body: {}, contentType: "application/json", variant: EMPTY, code: "200", delay: state.delay };
254
- }
255
- const contentType = variant.response.contentTypes.find(t => /json/i.test(t)) || variant.response.contentTypes[0];
256
- return {
257
- kind: "respond",
258
- status: variant.response.status,
259
- contentType,
260
- body: variant.kind === "empty" ? undefined : variant.value,
261
- variant: variant.example,
262
- code: variant.code,
263
- delay: state.delay
264
- };
265
- }
266
- function scenarioFromState(op) {
267
- return {
268
- code: op.selectedCode,
269
- example: op.selectedExample,
270
- ...(op.mode !== "mock" ? { mode: op.mode } : {}),
271
- ...(op.custom ? { custom: op.custom } : {}),
272
- ...(op.delay ? { delay: op.delay } : {})
273
- };
274
- }
275
- /** Serialises a resolved body for the wire. */
276
- function encodeBody(body, contentType) {
277
- if (body === undefined)
278
- return undefined;
279
- if (typeof body === "string" && contentType && !/json/i.test(contentType))
280
- return body;
281
- return JSON.stringify(body);
282
- }
283
- const routeCache = new Map();
284
- function escapeRegex(text) {
285
- return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
286
- }
287
- function compileRoute(route) {
288
- const cached = routeCache.get(route);
289
- if (cached)
290
- return cached;
291
- let statics = 0;
292
- let params = 0;
293
- const pattern = route
294
- .split("/")
295
- .map(segment => {
296
- if (!segment)
297
- return "";
298
- if (/\{[^}]+\}/.test(segment)) {
299
- params++;
300
- return segment
301
- .split(/(\{[^}]+\})/)
302
- .map(part => (/^\{[^}]+\}$/.test(part) ? "([^/]+)" : escapeRegex(part)))
303
- .join("");
304
- }
305
- statics++;
306
- return escapeRegex(segment);
307
- })
308
- .join("/");
309
- const compiled = { regex: new RegExp(`^${pattern || "/"}/?$`), statics, params };
310
- routeCache.set(route, compiled);
311
- return compiled;
312
- }
313
- /** Converts `/pets/{petId}` to the `/pets/:petId` syntax used by MSW. */
314
- function toMswPath(route) {
315
- return route.replace(/\{([^}]+)\}/g, (_m, name) => `:${name.replace(/[^A-Za-z0-9_]/g, "_")}`);
316
- }
317
- /** Static segments beat templated ones, so `/pets/mine` wins over `/pets/{petId}`. */
318
- function routeSpecificity(a, b) {
319
- const ra = compileRoute(a.route);
320
- const rb = compileRoute(b.route);
321
- return rb.statics - ra.statics || ra.params - rb.params || a.route.localeCompare(b.route);
322
- }
323
- /**
324
- * Finds the active operation that serves `method` + `pathname`, trying the path as-is and with
325
- * each known base path (from `servers`) stripped.
326
- */
327
- function matchOperation(operations, method, pathname, basePaths = []) {
328
- const m = method.toLowerCase();
329
- const candidates = operations.filter(op => op.active && op.method === m).sort(routeSpecificity);
330
- const paths = [pathname];
331
- for (const base of basePaths) {
332
- if (base && (pathname === base || pathname.startsWith(base + "/"))) {
333
- paths.push(pathname.slice(base.length) || "/");
334
- }
335
- }
336
- for (const path of paths) {
337
- const found = candidates.find(op => compileRoute(op.route).regex.test(path));
338
- if (found)
339
- return found;
340
- }
341
- return undefined;
342
- }
343
-
344
- export { EMPTY as E, GENERATED as G, HTTP_METHODS as H, SCENARIO_HEADER as S, applySelection as a, buildOperationStates as b, effectiveExample as c, routeSpecificity as d, encodeBody as e, matchOperation as m, operationKey as o, parseScenarioHeader as p, resolveResponse as r, scenarioFromState as s, toMswPath as t, variantsOf as v };
345
- //# sourceMappingURL=scenario-5a1VnDmg.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scenario-5a1VnDmg.mjs","sources":["../../src/types.ts","../../src/scenario.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}