userface
Version:
Universal Data-Driven UI Engine with live data, validation, and multi-platform support
227 lines (226 loc) • 9.64 kB
JavaScript
;
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;