• Stars
    star
    902
  • Rank 50,637 (Top 1.0 %)
  • Language
    C++
  • License
    MIT License
  • Created over 9 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A super fast and scaleable file watcher that provides a consistent interface on Linux, OSX and Windows

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.

More Repositories

1

rickscroll

High performance scrolling for React
JavaScript
58
star
2

nodegit-flow

nodegit-flow contains gitflow commands that are not included in the vanilla nodegit package
JavaScript
37
star
3

git-rs

Git CLI Server written in Rust
Rust
28
star
4

glo-actions

The collection of Github actions for Glo
18
star
5

nodegit-lfs

LFS for NodeGit
JavaScript
14
star
6

OnTimeAPIExample

C#
13
star
7

GitKraken-Bisect-Atom

Git Bisect for Atom
JavaScript
13
star
8

glo-vs-code

Glo plugin for VS Code
TypeScript
11
star
9

glo-action-move-card

GitHub action to move Glo Boards cards to a column
JavaScript
11
star
10

glo-action-label-card

GitHub action to add a label to a Glo Boards card
JavaScript
10
star
11

AxosoftAPI.NET

.NET wrapper for the Axosoft API
C#
8
star
12

glo-api-apps

A list of applications related to GitKraken Glo's API
8
star
13

glo-sdk

JavaScript SDK for GitKraken Glo
TypeScript
8
star
14

diff3

JavaScript
8
star
15

glo-atom

Glo plugin for Atom
JavaScript
7
star
16

moby-git

HTML
7
star
17

glo-action-parse-links

GitHub action to parse links to Glo Boards cards from a PR or commit description
TypeScript
7
star
18

glo-action-comment-card

GitHub action to add a comment to a Glo Boards card
JavaScript
6
star
19

aha-i-get-git

Learning Git with GitKraken
6
star
20

MacStopWatch

MacOS StopWatch for Axosoft
Objective-C
5
star
21

glo-action-assign-card

GitHub action to add an assignee to a Glo Boards card
JavaScript
5
star
22

glo-webhooks-examples

JavaScript
4
star
23

find-git-repositories

Finds git repositories asynchronously for node.js
C++
4
star
24

atom-github-notifications

Display and dismiss your GitHub notifications from inside Atom
JavaScript
4
star
25

AxoSlackBot

Slack bot integration with Axosoft
JavaScript
2
star
26

node-axosoft

A node.js client for the Axosoft API
JavaScript
2
star
27

netlify-statuskit

HTML
1
star
28

GitSpeedTest

Tests timing operations in git, nodegit, etc.
JavaScript
1
star
29

get-cwd-of-process

C++
1
star
30

glo-action-create-card

GitHub action to create a card in a Glo Board
JavaScript
1
star
31

glo2markdown

This is an Next.js app demonstrating how to use GitKraken Glo's OAuth and API.
JavaScript
1
star