Expose webpack modules to userscripts
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/473902/1241348/Webpack.js
// ==UserScript==
// @name Webpack
// @namespace osu
// @version 1.0.6
// @description Expose webpack modules to userscripts
// @author Magnus Cosmos
// ==/UserScript==
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) {
if (this.injected) {
return;
}
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);
}
Webpack.prototype.injected = true;
} catch (err) {
throw new Error(`Injection failed: ${err.message}`);
}
}
}