5180 fichiers 38.5 Mo 0 téléchargements 55 vues mis à jour il y a 3 heures ui
nitro-v36-with-renderer-v36 / scripts / minify-dist.mjs
minify-dist.mjs 3.1 Ko Télécharger le fichier
import { encodeBytes } from './asset-codec.mjs';
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'fs';
import { join } from 'path';
import { gzipSync } from 'zlib';

const dist = 'dist';
const buildVersion = Date.now().toString(36);

const walk = dir =>
{
    const out = [];

    for(const entry of readdirSync(dir))
    {
        const path = join(dir, entry);
        const stat = statSync(path);

        if(stat.isDirectory()) out.push(...walk(path));
        else out.push(path);
    }

    return out;
};

const minifyJson = path =>
{
    try
    {
        writeFileSync(path, JSON.stringify(JSON.parse(readFileSync(path, 'utf8'))));
    }
    catch {}
};

const encryptFile = path =>
{
    const bytes = gzipSync(readFileSync(path), { level: 9 });
    writeFileSync(path + '.dat', encodeBytes(bytes));
};

if(!existsSync(dist)) throw new Error('dist folder not found');

for(const file of walk(dist))
{
    if(file.endsWith('.json')) minifyJson(file);
}

for(const file of walk(dist))
{
    if(file.endsWith('.js') && !file.endsWith('asset-loader.js')) encryptFile(file);
    if(file.endsWith('.css')) encryptFile(file);
}

const viteManifest = join(dist, '.vite', 'manifest.json');

if(existsSync(viteManifest)) copyFileSync(viteManifest, join(dist, 'manifest.json'));

const assetMirrorDir = join(dist, 'src', 'assets');
mkdirSync(assetMirrorDir, { recursive: true });

for(const file of [ 'app.css.dat', 'app.js.dat' ])
{
    const source = join(dist, 'assets', file);
    const target = join(assetMirrorDir, file);

    if(existsSync(source)) copyFileSync(source, target);
}

const publicLoaderAssets = [
    [ 'src/assets/images/loading/octane-logo.png', 'octane-logo.png' ],
    [ 'src/assets/images/loading/loading.gif', 'loading.gif' ],
    [ 'src/assets/images/notifications/octane_v3.png', 'octane_v3.png' ]
];

for(const [ source, file ] of publicLoaderAssets)
{
    const target = join(dist, 'assets', file);
    const mirrorTarget = join(assetMirrorDir, file);

    if(existsSync(source))
    {
        copyFileSync(source, target);
        copyFileSync(source, mirrorTarget);
    }
}

// No inline or injected scripts and event handlers, no plugins, no <base> hijack. The loader runs the
// client from blob: modules, Pixi builds shader helpers with new Function ('unsafe-eval') and third-party
// scripts (Turnstile, ads) load over https. Build with OCTANE_CSP=off to leave it out.
const contentSecurityPolicy = [
    "script-src 'self' 'unsafe-eval' 'wasm-unsafe-eval' https: blob:",
    "worker-src 'self' blob:",
    "object-src 'none'",
    "base-uri 'self'"
].join('; ');
const cspMeta = (process.env.OCTANE_CSP === 'off') ? '' : `<meta http-equiv="Content-Security-Policy" content="${ contentSecurityPolicy }">`;

writeFileSync(join(dist, 'index.html'), `<!DOCTYPE html><html><head><meta charset="utf-8">${ cspMeta }<meta name="viewport" content="width=device-width, initial-scale=1"><script async defer src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit"></script></head><body><div id="root"></div><script src="configuration/bootstrap.js?v=${ buildVersion }"></script></body></html>`);
15Sujets
1Dépôts
20Membres
6En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser