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.
demoncord-rewrite/src/api/webpack.ts

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;