fix: untangle worker set message from application message
[e-mobility-charging-stations-simulator.git] / src / worker / WorkerTypes.ts
1 import type { Worker } from 'node:worker_threads'
2
3 import { type PoolEvent, PoolEvents, type ThreadPoolOptions } from 'poolifier'
4
5 export enum WorkerProcessType {
6 workerSet = 'workerSet',
7 fixedPool = 'fixedPool',
8 /** @experimental */
9 dynamicPool = 'dynamicPool'
10 }
11
12 export interface SetInfo {
13 version: string
14 type: string
15 worker: string
16 started: boolean
17 size: number
18 elementsExecuting: number
19 elementsPerWorker: number
20 }
21
22 export enum WorkerSetEvents {
23 started = 'started',
24 stopped = 'stopped',
25 error = 'error',
26 elementAdded = 'elementAdded',
27 elementError = 'elementError'
28 }
29
30 export const WorkerEvents = {
31 ...PoolEvents,
32 ...WorkerSetEvents
33 } as const
34 // eslint-disable-next-line @typescript-eslint/no-redeclare
35 export type WorkerEvents = PoolEvent | WorkerSetEvents
36
37 export interface WorkerOptions {
38 workerStartDelay?: number
39 elementAddDelay?: number
40 poolMaxSize: number
41 poolMinSize: number
42 elementsPerWorker?: number
43 poolOptions?: ThreadPoolOptions
44 }
45
46 export type WorkerData = Record<string, unknown>
47
48 export interface WorkerSetElement {
49 worker: Worker
50 numberOfWorkerElements: number
51 }
52
53 export interface WorkerMessage<T extends WorkerData> {
54 uuid: `${string}-${string}-${string}-${string}`
55 event: WorkerMessageEvents
56 data: T
57 }
58
59 export enum WorkerMessageEvents {
60 addWorkerElement = 'addWorkerElement',
61 addedWorkerElement = 'addedWorkerElement',
62 workerElementError = 'workerElementError'
63 }
64
65 export interface WorkerDataError extends WorkerData {
66 event: WorkerMessageEvents
67 name: string
68 message: string
69 stack?: string
70 }