From 947e9c366c746cfe3dbd1da86d8e295be94b6c67 Mon Sep 17 00:00:00 2001 From: Evan Hahn <69474926+EvanHahn-Signal@users.noreply.github.com> Date: Thu, 12 Nov 2020 12:09:39 -0600 Subject: [PATCH] Improve missingCaseError error message --- ts/util/missingCaseError.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ts/util/missingCaseError.ts b/ts/util/missingCaseError.ts index d8bb2bb4995..a4876bec405 100644 --- a/ts/util/missingCaseError.ts +++ b/ts/util/missingCaseError.ts @@ -1,6 +1,17 @@ // Copyright 2018-2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only +const stringify = (value: unknown): string => { + try { + // `JSON.stringify` can return `undefined` (TypeScript has incorrect types here). + // However, this is fine because we interpolate it into a string, so it shows up as + // "undefined" in the final error message. + return JSON.stringify(value); + } catch (err) { + return Object.prototype.toString.call(value); + } +}; + // `missingCaseError` is useful for compile-time checking that all `case`s in // a `switch` statement have been handled, e.g. // @@ -21,4 +32,4 @@ // handled by our `switch` / `case` statement which is useful for code // maintenance and system evolution. export const missingCaseError = (x: never): TypeError => - new TypeError(`Unhandled case: ${x}`); + new TypeError(`Unhandled case: ${stringify(x)}`);