A simple file watcher for Node
npm install @atom/nsfw
A simple file watcher library for node.
When NSFW has events and is not being throttled, it will group those events in the order that they occurred and report them to the Javascript layer in a single callback. This is an improvement over services that utilize Node FS.watch, which uses a callback for every file event that is triggered. Every callback FS.watch makes to the event queue is a big bonus to NSFW's performance when watching large file system operations, because NSFW will only make 1 callback with many events within a specified throttle period.
So why NSFW? Because it has a consistent and minimal footprint in the Javascript layer, manages recursive watching for you, and is super easy to use.
``js
var nsfw = require('nsfw');
var watcher1;
return nsfw(
'dir1',
function(events) {
// handle events
})
.then(function(watcher) {
watcher1 = watcher;
return watcher.start();
})
.then(function() {
// we are now watching dir1 for events!
// To stop watching
watcher1.stop()
});
// With options
var watcher2;
return nsfw(
'dir2',
function(events) {
// handles other events
},
{
debounceMS: 250,
errorCallback(errors) {
//handle errors
}
})
.then(function(watcher) {
watcher2 = watcher;
return watcher.start();
})
.then(function() {
// we are now watching dir2 for events!
})
.then(function() {
// To stop watching
watcher2.stop();
})
`
An array of events as they have happened in a directory, it's children, or to a file.
`js`
[
{
"action": 2, // nsfw.actions.MODIFIED
"directory": "/home/nsfw/watchDir",
"file": "file1.ext"
},
{
"action": 0, // nsfw.actions.CREATED
"directory": "/home/nsfw/watchDir",
"file": "folder"
},
{
"action": 1, // nsfw.actions.DELETED
"directory": "home/nsfw/watchDir/testFolder",
"file": "test.ext"
},
{
"action": 3, // nsfw.actions.RENAMED
"directory": "home/nsfw/watchDir",
"oldFile": "oldname.ext",
"newDirectory": "home/nsfw/watchDir/otherDirectory"
"newFile": "newname.ext"
}
]
Event are enumerated by the nsfw.actions enumeration
`js``
nsfw.actions = {
CREATED: 0,
DELETED: 1,
MODIFIED: 2,
RENAMED: 3
};