51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
import process from 'node:process';
|
|
import {sendMessage} from './send.js';
|
|
import {getOneMessage} from './get-one.js';
|
|
import {getEachMessage} from './get-each.js';
|
|
import {getCancelSignal} from './graceful.js';
|
|
|
|
// Add promise-based IPC methods in current process
|
|
export const addIpcMethods = (target, subprocess, {ipc}) => {
|
|
Object.assign(target, getIpcMethods(subprocess, false, ipc, target));
|
|
};
|
|
|
|
// Get promise-based IPC in the subprocess
|
|
export const getIpcExport = () => {
|
|
const anyProcess = process;
|
|
const isSubprocess = true;
|
|
const isIpc = process.channel !== undefined;
|
|
|
|
return {
|
|
...getIpcMethods(anyProcess, isSubprocess, isIpc),
|
|
getCancelSignal: getCancelSignal.bind(undefined, {
|
|
anyProcess,
|
|
channel: anyProcess.channel,
|
|
isSubprocess,
|
|
ipc: isIpc,
|
|
}),
|
|
};
|
|
};
|
|
|
|
// Retrieve the `ipc` shared by both the current process and the subprocess
|
|
const getIpcMethods = (anyProcess, isSubprocess, ipc, waitProcess = anyProcess) => ({
|
|
sendMessage: sendMessage.bind(undefined, {
|
|
anyProcess,
|
|
channel: anyProcess.channel,
|
|
isSubprocess,
|
|
ipc,
|
|
}),
|
|
getOneMessage: getOneMessage.bind(undefined, {
|
|
anyProcess,
|
|
channel: anyProcess.channel,
|
|
isSubprocess,
|
|
ipc,
|
|
}),
|
|
getEachMessage: getEachMessage.bind(undefined, {
|
|
anyProcess,
|
|
channel: anyProcess.channel,
|
|
isSubprocess,
|
|
ipc,
|
|
waitProcess,
|
|
}),
|
|
});
|