@hirosystems/api-toolkit
Version:
API development toolkit
54 lines (53 loc) • 1.63 kB
TypeScript
import { EventEmitter } from 'node:events';
export type WorkerDataInterface = {
workerFile: string;
};
export type WorkerReqMsg<TArgs extends unknown[]> = {
msgId: number;
req: TArgs;
};
export type WorkerRespMsg<TResp, TErr> = {
msgId: number;
} & ({
resp: TResp;
error?: null;
} | {
resp?: null;
error: TErr;
});
export type WorkerPoolModuleInterface<TArgs extends unknown[], TResp> = {
workerModule: NodeJS.Module;
processTask: (...args: TArgs) => Promise<TResp> | TResp;
} | {
default: {
workerModule: NodeJS.Module;
processTask: (...args: TArgs) => Promise<TResp> | TResp;
};
};
export declare class WorkerThreadManager<TArgs extends unknown[], TResp> {
private readonly workers;
private readonly idleWorkers;
private readonly jobQueue;
private readonly msgRequests;
private lastMsgId;
readonly workerCount: number;
readonly workerFile: string;
private readonly abortControlller;
readonly events: EventEmitter<{
workersReady: [];
}>;
get idleWorkerCount(): number;
get busyWorkerCount(): number;
get queuedJobCount(): number;
static init<TArgs extends unknown[], TResp>(workerModule: WorkerPoolModuleInterface<TArgs, TResp>, opts?: {
workerCount?: number;
}): Promise<WorkerThreadManager<TArgs, TResp>>;
constructor(workerModule: WorkerPoolModuleInterface<TArgs, TResp>, opts?: {
workerCount?: number;
});
exec(...args: TArgs): Promise<TResp>;
createWorkerPool(): void;
private setupWorkerHandler;
private assignJobs;
close(): Promise<void>;
}