123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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;
- }
- }
|