///
import { EventEmitter } from 'events';
import { WorkerProcess } from '../process';
/**
* Maintains a pool of WorkerProcess instances for running WASI
* modules.
* Workers are reused after termination.
* Terminated pids are reported to parent processes for interoperation
* with wait calls.
*/
declare class WorkerPool extends EventEmitter implements ProcessLoader {
running: Set;
free: WorkerPoolItem[];
loader: ProcessLoader;
constructor();
spawn(wasm: string, argv: string[], env?: {}): WorkerPoolItem;
populate(item: WorkerPoolItem, spawnArgs: {
wasm: string;
argv: string[];
env?: {};
}): void;
exec(item: WorkerPoolItem, spawnArgs: SpawnArgs): void;
handleSpawns(parent: WorkerProcess): void;
parseArgv(argv: Uint8Array[]): string[];
parseEnviron(envp: Uint8Array[]): {};
}
declare type WorkerPoolItem = {
process: WorkerProcess;
promise: Promise<{}>;
};
interface ProcessLoader {
spawn(wasm: string, argv: string[], env?: {}): WorkerPoolItem;
populate(item: WorkerPoolItem, spawnArgs: SpawnArgs): void;
exec(item: WorkerPoolItem, spawnArgs: SpawnArgs): void;
}
declare type SpawnArgs = {
wasm: string;
argv: string[];
env?: {};
};
export { WorkerPool, WorkerPoolItem, ProcessLoader, SpawnArgs };