From 31b80ef5464a5c45bd58eeac2efa021c07c71c77 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Tue, 21 Dec 2021 13:24:43 +0100 Subject: [PATCH] feat: allow boomifying any value (#291) Creation of a new boomifyAny that allows creating a boom error from an "unknown" value. Refs https://github.com/hapijs/boom/issues/291 --- lib/index.d.ts | 11 +++++++++++ lib/index.js | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/index.d.ts b/lib/index.d.ts index 108755d..cef4638 100755 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -153,6 +153,17 @@ export function isBoom(obj: unknown, statusCode?: number): obj is Boom; export function boomify(err: Error, options?: Options & Decorate): Boom & Decoration; +/** +* Specifies if an error object is a valid boom object +* +* @param err - The error object to decorate +* @param options - Options object +* +* @returns A decorated boom object +*/ +export function boomifyAny(err: unknown, options?: Options & Decorate & ({ onlyError: true } | { onlyError?: false; stringAsMessage?: boolean })): Boom & Decoration; + + // 4xx Errors /** diff --git a/lib/index.js b/lib/index.js index d7b16be..3327b6c 100755 --- a/lib/index.js +++ b/lib/index.js @@ -136,6 +136,26 @@ exports.boomify = function (err, options) { }; +exports.boomifyAny = function (value, options) { + + if (value instanceof Error) { + return exports.boomify(value, options); + } + + options = options || {}; + + if (options.onlyError) { + const err = internals.serverError('Non-error used as error', value, 500, exports.boomifyAny); + err.isDeveloperError = true; + return err; + } + + const message = (options.stringAsMessage && typeof value === 'string' && value) || options.message || 'Unknown error'; + + return new exports.Boom(message, { statusCode: options.statusCode || 500, data: value, ctor: exports.boomifyAny }); +}; + + // 4xx Client Errors exports.badRequest = function (message, data) {