diff --git a/src/next-version.mjs b/src/next-version.mjs index fc0fc60..f49319e 100644 --- a/src/next-version.mjs +++ b/src/next-version.mjs @@ -22,6 +22,11 @@ import { * other prerelease ID with a 'pretype' increment will result in undefined results */ const nextVersion = ({ currVer, increment }) => { + if (!semver.valid(currVer)) { + const msg = `Invalid version '${currVer}'` + (semver.validRange(currVer) ? '; range not allowed.' : '.') + throw createError.BadRequest(msg) + } + if (increment !== undefined && !STANDARD_INCREMENTS.includes(increment)) { throw createError.BadRequest(`Invalid increment '${increment}' specified.`) } @@ -76,10 +81,10 @@ const nextVersion = ({ currVer, increment }) => { } else if (STANDARD_RELEASE_NAMES.includes(increment)) { if (increment === 'gold') { - nextVer = currVer.replace(/^([\d.Z]+)-(?:alpha|beta|rc)(?:\.\d+)?/, '$1') + nextVer = currVer.replace(/^([\d.]+)-(?:alpha|beta|rc)(?:\.\d+)?/, '$1') } else { - nextVer = currVer.replace(/^([\d.Z-]+)(?:alpha|beta|rc)(?:\.\d+)?/, `$1${increment}.0`) + nextVer = currVer.replace(/^([\d.]+)-(?:alpha|beta|rc)(?:\.\d+)?/, `$1-${increment}.0`) } return nextVer diff --git a/src/test/next-version.test.js b/src/test/next-version.test.js index 765e8d0..659d9f0 100644 --- a/src/test/next-version.test.js +++ b/src/test/next-version.test.js @@ -64,4 +64,7 @@ describe('nextVersion', () => { const currVer = `1.0.0-${currPrerelease}` expect(() => ver.version({ currVer, increment : 'prerelease' })) }) + + test.each(['1.0.x', '^1.0.0', '1.0.0 - 1.x', '~1.0.0'])('raises except on range input %s', (currVer) => + expect(() => ver.nextVersion({ currVer, increment : 'prerelease' })).toThrow(/range not allowed/i)) })