import { Logger } from "winston"; import { U } from "ts-toolbelt"; declare class Confidant_, Ms extends Record>> { context: C; tasks: { [K in keyof Ms]: Task>; }; globalTimeout: number; timeout: string; logger: Logger; constructor(context: C, taskMakers: Ms, options: { logger: Logger; timeout: string; }); onInitialize(key: K, fn: (value: TaskMakerResult) => void): () => void; onUpdate(key: K, fn: (value: TaskMakerResult) => void): () => void; replaceKey(key: K, taskMaker: Ms[K]): Promise; keyForTask(task: Task): string | undefined; get(key: K): Promise>; initialize; }>(): Promise; runInitialize(key: K): Promise>; invalidate(path: string): Promise; } declare type ValueOf = T[keyof T]; declare type KeyToContext; }> = { [K in keyof O]: TaskMakerContext; }; export declare type GetContext; }> = Omit>>, "__empty">; export declare const Confidant: ; }, Cs extends GetContext>(context: Cs, taskMakers: Ms, options?: { logger?: Logger | undefined; timeout?: string | undefined; } | undefined) => Confidant_; export declare type Confidant, Ms extends Record>> = Confidant_; export declare enum TaskState { PENDING = "PENDING", INITIALIZED = "INITIALIZED", UPDATING = "UPDATING", DESTROYED = "DESTROYED" } export declare class Task { confidant_: Confidant>; state: TaskState; currentValue_: V | undefined; timeout_: number; initListeners: Set<(value: V) => void>; updateListeners: Set<(value: V) => void>; constructor(confidant_: Confidant>, timeout?: string); validateContext_(): boolean; get logger(): Logger; initialize(): Promise; get(): Promise; onInitialize(fn: (value: V) => void): () => void; onUpdate(fn: (value: V) => void): () => void; set(value: V): void; update(fn: (currentValue: V) => V): void; runInitialize(): Promise; destroy(): void; onDestroy_(): void; invalidate(path?: string): Promise; } export declare type TaskMaker, V> = (confidant: Confidant>) => Task; export declare type TaskMakerResult> = T extends TaskMaker ? V : never; export declare type TaskMakerContext, any>> = T extends TaskMaker ? C : never; export declare type TaskResult> = T extends Task ? V : never; export {}; //# sourceMappingURL=task.d.ts.map