// Copyright (C) 2026 Michael Wilson <mike@mdwn.dev>
//
// This program is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation, version 3.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with
// this program. If not, see <https://www.gnu.org/licenses/>.
//

import { defineConfig } from "vite";
import { svelte } from "@sveltejs/vite-plugin-svelte";

const proxyTarget = process.env.VITE_PROXY_TARGET || "http://127.0.0.1:8080";

export default defineConfig({
  plugins: [svelte()],
  build: {
    chunkSizeWarningLimit: 600,
    rollupOptions: {
      output: {
        // Vite 8 bundles with Rolldown, whose manualChunks only accepts a
        // function (the Rollup object form is no longer supported). Group the
        // vendor libraries into a single cacheable chunk.
        manualChunks(id) {
          const vendorPkgs = [
            "svelte",
            "@connectrpc/connect",
            "@connectrpc/connect-web",
            "@bufbuild/protobuf",
            "yaml",
            "svelte-i18n",
          ];
          if (vendorPkgs.some((pkg) => id.includes(`/node_modules/${pkg}/`))) {
            return "vendor";
          }
        },
      },
    },
  },
  server: {
    proxy: {
      "/ws": {
        target: proxyTarget,
        ws: true,
      },
      "/api": {
        target: proxyTarget,
      },
      "/player.v1.PlayerService": {
        target: proxyTarget,
      },
    },
  },
});
