pediatric-ai-scribe-v3/vitest.config.ts
Daniel 6d30edf88f build(ts): day 5 — Vitest + Zod + Knip tooling
Adds the three high-ROI tools the planning conversation identified:

  vitest 4.x — fast TS-native unit test runner. Runs against pure
    functions (calculators, validators, prompt builders). Playwright
    stays for e2e. package.json `npm test` now runs Vitest;
    `npm run test:node` preserves the old `node --test` runner
    for the 3 legacy tests under test/.

  zod 4.x — runtime request-body validation at API boundaries. The
    new shared/schemas.ts exports a schema per endpoint request
    (LoginRequestSchema, SoapRequestSchema, PeNarrativeRequestSchema,
    ExtensionCreateSchema, etc.). Routes will adopt these one at a
    time post-migration — usage pattern:
      const body = SoapRequestSchema.parse(req.body);
    Invalid input becomes a structured 400 instead of a silent
    undefined-access crash.

  knip 6.x — dead-code / unused-export detector. knip.json scopes
    it to the backend (client/ excluded since it lives in its own
    workspace). Run with `npm run lint:dead`. Catches the class of
    bug that kept public/js/adminMilestones.js dead-loaded for a
    year — a future orphaned file would fail the lint.

  @vitest/coverage-v8 — coverage reporter backed by v8 profiler.

Shipped schemas.test.ts with 8 example cases to prove the toolchain
(`npx vitest run` green).

Not done on day 5 (punted to post-migration): flipping tsconfig to
`strict: true`. That cascade would light up hundreds of implicit-
any errors in handler signatures that would cost more commit bandwidth
than available in this pass. The Day 4 permissive mode is already
catching the big wins (wrong response shapes, orphan refs, undefined
destructures). Post-migration, Codex/vendor model can flip strict flags
one at a time and fix handler-by-handler.
2026-04-23 19:54:30 +02:00

20 lines
703 B
TypeScript

import { defineConfig } from 'vitest/config';
// Unit-test runner. Playwright stays for e2e (runs via scripts/e2e.sh).
// Vitest is for pure functions — calculator formulas (Fenton LMS, AAP
// bilirubin, Rosner BP), validators, prompt builders. Any module that
// doesn't need a running Express + Postgres.
export default defineConfig({
test: {
include: ['src/**/*.test.ts', 'shared/**/*.test.ts'],
exclude: ['node_modules', 'dist', 'e2e', 'client', 'public'],
environment: 'node',
globals: false,
coverage: {
provider: 'v8',
reporter: ['text', 'html'],
include: ['src/**/*.ts', 'shared/**/*.ts'],
exclude: ['**/*.test.ts', '**/*.d.ts'],
},
},
});