cmpstr
Version:
CmpStr is a lightweight, fast and well performing package for calculating string similarity
138 lines (137 loc) • 6.01 kB
TypeScript
/**
* Error Utilities
* src/utils/Errors.ts
*
* This module provides a small hierarchy of error classes and helper methods
* that standardize error creation and formatting across the CmpStr project.
* It improves on vanilla JavaScript errors by adding codes, structured metadata,
* and consistent `toString()` / `toJSON()` output while keeping the original
* message text intact.
*
* The error classes are designed to be lightweight and fast, while still
* providing useful context for debugging (including optional `cause` chaining).
*
* @module Utils
* @name Errors
* @author Paul Köhler (komed3)
* @license MIT
*/
import type { CmpStrErrorJSON, CmpStrErrorMeta } from './Types';
/**
* Base error class for CmpStr.
*
* It provides a standard `code` field and a consistent `toString()` / `toJSON()`
* output without changing the original error message expectations.
*/
export declare class CmpStrError extends Error {
/** A short, machine-readable error code */
readonly code: string;
/** Optional structured metadata for the error */
readonly meta?: CmpStrErrorMeta;
/** Optional cause (native JS Error chaining) */
readonly cause?: unknown;
/** Timestamp when the error was created (ISO 8601) */
readonly when: string;
/**
* Constructor for CmpStrError.
*
* Will construct an error with a code, message, optional metadata, and optional cause.
*
* @param {string} code - A short, machine-readable error code
* @param {string} message - The error message (human-readable)
* @param {CmpStrErrorMeta} [meta] - Optional structured metadata for the error
* @param {unknown} [cause] - Optional cause (native JS Error chaining)
*/
constructor(code: string, message: string, meta?: CmpStrErrorMeta, cause?: unknown);
/**
* Serialize the error into a plain object for JSON output.
*/
toJSON(): CmpStrErrorJSON;
/**
* Pretty string representation of the error.
*
* @param {boolean} [stack=false] - Whether to include the stack trace in the output
*/
toString(stack?: boolean): string;
}
/**
* Error thrown when user input (options, arguments) is invalid.
*/
export declare class CmpStrValidationError extends CmpStrError {
constructor(message: string, meta?: CmpStrErrorMeta, cause?: unknown);
}
/**
* Error thrown when a requested resource is missing or not found.
*/
export declare class CmpStrNotFoundError extends CmpStrError {
constructor(message: string, meta?: CmpStrErrorMeta, cause?: unknown);
}
/**
* Error thrown for incorrect usage or invalid state (assertions).
*/
export declare class CmpStrUsageError extends CmpStrError {
constructor(message: string, meta?: CmpStrErrorMeta, cause?: unknown);
}
/**
* Error thrown for internal failures that should not happen under normal usage.
*/
export declare class CmpStrInternalError extends CmpStrError {
constructor(message: string, meta?: CmpStrErrorMeta, cause?: unknown);
}
/**
* Helper utilities for throwing and formatting errors.
*
* Provides methods for asserting conditions, wrapping unknown errors, and formatting
* errors into readable strings. This centralizes error handling logic and ensures
* consistent error messages across the codebase.
*/
export declare class ErrorUtil {
/**
* Throw a `CmpStrUsageError` if a condition is not met.
*
* @param {boolean} condition - The condition to assert
* @param {string} message - The error message to throw if the condition is false
* @param {CmpStrErrorMeta} [meta] - Optional structured metadata for the error
* @throws {CmpStrUsageError} - If the condition is false
*/
static assert(condition: boolean, message: string, meta?: CmpStrErrorMeta): asserts condition;
/**
* Wrap an unknown error into a `CmpStrInternalError`.
*
* @param {unknown} err - The error to wrap
* @param {string} message - The error message to use for the wrapped error
* @param {CmpStrErrorMeta} [meta] - Optional structured metadata for the error
* @throws {CmpStrInternalError} - Always throws a new `CmpStrInternalError` wrapping the original error
*/
static create(err: unknown, message: string, meta?: CmpStrErrorMeta): never;
/**
* Format any error into a readable string.
*
* @param {unknown} err - The error to format
* @returns {string} - A formatted string representation of the error
*/
static format(err: unknown): string;
/**
* Execute a synchronous operation and wrap any exception as a `CmpStrInternalError`.
*
* This is used to avoid repeating try/catch blocks and to add consistent context
* to unexpected failures while preserving the original error as `cause`.
*
* @param {() => T} fn - The function to execute
* @param {string} message - The error message to use if an exception is thrown
* @param {CmpStrErrorMeta} [meta] - Optional structured metadata for the error
* @return {T} The result of the function if it executes successfully
* @throws {CmpStrInternalError} - If the function throws an error, it will be wrapped and re-thrown as a `CmpStrInternalError`
*/
static wrap<T>(fn: () => T, message: string, meta?: CmpStrErrorMeta): T;
/**
* Execute an asynchronous operation and wrap any exception as a `CmpStrInternalError`.
*
* @param {() => Promise< T >} fn - The asynchronous function to execute
* @param {string} message - The error message to use if an exception is thrown
* @param {CmpStrErrorMeta} [meta] - Optional structured metadata for the error
* @return {Promise<T>} A promise that resolves to the result of the function if it executes successfully
* @throws {CmpStrInternalError} - If the function throws an error, it will be wrapped and re-thrown as a `CmpStrInternalError`
*/
static wrapAsync<T>(fn: () => Promise<T>, message: string, meta?: CmpStrErrorMeta): Promise<T>;
}