hot-file-cache

1.1.0 • Public • Published

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.

/hot-file-cache/

    Package Sidebar

    Install

    npm i hot-file-cache

    Weekly Downloads

    8

    Version

    1.1.0

    License

    MIT

    Last publish

    Collaborators

    • jantimon