CycloneDX/cyclonedx-javascript-library
GitHub: CycloneDX/cyclonedx-javascript-library
面向 JavaScript/TypeScript 的 CycloneDX SBOM 核心开发库,提供完整的 BOM 数据模型、JSON/XML 序列化与规范校验能力。
Stars: 22 | Forks: 15
# CycloneDX JavaScript 库
[![shield_npm-version]][link_npm]
[![shield_rtfd]][link_rtfd]
[![shield_gh-workflow-test]][link_gh-workflow-test]
[![shield_coverage]][link_codacy]
[![shield_ossf-best-practices]][link_ossf-best-practices]
[![shield_license]][license_file]
[![shield_website]][link_website]
[![shield_slack]][link_slack]
[![shield_groups]][link_discussion]
[![shield_twitter-follow]][link_twitter]
[_CycloneDX_][link_website] 面向 _JavaScript_ (_Node.js_ 或 _WebBrowsers_) 的核心功能,
使用 _TypeScript_ 编写并针对目标环境进行编译。
## 职责
* 为 _Node.js_ 和 _WebBrowsers_ 提供 [_CycloneDX_][link_website] 的通用 _JavaScript_ 实现。
* 为上述实现提供类型定义,以便开发者和开发工具可以依赖它。
* 提供用于处理 _CycloneDX_ 的数据模型。
* 提供 JSON 和 XML 规范化器(Normalizers),这些工具...
* 支持所有内置的数据模型。
* 遵循注入的任何 [_CycloneDX_ 规范][CycloneDX-spec] 并生成符合该规范的有效输出。
* 可配置为生成可复现/确定性(deterministic)的输出。
* 能够准备用于 JSON 和 XML 序列化的数据结构。
* 序列化:
* 为所有目标环境提供通用的 JSON 序列化器。
* 为所有目标环境提供 XML 序列化器。
* 支持针对特定环境定制的自定义 XML 序列化器的下游实现
通过提供一个抽象基类来处理规范化和 BomRef 区分。
这样做是因为 _JavaScript_ 中没有通用的 XML 支持。
* 根据 [_CycloneDX_ 规范][CycloneDX-spec] 提供正式的 JSON 和 XML 验证器。(目前仅支持 _Node.js_)
## 功能特性
* 用于以下用例的枚举:
* `AttachmentEncoding`
* `ComponentScope`
* `ComponentType`
* `ExternalReferenceType`
* `HashAlgorithm`
* `Vulnerability` 相关:
* `AffectStatus`
* `AnalysisJustification`
* `AnalysisResponse`
* `AnalysisState`
* `RatingMethod`
* `Severity`
* 用于以下用例的数据模型:
* `Attachment`
* `Bom`
* `BomLink`, `BomLinkDocument`, `BomLinkElement`
* `BomRef`, `BomRefRepository`
* `Component`, `ComponentRepository`, `ComponentEvidence`
* `ExternalReference`, `ExternalReferenceRepository`
* `Hash`, `HashContent`, `HashDictionary`
* `LicenseExpression`, `NamedLicense`, `SpdxLicense`, `LicenseRepository`
* `Metadata`
* `OrganizationalContact`, `OrganizationalContactRepository`
* `OrganizationalEntity`, `OrganizationalEntityRepository`
* `Property`, `PropertyRepository`
* `SWID`
* `Tool`, `ToolRepository`, `Tools`
* `Vulnerability` 相关:
* `Advisory`, `AdvisoryRepository`
* `Affect`, `AffectRepository`, `AffectedSingleVersion`, `AffectedVersionRange`, `AffectedVersionRepository`
* `Analysis`
* `Credits`
* `Rating`, `RatingRepository`
* `Reference`, `ReferenceRepository`
* `Source`
* `Vulnerability`, `VulnerabilityRepository`
* 用于以下用例的工具:
* 为 `Bom.serialNumber` 生成有效的随机 SerialNumber
* 从文件收集许可证证据(仅限 _Node.js_)
* 用于以下用例的工厂:
* 从任何许可证描述符字符串创建数据模型
* 特定于 _Node.js_:从 PackageJson 类数据结构及派生数据创建数据模型
* 用于以下用例的构建器:
* 特定于 _Node.js_:从 PackageJson 类数据结构创建深层 `Tool` 或 `Component` 数据模型
* 以下版本 [_CycloneDX_ 规范][CycloneDX-spec] 的实现:
* `1.7`
* `1.6`
* `1.5`
* `1.4`
* `1.3`
* `1.2`
* 将数据模型转换为 JSON 结构的规范化器
* 将数据模型转换为 XML 结构的规范化器
* 将 `Bom` 数据模型转换为 JSON 字符串的通用序列化器
* 将 `Bom` 数据模型转换为 XML 字符串的特定序列化器:
* 特定于 _WebBrowsers_:实现利用特定于浏览器的文档生成器和打印机。
* 特定于 _Node.js_:实现利用如下所述的[可选依赖](#optional-dependencies)
* 针对 JSON 字符串和 XML 字符串的正式验证器(目前仅限 _Node.js_)
需要如下所述的[可选依赖](#optional-dependencies)
## 安装
此包和构建结果可通过 _npm_, _pnpm_ 和 _yarn_ 获取:
```
npm i -S @cyclonedx/cyclonedx-library
pnpm add @cyclonedx/cyclonedx-library
yarn add @cyclonedx/cyclonedx-library
```
您可以从源码安装该包,
它将在安装时自动构建:
```
npm i -S github:CycloneDX/cyclonedx-javascript-library
pnpm add github:CycloneDX/cyclonedx-javascript-library
yarn add @cyclonedx/cyclonedx-library@github:CycloneDX/cyclonedx-javascript-library # only with yarn-2
```
## 可选 Peer Dependencies
某些功能需要可选的 peer dependencies —— 有关版本详情,请参阅 `package.json`。
* 在 _Node.js_ 上序列化为 XML 需要以下任一项:
* [`xmlbuilder2`](https://www.npmjs.com/package/xmlbuilder2)
* 在 _Node.js_ 上验证 JSON 需要以下所有项:
* [`ajv`](https://www.npmjs.com/package/ajv)
* [`ajv-formats`](https://www.npmjs.com/package/ajv-formats)
* [`ajv-formats-draft2019`](https://www.npmjs.com/package/ajv-formats-draft2019)
* 在 _Node.js_ 上验证 XML 需要以下任一项:
* [`libxmljs2`](https://www.npmjs.com/package/libxmljs2)
* 在某些情况下,系统可能需要满足 [`node-gyp`](https://github.com/TooTallNate/node-gyp#installation) 的要求。
此外,针对相关的第三方标准,我们有一些建议:
* [`packageurl-js`](https://www.npmjs.com/package/packageurl-js)
用于构建和解析 PackageURL。
* [`spdx-expression-parse`](https://www.npmjs.com/package/spdx-expression-parse)
用于验证 SPDX 许可证表达式。
## 用法
请参阅扩展的 [示例][examples]。
### 作为 _Node.js_ 包
```
const CDX = require('@cyclonedx/cyclonedx-library')
const bom = new CDX.Models.Bom()
bom.metadata.component = new CDX.Models.Component(
CDX.Enums.ComponentType.Application,
'MyProject'
)
const componentA = new CDX.Models.Component(
CDX.Enums.ComponentType.Library,
'myComponentA',
)
bom.components.add(componentA)
bom.metadata.component.dependencies.add(componentA.bomRef)
```
为了确保在 **打包(bundling)** 时实现最佳的 **tree-shaking**,请仅从库发布的 [入口点](https://nodejs.org/api/packages.html#package-entry-points) 导入您实际需要的符号。您可以在包的 `package.json` 的 `exports` 字段中找到所有可用的入口点。
```
const { Bom, Component } = require('@cyclonedx/cyclonedx-library/Models')
const { ComponentType } = require('@cyclonedx/cyclonedx-library/Enums')
const bom = new Bom()
bom.metadata.component = new Component(
ComponentType.Application,
'MyProject'
)
const componentA = new Component(
ComponentType.Library,
'myComponentA',
)
bom.components.add(componentA)
bom.metadata.component.dependencies.add(componentA.bomRef)
```
### 在 _WebBrowsers_ 中
```
```
## API 文档
我们提供了带有注释的类型定义,以便您的 IDE 和工具在您下游使用此库时能够获取文档。
此外,还有托管在 [readthedocs][link_rtfd] 上的预渲染文档。
## 开发与贡献
欢迎提交 issue、bug 报告或 pull request。
详情请参阅 [CONTRIBUTING][contributing_file] 文件。
## 许可证
在 Apache 2.0 许可证的条款下,允许修改和重新分发。
完整许可证请参阅 [LICENSE][license_file] 文件。
标签:BOM, CMS安全, CycloneDX, GNU通用公共许可证, GPT, JavaScript, JSON, MITM代理, Node.js, SBOM, TypeScript, WebSocket, Web浏览器, XML, 代码安全, 依赖分析, 安全合规, 安全插件, 序列化, 数据可视化, 数据模型, 暗色界面, 漏洞枚举, 漏洞管理, 硬件无关, 组件分析, 网络代理, 自动化攻击, 自动化攻击, 自动化攻击, 跌倒检测, 软件物料清单