@freemework/common
Version:
Common library of the Freemework Project.
49 lines (42 loc) • 1.47 kB
text/typescript
import { FException } from "./f_exception.js";
export class FExceptionAggregate extends FException {
static throwIfNeeded(innerExceptions: ReadonlyArray<FException>): void {
if (innerExceptions.length > 0) {
if (innerExceptions.length == 1) {
throw innerExceptions[0];
}
throw new FExceptionAggregate(innerExceptions);
}
}
public readonly innerExceptions: ReadonlyArray<FException>;
public constructor(innerExceptions: ReadonlyArray<FException>, message?: string) {
let friendlyInnerException: FException | null;
let friendlyInnerExceptions: Array<FException>;
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<String> = [super.toString()];
if (this.innerExceptions.length > 0) {
messages.push(...this.innerExceptions.map((e) => e.toString()));
}
return messages.join("\n");
}
}