UNPKG

vite-plugin-kirby

Version:
87 lines (86 loc) 3.03 kB
// src/index.ts import { relative, resolve, sep } from "path"; import { writeFile, readFile, unlink, access, mkdir } from "fs/promises"; import { liveReload } from "vite-plugin-live-reload"; var phpConfigTemplate = (config) => `<?php // This is an auto-generated file. Please avoid making changes here. // Configure your settings in the "vite.config.js" file instead. return [ ${Object.entries(config).filter(([, value]) => value !== void 0).map(([key, value]) => { if (typeof value === "string") value = `'${value}'`; return ` '${key}' => ${value}`; }).join(",\n")} ];`; var exitHandlersRegistered = false; var index_default = ({ watch = true, devDir = process.cwd(), kirbyConfigDir = "site/config" } = {}) => { const devPath = resolve(devDir, ".dev"); const removeDevFile = () => unlink(devPath).catch((_e) => { }); return { name: "vite-plugin-kirby", config({ build }) { return { build: { manifest: build?.manifest || true } }; }, async configResolved({ build, plugins, root }) { let { outDir, assetsDir } = build; outDir = relative(process.cwd(), resolve(root, outDir)); outDir = outDir.replace(/\//g, sep); const file = `${kirbyConfigDir}/vite.config.php`; const legacy = !!plugins.find((v) => v.name === "vite:legacy-config"); const manifest = typeof build.manifest === "string" ? build.manifest : void 0; const rootDir = relative(process.cwd(), root) || void 0; const config = phpConfigTemplate({ rootDir, outDir, assetsDir, legacy, manifest }); try { await access(file); const oldConfig = await readFile(file, "utf-8"); if (config !== oldConfig) await writeFile(file, config); } catch (err) { await mkdir(kirbyConfigDir, { recursive: true }); await writeFile(file, config); } }, configureServer(server) { const { config } = server; server.httpServer?.once("listening", () => { if (!config.server.origin) { const { https, port, host = "localhost" } = config.server; const resolvedHost = host === true ? "0.0.0.0" : host; const protocol = https ? "https" : "http"; config.server.origin = `${protocol}://${resolvedHost}:${port}`; } writeFile(devPath, `VITE_SERVER=${config.server.origin}`); }); if (!exitHandlersRegistered) { process.on("exit", removeDevFile); process.on("SIGINT", process.exit); process.on("SIGTERM", process.exit); process.on("SIGHUP", process.exit); exitHandlersRegistered = true; } if (watch) { const defaultPaths = [ "../site/(templates|snippets|controllers|models|layouts)/**/*.php", "../content/**/*" ]; const paths = watch === true ? defaultPaths : watch; liveReload(paths).configureServer(server); } }, buildStart() { removeDevFile(); } }; }; export { index_default as default };