UNPKG

@tinymce/beehive-flow

Version:

A CLI tool implementing the beehive flow git branching process

88 lines 3.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.compareVersions = exports.isPreRelease = exports.compareMajorMinorVersions = exports.versionToString = exports.majorMinorVersionToString = exports.parseMajorMinorVersion = exports.parseVersion = exports.parseVersionE = void 0; const tslib_1 = require("tslib"); const E = tslib_1.__importStar(require("fp-ts/Either")); const PromiseUtils = tslib_1.__importStar(require("../utils/PromiseUtils")); const Comparison_1 = require("../utils/Comparison"); const parseVersionE = (input) => { // based on https://semver.org/ // eslint-disable-next-line max-len const regexp = /^(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)\.(?<patch>0|[1-9]\d*)(?:-(?<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; const r = regexp.exec(input); if (r === null || r.groups === undefined) { return E.left('Could not parse version string: ' + input); } else { const g = r.groups; // The regexp should guarantee that these are positive integers const major = parseInt(g.major, 10); const minor = parseInt(g.minor, 10); const patch = parseInt(g.patch, 10); const preRelease = r.groups.prerelease; const buildMetaData = r.groups.buildmetadata; return E.right({ major, minor, patch, preRelease, buildMetaData }); } }; exports.parseVersionE = parseVersionE; const parseVersion = async (input) => PromiseUtils.eitherToPromise((0, exports.parseVersionE)(input)); exports.parseVersion = parseVersion; const parseMajorMinorVersion = async (input) => { const regexp = /^(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)$/; const r = regexp.exec(input); if (r === null || r.groups === undefined) { return PromiseUtils.fail('Could not parse major.minor version string'); } else { const g = r.groups; const major = parseInt(g.major, 10); const minor = parseInt(g.minor, 10); return { major, minor }; } }; exports.parseMajorMinorVersion = parseMajorMinorVersion; const majorMinorVersionToString = (v) => `${v.major}.${v.minor}`; exports.majorMinorVersionToString = majorMinorVersionToString; const versionToString = (v) => { const preBit = v.preRelease === undefined ? '' : '-' + v.preRelease; const metaBit = v.buildMetaData === undefined ? '' : '+' + v.buildMetaData; return [v.major, v.minor, v.patch].join('.') + preBit + metaBit; }; exports.versionToString = versionToString; const compareMajorMinorVersions = (a, b) => (0, Comparison_1.chain)((0, Comparison_1.compareNative)(a.major, b.major), (0, Comparison_1.compareNative)(a.minor, b.minor)); exports.compareMajorMinorVersions = compareMajorMinorVersions; const isPreRelease = (v) => v.preRelease !== undefined; exports.isPreRelease = isPreRelease; /** * Compares two versions on their major, minor and prerelease versions. * Per semver: * - released versions beat prerelease versions for the same major.minor.patch * - buildMeta is not considered * * Might not be suitable for sorting. * * @param a * @param b */ const compareVersions = (a, b) => (0, Comparison_1.chainN)((0, Comparison_1.compareNative)(a.major, b.major), (0, Comparison_1.compareNative)(a.minor, b.minor), (0, Comparison_1.compareNative)(a.patch, b.patch), comparePreReleases(a, b)); exports.compareVersions = compareVersions; const comparePreReleases = (a, b) => { if (a.preRelease === b.preRelease) { return 0 /* Comparison.EQ */; } else if (a.preRelease === undefined) { // a is a release, b is a prerelease - a > b return 1 /* Comparison.GT */; } else { // a is a prerelease, b is a release - a < b return -1 /* Comparison.LT */; } }; //# sourceMappingURL=Version.js.map