import assert from 'node:assert/strict';
import test from 'node:test';
import { mkdtempSync, writeFileSync, rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { linkedAssets, measureBuild } from './measure-build.mjs';
test('separates HTML-linked code from lazy chunks and excludes fonts/images', () => {
const directory = mkdtempSync(join(tmpdir(), 'serverkit-measure-'));
try {
writeFileSync(join(directory, 'index.html'), '');
for (const file of ['app.js', 'shared.js', 'lazy.js', 'app.css', 'font.woff2', 'icon.png']) {
writeFileSync(join(directory, file), '12345');
}
const report = measureBuild(directory);
assert.equal(report.all_code.files, 4);
assert.equal(report.all_code.bytes, 20);
assert.equal(report.html_linked_code.files, 3);
assert.equal(report.html_linked_code.bytes, 15);
assert.ok(report.all_code.gzip_bytes > report.html_linked_code.gzip_bytes);
} finally { rmSync(directory, { recursive: true }); }
});
test('deduplicates links, ignores external resources and detects missing assets', () => {
assert.deepEqual([...linkedAssets('')], ['app.js']);
const directory = mkdtempSync(join(tmpdir(), 'serverkit-measure-'));
try {
writeFileSync(join(directory, 'index.html'), '');
assert.throws(() => measureBuild(directory), /missing.js/);
} finally { rmSync(directory, { recursive: true }); }
});