import rpc from 'rage-rpc' import { _CefEventHasArgs, _ClientEventHasArgs, _ServerEventHasArgs, RageFW_CefArguments, RageFW_CefCallback, RageFW_CefReturn, RageFW_ClientArguments, RageFW_ClientReturn, RageFW_ICustomCefEvent, RageFW_ICustomClientEvent, RageFW_ICustomServerEvent, RageFW_ServerArguments, 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_CefArguments] : [] ): 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_ServerArguments] : [] ): 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_ClientArguments] : [] ): 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(), }