/** @type {import('ts-jest').JestConfigWithTsJest} */ module.exports = { preset: 'ts-jest/presets/default-esm', testEnvironment: 'node', extensionsToTreatAsEsm: ['.ts', '.mts'], moduleNameMapper: { '^(\\.{1,2}/.*)\\.js$': '$1', '^(\\.{1,2}/.*)\\.ts$': '$1', '^chalk$': '/node_modules/chalk/source/index.js', '#ansi-styles': '/node_modules/ansi-styles/index.js', '#supports-color': '/node_modules/supports-color/index.js' }, transform: { '^.+\\.(ts|mts|js|mjs)$': [ 'ts-jest', { useESM: true, tsconfig: 'tsconfig.json' }, ], }, transformIgnorePatterns: [ 'node_modules/(?!(@digital-alchemy|chalk|ansi-styles|supports-color)/.*)(?!.*\\.mjs$)' ], resolver: '/jest-resolver.cjs', setupFilesAfterEnv: ['/jest.setup.ts'], testMatch: [ '**/__tests__/helpers.test.ts', '**/__tests__/schemas/devices.test.ts', '**/__tests__/context/index.test.ts', '**/__tests__/hass/index.test.ts', '**/__tests__/api/index.test.ts' ], globals: { 'ts-jest': { useESM: true, }, }, collectCoverage: true, coverageDirectory: 'coverage', coverageReporters: ['text', 'lcov', 'clover', 'html'], collectCoverageFrom: [ 'src/**/*.ts', '!src/**/*.d.ts', '!src/**/*.test.ts', '!src/types/**/*', '!src/polyfills.ts' ], coverageThreshold: { global: { branches: 50, functions: 50, lines: 50, statements: 50 } }, verbose: true, testTimeout: 30000 };