module.exports = { preset: 'react-native', collectCoverage: true, collectCoverageFrom: [ 'src/**/*.{ts,tsx}', '!**/index.{ts,tsx}', '!**/styles.{ts,tsx}', '!**/types.{ts,tsx}', '!**/*.d.ts', '!**/ImageView.android.ts', '!**/ImageView.ios.ts', '!**/ImageView.tsx', ], coveragePathIgnorePatterns: ['/src/screens/DevToolsScreen/'], coverageThreshold: { global: { branches: 60, functions: 60, lines: 60, statements: 60, }, }, moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], setupFiles: ['./jest/setup.ts'], setupFilesAfterEnv: ['./jest/setupFilesAfterEnv.ts'], transformIgnorePatterns: [ 'node_modules/(?!(@supabase|isows|@react-native-google-signin|@flyerhq|@react-native|react-native|uuid|react-native-reanimated|react-native-gesture-handler|react-native-vector-icons|react-native-image-viewing|react-native-parsed-text|@react-navigation/.*|@react-native-masked-view/masked-view|react-native-linear-gradient|react-native-picker-select|react-native-paper|react-native-keyboard-controller|react-native-drawer-layout|marked|react-native-code-highlighter|react-syntax-highlighter|trim-newlines|react-native-worklets)/)', ], testMatch: [ '**/__tests__/**/*.test.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)', ], testPathIgnorePatterns: ['/node_modules/', '/e2e/'], moduleNameMapper: { '@react-native-async-storage/async-storage': '/__mocks__/external/@react-native-async-storage/async-storage.js', 'llama.rn': '/__mocks__/external/llama.rn.ts', 'react-native-webview': '/__mocks__/external/react-native-webview.ts', 'react-dom': '/__mocks__/external/react-dom.js', 'react-native-device-info': '/__mocks__/external/react-native-device-info.js', '@react-native-documents/picker': '/__mocks__/external/@react-native-documents/picker.js', '@dr.pogodin/react-native-fs': '/__mocks__/external/@dr.pogodin/react-native-fs.js', 'react-native-haptic-feedback': '/__mocks__/external/react-native-haptic-feedback.js', '@react-native-firebase/app': '/__mocks__/external/@react-native-firebase/app.js', '@react-native-firebase/app-check': '/__mocks__/external/@react-native-firebase/app-check.js', '\\.svg': '/__mocks__/external/react-native-svg.js', 'react-native-keychain': '/__mocks__/external/react-native-keychain.js', '@nozbe/watermelondb': '/__mocks__/external/@nozbe/watermelondb.js', '@nozbe/watermelondb/adapters/sqlite': '/__mocks__/external/@nozbe/watermelondb/adapters/sqlite.js', '@nozbe/watermelondb/decorators': '/__mocks__/external/@nozbe/watermelondb/decorators.js', '@nozbe/watermelondb/Schema': '/__mocks__/external/@nozbe/watermelondb/Schema/index.js', '@nozbe/watermelondb/Schema/migrations': '/__mocks__/external/@nozbe/watermelondb/Schema/migrations.js', '@nozbe/watermelondb/QueryDescription': '/__mocks__/external/@nozbe/watermelondb/QueryDescription.js', '@nozbe/watermelondb/Model': '/__mocks__/external/@nozbe/watermelondb/Model.js', '@nozbe/simdjson': '/__mocks__/external/@nozbe/simdjson.js', '@nozbe/sqlite': '/__mocks__/external/@nozbe/sqlite.js', 'mobx-persist-store': '/__mocks__/external/mobx-persist-store.js', 'react-native-image-picker': '/__mocks__/external/react-native-image-picker.js', 'react-native-vision-camera': '/__mocks__/external/react-native-vision-camera.ts', '@react-native-google-signin/google-signin': '/__mocks__/external/@react-native-google-signin/google-signin.ts', 'react-native-code-highlighter': '/__mocks__/external/react-native-code-highlighter.js', '@env': '/__mocks__/external/@env.js', '@gorhom/bottom-sheet': '/__mocks__/external/@gorhom/bottom-sheet.js', '@pocketpalai/react-native-speech': '/__mocks__/external/@pocketpalai/react-native-speech.ts', }, };