@serpent/common-cli
Version:
通用的 cli 相关的函数
186 lines (166 loc) • 5.99 kB
JavaScript
import { c as constants, r as reExports, s as semver, p as parseOptions_1, a as compare, b as satisfies, R as Range } from './satisfies-144b0f35.mjs';
import { g as getDefaultExportFromCjs } from './_commonjsHelpers-7d1333e8.mjs';
const { MAX_LENGTH } = constants;
const { re, t } = reExports;
const SemVer$1 = semver;
const parseOptions = parseOptions_1;
const parse$2 = (version, options) => {
options = parseOptions(options);
if (version instanceof SemVer$1) {
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$1(version, options)
} catch (er) {
return null
}
};
var parse_1 = parse$2;
var parse$3 = /*@__PURE__*/getDefaultExportFromCjs(parse_1);
const parse$1 = parse_1;
const valid = (version, options) => {
const v = parse$1(version, options);
return v ? v.version : null
};
var valid_1 = valid;
var valid$1 = /*@__PURE__*/getDefaultExportFromCjs(valid_1);
const SemVer = semver;
const inc = (version, release, options, identifier) => {
if (typeof (options) === 'string') {
identifier = options;
options = undefined;
}
try {
return new SemVer(
version instanceof SemVer ? version.version : version,
options
).inc(release, identifier).version
} catch (er) {
return null
}
};
var inc_1 = inc;
var inc$1 = /*@__PURE__*/getDefaultExportFromCjs(inc_1);
const parse = parse_1;
const prerelease = (version, options) => {
const parsed = parse(version, options);
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
};
var prerelease_1 = prerelease;
var prerelease$1 = /*@__PURE__*/getDefaultExportFromCjs(prerelease_1);
/**
* Compares two versions excluding build identifiers (the bit after `+` in the semantic version string).
*
* Sorts in ascending order when passed to `Array.sort()`.
*
* @return
* * v1 < v2 => -1
* * v1 === v2 => 0
* * v1 > v2 => 1
*/
function compareVersion(v1, v2) {
return compare(v1, v2);
}
/** Return true if the version satisfies the range. */
function satisfiesVersion(version, range) {
return satisfies(version, range);
}
/** 解析 version,生成一个对象 */
function parseVersion(version) {
return parse$3(version);
}
/**
* 过滤出需要的版本号
*
* - 如果 mode === 'all', 返回所有有效的版本
* - 如果 mode === 'major', 返回所有 A.x.x 的版本,确保 A 唯一
* - 如果 mode === 'minor', 返回所有 A.B.x 的版本,确保 A.B 唯一
* - 如果 mode === 'patch', 返回所有 A.B.C 的版本,确保 A.B.C 唯一
* - 如果 mode === 'pre', 返回所有 A.x.x-pre 的版本,确保 A 唯一
* - 如果 mode === 'pre&major', 包含 major 和 pre 场景
* - 如果 mode === 'pre&minor', 包含 minor 和 pre 场景
*/
function filterVersions(versions, mode) {
if (mode === void 0) { mode = 'all'; }
var map = new Map();
var targets = versions.map(function (v) { return parseVersion(v); }).filter(function (t) { return t != null; });
if (mode === 'all')
return targets.map(function (target) { return target.raw; });
var update = function (key, target) {
var prev = map.get(key);
if (prev) {
if (target.compare(prev) > 0)
map.set(key, target.raw);
}
else {
map.set(key, target.raw);
}
};
targets.forEach(function (target) {
var major = target.major, minor = target.minor, patch = target.patch, prerelease = target.prerelease;
if (!prerelease.length) {
if (mode.includes('major'))
update("".concat(major, ".x.x"), target);
else if (mode.includes('minor'))
update("".concat(major, ".").concat(minor, ".x"), target);
else if (mode.includes('patch'))
update("".concat(major, ".").concat(minor, ".").concat(patch), target);
}
});
if (mode.includes('pre')) {
var versions_1 = Array.from(map.values());
targets.forEach(function (target) {
var major = target.major, prerelease = target.prerelease;
// 预发布版本
// 如果已经存在 2.0.0,则不再需要 2.0.0-rc.1 和 1.0.0-rc.1
if (prerelease.length && (!versions_1.length || versions_1.every(function (v) { return target.compare(v) > 0; }))) {
update("".concat(major, ".x.x-pre"), target);
}
});
}
return Array.from(map.values());
}
/** 版本号排序,默认从大到小排 */
function sortVersions(versions, mode) {
return versions.sort(function (a, b) { return (mode === 'asc' ? compareVersion(a, b) : compareVersion(b, a)); });
}
/** 判断是否是一个正确的版本号 */
function isValidVersion(version, options) {
return Boolean(valid$1(version, options));
}
/** 是否是一个有效的版本范围 */
function isValidRange(range) {
try {
var r = new Range(range);
return r.set.length > 0;
}
catch (e) {
return false;
}
}
/** 判断是否是一个 prerelease 版本号 */
function isPrereleaseVersion(version, options) {
return Boolean(prerelease$1(version, options));
}
var INCREMENT_TAGS = ['patch', 'minor', 'major', 'prepatch', 'preminor', 'premajor', 'prerelease'];
/** 判断某个 tag 是不是一个 increment tag */
function isIncrementTag(tag) {
return INCREMENT_TAGS.includes(tag);
}
/**
* 根据指定的 tag ,生成一个新版本号
*/
function increment(version, tag, options) {
return inc$1(version, tag, options, options === null || options === void 0 ? void 0 : options.identifier);
}
export { INCREMENT_TAGS, compareVersion, filterVersions, increment, isIncrementTag, isPrereleaseVersion, isValidRange, isValidVersion, parseVersion, satisfiesVersion, sortVersions };