typedelectron/ts/classes.typedelectronbackend.ts
2023-12-06 19:04:14 +01:00

35 lines
1.1 KiB
TypeScript

import * as plugins from './plugins.js';
export class TypedElectronBackend {
// STATIC
public static async createTypedElectronBackend() {
return new TypedElectronBackend();
}
// INSTANCE
public typedrouter = new plugins.typedrequest.TypedRouter();
constructor() {
plugins.electron.ipcMain.on('typedrequest', async (eventArg, payloadArg) => {
const updatedPayload = await this.typedrouter.routeAndAddResponse({ ...payloadArg }); // TODO: check how to pass on eventArg
eventArg.sender.send('typedrequest', updatedPayload);
});
}
createTypedRequest<T extends plugins.typedrequestInterfaces.ITypedRequest>(
methodName: T['method'],
windowArg: plugins.electron.BrowserWindow
) {
const typedrequest = new plugins.typedrequest.TypedRequest<T>(
new plugins.typedrequest.TypedTarget({
typedRouterRef: this.typedrouter,
postMethodWithTypedRouter: async (payloadArg: T) => {
windowArg.webContents.send('typedrequest', payloadArg);
},
}),
methodName
);
return typedrequest;
}
}