@analog-tools/logger
Version:
Logging utility for AnalogJS applications
82 lines (81 loc) • 2.85 kB
TypeScript
import { StructuredError, ErrorSerializationOptions } from './error.types';
/**
* Utility class for safely serializing errors and objects for logging
*
* Provides robust error serialization with support for:
* - Standard Error objects with stack traces
* - Circular reference detection and handling
* - Maximum depth limits to prevent infinite recursion
* - Non-enumerable property inclusion options
* - Safe stringification of any value type
*
* @example
* ```typescript
* // Serialize a standard Error
* const error = new Error('Something went wrong');
* const serialized = ErrorSerializer.serialize(error);
*
* // Serialize with custom options
* const serialized = ErrorSerializer.serialize(error, {
* includeStack: false,
* maxDepth: 5,
* includeNonEnumerable: true
* });
*
* // Serialize any object
* const obj = { nested: { data: 'value' } };
* const serialized = ErrorSerializer.serialize(obj);
* ```
*/
export declare class ErrorSerializer {
private static readonly DEFAULT_MAX_DEPTH;
private static readonly CIRCULAR_REF_PLACEHOLDER;
private static readonly MAX_DEPTH_PLACEHOLDER;
private static readonly UNABLE_TO_SERIALIZE;
private static readonly serializationCache;
private static readonly MAX_CACHE_SIZE;
/**
* Generate a cache key for memoization (includes serialization options)
* @private
*/
private static getCacheKey;
/**
* Add to cache with size limit enforcement
* @private
*/
private static addToCache;
/**
* Safely serialize any value (Error objects, plain objects, primitives) for logging
*
* @param error - The value to serialize (Error, object, string, etc.)
* @param options - Configuration options for serialization behavior
* @returns Serialized representation - StructuredError for Error objects, string for others
*
* @example
* ```typescript
* // Serialize an Error object
* const error = new Error('Failed to connect');
* const result = ErrorSerializer.serialize(error);
* // Returns: { message: 'Failed to connect', name: 'Error', stack: '...' }
*
* // Serialize a plain object
* const obj = { userId: '123', action: 'login' };
* const result = ErrorSerializer.serialize(obj);
* // Returns: '{\n "userId": "123",\n "action": "login"\n}'
*
* // Serialize with options
* const result = ErrorSerializer.serialize(error, { includeStack: false });
* ```
*/
static serialize(error: unknown, options?: ErrorSerializationOptions): StructuredError | string;
/**
* Serialize a standard Error object
* @private
*/
private static serializeError;
/**
* Safely stringify any object with circular reference detection
* @private
*/
private static safeStringify;
}