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

ewalkdir

v1.3.0

Published

Event-emitting asyncronous directory walker.

Downloads

6

Readme

ewalkdir

Node.js event-emitting asynchronous directory walking.

Usage

All the files under your homedir:

const ewalkdir = require('ewalkdir');
const dir = require('os').homedir();
const walker = ewalkdir(dir)
.on('file', ({dir,/* path,*/ stats, relTop}) => {
  console.log('dir', dir, stats);
})
.on('symboliclink', ({dir,/* path,*/ stats, relTop}) => {
  console.log('symboliclink', dir, stats)
})

Options

Can be set by ewalkdir({key: value})

  • dir and/or dirs: string or array of strings pointing to directories to scan.
  • depth: number (default Infinity); defines what depth to explore to.
  • relTop: string (default "/"); relative path to top scan, included in all events except ready.
  • readlinks/followLinks/followSymlinks: boolean (default false); follow symbolic links. Subitems will emit as if it were a directory, with the exception of the {dir, path = dir} attributes which will be completely different; but will follow the same {relTop} attribute.
  • keepFound: boolean (default false); keeps data in a Map under this.foundItems.
  • no: regex (default /^(node_modules|\..*)$/g); filter; returns true on no.test if not to be scanned.
  • emitDefault: boolean (default true); sets default for all emitters.
  • emit*: boolean (default emitDefault); see Events below.

Events/emittables

  • ready emitted before beginning directory walking and emitting of data.
  • walk emitted every walked item.
  • file (if fs.Stats.isFile(), controlled by option emitFiles)
  • dir (if fs.Stats.isDirectory(), controlled by option emitDirectorys)
  • blockdevice (if fs.Stats.isBlockDevice(), controlled by option emitBlockDevices)
  • characterdevice (if fs.Stats.isCharacterDevice(), controlled by option emitCharacterDevices)
  • symboliclink (if fs.Stats.isSymbolicLink(), controlled by option emitSymbolicLinks)
  • fifo (if fs.Stats.isFIFO(), controlled by option emitFIFOs, First In First Out/"Queue")
  • socket (if fs.Stats.isSocket(), controlled by option emitSockets)

Event structure

All events, excluding ready and walk, attach a {dir, path = dir, stats, relTop} event, documenting the {dir, path} to the item, {stats} is an fs.Stats object and relTop is a HTTP relative path if a server was based on it.

Event ready emits no data.

Event walk emits {dir, path = dir, depth, relTop} regardless.

Usecases

Current usecases involve:

  • Finding and/or hashing a large amount of files in several seconds.
  • Mapping a directory into many stat instances.