Files
moreminimore-vibe/src/ipc/handlers/safe_handle.ts

39 lines
1.1 KiB
TypeScript

import { ipcMain, IpcMainInvokeEvent } from "electron";
import log from "electron-log";
import { IS_TEST_BUILD } from "../utils/test_utils";
export function createLoggedHandler(logger: log.LogFunctions) {
return (
channel: string,
fn: (event: IpcMainInvokeEvent, ...args: any[]) => Promise<any>,
) => {
ipcMain.handle(
channel,
async (event: IpcMainInvokeEvent, ...args: any[]) => {
logger.log(`IPC: ${channel} called with args: ${JSON.stringify(args)}`);
try {
const result = await fn(event, ...args);
logger.log(
`IPC: ${channel} returned: ${JSON.stringify(result)?.slice(0, 100)}...`,
);
return result;
} catch (error) {
logger.error(
`Error in ${fn.name}: args: ${JSON.stringify(args)}`,
error,
);
throw new Error(`[${channel}] ${error}`);
}
},
);
};
}
export function createTestOnlyLoggedHandler(logger: log.LogFunctions) {
if (!IS_TEST_BUILD) {
// Returns a no-op function for non-e2e test builds.
return () => {};
}
return createLoggedHandler(logger);
}