better-effect 0.5.0 → 0.6.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 +60 -6
- package/dist/adapters/iti.d.mts +1 -1
- package/dist/adapters/iti.d.mts.map +1 -1
- package/dist/adapters/iti.mjs +4 -3
- package/dist/adapters/iti.mjs.map +1 -1
- package/dist/errors-GR3K_nRu.mjs.map +1 -1
- package/dist/index-DMfjhNR_.d.mts +500 -0
- package/dist/index-DMfjhNR_.d.mts.map +1 -0
- package/dist/index.d.mts +57 -61
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +87 -112
- package/dist/index.mjs.map +1 -1
- package/dist/{internal-identity-BnZC3Au-.mjs → internal-identity-C6Awrc33.mjs} +4 -3
- package/dist/internal-identity-C6Awrc33.mjs.map +1 -0
- package/dist/runtime-CDcCF5cb.mjs +10 -0
- package/dist/runtime-CDcCF5cb.mjs.map +1 -0
- package/dist/testing.d.mts +1 -1
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.mjs +3 -2
- package/dist/testing.mjs.map +1 -1
- package/package.json +13 -5
- package/dist/index-D77AvuBl.d.mts +0 -510
- package/dist/index-D77AvuBl.d.mts.map +0 -1
- package/dist/internal-identity-BnZC3Au-.mjs.map +0 -1
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
import { Err, InferErr, InferOk, Result } from "better-result";
|
|
2
|
+
//#region src/service/types.d.ts
|
|
3
|
+
/** Internal type-only identity for the branded Service instance. */
|
|
4
|
+
declare const ServiceIdentityTypeId: unique symbol;
|
|
5
|
+
/** A branded Service instance identity carried by the literal Service tag. */
|
|
6
|
+
interface ServiceIdentity<out Tag extends string = string> {
|
|
7
|
+
readonly [ServiceIdentityTypeId]: Tag;
|
|
8
|
+
}
|
|
9
|
+
/** The widened Service instance constraint used by contextual APIs. */
|
|
10
|
+
type AnyService = ServiceIdentity<string>;
|
|
11
|
+
/** Remove the internal Service identity marker from an implementation contract. */
|
|
12
|
+
type ServiceContract<S> = S extends unknown ? Omit<S, typeof ServiceIdentityTypeId> : never;
|
|
13
|
+
type ServiceStatics<out Tag extends string, in out Instance extends AnyService> = {
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly serviceTag: Tag;
|
|
16
|
+
/** Type-check a structural implementation and return it unchanged. */
|
|
17
|
+
readonly of: (this: void, implementation: ServiceContract<Instance>) => Instance;
|
|
18
|
+
};
|
|
19
|
+
type AbstractServiceConstructor<out Instance> = abstract new (...args: any[]) => Instance;
|
|
20
|
+
/** A class constructor carrying a Service tag and its instance contract. */
|
|
21
|
+
interface ServiceToken<out Tag extends string = string, in out Instance extends AnyService = any> extends AbstractServiceConstructor<Instance>, ServiceStatics<Tag, Instance> {}
|
|
22
|
+
/** The widened token constraint used by generic Service infrastructure. */
|
|
23
|
+
type AnyServiceToken = ServiceToken<string, any>;
|
|
24
|
+
/** A concrete, constructible Service class accepted by a Layer provider. */
|
|
25
|
+
type ServiceClass<Tag extends string = string, Instance extends AnyService = AnyService> = (new (...args: any[]) => Instance) & ServiceStatics<Tag, Instance>;
|
|
26
|
+
/** Extract the instance type represented by a Service token. */
|
|
27
|
+
type ServiceInstance<T extends AnyServiceToken> = InstanceType<T>;
|
|
28
|
+
/** Extract the literal identity tag represented by a branded Service instance. */
|
|
29
|
+
type ServiceTagOf<S extends AnyService> = S[typeof ServiceIdentityTypeId];
|
|
30
|
+
/** Extract the Service token represented by a branded Service instance. */
|
|
31
|
+
type ServiceTokenOf<S extends AnyService> = S extends AnyService ? ServiceToken<ServiceTagOf<S>, S> : never;
|
|
32
|
+
/** Extract the literal identity tag represented by a Service instance or token. */
|
|
33
|
+
type ServiceTag<T extends AnyService | AnyServiceToken> = T extends AnyService ? ServiceTagOf<T> : T extends AnyServiceToken ? T['serviceTag'] : never;
|
|
34
|
+
type MethodRequirements<T> = { [K in keyof T]: T[K] extends ((...args: any[]) => infer Return) ? EffectRequirements<Return> : never; }[keyof T];
|
|
35
|
+
/**
|
|
36
|
+
* Services required by the Effect-returning methods of a Service class.
|
|
37
|
+
*
|
|
38
|
+
* This type is used automatically by `Layer.make`, `Layer.gen`, and the other
|
|
39
|
+
* provider constructors.
|
|
40
|
+
*/
|
|
41
|
+
type ServiceRequirements<S extends AnyService> = MethodRequirements<S>;
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/effect/types.d.ts
|
|
44
|
+
/**
|
|
45
|
+
* Type-only identity for a Service requirement yielded by a generator.
|
|
46
|
+
*
|
|
47
|
+
* The declaration has no runtime value. Service iterators return their
|
|
48
|
+
* resolved instances without yielding a marker at runtime.
|
|
49
|
+
*/
|
|
50
|
+
declare const ServiceRequirementTypeId: unique symbol;
|
|
51
|
+
/** Type-only identity for requirement metadata attached to Effect results. */
|
|
52
|
+
declare const EffectRequirementsTypeId: unique symbol;
|
|
53
|
+
/**
|
|
54
|
+
* Metadata carried by the yield type of a Service token.
|
|
55
|
+
*
|
|
56
|
+
* This interface is intentionally phantom: it is used only while TypeScript
|
|
57
|
+
* infers a generator's yielded values.
|
|
58
|
+
*/
|
|
59
|
+
interface ServiceRequirement<out T> {
|
|
60
|
+
readonly [ServiceRequirementTypeId]: T;
|
|
61
|
+
}
|
|
62
|
+
/** A `better-result` Result with phantom metadata for required Services. */
|
|
63
|
+
type Effect<A, E, R extends AnyService = never> = Result<A, E> & {
|
|
64
|
+
readonly [EffectRequirementsTypeId]?: R;
|
|
65
|
+
};
|
|
66
|
+
/** An Effect with erased success, error, and Service requirements. */
|
|
67
|
+
type AnyEffect = Effect<unknown, unknown, AnyService>;
|
|
68
|
+
/** Values that an Effect generator may yield. */
|
|
69
|
+
type EffectYield = Err<never, unknown> | ServiceRequirement<unknown>;
|
|
70
|
+
/** Extract the error channel from Result values yielded by a generator. */
|
|
71
|
+
type InferYieldError<Y> = Y extends Err<never, infer E> ? E : never;
|
|
72
|
+
/** Extract branded Service instances carried by yielded Service requirements. */
|
|
73
|
+
type InferYieldRequirements<Y> = Y extends ServiceRequirement<infer Requirement> ? Requirement extends AnyService ? Requirement : never : never;
|
|
74
|
+
type InferEffectRequirements<T> = T extends unknown ? typeof EffectRequirementsTypeId extends keyof T ? T extends {
|
|
75
|
+
readonly [EffectRequirementsTypeId]?: infer Requirements extends AnyService;
|
|
76
|
+
} ? Requirements : never : never : never;
|
|
77
|
+
/** Extract phantom Service requirements from an Effect or Promise. */
|
|
78
|
+
type EffectRequirements<T> = InferEffectRequirements<Awaited<T>>;
|
|
79
|
+
/** Extract the success value from an Effect or Promise. */
|
|
80
|
+
type EffectSuccess<T> = Awaited<T> extends Result<infer A, unknown> ? A : never;
|
|
81
|
+
/** Extract the error value from an Effect or Promise. */
|
|
82
|
+
type EffectError<T> = Awaited<T> extends Result<unknown, infer E> ? E : never;
|
|
83
|
+
/** Build the public Effect type produced from a generator. */
|
|
84
|
+
type EffectFromGenerator<Yield, Returned extends Result<any, any>> = Effect<InferOk<Returned>, InferYieldError<Yield> | InferErr<Returned>, InferYieldRequirements<Yield> | EffectRequirements<Returned>>;
|
|
85
|
+
//#endregion
|
|
86
|
+
//#region src/service/service.d.ts
|
|
87
|
+
type ServiceTagLiteral<Tag extends string> = string extends Tag ? never : Tag extends '' ? never : Tag;
|
|
88
|
+
interface ServiceFactory<Self> {
|
|
89
|
+
<const Tag extends string>(tag: ServiceTagLiteral<Tag>): (abstract new () => ServiceIdentity<Tag>) & {
|
|
90
|
+
readonly name: string;
|
|
91
|
+
readonly serviceTag: Tag;
|
|
92
|
+
} & {
|
|
93
|
+
readonly of: Service.FactoryOf<Self, Tag>;
|
|
94
|
+
readonly [Symbol.asyncIterator]: (this: ServiceToken<Tag, Self & ServiceIdentity<Tag>>) => AsyncGenerator<ServiceRequirement<Self>, Self, unknown>;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Declare a class-backed Service with a stable string-literal identity.
|
|
99
|
+
*
|
|
100
|
+
* The returned class is simultaneously the implementation type, the runtime
|
|
101
|
+
* dependency token, and the value yielded by `yield*` in an Effect generator.
|
|
102
|
+
* The explicit self type preserves exact instance inference, while the second
|
|
103
|
+
* call captures the tag as a literal for Layer composition and diagnostics.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* class Database extends Service<Database>()('Database') {
|
|
108
|
+
* query(): string {
|
|
109
|
+
* return 'ok'
|
|
110
|
+
* }
|
|
111
|
+
* }
|
|
112
|
+
*
|
|
113
|
+
* const database = yield* Database
|
|
114
|
+
* database.query()
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
117
|
+
* @typeParam Self The instance type implemented by the declared Service.
|
|
118
|
+
*/
|
|
119
|
+
declare function Service<Self>(): ServiceFactory<Self>;
|
|
120
|
+
/** Type-level aliases for Service tokens and their instance contracts. */
|
|
121
|
+
declare namespace Service {
|
|
122
|
+
/** The widened Service instance constraint. */
|
|
123
|
+
type Any = AnyService;
|
|
124
|
+
/** A class-backed Service token with a stable tag and instance contract. */
|
|
125
|
+
type Token<Tag extends string = string, Instance extends AnyService = any> = ServiceToken<Tag, Instance>;
|
|
126
|
+
/** A constructible Service class with a stable tag and instance contract. */
|
|
127
|
+
type Class<Tag extends string = string, Instance extends AnyService = AnyService> = ServiceClass<Tag, Instance>;
|
|
128
|
+
/** Extract the instance represented by a Service token. */
|
|
129
|
+
type Instance<T extends AnyServiceToken> = ServiceInstance<T>;
|
|
130
|
+
/** Extract the stable tag represented by a Service instance. */
|
|
131
|
+
type Tag<S extends AnyService> = ServiceTag<S>;
|
|
132
|
+
/** A branded Service instance identity with a stable tag. */
|
|
133
|
+
type Identity<Tag extends string = string> = ServiceIdentity<Tag>;
|
|
134
|
+
/** Remove the internal identity marker from a Service implementation contract. */
|
|
135
|
+
type Contract<S extends AnyService> = ServiceContract<S>;
|
|
136
|
+
/** Extract the Service token represented by a branded Service instance. */
|
|
137
|
+
type TokenOf<S extends AnyService> = ServiceTokenOf<S>;
|
|
138
|
+
/** Declaration bridge for the recursive structural `Service.of` signature. */
|
|
139
|
+
type FactoryOf<Self, Tag extends string> = (this: void, implementation: ServiceContract<Self & ServiceIdentity<Tag>>) => Self;
|
|
140
|
+
/** Extract Effect Service requirements from a Service instance. */
|
|
141
|
+
type Requirements<S extends AnyService> = ServiceRequirements<S>;
|
|
142
|
+
}
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/service/runtime.d.ts
|
|
145
|
+
/** Resolves class-backed Service tokens for a runtime execution. */
|
|
146
|
+
interface ServiceResolver {
|
|
147
|
+
/** Resolve a token to its corresponding Service instance. */
|
|
148
|
+
resolve<T extends AnyServiceToken>(token: T): InstanceType<T> | PromiseLike<InstanceType<T>>;
|
|
149
|
+
}
|
|
150
|
+
/** Provides the resolver context used by Service tokens during execution. */
|
|
151
|
+
declare class ServiceRuntime {
|
|
152
|
+
/**
|
|
153
|
+
* Run a callback with a resolver available to `yield* Service` expressions.
|
|
154
|
+
*
|
|
155
|
+
* The context is scoped to the callback and is restored afterward.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```ts
|
|
159
|
+
* const value = ServiceRuntime.run(resolver, () => {
|
|
160
|
+
* return ServiceRuntime.resolve(Database)
|
|
161
|
+
* })
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
static run<A>(resolver: ServiceResolver, program: () => A): A;
|
|
165
|
+
/** Return the resolver active in the current execution context. */
|
|
166
|
+
static current(): ServiceResolver;
|
|
167
|
+
/** Resolve a Service token using the active resolver. */
|
|
168
|
+
static resolve<T extends AnyServiceToken>(token: T): Promise<InstanceType<T>>;
|
|
169
|
+
}
|
|
170
|
+
//#endregion
|
|
171
|
+
//#region src/service/errors.d.ts
|
|
172
|
+
/** Thrown when a Service is accessed without an active runtime resolver. */
|
|
173
|
+
declare class ServiceRuntimeNotConfiguredError extends Error {
|
|
174
|
+
constructor();
|
|
175
|
+
}
|
|
176
|
+
/** Thrown when a runtime has no provider for the requested Service tag. */
|
|
177
|
+
declare class ServiceNotFoundError extends Error {
|
|
178
|
+
readonly service: AnyServiceToken;
|
|
179
|
+
constructor(service: AnyServiceToken);
|
|
180
|
+
}
|
|
181
|
+
//#endregion
|
|
182
|
+
//#region src/scope/errors.d.ts
|
|
183
|
+
/** Thrown when Scope context is accessed outside an active Scope execution. */
|
|
184
|
+
declare class ScopeRuntimeNotConfiguredError extends Error {
|
|
185
|
+
constructor();
|
|
186
|
+
}
|
|
187
|
+
/** Thrown when a resource or finalizer is added after Scope closure begins. */
|
|
188
|
+
declare class ScopeClosedError extends Error {
|
|
189
|
+
constructor();
|
|
190
|
+
}
|
|
191
|
+
/** Aggregates finalizer failures encountered while closing a Scope. */
|
|
192
|
+
declare class ScopeCloseError extends Error {
|
|
193
|
+
readonly causes: readonly unknown[];
|
|
194
|
+
constructor(causes: readonly unknown[]);
|
|
195
|
+
}
|
|
196
|
+
/** Thrown when a value has neither Symbol.dispose nor Symbol.asyncDispose. */
|
|
197
|
+
declare class ResourceNotDisposableError extends Error {
|
|
198
|
+
constructor();
|
|
199
|
+
}
|
|
200
|
+
//#endregion
|
|
201
|
+
//#region src/scope/types.d.ts
|
|
202
|
+
/** A value that may be returned synchronously or asynchronously. */
|
|
203
|
+
type MaybePromise$1<T> = T | PromiseLike<T>;
|
|
204
|
+
/** Final outcome supplied to Scope finalizers and resource releases. */
|
|
205
|
+
type ScopeOutcome = {
|
|
206
|
+
/** Indicates that the owning program completed successfully. */
|
|
207
|
+
readonly status: 'success';
|
|
208
|
+
} | {
|
|
209
|
+
/** Indicates that the owning program failed or was interrupted. */
|
|
210
|
+
readonly status: 'failure';
|
|
211
|
+
/** The original program or execution failure. */
|
|
212
|
+
readonly cause: unknown;
|
|
213
|
+
};
|
|
214
|
+
/** Cleanup callback registered with a Scope. */
|
|
215
|
+
type ScopeFinalizer = (outcome: ScopeOutcome) => MaybePromise$1<void>;
|
|
216
|
+
/** Aggregated cleanup information reported at an execution boundary. */
|
|
217
|
+
type CleanupFailureDiagnostic = {
|
|
218
|
+
/** Outcome used for the Scope close that triggered cleanup. */
|
|
219
|
+
readonly outcome: ScopeOutcome;
|
|
220
|
+
/** Aggregated finalizer failure. */
|
|
221
|
+
readonly error: ScopeCloseError;
|
|
222
|
+
};
|
|
223
|
+
type SyncDisposableResource = {
|
|
224
|
+
[Symbol.dispose]: () => void;
|
|
225
|
+
[Symbol.asyncDispose]?: () => MaybePromise$1<void>;
|
|
226
|
+
};
|
|
227
|
+
type AsyncDisposableResource = {
|
|
228
|
+
[Symbol.dispose]?: () => void;
|
|
229
|
+
[Symbol.asyncDispose]: () => MaybePromise$1<void>;
|
|
230
|
+
};
|
|
231
|
+
/** A value implementing at least one JavaScript disposal protocol. */
|
|
232
|
+
type DisposableResource = SyncDisposableResource | AsyncDisposableResource;
|
|
233
|
+
//#endregion
|
|
234
|
+
//#region src/internal/variance.d.ts
|
|
235
|
+
/** Type-level marker for a value produced by `A`. */
|
|
236
|
+
type Covariant<A> = () => A;
|
|
237
|
+
/** Type-level marker that both consumes and produces `A`. */
|
|
238
|
+
type Invariant<A> = (value: A) => A;
|
|
239
|
+
//#endregion
|
|
240
|
+
//#region src/utils/types.d.ts
|
|
241
|
+
type MaybePromise<T> = T | PromiseLike<T>;
|
|
242
|
+
//#endregion
|
|
243
|
+
//#region src/internal/missing-dependencies.d.ts
|
|
244
|
+
declare const MissingDependenciesTypeId: unique symbol;
|
|
245
|
+
type MissingDependencies<Missing extends AnyService> = {
|
|
246
|
+
readonly [MissingDependenciesTypeId]: Missing;
|
|
247
|
+
};
|
|
248
|
+
//#endregion
|
|
249
|
+
//#region src/layer/metadata.d.ts
|
|
250
|
+
/** Package-private declaration-only carrier for inferred Layer provenance. */
|
|
251
|
+
declare const LayerProvenanceTypeId: unique symbol;
|
|
252
|
+
interface ProviderEntry<out Provided extends AnyService, out RawRequired extends AnyService = never> {
|
|
253
|
+
readonly provided: Provided;
|
|
254
|
+
readonly required: RawRequired;
|
|
255
|
+
}
|
|
256
|
+
interface ErasedProvenance<out Provided extends AnyService, out StickyRequired extends AnyService> {
|
|
257
|
+
readonly provided: Provided;
|
|
258
|
+
readonly stickyRequired: StickyRequired;
|
|
259
|
+
}
|
|
260
|
+
interface LayerProvenance<out Entries extends ProviderEntry<AnyService, AnyService> = never, out Erased extends ErasedProvenance<AnyService, AnyService> = never> {
|
|
261
|
+
readonly [LayerProvenanceTypeId]: {
|
|
262
|
+
readonly entries: Entries;
|
|
263
|
+
readonly erased: Erased;
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
//#endregion
|
|
267
|
+
//#region src/layer/inference.d.ts
|
|
268
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
269
|
+
type IsNever<T> = [T] extends [never] ? true : false;
|
|
270
|
+
type IsUnion<T, Candidate = T> = T extends unknown ? [Candidate] extends [T] ? false : true : never;
|
|
271
|
+
/** Any Layer shape accepted by type-level inference helpers. */
|
|
272
|
+
type LayerInput = Layer<any, any> | Layer<never, any>;
|
|
273
|
+
/** Extract the public Service environment channels from a Layer. */
|
|
274
|
+
type ProvidedEnvironment<L extends LayerInput> = L extends Layer<infer Provided, infer _Required> ? Provided : never;
|
|
275
|
+
type RequiredEnvironment<L extends LayerInput> = L extends Layer<infer _Provided, infer Required> ? Required : never;
|
|
276
|
+
type HasWidenedTag<Services> = IsAny<Services> extends true ? false : Services extends AnyService ? string extends ServiceTagOf<Services> ? true : false : false;
|
|
277
|
+
type SameServiceTag<Left extends AnyService, Right extends AnyService> = [ServiceTagOf<Left>] extends [ServiceTagOf<Right>] ? [ServiceTagOf<Right>] extends [ServiceTagOf<Left>] ? true : false : false;
|
|
278
|
+
type SameServiceContract<Left extends AnyService, Right extends AnyService> = [ServiceContract<Left>] extends [ServiceContract<Right>] ? [ServiceContract<Right>] extends [ServiceContract<Left>] ? true : false : false;
|
|
279
|
+
type SameService<Left extends AnyService, Right extends AnyService> = SameServiceTag<Left, Right> extends true ? SameServiceContract<Left, Right> : false;
|
|
280
|
+
type RequirementProvided<Requirement extends AnyService, Provided extends AnyService> = Provided extends AnyService ? SameService<Requirement, Provided> : false;
|
|
281
|
+
type MissingRequirement<Requirement extends AnyService, Provided> = true extends RequirementProvided<Requirement, Extract<Provided, AnyService>> ? never : Requirement;
|
|
282
|
+
/**
|
|
283
|
+
* Existing Runtime matching semantics. Widened Service environments are an
|
|
284
|
+
* explicit execution erasure and therefore satisfy every concrete requirement.
|
|
285
|
+
*/
|
|
286
|
+
type MissingServices<Required extends AnyService, Provided extends AnyService> = ServiceToken<string, Required> extends ServiceToken<string, Provided> ? never : IsAny<Required> extends true ? never : IsAny<Provided> extends true ? never : true extends HasWidenedTag<Required | Provided> ? never : Required extends AnyService ? MissingRequirement<Required, Provided> : never;
|
|
287
|
+
/** Layer matching that keeps widened Service.Any as an external requirement. */
|
|
288
|
+
type LayerExternalRequirements<RawRequired extends AnyService, Provided extends AnyService> = true extends HasWidenedTag<Extract<RawRequired | Provided, AnyService>> ? Extract<RawRequired, AnyService> : MissingServices<RawRequired, Provided>;
|
|
289
|
+
type AnyProviderEntry = ProviderEntry<AnyService, AnyService>;
|
|
290
|
+
type AnyErasedProvenance = ErasedProvenance<AnyService, AnyService>;
|
|
291
|
+
type EntryProvided<Entries> = Entries extends ProviderEntry<infer Provided, any> ? Provided : never;
|
|
292
|
+
type EntryRequired<Entries> = Entries extends ProviderEntry<any, infer Required> ? Required : never;
|
|
293
|
+
type ErasedProvided<Erased> = Erased extends ErasedProvenance<infer Provided, any> ? Provided : never;
|
|
294
|
+
type ErasedRequired<Erased> = Erased extends ErasedProvenance<any, infer Required> ? Required : never;
|
|
295
|
+
/** Extract precise provider entries carried by an inferred Layer. */
|
|
296
|
+
type PreciseEntries<L extends LayerInput> = L extends LayerProvenance<infer Entries, any> ? Entries : never;
|
|
297
|
+
/**
|
|
298
|
+
* Extract erased provenance, falling back to the public channels for an
|
|
299
|
+
* explicitly annotated Layer.
|
|
300
|
+
*/
|
|
301
|
+
type ErasedEntries<L extends LayerInput> = L extends LayerProvenance<any, infer Erased> ? Erased : [ProvidedEnvironment<L> | RequiredEnvironment<L>] extends [never] ? never : ErasedProvenance<ProvidedEnvironment<L>, RequiredEnvironment<L>>;
|
|
302
|
+
type LayerMetadata<Entries extends AnyProviderEntry, Erased extends AnyErasedProvenance> = [Entries | Erased] extends [never] ? unknown : LayerProvenance<Entries, Erased>;
|
|
303
|
+
/** Opaque internal result type used by Layer constructors and combinators. */
|
|
304
|
+
type LayerResult<Entries extends AnyProviderEntry, Erased extends AnyErasedProvenance = never> = Layer<EntryProvided<Entries> | ErasedProvided<Erased>, LayerExternalRequirements<EntryRequired<Entries> | ErasedRequired<Erased>, EntryProvided<Entries> | ErasedProvided<Erased>>> & LayerMetadata<Entries, Erased>;
|
|
305
|
+
type LayerChannelPair<L> = L extends Layer<infer Provided, infer Required> ? [Provided, Required] : never;
|
|
306
|
+
type ExactUncheckedArm<L> = LayerChannelPair<L> extends [infer Provided extends AnyService, infer Required extends AnyService] ? IsAny<Provided> extends true ? IsAny<Required> extends true ? true : false : IsNever<Provided> extends true ? IsAny<Required> extends true ? true : false : false : false;
|
|
307
|
+
type HasUncheckedProvidedArm<L> = L extends unknown ? LayerChannelPair<L> extends [infer Provided, infer Required] ? IsAny<Provided> extends true ? IsAny<Required> extends true ? true : false : false : false : never;
|
|
308
|
+
type HasUncheckedEmptyArm<L> = L extends unknown ? LayerChannelPair<L> extends [infer Provided, infer Required] ? IsNever<Provided> extends true ? IsAny<Required> extends true ? true : false : false : false : never;
|
|
309
|
+
type HasNonUncheckedArm<L> = L extends unknown ? ExactUncheckedArm<L> extends true ? false : true : never;
|
|
310
|
+
/** Recognize only the documented exact unchecked Layer sentinels. */
|
|
311
|
+
type IsExactUncheckedLayer<L> = IsUnion<L> extends false ? ExactUncheckedArm<L> : true extends HasNonUncheckedArm<L> ? false : true extends HasUncheckedProvidedArm<L> ? true extends HasUncheckedEmptyArm<L> ? true : false : false;
|
|
312
|
+
type PartialAnyArm<L> = LayerChannelPair<L> extends [infer Provided extends AnyService, infer Required extends AnyService] ? IsAny<Provided> extends true ? IsAny<Required> extends true ? false : true : IsAny<Required> extends true ? IsNever<Provided> extends true ? false : true : false : false;
|
|
313
|
+
/** Detect any Layer constituent with only one erased generic channel. */
|
|
314
|
+
type HasPartialAnyChannel<L> = true extends (L extends unknown ? PartialAnyArm<L> : never) ? true : false;
|
|
315
|
+
/** Detect a concrete union of Layer values, preserving the original shape. */
|
|
316
|
+
type IsConcreteUnion<L> = IsAny<L> extends true ? false : IsUnion<L> extends true ? IsExactUncheckedLayer<L> extends true ? false : true : false;
|
|
317
|
+
type LayerInputState<L> = IsExactUncheckedLayer<L> extends true ? 'unchecked' : HasPartialAnyChannel<L> extends true ? 'invalid-partial-any' : IsConcreteUnion<L> extends true ? 'invalid-union' : 'typed';
|
|
318
|
+
type InvalidLayerErasure = {
|
|
319
|
+
readonly __betterEffectInvalidLayerErasure: unique symbol;
|
|
320
|
+
};
|
|
321
|
+
type AmbiguousLayerUnion = {
|
|
322
|
+
readonly __betterEffectAmbiguousLayerUnion: unique symbol;
|
|
323
|
+
};
|
|
324
|
+
/** Validate an original Layer argument without widening it to Layer.Any. */
|
|
325
|
+
type ValidateLayerInput<L extends LayerInput> = LayerInputState<L> extends 'invalid-partial-any' ? InvalidLayerErasure : LayerInputState<L> extends 'invalid-union' ? AmbiguousLayerUnion : unknown;
|
|
326
|
+
/** Validate every original element of a merge tuple. */
|
|
327
|
+
type ValidateLayerTuple<Layers extends readonly LayerInput[]> = { [Index in keyof Layers]: ValidateLayerInput<Layers[Index]>; };
|
|
328
|
+
/** Remove compatible Services from a union while retaining all other identities. */
|
|
329
|
+
type RemoveCompatibleServices<Provided extends AnyService, Replacements extends AnyService> = Provided extends AnyService ? true extends (Replacements extends AnyService ? SameService<Provided, Replacements> : false) ? never : Provided : never;
|
|
330
|
+
type HasCompatibleService<Provided extends AnyService, Replacements extends AnyService> = true extends (Replacements extends AnyService ? SameService<Provided, Replacements> : false) ? true : false;
|
|
331
|
+
type RemoveCompatibleEntries<Entries extends AnyProviderEntry, Replacements extends AnyService> = Entries extends ProviderEntry<infer Provided, any> ? HasCompatibleService<Provided, Replacements> extends true ? never : Entries : never;
|
|
332
|
+
type ReplacePreciseOne<Entries extends AnyProviderEntry, Replacement extends LayerInput> = RemoveCompatibleEntries<Entries, Extract<ProvidedEnvironment<Replacement>, AnyService>> | PreciseEntries<Replacement>;
|
|
333
|
+
type ReplaceErasedOne<Erased extends AnyErasedProvenance, Replacement extends LayerInput> = Erased extends ErasedProvenance<infer Provided, infer StickyRequired> ? ErasedProvenance<RemoveCompatibleServices<Provided, Extract<ProvidedEnvironment<Replacement>, AnyService>>, StickyRequired> : never;
|
|
334
|
+
type ApplyPreciseOverrides<Entries extends AnyProviderEntry, Overrides extends readonly LayerInput[]> = Overrides extends readonly [infer Head extends LayerInput, ...infer Tail extends readonly LayerInput[]] ? ApplyPreciseOverrides<ReplacePreciseOne<Entries, Head>, Tail> : Entries;
|
|
335
|
+
type ApplyErasedOverrides<Erased extends AnyErasedProvenance, Overrides extends readonly LayerInput[]> = Overrides extends readonly [infer Head extends LayerInput, ...infer Tail extends readonly LayerInput[]] ? ApplyErasedOverrides<ReplaceErasedOne<Erased, Head> | Extract<ErasedEntries<Head>, AnyErasedProvenance>, Tail> : Erased;
|
|
336
|
+
type HasUncheckedLayerInTuple<Layers extends readonly LayerInput[]> = true extends (Layers[number] extends unknown ? IsExactUncheckedLayer<Layers[number]> : never) ? true : false;
|
|
337
|
+
type MergeLayerResult<Layers extends readonly LayerInput[]> = HasUncheckedLayerInTuple<Layers> extends true ? Layer<any, any> : LayerResult<PreciseEntries<Layers[number]>, ErasedEntries<Layers[number]>>;
|
|
338
|
+
/** Internal result type for Layer.merge. */
|
|
339
|
+
type MergeResult<Layers extends readonly LayerInput[]> = MergeLayerResult<Layers>;
|
|
340
|
+
type OverrideLayerResultUnchecked<Base extends LayerInput, Overrides extends readonly LayerInput[]> = HasUncheckedLayerInTuple<[Base, ...Overrides]> extends true ? Layer<any, any> : LayerResult<ApplyPreciseOverrides<PreciseEntries<Base>, Overrides>, ApplyErasedOverrides<ErasedEntries<Base>, Overrides>>;
|
|
341
|
+
/** Internal result type for Layer.override. */
|
|
342
|
+
type OverrideResult<Base extends LayerInput, Replacement extends LayerInput> = OverrideLayerResultUnchecked<Base, readonly [Replacement]>;
|
|
343
|
+
/** Internal result type for an ordered override tuple. */
|
|
344
|
+
type OverrideLayerResult<Base extends LayerInput, Overrides extends readonly LayerInput[]> = OverrideLayerResultUnchecked<Base, Overrides>;
|
|
345
|
+
type IncompatibleOverridePair<Current extends AnyService, Replacement extends AnyService> = SameServiceTag<Current, Replacement> extends true ? SameServiceContract<Current, Replacement> extends true ? never : ServiceTokenOf<Replacement> : never;
|
|
346
|
+
/** Fully distributive same-tag incompatible override comparison. */
|
|
347
|
+
type IncompatibleOverridePairs<CurrentProvided extends AnyService, ReplacementProvided extends AnyService> = CurrentProvided extends AnyService ? ReplacementProvided extends AnyService ? IncompatibleOverridePair<CurrentProvided, ReplacementProvided> : never : never;
|
|
348
|
+
type IncompatibleLayerOverride<Tokens extends AnyServiceToken> = {
|
|
349
|
+
readonly __betterEffectIncompatibleLayerOverride: Tokens;
|
|
350
|
+
};
|
|
351
|
+
type InvalidWidenedProvidedEnvironment = {
|
|
352
|
+
readonly __betterEffectWidenedProvidedEnvironment: unique symbol;
|
|
353
|
+
};
|
|
354
|
+
type ValidateOverrideLayerInput<L extends LayerInput> = IsExactUncheckedLayer<L> extends true ? unknown : ValidateLayerInput<L> & (true extends HasWidenedTag<Extract<ProvidedEnvironment<L>, AnyService>> ? InvalidWidenedProvidedEnvironment : unknown);
|
|
355
|
+
/** Validate one override against the currently accumulated Layer state. */
|
|
356
|
+
type ValidateOneOverride<Current extends LayerInput, Replacement extends LayerInput> = ValidateOverrideLayerInput<Current> & ValidateOverrideLayerInput<Replacement> & (IsExactUncheckedLayer<Current> extends true ? unknown : IsExactUncheckedLayer<Replacement> extends true ? unknown : [IncompatibleOverridePairs<Extract<ProvidedEnvironment<Current>, AnyService>, Extract<ProvidedEnvironment<Replacement>, AnyService>>] extends [never] ? unknown : IncompatibleLayerOverride<IncompatibleOverridePairs<Extract<ProvidedEnvironment<Current>, AnyService>, Extract<ProvidedEnvironment<Replacement>, AnyService>>>);
|
|
357
|
+
/** Validate ordered overrides against the state produced by earlier overrides. */
|
|
358
|
+
type ValidateOverrides<Base extends LayerInput, Overrides extends readonly LayerInput[]> = Overrides extends readonly [infer Head extends LayerInput, ...infer Tail extends readonly LayerInput[]] ? ValidateOneOverride<Base, Head> & ValidateOverrides<OverrideResult<Base, Head>, Tail> : unknown;
|
|
359
|
+
/** A Layer accepted by Runtime boundaries after completeness validation. */
|
|
360
|
+
type CompleteInput<L extends LayerInput> = ValidateLayerInput<L> & (LayerInputState<L> extends 'unchecked' ? L : LayerInputState<L> extends 'typed' ? [RequiredEnvironment<L>] extends [never] ? L : L & MissingDependencies<Extract<RequiredEnvironment<L>, AnyService>> : L);
|
|
361
|
+
type ExecutionProgram<A> = () => A | PromiseLike<A>;
|
|
362
|
+
type CompleteExecutionWithRequirements<Provided extends AnyService, A, Required extends AnyService> = [MissingServices<Required, Provided>] extends [never] ? ExecutionProgram<A> : ExecutionProgram<A> & MissingDependencies<MissingServices<Required, Provided>>;
|
|
363
|
+
/** Keep execution callbacks unchanged when their Effect requirements are met. */
|
|
364
|
+
type CompleteExecution<Provided extends AnyService, A> = CompleteExecutionWithRequirements<Provided, A, EffectRequirements<A>>;
|
|
365
|
+
//#endregion
|
|
366
|
+
//#region src/layer/types.d.ts
|
|
367
|
+
/** Runtime-facing provider registration supplied by a Layer backend. */
|
|
368
|
+
interface LayerRegistration {
|
|
369
|
+
/** The class-backed Service token provided by this registration. */
|
|
370
|
+
readonly service: ServiceClass<any, any>;
|
|
371
|
+
/** Lazily acquire the Service instance; concrete types are erased at this backend boundary. */
|
|
372
|
+
readonly acquire: () => MaybePromise<unknown>;
|
|
373
|
+
}
|
|
374
|
+
/** Generator shape used by `Layer.gen` and `Layer.scopedGen`. */
|
|
375
|
+
type LayerGenerator<S extends ServiceClass<any, any>, Yield extends ServiceRequirement<unknown> = ServiceRequirement<unknown>> = () => AsyncGenerator<Yield, ServiceContract<InstanceType<S>>, unknown>;
|
|
376
|
+
/** Service requirements inferred from a provider's methods and generator. */
|
|
377
|
+
type LayerGeneratorRequirements<S extends ServiceClass<any, any>, Yield extends ServiceRequirement<unknown>> = ServiceRequirements<InstanceType<S>> | InferYieldRequirements<Yield>;
|
|
378
|
+
//#endregion
|
|
379
|
+
//#region src/layer/layer.d.ts
|
|
380
|
+
declare const LayerTypeId: unique symbol;
|
|
381
|
+
interface LayerVariance<in out Provided, out Required> {
|
|
382
|
+
readonly _Provided: Invariant<Provided>;
|
|
383
|
+
readonly _Required: Covariant<Required>;
|
|
384
|
+
}
|
|
385
|
+
interface LayerProvider extends LayerRegistration {
|
|
386
|
+
/** Provider storage deliberately erases the concrete instance type. */
|
|
387
|
+
readonly release?: (instance: unknown, outcome: ScopeOutcome) => MaybePromise<void>;
|
|
388
|
+
}
|
|
389
|
+
/** A Service class whose constructor can be called without arguments. */
|
|
390
|
+
type DefaultConstructibleServiceClass<Tag extends string = string, Instance extends AnyService = AnyService> = ServiceClass<Tag, Instance> & (new () => Instance);
|
|
391
|
+
/**
|
|
392
|
+
* Declarative collection of Service providers.
|
|
393
|
+
*
|
|
394
|
+
* A Layer describes how to acquire implementations; it does not execute
|
|
395
|
+
* providers until a `Runtime` is created. Use `merge` to compose distinct
|
|
396
|
+
* providers and `override` when replacing an existing provider intentionally.
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* ```ts
|
|
400
|
+
* const AppLive = Layer.merge(
|
|
401
|
+
* Layer.succeed(Database, database),
|
|
402
|
+
* Layer.make(UserRepository)
|
|
403
|
+
* )
|
|
404
|
+
*
|
|
405
|
+
* const runtime = await Runtime.make(AppLive, backend)
|
|
406
|
+
* ```
|
|
407
|
+
*/
|
|
408
|
+
declare class Layer<in out Provided extends AnyService = AnyService, out Required extends AnyService = AnyService> {
|
|
409
|
+
readonly [LayerTypeId]: LayerVariance<Provided, Required>;
|
|
410
|
+
/** The provider registrations retained by this Layer. */
|
|
411
|
+
readonly providers: readonly LayerProvider[];
|
|
412
|
+
private constructor();
|
|
413
|
+
/** Create a Layer that lazily acquires a Service instance. */
|
|
414
|
+
static make<S extends DefaultConstructibleServiceClass<any, any>>(service: S): LayerResult<ProviderEntry<InstanceType<S>, ServiceRequirements<InstanceType<S>>>>;
|
|
415
|
+
static make<S extends ServiceClass<any, any>>(service: S, acquire: () => MaybePromise<ServiceContract<InstanceType<S>>>): LayerResult<ProviderEntry<InstanceType<S>, ServiceRequirements<InstanceType<S>>>>;
|
|
416
|
+
/** Create a Layer from an already-constructed Service instance. */
|
|
417
|
+
static succeed<S extends ServiceClass<any, any>>(service: S, instance: ServiceContract<InstanceType<S>>): LayerResult<ProviderEntry<InstanceType<S>, ServiceRequirements<InstanceType<S>>>>;
|
|
418
|
+
/** Define a provider with Runtime-root cleanup. */
|
|
419
|
+
static scoped<S extends ServiceClass<any, any>>(service: S, acquire: () => MaybePromise<ServiceContract<InstanceType<S>>>, release: (instance: InstanceType<S>) => MaybePromise<void>): LayerResult<ProviderEntry<InstanceType<S>, ServiceRequirements<InstanceType<S>>>>;
|
|
420
|
+
/** Define a provider whose acquisition can yield contextual Services. */
|
|
421
|
+
static scopedGen<S extends ServiceClass<any, any>, Yield extends ServiceRequirement<unknown>>(service: S, factory: LayerGenerator<S, Yield>, release: (instance: InstanceType<S>, outcome: ScopeOutcome) => MaybePromise<void>): LayerResult<ProviderEntry<InstanceType<S>, LayerGeneratorRequirements<S, Yield>>>;
|
|
422
|
+
/** Define a provider whose acquisition can yield contextual Services. */
|
|
423
|
+
static gen<S extends ServiceClass<any, any>, Yield extends ServiceRequirement<unknown>>(service: S, factory: LayerGenerator<S, Yield>): LayerResult<ProviderEntry<InstanceType<S>, LayerGeneratorRequirements<S, Yield>>>;
|
|
424
|
+
/** Compose Layers without replacing providers. */
|
|
425
|
+
static merge<const Layers extends readonly LayerInput[]>(...layers: Layers & ValidateLayerTuple<Layers>): MergeResult<Layers>;
|
|
426
|
+
/** Replace providers in a base Layer, using tag identity and compatible contracts. */
|
|
427
|
+
static override<Base extends LayerInput, const Overrides extends readonly LayerInput[]>(base: Base & ValidateLayerInput<Base>, ...overrides: Overrides & ValidateOverrides<Base, Overrides>): OverrideLayerResult<Base, Overrides>;
|
|
428
|
+
}
|
|
429
|
+
/** Type-level aliases for inspecting Layer environments and completeness. */
|
|
430
|
+
declare namespace Layer {
|
|
431
|
+
/** The widened Layer shape accepted by generic Layer infrastructure. */
|
|
432
|
+
type Any = LayerInput;
|
|
433
|
+
/** Extract the branded Service instances provided by a Layer. */
|
|
434
|
+
type Provided<L extends LayerInput> = ProvidedEnvironment<L>;
|
|
435
|
+
/** Extract the external Service requirements of a Layer. */
|
|
436
|
+
type Required<L extends LayerInput> = RequiredEnvironment<L>;
|
|
437
|
+
/** Validate a Layer's requirements and input shape. */
|
|
438
|
+
type Complete<L extends LayerInput> = CompleteInput<L>;
|
|
439
|
+
}
|
|
440
|
+
//#endregion
|
|
441
|
+
//#region src/layer/errors.d.ts
|
|
442
|
+
type LayerCause = Extract<ScopeOutcome, {
|
|
443
|
+
readonly status: 'failure';
|
|
444
|
+
}>['cause'];
|
|
445
|
+
/** Thrown when a Layer registers the same Service tag more than once. */
|
|
446
|
+
declare class DuplicateServiceError extends Error {
|
|
447
|
+
readonly service: ServiceClass<any>;
|
|
448
|
+
constructor(service: ServiceClass<any>);
|
|
449
|
+
}
|
|
450
|
+
/** Thrown when one Service tag is associated with incompatible constructors. */
|
|
451
|
+
declare class ServiceTagCollisionError extends Error {
|
|
452
|
+
readonly existing: AnyServiceToken;
|
|
453
|
+
readonly incoming: AnyServiceToken;
|
|
454
|
+
constructor(existing: AnyServiceToken, incoming: AnyServiceToken);
|
|
455
|
+
}
|
|
456
|
+
/** Thrown when a backend fails while registering a Layer provider. */
|
|
457
|
+
declare class LayerRegistrationError extends Error {
|
|
458
|
+
readonly service: ServiceClass<any> | undefined;
|
|
459
|
+
readonly registrationCause: LayerCause;
|
|
460
|
+
readonly cleanupCause?: LayerCause | undefined;
|
|
461
|
+
constructor(service: ServiceClass<any> | undefined, registrationCause: LayerCause, cleanupCause?: LayerCause | undefined);
|
|
462
|
+
}
|
|
463
|
+
/** Thrown when one or more Layer-owned resources fail during disposal. */
|
|
464
|
+
declare class LayerDisposeError extends Error {
|
|
465
|
+
readonly causes: readonly unknown[];
|
|
466
|
+
constructor(causes: readonly unknown[]);
|
|
467
|
+
}
|
|
468
|
+
/** Thrown when a Layer generator yields a value other than a Service requirement. */
|
|
469
|
+
declare class LayerGeneratorYieldError extends Error {
|
|
470
|
+
readonly service: ServiceClass<any>;
|
|
471
|
+
constructor(service: ServiceClass<any>);
|
|
472
|
+
}
|
|
473
|
+
//#endregion
|
|
474
|
+
//#region src/runtime/outcome.d.ts
|
|
475
|
+
/** Aggregated cleanup information reported during Runtime shutdown. */
|
|
476
|
+
type RuntimeShutdownDiagnostic = {
|
|
477
|
+
/** Final outcome supplied to the Runtime root Scope. */
|
|
478
|
+
readonly outcome: ScopeOutcome;
|
|
479
|
+
/** Aggregated root-Scope and backend cleanup failure. */
|
|
480
|
+
readonly error: LayerDisposeError;
|
|
481
|
+
};
|
|
482
|
+
/** Observer notified about cleanup failures without changing primary results. */
|
|
483
|
+
type CleanupFailureObserver = (diagnostic: CleanupFailureDiagnostic | RuntimeShutdownDiagnostic) => MaybePromise$1<void>;
|
|
484
|
+
/** Optional Runtime configuration for cleanup diagnostics. */
|
|
485
|
+
type RuntimeOptions = {
|
|
486
|
+
/** Optional observer for best-effort cleanup diagnostics. */
|
|
487
|
+
readonly onCleanupFailure?: CleanupFailureObserver;
|
|
488
|
+
};
|
|
489
|
+
//#endregion
|
|
490
|
+
//#region src/layer/backend.d.ts
|
|
491
|
+
/** Runtime adapter responsible for registering, resolving, and disposing Layer providers. */
|
|
492
|
+
interface LayerBackend extends ServiceResolver {
|
|
493
|
+
/** Register one Service provider with the backend. */
|
|
494
|
+
register(registration: LayerRegistration): MaybePromise<void>;
|
|
495
|
+
/** Dispose all backend-owned instances and provider registrations. */
|
|
496
|
+
disposeAll(): MaybePromise<void>;
|
|
497
|
+
}
|
|
498
|
+
//#endregion
|
|
499
|
+
export { AnyEffect as A, ServiceClass as B, ScopeClosedError as C, ServiceResolver as D, ServiceRuntimeNotConfiguredError as E, EffectSuccess as F, ServiceTag as G, ServiceIdentity as H, EffectYield as I, ServiceToken as K, ServiceRequirement as L, EffectError as M, EffectFromGenerator as N, ServiceRuntime as O, EffectRequirements as P, AnyService as R, ScopeCloseError as S, ServiceNotFoundError as T, ServiceInstance as U, ServiceContract as V, ServiceRequirements as W, DisposableResource as _, DuplicateServiceError as a, ScopeOutcome as b, LayerRegistrationError as c, LayerRegistration as d, CompleteExecution as f, CleanupFailureDiagnostic as g, ProvidedEnvironment as h, RuntimeShutdownDiagnostic as i, Effect as j, Service as k, ServiceTagCollisionError as l, LayerInput as m, CleanupFailureObserver as n, LayerDisposeError as o, CompleteInput as p, ServiceTokenOf as q, RuntimeOptions as r, LayerGeneratorYieldError as s, LayerBackend as t, Layer as u, MaybePromise$1 as v, ScopeRuntimeNotConfiguredError as w, ResourceNotDisposableError as x, ScopeFinalizer as y, AnyServiceToken as z };
|
|
500
|
+
//# sourceMappingURL=index-DMfjhNR_.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DMfjhNR_.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/internal/variance.ts","../src/utils/types.ts","../src/internal/missing-dependencies.ts","../src/layer/metadata.ts","../src/layer/inference.ts","../src/layer/types.ts","../src/layer/layer.ts","../src/layer/errors.ts","../src/runtime/outcome.ts","../src/layer/backend.ts"],"mappings":"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"}
|