UNPKG

@effect-ts/system

Version:

Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.

174 lines 8.02 kB
import * as CL from "../Clock/index.js"; import * as Tp from "../Collections/Immutable/Tuple/index.js"; import type { Has, Tag } from "../Has/index.js"; import type * as SC from "../Schedule/index.js"; import type { UnionToIntersection } from "../Utils/index.js"; import type { Layer, MergeA, MergeE, MergeR } from "./definitions.js"; import { LayerChain } from "./definitions.js"; import * as T from "./deps-effect.js"; import * as M from "./deps-managed.js"; export * from "./definitions.js"; /** * Lazily constructs a layer. This is useful to avoid infinite recursion when * creating layers that refer to themselves. */ export declare function suspend<RIn, E, ROut>(f: () => Layer<RIn, E, ROut>): Layer<RIn, E, ROut>; /** * Combines this layer with the specified layer, producing a new layer that * has the inputs of both layers, and the outputs of both layers combined * using the specified function. */ export declare function zipWithPar_<RIn, RIn1, E, E1, ROut, ROut1, ROut2>(self: Layer<RIn, E, ROut>, that: Layer<RIn1, E1, ROut1>, f: (a: ROut, b: ROut1) => ROut2): Layer<RIn & RIn1, E | E1, ROut2>; /** * Constructs a layer that fails with the specified value. */ export declare function fail<E>(e: E): Layer<unknown, E, never>; /** * Constructs a layer from the specified value. */ export declare function succeed<T>(resource: T): Layer<unknown, never, T>; /** * Combines this layer with the specified layer, producing a new layer that * has the inputs of both layers, and the outputs of both layers combined * using the specified function. */ export declare function zipWithPar<RIn1, E1, ROut, ROut1, ROut2>(that: Layer<RIn1, E1, ROut1>, f: (a: ROut, b: ROut1) => ROut2): <RIn, E>(self: Layer<RIn, E, ROut>) => Layer<RIn & RIn1, E1 | E, ROut2>; /** * Combines this layer with the specified layer, producing a new layer that * has the inputs of both layers, and the outputs of both layers combined * into a tuple. */ export declare function zipPar_<RIn, RIn1, E, E1, ROut, ROut1>(self: Layer<RIn, E, ROut>, that: Layer<RIn1, E1, ROut1>): Layer<RIn & RIn1, E | E1, Tp.Tuple<[ROut, ROut1]>>; /** * Combines this layer with the specified layer, producing a new layer that * has the inputs of both layers, and the outputs of both layers combined * into a tuple. */ export declare function zipPar<RIn, RIn1, E, E1, ROut, ROut1>(that: Layer<RIn1, E1, ROut1>): (self: Layer<RIn, E, ROut>) => Layer<RIn & RIn1, E | E1, Tp.Tuple<[ROut, ROut1]>>; /** * Construct a service layer from a value */ export declare function fromValue<T>(has: Tag<T>): (resource: T) => Layer<unknown, never, Has<T>>; /** * Constructs a layer from the specified effect. * * @ets_data_first fromEffect_ */ export declare function fromEffect<T>(has: Tag<T>): <R, E>(resource: T.Effect<R, E, T>) => Layer<R, E, Has<T>>; /** * Constructs a layer from the specified effect. */ export declare function fromEffect_<R, E, T>(resource: T.Effect<R, E, T>, has: Tag<T>): Layer<R, E, Has<T>>; /** * Constructs a layer from a managed resource. */ export declare function fromManaged<T>(has: Tag<T>): <R, E>(resource: M.Managed<R, E, T>) => Layer<R, E, Has<T>>; /** * Constructs a layer from a managed resource. */ export declare function fromManaged_<R, E, T>(resource: M.Managed<R, E, T>, has: Tag<T>): Layer<R, E, Has<T>>; /** * Constructs a layer from the environment using the specified function. */ export declare function fromFunction<B>(tag: Tag<B>): <A>(f: (a: A) => B) => Layer<A, never, Has<B>>; /** * Zips layers together */ export declare function zip_<R, E, A, R2, E2, A2>(self: Layer<R, E, A>, that: Layer<R2, E2, A2>): Layer<R & R2, E | E2, Tp.Tuple<[A, A2]>>; /** * Zips layers together */ export declare function zip<R2, E2, A2>(right: Layer<R2, E2, A2>): <R, E, A>(left: Layer<R, E, A>) => Layer<R & R2, E2 | E, Tp.Tuple<[A, A2]>>; /** * Merges layers sequentially */ export declare function andSeq<R2, E2, A2>(that: Layer<R2, E2, A2>): <R, E, A>(self: Layer<R, E, A>) => Layer<R & R2, E2 | E, A & A2>; /** * Merges layers sequentially */ export declare function andSeq_<R, E, A, R2, E2, A2>(self: Layer<R, E, A>, that: Layer<R2, E2, A2>): Layer<R & R2, E | E2, A & A2>; /** * Merges all layers in parallel */ export declare function all<Ls extends Layer<any, any, any>[]>(...ls: Ls & { 0: Layer<any, any, any>; }): Layer<MergeR<Ls>, MergeE<Ls>, MergeA<Ls>>; /** * Merges all layers sequentially */ export declare function allSeq<Ls extends Layer<any, any, any>[]>(...ls: Ls & { 0: Layer<any, any, any>; }): Layer<MergeR<Ls>, MergeE<Ls>, MergeA<Ls>>; /** * Type level bound to make sure a layer is complete */ export declare function main<E, A>(layer: Layer<T.DefaultEnv, E, A>): Layer<T.DefaultEnv, E, A>; /** * Converts a layer to a managed runtime */ export declare function toRuntime<R, E, A>(_: Layer<R, E, A>): M.Managed<R, E, T.CustomRuntime<A, unknown>>; /** * Creates a fresh version of this layer that will not be shared. */ export declare function fresh<R, E, A>(layer: Layer<R, E, A>): Layer<R, E, A>; /** * Returns a new layer whose output is mapped by the specified function. */ export declare function map<A, B>(f: (a: A) => B): <R, E>(fa: Layer<R, E, A>) => Layer<R, E, B>; /** * Maps the output of the layer using f */ export declare function map_<R, E, A, B>(fa: Layer<R, E, A>, f: (a: A) => B): Layer<R, E, B>; /** * Chains the output of the layer using f */ export declare function chain<R2, E2, A, B>(f: (a: A) => Layer<R2, E2, B>): <R, E>(fa: Layer<R, E, A>) => Layer<R & R2, E2 | E, B>; /** * Chains the output of the layer using f */ export declare function chain_<R, E, A, R2, E2, B>(fa: Layer<R, E, A>, f: (a: A) => Layer<R2, E2, B>): LayerChain<R, R2, E, E2, A, B>; /** * Flatten `Layer< R, E, Layer< R2, E2, A>>` */ export declare function flatten<R, E, R2, E2, B>(ffa: Layer<R, E, Layer<R2, E2, B>>): Layer<R & R2, E | E2, B>; /** * Restrict output to only contain the specified services */ export declare function restrict<Tags extends Tag<any>[]>(...ts: Tags): <R, E>(self: Layer<R, E, UnionToIntersection<{ [k in keyof Tags]: [Tags[k]] extends [Tag<infer A>] ? Has<A> : never; }[number]>>) => Layer<R, E, UnionToIntersection<{ [k_1 in keyof Tags]: [Tags[k_1]] extends [Tag<infer A_1>] ? Has<A_1> : never; }[number]>>; /** * Builds this layer and uses it until it is interrupted. This is useful when * your entire application is a layer, such as an HTTP server. */ export declare function launch<R, E, A>(self: Layer<R, E, A>): T.Effect<R, E, never>; /** * Recovers from all errors. */ export declare function catchAll<R1, E, E1, Out1>(handler: Layer<Tp.Tuple<[R1, E]>, E1, Out1>): <R, Out>(self: Layer<R, E, Out>) => Layer<R & R1, E1, Out1 | Out>; /** * A layer that passes along the first element of a tuple. */ export declare function first<A>(): Layer<Tp.Tuple<[A, unknown]>, never, A>; /** * A layer that passes along the second element of a tuple. */ export declare function second<A>(): Layer<Tp.Tuple<[unknown, A]>, never, A>; /** * Returns a layer with its error channel mapped using the specified * function. */ export declare function mapError<E, E1>(f: (e: E) => E1): <R, Out>(self: Layer<R, E, Out>) => Layer<R, E1, Out>; /** * Translates effect failure into death of the fiber, making all failures * unchecked and not a part of the type of the layer. */ export declare function orDie<R, E, Out>(self: Layer<R, E, Out>): Layer<R, never, Out>; /** * Executes this layer and returns its output, if it succeeds, but otherwise * executes the specified layer. */ export declare function orElse<RIn1, E1, ROut1>(that: Layer<RIn1, E1, ROut1>): <R, Out>(self: Layer<R, unknown, Out>) => Layer<R & RIn1, E1, ROut1 | Out>; /** * Retries constructing this layer according to the specified schedule. */ export declare function retry<RIn, RIn1, E, ROut>(self: Layer<RIn, E, ROut>, schedule: SC.Schedule<RIn1 & CL.HasClock, E, any>): Layer<RIn1 & RIn & CL.HasClock, E, ROut>; //# sourceMappingURL=core.d.ts.map