コンテンツにスキップ

decode

同期デコード

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"
このオプションは key-value 形式のオブジェクトを JavaScript のプレーンオブジェクトまたは Map でデコードするか選択するために使用できます。"Object" を選択するとプレーンオブジェクト、"Map" を選択すると Map クラスのインスタンスでデコードします。デフォルトは "Object" です。プレーンオブジェクトのキーは文字列または数値 (つまり string | number) のみを受け取ることができますが、このオプションを "Map" にしてデコードすると、キーはデコードされたすべての値を受け取ることができます。
reviver?: Reviver | ReviverObject | (Reviver | ReviverObject)[]
このオプションは、CBOR の単純なデータアイテムまたはタグ付きデータアイテムを JavaScript の値に変換するために使用します。単純なデータアイテムは 0 から 19 および 32 から 255 までの値に限定されます。タグ付きデータアイテムのタグは 0 から 2^64-1 までの number または bigint です。関数が Symbol.for("@tai-kun/surrealdb/cbor/continue") で得られる CONTINUE シンボルを返すと後続の関数が呼び出されます。何にも変換できなかった場合は SurrealTypeError が投げられます。
isSafeMapKey?: (key: unknown, map: Map<unknown, unknown>) => boolean
このオプションは、Map オブジェクトのキーが安全であるか検証する関数です。関数は keymap の 2 つの引数を受け取ります。key はキーの値で、map 検証している Map オブジェクトです。この関数が false を返すと CborUnsafeMapKeyError が投げられます。デフォルトでは "__proto__" または "constructor" を安全ではないキーと判定します。このオプションを指定すると、デフォルトの検証が完全に上書きされることに注意してください。デフォルトの検証に独自の検証を加える場合は、"__proto__" または "constructor" も安全ではないキーと判定するべきです。
isSafeObjectKey?: (key: unknown, obj: Record<string | number, unknown>) => boolean
このオプションは、プレーンオブジェクトのキーが安全であるか検証する関数です。関数は keyobj の 2 つの引数を受け取ります。key はキーの値で、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);