-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
218 additions
and
119 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,54 @@ | ||
const parse = require('./parse') | ||
const eq = require('./eq') | ||
const parse = require('./parse.js') | ||
|
||
const diff = (version1, version2) => { | ||
if (eq(version1, version2)) { | ||
const v1 = parse(version1, null, true) | ||
const v2 = parse(version2, null, true) | ||
const comparison = v1.compare(v2) | ||
|
||
if (comparison === 0) { | ||
return null | ||
} else { | ||
const v1 = parse(version1) | ||
const v2 = parse(version2) | ||
const hasPre = v1.prerelease.length || v2.prerelease.length | ||
const prefix = hasPre ? 'pre' : '' | ||
const defaultResult = hasPre ? 'prerelease' : '' | ||
for (const key in v1) { | ||
if (key === 'major' || key === 'minor' || key === 'patch') { | ||
if (v1[key] !== v2[key]) { | ||
return prefix + key | ||
} | ||
} | ||
} | ||
return defaultResult // may be undefined | ||
} | ||
|
||
const v1Higher = comparison > 0 | ||
const highVersion = v1Higher ? v1 : v2 | ||
const lowVersion = v1Higher ? v2 : v1 | ||
const highHasPre = !!highVersion.prerelease.length | ||
|
||
// add the `pre` prefix if we are going to a prerelease version | ||
const prefix = highHasPre ? 'pre' : '' | ||
|
||
if (v1.major !== v2.major) { | ||
return prefix + 'major' | ||
} | ||
|
||
if (v1.minor !== v2.minor) { | ||
return prefix + 'minor' | ||
} | ||
|
||
if (v1.patch !== v2.patch) { | ||
return prefix + 'patch' | ||
} | ||
|
||
// at this point we know stable versions match but overall versions are not equal, | ||
// so either they are both prereleases, or the lower version is a prerelease | ||
|
||
if (highHasPre) { | ||
// high and low are preleases | ||
return 'prerelease' | ||
} | ||
|
||
if (lowVersion.patch) { | ||
// anything higher than a patch bump would result in the wrong version | ||
return 'patch' | ||
} | ||
|
||
if (lowVersion.minor) { | ||
// anything higher than a minor bump would result in the wrong version | ||
return 'minor' | ||
} | ||
|
||
// bumping major/minor/patch all have same result | ||
return 'major' | ||
} | ||
|
||
module.exports = diff |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.