Files
DECNET/decnet_web/vite.config.ts
anti 0a9a2f9021 refactor(decnet_web/AttackerDetail): trim shell + bump coverage floor
Drop unused icon/api/useEffect/Tag imports left behind by the
fingerprint, behaviour, and IntelPanel extractions. AttackerDetail.tsx
ends at 450 LOC across Phase 10 (down from 1652 / 73% reduction).
Coverage floor: lines 23->24, functions 20->21, branches 17->19,
statements 22->23.
2026-05-09 06:29:15 -04:00

66 lines
2.2 KiB
TypeScript

import { defineConfig } from 'vitest/config'
import react from '@vitejs/plugin-react'
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
test: {
environment: 'jsdom',
globals: true,
setupFiles: ['./src/test/setup.ts'],
css: false,
coverage: {
provider: 'v8',
reporter: ['text', 'html'],
include: ['src/**/*.{ts,tsx}'],
exclude: ['src/**/*.d.ts', 'src/test/**', 'src/main.tsx'],
// Baseline floors. Each refactor PR raises these; never lower.
// Phase 10 (AttackerDetail follow-through): page shell down from
// 1652 to 450 LOC. Lifted fingerprint renderers (12), behaviour
// panel (8 sub-pieces + lookups), and IntelPanel into focused
// sub-modules. 13 new tests. Suite: 50 files, 249 tests,
// 24.8% lines / 19.53% branches.
thresholds: {
lines: 24,
functions: 21,
branches: 19,
statements: 23,
},
},
},
server: {
proxy: {
'/api': {
target: 'http://127.0.0.1:8000',
changeOrigin: true,
},
},
},
build: {
// Split heavy third-party libs into their own chunks so the main
// bundle stays small and the rarely-changing vendor code stays
// cacheable across deploys. Recharts + asciinema-player + lucide
// together made up most of the weight that was tripping the 500kB
// warning.
rollupOptions: {
output: {
manualChunks: (id: string) => {
if (!id.includes('node_modules')) return undefined
// d3-* ships alongside recharts as its plotting engine —
// grouping them keeps tree-shaken subsets together.
if (id.includes('recharts') || id.includes('/d3-')) return 'charts'
if (id.includes('asciinema-player')) return 'player'
if (id.includes('lucide-react')) return 'icons'
if (id.includes('react-router')) return 'router'
if (id.includes('react-dom')) return 'react-dom'
if (id.includes('/react/') || id.endsWith('/react')) return 'react'
return 'vendor'
},
},
},
// Legitimate ceiling for any single chunk after splitting; anything
// larger is a real bloat regression worth investigating.
chunkSizeWarningLimit: 600,
},
})