From 433ed3d130befb6f11aa0a172684c98eb1921931 Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Tue, 12 May 2015 11:45:03 -0500 Subject: [PATCH 1/5] Added stack trace.js and node stack trace definitions --- node-stack-trace/node-stack-trace.d.ts | 20 ++++++++ node-stack-trace/node-stack-trace.ts | 8 ++++ stacktrace/stacktrace.d.ts | 64 ++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 node-stack-trace/node-stack-trace.d.ts create mode 100644 node-stack-trace/node-stack-trace.ts create mode 100644 stacktrace/stacktrace.d.ts diff --git a/node-stack-trace/node-stack-trace.d.ts b/node-stack-trace/node-stack-trace.d.ts new file mode 100644 index 000000000..c3684b3db --- /dev/null +++ b/node-stack-trace/node-stack-trace.d.ts @@ -0,0 +1,20 @@ +// Type definitions for node-stack-trace +// Project: https://github.com/felixge/node-stack-trace +// Definitions by: [Exceptionless] +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module 'stack-trace' { + export interface StackFrame { + getTypeName():string; + getFunctionName():string; + getMethodName():string; + getFileName():string; + getTypeName():string; + getLineNumber():number; + getColumnNumber():number; + isNative():boolean; + } + + export function get(belowFn:() => void): StackFrame[]; + export function parse(err:Error): StackFrame[]; +} diff --git a/node-stack-trace/node-stack-trace.ts b/node-stack-trace/node-stack-trace.ts new file mode 100644 index 000000000..a0b2f8d55 --- /dev/null +++ b/node-stack-trace/node-stack-trace.ts @@ -0,0 +1,8 @@ +import stackTrace = require('stack-trace'); + +var currentStackTrace = stackTrace.get(); + +var err = new Error('something went wrong'); +var trace = stackTrace.parse(err); + +var fileName = trace[0].getFileName(); diff --git a/stacktrace/stacktrace.d.ts b/stacktrace/stacktrace.d.ts new file mode 100644 index 000000000..a23216a95 --- /dev/null +++ b/stacktrace/stacktrace.d.ts @@ -0,0 +1,64 @@ +// Type definitions for stacktrace.js +// Project: https://github.com/stacktracejs/stacktrace.js +// Definitions by: [Exceptionless] +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module StackTrace { + export interface StackTraceOptions { + filter?: (stackFrame:StackFrame) => boolean; + sourceCache?: { URL:string }; + offline?: boolean; + } + + export interface StackFrame { + constructor(functionName:string, args:any, fileName:string, lineNumber:number, columnNumber:number); + + functionName?:string; + args?:any; + fileName?:string; + lineNumber?:number; + columnNumber?:number; + toString():string; + } + + /** + * Get a backtrace from invocation point. + * @param options Options Object + * @return Array[StackFrame] + */ + export function get(options: StackTraceOptions): Promise; + + /** + * Given an error object, parse it. + * @param error Error object + * @param options Object for options + * @return Array[StackFrame] + */ + export function fromError(error:Error, options?:StackTraceOptions): Promise; + + /** + * Use StackGenerator to generate a backtrace. + * @param options Object options + * @returns Array[StackFrame] + */ + export function generateArtificially(options: StackTraceOptions): Promise; + + /** + * Given a function, wrap it such that invocations trigger a callback that + * is called with a stack trace. + * + * @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 {Object} thisArg optional context object (e.g. window) + */ + export function instrument(fn:() => void, callback:(stackFrames:StackFrame[]) => void, errorCallback:() => void, thisArg:any): void; + + /** + * Given a function that has been instrumented, + * revert the function to it's original (non-instrumented) state. + * + * @param fn {Function} + */ + export function deinstrument(fn:() => void): void; +} From 6b54b0b58f23d95a9670a7f1c364459fb349f548 Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Tue, 12 May 2015 11:45:17 -0500 Subject: [PATCH 2/5] Added stack trace.js tests --- stacktrace/stacktrace-tests.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 stacktrace/stacktrace-tests.ts diff --git a/stacktrace/stacktrace-tests.ts b/stacktrace/stacktrace-tests.ts new file mode 100644 index 000000000..39a968d61 --- /dev/null +++ b/stacktrace/stacktrace-tests.ts @@ -0,0 +1,25 @@ +import StackTrace = require('StackTrace'); + +function interestingFn() { + return 'https://github.com/exceptionless/Exceptionless'; +} + +var callback = function(stackframes) { + var stringifiedStack = stackframes.map(function(sf) { + return sf.toString(); + }).join('\n'); + console.log(stringifiedStack); +}; + +var errback = function(err) { console.log(err.message); }; + + +StackTrace.get(); + +// Somewhere else... +var error = new Error('BOOM!'); +StackTrace.fromError(error); +StackTrace.generateArtificially(); + +StackTrace.instrument(interestingFn, callback, errback); +StackTrace.deinstrument(interestingFn); From a07aca985c3842a22f2de49879ff25a44e37ef9a Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Tue, 12 May 2015 11:46:47 -0500 Subject: [PATCH 3/5] Added missing promise definition file. --- stacktrace/stacktrace.d.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stacktrace/stacktrace.d.ts b/stacktrace/stacktrace.d.ts index a23216a95..b54efe43e 100644 --- a/stacktrace/stacktrace.d.ts +++ b/stacktrace/stacktrace.d.ts @@ -3,6 +3,8 @@ // Definitions by: [Exceptionless] // Definitions: https://github.com/borisyankov/DefinitelyTyped +/// + declare module StackTrace { export interface StackTraceOptions { filter?: (stackFrame:StackFrame) => boolean; From f9996b4dda9790d89d5c8ebe5356dab22597f856 Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Thu, 14 May 2015 10:14:44 -0500 Subject: [PATCH 4/5] Fixed unit tests and naming conventions. --- .../stack-trace-tests.ts | 0 .../stack-trace.d.ts | 4 ++-- .../stacktrace-js-tests.ts | 11 +++++------ .../stacktrace-js.d.ts | 8 ++++---- 4 files changed, 11 insertions(+), 12 deletions(-) rename node-stack-trace/node-stack-trace.ts => stack-trace/stack-trace-tests.ts (100%) rename node-stack-trace/node-stack-trace.d.ts => stack-trace/stack-trace.d.ts (79%) rename stacktrace/stacktrace-tests.ts => stacktrace-js/stacktrace-js-tests.ts (52%) rename stacktrace/stacktrace.d.ts => stacktrace-js/stacktrace-js.d.ts (86%) diff --git a/node-stack-trace/node-stack-trace.ts b/stack-trace/stack-trace-tests.ts similarity index 100% rename from node-stack-trace/node-stack-trace.ts rename to stack-trace/stack-trace-tests.ts diff --git a/node-stack-trace/node-stack-trace.d.ts b/stack-trace/stack-trace.d.ts similarity index 79% rename from node-stack-trace/node-stack-trace.d.ts rename to stack-trace/stack-trace.d.ts index c3684b3db..21c12f8f2 100644 --- a/node-stack-trace/node-stack-trace.d.ts +++ b/stack-trace/stack-trace.d.ts @@ -1,6 +1,6 @@ // Type definitions for node-stack-trace // Project: https://github.com/felixge/node-stack-trace -// Definitions by: [Exceptionless] +// Definitions by: Exceptionless // Definitions: https://github.com/borisyankov/DefinitelyTyped declare module 'stack-trace' { @@ -15,6 +15,6 @@ declare module 'stack-trace' { isNative():boolean; } - export function get(belowFn:() => void): StackFrame[]; + export function get(belowFn?:() => void): StackFrame[]; export function parse(err:Error): StackFrame[]; } diff --git a/stacktrace/stacktrace-tests.ts b/stacktrace-js/stacktrace-js-tests.ts similarity index 52% rename from stacktrace/stacktrace-tests.ts rename to stacktrace-js/stacktrace-js-tests.ts index 39a968d61..c4c9bcf87 100644 --- a/stacktrace/stacktrace-tests.ts +++ b/stacktrace-js/stacktrace-js-tests.ts @@ -1,18 +1,17 @@ -import StackTrace = require('StackTrace'); +/// function interestingFn() { return 'https://github.com/exceptionless/Exceptionless'; } -var callback = function(stackframes) { - var stringifiedStack = stackframes.map(function(sf) { +var callback = function(stackframes:StackTrace.StackFrame[]) { + var stringifiedStack = stackframes.map(function(sf:StackTrace.StackFrame) { return sf.toString(); }).join('\n'); console.log(stringifiedStack); }; -var errback = function(err) { console.log(err.message); }; - +var errorCallback = function(err:Error) { console.log(err.message); }; StackTrace.get(); @@ -21,5 +20,5 @@ var error = new Error('BOOM!'); StackTrace.fromError(error); StackTrace.generateArtificially(); -StackTrace.instrument(interestingFn, callback, errback); +StackTrace.instrument(interestingFn, callback, errorCallback); StackTrace.deinstrument(interestingFn); diff --git a/stacktrace/stacktrace.d.ts b/stacktrace-js/stacktrace-js.d.ts similarity index 86% rename from stacktrace/stacktrace.d.ts rename to stacktrace-js/stacktrace-js.d.ts index b54efe43e..21ad6839e 100644 --- a/stacktrace/stacktrace.d.ts +++ b/stacktrace-js/stacktrace-js.d.ts @@ -13,7 +13,7 @@ declare module StackTrace { } export interface StackFrame { - constructor(functionName:string, args:any, fileName:string, lineNumber:number, columnNumber:number); + constructor(functionName:string, args:any, fileName:string, lineNumber:number, columnNumber:number): StackFrame; functionName?:string; args?:any; @@ -28,7 +28,7 @@ declare module StackTrace { * @param options Options Object * @return Array[StackFrame] */ - export function get(options: StackTraceOptions): Promise; + export function get(options?: StackTraceOptions): Promise; /** * Given an error object, parse it. @@ -43,7 +43,7 @@ declare module StackTrace { * @param options Object options * @returns Array[StackFrame] */ - export function generateArtificially(options: StackTraceOptions): Promise; + export function generateArtificially(options?: StackTraceOptions): Promise; /** * Given a function, wrap it such that invocations trigger a callback that @@ -54,7 +54,7 @@ declare module StackTrace { * @param {Function} errorCallback optional function to call with error if unable to get stack trace. * @param {Object} thisArg optional context object (e.g. window) */ - export function instrument(fn:() => void, callback:(stackFrames:StackFrame[]) => void, errorCallback:() => void, thisArg:any): void; + export function instrument(fn:() => void, callback:(stackFrames:StackFrame[]) => void, errorCallback:(error:Error) => void, thisArg?:any): void; /** * Given a function that has been instrumented, From bf147fd816ea0eef37b7c96489e140f29bee4cfb Mon Sep 17 00:00:00 2001 From: Blake Niemyjski Date: Thu, 14 May 2015 10:15:16 -0500 Subject: [PATCH 5/5] Fixed name on definition header. --- stacktrace-js/stacktrace-js.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stacktrace-js/stacktrace-js.d.ts b/stacktrace-js/stacktrace-js.d.ts index 21ad6839e..9f7ce5ea2 100644 --- a/stacktrace-js/stacktrace-js.d.ts +++ b/stacktrace-js/stacktrace-js.d.ts @@ -1,6 +1,6 @@ // Type definitions for stacktrace.js // Project: https://github.com/stacktracejs/stacktrace.js -// Definitions by: [Exceptionless] +// Definitions by: Exceptionless // Definitions: https://github.com/borisyankov/DefinitelyTyped ///