677 lines
29 KiB
Text
677 lines
29 KiB
Text
|
// SEMVER_SPEC_VERSION
|
||
|
2.0.0
|
||
|
|
||
|
// re
|
||
|
/0|[1-9]\d*/,/\d+/,/\d*[a-zA-Z-][a-zA-Z0-9-]*/,/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)/,/(\d+)\.(\d+)\.(\d+)/,/(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)/,/(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)/,/(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))/,/(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))/,/[a-zA-Z0-9-]+/,/(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))/,/^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?$/,/v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?/,/[v=\s]*(\d+)\.(\d+)\.(\d+)(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?/,/^[v=\s]*(\d+)\.(\d+)\.(\d+)(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?$/,/((?:<|>)?=?)/,/\d+|x|X|\*/,/0|[1-9]\d*|x|X|\*/,/[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?/,/[v=\s]*(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?/,/^((?:<|>)?=?)\s*[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$/,/^((?:<|>)?=?)\s*[v=\s]*(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$/,/(^|[^\d])(\d{1,16})(?:\.(\d{1,16}))?(?:\.(\d{1,16}))?(?:$|[^\d])/,/(^|[^\d])(\d{1,16})(?:\.(\d{1,16}))?(?:\.(\d{1,16}))?(?:$|[^\d])/g,/(?:~>?)/,/(\s*)(?:~>?)\s+/g,/^(?:~>?)[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$/,/^(?:~>?)[v=\s]*(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$/,/(?:\^)/,/(\s*)(?:\^)\s+/g,/^(?:\^)[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$/,/^(?:\^)[v=\s]*(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$/,/^((?:<|>)?=?)\s*([v=\s]*(\d+)\.(\d+)\.(\d+)(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)$|^$/,/^((?:<|>)?=?)\s*(v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)$|^$/,/(\s*)((?:<|>)?=?)\s*([v=\s]*(\d+)\.(\d+)\.(\d+)(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?|[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?)/g,/^\s*([v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?)\s+-\s+([v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0
|
||
|
|
||
|
// safeRe
|
||
|
/0|[1-9]\d{0,256}/,/\d{1,256}/,/\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}/,/(0|[1-9]\d{0,256})\.(0|[1-9]\d{0,256})\.(0|[1-9]\d{0,256})/,/(\d{1,256})\.(\d{1,256})\.(\d{1,256})/,/(?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})/,/(?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})/,/(?:-((?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*))/,/(?:-?((?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*))/,/[a-zA-Z0-9-]{1,250}/,/(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))/,/^v?(0|[1-9]\d{0,256})\.(0|[1-9]\d{0,256})\.(0|[1-9]\d{0,256})(?:-((?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?$/,/v?(0|[1-9]\d{0,256})\.(0|[1-9]\d{0,256})\.(0|[1-9]\d{0,256})(?:-((?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?/,/[v=\s]*(\d{1,256})\.(\d{1,256})\.(\d{1,256})(?:-?((?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?/,/^[v=\s]*(\d{1,256})\.(\d{1,256})\.(\d{1,256})(?:-?((?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?$/,/((?:<|>)?=?)/,/\d{1,256}|x|X|\*/,/0|[1-9]\d{0,256}|x|X|\*/,/[v=\s]*(0|[1-9]\d{0,256}|x|X|\*)(?:\.(0|[1-9]\d{0,256}|x|X|\*)(?:\.(0|[1-9]\d{0,256}|x|X|\*)(?:(?:-((?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*)))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?)?)?/,/[v=\s]*(\d{1,256}|x|X|\*)(?:\.(\d{1,256}|x|X|\*)(?:\.(\d{1,256}|x|X|\*)(?:(?:-?((?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*)))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?)?)?/,/^((?:<|>)?=?)\s{0,1}[v=\s]*(0|[1-9]\d{0,256}|x|X|\*)(?:\.(0|[1-9]\d{0,256}|x|X|\*)(?:\.(0|[1-9]\d{0,256}|x|X|\*)(?:(?:-((?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*)))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?)?)?$/,/^((?:<|>)?=?)\s{0,1}[v=\s]*(\d{1,256}|x|X|\*)(?:\.(\d{1,256}|x|X|\*)(?:\.(\d{1,256}|x|X|\*)(?:(?:-?((?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*)))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?)?)?$/,/(^|[^\d])(\d{1,16})(?:\.(\d{1,16}))?(?:\.(\d{1,16}))?(?:$|[^\d])/,/(^|[^\d])(\d{1,16})(?:\.(\d{1,16}))?(?:\.(\d{1,16}))?(?:$|[^\d])/g,/(?:~>?)/,/(\s{0,1})(?:~>?)\s{1,1}/g,/^(?:~>?)[v=\s]*(0|[1-9]\d{0,256}|x|X|\*)(?:\.(0|[1-9]\d{0,256}|x|X|\*)(?:\.(0|[1-9]\d{0,256}|x|X|\*)(?:(?:-((?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*)))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?)?)?$/,/^(?:~>?)[v=\s]*(\d{1,256}|x|X|\*)(?:\.(\d{1,256}|x|X|\*)(?:\.(\d{1,256}|x|X|\*)(?:(?:-?((?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*)))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?)?)?$/,/(?:\^)/,/(\s{0,1})(?:\^)\s{1,1}/g,/^(?:\^)[v=\s]*(0|[1-9]\d{0,256}|x|X|\*)(?:\.(0|[1-9]\d{0,256}|x|X|\*)(?:\.(0|[1-9]\d{0,256}|x|X|\*)(?:(?:-((?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:0|[1-9]\d{0,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*)))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?)?)?$/,/^(?:\^)[v=\s]*(\d{1,256}|x|X|\*)(?:\.(\d{1,256}|x|X|\*)(?:\.(\d{1,256}|x|X|\*)(?:(?:-?((?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250})(?:\.(?:\d{1,256}|\d{0,256}[a-zA-Z-][a-zA-Z0-9-]{0,250}))*)))?(?:\+([a-zA-Z0-9-]{1,250}(?:\.[a-zA-Z0-9-]{1,250})*))?)?)?$/,/^((?:<|>)?=?)\s{0,1}([v=\s]
|
||
|
|
||
|
// src
|
||
|
0|[1-9]\d*,\d+,\d*[a-zA-Z-][a-zA-Z0-9-]*,(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*),(\d+)\.(\d+)\.(\d+),(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*),(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*),(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)),(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)),[a-zA-Z0-9-]+,(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*)),^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?$,v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?,[v=\s]*(\d+)\.(\d+)\.(\d+)(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?,^[v=\s]*(\d+)\.(\d+)\.(\d+)(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?$,((?:<|>)?=?),\d+|x|X|\*,0|[1-9]\d*|x|X|\*,[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?,[v=\s]*(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?,^((?:<|>)?=?)\s*[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$,^((?:<|>)?=?)\s*[v=\s]*(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$,(^|[^\d])(\d{1,16})(?:\.(\d{1,16}))?(?:\.(\d{1,16}))?(?:$|[^\d]),,(?:~>?),(\s*)(?:~>?)\s+,^(?:~>?)[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$,^(?:~>?)[v=\s]*(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$,(?:\^),(\s*)(?:\^)\s+,^(?:\^)[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$,^(?:\^)[v=\s]*(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:\.(\d+|x|X|\*)(?:(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?$,^((?:<|>)?=?)\s*([v=\s]*(\d+)\.(\d+)\.(\d+)(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)$|^$,^((?:<|>)?=?)\s*(v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)$|^$,(\s*)((?:<|>)?=?)\s*([v=\s]*(\d+)\.(\d+)\.(\d+)(?:-?((?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:\d+|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?|[v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?),^\s*([v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))?(?:\+([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*))?)?)?)\s+-\s+([v=\s]*(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:\.(0|[1-9]\d*|x|X|\*)(?:(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*)))
|
||
|
|
||
|
// tokens
|
||
|
[object Object]
|
||
|
|
||
|
// parse
|
||
|
function parse (version, options) {
|
||
|
if (!options || typeof options !== 'object') {
|
||
|
options = {
|
||
|
loose: !!options,
|
||
|
includePrerelease: false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (version instanceof SemVer) {
|
||
|
return version
|
||
|
}
|
||
|
|
||
|
if (typeof version !== 'string') {
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
if (version.length > MAX_LENGTH) {
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
var r = options.loose ? safeRe[t.LOOSE] : safeRe[t.FULL]
|
||
|
if (!r.test(version)) {
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
return new SemVer(version, options)
|
||
|
} catch (er) {
|
||
|
return null
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// valid
|
||
|
function valid (version, options) {
|
||
|
var v = parse(version, options)
|
||
|
return v ? v.version : null
|
||
|
}
|
||
|
|
||
|
// clean
|
||
|
function clean (version, options) {
|
||
|
var s = parse(version.trim().replace(/^[=v]+/, ''), options)
|
||
|
return s ? s.version : null
|
||
|
}
|
||
|
|
||
|
// SemVer
|
||
|
function SemVer (version, options) {
|
||
|
if (!options || typeof options !== 'object') {
|
||
|
options = {
|
||
|
loose: !!options,
|
||
|
includePrerelease: false
|
||
|
}
|
||
|
}
|
||
|
if (version instanceof SemVer) {
|
||
|
if (version.loose === options.loose) {
|
||
|
return version
|
||
|
} else {
|
||
|
version = version.version
|
||
|
}
|
||
|
} else if (typeof version !== 'string') {
|
||
|
throw new TypeError('Invalid Version: ' + version)
|
||
|
}
|
||
|
|
||
|
if (version.length > MAX_LENGTH) {
|
||
|
throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
|
||
|
}
|
||
|
|
||
|
if (!(this instanceof SemVer)) {
|
||
|
return new SemVer(version, options)
|
||
|
}
|
||
|
|
||
|
debug('SemVer', version, options)
|
||
|
this.options = options
|
||
|
this.loose = !!options.loose
|
||
|
|
||
|
var m = version.trim().match(options.loose ? safeRe[t.LOOSE] : safeRe[t.FULL])
|
||
|
|
||
|
if (!m) {
|
||
|
throw new TypeError('Invalid Version: ' + version)
|
||
|
}
|
||
|
|
||
|
this.raw = version
|
||
|
|
||
|
// these are actually numbers
|
||
|
this.major = +m[1]
|
||
|
this.minor = +m[2]
|
||
|
this.patch = +m[3]
|
||
|
|
||
|
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
|
||
|
throw new TypeError('Invalid major version')
|
||
|
}
|
||
|
|
||
|
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
|
||
|
throw new TypeError('Invalid minor version')
|
||
|
}
|
||
|
|
||
|
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
|
||
|
throw new TypeError('Invalid patch version')
|
||
|
}
|
||
|
|
||
|
// numberify any prerelease numeric ids
|
||
|
if (!m[4]) {
|
||
|
this.prerelease = []
|
||
|
} else {
|
||
|
this.prerelease = m[4].split('.').map(function (id) {
|
||
|
if (/^[0-9]+$/.test(id)) {
|
||
|
var num = +id
|
||
|
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
||
|
return num
|
||
|
}
|
||
|
}
|
||
|
return id
|
||
|
})
|
||
|
}
|
||
|
|
||
|
this.build = m[5] ? m[5].split('.') : []
|
||
|
this.format()
|
||
|
}
|
||
|
|
||
|
// inc
|
||
|
function inc (version, release, loose, identifier) {
|
||
|
if (typeof (loose) === 'string') {
|
||
|
identifier = loose
|
||
|
loose = undefined
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
return new SemVer(version, loose).inc(release, identifier).version
|
||
|
} catch (er) {
|
||
|
return null
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// diff
|
||
|
function diff (version1, version2) {
|
||
|
if (eq(version1, version2)) {
|
||
|
return null
|
||
|
} else {
|
||
|
var v1 = parse(version1)
|
||
|
var v2 = parse(version2)
|
||
|
var prefix = ''
|
||
|
if (v1.prerelease.length || v2.prerelease.length) {
|
||
|
prefix = 'pre'
|
||
|
var defaultResult = 'prerelease'
|
||
|
}
|
||
|
for (var key in v1) {
|
||
|
if (key === 'major' || key === 'minor' || key === 'patch') {
|
||
|
if (v1[key] !== v2[key]) {
|
||
|
return prefix + key
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return defaultResult // may be undefined
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// compareIdentifiers
|
||
|
function compareIdentifiers (a, b) {
|
||
|
var anum = numeric.test(a)
|
||
|
var bnum = numeric.test(b)
|
||
|
|
||
|
if (anum && bnum) {
|
||
|
a = +a
|
||
|
b = +b
|
||
|
}
|
||
|
|
||
|
return a === b ? 0
|
||
|
: (anum && !bnum) ? -1
|
||
|
: (bnum && !anum) ? 1
|
||
|
: a < b ? -1
|
||
|
: 1
|
||
|
}
|
||
|
|
||
|
// rcompareIdentifiers
|
||
|
function rcompareIdentifiers (a, b) {
|
||
|
return compareIdentifiers(b, a)
|
||
|
}
|
||
|
|
||
|
// major
|
||
|
function major (a, loose) {
|
||
|
return new SemVer(a, loose).major
|
||
|
}
|
||
|
|
||
|
// minor
|
||
|
function minor (a, loose) {
|
||
|
return new SemVer(a, loose).minor
|
||
|
}
|
||
|
|
||
|
// patch
|
||
|
function patch (a, loose) {
|
||
|
return new SemVer(a, loose).patch
|
||
|
}
|
||
|
|
||
|
// compare
|
||
|
function compare (a, b, loose) {
|
||
|
return new SemVer(a, loose).compare(new SemVer(b, loose))
|
||
|
}
|
||
|
|
||
|
// compareLoose
|
||
|
function compareLoose (a, b) {
|
||
|
return compare(a, b, true)
|
||
|
}
|
||
|
|
||
|
// compareBuild
|
||
|
function compareBuild (a, b, loose) {
|
||
|
var versionA = new SemVer(a, loose)
|
||
|
var versionB = new SemVer(b, loose)
|
||
|
return versionA.compare(versionB) || versionA.compareBuild(versionB)
|
||
|
}
|
||
|
|
||
|
// rcompare
|
||
|
function rcompare (a, b, loose) {
|
||
|
return compare(b, a, loose)
|
||
|
}
|
||
|
|
||
|
// sort
|
||
|
function sort (list, loose) {
|
||
|
return list.sort(function (a, b) {
|
||
|
return exports.compareBuild(a, b, loose)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// rsort
|
||
|
function rsort (list, loose) {
|
||
|
return list.sort(function (a, b) {
|
||
|
return exports.compareBuild(b, a, loose)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// gt
|
||
|
function gt (a, b, loose) {
|
||
|
return compare(a, b, loose) > 0
|
||
|
}
|
||
|
|
||
|
// lt
|
||
|
function lt (a, b, loose) {
|
||
|
return compare(a, b, loose) < 0
|
||
|
}
|
||
|
|
||
|
// eq
|
||
|
function eq (a, b, loose) {
|
||
|
return compare(a, b, loose) === 0
|
||
|
}
|
||
|
|
||
|
// neq
|
||
|
function neq (a, b, loose) {
|
||
|
return compare(a, b, loose) !== 0
|
||
|
}
|
||
|
|
||
|
// gte
|
||
|
function gte (a, b, loose) {
|
||
|
return compare(a, b, loose) >= 0
|
||
|
}
|
||
|
|
||
|
// lte
|
||
|
function lte (a, b, loose) {
|
||
|
return compare(a, b, loose) <= 0
|
||
|
}
|
||
|
|
||
|
// cmp
|
||
|
function cmp (a, op, b, loose) {
|
||
|
switch (op) {
|
||
|
case '===':
|
||
|
if (typeof a === 'object')
|
||
|
a = a.version
|
||
|
if (typeof b === 'object')
|
||
|
b = b.version
|
||
|
return a === b
|
||
|
|
||
|
case '!==':
|
||
|
if (typeof a === 'object')
|
||
|
a = a.version
|
||
|
if (typeof b === 'object')
|
||
|
b = b.version
|
||
|
return a !== b
|
||
|
|
||
|
case '':
|
||
|
case '=':
|
||
|
case '==':
|
||
|
return eq(a, b, loose)
|
||
|
|
||
|
case '!=':
|
||
|
return neq(a, b, loose)
|
||
|
|
||
|
case '>':
|
||
|
return gt(a, b, loose)
|
||
|
|
||
|
case '>=':
|
||
|
return gte(a, b, loose)
|
||
|
|
||
|
case '<':
|
||
|
return lt(a, b, loose)
|
||
|
|
||
|
case '<=':
|
||
|
return lte(a, b, loose)
|
||
|
|
||
|
default:
|
||
|
throw new TypeError('Invalid operator: ' + op)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Comparator
|
||
|
function Comparator (comp, options) {
|
||
|
if (!options || typeof options !== 'object') {
|
||
|
options = {
|
||
|
loose: !!options,
|
||
|
includePrerelease: false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (comp instanceof Comparator) {
|
||
|
if (comp.loose === !!options.loose) {
|
||
|
return comp
|
||
|
} else {
|
||
|
comp = comp.value
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!(this instanceof Comparator)) {
|
||
|
return new Comparator(comp, options)
|
||
|
}
|
||
|
|
||
|
comp = comp.trim().split(/\s+/).join(' ')
|
||
|
debug('comparator', comp, options)
|
||
|
this.options = options
|
||
|
this.loose = !!options.loose
|
||
|
this.parse(comp)
|
||
|
|
||
|
if (this.semver === ANY) {
|
||
|
this.value = ''
|
||
|
} else {
|
||
|
this.value = this.operator + this.semver.version
|
||
|
}
|
||
|
|
||
|
debug('comp', this)
|
||
|
}
|
||
|
|
||
|
// Range
|
||
|
function Range (range, options) {
|
||
|
if (!options || typeof options !== 'object') {
|
||
|
options = {
|
||
|
loose: !!options,
|
||
|
includePrerelease: false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (range instanceof Range) {
|
||
|
if (range.loose === !!options.loose &&
|
||
|
range.includePrerelease === !!options.includePrerelease) {
|
||
|
return range
|
||
|
} else {
|
||
|
return new Range(range.raw, options)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (range instanceof Comparator) {
|
||
|
return new Range(range.value, options)
|
||
|
}
|
||
|
|
||
|
if (!(this instanceof Range)) {
|
||
|
return new Range(range, options)
|
||
|
}
|
||
|
|
||
|
this.options = options
|
||
|
this.loose = !!options.loose
|
||
|
this.includePrerelease = !!options.includePrerelease
|
||
|
|
||
|
// First reduce all whitespace as much as possible so we do not have to rely
|
||
|
// on potentially slow regexes like \s*. This is then stored and used for
|
||
|
// future error messages as well.
|
||
|
this.raw = range
|
||
|
.trim()
|
||
|
.split(/\s+/)
|
||
|
.join(' ')
|
||
|
|
||
|
// First, split based on boolean or ||
|
||
|
this.set = this.raw.split('||').map(function (range) {
|
||
|
return this.parseRange(range.trim())
|
||
|
}, this).filter(function (c) {
|
||
|
// throw out any that are not relevant for whatever reason
|
||
|
return c.length
|
||
|
})
|
||
|
|
||
|
if (!this.set.length) {
|
||
|
throw new TypeError('Invalid SemVer Range: ' + this.raw)
|
||
|
}
|
||
|
|
||
|
this.format()
|
||
|
}
|
||
|
|
||
|
// toComparators
|
||
|
function toComparators (range, options) {
|
||
|
return new Range(range, options).set.map(function (comp) {
|
||
|
return comp.map(function (c) {
|
||
|
return c.value
|
||
|
}).join(' ').trim().split(' ')
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// satisfies
|
||
|
function satisfies (version, range, options) {
|
||
|
try {
|
||
|
range = new Range(range, options)
|
||
|
} catch (er) {
|
||
|
return false
|
||
|
}
|
||
|
return range.test(version)
|
||
|
}
|
||
|
|
||
|
// maxSatisfying
|
||
|
function maxSatisfying (versions, range, options) {
|
||
|
var max = null
|
||
|
var maxSV = null
|
||
|
try {
|
||
|
var rangeObj = new Range(range, options)
|
||
|
} catch (er) {
|
||
|
return null
|
||
|
}
|
||
|
versions.forEach(function (v) {
|
||
|
if (rangeObj.test(v)) {
|
||
|
// satisfies(v, range, options)
|
||
|
if (!max || maxSV.compare(v) === -1) {
|
||
|
// compare(max, v, true)
|
||
|
max = v
|
||
|
maxSV = new SemVer(max, options)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
return max
|
||
|
}
|
||
|
|
||
|
// minSatisfying
|
||
|
function minSatisfying (versions, range, options) {
|
||
|
var min = null
|
||
|
var minSV = null
|
||
|
try {
|
||
|
var rangeObj = new Range(range, options)
|
||
|
} catch (er) {
|
||
|
return null
|
||
|
}
|
||
|
versions.forEach(function (v) {
|
||
|
if (rangeObj.test(v)) {
|
||
|
// satisfies(v, range, options)
|
||
|
if (!min || minSV.compare(v) === 1) {
|
||
|
// compare(min, v, true)
|
||
|
min = v
|
||
|
minSV = new SemVer(min, options)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
return min
|
||
|
}
|
||
|
|
||
|
// minVersion
|
||
|
function minVersion (range, loose) {
|
||
|
range = new Range(range, loose)
|
||
|
|
||
|
var minver = new SemVer('0.0.0')
|
||
|
if (range.test(minver)) {
|
||
|
return minver
|
||
|
}
|
||
|
|
||
|
minver = new SemVer('0.0.0-0')
|
||
|
if (range.test(minver)) {
|
||
|
return minver
|
||
|
}
|
||
|
|
||
|
minver = null
|
||
|
for (var i = 0; i < range.set.length; ++i) {
|
||
|
var comparators = range.set[i]
|
||
|
|
||
|
comparators.forEach(function (comparator) {
|
||
|
// Clone to avoid manipulating the comparator's semver object.
|
||
|
var compver = new SemVer(comparator.semver.version)
|
||
|
switch (comparator.operator) {
|
||
|
case '>':
|
||
|
if (compver.prerelease.length === 0) {
|
||
|
compver.patch++
|
||
|
} else {
|
||
|
compver.prerelease.push(0)
|
||
|
}
|
||
|
compver.raw = compver.format()
|
||
|
/* fallthrough */
|
||
|
case '':
|
||
|
case '>=':
|
||
|
if (!minver || gt(minver, compver)) {
|
||
|
minver = compver
|
||
|
}
|
||
|
break
|
||
|
case '<':
|
||
|
case '<=':
|
||
|
/* Ignore maximum versions */
|
||
|
break
|
||
|
/* istanbul ignore next */
|
||
|
default:
|
||
|
throw new Error('Unexpected operation: ' + comparator.operator)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
if (minver && range.test(minver)) {
|
||
|
return minver
|
||
|
}
|
||
|
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
// validRange
|
||
|
function validRange (range, options) {
|
||
|
try {
|
||
|
// Return '*' instead of '' so that truthiness works.
|
||
|
// This will throw if it's invalid anyway
|
||
|
return new Range(range, options).range || '*'
|
||
|
} catch (er) {
|
||
|
return null
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ltr
|
||
|
function ltr (version, range, options) {
|
||
|
return outside(version, range, '<', options)
|
||
|
}
|
||
|
|
||
|
// gtr
|
||
|
function gtr (version, range, options) {
|
||
|
return outside(version, range, '>', options)
|
||
|
}
|
||
|
|
||
|
// outside
|
||
|
function outside (version, range, hilo, options) {
|
||
|
version = new SemVer(version, options)
|
||
|
range = new Range(range, options)
|
||
|
|
||
|
var gtfn, ltefn, ltfn, comp, ecomp
|
||
|
switch (hilo) {
|
||
|
case '>':
|
||
|
gtfn = gt
|
||
|
ltefn = lte
|
||
|
ltfn = lt
|
||
|
comp = '>'
|
||
|
ecomp = '>='
|
||
|
break
|
||
|
case '<':
|
||
|
gtfn = lt
|
||
|
ltefn = gte
|
||
|
ltfn = gt
|
||
|
comp = '<'
|
||
|
ecomp = '<='
|
||
|
break
|
||
|
default:
|
||
|
throw new TypeError('Must provide a hilo val of "<" or ">"')
|
||
|
}
|
||
|
|
||
|
// If it satisifes the range it is not outside
|
||
|
if (satisfies(version, range, options)) {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
// From now on, variable terms are as if we're in "gtr" mode.
|
||
|
// but note that everything is flipped for the "ltr" function.
|
||
|
|
||
|
for (var i = 0; i < range.set.length; ++i) {
|
||
|
var comparators = range.set[i]
|
||
|
|
||
|
var high = null
|
||
|
var low = null
|
||
|
|
||
|
comparators.forEach(function (comparator) {
|
||
|
if (comparator.semver === ANY) {
|
||
|
comparator = new Comparator('>=0.0.0')
|
||
|
}
|
||
|
high = high || comparator
|
||
|
low = low || comparator
|
||
|
if (gtfn(comparator.semver, high.semver, options)) {
|
||
|
high = comparator
|
||
|
} else if (ltfn(comparator.semver, low.semver, options)) {
|
||
|
low = comparator
|
||
|
}
|
||
|
})
|
||
|
|
||
|
// If the edge version comparator has a operator then our version
|
||
|
// isn't outside it
|
||
|
if (high.operator === comp || high.operator === ecomp) {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
// If the lowest version comparator has an operator and our version
|
||
|
// is less than it then it isn't higher than the range
|
||
|
if ((!low.operator || low.operator === comp) &&
|
||
|
ltefn(version, low.semver)) {
|
||
|
return false
|
||
|
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
// prerelease
|
||
|
function prerelease (version, options) {
|
||
|
var parsed = parse(version, options)
|
||
|
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
|
||
|
}
|
||
|
|
||
|
// intersects
|
||
|
function intersects (r1, r2, options) {
|
||
|
r1 = new Range(r1, options)
|
||
|
r2 = new Range(r2, options)
|
||
|
return r1.intersects(r2)
|
||
|
}
|
||
|
|
||
|
// coerce
|
||
|
function coerce (version, options) {
|
||
|
if (version instanceof SemVer) {
|
||
|
return version
|
||
|
}
|
||
|
|
||
|
if (typeof version === 'number') {
|
||
|
version = String(version)
|
||
|
}
|
||
|
|
||
|
if (typeof version !== 'string') {
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
options = options || {}
|
||
|
|
||
|
var match = null
|
||
|
if (!options.rtl) {
|
||
|
match = version.match(safeRe[t.COERCE])
|
||
|
} else {
|
||
|
// Find the right-most coercible string that does not share
|
||
|
// a terminus with a more left-ward coercible string.
|
||
|
// Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
|
||
|
//
|
||
|
// Walk through the string checking with a /g regexp
|
||
|
// Manually set the index so as to pick up overlapping matches.
|
||
|
// Stop when we get a match that ends at the string end, since no
|
||
|
// coercible string can be more right-ward without the same terminus.
|
||
|
var next
|
||
|
while ((next = safeRe[t.COERCERTL].exec(version)) &&
|
||
|
(!match || match.index + match[0].length !== version.length)
|
||
|
) {
|
||
|
if (!match ||
|
||
|
next.index + next[0].length !== match.index + match[0].length) {
|
||
|
match = next
|
||
|
}
|
||
|
safeRe[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
|
||
|
}
|
||
|
// leave it in a clean state
|
||
|
safeRe[t.COERCERTL].lastIndex = -1
|
||
|
}
|
||
|
|
||
|
if (match === null) {
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
return parse(match[2] +
|
||
|
'.' + (match[3] || '0') +
|
||
|
'.' + (match[4] || '0'), options)
|
||
|
}
|