unpak.js
Version:
Modern TypeScript library for reading Unreal Engine pak files and assets, inspired by CUE4Parse
180 lines • 7.3 kB
TypeScript
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