import type * as C from "../Cause/index.js"; import * as Tp from "../Collections/Immutable/Tuple/index.js"; import { _E, _RIn, _ROut } from "../Effect/commons.js"; import * as Finalizer from "../Managed/ReleaseMap/finalizer.js"; import * as RM from "../RefM/index.js"; import { AtomicReference } from "../Support/AtomicReference/index.js"; import type { Erase, UnionToIntersection } from "../Utils/index.js"; import * as T from "./deps-effect.js"; import type { Managed } from "./deps-managed.js"; /** * Creates a layer from an effect */ export declare function fromRawEffect(resource: T.Effect): Layer; /** * Creates a layer from a function */ export declare function fromRawFunction(f: (a: A) => B): Layer; /** * Creates a layer from an effectful function */ export declare function fromRawFunctionM(f: (a: A) => T.Effect): Layer; /** * Creates a layer from a managed environment */ export declare function fromRawManaged(resource: Managed): Layer; /** * Constructs a layer that passes along the specified environment as an * output. */ export declare function identity(): Layer; /** * Merge two Layers in parallel without providing any data to each other * * @param self - first Layer to combine * @param that - second Layer to combine */ export declare function and_(self: Layer, that: Layer): Layer; /** * Merge two Layers in parallel without providing any data to each other * * @param that - second Layer to combine * @param self - first Layer to combine */ export declare function and(that: Layer): (self: Layer) => Layer; /** * Feeds the error or output services of this layer into the input of either * the specified `failure` or `success` layers, resulting in a new layer with * the inputs of this layer, and the error or outputs of the specified layer. */ export declare function fold(self: Layer): (failure: Layer]>, E2, A2>) => (success: Layer) => Layer; /** * Use `from` to partially provide environment into `to` */ export declare function using(from: Layer): (to: Layer) => Layer; /** * Use `from` to partially provide environment into `to` and merge both */ export declare function usingAnd(from: Layer): (to: Layer) => Layer; /** * Compose layers */ export declare function compose_(from: Layer, to: Layer): Layer; /** * Compose layers */ export declare function compose(to: Layer): (from: Layer) => Layer; export declare const hashSym: unique symbol; export declare abstract class Layer { readonly [hashSym]: AtomicReference; readonly [_RIn]: (_: RIn) => void; readonly [_E]: () => E; readonly [_ROut]: () => ROut; /** * Set the hash key for memoization */ setKey(hash: PropertyKey): this; ["_I"](): LayerInstruction; /** * Use that Layer to provide data to this */ ["<=<"](that: Layer): Layer; /** * Use this Layer to provide data to that */ [">=>"](that: Layer): Layer; /** * Use that Layer to partially provide data to this */ ["<<<"](that: Layer): Layer & R2, E2 | E, ROut>; /** * Use this Layer to partially provide data to that */ [">>>"](that: Layer): Layer & RIn, E2 | E, A2>; /** * Create a Layer with the data from both Layers, while providing the data from this to that */ [">+>"](that: Layer): Layer, E2 | E, ROut & A2>; /** * Create a Layer with the data from both Layers, while providing the data from that to this */ ["<+<"](that: Layer): Layer & R2, E | E2, ROut & A2>; /** * Combine both layers in parallel */ ["+++"](from: Layer): Layer; /** * Use the layer to provide partial environment to an effect */ use(effect: T.Effect): T.Effect; /** * Use the layer to provide the full environment to an effect */ useAll(effect: T.Effect): T.Effect; /** * Use the layer to provide the full environment to an effect */ get useForever(): T.Effect; } /** * Provides a layer to the given effect */ export declare function provideSomeLayer(layer: Layer): (self: T.Effect) => T.Effect; /** * Provides a layer to the given effect */ export declare function provideSomeLayer_(self: T.Effect, layer: Layer): T.Effect; /** * Provides a layer to the given effect */ export declare function provideLayer_(self: T.Effect, layer: Layer): T.Effect; /** * Provides a layer to the given effect */ export declare function provideLayer(layer: Layer): (self: T.Effect) => T.Effect; export declare type LayerInstruction = LayerFold | LayerFresh | LayerManaged | LayerSuspend | LayerZipWithPar | LayerZipWithSeq | LayerAllPar | LayerAllSeq | LayerMap | LayerChain; export declare class LayerFold extends Layer { readonly self: Layer; readonly failure: Layer]>, E2, A2>; readonly success: Layer; readonly _tag = "LayerFold"; constructor(self: Layer, failure: Layer]>, E2, A2>, success: Layer); } export declare class LayerMap extends Layer { readonly self: Layer; readonly f: (a: ROut) => ROut1; readonly _tag = "LayerMap"; constructor(self: Layer, f: (a: ROut) => ROut1); } export declare class LayerChain extends Layer { readonly self: Layer; readonly f: (a: ROut) => Layer; readonly _tag = "LayerChain"; constructor(self: Layer, f: (a: ROut) => Layer); } export declare class LayerFresh extends Layer { readonly self: Layer; readonly _tag = "LayerFresh"; constructor(self: Layer); } export declare class LayerManaged extends Layer { readonly self: Managed; readonly _tag = "LayerManaged"; constructor(self: Managed); } export declare class LayerSuspend extends Layer { readonly self: () => Layer; readonly _tag = "LayerSuspend"; constructor(self: () => Layer); } export declare class LayerZipWithPar extends Layer { readonly self: Layer; readonly that: Layer; readonly f: (s: ROut, t: ROut2) => ROut3; readonly _tag = "LayerZipWithPar"; constructor(self: Layer, that: Layer, f: (s: ROut, t: ROut2) => ROut3); } export declare type MergeR[]> = UnionToIntersection<{ [k in keyof Ls]: [Ls[k]] extends [Layer] ? unknown extends X ? never : X : never; }[number]>; export declare type MergeE[]> = { [k in keyof Ls]: [Ls[k]] extends [Layer] ? X : never; }[number]; export declare type MergeA[]> = UnionToIntersection<{ [k in keyof Ls]: [Ls[k]] extends [Layer] ? unknown extends X ? never : X : never; }[number]>; export declare class LayerAllPar[]> extends Layer, MergeE, MergeA> { readonly layers: Layers & { 0: Layer; }; readonly _tag = "LayerAllPar"; constructor(layers: Layers & { 0: Layer; }); } export declare class LayerAllSeq[]> extends Layer, MergeE, MergeA> { readonly layers: Layers & { 0: Layer; }; readonly _tag = "LayerAllSeq"; constructor(layers: Layers & { 0: Layer; }); } export declare class LayerZipWithSeq extends Layer { readonly self: Layer; readonly that: Layer; readonly f: (s: ROut, t: ROut2) => ROut3; readonly _tag = "LayerZipWithSeq"; constructor(self: Layer, that: Layer, f: (s: ROut, t: ROut2) => ROut3); } export declare function scope(_: Layer): Managed Managed>; /** * Builds a layer into a managed value. */ export declare function build(_: Layer): Managed; /** * Creates a MemoMap */ export declare function makeMemoMap(): T.Effect; /** * A `MemoMap` memoizes dependencies. */ export declare class MemoMap { readonly ref: RM.RefM, Finalizer.Finalizer]>>>; constructor(ref: RM.RefM, Finalizer.Finalizer]>>>); /** * Checks the memo map to see if a dependency exists. If it is, immediately * returns it. Otherwise, obtains the dependency, stores it in the memo map, * and adds a finalizer to the outer `Managed`. */ getOrElseMemoize: (layer: Layer) => Managed; } /** * Empty layer, useful for init cases */ export declare const Empty: Layer; //# sourceMappingURL=definitions.d.ts.map