🏠

Greasy Fork is available in English.

Webpack

Expose webpack modules to userscripts

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/473902/1241376/Webpack.js

提问、发表评价,或者 举报这个脚本
// ==UserScript==
// @name         Webpack
// @namespace    osu
// @version      1.0.7
// @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;
}
class webpack {
constructor() {
if (this.constructor == webpack) {
throw new Error("webpack class cannot be instantiated.");
}
this.loaded = false;
this.modules = {};
}
inject(entryPoint, data) {
try {
if (unsafeWindow) {
unsafeWindow[entryPoint].push(data);
} else {
window[entryPoint].push(data);
}
} catch (err) {
throw new Error(`Injection failed: ${err.message}`);
}
}
}
// Based on `Webpack-module-crack` and `moduleRaid`
class Webpack extends webpack {
constructor(options) {
super();
if (this.loaded) {
return;
}
let { moduleId, chunkId, entryPoint } = options || {};
moduleId = moduleId || Math.random().toString(36).substring(2, 6);
chunkId = chunkId || Math.floor(101 + Math.random() * 899);
entryPoint = entryPoint || "webpackJsonp";
const data = [
[chunkId],
{
[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;
}
}
},
},
[[moduleId]],
];
this.inject(entryPoint, data);
this.loaded = true;
}
}