/**
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
*
|
* This source code is licensed under the MIT license found in the
|
* LICENSE file in the root directory of this source tree.
|
*/
|
/// <reference types="node" />
|
import type { EventEmitter } from 'events';
|
import type { ForkOptions } from 'child_process';
|
export declare const CHILD_MESSAGE_INITIALIZE: 0;
|
export declare const CHILD_MESSAGE_CALL: 1;
|
export declare const CHILD_MESSAGE_END: 2;
|
export declare const PARENT_MESSAGE_OK: 0;
|
export declare const PARENT_MESSAGE_CLIENT_ERROR: 1;
|
export declare const PARENT_MESSAGE_SETUP_ERROR: 2;
|
export declare type PARENT_MESSAGE_ERROR = typeof PARENT_MESSAGE_CLIENT_ERROR | typeof PARENT_MESSAGE_SETUP_ERROR;
|
export interface WorkerPoolInterface {
|
getStderr(): NodeJS.ReadableStream;
|
getStdout(): NodeJS.ReadableStream;
|
getWorkers(): Array<WorkerInterface>;
|
createWorker(options: WorkerOptions): WorkerInterface;
|
send(workerId: number, request: ChildMessage, onStart: OnStart, onEnd: OnEnd): void;
|
end(): Promise<PoolExitResult>;
|
}
|
export interface WorkerInterface {
|
send(request: ChildMessage, onProcessStart: OnStart, onProcessEnd: OnEnd): void;
|
waitForExit(): Promise<void>;
|
forceExit(): void;
|
getWorkerId(): number;
|
getStderr(): NodeJS.ReadableStream | null;
|
getStdout(): NodeJS.ReadableStream | null;
|
}
|
export declare type PoolExitResult = {
|
forceExited: boolean;
|
};
|
export type { ForkOptions };
|
export declare type FarmOptions = {
|
computeWorkerKey?: (method: string, ...args: Array<unknown>) => string | null;
|
exposedMethods?: ReadonlyArray<string>;
|
forkOptions?: ForkOptions;
|
setupArgs?: Array<unknown>;
|
maxRetries?: number;
|
numWorkers?: number;
|
WorkerPool?: (workerPath: string, options?: WorkerPoolOptions) => WorkerPoolInterface;
|
enableWorkerThreads?: boolean;
|
};
|
export declare type WorkerPoolOptions = {
|
setupArgs: Array<unknown>;
|
forkOptions: ForkOptions;
|
maxRetries: number;
|
numWorkers: number;
|
enableWorkerThreads: boolean;
|
};
|
export declare type WorkerOptions = {
|
forkOptions: ForkOptions;
|
setupArgs: Array<unknown>;
|
maxRetries: number;
|
workerId: number;
|
workerPath: string;
|
};
|
export declare type MessagePort = typeof EventEmitter & {
|
postMessage(message: unknown): void;
|
};
|
export declare type MessageChannel = {
|
port1: MessagePort;
|
port2: MessagePort;
|
};
|
export declare type ChildMessageInitialize = [typeof CHILD_MESSAGE_INITIALIZE, // type
|
boolean, // processed
|
string, // file
|
// file
|
Array<unknown> | undefined, // setupArgs
|
// setupArgs
|
MessagePort | undefined];
|
export declare type ChildMessageCall = [typeof CHILD_MESSAGE_CALL, // type
|
boolean, // processed
|
string, // method
|
Array<unknown>];
|
export declare type ChildMessageEnd = [typeof CHILD_MESSAGE_END, // type
|
boolean];
|
export declare type ChildMessage = ChildMessageInitialize | ChildMessageCall | ChildMessageEnd;
|
export declare type ParentMessageOk = [typeof PARENT_MESSAGE_OK, // type
|
unknown];
|
export declare type ParentMessageError = [PARENT_MESSAGE_ERROR, // type
|
string, // constructor
|
string, // message
|
string, // stack
|
unknown];
|
export declare type ParentMessage = ParentMessageOk | ParentMessageError;
|
export declare type OnStart = (worker: WorkerInterface) => void;
|
export declare type OnEnd = (err: Error | null, result: unknown) => void;
|
export declare type QueueChildMessage = {
|
request: ChildMessage;
|
onStart: OnStart;
|
onEnd: OnEnd;
|
};
|
export declare type QueueItem = {
|
task: QueueChildMessage;
|
next: QueueItem | null;
|
};
|