import { inspect } from 'node:util'; // § GROUP: Configuration field errors export class Invalid_Data extends Error { constructor(data) { const { value, target, expected, validator, name } = data; const type = value === null ? 'null' : typeof value; const target_info = target ? inspect(target) : 'unknown target'; const expected_desc = expected ?? `data that would pass validation using ${validator}`; super(`Data validation failed for field "${name}" of ${target_info}. Encountered data of type "${type}" while expecting "${expected_desc}".`); this.data = data; } } // § GROUP: Resolving errors export class Item_Unresolvable extends Error { constructor(data) { const { resolver, item } = data; const type = item === null ? 'null' : typeof item; super(`Cannot resolve item ${inspect(item)} of type "${type}" using resolver ${resolver}`); this.data = data; } } // § GROUP: Storage errors export class Not_Storable_Error extends Error { constructor(data) { const { storage, value, property, id } = data; const type = value === null ? 'null' : typeof value; const location = property ? `property "${property}" of record #${id}` : `record #${id}`; super(`Cannot store value of type "${type}" in ${location}: ${inspect(value)}`); this.data = data; } } export class Not_Mutable_Error extends Error { constructor(data) { const { storage, value, property, id } = data; const type = value === null ? 'null' : typeof value; const location = property ? `property "${property}" of record #${id}` : `record #${id}`; super(`Cannot set ${location}: record is immutable (tried to store value of type "${type}": ${inspect(value)})`); this.data = data; } } export class No_Such_Object_Index_Error extends Error { constructor(data) { const { storage, property, id } = data; const location = property ? `property "${property}" of record #${id}` : `record #${id}`; super(`Cannot get ${location}: no such record index`); this.data = data; } }