Files
gochat/frontend/scripts/check-build.mjs
T
2026-08-21 15:06:05 +08:00

30 lines
965 B
JavaScript

import assert from 'node:assert/strict';
import { existsSync, readFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
const dist = fileURLToPath(new URL('../dist/', import.meta.url));
const html = readFileSync(
new URL('../dist/index.html', import.meta.url),
'utf8'
);
const assets = [...html.matchAll(/(?:href|src)="(\/assets\/[^"]+)"/g)].map(
match => match[1]
);
assert.match(html, /<div id="app"><\/div>/);
assert.match(html, /<script\s+src="\/runtime-config\.js"><\/script>/);
assert.ok(
html.indexOf('/runtime-config.js') < html.indexOf('type="module"'),
'runtime config must load before the app module'
);
assert.ok(
assets.some(asset => asset.endsWith('.js')),
'missing JS asset'
);
assert.ok(
assets.some(asset => asset.endsWith('.css')),
'missing CSS asset'
);
assert.ok(!/<script(?![^>]*\bsrc=)[^>]*>/i.test(html), 'inline script found');
assets.forEach(asset => assert.ok(existsSync(dist + asset.slice(1)), asset));