diff --git a/lib/versioning/composer/index.spec.ts b/lib/versioning/composer/index.spec.ts index 62848c38bec2fa3d746971d2d71aeea8813d9263..357bd26bc390f8a5ca8ef50d9bde32c7775ad2ba 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 bcfba4d621d0a0f20f4a0945071a1359d3433efe..4f7048d246d1d339630f415cea834aa9a114e22e 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 {