import rpc from 'rage-rpc' import { _CefEventHasArgs, _ClientEventHasArgs, _ServerEventHasArgs, RageFW_CefArgs, RageFW_CefCallback, RageFW_CefReturn, RageFW_ClientArgs, RageFW_ClientReturn, RageFW_ICustomCefEvent, RageFW_ICustomClientEvent, RageFW_ICustomServerEvent, RageFW_ServerArgs, RageFW_ServerReturn, } from './types' class Cef { public register( eventName: EventName, callback: RageFW_CefCallback, ): void { if ('mp' in window) { rpc.register(eventName, callback) } } public trigger( eventName: EventName, ...args: _CefEventHasArgs extends true ? [RageFW_CefArgs] : [] ): Promise> { if ('mp' in window) { return rpc.call(eventName, args) } return Promise.reject( 'RageFW was started in window which not contain global variable MP!', ) } public triggerServer( eventName: EventName, ...args: _ServerEventHasArgs extends true ? [RageFW_ServerArgs] : [] ): Promise> { if ('mp' in window) { return rpc.callServer(eventName, args) } return Promise.reject( 'RageFW was started in window which not contain global variable MP!', ) } public triggerClient( eventName: EventName, ...args: _ClientEventHasArgs extends true ? [RageFW_ClientArgs] : [] ): Promise> { if ('mp' in window) { return rpc.callClient(eventName, args) } return Promise.reject( 'RageFW was started in window which not contain global variable MP!', ) } } export const fw = { event: new Cef(), }