s-j-d

sjd module

This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.sleazyfork.org/scripts/548054/1672309/s-j-d.js

// ==UserScript==
// @name         s-j-d
// @namespace    http://tampermonkey.net/
// @version      0.1.23
// @description  sjd module
// @author       You
// @match        https://splix.io/
// @grant        none
// @run-at       document-start
// ==/UserScript==

await(async function () {
    if (document.location.pathname !== "/") return;

    const verToInt = v => v.split(".").reduce((acc, n, i) => acc + parseInt(n) * Math.pow(100, 2 - i), 0)
    const getDemodVer = text => text?.match(/@version\s+(\d+\.\d+\.\d+)/)?.[1] || "0.0.0"
    const isNotInjected = () => !window.jsDemodularized && ![...document.scripts].some(s => s.innerText.includes("globalThis.IS_DEV_BUILD"))
    const isStorageActual = () => verToInt(localStorage.clientCode?.match(/@demod.*?\sv:(\d+\.\d+\.\d+)/)?.[1] || "0.0.0") >= verToInt(currentVersion) &&
        Math.floor(Date.now() / (2 * 60 * 1000)) === Math.floor((parseInt(localStorage.clientCode?.match(/@demod.*?\sts:(\d+)/)?.[1]) || 0) / (2 * 60 * 1000))

    const currentVersion = "0.1.23"; localStorage.demodularizerVersion = "0.2.3";

    if (verToInt(getDemodVer(localStorage.demod)) > verToInt(currentVersion)) {
        await (new Function("return (async () => { " + localStorage.demod + " })()"))()
    }
    else if (isStorageActual()) {
        if (isNotInjected()) {
            console.log("inject " +  currentVersion )
            inject()
            await update();
        }
    } else {
        console.log("bundle " + currentVersion )
        await bundle()
        location.reload()
    }

    function inject() {
        document.open("text/html")
        document.write(localStorage.clientCode)
        document.close()
        window.jsDemodularized = true
    }

    async function update() {
        let latest, version, prevVersion
        try {
            latest = await (await fetch(`https://update.greasyfork.org/scripts/548054/s-j-d.js?v=${Math.floor(Date.now() / (2 * 60 * 1000))}`)).text()
            version = getDemodVer(latest)
            prevVersion = getDemodVer(localStorage.demod)
        } catch { }

        if (version) {
            console.log('demod saved ' + version)
            localStorage.demod = latest
            if (verToInt(version) > verToInt(prevVersion)) {
                console.log("demod ver updated, reload " + version + " before: " + prevVersion)
                location.reload();
            }
        }
    }

    async function bundle() {
        async function bundleJS(url, visited = new Set()) {
            if (visited.has(url)) return ""
            visited.add(url)

            let response = await fetch(url)
            if (!response.ok) throw new Error(`Response status: ${response.status}, URL: ${url}`)
            let script = (await response.text()).replaceAll(/\bexport\b/g, "")

            const importRegex = /^import[\s\S]*?["'](.*)["'].*$/gm
            let match
            let result = script
            while ((match = importRegex.exec(script)) !== null) {
                const importPath = match[1]
                let importedCode
                if (importPath.includes('deps/')) {
                    const parts = importPath.replace('../../deps/', '').split('/')
                    const cdnUrl = `https://cdn.jsdelivr.net/npm/@adlad/${parts[0].replace('adlad-', '')}@${parts[1]}/${parts.slice(2).join('/')}`
                    importedCode = await bundleJS(cdnUrl, visited)
                } else if (importPath.startsWith('.')) {
                    importedCode = await bundleJS(new URL(importPath, url).toString(), visited)
                }
                result = result.replace(match[0], importedCode)
            }
            return result
        }

        window.stop()
        const clientPath = "https://raw.githubusercontent.com/jespertheend/splix/refs/tags/v0.19.0/client/"
        const bundled = (await bundleJS(clientPath + "src/main.js"))
            .replaceAll(/((\S)(\S)\3\2\S+(s)\S+\4\S+\4\S+)\d/g, "$10")
            .replace(/IS_DEV_BUILD\s*=\s*true/, "IS_DEV_BUILD = false") +
            `\n/* @demod v:${currentVersion} ts:${Date.now()} */`
        localStorage.clientCode = (await (await fetch(clientPath + "index.html")).text())
            .replace(/<script.*?\/main.*?<\/script>/, "")
            .replace("</body>", `<script>${bundled}</script></body>`)
    }
})();