/** @type {import('jest').Config} */
export default {
preset: 'ts-jest/presets/default-esm',
testEnvironment: 'node',
roots: ['<rootDir>/src', '<rootDir>/tests'],
testMatch: ['**/__tests__/**/*.test.ts', '**/*.test.ts', '**/*.spec.ts'],
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
// ES Module support
extensionsToTreatAsEsm: ['.ts'],
moduleNameMapper: {
'^(\\.{1,2}/.*)\\.js$': '$1',
},
transform: {
'^.+\\.tsx?$': [
'ts-jest',
{
useESM: true,
isolatedModules: true,
diagnostics: {
ignoreCodes: [151002],
},
},
],
},
// Coverage configuration for Codecov
collectCoverage: true,
coverageDirectory: 'coverage',
coverageReporters: ['lcov', 'text', 'text-summary', 'html'],
collectCoverageFrom: [
'src/**/*.ts',
'!src/**/*.d.ts',
'!src/**/__tests__/**',
'!src/**/index.ts',
],
coverageThreshold: {
global: {
branches: 0,
functions: 0,
lines: 0,
statements: 0,
},
},
// Performance
maxWorkers: '50%',
// Clear mocks between tests
clearMocks: true,
// Setup files
setupFilesAfterEnv: ['<rootDir>/tests/setup.ts'],
};