UuidThe Uuid class provides universally unique identifiers (UUIDs) with support for UUID v4 (random) and UUID v7 (time-ordered) generation.
Import:
import { Uuid } from 'surrealdb';
Source: value/uuid.ts
new Uuid(value)Create a UUID from an existing value.
Syntaxnew Uuid(uuid) // Clone existing new Uuid(string) // Parse from string new Uuid(bytes) // From binary representation
| Parameter | Type | Description |
|---|---|---|
value required | Uuid | string | ArrayBuffer | Uint8Array | Value to create UUID from. |
// Parse from string const uuid = new Uuid('550e8400-e29b-41d4-a716-446655440000'); // From binary const bytes = new Uint8Array([/* 16 bytes */]); const uuid = new Uuid(bytes); // Clone existing const copy = new Uuid(uuid);
Uuid.v4()Generate a random UUID v4.
SyntaxUuid.v4()
Uuid - Random UUID v4
const randomId = Uuid.v4(); console.log(randomId.toString()); // '550e8400-e29b-41d4-a716-446655440000' // Use as record ID const userId = new RecordId('users', Uuid.v4()); await db.create(userId).content(userData);
Uuid.v7()Generate a time-ordered UUID v7.
SyntaxUuid.v7()
Uuid - Time-ordered UUID v7
TipUUID v7 includes a timestamp component, making it sortable by creation time. This is useful for time-series data and maintaining chronological order.
const timeOrderedId = Uuid.v7(); // Sequential v7 UUIDs are sortable const id1 = Uuid.v7(); // ... time passes ... const id2 = Uuid.v7(); // id1 < id2 (lexicographically)
Uuid.parse(string)Parse a UUID from its string representation.
SyntaxUuid.parse(str)
| Parameter | Type | Description |
|---|---|---|
str required | string | UUID string in standard format. |
Uuid - Parsed UUID
const uuid = Uuid.parse('550e8400-e29b-41d4-a716-446655440000');
.toString()Convert to string representation.
Syntaxuuid.toString()
string - UUID string in standard format (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
const uuid = Uuid.v4(); console.log(uuid.toString()); // '550e8400-e29b-41d4-a716-446655440000'
.toJSON()Serialize for JSON.
Syntaxuuid.toJSON()
string - UUID string
.toUint8Array()Get the binary representation as Uint8Array.
Syntaxuuid.toUint8Array()
Uint8Array - 16-byte binary representation
const uuid = Uuid.v4(); const bytes = uuid.toUint8Array(); console.log(bytes.length); // 16
.toBuffer()Get the binary representation as ArrayBuffer.
Syntaxuuid.toBuffer()
ArrayBufferLike - Binary representation
.equals(other)Check if two UUIDs are equal.
Syntaxuuid.equals(other)
boolean - True if equal
import { Surreal, Uuid, RecordId, DateTime, Duration, Table } from 'surrealdb'; const db = new Surreal(); await db.connect('ws://localhost:8000'); // Create session with UUID const sessionId = Uuid.v4(); const session = await db.create(new RecordId('sessions', sessionId)) .content({ user: userId, created_at: DateTime.now(), expires_at: DateTime.now().plus(Duration.parse('24h')), ip_address: '192.168.1.1' }); console.log('Session ID:', sessionId.toString());
// Use v7 for time-series data const events = []; for (let i = 0; i < 100; i++) { const eventId = Uuid.v7(); await db.create(new RecordId('events', eventId)).content({ type: 'user_action', timestamp: DateTime.now(), data: { action: 'click', target: 'button' } }); events.push(eventId); } // Events are naturally sorted by creation time
// Generate unique IDs for various purposes const requestId = Uuid.v4(); const correlationId = Uuid.v4(); const traceId = Uuid.v7(); // Time-ordered for distributed tracing await db.create(new Table('requests')).content({ id: requestId, correlation_id: correlationId, trace_id: traceId, timestamp: DateTime.now() });
// Generate API keys function generateApiKey(): string { return `api_${Uuid.v4().toString().replace(/-/g, '')}`; } const apiKey = generateApiKey(); console.log(apiKey); // 'api_550e8400e29b41d4a716446655440000' await db.create(new Table('api_keys')).content({ key: apiKey, user: userId, created_at: DateTime.now() });
// Use UUID v7 for distributed systems (sortable) class IdGenerator { static generateOrderId(): Uuid { return Uuid.v7(); // Time-ordered } static generateTransactionId(): Uuid { return Uuid.v7(); // Time-ordered } static generateRandomId(): Uuid { return Uuid.v4(); // Random } } const orderId = IdGenerator.generateOrderId(); const txnId = IdGenerator.generateTransactionId();
// Track file uploads with UUIDs async function uploadFile(file: File): Promise<string> { const uploadId = Uuid.v4(); await db.create(new RecordId('uploads', uploadId)).content({ filename: file.name, size: file.size, mime_type: file.type, uploaded_at: DateTime.now(), status: 'processing' }); return uploadId.toString(); }
// Parse UUID from user input function validateUuid(input: string): Uuid | null { try { return Uuid.parse(input); } catch (error) { console.error('Invalid UUID format'); return null; } } const userInput = '550e8400-e29b-41d4-a716-446655440000'; const uuid = validateUuid(userInput); if (uuid) { const record = await db.select(new RecordId('items', uuid)); }
// Generate multiple UUIDs function generateBatchIds(count: number, useV7 = false): Uuid[] { const ids: Uuid[] = []; for (let i = 0; i < count; i++) { ids.push(useV7 ? Uuid.v7() : Uuid.v4()); } return ids; } const randomIds = generateBatchIds(100); // 100 random UUIDs const sortableIds = generateBatchIds(100, true); // 100 time-ordered UUIDs
const randomId = Uuid.v4();
const timeOrderedId = Uuid.v7();
// Good: v7 for time-series and events const eventId = Uuid.v7(); // Good: v4 for security tokens const token = Uuid.v4();
// Good: UUID as record ID const userId = new RecordId('users', Uuid.v7()); // Good: Provides uniqueness and sortability await db.create(userId).content(userData);
// Good: Validate before use try { const uuid = Uuid.parse(userInput); await processUuid(uuid); } catch (error) { return { error: 'Invalid UUID format' }; }
// Good: Store as UUID await db.create(table).content({ session_id: Uuid.v4() }); // Avoid: Store as string await db.create(table).content({ session_id: Uuid.v4().toString() });