Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8972fee22e | ||
|
|
828d74dad9 | ||
|
|
e1450397ab | ||
|
|
3f48215eb1 | ||
|
|
5205a9e245 | ||
|
|
4695f5dbd1 | ||
|
|
fa4c218a7a | ||
|
|
454fc12d2e | ||
|
|
2da34bd382 | ||
|
|
2113b5ae29 | ||
|
|
ff37d353bd |
@@ -0,0 +1,31 @@
|
||||
env:
|
||||
node: true
|
||||
es6: true
|
||||
es2019: true
|
||||
extends:
|
||||
- 'eslint:recommended'
|
||||
- 'plugin:@typescript-eslint/recommended'
|
||||
# - 'prettier'
|
||||
parser: '@typescript-eslint/parser'
|
||||
parserOptions:
|
||||
ecmaVersion: '2019'
|
||||
sourceType: 'script'
|
||||
plugins:
|
||||
- '@typescript-eslint'
|
||||
ignorePatterns:
|
||||
- 'node_modules'
|
||||
rules: {
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
'warn',
|
||||
{
|
||||
"argsIgnorePattern": '^_',
|
||||
"varsIgnorePattern": '^_',
|
||||
"caughtErrorsIgnorePattern": '^_'
|
||||
}
|
||||
],
|
||||
'@typescript-eslint/ban-ts-comment': 'off',
|
||||
'@typescript-eslint/ban-types': 'off',
|
||||
'consistent-return': 'warn',
|
||||
'no-empty': 'off',
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rage-fw-client",
|
||||
"version": "0.0.12-alpha.0",
|
||||
"version": "0.0.14-alpha.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"files": [
|
||||
|
||||
+15
-11
@@ -1,29 +1,30 @@
|
||||
import rpc from 'rage-rpc'
|
||||
import {
|
||||
RageFW_ClientEventReturn,
|
||||
|
||||
import type {
|
||||
RageFW_ClientEventCallback,
|
||||
RageFW_ClientEvent,
|
||||
RageFW_ClientEventArguments,
|
||||
RageFW_ClientServerCallback,
|
||||
RageFW_ClientServerEvent,
|
||||
RageFW_ClientServerEventArguments,
|
||||
RageFW_ClientServerEventReturn,
|
||||
} from './types'
|
||||
|
||||
class Client {
|
||||
public register<EventName extends RageFW_ClientServerEvent>(
|
||||
public register<EventName extends RageFW_ClientEvent>(
|
||||
eventName: EventName,
|
||||
callback: RageFW_ClientServerCallback<EventName>,
|
||||
callback: RageFW_ClientEventCallback<EventName>,
|
||||
): void {
|
||||
rpc.register(eventName, data => {
|
||||
return callback(...data)
|
||||
return callback(data)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
class Player {
|
||||
public triggerServer<EventName extends RageFW_ClientEvent>(
|
||||
public triggerServer<EventName extends RageFW_ClientServerEvent>(
|
||||
eventName: EventName,
|
||||
...args: RageFW_ClientEventArguments<EventName>
|
||||
): Promise<RageFW_ClientEventReturn<EventName>> {
|
||||
return rpc.callServer(eventName, ...args)
|
||||
args: RageFW_ClientServerEventArguments<EventName>,
|
||||
): Promise<RageFW_ClientServerEventReturn<EventName>> {
|
||||
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)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
/// <reference types="@ragempcommunity/types-client" />
|
||||
|
||||
import type {
|
||||
RageFW_ICustomClientEvent,
|
||||
RageFW_ICustomServerEvent,
|
||||
} from 'rage-fw-shared-types'
|
||||
|
||||
export type RageFW_ClientEvent = keyof RageFW_ICustomServerEvent
|
||||
|
||||
export type RageFW_ClientEventArguments<K extends RageFW_ClientEvent> =
|
||||
K extends keyof RageFW_ICustomServerEvent
|
||||
? Parameters<RageFW_ICustomServerEvent[K]>
|
||||
: never
|
||||
|
||||
export type RageFW_ClientEventReturn<K extends RageFW_ClientEvent> =
|
||||
K extends keyof RageFW_ICustomClientEvent
|
||||
? ReturnType<RageFW_ICustomClientEvent[K]>
|
||||
: never
|
||||
|
||||
export type RageFW_ClientServerEvent = keyof RageFW_ICustomClientEvent
|
||||
|
||||
export type RageFW_ClientServerCallback<K extends RageFW_ClientServerEvent> = (
|
||||
...args: Parameters<RageFW_ICustomClientEvent[K]>
|
||||
) => ReturnType<RageFW_ICustomClientEvent[K]>
|
||||
@@ -0,0 +1,14 @@
|
||||
/// <reference types="@ragempcommunity/types-client" />
|
||||
|
||||
import type { RageFW_ICustomClientEvent } from 'rage-fw-shared-types'
|
||||
|
||||
export type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent
|
||||
|
||||
export type RageFW_ClientEventCallback<K extends RageFW_ClientEvent> = (
|
||||
args: Parameters<RageFW_ICustomClientEvent[K]>,
|
||||
) => RageFW_ClientEventReturn<K>
|
||||
|
||||
export type RageFW_ClientEventReturn<K extends RageFW_ClientEvent> =
|
||||
K extends keyof RageFW_ICustomClientEvent
|
||||
? ReturnType<RageFW_ICustomClientEvent[K]>
|
||||
: never
|
||||
@@ -0,0 +1,2 @@
|
||||
export * from './client'
|
||||
export * from './server'
|
||||
@@ -0,0 +1,16 @@
|
||||
/// <reference types="@ragempcommunity/types-client" />
|
||||
|
||||
import type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types'
|
||||
|
||||
export type RageFW_ClientServerEvent = keyof RageFW_ICustomServerEvent
|
||||
|
||||
export type RageFW_ClientServerEventArguments<
|
||||
K extends RageFW_ClientServerEvent,
|
||||
> = K extends keyof RageFW_ICustomServerEvent
|
||||
? Parameters<RageFW_ICustomServerEvent[K]>
|
||||
: never
|
||||
|
||||
export type RageFW_ClientServerEventReturn<K extends RageFW_ClientServerEvent> =
|
||||
K extends keyof RageFW_ICustomServerEvent
|
||||
? ReturnType<RageFW_ICustomServerEvent[K]>
|
||||
: never
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
||||
"version": "0.0.12-alpha.0",
|
||||
"version": "0.0.14-alpha.0",
|
||||
"npmClient": "pnpm"
|
||||
}
|
||||
|
||||
+11
-3
@@ -2,17 +2,25 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"publish": "pnpm build && lerna publish --force-publish",
|
||||
"build": "lerna run build"
|
||||
"build": "lerna run build",
|
||||
"lint": "eslint --c .eslintrc.yaml --ext .ts client/ server/ shared-types/"
|
||||
},
|
||||
"dependencies": {
|
||||
"@microsoft/api-extractor": "^7.47.0",
|
||||
"@ragempcommunity/types-cef": "^2.1.8",
|
||||
"@ragempcommunity/types-client": "^2.1.8",
|
||||
"@ragempcommunity/types-server": "^2.1.8",
|
||||
"tsup": "^8.1.0",
|
||||
"@typescript-eslint/eslint-plugin": "^7.13.0",
|
||||
"@typescript-eslint/parser": "^7.13.0",
|
||||
"eslint": "^8.56.0",
|
||||
"lerna": "^8.1.3",
|
||||
"prettier": "^3.3.1",
|
||||
"rage-rpc": "^0.4.0",
|
||||
"tsup": "^8.1.0",
|
||||
"typescript": "^5.4.5"
|
||||
},
|
||||
"type": "module"
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+1105
-8
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "rage-fw-server",
|
||||
"version": "0.0.12-alpha.0",
|
||||
"version": "0.0.14-alpha.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"types": "dist/src/index.d.ts",
|
||||
"files": [
|
||||
"dist/**/*"
|
||||
],
|
||||
|
||||
+61
-17
@@ -1,42 +1,79 @@
|
||||
import rpc from 'rage-rpc'
|
||||
import {
|
||||
|
||||
import type {
|
||||
RageFW_ClientEvent,
|
||||
RageFW_ClientEventArguments,
|
||||
RageFW_ClientEventReturn,
|
||||
RageFW_ICustomServerEvent,
|
||||
RageFW_ServerEvent,
|
||||
RageFW_ServerEventCallback,
|
||||
} from './types.js'
|
||||
RageFW_ServerEventCallbackCustom,
|
||||
RageFW_ServerEventCallbackNative,
|
||||
} from './types'
|
||||
import { nativeEvents } from './native.events'
|
||||
|
||||
class Server {
|
||||
private isNativeEvent(eventName: string): eventName is keyof IServerEvents {
|
||||
return nativeEvents.includes(eventName)
|
||||
}
|
||||
|
||||
private registerCustom<EventName extends keyof RageFW_ICustomServerEvent>(
|
||||
eventName: EventName,
|
||||
callback: RageFW_ServerEventCallbackCustom<EventName>,
|
||||
): void {
|
||||
rpc.register(
|
||||
eventName,
|
||||
async (
|
||||
args: Parameters<RageFW_ICustomServerEvent[EventName]>,
|
||||
info,
|
||||
) => {
|
||||
callback(info.player as PlayerMp, args)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
private registerNative<EventName extends keyof IServerEvents>(
|
||||
eventName: EventName,
|
||||
callback: RageFW_ServerEventCallbackNative<EventName>,
|
||||
): void {
|
||||
mp.events.add(eventName, callback)
|
||||
}
|
||||
|
||||
public register<EventName extends RageFW_ServerEvent>(
|
||||
eventName: EventName,
|
||||
callback: RageFW_ServerEventCallback<EventName>,
|
||||
): void {
|
||||
if (nativeEvents.includes(eventName)) {
|
||||
mp.events.add(eventName, callback)
|
||||
if (this.isNativeEvent(eventName)) {
|
||||
this.registerNative(
|
||||
eventName,
|
||||
callback as RageFW_ServerEventCallbackNative,
|
||||
)
|
||||
} else {
|
||||
rpc.register(eventName, callback as rpc.ProcedureListener)
|
||||
this.registerCustom(
|
||||
eventName,
|
||||
callback as RageFW_ServerEventCallbackCustom,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
public registerMany<EventName extends RageFW_ServerEvent>(events: {
|
||||
[event in EventName]: RageFW_ServerEventCallback<event>
|
||||
}): void {
|
||||
Object.entries(events).map(([eventName, callback]) => {
|
||||
if (nativeEvents.includes(eventName)) {
|
||||
mp.events.add(
|
||||
eventName as keyof IServerEvents,
|
||||
callback as (...arg: unknown[]) => void,
|
||||
Object.entries<RageFW_ServerEventCallback<EventName>>(events).map(
|
||||
([eventName, callback]) => {
|
||||
if (this.isNativeEvent(eventName)) {
|
||||
this.registerNative(
|
||||
eventName,
|
||||
callback as RageFW_ServerEventCallbackNative,
|
||||
)
|
||||
} else {
|
||||
rpc.register(eventName, (args: unknown[]) => {
|
||||
return Array.isArray(args)
|
||||
? (callback as (...arg: typeof args) => void)(...args)
|
||||
: (callback as (arg: typeof args) => void)(args)
|
||||
})
|
||||
this.registerCustom(
|
||||
eventName as keyof RageFW_ICustomServerEvent,
|
||||
callback as RageFW_ServerEventCallbackCustom,
|
||||
)
|
||||
}
|
||||
})
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +81,7 @@ class Player {
|
||||
public triggerClient<EventName extends RageFW_ClientEvent>(
|
||||
player: PlayerMp,
|
||||
eventName: EventName,
|
||||
...args: RageFW_ClientEventArguments<EventName>
|
||||
args: RageFW_ClientEventArguments<EventName>,
|
||||
): Promise<RageFW_ClientEventReturn<EventName>> {
|
||||
return rpc.callClient(player, eventName, args)
|
||||
}
|
||||
@@ -54,3 +91,10 @@ export const fw = {
|
||||
event: new Server(),
|
||||
player: new Player(),
|
||||
}
|
||||
|
||||
fw.event.register('customServerEvent', (player, args) => true)
|
||||
fw.event.register('playerDeath', (player, args, killer) => {})
|
||||
|
||||
fw.event.registerMany({
|
||||
trailerAttached: (vehicle, trailer) => undefined,
|
||||
})
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
import '@ragempcommunity/types-server'
|
||||
|
||||
import type {
|
||||
RageFW_ICustomServerEvent,
|
||||
RageFW_ICustomClientEvent,
|
||||
} from 'rage-fw-shared-types'
|
||||
|
||||
export type RageFW_ServerEvent =
|
||||
| keyof RageFW_ICustomServerEvent
|
||||
| keyof IServerEvents
|
||||
|
||||
export type RageFW_ServerEventCallback<
|
||||
K extends keyof RageFW_ICustomServerEvent | keyof IServerEvents,
|
||||
> = K extends keyof RageFW_ICustomServerEvent
|
||||
? (
|
||||
player: PlayerMp,
|
||||
...args: Parameters<RageFW_ICustomServerEvent[K]>
|
||||
) => ReturnType<RageFW_ICustomServerEvent[K]>
|
||||
: K extends keyof IServerEvents
|
||||
? ThisifyServerEvents[K]
|
||||
: never
|
||||
|
||||
export type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent
|
||||
|
||||
export type RageFW_ClientEventArguments<K extends RageFW_ClientEvent> =
|
||||
K extends RageFW_ClientEvent
|
||||
? Parameters<RageFW_ICustomClientEvent[K]>
|
||||
: never
|
||||
|
||||
export type RageFW_ClientEventReturn<K extends RageFW_ClientEvent> =
|
||||
K extends RageFW_ClientEvent
|
||||
? ReturnType<RageFW_ICustomClientEvent[K]>
|
||||
: never
|
||||
@@ -0,0 +1,15 @@
|
||||
/// <reference types="@ragempcommunity/types-server" />
|
||||
|
||||
import type { RageFW_ICustomClientEvent } from 'rage-fw-shared-types'
|
||||
|
||||
export type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent
|
||||
|
||||
export type RageFW_ClientEventArguments<K extends RageFW_ClientEvent> =
|
||||
K extends RageFW_ClientEvent
|
||||
? Parameters<RageFW_ICustomClientEvent[K]>
|
||||
: never
|
||||
|
||||
export type RageFW_ClientEventReturn<K extends RageFW_ClientEvent> =
|
||||
K extends RageFW_ClientEvent
|
||||
? ReturnType<RageFW_ICustomClientEvent[K]>
|
||||
: never
|
||||
@@ -0,0 +1,2 @@
|
||||
export * from './client'
|
||||
export * from './server'
|
||||
@@ -0,0 +1,26 @@
|
||||
/// <reference types="@ragempcommunity/types-server" />
|
||||
|
||||
import type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types'
|
||||
export type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types'
|
||||
|
||||
export type RageFW_ServerEvent =
|
||||
| keyof RageFW_ICustomServerEvent
|
||||
| keyof IServerEvents
|
||||
|
||||
export type RageFW_ServerEventCallbackCustom<
|
||||
K extends keyof RageFW_ICustomServerEvent = keyof RageFW_ICustomServerEvent,
|
||||
> = (
|
||||
player: PlayerMp,
|
||||
args: Parameters<RageFW_ICustomServerEvent[K]>,
|
||||
) => ReturnType<RageFW_ICustomServerEvent[K]>
|
||||
|
||||
export type RageFW_ServerEventCallbackNative<
|
||||
K extends keyof IServerEvents = keyof IServerEvents,
|
||||
> = IServerEvents[K]
|
||||
|
||||
export type RageFW_ServerEventCallback<K extends RageFW_ServerEvent> =
|
||||
K extends keyof RageFW_ICustomServerEvent
|
||||
? RageFW_ServerEventCallbackCustom<K>
|
||||
: K extends keyof IServerEvents
|
||||
? RageFW_ServerEventCallbackNative<K>
|
||||
: never
|
||||
@@ -9,7 +9,6 @@
|
||||
"composite": false,
|
||||
"target": "ES2022",
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"moduleDetection": "auto",
|
||||
"module": "CommonJS",
|
||||
"resolveJsonModule": true,
|
||||
|
||||
@@ -5,7 +5,7 @@ export default defineConfig({
|
||||
outDir: './dist',
|
||||
format: ['cjs'],
|
||||
noExternal: ['rage-rpc'],
|
||||
dts: true,
|
||||
experimentalDts: true,
|
||||
splitting: false,
|
||||
sourcemap: false,
|
||||
clean: true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rage-fw-shared-types",
|
||||
"version": "0.0.12-alpha.0",
|
||||
"version": "0.0.14-alpha.0",
|
||||
"types": "types/types/index.d.ts",
|
||||
"files": [
|
||||
"types/**/*"
|
||||
|
||||
Vendored
+7
-2
@@ -1,5 +1,10 @@
|
||||
declare module 'rage-fw-shared-types' {
|
||||
export interface RageFW_ICustomServerEvent {}
|
||||
export interface RageFW_ICustomServerEvent {
|
||||
customServerEvent(customArgs: string): boolean
|
||||
customServerEvent2(...customArgs2: number[]): void
|
||||
}
|
||||
|
||||
export interface RageFW_ICustomClientEvent {}
|
||||
export interface RageFW_ICustomClientEvent {
|
||||
customClientEvent(clientArgs: string): boolean
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rage-fw-shared",
|
||||
"version": "0.0.12-alpha.0",
|
||||
"version": "0.0.14-alpha.0",
|
||||
"type": "module",
|
||||
"main": "index.d.ts",
|
||||
"files": [
|
||||
|
||||
Reference in New Issue
Block a user