import { FException } from "./f_exception.js"; export class FExceptionAggregate extends FException { static throwIfNeeded(innerExceptions: ReadonlyArray): void { if (innerExceptions.length > 0) { if (innerExceptions.length == 1) { throw innerExceptions[0]; } throw new FExceptionAggregate(innerExceptions); } } public readonly innerExceptions: ReadonlyArray; public constructor(innerExceptions: ReadonlyArray, message?: string) { let friendlyInnerException: FException | null; let friendlyInnerExceptions: Array; let friendlyMessage: string; if (innerExceptions.length > 0) { friendlyInnerExceptions = [...innerExceptions]; friendlyInnerException = friendlyInnerExceptions.length > 0 ? friendlyInnerExceptions[0]! : null; } else { friendlyInnerExceptions = []; friendlyInnerException = null; } if(message !== undefined) { friendlyMessage = message; } else { friendlyMessage = "One or more errors occurred."; } if (friendlyInnerException !== null) { super(friendlyMessage, friendlyInnerException); } else { super(friendlyMessage); } this.innerExceptions = Object.freeze(friendlyInnerExceptions); } public override toString(): string { const messages: Array = [super.toString()]; if (this.innerExceptions.length > 0) { messages.push(...this.innerExceptions.map((e) => e.toString())); } return messages.join("\n"); } }