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
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
Schema,
|
|
12
12
|
parseConfig
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-UZQ3BB6W.mjs";
|
|
14
14
|
|
|
15
15
|
// src/core/runtime/ringBuffer.ts
|
|
16
16
|
var PushStatus = /* @__PURE__ */ ((PushStatus3) => {
|
|
@@ -2950,31 +2950,43 @@ var Runtime = class _Runtime {
|
|
|
2950
2950
|
const fiber = this.fork(effect);
|
|
2951
2951
|
fiber.join(cb);
|
|
2952
2952
|
}
|
|
2953
|
+
static exitToError(exit) {
|
|
2954
|
+
if (exit._tag === "Success") return void 0;
|
|
2955
|
+
const failure = Cause.firstFailure(exit.cause);
|
|
2956
|
+
if (failure._tag === "Some") return failure.value;
|
|
2957
|
+
const defect = Cause.firstDefect(exit.cause);
|
|
2958
|
+
if (defect._tag === "Some") {
|
|
2959
|
+
return defect.value instanceof Error ? defect.value : new Error(String(defect.value));
|
|
2960
|
+
}
|
|
2961
|
+
if (Cause.containsInterrupt(exit.cause)) return new Error("Interrupted");
|
|
2962
|
+
return Cause.toError(exit.cause);
|
|
2963
|
+
}
|
|
2953
2964
|
toPromise(effect) {
|
|
2965
|
+
let syncExit;
|
|
2966
|
+
let promiseResolve;
|
|
2967
|
+
let promiseReject;
|
|
2968
|
+
const complete = (exit) => {
|
|
2969
|
+
if (promiseResolve) {
|
|
2970
|
+
if (exit._tag === "Success") promiseResolve(exit.value);
|
|
2971
|
+
else promiseReject(_Runtime.exitToError(exit));
|
|
2972
|
+
} else {
|
|
2973
|
+
syncExit = exit;
|
|
2974
|
+
}
|
|
2975
|
+
};
|
|
2976
|
+
if (this.tryRunNativeTopLevel(effect, complete)) {
|
|
2977
|
+
if (syncExit) {
|
|
2978
|
+
return syncExit._tag === "Success" ? Promise.resolve(syncExit.value) : Promise.reject(_Runtime.exitToError(syncExit));
|
|
2979
|
+
}
|
|
2980
|
+
return new Promise((resolve, reject) => {
|
|
2981
|
+
promiseResolve = resolve;
|
|
2982
|
+
promiseReject = reject;
|
|
2983
|
+
});
|
|
2984
|
+
}
|
|
2954
2985
|
return new Promise((resolve, reject) => {
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
resolve(exit.value);
|
|
2958
|
-
return;
|
|
2959
|
-
}
|
|
2960
|
-
const failure = Cause.firstFailure(exit.cause);
|
|
2961
|
-
if (failure._tag === "Some") reject(failure.value);
|
|
2962
|
-
else {
|
|
2963
|
-
const defect = Cause.firstDefect(exit.cause);
|
|
2964
|
-
if (defect._tag === "Some") {
|
|
2965
|
-
reject(defect.value instanceof Error ? defect.value : new Error(String(defect.value)));
|
|
2966
|
-
} else if (Cause.containsInterrupt(exit.cause)) {
|
|
2967
|
-
reject(new Error("Interrupted"));
|
|
2968
|
-
} else {
|
|
2969
|
-
reject(Cause.toError(exit.cause));
|
|
2970
|
-
}
|
|
2971
|
-
}
|
|
2972
|
-
};
|
|
2973
|
-
if (this.tryRunNativeTopLevel(effect, complete)) return;
|
|
2986
|
+
promiseResolve = resolve;
|
|
2987
|
+
promiseReject = reject;
|
|
2974
2988
|
const fiber = this.fork(effect);
|
|
2975
|
-
fiber.join(
|
|
2976
|
-
complete(exit);
|
|
2977
|
-
});
|
|
2989
|
+
fiber.join(complete);
|
|
2978
2990
|
});
|
|
2979
2991
|
}
|
|
2980
2992
|
tryRunNativeTopLevel(effect, cb) {
|
|
@@ -3017,32 +3029,43 @@ var NativeTopLevelRunner = class {
|
|
|
3017
3029
|
constructor(runtime, effect, cb) {
|
|
3018
3030
|
this.runtime = runtime;
|
|
3019
3031
|
this.current = effect;
|
|
3020
|
-
this.
|
|
3021
|
-
this.frame = {
|
|
3022
|
-
id: 0,
|
|
3023
|
-
runtime,
|
|
3024
|
-
name: "native-fast-path",
|
|
3025
|
-
fiberContext: { trace: null },
|
|
3026
|
-
lane: runtime.lane,
|
|
3027
|
-
status: () => this.result ? "Done" : "Running",
|
|
3028
|
-
join: (joiner) => {
|
|
3029
|
-
if (this.result) joiner(this.result);
|
|
3030
|
-
else this.joiners.push(joiner);
|
|
3031
|
-
},
|
|
3032
|
-
interrupt: () => void 0,
|
|
3033
|
-
addFinalizer: (finalizer) => {
|
|
3034
|
-
this.finalizers.push(finalizer);
|
|
3035
|
-
}
|
|
3036
|
-
};
|
|
3032
|
+
this.firstJoiner = cb;
|
|
3037
3033
|
}
|
|
3038
3034
|
runtime;
|
|
3039
3035
|
current;
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3036
|
+
// Lazy-allocated — most requests don't need these
|
|
3037
|
+
stack;
|
|
3038
|
+
joiners;
|
|
3039
|
+
finalizers;
|
|
3043
3040
|
result;
|
|
3044
3041
|
yielded = false;
|
|
3045
|
-
|
|
3042
|
+
firstJoiner;
|
|
3043
|
+
// Frame is now the runner itself — avoids allocating a separate frame object
|
|
3044
|
+
// with 4 closures per request. We implement the Fiber-like interface inline.
|
|
3045
|
+
id = 0;
|
|
3046
|
+
name = "native-fast-path";
|
|
3047
|
+
fiberContext = { trace: null };
|
|
3048
|
+
get lane() {
|
|
3049
|
+
return this.runtime.lane;
|
|
3050
|
+
}
|
|
3051
|
+
// Fiber-like interface methods (used by frame consumers)
|
|
3052
|
+
status() {
|
|
3053
|
+
return this.result ? "Done" : "Running";
|
|
3054
|
+
}
|
|
3055
|
+
join(joiner) {
|
|
3056
|
+
if (this.result) {
|
|
3057
|
+
joiner(this.result);
|
|
3058
|
+
return;
|
|
3059
|
+
}
|
|
3060
|
+
if (!this.joiners) this.joiners = [];
|
|
3061
|
+
this.joiners.push(joiner);
|
|
3062
|
+
}
|
|
3063
|
+
interrupt() {
|
|
3064
|
+
}
|
|
3065
|
+
addFinalizer(finalizer) {
|
|
3066
|
+
if (!this.finalizers) this.finalizers = [];
|
|
3067
|
+
this.finalizers.push(finalizer);
|
|
3068
|
+
}
|
|
3046
3069
|
start() {
|
|
3047
3070
|
this.runLoop();
|
|
3048
3071
|
}
|
|
@@ -3067,10 +3090,12 @@ var NativeTopLevelRunner = class {
|
|
|
3067
3090
|
}
|
|
3068
3091
|
break;
|
|
3069
3092
|
case "FlatMap":
|
|
3093
|
+
if (!this.stack) this.stack = [];
|
|
3070
3094
|
this.stack.push({ _tag: "SuccessCont", k: current.andThen });
|
|
3071
3095
|
this.current = current.first;
|
|
3072
3096
|
break;
|
|
3073
3097
|
case "Fold":
|
|
3098
|
+
if (!this.stack) this.stack = [];
|
|
3074
3099
|
this.stack.push({
|
|
3075
3100
|
_tag: "FoldCont",
|
|
3076
3101
|
onFailure: current.onFailure,
|
|
@@ -3085,10 +3110,12 @@ var NativeTopLevelRunner = class {
|
|
|
3085
3110
|
this.onSuccess(this.runtime.fork(current.effect, current.scopeId));
|
|
3086
3111
|
break;
|
|
3087
3112
|
case "Interruptibility":
|
|
3113
|
+
if (!this.stack) this.stack = [];
|
|
3088
3114
|
this.stack.push({ _tag: "InterruptibilityCont" });
|
|
3089
3115
|
this.current = current.effect;
|
|
3090
3116
|
break;
|
|
3091
3117
|
case "InterruptibilityMask":
|
|
3118
|
+
if (!this.stack) this.stack = [];
|
|
3092
3119
|
this.stack.push({ _tag: "InterruptibilityCont" });
|
|
3093
3120
|
try {
|
|
3094
3121
|
this.current = current.body((effect) => ({
|
|
@@ -3101,6 +3128,7 @@ var NativeTopLevelRunner = class {
|
|
|
3101
3128
|
}
|
|
3102
3129
|
break;
|
|
3103
3130
|
case "InterruptibilityRestore":
|
|
3131
|
+
if (!this.stack) this.stack = [];
|
|
3104
3132
|
this.stack.push({ _tag: "InterruptibilityCont" });
|
|
3105
3133
|
this.current = current.effect;
|
|
3106
3134
|
break;
|
|
@@ -3109,6 +3137,7 @@ var NativeTopLevelRunner = class {
|
|
|
3109
3137
|
const hadValue = refs.has(current.refId);
|
|
3110
3138
|
const previousValue = refs.get(current.refId);
|
|
3111
3139
|
refs.set(current.refId, current.value);
|
|
3140
|
+
if (!this.stack) this.stack = [];
|
|
3112
3141
|
this.stack.push({
|
|
3113
3142
|
_tag: "FiberRefCont",
|
|
3114
3143
|
refId: current.refId,
|
|
@@ -3167,7 +3196,7 @@ var NativeTopLevelRunner = class {
|
|
|
3167
3196
|
onSuccess(value) {
|
|
3168
3197
|
let currentValue = value;
|
|
3169
3198
|
while (true) {
|
|
3170
|
-
const frame = this.stack.pop();
|
|
3199
|
+
const frame = this.stack ? this.stack.pop() : void 0;
|
|
3171
3200
|
if (!frame) {
|
|
3172
3201
|
this.notify(Exit.succeed(currentValue));
|
|
3173
3202
|
return;
|
|
@@ -3195,7 +3224,7 @@ var NativeTopLevelRunner = class {
|
|
|
3195
3224
|
}
|
|
3196
3225
|
onCause(cause) {
|
|
3197
3226
|
let currentCause = cause;
|
|
3198
|
-
while (this.stack.length > 0) {
|
|
3227
|
+
while (this.stack && this.stack.length > 0) {
|
|
3199
3228
|
const frame = this.stack.pop();
|
|
3200
3229
|
if (frame._tag === "InterruptibilityCont") continue;
|
|
3201
3230
|
if (frame._tag === "FiberRefCont") {
|
|
@@ -3220,13 +3249,17 @@ var NativeTopLevelRunner = class {
|
|
|
3220
3249
|
notify(exit) {
|
|
3221
3250
|
if (this.result) return;
|
|
3222
3251
|
this.result = exit;
|
|
3223
|
-
this.runFinalizers(exit);
|
|
3224
|
-
|
|
3225
|
-
this.joiners
|
|
3252
|
+
if (this.finalizers) this.runFinalizers(exit);
|
|
3253
|
+
this.firstJoiner(exit);
|
|
3254
|
+
if (this.joiners) {
|
|
3255
|
+
for (const joiner of this.joiners) joiner(exit);
|
|
3256
|
+
this.joiners.length = 0;
|
|
3257
|
+
}
|
|
3226
3258
|
}
|
|
3227
3259
|
runFinalizers(exit) {
|
|
3228
|
-
|
|
3229
|
-
|
|
3260
|
+
const finalizers = this.finalizers;
|
|
3261
|
+
while (finalizers.length > 0) {
|
|
3262
|
+
const finalizer = finalizers.pop();
|
|
3230
3263
|
try {
|
|
3231
3264
|
const result = finalizer(exit);
|
|
3232
3265
|
if (result && typeof result === "object" && "_tag" in result) {
|
|
@@ -3237,8 +3270,8 @@ var NativeTopLevelRunner = class {
|
|
|
3237
3270
|
}
|
|
3238
3271
|
}
|
|
3239
3272
|
fiberRefs() {
|
|
3240
|
-
this.
|
|
3241
|
-
return this.
|
|
3273
|
+
this.fiberContext.fiberRefs ??= /* @__PURE__ */ new Map();
|
|
3274
|
+
return this.fiberContext.fiberRefs;
|
|
3242
3275
|
}
|
|
3243
3276
|
restoreFiberRef(frame) {
|
|
3244
3277
|
const refs = this.fiberRefs();
|
|
@@ -3246,7 +3279,7 @@ var NativeTopLevelRunner = class {
|
|
|
3246
3279
|
else refs.delete(frame.refId);
|
|
3247
3280
|
}
|
|
3248
3281
|
withFrame(body) {
|
|
3249
|
-
return withCurrentFiber(this
|
|
3282
|
+
return withCurrentFiber(this, body);
|
|
3250
3283
|
}
|
|
3251
3284
|
};
|
|
3252
3285
|
function fork(effect, env) {
|
|
@@ -3274,6 +3307,12 @@ var abortablePromiseTotals = {
|
|
|
3274
3307
|
lateSettlements: 0
|
|
3275
3308
|
};
|
|
3276
3309
|
var abortablePromiseLabels = /* @__PURE__ */ new Map();
|
|
3310
|
+
var perLabelTrackingEnabled = false;
|
|
3311
|
+
function setAbortablePromisePerLabelTracking(enabled) {
|
|
3312
|
+
const previous = perLabelTrackingEnabled;
|
|
3313
|
+
perLabelTrackingEnabled = enabled;
|
|
3314
|
+
return previous;
|
|
3315
|
+
}
|
|
3277
3316
|
var getAbortablePromiseLabelStats = (label) => {
|
|
3278
3317
|
const existing = abortablePromiseLabels.get(label);
|
|
3279
3318
|
if (existing) return existing;
|
|
@@ -3291,44 +3330,60 @@ var getAbortablePromiseLabelStats = (label) => {
|
|
|
3291
3330
|
return created;
|
|
3292
3331
|
};
|
|
3293
3332
|
var recordAbortablePromiseStart = (label) => {
|
|
3294
|
-
const byLabel = getAbortablePromiseLabelStats(label);
|
|
3295
3333
|
abortablePromiseTotals.active++;
|
|
3296
3334
|
abortablePromiseTotals.started++;
|
|
3297
|
-
|
|
3298
|
-
|
|
3335
|
+
if (perLabelTrackingEnabled) {
|
|
3336
|
+
const byLabel = getAbortablePromiseLabelStats(label);
|
|
3337
|
+
byLabel.active++;
|
|
3338
|
+
byLabel.started++;
|
|
3339
|
+
}
|
|
3299
3340
|
};
|
|
3300
3341
|
var recordAbortablePromiseFinish = (label, outcome) => {
|
|
3301
|
-
const byLabel = getAbortablePromiseLabelStats(label);
|
|
3302
3342
|
if (abortablePromiseTotals.active > 0) abortablePromiseTotals.active--;
|
|
3303
|
-
if (byLabel.active > 0) byLabel.active--;
|
|
3304
3343
|
switch (outcome) {
|
|
3305
3344
|
case "success":
|
|
3306
3345
|
abortablePromiseTotals.succeeded++;
|
|
3307
|
-
|
|
3308
|
-
return;
|
|
3346
|
+
break;
|
|
3309
3347
|
case "failure":
|
|
3310
3348
|
abortablePromiseTotals.failed++;
|
|
3311
|
-
|
|
3312
|
-
return;
|
|
3349
|
+
break;
|
|
3313
3350
|
case "interrupt":
|
|
3314
3351
|
abortablePromiseTotals.interrupted++;
|
|
3315
|
-
|
|
3316
|
-
return;
|
|
3352
|
+
break;
|
|
3317
3353
|
case "timeout":
|
|
3318
3354
|
abortablePromiseTotals.timedOut++;
|
|
3319
|
-
|
|
3320
|
-
|
|
3355
|
+
break;
|
|
3356
|
+
}
|
|
3357
|
+
if (perLabelTrackingEnabled) {
|
|
3358
|
+
const byLabel = getAbortablePromiseLabelStats(label);
|
|
3359
|
+
if (byLabel.active > 0) byLabel.active--;
|
|
3360
|
+
switch (outcome) {
|
|
3361
|
+
case "success":
|
|
3362
|
+
byLabel.succeeded++;
|
|
3363
|
+
return;
|
|
3364
|
+
case "failure":
|
|
3365
|
+
byLabel.failed++;
|
|
3366
|
+
return;
|
|
3367
|
+
case "interrupt":
|
|
3368
|
+
byLabel.interrupted++;
|
|
3369
|
+
return;
|
|
3370
|
+
case "timeout":
|
|
3371
|
+
byLabel.timedOut++;
|
|
3372
|
+
return;
|
|
3373
|
+
}
|
|
3321
3374
|
}
|
|
3322
3375
|
};
|
|
3323
3376
|
var recordAbortablePromiseLateSettlement = (label) => {
|
|
3324
|
-
const byLabel = getAbortablePromiseLabelStats(label);
|
|
3325
3377
|
abortablePromiseTotals.lateSettlements++;
|
|
3326
|
-
|
|
3378
|
+
if (perLabelTrackingEnabled) {
|
|
3379
|
+
const byLabel = getAbortablePromiseLabelStats(label);
|
|
3380
|
+
byLabel.lateSettlements++;
|
|
3381
|
+
}
|
|
3327
3382
|
};
|
|
3328
3383
|
function abortablePromiseStats() {
|
|
3329
3384
|
return {
|
|
3330
3385
|
...abortablePromiseTotals,
|
|
3331
|
-
byLabel: Array.from(abortablePromiseLabels.values()).map((x) => ({ ...x })).sort((a, b) => b.active - a.active || b.started - a.started || a.label.localeCompare(b.label))
|
|
3386
|
+
byLabel: perLabelTrackingEnabled ? Array.from(abortablePromiseLabels.values()).map((x) => ({ ...x })).sort((a, b) => b.active - a.active || b.started - a.started || a.label.localeCompare(b.label)) : []
|
|
3332
3387
|
};
|
|
3333
3388
|
}
|
|
3334
3389
|
function resetAbortablePromiseStats() {
|
|
@@ -3350,76 +3405,149 @@ var makeTimeoutReason = (timeoutMs, label) => ({
|
|
|
3350
3405
|
timeoutMs,
|
|
3351
3406
|
message: `Abortable promise '${label}' timed out after ${timeoutMs}ms`
|
|
3352
3407
|
});
|
|
3408
|
+
function registerWithTimeout(make, onReject, options, env, cb, timeoutMs) {
|
|
3409
|
+
const controller = new AbortController();
|
|
3410
|
+
const label = normalizeAbortablePromiseLabel(options.label);
|
|
3411
|
+
const startedAt = performance.now();
|
|
3412
|
+
let done = false;
|
|
3413
|
+
let cleanup;
|
|
3414
|
+
const hasHooks = options.onStart !== void 0 || options.onFinish !== void 0;
|
|
3415
|
+
const finish = hasHooks ? (outcome, exit, error) => {
|
|
3416
|
+
if (done) return;
|
|
3417
|
+
done = true;
|
|
3418
|
+
cleanup();
|
|
3419
|
+
recordAbortablePromiseFinish(label, outcome);
|
|
3420
|
+
options.onFinish?.({
|
|
3421
|
+
label,
|
|
3422
|
+
outcome,
|
|
3423
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
3424
|
+
error
|
|
3425
|
+
});
|
|
3426
|
+
cb(exit);
|
|
3427
|
+
} : (outcome, exit, _error) => {
|
|
3428
|
+
if (done) return;
|
|
3429
|
+
done = true;
|
|
3430
|
+
cleanup();
|
|
3431
|
+
recordAbortablePromiseFinish(label, outcome);
|
|
3432
|
+
cb(exit);
|
|
3433
|
+
};
|
|
3434
|
+
recordAbortablePromiseStart(label);
|
|
3435
|
+
if (hasHooks) options.onStart?.(label);
|
|
3436
|
+
const onTimeout = () => {
|
|
3437
|
+
const reason = options.timeoutReason?.() ?? makeTimeoutReason(timeoutMs, label);
|
|
3438
|
+
try {
|
|
3439
|
+
controller.abort(reason);
|
|
3440
|
+
} catch {
|
|
3441
|
+
controller.abort();
|
|
3442
|
+
}
|
|
3443
|
+
finish("timeout", Exit.failCause(Cause.fail(onReject(reason))), reason);
|
|
3444
|
+
};
|
|
3445
|
+
if (options.timerWheel) {
|
|
3446
|
+
const handle = options.timerWheel.schedule(timeoutMs, onTimeout);
|
|
3447
|
+
cleanup = () => {
|
|
3448
|
+
handle.cancel();
|
|
3449
|
+
};
|
|
3450
|
+
} else {
|
|
3451
|
+
let timeoutHandle = setTimeout(onTimeout, timeoutMs);
|
|
3452
|
+
cleanup = () => {
|
|
3453
|
+
if (timeoutHandle !== void 0) {
|
|
3454
|
+
clearTimeout(timeoutHandle);
|
|
3455
|
+
timeoutHandle = void 0;
|
|
3456
|
+
}
|
|
3457
|
+
};
|
|
3458
|
+
}
|
|
3459
|
+
let promise;
|
|
3460
|
+
try {
|
|
3461
|
+
promise = make(controller.signal, env);
|
|
3462
|
+
} catch (err) {
|
|
3463
|
+
finish("failure", Exit.failCause(Cause.fail(onReject(err))), err);
|
|
3464
|
+
return () => void 0;
|
|
3465
|
+
}
|
|
3466
|
+
promise.then((value) => {
|
|
3467
|
+
if (done) {
|
|
3468
|
+
recordAbortablePromiseLateSettlement(label);
|
|
3469
|
+
return;
|
|
3470
|
+
}
|
|
3471
|
+
finish("success", Exit.succeed(value));
|
|
3472
|
+
}).catch((err) => {
|
|
3473
|
+
if (done) {
|
|
3474
|
+
recordAbortablePromiseLateSettlement(label);
|
|
3475
|
+
return;
|
|
3476
|
+
}
|
|
3477
|
+
finish("failure", Exit.failCause(Cause.fail(onReject(err))), err);
|
|
3478
|
+
});
|
|
3479
|
+
return () => {
|
|
3480
|
+
if (done) return;
|
|
3481
|
+
try {
|
|
3482
|
+
controller.abort();
|
|
3483
|
+
} catch {
|
|
3484
|
+
}
|
|
3485
|
+
finish("interrupt", Exit.failCause(Cause.interrupt()));
|
|
3486
|
+
};
|
|
3487
|
+
}
|
|
3488
|
+
function registerWithoutTimeout(make, onReject, options, env, cb) {
|
|
3489
|
+
const controller = new AbortController();
|
|
3490
|
+
const label = normalizeAbortablePromiseLabel(options.label);
|
|
3491
|
+
const startedAt = performance.now();
|
|
3492
|
+
let done = false;
|
|
3493
|
+
const hasHooks = options.onStart !== void 0 || options.onFinish !== void 0;
|
|
3494
|
+
const finish = hasHooks ? (outcome, exit, error) => {
|
|
3495
|
+
if (done) return;
|
|
3496
|
+
done = true;
|
|
3497
|
+
recordAbortablePromiseFinish(label, outcome);
|
|
3498
|
+
options.onFinish?.({
|
|
3499
|
+
label,
|
|
3500
|
+
outcome,
|
|
3501
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
3502
|
+
error
|
|
3503
|
+
});
|
|
3504
|
+
cb(exit);
|
|
3505
|
+
} : (outcome, exit, _error) => {
|
|
3506
|
+
if (done) return;
|
|
3507
|
+
done = true;
|
|
3508
|
+
recordAbortablePromiseFinish(label, outcome);
|
|
3509
|
+
cb(exit);
|
|
3510
|
+
};
|
|
3511
|
+
recordAbortablePromiseStart(label);
|
|
3512
|
+
if (hasHooks) options.onStart?.(label);
|
|
3513
|
+
let promise;
|
|
3514
|
+
try {
|
|
3515
|
+
promise = make(controller.signal, env);
|
|
3516
|
+
} catch (err) {
|
|
3517
|
+
finish("failure", Exit.failCause(Cause.fail(onReject(err))), err);
|
|
3518
|
+
return () => void 0;
|
|
3519
|
+
}
|
|
3520
|
+
promise.then((value) => {
|
|
3521
|
+
if (done) {
|
|
3522
|
+
recordAbortablePromiseLateSettlement(label);
|
|
3523
|
+
return;
|
|
3524
|
+
}
|
|
3525
|
+
finish("success", Exit.succeed(value));
|
|
3526
|
+
}).catch((err) => {
|
|
3527
|
+
if (done) {
|
|
3528
|
+
recordAbortablePromiseLateSettlement(label);
|
|
3529
|
+
return;
|
|
3530
|
+
}
|
|
3531
|
+
finish("failure", Exit.failCause(Cause.fail(onReject(err))), err);
|
|
3532
|
+
});
|
|
3533
|
+
return () => {
|
|
3534
|
+
if (done) return;
|
|
3535
|
+
try {
|
|
3536
|
+
controller.abort();
|
|
3537
|
+
} catch {
|
|
3538
|
+
}
|
|
3539
|
+
finish("interrupt", Exit.failCause(Cause.interrupt()));
|
|
3540
|
+
};
|
|
3541
|
+
}
|
|
3353
3542
|
function fromPromiseAbortable(make, onReject, options = {}) {
|
|
3354
3543
|
return {
|
|
3355
3544
|
_tag: "Async",
|
|
3356
3545
|
register: (env, cb) => {
|
|
3357
|
-
const controller = new AbortController();
|
|
3358
|
-
const label = normalizeAbortablePromiseLabel(options.label);
|
|
3359
3546
|
const timeoutMs = options.timeoutMs !== void 0 && Number.isFinite(options.timeoutMs) ? Math.max(0, Math.floor(options.timeoutMs)) : void 0;
|
|
3360
|
-
const startedAt = performance.now();
|
|
3361
|
-
let done = false;
|
|
3362
|
-
let timeoutHandle;
|
|
3363
|
-
const cleanup = () => {
|
|
3364
|
-
if (timeoutHandle !== void 0) {
|
|
3365
|
-
clearTimeout(timeoutHandle);
|
|
3366
|
-
timeoutHandle = void 0;
|
|
3367
|
-
}
|
|
3368
|
-
};
|
|
3369
|
-
const finish = (outcome, exit, error) => {
|
|
3370
|
-
if (done) return;
|
|
3371
|
-
done = true;
|
|
3372
|
-
cleanup();
|
|
3373
|
-
recordAbortablePromiseFinish(label, outcome);
|
|
3374
|
-
options.onFinish?.({
|
|
3375
|
-
label,
|
|
3376
|
-
outcome,
|
|
3377
|
-
durationMs: Math.round(performance.now() - startedAt),
|
|
3378
|
-
error
|
|
3379
|
-
});
|
|
3380
|
-
cb(exit);
|
|
3381
|
-
};
|
|
3382
|
-
recordAbortablePromiseStart(label);
|
|
3383
|
-
options.onStart?.(label);
|
|
3384
3547
|
if (timeoutMs !== void 0 && timeoutMs > 0) {
|
|
3385
|
-
|
|
3386
|
-
const reason = options.timeoutReason?.() ?? makeTimeoutReason(timeoutMs, label);
|
|
3387
|
-
try {
|
|
3388
|
-
controller.abort(reason);
|
|
3389
|
-
} catch {
|
|
3390
|
-
controller.abort();
|
|
3391
|
-
}
|
|
3392
|
-
finish("timeout", Exit.failCause(Cause.fail(onReject(reason))), reason);
|
|
3393
|
-
}, timeoutMs);
|
|
3548
|
+
return registerWithTimeout(make, onReject, options, env, cb, timeoutMs);
|
|
3394
3549
|
}
|
|
3395
|
-
|
|
3396
|
-
try {
|
|
3397
|
-
promise = make(controller.signal, env);
|
|
3398
|
-
} catch (err) {
|
|
3399
|
-
finish("failure", Exit.failCause(Cause.fail(onReject(err))), err);
|
|
3400
|
-
return () => void 0;
|
|
3401
|
-
}
|
|
3402
|
-
promise.then((value) => {
|
|
3403
|
-
if (done) {
|
|
3404
|
-
recordAbortablePromiseLateSettlement(label);
|
|
3405
|
-
return;
|
|
3406
|
-
}
|
|
3407
|
-
finish("success", Exit.succeed(value));
|
|
3408
|
-
}).catch((err) => {
|
|
3409
|
-
if (done) {
|
|
3410
|
-
recordAbortablePromiseLateSettlement(label);
|
|
3411
|
-
return;
|
|
3412
|
-
}
|
|
3413
|
-
finish("failure", Exit.failCause(Cause.fail(onReject(err))), err);
|
|
3414
|
-
});
|
|
3415
|
-
return () => {
|
|
3416
|
-
if (done) return;
|
|
3417
|
-
try {
|
|
3418
|
-
controller.abort();
|
|
3419
|
-
} catch {
|
|
3420
|
-
}
|
|
3421
|
-
finish("interrupt", Exit.failCause(Cause.interrupt()));
|
|
3422
|
-
};
|
|
3550
|
+
return registerWithoutTimeout(make, onReject, options, env, cb);
|
|
3423
3551
|
}
|
|
3424
3552
|
};
|
|
3425
3553
|
}
|
|
@@ -4256,6 +4384,9 @@ export {
|
|
|
4256
4384
|
toPromiseByCaller,
|
|
4257
4385
|
unsafeRunAsync,
|
|
4258
4386
|
toPromise,
|
|
4387
|
+
setAbortablePromisePerLabelTracking,
|
|
4388
|
+
recordAbortablePromiseStart,
|
|
4389
|
+
recordAbortablePromiseFinish,
|
|
4259
4390
|
abortablePromiseStats,
|
|
4260
4391
|
resetAbortablePromiseStats,
|
|
4261
4392
|
fromPromiseAbortable,
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkYQWZ7FZXcjs = require('./chunk-YQWZ7FZX.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkQBVS3UYNcjs = require('./chunk-QBVS3UYN.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunkDV644N7Pcjs = require('./chunk-DV644N7P.cjs');
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkFYWWU3Z7cjs = require('./chunk-FYWWU3Z7.cjs');
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
var
|
|
17
|
+
var _chunk7FZUTJM3cjs = require('./chunk-7FZUTJM3.cjs');
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var _chunkZDZNV6NAcjs = require('./chunk-ZDZNV6NA.cjs');
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -299,10 +299,10 @@ function makeRuntimeCase(variant, chainDepth) {
|
|
|
299
299
|
maxCapacity: 8192,
|
|
300
300
|
flushBudget: 2048
|
|
301
301
|
};
|
|
302
|
-
const scheduler = variant === "wide-scheduler" ? new (0,
|
|
303
|
-
const recorder = variant === "recorder" ?
|
|
304
|
-
const hooks = _nullishCoalesce(_optionalChain([recorder, 'optionalAccess', _8 => _8.hooks]), () => ( (variant === "active-hooks" ? new (0,
|
|
305
|
-
const runtime =
|
|
302
|
+
const scheduler = variant === "wide-scheduler" ? new (0, _chunkZDZNV6NAcjs.Scheduler)(schedulerConfig) : void 0;
|
|
303
|
+
const recorder = variant === "recorder" ? _chunkYQWZ7FZXcjs.makeRuntimeRecorder.call(void 0, { maxEvents: 1e4 }) : void 0;
|
|
304
|
+
const hooks = _nullishCoalesce(_optionalChain([recorder, 'optionalAccess', _8 => _8.hooks]), () => ( (variant === "active-hooks" ? new (0, _chunkFYWWU3Z7cjs.EventBus)() : void 0)));
|
|
305
|
+
const runtime = _chunkZDZNV6NAcjs.Runtime.makeWithEngine(hooks ? {} : {}, "ts", {
|
|
306
306
|
hooks,
|
|
307
307
|
...scheduler ? { scheduler } : {},
|
|
308
308
|
inferLane: false
|
|
@@ -349,7 +349,7 @@ function makeFlatMapChain(depth) {
|
|
|
349
349
|
return effect;
|
|
350
350
|
}
|
|
351
351
|
function makeFiberRefProgram(depth) {
|
|
352
|
-
const ref =
|
|
352
|
+
const ref = _chunkYQWZ7FZXcjs.makeFiberRef.call(void 0, 0);
|
|
353
353
|
let effect = ref.set(0);
|
|
354
354
|
for (let i = 0; i < depth; i++) {
|
|
355
355
|
effect = _chunkMVGUEJ5Zcjs.asyncFlatMap.call(void 0, effect, () => ref.update((n) => n + 1));
|
|
@@ -651,7 +651,7 @@ async function profileHttpLayers(options = {}) {
|
|
|
651
651
|
}
|
|
652
652
|
async function runScenario(scenario) {
|
|
653
653
|
const server = await startDummyServer(scenario.delayMs);
|
|
654
|
-
const observability = scenario.variant === "default-json-observed" ?
|
|
654
|
+
const observability = scenario.variant === "default-json-observed" ? _chunkDV644N7Pcjs.makeObservability.call(void 0, {
|
|
655
655
|
logs: false,
|
|
656
656
|
traces: { maxFinishedSpans: 1e4 },
|
|
657
657
|
autoStart: false
|
|
@@ -838,9 +838,9 @@ function makeDefaultJsonRunner(server, scenario, preset, disableAdaptiveLimiter
|
|
|
838
838
|
}
|
|
839
839
|
function makeProfileRuntime(concurrency, observability) {
|
|
840
840
|
const capacity = Math.max(65536, concurrency * 8);
|
|
841
|
-
return
|
|
841
|
+
return _chunkZDZNV6NAcjs.Runtime.makeWithEngine(_nullishCoalesce(_optionalChain([observability, 'optionalAccess', _30 => _30.env]), () => ( {})), "ts", {
|
|
842
842
|
hooks: _optionalChain([observability, 'optionalAccess', _31 => _31.hooks]),
|
|
843
|
-
scheduler: new (0,
|
|
843
|
+
scheduler: new (0, _chunkZDZNV6NAcjs.Scheduler)({
|
|
844
844
|
laneMode: "single",
|
|
845
845
|
initialCapacity: capacity,
|
|
846
846
|
maxCapacity: capacity,
|
|
@@ -862,24 +862,24 @@ function baseHttpConfig(baseUrl, scenario) {
|
|
|
862
862
|
};
|
|
863
863
|
}
|
|
864
864
|
function makeWireClient(baseUrl, scenario) {
|
|
865
|
-
return
|
|
865
|
+
return _chunk7FZUTJM3cjs.makeHttp.call(void 0, baseHttpConfig(baseUrl, scenario));
|
|
866
866
|
}
|
|
867
867
|
function makeMinimalClient(baseUrl, scenario) {
|
|
868
|
-
return
|
|
868
|
+
return _chunk7FZUTJM3cjs.makeDefaultHttpClient.call(void 0, {
|
|
869
869
|
preset: "minimal",
|
|
870
870
|
compression: false,
|
|
871
871
|
...baseHttpConfig(baseUrl, scenario)
|
|
872
872
|
});
|
|
873
873
|
}
|
|
874
874
|
function makeDefaultClient(baseUrl, scenario, preset, disableAdaptiveLimiter, observability) {
|
|
875
|
-
return
|
|
875
|
+
return _chunk7FZUTJM3cjs.makeDefaultHttpClient.call(void 0, {
|
|
876
876
|
preset,
|
|
877
877
|
compression: false,
|
|
878
878
|
...baseHttpConfig(baseUrl, scenario),
|
|
879
879
|
...disableAdaptiveLimiter ? { adaptiveLimiter: false } : {},
|
|
880
880
|
...observability ? {
|
|
881
881
|
middleware: [
|
|
882
|
-
|
|
882
|
+
_chunkQBVS3UYNcjs.withHttpObservability.call(void 0, {
|
|
883
883
|
metrics: observability.metrics,
|
|
884
884
|
logs: false,
|
|
885
885
|
spans: {},
|