import type { Worker } from 'node:worker_threads';
-import type { PoolOptions } from 'poolifier';
+import { type PoolEvent, PoolEvents, type ThreadPoolOptions } from 'poolifier';
export enum WorkerProcessType {
workerSet = 'workerSet',
+ /** @experimental */
dynamicPool = 'dynamicPool',
staticPool = 'staticPool',
}
-export type SetInfo = {
+export interface SetInfo {
+ version: string;
+ type: string;
+ worker: string;
size: number;
- runningElements: number;
+ elementsExecuting: number;
elementsPerWorker: number;
-};
+}
+
+export enum WorkerSetEvents {
+ error = 'error',
+ elementStarted = 'elementStarted',
+ elementError = 'elementError',
+}
-export type MessageHandler<T> = (this: T, message: unknown) => void;
+export const WorkerEvents = {
+ ...PoolEvents,
+ ...WorkerSetEvents,
+} as const;
+export type WorkerEvents = PoolEvent | WorkerSetEvents;
-export type WorkerOptions = {
+export interface WorkerOptions {
workerStartDelay?: number;
elementStartDelay?: number;
poolMaxSize: number;
poolMinSize: number;
elementsPerWorker?: number;
- poolOptions?: PoolOptions<Worker>;
- messageHandler?: MessageHandler<Worker>;
-};
+ poolOptions?: ThreadPoolOptions;
+}
export type WorkerData = Record<string, unknown>;
-export type WorkerSetElement = {
+export interface WorkerSetElement {
worker: Worker;
numberOfWorkerElements: number;
-};
+}
-export type WorkerMessage<T extends WorkerData> = {
- id: WorkerMessageEvents;
+export interface WorkerMessage<T extends WorkerData> {
+ event: WorkerMessageEvents;
data: T;
-};
+}
export enum WorkerMessageEvents {
startWorkerElement = 'startWorkerElement',
+ startWorkerElementError = 'startWorkerElementError',
+ startedWorkerElement = 'startedWorkerElement',
}