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

await-trace

v1.1.0

Published

(Ugly) solution for complete stack traces in async/await. Production ready.

Downloads

68

Readme

await-trace

(Ugly) solution for complete stack traces in async/await. Production ready.

We needed complete stack traces that has a very low performance overhead. This mini-module is created as a response to the closed issue Missing stack traces from async functions after the first await. I hope that NodeJS team will create a native solution.

It may be ugly but you can refactor your codebase quickly to use this module AND also you can quickly refactor it back to the original async/await.

Installation

npm install await-trace --save

Usage

Replace your await promise with await nab(() => E(), promise). For example, convert this:

async function sideEffect(dummy){
  const data = await fetchData()
  return await updateData(data)
}

to this:

const {nab, E} = require('await-trace')

async function sideEffect(dummy){
  const data = await nab(() => E(), fetchData())
  return await nab(() => E(), updateData(data))
}

Quick refactoring

If you want to quickly refactor your code, I recommend you to use a replace tool that accepts regex patterns. I have done my refactoring using Jetbrains IDEs:

Replace with regex

Find: await\s(.*)(\)$) Replace: await nab(() => E(), $1$2)

Explanation

  • E() is an alias to Error(). Module exports Err() too.
  • The lazy initialization of error via () => E() is necessary in order not to degrade performance.
  • NodeJS builds stack trace from the place where an error is created. That's why you have to pass E() in every single nab()

Caveats

  • I don't know how to make it work with setTimeout(). With promises you'll be fine.
  • For stack traces longer than 10 lines use --stack-trace-limit flag, e.g.: node --stack-trace-limit=100 index.js

Invitation

NodeJS is great for development and this is just a pain in the ass in otherwise wonderful ecosystem! We'll be glad if you find any improvements (make a PR. ;) or if you offer a better solution than this one.