Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bb9256eb8 | ||
|
|
23c1e6080a | ||
|
|
33ebdaac84 | ||
|
|
8972fee22e | ||
|
|
828d74dad9 | ||
|
|
e1450397ab | ||
|
|
3f48215eb1 | ||
|
|
5205a9e245 | ||
|
|
4695f5dbd1 | ||
|
|
fa4c218a7a | ||
|
|
454fc12d2e | ||
|
|
2da34bd382 |
@@ -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",
|
"name": "rage-fw-client",
|
||||||
"version": "0.0.13-alpha.0",
|
"version": "0.0.15-alpha.0",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
+12
-11
@@ -1,29 +1,30 @@
|
|||||||
import rpc from 'rage-rpc'
|
import rpc from 'rage-rpc'
|
||||||
import {
|
|
||||||
RageFW_ClientEventReturn,
|
import type {
|
||||||
|
RageFW_ClientEventCallback,
|
||||||
RageFW_ClientEvent,
|
RageFW_ClientEvent,
|
||||||
RageFW_ClientEventArguments,
|
|
||||||
RageFW_ClientServerCallback,
|
|
||||||
RageFW_ClientServerEvent,
|
RageFW_ClientServerEvent,
|
||||||
|
RageFW_ClientServerEventArguments,
|
||||||
|
RageFW_ClientServerEventReturn,
|
||||||
} from './types'
|
} from './types'
|
||||||
|
|
||||||
class Client {
|
class Client {
|
||||||
public register<EventName extends RageFW_ClientServerEvent>(
|
public register<EventName extends RageFW_ClientEvent>(
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
callback: RageFW_ClientServerCallback<EventName>,
|
callback: RageFW_ClientEventCallback<EventName>,
|
||||||
): void {
|
): void {
|
||||||
rpc.register(eventName, data => {
|
rpc.register(eventName, data => {
|
||||||
return callback(...data)
|
return callback(data)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Player {
|
class Player {
|
||||||
public triggerServer<EventName extends RageFW_ClientEvent>(
|
public triggerServer<EventName extends RageFW_ClientServerEvent>(
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
...args: RageFW_ClientEventArguments<EventName>
|
args: RageFW_ClientServerEventArguments<EventName>,
|
||||||
): Promise<RageFW_ClientEventReturn<EventName>> {
|
): Promise<RageFW_ClientServerEventReturn<EventName>> {
|
||||||
return rpc.callServer(eventName, ...args)
|
return rpc.callServer(eventName, args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
||||||
"version": "0.0.13-alpha.0",
|
"version": "0.0.15-alpha.0",
|
||||||
"npmClient": "pnpm"
|
"npmClient": "pnpm"
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-4
@@ -2,18 +2,25 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"publish": "pnpm build && lerna publish --force-publish",
|
"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": {
|
"dependencies": {
|
||||||
|
"@microsoft/api-extractor": "^7.47.0",
|
||||||
"@ragempcommunity/types-cef": "^2.1.8",
|
"@ragempcommunity/types-cef": "^2.1.8",
|
||||||
"@ragempcommunity/types-client": "^2.1.8",
|
"@ragempcommunity/types-client": "^2.1.8",
|
||||||
"@ragempcommunity/types-server": "^2.1.8",
|
"@ragempcommunity/types-server": "^2.1.8",
|
||||||
"@microsoft/api-extractor": "^7.47.0",
|
"@typescript-eslint/eslint-plugin": "^7.13.0",
|
||||||
"tsup": "^8.1.0",
|
"@typescript-eslint/parser": "^7.13.0",
|
||||||
|
"eslint": "^8.56.0",
|
||||||
"lerna": "^8.1.3",
|
"lerna": "^8.1.3",
|
||||||
"prettier": "^3.3.1",
|
"prettier": "^3.3.1",
|
||||||
"rage-rpc": "^0.4.0",
|
"rage-rpc": "^0.4.0",
|
||||||
|
"tsup": "^8.1.0",
|
||||||
"typescript": "^5.4.5"
|
"typescript": "^5.4.5"
|
||||||
},
|
},
|
||||||
"type": "module"
|
"type": "module",
|
||||||
|
"devDependencies": {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+776
-6
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "rage-fw-server",
|
"name": "rage-fw-server",
|
||||||
"version": "0.0.13-alpha.0",
|
"version": "0.0.15-alpha.0",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/src/index.d.ts",
|
"types": "dist/src/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
+57
-20
@@ -1,42 +1,79 @@
|
|||||||
import rpc from 'rage-rpc'
|
import rpc from 'rage-rpc'
|
||||||
import {
|
|
||||||
|
import type {
|
||||||
RageFW_ClientEvent,
|
RageFW_ClientEvent,
|
||||||
RageFW_ClientEventArguments,
|
RageFW_ClientEventArguments,
|
||||||
RageFW_ClientEventReturn,
|
RageFW_ClientEventReturn,
|
||||||
|
RageFW_ICustomServerEvent,
|
||||||
RageFW_ServerEvent,
|
RageFW_ServerEvent,
|
||||||
RageFW_ServerEventCallback,
|
RageFW_ServerEventCallback,
|
||||||
} from './types.js'
|
RageFW_ServerEventCallbackCustom,
|
||||||
|
RageFW_ServerEventCallbackNative,
|
||||||
|
} from './types'
|
||||||
import { nativeEvents } from './native.events'
|
import { nativeEvents } from './native.events'
|
||||||
|
|
||||||
class Server {
|
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>(
|
public register<EventName extends RageFW_ServerEvent>(
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
callback: RageFW_ServerEventCallback<EventName>,
|
callback: RageFW_ServerEventCallback<EventName>,
|
||||||
): void {
|
): void {
|
||||||
if (nativeEvents.includes(eventName)) {
|
if (this.isNativeEvent(eventName)) {
|
||||||
mp.events.add(eventName, callback)
|
this.registerNative(
|
||||||
|
eventName,
|
||||||
|
callback as RageFW_ServerEventCallbackNative,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
rpc.register(eventName, callback as rpc.ProcedureListener)
|
this.registerCustom(
|
||||||
|
eventName,
|
||||||
|
callback as unknown as RageFW_ServerEventCallbackCustom,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public registerMany<EventName extends RageFW_ServerEvent>(events: {
|
public registerMany<EventName extends RageFW_ServerEvent>(events: {
|
||||||
[event in EventName]: RageFW_ServerEventCallback<event>
|
[event in EventName]: RageFW_ServerEventCallback<event>
|
||||||
}): void {
|
}): void {
|
||||||
Object.entries(events).map(([eventName, callback]) => {
|
Object.entries<RageFW_ServerEventCallback<EventName>>(events).map(
|
||||||
if (nativeEvents.includes(eventName)) {
|
([eventName, callback]) => {
|
||||||
mp.events.add(
|
if (this.isNativeEvent(eventName)) {
|
||||||
eventName as keyof IServerEvents,
|
this.registerNative(
|
||||||
callback as (...arg: unknown[]) => void,
|
eventName,
|
||||||
)
|
callback as RageFW_ServerEventCallbackNative,
|
||||||
} else {
|
)
|
||||||
rpc.register(eventName, (args: unknown[]) => {
|
} else {
|
||||||
return Array.isArray(args)
|
this.registerCustom(
|
||||||
? (callback as (...arg: typeof args) => void)(...args)
|
eventName as keyof RageFW_ICustomServerEvent,
|
||||||
: (callback as (arg: typeof args) => void)(args)
|
callback as unknown as RageFW_ServerEventCallbackCustom,
|
||||||
})
|
)
|
||||||
}
|
}
|
||||||
})
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +81,7 @@ class Player {
|
|||||||
public triggerClient<EventName extends RageFW_ClientEvent>(
|
public triggerClient<EventName extends RageFW_ClientEvent>(
|
||||||
player: PlayerMp,
|
player: PlayerMp,
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
...args: RageFW_ClientEventArguments<EventName>
|
args: RageFW_ClientEventArguments<EventName>,
|
||||||
): Promise<RageFW_ClientEventReturn<EventName>> {
|
): Promise<RageFW_ClientEventReturn<EventName>> {
|
||||||
return rpc.callClient(player, eventName, args)
|
return rpc.callClient(player, eventName, args)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
/// <reference types="@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
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "rage-fw-shared-types",
|
"name": "rage-fw-shared-types",
|
||||||
"version": "0.0.13-alpha.0",
|
"version": "0.0.15-alpha.0",
|
||||||
"types": "types/types/index.d.ts",
|
"types": "types/types/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
"types/**/*"
|
"types/**/*"
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "rage-fw-shared",
|
"name": "rage-fw-shared",
|
||||||
"version": "0.0.13-alpha.0",
|
"version": "0.0.15-alpha.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "index.d.ts",
|
"main": "index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
Reference in New Issue
Block a user