main
js 106 lines 3.55 KB
Raw
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[`^${name}\/([^\/]+)$`] =
48 `<rootDir>/build/${NODE_MODULES_DIR}/${name}/$1`;
49 });
50
51 // Allow tests to import shared code (e.g. feature flags, getStackByFiberInDevAndProd)
52 moduleNameMapper['^shared/([^/]+)$'] = '<rootDir>/packages/shared/$1';
53 moduleNameMapper['^react-reconciler/([^/]+)$'] =
54 '<rootDir>/packages/react-reconciler/$1';
55
56 module.exports = Object.assign({}, baseConfig, {
57 // Redirect imports to the compiled bundles
58 moduleNameMapper: {
59 ...devtoolsRegressionConfig.moduleNameMapper,
60 ...moduleNameMapper,
61 },
62 // Don't run bundle tests on -test.internal.* files
63 testPathIgnorePatterns: ['/node_modules/', '-test.internal.js$'],
64 // Exclude the build output from transforms
65 transformIgnorePatterns: [
66 '/node_modules/(?!(rbush|quickselect)/)',
67 '<rootDir>/build/',
68 '/__compiled__/',
69 '/__untransformed__/',
70 ],
71 testRegex: 'packages/react-devtools(-(.+))?/.+/__tests__/[^]+.test.js$',
72 snapshotSerializers: [
73 require.resolve(
74 '../../packages/react-devtools-shared/src/__tests__/__serializers__/dehydratedValueSerializer.js'
75 ),
76 require.resolve(
77 '../../packages/react-devtools-shared/src/__tests__/__serializers__/hookSerializer.js'
78 ),
79 require.resolve(
80 '../../packages/react-devtools-shared/src/__tests__/__serializers__/inspectedElementSerializer.js'
81 ),
82 require.resolve(
83 '../../packages/react-devtools-shared/src/__tests__/__serializers__/profilingSerializer.js'
84 ),
85 require.resolve(
86 '../../packages/react-devtools-shared/src/__tests__/__serializers__/storeSerializer.js'
87 ),
88 require.resolve(
89 '../../packages/react-devtools-shared/src/__tests__/__serializers__/treeContextStateSerializer.js'
90 ),
91 require.resolve(
92 '../../packages/react-devtools-shared/src/__tests__/__serializers__/numberToFixedSerializer.js'
93 ),
94 ],
95 setupFiles: [
96 ...baseConfig.setupFiles,
97 ...devtoolsRegressionConfig.setupFiles,
98 require.resolve('./setupTests.build.js'),
99 require.resolve('./devtools/setupEnv.js'),
100 ],
101 setupFilesAfterEnv: [
102 require.resolve(
103 '../../packages/react-devtools-shared/src/__tests__/setupTests.js'
104 ),
105 ],
106 });