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

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`)
}