import type { ZodIssue } from "zod" export class CrudError extends Error { public readonly code: string constructor(message: string, code: string) { super(message) this.name = "CrudError" this.code = code } } export class CrudValidationError extends CrudError { public readonly resource: string public readonly operation: "create" | "update" public readonly issues: ZodIssue[] constructor(params: { resource: string operation: "create" | "update" issues: ZodIssue[] }) { super(`Validation failed for ${params.resource} ${params.operation}`, "CRUD_VALIDATION") this.name = "CrudValidationError" this.resource = params.resource this.operation = params.operation this.issues = params.issues } } export class CrudNotFoundError extends CrudError { public readonly resource: string public readonly id: string constructor(params: { resource: string; id: string }) { super(`${params.resource} ${params.id} was not found`, "CRUD_NOT_FOUND") this.name = "CrudNotFoundError" this.resource = params.resource this.id = params.id } }