You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
87 lines
2.1 KiB
type Filter = (module: any) => boolean;
|
|
interface InternalModule {
|
|
exports: {
|
|
default?: UnknownObject;
|
|
__esModule?: boolean;
|
|
};
|
|
}
|
|
|
|
let getModules: () => [];
|
|
|
|
let modules: {
|
|
c: [];
|
|
};
|
|
window.webpackChunkdiscord_app.push([
|
|
[Math.random().toString(36)],
|
|
{},
|
|
(e: { c: [] }) => {
|
|
modules = e;
|
|
}
|
|
]);
|
|
getModules = () => modules.c;
|
|
|
|
function filter(filter: Filter, moduleList: InternalModule[], onlyFirst: boolean = false): UnknownObject["exports"] | UnknownObject["exports"][] {
|
|
let modules: InternalModule["exports"][] = [];
|
|
let first
|
|
for (const mod in moduleList) {
|
|
const module = moduleList[mod].exports;
|
|
if (module) {
|
|
if (module.default && module.__esModule && filter(module.default)) {
|
|
if (onlyFirst) {
|
|
first = module.default;
|
|
break
|
|
}
|
|
else {
|
|
modules.push(module.default);
|
|
}
|
|
} else if (filter(module)) {
|
|
if (onlyFirst) {
|
|
first = module;
|
|
break
|
|
}
|
|
else {
|
|
modules.push(module);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return onlyFirst ? first as InternalModule["exports"] : modules;
|
|
}
|
|
|
|
let webpack = {
|
|
modules: getModules(),
|
|
getModules,
|
|
filter: filter,
|
|
find: (filter: Filter) => webpack.filter(filter, webpack.modules, true),
|
|
findAll: (filter: Filter) => webpack.filter(filter, webpack.modules),
|
|
findByStrings: (...props: string[]) => {
|
|
return webpack.find((module) =>
|
|
props.every((prop) => {
|
|
try {
|
|
return Object.values(module).find((e: any) => e.toString().includes(prop))
|
|
} catch { return false }
|
|
})
|
|
);
|
|
},
|
|
findByStringsAll: (...props: string[]) => {
|
|
return webpack.findAll((module) =>
|
|
props.every((prop) => {
|
|
try {
|
|
return Object.values(module).find((e: any) => e.toString().includes(prop))
|
|
} catch { return false }
|
|
})
|
|
);
|
|
},
|
|
findByChildProps: (...props: string[]) => {
|
|
return webpack.find((module) =>
|
|
props.every((prop) => Object.values(module).find((e: any) => Object.values(e).find((f: any) => f && !!f[prop])))
|
|
)
|
|
},
|
|
reloadModules: () => {
|
|
//NOTE: i have no idea why this could even feasibly need to be used, but i'm adding it anyways
|
|
webpack.modules = getModules();
|
|
}
|
|
};
|
|
|
|
export default webpack;
|