import { fileURLToPath, URL } from "node:url";
import { createReadStream, existsSync, statSync } from "node:fs";
import { extname, join, normalize } from "node:path";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
const uiKitRoot = fileURLToPath(new URL("./node_modules/gnexus-ui-kit", import.meta.url));
const uiKitFontsDir = join(uiKitRoot, "dist", "assets", "fonts");
function serveUiKitFont(request, response, next) {
if (!request.url) {
next();
return;
}
const requestedPath = normalize(decodeURIComponent(request.url.split("?", 1)[0])).replace(
/^(\.\.[/\\])+/,
""
);
const filePath = join(uiKitFontsDir, requestedPath);
if (!filePath.startsWith(uiKitFontsDir) || !existsSync(filePath) || !statSync(filePath).isFile()) {
next();
return;
}
const contentType = extname(filePath) === ".ttf" ? "font/ttf" : "application/octet-stream";
response.setHeader("Content-Type", contentType);
response.setHeader("Cache-Control", "public, max-age=3600");
createReadStream(filePath).pipe(response);
}
function gnexusUiKitFontServer() {
return {
name: "gnexus-ui-kit-font-server",
configureServer(server) {
server.middlewares.use("/assets/fonts", serveUiKitFont);
},
configurePreviewServer(server) {
server.middlewares.use("/assets/fonts", serveUiKitFont);
}
};
}
export default defineConfig({
plugins: [gnexusUiKitFontServer(), vue()],
resolve: {
alias: {
vue: fileURLToPath(new URL("./node_modules/vue/dist/vue.esm-bundler.js", import.meta.url))
},
dedupe: ["vue"]
},
server: {
host: "0.0.0.0",
port: 3006,
proxy: {
"/api": {
target: "http://127.0.0.1:3005",
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, "")
}
}
}
});