diff options
Diffstat (limited to 'src/VencordNative.ts')
-rw-r--r-- | src/VencordNative.ts | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/src/VencordNative.ts b/src/VencordNative.ts index 3cd53e1..02de74f 100644 --- a/src/VencordNative.ts +++ b/src/VencordNative.ts @@ -16,34 +16,46 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -import IPC_EVENTS from "@utils/IpcEvents"; -import { IpcRenderer, ipcRenderer } from "electron"; +import { IpcEvents } from "@utils/IpcEvents"; +import { IpcRes } from "@utils/types"; +import { ipcRenderer } from "electron"; -function assertEventAllowed(event: string) { - if (!(event in IPC_EVENTS)) throw new Error(`Event ${event} not allowed.`); +function invoke<T = any>(event: IpcEvents, ...args: any[]) { + return ipcRenderer.invoke(event, ...args) as Promise<T>; } + +export function sendSync<T = any>(event: IpcEvents, ...args: any[]) { + return ipcRenderer.sendSync(event, ...args) as T; +} + export default { - getVersions: () => process.versions, - ipc: { - send(event: string, ...args: any[]) { - assertEventAllowed(event); - ipcRenderer.send(event, ...args); - }, - sendSync<T = any>(event: string, ...args: any[]): T { - assertEventAllowed(event); - return ipcRenderer.sendSync(event, ...args); - }, - on(event: string, listener: Parameters<IpcRenderer["on"]>[1]) { - assertEventAllowed(event); - ipcRenderer.on(event, listener); - }, - off(event: string, listener: Parameters<IpcRenderer["off"]>[1]) { - assertEventAllowed(event); - ipcRenderer.off(event, listener); + updater: { + getUpdates: () => invoke<IpcRes<Record<"hash" | "author" | "message", string>[]>>(IpcEvents.GET_UPDATES), + update: () => invoke<IpcRes<boolean>>(IpcEvents.UPDATE), + rebuild: () => invoke<IpcRes<boolean>>(IpcEvents.BUILD), + getRepo: () => invoke<IpcRes<string>>(IpcEvents.GET_REPO), + }, + + settings: { + get: () => sendSync<string>(IpcEvents.GET_SETTINGS), + set: (settings: string) => invoke<void>(IpcEvents.SET_SETTINGS, settings), + getSettingsDir: () => invoke<string>(IpcEvents.GET_SETTINGS_DIR), + }, + + quickCss: { + get: () => invoke<string>(IpcEvents.GET_QUICK_CSS), + set: (css: string) => invoke<void>(IpcEvents.SET_QUICK_CSS, css), + + addChangeListener(cb: (newCss: string) => void) { + ipcRenderer.on(IpcEvents.QUICK_CSS_UPDATE, (_, css) => cb(css)); }, - invoke<T = any>(event: string, ...args: any[]): Promise<T> { - assertEventAllowed(event); - return ipcRenderer.invoke(event, ...args); - } - } + + openFile: () => invoke<void>(IpcEvents.OPEN_QUICKCSS), + openEditor: () => invoke<void>(IpcEvents.OPEN_MONACO_EDITOR), + }, + + native: { + getVersions: () => process.versions as Partial<NodeJS.ProcessVersions>, + openExternal: (url: string) => invoke<void>(IpcEvents.OPEN_EXTERNAL, url) + }, }; |