From 9bf28c0e7adc47173963875d526ced713efea171 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 15 Sep 2022 18:17:52 +0200 Subject: [PATCH] Remove newlines in webpack chunks --- src/plugins/STFU.ts | 2 +- src/plugins/settings.ts | 2 +- src/utils/patchWebpack.ts | 15 +++++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/plugins/STFU.ts b/src/plugins/STFU.ts index d154b4f1..38b20641 100644 --- a/src/plugins/STFU.ts +++ b/src/plugins/STFU.ts @@ -7,7 +7,7 @@ export default definePlugin({ patches: [{ find: "setDevtoolsCallbacks", replacement: { - match: /\.default=function.+$/s, + match: /\.default=function.+$/, replace: ".default=function(){}}" } }] diff --git a/src/plugins/settings.ts b/src/plugins/settings.ts index fe125e77..63c36d6b 100644 --- a/src/plugins/settings.ts +++ b/src/plugins/settings.ts @@ -16,7 +16,7 @@ export default definePlugin({ } }, { - match: /\w\.createElement.+?["']Host ["'].+?\):null/s, + match: /\w\.createElement.+?["']Host ["'].+?\):null/, replace: m => { const idx = m.indexOf("Host") - 1; const template = m.slice(0, idx); diff --git a/src/utils/patchWebpack.ts b/src/utils/patchWebpack.ts index 9ae9fbf6..798dcde0 100644 --- a/src/utils/patchWebpack.ts +++ b/src/utils/patchWebpack.ts @@ -9,11 +9,7 @@ const logger = new Logger("WebpackInterceptor", "#8caaee"); Object.defineProperty(window, WEBPACK_CHUNK, { get: () => webpackChunk, set: (v) => { - // There are two possible values for push. - // - Native push with toString result of function push() { [native code] } - // - Webpack's push with toString result of function() { [native code] } - // We don't want to override the native one, so check for "push" - if (v && !v.push.toString().includes("push")) { + if (v?.push !== Array.prototype.push) { logger.info(`Patching ${WEBPACK_CHUNK}.push`); _initWebpack(v); patchPush(); @@ -35,7 +31,14 @@ function patchPush() { for (const id in modules) { let mod = modules[id]; - let code = mod.toString(); + // Discords Webpack chunks for some ungodly reason contain random + // newlines. Cyn recommended this workaround and it seems to work fine, + // however this could potentially break code, so if anything goes weird, + // this is probably why. + // Additionally, `[actual newline]` is one less char than "\n", so if Discord + // ever targets newer browsers, the minifier could potentially use this trick and + // cause issues. + let code = mod.toString().replaceAll("\n", ""); const originalMod = mod; const patchedBy = new Set();