--- /dev/null
+import { errorObject } from './errorObject';
+
+let tryCatchTarget: Function;
+
+function tryCatcher(this: any): any {
+ errorObject.e = undefined;
+ try {
+ return tryCatchTarget.apply(this, arguments);
+ } catch (e) {
+ errorObject.e = e;
+ return errorObject;
+ } finally {
+ tryCatchTarget = undefined;
+ }
+}
+
+export function tryCatch<T extends Function>(fn: T): T {
+ tryCatchTarget = fn;
+ return <any>tryCatcher;
+}