diff --git a/client/src/index.ts b/client/src/index.ts index 64a2f4a..f42acc0 100644 --- a/client/src/index.ts +++ b/client/src/index.ts @@ -1,29 +1,30 @@ import rpc from 'rage-rpc' import { - RageFW_ClientEventReturn, + RageFW_ClientCallback, RageFW_ClientEvent, - RageFW_ClientEventArguments, - RageFW_ClientServerCallback, + RageFW_ClientEventReturn, RageFW_ClientServerEvent, + RageFW_ClientServerEventArguments, + RageFW_ClientServerEventReturn, } from './types' class Client { - public register( + public register( eventName: EventName, - callback: RageFW_ClientServerCallback, + callback: RageFW_ClientCallback, ): void { rpc.register(eventName, data => { - return callback(...data) + return callback(data) }) } } class Player { - public triggerServer( + public triggerServer( eventName: EventName, - ...args: RageFW_ClientEventArguments - ): Promise> { - return rpc.callServer(eventName, ...args) + args: RageFW_ClientServerEventArguments, + ): Promise> { + return rpc.callServer(eventName, args) } } @@ -31,3 +32,6 @@ export const fw = { event: new Client(), player: new Player(), } + +fw.player.triggerServer('customServerEvent', ['wer']) +fw.event.register('customClientEvent', ([arg1]) => true) diff --git a/client/src/types.ts b/client/src/types.ts index d8a1fbf..76bd3a4 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -5,20 +5,30 @@ import type { RageFW_ICustomServerEvent, } from 'rage-fw-shared-types' -export type RageFW_ClientEvent = keyof RageFW_ICustomServerEvent +// CLIENT -export type RageFW_ClientEventArguments = - K extends keyof RageFW_ICustomServerEvent - ? Parameters - : never +export type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent + +export type RageFW_ClientCallback = ( + args: Parameters, +) => RageFW_ClientEventReturn export type RageFW_ClientEventReturn = K extends keyof RageFW_ICustomClientEvent ? ReturnType : never -export type RageFW_ClientServerEvent = keyof RageFW_ICustomClientEvent +// SERVER -export type RageFW_ClientServerCallback = ( - ...args: Parameters -) => ReturnType +export type RageFW_ClientServerEvent = keyof RageFW_ICustomServerEvent + +export type RageFW_ClientServerEventArguments< + K extends RageFW_ClientServerEvent, +> = K extends keyof RageFW_ICustomServerEvent + ? Parameters + : never + +export type RageFW_ClientServerEventReturn = + K extends keyof RageFW_ICustomServerEvent + ? ReturnType + : never diff --git a/server/src/index.ts b/server/src/index.ts index 7812491..c2a5754 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -26,10 +26,7 @@ class Server { args: Parameters, info, ) => { - return Array.isArray(args) - ? callback(info.player as PlayerMp, ...args) - : // @ts-ignore fixme spread tuple type no infer - callback(info.player as PlayerMp, args) + callback(info.player as PlayerMp, args) }, ) } @@ -83,7 +80,7 @@ class Player { public triggerClient( player: PlayerMp, eventName: EventName, - ...args: RageFW_ClientEventArguments + args: RageFW_ClientEventArguments, ): Promise> { return rpc.callClient(player, eventName, args) } diff --git a/server/src/types.ts b/server/src/types.ts index f48384e..c4e9a22 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -15,11 +15,9 @@ export type RageFW_ServerEventCallbackCustom< K extends keyof RageFW_ICustomServerEvent = keyof RageFW_ICustomServerEvent, > = ( player: PlayerMp, - ...args: Parameters + args: Parameters, ) => ReturnType -type x = Parameters[number] - export type RageFW_ServerEventCallbackNative< K extends keyof IServerEvents = keyof IServerEvents, > = IServerEvents[K] diff --git a/shared-types/types/types/index.d.ts b/shared-types/types/types/index.d.ts index 24ddffc..484e125 100644 --- a/shared-types/types/types/index.d.ts +++ b/shared-types/types/types/index.d.ts @@ -1,8 +1,10 @@ declare module 'rage-fw-shared-types' { export interface RageFW_ICustomServerEvent { customServerEvent(customArgs: string): boolean - customServerEvent2(customArgs2: number): void + customServerEvent2(...customArgs2: number[]): void } - export interface RageFW_ICustomClientEvent {} + export interface RageFW_ICustomClientEvent { + customClientEvent(clientArgs: string): boolean + } }