diff --git a/lib/versioning/pep440/index.js b/lib/versioning/pep440/index.js index a273053d3b74f07f91d7f6c816bee96cb56560c6..aaf904a38fbbffc75cb8079b3940ae1ceb98e85b 100644 --- a/lib/versioning/pep440/index.js +++ b/lib/versioning/pep440/index.js @@ -37,15 +37,20 @@ const minSatisfyingVersion = (versions, range) => { return found.length === 0 ? null : found[0]; }; +const isSingleVersion = constraint => + isVersion(constraint) || + (constraint.startsWith('==') && isVersion(constraint.substring(2).trim())); + module.exports = { equals, getMajor, getMinor, isGreaterThan, - isVersion, + isSingleVersion, isRange, isStable, isValid, + isVersion, matches, maxSatisfyingVersion, minSatisfyingVersion, diff --git a/lib/versioning/semver/index.js b/lib/versioning/semver/index.js index 2e9064b43cc67f42dcf850b2e291a622e85fe543..716624d65d0d1eedbcb6c54ecd93b1e4381b1cdb 100644 --- a/lib/versioning/semver/index.js +++ b/lib/versioning/semver/index.js @@ -29,6 +29,10 @@ const isRange = input => isValid(input) && !isVersion(input); // If this is left as an alias, inputs like "17.04.0" throw errors const isValid = input => validRange(input); +const isSingleVersion = constraint => + isVersion(constraint) || + (constraint.startsWith('=') && isVersion(constraint.substring(1).trim())); + module.exports = { equals, getMajor, @@ -36,6 +40,7 @@ module.exports = { isGreaterThan, isLessThanRange, isRange, + isSingleVersion, isStable, isValid, isVersion, diff --git a/test/versioning/pep440.spec.js b/test/versioning/pep440.spec.js index 0f4cd2c4ccda8c7600daf9d5b5e682660a906846..8e945b59015b3f6867dbe0aa02e5ae9c58545877 100644 --- a/test/versioning/pep440.spec.js +++ b/test/versioning/pep440.spec.js @@ -45,6 +45,21 @@ describe('pep440.isStable(version)', () => { }); }); +describe('pep440.isSingleVersion()', () => { + it('returns true if naked version', () => { + expect(!!pep440.isSingleVersion('1.2.3')).toBe(true); + expect(!!pep440.isSingleVersion('1.2.3rc0')).toBe(true); + }); + it('returns true if double equals', () => { + expect(!!pep440.isSingleVersion('==1.2.3')).toBe(true); + expect(!!pep440.isSingleVersion('==1.2')).toBe(true); + expect(!!pep440.isSingleVersion('== 1.2.3')).toBe(true); + }); + it('returns false when not version', () => { + expect(!!pep440.isSingleVersion('==1.*')).toBe(false); + }); +}); + const versions = [ '0.9.4', '1.0.0', diff --git a/test/versioning/semver.spec.js b/test/versioning/semver.spec.js index fa2b4df48ea9c3e11ac6d80dbfbbbb5ae54cb034..e2a8a0f1e0f64d4c7e8ea82c46d41429e2af2b78 100644 --- a/test/versioning/semver.spec.js +++ b/test/versioning/semver.spec.js @@ -37,6 +37,19 @@ describe('semver.isRange(input)', () => { expect(!!semver.isRange('^1.2.3')).toBe(true); }); }); +describe('semver.isSingleVersion()', () => { + it('returns true if naked version', () => { + expect(!!semver.isSingleVersion('1.2.3')).toBe(true); + expect(!!semver.isSingleVersion('1.2.3-alpha.1')).toBe(true); + }); + it('returns true if equals', () => { + expect(!!semver.isSingleVersion('=1.2.3')).toBe(true); + expect(!!semver.isSingleVersion('= 1.2.3')).toBe(true); + }); + it('returns false when not version', () => { + expect(!!semver.isSingleVersion('1.x')).toBe(false); + }); +}); describe('semver.getNewValue()', () => { it('bumps equals', () => { expect(