UNPKG

nx

Version:

The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.

46 lines (45 loc) 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.filterDowngradedUpdates = filterDowngradedUpdates; const semver_1 = require("semver"); const version_utils_1 = require("./version-utils"); /** * Drop entries from `packageUpdates` that would either downgrade the package * (move resolved version backward) or rewrite a specifier that is already * exactly pinned to the resolved version (a no-op write). Keep genuine * upgrades and narrowing rewrites where the user's range covers a version * lower than what's resolved (the migrator's traditional "lock to recommended * exact pin" behavior). */ function filterDowngradedUpdates(packageUpdates, packageJson, getInstalledVersion) { const result = {}; for (const [name, update] of Object.entries(packageUpdates)) { const resolved = getInstalledVersion(name); if (!resolved) { // Not installed; let downstream logic decide whether to add it. result[name] = update; continue; } const proposed = (0, version_utils_1.normalizeVersion)(update.version); const resolvedNorm = (0, version_utils_1.normalizeVersion)(resolved); if ((0, semver_1.gt)(proposed, resolvedNorm)) { result[name] = update; continue; } if ((0, semver_1.lt)(proposed, resolvedNorm)) { continue; } // proposed === resolved: keep when narrowing a looser specifier to an // exact pin; drop when the specifier is already exact at resolved. const specifier = packageJson?.dependencies?.[name] ?? packageJson?.devDependencies?.[name]; if (!specifier) { continue; } // Skip specifiers that aren't semver ranges (workspace:/npm:/git/file). const floor = (0, semver_1.validRange)(specifier) ? (0, semver_1.minVersion)(specifier) : null; if (floor && (0, semver_1.lt)(floor.version, resolvedNorm)) { result[name] = update; } } return result; }