1. 'use strict';
    
  2. 
    
  3. const {readdirSync, statSync} = require('fs');
    
  4. const {join} = require('path');
    
  5. const baseConfig = require('./config.base');
    
  6. const devtoolsRegressionConfig = require('./devtools/config.build-devtools-regression');
    
  7. 
    
  8. const NODE_MODULES_DIR =
    
  9.   process.env.RELEASE_CHANNEL === 'stable' ? 'oss-stable' : 'oss-experimental';
    
  10. 
    
  11. // Find all folders in packages/* with package.json
    
  12. const packagesRoot = join(__dirname, '..', '..', 'packages');
    
  13. const packages = readdirSync(packagesRoot).filter(dir => {
    
  14.   if (dir.charAt(0) === '.') {
    
  15.     return false;
    
  16.   }
    
  17.   if (dir.includes('react-devtools')) {
    
  18.     return false;
    
  19.   }
    
  20.   if (dir === 'internal-test-utils') {
    
  21.     // This is an internal package used only for testing. It's OK to read
    
  22.     // from source.
    
  23.     // TODO: Maybe let's have some convention for this?
    
  24.     return false;
    
  25.   }
    
  26.   const packagePath = join(packagesRoot, dir, 'package.json');
    
  27.   let stat;
    
  28.   try {
    
  29.     stat = statSync(packagePath);
    
  30.   } catch (err) {
    
  31.     return false;
    
  32.   }
    
  33.   return stat.isFile();
    
  34. });
    
  35. 
    
  36. // Create a module map to point React packages to the build output
    
  37. const moduleNameMapper = {};
    
  38. 
    
  39. moduleNameMapper['react-devtools-feature-flags'] =
    
  40.   '<rootDir>/packages/react-devtools-shared/src/config/DevToolsFeatureFlags.default';
    
  41. 
    
  42. // Map packages to bundles
    
  43. packages.forEach(name => {
    
  44.   // Root entry point
    
  45.   moduleNameMapper[`^${name}$`] = `<rootDir>/build/${NODE_MODULES_DIR}/${name}`;
    
  46.   // Named entry points
    
  47.   moduleNameMapper[
    
  48.     `^${name}\/([^\/]+)$`
    
  49.   ] = `<rootDir>/build/${NODE_MODULES_DIR}/${name}/$1`;
    
  50. });
    
  51. 
    
  52. // Allow tests to import shared code (e.g. feature flags, getStackByFiberInDevAndProd)
    
  53. moduleNameMapper['^shared/([^/]+)$'] = '<rootDir>/packages/shared/$1';
    
  54. moduleNameMapper['^react-reconciler/([^/]+)$'] =
    
  55.   '<rootDir>/packages/react-reconciler/$1';
    
  56. 
    
  57. module.exports = Object.assign({}, baseConfig, {
    
  58.   // Redirect imports to the compiled bundles
    
  59.   moduleNameMapper: {
    
  60.     ...devtoolsRegressionConfig.moduleNameMapper,
    
  61.     ...moduleNameMapper,
    
  62.   },
    
  63.   // Don't run bundle tests on -test.internal.* files
    
  64.   testPathIgnorePatterns: ['/node_modules/', '-test.internal.js$'],
    
  65.   // Exclude the build output from transforms
    
  66.   transformIgnorePatterns: [
    
  67.     '/node_modules/',
    
  68.     '<rootDir>/build/',
    
  69.     '/__compiled__/',
    
  70.     '/__untransformed__/',
    
  71.   ],
    
  72.   testRegex: 'packages/react-devtools(-(.+))?/.+/__tests__/[^]+.test.js$',
    
  73.   snapshotSerializers: [
    
  74.     require.resolve(
    
  75.       '../../packages/react-devtools-shared/src/__tests__/__serializers__/dehydratedValueSerializer.js'
    
  76.     ),
    
  77.     require.resolve(
    
  78.       '../../packages/react-devtools-shared/src/__tests__/__serializers__/hookSerializer.js'
    
  79.     ),
    
  80.     require.resolve(
    
  81.       '../../packages/react-devtools-shared/src/__tests__/__serializers__/inspectedElementSerializer.js'
    
  82.     ),
    
  83.     require.resolve(
    
  84.       '../../packages/react-devtools-shared/src/__tests__/__serializers__/profilingSerializer.js'
    
  85.     ),
    
  86.     require.resolve(
    
  87.       '../../packages/react-devtools-shared/src/__tests__/__serializers__/storeSerializer.js'
    
  88.     ),
    
  89.     require.resolve(
    
  90.       '../../packages/react-devtools-shared/src/__tests__/__serializers__/timelineDataSerializer.js'
    
  91.     ),
    
  92.     require.resolve(
    
  93.       '../../packages/react-devtools-shared/src/__tests__/__serializers__/treeContextStateSerializer.js'
    
  94.     ),
    
  95.     require.resolve(
    
  96.       '../../packages/react-devtools-shared/src/__tests__/__serializers__/numberToFixedSerializer.js'
    
  97.     ),
    
  98.   ],
    
  99.   setupFiles: [
    
  100.     ...baseConfig.setupFiles,
    
  101.     ...devtoolsRegressionConfig.setupFiles,
    
  102.     require.resolve('./setupTests.build.js'),
    
  103.     require.resolve('./devtools/setupEnv.js'),
    
  104.   ],
    
  105.   setupFilesAfterEnv: [
    
  106.     require.resolve(
    
  107.       '../../packages/react-devtools-shared/src/__tests__/setupTests.js'
    
  108.     ),
    
  109.   ],
    
  110. });