From 11ff8c952a445c4ef37d99a9fb19d362508a6acb Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Fri, 18 Jun 2021 16:53:39 +0200 Subject: [PATCH] Adjust UnhandledErrorForwarder to not silence error - Changes related to revew Signed-off-by: Philipp Hugenroth --- .changeset/fair-knives-relax.md | 2 +- .../src/apis/implementations/ErrorApi/index.ts | 1 - .../ErrorApi/UnhandledErrorForwarder.ts | 14 ++------------ .../src/apis/implementations/ErrorApi/index.ts | 1 + packages/core-app-api/src/app/defaultApis.ts | 8 ++++++-- packages/core/src/api-wrappers/defaultApis.ts | 8 ++------ 6 files changed, 12 insertions(+), 22 deletions(-) rename packages/{core-api => core-app-api}/src/apis/implementations/ErrorApi/UnhandledErrorForwarder.ts (68%) diff --git a/.changeset/fair-knives-relax.md b/.changeset/fair-knives-relax.md index 12c273b2f5..2ab2ec39cf 100644 --- a/.changeset/fair-knives-relax.md +++ b/.changeset/fair-knives-relax.md @@ -3,4 +3,4 @@ '@backstage/core-api': patch --- -Catch unhandled promise rejections & forward them to the ErrorApi to align with general error handling +Introducing new UnhandledErrorForwarder installed by default. For catchin unhandled promise rejections you can override the API to align with general error handling. diff --git a/packages/core-api/src/apis/implementations/ErrorApi/index.ts b/packages/core-api/src/apis/implementations/ErrorApi/index.ts index 86b9b35b24..757dfd0d8f 100644 --- a/packages/core-api/src/apis/implementations/ErrorApi/index.ts +++ b/packages/core-api/src/apis/implementations/ErrorApi/index.ts @@ -16,4 +16,3 @@ export { ErrorAlerter } from './ErrorAlerter'; export { ErrorApiForwarder } from './ErrorApiForwarder'; -export { UnhandledErrorForwarder } from './UnhandledErrorForwarder'; diff --git a/packages/core-api/src/apis/implementations/ErrorApi/UnhandledErrorForwarder.ts b/packages/core-app-api/src/apis/implementations/ErrorApi/UnhandledErrorForwarder.ts similarity index 68% rename from packages/core-api/src/apis/implementations/ErrorApi/UnhandledErrorForwarder.ts rename to packages/core-app-api/src/apis/implementations/ErrorApi/UnhandledErrorForwarder.ts index 64fd556057..b4f9932ee9 100644 --- a/packages/core-api/src/apis/implementations/ErrorApi/UnhandledErrorForwarder.ts +++ b/packages/core-app-api/src/apis/implementations/ErrorApi/UnhandledErrorForwarder.ts @@ -16,21 +16,11 @@ import { ErrorApi } from '../../definitions'; * limitations under the License. */ export class UnhandledErrorForwarder { - static forward(errorApi: ErrorApi) { + static forward(errorApi: ErrorApi, hidden = false) { window.addEventListener( 'unhandledrejection', (e: PromiseRejectionEvent) => { - errorApi.post( - { - name: `Unhandled Rejection: ${e.reason.message}`, - message: e.reason.message, - stack: e.reason.stack, - }, - { hidden: true }, - ); - // eslint-disable-next-line no-console - console.error(e.reason); - e.preventDefault(); + errorApi.post(e.reason as Error, { hidden }); }, ); } diff --git a/packages/core-app-api/src/apis/implementations/ErrorApi/index.ts b/packages/core-app-api/src/apis/implementations/ErrorApi/index.ts index 757dfd0d8f..86b9b35b24 100644 --- a/packages/core-app-api/src/apis/implementations/ErrorApi/index.ts +++ b/packages/core-app-api/src/apis/implementations/ErrorApi/index.ts @@ -16,3 +16,4 @@ export { ErrorAlerter } from './ErrorAlerter'; export { ErrorApiForwarder } from './ErrorApiForwarder'; +export { UnhandledErrorForwarder } from './UnhandledErrorForwarder'; diff --git a/packages/core-app-api/src/app/defaultApis.ts b/packages/core-app-api/src/app/defaultApis.ts index 5d84e27f89..8ebdaa10ed 100644 --- a/packages/core-app-api/src/app/defaultApis.ts +++ b/packages/core-app-api/src/app/defaultApis.ts @@ -30,6 +30,7 @@ import { UrlPatternDiscovery, SamlAuth, OneLoginAuth, + UnhandledErrorForwarder, } from '../apis'; import { @@ -67,8 +68,11 @@ export const defaultApis = [ createApiFactory({ api: errorApiRef, deps: { alertApi: alertApiRef }, - factory: ({ alertApi }) => - new ErrorAlerter(alertApi, new ErrorApiForwarder()), + factory: ({ alertApi }) => { + const errorApi = new ErrorAlerter(alertApi, new ErrorApiForwarder()); + UnhandledErrorForwarder.forward(errorApi); + return errorApi; + }, }), createApiFactory({ api: storageApiRef, diff --git a/packages/core/src/api-wrappers/defaultApis.ts b/packages/core/src/api-wrappers/defaultApis.ts index 662b986e28..d044b50b7a 100644 --- a/packages/core/src/api-wrappers/defaultApis.ts +++ b/packages/core/src/api-wrappers/defaultApis.ts @@ -47,7 +47,6 @@ import { oneloginAuthApiRef, OneLoginAuth, oidcAuthApiRef, - UnhandledErrorForwarder, } from '@backstage/core-api'; import OAuth2Icon from '@material-ui/icons/AcUnit'; @@ -65,11 +64,8 @@ export const defaultApis = [ createApiFactory({ api: errorApiRef, deps: { alertApi: alertApiRef }, - factory: ({ alertApi }) => { - const errorApi = new ErrorAlerter(alertApi, new ErrorApiForwarder()); - UnhandledErrorForwarder.forward(errorApi); - return errorApi; - }, + factory: ({ alertApi }) => + new ErrorAlerter(alertApi, new ErrorApiForwarder()), }), createApiFactory({ api: storageApiRef,