컨텐츠로 건너뛰기

decode

동기 디코딩

decode 함수는 CBOR 형식의 Uint8Array를 JavaScript 값으로 디코딩합니다.

import

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까지의 number 또는 bigint입니다. 함수가 Symbol.for("@tai-kun/surrealdb/cbor/continue")로 얻은 CONTINUE 심볼을 반환하면 후속 함수가 호출됩니다. 아무것도 변환할 수 없으면 SurrealTypeError가 발생합니다.
isSafeMapKey?: (key: unknown, map: Map<unknown, unknown>) => boolean
이 옵션은 Map 객체의 키가 안전한지 확인하는 함수입니다. 함수는 keymap의 두 인수를 받습니다. key는 키 값이고, map은 검증 중인 Map 객체입니다. 이 함수가 false를 반환하면 CborUnsafeMapKeyError가 발생합니다. 기본적으로 "__proto__" 또는 "constructor"를 안전하지 않은 키로 판단합니다. 이 옵션을 지정하면 기본 검증이 완전히 덮어써진다는 점에 유의하십시오. 기본 검증에 사용자 정의 검증을 추가하려면 "__proto__" 또는 "constructor"도 안전하지 않은 키로 판단해야 합니다.
isSafeObjectKey?: (key: unknown, obj: Record<string | number, unknown>) => boolean
이 옵션은 일반 객체의 키가 안전한지 확인하는 함수입니다. 함수는 keyobj의 두 인수를 받습니다. 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

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);