brass-runtime 1.15.0 → 1.16.1
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 +673 -136
- package/dist/agent/cli/main.cjs +40 -35
- package/dist/agent/cli/main.js +9 -4
- package/dist/agent/cli/main.mjs +9 -4
- package/dist/agent/index.cjs +8 -4
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.js +7 -3
- package/dist/agent/index.mjs +7 -3
- package/dist/chunk-2HQTDLHF.mjs +683 -0
- package/dist/chunk-36I3M4UC.mjs +370 -0
- package/dist/chunk-3AYM6WPJ.js +1629 -0
- package/dist/chunk-3LOYJFRR.cjs +300 -0
- package/dist/chunk-3RG5ZIWI.js +10 -0
- package/dist/chunk-3Y2RIUMM.js +300 -0
- package/dist/{chunk-VEZNF5GZ.cjs → chunk-4ROBZFL6.cjs} +130 -126
- package/dist/{chunk-3QMOKAS5.js → chunk-52OB2ROS.js} +9 -5
- package/dist/chunk-52PPNNI4.cjs +416 -0
- package/dist/chunk-5EC274J5.cjs +2874 -0
- package/dist/chunk-5QC7LRZ3.js +229 -0
- package/dist/chunk-5VRJNBLZ.mjs +2874 -0
- package/dist/chunk-62AZW6UT.cjs +313 -0
- package/dist/chunk-6IXXWIUM.js +683 -0
- package/dist/chunk-74ZTY6CP.js +2871 -0
- package/dist/chunk-76YMRMH2.cjs +777 -0
- package/dist/chunk-7CMJS3QE.mjs +2871 -0
- package/dist/{chunk-4NHES7VK.mjs → chunk-7JIJOVCT.js} +27 -13
- package/dist/chunk-A2OM6NEH.mjs +194 -0
- package/dist/chunk-AGR5B2BC.cjs +683 -0
- package/dist/chunk-AVNQLJ5V.js +777 -0
- package/dist/chunk-B33ICAKP.js +313 -0
- package/dist/{chunk-ELOOF35R.mjs → chunk-B5JD23U7.mjs} +1 -1
- package/dist/chunk-BABBZK4Y.js +2024 -0
- package/dist/chunk-C3MDXTRZ.js +354 -0
- package/dist/chunk-CIZFIMK5.js +2193 -0
- package/dist/chunk-CZIVE6NT.cjs +354 -0
- package/dist/chunk-DNFJLJMW.mjs +354 -0
- package/dist/chunk-DNFO2EIZ.mjs +777 -0
- package/dist/chunk-EJ6BPYVR.mjs +416 -0
- package/dist/chunk-ENKODRU3.cjs +2193 -0
- package/dist/chunk-EOC4UHBS.mjs +229 -0
- package/dist/{chunk-BMH5AV44.js → chunk-FH2X7BVP.js} +756 -440
- package/dist/{chunk-PPUXIH5R.js → chunk-FHQGHPMO.mjs} +27 -13
- package/dist/{chunk-TGIFUAK4.cjs → chunk-GLE2WY7Z.cjs} +951 -635
- package/dist/{chunk-BDF4AMWX.mjs → chunk-GYM3LLGS.mjs} +756 -440
- package/dist/chunk-HLWLMW2F.mjs +2024 -0
- package/dist/chunk-JF5WGYJJ.cjs +194 -0
- package/dist/chunk-KH4SYAOS.mjs +1629 -0
- package/dist/chunk-KN32XNTH.mjs +313 -0
- package/dist/chunk-KQLYONSE.cjs +2871 -0
- package/dist/{chunk-STVLQ3XD.cjs → chunk-KZJQ723N.cjs} +92 -78
- package/dist/chunk-L2SYFEBS.js +194 -0
- package/dist/chunk-L6VB5N7Q.cjs +104 -0
- package/dist/{chunk-K6M7MDZ4.mjs → chunk-MBEJI5HF.mjs} +9 -5
- package/dist/chunk-MIIYDLGM.js +2874 -0
- package/dist/chunk-MOO4L7F4.mjs +104 -0
- package/dist/chunk-MT3OWDPC.mjs +2193 -0
- package/dist/chunk-MVGUEJ5Z.cjs +370 -0
- package/dist/chunk-OBGZSXTJ.cjs +10 -0
- package/dist/chunk-PD4EJTQC.cjs +229 -0
- package/dist/chunk-PWC3RBQE.mjs +300 -0
- package/dist/chunk-Q2I37RP3.cjs +1629 -0
- package/dist/chunk-RKGKFN2A.js +416 -0
- package/dist/{chunk-R3R2FVLG.cjs → chunk-SA6HUJVI.cjs} +5 -5
- package/dist/chunk-TRM4JUZQ.js +104 -0
- package/dist/chunk-UB4B6OFY.js +370 -0
- package/dist/{chunk-TO7IKXYT.js → chunk-UCUBNWM2.js} +1 -1
- package/dist/chunk-VN44DYYT.cjs +2024 -0
- package/dist/chunk-Y6FXYEAI.mjs +10 -0
- package/dist/client-CZHU674n.d.ts +820 -0
- package/dist/core/index.cjs +198 -4
- package/dist/core/index.d.ts +311 -212
- package/dist/core/index.js +237 -43
- package/dist/core/index.mjs +237 -43
- package/dist/{effect-CMOQKX8y.d.ts → effect-DIUHZ9IN.d.ts} +195 -1
- package/dist/effectRunner-CFLC32IK.cjs +8 -0
- package/dist/effectRunner-L4S7IPT3.js +8 -0
- package/dist/effectRunner-NNGG75QA.mjs +8 -0
- package/dist/http/index.cjs +1227 -2971
- package/dist/http/index.d.ts +826 -280
- package/dist/http/index.js +1089 -2833
- package/dist/http/index.mjs +1089 -2833
- package/dist/http/testing.cjs +161 -0
- package/dist/http/testing.d.ts +43 -0
- package/dist/http/testing.js +161 -0
- package/dist/http/testing.mjs +161 -0
- package/dist/index.cjs +486 -250
- package/dist/index.d.ts +87 -95
- package/dist/index.js +391 -155
- package/dist/index.mjs +391 -155
- package/dist/observability/index.cjs +162 -0
- package/dist/observability/index.d.ts +152 -0
- package/dist/observability/index.js +162 -0
- package/dist/observability/index.mjs +162 -0
- 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 +29 -0
- package/dist/schema/index.d.ts +179 -0
- package/dist/schema/index.js +29 -0
- package/dist/schema/index.mjs +29 -0
- package/dist/server-GJPg8ZSG.d.ts +675 -0
- package/dist/{stream-FQm9h4Mg.d.ts → stream-B4oK9JFP.d.ts} +1 -1
- package/dist/tracer-Hwt1cl7h.d.ts +189 -0
- package/dist/tracing-DqbTKGcf.d.ts +148 -0
- package/docs/ARCHITECTURE.md +292 -0
- package/docs/README.md +63 -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 +336 -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/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/observability-collector-smoke.md +31 -0
- package/docs/observability-framework-examples.md +98 -0
- package/docs/observability.md +542 -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 +48 -2
- package/dist/chunk-AR22SXML.js +0 -1043
- package/dist/chunk-BDYEENHT.js +0 -224
- package/dist/chunk-JFPU5GQI.mjs +0 -1043
- package/dist/chunk-MS34J5LY.cjs +0 -224
- package/dist/chunk-UMAZLXAB.mjs +0 -224
- package/dist/chunk-XPZNXSVN.cjs +0 -1043
- package/dist/tracing-DNT9jEbr.d.ts +0 -106
package/dist/core/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { A as Async, E as Exit,
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
1
|
+
import { A as Async, h as RuntimeOptions, f as Runtime, E as Exit, aI as Task, ax as ScheduleResult, aC as SchedulerStats, R as RuntimeHooks, d as RuntimeEventRecord, g as RuntimeRegistry, k as Fiber } from '../effect-DIUHZ9IN.js';
|
|
2
|
+
export { u as AbortablePromiseFinish, v as AbortablePromiseLabelStats, w as AbortablePromiseOptions, x as AbortablePromiseOutcome, y as AbortablePromiseStats, C as AsyncWithPromise, G as CancelToken, H as Canceler, I as Cause, K as CausePrettyOptions, L as ContextNode, _ as FiberContext, l as FiberId, a0 as FiberInfo, a4 as FiberRunState, m as FiberStatus, ag as Interrupted, ah as InterruptibilityMode, J as JSONValue, ak as None, al as NoopHooks, O as Option, ar as RestoreInterruptibility, a as RuntimeEmitContext, c as RuntimeEvent, i as RuntimeFiber, e as RuntimeSpanLink, S as Scope, aE as ScopeId, aF as ScopeInfo, aG as Some, T as TraceContext, Z as ZIO, aL as abortablePromiseStats, aM as acquireRelease, aN as async, aO as asyncCatchAll, aP as asyncFail, aQ as asyncFlatMap, aR as asyncFold, aS as asyncInterruptible, aT as asyncMap, aU as asyncMapError, aV as asyncSucceed, aW as asyncSync, aX as asyncTotal, aY as catchAll, aZ as ctxExtend, a_ as ctxToObject, a$ as emptyContext, b0 as end, b2 as fail, b3 as flatMap, b4 as fork, b5 as formatCause, b6 as fromPromiseAbortable, b7 as getBenchmarkBudget, b8 as getCurrentFiber, bb as interruptible, bc as isCause, be as linkAbortController, bg as makeCancelToken, bi as makeRuntimeEventRecord, bj as map, bk as mapAsync, bl as mapError, bm as mapTryAsync, bn as none, bo as orElseOptional, bp as prettyCause, bq as resetAbortablePromiseStats, bs as runtimeEventRecordContext, bt as runtimeForCaller, bw as setBenchmarkBudget, bx as some, by as succeed, bz as sync, bA as toPromise, bB as toPromiseByCaller, bC as uninterruptible, bD as uninterruptibleMask, bE as unit, bF as unsafeGetCurrentRuntime, bG as unsafeRunAsync, bH as unsafeRunFoldWithEnv, bI as withAsyncPromise, bJ as withCurrentFiber, bK as withScope, bL as withScopeAsync } from '../effect-DIUHZ9IN.js';
|
|
3
|
+
export { M as ManagedResource, R as Resource, R as ResourceDescriptor, S as Span, a as SpanContext, b as SpanEvent, c as SpanStatus, T as Tracer, d as TracerConfig, e as bracket, f as ensuring, m as makeResource, g as makeTracer, h as managed, i as managedAll, r as resource, j as resourceAll, k as resourceFromManaged, l as resourceSucceed, u as useManaged, n as useResource } from '../tracing-DqbTKGcf.js';
|
|
4
|
+
import { R as RuntimeClock, g as RuntimeTimerId, f as RuntimeClockEnv, S as Schedule } from '../schedule-CK3Ml_7p.js';
|
|
5
|
+
export { c as CircuitBreaker, d as CircuitBreakerConfig, C as CircuitBreakerError, e as CircuitBreakerState, b as CircuitBreakerStats, h as ScheduleDecision, i as ScheduleDriver, j as ScheduleDriverDecision, k as ScheduleDriverOptions, l as ScheduleDriverSnapshot, a as ScheduleObserver, m as ScheduleObserverEvent, n as ScheduleStepContext, o as andThenSchedule, p as contramapSchedule, q as elapsed, r as exponential, s as fibonacci, t as fixed, u as forever, v as intersect, w as jitter, x as jittered, y as jitteredSchedule, z as linear, A as liveClock, B as makeCircuitBreaker, D as makeScheduleDriver, E as mapSchedule, F as maxDelay, G as maxElapsed, H as namedSchedule, I as never, J as once, K as pollWithSchedule, L as recurs, M as repeatWithSchedule, N as repeatWithScheduleAlias, O as retryWithSchedule, P as retryWithScheduleAlias, Q as runSchedule, T as runtimeClockFromEnv, U as scheduleDriver, V as spaced, W as takeSchedule, X as tapDecision, Y as union, Z as untilInput, _ as untilOutput, $ as upTo, a0 as whileInput, a1 as whileOutput, a2 as windowed } from '../schedule-CK3Ml_7p.js';
|
|
6
|
+
export { B as BrassEnv, C as Counter, E as EventBus, f as EventBusOptions, g as EventHandler, G as Gauge, H as Histogram, h as HistogramBuckets, I as InMemoryTracer, e as InMemoryTracerOptions, i as InMemoryTracerStats, a as MetricExemplar, b as MetricSnapshot, j as MetricType, k as MetricValue, M as MetricsRegistry, R as RuntimeSpan, l as RuntimeSpanEvent, d as RuntimeTraceIdGenerator, m as defaultTracer, n as makeMetrics, r as runtimeHooksToEventHandler } from '../tracer-Hwt1cl7h.js';
|
|
4
7
|
|
|
5
8
|
type TimeoutError = {
|
|
6
9
|
readonly _tag: "TimeoutError";
|
|
@@ -67,73 +70,29 @@ declare function retryWithBackoff<R, E, A>(effect: Async<R, E, A>, opts?: {
|
|
|
67
70
|
shouldRetry?: (error: unknown, attempt: number) => boolean;
|
|
68
71
|
}): Async<R, E, A>;
|
|
69
72
|
|
|
73
|
+
type EffectSuccess<T> = T extends Async<any, any, infer A> ? A : never;
|
|
74
|
+
type EffectFailure<T> = T extends Async<any, infer E, any> ? E : never;
|
|
75
|
+
type EffectEnvironment<T> = T extends Async<infer R, any, any> ? R : never;
|
|
76
|
+
type MakeRuntimeOptions<R> = Omit<RuntimeOptions<R>, "env">;
|
|
70
77
|
/**
|
|
71
|
-
*
|
|
78
|
+
* Create a runtime with a compact options shape.
|
|
72
79
|
*
|
|
73
|
-
*
|
|
74
|
-
* - `use` runs with the acquired resource
|
|
75
|
-
* - `release` runs after `use` completes (success, failure, or interruption)
|
|
76
|
-
*
|
|
77
|
-
* ```ts
|
|
78
|
-
* const result = bracket(
|
|
79
|
-
* openConnection(), // acquire
|
|
80
|
-
* (conn) => queryDatabase(conn), // use
|
|
81
|
-
* (conn, exit) => conn.close() // release (always runs)
|
|
82
|
-
* );
|
|
83
|
-
* ```
|
|
84
|
-
*/
|
|
85
|
-
declare function bracket<R, E, A, B>(acquire: Async<R, E, A>, use: (resource: A) => Async<R, E, B>, release: (resource: A, exit: Exit<E, B>) => Async<R, any, void>): Async<R, E, B>;
|
|
86
|
-
/**
|
|
87
|
-
* Runs `effect` and then runs `finalizer` regardless of the outcome.
|
|
88
|
-
* The finalizer receives the exit value for inspection.
|
|
89
|
-
*
|
|
90
|
-
* ```ts
|
|
91
|
-
* const result = ensuring(
|
|
92
|
-
* doWork(),
|
|
93
|
-
* (exit) => logCompletion(exit)
|
|
94
|
-
* );
|
|
95
|
-
* ```
|
|
80
|
+
* This is an additive DX helper over `new Runtime({ env, ...options })`.
|
|
96
81
|
*/
|
|
97
|
-
declare function
|
|
82
|
+
declare function makeRuntime<R extends object = {}>(env?: R, options?: MakeRuntimeOptions<R>): Runtime<R>;
|
|
98
83
|
/**
|
|
99
|
-
*
|
|
100
|
-
* It can be used multiple times — each `use` call acquires a fresh instance.
|
|
101
|
-
*
|
|
102
|
-
* ```ts
|
|
103
|
-
* const dbPool = managed(
|
|
104
|
-
* createPool({ max: 10 }),
|
|
105
|
-
* (pool) => pool.close()
|
|
106
|
-
* );
|
|
84
|
+
* Run an effect and resolve with its success value.
|
|
107
85
|
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
* ```
|
|
111
|
-
*/
|
|
112
|
-
type Managed<R, E, A> = {
|
|
113
|
-
readonly _tag: "Managed";
|
|
114
|
-
readonly acquire: Async<R, E, A>;
|
|
115
|
-
readonly release: (resource: A, exit: Exit<any, any>) => Async<R, any, void>;
|
|
116
|
-
};
|
|
117
|
-
/**
|
|
118
|
-
* Creates a Managed resource descriptor.
|
|
86
|
+
* Accepts either a plain environment or an existing Runtime. For advanced
|
|
87
|
+
* lifecycle/hooks/scheduler behavior, pass the Runtime explicitly.
|
|
119
88
|
*/
|
|
120
|
-
declare function
|
|
89
|
+
declare function runPromise<R, E, A>(effect: Async<R, E, A>, envOrRuntime?: R | Runtime<R>): Promise<A>;
|
|
121
90
|
/**
|
|
122
|
-
*
|
|
91
|
+
* Run an effect and resolve with the full Exit, preserving typed failures and
|
|
92
|
+
* Cause structure instead of throwing/rejecting.
|
|
123
93
|
*/
|
|
124
|
-
declare function
|
|
125
|
-
|
|
126
|
-
* Combines multiple Managed resources. All are acquired in order,
|
|
127
|
-
* and released in reverse order (LIFO).
|
|
128
|
-
*
|
|
129
|
-
* ```ts
|
|
130
|
-
* const resources = managedAll([dbPool, cacheConn, fileHandle]);
|
|
131
|
-
* const result = useManaged(resources, ([db, cache, file]) => ...);
|
|
132
|
-
* ```
|
|
133
|
-
*/
|
|
134
|
-
declare function managedAll<R, E, Resources extends readonly any[]>(manageds: {
|
|
135
|
-
[K in keyof Resources]: Managed<R, E, Resources[K]>;
|
|
136
|
-
}): Managed<R, E, Resources>;
|
|
94
|
+
declare function runExit<R, E, A>(effect: Async<R, E, A>, envOrRuntime?: R | Runtime<R>): Promise<Exit<E, A>>;
|
|
95
|
+
declare const runEffect: typeof runPromise;
|
|
137
96
|
|
|
138
97
|
type Semaphore = {
|
|
139
98
|
/** Current number of available permits. */
|
|
@@ -209,52 +168,28 @@ declare function makeRef<A>(initial: A): Ref<A>;
|
|
|
209
168
|
*/
|
|
210
169
|
declare function derivedRef<A, B>(parent: Ref<A>, get: (a: A) => B, set: (a: A, b: B) => A): Ref<B>;
|
|
211
170
|
|
|
212
|
-
type
|
|
213
|
-
readonly
|
|
214
|
-
readonly
|
|
171
|
+
type FiberRef<A> = {
|
|
172
|
+
readonly id: number;
|
|
173
|
+
readonly initial: A;
|
|
174
|
+
readonly get: () => Async<unknown, never, A>;
|
|
175
|
+
readonly set: (value: A) => Async<unknown, never, void>;
|
|
176
|
+
readonly update: (f: (current: A) => A) => Async<unknown, never, A>;
|
|
177
|
+
readonly modify: <B>(f: (current: A) => [B, A]) => Async<unknown, never, B>;
|
|
178
|
+
readonly locally: <R, E, B>(value: A, effect: Async<R, E, B>) => Async<R, E, B>;
|
|
179
|
+
readonly locallyWith: <R, E, B>(f: (current: A) => A, effect: Async<R, E, B>) => Async<R, E, B>;
|
|
180
|
+
readonly unsafeGet: () => A;
|
|
181
|
+
readonly unsafeSet: (value: A) => void;
|
|
215
182
|
};
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
};
|
|
227
|
-
/** Retry/repeat up to N times with no delay. */
|
|
228
|
-
declare function recurs(n: number): Schedule<unknown, number>;
|
|
229
|
-
/** Fixed delay between each retry/repeat. */
|
|
230
|
-
declare function fixed(delayMs: number): Schedule<unknown, number>;
|
|
231
|
-
/** Exponential backoff: delay doubles each time, capped at maxDelayMs. */
|
|
232
|
-
declare function exponential(baseMs: number, maxMs?: number): Schedule<unknown, number>;
|
|
233
|
-
/** Exponential backoff with full jitter (random in [0, delay]). */
|
|
234
|
-
declare function jittered(baseMs: number, maxMs?: number): Schedule<unknown, number>;
|
|
235
|
-
/** Stop after a total elapsed time. */
|
|
236
|
-
declare function elapsed(maxMs: number): Schedule<unknown, number>;
|
|
237
|
-
/** Only continue while a predicate holds on the input. */
|
|
238
|
-
declare function whileInput<I>(pred: (input: I) => boolean): Schedule<I, I>;
|
|
239
|
-
/** Limit a schedule to N repetitions. */
|
|
240
|
-
declare function take<I, O>(schedule: Schedule<I, O>, n: number): Schedule<I, O>;
|
|
241
|
-
/** Compose two schedules: use the first, then switch to the second. */
|
|
242
|
-
declare function andThen<I, O1, O2>(first: Schedule<I, O1>, second: Schedule<I, O2>): Schedule<I, O1 | O2>;
|
|
243
|
-
/** Run both schedules and continue while BOTH say continue. Use max delay. */
|
|
244
|
-
declare function intersect<I, O1, O2>(left: Schedule<I, O1>, right: Schedule<I, O2>): Schedule<I, [O1, O2]>;
|
|
245
|
-
/** Run both schedules and continue while EITHER says continue. Use min delay. */
|
|
246
|
-
declare function union<I, O1, O2>(left: Schedule<I, O1>, right: Schedule<I, O2>): Schedule<I, [O1, O2]>;
|
|
247
|
-
/**
|
|
248
|
-
* Retry an effect according to a schedule.
|
|
249
|
-
* The schedule receives the error as input on each failure.
|
|
250
|
-
*/
|
|
251
|
-
declare function retryWithSchedule<R, E, A, O>(effect: Async<R, E, A>, schedule: Schedule<E, O>): Async<R, E, A>;
|
|
252
|
-
/**
|
|
253
|
-
* Repeat an effect according to a schedule.
|
|
254
|
-
* The schedule receives the success value as input on each iteration.
|
|
255
|
-
* Returns the last successful value.
|
|
256
|
-
*/
|
|
257
|
-
declare function repeatWithSchedule<R, E, A, O>(effect: Async<R, E, A>, schedule: Schedule<A, O>): Async<R, E, A>;
|
|
183
|
+
declare function makeFiberRef<A>(initial: A): FiberRef<A>;
|
|
184
|
+
declare function getFiberRef<A>(ref: FiberRef<A>): Async<unknown, never, A>;
|
|
185
|
+
declare function setFiberRef<A>(ref: FiberRef<A>, value: A): Async<unknown, never, void>;
|
|
186
|
+
declare function updateFiberRef<A>(ref: FiberRef<A>, f: (current: A) => A): Async<unknown, never, A>;
|
|
187
|
+
declare function modifyFiberRef<A, B>(ref: FiberRef<A>, f: (current: A) => [B, A]): Async<unknown, never, B>;
|
|
188
|
+
declare function locallyFiberRef<R, E, A, B>(ref: FiberRef<A>, value: A, effect: Async<R, E, B>): Async<R, E, B>;
|
|
189
|
+
declare function locallyFiberRefWith<R, E, A, B>(ref: FiberRef<A>, f: (current: A) => A, effect: Async<R, E, B>): Async<R, E, B>;
|
|
190
|
+
declare function unsafeGetFiberRef<A>(ref: FiberRef<A>): A;
|
|
191
|
+
declare function unsafeSetFiberRef<A>(ref: FiberRef<A>, value: A): void;
|
|
192
|
+
declare function fiberRefSnapshot(): ReadonlyMap<number, unknown>;
|
|
258
193
|
|
|
259
194
|
type ShutdownConfig = {
|
|
260
195
|
/** Max time to wait for in-flight work to complete. Default: 30000ms */
|
|
@@ -304,24 +239,92 @@ declare function gracefulShutdown<R>(runtime: Runtime<R>, config?: ShutdownConfi
|
|
|
304
239
|
declare function registerShutdownHooks<R>(runtime: Runtime<R>, config?: ShutdownConfig): () => void;
|
|
305
240
|
|
|
306
241
|
type TestRuntimeOptions = {
|
|
307
|
-
/**
|
|
242
|
+
/** Back-compat alias for autoFlush. When false, scheduled tasks only run when flushed. */
|
|
308
243
|
readonly synchronous?: boolean;
|
|
244
|
+
/** Automatically flush scheduled tasks in a microtask. Default: true. */
|
|
245
|
+
readonly autoFlush?: boolean;
|
|
246
|
+
/** Initial virtual clock time in milliseconds. Default: 0. */
|
|
247
|
+
readonly initialTimeMs?: number;
|
|
248
|
+
/** Safety limit for flushAll/runAllTimers. Default: 10_000. */
|
|
249
|
+
readonly maxSteps?: number;
|
|
250
|
+
};
|
|
251
|
+
type TestScheduledTask = {
|
|
252
|
+
readonly tag: string;
|
|
253
|
+
readonly run: Task;
|
|
254
|
+
};
|
|
255
|
+
declare class TestScheduler {
|
|
256
|
+
private readonly options;
|
|
257
|
+
private readonly queue;
|
|
258
|
+
private readonly maxSteps;
|
|
259
|
+
private autoFlushScheduled;
|
|
260
|
+
private flushing;
|
|
261
|
+
private enqueuedTasks;
|
|
262
|
+
private executedTasks;
|
|
263
|
+
private droppedTasks;
|
|
264
|
+
private scheduledFlushes;
|
|
265
|
+
private completedFlushes;
|
|
266
|
+
constructor(options?: Pick<TestRuntimeOptions, "autoFlush" | "synchronous" | "maxSteps">);
|
|
267
|
+
schedule(task: Task, tag?: string): ScheduleResult;
|
|
268
|
+
scheduleBatch(tasks: Array<{
|
|
269
|
+
fn: Task;
|
|
270
|
+
tag: string;
|
|
271
|
+
}>): ScheduleResult[];
|
|
272
|
+
stats(): SchedulerStats;
|
|
273
|
+
pending(): readonly TestScheduledTask[];
|
|
274
|
+
size(): number;
|
|
275
|
+
flush(maxTasks?: number): number;
|
|
276
|
+
flushAll(maxSteps?: number): number;
|
|
277
|
+
private requestAutoFlush;
|
|
278
|
+
}
|
|
279
|
+
type TestClockTimerSnapshot = {
|
|
280
|
+
readonly id: number;
|
|
281
|
+
readonly dueAt: number;
|
|
282
|
+
readonly delayMs: number;
|
|
283
|
+
};
|
|
284
|
+
declare class TestClock implements RuntimeClock {
|
|
285
|
+
private readonly flushScheduler;
|
|
286
|
+
private readonly maxSteps;
|
|
287
|
+
private nowMs;
|
|
288
|
+
private nextId;
|
|
289
|
+
private nextSeq;
|
|
290
|
+
private readonly timers;
|
|
291
|
+
constructor(initialTimeMs?: number, flushScheduler?: () => void, maxSteps?: number);
|
|
292
|
+
now(): number;
|
|
293
|
+
setTimeout(task: () => void, ms: number): RuntimeTimerId;
|
|
294
|
+
clearTimeout(timer: RuntimeTimerId): void;
|
|
295
|
+
pendingTimers(): readonly TestClockTimerSnapshot[];
|
|
296
|
+
adjust(ms: number): number;
|
|
297
|
+
advance(ms: number): number;
|
|
298
|
+
advanceTo(targetMs: number): number;
|
|
299
|
+
runDue(): number;
|
|
300
|
+
runAll(maxSteps?: number): number;
|
|
301
|
+
clear(): void;
|
|
302
|
+
private nextDueTimer;
|
|
303
|
+
}
|
|
304
|
+
type TestRuntime<R> = {
|
|
305
|
+
readonly env: R & RuntimeClockEnv;
|
|
306
|
+
readonly runtime: Runtime<R & RuntimeClockEnv>;
|
|
307
|
+
readonly scheduler: TestScheduler;
|
|
308
|
+
readonly clock: TestClock;
|
|
309
|
+
readonly run: <E, A>(effect: Async<any, E, A>) => Promise<A>;
|
|
310
|
+
readonly runExit: <E, A>(effect: Async<any, E, A>) => Promise<Exit<E, A>>;
|
|
311
|
+
readonly fork: <E, A>(effect: Async<any, E, A>) => ReturnType<Runtime<R & RuntimeClockEnv>["fork"]>;
|
|
312
|
+
readonly flush: (maxTasks?: number) => number;
|
|
313
|
+
readonly flushAll: (maxSteps?: number) => number;
|
|
314
|
+
readonly advance: (ms: number) => number;
|
|
315
|
+
readonly advanceTo: (targetMs: number) => number;
|
|
316
|
+
readonly runDueTimers: () => number;
|
|
317
|
+
readonly runAllTimers: (maxSteps?: number) => number;
|
|
309
318
|
};
|
|
310
319
|
/**
|
|
311
|
-
* Creates a test runtime
|
|
312
|
-
*
|
|
313
|
-
* ```ts
|
|
314
|
-
* const { runtime, run, runExit } = makeTestRuntime();
|
|
320
|
+
* Creates a deterministic TypeScript test runtime.
|
|
315
321
|
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
*
|
|
322
|
+
* The returned runtime uses:
|
|
323
|
+
* - a `TestScheduler` that can be flushed manually,
|
|
324
|
+
* - a `TestClock` for virtual `sleep`, `timeout`, retry backoff, and `Runtime.delay`,
|
|
325
|
+
* - the normal TS fiber interpreter, so tests exercise the same runtime model as production.
|
|
319
326
|
*/
|
|
320
|
-
declare function makeTestRuntime<R = {}>(env?: R, options?: TestRuntimeOptions):
|
|
321
|
-
runtime: Runtime<R>;
|
|
322
|
-
run: <E, A>(effect: Async<R, E, A>) => Promise<A>;
|
|
323
|
-
runExit: <E, A>(effect: Async<R, E, A>) => Promise<Exit<E, A>>;
|
|
324
|
-
};
|
|
327
|
+
declare function makeTestRuntime<R extends object = {}>(env?: R, options?: TestRuntimeOptions): TestRuntime<R>;
|
|
325
328
|
/**
|
|
326
329
|
* Asserts that an effect succeeds with a specific value.
|
|
327
330
|
*
|
|
@@ -379,20 +382,43 @@ declare function delayedEffect<A>(ms: number, value: A): Async<unknown, never, A
|
|
|
379
382
|
*/
|
|
380
383
|
declare function neverEffect<A = never>(): Async<unknown, never, A>;
|
|
381
384
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
385
|
+
type ServiceTag<A> = {
|
|
386
|
+
readonly _tag: "ServiceTag";
|
|
387
|
+
readonly key: symbol;
|
|
388
|
+
readonly name: string;
|
|
389
|
+
};
|
|
390
|
+
declare class MissingLayerServiceError extends Error {
|
|
391
|
+
readonly _tag: "MissingLayerService";
|
|
392
|
+
readonly serviceName: string;
|
|
393
|
+
constructor(serviceName: string);
|
|
394
|
+
}
|
|
395
|
+
declare function formatLayerError(error: unknown): string;
|
|
396
|
+
declare function makeServiceTag<A>(name: string): ServiceTag<A>;
|
|
397
|
+
declare const serviceTag: typeof makeServiceTag;
|
|
398
|
+
declare const defineService: typeof makeServiceTag;
|
|
399
|
+
declare class LayerContext<Services = unknown> {
|
|
400
|
+
private readonly services;
|
|
401
|
+
constructor(entries?: Iterable<readonly [ServiceTag<any>, unknown]> | Map<symbol, unknown>);
|
|
402
|
+
static empty(): LayerContext<unknown>;
|
|
403
|
+
get<A>(tag: ServiceTag<A>): A | undefined;
|
|
404
|
+
unsafeGet<A>(tag: ServiceTag<A>): A;
|
|
405
|
+
has(tag: ServiceTag<unknown>): boolean;
|
|
406
|
+
add<A>(tag: ServiceTag<A>, service: A): LayerContext<Services & A>;
|
|
407
|
+
merge<Other>(other: LayerContext<Other>): LayerContext<Services & Other>;
|
|
408
|
+
size(): number;
|
|
409
|
+
}
|
|
410
|
+
type LayerScope = {
|
|
411
|
+
readonly get: <RIn, E, ROut>(layer: Layer<RIn, E, ROut>, deps?: RIn) => Async<unknown, E, ROut>;
|
|
412
|
+
readonly close: () => Async<unknown, never, void>;
|
|
413
|
+
readonly size: () => number;
|
|
414
|
+
};
|
|
415
|
+
type BuiltLayer<ROut> = {
|
|
416
|
+
readonly service: ROut;
|
|
417
|
+
readonly scope: LayerScope;
|
|
418
|
+
readonly close: () => Async<unknown, never, void>;
|
|
419
|
+
readonly use: <E, A>(body: (service: ROut) => Async<unknown, E, A>) => Async<unknown, E, A>;
|
|
395
420
|
};
|
|
421
|
+
declare function makeLayerScope(): LayerScope;
|
|
396
422
|
/**
|
|
397
423
|
* Creates a Layer from an acquire/release pair.
|
|
398
424
|
*
|
|
@@ -404,6 +430,11 @@ type Layer<RIn, E, ROut> = {
|
|
|
404
430
|
* ```
|
|
405
431
|
*/
|
|
406
432
|
declare function layer<ROut, E = never>(acquire: () => Async<unknown, E, ROut>, release?: (service: ROut) => Async<unknown, never, void>): Layer<unknown, E, ROut>;
|
|
433
|
+
declare function layerValue<A>(tag: ServiceTag<A>, value: A): Layer<LayerContext, never, LayerContext>;
|
|
434
|
+
declare function layerEffect<E, A>(tag: ServiceTag<A>, acquire: (deps: LayerContext) => Async<unknown, E, A>, release?: (service: A) => Async<unknown, never, void>): Layer<LayerContext, E, LayerContext>;
|
|
435
|
+
declare const layerFromContext: typeof layerEffect;
|
|
436
|
+
declare const defineLayer: typeof layerEffect;
|
|
437
|
+
declare function getService<A>(tag: ServiceTag<A>): Async<LayerContext, MissingLayerServiceError, A>;
|
|
407
438
|
/**
|
|
408
439
|
* Creates a Layer that depends on another service.
|
|
409
440
|
*
|
|
@@ -449,6 +480,7 @@ declare function merge<R1, E1, A, R2, E2, B>(left: Layer<R1, E1, A>, right: Laye
|
|
|
449
480
|
* Map the output of a layer.
|
|
450
481
|
*/
|
|
451
482
|
declare function mapLayer<RIn, E, A, B>(l: Layer<RIn, E, A>, f: (a: A) => B): Layer<RIn, E, B>;
|
|
483
|
+
declare function buildLayer<RIn, E, ROut>(l: Layer<RIn, E, ROut>, deps?: RIn): Async<unknown, E, BuiltLayer<ROut>>;
|
|
452
484
|
/**
|
|
453
485
|
* Builds a layer, runs an effect with the produced service, and releases.
|
|
454
486
|
*
|
|
@@ -459,6 +491,44 @@ declare function mapLayer<RIn, E, A, B>(l: Layer<RIn, E, A>, f: (a: A) => B): La
|
|
|
459
491
|
* ```
|
|
460
492
|
*/
|
|
461
493
|
declare function provideLayer<RIn, E, ROut, E2, A>(l: Layer<RIn, E, ROut>, use: (service: ROut) => Async<unknown, E2, A>, deps?: RIn): Async<unknown, E | E2, A>;
|
|
494
|
+
declare function provideLayerContext<E, E2, A>(l: Layer<LayerContext, E, LayerContext>, use: (context: LayerContext) => Async<unknown, E2, A>, deps?: LayerContext): Async<unknown, E | E2, A>;
|
|
495
|
+
declare const provide: typeof provideLayer;
|
|
496
|
+
declare const provideContext: typeof provideLayerContext;
|
|
497
|
+
/**
|
|
498
|
+
* A Layer describes how to build a service.
|
|
499
|
+
*
|
|
500
|
+
* - RIn: dependencies required to build this service
|
|
501
|
+
* - E: possible failure during construction
|
|
502
|
+
* - ROut: the service produced
|
|
503
|
+
*/
|
|
504
|
+
type Layer<RIn, E, ROut> = {
|
|
505
|
+
readonly _tag: "Layer";
|
|
506
|
+
readonly build: (deps: RIn) => Async<unknown, E, {
|
|
507
|
+
service: ROut;
|
|
508
|
+
release: () => Async<unknown, never, void>;
|
|
509
|
+
}>;
|
|
510
|
+
readonly buildScoped?: (deps: RIn, scope: LayerScope) => Async<unknown, E, ROut>;
|
|
511
|
+
};
|
|
512
|
+
declare const Layer: Readonly<{
|
|
513
|
+
make: typeof layer;
|
|
514
|
+
from: typeof layerFrom;
|
|
515
|
+
succeed: typeof layerSucceed;
|
|
516
|
+
fail: typeof layerFail;
|
|
517
|
+
value: typeof layerValue;
|
|
518
|
+
effect: typeof layerEffect;
|
|
519
|
+
define: typeof layerEffect;
|
|
520
|
+
fromContext: typeof layerEffect;
|
|
521
|
+
compose: typeof compose;
|
|
522
|
+
merge: typeof merge;
|
|
523
|
+
map: typeof mapLayer;
|
|
524
|
+
provide: typeof provideLayer;
|
|
525
|
+
provideContext: typeof provideLayerContext;
|
|
526
|
+
build: typeof buildLayer;
|
|
527
|
+
scope: typeof makeLayerScope;
|
|
528
|
+
context: typeof LayerContext.empty;
|
|
529
|
+
tag: typeof makeServiceTag;
|
|
530
|
+
service: typeof getService;
|
|
531
|
+
}>;
|
|
462
532
|
|
|
463
533
|
type WorkerPoolConfig = {
|
|
464
534
|
/** Number of worker threads. Default: number of CPUs - 1 */
|
|
@@ -517,85 +587,32 @@ type WorkerPoolStats = {
|
|
|
517
587
|
*/
|
|
518
588
|
declare function makeWorkerPool(config?: WorkerPoolConfig): WorkerPool;
|
|
519
589
|
|
|
520
|
-
type
|
|
521
|
-
|
|
522
|
-
readonly name: string;
|
|
523
|
-
readonly type: MetricType;
|
|
524
|
-
readonly value: number;
|
|
525
|
-
readonly labels: Record<string, string>;
|
|
526
|
-
readonly timestamp: number;
|
|
527
|
-
};
|
|
528
|
-
type HistogramBuckets = {
|
|
529
|
-
readonly boundaries: readonly number[];
|
|
530
|
-
counts: number[];
|
|
531
|
-
sum: number;
|
|
532
|
-
count: number;
|
|
533
|
-
min: number;
|
|
534
|
-
max: number;
|
|
535
|
-
};
|
|
536
|
-
type MetricsRegistry = {
|
|
537
|
-
/** Create or get a counter. */
|
|
538
|
-
readonly counter: (name: string, labels?: Record<string, string>) => Counter;
|
|
539
|
-
/** Create or get a gauge. */
|
|
540
|
-
readonly gauge: (name: string, labels?: Record<string, string>) => Gauge;
|
|
541
|
-
/** Create or get a histogram. */
|
|
542
|
-
readonly histogram: (name: string, boundaries?: number[], labels?: Record<string, string>) => Histogram;
|
|
543
|
-
/** Get all current metric values. */
|
|
544
|
-
readonly snapshot: () => MetricSnapshot;
|
|
545
|
-
/** Reset all metrics. */
|
|
546
|
-
readonly reset: () => void;
|
|
547
|
-
};
|
|
548
|
-
type Counter = {
|
|
549
|
-
readonly increment: (n?: number) => void;
|
|
550
|
-
readonly value: () => number;
|
|
551
|
-
};
|
|
552
|
-
type Gauge = {
|
|
553
|
-
readonly set: (value: number) => void;
|
|
554
|
-
readonly increment: (n?: number) => void;
|
|
555
|
-
readonly decrement: (n?: number) => void;
|
|
556
|
-
readonly value: () => number;
|
|
557
|
-
};
|
|
558
|
-
type Histogram = {
|
|
559
|
-
readonly observe: (value: number) => void;
|
|
560
|
-
readonly buckets: () => HistogramBuckets;
|
|
561
|
-
readonly percentile: (p: number) => number;
|
|
562
|
-
};
|
|
563
|
-
type MetricSnapshot = {
|
|
564
|
-
readonly counters: Array<{
|
|
565
|
-
name: string;
|
|
566
|
-
labels: Record<string, string>;
|
|
567
|
-
value: number;
|
|
568
|
-
}>;
|
|
569
|
-
readonly gauges: Array<{
|
|
570
|
-
name: string;
|
|
571
|
-
labels: Record<string, string>;
|
|
572
|
-
value: number;
|
|
573
|
-
}>;
|
|
574
|
-
readonly histograms: Array<{
|
|
575
|
-
name: string;
|
|
576
|
-
labels: Record<string, string>;
|
|
577
|
-
buckets: HistogramBuckets;
|
|
578
|
-
}>;
|
|
590
|
+
type RuntimeRecorderOptions = {
|
|
591
|
+
readonly maxEvents?: number;
|
|
579
592
|
};
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
593
|
+
type RuntimeRecorderStats = {
|
|
594
|
+
readonly size: number;
|
|
595
|
+
readonly capacity: number;
|
|
596
|
+
readonly dropped: number;
|
|
597
|
+
readonly firstSeq?: number;
|
|
598
|
+
readonly lastSeq?: number;
|
|
599
|
+
};
|
|
600
|
+
type RuntimeRecorderExplainOptions = {
|
|
601
|
+
readonly maxEvents?: number;
|
|
602
|
+
};
|
|
603
|
+
type RuntimeRecorder = RuntimeHooks & {
|
|
604
|
+
readonly hooks: RuntimeHooks;
|
|
605
|
+
readonly snapshot: () => readonly RuntimeEventRecord[];
|
|
606
|
+
readonly clear: () => void;
|
|
607
|
+
readonly stats: () => RuntimeRecorderStats;
|
|
608
|
+
readonly explain: (options?: RuntimeRecorderExplainOptions) => string;
|
|
609
|
+
};
|
|
610
|
+
declare function makeRuntimeRecorder(options?: RuntimeRecorderOptions): RuntimeRecorder;
|
|
611
|
+
|
|
612
|
+
type LogLevel = "debug" | "info" | "warn" | "error";
|
|
613
|
+
declare function consoleJsonLogger(): RuntimeHooks;
|
|
614
|
+
|
|
615
|
+
declare function dumpAllFibers(reg: RuntimeRegistry): string;
|
|
599
616
|
|
|
600
617
|
/**
|
|
601
618
|
* Base type for tagged errors. All errors should extend this pattern:
|
|
@@ -670,4 +687,86 @@ declare function tagError<R, E, A, Tag extends string, Fields extends Record<str
|
|
|
670
687
|
*/
|
|
671
688
|
declare function orElse<R, E, A, R2, E2, B>(effect: Async<R, E, A>, fallback: (error: E) => Async<R2, E2, B>): Async<R & R2, E2, A | B>;
|
|
672
689
|
|
|
673
|
-
|
|
690
|
+
type SupervisorStrategy = "one-for-one" | "all-for-one";
|
|
691
|
+
type SupervisorEscalation = "ignore" | "shutdown";
|
|
692
|
+
type SupervisorRestartMode = "never" | "always" | "on-failure";
|
|
693
|
+
type SupervisedChildStatus = "running" | "restarting" | "succeeded" | "failed" | "interrupted";
|
|
694
|
+
type SupervisorRestartContext = {
|
|
695
|
+
readonly supervisorId: number;
|
|
696
|
+
readonly childId: number;
|
|
697
|
+
readonly name?: string;
|
|
698
|
+
readonly restartCount: number;
|
|
699
|
+
readonly exit: Exit<any, any>;
|
|
700
|
+
};
|
|
701
|
+
type SupervisorRestartPolicy = SupervisorRestartMode | {
|
|
702
|
+
readonly mode?: SupervisorRestartMode;
|
|
703
|
+
readonly maxRestarts?: number;
|
|
704
|
+
readonly withinMs?: number;
|
|
705
|
+
readonly delayMs?: number | ((context: SupervisorRestartContext) => number);
|
|
706
|
+
readonly schedule?: Schedule<SupervisorRestartContext, unknown>;
|
|
707
|
+
};
|
|
708
|
+
type SupervisorEvent = {
|
|
709
|
+
readonly type: "child-start" | "child-end" | "child-restart" | "child-escalate" | "shutdown";
|
|
710
|
+
readonly supervisorId: number;
|
|
711
|
+
readonly childId?: number;
|
|
712
|
+
readonly name?: string;
|
|
713
|
+
readonly status?: SupervisedChildStatus;
|
|
714
|
+
readonly restartCount?: number;
|
|
715
|
+
readonly delayMs?: number;
|
|
716
|
+
readonly exit?: Exit<any, any>;
|
|
717
|
+
readonly reason?: string;
|
|
718
|
+
};
|
|
719
|
+
type SupervisorConfig = {
|
|
720
|
+
readonly strategy?: SupervisorStrategy;
|
|
721
|
+
readonly restart?: SupervisorRestartPolicy;
|
|
722
|
+
readonly escalation?: SupervisorEscalation;
|
|
723
|
+
readonly clock?: () => number;
|
|
724
|
+
readonly onEvent?: (event: SupervisorEvent) => void;
|
|
725
|
+
};
|
|
726
|
+
type SupervisedChildSpec<R, E, A> = {
|
|
727
|
+
readonly name?: string;
|
|
728
|
+
readonly effect: Async<R, E, A> | (() => Async<R, E, A>);
|
|
729
|
+
readonly restart?: SupervisorRestartPolicy;
|
|
730
|
+
};
|
|
731
|
+
type SupervisedFiber<E, A> = {
|
|
732
|
+
readonly id: number;
|
|
733
|
+
readonly name?: string;
|
|
734
|
+
readonly current: () => Fiber<E, A> | undefined;
|
|
735
|
+
readonly status: () => SupervisedChildStatus;
|
|
736
|
+
readonly restartCount: () => number;
|
|
737
|
+
readonly interrupt: () => void;
|
|
738
|
+
readonly join: (cb: (exit: Exit<E, A>) => void) => void;
|
|
739
|
+
};
|
|
740
|
+
declare class Supervisor<R> {
|
|
741
|
+
private readonly runtime;
|
|
742
|
+
readonly id: number;
|
|
743
|
+
private readonly records;
|
|
744
|
+
private readonly strategy;
|
|
745
|
+
private readonly restart;
|
|
746
|
+
private readonly escalation;
|
|
747
|
+
private readonly clock;
|
|
748
|
+
private readonly onEvent?;
|
|
749
|
+
private closed;
|
|
750
|
+
constructor(runtime: Runtime<R>, config?: SupervisorConfig);
|
|
751
|
+
start<E, A>(spec: SupervisedChildSpec<R, E, A>): SupervisedFiber<E, A>;
|
|
752
|
+
startAll<const Specs extends readonly SupervisedChildSpec<R, any, any>[]>(specs: Specs): {
|
|
753
|
+
[K in keyof Specs]: Specs[K] extends SupervisedChildSpec<R, infer E, infer A> ? SupervisedFiber<E, A> : never;
|
|
754
|
+
};
|
|
755
|
+
shutdown(): Async<R, never, void>;
|
|
756
|
+
private handle;
|
|
757
|
+
private launch;
|
|
758
|
+
private onChildExit;
|
|
759
|
+
private restartAll;
|
|
760
|
+
private scheduleRestart;
|
|
761
|
+
private nextDelay;
|
|
762
|
+
private escalate;
|
|
763
|
+
private finish;
|
|
764
|
+
private restartContext;
|
|
765
|
+
private emit;
|
|
766
|
+
private scheduleClock;
|
|
767
|
+
}
|
|
768
|
+
declare function makeSupervisor<R>(runtime: Runtime<R>, config?: SupervisorConfig): Supervisor<R>;
|
|
769
|
+
declare function supervise<R, E, A>(runtime: Runtime<R>, spec: SupervisedChildSpec<R, E, A>, config?: SupervisorConfig): SupervisedFiber<E, A>;
|
|
770
|
+
declare function joinSupervised<E, A>(fiber: SupervisedFiber<E, A>): Async<unknown, E, A>;
|
|
771
|
+
|
|
772
|
+
export { Async, type BuiltLayer, type EffectEnvironment, type EffectFailure, type EffectSuccess, Exit, Fiber, type FiberRef, Layer, LayerContext, type LayerScope, type LogLevel, type MakeRuntimeOptions, MissingLayerServiceError, type Ref, type RetryPolicy, type RetryState, Runtime, RuntimeClock, RuntimeClockEnv, RuntimeEventRecord, RuntimeHooks, RuntimeOptions, type RuntimeRecorder, type RuntimeRecorderExplainOptions, type RuntimeRecorderOptions, type RuntimeRecorderStats, RuntimeRegistry, RuntimeTimerId, Schedule, type Semaphore, type SemaphoreStats, type ServiceTag, type ShutdownConfig, type ShutdownStats, type SupervisedChildSpec, type SupervisedChildStatus, type SupervisedFiber, Supervisor, type SupervisorConfig, type SupervisorEscalation, type SupervisorEvent, type SupervisorRestartContext, type SupervisorRestartMode, type SupervisorRestartPolicy, type SupervisorStrategy, type TaggedError, TestClock, type TestClockTimerSnapshot, type TestRuntime, type TestRuntimeOptions, type TestScheduledTask, TestScheduler, type TimeoutError, type WorkerPool, type WorkerPoolConfig, type WorkerPoolError, type WorkerPoolStats, assertCompletesWithin, assertFails, assertFailsWith, assertSucceeds, buildLayer, catchTag, catchTags, compose as composeLayer, consoleJsonLogger, defineLayer, defineService, delayedEffect, derivedRef, dumpAllFibers, fiberRefSnapshot, flakyEffect, formatLayerError, getFiberRef, getService, gracefulShutdown, joinSupervised, layer, layerEffect, layerFail, layerFrom, layerFromContext, layerSucceed, layerValue, locallyFiberRef, locallyFiberRefWith, makeFiberRef, makeLayerScope, makeRef, makeRuntime, makeRuntimeRecorder, makeSemaphore, makeServiceTag, makeSupervisor, makeTestRuntime, makeWorkerPool, mapError as mapErrorTyped, mapLayer, merge as mergeLayer, modifyFiberRef, neverEffect, orElse, provide, provideContext, provideLayer, provideLayerContext, registerShutdownHooks, retry, retryN, retryWithBackoff, runEffect, runExit, runPromise, serviceTag, setFiberRef, sleep, supervise, tagError, timeout, unsafeGetFiberRef, unsafeSetFiberRef, updateFiberRef };
|