50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.2 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 = (subprocess, {ipc}) => {
 | |
| 	Object.assign(subprocess, getIpcMethods(subprocess, false, ipc));
 | |
| };
 | |
| 
 | |
| // Get promise-based IPC in the subprocess
 | |
| export const getIpcExport = () => {
 | |
| 	const anyProcess = process;
 | |
| 	const isSubprocess = true;
 | |
| 	const ipc = process.channel !== undefined;
 | |
| 
 | |
| 	return {
 | |
| 		...getIpcMethods(anyProcess, isSubprocess, ipc),
 | |
| 		getCancelSignal: getCancelSignal.bind(undefined, {
 | |
| 			anyProcess,
 | |
| 			channel: anyProcess.channel,
 | |
| 			isSubprocess,
 | |
| 			ipc,
 | |
| 		}),
 | |
| 	};
 | |
| };
 | |
| 
 | |
| // Retrieve the `ipc` shared by both the current process and the subprocess
 | |
| const getIpcMethods = (anyProcess, isSubprocess, ipc) => ({
 | |
| 	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,
 | |
| 	}),
 | |
| });
 |