truncate.js 1021 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. 'use strict'
  2. const parse = require('./parse')
  3. const constants = require('../internal/constants')
  4. const SemVer = require('../classes/semver')
  5. const truncate = (version, truncation, options) => {
  6. if (!constants.RELEASE_TYPES.includes(truncation)) {
  7. return null
  8. }
  9. const clonedVersion = cloneInputVersion(version, options)
  10. return clonedVersion && doTruncation(clonedVersion, truncation)
  11. }
  12. const cloneInputVersion = (version, options) => {
  13. const versionStringToParse = (
  14. version instanceof SemVer ? version.version : version
  15. )
  16. return parse(versionStringToParse, options)
  17. }
  18. const doTruncation = (version, truncation) => {
  19. if (isPrerelease(truncation)) {
  20. return version.version
  21. }
  22. version.prerelease = []
  23. switch (truncation) {
  24. case 'major':
  25. version.minor = 0
  26. version.patch = 0
  27. break
  28. case 'minor':
  29. version.patch = 0
  30. break
  31. }
  32. return version.format()
  33. }
  34. const isPrerelease = (type) => {
  35. return type.startsWith('pre')
  36. }
  37. module.exports = truncate