@@ -108,6 +108,20 @@ export function mergeConfig(lhs, rhs) {
108
108
} ;
109
109
}
110
110
111
+ /**
112
+ * Returns whether `react-native.config.js` needs to be updated.
113
+ * @param {string } packagePath
114
+ * @returns {boolean }
115
+ */
116
+ function shouldUpdateReactNativeConfig ( packagePath , fs = nodefs ) {
117
+ const configPath = path . join ( packagePath , "react-native.config.js" ) ;
118
+ const config = readTextFile ( configPath , fs ) ;
119
+ return (
120
+ ! / [ " ' ` ] r e a c t - n a t i v e - t e s t - a p p [ " ' ` ] / . test ( config ) ||
121
+ ! config . includes ( "configureProjects" )
122
+ ) ;
123
+ }
124
+
111
125
/**
112
126
* Sort the keys in specified object.
113
127
* @param {Record<string, unknown> } obj
@@ -609,15 +623,14 @@ export function updatePackageManifest(
609
623
610
624
/**
611
625
* Writes all specified files to disk.
612
- * @param {Configuration["files" ] } files
626
+ * @param {[string, string | FileCopy][ ] } files
613
627
* @param {string } destination
614
628
* @returns {Promise<void[]> }
615
629
*/
616
630
export function writeAllFiles ( files , destination , fs = nodefs . promises ) {
617
631
const options = { recursive : true , mode : 0o755 } ;
618
632
return Promise . all (
619
- Object . keys ( files ) . map ( async ( filename ) => {
620
- const content = files [ filename ] ;
633
+ files . map ( async ( [ filename , content ] ) => {
621
634
if ( ! content ) {
622
635
return ;
623
636
}
@@ -665,8 +678,24 @@ export function configure(params, fs = nodefs) {
665
678
}
666
679
667
680
const { files, oldFiles } = config ;
681
+ const templateFiles = Object . entries ( files ) . filter ( ( [ filename ] ) => {
682
+ switch ( filename ) {
683
+ case "react-native.config.js" : {
684
+ const needsUpdate = shouldUpdateReactNativeConfig ( packagePath ) ;
685
+ if ( ! needsUpdate ) {
686
+ warn (
687
+ `skipped modifying '${ filename } ' because it may already be configured for 'react-native-test-app'`
688
+ ) ;
689
+ }
690
+ return needsUpdate ;
691
+ }
692
+
693
+ default :
694
+ return true ;
695
+ }
696
+ } ) ;
668
697
669
- writeAllFiles ( files , packagePath ) . then ( ( ) => {
698
+ writeAllFiles ( templateFiles , packagePath ) . then ( ( ) => {
670
699
const packageManifest = path . join ( packagePath , "package.json" ) ;
671
700
if ( ! fs . existsSync ( packageManifest ) ) {
672
701
// We cannot assume that the app itself is an npm package. Some libraries
0 commit comments