From 4f0cc4c7c55344d1bfe83e305e74eaf5d4c245dd Mon Sep 17 00:00:00 2001 From: Luke Date: Wed, 14 Sep 2022 13:50:32 +0200 Subject: [PATCH 01/18] feat(package): interface definitions --- package/.gitignore | 6 ++ package/.npmignore | 1 + package/.prettierrc | 9 +++ package/client/index.ts | 4 ++ package/client/resource/index.ts | 8 +++ package/client/resource/interface/alert.ts | 10 +++ .../client/resource/interface/clipboard.ts | 1 + package/client/resource/interface/context.ts | 36 +++++++++++ package/client/resource/interface/input.ts | 22 +++++++ package/client/resource/interface/menu.ts | 36 +++++++++++ package/client/resource/interface/notify.ts | 30 +++++++++ package/client/resource/interface/progress.ts | 54 ++++++++++++++++ package/client/resource/interface/textui.ts | 12 ++++ package/client/tsconfig.json | 8 +++ package/package.json | 34 +++++++++++ package/pnpm-lock.yaml | 61 +++++++++++++++++++ package/tsconfig.json | 23 +++++++ 17 files changed, 355 insertions(+) create mode 100644 package/.gitignore create mode 100644 package/.npmignore create mode 100644 package/.prettierrc create mode 100644 package/client/index.ts create mode 100644 package/client/resource/index.ts create mode 100644 package/client/resource/interface/alert.ts create mode 100644 package/client/resource/interface/clipboard.ts create mode 100644 package/client/resource/interface/context.ts create mode 100644 package/client/resource/interface/input.ts create mode 100644 package/client/resource/interface/menu.ts create mode 100644 package/client/resource/interface/notify.ts create mode 100644 package/client/resource/interface/progress.ts create mode 100644 package/client/resource/interface/textui.ts create mode 100644 package/client/tsconfig.json create mode 100644 package/package.json create mode 100644 package/pnpm-lock.yaml create mode 100644 package/tsconfig.json diff --git a/package/.gitignore b/package/.gitignore new file mode 100644 index 0000000..ff79d98 --- /dev/null +++ b/package/.gitignore @@ -0,0 +1,6 @@ +node_modules +pnpm-debug.log* + +*.js +*.js.map +*.d.ts \ No newline at end of file diff --git a/package/.npmignore b/package/.npmignore new file mode 100644 index 0000000..9170c21 --- /dev/null +++ b/package/.npmignore @@ -0,0 +1 @@ +.prettierrc \ No newline at end of file diff --git a/package/.prettierrc b/package/.prettierrc new file mode 100644 index 0000000..cb37e3c --- /dev/null +++ b/package/.prettierrc @@ -0,0 +1,9 @@ +{ + "printWidth": 120, + "singleQuote": true, + "useTabs": false, + "tabWidth": 2, + "semi": true, + "bracketSpacing": true, + "trailingComma": "es5" +} diff --git a/package/client/index.ts b/package/client/index.ts new file mode 100644 index 0000000..26e5aee --- /dev/null +++ b/package/client/index.ts @@ -0,0 +1,4 @@ +import * as lib from './resource'; +export * from './resource'; + +export default lib; diff --git a/package/client/resource/index.ts b/package/client/resource/index.ts new file mode 100644 index 0000000..688b36a --- /dev/null +++ b/package/client/resource/index.ts @@ -0,0 +1,8 @@ +export * from './interface/alert'; +export * from './interface/clipboard'; +export * from './interface/context'; +export * from './interface/input'; +export * from './interface/menu'; +export * from './interface/notify'; +export * from './interface/progress'; +export * from './interface/textui'; diff --git a/package/client/resource/interface/alert.ts b/package/client/resource/interface/alert.ts new file mode 100644 index 0000000..f775c98 --- /dev/null +++ b/package/client/resource/interface/alert.ts @@ -0,0 +1,10 @@ +interface AlertDialogProps { + header: string; + content: string; + centered?: boolean; + cancel?: boolean; +} + +type alertDialog = (data: AlertDialogProps) => Promise<'cancel' | 'confirm'>; + +export const alertDialog: alertDialog = async (data) => await exports.ox_lib.alertDialog(data); diff --git a/package/client/resource/interface/clipboard.ts b/package/client/resource/interface/clipboard.ts new file mode 100644 index 0000000..13074a4 --- /dev/null +++ b/package/client/resource/interface/clipboard.ts @@ -0,0 +1 @@ +export const setClipboard = (value: string) => exports.ox_lib.setClipboard(value); diff --git a/package/client/resource/interface/context.ts b/package/client/resource/interface/context.ts new file mode 100644 index 0000000..d9b6019 --- /dev/null +++ b/package/client/resource/interface/context.ts @@ -0,0 +1,36 @@ +import { IconName, IconPrefix } from '@fortawesome/fontawesome-common-types'; + +interface ContextMenuItem { + menu?: string; + icon?: IconName | [IconPrefix, IconName]; + iconColor?: string; + onSelect?: () => void; + arrow?: boolean; + description?: boolean; + metadata?: string | { [key: string]: any } | string[]; + event?: string; + serverEvent?: string; + args?: any; +} + +interface ContextMenuArrayItem extends ContextMenuItem { + title: string; +} + +interface ContextMenuProps { + id: string; + title: string; + menu?: string; + onExit?: () => void; + canClose?: boolean; + options: { [key: string]: ContextMenuItem } | ContextMenuArrayItem[]; +} + +type registerContext = (context: ContextMenuProps) => void; +export const registerContext: registerContext = (context) => exports.ox_lib.registerContext(context); + +export const showContext = (id: string): void => exports.ox_lib.showContext(id); + +export const hideContext = (onExit: boolean): void => exports.ox_lib.hideContext(onExit); + +export const getOpenContextMenu = (): string | null => exports.ox_lib.getOpenContextMenu(); diff --git a/package/client/resource/interface/input.ts b/package/client/resource/interface/input.ts new file mode 100644 index 0000000..2f01400 --- /dev/null +++ b/package/client/resource/interface/input.ts @@ -0,0 +1,22 @@ +import { IconName, IconPrefix } from '@fortawesome/fontawesome-common-types'; + +interface InputDialogRowProps { + type: 'input' | 'number' | 'checkbox' | 'select' | 'slider'; + label: string; + options?: { value: string; label: string; default?: string }[]; + password?: boolean; + icon?: IconName | [IconPrefix, IconName]; + iconColor?: string; + placeholder?: string; + default?: string | number; + checked?: boolean; + min?: number; + max?: number; + step?: number; +} + +type inputDialog = ( + heading: string, + rows: string[] | InputDialogRowProps[] +) => Promise | undefined>; +export const inputDialog: inputDialog = async (heading, rows) => await exports.ox_lib.inputDialog(heading, rows); diff --git a/package/client/resource/interface/menu.ts b/package/client/resource/interface/menu.ts new file mode 100644 index 0000000..623aca6 --- /dev/null +++ b/package/client/resource/interface/menu.ts @@ -0,0 +1,36 @@ +import { IconName, IconPrefix } from '@fortawesome/fontawesome-common-types'; + +type MenuPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; +type ChangeFunction = (selected: number, scrollIndex: number | null, args: any | null) => void; + +interface MenuOptions { + label: string; + icon?: IconName | [IconPrefix, IconName]; + values?: string[]; + description?: string; + defaultIndex?: number; + args?: any; +} + +interface MenuProps { + id: string; + title: string; + options: MenuOptions[]; + position?: MenuPosition; + disableInput?: boolean; + onClose?: () => void; + onSelected?: ChangeFunction; + onSideScroll?: ChangeFunction; +} + +type registerMenu = (data: MenuProps, cb: ChangeFunction) => void; +export const registerMenu: registerMenu = (data, cb) => exports.ox_lib.registerMenu(data, cb); + +export const showMenu = (id: string): string => exports.ox_lib.showMenu(id); + +export const hideMenu = (onExit: boolean): void => exports.ox_lib.hideMenu(onExit); + +export const getOpenMenu = (): string | null => exports.ox_lib.getOpenMenu(); + +type setMenuOptions = (id: string, options: MenuOptions | MenuOptions[], index?: number) => void; +export const setMenuOptions: setMenuOptions = (id, options, index) => exports.ox_lib.setMenuOptions(id, options, index); diff --git a/package/client/resource/interface/notify.ts b/package/client/resource/interface/notify.ts new file mode 100644 index 0000000..ba6a11f --- /dev/null +++ b/package/client/resource/interface/notify.ts @@ -0,0 +1,30 @@ +import { CSSProperties } from 'react'; +import { IconName, IconPrefix } from '@fortawesome/fontawesome-common-types'; + +type NotificationPosition = 'top' | 'top-right' | 'top-left' | 'bottom' | 'bottom-right' | 'bottom-left'; +type NotificationType = 'inform' | 'error' | 'success'; + +interface NotifyProps { + id?: string; + title?: string; + description?: string; + duration?: number; + position?: NotificationPosition; + type: NotificationType; + style?: CSSProperties; + icon?: IconName | [IconPrefix, IconName]; + iconColor?: string; +} + +export const notify = (data: NotifyProps): void => exports.ox_lib.notify(data); + +interface DefaultNotifyProps { + title?: string; + description?: string; + duration?: number; + position?: NotificationPosition; + status: 'info' | 'warning' | 'success' | 'error'; + id?: number; +} + +export const defaultNotify = (data: DefaultNotifyProps): void => exports.ox_lib.defaultNotify(data); diff --git a/package/client/resource/interface/progress.ts b/package/client/resource/interface/progress.ts new file mode 100644 index 0000000..30a440f --- /dev/null +++ b/package/client/resource/interface/progress.ts @@ -0,0 +1,54 @@ +type Position = { + x: number; + y: number; + z: number; +}; + +interface PropProps { + model: string; + bone?: number; + pos: Position; + rot: Position; +} + +interface ProgressProps { + duration: number; + useWhileDead?: boolean; + allowRagdoll?: boolean; + allowCuffed?: boolean; + allowFalling?: boolean; + canCancel?: boolean; + anim?: { + dict?: string; + clip: string; + flag?: number; + blendIn?: number; + blendOut?: number; + duration?: number; + playbackRate?: number; + lockX?: boolean; + lockY?: boolean; + lockZ?: boolean; + scenario?: string; + playEnter?: boolean; + }; + prop?: PropProps | PropProps[]; + disable?: { + move?: boolean; + car?: boolean; + combat?: boolean; + mouse?: boolean; + }; +} + +interface ProgressbarProps extends ProgressProps { + label: string; +} + +export const progressBar = async (data: ProgressbarProps): Promise => exports.ox_lib.progressBar(data); + +export const progressCircle = async (data: ProgressProps): Promise => exports.ox_lib.progressCircle(data); + +export const progressActive = (): boolean => exports.ox_lib.progressActive(); + +export const cancelProgress = (): void => exports.ox_lib.cancelProgress(); diff --git a/package/client/resource/interface/textui.ts b/package/client/resource/interface/textui.ts new file mode 100644 index 0000000..b7b6033 --- /dev/null +++ b/package/client/resource/interface/textui.ts @@ -0,0 +1,12 @@ +import { IconLookup, IconName, IconPrefix } from '@fortawesome/fontawesome-common-types'; +import { CSSProperties } from 'react'; + +interface OptionsProps { + position?: 'right-center' | 'left-center' | 'top-center'; + icon?: IconName | [IconPrefix, IconName]; + iconColor?: string; + style?: CSSProperties; +} +export const showTextUI = (text: string, options?: OptionsProps): void => exports.ox_lib.showTextUI(text, options); + +export const hideTextUI = (): void => exports.ox_lib.hideTextUI(); diff --git a/package/client/tsconfig.json b/package/client/tsconfig.json new file mode 100644 index 0000000..a2b57ce --- /dev/null +++ b/package/client/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": ".", + }, + "include": ["./**/*"], + "exclude": ["**/node_modules"] +} \ No newline at end of file diff --git a/package/package.json b/package/package.json new file mode 100644 index 0000000..ff111df --- /dev/null +++ b/package/package.json @@ -0,0 +1,34 @@ +{ + "name": "@overextended/ox_lib", + "author": "Overextended", + "version": "1.0.0", + "description": "JS/TS wrapper for ox_lib exports", + "types": "./client/index.d.ts", + "main": "index.js", + "scripts": { + "prepublish": "tsc" + }, + "keywords": [ + "fivem", + "ox_lib", + "ox", + "overextended" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/overextended/ox_lib.git" + }, + "bugs": { + "url": "https://github.com/overextended/ox_lib/issues" + }, + "license": "LGPL-3.0", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.1.1", + "@types/node": "16.9.1", + "@types/react": "^18.0.20", + "typescript": "^4.8.3" + }, + "devDependencies": { + "prettier": "^2.7.1" + } +} diff --git a/package/pnpm-lock.yaml b/package/pnpm-lock.yaml new file mode 100644 index 0000000..d47ceb5 --- /dev/null +++ b/package/pnpm-lock.yaml @@ -0,0 +1,61 @@ +lockfileVersion: 5.4 + +specifiers: + '@fortawesome/fontawesome-common-types': 6.1.1 + '@types/node': 16.9.1 + '@types/react': ^18.0.20 + prettier: ^2.7.1 + typescript: ^4.8.3 + +dependencies: + '@fortawesome/fontawesome-common-types': 6.1.1 + '@types/node': 16.9.1 + '@types/react': 18.0.20 + typescript: 4.8.3 + +devDependencies: + prettier: 2.7.1 + +packages: + + /@fortawesome/fontawesome-common-types/6.1.1: + resolution: {integrity: sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + + /@types/node/16.9.1: + resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} + dev: false + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: false + + /@types/react/18.0.20: + resolution: {integrity: sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: false + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: false + + /csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + dev: false + + /prettier/2.7.1: + resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /typescript/4.8.3: + resolution: {integrity: sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: false diff --git a/package/tsconfig.json b/package/tsconfig.json new file mode 100644 index 0000000..feaa36b --- /dev/null +++ b/package/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "strict": true, + "module": "CommonJS", + "types": ["@types/node"], + "declaration": true, + "sourceMap": true, + "target": "ESNext", + "allowJs": false, + "lib": ["ESNext"], + "noEmitOnError": false, + "resolveJsonModule": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "noImplicitAny": false, + "noEmit": false + }, + "include": ["client"], + "exclude": ["**/node_modules"] +} From 1373ff21d4ccb6b256d89ad79f9600c92a127aaf Mon Sep 17 00:00:00 2001 From: Luke Date: Wed, 14 Sep 2022 23:46:00 +0200 Subject: [PATCH 02/18] feat(package): acl wrapper --- package/server/index.ts | 4 ++++ package/server/resource/acl/index.ts | 8 ++++++++ package/server/resource/index.ts | 1 + 3 files changed, 13 insertions(+) create mode 100644 package/server/index.ts create mode 100644 package/server/resource/acl/index.ts create mode 100644 package/server/resource/index.ts diff --git a/package/server/index.ts b/package/server/index.ts new file mode 100644 index 0000000..26e5aee --- /dev/null +++ b/package/server/index.ts @@ -0,0 +1,4 @@ +import * as lib from './resource'; +export * from './resource'; + +export default lib; diff --git a/package/server/resource/acl/index.ts b/package/server/resource/acl/index.ts new file mode 100644 index 0000000..fa94e00 --- /dev/null +++ b/package/server/resource/acl/index.ts @@ -0,0 +1,8 @@ +type aceFunction = (principal: string | number, ace: string, allow: boolean) => void; +type principalFunction = (child: string, parent: string) => void; + +export const addAce: aceFunction = (principal, ace, allow) => exports.ox_lib.addAce(principal, ace, allow); +export const removeAce: aceFunction = (principal, ace, allow) => exports.ox_lib.addAce(principal, ace, allow); + +export const addPrincipal: principalFunction = (child, parent) => exports.ox_lib.addPrincipal(child, parent); +export const removePrincipal: principalFunction = (child, parent) => exports.ox_lib.removePrincipal(child, parent); diff --git a/package/server/resource/index.ts b/package/server/resource/index.ts new file mode 100644 index 0000000..22baddf --- /dev/null +++ b/package/server/resource/index.ts @@ -0,0 +1 @@ +export * from './acl'; From 8cbef2580c803115b49318b48c3c2fbf8e8c58cc Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Sep 2022 00:10:04 +0200 Subject: [PATCH 03/18] feat(package): locale wrapper --- package/server/resource/index.ts | 1 + package/server/resource/locale/index.ts | 1 + 2 files changed, 2 insertions(+) create mode 100644 package/server/resource/locale/index.ts diff --git a/package/server/resource/index.ts b/package/server/resource/index.ts index 22baddf..5e18712 100644 --- a/package/server/resource/index.ts +++ b/package/server/resource/index.ts @@ -1 +1,2 @@ export * from './acl'; +export * from './locale'; diff --git a/package/server/resource/locale/index.ts b/package/server/resource/locale/index.ts new file mode 100644 index 0000000..51ca5f7 --- /dev/null +++ b/package/server/resource/locale/index.ts @@ -0,0 +1 @@ +export const getServerLocale = (): string => exports.ox_lib.getServerLocale(); From 50540309487ecacdd56f9f1da38a5249963a0484 Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Sep 2022 00:22:25 +0200 Subject: [PATCH 04/18] feat(package): streaming wrapper --- package/client/resource/index.ts | 2 ++ package/client/resource/streaming/index.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 package/client/resource/streaming/index.ts diff --git a/package/client/resource/index.ts b/package/client/resource/index.ts index 688b36a..eaa6ea5 100644 --- a/package/client/resource/index.ts +++ b/package/client/resource/index.ts @@ -6,3 +6,5 @@ export * from './interface/menu'; export * from './interface/notify'; export * from './interface/progress'; export * from './interface/textui'; + +export * from './streaming'; diff --git a/package/client/resource/streaming/index.ts b/package/client/resource/streaming/index.ts new file mode 100644 index 0000000..f1a69b8 --- /dev/null +++ b/package/client/resource/streaming/index.ts @@ -0,0 +1,14 @@ +export const requestAnimDict = (animDict: string, timeout?: number): string => + exports.ox_lib.requestAnimDict(animDict, timeout); + +export const requestAnimSet = (animSet: string, timeout?: number): string => + exports.ox_lib.requestAnimSet(animSet, timeout); + +export const requestModel = (model: string | number, timeout?: number): string => + exports.ox_lib.requestModel(model, timeout); + +export const requestStreamedTextureDict = (dict: string, timeout?: number): string => + exports.ox_lib.requestStreamedTextureDict(dict, timeout); + +export const requestNamedPtfxAsset = (fxName: string, timeout?: number): string => + exports.ox_lib.requestNamedPtfxAsset(fxName, timeout); From f298bb6eb904e8e8dd586a20af01bc8ee780b1e1 Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Sep 2022 10:18:49 +0200 Subject: [PATCH 05/18] feat(package): vehicle properties wrapper --- package/client/resource/index.ts | 2 + .../resource/vehicleProperties/index.ts | 90 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 package/client/resource/vehicleProperties/index.ts diff --git a/package/client/resource/index.ts b/package/client/resource/index.ts index eaa6ea5..300fac4 100644 --- a/package/client/resource/index.ts +++ b/package/client/resource/index.ts @@ -8,3 +8,5 @@ export * from './interface/progress'; export * from './interface/textui'; export * from './streaming'; + +export * from './vehicleProperties'; diff --git a/package/client/resource/vehicleProperties/index.ts b/package/client/resource/vehicleProperties/index.ts new file mode 100644 index 0000000..9a619e4 --- /dev/null +++ b/package/client/resource/vehicleProperties/index.ts @@ -0,0 +1,90 @@ +interface VehicleProperties { + model: string; + plate: string; + plateIndex: number; + bodyHealth: number; + engineHealth: number; + tankHealth: number; + fuelLevel: number; + dirtLevel: number; + color1: number; + color2: number; + pearlescentColor: number; + interiorColor: number; + dashboardColor: number; + wheelColor: number; + wheelWidth: number; + wheelSize: number; + wheels: number; + windowTint: number; + xenonColor: number; + neonEnabled: boolean[]; + neonColor: [number, number, number]; + extras: boolean[]; + tyreSmokeColor: [number, number, number]; + modSpoilers: number; + modFrontBumper: number; + modRearBumper: number; + modSideSkirt: number; + modExhaust: number; + modFrame: number; + modGrille: number; + modHood: number; + modFender: number; + modRightFender: number; + modRoof: number; + modEngine: number; + modBrakes: number; + modTransmission: number; + modHorns: number; + modSuspension: number; + modArmor: number; + modNitrous: number; + modTurbo: number; + modSubwoofer: number; + modSmokeEnabled: number; + modHydraulics: number; + modXenon: number; + modFrontWheels: number; + modBackWheels: number; + modCustomTiresF: number; + modCustomTiresR: number; + modPlateHolder: number; + modVanityPlate: number; + modTrimA: number; + modOrnaments: number; + modDashboard: number; + modDial: number; + modDoorSpeaker: number; + modSeats: number; + modSteeringWheel: number; + modShifterLeavers: number; + modAPlate: number; + modSpeakers: number; + modTrunk: number; + modHydrolic: number; + modEngineBlock: number; + modAirFilter: number; + modStruts: number; + modArchCover: number; + modAerials: number; + modTrimB: number; + modTank: number; + modWindows: number; + modDoorR: number; + modLivery: number; + modRoofLivery: number; + modLightbar: number; + windows: number[]; + doors: number[]; + tyres: number[]; + leftHeadlight: boolean; + rightHeadlight: boolean; + frontBumper: boolean; + rearBumper: boolean; +} + +export const getVehicleProperties = (): VehicleProperties => exports.ox_lib.getVehicleProperties(); + +export const setVehicleProperties = (vehicle: number, props: Partial): boolean => + exports.ox_lib.setVehicleProperties(vehicle, props); From 3dcad0fc98a155f970bfe481ef3d0d14a69aba2d Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Sep 2022 10:34:52 +0200 Subject: [PATCH 06/18] feat(web): version wreapper --- package/server/resource/version/index.ts | 1 + package/shared/index.ts | 0 package/shared/resource/index.ts | 1 + package/shared/resource/version/index.ts | 2 ++ 4 files changed, 4 insertions(+) create mode 100644 package/server/resource/version/index.ts create mode 100644 package/shared/index.ts create mode 100644 package/shared/resource/index.ts create mode 100644 package/shared/resource/version/index.ts diff --git a/package/server/resource/version/index.ts b/package/server/resource/version/index.ts new file mode 100644 index 0000000..09c4645 --- /dev/null +++ b/package/server/resource/version/index.ts @@ -0,0 +1 @@ +export const versionCheck = (repository: string) => exports.ox_lib.versionCheck(repository); diff --git a/package/shared/index.ts b/package/shared/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/package/shared/resource/index.ts b/package/shared/resource/index.ts new file mode 100644 index 0000000..70fe043 --- /dev/null +++ b/package/shared/resource/index.ts @@ -0,0 +1 @@ +export * from './version'; diff --git a/package/shared/resource/version/index.ts b/package/shared/resource/version/index.ts new file mode 100644 index 0000000..7e3deff --- /dev/null +++ b/package/shared/resource/version/index.ts @@ -0,0 +1,2 @@ +export const checkDependency = (resource: string, minimumVersion: string, printMessage: string) => + exports.ox_lib.checkDependency(resource, minimumVersion, printMessage); From f573ba259c6eaed4493a5e574425593198564581 Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Sep 2022 10:36:50 +0200 Subject: [PATCH 07/18] fix(package): remember to actually save the file --- package/shared/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package/shared/index.ts b/package/shared/index.ts index e69de29..26e5aee 100644 --- a/package/shared/index.ts +++ b/package/shared/index.ts @@ -0,0 +1,4 @@ +import * as lib from './resource'; +export * from './resource'; + +export default lib; From cc80d53dfd4a89bb0084003da7af4c288999ebda Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Sep 2022 13:29:21 +0200 Subject: [PATCH 08/18] fix(package): include tsconfig files in server and shared --- package/server/tsconfig.json | 8 ++++++++ package/shared/tsconfig.json | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 package/server/tsconfig.json create mode 100644 package/shared/tsconfig.json diff --git a/package/server/tsconfig.json b/package/server/tsconfig.json new file mode 100644 index 0000000..a2b57ce --- /dev/null +++ b/package/server/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": ".", + }, + "include": ["./**/*"], + "exclude": ["**/node_modules"] +} \ No newline at end of file diff --git a/package/shared/tsconfig.json b/package/shared/tsconfig.json new file mode 100644 index 0000000..a2b57ce --- /dev/null +++ b/package/shared/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": ".", + }, + "include": ["./**/*"], + "exclude": ["**/node_modules"] +} \ No newline at end of file From fe1820e07f97bac615401ba4c9581d69b76d3e6d Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Sep 2022 14:01:18 +0200 Subject: [PATCH 09/18] ci(release): publish new npm package version on release --- .github/workflows/release.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 96b9afa..9579303 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,6 +36,10 @@ jobs: - name: Install dependencies run: pnpm install working-directory: web + + - name: Bump package version + run: pnpm version ${{ github.ref_name }} + working-directory: package - name: Run build run: pnpm build @@ -83,3 +87,10 @@ jobs: env: CI: false GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Publish npm package + uses: JS-DevTools/npm-publish@v1 + with: + token: ${{ secrets.NPM_TOKEN }} + package: './packages/package.json' + access: 'public' \ No newline at end of file From 7529e7436b7bde3d26c068a474c264bdfc2a109c Mon Sep 17 00:00:00 2001 From: Luke Date: Fri, 16 Sep 2022 16:06:04 +0200 Subject: [PATCH 10/18] fix(package): fix incorrect typings for context menu --- package/client/resource/interface/context.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package/client/resource/interface/context.ts b/package/client/resource/interface/context.ts index d9b6019..5d4f5fd 100644 --- a/package/client/resource/interface/context.ts +++ b/package/client/resource/interface/context.ts @@ -1,12 +1,13 @@ import { IconName, IconPrefix } from '@fortawesome/fontawesome-common-types'; interface ContextMenuItem { + title?: string; menu?: string; icon?: IconName | [IconPrefix, IconName]; iconColor?: string; - onSelect?: () => void; + onSelect?: (args: any) => void; arrow?: boolean; - description?: boolean; + description?: string; metadata?: string | { [key: string]: any } | string[]; event?: string; serverEvent?: string; @@ -26,7 +27,7 @@ interface ContextMenuProps { options: { [key: string]: ContextMenuItem } | ContextMenuArrayItem[]; } -type registerContext = (context: ContextMenuProps) => void; +type registerContext = (context: ContextMenuProps | ContextMenuProps[]) => void; export const registerContext: registerContext = (context) => exports.ox_lib.registerContext(context); export const showContext = (id: string): void => exports.ox_lib.showContext(id); From ea40c9c8d5e133fba482e5af9e43a5cb14e0be84 Mon Sep 17 00:00:00 2001 From: Luke Date: Sat, 17 Sep 2022 13:57:54 +0200 Subject: [PATCH 11/18] fix(package): include position in progress circle interface --- package/client/resource/interface/progress.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package/client/resource/interface/progress.ts b/package/client/resource/interface/progress.ts index 30a440f..8c8d538 100644 --- a/package/client/resource/interface/progress.ts +++ b/package/client/resource/interface/progress.ts @@ -13,6 +13,7 @@ interface PropProps { interface ProgressProps { duration: number; + position?: 'middle' | 'bottom'; useWhileDead?: boolean; allowRagdoll?: boolean; allowCuffed?: boolean; @@ -41,7 +42,7 @@ interface ProgressProps { }; } -interface ProgressbarProps extends ProgressProps { +interface ProgressbarProps extends Omit { label: string; } From ef4595c706cbd18b65b587a83cc21121bec79932 Mon Sep 17 00:00:00 2001 From: Luke Date: Sat, 17 Sep 2022 14:21:28 +0200 Subject: [PATCH 12/18] fix(package): set notification types as optional --- package/client/resource/interface/notify.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/client/resource/interface/notify.ts b/package/client/resource/interface/notify.ts index ba6a11f..66714be 100644 --- a/package/client/resource/interface/notify.ts +++ b/package/client/resource/interface/notify.ts @@ -10,7 +10,7 @@ interface NotifyProps { description?: string; duration?: number; position?: NotificationPosition; - type: NotificationType; + type?: NotificationType; style?: CSSProperties; icon?: IconName | [IconPrefix, IconName]; iconColor?: string; @@ -23,7 +23,7 @@ interface DefaultNotifyProps { description?: string; duration?: number; position?: NotificationPosition; - status: 'info' | 'warning' | 'success' | 'error'; + status?: 'info' | 'warning' | 'success' | 'error'; id?: number; } From 87310e77e044f09d683175794e61ceab4ba8d6a5 Mon Sep 17 00:00:00 2001 From: Luke Date: Sat, 17 Sep 2022 16:06:38 +0200 Subject: [PATCH 13/18] feat(package): add citizen typings --- package/client/tsconfig.json | 1 + package/package.json | 2 ++ package/pnpm-lock.yaml | 12 ++++++++++++ package/server/tsconfig.json | 1 + package/shared/tsconfig.json | 1 + package/tsconfig.json | 4 ++-- 6 files changed, 19 insertions(+), 2 deletions(-) diff --git a/package/client/tsconfig.json b/package/client/tsconfig.json index a2b57ce..8bfde81 100644 --- a/package/client/tsconfig.json +++ b/package/client/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": ".", + "types": ["@citizenfx/client"] }, "include": ["./**/*"], "exclude": ["**/node_modules"] diff --git a/package/package.json b/package/package.json index ff111df..15d39f5 100644 --- a/package/package.json +++ b/package/package.json @@ -23,6 +23,8 @@ }, "license": "LGPL-3.0", "dependencies": { + "@citizenfx/client": "2.0.5885-1", + "@citizenfx/server": "2.0.5885-1", "@fortawesome/fontawesome-common-types": "6.1.1", "@types/node": "16.9.1", "@types/react": "^18.0.20", diff --git a/package/pnpm-lock.yaml b/package/pnpm-lock.yaml index d47ceb5..c14dd3d 100644 --- a/package/pnpm-lock.yaml +++ b/package/pnpm-lock.yaml @@ -1,6 +1,8 @@ lockfileVersion: 5.4 specifiers: + '@citizenfx/client': 2.0.5885-1 + '@citizenfx/server': 2.0.5885-1 '@fortawesome/fontawesome-common-types': 6.1.1 '@types/node': 16.9.1 '@types/react': ^18.0.20 @@ -8,6 +10,8 @@ specifiers: typescript: ^4.8.3 dependencies: + '@citizenfx/client': 2.0.5885-1 + '@citizenfx/server': 2.0.5885-1 '@fortawesome/fontawesome-common-types': 6.1.1 '@types/node': 16.9.1 '@types/react': 18.0.20 @@ -18,6 +22,14 @@ devDependencies: packages: + /@citizenfx/client/2.0.5885-1: + resolution: {integrity: sha512-Ba5YYfxhZ82PcOY+2rjqDElTzPt7NrN6/o2U+wYPKK2VU/wRdCsMonpMsr7dYob2ToN5Qe96w5VNI3m5OrouJQ==} + dev: false + + /@citizenfx/server/2.0.5885-1: + resolution: {integrity: sha512-q8KRecfjJ3RjCfBT/3CSHNTr2efUs9uq8pIoPF4TGkn5X7jgTBprrp3VMayaee3Xekay3RTufpzsOaeHUntQeA==} + dev: false + /@fortawesome/fontawesome-common-types/6.1.1: resolution: {integrity: sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==} engines: {node: '>=6'} diff --git a/package/server/tsconfig.json b/package/server/tsconfig.json index a2b57ce..a0b8988 100644 --- a/package/server/tsconfig.json +++ b/package/server/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": ".", + "types": ["@citizenfx/server"] }, "include": ["./**/*"], "exclude": ["**/node_modules"] diff --git a/package/shared/tsconfig.json b/package/shared/tsconfig.json index a2b57ce..9d94f30 100644 --- a/package/shared/tsconfig.json +++ b/package/shared/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": ".", + "types": ["@citizenfx/client", "@citizenfx/server"] }, "include": ["./**/*"], "exclude": ["**/node_modules"] diff --git a/package/tsconfig.json b/package/tsconfig.json index feaa36b..b0ec399 100644 --- a/package/tsconfig.json +++ b/package/tsconfig.json @@ -3,7 +3,7 @@ "baseUrl": ".", "strict": true, "module": "CommonJS", - "types": ["@types/node"], + "types": ["@types/node", "@citizenfx/client", "@citizenfx/server"], "declaration": true, "sourceMap": true, "target": "ESNext", @@ -18,6 +18,6 @@ "noImplicitAny": false, "noEmit": false }, - "include": ["client"], + "include": ["client", "server", "shared"], "exclude": ["**/node_modules"] } From 1dbfd01f480259f8a0396025d953124f79e764d9 Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Sat, 17 Sep 2022 23:12:58 +1000 Subject: [PATCH 14/18] fix(package): getVehicleProperties param --- package/client/resource/vehicleProperties/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/client/resource/vehicleProperties/index.ts b/package/client/resource/vehicleProperties/index.ts index 9a619e4..6f31ad4 100644 --- a/package/client/resource/vehicleProperties/index.ts +++ b/package/client/resource/vehicleProperties/index.ts @@ -84,7 +84,7 @@ interface VehicleProperties { rearBumper: boolean; } -export const getVehicleProperties = (): VehicleProperties => exports.ox_lib.getVehicleProperties(); +export const getVehicleProperties = (vehicle: number): VehicleProperties => exports.ox_lib.getVehicleProperties(vehicle); export const setVehicleProperties = (vehicle: number, props: Partial): boolean => exports.ox_lib.setVehicleProperties(vehicle, props); From 95dd3b18384bc58fb8e1b03d1b94e4b7dfd98592 Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Sun, 18 Sep 2022 00:48:04 +1000 Subject: [PATCH 15/18] feat(package): cache --- package/client/index.ts | 7 ++++++- package/server/index.ts | 2 ++ package/shared/resource/cache/index.ts | 22 ++++++++++++++++++++++ package/shared/resource/index.ts | 1 + 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 package/shared/resource/cache/index.ts diff --git a/package/client/index.ts b/package/client/index.ts index 26e5aee..93f2f00 100644 --- a/package/client/index.ts +++ b/package/client/index.ts @@ -1,4 +1,9 @@ import * as lib from './resource'; -export * from './resource'; +import { cache, onCache } from '../shared/resource'; +cache.playerId = PlayerId(); +cache.serverId = GetPlayerServerId(cache.playerId); + +export { cache, onCache }; +export * from './resource'; export default lib; diff --git a/package/server/index.ts b/package/server/index.ts index 26e5aee..b3310fd 100644 --- a/package/server/index.ts +++ b/package/server/index.ts @@ -1,4 +1,6 @@ import * as lib from './resource'; +import { cache, onCache } from '../shared/resource'; export * from './resource'; export default lib; +export { cache, onCache }; diff --git a/package/shared/resource/cache/index.ts b/package/shared/resource/cache/index.ts new file mode 100644 index 0000000..59998df --- /dev/null +++ b/package/shared/resource/cache/index.ts @@ -0,0 +1,22 @@ +export const cache: Record = new Proxy( + { + resource: GetCurrentResourceName(), + }, + { + get(target, key: string) { + let result = key ? target[key] : target; + if (result) return result; + + AddEventHandler(`ox_lib:cache:${key}`, (value: any) => { + target[key] = value; + }); + + target[key] = exports.ox_lib.cache(key); + return target[key]; + }, + } +); + +export const onCache = (key: string, cb: (value: any) => void) => { + AddEventHandler(`ox_lib:cache:${key}`, cb); +}; diff --git a/package/shared/resource/index.ts b/package/shared/resource/index.ts index 70fe043..c654b73 100644 --- a/package/shared/resource/index.ts +++ b/package/shared/resource/index.ts @@ -1 +1,2 @@ export * from './version'; +export * from './cache'; From 5549fd4cff6c5f43eea41555559ee621dccec0cf Mon Sep 17 00:00:00 2001 From: Luke Date: Sat, 17 Sep 2022 20:21:06 +0200 Subject: [PATCH 16/18] fix(package): use generics to define return type --- package/shared/resource/cache/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/shared/resource/cache/index.ts b/package/shared/resource/cache/index.ts index 59998df..acf0a6f 100644 --- a/package/shared/resource/cache/index.ts +++ b/package/shared/resource/cache/index.ts @@ -4,7 +4,7 @@ export const cache: Record = new Proxy( }, { get(target, key: string) { - let result = key ? target[key] : target; + const result = key ? target[key] : target; if (result) return result; AddEventHandler(`ox_lib:cache:${key}`, (value: any) => { @@ -17,6 +17,6 @@ export const cache: Record = new Proxy( } ); -export const onCache = (key: string, cb: (value: any) => void) => { +export const onCache = (key: string, cb: (value: T) => void) => { AddEventHandler(`ox_lib:cache:${key}`, cb); }; From 7476505ee796314830b1b45c4d4d8b0196ee7d78 Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Sun, 18 Sep 2022 08:11:25 +1000 Subject: [PATCH 17/18] refactor(package): import shared and declare cache in server/client --- package/client/index.ts | 6 +----- package/client/resource/cache/index.ts | 6 ++++++ package/server/index.ts | 5 ++--- package/server/resource/cache/index.ts | 3 +++ package/shared/index.ts | 3 --- 5 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 package/client/resource/cache/index.ts create mode 100644 package/server/resource/cache/index.ts diff --git a/package/client/index.ts b/package/client/index.ts index 93f2f00..85fa865 100644 --- a/package/client/index.ts +++ b/package/client/index.ts @@ -1,9 +1,5 @@ import * as lib from './resource'; -import { cache, onCache } from '../shared/resource'; -cache.playerId = PlayerId(); -cache.serverId = GetPlayerServerId(cache.playerId); - -export { cache, onCache }; export * from './resource'; +export * from '../shared'; export default lib; diff --git a/package/client/resource/cache/index.ts b/package/client/resource/cache/index.ts new file mode 100644 index 0000000..577e9c7 --- /dev/null +++ b/package/client/resource/cache/index.ts @@ -0,0 +1,6 @@ +import { cache, onCache } from '../../../shared'; + +cache.playerId = PlayerId(); +cache.serverId = GetPlayerServerId(cache.playerId); + +export { cache, onCache }; diff --git a/package/server/index.ts b/package/server/index.ts index b3310fd..85fa865 100644 --- a/package/server/index.ts +++ b/package/server/index.ts @@ -1,6 +1,5 @@ import * as lib from './resource'; -import { cache, onCache } from '../shared/resource'; -export * from './resource'; +export * from './resource'; +export * from '../shared'; export default lib; -export { cache, onCache }; diff --git a/package/server/resource/cache/index.ts b/package/server/resource/cache/index.ts new file mode 100644 index 0000000..0c74954 --- /dev/null +++ b/package/server/resource/cache/index.ts @@ -0,0 +1,3 @@ +import { cache, onCache } from '../../../shared'; + +export { cache, onCache }; diff --git a/package/shared/index.ts b/package/shared/index.ts index 26e5aee..c1cb5de 100644 --- a/package/shared/index.ts +++ b/package/shared/index.ts @@ -1,4 +1 @@ -import * as lib from './resource'; export * from './resource'; - -export default lib; From c9dd07a936fad1100eb5c99f667825e9b928cd65 Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Sun, 18 Sep 2022 08:12:16 +1000 Subject: [PATCH 18/18] fix(package): checkDependency type --- package/shared/resource/version/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/shared/resource/version/index.ts b/package/shared/resource/version/index.ts index 7e3deff..9905777 100644 --- a/package/shared/resource/version/index.ts +++ b/package/shared/resource/version/index.ts @@ -1,2 +1,2 @@ -export const checkDependency = (resource: string, minimumVersion: string, printMessage: string) => +export const checkDependency = (resource: string, minimumVersion: string, printMessage?: boolean) => exports.ox_lib.checkDependency(resource, minimumVersion, printMessage);