From 62187519cbbf59ccdb718eb712b90517f3f1b611 Mon Sep 17 00:00:00 2001 From: hussainweb <hussainweb@gmail.com> Date: Wed, 20 May 2020 08:17:28 -0400 Subject: [PATCH] fix(composer): Handle minimum-stability version constraints (#6268) --- lib/versioning/composer/index.spec.ts | 23 +++++++++++++++++++---- lib/versioning/composer/index.ts | 8 +++++++- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/versioning/composer/index.spec.ts b/lib/versioning/composer/index.spec.ts index 62848c38be..357bd26bc3 100644 --- a/lib/versioning/composer/index.spec.ts +++ b/lib/versioning/composer/index.spec.ts @@ -55,9 +55,14 @@ describe('semver.isValid(input)', () => { expect(semver.isValid('>1.2.3')).toBeTruthy(); }); it('should support ranges with stability modifiers', () => { - expect(semver.isValid('~1.2.3@beta1')).toBeTruthy(); + expect(semver.isValid('~1.2.3-beta1')).toBeTruthy(); + expect(semver.isValid('^1.2.3-alpha')).toBeTruthy(); + expect(semver.isValid('>1.2.3-rc2')).toBeTruthy(); + }); + it('should support ranges with min-stability', () => { + expect(semver.isValid('~1.2.3@beta')).toBeTruthy(); expect(semver.isValid('^1.2.3@alpha')).toBeTruthy(); - expect(semver.isValid('>1.2.3@rc2')).toBeTruthy(); + expect(semver.isValid('>1.2.3@rc')).toBeTruthy(); }); }); describe('semver.isVersion(input)', () => { @@ -336,7 +341,7 @@ describe('semver.getNewValue()', () => { fromVersion: '1.0.0-beta3', toVersion: '1.0.0-beta5', }) - ).toEqual('^v1.0.0@beta5'); + ).toEqual('^v1.0.0-beta5@beta'); }); it('replaces short caret with stability modifiers', () => { expect( @@ -346,7 +351,17 @@ describe('semver.getNewValue()', () => { fromVersion: '1.0.0-beta3', toVersion: '2.0.0-beta5', }) - ).toEqual('^v2.0.0@beta5'); + ).toEqual('^v2.0.0-beta5@beta'); + }); + it('preserves the current min-stability modifiers', () => { + expect( + semver.getNewValue({ + currentValue: '^4.0@alpha', + rangeStrategy: 'replace', + fromVersion: '4.0.0-alpha1', + toVersion: '4.0.0-beta5', + }) + ).toEqual('^4.0.0-beta5@alpha'); }); it('handles differing lengths', () => { expect( diff --git a/lib/versioning/composer/index.ts b/lib/versioning/composer/index.ts index bcfba4d621..4f7048d246 100644 --- a/lib/versioning/composer/index.ts +++ b/lib/versioning/composer/index.ts @@ -185,7 +185,13 @@ function getNewValue({ if (currentValue.split('.')[0].includes('v')) { newValue = newValue.replace(/([0-9])/, 'v$1'); } - return newValue.replace('-', '@'); + + // Preserve original min-stability specifier + if (currentValue.includes('@')) { + newValue += '@' + currentValue.split('@')[1]; + } + + return newValue; } function sortVersions(a: string, b: string): number { -- GitLab