-import EventEmitter from 'events'
-import type { MessageValue } from '../utility-types'
-import type { IPool } from './pool'
-
-export type ErrorHandler<Worker> = (this: Worker, e: Error) => void
-export type OnlineHandler<Worker> = (this: Worker) => void
-export type ExitHandler<Worker> = (this: Worker, code: number) => void
-
-export interface IWorker {
- on(event: 'error', handler: ErrorHandler<this>): void
- on(event: 'online', handler: OnlineHandler<this>): void
- on(event: 'exit', handler: ExitHandler<this>): void
-}
-
-export interface PoolOptions<Worker> {
- /**
- * A function that will listen for error event on each worker.
- */
- errorHandler?: ErrorHandler<Worker>
- /**
- * A function that will listen for online event on each worker.
- */
- onlineHandler?: OnlineHandler<Worker>
- /**
- * A function that will listen for exit event on each worker.
- */
- exitHandler?: ExitHandler<Worker>
- /**
- * This is just to avoid not useful warnings message, is used to set `maxListeners` on event emitters (workers are event emitters).
- *
- * @default 1000
- */
- maxTasks?: number
-}
-
-class PoolEmitter extends EventEmitter {}
+import crypto from 'node:crypto'
+import type { MessageValue, PromiseResponseWrapper } from '../utility-types'
+import { EMPTY_FUNCTION } from '../utils'
+import { KillBehaviors, isKillBehavior } from '../worker/worker-options'
+import type { PoolOptions } from './pool'
+import { PoolEmitter } from './pool'
+import type { IPoolInternal, TasksUsage, WorkerType } from './pool-internal'
+import { PoolType } from './pool-internal'
+import type { IPoolWorker } from './pool-worker'
+import {
+ WorkerChoiceStrategies,
+ type WorkerChoiceStrategy
+} from './selection-strategies/selection-strategies-types'
+import { WorkerChoiceStrategyContext } from './selection-strategies/worker-choice-strategy-context'