Skip to content

Instantly share code, notes, and snippets.

@forivall
Last active July 12, 2019 22:40
Show Gist options
  • Save forivall/0b6f62592b5378983a8a9910c88124af to your computer and use it in GitHub Desktop.
Save forivall/0b6f62592b5378983a8a9910c88124af to your computer and use it in GitHub Desktop.
Dirty semver fixer
import * as semver from 'semver'
declare module 'semver' {
export const re: {[K in SourceParts]: RegExp}
export const src: {[K in SourceParts]: string}
export const enum SourceParts {
NUMERICIDENTIFIER,
NUMERICIDENTIFIERLOOSE,
NONNUMERICIDENTIFIER,
MAINVERSION,
MAINVERSIONLOOSE,
PRERELEASEIDENTIFIER,
PRERELEASEIDENTIFIERLOOSE,
PRERELEASE,
PRERELEASELOOSE,
BUILDIDENTIFIER,
BUILD,
FULL,
LOOSE,
GTLT,
XRANGEIDENTIFIERLOOSE,
XRANGEIDENTIFIER,
XRANGEPLAIN,
XRANGEPLAINLOOSE,
XRANGE,
XRANGELOOSE,
COERCE,
LONETILDE,
TILDETRIM,
TILDE,
TILDELOOSE,
LONECARET,
CARETTRIM,
CARET,
CARETLOOSE,
COMPARATORLOOSE,
COMPARATOR,
COMPARATORTRIM,
HYPHENRANGE,
HYPHENRANGELOOSE,
STAR,
}
}
const MAINVERSION_LOOSER = `(${
semver.src[semver.SourceParts.NUMERICIDENTIFIER]
})(?:\\.(${
semver.src[semver.SourceParts.NUMERICIDENTIFIER]
})(?:\\.(${
semver.src[semver.SourceParts.NUMERICIDENTIFIER]
}))?)?`
const LOOSER = `${
MAINVERSION_LOOSER
}${
semver.src[semver.SourceParts.PRERELEASELOOSE]
}?${
semver.src[semver.SourceParts.BUILD]
}?`
const RE_LOOSER = new RegExp(LOOSER, 'g')
export function fixVersion(s: string) {
return s.replace(RE_LOOSER, (_val, major, minor, patch, pre, build) => `${
major}.${minor || '0'}.${patch || '0'
}${pre ? `-${pre}` : ''}${build ? `.${build}` : ''}`)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment