| /** |
| * 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 { ChildMessage, OnCustomMessage, OnEnd, OnStart, WorkerInterface, WorkerOptions } from '../types'; |
| /** |
| * This class wraps the child process and provides a nice interface to |
| * communicate with. It takes care of: |
| * |
| * - Re-spawning the process if it dies. |
| * - Queues calls while the worker is busy. |
| * - Re-sends the requests if the worker blew up. |
| * |
| * The reason for queueing them here (since childProcess.send also has an |
| * internal queue) is because the worker could be doing asynchronous work, and |
| * this would lead to the child process to read its receiving buffer and start a |
| * second call. By queueing calls here, we don't send the next call to the |
| * children until we receive the result of the previous one. |
| * |
| * As soon as a request starts to be processed by a worker, its "processed" |
| * field is changed to "true", so that other workers which might encounter the |
| * same call skip it. |
| */ |
| export default class ChildProcessWorker implements WorkerInterface { |
| private _child; |
| private _options; |
| private _request; |
| private _retries; |
| private _onProcessEnd; |
| private _onCustomMessage; |
| private _fakeStream; |
| private _stdout; |
| private _stderr; |
| private _exitPromise; |
| private _resolveExitPromise; |
| constructor(options: WorkerOptions); |
| initialize(): void; |
| private _shutdown; |
| private _onMessage; |
| private _onExit; |
| send(request: ChildMessage, onProcessStart: OnStart, onProcessEnd: OnEnd, onCustomMessage: OnCustomMessage): void; |
| waitForExit(): Promise<void>; |
| forceExit(): void; |
| getWorkerId(): number; |
| getStdout(): NodeJS.ReadableStream | null; |
| getStderr(): NodeJS.ReadableStream | null; |
| private _getFakeStream; |
| } |