From 0cc3e215eb7536fb7c5bf179b37e1159ac6da4ed Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Sun, 4 May 2025 20:31:20 +0700 Subject: [PATCH] feat(plugins/settings): new api, remove ErrorBoundary trigger, add eval JS --- src/plugins/settings/SettingsConstants.ts | 5 +- .../CallGarbageCollectorSetting.tsx | 4 +- .../definitions/EvaluateJavaScriptSetting.tsx | 121 ++++++++++++++++++ .../definitions/HermesVersionSetting.tsx | 4 +- .../definitions/ReactNativeVersionSetting.tsx | 4 +- .../definitions/ReactVersionSetting.tsx | 4 +- .../definitions/RevengeDeveloperSetting.tsx | 4 +- .../definitions/RevengeFontsSetting.tsx | 4 +- .../RevengeNotImplementedSetting.tsx | 4 +- .../definitions/RevengePluginsSetting.tsx | 4 +- .../settings/definitions/RevengeSetting.tsx | 4 +- .../definitions/RevengeThemesSetting.tsx | 4 +- .../definitions/RevengeVersionSetting.ts | 4 +- .../TriggerErrorBoundarySetting.tsx | 21 --- src/plugins/settings/index.ts | 14 +- .../screens/RevengeDeveloperSettingScreen.tsx | 7 +- 16 files changed, 157 insertions(+), 55 deletions(-) create mode 100644 src/plugins/settings/definitions/EvaluateJavaScriptSetting.tsx delete mode 100644 src/plugins/settings/definitions/TriggerErrorBoundarySetting.tsx diff --git a/src/plugins/settings/SettingsConstants.ts b/src/plugins/settings/SettingsConstants.ts index a18e8c3..a9f4d7e 100644 --- a/src/plugins/settings/SettingsConstants.ts +++ b/src/plugins/settings/SettingsConstants.ts @@ -15,7 +15,9 @@ export const MobileSetting = { HERMES_VERSION: 'HERMES_VERSION', CALL_GARBAGE_COLLECTOR: 'CALL_GARBAGE_COLLECTOR', - TRIGGER_ERROR_BOUNDARY: 'TRIGGER_ERROR_BOUNDARY', + EVALUATE_JAVASCRIPT: 'EVALUATE_JAVASCRIPT', + EVALUATE_JAVASCRIPT_INSPECT_DEPTH: 'EVALUATE_JAVASCRIPT_INSPECT_DEPTH', + EVALUATE_JAVASCRIPT_AWAIT_RESULT: 'EVALUATE_JAVASCRIPT_AWAIT_RESULT', REVENGE_NOT_IMPLEMENTED: 'REVENGE_NOT_IMPLEMENTED', } as const @@ -26,7 +28,6 @@ export const UserSettingsSections = { [MobileSetting.REVENGE_THEMES]: 'Revenge Themes', [MobileSetting.REVENGE_FONTS]: 'Revenge Fonts', [MobileSetting.REVENGE_DEVELOPER]: 'Revenge Developer', - [MobileSetting.TRIGGER_ERROR_BOUNDARY]: 'Trigger Error Boundary', } as const export const AlwaysHidden = () => false diff --git a/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx b/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx index ffa2e92..84e06fe 100644 --- a/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx +++ b/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx @@ -2,9 +2,9 @@ import { React } from '@revenge-mod/react' import AssetIcon from '../components/icons/AssetIcon' -import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' +import type { SettingsItem } from '@revenge-mod/discord/ui/settings' -const CallGarbageCollectorSetting: SettingsRowConfig = { +const CallGarbageCollectorSetting: SettingsItem = { parent: null, IconComponent: () => , title: () => 'Call Garbage Collector', diff --git a/src/plugins/settings/definitions/EvaluateJavaScriptSetting.tsx b/src/plugins/settings/definitions/EvaluateJavaScriptSetting.tsx new file mode 100644 index 0000000..52cd181 --- /dev/null +++ b/src/plugins/settings/definitions/EvaluateJavaScriptSetting.tsx @@ -0,0 +1,121 @@ +import { React } from '@revenge-mod/react' + +import { AlertActionCreators } from '@revenge-mod/discord/actions' +import { nodeUtils } from '@revenge-mod/discord/polyfills' +import { Components } from '@revenge-mod/discord/ui' + +import { getErrorStack } from '@revenge-mod/utils/errors' + +import AssetIcon from '../components/icons/AssetIcon' + +import type { SettingsItem } from '@revenge-mod/discord/ui/settings' + +const ALERT_KEY = 'evaluate-javascript' + +const EvaluateJavaScriptSetting: SettingsItem = { + parent: null, + IconComponent: () => , + title: () => 'Evaluate JavaScript', + useDescription: () => 'Runs a JavaScript code snippet.', + onPress: () => AlertActionCreators.openAlert(ALERT_KEY, ), + type: 'pressable', +} + +const { + AlertActionButton, + AlertModal, + Button, + Slider, + Stack, + TableRow, + TableRowGroup, + TableSwitchRow, + Text, + TextArea, +} = Components + +function EvaluateJavaScriptAlert() { + const code = React.useRef('') + const [awaitResult, setAwaitResult] = React.useState(true) + const [showHidden, setShowHidden] = React.useState(true) + const [inspectDepth, setInspectDepth] = React.useState(3) + const [loading, setLoading] = React.useState(false) + + return ( + +