@dfinity/cbor

中文文档
0.2.3发布于 2026/04/23Apache-2.0TypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 19万

纯JavaScript中"简明二进制对象"(CBOR)的小型执行.

中文使用文档
文档目录28 节
  1. 安装
  2. 使用量
  3. API 密码
  4. :工具箱:函数
  5. : gear: 解码
  6. : gear: 编码
  7. : gear: 用自定义编码
  8. :扳手:常数
  9. :齿轮: CBOR SELF DESCRIBED TAG
  10. : 齿轮: CBOR STOP CODE
  11. : 齿轮: TOKEN VALUE MAX
  12. :齿轮: one BYTE MAX
  13. : 齿轮: 2 BYTES MAX
  14. : 齿轮: Four BYTES MAX
  15. :齿轮: E8T BYTES MAX
  16. : factor: 解码错误
  17. : factor: 编码错误
  18. : nut 并 bolt: enum
  19. :齿轮: CborSimpleType
  20. : 齿轮: Cbor MajorType
  21. : 齿轮: CborminorType
  22. 未执行
  23. 捐款
  24. 设置
  25. 正在测试
  26. 格式化
  27. 生成文件
  28. 许可证

CBOR 编码器/解码器

NPM Version Libraries.io dependency status for latest release

Test Lint

纯JavaScript中"简明二进制对象"(CBOR)的小型执行.

注意: 此软件包并非100%兼容 CBOR 规格见 未执行 详细情况.

安装

使用 npm数字 :

npm install @dfinity/cbor

使用 pnpm数字 :

pnpm add @dfinity/cbor

使用 yarn数字 :

yarn add @dfinity/cbor

使用量

简单 :

import { encode, decode } from '@dfinity/cbor';

const value = true;
const encoded = encode(value); // returns `Uint8Array [245]` (which is "F5" in hex)
const decoded = decode(encoded); // returns `true`

改为替换/复制:

import { encode, decode, type Replacer, type Reviver } from '@dfinity/cbor';

const value = { a: 1, b: 2 };

// Encoding with replacer
const replacer: Replacer = val => (typeof val === 'number' ? val * 2 : val);
const result = encode(value, replacer);
decode(result); // { a: 2, b: 4 }

// Decoding with reviver
const bytes = encode(value);
const reviver: Reviver = val => (typeof val === 'number' ? val * 2 : val);
decode(bytes, reviver); // { a: 2, b: 4 }

API 密码

:工具箱:函数

: gear: 解码

将 CBOR 字节数组解码为值. 更多信息请参见 QQlink Reviver .

函数类型
decode<T extends unknown = any>(input: Uint8Array<ArrayBufferLike>, reviver?: Reviver<T> or undefined) => T

参数:

  • input: - CBOR字节数组来解码.
  • reviver: - 一个可用于操纵已解码值的函数.

实例:

简单

const value = true;
const encoded = encode(value); // returns `Uint8Array [245]` (which is "F5" in hex)
const decoded = decode(encoded); // returns `true`

退役

const bytes = ...; // Uint8Array corresponding to the CBOR encoding of `{ a: 1, b: 2 }`
const reviver: Reviver = val => (typeof val === 'number' ? val * 2 : val);
decode(bytes, reviver); // returns `{ a: 2, b: 4 }`

: gear: 编码

将一个值编码成 CBOR 字节数组.

函数类型
encode<T = any>(value: CborValue<T>, replacer?: Replacer<T> or undefined) => Uint8Array<ArrayBufferLike>

参数:

  • value: - 编码值 .
  • replacer: - 一个在被编码之前可用于操纵输入的函数.

实例:

简单

const value = true;
const encoded = encode(value); // returns `Uint8Array [245]` (which is "F5" in hex)

替换器

const replacer: Replacer = val => (typeof val === 'number' ? val * 2 : val);
encode({ a: 1, b: 2 }, replacer); // returns the Uint8Array corresponding to the CBOR encoding of `{ a: 2, b: 4 }`

: gear: 用自定义编码

将一个值编码为 CBOR 字节数组( 和 QQlink 编码 ) , 但预置自定义的 CBOR 标记( 55799).

函数类型
encodeWithSelfDescribedTag<T = any>(value: CborValue<T>, replacer?: Replacer<T> or undefined) => Uint8Array<ArrayBufferLike>

参数:

  • value: - 编码值 .
  • replacer: - 一个在被编码之前可用于操纵输入的函数.

实例:

const value = true;
const encoded = encodeWithSelfDescribedTag(value); // returns the Uint8Array [217, 217, 247, 245] (which is "D9D9F7F5" in hex)

:扳手:常数

:齿轮: CBOR SELF DESCRIBED TAG

标签号码 55799,CBOR的自定义标签. 这个标签的头的序列化是 0xd9d9f7。 。 。 .

常数类型
CBOR_SELF_DESCRIBED_TAG55799

: 齿轮: CBOR STOP CODE

常数类型
CBOR_STOP_CODEunique symbol

: 齿轮: TOKEN VALUE MAX

常数类型
TOKEN_VALUE_MAX23

:齿轮: one BYTE MAX

常数类型
ONE_BYTE_MAX255

: 齿轮: 2 BYTES MAX

常数类型
TWO_BYTES_MAX65535

: 齿轮: Four BYTES MAX

常数类型
FOUR_BYTES_MAX4294967295

:齿轮: E8T BYTES MAX

可编码为 8 字节的最大值 : 18446744073709551615n。 。 。 .

常数类型
EIGHT_BYTES_MAXbigint

: factor: 解码错误

: factor: 编码错误

: nut 并 bolt: enum

:齿轮: CborSimpleType

财产类型说明
False0x14
True0x15
Null0x16
Undefined0x17
Break0x1f

: 齿轮: Cbor MajorType

财产类型说明
UnsignedInteger0
NegativeInteger1
ByteString2
TextString3
Array4
Map5
Tag6
Simple7

: 齿轮: CborminorType

财产类型说明
Value23
OneByte24
TwoBytes25
FourBytes26
EightBytes27
Indefinite31

未执行

  • 自定义标签编码/解码 .
    • 自定义标记允许自定义类型的编码和解码.
    • 目前我们不使用这种自定义标记(尽管我们可能应该使用).
    • 因为我们不直接编码开发者提供数据(由Candidd编码),那么我们可以安全地说我们不需要这个特性.
  • 文本/字节字符串的单位测试,长度不适宜于四个字节或更小的字节.
    • 文本字符串的"长度"可以用8字节编码,这意味着最大字符串长度是: 18,446,744,073,709,551,615。测试覆盖一个字符串长度,编码最多可达4个字节,比这个更长,测试变得极其缓慢.
    • 4个字节中最多的是 2,147,483,647 表示 ~2gb 字符串的长度,但无论如何都无法装入单个的 IC 信件.
  • 文本和字节字符串的定时长度编码
    • 要将字符串长度比前面提到的8字节限制长,可以将字符串以"不确定"长度来编码.
    • 与前一点类似,由于信息限制,这对IC来说是不切实际的.

捐款

看看这个 捐款准则。 。 。 .

设置

正在测试

pnpm test

格式化

pnpm format

生成文件

我们用 tsdoc- 标记下 生成文档.

更新文件 README.md 文件, 运行 :

pnpm tsdoc

许可证

本项目根据以下规定获得许可证: Apache 许可证 2.0。 。 。 .

版本与发布记录

@dfinity/cbor 共发布 5 个版本,首次发布于 2025/05/27;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.2.3latest2026/04/236 个月前
0.2.22025/06/171.4 年前
0.2.12025/05/281.5 年前
0.2.02025/05/281.5 年前
0.1.02025/05/271.5 年前

关于 @dfinity/cbor 的常见问题

@dfinity/cbor 是什么?

纯JavaScript中"简明二进制对象"(CBOR)的小型执行.

如何安装 @dfinity/cbor?

在项目目录运行 npm install @dfinity/cbor,或使用 pnpm add / yarn add / bun add。

@dfinity/cbor 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dfinity/cbor 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@dfinity/cbor 可以商用吗?

@dfinity/cbor 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@dfinity/cbor 的下载量有多少?

根据 npm 官方下载统计,@dfinity/cbor 在 2026/10/12 – 2026/11/10 这 30 天内被下载 189,667 次,日均约 6,322 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dfinity/cbor 还在维护吗?

最新版本 0.2.3 发布于 2026/04/23(6 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 1 个;首次发布于 2025/05/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。