From 93859883c12cbc39e0142840b633fc288e9ecc75 Mon Sep 17 00:00:00 2001 From: Ven Date: Sat, 29 Oct 2022 20:27:48 +0200 Subject: [PATCH] build: inject createElement alias (#176) --- scripts/build/common.mjs | 10 +++++++--- scripts/build/inject/react.mjs | 21 +++++++++++++++++++++ scripts/build/tsconfig.esbuild.json | 7 +++++++ src/components/Settings.tsx | 3 +-- src/globals.d.ts | 9 ++------- src/webpack/common.tsx | 6 +----- tsconfig.json | 6 +----- 7 files changed, 40 insertions(+), 22 deletions(-) create mode 100644 scripts/build/inject/react.mjs create mode 100644 scripts/build/tsconfig.esbuild.json diff --git a/scripts/build/common.mjs b/scripts/build/common.mjs index db871349..33763b27 100644 --- a/scripts/build/common.mjs +++ b/scripts/build/common.mjs @@ -17,7 +17,6 @@ */ import { exec, execSync } from "child_process"; -import esbuild from "esbuild"; import { existsSync } from "fs"; import { readdir, readFile } from "fs/promises"; import { join } from "path"; @@ -142,7 +141,7 @@ export const fileIncludePlugin = { }; /** - * @type {esbuild.BuildOptions} + * @type {import("esbuild").BuildOptions} */ export const commonOpts = { logLevel: "info", @@ -152,5 +151,10 @@ export const commonOpts = { sourcemap: watch ? "inline" : "", legalComments: "linked", plugins: [fileIncludePlugin, gitHashPlugin, gitRemotePlugin], - external: ["~plugins", "~git-hash", "~git-remote"] + external: ["~plugins", "~git-hash", "~git-remote"], + inject: ["./scripts/build/inject/react.mjs"], + jsxFactory: "VencordCreateElement", + jsxFragment: "VencordFragment", + // Work around https://github.com/evanw/esbuild/issues/2460 + tsconfig: "./scripts/build/tsconfig.esbuild.json" }; diff --git a/scripts/build/inject/react.mjs b/scripts/build/inject/react.mjs new file mode 100644 index 00000000..1343b5f2 --- /dev/null +++ b/scripts/build/inject/react.mjs @@ -0,0 +1,21 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2022 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +export const VencordFragment = Symbol.for("react.fragment"); +export let VencordCreateElement = + (...args) => (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args); diff --git a/scripts/build/tsconfig.esbuild.json b/scripts/build/tsconfig.esbuild.json new file mode 100644 index 00000000..e3e28a14 --- /dev/null +++ b/scripts/build/tsconfig.esbuild.json @@ -0,0 +1,7 @@ +// Work around https://github.com/evanw/esbuild/issues/2460 +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "jsx": "react" + } +} diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index e720c6fb..b4504a2c 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -23,7 +23,6 @@ import { useAwaiter } from "../utils/misc"; import { Alerts, Button, Forms, Margins, Parser, React, Switch } from "../webpack/common"; import ErrorBoundary from "./ErrorBoundary"; import { Flex } from "./Flex"; -import { launchMonacoEditor } from "./Monaco"; export default ErrorBoundary.wrap(function Settings() { const [settingsDir, , settingsDirPending] = useAwaiter(() => VencordNative.ipc.invoke(IpcEvents.GET_SETTINGS_DIR), "Loading..."); @@ -85,7 +84,7 @@ export default ErrorBoundary.wrap(function Settings() { } {IS_WEB &&