rakkasjs
Version:
Bleeding-edge React framework powered by Vite
100 lines (98 loc) • 2.83 kB
JavaScript
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
};