import { readFileSync } from 'fs'; import { pathsToModuleNameMapper } from 'ts-jest'; const tsconfig = JSON.parse(readFileSync('./tsconfig.json', 'utf8')); /** @type {import('jest').Config} */ export default { preset: 'ts-jest', testEnvironment: 'node', // Handle module resolution for TypeScript paths moduleNameMapper: { ...pathsToModuleNameMapper(tsconfig.compilerOptions.paths, { prefix: '/', }), // Mock problematic libraries '^isikukood$': '/__mocks__/isikukood.ts', '^server-only$': '/__mocks__/server-only.ts', }, // Test file patterns testMatch: ['**/__tests__/**/*.(ts|tsx|js)', '**/*.(test|spec).(ts|tsx|js)'], // Setup files setupFilesAfterEnv: ['/jest.setup.js'], // Coverage configuration collectCoverageFrom: [ 'lib/**/*.{ts,tsx}', 'app/**/*.{ts,tsx}', 'components/**/*.{ts,tsx}', '!**/*.d.ts', '!**/node_modules/**', '!**/.next/**', ], // Transform configuration transform: { '^.+\\.(ts|tsx)$': [ 'ts-jest', { useESM: true, tsconfig: { jsx: 'react-jsx', }, }, ], }, // Module file extensions moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], // Ignore patterns testPathIgnorePatterns: ['/.next/', '/node_modules/'], // Transform ignore patterns for node_modules transformIgnorePatterns: ['node_modules/(?!(.*\\.mjs$))'], // ESM support extensionsToTreatAsEsm: ['.ts'], };