mirror of
https://github.com/rilaxik/fivem-rpc.git
synced 2026-09-28 01:29:13 +00:00
chore(repo): migrate biome to oxfmt + oxlint
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"$schema": "./node_modules/oxfmt/configuration_schema.json",
|
||||
"useTabs": true,
|
||||
"tabWidth": 2,
|
||||
"printWidth": 80,
|
||||
"endOfLine": "crlf",
|
||||
"singleQuote": true,
|
||||
"semi": false,
|
||||
"trailingComma": "all",
|
||||
"arrowParens": "avoid",
|
||||
"bracketSpacing": true,
|
||||
"sortImports": true,
|
||||
"ignorePatterns": ["**/dist", "bun.lock"],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.md"],
|
||||
"options": { "embeddedLanguageFormatting": "off" }
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
||||
"plugins": ["eslint", "typescript", "unicorn", "oxc", "import"],
|
||||
"categories": {
|
||||
"correctness": "error",
|
||||
"suspicious": "warn"
|
||||
},
|
||||
"rules": {
|
||||
"typescript/no-explicit-any": "warn",
|
||||
"typescript/no-unsafe-function-type": "warn",
|
||||
"eslint/no-underscore-dangle": "off"
|
||||
},
|
||||
"ignorePatterns": ["**/dist"]
|
||||
}
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
{
|
||||
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
||||
"vcs": {
|
||||
"enabled": false,
|
||||
"clientKind": "git",
|
||||
"useIgnoreFile": false
|
||||
},
|
||||
"files": {
|
||||
"ignoreUnknown": false,
|
||||
"includes": ["**", "!dist/*"]
|
||||
},
|
||||
"formatter": {
|
||||
"enabled": true
|
||||
},
|
||||
"linter": {
|
||||
"enabled": true,
|
||||
"rules": {
|
||||
"recommended": true,
|
||||
"complexity": {
|
||||
"noBannedTypes": "info"
|
||||
},
|
||||
"suspicious": {
|
||||
"noExplicitAny": "info"
|
||||
}
|
||||
}
|
||||
},
|
||||
"javascript": {
|
||||
"formatter": {
|
||||
"arrowParentheses": "asNeeded",
|
||||
"bracketSpacing": true,
|
||||
"indentWidth": 2,
|
||||
"lineEnding": "crlf",
|
||||
"lineWidth": 80,
|
||||
"quoteStyle": "single",
|
||||
"semicolons": "asNeeded",
|
||||
"trailingCommas": "all"
|
||||
}
|
||||
},
|
||||
"assist": {
|
||||
"enabled": true,
|
||||
"actions": {
|
||||
"source": {
|
||||
"organizeImports": "on"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,8 +4,9 @@
|
||||
"workspaces": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.1.1",
|
||||
"@types/bun": "^1.2.18",
|
||||
"oxfmt": "^0.70.0",
|
||||
"oxlint": "^1.85.0",
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5",
|
||||
@@ -33,24 +34,6 @@
|
||||
},
|
||||
},
|
||||
"packages": {
|
||||
"@biomejs/biome": ["@biomejs/[email protected]", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.5.14", "@biomejs/cli-darwin-x64": "2.5.14", "@biomejs/cli-linux-arm64": "2.5.14", "@biomejs/cli-linux-arm64-musl": "2.5.14", "@biomejs/cli-linux-x64": "2.5.14", "@biomejs/cli-linux-x64-musl": "2.5.14", "@biomejs/cli-win32-arm64": "2.5.14", "@biomejs/cli-win32-x64": "2.5.14" }, "bin": { "biome": "bin/biome" } }, "sha512-0FabLIjd4M/dm8VFI86RMaLLdgepzbdfiAL2R8cr7V81OYYrP1w7Z73KfAwPK5h9SrEBXTzNG2y+mBwPo9xRnw=="],
|
||||
|
||||
"@biomejs/cli-darwin-arm64": ["@biomejs/[email protected]", "", { "os": "darwin", "cpu": "arm64" }, "sha512-UnzaXO65L4tsZimFITFP2M121GyhDcWFrT3pL5ZJ5U4XcS/0L5VHYytVohdCf/gnDUFHgl2I9xnt5bV/J1kxHQ=="],
|
||||
|
||||
"@biomejs/cli-darwin-x64": ["@biomejs/[email protected]", "", { "os": "darwin", "cpu": "x64" }, "sha512-kiy8qA16K93J7uvFfWi4LgjqDpnRKyePAna6A0Y4jxyUga35SYpIZ2cNWlhy0lsfgqRenCpfymnJWEZ6mgpRgA=="],
|
||||
|
||||
"@biomejs/cli-linux-arm64": ["@biomejs/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-vO/9BaU1n30CiFNLx49gMTMtbCAAqlo/EqFoG0BU3deQInTbJrmXSmTQ9e3FoDZIKQnvSLDVNL4lx1ci7y1T1Q=="],
|
||||
|
||||
"@biomejs/cli-linux-arm64-musl": ["@biomejs/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-SJ9PrZkBnnH9dHJDnxk34vKs0GB2dbsioaft6/hPhWJ7AHpwYH83Isnhj0FSRpFkGgpVfJ1lds23ApB2czUDLQ=="],
|
||||
|
||||
"@biomejs/cli-linux-x64": ["@biomejs/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-VHZRa7CCQBUWKxNwUvHJeuW03WFRgN5NWO//SDGOitc9QIeNyfA42V9zlKm+x82xFSG9Bzi5fi+hbhm9anO8yA=="],
|
||||
|
||||
"@biomejs/cli-linux-x64-musl": ["@biomejs/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-2kI5PrMgW5dcEZYrstLPmUmCwkUwZY39rP4BN93Vxbwcs2O57LDQOktUZZYPvvspN5i0mhGr3TJtF5sU26NUWg=="],
|
||||
|
||||
"@biomejs/cli-win32-arm64": ["@biomejs/[email protected]", "", { "os": "win32", "cpu": "arm64" }, "sha512-pHgAFffmZtaYoxavEsWEYNvcA7NwOIjLyqw2HXyLbt16xYryX0L4fMV2u0G9ag6LNYPIoqWaWqzUcnc6rLGGXg=="],
|
||||
|
||||
"@biomejs/cli-win32-x64": ["@biomejs/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-oJWmBhoHsnhUKIke+0gXDX0mltJrWHA1UyHsrTlXwX0TL64ilVZAo+TYZm97baecV0esBdpzy3k96q+09JaZUQ=="],
|
||||
|
||||
"@citizenfx/client": ["@citizenfx/[email protected]", "", {}, "sha512-gm0/fWM0/Wn5Hny+cnSRsBc73Opz1PPKS4LKCraIE477tQ0uGNVACoeTQqxRJz54Lu09KeA4cCfocVmefVAqUA=="],
|
||||
|
||||
"@citizenfx/server": ["@citizenfx/[email protected]", "", {}, "sha512-I6XnxIGBhskPe9S+q1OQLDqs6TYw1RhX06K6jUg+n0hGITYools6VBIIhdPe2uUlHA+76qJajQlV9ONeR3mDig=="],
|
||||
@@ -129,6 +112,82 @@
|
||||
|
||||
"@napi-rs/lzma-linux-x64-gnu": ["@napi-rs/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ=="],
|
||||
|
||||
"@oxfmt/binding-android-arm-eabi": ["@oxfmt/[email protected]", "", { "os": "android", "cpu": "arm" }, "sha512-Xd7YO4/T2axEj6FTLcj4Why3mTBqFMg+x24xtorT4Lb2+1g82090GH0a/4U1m0pABGYiix2bq1pqkYrmV3f0Sw=="],
|
||||
|
||||
"@oxfmt/binding-android-arm64": ["@oxfmt/[email protected]", "", { "os": "android", "cpu": "arm64" }, "sha512-x9rlMYyKXdgKdYyUJzGsK1ZV8P4di/J32ipzcS6Jet6p9r9UAh28neXIMtdlSaJJycdi61Z4YkcLKLpk8ueFjg=="],
|
||||
|
||||
"@oxfmt/binding-darwin-arm64": ["@oxfmt/[email protected]", "", { "os": "darwin", "cpu": "arm64" }, "sha512-IUTUPvrBVYy7POh4stXzRdz4IVC/1QSaviCWoyenSlOhGu0X9j5K07vCTM9biLjAA2Zs31l0Rj5vvRpj9n95wA=="],
|
||||
|
||||
"@oxfmt/binding-darwin-x64": ["@oxfmt/[email protected]", "", { "os": "darwin", "cpu": "x64" }, "sha512-vw745q870oTd6J517O24asoX4/E+eK0nxYIFoedSLqgJ+nI5En7+ZS82iZSHZ69zevQrnOXiyHP01dA+t8xD8w=="],
|
||||
|
||||
"@oxfmt/binding-freebsd-x64": ["@oxfmt/[email protected]", "", { "os": "freebsd", "cpu": "x64" }, "sha512-NO14EgSM9dFkcg+MfGPxvsKqXYs9LKaxPrOKXpv1R0rLokGGFDcCq6dBMq18dE4wlpFOovX0UZY2uh1P30O7QA=="],
|
||||
|
||||
"@oxfmt/binding-linux-arm-gnueabihf": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "arm" }, "sha512-139OEhHarj9CYoJ/i9gXlPv4KLBGtLj2toseOWYFf09QwlhklaZk+wW3aOvlqoeZtuayvkoSNVWra7WJ21s3VQ=="],
|
||||
|
||||
"@oxfmt/binding-linux-arm-musleabihf": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "arm" }, "sha512-GEh2PY3IWTE0M24eNhTduountANSbWyDmMnzFSQE/nGg/bjPugbUgiGuFu+xdqcQSd/HKSwH80/F2yVVD48yhA=="],
|
||||
|
||||
"@oxfmt/binding-linux-arm64-gnu": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-En5i+UJmZSPxuSf47F2Hl5YOzKB0bicQLnGQkeTCMQ35cWLtbrSwACJKfiLqRZrk05DwSnsJkhBRaM3OURtIaA=="],
|
||||
|
||||
"@oxfmt/binding-linux-arm64-musl": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-WWOoV5W9Im3flVwOVrWn/2DUlOF8v5vcCip+kcNuaMpulRCh6nzzt1Su2vcL2F908YJIXNV3HvegbBHuyLwKHg=="],
|
||||
|
||||
"@oxfmt/binding-linux-ppc64-gnu": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "ppc64" }, "sha512-YUouneIqW+5n7aE8xx/zeZ6/utr/KH7oykcGoFyd8Uz8uh591T1oKlnoWA3BsRq/ZR42oY1w4MUYvS/0e/MQOA=="],
|
||||
|
||||
"@oxfmt/binding-linux-riscv64-gnu": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-iEnMf21S5aGVa4hViDGY8sAQ/AHyCu2JPyrQF8P06wtHhSkD1YJBeT4m/KiGewgf7+a5XCYSCRIPcRQa1xwEoQ=="],
|
||||
|
||||
"@oxfmt/binding-linux-riscv64-musl": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-91Sdniaj20fQzyMeCxMDzTP4c9s4RB8dGQ308xHhDR0n6U7+1Xq7N9klE7mfXq8iV3lRmIGSXi5X23Hn/0XX/g=="],
|
||||
|
||||
"@oxfmt/binding-linux-s390x-gnu": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "s390x" }, "sha512-uUV30M6E+2TKKGMaKiwfeL4RZrviHXlUxsrYJ/jFBb+1EZy+pnFT+hF73eeWdzh5NqPOAnw0iiMAIqjqiLZPFg=="],
|
||||
|
||||
"@oxfmt/binding-linux-x64-gnu": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-ivMcX6kNDPhqtbOaBt/ItFlLlTlXNHLgRuNmxP6Na6UuYXRT10llpJcAPbGeRgjjb3Qzv4jwPp3fB0hui50WNQ=="],
|
||||
|
||||
"@oxfmt/binding-linux-x64-musl": ["@oxfmt/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-w+S+fERxYmlZSyZlJK/U292FjyBoH8cCEj21/tYJX6atX5kNSn+HDkhlFQKT2zcMwUW0uAtUL/bOrlwJZwqRdA=="],
|
||||
|
||||
"@oxfmt/binding-openharmony-arm64": ["@oxfmt/[email protected]", "", { "os": "none", "cpu": "arm64" }, "sha512-Zlom1Xkx257R8bk4ZI4zJsrGno2opknz1+5v5baka3nn4FPyvNSdh8JUL4CdN1S1OWRMvJ9UJQ+RfIqGGCUEfA=="],
|
||||
|
||||
"@oxfmt/binding-win32-arm64-msvc": ["@oxfmt/[email protected]", "", { "os": "win32", "cpu": "arm64" }, "sha512-FQgPW5R17vzt7cgrJ8eG/dqX00o2xHsqFeLfw4xzA9FRHpN/DjFo9YDonvIIXGxiEuS9F/jZPnGO+KHNKuCo4Q=="],
|
||||
|
||||
"@oxfmt/binding-win32-ia32-msvc": ["@oxfmt/[email protected]", "", { "os": "win32", "cpu": "ia32" }, "sha512-ZfZublNhZ+XBndMiXhkiLlPE+XyGRDa0CweeTL6t1fZypfCh1LTg7e5CvnOeTBunq15MskOcRempumSPGAaCQA=="],
|
||||
|
||||
"@oxfmt/binding-win32-x64-msvc": ["@oxfmt/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-HlIZEn+WzLQL0DszNzldiRl/DPRCX5R0Vkt6qeUPR1YHwy52hZZo4x6HoTOVmKRP2wUiwPGtKsihNY/f8KRaBg=="],
|
||||
|
||||
"@oxlint/binding-android-arm-eabi": ["@oxlint/[email protected]", "", { "os": "android", "cpu": "arm" }, "sha512-q2KO/Zso9UT+OMn0NF9ywn4E4t0MI3yxiDhNyhsQ7DyQJrC4FhFE4TXOi4bktFnOWXTMds8qZSbpv2XwRaNOBg=="],
|
||||
|
||||
"@oxlint/binding-android-arm64": ["@oxlint/[email protected]", "", { "os": "android", "cpu": "arm64" }, "sha512-SxLN3ALjoT9NNdvpjEevGeHvfzTAFrF0NBYB5tzK7/GtCKMze3j1e/m/X2ozqGj2U9hfGG/dg/OG8vpVK4PiDA=="],
|
||||
|
||||
"@oxlint/binding-darwin-arm64": ["@oxlint/[email protected]", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y/Sup/J4f0f9UGsSd/xyCNTeWL+gepO63GBdEDAfue9nBsnk9zMmnIXx1O6b1V8C90vB5nucYNZ0pbMXAp8zJA=="],
|
||||
|
||||
"@oxlint/binding-darwin-x64": ["@oxlint/[email protected]", "", { "os": "darwin", "cpu": "x64" }, "sha512-ApOSNC04ynpDTwvBD+//0wyfODRSbEzvRoKpX8teffmc27z8AockwSNeMXGJXn5KP85eahDgR/2llICWLkzcnw=="],
|
||||
|
||||
"@oxlint/binding-freebsd-x64": ["@oxlint/[email protected]", "", { "os": "freebsd", "cpu": "x64" }, "sha512-bNrVrCOA/kHky3Tu79IXWXe5bhIgLXfUuUEDHlAGOHUk96MkvDZ1ecaQF19rwstrnaqfP1o9nBTqzIr9+ZHkUg=="],
|
||||
|
||||
"@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "arm" }, "sha512-NUrzOJ1s/EqsVvfn2L/1D8Wro2LPIZUbihL8kOJLh5fEdGEN3rdOGUYq3HwnUIL8sjpoP+4N6RaGrgmMJnaMPw=="],
|
||||
|
||||
"@oxlint/binding-linux-arm-musleabihf": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "arm" }, "sha512-UJXrAT3E/RWkEqXLIs2ehETja1qfgkPb+5gwLIIS+o/6cf+grHvoOXTa5997a/YNQfcJS0DRBTOfZt95cvOI1g=="],
|
||||
|
||||
"@oxlint/binding-linux-arm64-gnu": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-lK40QLjI0HxigO7CjDDshEtfYIeiYS0020v5BHFPqN4uuQBQxd2K9LNom2dW15o9F1937quSCRVp4ZsVhdbYdg=="],
|
||||
|
||||
"@oxlint/binding-linux-arm64-musl": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "arm64" }, "sha512-c2zbdBwGKreHXwRx3gWBuFGJxLhxgsg6YlZ+3H+RgRusU/UEV9jNwJ3HGYK+nRo0LvBa7mt6Kj86xoVotUo8cw=="],
|
||||
|
||||
"@oxlint/binding-linux-ppc64-gnu": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tlt/Hy8lZ97/lCPmCgw/B3k/mwh+BzaIPbPkldZEly7TwLmx0xe2CQcaW2g/rR0dOgS9JNGCZsMEqLhUNMGvaw=="],
|
||||
|
||||
"@oxlint/binding-linux-riscv64-gnu": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-3tNR9Xey82X0zKuY1d8hJ6Rc9gwRDurmqGLnQZa5xqOXy8/YyiqFXjAtugkKLY82obOlpK1eSiDRlgcNPuxtIg=="],
|
||||
|
||||
"@oxlint/binding-linux-riscv64-musl": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "none" }, "sha512-wbGRd5PqCcjkJFHhZuZ2OBSUQY9czlQsoA/cQQB9JK/L9mC5MQgGoKAh+xd8QjA5V+0D3j+Qd1lAWn1I8zlelA=="],
|
||||
|
||||
"@oxlint/binding-linux-s390x-gnu": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "s390x" }, "sha512-3Sn0kSrE4DPZCWV/8o+n4x3aFZxI9ulMnkYlwCbJ8eUVkwRK2IerohE/A/z3SNbCwoPFOCJmGE5Avrq0rrvdvQ=="],
|
||||
|
||||
"@oxlint/binding-linux-x64-gnu": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-JY2pxxYfB62bAGfejljVCqc44etItehPuAyaeSAdMuEMtwNA00ggMnS66lC1oIhos6oOXUkuU6mZ9bpFh3BqWg=="],
|
||||
|
||||
"@oxlint/binding-linux-x64-musl": ["@oxlint/[email protected]", "", { "os": "linux", "cpu": "x64" }, "sha512-5k74vZ6qJBjBHEOlBk9B/iv68Yu0F1Afw/vvT2ar6OGCqEeXLaSjXz2n/IPCbhLG22UoKoYEJTzpYraRdcp6PA=="],
|
||||
|
||||
"@oxlint/binding-openharmony-arm64": ["@oxlint/[email protected]", "", { "os": "none", "cpu": "arm64" }, "sha512-GbAl5qt5TCkPLXTaIISZJnugrcBhra6rodcXc9jYt620UtdsTt71NlNmJmm0frxzFpd54x/G+MkitEJA8I/BoA=="],
|
||||
|
||||
"@oxlint/binding-win32-arm64-msvc": ["@oxlint/[email protected]", "", { "os": "win32", "cpu": "arm64" }, "sha512-kjmws5MK0et2swk4ND85D7NVQyDHw162i6whtZDLUA/lo6FQyBZDcmMRCMcVZcNrAhIaftVb00x9ChGDOjjNJA=="],
|
||||
|
||||
"@oxlint/binding-win32-ia32-msvc": ["@oxlint/[email protected]", "", { "os": "win32", "cpu": "ia32" }, "sha512-eSsIJx9n4yxvOqYTZyPEMyEXRmE60XH7xGAU7i0Qbsn1lf6Za3CWJ9aRd82oSFKXaxhp+sA6/yMJVRIpLpna6A=="],
|
||||
|
||||
"@oxlint/binding-win32-x64-msvc": ["@oxlint/[email protected]", "", { "os": "win32", "cpu": "x64" }, "sha512-pBebIPUpKKhWrhSMWhy8TdAZBewiXnfxmaAGxhzxM1068GagqFaTwgKlU6e+UyJ2sPR+VoHouhXuGJkQjsrDvA=="],
|
||||
|
||||
"@rollup/rollup-android-arm-eabi": ["@rollup/[email protected]", "", { "os": "android", "cpu": "arm" }, "sha512-J25QJU+B78T4FhhBsNpLJyVWOi31mwtpcMwywHmOKH65Q9IWGA81gPj+dnwlhU8wktVriYE+tFAaQgrnJRzAZg=="],
|
||||
|
||||
"@rollup/rollup-android-arm64": ["@rollup/[email protected]", "", { "os": "android", "cpu": "arm64" }, "sha512-LDopB3zuZM5Ux9TT2luNEBJW/tYbGU2g1d+VpKk6I+gSKDb+/7sYE6M225gRQt4RbMX6MSwMsVR/phdjVUgRLg=="],
|
||||
@@ -285,6 +344,10 @@
|
||||
|
||||
"object-assign": ["[email protected]", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
|
||||
|
||||
"oxfmt": ["[email protected]", "", { "dependencies": { "tinypool": "2.1.2" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.70.0", "@oxfmt/binding-android-arm64": "0.70.0", "@oxfmt/binding-darwin-arm64": "0.70.0", "@oxfmt/binding-darwin-x64": "0.70.0", "@oxfmt/binding-freebsd-x64": "0.70.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.70.0", "@oxfmt/binding-linux-arm-musleabihf": "0.70.0", "@oxfmt/binding-linux-arm64-gnu": "0.70.0", "@oxfmt/binding-linux-arm64-musl": "0.70.0", "@oxfmt/binding-linux-ppc64-gnu": "0.70.0", "@oxfmt/binding-linux-riscv64-gnu": "0.70.0", "@oxfmt/binding-linux-riscv64-musl": "0.70.0", "@oxfmt/binding-linux-s390x-gnu": "0.70.0", "@oxfmt/binding-linux-x64-gnu": "0.70.0", "@oxfmt/binding-linux-x64-musl": "0.70.0", "@oxfmt/binding-openharmony-arm64": "0.70.0", "@oxfmt/binding-win32-arm64-msvc": "0.70.0", "@oxfmt/binding-win32-ia32-msvc": "0.70.0", "@oxfmt/binding-win32-x64-msvc": "0.70.0" }, "peerDependencies": { "svelte": "^5.0.0", "vite-plus": "*" }, "optionalPeers": ["svelte", "vite-plus"], "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-IsHxZ4y0wQLLMhnrJblBJgZsLDzfULrJnAw5j/QqsTlMa/m3AqsbToi+W71uhBGaqlqq/PbbjvHc09TJwdv3Tw=="],
|
||||
|
||||
"oxlint": ["[email protected]", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.85.0", "@oxlint/binding-android-arm64": "1.85.0", "@oxlint/binding-darwin-arm64": "1.85.0", "@oxlint/binding-darwin-x64": "1.85.0", "@oxlint/binding-freebsd-x64": "1.85.0", "@oxlint/binding-linux-arm-gnueabihf": "1.85.0", "@oxlint/binding-linux-arm-musleabihf": "1.85.0", "@oxlint/binding-linux-arm64-gnu": "1.85.0", "@oxlint/binding-linux-arm64-musl": "1.85.0", "@oxlint/binding-linux-ppc64-gnu": "1.85.0", "@oxlint/binding-linux-riscv64-gnu": "1.85.0", "@oxlint/binding-linux-riscv64-musl": "1.85.0", "@oxlint/binding-linux-s390x-gnu": "1.85.0", "@oxlint/binding-linux-x64-gnu": "1.85.0", "@oxlint/binding-linux-x64-musl": "1.85.0", "@oxlint/binding-openharmony-arm64": "1.85.0", "@oxlint/binding-win32-arm64-msvc": "1.85.0", "@oxlint/binding-win32-ia32-msvc": "1.85.0", "@oxlint/binding-win32-x64-msvc": "1.85.0" }, "peerDependencies": { "oxlint-tsgolint": ">=7.0.2001", "vite-plus": "*" }, "optionalPeers": ["oxlint-tsgolint", "vite-plus"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-bc26s97nuvPj1ViyPsqmKecVkUWFMEdtayO8MaQ6oiLfs1pj94cQlZZhrh4BPNlr9HQosjhIlwgZKsfcwmcNgg=="],
|
||||
|
||||
"path-parse": ["[email protected]", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
|
||||
|
||||
"pathe": ["[email protected]", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
||||
@@ -331,6 +394,8 @@
|
||||
|
||||
"tinyglobby": ["[email protected]", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="],
|
||||
|
||||
"tinypool": ["[email protected]", "", {}, "sha512-9YodfrxS9g9IbFr/KOjE5bAeJ0p61n3bW6mqvy0jtoeKd1kTW1Cxm0oulm6KX2lyM9Gl6WIe8nEbY7LWv5ZJww=="],
|
||||
|
||||
"tree-kill": ["[email protected]", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="],
|
||||
|
||||
"ts-interface-checker": ["[email protected]", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="],
|
||||
|
||||
+19
-16
@@ -1,21 +1,5 @@
|
||||
{
|
||||
"workspaces": [
|
||||
"rpc",
|
||||
"shared-types"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.1.1",
|
||||
"@types/bun": "^1.2.18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5"
|
||||
},
|
||||
"scripts": {
|
||||
"check": "bunx biome check",
|
||||
"format": "bunx biome format --write"
|
||||
},
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"license": "CC0-1.0",
|
||||
"author": "Entity Seven Group",
|
||||
"contributors": [
|
||||
@@ -33,5 +17,24 @@
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rilaxik/fivem-rpc.git"
|
||||
},
|
||||
"workspaces": [
|
||||
"rpc",
|
||||
"shared-types"
|
||||
],
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"check": "oxfmt --check && oxlint",
|
||||
"format": "oxfmt",
|
||||
"format:check": "oxfmt --check",
|
||||
"lint": "oxlint"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/bun": "^1.2.18",
|
||||
"oxfmt": "^0.70.0",
|
||||
"oxlint": "^1.85.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,41 +1,54 @@
|
||||
# FiveM RPC
|
||||
|
||||
is an all-in-one package with asynchronous RPC implementation for FiveM servers in JS/TS
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pnpm i @entityseven/fivem-rpc
|
||||
```
|
||||
|
||||
```bash
|
||||
yarn add @entityseven/fivem-rpc
|
||||
```
|
||||
|
||||
```bash
|
||||
bun add @entityseven/fivem-rpc
|
||||
```
|
||||
|
||||
It is highly recommended to also install additional package for enhanced typing
|
||||
|
||||
```bash
|
||||
pnpm i @entityseven/fivem-rpc-shared-types -D
|
||||
```
|
||||
|
||||
```bash
|
||||
yarn add @entityseven/fivem-rpc-shared-types --dev
|
||||
```
|
||||
|
||||
```bash
|
||||
bun add @entityseven/fivem-rpc-shared-types -d
|
||||
```
|
||||
|
||||
## Docs
|
||||
|
||||
Can be found in [/rpc/readme.md](https://github.com/rilaxik/fivem-rpc/blob/master/rpc/readme.md)
|
||||
|
||||
## Features
|
||||
|
||||
- Type-Safe Development: Eliminate runtime errors and enhance code reliability with comprehensive type safety
|
||||
- All-in-one package: Communicate effortlessly between server, client and webview
|
||||
|
||||
## Contributing
|
||||
|
||||
Issues and pull requests are very welcome
|
||||
|
||||
## License
|
||||
|
||||
Licensed under Custom Attribution-NoDerivs Software License
|
||||
|
||||
## WIP
|
||||
|
||||
- client observers to catch events between server and webview (subscribe-like behaviour)
|
||||
- client observers to prevent events (middleware-like behaviour)
|
||||
- player manager (transform player id to desired data straight from a listener)
|
||||
+11
-11
@@ -1,20 +1,14 @@
|
||||
{
|
||||
"name": "@entityseven/fivem-rpc",
|
||||
"description": "FiveM RPC is an all-in-one package with asynchronous RPC implementation for FiveM servers in JS/TS",
|
||||
"version": "0.1.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"readme.md",
|
||||
"license.md"
|
||||
],
|
||||
"description": "FiveM RPC is an all-in-one package with asynchronous RPC implementation for FiveM servers in JS/TS",
|
||||
"keywords": [
|
||||
"fivem",
|
||||
"fivem-rpc",
|
||||
"fivem-rpc-shared-types",
|
||||
"fivem",
|
||||
"gta"
|
||||
],
|
||||
"license": "Custom-Attribution-NoDerivs",
|
||||
"author": "Entity Seven Group",
|
||||
"contributors": [
|
||||
{
|
||||
@@ -23,18 +17,24 @@
|
||||
"url": "https://github.com/rilaxik/"
|
||||
}
|
||||
],
|
||||
"license": "Custom-Attribution-NoDerivs",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rilaxik/fivem-rpc.git"
|
||||
},
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"readme.md",
|
||||
"license.md"
|
||||
],
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "tsup"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@microsoft/api-extractor": "^7.47.9",
|
||||
"@citizenfx/client": "^2.0.15015-1",
|
||||
"@citizenfx/server": "^2.0.14862-1",
|
||||
"@microsoft/api-extractor": "^7.47.9",
|
||||
"tsup": "^8.3.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
||||
+121
-1
@@ -1,32 +1,43 @@
|
||||
# FiveM RPC
|
||||
|
||||
is an all-in package with asynchronous RPC implementation for RageMP servers in JS/TS. [Extra info](https://github.com/rilaxik/fivem-rpc/blob/master/readme.md)
|
||||
|
||||
# Motivation
|
||||
|
||||
The idea was to create an extensible package, with various features to simplify the development process and provide as much comfort as possible. Inspired by usage of [altv-xrpc](https://github.com/xxshady/altv-xrpc)
|
||||
|
||||
# Installation
|
||||
|
||||
```bash
|
||||
pnpm i @entityseven/fivem-rpc
|
||||
```
|
||||
|
||||
```bash
|
||||
yarn add @entityseven/fivem-rpc
|
||||
```
|
||||
|
||||
```bash
|
||||
bun add @entityseven/fivem-rpc
|
||||
```
|
||||
|
||||
It is highly recommended to also install additional package for enhanced typing
|
||||
|
||||
```bash
|
||||
pnpm i @entityseven/fivem-rpc-shared-types -D
|
||||
```
|
||||
|
||||
```bash
|
||||
yarn add @entityseven/fivem-rpc-shared-types --dev
|
||||
```
|
||||
|
||||
```bash
|
||||
bun add @entityseven/fivem-rpc-shared-types -d
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
FiveM RPC is meant to be a singletone per environment. This means you _must create only one_ `RPCFactory` per your server/client/web. This also enables modifying `const rpc` to your needs, adding new methods or variables by forcing you to import it from file instead of library reference
|
||||
|
||||
```ts
|
||||
// lib/rpc.ts
|
||||
import { RPCFactory } from '@entityseven/fivem-rpc'
|
||||
@@ -36,21 +47,25 @@ export const rpc = new RPCFactory(/* options */).get()
|
||||
# Docs
|
||||
|
||||
## Extras
|
||||
|
||||
Along with `RPCFactory` you can also import all the types used internally, types for native client/server events and lists of native client/server events. All of that is documented in JSDoc, so no need to duplicate it here
|
||||
|
||||
## RPCConfig
|
||||
|
||||
```ts
|
||||
type RPCConfig<T extends RPCEnvironment | unknown> = {
|
||||
env: T
|
||||
debug?: boolean
|
||||
}
|
||||
```
|
||||
|
||||
Failing to set `env` to provided type will result in `RPCErrors.UNKNOWN_ENVIRONMENT`
|
||||
`debug` adds additional console logs to events
|
||||
|
||||
|
||||
## Errors
|
||||
|
||||
Known errors could be one of following or an error throw by a callback specifically
|
||||
|
||||
```ts
|
||||
enum RPCErrors {
|
||||
EVENT_NOT_REGISTERED = 'Event not registered',
|
||||
@@ -62,7 +77,9 @@ enum RPCErrors {
|
||||
```
|
||||
|
||||
### Example error
|
||||
|
||||
Values wrapped in `<>` always exist, just not relevant for an example. Keep in mind that some errors are thrown in their destination(`To`) point: this example will throw on server
|
||||
|
||||
```
|
||||
Error: No player (failed to resolve from local index)
|
||||
Event: 'clientServerEvent'
|
||||
@@ -75,77 +92,113 @@ Data: [<data>]
|
||||
```
|
||||
|
||||
## Server ([source](https://github.com/rilaxik/fivem-rpc/blob/master/rpc/src/core/server.ts))
|
||||
|
||||
### onClient
|
||||
|
||||
Listens to client event
|
||||
|
||||
```ts
|
||||
rpc.onClient('clientServerEvent', (player, arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offClient
|
||||
|
||||
Stops listening to client event
|
||||
|
||||
```ts
|
||||
rpc.offClient('clientServerEvent')
|
||||
```
|
||||
|
||||
### emitClient
|
||||
|
||||
Sends event to specified client
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitClient(playerServerId, 'serverClientEvent', someData)
|
||||
// response will come from client listener with returned data
|
||||
```
|
||||
|
||||
### emitClientEveryone
|
||||
|
||||
Sends event to all clients
|
||||
|
||||
```ts
|
||||
rpc.emitClientEveryone('serverClientEvent', someData)
|
||||
```
|
||||
|
||||
### onWebview
|
||||
|
||||
Listens to webview event
|
||||
|
||||
```ts
|
||||
rpc.onWebview('webviewServerEvent', (player, arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offWebview
|
||||
|
||||
Stops listening to webview event
|
||||
|
||||
```ts
|
||||
rpc.offWebview('webviewServerEvent')
|
||||
```
|
||||
|
||||
### emitWebview
|
||||
|
||||
Sends event to specified webview
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitWebview(playerServerId, 'serverWebviewEvent', someData)
|
||||
// response will come from webview listener with returned data
|
||||
```
|
||||
|
||||
### onSelf
|
||||
|
||||
Listens to server event
|
||||
|
||||
```ts
|
||||
rpc.onSelf('serverEvent', (arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offSelf
|
||||
|
||||
Stops listening to server event
|
||||
|
||||
```ts
|
||||
rpc.offSelf('serverEvent')
|
||||
```
|
||||
|
||||
### emitSelf
|
||||
|
||||
Sends event to server
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitSelf('serverEvent', someData)
|
||||
// response will come from server listener with returned data
|
||||
```
|
||||
|
||||
### onCommand
|
||||
|
||||
Registers chat command. Since arguments are untyped you must validate them yourself
|
||||
|
||||
```ts
|
||||
rpc.onCommand('serverCommand', (player, args, commandRaw) => {
|
||||
// logic
|
||||
})
|
||||
```
|
||||
|
||||
### onNativeEvent
|
||||
|
||||
Listens to native server event ([reference](https://docs.fivem.net/docs/scripting-reference/events/server-events/))
|
||||
|
||||
```ts
|
||||
rpc.onNativeEvent('playerJoining', (source, oldId) => {
|
||||
// logic
|
||||
@@ -153,148 +206,215 @@ rpc.onNativeEvent('playerJoining', (source, oldId) => {
|
||||
```
|
||||
|
||||
## Client ([source](https://github.com/rilaxik/fivem-rpc/blob/master/rpc/src/core/client.ts))
|
||||
|
||||
### onServer
|
||||
|
||||
Listens to server event
|
||||
|
||||
```ts
|
||||
rpc.onServer('serverClientEvent', (arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offServer
|
||||
|
||||
Stops listening to server event
|
||||
|
||||
```ts
|
||||
rpc.offServer('serverClientEvent')
|
||||
```
|
||||
|
||||
### emitServer
|
||||
|
||||
Sends event to server
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitServer('clientServerEvent', someData)
|
||||
// response will come from webview listener with returned data
|
||||
```
|
||||
|
||||
### onWebview
|
||||
|
||||
Listens to webview event
|
||||
|
||||
```ts
|
||||
rpc.onWebview('webviewClientEvent', (arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offWebview
|
||||
|
||||
Stops listening to webview event
|
||||
|
||||
```ts
|
||||
rpc.offWebview('webviewClientEvent')
|
||||
```
|
||||
|
||||
### emitWebview
|
||||
|
||||
Sends event to specified webview
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitWebview('clientWebviewEvent', someData)
|
||||
// response will come from webview listener with returned data
|
||||
```
|
||||
|
||||
### onSelf
|
||||
|
||||
Listens to client event
|
||||
|
||||
```ts
|
||||
rpc.onSelf('clientEvent', (arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offSelf
|
||||
|
||||
Stops listening to client event
|
||||
|
||||
```ts
|
||||
rpc.offSelf('clientEvent')
|
||||
```
|
||||
|
||||
### emitSelf
|
||||
|
||||
Sends event to client
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitSelf('clientEvent', someData)
|
||||
// response will come from client listener with returned data
|
||||
```
|
||||
|
||||
### onCommand
|
||||
|
||||
Registers chat command. Since arguments are untyped you must validate them yourself
|
||||
|
||||
```ts
|
||||
rpc.onCommand('clientCommand', (player, args, commandRaw) => {
|
||||
// logic
|
||||
})
|
||||
```
|
||||
|
||||
### onNativeEvent
|
||||
|
||||
Listens to native client event ([reference](https://docs.fivem.net/docs/scripting-reference/events/client-events/))
|
||||
|
||||
```ts
|
||||
rpc.onNativeEvent('entityDamaged', (victim, culprit, weapon, baseDamage) => {
|
||||
// logic
|
||||
})
|
||||
```
|
||||
|
||||
### onNativeNetworkEvent
|
||||
|
||||
Listens to native client network event ([reference](https://docs.fivem.net/docs/game-references/game-events/))
|
||||
|
||||
```ts
|
||||
rpc.onNativeNetworkEvent('CEventShockingCarCrash', (entities, eventEntity, data) => {
|
||||
// logic
|
||||
})
|
||||
```
|
||||
|
||||
### setWebviewFocus
|
||||
|
||||
Sets or removes focus and cursor from own webview
|
||||
|
||||
```ts
|
||||
rpc.setWebviewFocus(true /* focus */, true /* show cursor */)
|
||||
```
|
||||
|
||||
## Webview ([source](https://github.com/rilaxik/fivem-rpc/blob/master/rpc/src/core/webview.ts))
|
||||
|
||||
### onClient
|
||||
|
||||
Listens to client event
|
||||
|
||||
```ts
|
||||
rpc.onClient('clientWebviewEvent', (arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offClient
|
||||
|
||||
Stops listening to client event
|
||||
|
||||
```ts
|
||||
rpc.offClient('clientWebviewEvent')
|
||||
```
|
||||
|
||||
### emitClient
|
||||
|
||||
Sends event to own client
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitClient('webviewClientEvent', someData)
|
||||
// response will come from client listener with returned data
|
||||
```
|
||||
|
||||
### onServer
|
||||
|
||||
Listens to server event
|
||||
|
||||
```ts
|
||||
rpc.onServer('serverWebviewEvent', (arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offServer
|
||||
|
||||
Stops listening to server event
|
||||
|
||||
```ts
|
||||
rpc.offServer('serverWebviewEvent')
|
||||
```
|
||||
|
||||
### emitServer
|
||||
|
||||
Sends event to server
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitServer('webviewServerEvent', someData)
|
||||
// response will come from webview listener with returned data
|
||||
```
|
||||
|
||||
### onSelf
|
||||
|
||||
Listens to webview event
|
||||
|
||||
```ts
|
||||
rpc.onSelf('webviewEvent', (arg1, arg2, ...rest) => {
|
||||
// logic
|
||||
return someData // this will be forwarded back to caller
|
||||
})
|
||||
```
|
||||
|
||||
### offSelf
|
||||
|
||||
Stops listening to webview event
|
||||
|
||||
```ts
|
||||
rpc.offSelf('webviewEvent')
|
||||
```
|
||||
|
||||
### emitSelf
|
||||
|
||||
Sends event to webview
|
||||
|
||||
```ts
|
||||
const response = await rpc.emitSelf('webviewEvent', someData)
|
||||
// response will come from webview listener with returned data
|
||||
```
|
||||
|
||||
# License
|
||||
|
||||
Licensed under Custom Attribution-NoDerivs Software License
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type * as s from '@entityseven/fivem-rpc-shared-types'
|
||||
|
||||
import { Emitter } from '../utils/emitter'
|
||||
import { generateUUID, parse, stringify, stringifyWeb } from '../utils/funcs'
|
||||
import {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type * as s from '@entityseven/fivem-rpc-shared-types'
|
||||
|
||||
import { Emitter } from '../utils/emitter'
|
||||
import { generateUUID, parse, stringify } from '../utils/funcs'
|
||||
import { NATIVE_SERVER_EVENTS } from '../utils/native'
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import type * as s from '@entityseven/fivem-rpc-shared-types'
|
||||
|
||||
import { Emitter } from '../utils/emitter'
|
||||
import { generateUUID, stringify } from '../utils/funcs'
|
||||
import {
|
||||
|
||||
+11
-11
@@ -1,20 +1,14 @@
|
||||
{
|
||||
"name": "@entityseven/fivem-rpc-shared-types",
|
||||
"description": "Shared (enhanced) types for @entityseven/fivem-rpc. Highly recommended to install together",
|
||||
"version": "0.1.0",
|
||||
"types": "types/types/index.d.ts",
|
||||
"files": [
|
||||
"types/**/*",
|
||||
"readme.md",
|
||||
"license.md"
|
||||
],
|
||||
"description": "Shared (enhanced) types for @entityseven/fivem-rpc. Highly recommended to install together",
|
||||
"keywords": [
|
||||
"fivem-rpc-shared-types",
|
||||
"fivem-rpc",
|
||||
"fivem",
|
||||
"fivem-rpc",
|
||||
"fivem-rpc-shared-types",
|
||||
"gta"
|
||||
],
|
||||
"type": "module",
|
||||
"license": "Custom-Attribution-NoDerivs",
|
||||
"author": "Entity Seven Group",
|
||||
"contributors": [
|
||||
{
|
||||
@@ -23,11 +17,17 @@
|
||||
"url": "https://github.com/rilaxik/"
|
||||
}
|
||||
],
|
||||
"license": "Custom-Attribution-NoDerivs",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rilaxik/fivem-rpc.git"
|
||||
},
|
||||
"files": [
|
||||
"types/**/*",
|
||||
"readme.md",
|
||||
"license.md"
|
||||
],
|
||||
"type": "module",
|
||||
"types": "types/types/index.d.ts",
|
||||
"peerDependencies": {
|
||||
"typescript": "^5"
|
||||
}
|
||||
|
||||
+114
-99
@@ -1,22 +1,29 @@
|
||||
# FiveM RPC Shared Types
|
||||
|
||||
### [Docs & Info](https://github.com/rilaxik/fivem-rpc/blob/master/readme.md)
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pnpm i @entityseven/fivem-rpc-shared-types -D
|
||||
```
|
||||
|
||||
```bash
|
||||
yarn add @entityseven/fivem-rpc-shared-types --dev
|
||||
```
|
||||
|
||||
```bash
|
||||
bun add @entityseven/fivem-rpc-shared-types -d
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
This package is an enhanced type support for `@entityseven/fivem-rpc`. It provides ability to strictly type your events for better dx.
|
||||
|
||||
## Example
|
||||
|
||||
This example is neat way to follow up but you can change it as you wish. It will use bun workspaces, pnpm workspaces work in a similar manner. Referring the following folder structure:
|
||||
|
||||
```markdown
|
||||
apps/
|
||||
- server/
|
||||
@@ -38,131 +45,139 @@ apps/
|
||||
- Environment folder: folder with server, client or webview code in it
|
||||
|
||||
1. Install this package as dev dependency in your root package or in each environment folder separately
|
||||
```markdown
|
||||
apps/
|
||||
- server/ <- (if not installed root)
|
||||
- client/ <- (if not installed root)
|
||||
- webview/ <- (if not installed root)
|
||||
- shared/
|
||||
|
||||
- package.json <- here
|
||||
```
|
||||
```markdown
|
||||
apps/
|
||||
- server/ <- (if not installed root)
|
||||
- client/ <- (if not installed root)
|
||||
- webview/ <- (if not installed root)
|
||||
- shared/
|
||||
|
||||
- package.json <- here
|
||||
```
|
||||
|
||||
2. In `shared/` create folder `fivem-rpc` (or similar), inside it create `index.d.ts`
|
||||
```markdown
|
||||
apps/
|
||||
- server/
|
||||
- client/
|
||||
- webview/
|
||||
- shared/
|
||||
- fivem-rpc/
|
||||
- index.d.ts <- here
|
||||
|
||||
- package.json
|
||||
```
|
||||
```markdown
|
||||
apps/
|
||||
- server/
|
||||
- client/
|
||||
- webview/
|
||||
- shared/
|
||||
- fivem-rpc/
|
||||
- index.d.ts <- here
|
||||
|
||||
- package.json
|
||||
```
|
||||
|
||||
3. In `index.d.ts` add following:
|
||||
```ts
|
||||
declare module '@entityseven/fivem-rpc-shared-types' {
|
||||
// Client commands names
|
||||
export type RPCCommands_Client = ''
|
||||
|
||||
// Server commands names
|
||||
export type RPCCommands_Server = ''
|
||||
```ts
|
||||
declare module '@entityseven/fivem-rpc-shared-types' {
|
||||
// Client commands names
|
||||
export type RPCCommands_Client = ''
|
||||
|
||||
// Client -> Client events
|
||||
export interface RPCEvents_Client {}
|
||||
// Server commands names
|
||||
export type RPCCommands_Server = ''
|
||||
|
||||
// Client -> Server events
|
||||
export interface RPCEvents_ClientServer {}
|
||||
// Client -> Client events
|
||||
export interface RPCEvents_Client {}
|
||||
|
||||
// Client -> Webview events
|
||||
export interface RPCEvents_ClientWebview {}
|
||||
// Client -> Server events
|
||||
export interface RPCEvents_ClientServer {}
|
||||
|
||||
// Server -> Server events
|
||||
export interface RPCEvents_Server {}
|
||||
// Client -> Webview events
|
||||
export interface RPCEvents_ClientWebview {}
|
||||
|
||||
// Server -> Client events
|
||||
export interface RPCEvents_ServerClient {}
|
||||
// Server -> Server events
|
||||
export interface RPCEvents_Server {}
|
||||
|
||||
// Server -> Server events
|
||||
export interface RPCEvents_ServerWebview {}
|
||||
// Server -> Client events
|
||||
export interface RPCEvents_ServerClient {}
|
||||
|
||||
// Webview -> Webview events
|
||||
export interface RPCEvents_Webview {}
|
||||
// Server -> Server events
|
||||
export interface RPCEvents_ServerWebview {}
|
||||
|
||||
// Webview -> Client events
|
||||
export interface RPCEvents_WebviewClient {}
|
||||
// Webview -> Webview events
|
||||
export interface RPCEvents_Webview {}
|
||||
|
||||
// Webview -> Server events
|
||||
export interface RPCEvents_WebviewServer {}
|
||||
}
|
||||
```
|
||||
// Webview -> Client events
|
||||
export interface RPCEvents_WebviewClient {}
|
||||
|
||||
// Webview -> Server events
|
||||
export interface RPCEvents_WebviewServer {}
|
||||
}
|
||||
```
|
||||
|
||||
4. We just created a declaration which will overwrite types from the package. Now we need our packages to refer to these types when linting `rpc` functions. To do this in each environment folder of your project in `tsconfig.json` do these:
|
||||
```json5
|
||||
{
|
||||
"compilerOptions": {
|
||||
"types": [
|
||||
"../shared/fivem-rpc/" // or your specific folder
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
```json5
|
||||
{
|
||||
"compilerOptions": {
|
||||
"types": [
|
||||
"../shared/fivem-rpc/" // or your specific folder
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
5. We also need to populate interfaces we created in step 3.
|
||||
- `RPCCommands_Client` and `RPCCommands_Server` will include your commands names an union strings:
|
||||
```ts
|
||||
export type RPCCommands_Client = 'afk' | 'vanish' | '...' // example names
|
||||
export type RPCCommands_Server = 'report' | 'ban' | '...' // example names
|
||||
```
|
||||
- Other interfaces will include your events types. The example will show one but all of the work same way
|
||||
```ts
|
||||
export interface RPCEvents_ClientServer {
|
||||
clientToServerEventName(data: string, moreData: boolean): number
|
||||
"client-to-server-event-name"(data: string, moreData: boolean): number // can also include characters you cannot use as variable or function names
|
||||
}
|
||||
```
|
||||
- `clientToServerEventName` or `client-to-server-event-name` is an event name
|
||||
- `data` and `moreData` are the arguments you need to pass when calling an event and argument you will receive when listening (may also include extra, as player, check type hints)
|
||||
- `number` is a return type that will be forwarded back to caller
|
||||
|
||||
Doing this will create type hints for you:
|
||||
```ts
|
||||
// assuming this is in client
|
||||
const response /* number */ = await rpc.emitServer(
|
||||
'clientToServerEventName', /* suggested name */
|
||||
'data', /* will pass typecheck */
|
||||
'moreData', /* will NOT pass typecheck, since required type is `boolean` */
|
||||
)
|
||||
```
|
||||
- `RPCCommands_Client` and `RPCCommands_Server` will include your commands names an union strings:
|
||||
```ts
|
||||
export type RPCCommands_Client = 'afk' | 'vanish' | '...' // example names
|
||||
export type RPCCommands_Server = 'report' | 'ban' | '...' // example names
|
||||
```
|
||||
- Other interfaces will include your events types. The example will show one but all of the work same way
|
||||
|
||||
```ts
|
||||
export interface RPCEvents_ClientServer {
|
||||
clientToServerEventName(data: string, moreData: boolean): number
|
||||
"client-to-server-event-name"(data: string, moreData: boolean): number // can also include characters you cannot use as variable or function names
|
||||
}
|
||||
```
|
||||
- `clientToServerEventName` or `client-to-server-event-name` is an event name
|
||||
- `data` and `moreData` are the arguments you need to pass when calling an event and argument you will receive when listening (may also include extra, as player, check type hints)
|
||||
- `number` is a return type that will be forwarded back to caller
|
||||
|
||||
Doing this will create type hints for you:
|
||||
|
||||
```ts
|
||||
// assuming this is in client
|
||||
const response /* number */ = await rpc.emitServer(
|
||||
'clientToServerEventName', /* suggested name */
|
||||
'data', /* will pass typecheck */
|
||||
'moreData', /* will NOT pass typecheck, since required type is `boolean` */
|
||||
)
|
||||
```
|
||||
|
||||
## Example (alternative)
|
||||
|
||||
If previous example does not work or you do not like you can also try it this way. Steps that are not mentioned are the same as previous
|
||||
|
||||
2. In `shared/` create folders `declarations/fivem-rpc`, inside it create `index.d.ts`
|
||||
```markdown
|
||||
apps/
|
||||
- server/
|
||||
- client/
|
||||
- webview/
|
||||
- shared/
|
||||
- declarations/
|
||||
- fivem-rpc/
|
||||
- index.d.ts <- here
|
||||
|
||||
- package.json
|
||||
```
|
||||
```markdown
|
||||
apps/
|
||||
- server/
|
||||
- client/
|
||||
- webview/
|
||||
- shared/
|
||||
- declarations/
|
||||
- fivem-rpc/
|
||||
- index.d.ts <- here
|
||||
|
||||
4. We just created a declaration which will overwrite types from the package. Now we need our packages to refer to these types when linting `rpc` functions. To do this in each environment folder of your project in `tsconfig.json` do these:
|
||||
```json5
|
||||
{
|
||||
"compilerOptions": {
|
||||
"typeRoots": [
|
||||
"../shared/declarations/", // or your specific folder
|
||||
"../../node_modules/@types", // you may also want to add this if some of your other libraries are not showing types now
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
- package.json
|
||||
```
|
||||
|
||||
3. We just created a declaration which will overwrite types from the package. Now we need our packages to refer to these types when linting `rpc` functions. To do this in each environment folder of your project in `tsconfig.json` do these:
|
||||
```json5
|
||||
{
|
||||
"compilerOptions": {
|
||||
"typeRoots": [
|
||||
"../shared/declarations/", // or your specific folder
|
||||
"../../node_modules/@types", // you may also want to add this if some of your other libraries are not showing types now
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If a any point this stops working for you, do your research on how to redeclare library types and refer to it
|
||||
Reference in New Issue
Block a user