1
1
import * as path from "path" ;
2
2
import * as semver from "semver" ;
3
3
import * as constants from "../constants" ;
4
+ import * as glob from "glob" ;
4
5
import { UpdateControllerBase } from "./update-controller-base" ;
5
6
import { fromWindowsRelativePathToUnix } from "../common/helpers" ;
6
7
@@ -65,7 +66,8 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
65
66
{ packageName : "nativescript-vue" , verifiedVersion : "2.3.0-rc.0" } ,
66
67
{ packageName : "nativescript-permissions" , verifiedVersion : "1.3.0" } ,
67
68
{ packageName : "nativescript-cardview" , verifiedVersion : "3.2.0" } ,
68
- { packageName : "nativescript-unit-test-runner" , verifiedVersion : "0.6.3" ,
69
+ {
70
+ packageName : "nativescript-unit-test-runner" , verifiedVersion : "0.6.3" ,
69
71
shouldMigrateAction : ( projectData : IProjectData ) => this . hasDependency ( { packageName : "nativescript-unit-test-runner" , isDev : false } , projectData ) ,
70
72
migrateAction : this . migrateUnitTestRunner . bind ( this )
71
73
}
@@ -92,6 +94,14 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
92
94
return ;
93
95
}
94
96
97
+ try {
98
+ this . $logger . info ( "Backup auto-generated files." ) ;
99
+ this . handleAutoGeneratedFiles ( backupDir , projectData ) ;
100
+ this . $logger . info ( "Backup auto-generated files complete." ) ;
101
+ } catch ( error ) {
102
+ this . $logger . trace ( `Error during auto-generated files handling. ${ ( error && error . message ) || error } ` ) ;
103
+ }
104
+
95
105
try {
96
106
await this . cleanUpProject ( projectData ) ;
97
107
await this . migrateDependencies ( projectData ) ;
@@ -147,6 +157,53 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
147
157
this . $logger . info ( "Clean old project artefacts complete." ) ;
148
158
}
149
159
160
+ private async handleAutoGeneratedFiles ( backupDir : string , projectData : IProjectData ) {
161
+ const globOptions : glob . IOptions = {
162
+ silent : true ,
163
+ nocase : true ,
164
+ matchBase : true ,
165
+ nodir : true ,
166
+ absolute : false ,
167
+ root : projectData . appDirectoryPath
168
+ } ;
169
+
170
+ const jsFiles = glob . sync ( "*.@(js|ts|js.map)" , globOptions ) ;
171
+ const autoGeneratedJsFiles = this . getGeneratedFiles ( jsFiles , [ ".js" ] , [ ".ts" ] ) ;
172
+ const autoGeneratedJsMapFiles = this . getGeneratedFiles ( jsFiles , [ ".map" ] , [ "" ] ) ;
173
+ const cssFiles = glob . sync ( "*.@(le|sa|sc|c)ss" , globOptions ) ;
174
+ const autoGeneratedCssFiles = this . getGeneratedFiles ( cssFiles , [ ".css" ] , [ ".scss" , ".sass" , ".less" ] ) ;
175
+
176
+ const allGeneratedFiles = autoGeneratedJsFiles . concat ( autoGeneratedJsMapFiles ) . concat ( autoGeneratedCssFiles ) ;
177
+ for ( const generatedFile of allGeneratedFiles ) {
178
+ const sourceFile = path . join ( projectData . projectDir , generatedFile ) ;
179
+ const destinationFile = path . join ( backupDir , generatedFile ) ;
180
+ const destinationFileDir = path . dirname ( destinationFile ) ;
181
+ this . $fs . ensureDirectoryExists ( destinationFileDir ) ;
182
+ this . $fs . rename ( sourceFile , destinationFile ) ;
183
+ }
184
+ }
185
+
186
+ private getGeneratedFiles ( allFiles : string [ ] , generatedFileExts : string [ ] , sourceFileExts : string [ ] ) : string [ ] {
187
+ const autoGeneratedFiles = allFiles . filter ( file => {
188
+ let isGenerated = false ;
189
+ const { dir, name, ext } = path . parse ( file ) ;
190
+ console . log ( file ) ;
191
+ if ( generatedFileExts . indexOf ( ext ) > - 1 ) {
192
+ for ( const sourceExt of sourceFileExts ) {
193
+ const possibleSourceFile = path . format ( { dir, name, ext : sourceExt } ) ;
194
+ isGenerated = allFiles . indexOf ( possibleSourceFile ) > - 1 ;
195
+ if ( isGenerated ) {
196
+ break ;
197
+ }
198
+ }
199
+ }
200
+
201
+ return isGenerated ;
202
+ } ) ;
203
+
204
+ return autoGeneratedFiles ;
205
+ }
206
+
150
207
private async migrateDependencies ( projectData : IProjectData ) : Promise < void > {
151
208
this . $logger . info ( "Start dependencies migration." ) ;
152
209
for ( let i = 0 ; i < this . migrationDependencies . length ; i ++ ) {
0 commit comments