/**
 * @devteks/node-workers
 * Simple and easy to use worker pool implementation for Node.js
 * Version: 0.0.6
 * Author: Mosa Muhana (https://github.com/mosamuhana)
 * License: MIT
 * Homepage: https://github.com/mosamuhana/node-workers#readme
 */

import { EventEmitter } from 'events';

declare type Callback<T = any> = (error?: any, result?: T) => void;
interface Options {
    workerFile?: string;
    workerScript?: string;
    maxWorkers?: number;
    timeout?: number;
}
declare class WorkerError extends Error {
    error: Error;
    task: any;
    constructor(error: Error, task: any);
    [Symbol.toStringTag](): string;
}
interface Results<T> {
    results: T[];
    errors: WorkerError[];
}
declare class WorkerPool extends EventEmitter {
    #private;
    get maxWorkers(): number;
    constructor(options: Options);
    run<T, R>(task: T, callback: Callback<R>): void;
    run<T, R>(task: T): Promise<R>;
    run<T, R>(tasks: T[]): Promise<Results<R>>;
    static run<T, R>(options: Options, task: T): Promise<R>;
    static run<T, R>(options: Options, tasks: T[], emit?: (message: any) => void): Promise<Results<R>>;
    close(): Promise<void>;
}
declare function startWorker<T = unknown, R = unknown>(fn: (input: T, emit: (event: string, message: any) => void) => Promise<R>): void;

export { Options, Results, WorkerError, WorkerPool, startWorker };
