import type { Config } from '@jest/types';
import { BabelConfig } from 'ts-jest';

const esModules = ['chalk', 'supports-color', '@btc-vision/logger'].join('|');

const babelConfig: BabelConfig = {
    presets: ['@babel/preset-env'],
    plugins: [
        ["babel-plugin-transform-import-meta", { "module": "ES6" }]
    ]
};

// @ts-ignore
const config: Config.InitialOptions = {
    verbose: true,
    rootDir: './',
    transform: {
        '\\.[jt]s?$': [
            'ts-jest',
            {
                useESM: true,
                tsconfig: { allowJs: true },
                babelConfig: babelConfig,
            },
        ],
    },
    modulePathIgnorePatterns: ['packages', 'build', 'node_modules', 'data', 'documents', 'models', 'repositories', 'utils', 'config'],
    testMatch: [
        '<rootPath>/tests/**/*.test.ts',
        '<rootPath>/tests/*.test.ts',
        '<rootDir>/tests/**',
    ],
    moduleNameMapper: {
        '^(\\.{1,2}/.*)\\.[jt]s$': '$1',
    },
    moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'],
    moduleDirectories: ['node_modules', 'src', 'build'],
    testEnvironment: 'node',
    transformIgnorePatterns: [`/node_modules/(?!${esModules})`, `/build/`],
    preset: 'ts-jest/presets/js-with-babel',
};

export default config;
