/**
 * The path's declared below are relative. Specifically, they are relative to the location of this file after
 * compilation of the Stencil compiler has completed. See `scripts/bundles/testing` for the location of this file
 * following compilation.
 */
const path = require('path');
const testingDir = __dirname;
const rootDir = path.join(testingDir, '..');
const internalDir = path.join(rootDir, 'internal');

// NOTE: if you change this, also change compiler/transpile.ts
const moduleExtensions = ['ts', 'tsx', 'js', 'mjs', 'jsx'];
const moduleExtensionRegexp = '(' + moduleExtensions.join('|') + ')';

module.exports = {
  moduleFileExtensions: [...moduleExtensions, 'json', 'd.ts'],
  moduleNameMapper: {
    '^@stencil/core/cli$': path.join(rootDir, 'cli', 'index.js'),
    '^@stencil/core/compiler$': path.join(rootDir, 'compiler', 'stencil.js'),
    '^@stencil/core/internal$': path.join(internalDir, 'testing', 'index.js'),
    '^@stencil/core/internal/app-data$': path.join(internalDir, 'app-data', 'index.cjs'),
    '^@stencil/core/internal/app-globals$': path.join(internalDir, 'app-globals', 'index.js'),
    '^@stencil/core/internal/testing$': path.join(internalDir, 'testing', 'index.js'),
    '^@stencil/core/mock-doc$': path.join(rootDir, 'mock-doc', 'index.cjs'),
    '^@stencil/core/sys$': path.join(rootDir, 'sys', 'node', 'index.js'),
    '^@stencil/core/testing$': path.join(testingDir, 'index.js'),
    '^@stencil/core$': path.join(internalDir, 'testing', 'index.js'),
  },
  setupFilesAfterEnv: [path.join(testingDir, 'jest-setuptestframework.js')],
  testEnvironment: path.join(testingDir, 'jest-environment.js'),
  testPathIgnorePatterns: ['/.cache', '/.stencil', '/.vscode', '/dist', '/node_modules', '/www'],
  testRegex: '(/__tests__/.*|\\.?(test|spec))\\.' + moduleExtensionRegexp + '$',
  transform: {
    '^.+\\.(ts|tsx|jsx|css)$': path.join(testingDir, 'jest-preprocessor.js'),
  },
  watchPathIgnorePatterns: ['^.+\\.d\\.ts$'],
};
