@alauda-fe/common
Version:
Alauda frontend team common codes.
76 lines • 9.59 kB
JavaScript
/**
* 基于相对严格的版本号规则,规范可以参考https://semver.org/
* 但在比较版本号时使用相对宽松的规则,具体可以查看compare-versions库的实现
* 自测用例:https://stackblitz.com/edit/typescript-jqszbj
*/
import { compare } from 'compare-versions';
export { compareVersions as compareVersionToNum, satisfies as satisfiesVersion, } from 'compare-versions';
export const versionRegex = /^(\d+)\.(\d+)\.(\d+)(?:-([\da-z-]+(?:\.[\da-z-]+)*))?$/;
const removeFirstV = (version) => {
version = version.trim();
if (/^v\d/.test(version)) {
version = version.slice(1);
}
return version;
};
/**
* 获取有效的版本号,如果符合规范则返回,否则返回null
* eg: getValidVersion('v1.2.3') // '1.2.3'
*/
export const getValidVersion = (version) => {
version = removeFirstV(version);
return versionRegex.test(version) ? version : null;
};
/**
* 解析版本号,如果符合规范则返回一个包含版本信息的对象
*/
export const parseVersion = (version) => {
version = removeFirstV(version);
const match = version.match(versionRegex);
if (match?.length) {
return {
version: match[0],
major: +match[1],
minor: +match[2],
patch: +match[3],
prerelease: match[4]?.split('.').map(str => {
if (/^\d*$/.test(str)) {
return +str;
}
return str;
}) || [],
};
}
};
const _getCompare = (operator) => (v1, v2) => compare(v1, v2, operator);
/**
* 使用给定规则比较两个版本
* lt: v1小于v2; gt: v1大于v2; lte: v1小于等于v2; gte: v1大于等于v2;
* eg: compareVersion.lt('1.2.3', '9.8.7') // true
* compareVersion.cmp('1.2.3', '9.8.7', '<') // true
*/
export const compareVersion = {
lt: _getCompare('<'),
gt: _getCompare('>'),
eq: _getCompare('='),
lte: _getCompare('<='),
gte: _getCompare('>='),
cmp: compare,
};
// 允许使用宽松的版本号进行 minor 版本比较
export const compareMinorVersion = (v1, v2) => {
const v1Arr = v1.split('.').map(v => parseInt(v));
const v2Arr = v2.split('.').map(v => parseInt(v));
for (let i = 0; i < 2; i++) {
const v1Part = v1Arr[i] || 0;
const v2Part = v2Arr[i] || 0;
if (v1Part > v2Part) {
return 1;
}
if (v1Part < v2Part) {
return -1;
}
}
return 0;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL3V0aWxzL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFNUQsT0FBTyxFQUVMLGVBQWUsSUFBSSxtQkFBbUIsRUFDdEMsU0FBUyxJQUFJLGdCQUFnQixHQUM5QixNQUFNLGtCQUFrQixDQUFDO0FBVTFCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FDdkIsd0RBQXdELENBQUM7QUFFM0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtJQUN2QyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFDRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFlLEVBQVUsRUFBRTtJQUN6RCxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckQsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQWlCLEVBQUU7SUFDN0QsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLE9BQU87WUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqQixLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEIsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoQixVQUFVLEVBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNkLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDLENBQUMsSUFBSSxFQUFFO1NBQ1gsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FDZixDQUFDLFFBQXlCLEVBQUUsRUFBRSxDQUM5QixDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQVcsRUFBRSxDQUNsQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5Qjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixFQUFFLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUNwQixFQUFFLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUNwQixFQUFFLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUNwQixHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQztJQUN0QixHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQztJQUN0QixHQUFHLEVBQUUsT0FBTztDQUNiLENBQUM7QUFFRiwwQkFBMEI7QUFDMUIsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQUU7SUFDNUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIOWfuuS6juebuOWvueS4peagvOeahOeJiOacrOWPt+inhOWIme+8jOinhOiMg+WPr+S7peWPguiAg2h0dHBzOi8vc2VtdmVyLm9yZy9cbiAqIOS9huWcqOavlOi+g+eJiOacrOWPt+aXtuS9v+eUqOebuOWvueWuveadvueahOinhOWIme+8jOWFt+S9k+WPr+S7peafpeeci2NvbXBhcmUtdmVyc2lvbnPlupPnmoTlrp7njrBcbiAqIOiHqua1i+eUqOS+i++8mmh0dHBzOi8vc3RhY2tibGl0ei5jb20vZWRpdC90eXBlc2NyaXB0LWpxc3pialxuICovXG5cbmltcG9ydCB7IGNvbXBhcmUsIENvbXBhcmVPcGVyYXRvciB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuXG5leHBvcnQge1xuICBDb21wYXJlT3BlcmF0b3IgYXMgVmVyc2lvbkNvbXBhcmVPcGVyYXRvcixcbiAgY29tcGFyZVZlcnNpb25zIGFzIGNvbXBhcmVWZXJzaW9uVG9OdW0sXG4gIHNhdGlzZmllcyBhcyBzYXRpc2ZpZXNWZXJzaW9uLFxufSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uT2JqZWN0IHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBtYWpvcjogbnVtYmVyO1xuICBtaW5vcjogbnVtYmVyO1xuICBwYXRjaDogbnVtYmVyO1xuICBwcmVyZWxlYXNlPzogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNvbnN0IHZlcnNpb25SZWdleCA9XG4gIC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKD86LShbXFxkYS16LV0rKD86XFwuW1xcZGEtei1dKykqKSk/JC87XG5cbmNvbnN0IHJlbW92ZUZpcnN0ViA9ICh2ZXJzaW9uOiBzdHJpbmcpID0+IHtcbiAgdmVyc2lvbiA9IHZlcnNpb24udHJpbSgpO1xuICBpZiAoL152XFxkLy50ZXN0KHZlcnNpb24pKSB7XG4gICAgdmVyc2lvbiA9IHZlcnNpb24uc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIHZlcnNpb247XG59O1xuLyoqXG4gKiDojrflj5bmnInmlYjnmoTniYjmnKzlj7fvvIzlpoLmnpznrKblkIjop4TojIPliJnov5Tlm57vvIzlkKbliJnov5Tlm55udWxsXG4gKiBlZzogZ2V0VmFsaWRWZXJzaW9uKCd2MS4yLjMnKSAvLyAnMS4yLjMnXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWYWxpZFZlcnNpb24gPSAodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgdmVyc2lvbiA9IHJlbW92ZUZpcnN0Vih2ZXJzaW9uKTtcbiAgcmV0dXJuIHZlcnNpb25SZWdleC50ZXN0KHZlcnNpb24pID8gdmVyc2lvbiA6IG51bGw7XG59O1xuXG4vKipcbiAqIOino+aekOeJiOacrOWPt++8jOWmguaenOespuWQiOinhOiMg+WImei/lOWbnuS4gOS4quWMheWQq+eJiOacrOS/oeaBr+eahOWvueixoVxuICovXG5leHBvcnQgY29uc3QgcGFyc2VWZXJzaW9uID0gKHZlcnNpb246IHN0cmluZyk6IFZlcnNpb25PYmplY3QgPT4ge1xuICB2ZXJzaW9uID0gcmVtb3ZlRmlyc3RWKHZlcnNpb24pO1xuICBjb25zdCBtYXRjaCA9IHZlcnNpb24ubWF0Y2godmVyc2lvblJlZ2V4KTtcbiAgaWYgKG1hdGNoPy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbjogbWF0Y2hbMF0sXG4gICAgICBtYWpvcjogK21hdGNoWzFdLFxuICAgICAgbWlub3I6ICttYXRjaFsyXSxcbiAgICAgIHBhdGNoOiArbWF0Y2hbM10sXG4gICAgICBwcmVyZWxlYXNlOlxuICAgICAgICBtYXRjaFs0XT8uc3BsaXQoJy4nKS5tYXAoc3RyID0+IHtcbiAgICAgICAgICBpZiAoL15cXGQqJC8udGVzdChzdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gK3N0cjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfSkgfHwgW10sXG4gICAgfTtcbiAgfVxufTtcblxuY29uc3QgX2dldENvbXBhcmUgPVxuICAob3BlcmF0b3I6IENvbXBhcmVPcGVyYXRvcikgPT5cbiAgKHYxOiBzdHJpbmcsIHYyOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgY29tcGFyZSh2MSwgdjIsIG9wZXJhdG9yKTtcbi8qKlxuICog5L2/55So57uZ5a6a6KeE5YiZ5q+U6L6D5Lik5Liq54mI5pysXG4gKiBsdDogdjHlsI/kuo52MjsgIGd0OiB2MeWkp+S6jnYyOyAgbHRlOiB2MeWwj+S6juetieS6jnYyOyAgZ3RlOiB2MeWkp+S6juetieS6jnYyO1xuICogZWc6IGNvbXBhcmVWZXJzaW9uLmx0KCcxLjIuMycsICc5LjguNycpIC8vIHRydWVcbiAqICAgICBjb21wYXJlVmVyc2lvbi5jbXAoJzEuMi4zJywgJzkuOC43JywgJzwnKSAvLyB0cnVlXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wYXJlVmVyc2lvbiA9IHtcbiAgbHQ6IF9nZXRDb21wYXJlKCc8JyksXG4gIGd0OiBfZ2V0Q29tcGFyZSgnPicpLFxuICBlcTogX2dldENvbXBhcmUoJz0nKSxcbiAgbHRlOiBfZ2V0Q29tcGFyZSgnPD0nKSxcbiAgZ3RlOiBfZ2V0Q29tcGFyZSgnPj0nKSxcbiAgY21wOiBjb21wYXJlLFxufTtcblxuLy8g5YWB6K645L2/55So5a695p2+55qE54mI5pys5Y+36L+b6KGMIG1pbm9yIOeJiOacrOavlOi+g1xuZXhwb3J0IGNvbnN0IGNvbXBhcmVNaW5vclZlcnNpb24gPSAodjE6IHN0cmluZywgdjI6IHN0cmluZykgPT4ge1xuICBjb25zdCB2MUFyciA9IHYxLnNwbGl0KCcuJykubWFwKHYgPT4gcGFyc2VJbnQodikpO1xuICBjb25zdCB2MkFyciA9IHYyLnNwbGl0KCcuJykubWFwKHYgPT4gcGFyc2VJbnQodikpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xuICAgIGNvbnN0IHYxUGFydCA9IHYxQXJyW2ldIHx8IDA7XG4gICAgY29uc3QgdjJQYXJ0ID0gdjJBcnJbaV0gfHwgMDtcbiAgICBpZiAodjFQYXJ0ID4gdjJQYXJ0KSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgaWYgKHYxUGFydCA8IHYyUGFydCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn07XG4iXX0=