import { Helper } from './helper' import { rpc } from './rpc' import type * as T from '../types' import { RageFW_BrowserEvent, RageFW_ClientEvent, RageFW_ServerEvent, } from '../types' export class Browser extends Helper { constructor() { super() } set debugLogs(debug: boolean) { this.debugLogs_ = debug } set customLogger( fn: (method: string, eventName: string, ...args: unknown[]) => unknown, ) { this.customLogger_ = fn } public register( eventName: EventName, callback: T.RageFW_BrowserCallback, ): Browser { this.log_('register', eventName, callback) rpc.register< Parameters, ReturnType, EventName >(eventName, async (...data) => await callback(...data)) return this } public unregister( eventName: EventName, ): Browser { rpc.unregister(eventName) return this } public async trigger( eventName: EventName, ...args: T._BrowserEventHasArgs extends true ? [T.RageFW_BrowserArgs] : [] ): Promise> { this.log_('[RPC](trigger):', eventName, ...args) return await rpc.call< typeof args, EventName, T.RageFW_BrowserReturn >(eventName, args) } public async triggerServer( eventName: EventName, ...args: T._ServerEventHasArgs extends true ? [T.RageFW_ServerArgs] : [] ): Promise> { this.log_('[RPC](triggerServer):', eventName, ...args) return await rpc.callServer< typeof args, EventName, T.RageFW_ServerReturn >(eventName, args) } public async triggerClient( eventName: EventName, ...args: T._ClientEventHasArgs extends true ? [T.RageFW_ClientArgs] : [] ): Promise> { this.log_('[RPC](triggerClient):', eventName, ...args) return await rpc.callClient< typeof args, EventName, T.RageFW_ClientReturn >(eventName, args) } } // new Browser() // .register('customCefEvent', async (a, b) => true) // .triggerServer('customServerEvent', ['', 1])