#!/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 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' } } }) 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 { outDir, compressed } = await build({ entry, outDir: values.out, title: values.title }) console.log(`bankai: built to ${outDir} (${compressed} asset(s) precompressed) — 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 }) 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) } }