nx
Version:
49 lines (48 loc) • 1.97 kB
TypeScript
/**
* Node IPC is specific to Node, but when spawning child processes in Rust, it won't have IPC.
*
* Thus, this is a wrapper which is spawned by Rust, which will create a Node IPC channel and pipe it to a ZeroMQ Channel
*
* Main Nx Process
* * Calls Rust Fork Function
* * `node fork.js`
* * Create a Rust - Node.js Agnostic Channel aka Pseudo IPC Channel
* * This returns RustChildProcess
* * RustChildProcess.onMessage(msg => ());
* * pseudo_ipc_channel.on_message() => tx.send(msg);
* * Node.js Fork Wrapper (fork.js)
* * fork(run-command.js) with `inherit` and `ipc`
* * This will create a Node IPC Channel
* * channel = getPseudoIpcChannel(process.env.NX_IPC_CHANNEL_ID)
* * forkChildProcess.on('message', writeToPseudoIpcChannel)
*/
import { Serializable } from 'child_process';
export interface PseudoIPCMessage {
type: 'TO_CHILDREN_FROM_PARENT' | 'TO_PARENT_FROM_CHILDREN' | 'CHILD_READY';
id: string | undefined;
message: Serializable;
}
export declare class PseudoIPCServer {
private path;
private sockets;
private server;
private childMessages;
constructor(path: string);
init(): Promise<void>;
private childReadyMap;
waitForChildReady(childId: string): Promise<void>;
private registerChildMessages;
sendMessageToChildren(message: Serializable): void;
sendMessageToChild(id: string, message: Serializable): void;
onMessageFromChildren(onMessage: (message: Serializable) => void, onClose?: () => void, onError?: (err: Error) => void): void;
close(): void;
}
export declare class PseudoIPCClient {
private path;
private socket;
constructor(path: string);
sendMessageToParent(message: Serializable): void;
notifyChildIsReady(id: string): void;
onMessageFromParent(forkId: string, onMessage: (message: Serializable) => void, onClose?: () => void, onError?: (err: Error) => void): this;
close(): void;
}