UNPKG

userface

Version:

Universal Data-Driven UI Engine with live data, validation, and multi-platform support

227 lines (226 loc) 9.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SystemInitializer = void 0; const logger_1 = require("./logger"); // Инициализатор системы class SystemInitializer { constructor() { // Версия последней инициализации Object.defineProperty(this, "lastInitializedVersion", { enumerable: true, configurable: true, writable: true, value: null }); // Статус инициализации Object.defineProperty(this, "isInitialized", { enumerable: true, configurable: true, writable: true, value: false }); // Статистика инициализации Object.defineProperty(this, "stats", { enumerable: true, configurable: true, writable: true, value: { initializations: 0, errors: 0, lastInitTime: null } }); } // === ИНИЦИАЛИЗАЦИЯ === initialize() { try { const currentVersion = this.getCurrentVersion(); if (this.isInitialized && this.lastInitializedVersion === currentVersion) { logger_1.logger.info('System already initialized with current version', 'SystemInitializer', { version: currentVersion }); return; } logger_1.logger.info('Initializing system', 'SystemInitializer', { version: currentVersion }); // Выполняем инициализацию this.performInitialization(); this.lastInitializedVersion = currentVersion; this.isInitialized = true; this.stats.initializations++; this.stats.lastInitTime = new Date(); logger_1.logger.info('System initialized successfully', 'SystemInitializer', { version: currentVersion, initCount: this.stats.initializations }); } catch (error) { this.stats.errors++; logger_1.logger.error('Failed to initialize system', 'SystemInitializer', error); throw error; } } initializeWithAdapters(adapters) { try { logger_1.logger.info('Initializing system with adapters', 'SystemInitializer', { adapterCount: adapters.length }); // Сначала инициализируем систему this.initialize(); // Затем регистрируем адаптеры if (adapters && Array.isArray(adapters)) { adapters.forEach((adapter, index) => { try { if (adapter && typeof adapter === 'object') { logger_1.logger.info(`Registering adapter ${index + 1}/${adapters.length}`, 'SystemInitializer', { adapterId: adapter.id || `adapter-${index}` }); // В реальной реализации здесь будет вызов adapterManager.registerAdapter() } } catch (error) { logger_1.logger.error(`Failed to register adapter ${index + 1}`, 'SystemInitializer', error, { adapter }); } }); } logger_1.logger.info('System initialized with adapters successfully', 'SystemInitializer', { adapterCount: adapters.length }); } catch (error) { this.stats.errors++; logger_1.logger.error('Failed to initialize system with adapters', 'SystemInitializer', error); throw error; } } // === ПРОВЕРКИ === isSystemInitialized() { return this.isInitialized; } validateInitialization() { const issues = []; const currentVersion = this.getCurrentVersion(); if (!this.isInitialized) { issues.push('System not initialized'); } if (this.lastInitializedVersion !== currentVersion) { issues.push('Version mismatch'); } if (this.stats.errors > 0) { issues.push(`Initialization errors: ${this.stats.errors}`); } const isValid = issues.length === 0; logger_1.logger.debug('Validated initialization', 'SystemInitializer', { isValid, issuesCount: issues.length, version: currentVersion }); return { isValid, issues, version: currentVersion }; } // === СБРОС === reset() { logger_1.logger.info('Resetting system initialization', 'SystemInitializer'); this.lastInitializedVersion = null; this.isInitialized = false; logger_1.logger.info('System initialization reset', 'SystemInitializer'); } // === ПРИВАТНЫЕ МЕТОДЫ === getCurrentVersion() { try { // В реальной реализации здесь будет логика определения версии // Например, из package.json или git commit hash const packageJson = require('../../package.json'); return packageJson.version || '1.0.0'; } catch (error) { logger_1.logger.warn('Failed to get current version, using fallback', 'SystemInitializer', error); return '1.0.0'; } } performInitialization() { // В реальной реализации здесь будут все необходимые шаги инициализации logger_1.logger.debug('Performing system initialization steps', 'SystemInitializer'); // 1. Проверка окружения this.validateEnvironment(); // 2. Инициализация логгера this.initializeLogger(); // 3. Проверка зависимостей this.validateDependencies(); // 4. Инициализация кешей this.initializeCaches(); logger_1.logger.debug('System initialization steps completed', 'SystemInitializer'); } validateEnvironment() { logger_1.logger.debug('Validating environment', 'SystemInitializer'); // Проверяем, что мы в Node.js среде if (typeof window !== 'undefined') { logger_1.logger.warn('SystemInitializer is not available in browser environment', 'SystemInitializer'); return; } // Проверяем Node.js версию const nodeVersion = process.version; const minNodeVersion = '16.0.0'; if (this.compareVersions(nodeVersion, minNodeVersion) < 0) { throw new Error(`Node.js version ${minNodeVersion} or higher required, got ${nodeVersion}`); } // Проверяем доступность файловой системы let fs; try { fs = require('fs'); } catch (error) { // fs недоступен в браузере logger_1.logger.warn('File system not available in browser environment', 'SystemInitializer'); return; } if (!fs || typeof fs.writeFileSync !== 'function') { throw new Error('File system not available'); } logger_1.logger.debug('Environment validation passed', 'SystemInitializer'); } initializeLogger() { logger_1.logger.debug('Initializing logger', 'SystemInitializer'); // Логгер уже инициализирован, просто логируем } validateDependencies() { logger_1.logger.debug('Validating dependencies', 'SystemInitializer'); // Проверяем, что мы в Node.js среде if (typeof window !== 'undefined') { logger_1.logger.warn('Dependencies validation skipped in browser environment', 'SystemInitializer'); return; } // Проверяем наличие необходимых модулей const requiredModules = ['fs', 'path']; for (const moduleName of requiredModules) { try { require(moduleName); } catch (error) { throw new Error(`Required module not available: ${moduleName}`); } } logger_1.logger.debug('Dependencies validation passed', 'SystemInitializer'); } initializeCaches() { logger_1.logger.debug('Initializing caches', 'SystemInitializer'); // В реальной реализации здесь будет инициализация кешей } compareVersions(version1, version2) { const v1 = version1.replace(/^v/, '').split('.').map(Number); const v2 = version2.replace(/^v/, '').split('.').map(Number); for (let i = 0; i < Math.max(v1.length, v2.length); i++) { const num1 = v1[i] || 0; const num2 = v2[i] || 0; if (num1 > num2) return 1; if (num1 < num2) return -1; } return 0; } // === СТАТИСТИКА === getStats() { return { ...this.stats, isInitialized: this.isInitialized, lastVersion: this.lastInitializedVersion, currentVersion: this.getCurrentVersion() }; } } exports.SystemInitializer = SystemInitializer;