diff --git a/stacktrace-js/stacktrace-js-tests.ts b/stacktrace-js/stacktrace-js-tests.ts
index c4c9bcf879..04f92f7d2d 100644
--- a/stacktrace-js/stacktrace-js-tests.ts
+++ b/stacktrace-js/stacktrace-js-tests.ts
@@ -1,24 +1,36 @@
///
-function interestingFn() {
+function interestingFn(): string {
return 'https://github.com/exceptionless/Exceptionless';
}
-var callback = function(stackframes:StackTrace.StackFrame[]) {
- var stringifiedStack = stackframes.map(function(sf:StackTrace.StackFrame) {
+const callback = (stackframes: StackTrace.StackFrame[]) => {
+ const stringifiedStack = stackframes.map((sf: StackTrace.StackFrame): string => {
+ console.log(sf.functionName);
+ console.log(sf.args);
+ console.log(sf.fileName);
+ console.log(sf.lineNumber);
+ console.log(sf.columnNumber);
+ console.log(sf.source);
+ console.log(sf.isEval);
+ console.log(sf.isNative);
return sf.toString();
}).join('\n');
console.log(stringifiedStack);
};
-var errorCallback = function(err:Error) { console.log(err.message); };
+const errorCallback = (err: Error) => console.log(err.message);
+const logger = (stackframes: StackTrace.StackFrame[]) => console.log(stackframes);
+const options: StackTrace.StackTraceOptions = {
+ filter: (stackframe: StackTrace.StackFrame) => true,
+ sourceCache: {},
+ offline: false
+};
+const error = new Error('BOOM!');
-StackTrace.get();
+StackTrace.get(options).then(logger);
+StackTrace.fromError(error, options).then(logger);
+StackTrace.generateArtificially(options).then(logger);
-// Somewhere else...
-var error = new Error('BOOM!');
-StackTrace.fromError(error);
-StackTrace.generateArtificially();
-
-StackTrace.instrument(interestingFn, callback, errorCallback);
-StackTrace.deinstrument(interestingFn);
+const instrumented: () => string = StackTrace.instrument(interestingFn, callback, errorCallback);
+const original: () => string = StackTrace.deinstrument(interestingFn);
diff --git a/stacktrace-js/stacktrace-js.d.ts b/stacktrace-js/stacktrace-js.d.ts
index aebd6ddf80..4f0bac1635 100644
--- a/stacktrace-js/stacktrace-js.d.ts
+++ b/stacktrace-js/stacktrace-js.d.ts
@@ -4,21 +4,35 @@
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
declare namespace StackTrace {
+
+ export interface SourceCache {
+ [key: string]: string | Promise;
+ }
+
+ /**
+ * Options for StackTrace
+ * @param filter Function(StackFrame => Boolean) - Only include stack entries matching for which filter returns true
+ * @param sourceCache Object (String URL => String Source) - Pre-populate source cache to avoid network requests
+ * @param offline Boolean (default: false) - Set to true to prevent all network requests
+ */
export interface StackTraceOptions {
- filter?: (stackFrame:StackFrame) => boolean;
- sourceCache?: { URL:string };
- offline?: boolean;
+ filter?: (stackFrame: StackFrame) => boolean;
+ sourceCache?: SourceCache;
+ offline?: boolean;
}
export interface StackFrame {
- constructor(functionName:string, args:any, fileName:string, lineNumber:number, columnNumber:number): StackFrame;
+ constructor(functionName: string, args: any, fileName: string, lineNumber: number, columnNumber: number): StackFrame;
- functionName?:string;
- args?:any;
- fileName?:string;
- lineNumber?:number;
- columnNumber?:number;
- toString():string;
+ functionName: string;
+ args: any;
+ fileName: string;
+ lineNumber: number;
+ columnNumber: number;
+ source: string;
+ isEval: boolean;
+ isNative: boolean;
+ toString(): string;
}
/**
@@ -34,7 +48,7 @@ declare namespace StackTrace {
* @param options Object for options
* @return Array[StackFrame]
*/
- export function fromError(error:Error, options?:StackTraceOptions): Promise;
+ export function fromError(error: Error, options?: StackTraceOptions): Promise;
/**
* Use StackGenerator to generate a backtrace.
@@ -49,25 +63,31 @@ declare namespace StackTrace {
*
* @param {Function} fn to be instrumented
* @param {Function} callback function to call with a stack trace on invocation
- * @param {Function} errorCallback optional function to call with error if unable to get stack trace.
+ * @param {Function} errback optional function to call with error if unable to get stack trace.
* @param {Object} thisArg optional context object (e.g. window)
+ * @return {Function} instrumented function
*/
- export function instrument(fn:() => void, callback:(stackFrames:StackFrame[]) => void, errorCallback:(error:Error) => void, thisArg?:any): void;
+ export function instrument(fn: TFunc, callback: (stackFrames: StackFrame[]) => void, errback?: (error: Error) => void, thisArg?: any): TFunc;
/**
* Given a function that has been instrumented,
* revert the function to it's original (non-instrumented) state.
*
* @param fn {Function}
+ * @return {Function} original function
*/
- export function deinstrument(fn:() => void): void;
+ export function deinstrument(fn: TFunc): TFunc;
/**
* Given an Array of StackFrames, serialize and POST to given URL.
*
* @param stackframes - Array[StackFrame]
* @param url - URL as String
- * @return Promise
+ * @return Promise
*/
- export function report(stackframes: StackFrame[], url: string): Promise;
+ export function report(stackframes: StackFrame[], url: string): Promise;
+}
+
+declare module "stacktrace-js" {
+ export = StackTrace;
}