@@ -9,7 +9,6 @@ const semver = require('semver');
9
9
const yargs = require ( 'yargs' ) ;
10
10
const fs = require ( 'fs' ) ;
11
11
12
- const INSTALL_PACKAGES = [ 'react-dom' , 'react' , 'react-test-renderer' ] ;
13
12
const REGRESSION_FOLDER = 'build-regression' ;
14
13
15
14
const ROOT_PATH = join ( __dirname , '..' , '..' ) ;
@@ -23,6 +22,12 @@ const version = process.argv[2];
23
22
const shouldReplaceBuild = ! ! argv . replaceBuild ;
24
23
25
24
async function downloadRegressionBuild ( ) {
25
+ const reactVersion = semver . coerce ( version ) . version ;
26
+ const installPackages = [ 'react-dom' , 'react' , 'react-test-renderer' ] ;
27
+ if ( semver . gte ( reactVersion , '16.3.0' ) ) {
28
+ installPackages . push ( 'react-is' ) ;
29
+ }
30
+
26
31
console . log ( chalk . bold . white ( `Downloading React v${ version } \n` ) ) ;
27
32
28
33
// Make build directory for temporary modules we're going to download
@@ -35,7 +40,7 @@ async function downloadRegressionBuild() {
35
40
await exec ( `mkdir ${ regressionBuildPath } ` ) ;
36
41
37
42
// Install all necessary React packages that have the same version
38
- const downloadPackagesStr = INSTALL_PACKAGES . reduce (
43
+ const downloadPackagesStr = installPackages . reduce (
39
44
( str , name ) => `${ str } ${ name } @${ version } ` ,
40
45
''
41
46
) ;
@@ -51,7 +56,7 @@ async function downloadRegressionBuild() {
51
56
52
57
// Remove all the packages that we downloaded in the original build folder
53
58
// so we can move the modules from the regression build over
54
- const removePackagesStr = INSTALL_PACKAGES . reduce (
59
+ const removePackagesStr = installPackages . reduce (
55
60
( str , name ) => `${ str } ${ join ( buildPath , name ) } ` ,
56
61
''
57
62
) ;
@@ -63,12 +68,12 @@ async function downloadRegressionBuild() {
63
68
. join ( ' ' ) } \n`
64
69
)
65
70
) ;
66
- await exec ( `rm -r ${ removePackagesStr } ` ) ;
71
+ await exec ( `rm -rf ${ removePackagesStr } ` ) ;
67
72
68
73
// Move all packages that we downloaded to the original build folder
69
74
// We need to separately move the scheduler package because it might
70
75
// be called schedule
71
- const movePackageString = INSTALL_PACKAGES . reduce (
76
+ const movePackageString = installPackages . reduce (
72
77
( str , name ) => `${ str } ${ join ( regressionBuildPath , 'node_modules' , name ) } ` ,
73
78
''
74
79
) ;
@@ -80,9 +85,9 @@ async function downloadRegressionBuild() {
80
85
. join ( ' ' ) } to ${ chalk . underline . blue ( buildPath ) } \n`
81
86
)
82
87
) ;
88
+ fs . mkdirSync ( buildPath , { recursive : true } ) ;
83
89
await exec ( `mv ${ movePackageString } ${ buildPath } ` ) ;
84
90
85
- const reactVersion = semver . coerce ( version ) . version ;
86
91
// For React versions earlier than 18.0.0, we explicitly scheduler v0.20.1, which
87
92
// is the first version that has unstable_mock, which DevTools tests need, but also
88
93
// has Scheduler.unstable_trace, which, although we don't use in DevTools tests
@@ -100,7 +105,7 @@ async function downloadRegressionBuild() {
100
105
) ;
101
106
} else {
102
107
console . log ( chalk . white ( `Downloading scheduler\n` ) ) ;
103
- await exec ( `rm -r ${ join ( buildPath , 'scheduler' ) } ` ) ;
108
+ await exec ( `rm -rf ${ join ( buildPath , 'scheduler' ) } ` ) ;
104
109
await exec (
105
110
`mv ${ join (
106
111
regressionBuildPath ,
@@ -134,8 +139,6 @@ async function main() {
134
139
return ;
135
140
}
136
141
await downloadRegressionBuild ( ) ;
137
- } catch ( e ) {
138
- console . log ( chalk . red ( e ) ) ;
139
142
} finally {
140
143
// We shouldn't remove the regression-build folder unless we're using
141
144
// it to replace the build folder
0 commit comments