import { contextBridge, ipcRenderer } from 'electron' import { electronAPI } from '@electron-toolkit/preload' import { settingsDto } from '@my-type/settings' // Custom APIs for renderer // 在此添加新的进程间通信 API const api = { _saveSettings: (settings: settingsDto) => ipcRenderer.invoke('settings:save', settings), _updateSettings: () => ipcRenderer.invoke('settings:update'), _openCodeLaunchpad: () => ipcRenderer.invoke('tools:openCodeLaunchpad'), _closeCodeLaunchpad: () => ipcRenderer.invoke('tools:closeCodeLaunchpad') } const codeLaunchpadApi = { _getIDEs: () => ipcRenderer.invoke('codeLaunchpad:getIDEs'), _checkIDEs: () => ipcRenderer.invoke('codeLaunchpad:checkIDEs'), _getIDEsVersion: () => ipcRenderer.invoke('codeLaunchpad:getIDEsVersion'), _checkIDEsVersion: () => ipcRenderer.invoke('codeLaunchpad:checkIDEsVersion'), _getVSCodeProjects: () => ipcRenderer.invoke('codeLaunchpad:getVSCodeProjects'), _getJetBrainsProjects: () => ipcRenderer.invoke('codeLaunchpad:getJetBrainsProjects'), _openProject: (ide: string, path: string) => ipcRenderer.invoke('codeLaunchpad:openProject', ide, path) } // Use `contextBridge` APIs to expose Electron APIs to // renderer only if context isolation is enabled, otherwise // just add to the DOM global. if (process.contextIsolated) { try { contextBridge.exposeInMainWorld('electron', electronAPI) contextBridge.exposeInMainWorld('api', api) contextBridge.exposeInMainWorld('codeLaunchpad', codeLaunchpadApi) } catch (error) { console.error(error) } } else { // @ts-ignore (define in dts) window.electron = electronAPI // @ts-ignore (define in dts) window.api = api // @ts-ignore (define in dts) window.codeLaunchpad = codeLaunchpadApi }