From 788be34951e08f032fb917ee28b81b87918ae7a4 Mon Sep 17 00:00:00 2001 From: Danya H Date: Sun, 9 Jun 2024 15:42:45 +0100 Subject: [PATCH] separated types and declarations into shared folder + better code proposals --- client/package.json | 14 +++++ client/src/index.ts | 23 +++++++ client/tsconfig.json | 13 ++++ server/package.json | 6 +- server/src/index.ts | 100 ++++++------------------------ server/tsconfig.json | 2 +- shared/client/index.d.ts | 25 ++++++++ shared/client/package.json | 16 +++++ shared/{ => client}/tsconfig.json | 0 shared/package.json | 13 ---- shared/server/index.d.ts | 26 ++++++++ shared/server/package.json | 16 +++++ shared/server/tsconfig.json | 10 +++ shared/src/index.ts | 0 14 files changed, 166 insertions(+), 98 deletions(-) create mode 100644 client/package.json create mode 100644 client/src/index.ts create mode 100644 client/tsconfig.json create mode 100644 shared/client/index.d.ts create mode 100644 shared/client/package.json rename shared/{ => client}/tsconfig.json (100%) delete mode 100644 shared/package.json create mode 100644 shared/server/index.d.ts create mode 100644 shared/server/package.json create mode 100644 shared/server/tsconfig.json delete mode 100644 shared/src/index.ts diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..a3f5287 --- /dev/null +++ b/client/package.json @@ -0,0 +1,14 @@ +{ + "name": "rage-fw-client", + "version": "0.0.1", + "main": "dist/index.js", + "type": "module", + "files": ["dist/**/*"], + "scripts": { + "build": "tsup" + }, + "keywords": [], + "author": "SashaGoncharov19", + "license": "MIT", + "description": "Client side of rage-fw" +} diff --git a/client/src/index.ts b/client/src/index.ts new file mode 100644 index 0000000..8d3037e --- /dev/null +++ b/client/src/index.ts @@ -0,0 +1,23 @@ +/// +import rpc from 'rage-rpc' + +class Player implements RageFW_Player { + public triggerClient( + player: PlayerMp, + eventName: EventName, + ...args: RageFW_ClientEventArguments + ): Promise> { + return rpc.callClient(player, eventName, ...args) + } +} + +export const rage = { + player: new Player(), +} + +const bool = rage.player.triggerClient( + {} as PlayerMp, + 'customClientEvent', + 'arg1', + 2, +) diff --git a/client/tsconfig.json b/client/tsconfig.json new file mode 100644 index 0000000..22718db --- /dev/null +++ b/client/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["ESNext", "ES5"], + "module": "ESNext", + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "types": ["../node_modules/@ragempcommunity/types-server", "../../shared/client"] + } +} diff --git a/server/package.json b/server/package.json index c9561a4..4ed7016 100644 --- a/server/package.json +++ b/server/package.json @@ -1,5 +1,5 @@ { - "name": "rage-f-server", + "name": "rage-fw-server", "version": "0.0.1", "main": "dist/index.js", "type": "module", @@ -8,7 +8,7 @@ "build": "tsup" }, "keywords": [], - "author": "SashaGonncharov19", + "author": "SashaGoncharov19", "license": "MIT", - "description": "Server side of rage-f" + "description": "Server side for rage-fw" } diff --git a/server/src/index.ts b/server/src/index.ts index d2dd2d1..228cda9 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -1,93 +1,31 @@ -/// +/// import rpc from 'rage-rpc' -type RageFW_ServerEvent = K extends keyof RageFW_ICustomServerEvent - ? K - : K extends keyof IServerEvents - ? K - : never - -type RageFW_ServerEventCallback = K extends keyof RageFW_ICustomServerEvent - ? ( - player: PlayerMp, - ...args: Parameters - ) => ReturnType - : K extends keyof IServerEvents - ? ThisifyServerEvents[K] - : never - -type RageFW_ClientEvent = K extends keyof RageFW_ICustomClientEvent - ? K - : K extends keyof IServerEvents - ? K - : never - -type RageFW_ClientEventArguments = K extends keyof RageFW_ICustomClientEvent - ? Parameters - : (K extends keyof IServerEvents ? ThisifyServerEvents[K] : never)[] - -type RageFW_ClientEventReturn = K extends keyof RageFW_ICustomClientEvent - ? ReturnType - : never - -interface RageFW_ICustomServerEvent { - customEvent(arg1: number, arg2: boolean): void -} - -interface RageFW_ICustomClientEvent { - customClientEvent(arg1: number, arg2: boolean): boolean -} - -class Server { - register( - eventName: RageFW_ServerEvent, +class Server implements RageFW_Server { + public register( + eventName: EventName, callback: RageFW_ServerEventCallback, - ): void - - public register( - eventName: string, - callback: (...args: unknown[]) => unknown, - ) { - rpc.register(eventName, callback) - } - - // public registerMultiple(events: { - // [name: string]: (player: PlayerMp, ...args: any[]) => any - // }): void - // - // registerMultiple(events: { [name: string]: (...args: any[]) => any }) { - // Object.entries(events).forEach(([name, callback]) => - // rpc.register(name, (data: any[]) => { - // return Array.isArray(data) ? callback(...data) : callback(data) - // }), - // ) - // } - // - // register() {} -} - -class Player { - triggerClient( - player: PlayerMp, - eventName: RageFW_ClientEvent, - ...args: RageFW_ClientEventArguments - ): RageFW_ClientEventReturn - public triggerClient( - player: PlayerMp, - eventName: string, - ...args: unknown[] - ) { - return rpc.callClient(player, eventName, ...args) + ): void { + rpc.register(eventName, callback as rpc.ProcedureListener) } } export const rage = { event: new Server(), - player: new Player(), } -rage.event.register('customEvent', (player, arg1, arg2) => { - rage.player.triggerClient(player, 'customClientEvent', arg1, arg2) +rage.event.register('customServerEvent', (player, arg1, arg2) => { + return true }) -function test() {} +// public registerMultiple(events: { +// [name: string]: (player: PlayerMp, ...args: any[]) => any +// }): void +// +// registerMultiple(events: { [name: string]: (...args: any[]) => any }) { +// Object.entries(events).forEach(([name, callback]) => +// rpc.register(name, (data: any[]) => { +// return Array.isArray(data) ? callback(...data) : callback(data) +// }), +// ) +// } diff --git a/server/tsconfig.json b/server/tsconfig.json index adf1a0d..a456bed 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -8,6 +8,6 @@ "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, - "types": ["../node_modules/@ragempcommunity/types-server"] + "types": ["../node_modules/@ragempcommunity/types-server", "../../shared/server"] } } diff --git a/shared/client/index.d.ts b/shared/client/index.d.ts new file mode 100644 index 0000000..1096d1a --- /dev/null +++ b/shared/client/index.d.ts @@ -0,0 +1,25 @@ +/// + +interface RageFW_ICustomClientEvent { + customClientEvent(arg1: string, arg2: number): boolean +} + +type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent | keyof IClientEvents + +type RageFW_ClientEventArguments = + K extends keyof RageFW_ICustomClientEvent + ? Parameters + : (K extends keyof IClientEvents ? ThisifyClientEvents[K] : never)[] + +type RageFW_ClientEventReturn = + K extends keyof RageFW_ICustomClientEvent + ? ReturnType + : never + +declare class RageFW_Player { + declare triggerClient( + player: PlayerMp, + eventName: EventName, + ...args: RageFW_ClientEventArguments + ): Promise> +} \ No newline at end of file diff --git a/shared/client/package.json b/shared/client/package.json new file mode 100644 index 0000000..67dab3d --- /dev/null +++ b/shared/client/package.json @@ -0,0 +1,16 @@ +{ + "name": "rage-fw-shared-client", + "version": "0.0.1", + "type": "module", + "main": "index.d.ts", + "files": [ + "index.d.ts" + ], + "scripts": { + "test": "tsup" + }, + "keywords": [], + "author": "SashaGoncharov19", + "license": "MIT", + "description": "Shared client types for rage-fw" +} diff --git a/shared/tsconfig.json b/shared/client/tsconfig.json similarity index 100% rename from shared/tsconfig.json rename to shared/client/tsconfig.json diff --git a/shared/package.json b/shared/package.json deleted file mode 100644 index 14bf002..0000000 --- a/shared/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "rage-f-shared", - "version": "0.0.1", - "main": "dist/index.js", - "type": "module", - "scripts": { - "test": "tsup" - }, - "keywords": [], - "author": "SashaGonncharov19", - "license": "MIT", - "description": "Server side of rage-f" -} diff --git a/shared/server/index.d.ts b/shared/server/index.d.ts new file mode 100644 index 0000000..d75272d --- /dev/null +++ b/shared/server/index.d.ts @@ -0,0 +1,26 @@ +/// +declare interface RageFW_ICustomServerEvent { + customServerEvent(arg1: string, arg2: number): boolean +} + +type RageFW_ServerEvent = + | keyof RageFW_ICustomServerEvent + | keyof IServerEvents + +type RageFW_ServerEventCallback< + K extends keyof RageFW_ICustomServerEvent | keyof IServerEvents, +> = K extends keyof RageFW_ICustomServerEvent + ? ( + player: PlayerMp, + ...args: Parameters + ) => ReturnType + : K extends keyof IServerEvents + ? ThisifyServerEvents[K] + : never + +declare class RageFW_Server { + declare register( + eventName: EventName, + callback: RageFW_ServerEventCallback, + ): void +} diff --git a/shared/server/package.json b/shared/server/package.json new file mode 100644 index 0000000..3ed02d1 --- /dev/null +++ b/shared/server/package.json @@ -0,0 +1,16 @@ +{ + "name": "rage-fw-shared-server", + "version": "0.0.1", + "type": "module", + "main": "index.d.ts", + "files": [ + "index.d.ts" + ], + "scripts": { + "test": "tsup" + }, + "keywords": [], + "author": "SashaGoncharov19", + "license": "MIT", + "description": "Shared server types for rage-fw" +} diff --git a/shared/server/tsconfig.json b/shared/server/tsconfig.json new file mode 100644 index 0000000..3ffa57b --- /dev/null +++ b/shared/server/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} diff --git a/shared/src/index.ts b/shared/src/index.ts deleted file mode 100644 index e69de29..0000000