import type { UnionToIntersection } from "@principia/prelude/Utils"; import type { Has, Tag } from "../../Has"; import * as M from "../Managed"; import type { Task } from "../Task"; import * as L from "./core"; export declare const fromConstructor: ( tag: Tag ) => ( constructor: (...services: Services) => S ) => ( ...tags: { [k in keyof Services]: Tag } ) => L.Layer< UnionToIntersection<{ [k_1 in keyof Services]: Has }[keyof Services & number]>, never, Has >; export declare const fromTaskConstructor: ( tag: Tag ) => ( constructor: (...services: Services) => Task ) => ( ...tags: { [k in keyof Services]: Tag } ) => L.Layer< UnionToIntersection<{ [k_1 in keyof Services]: Has }[keyof Services & number]> & R, E, Has >; export declare const fromManagedConstructor: ( tag: Tag ) => ( constructor: (...services: Services) => M.Managed ) => ( ...tags: { [k in keyof Services]: Tag } ) => L.Layer< UnionToIntersection<{ [k_1 in keyof Services]: Has }[keyof Services & number]> & R, E, Has >; export declare const bracketConstructor: ( tag: Tag ) => ( constructor: (...services: Services) => S2 ) => ( ...tags: { [k in keyof Services]: Tag } ) => ( open: (s: S2) => Task, release: (s: S2) => Task ) => L.Layer< UnionToIntersection<{ [k_1 in keyof Services]: Has }[keyof Services & number]> & R & R2, E, Has >; export declare const bracketTaskConstructor: ( tag: Tag ) => ( constructor: (...services: Services) => Task ) => ( ...tags: { [k in keyof Services]: Tag } ) => ( open: (s: S2) => Task, release: (s: S2) => Task ) => L.Layer< UnionToIntersection<{ [k_1 in keyof Services]: Has }[keyof Services & number]> & R & R2 & R0, E0 | E, Has >; export declare const restrict: []>( ...ts: Tags ) => ( layer: L.Layer< R, E, UnionToIntersection<{ [k in keyof Tags]: [Tags[k]] extends [Tag] ? Has : never }[number]> > ) => L.Layer< R, E, UnionToIntersection<{ [k_1 in keyof Tags]: [Tags[k_1]] extends [Tag] ? Has : never }[number]> >; //# sourceMappingURL=constructors.d.ts.map