Skip to content

cabinjs/prepare-stack-trace

Repository files navigation

prepare-stack-trace

build status code coverage code style styled with prettier made with lass license

Error.prepareStackTrace ponyfill for Node. Made for Cabin.

Table of Contents

Install

npm:

npm install prepare-stack-trace

yarn:

yarn add prepare-stack-trace

Usage

Node

const StackFrame = require('stackframe');
const ErrorStackParser = require('error-stack-parser');
const prepareStackTrace = require('prepare-stack-trace');

//
// The following override is required until this PR is merged
// <https://github.com/stacktracejs/stackframe/pull/23>
//
StackFrame.prototype.toString = function() {
  const fileName = this.getFileName() || '';
  const lineNumber = this.getLineNumber() || '';
  const columnNumber = this.getColumnNumber() || '';
  const functionName = this.getFunctionName() || '';
  if (this.getIsEval()) {
    if (fileName) {
      return (
        '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')'
      );
    }

    return '[eval]:' + lineNumber + ':' + columnNumber;
  }

  if (functionName) {
    return (
      functionName +
      ' (' +
      fileName +
      ':' +
      lineNumber +
      ':' +
      columnNumber +
      ')'
    );
  }

  return fileName + ':' + lineNumber + ':' + columnNumber;
};

const err1 = new Error('Oops!');
const err2 = new Error('Error 1 will inherit this stack trace');
err1.stack = prepareStackTrace(err1, ErrorStackParser.parse(err2));

console.log('err1', err1);
console.log('err2', err2);

VanillaJS

<script src="https://unpkg.com/stackframe"></script>
<script src="https://unpkg.com/error-stack-parser"></script>
<script src="https://unpkg.com/prepare-stack-trace"></script>
<script type="text/javascript">
  (function() {
    //
    // The following override is required until this PR is merged
    // <https://github.com/stacktracejs/stackframe/pull/23>
    //
    StackFrame.prototype.toString = function() {
      var fileName = this.getFileName() || '';
      var lineNumber = this.getLineNumber() || '';
      var columnNumber = this.getColumnNumber() || '';
      var functionName = this.getFunctionName() || '';
      if (this.getIsEval()) {
        if (fileName) {
          return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';
        }
        return '[eval]:' + lineNumber + ':' + columnNumber;
      }
      if (functionName) {
        return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';
      }
      return fileName + ':' + lineNumber + ':' + columnNumber;
    }

    var err1 = new Error('Oops!');
    var err2 = new Error('Error 1 will inherit this stack trace');
    err1.stack = prepareStackTrace(err1, ErrorStackParser.parse(err2));

    console.log('err1', err1);
    console.log('err2', err2);
  })();
</script>

Contributors

Name Website
Nick Baugh http://niftylettuce.com/

License

MIT © Nick Baugh