@ efficial/ spdx
SPDX许可标识符,例外和许可表达作为Effect Schema类. License.parse 对照完整的SPDX许可证清单验证单一标识; SpdxExpression.parse 验证和解释整个表达式—— (MIT OR Apache-2.0), (中文(简体) ), GPL-2.0-only WITH Classpath-exception-2.0 ——输入一个打入的AST,而不是每个呼叫站点重排的字符串. 0运行时依赖性:SPDX数据集作为生成的TypeScript进行销售,而非从运行时的CJS软件包中读取.
预
1.0.0。 。 。 . 此软件包是@effected/*在稳定基础上建造的工具包 效应v4(effect~4.1.0) 并仍在0.x发展。 稳定效果 制作一个工具箱1.0.0可能,不是自动的。 为了保持你的effect财务报告和审定财务报表@effect/*该工具包在线上构建和测试、安装@effected/pnpm-plugin-effected。 。 。 .稳定:不稳定. 此软件包的 API 表面尚未考虑 完成并可能改变
0.x释放 定一个确切的版本——甚至 标记软件包 稳定 在此之前1.0.0可以引入突破性更改 和精确的针 变成一个类型检查错误 而不是一个 跑步时间惊喜。 完全政策: 释放策略。 。 。 .
为什么 @ effect/ spdx
验证 a license 字段通常是指在运行时导入一个小的 CJS 解析器并相信它可以持续在模块系统之间工作——这是外国对很少改变的语法的依赖. 这个软件包卖出SPDX许可证和例外数据集是真实的,承诺了TypeScript代之以:708活用和26个被折旧的许可证标识符,加上66个例外,从静态数据中一次建造,在负载时间没有解析成本. 校验只针对实际用户输入,通过 parse 编号 : parseResult从不反对 ~734 已知的好目录条目.
语法本身被硬化的方式相同: 输入错误和一个未知的标识符都通过一个键入失败 InvalidSpdxExpressionError,从不作为抛出例外, 递归-后世解析器被深度封住, 所以一个敌意或意外被忽略的表达不能吹出堆栈。 差分测试套房 检查引擎与Cononical spdx-expression-parse 如果两者有分歧,规则是修补这个引擎,而不是测试.
安装
npm install @effected/spdx effect
pnpm add @effected/spdx effect
需要节点.js~~24.11.0. effect v4是唯一的对等依赖,也是任何种类的唯一依赖——没有IO,没有文件系统,没有网络.
全体 @effected/* 软件包仅为无害环境管理:只公布出口地图 import 条件,所以 require() 包括解析 CJS 模式的工具 —— 与节点失败 ERR_PACKAGE_PATH_NOT_EXPORTED 而不是装入不存在的 CJS 建筑。 从ES模块导入.
快开始
验证单一许可证标识符 :
import { License } from "@effected/spdx";
import { Effect } from "effect";
const program = Effect.gen(function* () {
const mit = yield* License.parse("MIT");
return [mit.id, mit.deprecated] as const;
});
console.log(Effect.runSync(program));
// => ["MIT", false]
同步检查整个许可证表达式, 无 Effect 需要运行时间 :
import { isValidExpression } from "@effected/spdx";
console.log(isValidExpression("(MIT OR Apache-2.0)"));
// => true
console.log(isValidExpression("MIT AND"));
// => false
特征
License- 经验证的SPDX许可证标识符(Schema.Class),与parse(效力)和parseResult(同步)Result(a) 构造器,一个of(...)已知良好价值的方便和静态前提isKnownId, (中文(简体) ),isDeprecatedId财务报告和审定财务报表isLicenseRef。 。 。 .- 向供应商数据集的元数据发放许可证
License数字 :name财务报告和审定财务报表referenceUrl(两者)Option, (中文(简体) ),none(单位:千美元)LicenseRef-标识符列表未描述)和osiApproved编号 :fsfLibre标记,用于需要超过标识符的UI或政策门. LicenseException- 与SPDX例外识别符相同的模式,有自己的目录和parse编号 :parseResult编号 :of。 。 。 .SpdxExpression- 递归许可证表示AST(LicenseNode, (中文(简体) ),LicenseRefNode, (中文(简体) ),WithExceptionNode, (中文(简体) ),AndNode, (中文(简体) ),OrNode),结果parse时,同步isValidExpression上游,一个FromString用于嵌入到您自己的计划中的编码器, 以及一个条形的, 完全亲和的.toString()。 。 。 .SpdxExpression.licensesOf编号 :SpdxExpression.primaryLicense——每个许可一个表达式名称,按书面顺序并被复制,以及一个只显示一个适合的地方.primaryLicense是故意的,这是故意的none用于AND表达方式:组合同时强制其所有条款,所以其中没有人代表整体,选择一方会错误地表述义务. 到达licensesOf只要能显示一个以上的地方.InvalidSpdxExpressionError——软件包的单打出错误;不正确的语法和一个未知的标识符都通过它失败了,从不作为缺陷.- 已过期的许可证和例外标识符成功解析并携带
deprecated: true而不是被彻底拒绝.