MCPcopy Create free account
hub / github.com/Axosoft/nsfw

github.com/Axosoft/nsfw @v2.3.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.3.1 ↗ · + Follow
199 symbols 343 edges 28 files 7 documented · 4% updated 22d agov2.0.0 · 2020-04-08★ 92952 open issues

Browse by type

Functions 162 Types & classes 37
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

node-sentinel-file-watcher

Linux OS X Windows

A simple file watcher library for node.

Why NSFW?

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.

Usage

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
    },
    excludedPaths: ['dir2/node_modules']
  })
  .then(function(watcher) {
    watcher2 = watcher;
    return watcher.start();
  })
  .then(function() {
    // we are now watching dir2 for events!

    // we can update excludedPaths array
    return watcher2.updateExcludedPaths(['dir2/node_modules', '.git']);
  })
  .then(function() {
    // To stop watching
    watcher2.stop();
  })

Options

  • debounceMS: delays notifications emitted by the library. Default 500 ms.
  • errorCallback(errors): the library will call this callback when an error happens. At the moment when an error happens the service does not stop, this may change in the near future.
  • excludedPaths: array with the absolute paths we want to exclude watching. You can update the excludedPaths array without restarting the service using the updateExcludedPaths function

Callback Argument

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
};

Installation

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.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 140
Class 30
Function 22
Interface 4
Enum 3

Languages

C++90%
TypeScript10%

Modules by API surface

src/linux/InotifyTree.cpp37 symbols
src/NSFW.cpp25 symbols
src/win32/Watcher.cpp21 symbols
src/osx/FSEventsService.cpp16 symbols
src/linux/InotifyService.cpp15 symbols
src/win32/Controller.cpp9 symbols
includes/NSFW.h8 symbols
src/Queue.cpp7 symbols
src/NativeInterface.cpp6 symbols
src/linux/InotifyEventLoop.cpp5 symbols
js/spec/index-spec.js5 symbols
index.d.ts5 symbols

For agents

$ claude mcp add nsfw \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page