컨텐츠로 건너뛰기

UUID

UUID(Universally Unique Identifier)는 특정 엔티티를 고유하게 식별하는 데 사용되는 128비트 식별자입니다. Uuid는 이를 표현하기 위한 클래스이며, UUID v1부터 v7까지 지원합니다. UUID를 생성하려면 별도의 라이브러리 또는 런타임에 내장된 기능(node:crypto 등)을 사용해야 합니다.

import

import { Uuid } from "@tai-kun/surrealdb/decodeonly-datatypes";
import { Uuid } from "@tai-kun/surrealdb/encodable-datatypes";
import { Uuid } from "@tai-kun/surrealdb/standard-datatypes";

.constructor()

새로운 Uuid 객체를 생성합니다.

new Uuid(source: Uint8Array); // decode-only, encodable
new Uuid(source: Uint8Array | string); // standard

매개변수

source

UUID의 바이트 배열 표현 또는 standard 프리셋일 경우 문자열입니다.

반환값

new를 통해 호출될 경우, Uuid는 해당 인스턴스를 반환합니다.

.bytes 인스턴스 속성 >=decode-only

UUID의 바이트 배열입니다.

.bytes: Uint8Array;

.variant 인스턴스 속성 =standard

UUID의 변형(variant)입니다. 이는 UUID의 13번째 비트의 상위 비트로 정의되며, 다음과 같은 3가지 주요 변형과 미래를 위해 예약된 1가지 변형이 있습니다.

  1. NCS 호환
    • 0b0xxx
    • UUID가 NCS(Network Computing System)와 호환됨을 나타냅니다.
    • 일반적으로 많이 사용되지는 않습니다.
  2. RFC 4122 호환
    • 0b10xx
    • RFC 4122(UUID 표준 사양)에 기반한 UUID입니다.
    • 일반적으로 사용되는 UUID 형식입니다. v1(시간 기반) 및 v4(랜덤) 등의 형식이 포함됩니다.
  3. Microsoft GUID 호환
    • 0b110x
    • Microsoft에서 사용하는 GUID(Globally Unique Identifier) 형식입니다.
  4. 미래를 위해 예약됨
    • 0b111x

이 속성은 위의 변형 외에도 NIL UUID와 MAX UUID도 표현합니다.

.variant:
| "NIL" // 00000000-0000-0000-0000-000000000000
| "MAX" // ffffffff-ffff-ffff-ffff-ffffffffffff
| "NCS" // 0xxx (0b0000 ~ 0b0111)
| "RFC" // 10xx (0b1000 ~ 0b1011)
| "MS" // 110x (0b1100 ~ 0b1101)
| "RESERVED"; // 111x (0b1110 ~ 0b1111)

.version 인스턴스 속성 =standard

UUID의 변형이 "RFC"인 경우, UUID 버전 번호입니다. 그렇지 않으면 null입니다.

.version: 1 | 2 | 3 | 4 | 5 | 6 | 7 | null;

.timestamp 인스턴스 속성 =standard

UUID의 변형이 "RFC"이고 버전이 v1, v6, v7 중 하나인 경우, 타임스탬프 부분입니다. 그렇지 않으면 null입니다. 편의상 타임스탬프는 모두 UNIX 에포크부터의 밀리초로 계산됩니다.

.timestamp: number | null;

.toString() 인스턴스 메서드 >=encodable

Uuid 객체를 SurrealQL 변수에서 사용 가능한 문자열로 변환합니다.

.valueOf().toJSON()은 이 메서드와 동일한 결과를 반환합니다.

.toString(): string;

매개변수

없음.

반환값

16진수 UUID 문자열을 반환합니다.

예시

import { Uuid } from "@tai-kun/surrealdb/encodable-datatypes";
const bytes = new Uint8Array([
0x26, 0xc8, 0x01, 0x63,
0x3b, 0x83,
0x48, 0x1b,
0x93, 0xda,
0xc4, 0x73, 0x94, 0x7c, 0xcc, 0xbc,
]);
const uuid = new Uuid(bytes);
console.log(uuid.toString());
//-> 26c80163-3b83-481b-93da-c473947cccbc

.toSurql() 인스턴스 메서드 >=encodable

Uuid 객체를 SurrealQL에 포함시킬 수 있는 문자열로 변환합니다. .toString()과 유사하지만, u 접두사를 추가하여 쿼리 파서에 문자열이 UUID임을 알립니다.

.toSurql(): string;

매개변수

없음.

반환값

u 접두사가 붙은 16진수 UUID 문자열을 반환합니다.

예시

import { Uuid } from "@tai-kun/surrealdb/encodable-datatypes";
const bytes = new Uint8Array([
0x26, 0xc8, 0x01, 0x63,
0x3b, 0x83,
0x48, 0x1b,
0x93, 0xda,
0xc4, 0x73, 0x94, 0x7c, 0xcc, 0xbc,
]);
const uuid = new Uuid(bytes);
console.log(uuid.toSurql());
//-> u'26c80163-3b83-481b-93da-c473947cccbc'

.clone() 인스턴스 메서드 =standard

Uuid 객체를 복제합니다.

.clone(): this;

매개변수

없음.

반환값

새로운 Uuid 객체를 반환합니다. Uuid 클래스를 상속하는 경우 해당 클래스의 인스턴스가 반환됩니다.

.compareTo() 인스턴스 메서드 =standard

Uuid 객체의 타임스탬프를 비교합니다.

.compareTo(other: Uuid): -1 | 0 | 1;

매개변수

other

비교 대상 UUID

반환값

어느 한쪽에 타임스탬프 부분이 없거나 타임스탬프가 같으면 0을 반환합니다. 비교 대상 UUID의 타임스탬프가 더 나중 시간이면 -1, 더 이전 시간이면 1을 반환합니다.

예시

다음 예시는 서로 다른 UUID 버전의 타임스탬프를 비교하여 오름차순으로 정렬합니다:

import { Uuid } from "@tai-kun/surrealdb/standard-datatypes";
const uuidv1 = new Uuid("0e004000-2073-11ef-8451-eb2a011f8691");
const uuidv6 = new Uuid("1ef1fa9e-3968-6000-a77e-683eb1a35ebe");
console.log(new Date(uuidv1.timestamp).toISOString());
//-> 2024-06-02T00:00:00.000Z
console.log(new Date(uuidv6.timestamp).toISOString());
//-> 2024-06-01T00:00:00.000Z
const uuidList = [
uuidv1,
uuidv6,
];
uuidList.sort((a, b) => a.compareTo(b));
console.log(uuidList);
//-> [
//-> 1ef1fa9e-3968-6000-a77e-683eb1a35ebe, (uuidv6)
//-> 0e004000-2073-11ef-8451-eb2a011f8691, (uuidv1)
//-> ]

추가 내용

Uuid 객체의 일반적인 판정

프리셋에 의존하지 않고 값이 Uuid 객체인지 판정하려면 isUuid 함수를 사용하는 것을 권장합니다. 이 함수는 instanceof를 사용하지 않으므로, 검증할 값의 프리셋이 불명확한 경우에 유용합니다.

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