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