Some checks failed
CI / fail2ban Regex (push) Has been cancelled
CI / Unit & Component Tests (push) Has been cancelled
CI / OCR Service Tests (push) Has been cancelled
CI / Backend Unit Tests (push) Has been cancelled
CI / Semgrep Security Scan (push) Has been cancelled
CI / Compose Bucket Idempotency (push) Has been cancelled
CI's node coverage run (vite.config.ts, 'measure utility + server-side logic only') counts every .ts under the include globs via all-files, but the Tiptap NodeView builds live ProseMirror DOM and only runs in the browser editor — it is exercised by the client project's browser tests, not the node run. Left in, it showed 0% and dragged global functions (78.68%) and branches (78.48%) below the 80% gate. Exclude it alongside the .svelte / browser-only UI files this config already measures around. Restores the gate: statements 88.82%, branches 82.3%, functions 87.27%, lines 89.77% (server project, verified locally). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
123 lines
3.7 KiB
TypeScript
123 lines
3.7 KiB
TypeScript
import { sentrySvelteKit } from '@sentry/sveltekit';
|
|
import { paraglideVitePlugin } from '@inlang/paraglide-js';
|
|
import devtoolsJson from 'vite-plugin-devtools-json';
|
|
import tailwindcss from '@tailwindcss/vite';
|
|
import { defineConfig } from 'vitest/config';
|
|
import { playwright } from '@vitest/browser-playwright';
|
|
import { sveltekit } from '@sveltejs/kit/vite';
|
|
import { viteStaticCopy } from 'vite-plugin-static-copy';
|
|
|
|
export default defineConfig({
|
|
optimizeDeps: {
|
|
include: ['pdfjs-dist', '@tiptap/core', '@tiptap/starter-kit', '@tiptap/extension-mention']
|
|
},
|
|
server: {
|
|
host: '0.0.0.0', // Erlaubt Zugriff von außen
|
|
port: 5173, // Standard SvelteKit Port
|
|
// Proxy für API-Aufrufe während der Entwicklung (Browser -> Vite -> Spring Boot)
|
|
proxy: {
|
|
'/api': {
|
|
target: process.env.API_PROXY_TARGET || 'http://localhost:8080',
|
|
changeOrigin: true
|
|
// The browser forwards the fa_session cookie to the backend automatically;
|
|
// no header injection needed (ADR-020).
|
|
}
|
|
}
|
|
},
|
|
plugins: [
|
|
sentrySvelteKit({
|
|
org: 'familienarchiv',
|
|
project: 'frontend',
|
|
authToken: process.env.SENTRY_AUTH_TOKEN,
|
|
sentryUrl: (() => {
|
|
const dsn = process.env.VITE_SENTRY_DSN;
|
|
if (!dsn) return undefined;
|
|
try {
|
|
return new URL(dsn).origin;
|
|
} catch {
|
|
return undefined;
|
|
}
|
|
})(),
|
|
autoUploadSourceMaps: !!process.env.SENTRY_AUTH_TOKEN
|
|
}),
|
|
tailwindcss(),
|
|
sveltekit(),
|
|
devtoolsJson(),
|
|
// pdf.js 5.x decodes JBIG2 / CCITTFax / JPEG2000 images in WebAssembly.
|
|
// Serve the wasm from our own origin at /pdfjs-wasm/ (referenced by
|
|
// getDocument's wasmUrl) — emitted into build/client/ so it survives the
|
|
// production Docker image, not just `npm run dev`. See issue #708.
|
|
viteStaticCopy({
|
|
targets: [
|
|
{ src: 'node_modules/pdfjs-dist/wasm/*', dest: 'pdfjs-wasm', rename: { stripBase: true } }
|
|
]
|
|
}),
|
|
paraglideVitePlugin({
|
|
project: './project.inlang',
|
|
outdir: './src/lib/paraglide'
|
|
})
|
|
],
|
|
test: {
|
|
expect: { requireAssertions: true },
|
|
coverage: {
|
|
provider: 'v8',
|
|
reporter: ['text', 'lcov'],
|
|
reportsDirectory: 'coverage/server',
|
|
// Measure utility and server-side logic only. Svelte components run
|
|
// in the browser project and are excluded here. Browser-only TS files
|
|
// (actions, hooks, domain-specific UI state) are also excluded.
|
|
// person/ is excluded until relationshipLabels.ts coverage is raised.
|
|
include: [
|
|
'src/lib/shared/utils/**',
|
|
'src/lib/shared/server/**',
|
|
'src/lib/shared/discussion/**',
|
|
'src/lib/document/**',
|
|
'src/hooks.server.ts'
|
|
],
|
|
exclude: [
|
|
'**/*.svelte',
|
|
'**/*.svelte.ts',
|
|
'**/__mocks__/**',
|
|
// Tiptap NodeView — builds live ProseMirror DOM and only runs inside
|
|
// the browser editor, so it is exercised by the client project's
|
|
// browser tests, not this node server-coverage run. Browser-only UI
|
|
// .ts file, excluded like the actions/hooks this config measures around.
|
|
'src/lib/shared/discussion/mentionNodeView.ts'
|
|
],
|
|
thresholds: {
|
|
lines: 80,
|
|
functions: 80,
|
|
branches: 80,
|
|
statements: 80
|
|
}
|
|
},
|
|
projects: [
|
|
{
|
|
extends: './vite.config.ts',
|
|
test: {
|
|
name: 'client',
|
|
browser: {
|
|
enabled: true,
|
|
provider: playwright(),
|
|
instances: [{ browser: 'chromium', headless: true }],
|
|
screenshotDirectory: 'test-results/screenshots',
|
|
screenshotFailures: true
|
|
},
|
|
setupFiles: ['./src/test-setup.ts'],
|
|
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}']
|
|
}
|
|
}
|
|
]
|
|
}
|
|
});
|