export declare type CallbackGroup = { /** * add callback into the group and return `remove` function * @param callback */ add(callback: Function): VoidFunction; called(): number; /** * call all callbacks with specified args * @param args */ call(...args: any[]): void; /** * remove all callbacks */ clear(): void; size(): number; }; export declare type Payload = T | Promise | ((context: EffectContext) => T | Promise); export declare type Signal = { (payload: Payload): void; (payload: Payload, noDispose: boolean): void; key: string | undefined; payload(): TDefaultPayload; onEmit(listener: VoidFunction): VoidFunction; onLoading(listener: (promise: Promise) => void): VoidFunction; onError(listener: (error: any) => void): VoidFunction; error(): any; cancel(): void; async(): Promise | undefined; cancelled(): boolean; reset(): void; reset(removeAllListeners: boolean): void; }; export declare type CreateSignal = { (): Signal; (options: SignalOptionsWithPayload): Signal; (options: SignalOptions): Signal; }; export declare type SignalList = Signal | (Signal | SignalList)[]; export declare type SignalOptions = { key?: string; onError?: (error: any) => void; onCancel?: VoidFunction; }; export declare type SignalOptionsWithPayload = SignalOptions & { payload: T; }; export declare type UseSignalOptions = { suspense?: boolean; errorBoundary?: boolean; }; export declare type AnySignal = Signal; export declare type ChainOptions = {}; export declare type WaitOptions = { onError?: (...signal: AnySignal[]) => void; onDone?: (...signal: AnySignal[]) => void; }; export declare type EffectContext = { promise?: CancellablePromise; abortController(): AbortController | undefined; /** * cancel current execution */ cancel(): void; /** * */ cancelled(): boolean; /** * * @param listener */ onCancel(listener: VoidFunction): VoidFunction; /** * */ dispose(): void; /** * * @param promise */ when(promise: Promise): Promise; /** * * @param signal * @param options */ when(signal: Signal, options?: WaitOptions): Promise; /** * * @param signals * @param options */ all>>(signals: T, options?: WaitOptions): Promise<{ [key in keyof T]: T[key] extends Promise ? Signal : T[key]; }>; /** * * @param signal * @param callback */ on(signal: T, callback: (signal: T) => void): VoidFunction; /** * * @param signals * @param callback */ on(signals: SignalList, callback: (signal: AnySignal) => void): VoidFunction; /** * * @param signals * @param options */ race>>(signals: T, options?: WaitOptions): Promise ? Signal : T[key]; }>>; /** * * @param fn * @param args */ call(fn: (context: EffectContext, ...args: A) => R, ...args: A): R; /** * create a promise that awaits signal chain * @param signals */ chain(signals: ChainItem[]): Promise; /** * * @param effect * @param args */ fork(effect: (context: EffectContext, ...args: A) => Exclude, Function>, ...args: A): Signal; /** * * @param payload */ fork(payload: Exclude, Function>): Signal; }; export declare type CancellablePromise = Promise & { cancel(): void; }; export declare type NoInfer = [T][T extends any ? 0 : never]; export declare type ChainItemResult = AnySignal | SignalList | void | "restart"; export declare type ChainItem = AnySignal | SignalList | ((prev: AnySignal) => ChainItemResult | Promise); export declare const isSignal: (value: any) => value is Signal; export declare const isPromiseLike: (value: any) => value is Promise; export declare const delay: (ms?: number, value?: T | undefined) => CancellablePromise; /** * * @param payload * @param args * @returns */ export declare const spawn: (payload: (context: EffectContext, ...args: A) => Promise | Exclude, ...args: A) => Signal; export declare const cancelAll: (...signals: AnySignal[]) => void; export declare const signal: CreateSignal; export declare const useSignal: (signals: SignalList, { suspense, errorBoundary }?: UseSignalOptions) => void;