You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

60 lines
2.0 KiB

import { defineConfig } from 'vitest/config';
import { playwright } from '@vitest/browser-playwright';
import adapter from '@sveltejs/adapter-node';
import { sveltekit } from '@sveltejs/kit/vite';
import { DEFAULT_SESSION_DEFAULTS } from './src/lib/server/core/defaults.js';
import { realtimeDevWsPlugin } from './src/lib/server/core/dev-plugin.js';
import { toolRegistry } from './src/lib/server/project/tools/index.js';
// Composition root: merges core defaults with the project's tool registry.
// server/core never imports project code directly (see docs/TOOLS.md) — this
// is one of the two places (alongside server.js) that's allowed to.
const realtimeDefaults = { ...DEFAULT_SESSION_DEFAULTS, toolRegistry };
export default defineConfig({
plugins: [
sveltekit({
compilerOptions: {
// Force runes mode for the project, except for libraries. Can be removed in svelte 6.
runes: ({ filename }) =>
filename.split(/[/\\]/).includes('node_modules') ? undefined : true
},
// adapter-node: the realtime WS relay needs a persistent Node process
// (see src/lib/server/core/ws-handler.ts) — no serverless adapter can
// hold an upgraded WebSocket connection the way this can.
adapter: adapter()
}),
// Attaches the same WS upgrade handling used in production (server.js)
// to Vite's dev server, so `npm run dev` supports it without a build.
realtimeDevWsPlugin({ defaults: realtimeDefaults })
],
test: {
expect: { requireAssertions: true },
projects: [
{
extends: './vite.config.ts',
test: {
name: 'client',
browser: {
enabled: true,
provider: playwright(),
instances: [{ browser: 'chromium', headless: true }]
},
include: ['src/**/*.svelte.{test,spec}.{js,ts}'],
exclude: ['src/lib/server/**']
}
},
{
extends: './vite.config.ts',
test: {
name: 'server',
environment: 'node',
include: ['src/**/*.{test,spec}.{js,ts}'],
exclude: ['src/**/*.svelte.{test,spec}.{js,ts}']
}
}
]
}
});