daltonmenezes / interprocess

💬 A scalable and type-safe Electron IPC management tool with enhanced DX
https://interprocess.daltonmenezes.com
MIT License
95 stars 2 forks source link

How to use this project with IoC ? #1

Closed michael-dm closed 1 year ago

michael-dm commented 1 year ago

Hello,

this project is very promising, congrats ✨

I'm wondering how to use it in a project that follows the Inversion of Control principle (through dependency injection).

Instead of this structure :

export const getPingIpcSlice = createIpcSlice({
  main: {
    async getPing(_, data: 'ping') {
      return `from renderer: ${data} on main process`
    },
  },
})

I have something like :

export class MyController {
  constructor(private myService: MyService) {}

  async getPing(_, data: 'ping') {
    const res = await this.myService.doSomething(data)
    return `from renderer: ${res} on main process`
  }
}

But with this I don't see how I can import these methods into a shared file that uses combineIpcs. What do you think ?

michael-dm commented 1 year ago

If I understand correctly, handlers in the shared folder can be "dummy" handlers, to ensure typings are correct on both end, and I can then implement real logic using ipcMain.handle.

If I'm correct, what would you recommend for handlers that return complex data ? returning a dummy object like so ?

import { createInterprocess } from 'interprocess'

export const { ipcMain, ipcRenderer, exposeApiToGlobalWindow } = createInterprocess({
  main: {
    // method will be really handled by main
    async setMaximize(_, data: { maximize: boolean }) {
      return { isMaximized: true }
    }
  },
  renderer: {}
})