You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.4 KiB
38 lines
1.4 KiB
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 string, S extends string> = T extends `${S}:${infer Original}` ? Original : never
|
|
type ExtractOriginalName<T extends string> = T extends `${infer Original}:${string}` ? Original : never
|
|
// 从完整事件映射中提取原始事件映射
|
|
type ExtractBaseEventMaps<T extends Record<string, any>, S extends string> = {
|
|
[K in keyof T as ExtractOriginalEventName<K & string, S>]: T[K]
|
|
}
|
|
|
|
export const broadcast = <
|
|
T extends Record<string, (...argu: any[]) => void>,
|
|
B extends Record<string, FireFN> = ExtractBaseEventMaps<T, string>,
|
|
>(
|
|
scope: ExtractOriginalName<keyof T & string>,
|
|
eventName: keyof B,
|
|
...args: Parameters<B[keyof B]>
|
|
) => {
|
|
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`)
|
|
}
|
|
|