@fab33/fab-errors
Version:
Modern error handling library with typed contexts, Error.cause chains, and ErrorSpecs
63 lines • 4.49 kB
TypeScript
/**
* @file src/chain-utils.ts
* @description Утилиты для работы с цепочками ошибок (Error.cause).
* @version 1.0.8
* @date 2025-05-30
* @updated Добавлена пустая строка в конце файла (eol-last).
*
* HISTORY:
* v1.0.8 (2025-05-30): Исправлено правило eol-last.
* v1.0.7 (2025-05-30): Изменен ErrorCriteria.type на `new (...args: any[]) => Error`. Добавлено явное присвоение confirmedError: Error.
* v1.0.6 (2025-05-30): Исправления ESLint (no-unused-vars, no-explicit-any, space-before-function-paren), eol-last. (Версия из XML)
* v1.0.5 (2025-05-30): Использовано явное утверждение типа `as Error` для `currentErrorForLevel` в `checkErrorChain`.
* v1.0.4 (2025-05-30): Убрана вложенная проверка `currentErrorForLevel instanceof Error` в блоке проверки типа.
* v1.0.3 (2025-05-29): Добавлена явная проверка `instanceof Error` для currentErrorForLevel в блоке проверки типа.
* v1.0.2 (2025-05-29): Реструктуризация проверки типа в checkErrorChain для исправления TS2339.
* v1.0.1 (2025-05-29): Исправлена ошибка типов TS2339 в checkErrorChain (первая попытка).
* v1.0.0 (2025-05-29): Начальная реализация hasErrorInChain и checkErrorChain.
*/
/**
* Критерии для поиска ошибки в цепочке с помощью `hasErrorInChain`.
*/
export interface ErrorCriteria {
/** Ожидаемый код ошибки (свойство `code` у `FabError` или аналогичных). */
code?: string;
/**
* Ожидаемый тип/класс ошибки (сравнение через `instanceof`).
* Использование 'any' для аргументов конструктора здесь для совместимости
* с различными сигнатурами конструкторов ошибок.
*/
type?: new (...args: any[]) => Error;
/**
* Ожидаемый фрагмент(ы) для поиска в сообщении ошибки (`error.message`).
* Поиск регистронезависимый. Если массив, то все строки из массива должны присутствовать.
*/
message?: string | string[];
}
/**
* Описание ожидаемого уровня в цепочке ошибок для функции `checkErrorChain`.
*/
export interface ExpectedChainLevel extends ErrorCriteria {
}
/**
* Проверяет, присутствует ли в цепочке ошибок (начиная с `error` и далее по `error.cause`)
* ошибка, соответствующая указанным критериям.
*
* @param error Начальная ошибка для проверки.
* @param criteria Объект с критериями поиска (`code`, `type`, `message`).
* @returns `true`, если ошибка, соответствующая критериям, найдена в цепочке, иначе `false`.
* @deterministic Да, для той же ошибки и критериев.
*/
export declare function hasErrorInChain(error: Error | undefined | null, criteria: ErrorCriteria): boolean;
/**
* Проверяет, соответствует ли цепочка ошибок (начиная с `error` и далее по `error.cause`)
* ожидаемой структуре, описанной в `expectedChain`.
*
* @param error Начальная ошибка для проверки.
* @param expectedChain Массив объектов `ExpectedChainLevel`, описывающих каждый ожидаемый уровень цепочки.
* @returns `true`, если цепочка полностью соответствует ожиданиям.
* @throws `Error` если цепочка не соответствует ожиданиям (сообщение содержит детали несоответствия).
* @deterministic Да, для той же ошибки и ожидаемой цепочки.
*/
export declare function checkErrorChain(error: Error | undefined | null, expectedChain: ExpectedChainLevel[]): boolean;
//# sourceMappingURL=chain-utils.d.ts.map