/** @type {import('ts-jest').JestConfigWithTsJest} */ module.exports = { preset: 'react-native', transformIgnorePatterns: [ 'node_modules/(?!(@react-native|react-native|@react-navigation|expo|expo-.*|@expo|@react-native-community|react-native-.*|@shopify|@better-auth|nativewind|react-native-css-interop|@gorhom)/)', ], transform: { '^.+\\.(js|jsx)$': 'babel-jest', '^.+\\.(ts|tsx)$': ['ts-jest', { tsconfig: { jsx: 'react', jsxFactory: 'React.createElement', esModuleInterop: true, allowSyntheticDefaultImports: true, skipLibCheck: true, noEmit: true, strict: false, noImplicitAny: false, strictNullChecks: false, strictFunctionTypes: false, strictBindCallApply: false, strictPropertyInitialization: false, noImplicitThis: false, alwaysStrict: false, module: 'esnext', moduleResolution: 'node', isolatedModules: true, }, }], }, testMatch: ['**/__tests__/**/*.(test|spec).(js|jsx|ts|tsx)', '**/*.(test|spec).(js|jsx|ts|tsx)'], moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], setupFilesAfterEnv: ['/jest.setup.js'], moduleNameMapper: { '^@/(.*)$': '/$1', }, collectCoverageFrom: [ '**/*.{js,jsx,ts,tsx}', '!**/node_modules/**', '!**/android/**', '!**/ios/**', '!**/coverage/**', '!**/.claude/**', '!**/jest.config.js', '!**/jest.setup.js', '!**/metro.config.js', ], }