跳转到内容

解码

同步解码

decode 函数用于将 CBOR 格式的 Uint8Array 解码为 JavaScript 值。

导入

import { decode } from "@tai-kun/surrealdb/cbor";

语法

function decode(input: Uint8Array, options?: DecodeOptions): unknown;

参数

input

用于解码为 JavaScript 值的 CBOR 格式的 Uint8Array

options

解码选项。

mapType?: "Object" | "Map"
此选项用于选择将键值对对象解码为 JavaScript 普通对象还是 Map。选择 "Object" 将解码为普通对象,选择 "Map" 将解码为 Map 类实例。默认为 "Object"。普通对象的键只能接受字符串或数字(即 string | number),但如果将此选项设置为 "Map" 进行解码,则键可以接受所有解码后的值。
reviver?: Reviver | ReviverObject | (Reviver | ReviverObject)[]
此选项用于将 CBOR 的简单数据项或带标签的数据项转换为 JavaScript 值。简单数据项限于 0 到 19 和 32 到 255 的值。带标签的数据项的标签是 0 到 2^64-1 之间的 numberbigint。如果函数返回 Symbol.for("@tai-kun/surrealdb/cbor/continue") 获得的 CONTINUE 符号,则会调用后续函数。如果无法转换任何内容,则会抛出 SurrealTypeError
isSafeMapKey?: (key: unknown, map: Map<unknown, unknown>) => boolean
此选项是一个函数,用于验证 Map 对象的键是否安全。该函数接收两个参数 keymapkey 是键的值,map 是正在验证的 Map 对象。如果此函数返回 false,则会抛出 CborUnsafeMapKeyError。默认情况下,它将 "__proto__""constructor" 判定为不安全的键。请注意,指定此选项会完全覆盖默认验证。如果您想在默认验证的基础上添加自己的验证,则也应该将 "__proto__""constructor" 判定为不安全的键。
isSafeObjectKey?: (key: unknown, obj: Record<string | number, unknown>) => boolean
此选项是一个函数,用于验证普通对象的键是否安全。该函数接收两个参数 keyobjkey 是键的值,obj 是正在验证的普通对象。如果此函数返回 false,则会抛出 CborUnsafeMapKeyError。默认情况下,它将 "__proto__""constructor" 判定为不安全的键。请注意,指定此选项会完全覆盖默认验证。如果您想在默认验证的基础上添加自己的验证,则也应该将 "__proto__""constructor" 判定为不安全的键。
maxDepth?: number
指定对象的最大深度。进入对象或数组时,深度增加 1。默认值为 64。解码不使用递归处理,因此深度没有上限,但不建议设置过大的值。

返回值

从 CBOR 格式的 Uint8Array 解码得到的 JavaScript 值。

例子

使用 Map 对象解码

import { decode } from "@tai-kun/surrealdb/cbor";
const cbor = new Uint8Array([
0xa1, // mt: 5, ai: 1
// key
0x00, // mt: 0, ai: 0
// value
0x00, // mt: 0, ai: 0
]);
const value = decode(bytes, { mapType: "Map" });
console.log(value); // Map(1) { [ 0 ] => 0 }

异步解码

decodeStream 函数用于将 CBOR 格式的 Uint8Array 解码为 JavaScript 值。

导入

import { decodeStream } from "@tai-kun/surrealdb/cbor";

语法

function decodeStream(
input: ReadableStream<Uint8Array>,
options?: DecodeStreamOptions,
): unknown;

参数

input

Uint8Array 的可读流。Fetch API 可能会根据请求在 Response 对象的 body 属性中提供此流。

options

除了同步解码的选项外,还可以指定以下选项:

signal?: AbortSignal
用于中断流的取消信号。

返回值

一个以 JavaScript 值为结果的 StatefulPromise

例子

Fetch API

import { decodeStream } from "@tai-kun/surrealdb/cbor";
const response = await fetch("http://localhost:8000/rpc", {
method: "POST",
headers: {
Accept: "application/cbor",
// ... more headers
},
// ... more properties
})
const result = await decodeStream(resp.body);