unpak.js
Version:
Modern TypeScript library for reading Unreal Engine pak files and assets, inspired by CUE4Parse
151 lines (126 loc) ⢠5.72 kB
text/typescript
/**
* Demo for new Phase 9 & 12 roadmap features implementation
* Features: Blueprint Plugin Support, Database Integration, Multi-Tenant Support
*/
import {
BlueprintPlugin,
UnpakDatabaseProvider,
MultiTenantManager
} from '../src/index';
async function demonstrateNewEnterpriseFeatures() {
console.log('š unpak.js v2.0 - New Enterprise Features Demo');
console.log('==============================================\n');
// 1. Database Integration (Phase 12)
console.log('š 1. Database Integration Features');
const database = new UnpakDatabaseProvider({
provider: 'sqlite',
enableQueryLog: true,
enableMetrics: true
});
await database.initialize({
provider: 'sqlite',
connectionString: ':memory:'
});
// Store some asset metadata
await database.storeAssetMetadata({
assetId: 'asset_001',
name: 'Character_Master',
path: '/Game/Characters/Master.uasset',
type: 'USkeletalMesh',
size: 1024 * 1024,
checksum: 'sha256_example',
archiveSource: 'Fortnite-Windows.pak',
tenantId: 'example_tenant'
});
// Search assets
const assets = await database.searchAssets({
tenantId: 'example_tenant',
type: 'USkeletalMesh',
limit: 10
});
console.log(` ā
Stored and retrieved ${assets.length} assets`);
// 2. Multi-Tenant Support (Phase 12)
console.log('\nš¢ 2. Multi-Tenant Support Features');
const multiTenant = new MultiTenantManager(database);
await multiTenant.initialize();
// Create tenants for different plans
const basicTenant = await multiTenant.createTenant({
tenantId: 'gamedev_studio',
name: 'GameDev Studio',
plan: 'basic',
billingEmail: 'billing@gamedev.com'
});
const enterpriseTenant = await multiTenant.createTenant({
tenantId: 'enterprise_corp',
name: 'Enterprise Corp',
plan: 'enterprise',
billingEmail: 'enterprise@corp.com',
ipWhitelist: ['192.168.1.0/24']
});
console.log(` ā
Created tenants: ${basicTenant.name} (${basicTenant.plan}), ${enterpriseTenant.name} (${enterpriseTenant.plan})`);
// Create session and check resource limits
const session = await multiTenant.createSession('gamedev_studio', 'dev_user_001');
const resourceCheck = multiTenant.checkResourceLimits('gamedev_studio', {
memoryRequired: 1024, // 1GB
storageRequired: 5 * 1024 // 5GB
});
console.log(` ā
Session created: ${session.sessionId}`);
console.log(` ā
Resource check: ${resourceCheck.allowed ? 'Allowed' : resourceCheck.reason}`);
// 3. Blueprint Plugin Support (Phase 9)
console.log('\nšØ 3. Blueprint Plugin Support Features');
const blueprintPlugin = new BlueprintPlugin();
// Simulate blueprint plugin metadata
blueprintPlugin.PluginName.text = 'AdvancedUI';
blueprintPlugin.PluginVersion = '1.2.0';
blueprintPlugin.PluginDescription = 'Advanced UI widgets and components';
blueprintPlugin.PluginAuthor = 'Epic Games';
blueprintPlugin.bCanContainContent = true;
blueprintPlugin.RequiredEngineVersion = '5.1.0';
blueprintPlugin.SupportedTargetPlatforms = ['Win64', 'Mac', 'Linux'];
// Validate compatibility
const compatibility = blueprintPlugin.validateCompatibility('5.3.0', 'Win64');
const marketplaceInfo = blueprintPlugin.getMarketplaceMetadata();
console.log(` ā
Plugin: ${marketplaceInfo.pluginName} v${marketplaceInfo.version}`);
console.log(` ā
Compatibility: ${compatibility.isCompatible ? 'Compatible' : 'Issues found'}`);
console.log(` ā
Blueprint Classes: ${marketplaceInfo.blueprintClassCount}`);
// 4. Enterprise Integration Demo
console.log('\nšÆ 4. Enterprise Integration Demo');
// Track usage for tenant
multiTenant.updateResourceUsage('gamedev_studio', {
memoryUsed: 512,
storageUsed: 2048,
cpuUsed: 1.5
});
const usageReport = multiTenant.getTenantUsage('gamedev_studio');
if (usageReport) {
console.log(` š Usage Report for ${usageReport.tenantId}:`);
console.log(` Memory: ${usageReport.usagePercentages.memory.toFixed(1)}%`);
console.log(` Storage: ${usageReport.usagePercentages.storage.toFixed(1)}%`);
console.log(` CPU: ${usageReport.usagePercentages.cpu.toFixed(1)}%`);
console.log(` Active Sessions: ${usageReport.activeSessions}`);
}
// Store performance metrics
await database.storePerformanceMetrics({
metricId: 'perf_001',
operationType: 'asset_parsing',
durationMs: 1500,
memoryUsageMb: 256,
cpuUsagePercent: 75,
archiveSource: 'Fortnite-Windows.pak',
assetCount: 1500,
tenantId: 'gamedev_studio',
timestamp: new Date().toISOString()
});
console.log(' ā
Performance metrics stored');
console.log('\nš Feature Demonstration Complete!');
console.log('\nš Summary of NEW Implemented Roadmap Features:');
console.log(' ā
Phase 9: Blueprint Plugin Support');
console.log(' ā
Phase 12: Database Integration');
console.log(' ā
Phase 12: Multi-Tenant Support');
console.log(' š Enterprise-grade features ready for production');
}
// Run the demonstration
if (require.main === module) {
demonstrateNewEnterpriseFeatures().catch(console.error);
}
export { demonstrateNewEnterpriseFeatures };