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

fs-result

v0.0.1

Published

Typed, serializable Result wrappers for Node.js filesystem operations

Readme

fs-result

Typed Result wrappers for Node.js filesystem operations. Filesystem failures are returned as serializable plain objects instead of being thrown, so callers can branch on native error codes such as ENOENT, EACCES, and EEXIST.

Install

npm install fs-result

ESM-only. Requires Node.js 20+ and uses plain-result for the Result contract.

Usage

import { isErr } from 'plain-result'
import { readJsonFile, writeFile } from 'fs-result'

const settings = await readJsonFile<{ theme: string }>('settings.json')

if (isErr(settings)) {
  if (settings.error.name === 'FsError' && settings.error.code === 'ENOENT') {
    await writeFile('settings.json', JSON.stringify({ theme: 'system' }))
  } else {
    console.error(settings.error.message)
  }
}

Every filesystem wrapper returns a PResult:

interface FsErr {
  name: 'FsError'
  message: string
  code?: string
}

The package provides wrappers for reading, writing, appending, copying, renaming, removing, listing, creating, resolving, and statting files and directories. It also provides readJsonFile() and exists().

exists() returns false for any failed stat, not only ENOENT. Use stat() directly when callers need to distinguish a missing path from errors such as EACCES.

Releasing

Maintainers can run npm run release from a clean main branch. The command publishes the current version when it is not on npm yet; subsequent runs bump the patch version. Use npm run release -- minor or npm run release -- major to select a larger version bump. The workflow verifies the package, creates and pushes the Git tag, and publishes to npm using the current npm credentials.