From c4a35e7d16945b090d06981e5f5a416b1024fb76 Mon Sep 17 00:00:00 2001 From: Brandon Roberts Date: Fri, 7 Feb 2020 12:32:20 -0600 Subject: [PATCH] fix(core): check semver before updating dependencies using migrations.json --- .../utils/update-packages-in-package-json.ts | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/packages/workspace/src/utils/update-packages-in-package-json.ts b/packages/workspace/src/utils/update-packages-in-package-json.ts index 5f3f651488cc9..989245f760be8 100644 --- a/packages/workspace/src/utils/update-packages-in-package-json.ts +++ b/packages/workspace/src/utils/update-packages-in-package-json.ts @@ -1,5 +1,7 @@ import { updateJsonInTree } from './ast-utils'; import { readFileSync } from 'fs'; +import { checkAndCleanWithSemver } from './version-utils'; +import { lt } from 'semver'; export function updatePackagesInPackageJson( migrationFilePath: string, @@ -16,13 +18,36 @@ export function updatePackagesInPackageJson( const updatedPackages = packageJsonUpdates.packages; return updateJsonInTree('package.json', json => { Object.keys(updatedPackages).forEach(p => { + /** + * Check the updated version against semver + */ + const cleanUpdatedVersion = checkAndCleanWithSemver( + p, + updatedPackages[p].version + ); + if (json.devDependencies && json.devDependencies[p]) { - json.devDependencies[p] = updatedPackages[p].version; + const cleanDevVersion = checkAndCleanWithSemver( + p, + json.devDependencies[p] + ); + + if (lt(cleanDevVersion, cleanUpdatedVersion)) { + json.devDependencies[p] = updatedPackages[p].version; + } } else if (json.dependencies && json.dependencies[p]) { - json.dependencies[p] = updatedPackages[p].version; + const cleanVersion = checkAndCleanWithSemver(p, json.dependencies[p]); + + if (lt(cleanVersion, cleanUpdatedVersion)) { + json.dependencies[p] = updatedPackages[p].version; + } } else if (updatedPackages[p].alwaysAddToPackageJson) { - if (!json.dependencies) json.dependencies = {}; - json.dependencies[p] = updatedPackages[p].version; + const cleanVersion = checkAndCleanWithSemver(p, json.dependencies[p]); + + if (lt(cleanVersion, cleanUpdatedVersion)) { + if (!json.dependencies) json.dependencies = {}; + json.dependencies[p] = updatedPackages[p].version; + } } }); return json;