assert-json-body 1.6.1 → 1.7.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 (85) hide show
  1. package/README.md +219 -95
  2. package/dist/assertion/diff-recordings-vs-spec.js +7 -3
  3. package/dist/assertion/diff-recordings-vs-spec.js.map +1 -1
  4. package/dist/assertion/playwright-type.d.ts.map +1 -1
  5. package/dist/assertion/summarize-recordings.js.map +1 -1
  6. package/dist/cli/index.js +35 -7
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/extractor/src/lib/child-expansion.d.ts.map +1 -1
  9. package/dist/extractor/src/lib/child-expansion.js.map +1 -1
  10. package/dist/extractor/src/lib/git.d.ts.map +1 -1
  11. package/dist/extractor/src/lib/git.js.map +1 -1
  12. package/dist/extractor/src/lib/ref-resolver.d.ts.map +1 -1
  13. package/dist/extractor/src/lib/ref-resolver.js.map +1 -1
  14. package/dist/extractor/src/lib/schema-flatten.d.ts.map +1 -1
  15. package/dist/extractor/src/lib/schema-flatten.js +19 -9
  16. package/dist/extractor/src/lib/schema-flatten.js.map +1 -1
  17. package/dist/extractor/src/lib/type-utils.d.ts.map +1 -1
  18. package/dist/extractor/src/lib/type-utils.js +3 -1
  19. package/dist/extractor/src/lib/type-utils.js.map +1 -1
  20. package/dist/lib/assert.d.ts.map +1 -1
  21. package/dist/lib/assert.js +6 -1
  22. package/dist/lib/assert.js.map +1 -1
  23. package/dist/lib/config.d.ts.map +1 -1
  24. package/dist/lib/config.js +27 -3
  25. package/dist/lib/config.js.map +1 -1
  26. package/dist/lib/extractor.d.ts.map +1 -1
  27. package/dist/lib/extractor.js +67 -23
  28. package/dist/lib/extractor.js.map +1 -1
  29. package/dist/lib/recorder.d.ts.map +1 -1
  30. package/dist/lib/recorder.js +12 -5
  31. package/dist/lib/recorder.js.map +1 -1
  32. package/dist/lib/responses.d.ts.map +1 -1
  33. package/dist/lib/responses.js +26 -9
  34. package/dist/lib/responses.js.map +1 -1
  35. package/dist/lib/schema-flatten.d.ts +1 -1
  36. package/dist/lib/schema-flatten.d.ts.map +1 -1
  37. package/dist/lib/schema-flatten.js +1 -1
  38. package/dist/lib/schema-flatten.js.map +1 -1
  39. package/dist/lib/validator.d.ts.map +1 -1
  40. package/dist/lib/validator.js +50 -18
  41. package/dist/lib/validator.js.map +1 -1
  42. package/dist/types/index.d.ts +2 -0
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/dist-cjs/assertion/diff-recordings-vs-spec.js +7 -3
  45. package/dist-cjs/assertion/diff-recordings-vs-spec.js.map +1 -1
  46. package/dist-cjs/assertion/playwright-type.d.ts.map +1 -1
  47. package/dist-cjs/assertion/summarize-recordings.js.map +1 -1
  48. package/dist-cjs/cli/index.js +35 -7
  49. package/dist-cjs/cli/index.js.map +1 -1
  50. package/dist-cjs/extractor/src/lib/child-expansion.d.ts.map +1 -1
  51. package/dist-cjs/extractor/src/lib/child-expansion.js.map +1 -1
  52. package/dist-cjs/extractor/src/lib/git.d.ts.map +1 -1
  53. package/dist-cjs/extractor/src/lib/git.js.map +1 -1
  54. package/dist-cjs/extractor/src/lib/ref-resolver.d.ts.map +1 -1
  55. package/dist-cjs/extractor/src/lib/ref-resolver.js.map +1 -1
  56. package/dist-cjs/extractor/src/lib/schema-flatten.d.ts.map +1 -1
  57. package/dist-cjs/extractor/src/lib/schema-flatten.js +19 -9
  58. package/dist-cjs/extractor/src/lib/schema-flatten.js.map +1 -1
  59. package/dist-cjs/extractor/src/lib/type-utils.d.ts.map +1 -1
  60. package/dist-cjs/extractor/src/lib/type-utils.js +3 -1
  61. package/dist-cjs/extractor/src/lib/type-utils.js.map +1 -1
  62. package/dist-cjs/lib/assert.d.ts.map +1 -1
  63. package/dist-cjs/lib/assert.js +6 -1
  64. package/dist-cjs/lib/assert.js.map +1 -1
  65. package/dist-cjs/lib/config.d.ts.map +1 -1
  66. package/dist-cjs/lib/config.js +27 -3
  67. package/dist-cjs/lib/config.js.map +1 -1
  68. package/dist-cjs/lib/extractor.d.ts.map +1 -1
  69. package/dist-cjs/lib/extractor.js +67 -23
  70. package/dist-cjs/lib/extractor.js.map +1 -1
  71. package/dist-cjs/lib/recorder.d.ts.map +1 -1
  72. package/dist-cjs/lib/recorder.js +12 -5
  73. package/dist-cjs/lib/recorder.js.map +1 -1
  74. package/dist-cjs/lib/responses.d.ts.map +1 -1
  75. package/dist-cjs/lib/responses.js +26 -9
  76. package/dist-cjs/lib/responses.js.map +1 -1
  77. package/dist-cjs/lib/schema-flatten.d.ts +1 -1
  78. package/dist-cjs/lib/schema-flatten.d.ts.map +1 -1
  79. package/dist-cjs/lib/schema-flatten.js.map +1 -1
  80. package/dist-cjs/lib/validator.d.ts.map +1 -1
  81. package/dist-cjs/lib/validator.js +50 -18
  82. package/dist-cjs/lib/validator.js.map +1 -1
  83. package/dist-cjs/types/index.d.ts +2 -0
  84. package/dist-cjs/types/index.d.ts.map +1 -1
  85. package/package.json +15 -4
package/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
  [![npm version](https://img.shields.io/npm/v/assert-json-body.svg)](https://www.npmjs.com/package/assert-json-body)
5
5
 
6
6
  Framework-agnostic toolkit to:
7
+
7
8
  - Extract OpenAPI response schemas into a compact `responses.json` artifact
8
9
  - Validate real JSON response bodies against the extracted required/optional field model
9
10
  - Assert inside any test runner (Vitest, Jest, Playwright, etc.)
@@ -17,74 +18,99 @@ npm install assert-json-body
17
18
  ## Quick Start
18
19
 
19
20
  1. (Optional) Initialize a config file:
20
- ```
21
- npx assert-json-body config:init
22
- ```
23
- Produces `assert-json-body.config.json` (edit repo, spec path, output dir, etc.).
21
+
22
+ ```
23
+ npx assert-json-body config:init
24
+ ```
25
+
26
+ Produces `assert-json-body.config.json` (edit repo, spec path, output dir, etc.).
24
27
 
25
28
  2. Extract responses from your OpenAPI spec:
26
- ```
27
- npx assert-json-body extract
28
- ```
29
- This writes (by default):
30
- - `./json-body-assertions/responses.json` (schema bundle)
31
- - `./json-body-assertions/index.ts` (auto-generated typed wrapper)
32
- or the configured `responsesFile` for the JSON schema artifact.
33
-
34
- The init step also adds an npm script for convenience:
35
- ```jsonc
36
- // package.json
37
- {
38
- "scripts": {
39
- "responses:regenerate": "assert-json-body extract"
40
- }
41
- }
42
- ```
43
- So you can run:
44
- ```
45
- npm run responses:regenerate
46
- ```
29
+
30
+ ```
31
+ npx assert-json-body extract
32
+ ```
33
+
34
+ This writes (by default):
35
+ - `./json-body-assertions/responses.json` (schema bundle)
36
+ - `./json-body-assertions/index.ts` (auto-generated typed wrapper)
37
+ or the configured `responsesFile` for the JSON schema artifact.
38
+
39
+ The init step also adds an npm script for convenience:
40
+
41
+ ```jsonc
42
+ // package.json
43
+ {
44
+ "scripts": {
45
+ "responses:regenerate": "assert-json-body extract",
46
+ },
47
+ }
48
+ ```
49
+
50
+ So you can run:
51
+
52
+ ```
53
+ npm run responses:regenerate
54
+ ```
47
55
 
48
56
  3. Validate in a test (untyped import):
49
- ```ts
50
- import { validateResponseShape, validateResponse } from 'assert-json-body';
51
57
 
52
- // Suppose you just performed an HTTP request and have jsonBody
53
- validateResponseShape({ path: '/process-instance/create', method: 'POST', status: '200' }, jsonBody);
54
- // Throws if JSON shape violates required field presence / type rules.
58
+ ```ts
59
+ import { validateResponseShape, validateResponse } from 'assert-json-body';
55
60
 
56
- // Playwright convenience helper: consumes APIResponse, checks HTTP status, then validates JSON
57
- await validateResponse({ path: '/process-instance/create', method: 'POST', status: '200' }, playwrightResponse);
58
- ```
61
+ // Suppose you just performed an HTTP request and have jsonBody
62
+ validateResponseShape(
63
+ { path: '/process-instance/create', method: 'POST', status: '200' },
64
+ jsonBody
65
+ );
66
+ // Throws if JSON shape violates required field presence / type rules.
67
+
68
+ // Playwright convenience helper: consumes APIResponse, checks HTTP status, then validates JSON
69
+ await validateResponse(
70
+ { path: '/process-instance/create', method: 'POST', status: '200' },
71
+ playwrightResponse
72
+ );
73
+ ```
59
74
 
60
75
  4. Prefer typed validation (after extract):
61
- ```ts
62
- import { validateResponseShape, validateResponse } from './json-body-assertions/index';
63
76
 
64
- // Now path/method/status are constrained to extracted endpoints
65
- validateResponseShape({ path: '/process-instance/create', method: 'POST', status: '200' }, jsonBody);
66
- await validateResponse({ path: '/process-instance/create', method: 'POST', status: '200' }, playwrightResponse);
77
+ ```ts
78
+ import { validateResponseShape, validateResponse } from './json-body-assertions/index';
79
+
80
+ // Now path/method/status are constrained to extracted endpoints
81
+ validateResponseShape(
82
+ { path: '/process-instance/create', method: 'POST', status: '200' },
83
+ jsonBody
84
+ );
85
+ await validateResponse(
86
+ { path: '/process-instance/create', method: 'POST', status: '200' },
87
+ playwrightResponse
88
+ );
67
89
 
68
- // @ts-expect-error invalid status not in spec
69
- // validateResponseShape({ path: '/process-instance/create', method: 'POST', status: '418' }, jsonBody);
70
- ```
90
+ // @ts-expect-error invalid status not in spec
91
+ // validateResponseShape({ path: '/process-instance/create', method: 'POST', status: '418' }, jsonBody);
92
+ ```
71
93
 
72
94
  Regenerate typed file whenever the spec changes by re-running `extract` (commit both `responses.json` and `index.ts` if you track API contract changes in version control).
73
95
 
74
96
  You can control default throw/record behavior globally via config or env (see below) and override per call.
75
97
 
76
98
  ### CI Integration
99
+
77
100
  Keep the generated artifacts (`responses.json`, `index.ts`) in sync with the upstream spec during continuous integration:
78
101
 
79
102
  Example GitHub Actions step (add after install):
103
+
80
104
  ```yaml
81
105
  - name: Regenerate response schemas
82
106
  run: npm run responses:regenerate
83
107
  ```
84
108
 
85
109
  If you commit the generated files:
110
+
86
111
  1. Run the regenerate step early (before tests).
87
112
  2. Add a check that the working tree is clean to ensure developers didn’t forget to re-run extraction locally:
113
+
88
114
  ```yaml
89
115
  - name: Verify no uncommitted changes
90
116
  run: |
@@ -92,11 +118,74 @@ If you commit the generated files:
92
118
  ```
93
119
 
94
120
  If you prefer not to commit generated artifacts:
121
+
95
122
  - Add the output directory (default `json-body-assertions/`) to `.gitignore`.
96
123
  - Always run `npm run responses:regenerate` before building / testing.
97
124
 
98
125
  Caching tip: if your spec repo is large, you can cache the sparse checkout directory by keying on the spec ref (commit SHA) to speed up subsequent runs.
99
126
 
127
+ ### Standalone Binary (no Node.js required)
128
+
129
+ Pre-built standalone binaries are attached to each [GitHub release](https://github.com/camunda/assert-json-body/releases). These are self-contained executables compiled with Deno — no Node.js or npm installation needed.
130
+
131
+ Available platforms:
132
+
133
+ - `x86_64-unknown-linux-gnu` / `aarch64-unknown-linux-gnu`
134
+ - `x86_64-apple-darwin` / `aarch64-apple-darwin`
135
+ - `x86_64-pc-windows-msvc`
136
+
137
+ Usage in CI (e.g. GitHub Actions):
138
+
139
+ ```yaml
140
+ - name: Download assert-json-body
141
+ run: |
142
+ curl -fsSL -o assert-json-body \
143
+ "https://github.com/camunda/assert-json-body/releases/latest/download/assert-json-body-x86_64-unknown-linux-gnu"
144
+ chmod +x assert-json-body
145
+
146
+ - name: Regenerate response schemas
147
+ run: ./assert-json-body extract
148
+ env:
149
+ AJB_REF: ${{ github.event.inputs.spec_ref || 'main' }}
150
+ ```
151
+
152
+ To build locally (requires Deno ≥ 2.x):
153
+
154
+ ```bash
155
+ npm run build:deno # local platform
156
+ npm run build:deno:cross # all platforms
157
+ ```
158
+
159
+ #### Using the binary with a local spec file (`AJB_SPEC_FILE`)
160
+
161
+ When the OpenAPI spec is already available on disk — for example, in a workflow that checks out the `camunda/camunda` repository — you can skip the git sparse-checkout entirely by pointing at the local file with `AJB_SPEC_FILE`.
162
+
163
+ When `specFile` (or `AJB_SPEC_FILE`) is set, the `repo`, `specPath`, `ref`, and `preserveCheckout` options are ignored — no git operations are performed. The generated `responses.json` metadata will show `commit: "local"` instead of a SHA.
164
+
165
+ #### Copy-paste for `camunda/camunda` QA e2e workflows
166
+
167
+ The orchestration-cluster e2e test suite lives at `qa/c8-orchestration-cluster-e2e-test-suite/` and already checks out the branch under test. The spec file is at `zeebe/gateway-protocol/src/main/proto/v2/rest-api.yaml` in the repo root. Add these steps **before** `npm install` / `npm run test`:
168
+
169
+ ```yaml
170
+ # ── Regenerate response schemas from the branch's spec ──────────
171
+ - name: Download assert-json-body binary
172
+ run: |
173
+ curl -fsSL -o /usr/local/bin/assert-json-body \
174
+ "https://github.com/camunda/assert-json-body/releases/latest/download/assert-json-body-x86_64-unknown-linux-gnu"
175
+ chmod +x /usr/local/bin/assert-json-body
176
+
177
+ - name: Regenerate response schemas from local spec
178
+ run: assert-json-body extract
179
+ env:
180
+ AJB_SPEC_FILE: ${{ github.workspace }}/zeebe/gateway-protocol/src/main/proto/v2/rest-api.yaml
181
+ AJB_OUTPUT_DIR: ${{ github.workspace }}/qa/c8-orchestration-cluster-e2e-test-suite/json-body-assertions
182
+ # ────────────────────────────────────────────────────────────────
183
+ ```
184
+
185
+ That's it — no Node.js setup, no `npm install`, and no second git clone required. The binary reads the spec file that is already on disk from the workflow's checkout step and writes `responses.json` directly into the test suite's `json-body-assertions/` directory.
186
+
187
+ **Why this works:** The e2e workflows (nightly matrix across `stable/8.6` … `main`, on-demand branch, release) already `actions/checkout` the target branch. The OpenAPI spec in that checkout reflects the branch's API surface, so the generated response schemas will match the server under test.
188
+
100
189
  ## Configuration
101
190
 
102
191
  Config file: `assert-json-body.config.json` (created with `npx assert-json-body config:init`).
@@ -108,52 +197,55 @@ The configuration is now split into two blocks:
108
197
 
109
198
  ### extract block
110
199
 
111
- | Field | Type | Default | Description | Env override(s) |
112
- |-------|------|---------|-------------|-----------------|
113
- | `repo` | string | `https://github.com/camunda/camunda` | Git repository containing the OpenAPI spec | `AJB_REPO`, `REPO` |
114
- | `specPath` | string | `zeebe/gateway-protocol/src/main/proto/v2/rest-api.yaml` | Path to OpenAPI spec inside the repo | `AJB_SPEC_PATH`, `SPEC_PATH` |
115
- | `ref` | string | `main` | Git ref (branch/tag/sha) to checkout | `AJB_REF`, `SPEC_REF`, `REF` |
116
- | `outputDir` | string | `json-body-assertions` | Directory to write `responses.json` + generated `index.ts` | `AJB_OUTPUT_DIR`, `OUTPUT_DIR` |
117
- | `preserveCheckout` | boolean | `false` | Keep sparse checkout working copy (debug) | `AJB_PRESERVE_CHECKOUT`, `PRESERVE_SPEC_CHECKOUT` |
118
- | `dryRun` | boolean | `false` | Parse spec but do not write files | `AJB_DRY_RUN` |
119
- | `logLevel` | enum | `info` | `silent` `error` `warn` `info` `debug` | `AJB_LOG_LEVEL` |
120
- | `failIfExists` | boolean | `false` | Abort if target responses file already exists | `AJB_FAIL_IF_EXISTS` |
121
- | `responsesFile` | string | | Optional explicit path for responses JSON (advanced) | `AJB_RESPONSES_FILE`, `ROUTE_TEST_RESPONSES_FILE` |
200
+ | Field | Type | Default | Description | Env override(s) |
201
+ | ------------------ | ------- | -------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------- |
202
+ | `repo` | string | `https://github.com/camunda/camunda` | Git repository containing the OpenAPI spec | `AJB_REPO`, `REPO` |
203
+ | `specPath` | string | `zeebe/gateway-protocol/src/main/proto/v2/rest-api.yaml` | Path to OpenAPI spec inside the repo | `AJB_SPEC_PATH`, `SPEC_PATH` |
204
+ | `specFile` | string | | Local spec file path (skips git checkout entirely) | `AJB_SPEC_FILE` |
205
+ | `ref` | string | `main` | Git ref (branch/tag/sha) to checkout | `AJB_REF`, `SPEC_REF`, `REF` |
206
+ | `outputDir` | string | `json-body-assertions` | Directory to write `responses.json` + generated `index.ts` | `AJB_OUTPUT_DIR`, `OUTPUT_DIR` |
207
+ | `preserveCheckout` | boolean | `false` | Keep sparse checkout working copy (debug) | `AJB_PRESERVE_CHECKOUT`, `PRESERVE_SPEC_CHECKOUT` |
208
+ | `dryRun` | boolean | `false` | Parse spec but do not write files | `AJB_DRY_RUN` |
209
+ | `logLevel` | enum | `info` | `silent` `error` `warn` `info` `debug` | `AJB_LOG_LEVEL` |
210
+ | `failIfExists` | boolean | `false` | Abort if target responses file already exists | `AJB_FAIL_IF_EXISTS` |
211
+ | `responsesFile` | string | — | Optional explicit path for responses JSON (advanced) | `AJB_RESPONSES_FILE`, `ROUTE_TEST_RESPONSES_FILE` |
122
212
 
123
213
  ### validate block
124
214
 
125
- | Field | Type | Default | Description | Env override(s) |
126
- |-------|------|---------|-------------|-----------------|
127
- | `recordResponses` | boolean | `false` | Globally enable body recording | `AJB_RECORD`, `TEST_RESPONSE_BODY_RECORD` |
128
- | `throwOnValidationFail` | boolean | `true` | Throw vs structured `{ ok:false }` result | `AJB_THROW_ON_FAIL` |
215
+ | Field | Type | Default | Description | Env override(s) |
216
+ | ----------------------- | ------- | ------- | ----------------------------------------- | ----------------------------------------- |
217
+ | `recordResponses` | boolean | `false` | Globally enable body recording | `AJB_RECORD`, `TEST_RESPONSE_BODY_RECORD` |
218
+ | `throwOnValidationFail` | boolean | `true` | Throw vs structured `{ ok:false }` result | `AJB_THROW_ON_FAIL` |
129
219
 
130
220
  Additional env variables:
131
221
 
132
- | Env | Purpose |
133
- |-----|---------|
222
+ | Env | Purpose |
223
+ | ------------------------------- | ------------------------------------------------------------------------------ |
134
224
  | `TEST_RESPONSE_BODY_RECORD_DIR` | Override directory for JSONL body recordings (default `<outputDir>/recording`) |
135
225
 
136
226
  Example full config:
227
+
137
228
  ```json
138
229
  {
139
- "extract": {
140
- "repo": "https://github.com/camunda/camunda",
141
- "specPath": "zeebe/gateway-protocol/src/main/proto/v2/rest-api.yaml",
142
- "ref": "main",
143
- "outputDir": "json-body-assertions",
144
- "preserveCheckout": false,
145
- "dryRun": false,
146
- "logLevel": "info",
147
- "failIfExists": false
148
- },
149
- "validate": {
150
- "recordResponses": false,
151
- "throwOnValidationFail": true
152
- }
230
+ "extract": {
231
+ "repo": "https://github.com/camunda/camunda",
232
+ "specPath": "zeebe/gateway-protocol/src/main/proto/v2/rest-api.yaml",
233
+ "ref": "main",
234
+ "outputDir": "json-body-assertions",
235
+ "preserveCheckout": false,
236
+ "dryRun": false,
237
+ "logLevel": "info",
238
+ "failIfExists": false
239
+ },
240
+ "validate": {
241
+ "recordResponses": false,
242
+ "throwOnValidationFail": true
243
+ }
153
244
  }
154
245
  ```
155
246
 
156
247
  Notes:
248
+
157
249
  - The responses schema file defaults to `<outputDir>/responses.json` unless overridden.
158
250
  - Boolean env overrides accept `1|true|yes` (case-insensitive).
159
251
  - Precedence per value: CLI flag > environment variable > config file > built-in default.
@@ -161,6 +253,7 @@ Notes:
161
253
  ## Schema Resolution Precedence
162
254
 
163
255
  When `validateResponseShape` looks for the schema artifact, precedence is:
256
+
164
257
  1. Explicit option: `responsesFilePath` passed to the function
165
258
  2. Environment variable: `ROUTE_TEST_RESPONSES_FILE` or `AJB_RESPONSES_FILE`
166
259
  3. Config file: `extract.responsesFile` or `<outputDir>/responses.json`
@@ -171,52 +264,63 @@ All file issues (missing, unreadable, parse errors, malformed structure) throw c
171
264
  ## API Reference
172
265
 
173
266
  ### `validateResponseShape(spec, body, options?)`
267
+
174
268
  Single unified API: validates `body` against the schema entry. Supports optional structured result mode and recording.
175
269
 
176
270
  ```ts
177
- validateResponseShape(
178
- { path: '/foo', method: 'GET', status: '200' },
179
- jsonBody,
180
- { responsesFilePath: './custom/responses.json', configPath: './custom-config.json' }
181
- );
271
+ validateResponseShape({ path: '/foo', method: 'GET', status: '200' }, jsonBody, {
272
+ responsesFilePath: './custom/responses.json',
273
+ configPath: './custom-config.json',
274
+ });
182
275
  ```
276
+
183
277
  Default behavior: throws on mismatch (configurable). If you pass `throw:false` (or set global flag) it returns a structured object:
184
278
 
185
279
  ```ts
186
280
  interface ValidateResultBase {
187
- ok: boolean;
188
- errors?: string[]; // present when ok === false
189
- response: unknown; // the original response body you passed in
190
- routeContext: RouteContext; // resolved route/method/status + flattened field specs
281
+ ok: boolean;
282
+ errors?: string[]; // present when ok === false
283
+ response: unknown; // the original response body you passed in
284
+ routeContext: RouteContext; // resolved route/method/status + flattened field specs
191
285
  }
192
286
  ```
193
287
 
194
288
  Examples:
289
+
195
290
  ```ts
196
291
  // Success (non-throw mode)
197
- const r1 = validateResponseShape({ path: '/foo', method: 'GET', status: '200' }, body, { throw: false });
292
+ const r1 = validateResponseShape({ path: '/foo', method: 'GET', status: '200' }, body, {
293
+ throw: false,
294
+ });
198
295
  if (!r1.ok) throw new Error('unexpected');
199
- console.log(r1.routeContext.requiredFields.map(f => f.name));
296
+ console.log(r1.routeContext.requiredFields.map((f) => f.name));
200
297
 
201
298
  // Failure (non-throw mode)
202
- const r2 = validateResponseShape({ path: '/foo', method: 'GET', status: '200' }, otherBody, { throw: false });
299
+ const r2 = validateResponseShape({ path: '/foo', method: 'GET', status: '200' }, otherBody, {
300
+ throw: false,
301
+ });
203
302
  if (!r2.ok) {
204
- console.warn(r2.errors); // array of error lines
205
- console.log(r2.routeContext.status); // resolved status used
303
+ console.warn(r2.errors); // array of error lines
304
+ console.log(r2.routeContext.status); // resolved status used
206
305
  }
207
306
  ```
208
307
 
209
308
  #### Options
309
+
210
310
  - `responsesFilePath` / `configPath` – override resolution
211
311
  - `throw?: boolean` – override global throw setting
212
312
  - `record?: boolean | { label?: string }` – enable recording for this call
213
313
 
214
314
  ### `validateResponse(spec, playwrightResponse, options?)`
315
+
215
316
  Playwright-friendly wrapper: reads `await response.json()`, optionally enforces the expected status, then routes through `validateResponseShape`.
216
317
 
217
318
  ```ts
218
319
  const apiResponse = await request.post('/process-instance/create', { data: payload });
219
- await validateResponse({ path: '/process-instance/create', method: 'POST', status: '200' }, apiResponse);
320
+ await validateResponse(
321
+ { path: '/process-instance/create', method: 'POST', status: '200' },
322
+ apiResponse
323
+ );
220
324
  ```
221
325
 
222
326
  - `spec.status` is required when you need HTTP status enforcement; the helper throws if it does not match `response.status()`.
@@ -234,25 +338,33 @@ The validator respects the OpenAPI `nullable: true` property. When a field in th
234
338
  The `nullable` flag is extracted automatically during `assert-json-body extract` and stored in `responses.json`. You can also set it manually in a custom responses file:
235
339
 
236
340
  ```json
237
- {"name": "label", "type": "string", "nullable": true}
341
+ { "name": "label", "type": "string", "nullable": true }
238
342
  ```
239
343
 
240
344
  ### Types
345
+
241
346
  `FieldSpec`, `RouteContext`, `PlaywrightAPIResponse`, and other structural types are exported from `@/types`.
242
347
 
243
348
  ### Generated Typed Entry (after extract)
349
+
244
350
  After running the extractor you can import strongly-typed versions of `validateResponseShape` and `validateResponse` that constrain `path`, `method` and `status` to only the extracted endpoints:
351
+
245
352
  ```ts
246
353
  import { validateResponseShape, validateResponse } from './json-body-assertions/index';
247
354
 
248
355
  // Autocomplete + compile-time safety for path/method/status
249
356
  validateResponseShape({ path: '/process-instance/create', method: 'POST', status: '200' }, body);
250
- await validateResponse({ path: '/process-instance/create', method: 'POST', status: '200' }, playwrightResponse);
357
+ await validateResponse(
358
+ { path: '/process-instance/create', method: 'POST', status: '200' },
359
+ playwrightResponse
360
+ );
251
361
 
252
362
  // @ts-expect-error invalid status for that route will fail type-check
253
363
  // validateResponseShape({ path: '/process-instance/create', method: 'POST', status: '418' }, body);
254
364
  ```
365
+
255
366
  You can also use the exported helper types:
367
+
256
368
  ```ts
257
369
  import type { RoutePath, MethodFor, StatusFor } from './json-body-assertions/index';
258
370
 
@@ -286,6 +398,7 @@ Yes. The extractor automatically bundles referenced files (via `$ref`) as long a
286
398
  ## Releasing & Versioning
287
399
 
288
400
  This project uses [semantic-release](https://semantic-release.gitbook.io/) with Conventional Commits to automate:
401
+
289
402
  - Version determination (based on commit messages)
290
403
  - CHANGELOG generation (`CHANGELOG.md`)
291
404
  - GitHub release notes
@@ -294,6 +407,7 @@ This project uses [semantic-release](https://semantic-release.gitbook.io/) with
294
407
  Every push to `main` triggers the release workflow. Ensure your commits follow Conventional Commit prefixes so changes are categorized correctly:
295
408
 
296
409
  Common types:
410
+
297
411
  - `feat:` – new feature (minor release)
298
412
  - `fix:` – bug fix (patch release)
299
413
  - `docs:` – documentation only
@@ -305,6 +419,7 @@ Common types:
305
419
  Breaking changes: add a footer line `BREAKING CHANGE: <description>` (or use `!` after the type, e.g. `feat!: drop Node 16`).
306
420
 
307
421
  Example commit message:
422
+
308
423
  ```
309
424
  feat: add structured validation result for non-throw mode
310
425
 
@@ -317,12 +432,13 @@ Local commit messages are validated by commitlint + husky (commit-msg hook). If
317
432
 
318
433
  ## CLI Commands
319
434
 
320
- | Command | Description |
321
- |---------|-------------|
322
- | `assert-json-body extract` | Performs sparse checkout + OpenAPI parse + response schema flattening into `responses.json` and emits typed `index.ts`. |
323
- | `assert-json-body config:init` | Creates a starter `assert-json-body.config.json`. |
435
+ | Command | Description |
436
+ | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
437
+ | `assert-json-body extract` | Performs sparse checkout + OpenAPI parse + response schema flattening into `responses.json` and emits typed `index.ts`. |
438
+ | `assert-json-body config:init` | Creates a starter `assert-json-body.config.json`. |
324
439
 
325
440
  Environment variables (selected):
441
+
326
442
  - `ROUTE_TEST_RESPONSES_FILE` / `AJB_RESPONSES_FILE` – override schema file
327
443
  - `TEST_RESPONSE_BODY_RECORD_DIR` – override recording directory (default `<outputDir>/recording`)
328
444
  - `AJB_RECORD` / `TEST_RESPONSE_BODY_RECORD` – set default recording on (true/1/yes)
@@ -331,12 +447,16 @@ Environment variables (selected):
331
447
  ## Recording (Optional)
332
448
 
333
449
  By default, recordings are written to `<outputDir>/recording` (e.g. `json-body-assertions/recording`). Set `TEST_RESPONSE_BODY_RECORD_DIR` only if you want a custom location. To record responses, either:
450
+
334
451
  ```ts
335
452
  // Per-call recording
336
- validateResponseShape({ path: '/foo', method: 'GET', status: '200' }, body, { record: { label: 'GET /foo success' } });
453
+ validateResponseShape({ path: '/foo', method: 'GET', status: '200' }, body, {
454
+ record: { label: 'GET /foo success' },
455
+ });
337
456
 
338
457
  // Or enable globally (env): AJB_RECORD=true
339
458
  ```
459
+
340
460
  Produces JSONL rows with required field list, top-level present, deep presence and body snapshot.
341
461
 
342
462
  ## Integration Tests
@@ -344,20 +464,24 @@ Produces JSONL rows with required field list, top-level present, deep presence a
344
464
  An optional end-to-end integration test suite lives under `integration/` and is excluded from the default unit test run.
345
465
 
346
466
  Run unit tests (fast, pure):
467
+
347
468
  ```
348
469
  npm test
349
470
  ```
350
471
 
351
472
  Run integration tests (performs real OpenAPI extraction and live HTTP calls):
473
+
352
474
  ```
353
475
  npm run test:integration
354
476
  ```
355
477
 
356
478
  Local requirements:
479
+
357
480
  - Start the target service (expected at `http://localhost:8080` by default), or
358
481
  - Set `TEST_BASE_URL` to point to a running instance
359
482
 
360
483
  CI (Docker) example:
484
+
361
485
  ```yaml
362
486
  - name: Start API container
363
487
  run: |
@@ -378,5 +502,5 @@ Errors show a capped (first 15) list of issues (missing, type, enum, extra) with
378
502
  See `src/tests/precedence.spec.ts` for an executable example verifying explicit > env > config > default ordering.
379
503
 
380
504
  ## License
381
- ISC (see `LICENSE`).
382
505
 
506
+ ISC (see `LICENSE`).
@@ -54,10 +54,12 @@ for (const entry of parsedSpec.responses) {
54
54
  });
55
55
  }
56
56
  function recKey(route, method, status) {
57
- return `${(method || 'ANY').toUpperCase()} ${(status || 'ANY')} ${route}`;
57
+ return `${(method || 'ANY').toUpperCase()} ${status || 'ANY'} ${route}`;
58
58
  }
59
59
  const aggIndex = new Map();
60
- function isJsonl(f) { return f.endsWith('.jsonl'); }
60
+ function isJsonl(f) {
61
+ return f.endsWith('.jsonl');
62
+ }
61
63
  for (const file of readdirSync(recordDir)) {
62
64
  if (!isJsonl(file))
63
65
  continue;
@@ -91,7 +93,9 @@ for (const file of readdirSync(recordDir)) {
91
93
  a.deepCounts.set(p, (a.deepCounts.get(p) || 0) + 1);
92
94
  }
93
95
  }
94
- catch { /* ignore malformed */ }
96
+ catch {
97
+ /* ignore malformed */
98
+ }
95
99
  }
96
100
  }
97
101
  const results = [];
@@ -1 +1 @@
1
- {"version":3,"file":"diff-recordings-vs-spec.js","sourceRoot":"","sources":["../../src/assertion/diff-recordings-vs-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff-recordings-vs-spec.js","sourceRoot":"","sources":["../../src/assertion/diff-recordings-vs-spec.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;AAC/E,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AACtD,IAAI,CAAC,SAAS,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACjE,MAAM,sBAAsB,GAAG,OAAO,CACpC,SAAS,EACT,yDAAyD,CAC1D,CAAC;AACF,MAAM,cAAc,GAAG,kBAAkB;IACvC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC;IAC5C,CAAC,CAAC,sBAAsB,CAAC;AAE3B,IAAI,UAAU,GAAyB,IAAI,CAAC;AAC5C,IAAI,CAAC;IACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAkB,CAAC;AACjF,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAOD,SAAS,OAAO,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc;IAC3D,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;AACrD,CAAC;AACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;AACjD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;IACzC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;QAC7D,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACpE,CAAC,CAAC;AACL,CAAC;AAYD,SAAS,MAAM,CAAC,KAAa,EAAE,MAAe,EAAE,MAAe;IAC7D,OAAO,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;AAC1E,CAAC;AACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;AAExC,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,SAAS;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,SAAS;IAC3B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,CAAC,GAAG;oBACF,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE;oBAC3C,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;oBAC3B,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;oBACrC,aAAa,EAAE,IAAI,GAAG,EAAE;oBACxB,UAAU,EAAE,IAAI,GAAG,EAAE;iBACtB,CAAC;gBACF,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,CAAC,CAAC,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBAClC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;gBACtC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAmBD,MAAM,OAAO,GAAgB,EAAE,CAAC;AAEhC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;IACzC,6EAA6E;IAC7E,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK;QAAE,SAAS;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,SAAS,CAAC,gDAAgD;IAErE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,UAAU,GAAyB,EAAE,CAAC;IAE5C,gCAAgC;IAChC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,mBAAmB;QAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,2BAA2B;QACpE,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK;gBACL,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG;gBAChC,KAAK;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;aACrG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,mGAAmG;IACnG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS,CAAC,kDAAkD;QAC5F,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS,CAAC,0BAA0B;QACnE,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG;gBAChC,KAAK;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,uCAAuC,MAAM,OAAO,KAAK,IAAI,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;aAC1I,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QAC9C,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QAC9C,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,OAAO,CAAC,IAAI,CACV,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IAChC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CACnC,CAAC;AAEF,MAAM,OAAO,GAAG;IACd,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACrC,YAAY;IACZ,WAAW,EAAE,OAAO,CAAC,MAAM;IAC3B,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9C,0BAA0B;AAC1B,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;AAC7E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;SAChC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,OAAO,cAAc,GAAG,EAAE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"playwright-type.d.ts","sourceRoot":"","sources":["../../src/assertion/playwright-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,YAAY,GAAG,OAAO,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,OAAO,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KAAE,CAAC;IAEtC;;;OAGG;IACH,YAAY,IAAI,KAAK,CAAC;QACpB;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QAEb;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IAEH;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAE9B;;OAEG;IACH,EAAE,IAAI,OAAO,CAAC;IAEd;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB;;OAEG;IACH,GAAG,IAAI,MAAM,CAAC;IAEd,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
1
+ {"version":3,"file":"playwright-type.d.ts","sourceRoot":"","sources":["../../src/assertion/playwright-type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,YAAY,GAAG,OAAO,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,OAAO,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAErC;;;OAGG;IACH,YAAY,IAAI,KAAK,CAAC;QACpB;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QAEb;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IAEH;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAE9B;;OAEG;IACH,EAAE,IAAI,OAAO,CAAC;IAEd;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB;;OAEG;IACH,GAAG,IAAI,MAAM,CAAC;IAEd,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"summarize-recordings.js","sourceRoot":"","sources":["../../src/assertion/summarize-recordings.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH;;;;GAIG;AACH,OAAO,EAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAqBlC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;AACzE,IAAI,CAAC,GAAG,EAAE,CAAC;IACT,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AAEtD,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,MAAe,EAAE,MAAe;IAC/D,OAAO,GAAG,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;AAEhD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAAE,SAAS;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,SAAS;IAC7B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACjE,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG;oBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;oBAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;oBAC9B,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;oBACxC,aAAa,EAAE,IAAI,GAAG,EAAE;oBACxB,UAAU,EAAE,IAAI,GAAG,EAAE;iBACtB,CAAC;gBACF,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3B,CAAC;YACD,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBACrC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;gBACzC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAmBD,MAAM,MAAM,GAAgB,EAAE,CAAC;AAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG;gBAChC,KAAK;gBACL,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,qFAAqF;QACrF,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS,CAAC,gCAAgC;QACxE,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG;gBAChC,KAAK;gBACL,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,CAAC;QACV,GAAG;QACH,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QACzC,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,IAAI,CACT,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IAChC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CACnC,CAAC;AAEF,0DAA0D;AAC1D,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ,EAAC,YAAY,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAC,EACpE,IAAI,EACJ,CAAC,CACF,CACF,CAAC;AAEF,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAC9D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO;SACnB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACtE;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,CAAC,KAAK,CACX,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,OAAO,cAAc,IAAI,EAAE,CAC7E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"summarize-recordings.js","sourceRoot":"","sources":["../../src/assertion/summarize-recordings.ts"],"names":[],"mappings":"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"}