brass-runtime 1.18.0 → 1.18.2
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/CHANGELOG.md +54 -0
- package/dist/agent/cli/main.cjs +31 -31
- package/dist/agent/cli/main.js +3 -3
- package/dist/agent/cli/main.mjs +3 -3
- package/dist/agent/index.cjs +4 -4
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.js +3 -3
- package/dist/agent/index.mjs +3 -3
- package/dist/{chunk-PSEU65ND.js → chunk-2R3RVNS2.js} +6 -6
- package/dist/{chunk-ITZQ526U.mjs → chunk-3NKXUX4T.mjs} +2 -2
- package/dist/{chunk-JH4GI3DW.js → chunk-4PKBNG2H.js} +38 -18
- package/dist/{chunk-Z3PSSXP3.mjs → chunk-5RVHSBJ6.mjs} +292 -36
- package/dist/{chunk-QZ6QFJNM.mjs → chunk-5UBJT4RW.mjs} +4 -4
- package/dist/{chunk-7TXQJFZX.cjs → chunk-6STX4PS3.cjs} +13 -13
- package/dist/{chunk-VIFA4DPN.cjs → chunk-7FZUTJM3.cjs} +508 -252
- package/dist/{chunk-4YQHPIWJ.js → chunk-A6EG5WRL.js} +3 -3
- package/dist/{chunk-XSAHV5HQ.js → chunk-APQBU7TM.js} +264 -133
- package/dist/{chunk-RREBJX2S.mjs → chunk-AQQQFNYD.mjs} +38 -18
- package/dist/{chunk-AADFFVYS.js → chunk-B2VXVNIS.js} +1 -1
- package/dist/{chunk-R6WDSZA6.mjs → chunk-BLXBZ6RE.mjs} +1 -1
- package/dist/{chunk-ITG6I7ZS.js → chunk-C3CWI42G.js} +1 -1
- package/dist/{chunk-LXBU5E77.cjs → chunk-DV644N7P.cjs} +85 -85
- package/dist/{chunk-G5JTCFMI.mjs → chunk-EKLEDIVJ.mjs} +2 -2
- package/dist/{chunk-IBRHSH5H.js → chunk-EXBGIC66.js} +1 -1
- package/dist/{chunk-W6WR37HN.js → chunk-FC5N5QHJ.js} +2 -2
- package/dist/{chunk-6MLAZPBL.mjs → chunk-FNWOH2T2.js} +18 -6
- package/dist/{chunk-AJMKZXRB.cjs → chunk-FYWWU3Z7.cjs} +2 -2
- package/dist/{chunk-IFRBVMWJ.cjs → chunk-GOEO763K.cjs} +21 -21
- package/dist/{chunk-S4HHFUYP.js → chunk-GXOIUBKE.js} +2 -2
- package/dist/{chunk-BG5RNEA2.js → chunk-H4ZRUQZL.js} +4 -4
- package/dist/{chunk-OI4ESUMC.mjs → chunk-HW2CLRJ3.mjs} +6 -6
- package/dist/{chunk-3PHU7FWS.js → chunk-JWFOWPMB.js} +163 -155
- package/dist/{chunk-OT2TESZU.mjs → chunk-KAPZHDO4.mjs} +1 -1
- package/dist/{chunk-ELLF55ER.mjs → chunk-KDXNWGPB.mjs} +1 -1
- package/dist/{chunk-UUMKZJRJ.cjs → chunk-KPOL2YEO.cjs} +18 -6
- package/dist/{chunk-2SLT3X6G.cjs → chunk-MA74OYCI.cjs} +6 -6
- package/dist/{chunk-2QNREG6K.mjs → chunk-MUMBUXU6.mjs} +264 -133
- package/dist/{chunk-YTX2JYYP.cjs → chunk-NQW3YUFN.cjs} +18 -18
- package/dist/{chunk-3PFZGP23.cjs → chunk-OO7BGCC3.cjs} +54 -34
- package/dist/{chunk-QCOLAHU3.mjs → chunk-OX6MF7SZ.mjs} +163 -155
- package/dist/{chunk-KHACHFBQ.cjs → chunk-QBVS3UYN.cjs} +245 -237
- package/dist/{chunk-H5GYX7RZ.js → chunk-RZGB3DXR.js} +292 -36
- package/dist/{chunk-KRYP6CAE.mjs → chunk-URVS2OE2.mjs} +3 -3
- package/dist/{chunk-HCJ4S3YB.js → chunk-UZQ3BB6W.mjs} +18 -6
- package/dist/{chunk-N6QNSTWD.cjs → chunk-YQWZ7FZX.cjs} +5 -5
- package/dist/{chunk-5XADBMSU.cjs → chunk-Z2YIDHRI.cjs} +5 -5
- package/dist/{chunk-SSQJKDN3.cjs → chunk-ZDZNV6NA.cjs} +286 -155
- package/dist/core/index.cjs +14 -8
- package/dist/core/index.d.ts +6 -6
- package/dist/core/index.js +13 -7
- package/dist/core/index.mjs +13 -7
- package/dist/{defaultClient-DhpCQW9m.d.ts → defaultClient-Cid0JoUR.d.ts} +29 -4
- package/dist/{effect-CtUDl5M5.d.ts → effect-DnGUuhw6.d.ts} +22 -1
- package/dist/http/index.cjs +58 -54
- package/dist/http/index.d.ts +8 -8
- package/dist/http/index.js +11 -7
- package/dist/http/index.mjs +11 -7
- package/dist/http/testing.cjs +9 -9
- package/dist/http/testing.d.ts +4 -4
- package/dist/http/testing.js +5 -5
- package/dist/http/testing.mjs +5 -5
- package/dist/index.cjs +92 -86
- package/dist/index.d.ts +7 -7
- package/dist/index.js +14 -8
- package/dist/index.mjs +14 -8
- package/dist/{layer-BalPI6cN.d.ts → layer-D2LFcBVx.d.ts} +1 -1
- package/dist/observability/index.cjs +10 -10
- package/dist/observability/index.d.ts +7 -7
- package/dist/observability/index.js +9 -9
- package/dist/observability/index.mjs +9 -9
- package/dist/perf/cli.cjs +26 -26
- package/dist/perf/cli.js +11 -11
- package/dist/perf/cli.mjs +11 -11
- package/dist/perf/index.cjs +13 -13
- package/dist/perf/index.js +11 -11
- package/dist/perf/index.mjs +11 -11
- package/dist/schema/index.cjs +2 -2
- package/dist/schema/index.js +1 -1
- package/dist/schema/index.mjs +1 -1
- package/dist/{server-C1zVmqE6.d.ts → server-Bf1zNYZk.d.ts} +4 -4
- package/dist/{stream-Bb4FTejt.d.ts → stream-I7bkvF7a.d.ts} +1 -1
- package/dist/{tracer-DzfuE6um.d.ts → tracer-DF83nLn6.d.ts} +2 -2
- package/dist/{tracing-BABA5arE.d.ts → tracing-CWV4gT0u.d.ts} +1 -1
- package/package.json +3 -2
|
@@ -3,18 +3,18 @@ import {
|
|
|
3
3
|
} from "./chunk-MOO4L7F4.mjs";
|
|
4
4
|
import {
|
|
5
5
|
streamFromReadableStream
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-AQQQFNYD.mjs";
|
|
7
7
|
import {
|
|
8
8
|
layerEffect,
|
|
9
9
|
makeScheduleDriver,
|
|
10
10
|
makeServiceTag,
|
|
11
11
|
sleep
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-KDXNWGPB.mjs";
|
|
13
13
|
import {
|
|
14
14
|
fromPromiseAbortable,
|
|
15
15
|
resolveWasmModule,
|
|
16
16
|
toPromise
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-MUMBUXU6.mjs";
|
|
18
18
|
import {
|
|
19
19
|
Cause,
|
|
20
20
|
asyncEffect,
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
makeSchemaIssue,
|
|
34
34
|
parseConfig,
|
|
35
35
|
validateValue
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-UZQ3BB6W.mjs";
|
|
37
37
|
import {
|
|
38
38
|
__require
|
|
39
39
|
} from "./chunk-Y6FXYEAI.mjs";
|
|
@@ -678,6 +678,18 @@ var HttpConcurrencyPool = class {
|
|
|
678
678
|
acquire(key, signal) {
|
|
679
679
|
return this.wasm ? this.acquireWasm(key, signal) : this.acquireJs(key, signal);
|
|
680
680
|
}
|
|
681
|
+
/** Try synchronous acquire. Returns lease directly or undefined if contended. */
|
|
682
|
+
tryAcquireSync(key, signal) {
|
|
683
|
+
if (this.wasm) return void 0;
|
|
684
|
+
if (signal.aborted) return void 0;
|
|
685
|
+
const state = this.getState(key);
|
|
686
|
+
if (state.running < this.concurrency) {
|
|
687
|
+
state.running++;
|
|
688
|
+
state.acquired++;
|
|
689
|
+
return this.makeLease(state);
|
|
690
|
+
}
|
|
691
|
+
return void 0;
|
|
692
|
+
}
|
|
681
693
|
stats() {
|
|
682
694
|
const keys = Array.from(this.states.values()).map((state) => ({
|
|
683
695
|
key: state.key,
|
|
@@ -1516,6 +1528,24 @@ var AdaptiveLimiter = class {
|
|
|
1516
1528
|
this.enqueueWaiter(state, waiter);
|
|
1517
1529
|
});
|
|
1518
1530
|
}
|
|
1531
|
+
/**
|
|
1532
|
+
* Try to acquire a concurrency slot synchronously.
|
|
1533
|
+
* Returns a lease directly if under the limit, or undefined if contended/aborted/destroyed.
|
|
1534
|
+
* This avoids Promise.resolve() allocation and microtask scheduling on the uncontended path.
|
|
1535
|
+
*/
|
|
1536
|
+
tryAcquireSync(key, signal) {
|
|
1537
|
+
if (this.destroyed) return void 0;
|
|
1538
|
+
if (signal.aborted) return void 0;
|
|
1539
|
+
const state = this.getOrCreateState(key);
|
|
1540
|
+
this.touch(state);
|
|
1541
|
+
if (state.inFlight < state.limit) {
|
|
1542
|
+
state.inFlight++;
|
|
1543
|
+
state.acquired++;
|
|
1544
|
+
state.rejectionStreak = 0;
|
|
1545
|
+
return this.makeLease(state);
|
|
1546
|
+
}
|
|
1547
|
+
return void 0;
|
|
1548
|
+
}
|
|
1519
1549
|
/**
|
|
1520
1550
|
* Get stats for a specific key, or aggregate stats if no key is provided.
|
|
1521
1551
|
*/
|
|
@@ -2194,6 +2224,9 @@ var mergeHeadersUnder = (under) => (req) => Lens.over(Request.headers, (h) => ({
|
|
|
2194
2224
|
var setHeaderIfMissing = (k, v) => (req) => Lens.over(Request.headers, (h) => h[k] ? h : { ...h, [k]: v })(req);
|
|
2195
2225
|
|
|
2196
2226
|
// src/http/transport.ts
|
|
2227
|
+
function isPromiseTransportDirect(transport) {
|
|
2228
|
+
return transport.__promiseTransport === true;
|
|
2229
|
+
}
|
|
2197
2230
|
var isTaggedHttpError = (error) => {
|
|
2198
2231
|
return isHttpError(error);
|
|
2199
2232
|
};
|
|
@@ -2281,6 +2314,7 @@ var linkAbortSignals = (...signals) => {
|
|
|
2281
2314
|
};
|
|
2282
2315
|
};
|
|
2283
2316
|
var nowMs = () => typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
|
|
2317
|
+
var isThenable = (value) => value !== null && typeof value === "object" && typeof value.then === "function";
|
|
2284
2318
|
var hasMethod = (value, name) => typeof value === "object" && value !== null && typeof value[name] === "function";
|
|
2285
2319
|
var defaultPromiseBody = (response, mode) => {
|
|
2286
2320
|
if (mode === "json" && hasMethod(response, "json")) return response.json();
|
|
@@ -2325,49 +2359,107 @@ var toPromiseTransportResponse = (bodyText, info) => ({
|
|
|
2325
2359
|
...info.transportMeta !== void 0 ? { transportMeta: info.transportMeta } : {}
|
|
2326
2360
|
});
|
|
2327
2361
|
function makePromiseHttpTransport(config) {
|
|
2328
|
-
|
|
2362
|
+
const transport = (context) => asyncEffect((_env, cb) => {
|
|
2329
2363
|
let done = false;
|
|
2364
|
+
const signal = context.signal;
|
|
2365
|
+
const needsAbortListener = signal !== globalThis.__brassNoopSignal;
|
|
2366
|
+
let abort;
|
|
2330
2367
|
const finish = (exit) => {
|
|
2331
2368
|
if (done) return;
|
|
2332
2369
|
done = true;
|
|
2333
|
-
|
|
2370
|
+
if (needsAbortListener && abort) signal.removeEventListener("abort", abort);
|
|
2334
2371
|
cb(exit);
|
|
2335
2372
|
};
|
|
2336
2373
|
const fail = (error) => finish({ _tag: "Failure", cause: Cause.fail(error) });
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
abort();
|
|
2374
|
+
if (signal.aborted) {
|
|
2375
|
+
fail(abortErrorForSignal(signal));
|
|
2340
2376
|
return;
|
|
2341
2377
|
}
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2378
|
+
if (needsAbortListener) {
|
|
2379
|
+
abort = () => fail(abortErrorForSignal(signal));
|
|
2380
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
2381
|
+
}
|
|
2382
|
+
const startedAt = nowMs();
|
|
2383
|
+
let requestPromise;
|
|
2384
|
+
try {
|
|
2385
|
+
const result = config.request(context);
|
|
2386
|
+
requestPromise = isThenable(result) ? result : Promise.resolve(result);
|
|
2387
|
+
} catch (error) {
|
|
2388
|
+
if (signal.aborted) {
|
|
2389
|
+
fail(abortErrorForSignal(signal));
|
|
2390
|
+
return;
|
|
2391
|
+
}
|
|
2392
|
+
fail(config.error?.(error, context) ?? normalizeHttpError(error, { signal }));
|
|
2393
|
+
return;
|
|
2394
|
+
}
|
|
2395
|
+
requestPromise.then(
|
|
2396
|
+
(raw) => {
|
|
2397
|
+
if (done) return;
|
|
2347
2398
|
const durationMs = Math.round(nowMs() - startedAt);
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2399
|
+
try {
|
|
2400
|
+
const r = config.response(raw, context, { startedAt, durationMs });
|
|
2401
|
+
if (!isThenable(r)) {
|
|
2402
|
+
const mapped = r;
|
|
2403
|
+
finish({
|
|
2404
|
+
_tag: "Success",
|
|
2405
|
+
value: mapped.ms !== void 0 ? mapped : { ...mapped, ms: durationMs }
|
|
2406
|
+
});
|
|
2407
|
+
return;
|
|
2354
2408
|
}
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2409
|
+
r.then(
|
|
2410
|
+
(m) => {
|
|
2411
|
+
if (done) return;
|
|
2412
|
+
finish({
|
|
2413
|
+
_tag: "Success",
|
|
2414
|
+
value: m.ms !== void 0 ? m : { ...m, ms: durationMs }
|
|
2415
|
+
});
|
|
2416
|
+
},
|
|
2417
|
+
(error) => {
|
|
2418
|
+
if (done) return;
|
|
2419
|
+
if (signal.aborted) {
|
|
2420
|
+
fail(abortErrorForSignal(signal));
|
|
2421
|
+
return;
|
|
2422
|
+
}
|
|
2423
|
+
fail(config.error?.(error, context) ?? normalizeHttpError(error, { signal }));
|
|
2424
|
+
}
|
|
2425
|
+
);
|
|
2426
|
+
} catch (error) {
|
|
2427
|
+
if (signal.aborted) {
|
|
2428
|
+
fail(abortErrorForSignal(signal));
|
|
2429
|
+
return;
|
|
2430
|
+
}
|
|
2431
|
+
fail(config.error?.(error, context) ?? normalizeHttpError(error, { signal }));
|
|
2432
|
+
}
|
|
2433
|
+
},
|
|
2434
|
+
(error) => {
|
|
2435
|
+
if (done) return;
|
|
2436
|
+
if (signal.aborted) {
|
|
2437
|
+
fail(abortErrorForSignal(signal));
|
|
2359
2438
|
return;
|
|
2360
2439
|
}
|
|
2361
|
-
fail(config.error?.(error, context) ?? normalizeHttpError(error, { signal
|
|
2440
|
+
fail(config.error?.(error, context) ?? normalizeHttpError(error, { signal }));
|
|
2362
2441
|
}
|
|
2363
|
-
|
|
2364
|
-
void run();
|
|
2442
|
+
);
|
|
2365
2443
|
return () => {
|
|
2366
2444
|
if (done) return;
|
|
2367
2445
|
done = true;
|
|
2368
|
-
|
|
2446
|
+
if (needsAbortListener && abort) signal.removeEventListener("abort", abort);
|
|
2369
2447
|
};
|
|
2370
2448
|
});
|
|
2449
|
+
const marked = transport;
|
|
2450
|
+
marked.__promiseTransport = true;
|
|
2451
|
+
marked.requestDirect = async (context) => {
|
|
2452
|
+
const startedAt = nowMs();
|
|
2453
|
+
try {
|
|
2454
|
+
const raw = await config.request(context);
|
|
2455
|
+
const durationMs = Math.round(nowMs() - startedAt);
|
|
2456
|
+
const mapped = await config.response(raw, context, { startedAt, durationMs });
|
|
2457
|
+
return { ...mapped, ms: mapped.ms ?? durationMs };
|
|
2458
|
+
} catch (error) {
|
|
2459
|
+
throw config.error?.(error, context) ?? normalizeHttpError(error, { signal: context.signal });
|
|
2460
|
+
}
|
|
2461
|
+
};
|
|
2462
|
+
return marked;
|
|
2371
2463
|
}
|
|
2372
2464
|
function makePromiseHttpTransportBodyBuilder(config) {
|
|
2373
2465
|
const makeBodyTransport = (mode, body, responseMapper, currentConfig = config) => makePromiseHttpTransport({
|
|
@@ -3083,6 +3175,13 @@ function makeHttpStream(cfg = {}) {
|
|
|
3083
3175
|
};
|
|
3084
3176
|
return decorateStream(run, metrics.snapshot);
|
|
3085
3177
|
}
|
|
3178
|
+
var ONCE_OPTIONS = Object.freeze({ once: true });
|
|
3179
|
+
var noopSignal = (() => {
|
|
3180
|
+
const c = new AbortController();
|
|
3181
|
+
const s = c.signal;
|
|
3182
|
+
globalThis.__brassNoopSignal = s;
|
|
3183
|
+
return s;
|
|
3184
|
+
})();
|
|
3086
3185
|
function makeHttp(cfg = {}) {
|
|
3087
3186
|
validateMakeHttpConfig(cfg);
|
|
3088
3187
|
const baseUrl = cfg.baseUrl ?? "";
|
|
@@ -3226,6 +3325,53 @@ function httpBodyKeyPart(body) {
|
|
|
3226
3325
|
// src/http/lifecycle/cacheKey.ts
|
|
3227
3326
|
var SEPARATOR = "\0";
|
|
3228
3327
|
var DEFAULT_CACHE_RELEVANT_HEADERS = ["accept", "authorization", "content-type"];
|
|
3328
|
+
function makeCacheKeyContext(baseUrl, extraHeaders = []) {
|
|
3329
|
+
const relevantSet = new Set(DEFAULT_CACHE_RELEVANT_HEADERS);
|
|
3330
|
+
for (let i = 0; i < extraHeaders.length; i++) {
|
|
3331
|
+
relevantSet.add(extraHeaders[i].toLowerCase());
|
|
3332
|
+
}
|
|
3333
|
+
return {
|
|
3334
|
+
baseUrl,
|
|
3335
|
+
relevantSet,
|
|
3336
|
+
cachedOrigin: baseUrl ? absoluteOrigin(baseUrl) : void 0
|
|
3337
|
+
};
|
|
3338
|
+
}
|
|
3339
|
+
function computeCacheKeyFast(req, ctx) {
|
|
3340
|
+
const m = req.method;
|
|
3341
|
+
const method = m === "GET" || m === "POST" || m === "PUT" || m === "DELETE" || m === "PATCH" || m === "HEAD" || m === "OPTIONS" ? m : m.toUpperCase();
|
|
3342
|
+
let resolvedUrl;
|
|
3343
|
+
const url = req.url;
|
|
3344
|
+
if (ctx.cachedOrigin && url.length > 0 && url.charCodeAt(0) === 47 && url.charCodeAt(1) !== 47) {
|
|
3345
|
+
resolvedUrl = ctx.cachedOrigin + url;
|
|
3346
|
+
} else {
|
|
3347
|
+
resolvedUrl = new URL(url, ctx.baseUrl || void 0).toString();
|
|
3348
|
+
}
|
|
3349
|
+
const headers = req.headers;
|
|
3350
|
+
let sortedHeaders = "";
|
|
3351
|
+
if (headers) {
|
|
3352
|
+
const keys = Object.keys(headers);
|
|
3353
|
+
if (keys.length > 0) {
|
|
3354
|
+
const matched = [];
|
|
3355
|
+
for (let i = 0; i < keys.length; i++) {
|
|
3356
|
+
const k = keys[i];
|
|
3357
|
+
const lk = k.toLowerCase();
|
|
3358
|
+
if (ctx.relevantSet.has(lk)) {
|
|
3359
|
+
matched.push(`${lk}:${headers[k]}`);
|
|
3360
|
+
}
|
|
3361
|
+
}
|
|
3362
|
+
if (matched.length > 0) {
|
|
3363
|
+
if (matched.length === 1) {
|
|
3364
|
+
sortedHeaders = matched[0];
|
|
3365
|
+
} else {
|
|
3366
|
+
matched.sort();
|
|
3367
|
+
sortedHeaders = matched.join(",");
|
|
3368
|
+
}
|
|
3369
|
+
}
|
|
3370
|
+
}
|
|
3371
|
+
}
|
|
3372
|
+
const body = httpBodyKeyPart(req.body);
|
|
3373
|
+
return `${method}${SEPARATOR}${resolvedUrl}${SEPARATOR}${sortedHeaders}${SEPARATOR}${body}`;
|
|
3374
|
+
}
|
|
3229
3375
|
function computeCacheKey(req, baseUrl, extraHeaders = []) {
|
|
3230
3376
|
const method = req.method.toUpperCase();
|
|
3231
3377
|
const resolvedUrl = resolveKeyUrl(req.url, baseUrl);
|
|
@@ -3279,6 +3425,48 @@ var HOP_BY_HOP = /* @__PURE__ */ new Set([
|
|
|
3279
3425
|
"upgrade"
|
|
3280
3426
|
]);
|
|
3281
3427
|
var SAFE_METHODS = /* @__PURE__ */ new Set(["GET", "HEAD", "OPTIONS"]);
|
|
3428
|
+
function makeDedupKeyContext(baseUrl) {
|
|
3429
|
+
return {
|
|
3430
|
+
baseUrl,
|
|
3431
|
+
cachedOrigin: baseUrl ? absoluteOrigin(baseUrl) : void 0
|
|
3432
|
+
};
|
|
3433
|
+
}
|
|
3434
|
+
function computeDedupKeyFast(req, ctx) {
|
|
3435
|
+
const m = req.method;
|
|
3436
|
+
const method = m === "GET" || m === "POST" || m === "PUT" || m === "DELETE" || m === "PATCH" || m === "HEAD" || m === "OPTIONS" ? m : m.toUpperCase();
|
|
3437
|
+
let resolvedUrl;
|
|
3438
|
+
const url = req.url;
|
|
3439
|
+
if (ctx.cachedOrigin && url.length > 0 && url.charCodeAt(0) === 47 && url.charCodeAt(1) !== 47) {
|
|
3440
|
+
resolvedUrl = ctx.cachedOrigin + url;
|
|
3441
|
+
} else {
|
|
3442
|
+
resolvedUrl = resolveKeyUrl(url, ctx.baseUrl);
|
|
3443
|
+
}
|
|
3444
|
+
const headers = req.headers;
|
|
3445
|
+
let sortedHeaders = "";
|
|
3446
|
+
if (headers) {
|
|
3447
|
+
const keys = Object.keys(headers);
|
|
3448
|
+
if (keys.length > 0) {
|
|
3449
|
+
const matched = [];
|
|
3450
|
+
for (let i = 0; i < keys.length; i++) {
|
|
3451
|
+
const k = keys[i];
|
|
3452
|
+
const lk = k.toLowerCase();
|
|
3453
|
+
if (!HOP_BY_HOP.has(lk) && lk !== "authorization") {
|
|
3454
|
+
matched.push(`${lk}:${headers[k]}`);
|
|
3455
|
+
}
|
|
3456
|
+
}
|
|
3457
|
+
if (matched.length > 0) {
|
|
3458
|
+
if (matched.length === 1) {
|
|
3459
|
+
sortedHeaders = matched[0];
|
|
3460
|
+
} else {
|
|
3461
|
+
matched.sort();
|
|
3462
|
+
sortedHeaders = matched.join(",");
|
|
3463
|
+
}
|
|
3464
|
+
}
|
|
3465
|
+
}
|
|
3466
|
+
}
|
|
3467
|
+
const body = httpBodyKeyPart(req.body);
|
|
3468
|
+
return `${method}${SEPARATOR}${resolvedUrl}${SEPARATOR}${sortedHeaders}${SEPARATOR}${body}`;
|
|
3469
|
+
}
|
|
3282
3470
|
function computeDedupKey(req, baseUrl) {
|
|
3283
3471
|
const method = req.method.toUpperCase();
|
|
3284
3472
|
const resolvedUrl = resolveKeyUrl(req.url, baseUrl);
|
|
@@ -3308,6 +3496,7 @@ function withDedup(config) {
|
|
|
3308
3496
|
const inFlight = /* @__PURE__ */ new Map();
|
|
3309
3497
|
const customKeyFn = config?.dedupKey;
|
|
3310
3498
|
const onEvent = config?.onEvent;
|
|
3499
|
+
const dedupKeyCtx = makeDedupKeyContext("");
|
|
3311
3500
|
return (next) => {
|
|
3312
3501
|
return (req) => {
|
|
3313
3502
|
if (!SAFE_METHODS.has(req.method.toUpperCase())) {
|
|
@@ -3330,7 +3519,7 @@ function withDedup(config) {
|
|
|
3330
3519
|
return next(req);
|
|
3331
3520
|
}
|
|
3332
3521
|
} else {
|
|
3333
|
-
key =
|
|
3522
|
+
key = computeDedupKeyFast(req, dedupKeyCtx);
|
|
3334
3523
|
}
|
|
3335
3524
|
return {
|
|
3336
3525
|
_tag: "Async",
|
|
@@ -3859,6 +4048,7 @@ function withCache(config) {
|
|
|
3859
4048
|
const baseUrl = config?.baseUrl ?? "";
|
|
3860
4049
|
const onEvent = config?.onEvent;
|
|
3861
4050
|
const onLifecycleEvent = config?.onLifecycleEvent;
|
|
4051
|
+
const cacheKeyCtx = makeCacheKeyContext(baseUrl, cacheRelevantHeaders);
|
|
3862
4052
|
const cache = new LRUCache({
|
|
3863
4053
|
maxEntries,
|
|
3864
4054
|
onEvict: (count) => onLifecycleEvent?.({ type: "cache-eviction", count })
|
|
@@ -3876,7 +4066,7 @@ function withCache(config) {
|
|
|
3876
4066
|
if (!SAFE_METHODS.has(method) && !cachePolicy) {
|
|
3877
4067
|
return next(req);
|
|
3878
4068
|
}
|
|
3879
|
-
const key =
|
|
4069
|
+
const key = computeCacheKeyFast(req, cacheKeyCtx);
|
|
3880
4070
|
return {
|
|
3881
4071
|
_tag: "Async",
|
|
3882
4072
|
register: (env, cb) => {
|
|
@@ -3935,7 +4125,7 @@ function withCache(config) {
|
|
|
3935
4125
|
if (!SAFE_METHODS.has(method) && !cachePolicy) {
|
|
3936
4126
|
return next(req);
|
|
3937
4127
|
}
|
|
3938
|
-
const key =
|
|
4128
|
+
const key = computeCacheKeyFast(req, cacheKeyCtx);
|
|
3939
4129
|
return {
|
|
3940
4130
|
_tag: "Async",
|
|
3941
4131
|
register: (env, cb) => {
|
|
@@ -5649,16 +5839,21 @@ function decodeJsonBody(bodyText, validator, options = {}) {
|
|
|
5649
5839
|
};
|
|
5650
5840
|
}
|
|
5651
5841
|
if (!validator) return { success: true, data: parsed };
|
|
5842
|
+
let validation;
|
|
5652
5843
|
let legacyMessage;
|
|
5653
|
-
|
|
5844
|
+
if (isSchema(validator)) {
|
|
5845
|
+
validation = validator.safeParse(parsed);
|
|
5846
|
+
} else {
|
|
5654
5847
|
const result = validator(parsed);
|
|
5655
|
-
if (result.success)
|
|
5848
|
+
if (result.success) {
|
|
5849
|
+
return { success: true, data: result.data };
|
|
5850
|
+
}
|
|
5656
5851
|
legacyMessage = result.error;
|
|
5657
|
-
|
|
5852
|
+
validation = {
|
|
5658
5853
|
success: false,
|
|
5659
5854
|
issues: result.issues ?? [makeSchemaIssue([], "valid JSON shape", parsed, result.error)]
|
|
5660
5855
|
};
|
|
5661
|
-
}
|
|
5856
|
+
}
|
|
5662
5857
|
if (validation.success) return { success: true, data: validation.data };
|
|
5663
5858
|
return {
|
|
5664
5859
|
success: false,
|
|
@@ -5702,6 +5897,13 @@ function encodeJsonBodyEffect(bodyObj, validator, options = {}) {
|
|
|
5702
5897
|
}
|
|
5703
5898
|
}
|
|
5704
5899
|
function decodeJsonBodyEffect(bodyText, validator, options) {
|
|
5900
|
+
if (!validator) {
|
|
5901
|
+
try {
|
|
5902
|
+
return asyncSucceed(JSON.parse(bodyText));
|
|
5903
|
+
} catch (error) {
|
|
5904
|
+
return asyncFail(makeJsonParseValidationError(bodyText, error, options ?? {}));
|
|
5905
|
+
}
|
|
5906
|
+
}
|
|
5705
5907
|
const result = decodeJsonBody(bodyText, validator, options);
|
|
5706
5908
|
return result.success ? asyncSucceed(result.data) : asyncFail(result.error);
|
|
5707
5909
|
}
|
|
@@ -5867,10 +6069,14 @@ function makeDefaultHttpClient(config = {}) {
|
|
|
5867
6069
|
wire = wire.with(withHttpPolicyPresets(policyPresets));
|
|
5868
6070
|
}
|
|
5869
6071
|
const features = featureSnapshot(lifecycleConfig2, compressionResult !== void 0, middleware.length);
|
|
6072
|
+
const hasMiddleware = compressionResult !== void 0 || middleware.length > 0 || policyPresets !== void 0 && Object.keys(policyPresets).length > 0;
|
|
6073
|
+
const transport = lifecycleConfig2.transport;
|
|
6074
|
+
const useInlineDecode = !hasMiddleware && transport !== void 0;
|
|
5870
6075
|
return buildDefaultClient(wire, {
|
|
5871
6076
|
preset,
|
|
5872
6077
|
features,
|
|
5873
|
-
compressionStats: compressionResult?.stats
|
|
6078
|
+
compressionStats: compressionResult?.stats,
|
|
6079
|
+
useInlineDecode
|
|
5874
6080
|
});
|
|
5875
6081
|
}
|
|
5876
6082
|
function buildDefaultClient(wire, meta) {
|
|
@@ -5889,6 +6095,11 @@ function buildDefaultClient(wire, meta) {
|
|
|
5889
6095
|
const req = setHeaderIfMissing("accept", "application/json")(
|
|
5890
6096
|
buildHttpRequest("GET", url, init)
|
|
5891
6097
|
);
|
|
6098
|
+
if (meta.useInlineDecode) {
|
|
6099
|
+
return withPromise(
|
|
6100
|
+
fusedWireAndDecode(requestRaw(req), init?.schema, init?.schemaName)
|
|
6101
|
+
);
|
|
6102
|
+
}
|
|
5892
6103
|
return withPromise(
|
|
5893
6104
|
asyncFlatMap(requestRaw(req), (w) => decodeResponse(w, init?.schema, init?.schemaName))
|
|
5894
6105
|
);
|
|
@@ -5917,6 +6128,7 @@ function buildDefaultClient(wire, meta) {
|
|
|
5917
6128
|
postJson,
|
|
5918
6129
|
with: (mw) => buildDefaultClient(wire.with(mw), {
|
|
5919
6130
|
...meta,
|
|
6131
|
+
useInlineDecode: false,
|
|
5920
6132
|
features: {
|
|
5921
6133
|
...meta.features,
|
|
5922
6134
|
middleware: meta.features.middleware + 1
|
|
@@ -5944,6 +6156,48 @@ function toResponse(wire, body) {
|
|
|
5944
6156
|
body
|
|
5945
6157
|
};
|
|
5946
6158
|
}
|
|
6159
|
+
function fusedWireAndDecode(wireEffect, schema, schemaName) {
|
|
6160
|
+
return {
|
|
6161
|
+
_tag: "Async",
|
|
6162
|
+
register: (env, cb) => {
|
|
6163
|
+
const innerEffect = wireEffect;
|
|
6164
|
+
if (innerEffect._tag === "Async" && innerEffect.register) {
|
|
6165
|
+
return innerEffect.register(env, (exit) => {
|
|
6166
|
+
if (exit._tag !== "Success") {
|
|
6167
|
+
cb(exit);
|
|
6168
|
+
return;
|
|
6169
|
+
}
|
|
6170
|
+
const wire = exit.value;
|
|
6171
|
+
inlineDecodeJson(wire, schema, schemaName, cb);
|
|
6172
|
+
});
|
|
6173
|
+
}
|
|
6174
|
+
const decoded = asyncFlatMap(wireEffect, (w) => decodeResponse(w, schema, schemaName));
|
|
6175
|
+
if (decoded._tag === "Async" && decoded.register) {
|
|
6176
|
+
return decoded.register(env, cb);
|
|
6177
|
+
}
|
|
6178
|
+
cb({ _tag: "Failure", cause: Cause.fail({ _tag: "ValidationError", message: "Internal: unexpected effect shape", body: "", issues: [], phase: "response" }) });
|
|
6179
|
+
}
|
|
6180
|
+
};
|
|
6181
|
+
}
|
|
6182
|
+
function inlineDecodeJson(wire, schema, schemaName, cb) {
|
|
6183
|
+
if (!schema) {
|
|
6184
|
+
let parsed;
|
|
6185
|
+
try {
|
|
6186
|
+
parsed = JSON.parse(wire.bodyText);
|
|
6187
|
+
} catch (error) {
|
|
6188
|
+
cb({ _tag: "Failure", cause: Cause.fail(makeJsonParseValidationError(wire.bodyText, error, { schemaName })) });
|
|
6189
|
+
return;
|
|
6190
|
+
}
|
|
6191
|
+
cb({ _tag: "Success", value: toResponse(wire, parsed) });
|
|
6192
|
+
return;
|
|
6193
|
+
}
|
|
6194
|
+
const result = decodeJsonBody(wire.bodyText, schema, { schemaName });
|
|
6195
|
+
if (result.success) {
|
|
6196
|
+
cb({ _tag: "Success", value: toResponse(wire, result.data) });
|
|
6197
|
+
} else {
|
|
6198
|
+
cb({ _tag: "Failure", cause: Cause.fail(result.error) });
|
|
6199
|
+
}
|
|
6200
|
+
}
|
|
5947
6201
|
function decodeResponse(wire, schema, schemaName) {
|
|
5948
6202
|
if (!schema) {
|
|
5949
6203
|
try {
|
|
@@ -6069,6 +6323,7 @@ export {
|
|
|
6069
6323
|
validateConfig,
|
|
6070
6324
|
resolveConfig,
|
|
6071
6325
|
AdaptiveLimiter,
|
|
6326
|
+
isPromiseTransportDirect,
|
|
6072
6327
|
isTaggedHttpError,
|
|
6073
6328
|
isAbortError,
|
|
6074
6329
|
normalizeHttpError,
|
|
@@ -6084,6 +6339,7 @@ export {
|
|
|
6084
6339
|
withMiddleware,
|
|
6085
6340
|
normalizeHeadersInit,
|
|
6086
6341
|
makeHttpStream,
|
|
6342
|
+
noopSignal,
|
|
6087
6343
|
makeHttp,
|
|
6088
6344
|
withRetryStream,
|
|
6089
6345
|
SEPARATOR,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
makeRuntimeEventRecord
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-KAPZHDO4.mjs";
|
|
4
4
|
import {
|
|
5
5
|
layerEffect,
|
|
6
6
|
makeScheduleDriver
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KDXNWGPB.mjs";
|
|
8
8
|
import {
|
|
9
9
|
Runtime,
|
|
10
10
|
getCurrentFiber,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
runtimeClockFromEnv,
|
|
13
13
|
toPromise,
|
|
14
14
|
unsafeRunAsync
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-MUMBUXU6.mjs";
|
|
16
16
|
import {
|
|
17
17
|
Cause,
|
|
18
18
|
Exit,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
} from "./chunk-36I3M4UC.mjs";
|
|
27
27
|
import {
|
|
28
28
|
parseConfig
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-UZQ3BB6W.mjs";
|
|
30
30
|
|
|
31
31
|
// src/core/types/cancel.ts
|
|
32
32
|
function makeCancelToken() {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkZDZNV6NAcjs = require('./chunk-ZDZNV6NA.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
@@ -20,14 +20,14 @@ var _chunkMVGUEJ5Zcjs = require('./chunk-MVGUEJ5Z.cjs');
|
|
|
20
20
|
// src/core/runtime/combinators.ts
|
|
21
21
|
function sleep(ms) {
|
|
22
22
|
return _chunkMVGUEJ5Zcjs.asyncEffect.call(void 0, (env, cb) => {
|
|
23
|
-
const clock =
|
|
23
|
+
const clock = _chunkZDZNV6NAcjs.runtimeClockFromEnv.call(void 0, env);
|
|
24
24
|
const id = clock.setTimeout(() => cb({ _tag: "Success", value: void 0 }), ms);
|
|
25
25
|
return () => clock.clearTimeout(id);
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
function timeout(effect, ms) {
|
|
29
29
|
return _chunkMVGUEJ5Zcjs.asyncEffect.call(void 0, (env, cb) => {
|
|
30
|
-
const clock =
|
|
30
|
+
const clock = _chunkZDZNV6NAcjs.runtimeClockFromEnv.call(void 0, env);
|
|
31
31
|
let done = false;
|
|
32
32
|
let timerId;
|
|
33
33
|
let fiber;
|
|
@@ -40,7 +40,7 @@ function timeout(effect, ms) {
|
|
|
40
40
|
cause: { _tag: "Fail", error: { _tag: "TimeoutError", ms } }
|
|
41
41
|
});
|
|
42
42
|
}, ms);
|
|
43
|
-
const runtime =
|
|
43
|
+
const runtime = _chunkZDZNV6NAcjs.unsafeGetCurrentRuntime.call(void 0, );
|
|
44
44
|
fiber = runtime.fork(effect);
|
|
45
45
|
fiber.join((exit) => {
|
|
46
46
|
if (done) return;
|
|
@@ -82,7 +82,7 @@ function retry(effect, policy) {
|
|
|
82
82
|
);
|
|
83
83
|
return _chunkMVGUEJ5Zcjs.asyncFlatMap.call(void 0,
|
|
84
84
|
{ _tag: "Sync", thunk: (env) => {
|
|
85
|
-
const clock =
|
|
85
|
+
const clock = _chunkZDZNV6NAcjs.runtimeClockFromEnv.call(void 0, env);
|
|
86
86
|
return { clock, startedAt: clock.now() };
|
|
87
87
|
} },
|
|
88
88
|
({ clock, startedAt }) => loop(0, startedAt, clock)
|
|
@@ -110,8 +110,8 @@ function retryWithBackoff(effect, opts = {}) {
|
|
|
110
110
|
// src/core/runtime/resource.ts
|
|
111
111
|
function bracket(acquire, use, release) {
|
|
112
112
|
return _chunkMVGUEJ5Zcjs.asyncEffect.call(void 0, (env, cb) => {
|
|
113
|
-
const runtime =
|
|
114
|
-
const scope = new (0,
|
|
113
|
+
const runtime = _chunkZDZNV6NAcjs.unsafeGetCurrentRuntime.call(void 0, );
|
|
114
|
+
const scope = new (0, _chunkZDZNV6NAcjs.Scope)(runtime);
|
|
115
115
|
const acquireFiber = scope.fork(acquire);
|
|
116
116
|
acquireFiber.join((acquireExit) => {
|
|
117
117
|
if (acquireExit._tag === "Failure") {
|
|
@@ -150,7 +150,7 @@ function safeRelease(release, resource2, exit) {
|
|
|
150
150
|
}
|
|
151
151
|
function ensuring(effect, finalizer) {
|
|
152
152
|
return _chunkMVGUEJ5Zcjs.asyncEffect.call(void 0, (env, cb) => {
|
|
153
|
-
const runtime =
|
|
153
|
+
const runtime = _chunkZDZNV6NAcjs.unsafeGetCurrentRuntime.call(void 0, );
|
|
154
154
|
const fiber = runtime.fork(effect);
|
|
155
155
|
fiber.join((exit) => {
|
|
156
156
|
const fin = _chunkMVGUEJ5Zcjs.asyncFold.call(void 0,
|
|
@@ -224,7 +224,7 @@ function useManaged(m, body) {
|
|
|
224
224
|
}
|
|
225
225
|
function managedAll(manageds) {
|
|
226
226
|
const acquire = _chunkMVGUEJ5Zcjs.asyncEffect.call(void 0, (env, cb) => {
|
|
227
|
-
const runtime =
|
|
227
|
+
const runtime = _chunkZDZNV6NAcjs.unsafeGetCurrentRuntime.call(void 0, );
|
|
228
228
|
const resources = [];
|
|
229
229
|
let i = 0;
|
|
230
230
|
const acquireNext = () => {
|
|
@@ -250,7 +250,7 @@ function managedAll(manageds) {
|
|
|
250
250
|
});
|
|
251
251
|
const release = (resources, exit) => {
|
|
252
252
|
return _chunkMVGUEJ5Zcjs.asyncEffect.call(void 0, (_env, cb) => {
|
|
253
|
-
const runtime =
|
|
253
|
+
const runtime = _chunkZDZNV6NAcjs.unsafeGetCurrentRuntime.call(void 0, );
|
|
254
254
|
releaseAcquired(runtime, manageds, resources, exit).then(() => {
|
|
255
255
|
cb({ _tag: "Success", value: void 0 });
|
|
256
256
|
});
|
|
@@ -593,7 +593,7 @@ function union(left, right) {
|
|
|
593
593
|
};
|
|
594
594
|
}
|
|
595
595
|
function makeScheduleDriver(schedule, options = {}) {
|
|
596
|
-
const clock = _nullishCoalesce(options.clock, () => (
|
|
596
|
+
const clock = _nullishCoalesce(options.clock, () => ( _chunkZDZNV6NAcjs.liveClock));
|
|
597
597
|
let startedAtMs = _nullishCoalesce(options.startedAtMs, () => ( clock.now()));
|
|
598
598
|
let attempt = 0;
|
|
599
599
|
let lastDecision;
|
|
@@ -661,7 +661,7 @@ function runSchedule(schedule, inputs, options = {}) {
|
|
|
661
661
|
function driverFromRuntime(schedule, options = {}) {
|
|
662
662
|
return _chunkMVGUEJ5Zcjs.Async.sync((env) => makeScheduleDriver(schedule, {
|
|
663
663
|
...options,
|
|
664
|
-
clock: _nullishCoalesce(options.clock, () => (
|
|
664
|
+
clock: _nullishCoalesce(options.clock, () => ( _chunkZDZNV6NAcjs.runtimeClockFromEnv.call(void 0, env)))
|
|
665
665
|
}));
|
|
666
666
|
}
|
|
667
667
|
function retryWithSchedule(effect, schedule, options = {}) {
|
|
@@ -719,7 +719,7 @@ function normalizeCap(ms) {
|
|
|
719
719
|
return normalizeDelay(ms);
|
|
720
720
|
}
|
|
721
721
|
function defaultClock() {
|
|
722
|
-
return
|
|
722
|
+
return _chunkZDZNV6NAcjs.liveClock.now();
|
|
723
723
|
}
|
|
724
724
|
function nowFromContext(context) {
|
|
725
725
|
return _nullishCoalesce(_optionalChain([context, 'optionalAccess', _4 => _4.clock, 'access', _5 => _5.now, 'call', _6 => _6()]), () => ( defaultClock()));
|