import { is } from "@electron-toolkit/utils" import { webContents } from "electron" import { join } from "node:path" import { slash } from "utils" type FireFN = (...argu: any[]) => void // 从完整事件名称中提取原始事件名称(移除作用域前缀) type ExtractOriginalEventName = T extends `${S}:${infer Original}` ? Original : never type ExtractOriginalName = T extends `${infer Original}:${string}` ? Original : never // 从完整事件映射中提取原始事件映射 type ExtractBaseEventMaps, S extends string> = { [K in keyof T as ExtractOriginalEventName]: T[K] } export const broadcast = < T extends Record void>, B extends Record = ExtractBaseEventMaps, >( scope: ExtractOriginalName, eventName: keyof B, ...args: Parameters ) => { webContents.getAllWebContents().forEach(browser => browser.send((scope + ":" + (eventName as string)) as any, ...args)) } export function getFileUrl(app: string) { let winURL = "" if (is.dev && process.env["ELECTRON_RENDERER_URL"]) { winURL = process.env["ELECTRON_RENDERER_URL"] + `/${app}#/` } else { winURL = join(__dirname, `../renderer/${app}#/`) } return slash(winURL) } export function getPreloadUrl(file) { return join(__dirname, `../preload/${file}.mjs`) }