50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import path from 'path';
|
|
import { defineConfig } from 'vitest/config';
|
|
import react from '@vitejs/plugin-react';
|
|
import tsconfigPaths from 'vite-tsconfig-paths';
|
|
|
|
export default defineConfig({
|
|
plugins: [tsconfigPaths(), react()],
|
|
resolve: {
|
|
alias: {
|
|
// The @pdfjs alias from tsconfig only resolves within the app's own
|
|
// source files. foliate-js/pdf.js lives outside that scope, so Vite
|
|
// needs an explicit alias to find the vendored pdfjs build.
|
|
'@pdfjs': path.resolve(__dirname, 'public/vendor/pdfjs'),
|
|
// `js-mdict` is consumed via tsconfig paths from `packages/js-mdict/src/`.
|
|
// Its sources `import 'fflate'` directly — without an alias, vite's
|
|
// import-analysis walks up from the redirected file location and fails
|
|
// to find fflate (it's installed only in this app's node_modules).
|
|
// Pin all `fflate` resolutions to the app's copy to keep js-mdict
|
|
// self-contained at the source-tree level.
|
|
fflate: path.resolve(__dirname, 'node_modules/fflate'),
|
|
},
|
|
},
|
|
test: {
|
|
environment: 'jsdom',
|
|
setupFiles: ['./vitest.setup.ts'],
|
|
exclude: [
|
|
'**/node_modules/**',
|
|
'**/dist/**',
|
|
'**/.claude/**',
|
|
// Playwright web e2e specs — run via `pnpm test:e2e:web`, not vitest.
|
|
'**/e2e/**',
|
|
'**/*.browser.test.ts',
|
|
'**/*.browser.test.tsx',
|
|
'**/*.tauri.test.ts',
|
|
// Android device e2e — run via `pnpm test:android`, not the unit lane.
|
|
'**/*.android.test.ts',
|
|
],
|
|
coverage: {
|
|
provider: 'v8',
|
|
reporter: ['text', 'text-summary'],
|
|
include: ['src/**/*.{ts,tsx}'],
|
|
exclude: [
|
|
'src/**/*.d.ts',
|
|
'src/**/__tests__/**',
|
|
'src/**/test/**',
|
|
],
|
|
},
|
|
},
|
|
});
|