UNPKG

unpak.js

Version:

Modern TypeScript library for reading Unreal Engine pak files and assets, inspired by CUE4Parse

180 lines 7.3 kB
import { EventEmitter } from 'events'; /** * Database Integration for unpak.js Enterprise Features * Phase 12 - Database integration for asset metadata, performance metrics, and enterprise features * * This module provides: * - Asset metadata storage and search * - Performance metrics tracking * - Dependency mapping * - Asset usage analytics * - Multi-tenant data isolation */ export interface IAssetMetadata { assetId: string; name: string; path: string; type: string; size: number; checksum: string; archiveSource: string; tags: string[]; dependencies: string[]; tenantId: string; createdAt: Date; lastAccessed: Date; accessCount: number; metadata?: Record<string, any>; } export interface IPerformanceMetrics { metricId: string; operationType: 'archive_loading' | 'asset_extraction' | 'conversion' | 'search' | 'archive_processing'; durationMs: number; memoryUsageMb: number; cpuUsagePercent?: number; assetsProcessed?: number; tenantId: string; timestamp: string; success: boolean; errorMessage?: string; } export interface IAssetSearchOptions { tenantId: string; type?: string; tags?: string[]; namePattern?: string; pathPattern?: string; sizeMin?: number; sizeMax?: number; createdAfter?: Date; createdBefore?: Date; sortBy?: 'name' | 'size' | 'created' | 'accessed' | 'type'; sortDirection?: 'ASC' | 'DESC'; limit?: number; offset?: number; } export interface IAnalyticsQuery { tenantId: string; startDate: Date; endDate: Date; operationType?: string; groupBy?: 'day' | 'hour' | 'operation' | 'tenant'; } export interface IAnalyticsResult { operationStats: Array<{ operationType: string; count: number; averageDuration: number; totalDuration: number; successRate: number; }>; timeSeriesData: Array<{ timestamp: string; operationCount: number; averageDuration: number; memoryUsage: number; }>; assetTypeDistribution: Array<{ type: string; count: number; totalSize: number; }>; } /** * Abstract database provider interface * Implementations can use SQLite, PostgreSQL, MongoDB, etc. */ export declare abstract class DatabaseProvider extends EventEmitter { abstract initialize(): Promise<void>; abstract close(): Promise<void>; abstract isHealthy(): Promise<boolean>; abstract storeAssetMetadata(metadata: IAssetMetadata): Promise<string>; abstract getAssetMetadata(assetId: string, tenantId: string): Promise<IAssetMetadata | null>; abstract updateAssetMetadata(assetId: string, tenantId: string, updates: Partial<IAssetMetadata>): Promise<boolean>; abstract deleteAssetMetadata(assetId: string, tenantId: string): Promise<boolean>; abstract searchAssets(options: IAssetSearchOptions): Promise<IAssetMetadata[]>; abstract storePerformanceMetrics(metrics: IPerformanceMetrics): Promise<string>; abstract getPerformanceMetrics(tenantId: string, startDate: Date, endDate: Date): Promise<IPerformanceMetrics[]>; abstract getAnalytics(query: IAnalyticsQuery): Promise<IAnalyticsResult>; abstract storeDependency(assetId: string, dependencyId: string, tenantId: string): Promise<void>; abstract getDependencies(assetId: string, tenantId: string): Promise<string[]>; abstract getDependents(assetId: string, tenantId: string): Promise<string[]>; abstract deleteDependencies(assetId: string, tenantId: string): Promise<void>; abstract batchStoreAssets(assets: IAssetMetadata[]): Promise<string[]>; abstract batchDeleteAssets(assetIds: string[], tenantId: string): Promise<number>; abstract createTenantSchema(tenantId: string): Promise<void>; abstract deleteTenantData(tenantId: string): Promise<void>; abstract getTenantStats(tenantId: string): Promise<{ assetCount: number; totalSize: number; lastActivity: Date; }>; } /** * In-memory database provider for development and testing * Production should use SQLite, PostgreSQL, or other persistent storage */ export declare class InMemoryDatabaseProvider extends DatabaseProvider { private assets; private metrics; private dependencies; private initialized; initialize(): Promise<void>; close(): Promise<void>; isHealthy(): Promise<boolean>; private getAssetKey; storeAssetMetadata(metadata: IAssetMetadata): Promise<string>; getAssetMetadata(assetId: string, tenantId: string): Promise<IAssetMetadata | null>; updateAssetMetadata(assetId: string, tenantId: string, updates: Partial<IAssetMetadata>): Promise<boolean>; deleteAssetMetadata(assetId: string, tenantId: string): Promise<boolean>; searchAssets(options: IAssetSearchOptions): Promise<IAssetMetadata[]>; storePerformanceMetrics(metrics: IPerformanceMetrics): Promise<string>; getPerformanceMetrics(tenantId: string, startDate: Date, endDate: Date): Promise<IPerformanceMetrics[]>; getAnalytics(query: IAnalyticsQuery): Promise<IAnalyticsResult>; storeDependency(assetId: string, dependencyId: string, tenantId: string): Promise<void>; getDependencies(assetId: string, tenantId: string): Promise<string[]>; getDependents(assetId: string, tenantId: string): Promise<string[]>; deleteDependencies(assetId: string, tenantId: string): Promise<void>; batchStoreAssets(assets: IAssetMetadata[]): Promise<string[]>; batchDeleteAssets(assetIds: string[], tenantId: string): Promise<number>; createTenantSchema(tenantId: string): Promise<void>; deleteTenantData(tenantId: string): Promise<void>; getTenantStats(tenantId: string): Promise<{ assetCount: number; totalSize: number; lastActivity: Date; }>; } /** * Main database integration manager * Provides high-level interface for database operations */ export declare class DatabaseIntegration extends EventEmitter { private provider; private initialized; constructor(provider: DatabaseProvider); initialize(): Promise<void>; close(): Promise<void>; isInitialized(): boolean; isHealthy(): Promise<boolean>; storeAssetMetadata(metadata: IAssetMetadata): Promise<string>; getAssetMetadata(assetId: string, tenantId: string): Promise<IAssetMetadata | null>; searchAssets(options: IAssetSearchOptions): Promise<IAssetMetadata[]>; storePerformanceMetrics(metrics: IPerformanceMetrics): Promise<string>; getAnalytics(query: IAnalyticsQuery): Promise<IAnalyticsResult>; storeDependency(assetId: string, dependencyId: string, tenantId: string): Promise<void>; getDependencies(assetId: string, tenantId: string): Promise<string[]>; createTenantSchema(tenantId: string): Promise<void>; deleteTenantData(tenantId: string): Promise<void>; getTenantStats(tenantId: string): Promise<{ assetCount: number; totalSize: number; lastActivity: Date; }>; private ensureInitialized; } /** * Factory function for creating database integration with different providers */ export declare function createDatabaseIntegration(type?: 'memory' | 'sqlite' | 'postgresql'): DatabaseIntegration; //# sourceMappingURL=DatabaseIntegration.d.ts.map