better-effect 0.3.0 → 0.4.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/README.md +148 -494
- package/dist/adapters/iti.d.mts +1 -1
- package/dist/adapters/iti.mjs +1 -1
- package/dist/{errors-CnvKqBpb.mjs → errors-DlHCwICc.mjs} +5 -1
- package/dist/{errors-CnvKqBpb.mjs.map → errors-DlHCwICc.mjs.map} +1 -1
- package/dist/{index-Bg6ofRE1.d.mts → index-BYQKfyeJ.d.mts} +13 -10
- package/dist/index-BYQKfyeJ.d.mts.map +1 -0
- package/dist/index.d.mts +55 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +65 -3
- package/dist/index.mjs.map +1 -1
- package/dist/testing.d.mts +1 -1
- package/dist/testing.mjs +1 -1
- package/package.json +6 -9
- package/dist/index-Bg6ofRE1.d.mts.map +0 -1
package/dist/adapters/iti.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { V as AnyServiceToken, t as LayerBackend, v as LayerProvider } from "../index-BYQKfyeJ.mjs";
|
|
2
2
|
//#region src/adapters/iti.d.ts
|
|
3
3
|
declare class ItiLayerBackend implements LayerBackend {
|
|
4
4
|
private container;
|
package/dist/adapters/iti.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as DuplicateServiceError, o as ServiceNotFoundError } from "../errors-
|
|
1
|
+
import { n as DuplicateServiceError, o as ServiceNotFoundError } from "../errors-DlHCwICc.mjs";
|
|
2
2
|
import { createContainer } from "iti";
|
|
3
3
|
//#region src/adapters/iti.ts
|
|
4
4
|
var ItiLayerBackend = class {
|
|
@@ -51,6 +51,10 @@ var LayerGeneratorYieldError = class extends Error {
|
|
|
51
51
|
this.name = "LayerGeneratorYieldError";
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* @deprecated The public managed handle is `Runtime`; this error remains for
|
|
56
|
+
* compatibility with low-level Layer integrations.
|
|
57
|
+
*/
|
|
54
58
|
var BuiltLayerDisposedError = class extends Error {
|
|
55
59
|
constructor() {
|
|
56
60
|
super("Cannot run a program using a disposed Layer");
|
|
@@ -60,4 +64,4 @@ var BuiltLayerDisposedError = class extends Error {
|
|
|
60
64
|
//#endregion
|
|
61
65
|
export { LayerRegistrationError as a, LayerGeneratorYieldError as i, DuplicateServiceError as n, ServiceNotFoundError as o, LayerDisposeError as r, ServiceRuntimeNotConfiguredError as s, BuiltLayerDisposedError as t };
|
|
62
66
|
|
|
63
|
-
//# sourceMappingURL=errors-
|
|
67
|
+
//# sourceMappingURL=errors-DlHCwICc.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors-
|
|
1
|
+
{"version":3,"file":"errors-DlHCwICc.mjs","names":[],"sources":["../src/service/errors.ts","../src/layer/errors.ts"],"sourcesContent":["import type { AnyServiceToken } from './types'\n\nexport class ServiceRuntimeNotConfiguredError extends Error {\n constructor() {\n super('No ServiceResolver is available in the current runtime context')\n\n this.name = 'ServiceRuntimeNotConfiguredError'\n }\n}\n\nexport class ServiceNotFoundError extends Error {\n constructor(readonly service: AnyServiceToken) {\n super(`Service \"${service.name}\" was not provided`)\n\n this.name = 'ServiceNotFoundError'\n }\n}\n","import type { ServiceClass } from '../service'\n\nexport class DuplicateServiceError extends Error {\n constructor(readonly service: ServiceClass<any>) {\n super(`Duplicate service \"${service.name}\"`)\n\n this.name = 'DuplicateServiceError'\n }\n}\n\nexport class LayerRegistrationError extends Error {\n constructor(\n readonly service: ServiceClass<any> | undefined,\n readonly registrationCause: unknown,\n readonly cleanupCause?: unknown\n ) {\n super(service ? `Failed to register service \"${service.name}\"` : 'Failed to build Layer', {\n cause: registrationCause\n })\n\n this.name = 'LayerRegistrationError'\n }\n}\n\nexport class LayerDisposeError extends Error {\n constructor(readonly causes: readonly unknown[]) {\n super(`Failed to dispose Layer (${causes.length} error${causes.length === 1 ? '' : 's'})`)\n\n this.name = 'LayerDisposeError'\n }\n}\n\nexport class LayerGeneratorYieldError extends Error {\n constructor(readonly service: ServiceClass<any>) {\n super(`Layer.gen(\"${service.name}\") yielded an unsupported value`)\n\n this.name = 'LayerGeneratorYieldError'\n }\n}\n\n/**\n * @deprecated The public managed handle is `Runtime`; this error remains for\n * compatibility with low-level Layer integrations.\n */\nexport class BuiltLayerDisposedError extends Error {\n constructor() {\n super('Cannot run a program using a disposed Layer')\n\n this.name = 'BuiltLayerDisposedError'\n }\n}\n"],"mappings":";AAEA,IAAa,mCAAb,cAAsD,MAAM;CAC1D,cAAc;EACZ,MAAM,gEAAgE;EAEtE,KAAK,OAAO;CACd;AACF;AAEA,IAAa,uBAAb,cAA0C,MAAM;CACzB;CAArB,YAAY,SAAmC;EAC7C,MAAM,YAAY,QAAQ,KAAK,mBAAmB;EAD/B,KAAA,UAAA;EAGnB,KAAK,OAAO;CACd;AACF;;;ACdA,IAAa,wBAAb,cAA2C,MAAM;CAC1B;CAArB,YAAY,SAAqC;EAC/C,MAAM,sBAAsB,QAAQ,KAAK,EAAE;EADxB,KAAA,UAAA;EAGnB,KAAK,OAAO;CACd;AACF;AAEA,IAAa,yBAAb,cAA4C,MAAM;CAErC;CACA;CACA;CAHX,YACE,SACA,mBACA,cACA;EACA,MAAM,UAAU,+BAA+B,QAAQ,KAAK,KAAK,yBAAyB,EACxF,OAAO,kBACT,CAAC;EANQ,KAAA,UAAA;EACA,KAAA,oBAAA;EACA,KAAA,eAAA;EAMT,KAAK,OAAO;CACd;AACF;AAEA,IAAa,oBAAb,cAAuC,MAAM;CACtB;CAArB,YAAY,QAAqC;EAC/C,MAAM,4BAA4B,OAAO,OAAO,QAAQ,OAAO,WAAW,IAAI,KAAK,IAAI,EAAE;EADtE,KAAA,SAAA;EAGnB,KAAK,OAAO;CACd;AACF;AAEA,IAAa,2BAAb,cAA8C,MAAM;CAC7B;CAArB,YAAY,SAAqC;EAC/C,MAAM,cAAc,QAAQ,KAAK,gCAAgC;EAD9C,KAAA,UAAA;EAGnB,KAAK,OAAO;CACd;AACF;;;;;AAMA,IAAa,0BAAb,cAA6C,MAAM;CACjD,cAAc;EACZ,MAAM,6CAA6C;EAEnD,KAAK,OAAO;CACd;AACF"}
|
|
@@ -174,7 +174,14 @@ declare class Layer<Specs extends AnyLayerSpec = AnyLayerSpec> {
|
|
|
174
174
|
private constructor();
|
|
175
175
|
static make<S extends ServiceClass<any>>(service: S, acquire: () => MaybePromise<InstanceType<S>>): Layer<LayerSpec<S, ServiceRequirements<S>>>;
|
|
176
176
|
static succeed<S extends ServiceClass<any>>(service: S, instance: InstanceType<S>): Layer<LayerSpec<S, ServiceRequirements<S>>>;
|
|
177
|
+
/**
|
|
178
|
+
* Define a dependency-free provider with Runtime-root cleanup.
|
|
179
|
+
*
|
|
180
|
+
* The release callback intentionally keeps its compatibility-friendly
|
|
181
|
+
* one-argument shape. Use `scopedGen` when cleanup needs `ScopeOutcome`.
|
|
182
|
+
*/
|
|
177
183
|
static scoped<S extends ServiceClass<any>>(service: S, acquire: () => MaybePromise<InstanceType<S>>, release: (instance: InstanceType<S>) => MaybePromise<void>): Layer<LayerSpec<S, ServiceRequirements<S>>>;
|
|
184
|
+
/** Define a contextual provider with Runtime-root, outcome-aware cleanup. */
|
|
178
185
|
static scopedGen<S extends ServiceClass<any>, Yield extends ServiceRequirement<AnyServiceToken>>(service: S, factory: LayerGenerator<S, Yield>, release: (instance: InstanceType<S>, outcome: ScopeOutcome) => MaybePromise<void>): Layer<LayerSpec<S, LayerGeneratorRequirements<S, Yield>>>;
|
|
179
186
|
static gen<S extends ServiceClass<any>, Yield extends ServiceRequirement<AnyServiceToken>>(service: S, factory: LayerGenerator<S, Yield>): Layer<LayerSpec<S, LayerGeneratorRequirements<S, Yield>>>;
|
|
180
187
|
static merge<const Layers extends readonly Layer<any>[]>(...layers: Layers): Layer<Layers[number] extends Layer<infer Specs> ? Specs : never>;
|
|
@@ -200,6 +207,10 @@ declare class LayerGeneratorYieldError extends Error {
|
|
|
200
207
|
readonly service: ServiceClass<any>;
|
|
201
208
|
constructor(service: ServiceClass<any>);
|
|
202
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* @deprecated The public managed handle is `Runtime`; this error remains for
|
|
212
|
+
* compatibility with low-level Layer integrations.
|
|
213
|
+
*/
|
|
203
214
|
declare class BuiltLayerDisposedError extends Error {
|
|
204
215
|
constructor();
|
|
205
216
|
}
|
|
@@ -220,13 +231,5 @@ interface LayerBackend extends ServiceResolver {
|
|
|
220
231
|
disposeAll(): void | PromiseLike<void>;
|
|
221
232
|
}
|
|
222
233
|
//#endregion
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
readonly backend: LayerBackend;
|
|
226
|
-
run<A>(program: CompleteExecution<Provided, A>): Promise<Awaited<A>>;
|
|
227
|
-
dispose(outcome?: ScopeOutcome): Promise<void>;
|
|
228
|
-
}
|
|
229
|
-
declare const buildLayer: <L extends AnyLayer>(layer: CompleteLayer<L>, backend: LayerBackend, options?: RuntimeOptions) => Promise<BuiltLayer<LayerProvided<L>>>;
|
|
230
|
-
//#endregion
|
|
231
|
-
export { ServiceNotFoundError as A, EffectSuccess as B, MaybePromise$1 as C, ScopeCloseError as D, ResourceNotDisposableError as E, AnyEffectResult as F, ServiceInstance as G, ServiceRequirement as H, EffectError as I, ServiceRequirements as K, EffectFromGenerator as L, ServiceResolver as M, ServiceRuntime as N, ScopeClosedError as O, Service as P, EffectRequirements as R, DisposableResource as S, ScopeOutcome as T, AnyServiceToken as U, EffectYield as V, ServiceClass as W, LayerProvided as _, RuntimeOptions as a, LayerProvider as b, DuplicateServiceError as c, LayerRegistrationError as d, Layer as f, LayerMissing as g, CompleteLayer as h, CleanupFailureObserver as i, ServiceRuntimeNotConfiguredError as j, ScopeRuntimeNotConfiguredError as k, LayerDisposeError as l, CompleteExecution as m, buildLayer as n, RuntimeShutdownDiagnostic as o, AnyLayer as p, ServiceToken as q, LayerBackend as r, BuiltLayerDisposedError as s, BuiltLayer as t, LayerGeneratorYieldError as u, LayerRawRequired as v, ScopeFinalizer as w, CleanupFailureDiagnostic as x, LayerSpecs as y, EffectResult as z };
|
|
232
|
-
//# sourceMappingURL=index-Bg6ofRE1.d.mts.map
|
|
234
|
+
export { ServiceResolver as A, ServiceRequirement as B, ScopeOutcome as C, ScopeRuntimeNotConfiguredError as D, ScopeClosedError as E, EffectFromGenerator as F, ServiceToken as G, ServiceClass as H, EffectRequirements as I, EffectResult as L, Service as M, AnyEffectResult as N, ServiceNotFoundError as O, EffectError as P, EffectSuccess as R, ScopeFinalizer as S, ScopeCloseError as T, ServiceInstance as U, AnyServiceToken as V, ServiceRequirements as W, LayerSpecs as _, BuiltLayerDisposedError as a, DisposableResource as b, LayerGeneratorYieldError as c, AnyLayer as d, CompleteExecution as f, LayerRawRequired as g, LayerProvided as h, RuntimeShutdownDiagnostic as i, ServiceRuntime as j, ServiceRuntimeNotConfiguredError as k, LayerRegistrationError as l, LayerMissing as m, CleanupFailureObserver as n, DuplicateServiceError as o, CompleteLayer as p, RuntimeOptions as r, LayerDisposeError as s, LayerBackend as t, Layer as u, LayerProvider as v, ResourceNotDisposableError as w, MaybePromise$1 as x, CleanupFailureDiagnostic as y, EffectYield as z };
|
|
235
|
+
//# sourceMappingURL=index-BYQKfyeJ.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BYQKfyeJ.d.mts","names":[],"sources":["../src/service/types.ts","../src/effect/types.ts","../src/service/service.ts","../src/service/runtime.ts","../src/service/errors.ts","../src/scope/errors.ts","../src/scope/types.ts","../src/utils/types.ts","../src/layer/types.ts","../src/layer/inference.ts","../src/layer/layer.ts","../src/layer/errors.ts","../src/runtime/outcome.ts","../src/layer/backend.ts"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as
|
|
1
|
+
import { A as ServiceResolver, B as ServiceRequirement, C as ScopeOutcome, D as ScopeRuntimeNotConfiguredError, E as ScopeClosedError, F as EffectFromGenerator, G as ServiceToken, H as ServiceClass, I as EffectRequirements, L as EffectResult, M as Service, N as AnyEffectResult, O as ServiceNotFoundError, P as EffectError, R as EffectSuccess, S as ScopeFinalizer, T as ScopeCloseError, U as ServiceInstance, V as AnyServiceToken, W as ServiceRequirements, _ as LayerSpecs, a as BuiltLayerDisposedError, b as DisposableResource, c as LayerGeneratorYieldError, d as AnyLayer, f as CompleteExecution, g as LayerRawRequired, h as LayerProvided, i as RuntimeShutdownDiagnostic, j as ServiceRuntime, k as ServiceRuntimeNotConfiguredError, l as LayerRegistrationError, m as LayerMissing, n as CleanupFailureObserver, o as DuplicateServiceError, p as CompleteLayer, r as RuntimeOptions, s as LayerDisposeError, t as LayerBackend, u as Layer, w as ResourceNotDisposableError, x as MaybePromise$1, y as CleanupFailureDiagnostic, z as EffectYield } from "./index-BYQKfyeJ.mjs";
|
|
2
2
|
import { Err, Result, UnhandledException } from "better-result";
|
|
3
3
|
//#region src/scope/scope.d.ts
|
|
4
4
|
interface Scope {
|
|
@@ -15,9 +15,40 @@ declare const Scope: {
|
|
|
15
15
|
readonly current: () => Scope;
|
|
16
16
|
readonly provide: <A>(scope: Scope, program: () => A) => A;
|
|
17
17
|
readonly [Symbol.iterator]: () => Generator<never, Scope, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* Run a program in a newly owned Scope.
|
|
20
|
+
*
|
|
21
|
+
* Scope is independent from `better-result`, so returned values—including
|
|
22
|
+
* `Result.err`—close this Scope with a successful outcome. Result-aware
|
|
23
|
+
* outcome classification belongs to `Runtime.run`.
|
|
24
|
+
*/
|
|
18
25
|
readonly run: <A>(program: (scope: Scope) => A | PromiseLike<A>) => Promise<Awaited<A>>;
|
|
19
26
|
};
|
|
20
27
|
//#endregion
|
|
28
|
+
//#region src/effect/combinators.d.ts
|
|
29
|
+
type EffectInput<A, E, Requirements> = EffectResult<A, E, Requirements> | PromiseLike<EffectResult<A, E, Requirements>>;
|
|
30
|
+
type AnyEffectInput = EffectInput<any, any, any>;
|
|
31
|
+
type PreserveAsync<Input, Output> = Input extends PromiseLike<unknown> ? Promise<Output> : Output;
|
|
32
|
+
type MappedResult<Input, B> = EffectResult<B, EffectError<Input>, EffectRequirements<Input>>;
|
|
33
|
+
type ErrorMappedResult<Input, E2> = EffectResult<EffectSuccess<Input>, E2, EffectRequirements<Input>>;
|
|
34
|
+
type ChainedResult<First, Next> = EffectResult<EffectSuccess<Next>, EffectError<First> | EffectError<Next>, EffectRequirements<First> | EffectRequirements<Next>>;
|
|
35
|
+
type ChainedOutput<First, Next> = First extends PromiseLike<unknown> ? Promise<ChainedResult<First, Next>> : Next extends PromiseLike<unknown> ? Promise<ChainedResult<First, Next>> : ChainedResult<First, Next>;
|
|
36
|
+
type MapOperation<A, B> = {
|
|
37
|
+
<Input>(effect: Input & EffectInput<A, any, any>): PreserveAsync<Input, MappedResult<Input, B>>;
|
|
38
|
+
};
|
|
39
|
+
type MapErrorOperation<E1, E2> = {
|
|
40
|
+
<Input>(effect: Input & EffectInput<any, E1, any>): PreserveAsync<Input, ErrorMappedResult<Input, E2>>;
|
|
41
|
+
};
|
|
42
|
+
type AndThenOperation<A, Next> = {
|
|
43
|
+
<Input>(effect: Input & EffectInput<A, any, any>): ChainedOutput<Input, Next>;
|
|
44
|
+
};
|
|
45
|
+
declare function map<A, B>(fn: (value: A) => B): MapOperation<A, B>;
|
|
46
|
+
declare function map<Input, B>(effect: Input & AnyEffectInput, fn: (value: EffectSuccess<Input>) => B): PreserveAsync<Input, MappedResult<Input, B>>;
|
|
47
|
+
declare function mapError<E1, E2>(fn: (error: E1) => E2): MapErrorOperation<E1, E2>;
|
|
48
|
+
declare function mapError<Input, E2>(effect: Input & AnyEffectInput, fn: (error: EffectError<Input>) => E2): PreserveAsync<Input, ErrorMappedResult<Input, E2>>;
|
|
49
|
+
declare function andThen<A, Next extends AnyEffectInput>(next: (value: A) => Next): AndThenOperation<A, Next>;
|
|
50
|
+
declare function andThen<Input, Next extends AnyEffectInput>(effect: Input & AnyEffectInput, next: (value: EffectSuccess<Input>) => Next): ChainedOutput<Input, Next>;
|
|
51
|
+
//#endregion
|
|
21
52
|
//#region src/effect/effect.d.ts
|
|
22
53
|
type AnyResult = Result<any, any>;
|
|
23
54
|
/**
|
|
@@ -44,8 +75,26 @@ declare const Effect: {
|
|
|
44
75
|
readonly gen: typeof gen;
|
|
45
76
|
readonly acquireRelease: typeof acquireRelease;
|
|
46
77
|
readonly add: typeof add;
|
|
78
|
+
readonly map: typeof map;
|
|
79
|
+
readonly mapError: typeof mapError;
|
|
80
|
+
readonly andThen: typeof andThen;
|
|
47
81
|
};
|
|
48
82
|
//#endregion
|
|
83
|
+
//#region src/function/pipe.d.ts
|
|
84
|
+
type Unary<A, B> = (value: A) => B;
|
|
85
|
+
/** Compose a value through a sequence of unary functions. */
|
|
86
|
+
declare function pipe<A>(value: A): A;
|
|
87
|
+
declare function pipe<A, B>(value: A, ab: Unary<A, B>): B;
|
|
88
|
+
declare function pipe<A, B, C>(value: A, ab: Unary<A, B>, bc: Unary<B, C>): C;
|
|
89
|
+
declare function pipe<A, B, C, D>(value: A, ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>): D;
|
|
90
|
+
declare function pipe<A, B, C, D, E>(value: A, ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>): E;
|
|
91
|
+
declare function pipe<A, B, C, D, E, F>(value: A, ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>, ef: Unary<E, F>): F;
|
|
92
|
+
declare function pipe<A, B, C, D, E, F, G>(value: A, ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>, ef: Unary<E, F>, fg: Unary<F, G>): G;
|
|
93
|
+
declare function pipe<A, B, C, D, E, F, G, H>(value: A, ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>, ef: Unary<E, F>, fg: Unary<F, G>, gh: Unary<G, H>): H;
|
|
94
|
+
declare function pipe<A, B, C, D, E, F, G, H, I>(value: A, ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>, ef: Unary<E, F>, fg: Unary<F, G>, gh: Unary<G, H>, hi: Unary<H, I>): I;
|
|
95
|
+
declare function pipe<A, B, C, D, E, F, G, H, I, J>(value: A, ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>, ef: Unary<E, F>, fg: Unary<F, G>, gh: Unary<G, H>, hi: Unary<H, I>, ij: Unary<I, J>): J;
|
|
96
|
+
declare function pipe<A, B, C, D, E, F, G, H, I, J, K>(value: A, ab: Unary<A, B>, bc: Unary<B, C>, cd: Unary<C, D>, de: Unary<D, E>, ef: Unary<E, F>, fg: Unary<F, G>, gh: Unary<G, H>, hi: Unary<H, I>, ij: Unary<I, J>, jk: Unary<J, K>): K;
|
|
97
|
+
//#endregion
|
|
49
98
|
//#region src/resource/errors.d.ts
|
|
50
99
|
declare const ResourceReleaseFailure_base: import("better-result").TaggedErrorClass<"ResourceReleaseFailure">;
|
|
51
100
|
declare class ResourceReleaseFailure extends ResourceReleaseFailure_base<{
|
|
@@ -84,10 +133,14 @@ declare const Resource: {
|
|
|
84
133
|
declare class Runtime<Provided extends AnyServiceToken = AnyServiceToken> {
|
|
85
134
|
private readonly built;
|
|
86
135
|
private constructor();
|
|
136
|
+
/** Create a long-lived Runtime that owns its Layer resources. */
|
|
87
137
|
static make<L extends AnyLayer>(layer: CompleteLayer<L>, backend: LayerBackend, options?: RuntimeOptions): Promise<Runtime<LayerProvided<L>>>;
|
|
138
|
+
/** Run one program and dispose its Layer resources before resolving. */
|
|
88
139
|
static run<A, L extends AnyLayer>(layer: CompleteLayer<L>, backend: LayerBackend, program: CompleteExecution<LayerProvided<L>, A>, options?: RuntimeOptions): Promise<Awaited<A>>;
|
|
140
|
+
/** Run one execution in this Runtime's child Scope. */
|
|
89
141
|
run<A>(program: CompleteExecution<Provided, A>): Promise<Awaited<A>>;
|
|
90
142
|
private runUnchecked;
|
|
143
|
+
/** Stop new executions and release the Runtime's Layer resources. */
|
|
91
144
|
dispose(): Promise<void>;
|
|
92
145
|
private disposeWithOutcome;
|
|
93
146
|
}
|
|
@@ -96,5 +149,5 @@ declare class Runtime<Provided extends AnyServiceToken = AnyServiceToken> {
|
|
|
96
149
|
/** Runtime handle whose provided Services are inferred from a Layer. */
|
|
97
150
|
type RuntimeFor<L extends AnyLayer> = Runtime<LayerProvided<L>>;
|
|
98
151
|
//#endregion
|
|
99
|
-
export { type AcquireUseReleaseOptions, type AnyEffectResult, type AnyServiceToken, type AsyncResult,
|
|
152
|
+
export { type AcquireUseReleaseOptions, type AnyEffectResult, type AnyServiceToken, type AsyncResult, BuiltLayerDisposedError, type CleanupFailureDiagnostic, type CleanupFailureObserver, type CloseableScope, type DisposableResource, DuplicateServiceError, Effect, type EffectError, type EffectRequirements, type EffectResult, type EffectSuccess, type EffectYield, Layer, type LayerBackend, LayerDisposeError, LayerGeneratorYieldError, type LayerMissing, type LayerProvided, type LayerRawRequired, LayerRegistrationError, type LayerSpecs, type ReleaseFailureObserver, type ReleaseOutcome, Resource, ResourceNotDisposableError, ResourceReleaseFailure, Runtime, type RuntimeFor, type RuntimeOptions, type RuntimeShutdownDiagnostic, Scope, ScopeCloseError, ScopeClosedError, type ScopeFinalizer, type ScopeOutcome, ScopeRuntimeNotConfiguredError, Service, type ServiceClass, type ServiceInstance, ServiceNotFoundError, type ServiceRequirement, type ServiceRequirements, type ServiceResolver, ServiceRuntime, ServiceRuntimeNotConfiguredError, type ServiceToken, pipe };
|
|
100
153
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/scope/scope.ts","../src/effect/effect.ts","../src/resource/errors.ts","../src/resource/types.ts","../src/resource/resource.ts","../src/runtime/runtime.ts","../src/runtime/types.ts"],"mappings":";;;UAUiB;EACf,aAAa,WAAW;EAExB,QAAQ,GACN,eAAe,eAAa,IAC5B,UAAU,UAAU,GAAG,SAAS,iBAAiB,uBAChD,QAAQ;EAEX,IAAI,UAAU,oBAAoB,UAAU,IAAI,QAAQ;EAExD,QAAQ;;UAGO,uBAAuB;EACtC,MAAM,UAAU,eAAe;;cAgKpB;WACH,YAAA;WAIG,eAAA;WAIH,UAAA,GAAC,OAAS,OAAK,eAAiB,MAAI;YAKtB,OAAA,iBAAA,iBAAiB
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/scope/scope.ts","../src/effect/combinators.ts","../src/effect/effect.ts","../src/function/pipe.ts","../src/resource/errors.ts","../src/resource/types.ts","../src/resource/resource.ts","../src/runtime/runtime.ts","../src/runtime/types.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as LayerRegistrationError, i as LayerGeneratorYieldError, n as DuplicateServiceError, o as ServiceNotFoundError, r as LayerDisposeError, s as ServiceRuntimeNotConfiguredError, t as BuiltLayerDisposedError } from "./errors-
|
|
1
|
+
import { a as LayerRegistrationError, i as LayerGeneratorYieldError, n as DuplicateServiceError, o as ServiceNotFoundError, r as LayerDisposeError, s as ServiceRuntimeNotConfiguredError, t as BuiltLayerDisposedError } from "./errors-DlHCwICc.mjs";
|
|
2
2
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
3
|
import { Result, TaggedError } from "better-result";
|
|
4
4
|
//#region src/service/runtime.ts
|
|
@@ -53,6 +53,12 @@ var Layer = class Layer {
|
|
|
53
53
|
static succeed(service, instance) {
|
|
54
54
|
return Layer.make(service, () => instance);
|
|
55
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Define a dependency-free provider with Runtime-root cleanup.
|
|
58
|
+
*
|
|
59
|
+
* The release callback intentionally keeps its compatibility-friendly
|
|
60
|
+
* one-argument shape. Use `scopedGen` when cleanup needs `ScopeOutcome`.
|
|
61
|
+
*/
|
|
56
62
|
static scoped(service, acquire, release) {
|
|
57
63
|
return new Layer([{
|
|
58
64
|
service,
|
|
@@ -60,6 +66,7 @@ var Layer = class Layer {
|
|
|
60
66
|
release: (instance) => release(instance)
|
|
61
67
|
}]);
|
|
62
68
|
}
|
|
69
|
+
/** Define a contextual provider with Runtime-root, outcome-aware cleanup. */
|
|
63
70
|
static scopedGen(service, factory, release) {
|
|
64
71
|
return new Layer([{
|
|
65
72
|
service,
|
|
@@ -291,6 +298,13 @@ const Scope = {
|
|
|
291
298
|
*[Symbol.iterator]() {
|
|
292
299
|
return ScopeRuntime.current();
|
|
293
300
|
},
|
|
301
|
+
/**
|
|
302
|
+
* Run a program in a newly owned Scope.
|
|
303
|
+
*
|
|
304
|
+
* Scope is independent from `better-result`, so returned values—including
|
|
305
|
+
* `Result.err`—close this Scope with a successful outcome. Result-aware
|
|
306
|
+
* outcome classification belongs to `Runtime.run`.
|
|
307
|
+
*/
|
|
294
308
|
run(program) {
|
|
295
309
|
const scope = new ScopeImpl();
|
|
296
310
|
return runScoped(scope, () => program(scope), { classify: () => SCOPE_SUCCESS$1 });
|
|
@@ -405,6 +419,11 @@ var BuiltLayerImpl = class {
|
|
|
405
419
|
if (this.state !== "active") throw new BuiltLayerDisposedError();
|
|
406
420
|
}
|
|
407
421
|
};
|
|
422
|
+
/**
|
|
423
|
+
* Build a low-level Layer handle.
|
|
424
|
+
*
|
|
425
|
+
* @deprecated Prefer `Runtime.make()` for application code.
|
|
426
|
+
*/
|
|
408
427
|
const buildLayer = async (layer, backend, options = {}) => {
|
|
409
428
|
const rootScope = Scope.make();
|
|
410
429
|
let current;
|
|
@@ -444,6 +463,37 @@ const buildLayer = async (layer, backend, options = {}) => {
|
|
|
444
463
|
return new BuiltLayerImpl(backend, rootScope, options.onCleanupFailure);
|
|
445
464
|
};
|
|
446
465
|
//#endregion
|
|
466
|
+
//#region src/effect/combinators.ts
|
|
467
|
+
const isPromiseLike = (value) => {
|
|
468
|
+
if (typeof value !== "object" && typeof value !== "function" || value === null) return false;
|
|
469
|
+
return "then" in value && typeof value.then === "function";
|
|
470
|
+
};
|
|
471
|
+
const mapResult = (result, fn) => Result.map(result, fn);
|
|
472
|
+
const mapErrorResult = (result, fn) => Result.mapError(result, fn);
|
|
473
|
+
const andThenResult = (result, next) => {
|
|
474
|
+
const chained = Result.andThen(result, next);
|
|
475
|
+
if (!isPromiseLike(chained)) return chained;
|
|
476
|
+
return Result.andThenAsync(result, () => Promise.resolve(chained));
|
|
477
|
+
};
|
|
478
|
+
function map(first, second) {
|
|
479
|
+
if (typeof first === "function" && second === void 0) return (effect) => map(effect, first);
|
|
480
|
+
const fn = second;
|
|
481
|
+
if (isPromiseLike(first)) return Promise.resolve(first).then((result) => mapResult(result, fn));
|
|
482
|
+
return mapResult(first, fn);
|
|
483
|
+
}
|
|
484
|
+
function mapError(first, second) {
|
|
485
|
+
if (typeof first === "function" && second === void 0) return (effect) => mapError(effect, first);
|
|
486
|
+
const fn = second;
|
|
487
|
+
if (isPromiseLike(first)) return Promise.resolve(first).then((result) => mapErrorResult(result, fn));
|
|
488
|
+
return mapErrorResult(first, fn);
|
|
489
|
+
}
|
|
490
|
+
function andThen(first, second) {
|
|
491
|
+
if (typeof first === "function" && second === void 0) return (effect) => andThen(effect, first);
|
|
492
|
+
const next = second;
|
|
493
|
+
if (isPromiseLike(first)) return Promise.resolve(first).then((result) => andThenResult(result, next));
|
|
494
|
+
return andThenResult(first, next);
|
|
495
|
+
}
|
|
496
|
+
//#endregion
|
|
447
497
|
//#region src/effect/effect.ts
|
|
448
498
|
function gen(body) {
|
|
449
499
|
return Result.gen(body);
|
|
@@ -471,9 +521,17 @@ function add(resource) {
|
|
|
471
521
|
const Effect = {
|
|
472
522
|
gen,
|
|
473
523
|
acquireRelease,
|
|
474
|
-
add
|
|
524
|
+
add,
|
|
525
|
+
map,
|
|
526
|
+
mapError,
|
|
527
|
+
andThen
|
|
475
528
|
};
|
|
476
529
|
//#endregion
|
|
530
|
+
//#region src/function/pipe.ts
|
|
531
|
+
function pipe(value, ...operations) {
|
|
532
|
+
return operations.reduce((current, operation) => operation(current), value);
|
|
533
|
+
}
|
|
534
|
+
//#endregion
|
|
477
535
|
//#region src/resource/errors.ts
|
|
478
536
|
var ResourceReleaseFailure = class extends TaggedError("ResourceReleaseFailure") {};
|
|
479
537
|
//#endregion
|
|
@@ -534,10 +592,12 @@ var Runtime = class Runtime {
|
|
|
534
592
|
constructor(built) {
|
|
535
593
|
this.built = built;
|
|
536
594
|
}
|
|
595
|
+
/** Create a long-lived Runtime that owns its Layer resources. */
|
|
537
596
|
static async make(layer, backend, options = {}) {
|
|
538
597
|
const built = await buildLayer(layer, backend, options);
|
|
539
598
|
return new Runtime(built);
|
|
540
599
|
}
|
|
600
|
+
/** Run one program and dispose its Layer resources before resolving. */
|
|
541
601
|
static async run(layer, backend, program, options = {}) {
|
|
542
602
|
const runtime = await Runtime.make(layer, backend, options);
|
|
543
603
|
let value;
|
|
@@ -574,12 +634,14 @@ var Runtime = class Runtime {
|
|
|
574
634
|
if (executionFailed) throw executionFailure;
|
|
575
635
|
return value;
|
|
576
636
|
}
|
|
637
|
+
/** Run one execution in this Runtime's child Scope. */
|
|
577
638
|
run(program) {
|
|
578
639
|
return this.built.run(program);
|
|
579
640
|
}
|
|
580
641
|
runUnchecked(program) {
|
|
581
642
|
return this.built.run(program);
|
|
582
643
|
}
|
|
644
|
+
/** Stop new executions and release the Runtime's Layer resources. */
|
|
583
645
|
dispose() {
|
|
584
646
|
return this.built.dispose();
|
|
585
647
|
}
|
|
@@ -588,6 +650,6 @@ var Runtime = class Runtime {
|
|
|
588
650
|
}
|
|
589
651
|
};
|
|
590
652
|
//#endregion
|
|
591
|
-
export { BuiltLayerDisposedError, DuplicateServiceError, Effect, Layer, LayerDisposeError, LayerGeneratorYieldError, LayerRegistrationError, Resource, ResourceNotDisposableError, ResourceReleaseFailure, Runtime, Scope, ScopeCloseError, ScopeClosedError, ScopeRuntimeNotConfiguredError, Service, ServiceNotFoundError, ServiceRuntime, ServiceRuntimeNotConfiguredError,
|
|
653
|
+
export { BuiltLayerDisposedError, DuplicateServiceError, Effect, Layer, LayerDisposeError, LayerGeneratorYieldError, LayerRegistrationError, Resource, ResourceNotDisposableError, ResourceReleaseFailure, Runtime, Scope, ScopeCloseError, ScopeClosedError, ScopeRuntimeNotConfiguredError, Service, ServiceNotFoundError, ServiceRuntime, ServiceRuntimeNotConfiguredError, pipe };
|
|
592
654
|
|
|
593
655
|
//# sourceMappingURL=index.mjs.map
|