frontend/.pnpm-store/v3/files/61/7a76476c1be9cdde5a8b6a943dbb7b76feb61a08d6c565261df8784f2a1de8966f59721ee5a7bfe4359e64f2c4b7bc19980498e0327751abd63b8c767a8bff

43 lines
1.2 KiB
Plaintext

import { config } from '../config';
let context: { errorThrown: boolean; error: any } | null = null;
/**
* Handles dealing with errors for super-gross mode. Creates a context, in which
* any synchronously thrown errors will be passed to {@link captureError}. Which
* will record the error such that it will be rethrown after the call back is complete.
* TODO: Remove in v8
* @param cb An immediately executed function.
*/
export function errorContext(cb: () => void) {
if (config.useDeprecatedSynchronousErrorHandling) {
const isRoot = !context;
if (isRoot) {
context = { errorThrown: false, error: null };
}
cb();
if (isRoot) {
const { errorThrown, error } = context!;
context = null;
if (errorThrown) {
throw error;
}
}
} else {
// This is the general non-deprecated path for everyone that
// isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)
cb();
}
}
/**
* Captures errors only in super-gross mode.
* @param err the error to capture
*/
export function captureError(err: any) {
if (config.useDeprecatedSynchronousErrorHandling && context) {
context.errorThrown = true;
context.error = err;
}
}