UNPKG

@yihuangdb/storage-object

Version:

A Node.js storage object layer library using Redis OM

86 lines 2.69 kB
import { RedisClientType } from 'redis'; export declare class SchemaLockError extends Error { readonly expectedVersion: number; readonly actualVersion: number; readonly schemaName: string; constructor(message: string, expectedVersion: number, actualVersion: number, schemaName: string); } export interface SchemaUpdateOptions { expectedVersion?: number; retryOnConflict?: boolean; maxRetries?: number; lockTimeout?: number; } export interface SchemaMetadata { version: number; fields: string; indexes: string; dataStructure: 'JSON' | 'HASH'; entityCount: string; dataVersion: string; lastDataChange: string; libraryVersion: string; createdAt: string; updatedAt: string; lastAccessed: string; } export declare class SchemaVersionManager { private client; private schemaName; private hashKey; private hllKey; private versionsKey; private keyManager; private readonly defaultMaxRetries; private readonly defaultLockTimeout; constructor(schemaName: string, client: RedisClientType); /** * Store schema metadata in HashMap with locking */ saveMetadata(metadata: Partial<SchemaMetadata>, options?: SchemaUpdateOptions): Promise<void>; /** * Internal method to save metadata with WATCH/MULTI/EXEC */ private _saveMetadataWithLock; /** * Get schema metadata from HashMap */ getMetadata(): Promise<SchemaMetadata | null>; /** * Increment version ONLY for structure changes with atomic locking */ incrementVersion(reason: string, options?: SchemaUpdateOptions): Promise<number>; /** * Track entity creation with HyperLogLog (atomic operation) */ trackEntity(entityId: string): Promise<void>; /** * Get entity count from HyperLogLog */ getEntityCount(): Promise<number>; /** * Add version to history sorted set (now handled atomically in incrementVersion) */ recordVersionHistory(version: number, timestamp: number, reason?: string): Promise<void>; /** * Get version history from sorted set */ getVersionHistory(): Promise<Array<{ version: number; timestamp: number; reason?: string; }>>; /** * Check if structure changed (for version increment) */ isStructuralChange(oldFields: string, newFields: string): boolean; /** * Initialize schema metadata */ initialize(fields: any, indexes: string[], dataStructure: 'JSON' | 'HASH'): Promise<void>; /** * Clean up all schema-related keys */ cleanup(): Promise<void>; } //# sourceMappingURL=schema-versioning.d.ts.map