Files
dbmgr-hmos/engine/src/main/ets/plugin/SemVerUtil.ets
T
2026-10-19 00:11:38 +08:00

56 lines
1.6 KiB
Plaintext

/**
* 语义化版本工具(1.3.4)。
*
* 只实现插件兼容性判断所需的最小子集:解析 major.minor.patch 与兼容性比较。
* 纯函数,不依赖平台 API,可独立测试。
*/
export class SemVerUtil {
/** 解析版本号;非法返回 undefined。 */
static parse(version: string): number[] | undefined {
if (version.length === 0) {
return undefined;
}
const parts: string[] = version.split('.');
if (parts.length !== 3) {
return undefined;
}
const out: number[] = [];
for (let i = 0; i < parts.length; i++) {
const text: string = parts[i];
if (text.length === 0) {
return undefined;
}
for (let j = 0; j < text.length; j++) {
const code: number = text.charCodeAt(j);
if (code < 48 || code > 57) {
return undefined;
}
}
out.push(Number(text));
}
return out;
}
/**
* 插件要求的 API 版本是否可被当前版本满足。
* 规则:主版本必须相同(不兼容变更需升主版本);要求的 minor/patch 不得高于当前。
*/
static isCompatible(required: string, current: string): boolean {
const req: number[] | undefined = SemVerUtil.parse(required);
const cur: number[] | undefined = SemVerUtil.parse(current);
if (req === undefined || cur === undefined) {
return false;
}
if (req[0] !== cur[0]) {
return false;
}
if (req[1] > cur[1]) {
return false;
}
if (req[1] === cur[1] && req[2] > cur[2]) {
return false;
}
return true;
}
}