Skip to content

A simple, type-safe IPC layer for Node.js child_process, replicating Electron’s ipcMain.handle and ipcRenderer.invoke.

License

Notifications You must be signed in to change notification settings

CeeVeeX/invoke-handle

Repository files navigation

invoke-handle

NPM version Docs

A simple, type-safe IPC layer for Node.js child_process, replicating Electron’s ipcMain.handle and ipcRenderer.invoke.

Installation

npm install invoke-handle

Usage

Define the channel types for the main process and child processes

// channels.ts
export interface MainChannels {
  sum: (a: number, b: number) => number
}

export interface ChildChannels {
  hello: (name: string) => string
}

Define the main process handler

// main.ts
import { fork } from 'node:child_process'
import path from 'node:path'
import { createIpc } from './ipc'
import type { ChildChannels, MainChannels } from './channels'

const child = fork(path.join(__dirname, 'child.js'))

// 主进程的 ipc,可以调用子进程方法(ChildChannels)
const ipcMain = createIpc<ChildChannels>(child)

// 注册主进程方法(MainChannels)
const mainHandlers = createIpc<MainChannels>(child)
mainHandlers.handle('sum', (a, b) => a + b)

;(async () => {
  const greeting = await ipcMain.invoke('hello', 'Alice')
  console.log('Main got:', greeting) // Hello, Alice!
})()

Define the child process handler

// child.ts
import { createIpc } from './ipc'
import type { ChildChannels, MainChannels } from './channels'

// 子进程的 ipc,可以调用主进程方法(MainChannels)
const ipcRenderer = createIpc<MainChannels>(process)

// 注册子进程方法(ChildChannels)
const childHandlers = createIpc<ChildChannels>(process)
childHandlers.handle('hello', name => `Hello, ${name}!`)

;(async () => {
  const result = await ipcRenderer.invoke('sum', 5, 7)
  console.log('Child got:', result) // 12
})()

License

MIT License © 2025-PRESENT Cee Vee X

About

A simple, type-safe IPC layer for Node.js child_process, replicating Electron’s ipcMain.handle and ipcRenderer.invoke.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published