Expose webpack modules to userscripts
Version vom
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/473902/1240905/Webpack.js
function isNonEmptyObj(obj) {
if (obj === null || (typeof obj !== "function" && typeof obj !== "object")) {
return false;
}
for (const key in obj) {
return true;
}
return false;
}
// Based on `Webpack-module-crack` and `moduleRaid`
class Webpack {
constructor(options) {
const { moduleId, chunkId, entryPoint } = options || {};
this.moduleId = moduleId || Math.random().toString(36).substring(2, 6);
this.chunkId = chunkId || Math.floor(101 + Math.random() * 899);
this.modules = {};
this.data = [
[this.chunkId],
{
[this.moduleId]: (module, exports, require) => {
const installedModules = require.c;
for (const id in installedModules) {
const exports = installedModules[id].exports;
if (isNonEmptyObj(exports)) {
this.modules[id] = exports;
}
}
},
},
[[this.moduleId]],
];
if (entryPoint) {
this.inject(entryPoint);
} else {
this.inject("webpackJsonp");
}
}
inject(entryPoint) {
try {
if (unsafeWindow) {
unsafeWindow[entryPoint].push(this.data);
} else {
window[entryPoint].push(this.data);
}
} catch (err) {
throw new Error(`Injection failed: ${err.message}`);
}
}
}