const { contextBridge, ipcRenderer, shell } = require('electron'); const path = require('path'); const XLSX = require('xlsx'); // Because the main process is sandboxed, we need to use the contextBridge API to expose the API to the renderer process. // https://www.electronjs.org/docs/latest/api/context-bridge contextBridge.exposeInMainWorld('SheetJSDemoAPI', { openFile: (filters) => ipcRenderer.invoke('dialog:openFile', filters), saveFile: (filters) => ipcRenderer.invoke('dialog:saveFile', filters), message: (msg) => ipcRenderer.invoke('dialog:message', msg), openExternal: (url) => shell.openExternal(url), // expose file-opened event onFileOpened: (cb) => ipcRenderer.on('file-opened', (_e, fp) => cb(fp)), // expose basename from path package basename: (p) => path.basename(p), // expose extname from path package extname: (p) => path.extname(p), // expose sheetjs package functions xlsx: XLSX, });