Skip to content

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;