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
オブジェクトのキーが安全であるか検証する関数です。関数はkey
とmap
の 2 つの引数を受け取ります。key
はキーの値で、map
検証しているMap
オブジェクトです。この関数がfalse
を返すとCborUnsafeMapKeyError
が投げられます。デフォルトでは"__proto__"
または"constructor"
を安全ではないキーと判定します。このオプションを指定すると、デフォルトの検証が完全に上書きされることに注意してください。デフォルトの検証に独自の検証を加える場合は、"__proto__"
または"constructor"
も安全ではないキーと判定するべきです。 isSafeObjectKey?: (key: unknown, obj: Record<string | number, unknown>) => boolean
- このオプションは、プレーンオブジェクトのキーが安全であるか検証する関数です。関数は
key
とobj
の 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);