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, encodablenew Uuid(source: Uint8Array | string); // standard
매개변수
source
UUID의 바이트 배열 표현 또는 standard 프리셋일 경우 문자열입니다.
반환값
new
를 통해 호출될 경우, Uuid
는 해당 인스턴스를 반환합니다.
.bytes
인스턴스 속성 >=decode-only
UUID의 바이트 배열입니다.
.bytes: Uint8Array;
.variant
인스턴스 속성 =standard
UUID의 변형(variant)입니다. 이는 UUID의 13번째 비트의 상위 비트로 정의되며, 다음과 같은 3가지 주요 변형과 미래를 위해 예약된 1가지 변형이 있습니다.
- NCS 호환
0b0xxx
- UUID가 NCS(Network Computing System)와 호환됨을 나타냅니다.
- 일반적으로 많이 사용되지는 않습니다.
- RFC 4122 호환
0b10xx
- RFC 4122(UUID 표준 사양)에 기반한 UUID입니다.
- 일반적으로 사용되는 UUID 형식입니다. v1(시간 기반) 및 v4(랜덤) 등의 형식이 포함됩니다.
- Microsoft GUID 호환
0b110x
- Microsoft에서 사용하는 GUID(Globally Unique Identifier) 형식입니다.
- 미래를 위해 예약됨
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.000Zconsole.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";