vite-plugin-kirby
Version:
87 lines (86 loc) • 3.03 kB
JavaScript
// 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
};