diff --git a/src/plugins/unminifyErrors.ts b/src/plugins/unminifyErrors.ts new file mode 100644 index 00000000..9ff9556d --- /dev/null +++ b/src/plugins/unminifyErrors.ts @@ -0,0 +1,41 @@ +import definePlugin from "../utils/types"; +import { Devs } from "../utils/constants"; + +let ERROR_CODES: any; +const CODES_URL = + "https://raw.githubusercontent.com/facebook/react/17.0.2/scripts/error-codes/codes.json"; + +export default definePlugin({ + name: "ReactErrorDecoder", + description: 'Replaces "Minifed React Error" with the actual error.', + authors: [Devs.Cyn], + patches: [ + { + find: '"https://reactjs.org/docs/error-decoder.html?invariant="', + replacement: { + match: /(function .\(.\)){(for\(var .="https:\/\/reactjs\.org\/docs\/error-decoder\.html\?invariant="\+.,.=1;. + `${func}{var decoded=Vencord.Plugins.plugins.ReactErrorDecoder.decodeError.apply(null, arguments);if(decoded)return decoded;${original}}`, + }, + }, + ], + + async start() { + ERROR_CODES = await fetch(CODES_URL) + .then(res => res.json()) + .catch(e => console.error("[ReactErrorDecoder] Failed to fetch React error codes\n", e)); + }, + + stop() { + ERROR_CODES = undefined; + }, + + decodeError(code: number, ...args: any) { + let index = 0; + return ERROR_CODES?.[code]?.replace(/%s/g, () => { + const arg = args[index]; + index++; + return arg; + }); + }, +});