// file: crates/apps/game-snake-poc-tauri/vite.config.ts // version: 3 import { fileURLToPath } from "node:url"; import { resolve } from "node:path"; import { defineConfig, normalizePath } from "vite"; import { viteStaticCopy } from "vite-plugin-static-copy"; const appRoot = fileURLToPath(new URL(".", import.meta.url)); const repositoryRoot = normalizePath(resolve(appRoot, "../../..")); const frontendRoot = normalizePath(resolve(appRoot, "frontend")); const externalBuildRoot = normalizePath(resolve(repositoryRoot, "../builds/sasedev-games/game-snake-poc-tauri")); const wasmRoot = normalizePath(resolve(externalBuildRoot, "wasm")); const wasmModule = normalizePath(resolve(wasmRoot, "game_snake_poc_wasm.js")); const frontendDist = normalizePath(resolve(externalBuildRoot, "dist")); const viteCacheDir = normalizePath(resolve(externalBuildRoot, "vite-cache")); const commonRuntimeAsset = normalizePath(resolve(repositoryRoot, "assets/common/data/runtime.json")); const gameRuntimeAsset = normalizePath(resolve(repositoryRoot, "assets/game-snake-poc/data/game.json")); const devHost = process.env.TAURI_DEV_HOST; export default defineConfig({ plugins: [ viteStaticCopy({ targets: [ { src: commonRuntimeAsset, dest: "common/data", rename: { stripBase: true } }, { src: gameRuntimeAsset, dest: "game/data", rename: { stripBase: true } }, ], }), ], base: "./", cacheDir: viteCacheDir, clearScreen: false, root: frontendRoot, publicDir: false, input: { main: normalizePath(resolve(frontendRoot, "main.html")), }, resolve: { alias: { "@snake-wasm": wasmModule, }, }, build: { outDir: frontendDist, emptyOutDir: true, minify: true, sourcemap: false, cssCodeSplit: true, rolldownOptions: { output: { entryFileNames: "js/[name]-[hash].js", chunkFileNames: "js/chunks/[name]-[hash].js", assetFileNames: assetInfo => { const originalName = assetInfo.names[0] ?? ""; const extension = originalName.substring(originalName.lastIndexOf(".") + 1).toLowerCase(); if (extension === "css") { return "css/[name]-[hash][extname]"; } if (extension === "wasm") { return "wasm/[name]-[hash][extname]"; } return "otherassets/[name][extname]"; }, }, }, }, server: { port: 1436, strictPort: true, host: devHost || false, fs: { allow: [appRoot, repositoryRoot, externalBuildRoot], }, ws: { protocol: "ws", host: devHost || "127.0.0.1", port: 1436, clientPort: 1436, }, watch: { ignored: ["**/src/**"], }, }, });