diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2021-03-24 15:33:00 +0100 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2021-03-24 16:38:25 +0100 |
| commit | 31a4d1102d5fe44e7403c77fe6dfa28b42acf6d7 (patch) | |
| tree | 1478e30113698507cefdb9c4b0d9c92e90086bd4 /gui/src | |
| parent | afa808e807f5396b3861b996b20556c506757801 (diff) | |
| download | mullvadvpn-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.tsx | 29 |
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; |
