an atproto based link aggregator
1import { defineConfig } from 'vitest/config';
2import { playwright } from '@vitest/browser-playwright';
3import { sveltekit } from '@sveltejs/kit/vite';
4import tailwindcss from '@tailwindcss/vite';
5
6// Use system chromium if PLAYWRIGHT_CHROMIUM_PATH is set (for CI with nixpkgs)
7const chromiumPath = process.env.PLAYWRIGHT_CHROMIUM_PATH;
8// Skip browser tests in CI (set SKIP_BROWSER_TESTS=1)
9const skipBrowserTests = process.env.SKIP_BROWSER_TESTS === '1';
10
11export default defineConfig({
12 plugins: [tailwindcss(), sveltekit()],
13 ssr: {
14 // Externalize native libsql modules - they can't be bundled
15 external: ['libsql', '@libsql/linux-x64-gnu', '@libsql/linux-x64-musl']
16 },
17 test: {
18 expect: { requireAssertions: true },
19 projects: [
20 // Only include browser project if not skipping
21 ...(skipBrowserTests
22 ? []
23 : [
24 {
25 extends: './vite.config.ts',
26 test: {
27 name: 'client',
28 browser: {
29 enabled: true,
30 provider: playwright({
31 launchOptions: chromiumPath
32 ? {
33 executablePath: chromiumPath,
34 args: ['--no-sandbox', '--disable-setuid-sandbox']
35 }
36 : {}
37 }),
38 instances: [{ browser: 'chromium' as const, headless: true }]
39 },
40 include: ['src/**/*.svelte.{test,spec}.{js,ts}'],
41 exclude: ['src/lib/server/**']
42 }
43 }
44 ]),
45 {
46 extends: './vite.config.ts',
47 test: {
48 name: 'server',
49 environment: 'node',
50 include: ['src/**/*.{test,spec}.{js,ts}'],
51 exclude: ['src/**/*.svelte.{test,spec}.{js,ts}']
52 }
53 }
54 ]
55 }
56});