get-stack-trace

V8 stack traces with optional source map resolution.

Usage no npm install needed!

<script type="module">
  import getStackTrace from 'https://cdn.skypack.dev/get-stack-trace';
</script>

README

get-stack-trace

Travis build status Coveralls NPM version Canonical Code Style Twitter Follow

V8 stack traces with optional source map resolution.

Motivation

A lot of NPM packages are transpiled either using Babel or TypeScript.

This means that if you attempt to resolve a CallSite using Error.prepareStackTrace and Error.captureStackTrace, the resulting CallSite object will reference the tranpiled file, rather than the original source file. However, if the project was distributed with source maps, then we can use the available source maps to resolve the original CallSite.

In practise, this is useful if the intent is to log the stack trace of an application at a particular time in execution, e.g. Slonik creates a stack trace prior to every asynchronous call for debugging purposes.

For the stack traces to resolve, packages must be distributed with a source map file along with the transpiled file, e.g. such as in the case of this project:

$ cd ./dist && tree .
.
├── index.js
├── index.js.flow
├── index.js.map
├── test.js
├── test.js.flow
├── test.js.map
├── types.js
├── types.js.flow
└── types.js.map

Usage

import {
  getStackTrace
} from 'get-stack-trace';

const stackTrace = await getStackTrace();