生态第三方包

言版:语义版本

言版 1.0 的 SemVer 2.0.0 严格解析、范围匹配、稳定排序与资源边界。

言版(yanxu-semver)是纯言序实现的语义版本库。当前稳定版为 1.0.0,严格实现 SemVer 2.0.0 的版本文本与优先级规则,并提供工程常用的范围、筛选和版本选择能力。

版本与安装

项目稳定值
包名言版
版本 / 公开标签1.0.0 / v1.0.0
最低言序1.1.6
依赖无
构建目标字节码

从公开附注标签安装:

yanbao add 言版 \
  --git https://github.com/yanxulang/yanxu-semver.git \
  --rev v1.0.0 \
  --version '^1.0'

等价的 言序.toml 依赖为:

[依赖]
言版 = { git = "https://github.com/yanxulang/yanxu-semver.git", 修订 = "v1.0.0", 版 = "^1.0" }

应提交生成的 言序.lock,让来源修订和内容校验也进入版本控制。

快速开始

引「包:言版」为 言版;

定 候选:列<文> 为 【
    「1.2.0」,「1.8.4」,「2.0.0-rc.1」,「2.0.0」
】;

言 言版.规范化(「1.2.3-alpha.1+linux」);
言 言版.比较(「1.8.4」,「2.0.0-rc.1」);
言 言版.满足(「1.8.4」,「^1.2」);
言 言版.最大满足(候选,「^1.0.0」);
言 言版.递增(「1.8.4」,「次」);

比较返回 -1、0 或 1。构建标识不参与优先级,所以 1.0.0+a 与 1.0.0+b 在比较意义上等价;规范化仍保留构建标识。

核心能力

能力主要入口语义
严格解析解析、尝试解析、是否合法拒绝前导零、v 前缀、首尾空白和非法标识
规范与比较规范化、比较、等价完整 SemVer 2.0.0 预发布优先级
范围满足、满足选项、尝试满足比较器、交集、并集、尖帽、波浪、部分、通配和连字范围
候选选择筛选满足、最小满足、最大满足保持输入顺序筛选,未命中返回空
排序排序版本稳定归并排序,返回新列,不改写输入
递增递增接受 主、次、修,并移除预发布与构建标识

范围语法

言 言版.满足(「1.6.0」,「>=1.2.0 <2.0.0」);
言 言版.满足(「2.3.4」,「^1.0.0 || ~2.3」);
言 言版.满足(「2.2.0」,「1.2 - 2.3」);
言 言版.满足(「3.1.5」,「2.x || 3.1.*」);

空格表示交集,||表示并集。连字范围必须是单个分支中以三个空格分隔的形式;若还要追加条件,应改写成显式比较器。

普通稳定范围默认排除预发布候选。范围显式提及同一主、次、修订核心的预发布时可以命中;需要在整个范围放行预发布时使用显式选项:

言 言版.满足(「1.2.3-beta.2」,「>=1.2.3-alpha <2.0.0」);
言 言版.满足选项(
    「1.5.0-beta.1」,
    「^1.2.0」,
    {「包含预发布」:真}
);

结构化失败

外部清单和索引输入应优先使用无异常入口:

定 结果:典 为 言版.尝试解析(外部版本);

若 结果【「成功」】 则
    言 结果【「值」】;
否则
    言 结果【「错误」】【「代码」】;
终

稳定错误代码包括:

  • YANBAN_PARSE:版本文本不合法;
  • YANBAN_RANGE:范围语法不合法;
  • YANBAN_LIMIT:超过文本、条件或候选预算;
  • YANBAN_ARGUMENT:选项或递增级别不合法。

捕获抛出型入口的错误后可调用 错误详情。程序分支只应依赖代码,不应匹配完整中文消息。

权限与安全边界

言版无第三方依赖,不读写文件,不访问网络、监听端口、环境或进程,也不加载原生扩展。库不保存输入,也没有全局可变状态。

处理不可信输入时还应了解这些硬边界:

  • 单个版本最多 256 个 Unicode 字符;
  • 单个范围最多 2048 个 Unicode 字符;
  • 每个范围最多 32 个并集分支,每分支最多 64 个交集条件;
  • 单次排序或选择最多 4096 个候选版本。

超限会完整失败,不会返回截断后的结果。业务入口仍宜设置更小的请求级配额。

已知限制

  • 主、次和修订号最大为 9007199254740991;数字预发布标识按文本长度和 ASCII 次序比较,不受该浮点安全整数上限影响。
  • 范围是言版的工程扩展,不属于 SemVer 2.0.0 标准本身;不支持括号或隐式逗号交集。
  • 范围分词只把 ASCII 空格当作交集分隔,不接受制表符替代。
  • 比较和等价忽略构建标识;需要比较完整文本身份时应比较两边的规范化结果。

项目链接