@lovrozagar/oat 0.2.2 → 0.4.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 +80 -21
- package/dist/cli.js +16 -2
- package/dist/config/define-config.d.ts +41 -1
- package/dist/config/define-config.d.ts.map +1 -1
- package/dist/config/define-config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/report/render.d.ts.map +1 -1
- package/dist/report/render.js +28 -5
- package/dist/report/render.js.map +1 -1
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +30 -3
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/body.d.ts +33 -0
- package/dist/runtime/body.d.ts.map +1 -0
- package/dist/runtime/body.js +218 -0
- package/dist/runtime/body.js.map +1 -0
- package/dist/runtime/checks.d.ts +3 -0
- package/dist/runtime/checks.d.ts.map +1 -1
- package/dist/runtime/checks.js +83 -39
- package/dist/runtime/checks.js.map +1 -1
- package/dist/runtime/client.d.ts +20 -1
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +207 -8
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/dummy.d.ts +23 -0
- package/dist/runtime/dummy.d.ts.map +1 -0
- package/dist/runtime/dummy.js +214 -0
- package/dist/runtime/dummy.js.map +1 -0
- package/dist/runtime/fixture.d.ts +28 -1
- package/dist/runtime/fixture.d.ts.map +1 -1
- package/dist/runtime/fixture.js +551 -90
- package/dist/runtime/fixture.js.map +1 -1
- package/dist/runtime/progress.d.ts +4 -0
- package/dist/runtime/progress.d.ts.map +1 -1
- package/dist/runtime/progress.js +23 -0
- package/dist/runtime/progress.js.map +1 -1
- package/dist/runtime/run.d.ts +4 -1
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +121 -35
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/upload.d.ts +21 -0
- package/dist/runtime/upload.d.ts.map +1 -0
- package/dist/runtime/upload.js +247 -0
- package/dist/runtime/upload.js.map +1 -0
- package/dist/runtime/world.d.ts +7 -0
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +59 -14
- package/dist/runtime/world.js.map +1 -1
- package/dist/spec/collection.d.ts +13 -0
- package/dist/spec/collection.d.ts.map +1 -1
- package/dist/spec/collection.js +36 -6
- package/dist/spec/collection.js.map +1 -1
- package/dist/spec/graph.d.ts.map +1 -1
- package/dist/spec/graph.js +7 -3
- package/dist/spec/graph.js.map +1 -1
- package/dist/spec/load.d.ts.map +1 -1
- package/dist/spec/load.js +19 -4
- package/dist/spec/load.js.map +1 -1
- package/dist/spec/types.d.ts +3 -0
- package/dist/spec/types.d.ts.map +1 -1
- package/dist/spec/types.js.map +1 -1
- package/package.json +3 -2
package/dist/runtime/client.d.ts
CHANGED
|
@@ -10,6 +10,17 @@ export interface Exchange {
|
|
|
10
10
|
responseHeaders: Record<string, string>;
|
|
11
11
|
responseBody: unknown;
|
|
12
12
|
durationMs: number;
|
|
13
|
+
/** Wall clock when the response finished, unix ms. */
|
|
14
|
+
at: number;
|
|
15
|
+
/** Reconstructed HTTP/1.1 request size: start line, headers, body. */
|
|
16
|
+
requestBytes: number;
|
|
17
|
+
/** Reconstructed HTTP/1.1 response size: start line, headers, body. */
|
|
18
|
+
responseBytes: number;
|
|
19
|
+
/**
|
|
20
|
+
* `x-request-id` / `request-id` / `x-correlation-id` / `correlation-id`.
|
|
21
|
+
* Response header wins; otherwise what oat sent. Empty when neither side passed one.
|
|
22
|
+
*/
|
|
23
|
+
requestId: string;
|
|
13
24
|
/** Rate-limit category this request was paced against, when one matched. */
|
|
14
25
|
rateLimitCategory?: string;
|
|
15
26
|
/** Where that category came from — a `spec.*` finding only ever cites a `"tag"` rejection. */
|
|
@@ -20,8 +31,12 @@ export interface Exchange {
|
|
|
20
31
|
export interface RequestOptions {
|
|
21
32
|
headers?: Record<string, string>;
|
|
22
33
|
query?: Record<string, string | number | undefined>;
|
|
34
|
+
/** Plain object (JSON), FormData, URLSearchParams, or any BodyInit. */
|
|
23
35
|
body?: unknown;
|
|
24
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Explicit type, or `null` when headers are already final.
|
|
38
|
+
* FormData never gets a Content-Type here — fetch must set the boundary.
|
|
39
|
+
*/
|
|
25
40
|
contentType?: string | null;
|
|
26
41
|
}
|
|
27
42
|
export declare class Client {
|
|
@@ -73,4 +88,8 @@ export interface CurlOptions {
|
|
|
73
88
|
* single-quoted so JSON bodies and query strings survive untouched.
|
|
74
89
|
*/
|
|
75
90
|
export declare function toCurl(exchange: Exchange, options?: CurlOptions): string;
|
|
91
|
+
/** Response header first, then the request. Empty when neither side sent one of the known names. */
|
|
92
|
+
/** Plain snapshot of a request body for reports — FormData is not JSON. */
|
|
93
|
+
export declare function describeRequestBody(body: unknown): unknown;
|
|
94
|
+
export declare function requestIdOf(requestHeaders: Record<string, string>, responseHeaders: Record<string, string>): string;
|
|
76
95
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA,mGAAmG;AAEnG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,WAAW,QAAQ;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,8FAA8F;IAC9F,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAClC,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;IACnD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/client.js
CHANGED
|
@@ -46,12 +46,12 @@ export class Client {
|
|
|
46
46
|
url.searchParams.set(key, String(value));
|
|
47
47
|
}
|
|
48
48
|
const headers = { ...this.globalHeaders, ...options.headers };
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
const encoded = encodeBody(options.body, options.contentType);
|
|
50
|
+
if (encoded.contentType !== undefined)
|
|
51
|
+
headers["content-type"] = encoded.contentType;
|
|
52
52
|
const init = { headers, method };
|
|
53
|
-
if (
|
|
54
|
-
init.body =
|
|
53
|
+
if (encoded.init !== undefined)
|
|
54
|
+
init.body = encoded.init;
|
|
55
55
|
/* Two independent constraints, both held: maxInFlight bounds concurrency with no notion of
|
|
56
56
|
* time, a rate-limit category bounds throughput over time. The in-flight slot is acquired
|
|
57
57
|
* first and released in the same finally as before — pacing sits entirely inside that
|
|
@@ -62,12 +62,14 @@ export class Client {
|
|
|
62
62
|
let started;
|
|
63
63
|
let response;
|
|
64
64
|
let text;
|
|
65
|
+
let at = 0;
|
|
65
66
|
try {
|
|
66
67
|
if (rule !== undefined)
|
|
67
68
|
rateLimitHadRoom = await this.rateLimiter?.acquire(rule);
|
|
68
69
|
started = performance.now();
|
|
69
70
|
response = await fetch(url, init);
|
|
70
71
|
text = await response.text();
|
|
72
|
+
at = Date.now();
|
|
71
73
|
}
|
|
72
74
|
finally {
|
|
73
75
|
this.release();
|
|
@@ -80,13 +82,19 @@ export class Client {
|
|
|
80
82
|
/* keep the raw text — a non-JSON body is itself evidence */
|
|
81
83
|
}
|
|
82
84
|
this.seq += 1;
|
|
85
|
+
const verb = method.toUpperCase();
|
|
86
|
+
const responseHeaders = Object.fromEntries(response.headers.entries());
|
|
83
87
|
const exchange = {
|
|
88
|
+
at,
|
|
84
89
|
durationMs: Math.round(performance.now() - started),
|
|
85
|
-
method:
|
|
90
|
+
method: verb,
|
|
86
91
|
requestBody: options.body,
|
|
92
|
+
requestBytes: requestMessageBytes(verb, url, headers, encoded.bytes, encoded.text),
|
|
87
93
|
requestHeaders: headers,
|
|
94
|
+
requestId: requestIdOf(headers, responseHeaders),
|
|
88
95
|
responseBody: parsed,
|
|
89
|
-
|
|
96
|
+
responseBytes: responseMessageBytes(response.status, response.statusText, responseHeaders, text),
|
|
97
|
+
responseHeaders,
|
|
90
98
|
seq: this.seq,
|
|
91
99
|
status: response.status,
|
|
92
100
|
url: url.toString(),
|
|
@@ -126,10 +134,201 @@ export function toCurl(exchange, options = {}) {
|
|
|
126
134
|
parts.push(` -H '${key}: ${value}'`);
|
|
127
135
|
}
|
|
128
136
|
if (exchange.requestBody !== undefined) {
|
|
129
|
-
|
|
137
|
+
for (const flag of curlBodyFlags(exchange.requestBody))
|
|
138
|
+
parts.push(flag);
|
|
130
139
|
}
|
|
131
140
|
return parts.join(" \\\n");
|
|
132
141
|
}
|
|
142
|
+
function curlBodyFlags(body) {
|
|
143
|
+
if (isFormData(body)) {
|
|
144
|
+
const flags = [];
|
|
145
|
+
for (const [name, value] of body.entries()) {
|
|
146
|
+
if (typeof value === "string") {
|
|
147
|
+
flags.push(` -F '${name}=${value.replace(/'/g, `'\\''`)}'`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
flags.push(` -F '${name}=@${value.name};type=${value.type || "application/octet-stream"}'`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return flags;
|
|
154
|
+
}
|
|
155
|
+
if (isURLSearchParams(body)) {
|
|
156
|
+
return [` --data-urlencode '${body.toString().replace(/'/g, `'\\''`)}'`];
|
|
157
|
+
}
|
|
158
|
+
if (typeof body === "string") {
|
|
159
|
+
return [` -d '${body.replace(/'/g, `'\\''`)}'`];
|
|
160
|
+
}
|
|
161
|
+
if (isRawBytes(body)) {
|
|
162
|
+
return [` --data-binary @-`];
|
|
163
|
+
}
|
|
164
|
+
return [` -d '${JSON.stringify(body).replace(/'/g, `'\\''`)}'`];
|
|
165
|
+
}
|
|
166
|
+
function encodeBody(body, contentType) {
|
|
167
|
+
if (body === undefined)
|
|
168
|
+
return { bytes: 0 };
|
|
169
|
+
if (contentType === null) {
|
|
170
|
+
const raw = asBodyInit(body);
|
|
171
|
+
const encoded = { bytes: bodyByteLength(body), init: raw ?? JSON.stringify(body) };
|
|
172
|
+
if (typeof body === "string")
|
|
173
|
+
encoded.text = body;
|
|
174
|
+
return encoded;
|
|
175
|
+
}
|
|
176
|
+
if (isFormData(body)) {
|
|
177
|
+
/* fetch sets multipart/form-data; boundary=… — setting it ourselves drops the boundary. */
|
|
178
|
+
return { bytes: formDataBytes(body), init: body };
|
|
179
|
+
}
|
|
180
|
+
if (isURLSearchParams(body)) {
|
|
181
|
+
const text = body.toString();
|
|
182
|
+
return {
|
|
183
|
+
bytes: utf8Bytes(text),
|
|
184
|
+
contentType: contentType ?? "application/x-www-form-urlencoded",
|
|
185
|
+
init: body,
|
|
186
|
+
text,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (isRawBytes(body) || typeof body === "string") {
|
|
190
|
+
const init = asBodyInit(body);
|
|
191
|
+
const encoded = { bytes: bodyByteLength(body), init: init ?? String(body) };
|
|
192
|
+
if (contentType !== undefined)
|
|
193
|
+
encoded.contentType = contentType;
|
|
194
|
+
if (typeof body === "string")
|
|
195
|
+
encoded.text = body;
|
|
196
|
+
return encoded;
|
|
197
|
+
}
|
|
198
|
+
const text = JSON.stringify(body);
|
|
199
|
+
return {
|
|
200
|
+
bytes: utf8Bytes(text),
|
|
201
|
+
contentType: contentType ?? "application/json",
|
|
202
|
+
init: text,
|
|
203
|
+
text,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function asBodyInit(body) {
|
|
207
|
+
if (typeof body === "string")
|
|
208
|
+
return body;
|
|
209
|
+
if (isFormData(body) || isURLSearchParams(body) || isRawBytes(body))
|
|
210
|
+
return body;
|
|
211
|
+
if (typeof Blob !== "undefined" && body instanceof Blob)
|
|
212
|
+
return body;
|
|
213
|
+
if (typeof ReadableStream !== "undefined" && body instanceof ReadableStream)
|
|
214
|
+
return body;
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
function isFormData(body) {
|
|
218
|
+
return typeof FormData !== "undefined" && body instanceof FormData;
|
|
219
|
+
}
|
|
220
|
+
function isURLSearchParams(body) {
|
|
221
|
+
return typeof URLSearchParams !== "undefined" && body instanceof URLSearchParams;
|
|
222
|
+
}
|
|
223
|
+
function isRawBytes(body) {
|
|
224
|
+
if (typeof ArrayBuffer !== "undefined" && body instanceof ArrayBuffer)
|
|
225
|
+
return true;
|
|
226
|
+
if (ArrayBuffer.isView(body))
|
|
227
|
+
return true;
|
|
228
|
+
if (typeof Blob !== "undefined" && body instanceof Blob)
|
|
229
|
+
return true;
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
function bodyByteLength(body) {
|
|
233
|
+
if (typeof body === "string")
|
|
234
|
+
return utf8Bytes(body);
|
|
235
|
+
if (isFormData(body))
|
|
236
|
+
return formDataBytes(body);
|
|
237
|
+
if (isURLSearchParams(body))
|
|
238
|
+
return utf8Bytes(body.toString());
|
|
239
|
+
if (typeof Blob !== "undefined" && body instanceof Blob)
|
|
240
|
+
return body.size;
|
|
241
|
+
if (typeof ArrayBuffer !== "undefined" && body instanceof ArrayBuffer)
|
|
242
|
+
return body.byteLength;
|
|
243
|
+
if (ArrayBuffer.isView(body))
|
|
244
|
+
return body.byteLength;
|
|
245
|
+
return 0;
|
|
246
|
+
}
|
|
247
|
+
function formDataBytes(form) {
|
|
248
|
+
let total = 0;
|
|
249
|
+
for (const [name, value] of form.entries()) {
|
|
250
|
+
total += utf8Bytes(name) + 80;
|
|
251
|
+
if (typeof value === "string")
|
|
252
|
+
total += utf8Bytes(value);
|
|
253
|
+
else
|
|
254
|
+
total += value.size + utf8Bytes(value.name);
|
|
255
|
+
}
|
|
256
|
+
return total;
|
|
257
|
+
}
|
|
258
|
+
function utf8Bytes(text) {
|
|
259
|
+
return text === undefined || text === "" ? 0 : new TextEncoder().encode(text).byteLength;
|
|
260
|
+
}
|
|
261
|
+
function hasHeader(headers, name) {
|
|
262
|
+
const want = name.toLowerCase();
|
|
263
|
+
return Object.keys(headers).some((key) => key.toLowerCase() === want);
|
|
264
|
+
}
|
|
265
|
+
/** Start line + headers + body. Host and Content-Length are filled when they would be on the wire. */
|
|
266
|
+
function requestMessageBytes(method, url, headers, bodyBytes, body) {
|
|
267
|
+
const sent = { ...headers };
|
|
268
|
+
if (!hasHeader(sent, "host"))
|
|
269
|
+
sent.host = url.host;
|
|
270
|
+
if (bodyBytes > 0 && !hasHeader(sent, "content-length"))
|
|
271
|
+
sent["content-length"] = String(bodyBytes);
|
|
272
|
+
const start = `${method} ${url.pathname}${url.search} HTTP/1.1`;
|
|
273
|
+
if (body !== undefined)
|
|
274
|
+
return httpMessageBytes(start, sent, body);
|
|
275
|
+
let headerBytes = utf8Bytes(`${start}\r\n`);
|
|
276
|
+
for (const [key, value] of Object.entries(sent))
|
|
277
|
+
headerBytes += utf8Bytes(`${key}: ${value}\r\n`);
|
|
278
|
+
headerBytes += utf8Bytes(`\r\n`);
|
|
279
|
+
return headerBytes + bodyBytes;
|
|
280
|
+
}
|
|
281
|
+
function responseMessageBytes(status, statusText, headers, body) {
|
|
282
|
+
const sent = { ...headers };
|
|
283
|
+
if (body !== "" && !hasHeader(sent, "content-length"))
|
|
284
|
+
sent["content-length"] = String(utf8Bytes(body));
|
|
285
|
+
const start = statusText === "" ? `HTTP/1.1 ${status}` : `HTTP/1.1 ${status} ${statusText}`;
|
|
286
|
+
return httpMessageBytes(start, sent, body);
|
|
287
|
+
}
|
|
288
|
+
function httpMessageBytes(startLine, headers, body) {
|
|
289
|
+
let text = `${startLine}\r\n`;
|
|
290
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
291
|
+
text += `${key}: ${value}\r\n`;
|
|
292
|
+
}
|
|
293
|
+
text += `\r\n`;
|
|
294
|
+
if (body !== undefined)
|
|
295
|
+
text += body;
|
|
296
|
+
return new TextEncoder().encode(text).byteLength;
|
|
297
|
+
}
|
|
298
|
+
const REQUEST_ID_HEADERS = ["x-request-id", "request-id", "x-correlation-id", "correlation-id"];
|
|
299
|
+
/** Response header first, then the request. Empty when neither side sent one of the known names. */
|
|
300
|
+
/** Plain snapshot of a request body for reports — FormData is not JSON. */
|
|
301
|
+
export function describeRequestBody(body) {
|
|
302
|
+
if (body === undefined)
|
|
303
|
+
return undefined;
|
|
304
|
+
if (isFormData(body)) {
|
|
305
|
+
const parts = {};
|
|
306
|
+
for (const [name, value] of body.entries()) {
|
|
307
|
+
if (typeof value === "string")
|
|
308
|
+
parts[name] = value;
|
|
309
|
+
else
|
|
310
|
+
parts[name] = { filename: value.name, mediaType: value.type, bytes: value.size };
|
|
311
|
+
}
|
|
312
|
+
return parts;
|
|
313
|
+
}
|
|
314
|
+
if (isURLSearchParams(body))
|
|
315
|
+
return body.toString();
|
|
316
|
+
if (isRawBytes(body))
|
|
317
|
+
return { bytes: bodyByteLength(body) };
|
|
318
|
+
return body;
|
|
319
|
+
}
|
|
320
|
+
export function requestIdOf(requestHeaders, responseHeaders) {
|
|
321
|
+
return headerOf(responseHeaders, REQUEST_ID_HEADERS) ?? headerOf(requestHeaders, REQUEST_ID_HEADERS) ?? "";
|
|
322
|
+
}
|
|
323
|
+
function headerOf(headers, names) {
|
|
324
|
+
for (const name of names) {
|
|
325
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
326
|
+
if (key.toLowerCase() === name && value.trim() !== "")
|
|
327
|
+
return value.trim();
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return undefined;
|
|
331
|
+
}
|
|
133
332
|
/** Escapes the characters that stay special inside double quotes. */
|
|
134
333
|
function shellEscapeDouble(text) {
|
|
135
334
|
return text.replace(/(["\\`])/g, "\\$1");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny valid files so backends that sniff magic do not 400 on "not a PDF".
|
|
3
|
+
*
|
|
4
|
+
* oat does not OCR or interpret these; they only have to look like the declared type.
|
|
5
|
+
*/
|
|
6
|
+
export interface DummyFile {
|
|
7
|
+
bytes: Uint8Array;
|
|
8
|
+
filename: string;
|
|
9
|
+
mediaType: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function extensionOf(mediaType: string, filename?: string): string;
|
|
12
|
+
export declare function mediaTypeOfExtension(ext: string): string | undefined;
|
|
13
|
+
export declare function dummyFile(options: {
|
|
14
|
+
field: string;
|
|
15
|
+
variant: string;
|
|
16
|
+
index: number;
|
|
17
|
+
seed: number;
|
|
18
|
+
contentMediaType?: string;
|
|
19
|
+
filename?: string;
|
|
20
|
+
}): DummyFile;
|
|
21
|
+
export declare function sniffMediaType(bytes: Uint8Array, filename?: string): string | undefined;
|
|
22
|
+
export declare function mediaTypesCompatible(declared: string | undefined, actual: string | undefined): boolean;
|
|
23
|
+
//# sourceMappingURL=dummy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dummy.d.ts","sourceRoot":"","sources":["../../src/runtime/dummy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,SAAS;IACzB,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CACjB;AAgHD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,SAAS,CAOZ;AA8BD,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuCvF;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYtG"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny valid files so backends that sniff magic do not 400 on "not a PDF".
|
|
3
|
+
*
|
|
4
|
+
* oat does not OCR or interpret these; they only have to look like the declared type.
|
|
5
|
+
*/
|
|
6
|
+
import { mulberry32 } from "./fixture.js";
|
|
7
|
+
const PDF = textBytes(`%PDF-1.1
|
|
8
|
+
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
|
|
9
|
+
2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj
|
|
10
|
+
3 0 obj<</Type/Page/MediaBox[0 0 3 3]/Parent 2 0 R>>endobj
|
|
11
|
+
trailer<</Root 1 0 R>>
|
|
12
|
+
%%EOF
|
|
13
|
+
`);
|
|
14
|
+
/* 1×1 RGB PNG. */
|
|
15
|
+
const PNG = hex("89504e470d0a1a0a0000000d4948445200000001000000010802000000907753de0000000c4944415408d763f8cfc000000301010018dd8db00000000049454e44ae426082");
|
|
16
|
+
/* 1×1 JPEG (JFIF). */
|
|
17
|
+
const JPEG = hex("ffd8ffe000104a46494600010100000100010000ffdb00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101ffc0000b080001000101011100ffc40014100100000000000000000000000000000000ffda00080001000100003f00fb00ffd9");
|
|
18
|
+
/* 1×1 GIF89a. */
|
|
19
|
+
const GIF = hex("47494638396101000100800000ffffff0000002c00000000010001000002024401003b");
|
|
20
|
+
/* 1×1 lossless WebP. */
|
|
21
|
+
const WEBP = hex("52494646240000005745425056503820180000003001009d012a01000002000000340025a8000002");
|
|
22
|
+
/* 1×1 little-endian TIFF, white pixel. */
|
|
23
|
+
const TIFF = hex("49492a00080000000e0000fe0004000100000000000000000100030001000000010000000101030001000000010000000201030003000000120000000301030001000000010000000601030001000000020000001101040001000000080000001501030001000000010000001601040001000000010000001701040001000000030000001a01050001000000c40000001b01050001000000cc0000001c010300010000000100000028010300010000000200000000000000080008000800000000000100000000000100");
|
|
24
|
+
const EMPTY_ZIP = hex("504b0506000000000000000000000000000000000000");
|
|
25
|
+
const TEXT_HTML = textBytes("<!doctype html><title>oat</title>");
|
|
26
|
+
const TEXT_CSV = textBytes("a,b\n1,2\n");
|
|
27
|
+
const TEXT_JSON = textBytes("{}");
|
|
28
|
+
const TEXT_XML = textBytes("<oat/>");
|
|
29
|
+
const KINDS = [
|
|
30
|
+
{ bytes: PDF, ext: "pdf", mediaType: "application/pdf" },
|
|
31
|
+
{ bytes: PNG, ext: "png", mediaType: "image/png" },
|
|
32
|
+
{ bytes: JPEG, ext: "jpg", mediaType: "image/jpeg" },
|
|
33
|
+
{ bytes: GIF, ext: "gif", mediaType: "image/gif" },
|
|
34
|
+
{ bytes: WEBP, ext: "webp", mediaType: "image/webp" },
|
|
35
|
+
{ bytes: TIFF, ext: "tif", mediaType: "image/tiff" },
|
|
36
|
+
{ bytes: TEXT_HTML, ext: "html", mediaType: "text/html" },
|
|
37
|
+
{ bytes: TEXT_CSV, ext: "csv", mediaType: "text/csv" },
|
|
38
|
+
{ bytes: TEXT_JSON, ext: "json", mediaType: "application/json" },
|
|
39
|
+
{ bytes: TEXT_XML, ext: "xml", mediaType: "application/xml" },
|
|
40
|
+
{ bytes: TEXT_XML, ext: "xml", mediaType: "text/xml" },
|
|
41
|
+
{ bytes: EMPTY_ZIP, ext: "zip", mediaType: "application/zip" },
|
|
42
|
+
{
|
|
43
|
+
bytes: EMPTY_ZIP,
|
|
44
|
+
ext: "xlsx",
|
|
45
|
+
mediaType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
bytes: EMPTY_ZIP,
|
|
49
|
+
ext: "docx",
|
|
50
|
+
mediaType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
const EXT_OF = {
|
|
54
|
+
"application/json": "json",
|
|
55
|
+
"application/octet-stream": "bin",
|
|
56
|
+
"application/pdf": "pdf",
|
|
57
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "xlsx",
|
|
58
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": "docx",
|
|
59
|
+
"application/xml": "xml",
|
|
60
|
+
"application/zip": "zip",
|
|
61
|
+
"image/gif": "gif",
|
|
62
|
+
"image/jpeg": "jpg",
|
|
63
|
+
"image/jpg": "jpg",
|
|
64
|
+
"image/png": "png",
|
|
65
|
+
"image/tiff": "tif",
|
|
66
|
+
"image/webp": "webp",
|
|
67
|
+
"text/csv": "csv",
|
|
68
|
+
"text/html": "html",
|
|
69
|
+
"text/plain": "txt",
|
|
70
|
+
"text/xml": "xml",
|
|
71
|
+
};
|
|
72
|
+
const MEDIA_OF_EXT = {
|
|
73
|
+
bin: "application/octet-stream",
|
|
74
|
+
csv: "text/csv",
|
|
75
|
+
doc: "application/msword",
|
|
76
|
+
docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
77
|
+
gif: "image/gif",
|
|
78
|
+
htm: "text/html",
|
|
79
|
+
html: "text/html",
|
|
80
|
+
jpeg: "image/jpeg",
|
|
81
|
+
jpg: "image/jpeg",
|
|
82
|
+
json: "application/json",
|
|
83
|
+
pdf: "application/pdf",
|
|
84
|
+
png: "image/png",
|
|
85
|
+
tif: "image/tiff",
|
|
86
|
+
tiff: "image/tiff",
|
|
87
|
+
txt: "text/plain",
|
|
88
|
+
webp: "image/webp",
|
|
89
|
+
xls: "application/vnd.ms-excel",
|
|
90
|
+
xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
91
|
+
xml: "application/xml",
|
|
92
|
+
zip: "application/zip",
|
|
93
|
+
};
|
|
94
|
+
export function extensionOf(mediaType, filename) {
|
|
95
|
+
if (filename !== undefined) {
|
|
96
|
+
const dot = filename.lastIndexOf(".");
|
|
97
|
+
if (dot >= 0 && dot < filename.length - 1)
|
|
98
|
+
return filename.slice(dot + 1).toLowerCase();
|
|
99
|
+
}
|
|
100
|
+
const bare = mediaType.split(";")[0]?.trim().toLowerCase() ?? "";
|
|
101
|
+
return EXT_OF[bare] ?? "bin";
|
|
102
|
+
}
|
|
103
|
+
export function mediaTypeOfExtension(ext) {
|
|
104
|
+
return MEDIA_OF_EXT[ext.toLowerCase().replace(/^\./, "")];
|
|
105
|
+
}
|
|
106
|
+
export function dummyFile(options) {
|
|
107
|
+
const mediaType = (options.contentMediaType ?? "application/octet-stream").split(";")[0]?.trim() ?? "";
|
|
108
|
+
const kind = kindOf(mediaType, options.filename);
|
|
109
|
+
const ext = kind?.ext ?? extensionOf(mediaType, options.filename);
|
|
110
|
+
const filename = options.filename ?? `${options.field}-${options.variant}-${options.index}.${ext}`;
|
|
111
|
+
const bytes = bytesOf(kind, mediaType, options.seed, options.index);
|
|
112
|
+
return { bytes, filename, mediaType: kind?.mediaType ?? (mediaType === "" ? "application/octet-stream" : mediaType) };
|
|
113
|
+
}
|
|
114
|
+
function kindOf(mediaType, filename) {
|
|
115
|
+
const bare = mediaType.toLowerCase();
|
|
116
|
+
const byMedia = KINDS.find((kind) => kind.mediaType === bare);
|
|
117
|
+
if (byMedia !== undefined)
|
|
118
|
+
return byMedia;
|
|
119
|
+
if (bare === "image/jpg")
|
|
120
|
+
return KINDS.find((kind) => kind.mediaType === "image/jpeg");
|
|
121
|
+
const ext = extensionOf(mediaType, filename);
|
|
122
|
+
const mapped = mediaTypeOfExtension(ext);
|
|
123
|
+
if (mapped !== undefined)
|
|
124
|
+
return KINDS.find((kind) => kind.mediaType === mapped);
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
function bytesOf(kind, mediaType, seed, index) {
|
|
128
|
+
if (kind !== undefined) {
|
|
129
|
+
return typeof kind.bytes === "function" ? kind.bytes(seed, index) : kind.bytes;
|
|
130
|
+
}
|
|
131
|
+
if (mediaType === "text/plain" || mediaType.startsWith("text/")) {
|
|
132
|
+
return textBytes(`oat dummy ${seed} ${index}\n`);
|
|
133
|
+
}
|
|
134
|
+
return octetDummy(seed, index);
|
|
135
|
+
}
|
|
136
|
+
function octetDummy(seed, index) {
|
|
137
|
+
const rand = mulberry32((seed ^ (index * 7919)) >>> 0);
|
|
138
|
+
const out = new Uint8Array(16);
|
|
139
|
+
for (let i = 0; i < out.length; i++)
|
|
140
|
+
out[i] = Math.floor(rand() * 256);
|
|
141
|
+
return out;
|
|
142
|
+
}
|
|
143
|
+
export function sniffMediaType(bytes, filename) {
|
|
144
|
+
if (bytes.length >= 5 && bytes[0] === 0x25 && bytes[1] === 0x50 && bytes[2] === 0x44 && bytes[3] === 0x46) {
|
|
145
|
+
return "application/pdf";
|
|
146
|
+
}
|
|
147
|
+
if (bytes.length >= 8 && bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47) {
|
|
148
|
+
return "image/png";
|
|
149
|
+
}
|
|
150
|
+
if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff)
|
|
151
|
+
return "image/jpeg";
|
|
152
|
+
if (bytes.length >= 6 && bytes[0] === 0x47 && bytes[1] === 0x49 && bytes[2] === 0x46 && bytes[3] === 0x38) {
|
|
153
|
+
return "image/gif";
|
|
154
|
+
}
|
|
155
|
+
if (bytes.length >= 12 &&
|
|
156
|
+
bytes[0] === 0x52 &&
|
|
157
|
+
bytes[1] === 0x49 &&
|
|
158
|
+
bytes[2] === 0x46 &&
|
|
159
|
+
bytes[3] === 0x46 &&
|
|
160
|
+
bytes[8] === 0x57 &&
|
|
161
|
+
bytes[9] === 0x45 &&
|
|
162
|
+
bytes[10] === 0x42 &&
|
|
163
|
+
bytes[11] === 0x50) {
|
|
164
|
+
return "image/webp";
|
|
165
|
+
}
|
|
166
|
+
if (bytes.length >= 4 &&
|
|
167
|
+
((bytes[0] === 0x49 && bytes[1] === 0x49 && bytes[2] === 0x2a && bytes[3] === 0x00) ||
|
|
168
|
+
(bytes[0] === 0x4d && bytes[1] === 0x4d && bytes[2] === 0x00 && bytes[3] === 0x2a))) {
|
|
169
|
+
return "image/tiff";
|
|
170
|
+
}
|
|
171
|
+
if (bytes.length >= 4 && bytes[0] === 0x50 && bytes[1] === 0x4b && (bytes[2] === 0x03 || bytes[2] === 0x05)) {
|
|
172
|
+
const ext = filename === undefined ? "" : extensionOf("", filename);
|
|
173
|
+
if (ext === "xlsx")
|
|
174
|
+
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
175
|
+
if (ext === "docx")
|
|
176
|
+
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
177
|
+
return "application/zip";
|
|
178
|
+
}
|
|
179
|
+
if (filename !== undefined)
|
|
180
|
+
return mediaTypeOfExtension(extensionOf("", filename));
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
export function mediaTypesCompatible(declared, actual) {
|
|
184
|
+
if (declared === undefined || declared === "" || declared === "application/octet-stream")
|
|
185
|
+
return true;
|
|
186
|
+
if (actual === undefined)
|
|
187
|
+
return false;
|
|
188
|
+
const want = declared.split(";")[0]?.trim().toLowerCase() ?? "";
|
|
189
|
+
const have = actual.split(";")[0]?.trim().toLowerCase() ?? "";
|
|
190
|
+
if (want === have)
|
|
191
|
+
return true;
|
|
192
|
+
if (want === "image/jpg" && have === "image/jpeg")
|
|
193
|
+
return true;
|
|
194
|
+
if (want === "image/jpeg" && have === "image/jpg")
|
|
195
|
+
return true;
|
|
196
|
+
if (want.endsWith("/*"))
|
|
197
|
+
return have.startsWith(want.slice(0, -1));
|
|
198
|
+
if (want === "application/xml" && have === "text/xml")
|
|
199
|
+
return true;
|
|
200
|
+
if (want === "text/xml" && have === "application/xml")
|
|
201
|
+
return true;
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
function hex(text) {
|
|
205
|
+
const clean = text.replace(/\s+/g, "");
|
|
206
|
+
const out = new Uint8Array(clean.length / 2);
|
|
207
|
+
for (let i = 0; i < out.length; i++)
|
|
208
|
+
out[i] = Number.parseInt(clean.slice(i * 2, i * 2 + 2), 16);
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
211
|
+
function textBytes(text) {
|
|
212
|
+
return new TextEncoder().encode(text);
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=dummy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dummy.js","sourceRoot":"","sources":["../../src/runtime/dummy.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
* order, escaping needs metacharacters. oat seeds a *discriminating cohort* — instances shaped so
|
|
6
6
|
* that every query assertion has signal — and derives everything from a seed so a failing run is
|
|
7
7
|
* exactly reproducible.
|
|
8
|
+
*
|
|
9
|
+
* After `$ref` inlining the same object identity can cycle, and empty schemas (`{}`, `true`,
|
|
10
|
+
* `additionalProperties: {}`) mean "any value", not "walk this object again". Generation therefore
|
|
11
|
+
* keys a WeakSet on every node and treats those open shapes as a scalar or `{}`.
|
|
8
12
|
*/
|
|
9
13
|
export type Variant = "baseline" | "lexical-first" | "lexical-last" | "null-heavy" | "unicode" | "metacharacter" | "boundary";
|
|
10
14
|
export declare const COHORT: readonly Variant[];
|
|
@@ -15,6 +19,29 @@ export interface CohortMember {
|
|
|
15
19
|
variant: Variant;
|
|
16
20
|
body: Record<string, unknown>;
|
|
17
21
|
}
|
|
18
|
-
|
|
22
|
+
/** Thrown when a walk still overflows; the pointer names the node that blew the stack. */
|
|
23
|
+
export declare class FixtureOverflow extends Error {
|
|
24
|
+
readonly operationId: string;
|
|
25
|
+
readonly pointer: string;
|
|
26
|
+
constructor(operationId: string, pointer: string);
|
|
27
|
+
}
|
|
28
|
+
export declare function overflowFrom(error: unknown, operationId: string, pointer?: string): FixtureOverflow;
|
|
29
|
+
export declare function isOverflowError(error: unknown): boolean;
|
|
30
|
+
export declare function buildCohort(bodySchema: Schema | boolean, seed: number, variants?: readonly Variant[], operationId?: string): CohortMember[];
|
|
31
|
+
/**
|
|
32
|
+
* One create body, or a gap if a required field cannot be honoured.
|
|
33
|
+
*
|
|
34
|
+
* Optional fields that cannot match `format`/`pattern` are omitted. Required ones must not fall
|
|
35
|
+
* back to `"Quarterly Report N"` — that is what 400s every email/handle/url field.
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateBody(bodySchema: Schema | boolean, variant: Variant, rand: () => number, index: number, operationId?: string): {
|
|
38
|
+
body: Record<string, unknown>;
|
|
39
|
+
missingRequired: string[];
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* `{}` / `true` / a lone `additionalProperties: {}` is "any JSON", not an object to descend.
|
|
43
|
+
* Walking it again is what turns `z.unknown()` into a stack overflow.
|
|
44
|
+
*/
|
|
45
|
+
export declare function isVacuous(schema: unknown): boolean;
|
|
19
46
|
export {};
|
|
20
47
|
//# sourceMappingURL=fixture.d.ts.map
|