monorepo-next
Version:
Detach monorepo packages from normal linking
50 lines (43 loc) • 1.28 kB
JavaScript
const semver = require('semver');
function trackNewVersion({
name,
oldRange,
newRange,
newVersion,
}) {
let range = new semver.Range(newRange);
if (range.set.length > 1) {
console.warn(`Current range has an OR (${name} ${oldRange}) and is too hard to increment, falling back to ^`);
newRange = `^${newVersion}`;
} else if (range.set[0].length === 1) {
if (
// https://github.com/npm/node-semver/commit/bcab95a966413b978dc1e7bdbcb8f495b63303cd
range.set[0][0].operator
) {
// This behaviour can probably be removed in the next major.
newRange = `~${newVersion}`;
} else if (
// NOTE: wildcard range is empty string
// SEE: https://github.com/npm/node-semver/blob/bcab95a966413b978dc1e7bdbcb8f495b63303cd/test/ranges/to-comparators.js#L10-L12
range.range === ''
) {
// wildcards remain the same
newRange = oldRange;
} else {
newRange = newVersion;
}
} else {
let leftMajor = range.set[0][0].semver.major;
let rightMajor = range.set[0][1].semver.major;
if (leftMajor !== rightMajor) {
newRange = `^${newVersion}`;
} else {
newRange = `~${newVersion}`;
}
}
return newRange;
}
module.exports = {
trackNewVersion,
};
;