UNPKG

rakkasjs

Version:

Bleeding-edge React framework powered by Vite

100 lines (98 loc) 2.83 kB
import { cleanOptions, startTime } from "./chunk-FC2WGIJU.js"; import { version } from "./chunk-NPN2JRYM.js"; // src/cli/preview.ts import sirv from "sirv"; import { createMiddleware } from "@hattip/adapter-node"; import fs from "fs"; import path from "path"; import pico from "picocolors"; import { preview as previewServer, resolveConfig } from "vite"; async function preview(root = process.cwd(), options) { const serverOptions = cleanOptions(options); const inlineConfig = { root, base: options.base, mode: options.mode, preview: serverOptions, configFile: options.config, logLevel: options.logLevel, clearScreen: options.clearScreen, optimizeDeps: { force: options.force } }; const initialConfig = await resolveConfig(inlineConfig, "serve").catch( (error) => { console.error(pico.red(`error resolving config: ${error.stack}`), { error }); process.exit(1); } ); const DIST_DIR = path.join(root, initialConfig.build.outDir); const HANDLER_PATH = path.join(DIST_DIR, "server", "hattip.js"); const ASSETS_DIR = path.join(DIST_DIR, "client"); if (!fs.existsSync(HANDLER_PATH)) { console.error( ` ${pico.black(pico.bgMagenta(" RAKKAS ")) + " " + pico.magenta(version) + " " + pico.red("Please run `rakkas build` before running preview server.")}` ); return; } try { const handlerImport = await import(HANDLER_PATH); const sirvHandler = sirv(ASSETS_DIR); const handler = createMiddleware(handlerImport.default); const originalNodeEnv = process.env.NODE_ENV; const server = await previewServer({ ...inlineConfig, publicDir: path.join(DIST_DIR) }); process.env.NODE_ENV = originalNodeEnv; server.httpServer.listeners("request").forEach(function(l) { server.httpServer.removeListener("request", l); server.httpServer.on("request", function(req, res) { sirvHandler(req, res, () => { handler(req, res, () => { if (!res.writableEnded) { res.writeHead(404); res.end(); } }); }); }); }); const info = server.config.logger.info; const startupDurationString = startTime ? pico.dim( `(ready in ${pico.white( pico.bold(Math.ceil(performance.now() - startTime)) )} ms)` ) : ""; info( ` ${pico.green( pico.black(pico.bgMagenta(" RAKKAS ")) + " " + pico.magenta(version) + " production preview server is running \u{1F483}" )} ${startupDurationString} `, { clear: !server.config.logger.hasWarned } ); server.printUrls(); } catch (e) { initialConfig.logger.error( pico.red(`error when starting dev server: ${e.stack}`), { error: e } ); process.exit(1); } } export { preview };