123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- const {
- MAX_SAFE_COMPONENT_LENGTH,
- MAX_SAFE_BUILD_LENGTH,
- MAX_LENGTH,
- } = require('./constants')
- const debug = require('./debug')
- exports = module.exports = {}
- const re = exports.re = []
- const safeRe = exports.safeRe = []
- const src = exports.src = []
- const t = exports.t = {}
- let R = 0
- const LETTERDASHNUMBER = '[a-zA-Z0-9-]'
- const safeRegexReplacements = [
- ['\\s', 1],
- ['\\d', MAX_LENGTH],
- [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],
- ]
- const makeSafeRegex = (value) => {
- for (const [token, max] of safeRegexReplacements) {
- value = value
- .split(`${token}*`).join(`${token}{0,${max}}`)
- .split(`${token}+`).join(`${token}{1,${max}}`)
- }
- return value
- }
- const createToken = (name, value, isGlobal) => {
- const safe = makeSafeRegex(value)
- const index = R++
- debug(name, index, value)
- t[name] = index
- src[index] = value
- re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
- safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)
- }
- createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*')
- createToken('NUMERICIDENTIFIERLOOSE', '\\d+')
- createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)
- createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
- `(${src[t.NUMERICIDENTIFIER]})\\.` +
- `(${src[t.NUMERICIDENTIFIER]})`)
- createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
- `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
- `(${src[t.NUMERICIDENTIFIERLOOSE]})`)
- createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
- }|${src[t.NONNUMERICIDENTIFIER]})`)
- createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
- }|${src[t.NONNUMERICIDENTIFIER]})`)
- createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
- }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`)
- createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
- }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)
- createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)
- createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
- }(?:\\.${src[t.BUILDIDENTIFIER]})*))`)
- createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
- }${src[t.PRERELEASE]}?${
- src[t.BUILD]}?`)
- createToken('FULL', `^${src[t.FULLPLAIN]}$`)
- createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
- }${src[t.PRERELEASELOOSE]}?${
- src[t.BUILD]}?`)
- createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)
- createToken('GTLT', '((?:<|>)?=?)')
- createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`)
- createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`)
- createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
- `(?:${src[t.PRERELEASE]})?${
- src[t.BUILD]}?` +
- `)?)?`)
- createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
- `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
- `(?:${src[t.PRERELEASELOOSE]})?${
- src[t.BUILD]}?` +
- `)?)?`)
- createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`)
- createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`)
- createToken('COERCEPLAIN', `${'(^|[^\\d])' +
- '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
- `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
- `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)
- createToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\d])`)
- createToken('COERCEFULL', src[t.COERCEPLAIN] +
- `(?:${src[t.PRERELEASE]})?` +
- `(?:${src[t.BUILD]})?` +
- `(?:$|[^\\d])`)
- createToken('COERCERTL', src[t.COERCE], true)
- createToken('COERCERTLFULL', src[t.COERCEFULL], true)
- createToken('LONETILDE', '(?:~>?)')
- createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true)
- exports.tildeTrimReplace = '$1~'
- createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)
- createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)
- createToken('LONECARET', '(?:\\^)')
- createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true)
- exports.caretTrimReplace = '$1^'
- createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)
- createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)
- createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`)
- createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`)
- createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
- }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)
- exports.comparatorTrimReplace = '$1$2$3'
- createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
- `\\s+-\\s+` +
- `(${src[t.XRANGEPLAIN]})` +
- `\\s*$`)
- createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
- `\\s+-\\s+` +
- `(${src[t.XRANGEPLAINLOOSE]})` +
- `\\s*$`)
- createToken('STAR', '(<|>)?=?\\s*\\*')
- createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$')
- createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$')
|