@@ -4,7 +4,6 @@ import {getLoader, logger} from '@react-native-community/cli-tools';
4
4
import chalk from 'chalk' ;
5
5
import { prompt } from 'prompts' ;
6
6
import execa from 'execa' ;
7
- import semver from 'semver' ;
8
7
9
8
interface DependencyInfo {
10
9
path : string ;
@@ -92,55 +91,6 @@ function excludeInstalledPeerDependencies(
92
91
return missingPeerDependencies ;
93
92
}
94
93
95
- function getMatchingPackageVersion (
96
- packageName : string ,
97
- range : string ,
98
- yarn = true ,
99
- ) {
100
- if ( yarn ) {
101
- const { stdout} = execa . sync ( 'yarn' , [
102
- 'info' ,
103
- packageName ,
104
- 'versions' ,
105
- '--json' ,
106
- ] ) ;
107
- const versions = JSON . parse ( stdout ) . data as string [ ] ;
108
- const satisfying = versions . filter ( ( version ) =>
109
- semver . satisfies ( version , range ) ,
110
- ) ;
111
- const maxSatisfying = semver . maxSatisfying ( satisfying , range ) ;
112
-
113
- return maxSatisfying ;
114
- } else {
115
- const { stdout} = execa . sync ( 'npm' , [
116
- 'view' ,
117
- `${ packageName } @${ range } ` ,
118
- 'version' ,
119
- '--json' ,
120
- ] ) ;
121
- const versions = JSON . parse ( stdout ) ;
122
- const maxSatisfying = semver . maxSatisfying ( versions , range ) ;
123
- return maxSatisfying ;
124
- }
125
- }
126
-
127
- function flattenSemver ( input ) {
128
- const result = { } ;
129
- input . forEach ( ( item ) => {
130
- Object . entries ( item ) . forEach ( ( [ key , value ] ) => {
131
- if ( result [ key ] ) {
132
- if ( value !== '*' && result [ key ] !== '*' ) {
133
- result [ key ] = `${ result [ key ] } && ${ value } ` ;
134
- }
135
- } else {
136
- result [ key ] = value ;
137
- }
138
- } ) ;
139
- } ) ;
140
-
141
- return result ;
142
- }
143
-
144
94
export default async function installTransitiveDeps ( ) {
145
95
const root = process . cwd ( ) ;
146
96
const packageJsonPath = path . join ( root , 'package.json' ) ;
@@ -178,34 +128,19 @@ export default async function installTransitiveDeps() {
178
128
const loader = getLoader ( { text : 'Installing peer dependencies...' } ) ;
179
129
180
130
if ( install ) {
181
- let deps = { } as Record < string , string > ;
182
- const semverRanges = flattenSemver ( Object . values ( depsToInstall ) ) ;
183
-
131
+ let deps = new Set ( ) ;
184
132
dependenciesWithMissingDeps . map ( ( dep ) => {
185
133
const missingDeps = depsToInstall [ dep ] ;
186
- Object . entries ( missingDeps ) . map ( ( [ name ] ) => {
187
- const version = getMatchingPackageVersion (
188
- name ,
189
- semverRanges [ name ] ,
190
- isYarn ,
191
- ) ;
192
- if ( version ) {
193
- deps [ name ] = version ;
194
- }
195
- } ) ;
134
+ deps . add ( Object . keys ( missingDeps ) ) ;
196
135
} ) ;
136
+ const arr = Array . from ( deps ) as string [ ] ;
137
+ const flat = [ ] . concat ( ...arr ) ;
197
138
loader . start ( ) ;
198
139
199
140
if ( isYarn ) {
200
- execa . sync ( 'yarn' , [
201
- 'add' ,
202
- ...Object . entries ( deps ) . map ( ( [ k , v ] ) => `${ k } @^${ v } ` ) ,
203
- ] ) ;
141
+ execa . sync ( 'yarn' , [ 'add' , ...flat . map ( ( dep ) => dep ) ] ) ;
204
142
} else {
205
- execa . sync ( 'npm' , [
206
- 'install' ,
207
- ...Object . entries ( deps ) . map ( ( [ k , v ] ) => `${ k } @^${ v } ` ) ,
208
- ] ) ;
143
+ execa . sync ( 'npm' , [ 'install' , ...flat . map ( ( dep ) => dep ) ] ) ;
209
144
}
210
145
loader . succeed ( ) ;
211
146
}
0 commit comments