151 lines
7.4 KiB
TypeScript
151 lines
7.4 KiB
TypeScript
import { contextBridge, ipcRenderer } from 'electron'
|
|
|
|
// 暴露安全的 API 到渲染进程
|
|
contextBridge.exposeInMainWorld('electronAPI', {
|
|
// 窗口控制
|
|
minimize: () => ipcRenderer.invoke('window:minimize'),
|
|
maximize: () => ipcRenderer.invoke('window:maximize'),
|
|
close: () => ipcRenderer.invoke('window:close'),
|
|
|
|
// Shell
|
|
openExternal: (url: string) => ipcRenderer.invoke('shell:openExternal', url),
|
|
openPath: (path: string) => ipcRenderer.invoke('shell:openPath', path),
|
|
|
|
// Dialog
|
|
selectDirectory: () => ipcRenderer.invoke('dialog:selectDirectory'),
|
|
|
|
// 下载进度监听
|
|
onDownloadProgress: (callback: (data: { type: string; progress: number; downloaded: number; total: number }) => void) => {
|
|
ipcRenderer.on('download-progress', (_, data) => callback(data))
|
|
},
|
|
removeDownloadProgressListener: () => {
|
|
ipcRenderer.removeAllListeners('download-progress')
|
|
},
|
|
|
|
// PHP 管理
|
|
php: {
|
|
getVersions: () => ipcRenderer.invoke('php:getVersions'),
|
|
getAvailableVersions: () => ipcRenderer.invoke('php:getAvailableVersions'),
|
|
install: (version: string) => ipcRenderer.invoke('php:install', version),
|
|
uninstall: (version: string) => ipcRenderer.invoke('php:uninstall', version),
|
|
setActive: (version: string) => ipcRenderer.invoke('php:setActive', version),
|
|
getExtensions: (version: string) => ipcRenderer.invoke('php:getExtensions', version),
|
|
openExtensionDir: (version: string) => ipcRenderer.invoke('php:openExtensionDir', version),
|
|
getAvailableExtensions: (version: string, searchKeyword?: string) => ipcRenderer.invoke('php:getAvailableExtensions', version, searchKeyword),
|
|
enableExtension: (version: string, ext: string) => ipcRenderer.invoke('php:enableExtension', version, ext),
|
|
disableExtension: (version: string, ext: string) => ipcRenderer.invoke('php:disableExtension', version, ext),
|
|
installExtension: (version: string, ext: string, downloadUrl?: string, packageName?: string) => ipcRenderer.invoke('php:installExtension', version, ext, downloadUrl, packageName),
|
|
getConfig: (version: string) => ipcRenderer.invoke('php:getConfig', version),
|
|
saveConfig: (version: string, config: string) => ipcRenderer.invoke('php:saveConfig', version, config)
|
|
},
|
|
|
|
// MySQL 管理
|
|
mysql: {
|
|
getVersions: () => ipcRenderer.invoke('mysql:getVersions'),
|
|
getAvailableVersions: () => ipcRenderer.invoke('mysql:getAvailableVersions'),
|
|
install: (version: string) => ipcRenderer.invoke('mysql:install', version),
|
|
uninstall: (version: string) => ipcRenderer.invoke('mysql:uninstall', version),
|
|
start: (version: string) => ipcRenderer.invoke('mysql:start', version),
|
|
stop: (version: string) => ipcRenderer.invoke('mysql:stop', version),
|
|
restart: (version: string) => ipcRenderer.invoke('mysql:restart', version),
|
|
getStatus: (version: string) => ipcRenderer.invoke('mysql:getStatus', version),
|
|
changePassword: (version: string, newPassword: string, currentPassword?: string) => ipcRenderer.invoke('mysql:changePassword', version, newPassword, currentPassword),
|
|
getConfig: (version: string) => ipcRenderer.invoke('mysql:getConfig', version),
|
|
saveConfig: (version: string, config: string) => ipcRenderer.invoke('mysql:saveConfig', version, config)
|
|
},
|
|
|
|
// Nginx 管理
|
|
nginx: {
|
|
getVersions: () => ipcRenderer.invoke('nginx:getVersions'),
|
|
getAvailableVersions: () => ipcRenderer.invoke('nginx:getAvailableVersions'),
|
|
install: (version: string) => ipcRenderer.invoke('nginx:install', version),
|
|
uninstall: (version: string) => ipcRenderer.invoke('nginx:uninstall', version),
|
|
start: () => ipcRenderer.invoke('nginx:start'),
|
|
stop: () => ipcRenderer.invoke('nginx:stop'),
|
|
restart: () => ipcRenderer.invoke('nginx:restart'),
|
|
reload: () => ipcRenderer.invoke('nginx:reload'),
|
|
getStatus: () => ipcRenderer.invoke('nginx:getStatus'),
|
|
getConfig: () => ipcRenderer.invoke('nginx:getConfig'),
|
|
saveConfig: (config: string) => ipcRenderer.invoke('nginx:saveConfig', config),
|
|
getSites: () => ipcRenderer.invoke('nginx:getSites'),
|
|
addSite: (site: any) => ipcRenderer.invoke('nginx:addSite', site),
|
|
removeSite: (name: string) => ipcRenderer.invoke('nginx:removeSite', name),
|
|
updateSite: (originalName: string, site: any) => ipcRenderer.invoke('nginx:updateSite', originalName, site),
|
|
enableSite: (name: string) => ipcRenderer.invoke('nginx:enableSite', name),
|
|
disableSite: (name: string) => ipcRenderer.invoke('nginx:disableSite', name),
|
|
generateLaravelConfig: (site: any) => ipcRenderer.invoke('nginx:generateLaravelConfig', site),
|
|
requestSSL: (domain: string, email: string) => ipcRenderer.invoke('nginx:requestSSL', domain, email)
|
|
},
|
|
|
|
// Redis 管理
|
|
redis: {
|
|
getVersions: () => ipcRenderer.invoke('redis:getVersions'),
|
|
getAvailableVersions: () => ipcRenderer.invoke('redis:getAvailableVersions'),
|
|
install: (version: string) => ipcRenderer.invoke('redis:install', version),
|
|
uninstall: (version: string) => ipcRenderer.invoke('redis:uninstall', version),
|
|
start: () => ipcRenderer.invoke('redis:start'),
|
|
stop: () => ipcRenderer.invoke('redis:stop'),
|
|
restart: () => ipcRenderer.invoke('redis:restart'),
|
|
getStatus: () => ipcRenderer.invoke('redis:getStatus'),
|
|
getConfig: () => ipcRenderer.invoke('redis:getConfig'),
|
|
saveConfig: (config: string) => ipcRenderer.invoke('redis:saveConfig', config)
|
|
},
|
|
|
|
// Node.js 管理
|
|
node: {
|
|
getVersions: () => ipcRenderer.invoke('node:getVersions'),
|
|
getAvailableVersions: () => ipcRenderer.invoke('node:getAvailableVersions'),
|
|
install: (version: string, downloadUrl: string) => ipcRenderer.invoke('node:install', version, downloadUrl),
|
|
uninstall: (version: string) => ipcRenderer.invoke('node:uninstall', version),
|
|
setActive: (version: string) => ipcRenderer.invoke('node:setActive', version),
|
|
getInfo: (version: string) => ipcRenderer.invoke('node:getInfo', version)
|
|
},
|
|
|
|
// 服务管理
|
|
service: {
|
|
getAll: () => ipcRenderer.invoke('service:getAll'),
|
|
setAutoStart: (service: string, enabled: boolean) => ipcRenderer.invoke('service:setAutoStart', service, enabled),
|
|
getAutoStart: (service: string) => ipcRenderer.invoke('service:getAutoStart', service),
|
|
startAll: () => ipcRenderer.invoke('service:startAll'),
|
|
stopAll: () => ipcRenderer.invoke('service:stopAll')
|
|
},
|
|
|
|
// Hosts 管理
|
|
hosts: {
|
|
get: () => ipcRenderer.invoke('hosts:get'),
|
|
add: (domain: string, ip: string) => ipcRenderer.invoke('hosts:add', domain, ip),
|
|
remove: (domain: string) => ipcRenderer.invoke('hosts:remove', domain)
|
|
},
|
|
|
|
// 配置管理
|
|
config: {
|
|
get: (key: string) => ipcRenderer.invoke('config:get', key),
|
|
set: (key: string, value: any) => ipcRenderer.invoke('config:set', key, value),
|
|
getBasePath: () => ipcRenderer.invoke('config:getBasePath'),
|
|
setBasePath: (path: string) => ipcRenderer.invoke('config:setBasePath', path)
|
|
}
|
|
})
|
|
|
|
// 声明 Window 接口扩展
|
|
declare global {
|
|
interface Window {
|
|
electronAPI: typeof api
|
|
}
|
|
}
|
|
|
|
const api = {
|
|
minimize: () => ipcRenderer.invoke('window:minimize'),
|
|
maximize: () => ipcRenderer.invoke('window:maximize'),
|
|
close: () => ipcRenderer.invoke('window:close'),
|
|
openExternal: (url: string) => ipcRenderer.invoke('shell:openExternal', url),
|
|
openPath: (path: string) => ipcRenderer.invoke('shell:openPath', path),
|
|
php: {} as any,
|
|
mysql: {} as any,
|
|
nginx: {} as any,
|
|
redis: {} as any,
|
|
service: {} as any,
|
|
hosts: {} as any,
|
|
config: {} as any
|
|
}
|
|
|