Webpack

Expose webpack modules to userscripts

Verzia zo dňa 26.08.2023. Pozri najnovšiu verziu.

Tento skript by nemal byť nainštalovaný priamo. Je to knižnica pre ďalšie skripty, ktorú by mali používať cez meta príkaz // @require https://update.greatest.deepsurf.us/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}`);
        }
    }
}