@tinymce/beehive-flow
Version:
A CLI tool implementing the beehive flow git branching process
88 lines • 3.97 kB
JavaScript
;
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