userface
Version:
Universal Data-Driven UI Engine with live data, validation, and multi-platform support
86 lines (85 loc) • 2.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.lifecycleManager = exports.LifecycleManager = void 0;
const event_bus_1 = require("./event-bus");
class LifecycleManager {
constructor() {
Object.defineProperty(this, "hooks", {
enumerable: true,
configurable: true,
writable: true,
value: new Map()
});
Object.defineProperty(this, "errorCallbacks", {
enumerable: true,
configurable: true,
writable: true,
value: []
});
}
onBeforeRegister(callback) {
this.addHook('beforeRegister', callback);
}
onAfterRegister(callback) {
this.addHook('afterRegister', callback);
}
onBeforeRender(callback) {
this.addHook('beforeRender', callback);
}
onAfterRender(callback) {
this.addHook('afterRender', callback);
}
onError(callback) {
this.errorCallbacks.push(callback);
}
async executeLifecycle(event, context) {
// Выполняем хуки жизненного цикла
const callbacks = this.hooks.get(event) || [];
for (const callback of callbacks) {
try {
await callback(context);
}
catch (error) {
console.error(`Error in lifecycle hook ${event}:`, error);
await this.handleError(error, context);
}
}
// Эмитим событие
event_bus_1.eventBus.emit(`lifecycle:${event}`, context);
}
async handleError(error, context) {
// Выполняем error callbacks
for (const callback of this.errorCallbacks) {
try {
await callback(error, context);
}
catch (callbackError) {
console.error('Error in error callback:', callbackError);
}
}
// Эмитим событие ошибки
event_bus_1.eventBus.emit('lifecycle:error', { error, context });
}
addHook(event, callback) {
if (!this.hooks.has(event)) {
this.hooks.set(event, []);
}
this.hooks.get(event).push(callback);
}
getHookCount(event) {
return this.hooks.get(event)?.length || 0;
}
clearHooks(event) {
if (event) {
this.hooks.delete(event);
}
else {
this.hooks.clear();
}
}
clearErrorCallbacks() {
this.errorCallbacks = [];
}
}
exports.LifecycleManager = LifecycleManager;
exports.lifecycleManager = new LifecycleManager();