summaryrefslogtreecommitdiffhomepage
path: root/gui/src
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2021-03-24 15:33:00 +0100
committerOskar Nyberg <oskar@mullvad.net>2021-03-24 16:38:25 +0100
commit31a4d1102d5fe44e7403c77fe6dfa28b42acf6d7 (patch)
tree1478e30113698507cefdb9c4b0d9c92e90086bd4 /gui/src
parentafa808e807f5396b3861b996b20556c506757801 (diff)
downloadmullvadvpn-31a4d1102d5fe44e7403c77fe6dfa28b42acf6d7.tar.xz
mullvadvpn-31a4d1102d5fe44e7403c77fe6dfa28b42acf6d7.zip
Remove "Uncaught Error" prefix on error messages
Diffstat (limited to 'gui/src')
-rw-r--r--gui/src/renderer/app.tsx29
1 files changed, 28 insertions, 1 deletions
diff --git a/gui/src/renderer/app.tsx b/gui/src/renderer/app.tsx
index 2f8b445d40..1277db2e63 100644
--- a/gui/src/renderer/app.tsx
+++ b/gui/src/renderer/app.tsx
@@ -47,7 +47,34 @@ import {
import { LogLevel } from '../shared/logging-types';
import IpcOutput from './lib/logging';
-const IpcRendererEventChannel = window.ipc;
+// This function wraps all IPC calls to catch errors and then rethrow them without the
+// "Uncaught Error:" prefix that's added by Electron.
+// This is a temporary workaround which won't be required after this Electron PR has been merged and
+// released: https://github.com/electron/electron/pull/28346
+function handleReponse(ipc: typeof window.ipc): typeof window.ipc {
+ const wrappedIpc: Record<string, Record<string, unknown>> = {};
+
+ Object.entries(ipc).forEach(([groupName, group]) => {
+ wrappedIpc[groupName] = {} as typeof group;
+
+ Object.entries(group).forEach(([fnName, fn]) => {
+ wrappedIpc[groupName][fnName] = (...args: Parameters<typeof fn>) => {
+ const response = fn(...args);
+ if (response instanceof Promise) {
+ return response.catch((error: Error) => {
+ throw new Error(error.message?.replace(/^Uncaught Error: /, ''));
+ });
+ } else {
+ return response;
+ }
+ };
+ });
+ });
+
+ return wrappedIpc as typeof window.ipc;
+}
+
+const IpcRendererEventChannel = handleReponse(window.ipc);
interface IPreferredLocaleDescriptor {
name: string;