#!/usr/bin/env node // bankai [entry] [options] // // bankai start dev server: Vite + HMR + streaming SSR // bankai build production build (client bundle, manifest, // service worker, precompression) // bankai serve production server for a built app: static // assets + 103 Early Hints + streaming SSR // bankai inspect size report for the built output // // options: --port --out --title // --prerender (build: comma-separated routes) // --h2 (serve: HTTP/2 + local cert, so // browsers act on the Early Hints) import { parseArgs } from 'node:util' const { values, positionals } = parseArgs({ allowPositionals: true, options: { port: { type: 'string' }, out: { type: 'string', default: 'dist' }, title: { type: 'string', default: 'choo' }, prerender: { type: 'string' }, h2: { type: 'boolean', default: false } } }) const [command, entry] = positionals const port = values.port ? Number(values.port) : 8080 try { if (command === 'start') { requireEntry(entry) const { default: dev } = await import('./lib/dev.js') const { origin } = await dev({ entry, port, title: values.title }) console.log(`bankai: dev server streaming on ${origin}`) } else if (command === 'build') { requireEntry(entry) const { default: build } = await import('./lib/build.js') const prerender = values.prerender ? values.prerender.split(',').map((r) => r.trim()).filter(Boolean) : [] const { outDir, compressed, prerendered } = await build({ entry, outDir: values.out, title: values.title, prerender }) const extra = prerendered.length ? `, ${prerendered.length} route(s) prerendered` : '' console.log(`bankai: built to ${outDir} (${compressed} asset(s) precompressed${extra}) — bankai serve to run it`) } else if (command === 'serve') { const { default: serve } = await import('./lib/serve.js') const { origin } = await serve({ outDir: values.out, port, h2: values.h2 }) console.log(`bankai: production server on ${origin}`) } else if (command === 'inspect') { const { default: inspect } = await import('./lib/inspect.js') await inspect({ outDir: values.out }) } else { console.log('usage: bankai [entry] [--port n] [--out dir] [--title text]') process.exit(command ? 1 : 0) } } catch (err) { console.error('bankai:', err.message) process.exit(1) } function requireEntry (value) { if (!value) { console.error('bankai: an entry module is required, e.g. bankai start app.js') process.exit(1) } }