Skip to content

⬅️ Back to Table of Contents

📄 useIpcRenderer

📊 Analysis Summary

Metric Count
🔧 Functions 4
📦 Imports 7
📐 Interfaces 1

📚 Table of Contents

🛠️ File Location:

📂 packages/electron/useIpcRenderer/index.ts

📦 Imports

Name Source
IpcRenderer electron
IpcRendererEvent electron
ShallowRef vue
IpcRendererListener ../_types
shallowRef vue
useIpcRendererInvoke ../useIpcRendererInvoke
useIpcRendererOn ../useIpcRendererOn

Functions

useIpcRenderer(ipcRenderer: IpcRenderer): UseIpcRendererReturn

Get the ipcRenderer module with all APIs.

See: https://www.electronjs.org/docs/api/ipc-renderer#ipcrenderersendtohostchannel-args, https://vueuse.org/useIpcRenderer

Raw JSDoc
/**
 * Get the `ipcRenderer` module with all APIs.
 *
 * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrenderersendtohostchannel-args
 * @see https://vueuse.org/useIpcRenderer
 */

Calls:

  • window?.require
  • useIpcRendererOn (from ../useIpcRendererOn)
  • ipcRenderer.once.bind
  • ipcRenderer.removeListener.bind
  • ipcRenderer.removeAllListeners.bind
  • useIpcRendererInvoke (from ../useIpcRendererInvoke)
  • setSendSync
Code
export function useIpcRenderer(ipcRenderer?: IpcRenderer): UseIpcRendererReturn {
  if (!ipcRenderer)
    ipcRenderer = window?.require('electron').ipcRenderer

  if (!ipcRenderer)
    throw new Error('provide IpcRenderer module or enable nodeIntegration')

  return {
    on: (channel: string, listener: IpcRendererListener) => useIpcRendererOn(channel, listener),
    once: ipcRenderer.once.bind(ipcRenderer),
    removeListener: ipcRenderer.removeListener.bind(ipcRenderer),
    removeAllListeners: ipcRenderer.removeAllListeners.bind(ipcRenderer),
    send: ipcRenderer.send,
    invoke: <T>(channel: string, ...args: any[]) => useIpcRendererInvoke<T>(ipcRenderer!, channel, ...args),
    sendSync: setSendSync(ipcRenderer),
    postMessage: ipcRenderer.postMessage,
    sendTo: ipcRenderer.sendTo,
    sendToHost: ipcRenderer.sendToHost,
  }
}

setSendSync(ipcRenderer: IpcRenderer): <T>(channel: string, ...args: any[]) => ShallowRef<T | null>

Create a sendSync function

Raw JSDoc
/**
 * Create a `sendSync` function
 */

Calls:

  • shallowRef (from vue)
  • ipcRenderer.sendSync
Code
function setSendSync(ipcRenderer: IpcRenderer) {
  return <T>(channel: string, ...args: any[]): ShallowRef<T | null> => {
    const result = shallowRef<T | null>(null) as ShallowRef<T | null>
    result.value = ipcRenderer.sendSync(channel, ...args)
    return result
  }
}

Internal helpers

Declared inside another function in this file.

on(channel: string, listener: IpcRendererListener): IpcRenderer

Parameters:

  • channel string
  • listener IpcRendererListener

Returns: IpcRenderer

Calls:

  • useIpcRendererOn (from ../useIpcRendererOn)
Code
(channel: string, listener: IpcRendererListener) => useIpcRendererOn(channel, listener)

invoke(channel: string, args: any[]): ShallowRef<T>

Parameters:

  • channel string
  • args any[]

Returns: ShallowRef<T>

Calls:

  • useIpcRendererInvoke (from ../useIpcRendererInvoke)
Code
<T>(channel: string, ...args: any[]) => useIpcRendererInvoke<T>(ipcRenderer!, channel, ...args)

Interfaces

UseIpcRendererReturn

Interface Code
export interface UseIpcRendererReturn {
  /**
   * Listens to channel, when a new message arrives listener would be called with listener(event, args...).
   * [ipcRenderer.removeListener](https://www.electronjs.org/docs/api/ipc-renderer#ipcrendererremovelistenerchannel-listener) automatically on unmounted.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrendereronchannel-listener
   */
  on: (channel: string, listener: IpcRendererListener) => IpcRenderer

  /**
   * Adds a one time listener function for the event. This listener is invoked only the next time a message is sent to channel, after which it is removed.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrendereroncechannel-listener
   */
  once: (channel: string, listener: (event: IpcRendererEvent, ...args: any[]) => void) => IpcRenderer

  /**
   * Removes the specified listener from the listener array for the specified channel.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrendererremovelistenerchannel-listener
   */
  removeListener: (channel: string, listener: (...args: any[]) => void) => IpcRenderer

  /**
   * Removes all listeners, or those of the specified channel.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrendererremovealllistenerschannel
   */
  removeAllListeners: (channel: string) => IpcRenderer

  /**
   * Send an asynchronous message to the main process via channel, along with arguments.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrenderersendchannel-args
   */
  send: (channel: string, ...args: any[]) => void

  /**
   * Returns Promise<any> - Resolves with the response from the main process.
   * Send a message to the main process via channel and expect a result ~~asynchronously~~.
   * As composition-api, it makes asynchronous operations look like synchronous.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrendererinvokechannel-args
   */
  invoke: <T>(channel: string, ...args: any[]) => ShallowRef<T | null>

  /**
   * Returns any - The value sent back by the ipcMain handler.
   * Send a message to the main process via channel and expect a result synchronously.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrenderersendsyncchannel-args
   */
  sendSync: <T>(channel: string, ...args: any[]) => ShallowRef<T | null>

  /**
   * Send a message to the main process, optionally transferring ownership of zero or more MessagePort objects.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrendererpostmessagechannel-message-transfer
   */
  postMessage: (channel: string, message: any, transfer?: MessagePort[]) => void

  /**
   * Sends a message to a window with webContentsId via channel.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrenderersendtowebcontentsid-channel-args
   */
  sendTo: (webContentsId: number, channel: string, ...args: any[]) => void

  /**
   * Like ipcRenderer.send but the event will be sent to the <webview> element in the host page instead of the main process.
   *
   * @see https://www.electronjs.org/docs/api/ipc-renderer#ipcrenderersendtohostchannel-args
   */
  sendToHost: (channel: string, ...args: any[]) => void
}

Properties

Name Type Optional Description
on (channel: string, listener: IpcRendererListener) => IpcRenderer not shown
once (channel: string, listener: (event: IpcRendererEvent, ...args: any[]) => void... not shown
removeListener (channel: string, listener: (...args: any[]) => void) => IpcRenderer not shown
removeAllListeners (channel: string) => IpcRenderer not shown
send (channel: string, ...args: any[]) => void not shown
invoke <T>(channel: string, ...args: any[]) => ShallowRef<T \| null> not shown
sendSync <T>(channel: string, ...args: any[]) => ShallowRef<T \| null> not shown
postMessage (channel: string, message: any, transfer?: MessagePort[]) => void not shown
sendTo (webContentsId: number, channel: string, ...args: any[]) => void not shown
sendToHost (channel: string, ...args: any[]) => void not shown

Generated by Syntax Scribe