| 'use strict' |
| |
| const parse = require('./parse') |
| const constants = require('../internal/constants') |
| const SemVer = require('../classes/semver') |
| |
| const truncate = (version, truncation, options) => { |
| if (!constants.RELEASE_TYPES.includes(truncation)) { |
| return null |
| } |
| |
| const clonedVersion = cloneInputVersion(version, options) |
| return clonedVersion && doTruncation(clonedVersion, truncation) |
| } |
| |
| const cloneInputVersion = (version, options) => { |
| const versionStringToParse = ( |
| version instanceof SemVer ? version.version : version |
| ) |
| |
| return parse(versionStringToParse, options) |
| } |
| |
| const doTruncation = (version, truncation) => { |
| if (isPrerelease(truncation)) { |
| return version.version |
| } |
| |
| version.prerelease = [] |
| |
| switch (truncation) { |
| case 'major': |
| version.minor = 0 |
| version.patch = 0 |
| break |
| case 'minor': |
| version.patch = 0 |
| break |
| } |
| |
| return version.format() |
| } |
| |
| const isPrerelease = (type) => { |
| return type.startsWith('pre') |
| } |
| |
| module.exports = truncate |