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

writepool

v0.0.0

Published

Collects files before writing to disk, allowing change tracking, output management, and dry-runs for controlled file handling.

Downloads

9

Readme

writepool

Writepool is a Node.js package that collects files before writing to disk, allowing you to track changes, manage output, and run dry-runs without committing. Ideal for applications needing precise and controlled file output management.

Guides

  const writepool = new Writepool() // For regular instance
  // OR
  const writepool = Writepool.getInstance() // For singleton instance
  // OR
  const writepoolWithPredefinedOrigin = writepool.withOrigin('meta-content-generator')

Writing Files with Writepool

Adding New Files

The files.write method accessible from the context doesn't write the file to the disk immediately. Instead, it stacks the new content for the file path, enabling you to modify files later or debug the file changes before they are written.

writepool.write('./created-at.txt', time.datetime)

It's a good practice to provide the origin of the change. With this name, all changes are easier to track. You can specify a custom name.

writepool.write('./README.md', contents, 'readme-md-generator');

Editing Stacked Files

You can edit a file that has already been created using the write method.

const [versionPath, versionContents] = writepool.get((path) => path.includes('version.json'));
 
const parsedVersionContents = JSON.parse(versionContents);
parsedVersionContents.version = 'v.2.0.0';
// writing the same file path overwrites the file contents
files.write(versionPath, JSON.stringify(parsedVersionContents), 'version-bumper');

Debugging Changes

You can also track the changes made to a file. In order to make it possible, you need to instantiate Writepool with { logChanges: true } option.

const writepool = new Writepool({logChanges: true})
const changes = writepool.getChanges('./package.json');
console.table(changes.list())

Or see the specific version of the file:

const writepool = new Writepool({logChanges: true})
const changes = writepool.getChanges('./package.json');
changes.get(3)
// OR using negative indexses for getting last changes:
changes.get(-1)

Eventually you can compare some changes with diff:

const writepool = new Writepool({logChanges: true})
const changes = writepool.getChanges('./package.json');
changes.diff(-1, -2); // Prints colored diff in the console

Writing files to disk

You can write all files to disk using writeFilesToDisk() method.

writepool.writeFilesToDisk()

Or you can do something on each file being written. When using as an generator, with each written file, an object with following properties is yielded:

  • path - path of a file
  • index - current file index
  • total - total files to be written
for (const data of writepool.writeFilesToDisk()) {
  console.log(`File ${data.path} successfully written. (${data.index} / ${data.total} Done.)`)
}