39 lines
987 B
TypeScript
39 lines
987 B
TypeScript
import { VersionChangeType, VersionInfo } from './resolver'
|
|
|
|
export const parseSemver = (version: string): VersionInfo => {
|
|
const regex = /([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?/gi
|
|
const match = regex.exec(version)
|
|
if (!match) {
|
|
throw Error(`Invalid semver '${version}'`)
|
|
}
|
|
const [, major, minor, patch, prerelease, build] = match
|
|
|
|
return {
|
|
version,
|
|
major: parseInt(major),
|
|
minor: parseInt(minor),
|
|
patch: parseInt(patch),
|
|
prerelease,
|
|
build,
|
|
}
|
|
}
|
|
|
|
export const compareVersions = (versionA: VersionInfo, versionB: VersionInfo): VersionChangeType | null => {
|
|
if (versionA.major !== versionB.major) {
|
|
return 'major'
|
|
}
|
|
if (versionA.minor !== versionB.minor) {
|
|
return 'minor'
|
|
}
|
|
if (versionA.patch !== versionB.patch) {
|
|
return 'patch'
|
|
}
|
|
if (versionA.prerelease !== versionB.prerelease) {
|
|
return 'prerelease'
|
|
}
|
|
if (versionA.build !== versionB.build) {
|
|
return 'build'
|
|
}
|
|
return null
|
|
}
|