@lovrozagar/oat 0.10.0 → 0.11.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/README.md +25 -2006
- package/dist/cli.js +283 -59
- package/dist/config/define-config.d.ts +8 -0
- package/dist/config/define-config.d.ts.map +1 -1
- package/dist/config/define-config.js.map +1 -1
- package/dist/config/validate.d.ts +12 -0
- package/dist/config/validate.d.ts.map +1 -0
- package/dist/config/validate.js +86 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/conformance/effects.d.ts +9 -0
- package/dist/conformance/effects.d.ts.map +1 -0
- package/dist/conformance/effects.js +276 -0
- package/dist/conformance/effects.js.map +1 -0
- package/dist/conformance/expected-failures.d.ts +18 -0
- package/dist/conformance/expected-failures.d.ts.map +1 -0
- package/dist/conformance/expected-failures.js +48 -0
- package/dist/conformance/expected-failures.js.map +1 -0
- package/dist/conformance/feature-gate.d.ts +7 -0
- package/dist/conformance/feature-gate.d.ts.map +1 -0
- package/dist/conformance/feature-gate.js +428 -0
- package/dist/conformance/feature-gate.js.map +1 -0
- package/dist/conformance/fuzz.d.ts +108 -0
- package/dist/conformance/fuzz.d.ts.map +1 -0
- package/dist/conformance/fuzz.js +246 -0
- package/dist/conformance/fuzz.js.map +1 -0
- package/dist/conformance/leaks.d.ts +10 -0
- package/dist/conformance/leaks.d.ts.map +1 -0
- package/dist/conformance/leaks.js +23 -0
- package/dist/conformance/leaks.js.map +1 -0
- package/dist/conformance/pool.d.ts +49 -0
- package/dist/conformance/pool.d.ts.map +1 -0
- package/dist/conformance/pool.js +75 -0
- package/dist/conformance/pool.js.map +1 -0
- package/dist/conformance/rate-limit.d.ts +7 -0
- package/dist/conformance/rate-limit.d.ts.map +1 -0
- package/dist/conformance/rate-limit.js +372 -0
- package/dist/conformance/rate-limit.js.map +1 -0
- package/dist/conformance/scope.d.ts +15 -0
- package/dist/conformance/scope.d.ts.map +1 -0
- package/dist/conformance/scope.js +78 -0
- package/dist/conformance/scope.js.map +1 -0
- package/dist/conformance/seed-contract.d.ts +11 -0
- package/dist/conformance/seed-contract.d.ts.map +1 -0
- package/dist/conformance/seed-contract.js +680 -0
- package/dist/conformance/seed-contract.js.map +1 -0
- package/dist/conformance/shapes.d.ts +35 -0
- package/dist/conformance/shapes.d.ts.map +1 -0
- package/dist/conformance/shapes.js +162 -0
- package/dist/conformance/shapes.js.map +1 -0
- package/dist/conformance/specs.d.ts +21 -0
- package/dist/conformance/specs.d.ts.map +1 -0
- package/dist/conformance/specs.js +306 -0
- package/dist/conformance/specs.js.map +1 -0
- package/dist/conformance/suite.d.ts +209 -0
- package/dist/conformance/suite.d.ts.map +1 -0
- package/dist/conformance/suite.js +1538 -0
- package/dist/conformance/suite.js.map +1 -0
- package/dist/conformance/unique.d.ts +7 -0
- package/dist/conformance/unique.d.ts.map +1 -0
- package/dist/conformance/unique.js +586 -0
- package/dist/conformance/unique.js.map +1 -0
- package/dist/conformance/worker.d.ts +3 -0
- package/dist/conformance/worker.d.ts.map +1 -0
- package/dist/conformance/worker.js +27 -0
- package/dist/conformance/worker.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.js +5 -2
- package/dist/reference/defects.d.ts +71 -1
- package/dist/reference/defects.d.ts.map +1 -1
- package/dist/reference/defects.js +74 -8
- package/dist/reference/defects.js.map +1 -1
- package/dist/reference/dialect.d.ts +6 -4
- package/dist/reference/dialect.d.ts.map +1 -1
- package/dist/reference/dialect.js +1 -0
- package/dist/reference/dialect.js.map +1 -1
- package/dist/reference/http.d.ts +17 -25
- package/dist/reference/http.d.ts.map +1 -1
- package/dist/reference/http.js +574 -224
- package/dist/reference/http.js.map +1 -1
- package/dist/reference/listing.d.ts +51 -0
- package/dist/reference/listing.d.ts.map +1 -0
- package/dist/reference/listing.js +256 -0
- package/dist/reference/listing.js.map +1 -0
- package/dist/reference/model.d.ts +35 -1
- package/dist/reference/model.d.ts.map +1 -1
- package/dist/reference/model.js +42 -0
- package/dist/reference/model.js.map +1 -1
- package/dist/reference/query.d.ts +132 -43
- package/dist/reference/query.d.ts.map +1 -1
- package/dist/reference/query.js +397 -315
- package/dist/reference/query.js.map +1 -1
- package/dist/reference/shapes.d.ts +60 -0
- package/dist/reference/shapes.d.ts.map +1 -0
- package/dist/reference/shapes.js +142 -0
- package/dist/reference/shapes.js.map +1 -0
- package/dist/reference/spec.d.ts +9 -2
- package/dist/reference/spec.d.ts.map +1 -1
- package/dist/reference/spec.js +291 -71
- package/dist/reference/spec.js.map +1 -1
- package/dist/reference/store-api.d.ts +14 -43
- package/dist/reference/store-api.d.ts.map +1 -1
- package/dist/reference/store-api.js +8 -58
- package/dist/reference/store-api.js.map +1 -1
- package/dist/reference/stores/memory.d.ts +12 -15
- package/dist/reference/stores/memory.d.ts.map +1 -1
- package/dist/reference/stores/memory.js +22 -70
- package/dist/reference/stores/memory.js.map +1 -1
- package/dist/reference/stores/postgres.d.ts +11 -23
- package/dist/reference/stores/postgres.d.ts.map +1 -1
- package/dist/reference/stores/postgres.js +53 -334
- package/dist/reference/stores/postgres.js.map +1 -1
- package/dist/reference/stores/sql-compile.d.ts +36 -0
- package/dist/reference/stores/sql-compile.d.ts.map +1 -0
- package/dist/reference/stores/sql-compile.js +95 -0
- package/dist/reference/stores/sql-compile.js.map +1 -0
- package/dist/reference/stores/sqlite.d.ts +12 -27
- package/dist/reference/stores/sqlite.d.ts.map +1 -1
- package/dist/reference/stores/sqlite.js +54 -355
- package/dist/reference/stores/sqlite.js.map +1 -1
- package/dist/report/console.d.ts.map +1 -1
- package/dist/report/console.js +23 -9
- package/dist/report/console.js.map +1 -1
- package/dist/report/matrix.d.ts +2 -0
- package/dist/report/matrix.d.ts.map +1 -1
- package/dist/report/matrix.js +63 -10
- package/dist/report/matrix.js.map +1 -1
- package/dist/report/render.d.ts +10 -1
- package/dist/report/render.d.ts.map +1 -1
- package/dist/report/render.js +75 -13
- package/dist/report/render.js.map +1 -1
- package/dist/runtime/async.d.ts +16 -3
- package/dist/runtime/async.d.ts.map +1 -1
- package/dist/runtime/async.js +24 -19
- package/dist/runtime/async.js.map +1 -1
- package/dist/runtime/auth.d.ts +2 -9
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +38 -62
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/body.d.ts +15 -3
- package/dist/runtime/body.d.ts.map +1 -1
- package/dist/runtime/body.js +61 -12
- package/dist/runtime/body.js.map +1 -1
- package/dist/runtime/check-costs.d.ts +15 -0
- package/dist/runtime/check-costs.d.ts.map +1 -0
- package/dist/runtime/check-costs.js +114 -0
- package/dist/runtime/check-costs.js.map +1 -0
- package/dist/runtime/check-ids.d.ts +15 -0
- package/dist/runtime/check-ids.d.ts.map +1 -0
- package/dist/runtime/check-ids.js +140 -0
- package/dist/runtime/check-ids.js.map +1 -0
- package/dist/runtime/checks.d.ts +83 -20
- package/dist/runtime/checks.d.ts.map +1 -1
- package/dist/runtime/checks.js +3285 -1947
- package/dist/runtime/checks.js.map +1 -1
- package/dist/runtime/client.d.ts +112 -0
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +271 -39
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/cookies.d.ts +16 -2
- package/dist/runtime/cookies.d.ts.map +1 -1
- package/dist/runtime/cookies.js +83 -22
- package/dist/runtime/cookies.js.map +1 -1
- package/dist/runtime/exchanges.d.ts +4 -5
- package/dist/runtime/exchanges.d.ts.map +1 -1
- package/dist/runtime/exchanges.js +33 -55
- package/dist/runtime/exchanges.js.map +1 -1
- package/dist/runtime/exit.d.ts +40 -0
- package/dist/runtime/exit.d.ts.map +1 -0
- package/dist/runtime/exit.js +48 -0
- package/dist/runtime/exit.js.map +1 -0
- package/dist/runtime/feature-gate.d.ts +0 -9
- package/dist/runtime/feature-gate.d.ts.map +1 -1
- package/dist/runtime/feature-gate.js +0 -21
- package/dist/runtime/feature-gate.js.map +1 -1
- package/dist/runtime/finding.d.ts +49 -8
- package/dist/runtime/finding.d.ts.map +1 -1
- package/dist/runtime/finding.js +51 -8
- package/dist/runtime/finding.js.map +1 -1
- package/dist/runtime/fixture.d.ts +35 -28
- package/dist/runtime/fixture.d.ts.map +1 -1
- package/dist/runtime/fixture.js +92 -731
- package/dist/runtime/fixture.js.map +1 -1
- package/dist/runtime/generate.d.ts +63 -0
- package/dist/runtime/generate.d.ts.map +1 -0
- package/dist/runtime/generate.js +635 -0
- package/dist/runtime/generate.js.map +1 -0
- package/dist/runtime/headers.d.ts +6 -0
- package/dist/runtime/headers.d.ts.map +1 -0
- package/dist/runtime/headers.js +16 -0
- package/dist/runtime/headers.js.map +1 -0
- package/dist/runtime/path.d.ts +7 -0
- package/dist/runtime/path.d.ts.map +1 -0
- package/dist/runtime/path.js +44 -0
- package/dist/runtime/path.js.map +1 -0
- package/dist/runtime/payloads.d.ts +2 -0
- package/dist/runtime/payloads.d.ts.map +1 -1
- package/dist/runtime/payloads.js +2 -1
- package/dist/runtime/payloads.js.map +1 -1
- package/dist/runtime/rate-limit.d.ts +6 -4
- package/dist/runtime/rate-limit.d.ts.map +1 -1
- package/dist/runtime/rate-limit.js +22 -33
- package/dist/runtime/rate-limit.js.map +1 -1
- package/dist/runtime/redact.d.ts +24 -0
- package/dist/runtime/redact.d.ts.map +1 -0
- package/dist/runtime/redact.js +98 -0
- package/dist/runtime/redact.js.map +1 -0
- package/dist/runtime/run.d.ts +34 -2
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +346 -138
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runs.d.ts +5 -0
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +7 -1
- package/dist/runtime/runs.js.map +1 -1
- package/dist/runtime/teardown.d.ts +17 -4
- package/dist/runtime/teardown.d.ts.map +1 -1
- package/dist/runtime/teardown.js +49 -16
- package/dist/runtime/teardown.js.map +1 -1
- package/dist/runtime/transcript.d.ts +34 -2
- package/dist/runtime/transcript.d.ts.map +1 -1
- package/dist/runtime/transcript.js +119 -24
- package/dist/runtime/transcript.js.map +1 -1
- package/dist/runtime/unique.d.ts +2 -11
- package/dist/runtime/unique.d.ts.map +1 -1
- package/dist/runtime/unique.js +27 -53
- package/dist/runtime/unique.js.map +1 -1
- package/dist/runtime/validate.d.ts +13 -2
- package/dist/runtime/validate.d.ts.map +1 -1
- package/dist/runtime/validate.js +51 -31
- package/dist/runtime/validate.js.map +1 -1
- package/dist/runtime/wait.d.ts +2 -1
- package/dist/runtime/wait.d.ts.map +1 -1
- package/dist/runtime/wait.js +2 -36
- package/dist/runtime/wait.js.map +1 -1
- package/dist/runtime/world.d.ts +24 -1
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +101 -26
- package/dist/runtime/world.js.map +1 -1
- package/dist/spec/collection.d.ts +8 -2
- package/dist/spec/collection.d.ts.map +1 -1
- package/dist/spec/collection.js +47 -7
- package/dist/spec/collection.js.map +1 -1
- package/dist/spec/extensions.d.ts +5 -1
- package/dist/spec/extensions.d.ts.map +1 -1
- package/dist/spec/extensions.js +9 -2
- package/dist/spec/extensions.js.map +1 -1
- package/dist/spec/graph.d.ts +46 -0
- package/dist/spec/graph.d.ts.map +1 -1
- package/dist/spec/graph.js +175 -11
- package/dist/spec/graph.js.map +1 -1
- package/dist/spec/load.d.ts +25 -5
- package/dist/spec/load.d.ts.map +1 -1
- package/dist/spec/load.js +160 -59
- package/dist/spec/load.js.map +1 -1
- package/dist/spec/query-capabilities.d.ts +4 -0
- package/dist/spec/query-capabilities.d.ts.map +1 -1
- package/dist/spec/query-capabilities.js +6 -0
- package/dist/spec/query-capabilities.js.map +1 -1
- package/dist/spec/schema.d.ts +20 -0
- package/dist/spec/schema.d.ts.map +1 -0
- package/dist/spec/schema.js +118 -0
- package/dist/spec/schema.js.map +1 -0
- package/dist/spec/tag-schema.d.ts +12 -0
- package/dist/spec/tag-schema.d.ts.map +1 -0
- package/dist/spec/tag-schema.js +143 -0
- package/dist/spec/tag-schema.js.map +1 -0
- package/dist/spec/types.js +17 -1
- package/dist/spec/types.js.map +1 -1
- package/docs/api.md +59 -0
- package/docs/assumptions.md +99 -0
- package/docs/checks.md +183 -0
- package/docs/commands.md +214 -0
- package/docs/configuration.md +650 -0
- package/docs/model.md +184 -0
- package/docs/reference-defects.md +94 -0
- package/docs/reports.md +211 -0
- package/docs/tags.md +400 -0
- package/package.json +3 -1
|
@@ -5,7 +5,11 @@
|
|
|
5
5
|
* `Client` must not retain a second copy for the rest of the run — findings cite hops by
|
|
6
6
|
* method, URL, status, headers, sizes, and content-addressed body refs.
|
|
7
7
|
*/
|
|
8
|
+
import { presentHeader } from "./headers.js";
|
|
8
9
|
import { createHash } from "node:crypto";
|
|
10
|
+
import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
11
|
+
import { tmpdir } from "node:os";
|
|
12
|
+
import { join } from "node:path";
|
|
9
13
|
import { INLINE_BODY_LIMIT, isBinaryMediaType, isSecretJsonKey, primaryMediaType, redactJson, REDACTED, } from "./exchanges.js";
|
|
10
14
|
import { parseSse, SseParser, sseEvents, sseFramesOf } from "./sse.js";
|
|
11
15
|
export function isBodyRef(value) {
|
|
@@ -51,7 +55,7 @@ export function sha256Hex(bytes) {
|
|
|
51
55
|
export function bodyRef(bytes, mediaType) {
|
|
52
56
|
return { bytes: bytes.byteLength, mediaType, sha256: sha256Hex(bytes) };
|
|
53
57
|
}
|
|
54
|
-
export async function compactRequestBody(body) {
|
|
58
|
+
export async function compactRequestBody(body, knownBytes, digest) {
|
|
55
59
|
if (body === undefined)
|
|
56
60
|
return undefined;
|
|
57
61
|
if (isFormSnapshot(body) || isBodyRef(body))
|
|
@@ -74,29 +78,52 @@ export async function compactRequestBody(body) {
|
|
|
74
78
|
}
|
|
75
79
|
return { parts };
|
|
76
80
|
}
|
|
77
|
-
if (isURLSearchParams(body))
|
|
78
|
-
|
|
81
|
+
if (isURLSearchParams(body)) {
|
|
82
|
+
/* A key sent more than once is how a form sends an array; keep every value. */
|
|
83
|
+
const fields = {};
|
|
84
|
+
for (const [key, value] of body.entries()) {
|
|
85
|
+
const prior = fields[key];
|
|
86
|
+
fields[key] = prior === undefined ? value : [...[prior].flat(), value];
|
|
87
|
+
}
|
|
88
|
+
return redactJson(fields);
|
|
89
|
+
}
|
|
79
90
|
const raw = await bytesOf(body);
|
|
80
91
|
if (raw !== undefined)
|
|
81
92
|
return bodyRef(raw, "application/octet-stream");
|
|
93
|
+
/* Hashed when it was sent, from the text that went out (a string or JSON); nothing to
|
|
94
|
+
* serialize again. */
|
|
95
|
+
if (digest !== undefined) {
|
|
96
|
+
return {
|
|
97
|
+
bytes: digest.bytes,
|
|
98
|
+
mediaType: typeof body === "string" ? "text/plain" : "application/json",
|
|
99
|
+
sha256: digest.sha256,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
82
102
|
if (typeof body === "string") {
|
|
83
103
|
const bytes = utf8Bytes(body);
|
|
84
104
|
return bytes.byteLength <= INLINE_BODY_LIMIT ? body : bodyRef(bytes, "text/plain");
|
|
85
105
|
}
|
|
86
106
|
if (body !== null && typeof body === "object") {
|
|
107
|
+
/* The size it went out at is already known; serializing again only to measure is waste. */
|
|
108
|
+
if (knownBytes !== undefined && knownBytes <= INLINE_BODY_LIMIT)
|
|
109
|
+
return body;
|
|
87
110
|
const bytes = utf8Bytes(JSON.stringify(body));
|
|
88
111
|
return bytes.byteLength <= INLINE_BODY_LIMIT ? body : bodyRef(bytes, "application/json");
|
|
89
112
|
}
|
|
90
113
|
return body;
|
|
91
114
|
}
|
|
92
|
-
export async function compactResponseBody(body, responseHeaders) {
|
|
115
|
+
export async function compactResponseBody(body, responseHeaders, knownBytes, digest) {
|
|
93
116
|
if (body === undefined)
|
|
94
117
|
return undefined;
|
|
118
|
+
/* What was received, when the client kept its size and hash; a re-encoding otherwise. */
|
|
119
|
+
const refOf = (bytes, type) => digest === undefined ? bodyRef(bytes, type) : { bytes: digest.bytes, mediaType: type, sha256: digest.sha256 };
|
|
95
120
|
if (isBodyRef(body) || isFormSnapshot(body))
|
|
96
121
|
return body;
|
|
97
|
-
const mediaType =
|
|
122
|
+
const mediaType = presentHeader(responseHeaders, "content-type") ?? "";
|
|
98
123
|
const sse = mediaType.toLowerCase().includes("text/event-stream");
|
|
99
|
-
|
|
124
|
+
/* Frames only under text/event-stream: a JSON array of strings, or a string that happens to
|
|
125
|
+
* start with "data:", is just that. */
|
|
126
|
+
if (sse && Array.isArray(body)) {
|
|
100
127
|
const frames = sseEvents(body);
|
|
101
128
|
if (frames !== null) {
|
|
102
129
|
const compact = sseFramesOf(frames);
|
|
@@ -107,7 +134,7 @@ export async function compactResponseBody(body, responseHeaders) {
|
|
|
107
134
|
}
|
|
108
135
|
}
|
|
109
136
|
if (typeof body === "string") {
|
|
110
|
-
const frames = sseEvents(body);
|
|
137
|
+
const frames = sse ? sseEvents(body) : null;
|
|
111
138
|
if (frames !== null) {
|
|
112
139
|
const compact = sseFramesOf(frames);
|
|
113
140
|
const bytes = utf8Bytes(JSON.stringify(compact));
|
|
@@ -120,24 +147,26 @@ export async function compactResponseBody(body, responseHeaders) {
|
|
|
120
147
|
return body;
|
|
121
148
|
if (!sse && !isBinaryMediaType(mediaType) && bytes.byteLength <= INLINE_BODY_LIMIT)
|
|
122
149
|
return body;
|
|
123
|
-
return
|
|
150
|
+
return sse
|
|
151
|
+
? bodyRef(bytes, primaryMediaType(mediaType, "text/event-stream"))
|
|
152
|
+
: refOf(bytes, primaryMediaType(mediaType, "text/plain"));
|
|
124
153
|
}
|
|
125
154
|
const raw = await bytesOf(body);
|
|
126
155
|
if (raw !== undefined) {
|
|
127
156
|
return bodyRef(raw, primaryMediaType(mediaType, "application/octet-stream"));
|
|
128
157
|
}
|
|
129
158
|
if (body !== null && typeof body === "object") {
|
|
159
|
+
if (knownBytes !== undefined && knownBytes <= INLINE_BODY_LIMIT)
|
|
160
|
+
return body;
|
|
130
161
|
const bytes = utf8Bytes(JSON.stringify(body));
|
|
131
|
-
return bytes.byteLength <= INLINE_BODY_LIMIT
|
|
132
|
-
? body
|
|
133
|
-
: bodyRef(bytes, primaryMediaType(mediaType, "application/json"));
|
|
162
|
+
return bytes.byteLength <= INLINE_BODY_LIMIT ? body : refOf(bytes, primaryMediaType(mediaType, "application/json"));
|
|
134
163
|
}
|
|
135
164
|
return body;
|
|
136
165
|
}
|
|
137
166
|
/** Drop live request/response payloads on an exchange already pushed to the transcript. */
|
|
138
167
|
export async function releaseTranscriptBodies(exchange) {
|
|
139
|
-
exchange.requestBody = await compactRequestBody(exchange.requestBody);
|
|
140
|
-
exchange.responseBody = await compactResponseBody(exchange.responseBody, exchange.responseHeaders);
|
|
168
|
+
exchange.requestBody = await compactRequestBody(exchange.requestBody, exchange.requestBytes, exchange.requestDigest);
|
|
169
|
+
exchange.responseBody = await compactResponseBody(exchange.responseBody, exchange.responseHeaders, exchange.responseBytes, exchange.responseDigest);
|
|
141
170
|
}
|
|
142
171
|
/**
|
|
143
172
|
* Read a fetch Response. `text/event-stream` is parsed incrementally so the raw concatenation
|
|
@@ -149,15 +178,34 @@ export async function readResponsePayload(response) {
|
|
|
149
178
|
if (contentType.toLowerCase().includes("text/event-stream")) {
|
|
150
179
|
return readSsePayload(response);
|
|
151
180
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
181
|
+
/* Bytes once: their count is the size on the wire, whatever the encoding. Only text is
|
|
182
|
+
* decoded, and by the charset it declares — a Latin-1 page read as UTF-8 is a different page. */
|
|
183
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
184
|
+
const bodyBytes = bytes.byteLength;
|
|
185
|
+
if (bodyBytes === 0)
|
|
155
186
|
return { bodyBytes: 0, parsed: null };
|
|
187
|
+
/* A body that will be stored by reference is hashed now, while its received bytes exist:
|
|
188
|
+
* re-encoding the parsed value later would hash something the server never sent. */
|
|
189
|
+
const digest = bodyBytes > INLINE_BODY_LIMIT ? { bytes: bodyBytes, sha256: sha256Hex(bytes) } : undefined;
|
|
190
|
+
const withDigest = digest === undefined ? {} : { digest };
|
|
191
|
+
if (isBinaryMediaType(contentType))
|
|
192
|
+
return { bodyBytes, parsed: bytes, ...withDigest };
|
|
193
|
+
const text = decodeText(bytes, contentType);
|
|
194
|
+
try {
|
|
195
|
+
return { bodyBytes, parsed: JSON.parse(text), ...withDigest };
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return { bodyBytes, parsed: text, ...withDigest };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function decodeText(bytes, contentType) {
|
|
202
|
+
const charset = /charset\s*=\s*"?([^";\s]+)/i.exec(contentType)?.[1];
|
|
156
203
|
try {
|
|
157
|
-
return
|
|
204
|
+
return new TextDecoder(charset ?? "utf-8").decode(bytes);
|
|
158
205
|
}
|
|
159
206
|
catch {
|
|
160
|
-
|
|
207
|
+
/* An unknown label is the server's mistake; UTF-8 is the only sensible reading left. */
|
|
208
|
+
return new TextDecoder("utf-8").decode(bytes);
|
|
161
209
|
}
|
|
162
210
|
}
|
|
163
211
|
async function readSsePayload(response) {
|
|
@@ -241,12 +289,59 @@ function utf8Bytes(text) {
|
|
|
241
289
|
function utf8ByteLength(text) {
|
|
242
290
|
return text === "" ? 0 : utf8Bytes(text).byteLength;
|
|
243
291
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
292
|
+
/** Bytes of transcript bodies kept in memory before the oldest move to disk. */
|
|
293
|
+
export const TRANSCRIPT_BODY_BUDGET = 32 * 1024 * 1024;
|
|
294
|
+
export function isSpooledBody(value) {
|
|
295
|
+
return value !== null && typeof value === "object" && typeof value.spooled === "number";
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Transcript bodies past a memory budget, on disk.
|
|
299
|
+
*
|
|
300
|
+
* The transcript keeps every exchange — checks judge it after the fact — but not every body in
|
|
301
|
+
* memory: a run that read a few hundred large pages would otherwise hold them all. Bodies are
|
|
302
|
+
* kept newest first up to the budget; older ones are written to a private directory, exactly as
|
|
303
|
+
* they were (this is not the journal, which redacts), and read back on request.
|
|
304
|
+
*/
|
|
305
|
+
export class BodySpool {
|
|
306
|
+
budget;
|
|
307
|
+
kept = [];
|
|
308
|
+
held = 0;
|
|
309
|
+
dir;
|
|
310
|
+
constructor(budget = TRANSCRIPT_BODY_BUDGET) {
|
|
311
|
+
this.budget = budget;
|
|
312
|
+
}
|
|
313
|
+
async keep(exchange) {
|
|
314
|
+
const bytes = exchange.requestBytes + exchange.responseBytes;
|
|
315
|
+
this.kept.push({ bytes, exchange });
|
|
316
|
+
this.held += bytes;
|
|
317
|
+
while (this.held > this.budget && this.kept.length > 1) {
|
|
318
|
+
/* More than one is kept, so there is an oldest. */
|
|
319
|
+
const oldest = this.kept.shift();
|
|
320
|
+
this.held -= oldest.bytes;
|
|
321
|
+
await this.write(oldest.exchange);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
async hydrate(exchange) {
|
|
325
|
+
if (!isSpooledBody(exchange.responseBody) && !isSpooledBody(exchange.requestBody))
|
|
326
|
+
return exchange;
|
|
327
|
+
const seq = (isSpooledBody(exchange.responseBody) ? exchange.responseBody : exchange.requestBody);
|
|
328
|
+
/* A marker exists only once a write has made the directory. */
|
|
329
|
+
const saved = JSON.parse(await readFile(join(this.dir, `${seq.spooled}.json`), "utf8"));
|
|
330
|
+
return { ...exchange, requestBody: saved.requestBody, responseBody: saved.responseBody };
|
|
331
|
+
}
|
|
332
|
+
async dispose() {
|
|
333
|
+
if (this.dir === undefined)
|
|
334
|
+
return;
|
|
335
|
+
await rm(this.dir, { force: true, recursive: true });
|
|
336
|
+
this.dir = undefined;
|
|
337
|
+
}
|
|
338
|
+
async write(exchange) {
|
|
339
|
+
this.dir ??= await mkdtemp(join(tmpdir(), "oat-transcript-"));
|
|
340
|
+
const body = { requestBody: exchange.requestBody, responseBody: exchange.responseBody };
|
|
341
|
+
await writeFile(join(this.dir, `${exchange.seq}.json`), JSON.stringify(body));
|
|
342
|
+
const marker = { spooled: exchange.seq };
|
|
343
|
+
exchange.requestBody = exchange.requestBody === undefined ? undefined : marker;
|
|
344
|
+
exchange.responseBody = exchange.responseBody === undefined ? undefined : marker;
|
|
249
345
|
}
|
|
250
|
-
return undefined;
|
|
251
346
|
}
|
|
252
347
|
//# sourceMappingURL=transcript.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/runtime/transcript.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/runtime/transcript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,QAAQ,GACR,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAiB,MAAM,UAAU,CAAA;AAgBrF,MAAM,UAAU,SAAS,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACrF,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC1G,OAAO,KAAK,CAAA;IACb,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,WAAW;YAAE,OAAO,KAAK,CAAA;IAC7E,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACrF,MAAM,GAAG,GAAG,KAA4B,CAAA;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAA;AACxD,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,aAAa,CAAC,KAAc;IAC3C,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC7E,IAAI,OAAO,eAAe,KAAK,WAAW,IAAI,KAAK,YAAY,eAAe;QAAE,OAAO,IAAI,CAAA;IAC3F,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,IAAI,CAAA;IACrE,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,IAAI,CAAA;IACnF,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,iBAAiB;QAAE,OAAO,IAAI,CAAA;IACvF,OAAO,KAAK,CAAA;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAiB;IAC1C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAiB,EAAE,SAAiB;IAC3D,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAa,EAAE,UAAmB,EAAE,MAAmB;IAC/F,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACxC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACxD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAe,EAAE,CAAA;QAC5B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;gBACvE,SAAQ;YACT,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;YACvD,KAAK,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,KAAK,CAAC,UAAU;gBACvB,KAAK;gBACL,QAAQ,EAAE,KAAK,CAAC,IAAI;gBACpB,SAAS,EAAE,KAAK,CAAC,IAAI,IAAI,0BAA0B;gBACnD,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC;aACxB,CAAC,CAAA;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,CAAA;IACjB,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,+EAA+E;QAC/E,MAAM,MAAM,GAAsC,EAAE,CAAA;QACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;QACvE,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAA;IACtE;0BACsB;IACtB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACN,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB;YACvE,MAAM,EAAE,MAAM,CAAC,MAAM;SACrB,CAAA;IACF,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC7B,OAAO,KAAK,CAAC,UAAU,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IACnF,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,2FAA2F;QAC3F,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,IAAI,iBAAiB;YAAE,OAAO,IAAI,CAAA;QAC5E,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7C,OAAO,KAAK,CAAC,UAAU,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;IACzF,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,IAAa,EACb,eAAuC,EACvC,UAAmB,EACnB,MAAmB;IAEnB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACxC,yFAAyF;IACzF,MAAM,KAAK,GAAG,CAAC,KAAiB,EAAE,IAAY,EAAW,EAAE,CAC1D,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;IAC9G,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACxD,MAAM,SAAS,GAAG,aAAa,CAAC,eAAe,EAAE,cAAc,CAAC,IAAI,EAAE,CAAA;IACtE,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IACjE;2CACuC;IACvC,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;YACnC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;YAChD,OAAO,KAAK,CAAC,UAAU,IAAI,iBAAiB;gBAC3C,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAA;QACpE,CAAC;IACF,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;YACnC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;YAChD,OAAO,KAAK,CAAC,UAAU,IAAI,iBAAiB;gBAC3C,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAA;QACpE,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,IAAI,iBAAiB;YAAE,OAAO,IAAI,CAAA;QAC7D,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,iBAAiB;YAAE,OAAO,IAAI,CAAA;QAC/F,OAAO,GAAG;YACT,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAClE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IAC3D,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAA;IAC7E,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,IAAI,iBAAiB;YAAE,OAAO,IAAI,CAAA;QAC5E,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7C,OAAO,KAAK,CAAC,UAAU,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAA;IACpH,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAAkB;IAC/D,QAAQ,CAAC,WAAW,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IACpH,QAAQ,CAAC,YAAY,GAAG,MAAM,mBAAmB,CAChD,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,aAAa,EACtB,QAAQ,CAAC,cAAc,CACvB,CAAA;AACF,CAAC;AAcD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAkB;IAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;IAC9D,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC7D,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC;IACD;qGACiG;IACjG,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAA;IAClC,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IAC1D;wFACoF;IACpF,MAAM,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACzG,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAA;IACzD,IAAI,iBAAiB,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CAAA;IACtF,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC3C,IAAI,CAAC;QACJ,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,EAAE,GAAG,UAAU,EAAE,CAAA;IACzE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAA;IAClD,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB,EAAE,WAAmB;IACzD,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACpE,IAAI,CAAC;QACJ,OAAO,IAAI,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACR,wFAAwF;QACxF,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9C,CAAC;AACF,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAAkB;IAC/C,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAA;IAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,IAAI,OAAO,GAAG,IAAI,CAAA;IAClB,IAAI,CAAC;QACJ,SAAS,CAAC;YACT,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI;gBAAE,MAAK;YACf,MAAM,KAAK,GAAG,KAAK,IAAI,IAAI,UAAU,EAAE,CAAA;YACvC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAA;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAClB,IAAI,OAAO,EAAE,CAAC;gBACb,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACrB,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;oBAC/B,OAAO,GAAG,KAAK,CAAA;oBACf,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA;gBACrB,CAAC;YACF,CAAC;QACF,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;QAC7B,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,IAAI,OAAO;gBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;IACF,CAAC;YAAS,CAAC;QACV,MAAM,CAAC,WAAW,EAAE,CAAA;IACrB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IAC9B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAA;IACzD,CAAC;IACD,IAAI,OAAO;QAAE,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;IAC3D,OAAO;QACN,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;KACpF,CAAA;AACF,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC;IACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAA;IACxE,IAAI,SAAS,GAAG,iBAAiB;QAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,EAAE,CAAA;IAC9G,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAA;IAC7C,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;IACpG,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IACtG,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAC1G,OAAO,SAAS,CAAA;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAChC,OAAO,OAAO,QAAQ,KAAK,WAAW,IAAI,IAAI,YAAY,QAAQ,CAAA;AACnE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAa;IACvC,OAAO,OAAO,eAAe,KAAK,WAAW,IAAI,IAAI,YAAY,eAAe,CAAA;AACjF,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC9B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IACnC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,CAAA;AACpD,CAAC;AAID,gFAAgF;AAChF,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAOtD,MAAM,UAAU,aAAa,CAAC,KAAc;IAC3C,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAqB,CAAC,OAAO,KAAK,QAAQ,CAAA;AACzG,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,SAAS;IAKQ;IAJZ,IAAI,GAAiD,EAAE,CAAA;IAChE,IAAI,GAAG,CAAC,CAAA;IACR,GAAG,CAAoB;IAE/B,YAA6B,SAAS,sBAAsB;QAA/B,WAAM,GAAN,MAAM,CAAyB;IAAG,CAAC;IAEhE,KAAK,CAAC,IAAI,CAAC,QAAkB;QAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAA;QAC5D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAA;QAClB,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,mDAAmD;YACnD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAA2C,CAAA;YACzE,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAA;YACzB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAClC,CAAC;IACF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAkB;QAC/B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,QAAQ,CAAA;QAClG,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAgB,CAAA;QAChH,+DAA+D;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAa,EAAE,GAAG,GAAG,CAAC,OAAO,OAAO,CAAC,EAAE,MAAM,CAAC,CAG/F,CAAA;QACD,OAAO,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YAAE,OAAM;QAClC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,IAAI,CAAC,GAAG,GAAG,SAAS,CAAA;IACrB,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,QAAkB;QACrC,IAAI,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAC7D,MAAM,IAAI,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAA;QACvF,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7E,MAAM,MAAM,GAAgB,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAA;QACrD,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;QAC9E,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IACjF,CAAC;CACD"}
|
package/dist/runtime/unique.d.ts
CHANGED
|
@@ -5,10 +5,6 @@
|
|
|
5
5
|
* not required. Uniqueness is never inferred from a 409 without the tag.
|
|
6
6
|
*/
|
|
7
7
|
import type { OperationModel, SpecModel } from "../spec/graph.ts";
|
|
8
|
-
import type { OperationObject } from "../spec/types.ts";
|
|
9
|
-
import type { Exchange } from "./client.ts";
|
|
10
|
-
import type { FindingCollector } from "./finding.ts";
|
|
11
|
-
import type { SchemaValidator } from "./validate.ts";
|
|
12
8
|
export declare const UNIQUE_CONFLICT_STATUS = 409;
|
|
13
9
|
export declare function isUniqueConflictResponse(op: Pick<OperationModel, "unique">, status: number): boolean;
|
|
14
10
|
/** Header names the document (and oat) treat as an idempotency key. */
|
|
@@ -37,11 +33,6 @@ export declare function uniquifyProbeBody(body: Record<string, unknown>, sets: s
|
|
|
37
33
|
* Other unique sets keep the uniquified values so two sets are never collided in one request.
|
|
38
34
|
*/
|
|
39
35
|
export declare function collisionCreateBody(base: Record<string, unknown>, known: Record<string, unknown>, set: string[], scope: Record<string, string>, bodyColumns: ReadonlySet<string>, generated: readonly string[]): Record<string, unknown> | null;
|
|
40
|
-
/**
|
|
41
|
-
export declare function collisionUpdatePatch(source: Record<string, unknown>, set: string[], scope: Record<string, string>, bodyColumns: ReadonlySet<string>, immutable: readonly string[], generated: readonly string[]): Record<string, unknown> | null;
|
|
42
|
-
/**
|
|
43
|
-
* A 409 still has to match the documented error schema. Coverage is "this 409 is expected";
|
|
44
|
-
* it is not a free pass for an undeclared body.
|
|
45
|
-
*/
|
|
46
|
-
export declare function reportUniqueSchemaDrift(findings: FindingCollector, validator: SchemaValidator, op: OperationModel, raw: OperationObject | undefined, exchange: Exchange, entity: string): void;
|
|
36
|
+
/** The update that makes `target` hold `source`'s values on a whole unique set, or `null` when it cannot. */
|
|
37
|
+
export declare function collisionUpdatePatch(source: Record<string, unknown>, target: Record<string, unknown>, set: string[], scope: Record<string, string>, bodyColumns: ReadonlySet<string>, immutable: readonly string[], generated: readonly string[]): Record<string, unknown> | null;
|
|
47
38
|
//# sourceMappingURL=unique.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unique.d.ts","sourceRoot":"","sources":["../../src/runtime/unique.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"unique.d.ts","sourceRoot":"","sources":["../../src/runtime/unique.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjE,eAAO,MAAM,sBAAsB,MAAM,CAAA;AAEzC,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpG;AAED,uEAAuE;AACvE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAMvF;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAOnF;AAUD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAClC,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,QAAQ,GAAG,QAAQ,EAC1B,IAAI,GAAE,MAAM,EAAE,EAAoB,GAChC,MAAM,EAAE,EAAE,CASZ;AAED,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACtC,OAAO,CAMT;AAED,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACtC,KAAK,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAuBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,MAAM,EAAE,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,SAAS,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYhC;AAED,6GAA6G;AAC7G,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EAAE,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAehC"}
|
package/dist/runtime/unique.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* HTTP 409 is the unique-conflict class. Index names and product `error_key` / `vars.type` are
|
|
5
5
|
* not required. Uniqueness is never inferred from a 409 without the tag.
|
|
6
6
|
*/
|
|
7
|
+
import { generate } from "./generate.js";
|
|
7
8
|
import { requestContent } from "../spec/collection.js";
|
|
8
9
|
export const UNIQUE_CONFLICT_STATUS = 409;
|
|
9
10
|
export function isUniqueConflictResponse(op, status) {
|
|
@@ -96,36 +97,25 @@ export function uniquifyProbeBody(body, sets, schema, token) {
|
|
|
96
97
|
}
|
|
97
98
|
return out;
|
|
98
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* A value for a unique column that no earlier record — this run's or an earlier run's — holds.
|
|
102
|
+
*
|
|
103
|
+
* Drawn from the column's own schema with the token mixed in, so it honours `maximum`,
|
|
104
|
+
* `multipleOf`, `enum`, `pattern` and `format`. Appending a suffix to whatever was there broke
|
|
105
|
+
* every one of those. Where the schema admits nothing new, the value is left as it was and the
|
|
106
|
+
* caller's collision check decides.
|
|
107
|
+
*/
|
|
99
108
|
function distinctUniqueValue(value, token, schema) {
|
|
100
|
-
if (
|
|
101
|
-
const n = token.split("").reduce((acc, ch) => acc + ch.charCodeAt(0), 0);
|
|
102
|
-
return value + (n % 97) + 1;
|
|
103
|
-
}
|
|
104
|
-
if (typeof value !== "string")
|
|
109
|
+
if (schema === undefined)
|
|
105
110
|
return value;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const keep = Math.max(0, max - suffix.length);
|
|
115
|
-
next = `${value.slice(0, keep)}${suffix}`;
|
|
116
|
-
if (next.length > max)
|
|
117
|
-
next = suffix.slice(-max);
|
|
118
|
-
}
|
|
119
|
-
if (pattern !== undefined) {
|
|
120
|
-
try {
|
|
121
|
-
if (!new RegExp(pattern, "u").test(next))
|
|
122
|
-
return value;
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
return value;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return next;
|
|
111
|
+
let h = 0;
|
|
112
|
+
for (const ch of token)
|
|
113
|
+
h = (Math.imul(h, 31) + ch.charCodeAt(0)) >>> 0;
|
|
114
|
+
const result = generate({ properties: { value: schema }, required: ["value"], type: "object" }, { distinct: new Set(["value"]), index: h % 1000, nonce: token });
|
|
115
|
+
if (!result.ok)
|
|
116
|
+
return value;
|
|
117
|
+
const next = result.value.value;
|
|
118
|
+
return JSON.stringify(next) === JSON.stringify(value) ? value : next;
|
|
129
119
|
}
|
|
130
120
|
/**
|
|
131
121
|
* Overlays one unique set's values from a known row onto a body that otherwise does not collide.
|
|
@@ -147,39 +137,23 @@ export function collisionCreateBody(base, known, set, scope, bodyColumns, genera
|
|
|
147
137
|
}
|
|
148
138
|
return wrote ? out : null;
|
|
149
139
|
}
|
|
150
|
-
/**
|
|
151
|
-
export function collisionUpdatePatch(source, set, scope, bodyColumns, immutable, generated) {
|
|
140
|
+
/** The update that makes `target` hold `source`'s values on a whole unique set, or `null` when it cannot. */
|
|
141
|
+
export function collisionUpdatePatch(source, target, set, scope, bodyColumns, immutable, generated) {
|
|
152
142
|
const skip = new Set([...immutable, ...generated]);
|
|
153
143
|
const patch = {};
|
|
154
144
|
for (const col of set) {
|
|
155
|
-
if (!bodyColumns.has(col) || skip.has(col))
|
|
156
|
-
continue;
|
|
157
145
|
const value = source[col] ?? scope[col];
|
|
158
146
|
if (value === undefined)
|
|
159
147
|
return null;
|
|
148
|
+
if (!bodyColumns.has(col) || skip.has(col)) {
|
|
149
|
+
/* A column the update cannot write must already agree, or the two rows would still
|
|
150
|
+
* differ on the set after the write — and accepting it would be correct. */
|
|
151
|
+
if (JSON.stringify(target[col] ?? scope[col]) !== JSON.stringify(value))
|
|
152
|
+
return null;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
160
155
|
patch[col] = value;
|
|
161
156
|
}
|
|
162
157
|
return Object.keys(patch).length > 0 ? patch : null;
|
|
163
158
|
}
|
|
164
|
-
/**
|
|
165
|
-
* A 409 still has to match the documented error schema. Coverage is "this 409 is expected";
|
|
166
|
-
* it is not a free pass for an undeclared body.
|
|
167
|
-
*/
|
|
168
|
-
export function reportUniqueSchemaDrift(findings, validator, op, raw, exchange, entity) {
|
|
169
|
-
if (raw === undefined)
|
|
170
|
-
return;
|
|
171
|
-
if (!validator.documents(raw, exchange.status))
|
|
172
|
-
return;
|
|
173
|
-
const result = validator.validate(op.operationId, raw, exchange.status, exchange.responseBody);
|
|
174
|
-
if (result.ok)
|
|
175
|
-
return;
|
|
176
|
-
if (findings.findings.some((finding) => finding.check === "schema.error-response-matches-document" &&
|
|
177
|
-
finding.entity === entity &&
|
|
178
|
-
finding.evidence.some((prior) => prior.seq === exchange.seq))) {
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
findings.spec("schema.error-response-matches-document", entity, `${exchange.status} error body does not match its documented schema`, `${op.operationId} returned ${exchange.status} with a body that fails the schema the ` +
|
|
182
|
-
`document declares for it: ${result.errors.join("; ")}. Clients that parse errors ` +
|
|
183
|
-
"from the spec will not understand this response.", [exchange]);
|
|
184
|
-
}
|
|
185
159
|
//# sourceMappingURL=unique.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unique.js","sourceRoot":"","sources":["../../src/runtime/unique.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"unique.js","sourceRoot":"","sources":["../../src/runtime/unique.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* as written: a document that declares a closed object and a backend that returns extra fields
|
|
6
6
|
* genuinely disagree, and which one is wrong is a decision for the reader, not for oat.
|
|
7
7
|
*/
|
|
8
|
-
import type { OperationObject } from "../spec/types.ts";
|
|
8
|
+
import type { OperationObject, SchemaObject } from "../spec/types.ts";
|
|
9
9
|
/** Minimal surface oat uses — avoids depending on AJV's CJS/ESM type shape. */
|
|
10
10
|
export interface ValidateFunction {
|
|
11
11
|
(data: unknown): boolean;
|
|
@@ -17,15 +17,26 @@ export interface ValidateFunction {
|
|
|
17
17
|
export interface ValidationResult {
|
|
18
18
|
ok: boolean;
|
|
19
19
|
errors: string[];
|
|
20
|
+
/**
|
|
21
|
+
* Set when the documented schema could not be compiled, with AJV's reason. Nothing was
|
|
22
|
+
* validated, and the caller must say so — an uncompilable schema is not a passing one.
|
|
23
|
+
*/
|
|
24
|
+
unchecked?: string;
|
|
20
25
|
}
|
|
21
26
|
export declare class SchemaValidator {
|
|
22
27
|
private readonly ajv;
|
|
23
28
|
private readonly cache;
|
|
24
|
-
|
|
29
|
+
/** `defs`: the recursive schemas a dereferenced document refers to (see `dereference`). */
|
|
30
|
+
constructor(defs?: Record<string, SchemaObject>);
|
|
25
31
|
/** Compiles the schema documented for this operation and status, if there is one. */
|
|
26
32
|
private compile;
|
|
27
33
|
validate(operationId: string, op: OperationObject, status: number, body: unknown): ValidationResult;
|
|
28
34
|
/** True when the document actually documents this status for this operation. */
|
|
29
35
|
documents(op: OperationObject, status: number): boolean;
|
|
30
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Whether `value` satisfies an already-normalized `schema` — the self-check every generated body
|
|
39
|
+
* passes before it is sent. Returns AJV's complaints, or `[]`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function instanceErrors(schema: SchemaObject, value: unknown, defs?: Record<string, SchemaObject>): string[];
|
|
31
42
|
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/runtime/validate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/runtime/validate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAErE,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAChC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAA;CAClE;AASD,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AASD,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkE;IAExF,2FAA2F;gBAC/E,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAM;IAgBnD,qFAAqF;IACrF,OAAO,CAAC,OAAO;IAsBf,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,gBAAgB;IAYnG,gFAAgF;IAChF,SAAS,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;CAGvD;AAgCD;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAW,GAC1C,MAAM,EAAE,CAaV"}
|