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;