import { existsSync } from "node:fs"; import { cp, mkdir, rm } from "node:fs/promises"; import path from "node:path"; const projectRoot = import.meta.dir; const distDir = path.join(projectRoot, "dist"); const srcDir = path.join(projectRoot, "src"); const publicDir = path.join(projectRoot, "public"); console.log("Building DevPulse Landing Page for Cloudflare Pages..."); // Clean dist directory if (existsSync(distDir)) { await rm(distDir, { recursive: true, force: true }); } await mkdir(distDir, { recursive: true }); // Bundle TypeScript app const buildResult = await Bun.build({ entrypoints: [path.join(srcDir, "app.ts")], outdir: distDir, target: "browser", minify: true, naming: "app.js", }); if (!buildResult.success) { console.error("Build failed:", buildResult.logs); process.exit(1); } // Copy HTML, CSS, and assets await cp(path.join(srcDir, "index.html"), path.join(distDir, "index.html")); await cp(path.join(srcDir, "styles.css"), path.join(distDir, "styles.css")); // Copy public assets (logo.svg, etc.) if (existsSync(publicDir)) { await cp(publicDir, distDir, { recursive: true }); } // Copy public assets & Cloudflare Pages files (_headers, etc.) if (existsSync(publicDir)) { await cp(publicDir, distDir, { recursive: true }); } // Generate ready-to-upload zip archive for Cloudflare Pages Direct Upload const rootDir = path.resolve(projectRoot, "../.."); const zipPath = path.join(rootDir, "devpulse-cloudflare-pages.zip"); Bun.spawnSync(["zip", "-r", "-q", zipPath, "."], { cwd: distDir }); console.log("Landing page build completed successfully in apps/web/dist!"); console.log(`Cloudflare Pages drag-and-drop zip package created at: ${zipPath}`);