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

bfile

v0.2.3

Published

Filesystem wrapper for node.js

Downloads

907

Readme

bfile

Filesystem wrapper for node.js. Provides a promisified API, along with a consistent interface accross node.js versions. All changes to the node.js fs API are tracked and accounted for in:

bfile will wrap older implementations to modernize them. Supports [email protected] and up.

Usage

const fs = require('bfile');

(async () => {
  await fs.writeFile('./foobar', 'Hello world!');

  console.log(await fs.readFile('./foobar'));

  for await (const [file] of fs.walk('.'))
    console.log(`Found file: ${file}`);
})();

Extras

In addition to the default FS API, bfile provides some extra helpers.

API

Methods

  • fs.copy(src, [options]) (async) - Recursively copy file or directory to dest.
  • fs.copySync(src, dest, [filter(path, stat)]) - Synchronous fs.copy.
  • fs.empty(path, [mode]) (async) - Ensure an empty directory at path.
  • fs.emptySync(path, [mode]) - Synchronous fs.empty.
  • fs.exists(path, [mode]) (async) - A fixed version of fs.exists. Basically a wrapper around fs.access which returns false on ENOENT or EACCESS. Accepts fs.access flags as the second argument.
  • fs.existsSync(path, [mode]) - Synchronous fs.exists.
  • fs.lstatTry(path, [options]) (async) - A version of fs.lstat which returns null on ENOENT or EACCES.
  • fs.lstatTrySync(path, [options]) - Synchronous fs.lstatTry.
  • fs.move(src, dest) (async) - Try to rename file. Recursively copies across devices, deleting the original, if necessary.
  • fs.moveSync(path, [mode]) - Synchronous fs.move.
  • fs.outputFile(path, data, [options]) (async) - Output file while ensuring the preceding directory structure exists. Basically a mkdirp wrapper around writeFile().
  • fs.outputFileSync(path, data, [options]) - Synchronous fs.outputFile.
  • fs.mkdirp(path, [mode]) (async) - Alias to fs.mkdir(path, { recursive: true }).
  • fs.mkdirpSync(path, [mode]) - Synchronous fs.mkdirp.
  • fs.readJSON(path, [options]) (async) - Read a JSON file. Returns parsed JSON.
  • fs.readJSONSync(path, [options]) - Synchronous fs.readJSON.
  • fs.remove(path, [options]) (async) - Recursively remove path.
  • fs.removeSync(path, [options]) - Synchronous fs.rimraf.
  • fs.statTry(path, [options]) (async) - A version of fs.stat which returns null on ENOENT or EACCES.
  • fs.statTrySync(path, [options]) - Synchronous fs.statTry.
  • fs.stats(path, [options]) (async) - A stat function which will attempt to call fs.lstat if fs.stat fails with ENOENT or EACCES (depending on options). This is useful for detecting broken symlinks and getting their appropriate stat object. Accepts options in the form of { follow: [boolean], bigint: [boolean] }.
  • fs.statsSync(path, [options]) - Synchronous fs.stats.
  • fs.statsTry(path, [options]) (async) - A version of fs.stats which returns null on ENOENT or EACCES.
  • fs.statsTrySync(path, [options]) - Synchronous fs.statsTry.
  • fs.traverse(paths, [options], callback) (async) - Callback version of fs.walk.
  • fs.traverseSync(paths, [options], callback) - Synchronous fs.traverse.
  • fs.walk(paths, [options]) - An async iterator which recursively walks the target path/paths. Returns entries in the form of [path, stat, depth]. Note that stat may be null in the event of an EACCES, EPERM, or ELOOP if options.throws is false.
  • fs.walkSync(paths, [options]) - Synchronous fs.walk.
  • fs.writeJSON(path, json, [options]) (async) - Write a JSON file (stringifies json).
  • fs.writeJSONSync(path, json, [options]) - Synchronous fs.writeJSON.

Options

fs.copy options
  • flags (number) - A bitfield to be passed to fs.copyFile{,Sync} as flags (default: 0).
  • filter(path, stat, depth) (function) - A callback to filter determine which files are copied (default: null).
  • follow (boolean) - Whether to follow symlinks for src (default: false).
  • overwrite (boolean) - Whether to overwrite existing files at the destination (default: false).
  • timestamps (boolean) - Whether to preserve file timestamps (default: false).
fs.readJSON options

Options are the standard fs.readFile options with some extras:

  • reviver(key, value) (function) - Reviver function for JSON parsing (default: null).

Options may also be a function as an alias for the reviver option.

fs.remove options
  • filter(path, stat, depth) (function) - A callback to filter determine which files are removed (default: null).
  • maxRetries (number) - Number of retries for EBUSY, EMFILE, ENFILE, ENOTEMPTY, or EPERM (default: 3).
  • retryDelay (number) - Number of milliseconds to wait in between retries.

Options may also be a function as an alias for the filter option.

fs.stats options

fs.stats and fs.statsSync accept an object with properties:

  • follow (boolean) - Whether to attempt calling fs.stat before fs.lstat. If false, behavior is identical to fs.lstat (default: true).
  • bigint (boolean) - Whether to use BigInts on the fs.Stats struct (default: false).

Options may also be a boolean as an alias for the follow option.

fs.{traverse,walk} options

fs.traverse, fs.traverseSync, fs.walk, and fs.walkSync accept an object with properties:

  • bigint (boolean) - Whether to use BigInts on the fs.Stats struct (default: false).
  • dirs (boolean) - Whether to return directories in the iterated results (default: false).
  • files (boolean) - Whether to return non-directory files in the iterated results (default: false).
  • filter(path, stat, depth) (function) - A callback to filter determine which directories are entered and which files are returned. Note that stat may be null if options.throws is false (default: null).
  • follow (boolean) - Whether to follow symlinks. Note that the walking functions are smart enough to avoid recursive symlink loops (default: true).
  • maxDepth (number) - Maximum depth to traverse. For reference, paths are depth 0. Set to -1 for no limit (default: -1).
  • throws (boolean) - Whether to throw on stat failure (default: false).
fs.writeJSON options

Options are the standard fs.writeFile options with some extras:

  • replacer(key, value) (function) - Replacer function for JSON stringification (default: null).
  • spaces (number) - Number of spaces to indent by (default: 2).
  • eol (string) - Line ending to use for the output text (default: \n).

Options may also be a function as an alias for the reviver option, or a number for the spaces option.

Detecting broken symlinks with fs.stats and fs.{traverse,walk}

fs.stats and the walking functions allow you to detect broken symlinks easily when the follow option is on:

const stat = await fs.statsTry('./foobar');

if (!stat) // ENOENT or EACCES
  throw new Error('File not found.');

if (stat.isSymbolicLink()) // A symlink we couldn't resolve
  throw new Error('Broken symlink detected.');

Contribution and License Agreement

If you contribute code to this project, you are implicitly allowing your code to be distributed under the MIT license. You are also implicitly verifying that all code is your original work. </legalese>

License

  • Copyright (c) 2014-2019, Christopher Jeffrey (MIT License).

See LICENSE for more info.