@stacksjs/error-handling
Version:
Type safe error handling.
67 lines (66 loc) • 2.08 kB
TypeScript
/**
* Escape HTML special characters
*/
export declare function escapeHtml(str: string): string;
/**
* Read source lines around a stack frame for the code snippet panel.
*/
export declare function readCodeSnippet(filePath: string, line: number, radius?: number): CodeSnippetResult | null;
export declare function renderCodeSnippet(snippet: CodeSnippetResult): string;
export declare function renderTraceFrame(frame: ParsedFrame, index: number, snippetLines: number): string;
export declare function renderVendorGroup(frames: ParsedFrame[], snippetLines: number): string;
export declare function groupTraceFrames(frames: ParsedFrame[]): Array<ParsedFrame | ParsedFrame[]>;
export declare function renderExceptionTrace(frames: ParsedFrame[], snippetLines: number): string;
export declare function renderContextTabs(opts: {
request?: RequestContext
routing?: RoutingContext
user?: UserContext
queries?: QueryInfo[]
showEnvironment?: boolean
}): string;
export declare function buildErrorMarkdown(opts: {
statusTitle: string
errorName: string
errorMessage: string
status: number
file?: string
line?: number
request?: RequestContext
framework?: { name: string, version?: string }
frames: ParsedFrame[]
}): string;
export declare function wrapErrorPage(body: string, markdown: string): string;
export declare const ERROR_PAGE_SCRIPT: string;
export declare interface ParsedFrame {
file: string
line: number
column?: number
function?: string
absoluteFile: string
isFramework: boolean
}
declare interface QueryInfo {
query: string
time?: number
connection?: string
}
declare interface RequestContext {
method: string
url: string
headers: Record<string, string>
queryParams?: Record<string, string>
body?: unknown
}
declare interface RoutingContext {
controller?: string
routeName?: string
middleware?: string[]
}
declare interface UserContext {
id?: string | number
email?: string
name?: string
}
export declare interface CodeSnippetResult {
lines: Array<{ number: number, content: string, highlight: boolean }>
}