///
import { IUnsubscribe, IWorkerEventBus } from '../common/contracts';
import { TransferListItem } from 'worker_threads';
import { IAbortSignalFast } from '@flemist/abort-controller-fast';
declare type ErrorSerialized = {
error: any;
props: any;
};
export declare type PromiseOrValue = Promise | T;
export declare type TaskFunc = (request: TRequest, abortSignal: IAbortSignalFast, callback: (data: TCallbackData) => void) => PromiseOrValue;
export declare type WorkerData = {
data?: TData;
transferList?: ReadonlyArray;
};
export declare type WorkerTaskFunc = TaskFunc, WorkerData, WorkerData>;
export declare type WorkerFunctionServerResult = PromiseOrValue>;
export declare type WorkerFunctionServerResultSync = WorkerData;
export declare type WorkerFunctionServerResultAsync = Promise>;
export declare type TaskFunctionRequest = {
task: string;
} & ({
action: 'start';
request: TRequest;
} | {
action: 'abort';
reason: any;
});
export declare type TaskFunctionResponse = {
event: 'started';
} | {
event: 'callback';
data: TCallbackData;
} | {
event: 'completed';
result: TResult;
} | {
event: 'error';
error: ErrorSerialized;
};
export declare type AbortFunc = (reason: any) => void;
export declare type WorkerFunctionServerEventBus = IWorkerEventBus, TaskFunctionRequest>;
export declare function workerFunctionServer({ eventBus, task, name, debug, }: {
eventBus: WorkerFunctionServerEventBus;
task: WorkerTaskFunc;
name?: string;
debug?: boolean;
}): IUnsubscribe;
export declare type WorkerFunctionClientEventBus = IWorkerEventBus, TaskFunctionResponse>;
export declare type WorkerFunctionClient = (request: WorkerData, abortSignal?: IAbortSignalFast, callback?: (data: WorkerData) => void) => Promise>;
export declare function workerFunctionClient({ eventBus, name, debug, }: {
eventBus: WorkerFunctionClientEventBus;
name: string;
debug?: boolean;
}): (request: WorkerData, abortSignal?: IAbortSignalFast, callback?: (data: WorkerData) => void) => Promise>;
export {};