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
package/dist/core/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { A as Async, f as Runtime, E as Exit, R as RuntimeHooks, g as RuntimeRegistry, k as Fiber } from '../effect-
|
|
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 ContextNode,
|
|
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-
|
|
4
|
-
import { S as Schedule } from '../schedule-
|
|
5
|
-
export {
|
|
6
|
-
export { B as BrassEnv,
|
|
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';
|
|
7
7
|
|
|
8
8
|
type TimeoutError = {
|
|
9
9
|
readonly _tag: "TimeoutError";
|
|
@@ -70,6 +70,30 @@ declare function retryWithBackoff<R, E, A>(effect: Async<R, E, A>, opts?: {
|
|
|
70
70
|
shouldRetry?: (error: unknown, attempt: number) => boolean;
|
|
71
71
|
}): Async<R, E, A>;
|
|
72
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">;
|
|
77
|
+
/**
|
|
78
|
+
* Create a runtime with a compact options shape.
|
|
79
|
+
*
|
|
80
|
+
* This is an additive DX helper over `new Runtime({ env, ...options })`.
|
|
81
|
+
*/
|
|
82
|
+
declare function makeRuntime<R extends object = {}>(env?: R, options?: MakeRuntimeOptions<R>): Runtime<R>;
|
|
83
|
+
/**
|
|
84
|
+
* Run an effect and resolve with its success value.
|
|
85
|
+
*
|
|
86
|
+
* Accepts either a plain environment or an existing Runtime. For advanced
|
|
87
|
+
* lifecycle/hooks/scheduler behavior, pass the Runtime explicitly.
|
|
88
|
+
*/
|
|
89
|
+
declare function runPromise<R, E, A>(effect: Async<R, E, A>, envOrRuntime?: R | Runtime<R>): Promise<A>;
|
|
90
|
+
/**
|
|
91
|
+
* Run an effect and resolve with the full Exit, preserving typed failures and
|
|
92
|
+
* Cause structure instead of throwing/rejecting.
|
|
93
|
+
*/
|
|
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;
|
|
96
|
+
|
|
73
97
|
type Semaphore = {
|
|
74
98
|
/** Current number of available permits. */
|
|
75
99
|
readonly available: () => number;
|
|
@@ -144,6 +168,29 @@ declare function makeRef<A>(initial: A): Ref<A>;
|
|
|
144
168
|
*/
|
|
145
169
|
declare function derivedRef<A, B>(parent: Ref<A>, get: (a: A) => B, set: (a: A, b: B) => A): Ref<B>;
|
|
146
170
|
|
|
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;
|
|
182
|
+
};
|
|
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>;
|
|
193
|
+
|
|
147
194
|
type ShutdownConfig = {
|
|
148
195
|
/** Max time to wait for in-flight work to complete. Default: 30000ms */
|
|
149
196
|
readonly timeoutMs?: number;
|
|
@@ -192,24 +239,92 @@ declare function gracefulShutdown<R>(runtime: Runtime<R>, config?: ShutdownConfi
|
|
|
192
239
|
declare function registerShutdownHooks<R>(runtime: Runtime<R>, config?: ShutdownConfig): () => void;
|
|
193
240
|
|
|
194
241
|
type TestRuntimeOptions = {
|
|
195
|
-
/**
|
|
242
|
+
/** Back-compat alias for autoFlush. When false, scheduled tasks only run when flushed. */
|
|
196
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;
|
|
197
318
|
};
|
|
198
319
|
/**
|
|
199
|
-
* Creates a test runtime
|
|
200
|
-
*
|
|
201
|
-
* ```ts
|
|
202
|
-
* const { runtime, run, runExit } = makeTestRuntime();
|
|
320
|
+
* Creates a deterministic TypeScript test runtime.
|
|
203
321
|
*
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
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.
|
|
207
326
|
*/
|
|
208
|
-
declare function makeTestRuntime<R = {}>(env?: R, options?: TestRuntimeOptions):
|
|
209
|
-
runtime: Runtime<R>;
|
|
210
|
-
run: <E, A>(effect: Async<R, E, A>) => Promise<A>;
|
|
211
|
-
runExit: <E, A>(effect: Async<R, E, A>) => Promise<Exit<E, A>>;
|
|
212
|
-
};
|
|
327
|
+
declare function makeTestRuntime<R extends object = {}>(env?: R, options?: TestRuntimeOptions): TestRuntime<R>;
|
|
213
328
|
/**
|
|
214
329
|
* Asserts that an effect succeeds with a specific value.
|
|
215
330
|
*
|
|
@@ -267,20 +382,43 @@ declare function delayedEffect<A>(ms: number, value: A): Async<unknown, never, A
|
|
|
267
382
|
*/
|
|
268
383
|
declare function neverEffect<A = never>(): Async<unknown, never, A>;
|
|
269
384
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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;
|
|
283
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>;
|
|
420
|
+
};
|
|
421
|
+
declare function makeLayerScope(): LayerScope;
|
|
284
422
|
/**
|
|
285
423
|
* Creates a Layer from an acquire/release pair.
|
|
286
424
|
*
|
|
@@ -292,6 +430,11 @@ type Layer<RIn, E, ROut> = {
|
|
|
292
430
|
* ```
|
|
293
431
|
*/
|
|
294
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>;
|
|
295
438
|
/**
|
|
296
439
|
* Creates a Layer that depends on another service.
|
|
297
440
|
*
|
|
@@ -337,6 +480,7 @@ declare function merge<R1, E1, A, R2, E2, B>(left: Layer<R1, E1, A>, right: Laye
|
|
|
337
480
|
* Map the output of a layer.
|
|
338
481
|
*/
|
|
339
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>>;
|
|
340
484
|
/**
|
|
341
485
|
* Builds a layer, runs an effect with the produced service, and releases.
|
|
342
486
|
*
|
|
@@ -347,6 +491,44 @@ declare function mapLayer<RIn, E, A, B>(l: Layer<RIn, E, A>, f: (a: A) => B): La
|
|
|
347
491
|
* ```
|
|
348
492
|
*/
|
|
349
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
|
+
}>;
|
|
350
532
|
|
|
351
533
|
type WorkerPoolConfig = {
|
|
352
534
|
/** Number of worker threads. Default: number of CPUs - 1 */
|
|
@@ -405,6 +587,28 @@ type WorkerPoolStats = {
|
|
|
405
587
|
*/
|
|
406
588
|
declare function makeWorkerPool(config?: WorkerPoolConfig): WorkerPool;
|
|
407
589
|
|
|
590
|
+
type RuntimeRecorderOptions = {
|
|
591
|
+
readonly maxEvents?: number;
|
|
592
|
+
};
|
|
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
|
+
|
|
408
612
|
type LogLevel = "debug" | "info" | "warn" | "error";
|
|
409
613
|
declare function consoleJsonLogger(): RuntimeHooks;
|
|
410
614
|
|
|
@@ -559,9 +763,10 @@ declare class Supervisor<R> {
|
|
|
559
763
|
private finish;
|
|
560
764
|
private restartContext;
|
|
561
765
|
private emit;
|
|
766
|
+
private scheduleClock;
|
|
562
767
|
}
|
|
563
768
|
declare function makeSupervisor<R>(runtime: Runtime<R>, config?: SupervisorConfig): Supervisor<R>;
|
|
564
769
|
declare function supervise<R, E, A>(runtime: Runtime<R>, spec: SupervisedChildSpec<R, E, A>, config?: SupervisorConfig): SupervisedFiber<E, A>;
|
|
565
770
|
declare function joinSupervised<E, A>(fiber: SupervisedFiber<E, A>): Async<unknown, E, A>;
|
|
566
771
|
|
|
567
|
-
export { Async, Exit, Fiber, type Layer, type LogLevel, type Ref, type RetryPolicy, type RetryState, Runtime, RuntimeHooks, RuntimeRegistry, Schedule, type Semaphore, type SemaphoreStats, 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, type TestRuntimeOptions, type TimeoutError, type WorkerPool, type WorkerPoolConfig, type WorkerPoolError, type WorkerPoolStats, assertCompletesWithin, assertFails, assertFailsWith, assertSucceeds, catchTag, catchTags, compose as composeLayer, consoleJsonLogger, delayedEffect, derivedRef, dumpAllFibers, flakyEffect, gracefulShutdown, joinSupervised, layer, layerFail, layerFrom, layerSucceed, makeRef, makeSemaphore, makeSupervisor, makeTestRuntime, makeWorkerPool, mapError as mapErrorTyped, mapLayer, merge as mergeLayer, neverEffect, orElse, provideLayer, registerShutdownHooks, retry, retryN, retryWithBackoff, sleep, supervise, tagError, timeout };
|
|
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 };
|