From a737a1b4ef775625fd630863e68e3016f5962c50 Mon Sep 17 00:00:00 2001 From: Gabriel-Ladzaretti <97394622+Gabriel-Ladzaretti@users.noreply.github.com> Date: Thu, 3 Mar 2022 12:50:30 +0200 Subject: [PATCH] fix(pep440): added support for widen & replace rangeStrategies (#14334) --- lib/versioning/pep440/index.spec.ts | 149 +++++++++--------- lib/versioning/pep440/range.ts | 226 +++++++++++++++++++++++++--- lib/versioning/rez/index.spec.ts | 156 +++++++++---------- 3 files changed, 360 insertions(+), 171 deletions(-) diff --git a/lib/versioning/pep440/index.spec.ts b/lib/versioning/pep440/index.spec.ts index e0804fe2f9..38df688bd4 100644 --- a/lib/versioning/pep440/index.spec.ts +++ b/lib/versioning/pep440/index.spec.ts @@ -84,74 +84,87 @@ describe('versioning/pep440/index', () => { ); test.each` - currentValue | rangeStrategy | currentVersion | newVersion | expected - ${'1.0.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'1.2.3'} - ${'1.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'1.2.3'} - ${'1.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'==1.0.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'==1.0.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'==1.0.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'>=1.2.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} - ${'>=1.2.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.0'} - ${'>=1.2.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'~=1.2.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3'} - ${'~=1.2.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.0'} - ${'~=1.2.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'~=1.0.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3'} - ${'~=1.0.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3'} - ${'~=1.0.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'==1.2.*'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.*'} - ${'==1.2.*'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.*'} - ${'==1.2.*'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'==1.0.*'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.*'} - ${'==1.0.*'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.*'} - ${'==1.0.*'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'<1.2.2.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.2.4.0'} - ${'<1.2.2.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.2.4.0'} - ${'<1.2.2.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'<1.2.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.2.4'} - ${'<1.2.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.2.4'} - ${'<1.2.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'<1.2'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.3'} - ${'<1.2'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.3'} - ${'<1.2'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'<1'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<2'} - ${'<1'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<2'} - ${'<1'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'<2.0.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<2.0.0'} - ${'<2.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<2.0.0'} - ${'<2.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'>0.9.8'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'>0.9.8'} - ${'>0.9.8'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'>0.9.8'} - ${'>0.9.8'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'>2.0.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} - ${'>2.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} - ${'>2.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'>=2.0.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} - ${'>=2.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} - ${'>=2.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'~=1.1.0, !=1.1.1'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3, !=1.1.1'} - ${'~=1.1.0, !=1.1.1'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3, !=1.1.1'} - ${'~=1.1.0, !=1.1.1'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'~=1.1.0,!=1.1.1'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3,!=1.1.1'} - ${'~=1.1.0,!=1.1.1'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3,!=1.1.1'} - ${'~=1.1.0,!=1.1.1'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${' '} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${' '} - ${' '} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${' '} - ${' '} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'invalid'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${null} - ${'invalid'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${null} - ${'invalid'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'===1.0.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${null} - ${'===1.0.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${null} - ${'===1.0.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'!=1.2.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${null} - ${'!=1.2.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${null} - ${'!=1.2.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} - ${'~=1.1.0,!=1.1.1'} | ${'unsupported'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3,!=1.1.1'} - ${'~=7.2'} | ${'replace'} | ${'7.2.0'} | ${'8.0.1'} | ${'~=8.0'} - ${'~=7.2'} | ${'replace'} | ${'7.2.0'} | ${'8'} | ${'~=8.0'} - ${'~=7.2.0'} | ${'replace'} | ${'7.2.0'} | ${'8.2'} | ${'~=8.2.0'} + currentValue | rangeStrategy | currentVersion | newVersion | expected + ${'1.0.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'1.2.3'} + ${'1.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'1.2.3'} + ${'1.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'==1.0.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'==1.0.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'==1.0.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'>=1.2.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} + ${'>=1.2.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.0'} + ${'>=1.2.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'~=1.2.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3'} + ${'~=1.2.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.0'} + ${'~=1.2.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'~=1.0.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3'} + ${'~=1.0.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3'} + ${'~=1.0.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'==1.2.*'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.*'} + ${'==1.2.*'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.*'} + ${'==1.2.*'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'==1.0.*'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.*'} + ${'==1.0.*'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.*'} + ${'==1.0.*'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'<1.2.2.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.2.3.1'} + ${'<1.2.2.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.2.3.1'} + ${'<1.2.2.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'<1.2.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.2.4'} + ${'<1.2.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.2.4'} + ${'<1.2.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'<1.2'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.3'} + ${'<1.2'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<1.3'} + ${'<1.2'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'<1'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<2'} + ${'<1'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<2'} + ${'<1'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'<2.0.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'<2.0.0'} + ${'<2.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'<2.0.0'} + ${'<2.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'>0.9.8'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'>0.9.8'} + ${'>0.9.8'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'>0.9.8'} + ${'>0.9.8'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'>2.0.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} + ${'>2.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} + ${'>2.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'>=2.0.0'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} + ${'>=2.0.0'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'>=1.2.3'} + ${'>=2.0.0'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'~=1.1.0, !=1.1.1'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3, !=1.1.1'} + ${'~=1.1.0, !=1.1.1'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3, !=1.1.1'} + ${'~=1.1.0, !=1.1.1'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'~=1.1.0,!=1.1.1'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3,!=1.1.1'} + ${'~=1.1.0,!=1.1.1'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3,!=1.1.1'} + ${'~=1.1.0,!=1.1.1'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${' '} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${' '} + ${' '} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${' '} + ${' '} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'invalid'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${null} + ${'invalid'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${null} + ${'invalid'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'===1.0.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${null} + ${'===1.0.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${null} + ${'===1.0.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'!=1.2.3'} | ${'bump'} | ${'1.0.0'} | ${'1.2.3'} | ${null} + ${'!=1.2.3'} | ${'replace'} | ${'1.0.0'} | ${'1.2.3'} | ${null} + ${'!=1.2.3'} | ${'pin'} | ${'1.0.0'} | ${'1.2.3'} | ${'==1.2.3'} + ${'~=1.1.0,!=1.1.1'} | ${'unsupported'} | ${'1.0.0'} | ${'1.2.3'} | ${'~=1.2.3,!=1.1.1'} + ${'>=19.12.2,<20.13.9'} | ${'replace'} | ${'19.12.2'} | ${'21.3.1'} | ${'>=21.3.1,<22.0.0'} + ${'>=19.12.2,<19.13.9'} | ${'replace'} | ${'19.12.2'} | ${'20.3.1'} | ${'>=20.3.1,<20.4.0'} + ${'>=19.12.2,<19.13.0'} | ${'replace'} | ${'19.12.2'} | ${'20.3.1'} | ${'>=20.3.1,<20.4.0'} + ${'>=19.12.2,<19.13.0'} | ${'replace'} | ${'19.12.2'} | ${'20.3.0'} | ${'>=20.3.0,<20.4.0'} + ${'>=19.12.2,<19.13.0'} | ${'replace'} | ${'19.12.2'} | ${'19.13.1'} | ${'>=19.13.1,<19.14.0'} + ${'>=19.12.2,<19.13.0'} | ${'replace'} | ${'19.12.2'} | ${'19.13.0'} | ${'>=19.13.0,<19.14.0'} + ${'>=19.12.2,<19.13.0'} | ${'auto'} | ${'19.12.2'} | ${'19.13.0'} | ${'>=19.13.0,<19.14.0'} + ${'>=19.12.2,<20.13.9'} | ${'widen'} | ${'19.12.2'} | ${'21.3.1'} | ${'>=19.12.2,<21.3.2'} + ${'>=19.12.2,<19.13.9'} | ${'widen'} | ${'19.12.2'} | ${'20.3.1'} | ${'>=19.12.2,<20.3.2'} + ${'>=19.12.2,<19.13.0'} | ${'widen'} | ${'19.12.2'} | ${'20.3.1'} | ${'>=19.12.2,<20.4.0'} + ${'>=19.12.2,<19.13.0'} | ${'widen'} | ${'19.12.2'} | ${'20.3.0'} | ${'>=19.12.2,<20.4.0'} + ${'>=19.12.2,<19.13.0'} | ${'widen'} | ${'19.12.2'} | ${'19.13.1'} | ${'>=19.12.2,<19.14.0'} + ${'>=19.12.2,<19.13.0'} | ${'widen'} | ${'19.12.2'} | ${'19.13.0'} | ${'>=19.12.2,<19.14.0'} + ${'~=7.2'} | ${'replace'} | ${'7.2.0'} | ${'8.0.1'} | ${'~=8.0'} + ${'~=7.2'} | ${'replace'} | ${'7.2.0'} | ${'8'} | ${'~=8.0'} + ${'~=7.2.0'} | ${'replace'} | ${'7.2.0'} | ${'8.2'} | ${'~=8.2.0'} `( 'getNewValue("$currentValue", "$rangeStrategy", "$currentVersion", "$newVersion") === "$expected"', ({ currentValue, rangeStrategy, currentVersion, newVersion, expected }) => { diff --git a/lib/versioning/pep440/range.ts b/lib/versioning/pep440/range.ts index 2413dbd63b..e4ec5354f5 100644 --- a/lib/versioning/pep440/range.ts +++ b/lib/versioning/pep440/range.ts @@ -5,29 +5,82 @@ import { logger } from '../../logger'; import { regEx } from '../../util/regex'; import type { NewValueConfig } from '../types'; +const UserPolicy = { + Major: 0, + Minor: 1, + Micro: 2, + Bug: 3, + 0: 'Major', + 1: 'Minor', + 2: 'Micro', + 3: 'Bug', + None: Infinity, +} as const; + +type UserPolicy = typeof UserPolicy[keyof typeof UserPolicy]; + +/** + * Calculate current update range precision. + * @param ranges A {@link Range} consists of current range + * @returns A {@link UserPolicy} + */ +function getRangePrecision(ranges: Range[]): UserPolicy { + const bound: number[] = + parseVersion((ranges[1] || ranges[0]).version)?.release ?? []; + let rangePrecision = -1; + // range is defined by a single bound. + // ie. <1.2.2.3, + // >=7 + if (ranges.length === 1) { + rangePrecision = bound.length - 1; + } + // Range is defined by both upper and lower bounds. + if (ranges.length === 2) { + const lowerBound: number[] = parseVersion(ranges[0].version)?.release ?? []; + rangePrecision = bound.findIndex((el, index) => el > lowerBound[index]); + } + // Tune down Major precision if followed by a zero + if ( + rangePrecision === UserPolicy.Major && + rangePrecision + 1 < bound.length && + bound[rangePrecision + 1] === 0 + ) { + rangePrecision++; + } + // Could not calculate user precision + // Default to the smallest possible + // istanbul ignore next + if (rangePrecision === -1) { + rangePrecision = bound.length - 1; + } + const key = UserPolicy[rangePrecision as keyof typeof UserPolicy]; + return UserPolicy[key as keyof typeof UserPolicy]; +} + +/** + * @param policy Required range precision + * @param newVersion The newly accepted version + * @param baseVersion Optional Current upper bound + * @returns A string represents a future version upper bound. + */ function getFutureVersion( - baseVersion: string, + policy: UserPolicy, newVersion: string, - incrementValue: number -): string { + baseVersion?: string +): number[] { const toRelease: number[] = parseVersion(newVersion)?.release ?? []; - const baseRelease: number[] = parseVersion(baseVersion)?.release ?? []; - let found = false; - const futureRelease = baseRelease.map((basePart, index) => { - if (found) { - return 0; - } + const baseRelease: number[] = + parseVersion(baseVersion || newVersion)?.release ?? []; + return baseRelease.map((_, index) => { const toPart = toRelease[index] || 0; - if (toPart > basePart) { - found = true; - return toPart + incrementValue; + if (index < policy) { + return toPart; + } + if (index === policy) { + return toPart + (baseVersion === undefined ? 0 : 1); } - return toPart; + return 0; }); - if (!found) { - futureRelease[futureRelease.length - 1] += incrementValue; - } - return futureRelease.join('.'); } interface Range { @@ -79,6 +132,17 @@ export function getNewValue({ ranges ); break; + case 'widen': + updatedRange = handleWidenStrategy( + { + currentValue, + rangeStrategy, + currentVersion, + newVersion, + }, + ranges + ); + break; case 'bump': updatedRange = handleBumpStrategy( { @@ -101,7 +165,7 @@ export function getNewValue({ ); return getNewValue({ currentValue, - rangeStrategy: 'auto', + rangeStrategy: 'replace', currentVersion, newVersion, }); @@ -193,8 +257,13 @@ function handleUpperBound(range: Range, newVersion: string): string | null { if (gte(newVersion, range.version)) { // now here things get tricky // we calculate the new future version - const futureVersion = getFutureVersion(range.version, newVersion, 1); - return range.operator + futureVersion; + const precision = getRangePrecision([range]); + const futureVersion = getFutureVersion( + precision, + newVersion, + range.version + ); + return range.operator + futureVersion.join('.'); } // newVersion is in range, for other than "replace" strategies return range.operator + range.version; @@ -215,7 +284,11 @@ function updateRangeValue( // keep the .* suffix if (range.prefix) { - const futureVersion = getFutureVersion(range.version, newVersion, 0); + const futureVersion = getFutureVersion( + UserPolicy.None, + newVersion, + range.version + ).join('.'); return range.operator + futureVersion + '.*'; } if (range.operator === '~=') { @@ -263,6 +336,71 @@ function updateRangeValue( return null; } +/** + * Checks for zero specifiers. + * returns true if one of the bounds' length is < 3. + * @param ranges A {@link Range} array. + * @returns A boolean value + * Used mainly for cosmetics for the rez versioning syntax. + */ +function hasZeroSpecifier(ranges: Range[]): boolean { + return ranges.some((range) => { + const release = parseVersion(range.version)?.release; + return release && release.length < 3; + }); +} + +function trimTrailingZeros(numbers: number[]): number[] { + let i = numbers.length - 1; + while (numbers[i] === 0) { + i--; + } + return numbers.slice(0, i + 1); +} + +function handleWidenStrategy( + { currentValue, rangeStrategy, currentVersion, newVersion }: NewValueConfig, + ranges: Range[] +): (string | null)[] { + // newVersion is within range + if (satisfies(newVersion, currentValue)) { + return [currentValue]; + } + let rangePrecision = getRangePrecision(ranges); + const trimZeros = hasZeroSpecifier(ranges); + return ranges.map((range) => { + // newVersion is over the upper bound + if (range.operator === '<' && gte(newVersion, range.version)) { + const upperBound = parseVersion(range.version)?.release ?? []; + const len = upperBound.length; + // Match the precision of the smallest specifier if other than 0 + if (upperBound[len - 1] !== 0) { + const key = UserPolicy[(len - 1) as keyof typeof UserPolicy]; + rangePrecision = UserPolicy[key as keyof typeof UserPolicy]; + } + let futureVersion = getFutureVersion( + rangePrecision, + newVersion, + range.version + ); + if (trimZeros) { + futureVersion = trimTrailingZeros(futureVersion); + } + return range.operator + futureVersion.join('.'); + } + // default + return updateRangeValue( + { + currentValue, + rangeStrategy, + currentVersion, + newVersion, + }, + range + ); + }); +} + function handleReplaceStrategy( { currentValue, rangeStrategy, currentVersion, newVersion }: NewValueConfig, ranges: Range[] @@ -271,8 +409,46 @@ function handleReplaceStrategy( if (satisfies(newVersion, currentValue)) { return [currentValue]; } - return ranges.map((range) => - updateRangeValue( + const trimZeros = hasZeroSpecifier(ranges); + return ranges.map((range) => { + // newVersion is over the upper bound + if (range.operator === '<' && gte(newVersion, range.version)) { + const rangePrecision = getRangePrecision(ranges); + let futureVersion = getFutureVersion( + rangePrecision, + newVersion, + range.version + ); + if (trimZeros) { + futureVersion = trimTrailingZeros(futureVersion); + } + return range.operator + futureVersion.join('.'); + } + // handle lower bound + if (['>', '>='].includes(range.operator)) { + if (lte(newVersion, range.version)) { + // this looks like a rollback + return '>=' + newVersion; + } + // update the lower bound to reflect the accepted new version + const lowerBound = parseVersion(range.version)?.release ?? []; + const rangePrecision = lowerBound.length - 1; + let newBase = getFutureVersion(rangePrecision, newVersion); + if (trimZeros) { + newBase = trimTrailingZeros(newBase); + } + // trim last element of the newBase when new accepted version is out of range. + // example: let new bound be >8.2.5 & newVersion be 8.2.5 + // return value will be: >8.2 + if (range.operator === '>') { + if (newVersion === newBase.join('.') && newBase.length > 1) { + newBase.pop(); + } + } + return range.operator + newBase.join('.'); + } + // default + return updateRangeValue( { currentValue, rangeStrategy, @@ -280,8 +456,8 @@ function handleReplaceStrategy( newVersion, }, range - ) - ); + ); + }); } function handleBumpStrategy( diff --git a/lib/versioning/rez/index.spec.ts b/lib/versioning/rez/index.spec.ts index c0d5120849..1b910e5511 100644 --- a/lib/versioning/rez/index.spec.ts +++ b/lib/versioning/rez/index.spec.ts @@ -197,15 +197,15 @@ describe('versioning/rez/index', () => { ${'1.2.3'} | ${'bump'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'} ${'1.2.3'} | ${'replace'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'} ${'1.2.3'} | ${'widen'} | ${'1.2.3'} | ${'1.2.4'} | ${'1.2.4'} - ${'7..8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7..9'} - ${'7.2..8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2..9'} - ${'7.2.3..8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2.3..9'} - ${'7..8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7..8.3'} - ${'7.2..8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2..8.3'} - ${'7.2.3..8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2.3..8.3'} - ${'7..8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7..8.3.0'} - ${'7.2..8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2..8.3.0'} - ${'7.2.3..8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2.3..8.3.0'} + ${'7..8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8..9'} + ${'7.2..8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2..9'} + ${'7.2.3..8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2.5..9'} + ${'7..8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8..8.3'} + ${'7.2..8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2..8.3'} + ${'7.2.3..8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2.5..8.3'} + ${'7..8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8..8.3'} + ${'7.2..8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2..8.3'} + ${'7.2.3..8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2.5..8.3.0'} ${'5..6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'5.2.5..6'} ${'5.2..6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'5.2.5..6'} ${'5.2.3..6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'5.2.5..6'} @@ -257,23 +257,23 @@ describe('versioning/rez/index', () => { ${'<=1.3'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<=2.2.5'} ${'<=1.2.3'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<=2.2.5'} ${'<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9'} - ${'<7.3'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9.0'} - ${'<7.2.4'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9.0.0'} + ${'<7.3'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3'} + ${'<7.2.4'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.2.6'} ${'<6'} | ${'bump'} | ${'5.2.3'} | ${'6.2.5'} | ${'<7'} - ${'<5.3'} | ${'bump'} | ${'5.2.3'} | ${'6.2.5'} | ${'<7.0'} - ${'<5.2.4'} | ${'bump'} | ${'5.2.3'} | ${'6.2.5'} | ${'<7.0.0'} + ${'<5.3'} | ${'bump'} | ${'5.2.3'} | ${'6.2.5'} | ${'<6.3'} + ${'<5.2.4'} | ${'bump'} | ${'5.2.3'} | ${'6.2.5'} | ${'<6.2.6'} ${'<2'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<3'} - ${'<1.3'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<3.0'} - ${'<1.2.4'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<3.0.0'} - ${'7+<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7+<9'} - ${'7.2+<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2+<9'} - ${'7.2.3+<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2.3+<9'} - ${'7+<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7+<8.3'} - ${'7.2+<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2+<8.3'} - ${'7.2.3+<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2.3+<8.3'} - ${'7+<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7+<8.3.0'} - ${'7.2+<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2+<8.3.0'} - ${'7.2.3+<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'7.2.3+<8.3.0'} + ${'<1.3'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<2.3'} + ${'<1.2.4'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<2.2.6'} + ${'7+<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8+<9'} + ${'7.2+<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2+<9'} + ${'7.2.3+<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2.5+<9'} + ${'7+<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8+<8.3'} + ${'7.2+<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2+<8.3'} + ${'7.2.3+<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2.5+<8.3'} + ${'7+<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8+<8.3'} + ${'7.2+<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2+<8.3'} + ${'7.2.3+<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'8.2.5+<8.3.0'} ${'5+<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'5.2.5+<6'} ${'5.2+<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'5.2.5+<6'} ${'5.2.3+<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'5.2.5+<6'} @@ -288,15 +288,15 @@ describe('versioning/rez/index', () => { ${'1.2+<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'1.2+<2.3'} ${'1.2.3+<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'1.2.3+<2.3'} ${'1.2.3+<2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'1.2.3+<2.3.0'} - ${'>=7,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7,<9'} - ${'>=7.2,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2,<9'} - ${'>=7.2.3,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2.3,<9'} - ${'>=7,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7,<8.3'} - ${'>=7.2,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2,<8.3'} - ${'>=7.2.3,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2.3,<8.3'} - ${'>=7,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7,<8.3.0'} - ${'>=7.2,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2,<8.3.0'} - ${'>=7.2.3,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2.3,<8.3.0'} + ${'>=7,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8,<9'} + ${'>=7.2,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2,<9'} + ${'>=7.2.3,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2.5,<9'} + ${'>=7,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8,<8.3'} + ${'>=7.2,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2,<8.3'} + ${'>=7.2.3,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2.5,<8.3'} + ${'>=7,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8,<8.3'} + ${'>=7.2,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2,<8.3'} + ${'>=7.2.3,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2.5,<8.3.0'} ${'>=5,<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>=5.2.5,<6'} ${'>=5.2,<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>=5.2.5,<6'} ${'>=5.2.3,<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>=5.2.5,<6'} @@ -311,15 +311,15 @@ describe('versioning/rez/index', () => { ${'>=1.2,<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>=1.2,<2.3'} ${'>=1.2.3,<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>=1.2.3,<2.3'} ${'>=1.2.3,<2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>=1.2.3,<2.3.0'} - ${'>=7<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7<9'} - ${'>=7.2<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2<9'} - ${'>=7.2.3<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2.3<9'} - ${'>=7<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7<8.3'} - ${'>=7.2<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2<8.3'} - ${'>=7.2.3<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2.3<8.3'} - ${'>=7<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7<8.3.0'} - ${'>=7.2<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2<8.3.0'} - ${'>=7.2.3<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=7.2.3<8.3.0'} + ${'>=7<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8<9'} + ${'>=7.2<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2<9'} + ${'>=7.2.3<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2.5<9'} + ${'>=7<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8<8.3'} + ${'>=7.2<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2<8.3'} + ${'>=7.2.3<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2.5<8.3'} + ${'>=7<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8<8.3'} + ${'>=7.2<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2<8.3'} + ${'>=7.2.3<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>=8.2.5<8.3.0'} ${'>=5<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>=5.2.5<6'} ${'>=5.2<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>=5.2.5<6'} ${'>=5.2.3<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>=5.2.5<6'} @@ -334,15 +334,15 @@ describe('versioning/rez/index', () => { ${'>=1.2<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>=1.2<2.3'} ${'>=1.2.3<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>=1.2.3<2.3'} ${'>=1.2.3<2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>=1.2.3<2.3.0'} - ${'>6,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>6,<9'} - ${'>7.1,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.1,<9'} - ${'>7.2.0,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.2.0,<9'} - ${'>6,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>6,<8.3'} - ${'>7.1,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.1,<8.3'} - ${'>7.2.0,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.2.0,<8.3'} - ${'>6,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>6,<8.3.0'} - ${'>7.1,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.1,<8.3.0'} - ${'>7.2.0,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.2.0,<8.3.0'} + ${'>6,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8,<9'} + ${'>7.1,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2,<9'} + ${'>7.2.0,<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2,<9'} + ${'>6,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8,<8.3'} + ${'>7.1,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2,<8.3'} + ${'>7.2.0,<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2,<8.3'} + ${'>6,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8,<8.3'} + ${'>7.1,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2,<8.3'} + ${'>7.2.0,<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2,<8.3.0'} ${'>4,<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>4,<6'} ${'>5.1,<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>5.1,<6'} ${'>5.2.0,<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>5.2.0,<6'} @@ -357,15 +357,15 @@ describe('versioning/rez/index', () => { ${'>1.1,<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>1.1,<2.3'} ${'>1.2.0,<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>1.2.0,<2.3'} ${'>1.2.0,<2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>1.2.0,<2.3.0'} - ${'>6<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>6<9'} - ${'>7.1<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.1<9'} - ${'>7.2.0<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.2.0<9'} - ${'>6<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>6<8.3'} - ${'>7.1<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.1<8.3'} - ${'>7.2.0<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.2.0<8.3'} - ${'>6<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>6<8.3.0'} - ${'>7.1<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.1<8.3.0'} - ${'>7.2.0<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>7.2.0<8.3.0'} + ${'>6<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8<9'} + ${'>7.1<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2<9'} + ${'>7.2.0<8'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2<9'} + ${'>6<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8<8.3'} + ${'>7.1<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2<8.3'} + ${'>7.2.0<8.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2<8.3'} + ${'>6<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8<8.3'} + ${'>7.1<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2<8.3'} + ${'>7.2.0<8.0.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'>8.2<8.3.0'} ${'>4<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>4<6'} ${'>5.1<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>5.1<6'} ${'>5.2.0<6'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'>5.2.0<6'} @@ -380,15 +380,15 @@ describe('versioning/rez/index', () => { ${'>1.1<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>1.1<2.3'} ${'>1.2.0<2.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>1.2.0<2.3'} ${'>1.2.0<2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'>1.2.0<2.3.0'} - ${'<8,>=7'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>=7'} - ${'<8,>=7.2'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>=7.2'} - ${'<8,>=7.2.3'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>=7.2.3'} - ${'<8.0,>=7'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>=7'} - ${'<8.0,>=7.2'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>=7.2'} - ${'<8.0,>=7.2.3'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>=7.2.3'} - ${'<8.0.0,>=7'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3.0,>=7'} - ${'<8.0.0,>=7.2'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3.0,>=7.2'} - ${'<8.0.0,>=7.2.3'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3.0,>=7.2.3'} + ${'<8,>=7'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>=8'} + ${'<8,>=7.2'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>=8.2'} + ${'<8,>=7.2.3'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>=8.2.5'} + ${'<8.0,>=7'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>=8'} + ${'<8.0,>=7.2'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>=8.2'} + ${'<8.0,>=7.2.3'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>=8.2.5'} + ${'<8.0.0,>=7'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>=8'} + ${'<8.0.0,>=7.2'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>=8.2'} + ${'<8.0.0,>=7.2.3'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3.0,>=8.2.5'} ${'<6,>=5'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'<6,>=5.2.5'} ${'<6,>=5.2'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'<6,>=5.2.5'} ${'<6,>=5.2.3'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'<6,>=5.2.5'} @@ -403,15 +403,15 @@ describe('versioning/rez/index', () => { ${'<2.0,>=1.2'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<2.3,>=1.2'} ${'<2.0,>=1.2.3'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<2.3,>=1.2.3'} ${'<2.0.0,>=1.2.3'} | ${'widen'} | ${'1.2.3'} | ${'2.2.5'} | ${'<2.3.0,>=1.2.3'} - ${'<8,>6'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>6'} - ${'<8,>7.1'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>7.1'} - ${'<8,>7.2.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>7.2.0'} - ${'<8.0,>6'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>6'} - ${'<8.0,>7.1'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>7.1'} - ${'<8.0,>7.2.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>7.2.0'} - ${'<8.0.0,>6'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3.0,>6'} - ${'<8.0.0,>7.1'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3.0,>7.1'} - ${'<8.0.0,>7.2.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3.0,>7.2.0'} + ${'<8,>6'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>8'} + ${'<8,>7.1'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>8.2'} + ${'<8,>7.2.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<9,>8.2'} + ${'<8.0,>6'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>8'} + ${'<8.0,>7.1'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>8.2'} + ${'<8.0,>7.2.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>8.2'} + ${'<8.0.0,>6'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>8'} + ${'<8.0.0,>7.1'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3,>8.2'} + ${'<8.0.0,>7.2.0'} | ${'replace'} | ${'7.2.3'} | ${'8.2.5'} | ${'<8.3.0,>8.2'} ${'<6,>4'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'<6,>4'} ${'<6,>5.1'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'<6,>5.1'} ${'<6,>5.2.0'} | ${'bump'} | ${'5.2.3'} | ${'5.2.5'} | ${'<6,>5.2.0'} -- GitLab