diff --git a/scripts/generatePluginList.ts b/scripts/generatePluginList.ts index 8b40b536e..de2fbd416 100644 --- a/scripts/generatePluginList.ts +++ b/scripts/generatePluginList.ts @@ -23,6 +23,7 @@ import { normalize as posixNormalize, sep as posixSep } from "path/posix"; import { BigIntLiteral, createSourceFile, Identifier, isArrayLiteralExpression, isCallExpression, isExportAssignment, isIdentifier, isObjectLiteralExpression, isPropertyAccessExpression, isPropertyAssignment, isSatisfiesExpression, isStringLiteral, isVariableStatement, NamedDeclaration, NodeArray, ObjectLiteralExpression, ScriptTarget, StringLiteral, SyntaxKind } from "typescript"; import { getPluginTarget } from "./utils.mjs"; +import { PluginTarget, PluginTargets } from "@utils/pluginTargets"; interface Dev { name: string; @@ -40,7 +41,7 @@ interface PluginData { hasCommands: boolean; required: boolean; enabledByDefault: boolean; - target: "discordDesktop" | "vesktop" | "desktop" | "web" | "browser" | "dev"; + target?: PluginTarget; filePath: string; } @@ -166,7 +167,7 @@ async function parseFile(fileName: string) { const target = getPluginTarget(fileName); if (target) { - if (!["web", "browser", "discordDesktop", "vesktop", "desktop", "dev"].includes(target)) throw fail(`invalid target ${target}`); + if (!PluginTargets.includes(target as PluginTarget)) throw fail(`invalid target ${target}`); data.target = target as any; } diff --git a/src/components/settings/tabs/plugins/index.tsx b/src/components/settings/tabs/plugins/index.tsx index 90ce4311a..28b33c080 100644 --- a/src/components/settings/tabs/plugins/index.tsx +++ b/src/components/settings/tabs/plugins/index.tsx @@ -33,6 +33,7 @@ import { isTruthy } from "@utils/guards"; import { Logger } from "@utils/Logger"; import { Margins } from "@utils/margins"; import { classes } from "@utils/misc"; +import { PluginTarget } from "@utils/pluginTargets"; import { useAwaiter, useCleanupEffect } from "@utils/react"; import { PluginTag, PluginTags } from "@utils/types"; import { Button, ConfirmModal, lodash, openModal, Parser, React, SearchableSelect, Select, TextInput, Tooltip, useMemo, useRef, useState } from "@webpack/common"; @@ -88,12 +89,13 @@ function ExcludedPluginsList({ search }: { search: string; }) { .filter(([name]) => name.toLowerCase().includes(search)) : []; - const ExcludedReasons: Record<"web" | "discordDesktop" | "vesktop" | "desktop" | "dev", string> = { + const ExcludedReasons: Record = { desktop: "Discord Desktop app or Vesktop", discordDesktop: "Discord Desktop app", vesktop: "Vesktop app", web: "Vesktop app and the Web version of Discord", - dev: "Developer version of Vencord" + dev: "Developer version of Vencord", + browser: "Web Browser version of Vencord" }; return ( diff --git a/src/modules.d.ts b/src/modules.d.ts index f76d56c29..8b72abfb0 100644 --- a/src/modules.d.ts +++ b/src/modules.d.ts @@ -17,13 +17,15 @@ */ declare module "~plugins" { + import { PluginTarget } from "@utils/pluginTargets"; const plugins: Record; + export default plugins; export const PluginMeta: Record; - export const ExcludedPlugins: Record; + export const ExcludedPlugins: Record; } declare module "~git-hash" { diff --git a/src/utils/pluginTargets.ts b/src/utils/pluginTargets.ts new file mode 100644 index 000000000..863aa901c --- /dev/null +++ b/src/utils/pluginTargets.ts @@ -0,0 +1,8 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2026 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export const PluginTargets = ["web", "browser", "discordDesktop", "vesktop", "desktop", "dev"] as const; +export type PluginTarget = typeof PluginTargets[number];