Skip to content
Effect Days 2026 Get your ticket

LayerMap

8 exports Added in v3.14.0 Source

Constructors

fromRecord

Added in v3.14.0 Source

Signature

declare function fromRecord<Layers extends Record<string, Layer<any, any, any>>, Preload extends boolean = false>(layers: Layers, options?: {
readonly idleTimeToLive?: DurationInput;
readonly preload?: Preload;
}): Effect<LayerMap<keyof Layers, Layers[keyof Layers] extends Layer<_A, _E, _R> ? _A : never, Preload extends true ? never : Layers[keyof Layers] extends Layer<_A, _E, _R> ? _E : never>, Preload extends true ? never : Layers[keyof Layers] extends Layer<_A, _E, _R> ? _E : never, Scope | Layers[keyof Layers] extends Layer<_A, _E, _R> ? _R : never>

Constructors A `LayerMap` Allows You To Create A Map Of Layer'S That Can Be Used To Dynamically Access Resources Based On A Key. ```Ts Import { NodeRuntime } From "@Effect/Platform-Node" Import { Context, Effect, FiberRef, Layer, LayerMap } From "Effect" Class Greeter Extends Context.Tag("Greeter")<Greeter, { Greet: Effect.Effect<String> }>() {} // Create A Service That Wraps A LayerMap Class GreeterMap Extends LayerMap.Service<GreeterMap>()("GreeterMap", { // Define The Lookup Function For The Layer Map // // The Returned Layer Will Be Used To Provide The Greeter Service For The // Given Name. Lookup: (Name: String) => Layer.Succeed(Greeter, { Greet: Effect.Succeed(`Hello, ${Name}!`) }).Pipe( Layer.Merge(Layer.LocallyScoped(FiberRef.CurrentConcurrency, 123)) ), // If A Layer Is Not Used For A Certain Amount Of Time, It Can Be Removed IdleTimeToLive: "5 Seconds", // Supply The Dependencies For The Layers In The LayerMap Dependencies: [] }) {} // Usage Const Program: Effect.Effect<Void, Never, GreeterMap> = Effect.Gen(Function*() { // Access And Use The Greeter Service Const Greeter = Yield* Greeter Yield* Effect.Log(Yield* Greeter.Greet) }).Pipe( // Use The GreeterMap Service To Provide A Variant Of The Greeter Service Effect.Provide(GreeterMap.Get("John")) ) // Run The Program Program.Pipe( Effect.Provide(GreeterMap.Default), NodeRuntime.RunMain ) ```

make

Added in v3.14.0 Source

Signature

declare const make: <K, L extends Layer.Layer<any, any, any>, PreloadKeys extends Iterable<K> | undefined = undefined>(lookup: (key: K) => L, options?: {
readonly idleTimeToLive?: Duration.DurationInput;
readonly preloadKeys?: PreloadKeys;
}) => Effect.Effect<LayerMap<K, L extends Layer.Layer<infer _A, infer _E, infer _R> ? _A : never, L extends Layer.Layer<infer _A, infer _E, infer _R> ? _E : never>, PreloadKeys extends undefined ? never : L extends Layer.Layer<infer _A, infer _E, infer _R> ? _E : never, Scope.Scope | L extends Layer.Layer<infer _A, infer _E, infer _R> ? _R : never>

Models

LayerMap interface

Added in v3.14.0 Source

Signature

interface LayerMap<in K, in out I, out E = never> {
readonly [TypeId]: typeof TypeId;
readonly rcMap: RcMap<K, {
readonly layer: Layer<I, E>;
readonly runtimeEffect: Effect<Runtime<I>, E, Scope>;
}, E>;
get(key: K): Layer<I, E>;
invalidate(key: K): Effect<void>;
runtime(key: K): Effect<Runtime<I>, E, Scope>;
}

Service

Service

Added in v3.14.0 Source

TagClass interface

Added in v3.14.0 Source

Signature

interface TagClass<in out Self, in out Id extends string, in out K, in out I, in out E, in out R, in out LE, in out Deps extends Layer.Layer<any, any, any>> extends TagClass<Self, Id, LayerMap<K, I, E>> {
constructor(_: never);
readonly Default: Layer<Self, LE | Deps extends Layer<_A, _E, _R> ? _E : never, Exclude<R, Deps extends Layer<_A, _E, _R> ? _A : never> | Deps extends Layer<_A, _E, _R> ? _R : never>;
readonly DefaultWithoutDependencies: Layer<Self, LE, R>;
readonly get: (key: K) => Layer<I, E, Self>;
readonly invalidate: (key: K) => Effect<void, never, Self>;
readonly runtime: (key: K) => Effect<Runtime<I>, E, Scope | Self>;
}

Service Create A `LayerMap` Service That Provides A Dynamic Set Of Resources Based On A Key. ```Ts Import { NodeRuntime } From "@Effect/Platform-Node" Import { Context, Effect, FiberRef, Layer, LayerMap } From "Effect" Class Greeter Extends Context.Tag("Greeter")<Greeter, { Greet: Effect.Effect<String> }>() {} // Create A Service That Wraps A LayerMap Class GreeterMap Extends LayerMap.Service<GreeterMap>()("GreeterMap", { // Define The Lookup Function For The Layer Map // // The Returned Layer Will Be Used To Provide The Greeter Service For The // Given Name. Lookup: (Name: String) => Layer.Succeed(Greeter, { Greet: Effect.Succeed(`Hello, ${Name}!`) }).Pipe( Layer.Merge(Layer.LocallyScoped(FiberRef.CurrentConcurrency, 123)) ), // If A Layer Is Not Used For A Certain Amount Of Time, It Can Be Removed IdleTimeToLive: "5 Seconds", // Supply The Dependencies For The Layers In The LayerMap Dependencies: [] }) {} // Usage Const Program: Effect.Effect<Void, Never, GreeterMap> = Effect.Gen(Function*() { // Access And Use The Greeter Service Const Greeter = Yield* Greeter Yield* Effect.Log(Yield* Greeter.Greet) }).Pipe( // Use The GreeterMap Service To Provide A Variant Of The Greeter Service Effect.Provide(GreeterMap.Get("John")) ) // Run The Program Program.Pipe( Effect.Provide(GreeterMap.Default), NodeRuntime.RunMain ) ```

Service

Added in v3.14.0 Source

Signature

declare function Service<Self>(): <Id extends string, Options extends NoExcessProperties<{
readonly dependencies?: readonly Array<Layer<any, any, any>>;
readonly idleTimeToLive?: DurationInput;
readonly lookup: (key: any) => Layer<any, any, any>;
readonly preloadKeys?: Iterable<Options extends {
readonly lookup: (key: K) => any;
} ? K : never, any, any>;
}, Options> | NoExcessProperties<{
readonly dependencies?: readonly Array<Layer<any, any, any>>;
readonly idleTimeToLive?: DurationInput;
readonly layers: Record<string, Layer.Layer<any, any, any>>;
readonly preload?: boolean;
}, Options>>(id: Id, options: Options) => TagClass<Self, Id, Options extends {
readonly lookup: (key: K) => any;
} ? K : Options extends {
readonly layers: Layers;
} ? keyof Layers : never, Success<Options>, Options extends {
readonly preload: true;
} ? never : Error<Options>, Context<Options>, Options extends {
readonly preload: true;
} ? Error<Options> : Options extends {
readonly preloadKey: Iterable<any>;
} ? Error<Options> : never, Options extends {
readonly dependencies: readonly Array<any>;
} ? Options["dependencies"][number] : never>

Symbols

TypeId

Added in v3.14.0 Source

Signature

declare const TypeId: unique symbol

TypeId type

Added in v3.14.0 Source

Signature

type TypeId = typeof TypeId