#!/usr/bin/env bun import plugin from 'bun-plugin-tailwind'; import { existsSync } from 'fs'; import { rm } from 'fs/promises'; import path from 'path'; const outdir = path.join(process.cwd(), 'dist_landing'); if (existsSync(outdir)) { console.log(`šŸ—‘ļø Cleaning previous build at ${outdir}`); await rm(outdir, { recursive: true, force: true }); } console.log('\nšŸš€ Starting landing page build...\n'); const start = performance.now(); const entrypoints = [...new Bun.Glob('**.html').scanSync('src/apps/landing')] .map((a) => path.resolve('src/apps/landing', a)) .filter((dir) => !dir.includes('node_modules')); console.log(`šŸ“„ Found ${entrypoints.length} HTML ${entrypoints.length === 1 ? 'file' : 'files'} to process\n`); const formatFileSize = (bytes: number): string => { const units = ['B', 'KB', 'MB', 'GB']; let size = bytes; let unitIndex = 0; while (size >= 1024 && unitIndex < units.length - 1) { size /= 1024; unitIndex++; } return `${size.toFixed(2)} ${units[unitIndex]}`; }; const result = await Bun.build({ entrypoints, outdir, plugins: [plugin], minify: true, target: 'browser', sourcemap: 'linked', define: { 'process.env.NODE_ENV': JSON.stringify('production'), }, }); const end = performance.now(); const outputTable = result.outputs.map((output) => ({ File: path.relative(process.cwd(), output.path), Type: output.kind, Size: formatFileSize(output.size), })); console.table(outputTable); console.log(`\nāœ… Build completed in ${(end - start).toFixed(2)}ms\n`);