export interface ActivationItem { name: string; service: string; } export class ActivationError { readonly activationStack: ActivationItem[]; readonly service: string; readonly innerException: unknown; readonly message: string; constructor(service: string, activationStack: ActivationItem[], innerException: unknown) { this.message = "Failed to activate the service"; this.activationStack = activationStack; this.service = service; this.innerException = innerException; } toString() { const parts = [this.message]; if (this.service) parts.push(`when activating: ${String(this.service)}`); if (this.innerException) parts.push(`caused by: ${String(this.innerException)}`); if (this.activationStack) { parts.push("at"); parts.push.apply(null, this.activationStack .map(({ name, service }) => ` ${name} ${service}`) ); } return parts.join("\n"); } }