What is stacktracey?
Stacktracey is an npm package that provides a powerful and flexible way to parse, manipulate, and analyze JavaScript stack traces. It helps developers to better understand and debug errors by offering a more readable and structured representation of stack traces.
What are stacktracey's main functionalities?
Parsing Stack Traces
This feature allows you to parse a stack trace from an error object. The parsed stack trace is more readable and structured, making it easier to understand the flow of the error.
const Stacktracey = require('stacktracey');
const error = new Error('Something went wrong');
const stack = new Stacktracey(error);
console.log(stack);
Filtering Stack Frames
This feature allows you to filter stack frames based on certain criteria, such as file names or line numbers. This can be useful for focusing on relevant parts of the stack trace.
const Stacktracey = require('stacktracey');
const error = new Error('Something went wrong');
const stack = new Stacktracey(error);
const filteredStack = stack.withSources.filter(frame => frame.file.includes('myProject'));
console.log(filteredStack);
Converting Stack Traces to String
This feature allows you to convert a parsed stack trace back into a string format, but in a more readable table format. This can be useful for logging or displaying the stack trace in a user-friendly manner.
const Stacktracey = require('stacktracey');
const error = new Error('Something went wrong');
const stack = new Stacktracey(error);
console.log(stack.asTable());
Other packages similar to stacktracey
error-stack-parser
Error-stack-parser is a library that extracts and parses error stack traces. It provides a simple API to parse stack traces into a more readable format. Compared to Stacktracey, it is more focused on just parsing and does not offer as many features for manipulating or filtering stack traces.
stacktrace-parser
Stacktrace-parser is a simple library for parsing JavaScript stack traces. It provides a basic API to convert stack trace strings into structured objects. While it is similar to Stacktracey in terms of parsing capabilities, it lacks the advanced features for filtering and converting stack traces into different formats.
tracey
Tracey is a lightweight library for parsing and formatting stack traces. It offers basic functionality for parsing stack traces and converting them into a more readable format. Compared to Stacktracey, it is less feature-rich but can be a good choice for simpler use cases.
StackTracey
Platform-agnostic callstack access helper.
Why
What for
- Better exception reporting for Node and browsers
- Advanced logging (displaying call locations)
- Assertion printing
How to
npm install stacktracey
StackTracey = require ('stacktracey')
Captures current call stack:
stack = new StackTracey ()
Parses stacks from Error
object:
stack = new StackTracey (error)
stack = new StackTracey (error.stack)
It is an array instance:
stack instanceof Array
stack.length
stack[0]
Each item exposes:
{
beforeParse: <original text>,
callee: <function name>,
calleeShort: <shortened function name>,
file: <full path to file>, // e.g. /Users/john/my_project/src/foo.js
fileShort: <shortened path to file>, // e.g. src/foo.js
fileName: <file name>', // e.g. foo.js
line: <line number>, // starts from 1
column: <column number>, // starts from 1
index: /* true if occured in HTML file at index page */,
native: /* true if occured in native browser code */,
thirdParty: /* true if occured in library code */,
hide: /* true if marked as hidden by "// @hide" tag */
}
Accessing sources:
stack = stack.withSources // will return a copy of stack with all items supplied with sources
top = stack[0]
top = stack.withSource (0)
top = StackTracey.withSource (stack[0])
This will return item supplied with source code info (already mapped through sourcemaps):
{
...
line: <original line number>,
column: <original column number>,
sourceFile: <original source file object>,
sourceLine: <original source line text>
}
To learn about sourceFile
object, read get-source docs.
Cleaning output
stack = stack.clean
- Merges repeated lines (via
.mergeRepeatedLines
) - Excludes locations marked with
isThirdParty
(library calls) - Excludes locations marked with
// @hide
comment (user defined exclusion)
You can override isThirdParty
behaviour by replacing the predicate implementation:
StackTracey.isThirdParty = path => path.includes ('jquery')
Array methods
StackTracey
instances expose map
, filter
and slice
methods. These methods will return mapped, filtered and sliced StackTracey
instances, respectively. All other methods of Array
are supported too, but they will return Array
instances, not StackTracey
instances. You can convert arrays via this:
stack = new StackTracey (array)
You can compare two locations via this predicate (tests file
, line
and column
for equality):
StackTracey.locationsEqual (a, b)