diff --git a/src/lib/is-semver.spec.ts b/src/lib/is-semver.spec.ts index 62678c55..7bca97f6 100644 --- a/src/lib/is-semver.spec.ts +++ b/src/lib/is-semver.spec.ts @@ -12,6 +12,9 @@ describe('isSemver', () => { expect(isSemver('^1.2.3')).toBeTrue(); expect(isSemver('>=1.2.3')).toBeTrue(); expect(isSemver('>1.2.3')).toBeTrue(); + expect(isSemver('>1')).toBeTrue(); + expect(isSemver('>=1')).toBeTrue(); + expect(isSemver('^1')).toBeTrue(); expect(isSemver('*')).toBeFalse(); expect(isSemver('>=16.8.0 <17.0.0')).toBeFalse(); expect(isSemver('https://github.com/npm/npm.git')).toBeFalse(); diff --git a/src/lib/is-semver.ts b/src/lib/is-semver.ts index c854f246..0f059ea9 100644 --- a/src/lib/is-semver.ts +++ b/src/lib/is-semver.ts @@ -18,16 +18,22 @@ export function isValidSemverRange( ); } -export function isSemver(version: unknown): boolean { +export function isSemver(version: unknown): version is string { + const range = '(~|\\^|>=|>|<=|<)?'; + const ints = '[0-9]+'; + const intsOrX = '([0-9]+|x)'; + const dot = '\\.'; + const major = new RegExp(`^${range}${ints}$`); + const minor = new RegExp(`^${range}${ints}${dot}${intsOrX}$`); + const patch = new RegExp(`^${range}${ints}${dot}${intsOrX}${dot}${intsOrX}$`); return ( isString(version) && - version.search(/^(~|\^|>=|>|<=|<|)?[0-9]+\.[0-9x]+\.[0-9x]+/) !== -1 && - version.indexOf(' ') === -1 + (version.search(major) !== -1 || + version.search(minor) !== -1 || + version.search(patch) !== -1) ); } export function isLooseSemver(version: unknown): boolean { - return ( - isString(version) && isSemver(version) && version.search(/\.x(\.|$)/) !== -1 - ); + return isSemver(version) && version.search(/\.x(\.|$)/) !== -1; }