synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
67 lines (62 loc) • 2.61 kB
JavaScript
import { loggerConsole } from "./logger-console.util.js";
/**
* Базовый класс ошибок Synapse.
* Позволяет отличать ошибки библиотеки от прочих через `instanceof`.
*/ class SynapseError extends Error {
context;
cause;
constructor(message, context, cause){
super(context ? `[${context}] ${message}` : message), this.context = context, this.cause = cause;
this.name = 'SynapseError';
}
}
/**
* Логирует ошибку через ILogger (если есть) или через console-fallback.
*/ function logError(message, error, logger, level = 'error') {
const meta = {
error: error instanceof Error ? error.message : String(error)
};
if (logger) {
logger[level](message, meta);
} else {
loggerConsole[level](`[Synapse] ${message}`, error);
}
}
/**
* OPERATION pattern: логирует и пробрасывает ошибку.
* Для CRUD-операций (get, set, update, delete) и инициализации.
*/ function handleOperationError(context, error, logger) {
logError(context, error, logger);
throw error;
}
/**
* CALLBACK pattern: логирует и проглатывает ошибку.
* Для пользовательских callback'ов, подписчиков, эффектов.
* Ошибка в одном callback'е не должна ломать остальные.
*/ function handleCallbackError(context, error, logger) {
logError(context, error, logger);
}
/**
* CLEANUP pattern: логирует предупреждение и продолжает.
* Для destroy(), unsubscribe() и прочих cleanup-операций.
*/ function handleCleanupError(context, error, logger) {
logError(context, error, logger, 'warn');
}
/**
* Обёртка для безопасного вызова callback'а (CALLBACK pattern).
* Возвращает результат или undefined при ошибке.
*/ function safeCallback(fn, context, logger) {
try {
return fn();
} catch (error) {
handleCallbackError(context, error, logger);
return undefined;
}
}
/**
* Обёртка для promise в fire-and-forget сценариях (CLEANUP pattern).
*/ function safePromise(promise, context, logger) {
promise.catch((error)=>handleCleanupError(context, error, logger));
}
export { SynapseError, handleCallbackError, handleCleanupError, handleOperationError, logError, safeCallback, safePromise };
//# sourceMappingURL=error-handling.util.js.map