Initial Commit
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import { SuaveplanError, type SuaveplanErrorOptions } from "@suaveplan/error";
|
||||
import { TEMPLATE_CODES, type TemplateCode } from "./error-codes.js";
|
||||
|
||||
export type { TemplateCode };
|
||||
export { TEMPLATE_CODES };
|
||||
|
||||
// ─── Base ───────────────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Base error class for all template engine failures.
|
||||
*
|
||||
* Carries the original `template` string and the `renderContext` object so
|
||||
* callers can log rich diagnostics without re-parsing the call-stack.
|
||||
*/
|
||||
export class TemplateError extends SuaveplanError<TemplateCode> {
|
||||
public readonly template: string;
|
||||
public readonly renderContext: Record<string, unknown>;
|
||||
|
||||
constructor(
|
||||
code: TemplateCode,
|
||||
messageKey: string,
|
||||
template: string,
|
||||
renderContext: Record<string, unknown>,
|
||||
options?: SuaveplanErrorOptions
|
||||
) {
|
||||
super(code, messageKey, options);
|
||||
this.template = template;
|
||||
this.renderContext = renderContext;
|
||||
}
|
||||
}
|
||||
|
||||
// ─── Plugin error ────────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Emitted when a plugin's `transform()` throws or returns a rejected Promise.
|
||||
*
|
||||
* Adds `pluginName` and `matchedText` for quick diagnostics.
|
||||
*/
|
||||
export class PluginError extends SuaveplanError<TemplateCode> {
|
||||
public readonly pluginName: string;
|
||||
public readonly match: string;
|
||||
|
||||
constructor(
|
||||
message: string,
|
||||
pluginName: string,
|
||||
match: string,
|
||||
cause?: Error
|
||||
) {
|
||||
super(
|
||||
TEMPLATE_CODES.PLUGIN_ERROR,
|
||||
message,
|
||||
cause ? { cause } : undefined
|
||||
);
|
||||
this.pluginName = pluginName;
|
||||
this.match = match;
|
||||
}
|
||||
}
|
||||
|
||||
// ─── Max depth error ─────────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Thrown when recursive template nesting exceeds `TemplateEngineOptions.maxDepth`.
|
||||
*
|
||||
* Includes `depth` (current) and `maxDepth` (limit) for diagnostics.
|
||||
*/
|
||||
export class MaxDepthError extends SuaveplanError<TemplateCode> {
|
||||
public readonly depth: number;
|
||||
public readonly maxDepth: number;
|
||||
|
||||
constructor(message: string, depth: number, maxDepth: number) {
|
||||
super(TEMPLATE_CODES.MAX_DEPTH, message);
|
||||
this.depth = depth;
|
||||
this.maxDepth = maxDepth;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user