From c52cd8b4c868a46c8ac5e13ecab80a8d4c1fb8db Mon Sep 17 00:00:00 2001 From: Danya H Date: Thu, 13 Jun 2024 02:18:33 +0100 Subject: [PATCH] better typings in trigger functions --- client/src/index.ts | 10 ++++++++-- client/src/types/client.ts | 8 ++++++++ client/src/types/server.ts | 13 +++++++++++- server/src/index.ts | 31 ++++++++++------------------- server/src/types/client.ts | 12 +++++++++-- server/src/types/server.ts | 13 +++++++++++- shared-types/types/types/index.d.ts | 12 ++++++++--- tsconfig.json | 2 +- 8 files changed, 71 insertions(+), 30 deletions(-) diff --git a/client/src/index.ts b/client/src/index.ts index 380f195..f210b77 100644 --- a/client/src/index.ts +++ b/client/src/index.ts @@ -10,6 +10,8 @@ import { RageFW_ClientServerEventReturn, RageFW_ClientEventArguments, RageFW_ClientEventReturn, + _ClientEventHasArgs, + _ServerEventHasArgs, RageFW_CefEvent, RageFW_CefArgs, RageFW_CefReturn, @@ -39,14 +41,18 @@ class Player { public trigger( eventName: EventName, - args: RageFW_ClientEventArguments, + ...args: _ClientEventHasArgs extends true + ? [RageFW_ClientEventArguments] + : [] ): Promise> { return rpc.call>(eventName, args) } public triggerServer( eventName: EventName, - args: RageFW_ClientServerEventArguments, + ...args: _ServerEventHasArgs extends true + ? [RageFW_ClientServerEventArguments] + : [] ): Promise> { return rpc.callServer(eventName, args) } diff --git a/client/src/types/client.ts b/client/src/types/client.ts index 6f801f0..6cc633b 100644 --- a/client/src/types/client.ts +++ b/client/src/types/client.ts @@ -31,3 +31,11 @@ export type RageFW_ClientEventReturn = K extends keyof RageFW_ICustomClientEvent ? ReturnType : never + +export type _ClientEventHasArgs< + EventName extends keyof RageFW_ICustomClientEvent, +> = keyof RageFW_ICustomClientEvent extends never + ? false + : Parameters[0] extends undefined + ? false + : true diff --git a/client/src/types/server.ts b/client/src/types/server.ts index 121e68b..c65bccd 100644 --- a/client/src/types/server.ts +++ b/client/src/types/server.ts @@ -1,6 +1,9 @@ /// -import type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types' +import type { + RageFW_ICustomClientEvent, + RageFW_ICustomServerEvent, +} from 'rage-fw-shared-types' /** * Union of all available server event names callable from client @@ -26,3 +29,11 @@ export type RageFW_ClientServerEventReturn = K extends keyof RageFW_ICustomServerEvent ? ReturnType : never + +export type _ServerEventHasArgs< + EventName extends keyof RageFW_ICustomServerEvent, +> = keyof RageFW_ICustomClientEvent extends never + ? false + : Parameters[0] extends undefined + ? false + : true diff --git a/server/src/index.ts b/server/src/index.ts index 3faa5b3..460f000 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -3,12 +3,11 @@ import rpc from 'rage-rpc' import Logger from './logger' import { - RageFW_CefArgs, - RageFW_CefEvent, - RageFW_CefReturn, + _ClientEventHasArgs, + _ServerEventHasArgs, RageFW_ClientEvent, - RageFW_ClientEventArguments, - RageFW_ClientEventReturn, + RageFW_ServerClientEventArguments, + RageFW_ServerClientEventReturn, RageFW_ICustomServerEvent, RageFW_ServerEvent, RageFW_ServerEventArguments, @@ -104,7 +103,9 @@ class Server { public trigger( eventName: EventName, - args: RageFW_ServerEventArguments, + ...args: _ServerEventHasArgs extends true + ? [RageFW_ServerEventArguments] + : [] ): Promise> { return rpc.call>(eventName, args) } @@ -114,18 +115,12 @@ class Player { public triggerClient( player: PlayerMp, eventName: EventName, - args: RageFW_ClientEventArguments, - ): Promise> { + ...args: _ClientEventHasArgs extends true + ? [RageFW_ServerClientEventArguments] + : [] + ): Promise> { return rpc.callClient(player, eventName, args) } - - public triggerBrowser( - player: PlayerMp, - eventName: EventName, - args: RageFW_CefArgs, - ): Promise> { - return rpc.callBrowsers(player, eventName, args) - } } export const fw = { @@ -135,7 +130,3 @@ export const fw = { log: new Logger(), }, } - -fw.system.log.info( - 'Working on Rage Framework. RageFW © Powered by Entity Seven Group', -) diff --git a/server/src/types/client.ts b/server/src/types/client.ts index 00ff728..8b82e75 100644 --- a/server/src/types/client.ts +++ b/server/src/types/client.ts @@ -12,7 +12,7 @@ export type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent * Array of arguments of an event you pass as a generic * These only include custom events */ -export type RageFW_ClientEventArguments = +export type RageFW_ServerClientEventArguments = K extends RageFW_ClientEvent ? Parameters : never @@ -21,7 +21,15 @@ export type RageFW_ClientEventArguments = * Return type of event you pass as a generic * These only include custom events */ -export type RageFW_ClientEventReturn = +export type RageFW_ServerClientEventReturn = K extends RageFW_ClientEvent ? ReturnType : never + +export type _ClientEventHasArgs< + EventName extends keyof RageFW_ICustomClientEvent, +> = keyof RageFW_ICustomClientEvent extends never + ? false + : Parameters[0] extends undefined + ? false + : true diff --git a/server/src/types/server.ts b/server/src/types/server.ts index 8c52b61..c86e7f9 100644 --- a/server/src/types/server.ts +++ b/server/src/types/server.ts @@ -1,6 +1,9 @@ /// -import type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types' +import type { + RageFW_ICustomClientEvent, + RageFW_ICustomServerEvent, +} from 'rage-fw-shared-types' export type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types' /** @@ -62,3 +65,11 @@ export type RageFW_ServerEventCallbackCustom< export type RageFW_ServerEventCallbackNative< K extends keyof IServerEvents = keyof IServerEvents, > = IServerEvents[K] + +export type _ServerEventHasArgs< + EventName extends keyof RageFW_ICustomServerEvent, +> = keyof RageFW_ICustomClientEvent extends never + ? false + : Parameters[0] extends undefined + ? false + : true diff --git a/shared-types/types/types/index.d.ts b/shared-types/types/types/index.d.ts index a65c140..458cd22 100644 --- a/shared-types/types/types/index.d.ts +++ b/shared-types/types/types/index.d.ts @@ -1,7 +1,13 @@ declare module 'rage-fw-shared-types' { - export interface RageFW_ICustomServerEvent {} + export interface RageFW_ICustomServerEvent { + customServerEvent(test: string, test2: number): void + } - export interface RageFW_ICustomClientEvent {} + export interface RageFW_ICustomClientEvent { + customClientEvent(test: string, test2: number): void + } - export interface RageFW_ICustomCefEvent {} + export interface RageFW_ICustomCefEvent { + customCefEvent(test: string, test2: number): void + } } diff --git a/tsconfig.json b/tsconfig.json index 3c0fb42..af2195a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ESNext", - "lib": ["ESNext","ES2019"], + "lib": ["ESNext","ES2019", "ES6"], "moduleResolution": "node", "module": "ESNext", "esModuleInterop": true,