/** * Forme unique des échecs de mutation admin. * * Deux producteurs, un seul type : `mutations.ts` pour les refus que la * bibliothèque décide elle-même (validation, scope), `classifyWriteError` * pour ceux que le moteur signale. Un seul consommateur : le site d'appel * de `handleMutation` dans `handler.ts`, qui ne rend QUE le message d'une * `AdminMutationError` — jamais celui d'une erreur pilote brute. * * La classification se fait par code, jamais par texte : les messages des * pilotes changent entre versions, les codes non. */ export type MutationErrorKind = 'validation' | 'conflict' | 'reference' | 'restrict' | 'authorization' | 'notFound' | 'unknown'; export declare class AdminMutationError extends Error { readonly kind: MutationErrorKind; readonly field?: string; constructor(kind: MutationErrorKind, message: string, field?: string); } /** * Erreur de configuration de la bibliothèque elle-même (scope non injectable, * tenant absent…), destinée au développeur intégrateur et non à l'utilisateur * de l'admin. Distincte d'`AdminMutationError` : elle ne décrit pas un refus * de la donnée soumise, mais un montage incorrect côté consommateur, et c'est * la SEULE erreur non typée que le chemin de mutation relaie telle quelle. */ export declare class AdminConfigError extends Error { constructor(message: string); } /** * Les pilotes exposent le code SQLSTATE à des endroits différents : `code` sur * `pg`, `mysql2` et `better-sqlite3`, `meta.code` sur une * `PrismaClientKnownRequestError` issue d'une transaction interactive. * * Vit ici plutôt que dans `retry.ts` : deux modules classent désormais les * erreurs pilote, et un second exemplaire de ce helper dériverait du premier. */ export declare function codeOf(error: unknown): string | undefined; /** * Traduit un échec d'écriture en `AdminMutationError`, ou `null` si le code * n'est pas reconnu — l'appelant rend alors un message générique. * * `reference` et `restrict` partagent le même code SQLSTATE (PostgreSQL 23503, * SQLite SQLITE_CONSTRAINT_FOREIGNKEY) : c'est l'action en cours qui les * sépare, pas le message. Sur create/update une cible soumise est invalide ; * sur delete la ligne est référencée ailleurs. */ export declare function classifyWriteError(error: unknown, action: 'create' | 'update' | 'delete'): AdminMutationError | null;