This repository has been archived on 2026-08-10. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
drizzli/vite.config.ts
T
2026-08-01 15:07:28 +02:00

94 lines
2.5 KiB
TypeScript

import { paraglideVitePlugin } from '@inlang/paraglide-js';
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { playwright } from '@vitest/browser-playwright';
import { defineConfig } from 'vitest/config';
import type { IncomingMessage, ServerResponse } from 'http';
import type { Plugin, PreviewServer, ViteDevServer } from 'vite';
const addHeaders = (res: ServerResponse) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET');
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
};
const viteServerConfig = (): Plugin => ({
name: 'add-headers',
configureServer: (server: ViteDevServer) => {
server.middlewares.use((_req: IncomingMessage, res: ServerResponse, next: () => void) => {
addHeaders(res);
next();
});
},
configurePreviewServer: (server: PreviewServer) => {
server.middlewares.use((_req: IncomingMessage, res: ServerResponse, next: () => void) => {
addHeaders(res);
next();
});
}
});
// Every locale carries its own path prefix, English included, so a URL always
// says which language it is in. `trailingSlash: 'always'` (see routes/+layout.ts)
// means the patterns have to match both `/de/weather/week/` and `/de`.
const LOCALES = ['en', 'de', 'es', 'fr', 'it'] as const;
const urlPatterns = [
{
pattern: '/:path(.*)?',
localized: LOCALES.map((locale) => [locale, `/${locale}/:path(.*)?`] as [string, string])
}
];
export default defineConfig({
plugins: [
paraglideVitePlugin({
project: './project.inlang',
outdir: './src/lib/paraglide',
// the URL is authoritative; the cookie only carries a choice forward to
// the next bare visit, and the browser's languages seed a first visit
strategy: ['url', 'cookie', 'preferredLanguage', 'baseLocale'],
urlPatterns
}),
tailwindcss(),
sveltekit(),
viteServerConfig()
],
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}']
}
}
]
}
});