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.
Files changed (219) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +287 -23
  3. package/dist/agent/cli/main.cjs +38 -38
  4. package/dist/agent/cli/main.js +6 -6
  5. package/dist/agent/cli/main.mjs +6 -6
  6. package/dist/agent/index.cjs +7 -7
  7. package/dist/agent/index.d.ts +1 -1
  8. package/dist/agent/index.js +6 -6
  9. package/dist/agent/index.mjs +6 -6
  10. package/dist/chunk-2HQTDLHF.mjs +683 -0
  11. package/dist/chunk-36I3M4UC.mjs +370 -0
  12. package/dist/{chunk-QY5FKYEQ.js → chunk-3AYM6WPJ.js} +570 -51
  13. package/dist/chunk-3LOYJFRR.cjs +300 -0
  14. package/dist/chunk-3Y2RIUMM.js +300 -0
  15. package/dist/{chunk-7XOPAB5Q.js → chunk-4P2HHGAX.mjs} +83 -5
  16. package/dist/{chunk-N6VHMOWB.cjs → chunk-4ROBZFL6.cjs} +128 -128
  17. package/dist/{chunk-NC5SDRYE.js → chunk-52OB2ROS.js} +4 -4
  18. package/dist/{chunk-JX3LZQJH.cjs → chunk-52PPNNI4.cjs} +82 -20
  19. package/dist/{chunk-5YOQOXEQ.cjs → chunk-5EC274J5.cjs} +676 -293
  20. package/dist/chunk-5QC7LRZ3.js +229 -0
  21. package/dist/{chunk-7TL2LHQJ.js → chunk-5VRJNBLZ.mjs} +524 -141
  22. package/dist/chunk-62AZW6UT.cjs +313 -0
  23. package/dist/chunk-6IXXWIUM.js +683 -0
  24. package/dist/chunk-6RY2FFN4.mjs +2024 -0
  25. package/dist/chunk-74ZTY6CP.js +2871 -0
  26. package/dist/chunk-7CMJS3QE.mjs +2871 -0
  27. package/dist/{chunk-2WC63LJK.mjs → chunk-7JIJOVCT.js} +20 -10
  28. package/dist/chunk-7X3K5RMS.js +2024 -0
  29. package/dist/chunk-7ZPEZ57L.cjs +2024 -0
  30. package/dist/{chunk-FM4W4QPL.js → chunk-A2OM6NEH.mjs} +5 -4
  31. package/dist/chunk-AGR5B2BC.cjs +683 -0
  32. package/dist/chunk-B33ICAKP.js +313 -0
  33. package/dist/{chunk-J3H54ZRV.mjs → chunk-B5JD23U7.mjs} +1 -1
  34. package/dist/{chunk-F5EUMJL7.mjs → chunk-BKK77SBA.js} +83 -5
  35. package/dist/{chunk-U5KWK3PX.mjs → chunk-C3MDXTRZ.js} +11 -0
  36. package/dist/{chunk-SPUEME2B.cjs → chunk-CZIVE6NT.cjs} +12 -1
  37. package/dist/{chunk-TDVMADDN.js → chunk-DNFJLJMW.mjs} +11 -0
  38. package/dist/{chunk-XDZOO4L5.js → chunk-EJ6BPYVR.mjs} +79 -17
  39. package/dist/chunk-EOC4UHBS.mjs +229 -0
  40. package/dist/chunk-F6XWZQY4.cjs +777 -0
  41. package/dist/{chunk-7LVI2GIN.js → chunk-FH2X7BVP.js} +507 -72
  42. package/dist/{chunk-OOGJ73B6.js → chunk-FHQGHPMO.mjs} +20 -10
  43. package/dist/{chunk-WQ5QNU5R.cjs → chunk-GLE2WY7Z.cjs} +652 -217
  44. package/dist/{chunk-G6IQOE4P.mjs → chunk-GYM3LLGS.mjs} +507 -72
  45. package/dist/{chunk-TVN5I4U6.cjs → chunk-JF5WGYJJ.cjs} +25 -24
  46. package/dist/{chunk-CY33PGEX.mjs → chunk-KH4SYAOS.mjs} +570 -51
  47. package/dist/chunk-KN32XNTH.mjs +313 -0
  48. package/dist/chunk-KQLYONSE.cjs +2871 -0
  49. package/dist/{chunk-7HUOJA4W.cjs → chunk-KZJQ723N.cjs} +90 -80
  50. package/dist/{chunk-CCKHV5BT.mjs → chunk-L2SYFEBS.js} +5 -4
  51. package/dist/{chunk-IJT6RRQ5.cjs → chunk-L6VB5N7Q.cjs} +20 -9
  52. package/dist/{chunk-ZGLD4TVZ.mjs → chunk-MBEJI5HF.mjs} +4 -4
  53. package/dist/{chunk-PRWCB3QL.mjs → chunk-MIIYDLGM.js} +524 -141
  54. package/dist/{chunk-H55LI6WY.js → chunk-MOO4L7F4.mjs} +15 -4
  55. package/dist/chunk-MVGUEJ5Z.cjs +370 -0
  56. package/dist/chunk-PD4EJTQC.cjs +229 -0
  57. package/dist/chunk-PWC3RBQE.mjs +300 -0
  58. package/dist/{chunk-MWXMNYJS.cjs → chunk-Q2I37RP3.cjs} +643 -124
  59. package/dist/{chunk-VFIUZG7J.mjs → chunk-RKGKFN2A.js} +79 -17
  60. package/dist/{chunk-NYL4D7SK.cjs → chunk-SA6HUJVI.cjs} +5 -5
  61. package/dist/chunk-SK7UZRNI.mjs +777 -0
  62. package/dist/{chunk-K2T3DV26.mjs → chunk-TRM4JUZQ.js} +15 -4
  63. package/dist/chunk-UB4B6OFY.js +370 -0
  64. package/dist/{chunk-G3XGCZDQ.js → chunk-UCUBNWM2.js} +1 -1
  65. package/dist/chunk-VWIPB6I5.js +777 -0
  66. package/dist/{chunk-JNFRRJYH.cjs → chunk-WBGRHGBP.cjs} +270 -192
  67. package/dist/{client-CtFmoDvM.d.ts → client-CZHU674n.d.ts} +211 -36
  68. package/dist/core/index.cjs +135 -9
  69. package/dist/core/index.d.ts +238 -33
  70. package/dist/core/index.js +155 -29
  71. package/dist/core/index.mjs +155 -29
  72. package/dist/{effect-CGNl5Rqp.d.ts → effect-DIUHZ9IN.d.ts} +89 -1
  73. package/dist/effectRunner-CFLC32IK.cjs +8 -0
  74. package/dist/{effectRunner-A4CHJXJI.js → effectRunner-L4S7IPT3.js} +2 -2
  75. package/dist/{effectRunner-OPUF6QRN.mjs → effectRunner-NNGG75QA.mjs} +2 -2
  76. package/dist/http/index.cjs +324 -2986
  77. package/dist/http/index.d.ts +54 -68
  78. package/dist/http/index.js +238 -2900
  79. package/dist/http/index.mjs +238 -2900
  80. package/dist/http/testing.cjs +14 -12
  81. package/dist/http/testing.d.ts +5 -4
  82. package/dist/http/testing.js +10 -8
  83. package/dist/http/testing.mjs +10 -8
  84. package/dist/index.cjs +423 -255
  85. package/dist/index.d.ts +87 -69
  86. package/dist/index.js +301 -133
  87. package/dist/index.mjs +301 -133
  88. package/dist/observability/index.cjs +18 -531
  89. package/dist/observability/index.d.ts +81 -8
  90. package/dist/observability/index.js +25 -538
  91. package/dist/observability/index.mjs +25 -538
  92. package/dist/perf/cli.cjs +401 -0
  93. package/dist/perf/cli.d.ts +1 -0
  94. package/dist/perf/cli.js +401 -0
  95. package/dist/perf/cli.mjs +401 -0
  96. package/dist/perf/index.cjs +141 -0
  97. package/dist/perf/index.d.ts +483 -0
  98. package/dist/perf/index.js +141 -0
  99. package/dist/perf/index.mjs +141 -0
  100. package/dist/schedule-CK3Ml_7p.d.ts +259 -0
  101. package/dist/schema/index.cjs +6 -2
  102. package/dist/schema/index.d.ts +3 -1
  103. package/dist/schema/index.js +5 -1
  104. package/dist/schema/index.mjs +5 -1
  105. package/dist/{server-C8hDXA74.d.ts → server-D6JZ15_e.d.ts} +16 -4
  106. package/dist/{stream-dvSs0QS5.d.ts → stream-B4oK9JFP.d.ts} +1 -1
  107. package/dist/{tracer-B5tRH9H7.d.ts → tracer-Hwt1cl7h.d.ts} +13 -54
  108. package/dist/{tracing-Dt9S_6V8.d.ts → tracing-DqbTKGcf.d.ts} +1 -1
  109. package/docs/ARCHITECTURE.md +292 -0
  110. package/docs/README.md +65 -0
  111. package/docs/adr/0001-ai-context-pack.md +32 -0
  112. package/docs/agent-apply-mode.md +104 -0
  113. package/docs/agent-approvals.md +110 -0
  114. package/docs/agent-batch.md +185 -0
  115. package/docs/agent-boundaries.md +112 -0
  116. package/docs/agent-chat-sessions.md +160 -0
  117. package/docs/agent-ci.md +17 -0
  118. package/docs/agent-cli.md +405 -0
  119. package/docs/agent-config.md +480 -0
  120. package/docs/agent-context-discovery.md +159 -0
  121. package/docs/agent-copilot-like-dx.md +126 -0
  122. package/docs/agent-declarative-optimized-planning.md +138 -0
  123. package/docs/agent-dx.md +224 -0
  124. package/docs/agent-env-files.md +126 -0
  125. package/docs/agent-follow-up-context.md +43 -0
  126. package/docs/agent-global-usage.md +180 -0
  127. package/docs/agent-init.md +109 -0
  128. package/docs/agent-install-and-configure.md +516 -0
  129. package/docs/agent-language-workspace-ux.md +99 -0
  130. package/docs/agent-llm-adapters.md +123 -0
  131. package/docs/agent-local-install.md +190 -0
  132. package/docs/agent-local-tests.md +51 -0
  133. package/docs/agent-observability.md +155 -0
  134. package/docs/agent-patch-quality-loop.md +162 -0
  135. package/docs/agent-presets.md +22 -0
  136. package/docs/agent-project-commands.md +237 -0
  137. package/docs/agent-project-intelligence.md +156 -0
  138. package/docs/agent-redaction.md +18 -0
  139. package/docs/agent-release-readiness.md +76 -0
  140. package/docs/agent-rollback-safety.md +162 -0
  141. package/docs/agent-rollback.md +23 -0
  142. package/docs/agent-run-artifacts.md +16 -0
  143. package/docs/agent-vscode-auto-discovery.md +137 -0
  144. package/docs/agent-vscode-batch-runner.md +100 -0
  145. package/docs/agent-vscode-chat-layout.md +90 -0
  146. package/docs/agent-vscode-clean-install.md +147 -0
  147. package/docs/agent-vscode-code-actions.md +70 -0
  148. package/docs/agent-vscode-diff-preview.md +45 -0
  149. package/docs/agent-vscode-inline-assist.md +56 -0
  150. package/docs/agent-vscode-install.md +186 -0
  151. package/docs/agent-vscode-model-setup.md +97 -0
  152. package/docs/agent-vscode-patch-preview.md +92 -0
  153. package/docs/agent-vscode-problems.md +79 -0
  154. package/docs/agent-vscode-project-dashboard.md +106 -0
  155. package/docs/agent-vscode-run-history.md +92 -0
  156. package/docs/agent-vscode-ux.md +73 -0
  157. package/docs/ai/INVARIANTS.md +84 -0
  158. package/docs/ai/PROJECT_MAP.md +338 -0
  159. package/docs/ai/PUBLIC_API.md +339 -0
  160. package/docs/ai/VALIDATION_MATRIX.md +67 -0
  161. package/docs/api-polish.md +37 -0
  162. package/docs/cancellation.md +162 -0
  163. package/docs/coverage.md +46 -0
  164. package/docs/framework-integrations.md +38 -0
  165. package/docs/frameworks/angular.md +153 -0
  166. package/docs/frameworks/express.md +125 -0
  167. package/docs/frameworks/fastify.md +124 -0
  168. package/docs/frameworks/nestjs.md +282 -0
  169. package/docs/frameworks/nextjs.md +147 -0
  170. package/docs/frameworks/react.md +139 -0
  171. package/docs/frameworks/vanilla.md +224 -0
  172. package/docs/getting-started.md +159 -0
  173. package/docs/guides/README.md +40 -0
  174. package/docs/guides/circuit-breaker.md +89 -0
  175. package/docs/guides/error-handling.md +91 -0
  176. package/docs/guides/getting-started.md +107 -0
  177. package/docs/guides/layers.md +189 -0
  178. package/docs/guides/metrics.md +101 -0
  179. package/docs/guides/resource-management.md +141 -0
  180. package/docs/guides/retry.md +215 -0
  181. package/docs/guides/semaphore.md +66 -0
  182. package/docs/guides/streams.md +117 -0
  183. package/docs/guides/supervisors.md +98 -0
  184. package/docs/guides/testing.md +162 -0
  185. package/docs/guides/tracing.md +71 -0
  186. package/docs/http-recipes.md +399 -0
  187. package/docs/http.md +749 -0
  188. package/docs/modules.md +285 -0
  189. package/docs/nestjs.md +6 -0
  190. package/docs/observability-collector-smoke.md +31 -0
  191. package/docs/observability-framework-examples.md +110 -0
  192. package/docs/observability.md +649 -0
  193. package/docs/otel-collector-smoke.yaml +27 -0
  194. package/docs/performance-profiler.md +199 -0
  195. package/docs/production-readiness.md +73 -0
  196. package/docs/recipes/README.md +12 -0
  197. package/docs/recipes/http-server.md +45 -0
  198. package/docs/recipes/layers.md +44 -0
  199. package/docs/recipes/performance.md +47 -0
  200. package/docs/recipes/runtime.md +41 -0
  201. package/docs/recipes/testing.md +41 -0
  202. package/docs/release.md +53 -0
  203. package/docs/wasm-bounded-queues.md +44 -0
  204. package/docs/wasm-engine-observability-benchmarks.md +85 -0
  205. package/docs/wasm-fiber-engine.md +117 -0
  206. package/docs/wasm-scheduler-state-machine.md +122 -0
  207. package/docs/wasm-stream-chunks.md +54 -0
  208. package/package.json +22 -2
  209. package/dist/chunk-45F7OKGT.cjs +0 -104
  210. package/dist/chunk-7V4KY4RL.mjs +0 -104
  211. package/dist/chunk-DJQ7OMMB.cjs +0 -144
  212. package/dist/chunk-GOV47PPB.mjs +0 -552
  213. package/dist/chunk-JF4XXPZ5.cjs +0 -552
  214. package/dist/chunk-KCPT2D6G.js +0 -552
  215. package/dist/chunk-NOYZIMUJ.mjs +0 -144
  216. package/dist/chunk-PNVFW245.js +0 -144
  217. package/dist/chunk-ROJC3NBJ.js +0 -104
  218. package/dist/effectRunner-3ZHAD3LE.cjs +0 -8
  219. package/dist/schedule-Fque9Abz.d.ts +0 -70
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Cause
3
- } from "./chunk-NOYZIMUJ.mjs";
3
+ } from "./chunk-UB4B6OFY.js";
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._tag === "Fail") {
63
- run(current.onFailure(exit.cause.error), cont);
64
- return;
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
+ // 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 = options.indent ?? " ";
109
+ const renderError = options.renderError ?? ((error) => formatCauseValue(error));
110
+ const renderDefect = 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 {
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
+ export {
334
+ Async,
335
+ asyncFold,
336
+ asyncCatchAll,
337
+ asyncMapError,
338
+ unit,
339
+ asyncSucceed,
340
+ asyncFail,
341
+ asyncSync,
342
+ asyncTotal,
343
+ asyncEffect,
344
+ asyncMap,
345
+ asyncFlatMap,
346
+ acquireRelease,
347
+ asyncInterruptible,
348
+ withAsyncPromise,
349
+ mapAsync,
350
+ mapTryAsync,
351
+ none,
352
+ some,
353
+ Cause,
354
+ isCause,
355
+ prettyCause,
356
+ formatCause,
357
+ Exit,
358
+ succeed,
359
+ fail,
360
+ sync,
361
+ map,
362
+ flatMap,
363
+ mapError,
364
+ catchAll,
365
+ uninterruptible,
366
+ interruptible,
367
+ uninterruptibleMask,
368
+ orElseOptional,
369
+ end
370
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  asyncEffect
3
- } from "./chunk-PNVFW245.js";
3
+ } from "./chunk-UB4B6OFY.js";
4
4
 
5
5
  // src/core/stream/structuredConcurrency.ts
6
6
  function race(left, right, parentScope) {