From a3c0d55c70c231d7a509774da73e473dd2a55732 Mon Sep 17 00:00:00 2001 From: Slava Leleka Date: Fri, 9 Feb 2024 18:05:58 +0200 Subject: [PATCH] add getErrorMessage() helper --- src/helpers/get-error-message.ts | 36 ++++++++++++++++++++++++++++++++ src/helpers/index.ts | 1 + 2 files changed, 37 insertions(+) create mode 100644 src/helpers/get-error-message.ts diff --git a/src/helpers/get-error-message.ts b/src/helpers/get-error-message.ts new file mode 100644 index 00000000..6e4aa4d7 --- /dev/null +++ b/src/helpers/get-error-message.ts @@ -0,0 +1,36 @@ +type ErrorWithMessage = { + message: string; +}; + +/** + * Converts error object to error with message. This method might be helpful to handle thrown errors. + * + * @param error Error object. + * + * @returns Message of the error. + */ +export const getErrorMessage = (error: unknown): string => { + /** + * Checks if error has message. + * + * @param e Error object. + */ + const isErrorWithMessage = (e: unknown): e is ErrorWithMessage => ( + typeof e === 'object' + && e !== null + && 'message' in e + && typeof (e as Record).message === 'string' + ); + + if (isErrorWithMessage(error)) { + return error.message; + } + + try { + return (new Error(JSON.stringify(error))).message; + } catch { + // fallback in case there's an error stringifying the error + // like with circular references for example. + return (new Error(String(error))).message; + } +}; diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 04cf17a9..91bb2c4f 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -24,6 +24,7 @@ export * from './string-utils'; export * from './log-message'; export * from './create-on-error-handler'; export * from './get-descriptor-addon'; +export * from './get-error-message'; export * from './get-property-in-chain'; export * from './get-wildcard-property-in-chain'; export * from './hit';