From b4b4f2d554ac5d64d83ccdbe584a84b26026cdf3 Mon Sep 17 00:00:00 2001 From: DimitarTachev Date: Mon, 15 Jul 2019 17:47:11 +0300 Subject: [PATCH] fix: update nativescript-angular during app migration as we are updating the compiler-cli from dev-webpack --- lib/controllers/migrate-controller.ts | 75 ++++++++++++--------------- lib/definitions/migrate.d.ts | 1 - 2 files changed, 33 insertions(+), 43 deletions(-) diff --git a/lib/controllers/migrate-controller.ts b/lib/controllers/migrate-controller.ts index 49c00bcd52..c6a4d28e89 100644 --- a/lib/controllers/migrate-controller.ts +++ b/lib/controllers/migrate-controller.ts @@ -70,6 +70,15 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`; { packageName: "kinvey-nativescript-sdk", verifiedVersion: "4.2.1" }, { packageName: "nativescript-plugin-firebase", verifiedVersion: "9.0.2" }, { packageName: "nativescript-vue", verifiedVersion: "2.3.0" }, + { + packageName: "nativescript-angular", verifiedVersion: "8.0.2", + shouldMigrateAction: async (projectData: IProjectData, allowInvalidVersions: boolean) => { + const dependency = { packageName: "nativescript-angular", verifiedVersion: "8.0.2", isDev: false }; + const result = this.hasDependency(dependency, projectData) && await this.shouldMigrateDependencyVersion(dependency, projectData, allowInvalidVersions); + return result; + }, + migrateAction: this.migrateNativeScriptAngular.bind(this) + }, { packageName: "nativescript-permissions", verifiedVersion: "1.3.0" }, { packageName: "nativescript-cardview", verifiedVersion: "3.2.0" }, { @@ -81,7 +90,7 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`; }, migrateAction: this.migrateUnitTestRunner.bind(this) }, - { packageName: MigrateController.typescriptPackageName, isDev: true, getVerifiedVersion: this.getAngularTypeScriptVersion.bind(this) }, + { packageName: MigrateController.typescriptPackageName, isDev: true, verifiedVersion: "3.4.5" }, { packageName: "nativescript-localize", verifiedVersion: "4.2.0" }, { packageName: "nativescript-dev-babel", verifiedVersion: "0.2.1" }, { packageName: "nativescript-nfc", verifiedVersion: "4.0.1" } @@ -179,31 +188,6 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`; } } - private async getAngularTypeScriptVersion(projectData: IProjectData): Promise { - let verifiedVersion = "3.4.1"; - try { - const ngcPackageName = "@angular/compiler-cli"; - // e.g. ~8.0.0 - let ngcVersion = projectData.dependencies[ngcPackageName] || projectData.devDependencies[ngcPackageName]; - if (ngcVersion) { - // e.g. 8.0.3 - ngcVersion = await this.$packageInstallationManager.maxSatisfyingVersion(ngcPackageName, ngcVersion); - const ngcManifest = await this.getPackageManifest(ngcPackageName, ngcVersion); - // e.g. >=3.4 <3.5 - verifiedVersion = (ngcManifest && ngcManifest.peerDependencies && - ngcManifest.peerDependencies[MigrateController.typescriptPackageName]) || verifiedVersion; - - // e.g. 3.4.4 - verifiedVersion = await this.$packageInstallationManager.maxSatisfyingVersion( - MigrateController.typescriptPackageName, verifiedVersion); - } - } catch (error) { - this.$logger.warn(`Unable to determine the TypeScript version based on the Angular packages. Error is: '${error}'.`); - } - - return verifiedVersion; - } - private async migrateOldAndroidAppResources(projectData: IProjectData, backupDir: string) { const appResourcesPath = projectData.getAppResourcesDirectoryPath(); if (!this.$androidResourcesMigrationService.hasMigrated(appResourcesPath)) { @@ -329,33 +313,23 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`; this.$errors.failWithoutHelp("Failed to find replacement dependency."); } - const replacementDepVersion = await this.getDependencyVerifiedVersion(replacementDep, projectData); this.$logger.info(`Replacing '${dependency.packageName}' with '${replacementDep.packageName}'.`); - this.$pluginsService.addToPackageJson(replacementDep.packageName, replacementDepVersion, replacementDep.isDev, projectData.projectDir); + this.$pluginsService.addToPackageJson(replacementDep.packageName, replacementDep.verifiedVersion, replacementDep.isDev, projectData.projectDir); } return; } - const dependencyVersion = await this.getDependencyVerifiedVersion(dependency, projectData); if (hasDependency && await this.shouldMigrateDependencyVersion(dependency, projectData, allowInvalidVersions)) { - this.$logger.info(`Updating '${dependency.packageName}' to compatible version '${dependencyVersion}'`); - this.$pluginsService.addToPackageJson(dependency.packageName, dependencyVersion, dependency.isDev, projectData.projectDir); + this.$logger.info(`Updating '${dependency.packageName}' to compatible version '${dependency.verifiedVersion}'`); + this.$pluginsService.addToPackageJson(dependency.packageName, dependency.verifiedVersion, dependency.isDev, projectData.projectDir); return; } if (!hasDependency && dependency.shouldAddIfMissing) { - this.$logger.info(`Adding '${dependency.packageName}' with version '${dependencyVersion}'`); - this.$pluginsService.addToPackageJson(dependency.packageName, dependencyVersion, dependency.isDev, projectData.projectDir); - } - } - - private async getDependencyVerifiedVersion(dependency: IMigrationDependency, projectData: IProjectData): Promise { - if (!dependency.verifiedVersion && dependency.getVerifiedVersion) { - dependency.verifiedVersion = await dependency.getVerifiedVersion(projectData); + this.$logger.info(`Adding '${dependency.packageName}' with version '${dependency.verifiedVersion}'`); + this.$pluginsService.addToPackageJson(dependency.packageName, dependency.verifiedVersion, dependency.isDev, projectData.projectDir); } - - return dependency.verifiedVersion; } private async shouldMigrateDependencyVersion(dependency: IMigrationDependency, projectData: IProjectData, allowInvalidVersions: boolean): Promise { @@ -364,7 +338,7 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`; const packageName = dependency.packageName; const referencedVersion = dependencies[packageName] || devDependencies[packageName]; const installedVersion = await this.getMaxDependencyVersion(dependency.packageName, referencedVersion); - const requiredVersion = await this.getDependencyVerifiedVersion(dependency, projectData); + const requiredVersion = dependency.verifiedVersion; return this.isOutdatedVersion(installedVersion, requiredVersion, allowInvalidVersions); } @@ -410,6 +384,23 @@ Running this command will ${MigrateController.COMMON_MIGRATE_MESSAGE}`; return dependencies; } + + private async migrateNativeScriptAngular(): Promise { + const dependencies = [ + { packageName: "@angular/platform-browser-dynamic", verifiedVersion: "8.0.0", shouldAddIfMissing: true }, + { packageName: "@angular/common", verifiedVersion: "8.0.0", shouldAddIfMissing: true }, + { packageName: "@angular/compiler", verifiedVersion: "8.0.0", shouldAddIfMissing: true }, + { packageName: "@angular/core", verifiedVersion: "8.0.0", shouldAddIfMissing: true }, + { packageName: "@angular/forms", verifiedVersion: "8.0.0", shouldAddIfMissing: true }, + { packageName: "@angular/http", verifiedVersion: "8.0.0-beta.10", shouldAddIfMissing: true }, + { packageName: "@angular/platform-browser", verifiedVersion: "8.0.0", shouldAddIfMissing: true }, + { packageName: "@angular/router", verifiedVersion: "8.0.0", shouldAddIfMissing: true }, + { packageName: "rxjs", verifiedVersion: "6.3.3", shouldAddIfMissing: true }, + { packageName: "zone.js", verifiedVersion: "0.9.1", shouldAddIfMissing: true } + ]; + + return dependencies; + } } $injector.register("migrateController", MigrateController); diff --git a/lib/definitions/migrate.d.ts b/lib/definitions/migrate.d.ts index 1931d4fc88..81ce7da475 100644 --- a/lib/definitions/migrate.d.ts +++ b/lib/definitions/migrate.d.ts @@ -19,7 +19,6 @@ interface IMigrationDependency extends IDependency { replaceWith?: string; warning?: string; verifiedVersion?: string; - getVerifiedVersion?: (projectData: IProjectData) => Promise; shouldAddIfMissing?: boolean; shouldMigrateAction?: (projectData: IProjectData, allowInvalidVersions: boolean) => Promise; migrateAction?: (projectData: IProjectData, migrationBackupDirPath: string) => Promise;