export interface DirectusError extends Error { extensions: Extensions; code: string; status: number; } export interface DirectusErrorConstructor { new (extensions: Extensions, options?: ErrorOptions): DirectusError; readonly prototype: DirectusError; } export const createError = ( code: string, message: string | ((extensions: Extensions) => string), status = 500, ): DirectusErrorConstructor => { return class extends Error implements DirectusError { override name = 'DirectusError'; extensions: Extensions; code = code.toUpperCase(); status = status; constructor(extensions: Extensions, options?: ErrorOptions) { const msg = typeof message === 'string' ? message : message(extensions as Extensions); super(msg, options); this.extensions = extensions; } override toString() { return `${this.name} [${this.code}]: ${this.message}`; } }; };