import { Future } from "./future.js"; import { UnregFn } from "./lru-map-set.js"; import { Result } from "./result.js"; import { Option } from "./option.js"; import { KeyedIf, KeyedNg, KeyedNgItem, KeyedNgItemWithoutValue, KeyedNgOptions } from "./keyed-ng.js"; interface ResolveSeqItem { readonly future: Future; readonly fn: (c: C) => R; readonly id?: number; } export declare class ResolveSeq = object> { readonly ctx?: CTX; readonly _seqFutures: ResolveSeqItem[]; constructor(ctx?: CTX); reset(): void; readonly _flushWaiting: Future[]; flush(): Promise; _step(item?: ResolveSeqItem | T>): Promise; add | T>(fn: (c: CTX) => R, id?: number): R; } type ResolveState = "initial" | "processed" | "waiting" | "processing"; export type ResultOnce = R extends Promise ? Promise> : R; export interface OnceActionArg { readonly ctx: CTX; readonly self: ResolveOnceIf; } export interface ResolveOnceIf { get ready(): boolean; get value(): R | undefined; get error(): Error | undefined; get state(): ResolveState; setResetAfter(ms?: number): void; once>(fn: (arg: OnceActionArg) => RET): ResultOnce; reset>(fn?: (arg: OnceActionArg) => RET): ResultOnce; setProcessed(state: StateInstance): void; } export interface SyncOrAsyncIf { get value(): T | undefined; get error(): Error | undefined; get queueLength(): number; resolve>(fn: () => RET): ResultOnce; } export type SyncOrAsync = Option>; export declare class SyncResolveOnce implements SyncOrAsyncIf { #private; readonly queueLength = 0; constructor(rOnce: ResolveOnce, state: StateInstance); get value(): T | undefined; get error(): Error | undefined; get ready(): boolean; resolve>(fn: () => RET): ResultOnce; } export declare class AsyncResolveOnce implements SyncOrAsyncIf { #private; constructor(rOnce: ResolveOnceIf, state: StateInstance, prev: SyncOrAsync); get queueLength(): number; get value(): T | undefined; get error(): Error | undefined; resolve>(fn: () => RET): ResultOnce; } export interface ResolveOnceOpts { readonly resetAfter?: number; readonly skipUnref?: boolean; } declare class StateInstance { #private; readonly id: number; getResolveState(): ResolveState; isInitial(): boolean; isProcessed(): boolean; setProcessed(): void; isProcessing(): boolean; setProcessing(): void; isWaiting(): boolean; setWaiting(): void; equals(other: StateInstance): boolean; } export declare class ResolveOnce implements ResolveOnceIf { #private; resetAfterTimer?: ReturnType; readonly _onceArg: OnceActionArg; constructor(ctx?: CTX, opts?: ResolveOnceOpts); get state(): ResolveState; setProcessed(state: StateInstance): void; get ready(): boolean; get value(): T | undefined; get queueLength(): number; get error(): Error | undefined; once>(fn: (arg: OnceActionArg) => RET): ResultOnce; reset>(fn?: (arg: OnceActionArg) => RET): ResultOnce; setResetAfter(ms?: number): void; } export interface KeyItem { readonly key: K; readonly value: Result; } export type AddKeyedParam> = Omit, "createValue">; export type WithKey, K> = X & { readonly key: K; }; export interface KeyedResolveOnceItem> { readonly key: K; readonly value: Result; readonly item: KeyedNgItem>, CTX>; } export declare class KeyedResolvOnce = object> implements Omit>, CTX>, ResolveOnce>, K, CTX>, "entries" | "forEach" | "onSet" | "onDelete" | "values" | "setParam"> { readonly _keyed: KeyedNg>, CTX>; constructor(kp?: Partial>); keys(): K[]; values(): KeyedResolveOnceItem[]; onSet(fn: (key: K, value: ResolveOnce>) => void): UnregFn; onDelete(fn: (key: K, value: ResolveOnce>) => void): UnregFn; setParam(params: Partial, CTX>>): void; asyncGet(key: () => Promise): Promise>>; get(key: K | (() => K), ctx?: CTX): ResolveOnce>; getItem(key: K, ctx?: CTX): KeyedNgItem>, CTX>; has(key: K | (() => K)): boolean; delete(key: K): void; unget(key: K): void; reset(): void; forEach(fn: (ki: KeyItem, idx: number) => void): void; entries(): Iterable>; } export declare class KeyedResolvSeq, KEYType = string, CTX extends NonNullable = object> extends KeyedNg>, CTX> { constructor(kp?: Partial, "createValue">>); } export declare function Lazy(fn: (...args: Args) => Return, opts?: ResolveOnceOpts): (...args: Args) => Return; export {}; //# sourceMappingURL=resolve-once.d.ts.map