34 lines
660 B
JavaScript
34 lines
660 B
JavaScript
|
const {MAX_LENGTH} = require('../internal/constants')
|
||
|
const { re, t } = require('../internal/re')
|
||
|
const SemVer = require('../classes/semver')
|
||
|
|
||
|
const parseOptions = require('../internal/parse-options')
|
||
|
const parse = (version, options) => {
|
||
|
options = parseOptions(options)
|
||
|
|
||
|
if (version instanceof SemVer) {
|
||
|
return version
|
||
|
}
|
||
|
|
||
|
if (typeof version !== 'string') {
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
if (version.length > MAX_LENGTH) {
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
const r = options.loose ? re[t.LOOSE] : re[t.FULL]
|
||
|
if (!r.test(version)) {
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
return new SemVer(version, options)
|
||
|
} catch (er) {
|
||
|
return null
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = parse
|