/* eslint-disable */ import { sentryVitePlugin } from "@sentry/vite-plugin"; import react from "@vitejs/plugin-react"; import chalk from "chalk"; import * as child from "child_process"; import { promises as fsPromises } from "fs"; import { createLogger, defineConfig } from "vite"; import { ViteEjsPlugin } from "vite-plugin-ejs"; import eslint from "vite-plugin-eslint"; import { VitePWA } from "vite-plugin-pwa"; import InstanceRenderManager from "./src/utils/instanceRenderMgr"; // Ensure your environment variables are set correctly for Vite 6 process.env.VITE_APP_GIT_SHA_DATE = new Date().toLocaleString("en-US", { timeZone: "America/Los_Angeles" }); const commitHash = child.execSync("git rev-parse HEAD").toString().trimEnd(); process.env.VITE_GIT_COMMIT_HASH = commitHash; const currentDatePST = new Date() .toLocaleDateString("en-US", { timeZone: "America/Los_Angeles", year: "numeric", month: "2-digit", day: "2-digit" }) .split("/") .reverse() .join("-"); const getFormattedTimestamp = () => new Date().toLocaleTimeString("en-US", { hour12: true }).replace("AM", "a.m.").replace("PM", "p.m."); export const logger = createLogger("info", { allowClearScreen: false }); export default defineConfig({ base: "/", plugins: [ // Ensure all plugins are Vite 6 compatible ViteEjsPlugin((viteConfig) => ({ env: viteConfig.env })), VitePWA({ injectRegister: "auto", registerType: "prompt", manifest: { short_name: InstanceRenderManager({ instance: process.env.VITE_APP_INSTANCE, imex: "ImEX Online", rome: "Rome Online" }), name: InstanceRenderManager({ instance: process.env.VITE_APP_INSTANCE, imex: "ImEX Online", rome: "Rome Online" }), description: "The ultimate bodyshop management system.", icons: [ { src: InstanceRenderManager({ instance: process.env.VITE_APP_INSTANCE, imex: "favicon.png", rome: "ro-favicon.png" }), sizes: "64x64 32x32 24x24 16x16", type: "image/x-icon" }, { src: InstanceRenderManager({ instance: process.env.VITE_APP_INSTANCE, imex: "logo192.png", rome: "logo192.png" }), type: "image/png", sizes: "192x192" }, { src: InstanceRenderManager({ instance: process.env.VITE_APP_INSTANCE, imex: "logo512.png", rome: "ro-favicon.png" }), type: "image/png", sizes: "512x512" } ], theme_color: InstanceRenderManager({ instance: process.env.VITE_APP_INSTANCE, imex: "#1890ff", rome: "#fff" }), background_color: "#fff", gcm_sender_id: "103953800507" } }), react(), eslint(), sentryVitePlugin({ org: "imex", reactComponentAnnotation: { enabled: true }, release: { name: `${process.env.VITE_APP_IS_TEST ? "test" : "production"}-${currentDatePST}-${commitHash}`.trim() }, project: InstanceRenderManager({ instance: process.env.VITE_APP_INSTANCE, imex: "imexonline", rome: "rome-online" }) }) ], define: { APP_VERSION: JSON.stringify(process.env.npm_package_version), __COMMIT_HASH__: JSON.stringify(commitHash) }, server: { host: true, port: 3000, open: true, proxy: { "/ws": { target: "ws://localhost:4000", rewriteWsOrigin: true, secure: false, ws: true }, "/wss": { target: "ws://localhost:4000", rewriteWsOrigin: true, secure: false, ws: true }, "/api": { target: "http://localhost:4000", changeOrigin: true, secure: false, ws: false, rewrite: (path) => { const replacedValue = path.replace(/^\/api/, ""); logger.info( `${chalk.grey.bold(getFormattedTimestamp())} ${chalk.cyan.bold("[vite]")} ${chalk.green.bold("[API]")} ${chalk.blue(replacedValue)}` ); return replacedValue; } } }, https: { key: await fsPromises.readFile("../certs/key.pem"), cert: await fsPromises.readFile("../certs/cert.pem"), allowHTTP1: false // Force HTTP/2 } }, preview: { port: 6000, host: true, open: true, https: { key: await fsPromises.readFile("../certs/key.pem"), cert: await fsPromises.readFile("../certs/cert.pem"), allowHTTP1: false // Force HTTP/2 }, proxy: { "/ws": { target: "ws://localhost:4000", rewriteWsOrigin: true, secure: false, ws: true }, "/wss": { target: "ws://localhost:4000", rewriteWsOrigin: true, secure: false, ws: true }, "/api": { target: "http://localhost:4000", changeOrigin: true, secure: false, ws: false } } }, build: { rollupOptions: { output: { manualChunks: { antd: ["antd"], "react-redux": ["react-redux"], redux: ["redux"], lodash: ["lodash"], "@sentry/react": ["@sentry/react"], "@splitsoftware/splitio-react": ["@splitsoftware/splitio-react"], logrocket: ["logrocket"], firebase: [ "@firebase/analytics", "@firebase/app", "@firebase/firestore", "@firebase/auth", "@firebase/messaging" ], markerjs2: ["markerjs2"], "@apollo/client": ["@apollo/client"], "libphonenumber-js": ["libphonenumber-js"] } } }, sourcemap: true }, optimizeDeps: { include: [ "react", "react-dom", "antd", "lodash", "@sentry/react", "@apollo/client", "@reduxjs/toolkit", "axios", "react-router-dom", "dayjs", "redux", "react-redux", "@firebase/app", "@firebase/analytics", "@firebase/firestore", "@firebase/auth", "@firebase/messaging", "@firebase/util" ], esbuildOptions: { // Update for Vite 6: Use proper file extensions loader: { ".jsx": "jsx", ".tsx": "tsx" } } }, css: { preprocessorOptions: { scss: { api: "modern-compiler", quietDeps: true // Quite Deprecation Warnings, should be disabled occasionally before major upgrades } } } });