Files
meseo-staging/scripts/build-site-tag.mjs
T
Andres Resiri 70daeb214a
CI / Quality gate (push) Has been cancelled
Initial project commit for Coolify staging
2026-08-03 10:45:41 -04:00

59 lines
1.8 KiB
JavaScript

import { build } from 'esbuild';
import { readFileSync, writeFileSync, copyFileSync, existsSync } from 'fs';
import { join } from 'path';
const SOURCE = join(process.cwd(), 'public', 't.js');
const BACKUP = join(process.cwd(), 'public', 't.source.js');
async function main() {
if (!existsSync(SOURCE)) {
console.error(`[build-site-tag] Source not found at ${SOURCE}`);
process.exit(1);
}
const content = readFileSync(SOURCE, 'utf8');
const lineCount = content.split('\n').length;
// Skip if already minified
if (lineCount < 20 && content.includes('Minified production build')) {
console.log('[build-site-tag] Already minified, skipping');
return;
}
const originalSize = Buffer.byteLength(content);
console.log(`[build-site-tag] Source: ${(originalSize / 1024).toFixed(1)} KB`);
// Keep an unminified backup for debugging
copyFileSync(SOURCE, BACKUP);
const result = await build({
entryPoints: [SOURCE],
minify: true,
write: false,
bundle: false, // t.js is a self-contained IIFE — no imports to resolve
format: 'iife',
target: ['es2017'], // Wide browser support
legalComments: 'none',
sourcemap: false,
});
if (!result.outputFiles?.[0]) {
throw new Error('[build-site-tag] esbuild returned no output');
}
const minified = result.outputFiles[0].contents;
const header = `/* meSEO Site Tag • Minified production build */\n`;
const finalOutput = Buffer.concat([Buffer.from(header), minified]);
writeFileSync(SOURCE, finalOutput);
const newSize = finalOutput.length;
const reduction = ((1 - newSize / originalSize) * 100).toFixed(1);
console.log(`[build-site-tag] Minified: ${(newSize / 1024).toFixed(1)} KB (${reduction}% reduction)`);
}
main().catch((err) => {
console.error('[build-site-tag] Build failed:', err);
process.exit(1);
});