Factories are called with a this

This commit is contained in:
Nuckyz 2024-05-24 08:23:41 -03:00
parent 2f16cdf77b
commit daa1a35fc3
No known key found for this signature in database
GPG key ID: 440BF8296E1C4AD9
2 changed files with 5 additions and 5 deletions

View file

@ -281,7 +281,7 @@ function patchFactory(id: PropertyKey, factory: ModuleFactory) {
if (!patch.all) patches.splice(i--, 1); if (!patch.all) patches.splice(i--, 1);
} }
const patchedFactory: PatchedModuleFactory = (module, exports, require) => { const patchedFactory: PatchedModuleFactory = function (module, exports, require) {
for (const moduleFactories of allModuleFactories) { for (const moduleFactories of allModuleFactories) {
Object.defineProperty(moduleFactories, id, { Object.defineProperty(moduleFactories, id, {
value: patchedFactory.$$vencordOriginal, value: patchedFactory.$$vencordOriginal,
@ -297,17 +297,17 @@ function patchFactory(id: PropertyKey, factory: ModuleFactory) {
logger.error("WebpackRequire was not initialized, running modules without patches instead."); logger.error("WebpackRequire was not initialized, running modules without patches instead.");
} }
return void originalFactory(module, exports, require); return void originalFactory.call(this, module, exports, require);
} }
try { try {
factory(module, exports, require); factory.call(this, module, exports, require);
} catch (err) { } catch (err) {
// Just rethrow Discord errors // Just rethrow Discord errors
if (factory === originalFactory) throw err; if (factory === originalFactory) throw err;
logger.error("Error in patched module", err); logger.error("Error in patched module", err);
return void originalFactory(module, exports, require); return void originalFactory.call(this, module, exports, require);
} }
// Webpack sometimes sets the value of module.exports directly, so assign exports to it to make sure we properly handle it // Webpack sometimes sets the value of module.exports directly, so assign exports to it to make sure we properly handle it

View file

@ -13,7 +13,7 @@ export type Module = {
}; };
/** exports can be anything, however initially it is always an empty object */ /** exports can be anything, however initially it is always an empty object */
export type ModuleFactory = (module: Module, exports: ModuleExports, require: WebpackRequire) => void; export type ModuleFactory = (this: ModuleExports, module: Module, exports: ModuleExports, require: WebpackRequire) => void;
export type AsyncModuleBody = ( export type AsyncModuleBody = (
handleDependencies: (deps: Promise<any>[]) => Promise<any[]> & (() => void) handleDependencies: (deps: Promise<any>[]) => Promise<any[]> & (() => void)