
Security News
Risky Biz Podcast: Making Reachability Analysis Work in Real-World Codebases
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Linux | OS X | Windows |
---|---|---|
|
|
NSFW is a native abstraction for Linux, Windows, and OSX file watching services which tries to keep a consistent interface and feature set across operating systems. NSFW offers recursive file watching into deep file systems all at no additional cost to the Javascript layer. In Linux, NSFW recursively builds an inotify watch tree natively, which collects events concurrently to the javascript thread. In OSX, NSFW utilizes the FSEventsService, which recursively watches for file system changes in a specified directory. In Windows, NSFW implements a server around the ReadDirectoryChangesW method.
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.
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.
[
{
"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
nsfw.actions = {
CREATED: 0,
DELETED: 1,
MODIFIED: 2,
RENAMED: 3
};
NSFW is a native node module and requires Node-Gyp to be functional before you can install it. Make sure you have completed installing all of the dependencies listed for Node-Gyp on your operating system.
FAQs
A simple file watcher for Node
The npm package nsfw receives a total of 1,406 weekly downloads. As such, nsfw popularity was classified as popular.
We found that nsfw demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.
Security News
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.