npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

dissect-error

v0.1.1

Published

Parse js Error and Error based object to a simple useful format

Downloads

1

Readme

Dissect Error

Build Status

Parse some js error and extract a sort of usefull info like:

  • type (SyntaxError, ReferenceError, etc)
  • message
  • error site
  • line
  • column
  • code that threw the error
  • file
  • stack trace (parsed as array)

Works with runtime errors, syntax errors, node VM eval errors and plain eval errors

And have zero dependencies!

How to use?

1. Install it

npm install -S dissect-error

2. Import it

const dissect = require( 'dissect-error' );

3. Use it

try {
  // throw some error
} catch ( err ) {
  const info = dissect( err );

  console.log( info );
}

Properties

The dissect function return an object with the following properties:

| property | description | | -------- | ----------- | | .type | JS error types like: Error, SyntaxError, MyCustomError, etc | | .message | The message from the error | | .site | What threw the error, Eg. Object.eval| | .line | Line # where the error happen | | .column | Column # where the error happen | | .stack | Array of frames from the stack trace, each frame is an object (see below) | | .expression | Expression which threw the error. Eg: const 2 = 1; | | .file | The file which threw the error. Eg: /app/project/index.js |

The .stack returns an array of stack frames wich have the folowing properties

| property | description | | -------- | ----------- | | .site | What thre the error. Eg. Object.eval | | .file | The file which threw the error | | .line | Line # where the error happen | | .column | Column # where the error happen |

Use cases

Plain runtime errors

try {
  await IO();
} catch ( err ) {
  const parsed = dissect( err );

  // result
  parsed.line; // 2
  parsed.expression; // await IO();
  parsed.site; // IO;
}

Node VM errors

Node VM errors are a bit different as they are parsed relative to the code evaluated by the VM, instead of the context of the VM invokation.

const vm = require( 'vm' );
const dissect = require( 'dissect-error' );

const code = `
module.exports = ( => };
`;

const ctx = { module, require, console, global, process };
vm.createContext( ctx );

try {
  vm.runInNewContext( code, ctx, { displayErrors: true } );
} catch ( err ) {
  const parsed = dissect( err );
  
  // result 
  parsed.type; // SyntaxError
  parsed.message; // Unexpected token =>
  parsed.line; // 2 (relative to the "code" parsed by the node VM)
  parsed.expression; // 'module.exports = ( => };
}