import { copyFileSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { defineConfig, type Plugin } from 'vite'; const __dirname = dirname(fileURLToPath(import.meta.url)); /** * The workspace folder itself is what nginx serves under https://nockal.com/game-maker/. * The Vite source page lives in `web/index.html`; the build writes hashed assets into * `dist/` and this plugin copies the built HTML to the folder root so that the site URL * loads the production bundle while `api/` and `data/` sit next to it. */ function publishIndexHtml(): Plugin { return { name: 'game-maker:publish-index-html', apply: 'build', closeBundle() { copyFileSync(resolve(__dirname, 'dist/index.html'), resolve(__dirname, 'index.html')); }, }; } export default defineConfig({ root: 'web', base: '/game-maker/dist/', publicDir: false, plugins: [publishIndexHtml()], build: { outDir: '../dist', emptyOutDir: true, target: 'es2022', sourcemap: true, }, server: { port: 5175, // During development the PHP API is served by the production nginx; proxy it. proxy: { '/game-maker/api': { target: 'https://nockal.com', changeOrigin: true, }, }, }, test: { root: '.', include: ['tests/**/*.test.ts'], environment: 'node', }, });