const { contextBridge, ipcRenderer } = require('electron'); const listeners = new Map(); ipcRenderer.on('dev:node', (_e, name, args) => listeners.get(name)?.forEach((fn) => fn({ args }))); const native = (m) => (arg) => ipcRenderer.invoke('dev:native', m, arg); contextBridge.exposeInMainWorld('DevBridge', { NodeJS: { // Wie auf Android: start() kehrt erst zurück, wenn Node beendet wird start: (o) => { ipcRenderer.invoke('dev:start', o.env); return new Promise(() => {}); }, whenReady: () => ipcRenderer.invoke('dev:ready'), send: ({ eventName, args }) => ipcRenderer.send('dev:send', eventName, args), addListener: (name, fn) => { if (!listeners.has(name)) listeners.set(name, new Set()); listeners.get(name).add(fn); return { remove: () => listeners.get(name).delete(fn) }; }, }, Native: Object.fromEntries(['vaultKey', 'info', 'bioAvailable', 'bioEnroll', 'bioUnlock', 'bioDisable', 'multicast', 'copy', 'paste', 'background'].map((m) => [m, native(m)])), });