| 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 |