brass-runtime 1.16.0 → 1.17.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/CHANGELOG.md +17 -0
- package/README.md +287 -23
- package/dist/agent/cli/main.cjs +38 -38
- package/dist/agent/cli/main.js +6 -6
- package/dist/agent/cli/main.mjs +6 -6
- package/dist/agent/index.cjs +7 -7
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.js +6 -6
- package/dist/agent/index.mjs +6 -6
- package/dist/chunk-2HQTDLHF.mjs +683 -0
- package/dist/chunk-36I3M4UC.mjs +370 -0
- package/dist/{chunk-QY5FKYEQ.js → chunk-3AYM6WPJ.js} +570 -51
- package/dist/chunk-3LOYJFRR.cjs +300 -0
- package/dist/chunk-3Y2RIUMM.js +300 -0
- package/dist/{chunk-7XOPAB5Q.js → chunk-4P2HHGAX.mjs} +83 -5
- package/dist/{chunk-N6VHMOWB.cjs → chunk-4ROBZFL6.cjs} +128 -128
- package/dist/{chunk-NC5SDRYE.js → chunk-52OB2ROS.js} +4 -4
- package/dist/{chunk-JX3LZQJH.cjs → chunk-52PPNNI4.cjs} +82 -20
- package/dist/{chunk-5YOQOXEQ.cjs → chunk-5EC274J5.cjs} +676 -293
- package/dist/chunk-5QC7LRZ3.js +229 -0
- package/dist/{chunk-7TL2LHQJ.js → chunk-5VRJNBLZ.mjs} +524 -141
- package/dist/chunk-62AZW6UT.cjs +313 -0
- package/dist/chunk-6IXXWIUM.js +683 -0
- package/dist/chunk-6RY2FFN4.mjs +2024 -0
- package/dist/chunk-74ZTY6CP.js +2871 -0
- package/dist/chunk-7CMJS3QE.mjs +2871 -0
- package/dist/{chunk-2WC63LJK.mjs → chunk-7JIJOVCT.js} +20 -10
- package/dist/chunk-7X3K5RMS.js +2024 -0
- package/dist/chunk-7ZPEZ57L.cjs +2024 -0
- package/dist/{chunk-FM4W4QPL.js → chunk-A2OM6NEH.mjs} +5 -4
- package/dist/chunk-AGR5B2BC.cjs +683 -0
- package/dist/chunk-B33ICAKP.js +313 -0
- package/dist/{chunk-J3H54ZRV.mjs → chunk-B5JD23U7.mjs} +1 -1
- package/dist/{chunk-F5EUMJL7.mjs → chunk-BKK77SBA.js} +83 -5
- package/dist/{chunk-U5KWK3PX.mjs → chunk-C3MDXTRZ.js} +11 -0
- package/dist/{chunk-SPUEME2B.cjs → chunk-CZIVE6NT.cjs} +12 -1
- package/dist/{chunk-TDVMADDN.js → chunk-DNFJLJMW.mjs} +11 -0
- package/dist/{chunk-XDZOO4L5.js → chunk-EJ6BPYVR.mjs} +79 -17
- package/dist/chunk-EOC4UHBS.mjs +229 -0
- package/dist/chunk-F6XWZQY4.cjs +777 -0
- package/dist/{chunk-7LVI2GIN.js → chunk-FH2X7BVP.js} +507 -72
- package/dist/{chunk-OOGJ73B6.js → chunk-FHQGHPMO.mjs} +20 -10
- package/dist/{chunk-WQ5QNU5R.cjs → chunk-GLE2WY7Z.cjs} +652 -217
- package/dist/{chunk-G6IQOE4P.mjs → chunk-GYM3LLGS.mjs} +507 -72
- package/dist/{chunk-TVN5I4U6.cjs → chunk-JF5WGYJJ.cjs} +25 -24
- package/dist/{chunk-CY33PGEX.mjs → chunk-KH4SYAOS.mjs} +570 -51
- package/dist/chunk-KN32XNTH.mjs +313 -0
- package/dist/chunk-KQLYONSE.cjs +2871 -0
- package/dist/{chunk-7HUOJA4W.cjs → chunk-KZJQ723N.cjs} +90 -80
- package/dist/{chunk-CCKHV5BT.mjs → chunk-L2SYFEBS.js} +5 -4
- package/dist/{chunk-IJT6RRQ5.cjs → chunk-L6VB5N7Q.cjs} +20 -9
- package/dist/{chunk-ZGLD4TVZ.mjs → chunk-MBEJI5HF.mjs} +4 -4
- package/dist/{chunk-PRWCB3QL.mjs → chunk-MIIYDLGM.js} +524 -141
- package/dist/{chunk-H55LI6WY.js → chunk-MOO4L7F4.mjs} +15 -4
- package/dist/chunk-MVGUEJ5Z.cjs +370 -0
- package/dist/chunk-PD4EJTQC.cjs +229 -0
- package/dist/chunk-PWC3RBQE.mjs +300 -0
- package/dist/{chunk-MWXMNYJS.cjs → chunk-Q2I37RP3.cjs} +643 -124
- package/dist/{chunk-VFIUZG7J.mjs → chunk-RKGKFN2A.js} +79 -17
- package/dist/{chunk-NYL4D7SK.cjs → chunk-SA6HUJVI.cjs} +5 -5
- package/dist/chunk-SK7UZRNI.mjs +777 -0
- package/dist/{chunk-K2T3DV26.mjs → chunk-TRM4JUZQ.js} +15 -4
- package/dist/chunk-UB4B6OFY.js +370 -0
- package/dist/{chunk-G3XGCZDQ.js → chunk-UCUBNWM2.js} +1 -1
- package/dist/chunk-VWIPB6I5.js +777 -0
- package/dist/{chunk-JNFRRJYH.cjs → chunk-WBGRHGBP.cjs} +270 -192
- package/dist/{client-CtFmoDvM.d.ts → client-CZHU674n.d.ts} +211 -36
- package/dist/core/index.cjs +135 -9
- package/dist/core/index.d.ts +238 -33
- package/dist/core/index.js +155 -29
- package/dist/core/index.mjs +155 -29
- package/dist/{effect-CGNl5Rqp.d.ts → effect-DIUHZ9IN.d.ts} +89 -1
- package/dist/effectRunner-CFLC32IK.cjs +8 -0
- package/dist/{effectRunner-A4CHJXJI.js → effectRunner-L4S7IPT3.js} +2 -2
- package/dist/{effectRunner-OPUF6QRN.mjs → effectRunner-NNGG75QA.mjs} +2 -2
- package/dist/http/index.cjs +324 -2986
- package/dist/http/index.d.ts +54 -68
- package/dist/http/index.js +238 -2900
- package/dist/http/index.mjs +238 -2900
- package/dist/http/testing.cjs +14 -12
- package/dist/http/testing.d.ts +5 -4
- package/dist/http/testing.js +10 -8
- package/dist/http/testing.mjs +10 -8
- package/dist/index.cjs +423 -255
- package/dist/index.d.ts +87 -69
- package/dist/index.js +301 -133
- package/dist/index.mjs +301 -133
- package/dist/observability/index.cjs +18 -531
- package/dist/observability/index.d.ts +81 -8
- package/dist/observability/index.js +25 -538
- package/dist/observability/index.mjs +25 -538
- package/dist/perf/cli.cjs +401 -0
- package/dist/perf/cli.d.ts +1 -0
- package/dist/perf/cli.js +401 -0
- package/dist/perf/cli.mjs +401 -0
- package/dist/perf/index.cjs +141 -0
- package/dist/perf/index.d.ts +483 -0
- package/dist/perf/index.js +141 -0
- package/dist/perf/index.mjs +141 -0
- package/dist/schedule-CK3Ml_7p.d.ts +259 -0
- package/dist/schema/index.cjs +6 -2
- package/dist/schema/index.d.ts +3 -1
- package/dist/schema/index.js +5 -1
- package/dist/schema/index.mjs +5 -1
- package/dist/{server-C8hDXA74.d.ts → server-D6JZ15_e.d.ts} +16 -4
- package/dist/{stream-dvSs0QS5.d.ts → stream-B4oK9JFP.d.ts} +1 -1
- package/dist/{tracer-B5tRH9H7.d.ts → tracer-Hwt1cl7h.d.ts} +13 -54
- package/dist/{tracing-Dt9S_6V8.d.ts → tracing-DqbTKGcf.d.ts} +1 -1
- package/docs/ARCHITECTURE.md +292 -0
- package/docs/README.md +65 -0
- package/docs/adr/0001-ai-context-pack.md +32 -0
- package/docs/agent-apply-mode.md +104 -0
- package/docs/agent-approvals.md +110 -0
- package/docs/agent-batch.md +185 -0
- package/docs/agent-boundaries.md +112 -0
- package/docs/agent-chat-sessions.md +160 -0
- package/docs/agent-ci.md +17 -0
- package/docs/agent-cli.md +405 -0
- package/docs/agent-config.md +480 -0
- package/docs/agent-context-discovery.md +159 -0
- package/docs/agent-copilot-like-dx.md +126 -0
- package/docs/agent-declarative-optimized-planning.md +138 -0
- package/docs/agent-dx.md +224 -0
- package/docs/agent-env-files.md +126 -0
- package/docs/agent-follow-up-context.md +43 -0
- package/docs/agent-global-usage.md +180 -0
- package/docs/agent-init.md +109 -0
- package/docs/agent-install-and-configure.md +516 -0
- package/docs/agent-language-workspace-ux.md +99 -0
- package/docs/agent-llm-adapters.md +123 -0
- package/docs/agent-local-install.md +190 -0
- package/docs/agent-local-tests.md +51 -0
- package/docs/agent-observability.md +155 -0
- package/docs/agent-patch-quality-loop.md +162 -0
- package/docs/agent-presets.md +22 -0
- package/docs/agent-project-commands.md +237 -0
- package/docs/agent-project-intelligence.md +156 -0
- package/docs/agent-redaction.md +18 -0
- package/docs/agent-release-readiness.md +76 -0
- package/docs/agent-rollback-safety.md +162 -0
- package/docs/agent-rollback.md +23 -0
- package/docs/agent-run-artifacts.md +16 -0
- package/docs/agent-vscode-auto-discovery.md +137 -0
- package/docs/agent-vscode-batch-runner.md +100 -0
- package/docs/agent-vscode-chat-layout.md +90 -0
- package/docs/agent-vscode-clean-install.md +147 -0
- package/docs/agent-vscode-code-actions.md +70 -0
- package/docs/agent-vscode-diff-preview.md +45 -0
- package/docs/agent-vscode-inline-assist.md +56 -0
- package/docs/agent-vscode-install.md +186 -0
- package/docs/agent-vscode-model-setup.md +97 -0
- package/docs/agent-vscode-patch-preview.md +92 -0
- package/docs/agent-vscode-problems.md +79 -0
- package/docs/agent-vscode-project-dashboard.md +106 -0
- package/docs/agent-vscode-run-history.md +92 -0
- package/docs/agent-vscode-ux.md +73 -0
- package/docs/ai/INVARIANTS.md +84 -0
- package/docs/ai/PROJECT_MAP.md +338 -0
- package/docs/ai/PUBLIC_API.md +339 -0
- package/docs/ai/VALIDATION_MATRIX.md +67 -0
- package/docs/api-polish.md +37 -0
- package/docs/cancellation.md +162 -0
- package/docs/coverage.md +46 -0
- package/docs/framework-integrations.md +38 -0
- package/docs/frameworks/angular.md +153 -0
- package/docs/frameworks/express.md +125 -0
- package/docs/frameworks/fastify.md +124 -0
- package/docs/frameworks/nestjs.md +282 -0
- package/docs/frameworks/nextjs.md +147 -0
- package/docs/frameworks/react.md +139 -0
- package/docs/frameworks/vanilla.md +224 -0
- package/docs/getting-started.md +159 -0
- package/docs/guides/README.md +40 -0
- package/docs/guides/circuit-breaker.md +89 -0
- package/docs/guides/error-handling.md +91 -0
- package/docs/guides/getting-started.md +107 -0
- package/docs/guides/layers.md +189 -0
- package/docs/guides/metrics.md +101 -0
- package/docs/guides/resource-management.md +141 -0
- package/docs/guides/retry.md +215 -0
- package/docs/guides/semaphore.md +66 -0
- package/docs/guides/streams.md +117 -0
- package/docs/guides/supervisors.md +98 -0
- package/docs/guides/testing.md +162 -0
- package/docs/guides/tracing.md +71 -0
- package/docs/http-recipes.md +399 -0
- package/docs/http.md +749 -0
- package/docs/modules.md +285 -0
- package/docs/nestjs.md +6 -0
- package/docs/observability-collector-smoke.md +31 -0
- package/docs/observability-framework-examples.md +110 -0
- package/docs/observability.md +649 -0
- package/docs/otel-collector-smoke.yaml +27 -0
- package/docs/performance-profiler.md +199 -0
- package/docs/production-readiness.md +73 -0
- package/docs/recipes/README.md +12 -0
- package/docs/recipes/http-server.md +45 -0
- package/docs/recipes/layers.md +44 -0
- package/docs/recipes/performance.md +47 -0
- package/docs/recipes/runtime.md +41 -0
- package/docs/recipes/testing.md +41 -0
- package/docs/release.md +53 -0
- package/docs/wasm-bounded-queues.md +44 -0
- package/docs/wasm-engine-observability-benchmarks.md +85 -0
- package/docs/wasm-fiber-engine.md +117 -0
- package/docs/wasm-scheduler-state-machine.md +122 -0
- package/docs/wasm-stream-chunks.md +54 -0
- package/package.json +22 -2
- package/dist/chunk-45F7OKGT.cjs +0 -104
- package/dist/chunk-7V4KY4RL.mjs +0 -104
- package/dist/chunk-DJQ7OMMB.cjs +0 -144
- package/dist/chunk-GOV47PPB.mjs +0 -552
- package/dist/chunk-JF4XXPZ5.cjs +0 -552
- package/dist/chunk-KCPT2D6G.js +0 -552
- package/dist/chunk-NOYZIMUJ.mjs +0 -144
- package/dist/chunk-PNVFW245.js +0 -144
- package/dist/chunk-ROJC3NBJ.js +0 -104
- package/dist/effectRunner-3ZHAD3LE.cjs +0 -8
- package/dist/schedule-Fque9Abz.d.ts +0 -70
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Cause
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-36I3M4UC.mjs";
|
|
4
4
|
|
|
5
5
|
// src/http/effectRunner.ts
|
|
6
6
|
function registerHttpEffect(effect, env, cb) {
|
|
@@ -59,9 +59,12 @@ function registerHttpEffect(effect, env, cb) {
|
|
|
59
59
|
run(current.onSuccess(exit.value), cont);
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
|
-
if (exit.cause
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
if (Cause.isFailureOnly(exit.cause)) {
|
|
63
|
+
const failure = Cause.firstFailure(exit.cause);
|
|
64
|
+
if (failure._tag === "Some") {
|
|
65
|
+
run(current.onFailure(failure.value), cont);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
65
68
|
}
|
|
66
69
|
cont(exit);
|
|
67
70
|
} catch (e) {
|
|
@@ -72,6 +75,14 @@ function registerHttpEffect(effect, env, cb) {
|
|
|
72
75
|
case "Fork":
|
|
73
76
|
cont({ _tag: "Success", value: void 0 });
|
|
74
77
|
return;
|
|
78
|
+
case "Interruptibility":
|
|
79
|
+
case "InterruptibilityRestore":
|
|
80
|
+
case "FiberRefLocally":
|
|
81
|
+
run(current.effect, cont);
|
|
82
|
+
return;
|
|
83
|
+
case "InterruptibilityMask":
|
|
84
|
+
run(current.body((effect2) => effect2), cont);
|
|
85
|
+
return;
|
|
75
86
|
}
|
|
76
87
|
};
|
|
77
88
|
run(effect, finish);
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/core/types/asyncEffect.ts
|
|
2
|
+
var Async = {
|
|
3
|
+
succeed: (value) => ({ _tag: "Succeed", value }),
|
|
4
|
+
fail: (error) => ({ _tag: "Fail", error }),
|
|
5
|
+
sync: (thunk) => ({ _tag: "Sync", thunk }),
|
|
6
|
+
async: (register) => ({ _tag: "Async", register }),
|
|
7
|
+
interruptibility: (mode, effect) => ({ _tag: "Interruptibility", mode, effect })
|
|
8
|
+
};
|
|
9
|
+
function asyncFold(fa, onFailure, onSuccess) {
|
|
10
|
+
return {
|
|
11
|
+
_tag: "Fold",
|
|
12
|
+
first: fa,
|
|
13
|
+
onFailure,
|
|
14
|
+
onSuccess
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function asyncCatchAll(fa, handler) {
|
|
18
|
+
return asyncFold(fa, handler, asyncSucceed);
|
|
19
|
+
}
|
|
20
|
+
function asyncMapError(fa, f) {
|
|
21
|
+
return asyncFold(fa, (e) => asyncFail(f(e)), asyncSucceed);
|
|
22
|
+
}
|
|
23
|
+
var SUCCEED_UNDEFINED = { _tag: "Succeed", value: void 0 };
|
|
24
|
+
var SUCCEED_TRUE = { _tag: "Succeed", value: true };
|
|
25
|
+
var SUCCEED_FALSE = { _tag: "Succeed", value: false };
|
|
26
|
+
var SUCCEED_NULL = { _tag: "Succeed", value: null };
|
|
27
|
+
var unit = () => SUCCEED_UNDEFINED;
|
|
28
|
+
var asyncSucceed = (value) => {
|
|
29
|
+
if (value === void 0) return SUCCEED_UNDEFINED;
|
|
30
|
+
if (value === true) return SUCCEED_TRUE;
|
|
31
|
+
if (value === false) return SUCCEED_FALSE;
|
|
32
|
+
if (value === null) return SUCCEED_NULL;
|
|
33
|
+
return { _tag: "Succeed", value };
|
|
34
|
+
};
|
|
35
|
+
var asyncFail = (error) => ({
|
|
36
|
+
_tag: "Fail",
|
|
37
|
+
error
|
|
38
|
+
});
|
|
39
|
+
var asyncSync = (thunk) => ({
|
|
40
|
+
_tag: "Sync",
|
|
41
|
+
thunk
|
|
42
|
+
});
|
|
43
|
+
var asyncTotal = (thunk) => asyncSync(() => thunk());
|
|
44
|
+
var asyncEffect = (register) => ({
|
|
45
|
+
_tag: "Async",
|
|
46
|
+
register
|
|
47
|
+
});
|
|
48
|
+
function asyncMap(fa, f) {
|
|
49
|
+
return asyncFlatMap(fa, (a) => asyncSucceed(f(a)));
|
|
50
|
+
}
|
|
51
|
+
function asyncFlatMap(fa, f) {
|
|
52
|
+
return {
|
|
53
|
+
_tag: "FlatMap",
|
|
54
|
+
first: fa,
|
|
55
|
+
andThen: f
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function acquireRelease(acquire, release, scope) {
|
|
59
|
+
return asyncFlatMap(acquire, (resource) => {
|
|
60
|
+
scope.addFinalizer((exit) => release(resource, exit));
|
|
61
|
+
return asyncSucceed(resource);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function asyncInterruptible(register) {
|
|
65
|
+
return asyncEffect(register);
|
|
66
|
+
}
|
|
67
|
+
var withAsyncPromise = (run) => (eff) => {
|
|
68
|
+
const anyEff = eff;
|
|
69
|
+
if (!anyEff.toPromise) {
|
|
70
|
+
anyEff.toPromise = (env) => run(eff, env);
|
|
71
|
+
anyEff.unsafeRunPromise = () => run(eff, {});
|
|
72
|
+
}
|
|
73
|
+
return anyEff;
|
|
74
|
+
};
|
|
75
|
+
var mapAsync = (fa, f) => asyncFlatMap(fa, (a) => asyncSucceed(f(a)));
|
|
76
|
+
var mapTryAsync = (fa, f) => asyncFlatMap(fa, (a) => asyncSync(() => f(a)));
|
|
77
|
+
|
|
78
|
+
// src/core/types/option.ts
|
|
79
|
+
var none = { _tag: "None" };
|
|
80
|
+
var some = (value) => ({ _tag: "Some", value });
|
|
81
|
+
|
|
82
|
+
// src/core/types/effect.ts
|
|
83
|
+
var Cause = {
|
|
84
|
+
fail: (error) => ({ _tag: "Fail", error }),
|
|
85
|
+
interrupt: () => ({ _tag: "Interrupt" }),
|
|
86
|
+
die: (defect) => ({ _tag: "Die", defect }),
|
|
87
|
+
then: (left, right) => ({ _tag: "Then", left, right }),
|
|
88
|
+
both: (left, right) => ({ _tag: "Both", left, right }),
|
|
89
|
+
isCause: isCauseValue,
|
|
90
|
+
failures: causeFailures,
|
|
91
|
+
defects: causeDefects,
|
|
92
|
+
firstFailure: firstCauseFailure,
|
|
93
|
+
firstDefect: firstCauseDefect,
|
|
94
|
+
containsFailure: causeContainsFailure,
|
|
95
|
+
containsDefect: causeContainsDefect,
|
|
96
|
+
containsInterrupt: causeContainsInterrupt,
|
|
97
|
+
isInterruptedOnly: causeIsInterruptedOnly,
|
|
98
|
+
isFailureOnly: causeIsFailureOnly,
|
|
99
|
+
squash: squashCause,
|
|
100
|
+
toError: causeToError,
|
|
101
|
+
pretty: prettyCause,
|
|
102
|
+
format: prettyCause
|
|
103
|
+
};
|
|
104
|
+
function isCause(value) {
|
|
105
|
+
return isCauseValue(value);
|
|
106
|
+
}
|
|
107
|
+
function prettyCause(cause, options = {}) {
|
|
108
|
+
const indent = _nullishCoalesce(options.indent, () => ( " "));
|
|
109
|
+
const renderError = _nullishCoalesce(options.renderError, () => ( ((error) => formatCauseValue(error))));
|
|
110
|
+
const renderDefect = _nullishCoalesce(options.renderDefect, () => ( formatCauseValue));
|
|
111
|
+
const lines = [];
|
|
112
|
+
const visit = (current, depth, label) => {
|
|
113
|
+
const prefix = indent.repeat(depth);
|
|
114
|
+
const head = label ? `${label}: ` : "";
|
|
115
|
+
switch (current._tag) {
|
|
116
|
+
case "Fail":
|
|
117
|
+
lines.push(`${prefix}${head}Fail(${renderError(current.error)})`);
|
|
118
|
+
return;
|
|
119
|
+
case "Die":
|
|
120
|
+
lines.push(`${prefix}${head}Die(${renderDefect(current.defect)})`);
|
|
121
|
+
return;
|
|
122
|
+
case "Interrupt":
|
|
123
|
+
lines.push(`${prefix}${head}Interrupt`);
|
|
124
|
+
return;
|
|
125
|
+
case "Then":
|
|
126
|
+
lines.push(`${prefix}${head}Then`);
|
|
127
|
+
visit(current.left, depth + 1, "left");
|
|
128
|
+
visit(current.right, depth + 1, "right");
|
|
129
|
+
return;
|
|
130
|
+
case "Both":
|
|
131
|
+
lines.push(`${prefix}${head}Both`);
|
|
132
|
+
visit(current.left, depth + 1, "left");
|
|
133
|
+
visit(current.right, depth + 1, "right");
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
visit(cause, 0);
|
|
138
|
+
if (options.singleLine) return lines.map((line) => line.trim()).join("; ");
|
|
139
|
+
return lines.join("\n");
|
|
140
|
+
}
|
|
141
|
+
var formatCause = prettyCause;
|
|
142
|
+
function isCauseValue(value) {
|
|
143
|
+
if (typeof value !== "object" || value === null || !("_tag" in value)) return false;
|
|
144
|
+
const tag = value._tag;
|
|
145
|
+
switch (tag) {
|
|
146
|
+
case "Fail":
|
|
147
|
+
return "error" in value;
|
|
148
|
+
case "Die":
|
|
149
|
+
return "defect" in value;
|
|
150
|
+
case "Interrupt":
|
|
151
|
+
return true;
|
|
152
|
+
case "Then":
|
|
153
|
+
case "Both":
|
|
154
|
+
return isCauseValue(value.left) && isCauseValue(value.right);
|
|
155
|
+
default:
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function causeFailures(cause) {
|
|
160
|
+
const failures = [];
|
|
161
|
+
collectFailures(cause, failures);
|
|
162
|
+
return failures;
|
|
163
|
+
}
|
|
164
|
+
function collectFailures(cause, out) {
|
|
165
|
+
switch (cause._tag) {
|
|
166
|
+
case "Fail":
|
|
167
|
+
out.push(cause.error);
|
|
168
|
+
return;
|
|
169
|
+
case "Then":
|
|
170
|
+
case "Both":
|
|
171
|
+
collectFailures(cause.left, out);
|
|
172
|
+
collectFailures(cause.right, out);
|
|
173
|
+
return;
|
|
174
|
+
case "Die":
|
|
175
|
+
case "Interrupt":
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function causeDefects(cause) {
|
|
180
|
+
const defects = [];
|
|
181
|
+
collectDefects(cause, defects);
|
|
182
|
+
return defects;
|
|
183
|
+
}
|
|
184
|
+
function collectDefects(cause, out) {
|
|
185
|
+
switch (cause._tag) {
|
|
186
|
+
case "Die":
|
|
187
|
+
out.push(cause.defect);
|
|
188
|
+
return;
|
|
189
|
+
case "Then":
|
|
190
|
+
case "Both":
|
|
191
|
+
collectDefects(cause.left, out);
|
|
192
|
+
collectDefects(cause.right, out);
|
|
193
|
+
return;
|
|
194
|
+
case "Fail":
|
|
195
|
+
case "Interrupt":
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function firstCauseFailure(cause) {
|
|
200
|
+
switch (cause._tag) {
|
|
201
|
+
case "Fail":
|
|
202
|
+
return some(cause.error);
|
|
203
|
+
case "Then":
|
|
204
|
+
case "Both": {
|
|
205
|
+
const left = firstCauseFailure(cause.left);
|
|
206
|
+
return left._tag === "Some" ? left : firstCauseFailure(cause.right);
|
|
207
|
+
}
|
|
208
|
+
case "Die":
|
|
209
|
+
case "Interrupt":
|
|
210
|
+
return none;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function firstCauseDefect(cause) {
|
|
214
|
+
switch (cause._tag) {
|
|
215
|
+
case "Die":
|
|
216
|
+
return some(cause.defect);
|
|
217
|
+
case "Then":
|
|
218
|
+
case "Both": {
|
|
219
|
+
const left = firstCauseDefect(cause.left);
|
|
220
|
+
return left._tag === "Some" ? left : firstCauseDefect(cause.right);
|
|
221
|
+
}
|
|
222
|
+
case "Fail":
|
|
223
|
+
case "Interrupt":
|
|
224
|
+
return none;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function causeContainsFailure(cause) {
|
|
228
|
+
switch (cause._tag) {
|
|
229
|
+
case "Fail":
|
|
230
|
+
return true;
|
|
231
|
+
case "Then":
|
|
232
|
+
case "Both":
|
|
233
|
+
return causeContainsFailure(cause.left) || causeContainsFailure(cause.right);
|
|
234
|
+
case "Die":
|
|
235
|
+
case "Interrupt":
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function causeContainsDefect(cause) {
|
|
240
|
+
switch (cause._tag) {
|
|
241
|
+
case "Die":
|
|
242
|
+
return true;
|
|
243
|
+
case "Then":
|
|
244
|
+
case "Both":
|
|
245
|
+
return causeContainsDefect(cause.left) || causeContainsDefect(cause.right);
|
|
246
|
+
case "Fail":
|
|
247
|
+
case "Interrupt":
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function causeContainsInterrupt(cause) {
|
|
252
|
+
switch (cause._tag) {
|
|
253
|
+
case "Interrupt":
|
|
254
|
+
return true;
|
|
255
|
+
case "Then":
|
|
256
|
+
case "Both":
|
|
257
|
+
return causeContainsInterrupt(cause.left) || causeContainsInterrupt(cause.right);
|
|
258
|
+
case "Fail":
|
|
259
|
+
case "Die":
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function causeIsInterruptedOnly(cause) {
|
|
264
|
+
return causeContainsInterrupt(cause) && !causeContainsFailure(cause) && !causeContainsDefect(cause);
|
|
265
|
+
}
|
|
266
|
+
function causeIsFailureOnly(cause) {
|
|
267
|
+
return causeContainsFailure(cause) && !causeContainsInterrupt(cause) && !causeContainsDefect(cause);
|
|
268
|
+
}
|
|
269
|
+
function squashCause(cause) {
|
|
270
|
+
const failure = firstCauseFailure(cause);
|
|
271
|
+
if (failure._tag === "Some") return failure.value;
|
|
272
|
+
const defect = firstCauseDefect(cause);
|
|
273
|
+
if (defect._tag === "Some") return defect.value instanceof Error ? defect.value : new Error(String(defect.value));
|
|
274
|
+
if (causeContainsInterrupt(cause)) return new Error("Interrupted");
|
|
275
|
+
return new Error(prettyCause(cause, { singleLine: true }));
|
|
276
|
+
}
|
|
277
|
+
function causeToError(cause) {
|
|
278
|
+
const squashed = squashCause(cause);
|
|
279
|
+
if (squashed instanceof Error) return squashed;
|
|
280
|
+
return new Error(formatCauseValue(squashed));
|
|
281
|
+
}
|
|
282
|
+
function formatCauseValue(value) {
|
|
283
|
+
if (value instanceof Error) return `${value.name}: ${value.message}`;
|
|
284
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
285
|
+
if (typeof value === "number" || typeof value === "boolean" || value === null || value === void 0) {
|
|
286
|
+
return String(value);
|
|
287
|
+
}
|
|
288
|
+
try {
|
|
289
|
+
return JSON.stringify(value);
|
|
290
|
+
} catch (e2) {
|
|
291
|
+
return String(value);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
var Exit = {
|
|
295
|
+
succeed: (value) => ({
|
|
296
|
+
_tag: "Success",
|
|
297
|
+
value
|
|
298
|
+
}),
|
|
299
|
+
failCause: (cause) => ({
|
|
300
|
+
_tag: "Failure",
|
|
301
|
+
cause
|
|
302
|
+
})
|
|
303
|
+
};
|
|
304
|
+
var succeed = (value) => asyncSucceed(value);
|
|
305
|
+
var fail = (error) => asyncFail(error);
|
|
306
|
+
var sync = (thunk) => asyncSync((env) => thunk(env));
|
|
307
|
+
var map = (fa, f) => asyncMap(fa, f);
|
|
308
|
+
var flatMap = (fa, f) => asyncFlatMap(fa, f);
|
|
309
|
+
var mapError = (fa, f) => asyncMapError(fa, f);
|
|
310
|
+
var catchAll = (fa, handler) => asyncFold(fa, handler, asyncSucceed);
|
|
311
|
+
var uninterruptible = (effect) => ({
|
|
312
|
+
_tag: "Interruptibility",
|
|
313
|
+
mode: "uninterruptible",
|
|
314
|
+
effect
|
|
315
|
+
});
|
|
316
|
+
var interruptible = (effect) => ({
|
|
317
|
+
_tag: "Interruptibility",
|
|
318
|
+
mode: "interruptible",
|
|
319
|
+
effect
|
|
320
|
+
});
|
|
321
|
+
function uninterruptibleMask(body) {
|
|
322
|
+
return { _tag: "InterruptibilityMask", body };
|
|
323
|
+
}
|
|
324
|
+
function orElseOptional(fa, that) {
|
|
325
|
+
return asyncFold(
|
|
326
|
+
fa,
|
|
327
|
+
(opt) => opt._tag === "Some" ? asyncFail(opt) : that(),
|
|
328
|
+
asyncSucceed
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
var end = () => fail(none);
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
exports.Async = Async; exports.asyncFold = asyncFold; exports.asyncCatchAll = asyncCatchAll; exports.asyncMapError = asyncMapError; exports.unit = unit; exports.asyncSucceed = asyncSucceed; exports.asyncFail = asyncFail; exports.asyncSync = asyncSync; exports.asyncTotal = asyncTotal; exports.asyncEffect = asyncEffect; exports.asyncMap = asyncMap; exports.asyncFlatMap = asyncFlatMap; exports.acquireRelease = acquireRelease; exports.asyncInterruptible = asyncInterruptible; exports.withAsyncPromise = withAsyncPromise; exports.mapAsync = mapAsync; exports.mapTryAsync = mapTryAsync; exports.none = none; exports.some = some; exports.Cause = Cause; exports.isCause = isCause; exports.prettyCause = prettyCause; exports.formatCause = formatCause; exports.Exit = Exit; exports.succeed = succeed; exports.fail = fail; exports.sync = sync; exports.map = map; exports.flatMap = flatMap; exports.mapError = mapError; exports.catchAll = catchAll; exports.uninterruptible = uninterruptible; exports.interruptible = interruptible; exports.uninterruptibleMask = uninterruptibleMask; exports.orElseOptional = orElseOptional; exports.end = end;
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return 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
|
+
|
|
3
|
+
var _chunk52PPNNI4cjs = require('./chunk-52PPNNI4.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkGLE2WY7Zcjs = require('./chunk-GLE2WY7Z.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkMVGUEJ5Zcjs = require('./chunk-MVGUEJ5Z.cjs');
|
|
13
|
+
|
|
14
|
+
// src/core/runtime/fiberRef.ts
|
|
15
|
+
var nextFiberRefId = 1;
|
|
16
|
+
function makeFiberRef(initial) {
|
|
17
|
+
const ref = {
|
|
18
|
+
id: nextFiberRefId++,
|
|
19
|
+
initial,
|
|
20
|
+
get: () => getFiberRef(ref),
|
|
21
|
+
set: (value) => setFiberRef(ref, value),
|
|
22
|
+
update: (f) => updateFiberRef(ref, f),
|
|
23
|
+
modify: (f) => modifyFiberRef(ref, f),
|
|
24
|
+
locally: (value, effect) => locallyFiberRef(ref, value, effect),
|
|
25
|
+
locallyWith: (f, effect) => locallyFiberRefWith(ref, f, effect),
|
|
26
|
+
unsafeGet: () => unsafeGetFiberRef(ref),
|
|
27
|
+
unsafeSet: (value) => unsafeSetFiberRef(ref, value)
|
|
28
|
+
};
|
|
29
|
+
return ref;
|
|
30
|
+
}
|
|
31
|
+
function getFiberRef(ref) {
|
|
32
|
+
return _chunkMVGUEJ5Zcjs.asyncSync.call(void 0, () => unsafeGetFiberRef(ref));
|
|
33
|
+
}
|
|
34
|
+
function setFiberRef(ref, value) {
|
|
35
|
+
return _chunkMVGUEJ5Zcjs.asyncSync.call(void 0, () => {
|
|
36
|
+
unsafeSetFiberRef(ref, value);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function updateFiberRef(ref, f) {
|
|
40
|
+
return _chunkMVGUEJ5Zcjs.asyncSync.call(void 0, () => {
|
|
41
|
+
const next = f(unsafeGetFiberRef(ref));
|
|
42
|
+
unsafeSetFiberRef(ref, next);
|
|
43
|
+
return next;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function modifyFiberRef(ref, f) {
|
|
47
|
+
return _chunkMVGUEJ5Zcjs.asyncSync.call(void 0, () => {
|
|
48
|
+
const [result, next] = f(unsafeGetFiberRef(ref));
|
|
49
|
+
unsafeSetFiberRef(ref, next);
|
|
50
|
+
return result;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function locallyFiberRef(ref, value, effect) {
|
|
54
|
+
return {
|
|
55
|
+
_tag: "FiberRefLocally",
|
|
56
|
+
refId: ref.id,
|
|
57
|
+
value,
|
|
58
|
+
effect
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function locallyFiberRefWith(ref, f, effect) {
|
|
62
|
+
return _chunkMVGUEJ5Zcjs.asyncFlatMap.call(void 0, getFiberRef(ref), (value) => locallyFiberRef(ref, f(value), effect));
|
|
63
|
+
}
|
|
64
|
+
function unsafeGetFiberRef(ref) {
|
|
65
|
+
const refs = currentFiberRefs(false);
|
|
66
|
+
return _optionalChain([refs, 'optionalAccess', _ => _.has, 'call', _2 => _2(ref.id)]) ? refs.get(ref.id) : ref.initial;
|
|
67
|
+
}
|
|
68
|
+
function unsafeSetFiberRef(ref, value) {
|
|
69
|
+
const refs = currentFiberRefs(true);
|
|
70
|
+
_optionalChain([refs, 'optionalAccess', _3 => _3.set, 'call', _4 => _4(ref.id, value)]);
|
|
71
|
+
}
|
|
72
|
+
function fiberRefSnapshot() {
|
|
73
|
+
return new Map(currentFiberRefs(false));
|
|
74
|
+
}
|
|
75
|
+
function currentFiberRefs(create) {
|
|
76
|
+
const fiber = _chunkGLE2WY7Zcjs.getCurrentFiber.call(void 0, );
|
|
77
|
+
if (!fiber) return void 0;
|
|
78
|
+
fiber.fiberContext ??= { log: _chunkGLE2WY7Zcjs.emptyContext, trace: null };
|
|
79
|
+
if (!fiber.fiberContext.fiberRefs && create) fiber.fiberContext.fiberRefs = /* @__PURE__ */ new Map();
|
|
80
|
+
return fiber.fiberContext.fiberRefs;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// src/core/runtime/recorder.ts
|
|
84
|
+
function makeRuntimeRecorder(options = {}) {
|
|
85
|
+
const capacity = Math.max(1, Math.floor(_nullishCoalesce(options.maxEvents, () => ( 2048))));
|
|
86
|
+
const records = new Array(capacity);
|
|
87
|
+
let next = 0;
|
|
88
|
+
let size = 0;
|
|
89
|
+
let dropped = 0;
|
|
90
|
+
let seq = 1;
|
|
91
|
+
const snapshot = () => {
|
|
92
|
+
const out = [];
|
|
93
|
+
const start = size === capacity ? next : 0;
|
|
94
|
+
for (let i = 0; i < size; i++) {
|
|
95
|
+
const record = records[(start + i) % capacity];
|
|
96
|
+
if (record) out.push(record);
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
};
|
|
100
|
+
const emit = (ev, ctx) => {
|
|
101
|
+
records[next] = _chunk52PPNNI4cjs.makeRuntimeEventRecord.call(void 0, ev, ctx, seq++);
|
|
102
|
+
next = (next + 1) % capacity;
|
|
103
|
+
if (size < capacity) size++;
|
|
104
|
+
else dropped++;
|
|
105
|
+
};
|
|
106
|
+
const clear = () => {
|
|
107
|
+
records.fill(void 0);
|
|
108
|
+
next = 0;
|
|
109
|
+
size = 0;
|
|
110
|
+
dropped = 0;
|
|
111
|
+
};
|
|
112
|
+
const stats = () => {
|
|
113
|
+
const current = snapshot();
|
|
114
|
+
return {
|
|
115
|
+
size,
|
|
116
|
+
capacity,
|
|
117
|
+
dropped,
|
|
118
|
+
...current[0] ? { firstSeq: current[0].seq } : {},
|
|
119
|
+
...current[current.length - 1] ? { lastSeq: current[current.length - 1].seq } : {}
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
const recorder = {
|
|
123
|
+
emit,
|
|
124
|
+
snapshot,
|
|
125
|
+
clear,
|
|
126
|
+
stats,
|
|
127
|
+
explain: (explainOptions = {}) => explainRuntimeEvents(snapshot(), dropped, explainOptions)
|
|
128
|
+
};
|
|
129
|
+
return Object.assign(recorder, { hooks: recorder });
|
|
130
|
+
}
|
|
131
|
+
function explainRuntimeEvents(events, dropped, options) {
|
|
132
|
+
const maxEvents = Math.max(1, Math.floor(_nullishCoalesce(options.maxEvents, () => ( 80))));
|
|
133
|
+
const slice = events.length > maxEvents ? events.slice(events.length - maxEvents) : events;
|
|
134
|
+
const fiberStarts = /* @__PURE__ */ new Map();
|
|
135
|
+
const fiberSuspends = /* @__PURE__ */ new Map();
|
|
136
|
+
const lines = [`Runtime flight recorder: ${events.length} event${events.length === 1 ? "" : "s"}${dropped > 0 ? `, ${dropped} dropped` : ""}.`];
|
|
137
|
+
for (const event of slice) {
|
|
138
|
+
switch (event.type) {
|
|
139
|
+
case "fiber.start": {
|
|
140
|
+
fiberStarts.set(event.fiberId, event);
|
|
141
|
+
lines.push(`fiber#${event.fiberId} started${event.name ? ` "${event.name}"` : ""}${event.parentFiberId !== void 0 ? ` parent=fiber#${event.parentFiberId}` : ""}`);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case "fiber.suspend": {
|
|
145
|
+
fiberSuspends.set(event.fiberId, event);
|
|
146
|
+
lines.push(`fiber#${event.fiberId} suspended awaiting ${_nullishCoalesce(event.reason, () => ( "unknown"))}`);
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
case "fiber.resume": {
|
|
150
|
+
const suspended = fiberSuspends.get(event.fiberId);
|
|
151
|
+
fiberSuspends.delete(event.fiberId);
|
|
152
|
+
lines.push(`fiber#${event.fiberId} resumed${suspended ? ` after ${durationMs(suspended, event)} awaiting ${fiberSuspendReason(suspended)}` : ""}`);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
case "fiber.end": {
|
|
156
|
+
const started = fiberStarts.get(event.fiberId);
|
|
157
|
+
const suspended = fiberSuspends.get(event.fiberId);
|
|
158
|
+
fiberSuspends.delete(event.fiberId);
|
|
159
|
+
lines.push(`fiber#${event.fiberId} ended ${event.status}${started ? ` after ${durationMs(started, event)}` : ""}${suspended ? ` while awaiting ${fiberSuspendReason(suspended)}` : ""}${event.error ? ` error=${formatUnknown(event.error)}` : ""}`);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case "scope.open":
|
|
163
|
+
lines.push(`scope#${event.scopeId} opened${event.parentScopeId !== void 0 ? ` parent=scope#${event.parentScopeId}` : ""}`);
|
|
164
|
+
break;
|
|
165
|
+
case "scope.close":
|
|
166
|
+
lines.push(`scope#${event.scopeId} closed ${event.status}${event.error ? ` error=${formatUnknown(event.error)}` : ""}`);
|
|
167
|
+
break;
|
|
168
|
+
case "supervisor.child.restart":
|
|
169
|
+
lines.push(`supervisor#${event.supervisorId} restarting child#${event.childId} attempt=${event.restartCount} delay=${event.delayMs}ms${event.reason ? ` reason=${event.reason}` : ""}`);
|
|
170
|
+
break;
|
|
171
|
+
case "supervisor.child.escalate":
|
|
172
|
+
lines.push(`supervisor#${event.supervisorId} escalated child#${event.childId}${event.reason ? ` reason=${event.reason}` : ""}${event.error ? ` error=${formatUnknown(event.error)}` : ""}`);
|
|
173
|
+
break;
|
|
174
|
+
case "schedule.decision":
|
|
175
|
+
lines.push(`schedule${event.name ? ` "${event.name}"` : ""} attempt=${event.attempt} ${event.continue ? "continues" : "stops"} delay=${event.delayMs}ms elapsed=${Math.round(event.elapsedMs)}ms${event.reason ? ` reason=${event.reason}` : ""}`);
|
|
176
|
+
break;
|
|
177
|
+
case "log":
|
|
178
|
+
if (event.level === "warn" || event.level === "error") {
|
|
179
|
+
lines.push(`${event.level}: ${_nullishCoalesce(event.message, () => ( ""))}${event.fields ? ` ${JSON.stringify(event.fields)}` : ""}`);
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
case "span.start":
|
|
183
|
+
lines.push(`span started "${event.name}"${event.traceId ? ` trace=${event.traceId}` : ""}`);
|
|
184
|
+
break;
|
|
185
|
+
case "span.end":
|
|
186
|
+
lines.push(`span ended ${event.status}${event.name ? ` "${event.name}"` : ""}${event.error ? ` error=${formatUnknown(event.error)}` : ""}`);
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
for (const suspended of fiberSuspends.values()) {
|
|
193
|
+
lines.push(`fiber#${suspended.fiberId} still suspended for ${durationFromNowMs(suspended)} awaiting ${fiberSuspendReason(suspended)}`);
|
|
194
|
+
}
|
|
195
|
+
return lines.join("\n");
|
|
196
|
+
}
|
|
197
|
+
function durationMs(start, end) {
|
|
198
|
+
return `${Math.max(0, Math.round(end.wallTs - start.wallTs))}ms`;
|
|
199
|
+
}
|
|
200
|
+
function durationFromNowMs(start) {
|
|
201
|
+
return `${Math.max(0, Math.round(Date.now() - start.wallTs))}ms`;
|
|
202
|
+
}
|
|
203
|
+
function formatUnknown(value) {
|
|
204
|
+
if (_chunkMVGUEJ5Zcjs.Cause.isCause(value)) return _chunkMVGUEJ5Zcjs.Cause.pretty(value, { singleLine: true });
|
|
205
|
+
if (value instanceof Error) return value.message;
|
|
206
|
+
if (typeof value === "string") return value;
|
|
207
|
+
try {
|
|
208
|
+
return JSON.stringify(value);
|
|
209
|
+
} catch (e) {
|
|
210
|
+
return String(value);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function fiberSuspendReason(record) {
|
|
214
|
+
return record.type === "fiber.suspend" ? _nullishCoalesce(record.reason, () => ( "unknown")) : "unknown";
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
exports.makeFiberRef = makeFiberRef; exports.getFiberRef = getFiberRef; exports.setFiberRef = setFiberRef; exports.updateFiberRef = updateFiberRef; exports.modifyFiberRef = modifyFiberRef; exports.locallyFiberRef = locallyFiberRef; exports.locallyFiberRefWith = locallyFiberRefWith; exports.unsafeGetFiberRef = unsafeGetFiberRef; exports.unsafeSetFiberRef = unsafeSetFiberRef; exports.fiberRefSnapshot = fiberRefSnapshot; exports.makeRuntimeRecorder = makeRuntimeRecorder;
|