return (() => { let platformData = this.$platformsData.getPlatformData(platform); this.$projectDataService.initialize(this.$projectData.projectDir); let data = this.$projectDataService.getValue(platformData.frameworkPackageName).wait(); let currentVersion = data && data.version ? data.version : "0.2.0"; let newVersion = version || this.$npmInstallationManager.getLatestVersion(platformData.frameworkPackageName).wait(); let cachedPackageData = this.$npmInstallationManager.addToCache(platformData.frameworkPackageName, newVersion).wait(); newVersion = (cachedPackageData && cachedPackageData.version) || newVersion; let canUpdate = platformData.platformProjectService.canUpdatePlatform(currentVersion, newVersion).wait(); if (canUpdate) { if (!semver.valid(newVersion)) { this.$errors.fail("The version %s is not valid. The version should consists from 3 parts separated by dot.", newVersion); } if (semver.gt(currentVersion, newVersion)) { // Downgrade let isUpdateConfirmed = this.$prompter.confirm(`You are going to downgrade to runtime v.${newVersion}. Are you sure?`, () => false).wait(); if (isUpdateConfirmed) { this.updatePlatformCore(platformData, currentVersion, newVersion, canUpdate).wait(); } } else if (semver.eq(currentVersion, newVersion)) { this.$errors.fail("Current and new version are the same."); } else { this.updatePlatformCore(platformData, currentVersion, newVersion, canUpdate).wait(); } } else { this.updatePlatformCore(platformData, currentVersion, newVersion, canUpdate).wait(); } }).future<void>()();
private async updatePlatform(platform: string, version: string, platformTemplate: string, projectData: IProjectData, config: IPlatformOptions): Promise<void> { const platformData = this.$platformsData.getPlatformData(platform, projectData); const data = this.$projectDataService.getNSValue(projectData.projectDir, platformData.frameworkPackageName); const currentVersion = data && data.version ? data.version : "0.2.0"; const installedModuleDir = temp.mkdirSync("runtime-to-update"); let newVersion = version === constants.PackageVersion.NEXT ? await this.$packageInstallationManager.getNextVersion(platformData.frameworkPackageName) : version || await this.$packageInstallationManager.getLatestCompatibleVersion(platformData.frameworkPackageName); await this.$pacoteService.extractPackage(`${platformData.frameworkPackageName}@${newVersion}`, installedModuleDir); const cachedPackageData = this.$fs.readJson(path.join(installedModuleDir, "package.json")); newVersion = (cachedPackageData && cachedPackageData.version) || newVersion; const canUpdate = platformData.platformProjectService.canUpdatePlatform(installedModuleDir, projectData); if (canUpdate) { if (!semver.valid(newVersion)) { this.$errors.fail("The version %s is not valid. The version should consists from 3 parts separated by dot.", newVersion); } if (!semver.gt(currentVersion, newVersion)) { await this.updatePlatformCore(platformData, { currentVersion, newVersion, canUpdate, platformTemplate }, projectData, config); } else if (semver.eq(currentVersion, newVersion)) { this.$errors.fail("Current and new version are the same."); } else { this.$errors.fail(`Your current version: ${currentVersion} is higher than the one you're trying to install ${newVersion}.`); } } else { this.$errors.failWithoutHelp("Native Platform cannot be updated."); } }
public async isLatestVersionInstalled(): Promise<boolean> { const extensionData = this.getExtensionData(); if (extensionData) { const latestVersion = await this.$npmInstallationManager.getLatestVersion(constants.NATIVESCRIPT_CLOUD_EXTENSION_NAME); return semver.eq(latestVersion, extensionData.version); } return false; }
strn = semver.inc(str, "preminor", loose); strn = semver.inc(str, "patch", loose); strn = semver.inc(str, "prepatch", loose); strn = semver.inc(str, "prerelease", loose); strn = semver.inc(str, "prerelease", loose, "alpha"); num = semver.major(str, loose); num = semver.minor(str, loose); num = semver.patch(str, loose); strArr = semver.prerelease(str, loose); // Comparison bool = semver.gt(v1, v2, loose); bool = semver.gte(v1, v2, loose); bool = semver.lt(v1, v2, loose); bool = semver.lte(v1, v2, loose); bool = semver.eq(v1, v2, loose); bool = semver.neq(v1, v2, loose); bool = semver.cmp(v1, op, v2, loose); comparatorResult = semver.compare(v1, v2, loose); comparatorResult = semver.rcompare(v1, v2, loose); comparatorResult = semver.compareIdentifiers(str, str); comparatorResult = semver.rcompareIdentifiers(str, str); versionsArr = semver.sort(['', new semver.SemVer('')]); versionsArr = semver.rsort(['', new semver.SemVer('')]); diff = semver.diff(v1, v2, loose); // Ranges str = semver.validRange(str, loose); bool = semver.satisfies(version, str, loose); str = semver.maxSatisfying(versions, str, loose); str = semver.minSatisfying(versions, str, loose);
return Object.keys(manifest.versions).sort((a, b) => { return semver.gt(a, b) ? 1 : semver.eq(a, b) ? 0 : -1; });