319 lines
12 KiB
TypeScript
319 lines
12 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),
|
|
},
|
|
|
|
// Composer 管理
|
|
composer: {
|
|
getStatus: () => ipcRenderer.invoke("composer:getStatus"),
|
|
install: () => ipcRenderer.invoke("composer:install"),
|
|
uninstall: () => ipcRenderer.invoke("composer:uninstall"),
|
|
setMirror: (mirror: string) =>
|
|
ipcRenderer.invoke("composer:setMirror", mirror),
|
|
createLaravelProject: (projectName: string, targetDir: string) =>
|
|
ipcRenderer.invoke(
|
|
"composer:createLaravelProject",
|
|
projectName,
|
|
targetDir,
|
|
),
|
|
},
|
|
|
|
// 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),
|
|
},
|
|
|
|
// Go 管理
|
|
go: {
|
|
getVersions: () => ipcRenderer.invoke("go:getVersions"),
|
|
getAvailableVersions: () => ipcRenderer.invoke("go:getAvailableVersions"),
|
|
install: (version: string, downloadUrl: string) =>
|
|
ipcRenderer.invoke("go:install", version, downloadUrl),
|
|
uninstall: (version: string) => ipcRenderer.invoke("go:uninstall", version),
|
|
setActive: (version: string) => ipcRenderer.invoke("go:setActive", version),
|
|
getInfo: (version: string) => ipcRenderer.invoke("go:getInfo", version),
|
|
},
|
|
|
|
// 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),
|
|
},
|
|
|
|
// Git 管理
|
|
git: {
|
|
getVersions: () => ipcRenderer.invoke("git:getVersions"),
|
|
getAvailableVersions: () => ipcRenderer.invoke("git:getAvailableVersions"),
|
|
install: (version: string) => ipcRenderer.invoke("git:install", version),
|
|
uninstall: () => ipcRenderer.invoke("git:uninstall"),
|
|
checkSystem: () => ipcRenderer.invoke("git:checkSystem"),
|
|
getConfig: () => ipcRenderer.invoke("git:getConfig"),
|
|
setConfig: (name: string, email: string) =>
|
|
ipcRenderer.invoke("git:setConfig", name, email),
|
|
},
|
|
|
|
// Python 管理
|
|
python: {
|
|
getVersions: () => ipcRenderer.invoke("python:getVersions"),
|
|
getAvailableVersions: () =>
|
|
ipcRenderer.invoke("python:getAvailableVersions"),
|
|
install: (version: string) => ipcRenderer.invoke("python:install", version),
|
|
uninstall: (version: string) =>
|
|
ipcRenderer.invoke("python:uninstall", version),
|
|
setActive: (version: string) =>
|
|
ipcRenderer.invoke("python:setActive", version),
|
|
checkSystem: () => ipcRenderer.invoke("python:checkSystem"),
|
|
getPipInfo: (version: string) =>
|
|
ipcRenderer.invoke("python:getPipInfo", version),
|
|
installPackage: (version: string, packageName: string) =>
|
|
ipcRenderer.invoke("python:installPackage", version, packageName),
|
|
},
|
|
|
|
// 服务管理
|
|
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"),
|
|
// PHP-CGI 多版本管理
|
|
getPhpCgiStatus: () => ipcRenderer.invoke("service:getPhpCgiStatus"),
|
|
startPhpCgi: () => ipcRenderer.invoke("service:startPhpCgi"),
|
|
stopPhpCgi: () => ipcRenderer.invoke("service:stopPhpCgi"),
|
|
startAllPhpCgi: () => ipcRenderer.invoke("service:startAllPhpCgi"),
|
|
stopAllPhpCgi: () => ipcRenderer.invoke("service:stopAllPhpCgi"),
|
|
startPhpCgiVersion: (version: string) =>
|
|
ipcRenderer.invoke("service:startPhpCgiVersion", version),
|
|
stopPhpCgiVersion: (version: string) =>
|
|
ipcRenderer.invoke("service:stopPhpCgiVersion", version),
|
|
getPhpCgiPort: (version: string) =>
|
|
ipcRenderer.invoke("service:getPhpCgiPort", version),
|
|
},
|
|
|
|
// 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),
|
|
},
|
|
|
|
// 日志管理
|
|
log: {
|
|
getFiles: () => ipcRenderer.invoke("log:getFiles"),
|
|
read: (logPath: string, lines?: number) =>
|
|
ipcRenderer.invoke("log:read", logPath, lines),
|
|
clear: (logPath: string) => ipcRenderer.invoke("log:clear", logPath),
|
|
getDirectory: (
|
|
type: "nginx" | "php" | "mysql" | "sites",
|
|
version?: string,
|
|
) => ipcRenderer.invoke("log:getDirectory", type, version),
|
|
},
|
|
|
|
// 应用设置
|
|
app: {
|
|
setAutoLaunch: (enabled: boolean) =>
|
|
ipcRenderer.invoke("app:setAutoLaunch", enabled),
|
|
getAutoLaunch: () => ipcRenderer.invoke("app:getAutoLaunch"),
|
|
setStartMinimized: (enabled: boolean) =>
|
|
ipcRenderer.invoke("app:setStartMinimized", enabled),
|
|
getStartMinimized: () => ipcRenderer.invoke("app:getStartMinimized"),
|
|
getVersion: () =>
|
|
ipcRenderer.invoke("app:getVersion") as Promise<{
|
|
version: string;
|
|
buildTime: string;
|
|
buildDate: string;
|
|
isPackaged: boolean;
|
|
}>,
|
|
setAutoStartServices: (enabled: boolean) =>
|
|
ipcRenderer.invoke("app:setAutoStartServices", enabled),
|
|
getAutoStartServices: () => ipcRenderer.invoke("app:getAutoStartServices"),
|
|
quit: () => ipcRenderer.invoke("app:quit"),
|
|
},
|
|
|
|
// 监听服务状态变化
|
|
onServiceStatusChanged: (callback: () => void) => {
|
|
ipcRenderer.on("service-status-changed", callback);
|
|
},
|
|
removeServiceStatusChangedListener: (callback: () => void) => {
|
|
ipcRenderer.removeListener("service-status-changed", callback);
|
|
},
|
|
});
|
|
|
|
// 声明 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,
|
|
};
|