import { sveltekit } from "@sveltejs/kit/vite"; import Icons from "unplugin-icons/vite"; import { promises } from "fs"; import { defineConfig } from "vitest/config"; import { config } from "dotenv"; config({ path: "./.env.local" }); // used to load fonts server side for thumbnail generation function loadTTFAsArrayBuffer() { return { name: "load-ttf-as-array-buffer", async transform(_src, id) { if (id.endsWith(".ttf")) { return `export default new Uint8Array([ ${new Uint8Array(await promises.readFile(id))} ]).buffer`; } }, }; } export default defineConfig({ plugins: [ sveltekit(), Icons({ compiler: "svelte", }), loadTTFAsArrayBuffer(), ], // Allow external access via ngrok tunnel host server: { port: process.env.PORT ? parseInt(process.env.PORT) : 5173, // Allow any ngrok-free.app subdomain (dynamic tunnels) // See Vite server.allowedHosts: string[] | true // Using leading dot matches subdomains per Vite's host check logic allowedHosts: ["huggingface.ngrok.io"], }, optimizeDeps: { include: ["uuid", "sharp", "clsx"], }, test: { workspace: [ { // Client-side tests (Svelte components) extends: "./vite.config.ts", test: { name: "client", environment: "browser", browser: { enabled: true, provider: "playwright", instances: [{ browser: "chromium", headless: true }], }, include: ["src/**/*.svelte.{test,spec}.{js,ts}"], exclude: ["src/lib/server/**", "src/**/*.ssr.{test,spec}.{js,ts}"], setupFiles: ["./scripts/setups/vitest-setup-client.ts"], }, }, { // SSR tests (Server-side rendering) extends: "./vite.config.ts", test: { name: "ssr", environment: "node", include: ["src/**/*.ssr.{test,spec}.{js,ts}"], }, }, { // Server-side tests (Node.js utilities) extends: "./vite.config.ts", test: { name: "server", environment: "node", include: ["src/**/*.{test,spec}.{js,ts}"], exclude: ["src/**/*.svelte.{test,spec}.{js,ts}", "src/**/*.ssr.{test,spec}.{js,ts}"], setupFiles: ["./scripts/setups/vitest-setup-server.ts"], }, }, ], }, });