UNPKG

@neosjs/electron-toolkit

Version:

neosjs electron toolkit

597 lines (583 loc) 15.8 kB
/*! * @neosjs/electron-toolkit * Version: 1.0.1 * Copyright (c) 2021-PRESENT NeosJS * ReleaseTime: 2025/5/1 16:45:38 */ import { ipcUpdaterEvents, isFunction, version } from "../chunk-2MRZ2BGU.js"; import { init_esm_shims } from "../chunk-QTDD3S3N.js"; // src/renderer/index.ts init_esm_shims(); import logger from "electron-log"; // src/renderer/core/DownloadManager.ts init_esm_shims(); // src/renderer/electron.ts init_esm_shims(); var { ipcRenderer } = window.electron || window.electronApi; // src/renderer/core/EmitterManager.ts init_esm_shims(); var NeosEmitter = class { events = /* @__PURE__ */ new Map(); // 事件监听 constructor() { this.destroy(); } /** * 订阅/监听事件 * * @param type * @param handler */ on(type, handler) { if (typeof type !== "string" && typeof type !== "symbol") { throw new TypeError("Event type must be a string or symbol"); } if (typeof handler !== "function") { throw new TypeError("Event handler must be a function"); } const handlers = this.events.get(type); if (handlers) { handlers.push(handler); } else { this.events.set(type, [handler]); } return this; } /** * 监听一次事件 * * @param type * @param handler */ once(type, handler) { const wrapped = (data) => { handler(data); return this.off(type, wrapped); }; return this.on(type, wrapped); } /** * 发布事件 * * @param type * @param data */ emit(type, data) { if (typeof type !== "string" && typeof type !== "symbol") { throw new TypeError("Event type must be a string or symbol"); } let handlers = this.events.get(type); if (handlers) { handlers.slice().map((handler) => { return handler(data); }); } handlers = this.events.get("*"); if (handlers) { handlers.slice().map((handler) => { return handler(type, data); }); } return this; } /** * 关闭事件监听 * * @param type * @param handler */ off(type, handler) { if (typeof type !== "string" && typeof type !== "symbol") { throw new TypeError("Event type must be a string or symbol"); } const handlers = this.events.get(type); if (handlers) { if (handler) { handlers.splice(handlers.indexOf(handler) >>> 0, 1); } else { this.events.set(type, []); } } this.events.delete(type); return this; } /** * 销毁事件监听 */ destroy() { this.events.clear(); } }; // src/renderer/core/DownloadManager.ts var DownloadManager = class _DownloadManager extends NeosEmitter { static instance = {}; constructor() { super(); } static getInstance() { if (Object.keys(this.instance).length === 0) { this.instance = new _DownloadManager(); } return this.instance; } _emitEvents(downloadTask, options) { const _callbackMap = { // 开始 start: (res) => { isFunction(options.onStart) && options.onStart(res); }, // 进度 progress: (res) => { isFunction(options.onProgress) && options.onProgress(res); }, // 完成 complete: (res) => { isFunction(options.onComplete) && options.onComplete(res); ipcRenderer.removeAllListeners(downloadTask); }, // 失败 fail: (res) => { isFunction(options.onFail) && options.onFail(res); ipcRenderer.removeAllListeners(downloadTask); }, // 暂停下载 pause: (res) => { isFunction(options.onPause) && options.onPause(res); }, // 取消 cancel: (res) => { isFunction(options.onCancel) && options.onCancel(res); ipcRenderer.removeAllListeners(downloadTask); }, // 文件存在 exists: (res) => { isFunction(options.onExists) && options.onExists(res); ipcRenderer.removeAllListeners(downloadTask); } }; ipcRenderer.removeAllListeners(downloadTask); ipcRenderer.on(downloadTask, (_e, res, state) => { this.emit(downloadTask, { state, info: res }); return _callbackMap[state](res); }); } /** * 开始下载 * @param {string} url 下载地址 * @param {DownloadOptions} options 下载选项 * @returns {Promise<any>} 下载任务 */ start = async (url, options) => { if (!url) return Promise.reject(new Error("\u4E0B\u8F7D\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A")); const downloadTask = await ipcRenderer.invoke("START_DOWNLOAD" /* START_DOWNLOAD */, url, { saveAs: options.saveAs ?? false, directory: options.directory ?? null, filename: options.filename ?? null, errorTitle: options.errorTitle ?? null, errorMessage: options.errorMessage ?? null, showBadge: options.showBadge ?? true, showProgressBar: options.showProgressBar ?? true, unregisterWhenDone: options.unregisterWhenDone ?? true, openFolderWhenDone: options.openFolderWhenDone ?? false, overwrite: options.overwrite ?? true, dialogOptions: options.dialogOptions ?? {} }); if (!downloadTask) return; this._emitEvents(downloadTask, options); return downloadTask; }; /** * 暂停下载 * @param {string} fileUrl 下载地址 * @returns {DownloadManager} 下载管理器 */ pause = (fileUrl) => { ipcRenderer.send("PAUSE_DOWNLOAD" /* PAUSE_DOWNLOAD */, fileUrl); return this; }; /** * 取消下载 * @param {string} fileUrl 下载地址 * @returns {DownloadManager} 下载管理器 */ cancel = (fileUrl) => { ipcRenderer.send("CANCEL_DOWNLOAD" /* CANCEL_DOWNLOAD */, fileUrl); return this; }; /** * 恢复下载 * @param {string} fileUrl 下载地址 * @returns {DownloadManager} 下载管理器 */ resume = (fileUrl) => { ipcRenderer.send("RESUME_DOWNLOAD" /* RESUME_DOWNLOAD */, fileUrl); return this; }; /** * 移除所有监听 * @returns {DownloadManager} 下载管理器 */ destroy = () => { super.destroy(); ipcRenderer.invoke("DESTROY" /* DESTROY */); }; // public removeAllListeners(): DownloadManager { // this.destroy() // return this // } }; // src/renderer/core/FileManager.ts init_esm_shims(); var FileManager = class _FileManager { static instance = {}; constructor() { } static getInstance() { if (Object.keys(this.instance).length === 0) { this.instance = new _FileManager(); } return this.instance; } /** * 打开文件或文件夹 * @param {string} path - 文件或文件夹路径 */ openPath = (path) => { if (!path) return new Error("\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A"); ipcRenderer.send("OPEN_PATH_SYNC" /* OPEN_PATH_SYNC */, path); }; /** * 打开文件或文件夹(异步) * @param {string} path - 文件或文件夹路径 */ openPathAsync = (path) => { if (!path) return Promise.reject(new Error("\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A")); return ipcRenderer.invoke("OPEN_PATH_ASYNC" /* OPEN_PATH_ASYNC */, path); }; /** * 路径是否存在 * @param {string} path - 文件或文件夹路径 */ pathExists = (path) => { if (!path) return Promise.reject(new Error("\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A")); return ipcRenderer.sendSync("PATH_EXISTS" /* PATH_EXISTS */, path); }; /** * 清理目录 * @param {string} dir - 目录路径 */ cleanupDirectory = (dir) => { if (!dir) return Promise.reject(new Error("\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A")); return ipcRenderer.invoke("CLEANUP_DIRECTORY" /* CLEANUP_DIRECTORY */, dir); }; /** * 删除用户数据 * @param {string} name - 用户数据名称 */ deleteUserData = (name) => { if (!name) return Promise.reject(new Error("\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A")); return ipcRenderer.invoke("DELETE_USER_DATA" /* DELETE_USER_DATA */, name); }; /** * 保存文件 * @param {string} filePath - 文件路径 * @param {string} content - 文件内容 */ saveFile = (filePath, content) => { if (!filePath) return Promise.reject(new Error("\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A")); return ipcRenderer.invoke("SAVE_FILE" /* SAVE_FILE */, filePath, content); }; /** * 删除文件 * @param {string} filePath - 文件路径 */ removeFile = (filePath) => { if (!filePath) return Promise.reject(new Error("\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A")); return ipcRenderer.invoke("REMOVE_FILE" /* REMOVE_FILE */, filePath); }; }; var FileManager_default = FileManager; // src/renderer/core/MediaManager.ts init_esm_shims(); var MediaManager = class _MediaManager { static instance = {}; constructor() { } static getInstance() { if (Object.keys(this.instance).length === 0) { this.instance = new _MediaManager(); } return this.instance; } /** * 获取媒体访问权限状态 * @param {MediaType} mediaType - 媒体类型 * @returns {Promise<MediaAccessStatus>} 媒体访问权限状态 */ getMediaAccessStatus = (mediaType) => { return ipcRenderer.invoke("GET_MEDIA_ACCESS_STATUS" /* GET_MEDIA_ACCESS_STATUS */, mediaType); }; /** * 请求媒体访问权限 * @param {MediaType} mediaType - 媒体类型 * @returns {Promise<boolean>} 是否请求成功 */ askForMediaAccess = (mediaType) => { return ipcRenderer.invoke("ASK_FOR_MEDIA_ACCESS" /* ASK_FOR_MEDIA_ACCESS */, mediaType); }; }; var MediaManager_default = MediaManager; // src/renderer/core/StorageManager.ts init_esm_shims(); var StorageManager = class _StorageManager { static instance = {}; constructor() { } static getInstance() { if (Object.keys(this.instance).length === 0) { this.instance = new _StorageManager(); } return this.instance; } /** * 清理系统缓存 * @returns {Promise<void>} 清理系统缓存 */ clearCache = () => { return ipcRenderer.invoke("CLEAN_CACHE" /* CLEAN_CACHE */); }; /** * 清理系统存储 * @param {any} options 清理系统存储选项 */ cleanStorage = (options = {}) => { ipcRenderer.send("CLEAN_STORAGE" /* CLEAN_STORAGE */, options); }; }; var StorageManager_default = StorageManager; // src/renderer/core/SystemManager.ts init_esm_shims(); var SystemManager = class _SystemManager { static instance = {}; constructor() { } static getInstance() { if (Object.keys(this.instance).length === 0) { this.instance = new _SystemManager(); } return this.instance; } /** * 获取系统主题 * @returns {Promise<Appearance>} 系统主题 */ getSystemTheme = () => { return ipcRenderer.invoke("GET_SYSTEM_THEME" /* GET_SYSTEM_THEME */); }; /** * 获取系统信息 * @returns {Promise<SystemInfo>} 系统信息 */ getSystemInfo = () => { return ipcRenderer.invoke("GET_SYSTEM_INFO" /* GET_SYSTEM_INFO */); }; /** * 打开URL * @param {string} url - URL */ openURL = (url) => { if (!url) return; ipcRenderer.invoke("OPEN_URL" /* OPEN_URL */, url); }; }; var SystemManager_default = SystemManager; // src/renderer/core/UpdaterManager.ts init_esm_shims(); var UpdaterManager = class _UpdaterManager extends NeosEmitter { static instance; constructor() { super(); this.destroy(); ipcUpdaterEvents.forEach((event) => { ipcRenderer.removeAllListeners(event); ipcRenderer.on(event, (_event, info) => { this.emit(event, info); }); }); } /** * 获取实例 * @returns {UpdaterManager} */ static getInstance() { if (!this.instance) { this.instance = new _UpdaterManager(); } return this.instance; } /** * 自动更新 * @returns {Promise<void>} */ autoCheckForUpdates = (url) => { if (!url) return Promise.reject(new Error("\u66F4\u65B0\u6E90\u4E0D\u80FD\u4E3A\u7A7A")); return ipcRenderer.invoke("AUTO_CHECK_FOR_UPDATES" /* AUTO_CHECK_FOR_UPDATES */, url); }; /** * 检查更新 * @param {string} url 更新源 * @returns {Promise<void>} */ checkForUpdates = (url) => { if (!url) return Promise.reject(new Error("\u66F4\u65B0\u6E90\u4E0D\u80FD\u4E3A\u7A7A")); return ipcRenderer.invoke("CHECK_FOR_UPDATES" /* CHECK_FOR_UPDATES */, url); }; /** * 下载更新 * @returns {Promise<void>} */ downloadUpdate = () => { return ipcRenderer.invoke("DOWNLOAD_UPDATE" /* DOWNLOAD_UPDATE */); }; /** * 安装更新 * @returns {Promise<void>} */ installUpdate = () => { return ipcRenderer.invoke("INSTALL_UPDATE" /* INSTALL_UPDATE */); }; /** * 销毁 */ destroy = () => { super.destroy(); }; }; var UpdaterManager_default = UpdaterManager; // src/renderer/core/WindowManager.ts init_esm_shims(); var WindowManager = class _WindowManager { static instance = {}; constructor() { } static getInstance() { if (Object.keys(this.instance).length === 0) { this.instance = new _WindowManager(); } return this.instance; } /** * 设置窗口大小 * @param {number} width - 宽度 * @param {number} height - 高度 */ setSize = (width, height) => { if (!width || !height) return; ipcRenderer.send("SET_WINDOW_SIZE" /* SET_WINDOW_SIZE */, { width, height }); }; /** * 设置窗口可操作 * @param {string} type - 类型 * @param {boolean} flag - 标志 * @param {BrowserWindow} win - 窗口 */ setAble = (type, flag = true, win) => { if (!type) return false; ipcRenderer.send("SET_WINDOW_ABLE" /* SET_WINDOW_ABLE */, { type, flag, win }); return true; }; /** * 设置窗口居中 */ center = () => { ipcRenderer.send("invoke" /* INVOKE */, "center"); }; /** * 设置窗口最大化 */ maximize = () => { ipcRenderer.send("invoke" /* INVOKE */, "max"); }; /** * 设置窗口最小化 */ minimize = () => { ipcRenderer.send("invoke" /* INVOKE */, "min"); }; /** * 设置窗口关闭 */ closeWindow = () => { ipcRenderer.send("invoke" /* INVOKE */, "close"); }; /** * 设置窗口全屏 */ fullscreen = () => { ipcRenderer.send("invoke" /* INVOKE */, "fullScreen"); }; /** * 设置窗口退出全屏 */ exitFullscreen = () => { ipcRenderer.send("invoke" /* INVOKE */, "exitFullscreen"); }; }; // src/renderer/index.ts var RendererManager = class _RendererManager { version = version; static instance = {}; // 单例实例 logger; // 日志实例 downloadManager; // 下载实例 storageManager; // 存储实例 windowManager; // 窗口实例 systemManager; // 系统实例 mediaManager; // 媒体实例 fileManager; // 文件实例 updaterManager; // 更新实例 emitter; // 事件实例 // 私有构造函数, 防止外部实例化 constructor() { this.logger = logger; this.downloadManager = DownloadManager.getInstance(); this.storageManager = StorageManager_default.getInstance(); this.windowManager = WindowManager.getInstance(); this.systemManager = SystemManager_default.getInstance(); this.mediaManager = MediaManager_default.getInstance(); this.fileManager = FileManager_default.getInstance(); this.updaterManager = UpdaterManager_default.getInstance(); this.emitter = new NeosEmitter(); } // 获取唯一的实例 static getInstance() { if (Object.keys(this.instance).length === 0) { _RendererManager.instance = new _RendererManager(); } return _RendererManager.instance; } }; var rendererManager = RendererManager.getInstance(); var renderer_default = rendererManager; export { renderer_default as default };