Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy

This commit is contained in:
Nuckyz 2024-05-27 23:33:43 -03:00
commit fa45beb8ca
No known key found for this signature in database
GPG key ID: 440BF8296E1C4AD9
3 changed files with 24 additions and 9 deletions

View file

@ -42,8 +42,8 @@ const page = await browser.newPage();
await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36");
async function maybeGetError(handle: JSHandle) {
return (handle as JSHandle<Error>)?.getProperty("message")
.then(m => m.jsonValue());
return (handle as JSHandle<Error>).getProperty("message")
.then(m => m?.jsonValue() ?? "Unknown Error");
}
const report = {
@ -354,7 +354,9 @@ async function runtime(token: string) {
// setImmediate to avoid blocking the factory patching execution while checking for lazy chunks
setTimeout(() => {
let isResolved = false;
searchAndLoadLazyChunks(String(factory)).then(() => isResolved = true);
searchAndLoadLazyChunks(String(factory))
.then(() => isResolved = true)
.catch(() => isResolved = true);
chunksSearchPromises.push(() => isResolved);
}, 0);
@ -362,7 +364,9 @@ async function runtime(token: string) {
for (const factoryId in wreq.m) {
let isResolved = false;
searchAndLoadLazyChunks(String(wreq.m[factoryId])).then(() => isResolved = true);
searchAndLoadLazyChunks(String(wreq.m[factoryId]))
.then(() => isResolved = true)
.catch(() => isResolved = true);
chunksSearchPromises.push(() => isResolved);
}

View file

@ -88,7 +88,6 @@ Reflect.defineProperty(Function.prototype, "m", {
If Discord ever decides to set module factories using the variable of the modules object directly, instead of wreq.m, switch the proxy to the prototype
Reflect.setPrototypeOf(moduleFactories, new Proxy(moduleFactories, moduleFactoriesHandler));
*/
}
Reflect.defineProperty(this, "m", {
@ -146,13 +145,23 @@ const moduleFactoriesHandler: ProxyHandler<PatchedModuleFactories> = {
get: (target, p, receiver) => {
return undefined;
},
// Same thing as get
has: (target, p) => {
return false;
}
*/
// The set trap for patching or defining getters for the module factories when new module factories are loaded
set: (target, p, newValue, receiver) => {
// If the property is not a number, we are not dealing with a module factory
if (Number.isNaN(Number(p))) {
return Reflect.set(target, p, newValue, receiver);
Reflect.defineProperty(target, p, {
value: newValue,
configurable: true,
enumerable: true,
writable: true
});
return true;
}
const existingFactory = Reflect.get(target, p, receiver);

View file

@ -94,6 +94,8 @@ export const factoryListeners = new Set<(factory: ModuleFactory) => void>();
export function _initWebpack(webpackRequire: WebpackRequire) {
wreq = webpackRequire;
if (webpackRequire.c == null) return;
cache = webpackRequire.c;
Reflect.defineProperty(webpackRequire.c, Symbol.toStringTag, {
@ -740,10 +742,10 @@ export function search(...filters: Array<string | RegExp>) {
outer:
for (const id in factories) {
const factory = factories[id];
const str = String(factory);
const factoryStr = String(factory);
for (const filter of filters) {
if (typeof filter === "string" && !str.includes(filter)) continue outer;
if (filter instanceof RegExp && !filter.test(str)) continue outer;
if (typeof filter === "string" && !factoryStr.includes(filter)) continue outer;
if (filter instanceof RegExp && !filter.test(factoryStr)) continue outer;
}
results[id] = factory;
}