@@ -12,6 +12,7 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
12
12
protected $platformsDataService : IPlatformsDataService ,
13
13
protected $packageInstallationManager : IPackageInstallationManager ,
14
14
protected $packageManager : IPackageManager ,
15
+ protected $pacoteService : IPacoteService ,
15
16
private $androidResourcesMigrationService : IAndroidResourcesMigrationService ,
16
17
private $devicePlatformsConstants : Mobile . IDevicePlatformsConstants ,
17
18
private $logger : ILogger ,
@@ -20,9 +21,10 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
20
21
private $pluginsService : IPluginsService ,
21
22
private $projectDataService : IProjectDataService ,
22
23
private $resources : IResourceLoader ) {
23
- super ( $fs , $platformCommandHelper , $platformsDataService , $packageInstallationManager , $packageManager ) ;
24
+ super ( $fs , $platformCommandHelper , $platformsDataService , $packageInstallationManager , $packageManager , $pacoteService ) ;
24
25
}
25
26
27
+ static readonly typescriptPackageName : string = "typescript" ;
26
28
static readonly backupFolder : string = ".migration_backup" ;
27
29
static readonly migrateFailMessage : string = "Could not migrate the project!" ;
28
30
static readonly backupFailMessage : string = "Could not backup project folders!" ;
@@ -42,9 +44,34 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
42
44
{ packageName : constants . TNS_CORE_MODULES_WIDGETS_NAME , verifiedVersion : "6.0.0" } ,
43
45
{ packageName : "tns-platform-declarations" , isDev : true , verifiedVersion : "6.0.0-rc-2019-07-09-183845-06" } ,
44
46
{ packageName : "node-sass" , isDev : true , verifiedVersion : "4.12.0" } ,
45
- { packageName : "typescript" , isDev : true , verifiedVersion : "3.4.1" } ,
47
+ {
48
+ packageName : MigrateController . typescriptPackageName , isDev : true , getVerifiedVersion : async ( projectData : IProjectData ) => {
49
+ let verifiedVersion = "3.4.1" ;
50
+ try {
51
+ const ngcPackageName = "@angular/compiler-cli" ;
52
+ // e.g. ~8.0.0
53
+ let ngcVersion = projectData . dependencies [ ngcPackageName ] || projectData . devDependencies [ ngcPackageName ] ;
54
+ if ( ngcVersion ) {
55
+ // e.g. ~8.0.3
56
+ ngcVersion = await this . $packageInstallationManager . maxSatisfyingVersion ( ngcPackageName , ngcVersion ) ;
57
+ const ngcManifest = await this . getTemplateManifest ( ngcPackageName , ngcVersion ) ;
58
+ // e.g. >=3.4 <3.5
59
+ verifiedVersion = ( ngcManifest && ngcManifest . peerDependencies &&
60
+ ngcManifest . peerDependencies [ MigrateController . typescriptPackageName ] ) || verifiedVersion ;
61
+
62
+ // e.g. 3.4.4
63
+ verifiedVersion = await this . $packageInstallationManager . maxSatisfyingVersion (
64
+ MigrateController . typescriptPackageName , verifiedVersion ) ;
65
+ }
66
+ } catch ( error ) {
67
+ this . $logger . warn ( `Unable to determine the TypeScript version based on the Angular packages. Error is: '${ error } '.` ) ;
68
+ }
69
+
70
+ return verifiedVersion ;
71
+ }
72
+ } ,
46
73
{ packageName : "nativescript-dev-sass" , isDev : true , replaceWith : "node-sass" } ,
47
- { packageName : "nativescript-dev-typescript" , isDev : true , replaceWith : "typescript" } ,
74
+ { packageName : "nativescript-dev-typescript" , isDev : true , replaceWith : MigrateController . typescriptPackageName } ,
48
75
{ packageName : "nativescript-dev-less" , isDev : true , shouldRemove : true , warning : "LESS CSS is not supported out of the box. In order to enable it, follow the steps in this feature request: https://github.com/NativeScript/nativescript-dev-webpack/issues/967" } ,
49
76
{ packageName : constants . WEBPACK_PLUGIN_NAME , isDev : true , shouldAddIfMissing : true , verifiedVersion : "1.0.0-rc-2019-07-10-002255-01" } ,
50
77
{ packageName : "nativescript-camera" , verifiedVersion : "4.5.0" } ,
@@ -112,18 +139,6 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
112
139
}
113
140
}
114
141
115
- private async migrateOldAndroidAppResources ( projectData : IProjectData ) {
116
- const appResourcesPath = projectData . getAppResourcesDirectoryPath ( ) ;
117
- if ( ! this . $androidResourcesMigrationService . hasMigrated ( appResourcesPath ) ) {
118
- this . $logger . info ( "Migrate old Android App_Resources structure." ) ;
119
- try {
120
- await this . $androidResourcesMigrationService . migrate ( appResourcesPath ) ;
121
- } catch ( error ) {
122
- this . $logger . warn ( "Migrate old Android App_Resources structure failed: " , error . message ) ;
123
- }
124
- }
125
- }
126
-
127
142
public async shouldMigrate ( { projectDir } : IProjectDir ) : Promise < boolean > {
128
143
const projectData = this . $projectDataService . getProjectData ( projectDir ) ;
129
144
@@ -160,6 +175,18 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
160
175
}
161
176
}
162
177
178
+ private async migrateOldAndroidAppResources ( projectData : IProjectData ) {
179
+ const appResourcesPath = projectData . getAppResourcesDirectoryPath ( ) ;
180
+ if ( ! this . $androidResourcesMigrationService . hasMigrated ( appResourcesPath ) ) {
181
+ this . $logger . info ( "Migrate old Android App_Resources structure." ) ;
182
+ try {
183
+ await this . $androidResourcesMigrationService . migrate ( appResourcesPath ) ;
184
+ } catch ( error ) {
185
+ this . $logger . warn ( "Migrate old Android App_Resources structure failed: " , error . message ) ;
186
+ }
187
+ }
188
+ }
189
+
163
190
private async cleanUpProject ( projectData : IProjectData ) : Promise < void > {
164
191
this . $logger . info ( "Clean old project artefacts." ) ;
165
192
this . $projectDataService . removeNSConfigProperty ( projectData . projectDir , "useLegacyWorkflow" ) ;
@@ -261,6 +288,7 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
261
288
262
289
private async migrateDependency ( dependency : IMigrationDependency , projectData : IProjectData ) : Promise < void > {
263
290
const hasDependency = this . hasDependency ( dependency , projectData ) ;
291
+ const dependencyVersion = await this . getDependencyVerifiedVersion ( dependency , projectData ) ;
264
292
if ( dependency . warning ) {
265
293
this . $logger . warn ( dependency . warning ) ;
266
294
}
@@ -272,33 +300,43 @@ export class MigrateController extends UpdateControllerBase implements IMigrateC
272
300
if ( ! replacementDep ) {
273
301
this . $errors . failWithoutHelp ( "Failed to find replacement dependency." ) ;
274
302
}
303
+
304
+ const replacementDepVersion = await this . getDependencyVerifiedVersion ( replacementDep , projectData ) ;
275
305
this . $logger . info ( `Replacing '${ dependency . packageName } ' with '${ replacementDep . packageName } '.` ) ;
276
- this . $pluginsService . addToPackageJson ( replacementDep . packageName , replacementDep . verifiedVersion , replacementDep . isDev , projectData . projectDir ) ;
306
+ this . $pluginsService . addToPackageJson ( replacementDep . packageName , replacementDepVersion , replacementDep . isDev , projectData . projectDir ) ;
277
307
}
278
308
279
309
return ;
280
310
}
281
311
282
312
if ( hasDependency && await this . shouldMigrateDependencyVersion ( dependency , projectData ) ) {
283
- this . $logger . info ( `Updating '${ dependency . packageName } ' to compatible version '${ dependency . verifiedVersion } '` ) ;
284
- this . $pluginsService . addToPackageJson ( dependency . packageName , dependency . verifiedVersion , dependency . isDev , projectData . projectDir ) ;
313
+ this . $logger . info ( `Updating '${ dependency . packageName } ' to compatible version '${ dependencyVersion } '` ) ;
314
+ this . $pluginsService . addToPackageJson ( dependency . packageName , dependencyVersion , dependency . isDev , projectData . projectDir ) ;
285
315
return ;
286
316
}
287
317
288
318
if ( ! hasDependency && dependency . shouldAddIfMissing ) {
289
- this . $logger . info ( `Adding '${ dependency . packageName } ' with version '${ dependency . verifiedVersion } '` ) ;
290
- this . $pluginsService . addToPackageJson ( dependency . packageName , dependency . verifiedVersion , dependency . isDev , projectData . projectDir ) ;
319
+ this . $logger . info ( `Adding '${ dependency . packageName } ' with version '${ dependencyVersion } '` ) ;
320
+ this . $pluginsService . addToPackageJson ( dependency . packageName , dependencyVersion , dependency . isDev , projectData . projectDir ) ;
291
321
}
292
322
}
293
323
324
+ private async getDependencyVerifiedVersion ( dependency : IMigrationDependency , projectData : IProjectData ) : Promise < string > {
325
+ const verifiedVersion = dependency . getVerifiedVersion ?
326
+ await dependency . getVerifiedVersion ( projectData ) : dependency . verifiedVersion ;
327
+
328
+ return verifiedVersion ;
329
+ }
330
+
294
331
private async shouldMigrateDependencyVersion ( dependency : IMigrationDependency , projectData : IProjectData ) : Promise < boolean > {
295
332
const devDependencies = projectData . devDependencies || { } ;
296
333
const dependencies = projectData . dependencies || { } ;
297
334
const packageName = dependency . packageName ;
298
335
const version = dependencies [ packageName ] || devDependencies [ packageName ] ;
299
336
const maxSatisfyingVersion = await this . getMaxDependencyVersion ( dependency . packageName , version ) ;
337
+ const dependencyVersion = await this . getDependencyVerifiedVersion ( dependency , projectData ) ;
300
338
301
- return ! ( maxSatisfyingVersion && semver . gte ( maxSatisfyingVersion , dependency . verifiedVersion ) ) ;
339
+ return ! ( maxSatisfyingVersion && semver . gte ( maxSatisfyingVersion , dependencyVersion ) ) ;
302
340
}
303
341
304
342
protected async shouldUpdateRuntimeVersion ( { targetVersion, platform, projectData } : { targetVersion : string , platform : string , projectData : IProjectData } ) : Promise < boolean > {
0 commit comments