import { Worker as WorkerThread } from 'worker_threads';
import { ICallback } from '../async/index.js';
import { EventEmitter } from '../event/index.js';
import { ILogger } from '../logger/index.js';
import { EWorkerType, TWorkerThreadParentMessage } from './types/index.js';
export type TWorkerEvent = {
    'worker.error': (err: Error) => void;
    'worker.data': (payload: unknown) => void;
    'worker.terminated': () => void;
};
export declare abstract class Worker<Reply> extends EventEmitter<TWorkerEvent> {
    protected abstract readonly type: EWorkerType;
    protected readonly id: `${string}-${string}-${string}-${string}-${string}`;
    protected readonly workerFilename: string;
    protected readonly initialPayload: unknown;
    protected workerThread: WorkerThread | null;
    private stdoutStream;
    private stderrStream;
    protected logger: ILogger;
    private isShuttingDown;
    protected constructor(workerFilename: string, initialPayload: unknown, logger: ILogger);
    private cleanupStreams;
    protected getWorkerThread(): WorkerThread;
    private setupWorkerListeners;
    protected postMessage(message: TWorkerThreadParentMessage, callback?: ICallback<Reply>): void;
    shutdown(cb: ICallback): void;
    private removeFromGlobalList;
    getId(): string;
    getWorkerFilename(): string;
}
//# sourceMappingURL=worker.d.ts.map