Hot File Cache
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 = '*.md' cwd: dir;hfc;
Processors
var hfc = '*.json' cwd: dir // the fileProcessor will be executed only once per file { // the return value could also be a promise return JSON; };hfc;
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 notuseCache
(true|false) - Default: true - Wether to cache the disk operationsfileProcessor
: (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;
all
Similar to the chokidar all event: (add
,addDir
,change
,unlink
orunlinkDir
)add
File has been addedaddDir
Directory has been addedchange
File has been changedunlink
File has been removedunlinkDir
Directory has been removedrevoke-cache
File was already hot-cached but has been changed or was removed
Visualisation
var hfc = '*.json' cwd: dir { return JSON; };hfc // 1 ;hfc // 2 ;hfc // 3 ;hfc // 4 ;
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.