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

hot-file-cache

v1.1.0

Published

A watched file cache which will invalidate automatically if the source changes

Downloads

37

Readme

Hot File Cache

npm version Dependency Status Build status Build status js-semistandard-style Coverage Status

A file/glob cache which will invalidate automatically if the source changes (powered by chokidar)

Installation

Install the plugin with npm:

$ npm install --save-dev hot-file-cache

Basic Usage

var hfc = new HotFileCache('*.md', {cwd: dir});
hfc.readFile('README.md').then(function(content) {
  console.log(content);
});

Processors

var hfc = new HotFileCache('*.json', {
  cwd: dir,
  // the fileProcessor will be executed only once per file
  fileProcessor: function (filename, fileContent) {
    // the return value could also be a promise
    return JSON.parse(fileContent);
  }
});
hfc.readFile('demo.json').then(function(content) {
  console.log(content);
});

Options:

You can pass all chokidar options.

Additionally you can pass the following options:

  • hot (true|false) - Default: true - Wether to watch for changes or not
  • useCache (true|false) - Default: true - Wether to cache the disk operations
  • fileProcessor: (function) - Optional - Allow to process the file contents before they are written into the cache.

API:

Because of the asynchronous nature of disk operations all functions return a Promise.

hfc.getFiles()

getFiles returns an array of all absolute filenames matching the pattern. As it looks into a warm cache it doesn't need any disk operations.

hfc.fileExists(absolutePath)

fileExists returns true if the given file exists.
As it looks in into a warm cache it doesn't need any disk operations.

hfc.readFile(absolutePath)

readFile returns the content of the given file.
If a file processor is passed the content is also processed. The processed result is cached until chokidar detects a file change on the disk.

hfc.close()

close will stop the file watching

Events

hfc.on(eventName, callback);
  • all Similar to the chokidar all event: (add, addDir, change, unlink or unlinkDir)
  • add File has been added
  • addDir Directory has been added
  • change File has been changed
  • unlink File has been removed
  • unlinkDir Directory has been removed
  • revoke-cache File was already hot-cached but has been changed or was removed

Visualisation

var hfc = new HotFileCache('*.json', {
  cwd: dir,
  fileProcessor: function process (filename, fileContent) {
    return JSON.parse(fileContent);
  }
});
hfc.readFile('demo.json') // 1
  .then(function(content) {
    console.log(content);
  });
hfc.readFile('demo.json') // 2
  .then(function(content) {
    console.log(content);
  });
hfc.readFile('demo.json') // 3
  .then(function(content) {
    console.log(content);
  });
hfc.readFile('demo.json') // 4
  .then(function(content) {
    console.log(content);
  });

Concept flow uml

Performance

Chokidar has a lot of of performance optimisations

Changelog

Take a look at the CHANGELOG.md.

Contribution

You're free to contribute to this project by submitting issues and/or pull requests. This project is test-driven, so keep in mind that every change and new feature should be covered by tests. This project uses the semistandard code style.

License

This project is licensed under MIT.