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 🙏

© 2026 – Pkg Stats / Ryan Hefner

error-cause-code

v0.0.1

Published

Extract a single error code (code or HTTP status) from an error and its cause chain — e.g. the Postgres SQLSTATE hidden inside a Drizzle ORM error. Zero dependencies.

Readme

error-cause-code

Extract a single error code from an error and its cause chain — for alerting, filtering, grouping and logging. Finds the root cause hidden inside wrapped errors, such as a PostgreSQL SQLSTATE ("08006", "23505") inside a Drizzle ORM "Failed query" error, or an HTTP status code (404, 429) from an API client error. Zero dependencies, TypeScript, ESM, and runtime-agnostic (Node.js, Cloudflare Workers / edge, browsers).

Why

Many libraries wrap the real error: Drizzle ORM throws "Failed query" and puts the actual postgres error in cause. To classify an error you have to walk the whole nested error chain. findErrorCode does that and returns one flat string | null, wherever the code came from — err.code or err.status, at any depth.

Use cases

  • Database alerts: pull the Postgres SQLSTATE out of a Drizzle error and alert only on connection failures ("08006"), not on unique violations ("23505").
  • Error monitoring / grouping: use the code as a fingerprint in Sentry or similar, so every error doesn't collapse into one "Failed query" group.
  • HTTP error filtering: read the status from an HTTP error — ignore 404, retry 429.
  • Structured logging: add one flat errorCode field to logs for search and aggregation.

Install

npm install error-cause-code

Usage

import { findErrorCode } from "error-cause-code";

// top-level code
findErrorCode(Object.assign(new Error("dup"), { code: "23505" })); // "23505"

// falls back to http status when there is no code
findErrorCode(Object.assign(new Error("nf"), { status: 404 })); // "404"

// walks down the cause chain
const pg = Object.assign(new Error("closed"), { code: "08006" });
const dz = Object.assign(new Error("Failed query"), { cause: pg });
findErrorCode(dz); // "08006"

// null when no code is found
findErrorCode(new Error("plain")); // null

API

findErrorCode(err: unknown): string | null

At each level of the chain, checks in this order:

| Order | Condition | | --- | --- | | err.code | string or number → String(code) | | err.status | number → String(status) | | err.cause | recurse (max depth 5) |

Returns null if no code is found. Never throws, even past the depth limit or on non-object input.

License

MIT