import BaseError, { type BaseErrorData } from './base-error.ts'; export interface OperationalErrorData extends BaseErrorData { relatesToSystems?: string[] | string; } /** * Class representing an operational error. */ export default class OperationalError extends BaseError { override readonly name: string = 'OperationalError'; /** * Whether the error is operational. */ override readonly isOperational = true; /** * An array of valid FT system codes (found in Biz Ops) which this error is related to. * If this error is caused by one or more dependencies, include their system code here. */ relatesToSystems: string[] = []; constructor(message?: string | OperationalErrorData); constructor(message: string, data?: OperationalErrorData); constructor(message: string | OperationalErrorData, data: OperationalErrorData = {}) { if (typeof message === 'string') { data.message = message; } else { data = message || data; } super(data); if (this.message === BaseError.defaultMessage) { this.message = OperationalError.defaultMessage; } if (data.relatesToSystems) { if (Array.isArray(data.relatesToSystems)) { this.relatesToSystems = data.relatesToSystems; } else { this.relatesToSystems = [data.relatesToSystems]; } } } /** * Reserved keys that should not appear in `OperationalError.prototype.data`. */ protected static override reservedKeys = [...BaseError.reservedKeys, 'relatesToSystems']; protected static override defaultMessage = 'An operational error occurred'; }