src/common/errors/user_friendly_error.ts (19 lines of code) (raw):
import { stackToArray, DetailedError, isDetailedError } from './common';
export class UserFriendlyError extends Error implements DetailedError {
originalError: Error | DetailedError;
additionalInfo?: string;
constructor(message: string, originalError: Error | DetailedError, additionalInfo?: string) {
super(message);
this.originalError = originalError;
this.additionalInfo = additionalInfo;
}
get details() {
return {
userMessage: this.message,
errorMessage: this.originalError.message,
stack: stackToArray(this.originalError.stack),
additionalInfo: this.additionalInfo,
details: isDetailedError(this.originalError) ? this.originalError.details : undefined,
};
}
}