90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # fsevents
 | ||
|  | 
 | ||
|  | Native access to MacOS FSEvents in [Node.js](https://nodejs.org/) | ||
|  | 
 | ||
|  | The FSEvents API in MacOS allows applications to register for notifications of | ||
|  | changes to a given directory tree. It is a very fast and lightweight alternative | ||
|  | to kqueue. | ||
|  | 
 | ||
|  | This is a low-level library. For a cross-platform file watching module that | ||
|  | uses fsevents, check out [Chokidar](https://github.com/paulmillr/chokidar). | ||
|  | 
 | ||
|  | ## Usage
 | ||
|  | 
 | ||
|  | ```sh | ||
|  | npm install fsevents | ||
|  | ``` | ||
|  | 
 | ||
|  | Supports only **Node.js v8.16 and higher**. | ||
|  | 
 | ||
|  | ```js | ||
|  | const fsevents = require('fsevents'); | ||
|  | 
 | ||
|  | // To start observation | ||
|  | const stop = fsevents.watch(__dirname, (path, flags, id) => { | ||
|  |   const info = fsevents.getInfo(path, flags); | ||
|  | }); | ||
|  | 
 | ||
|  | // To end observation | ||
|  | stop(); | ||
|  | ``` | ||
|  | 
 | ||
|  | > **Important note:** The API behaviour is slightly different from typical JS APIs. The `stop` function **must** be
 | ||
|  | > retrieved and stored somewhere, even if you don't plan to stop the watcher. If you forget it, the garbage collector
 | ||
|  | > will eventually kick in, the watcher will be unregistered, and your callbacks won't be called anymore.
 | ||
|  | 
 | ||
|  | The callback passed as the second parameter to `.watch` get's called whenever the operating system detects a | ||
|  | a change in the file system. It takes three arguments: | ||
|  | 
 | ||
|  | ###### `fsevents.watch(dirname: string, (path: string, flags: number, id: string) => void): () => Promise<undefined>`
 | ||
|  | 
 | ||
|  |  * `path: string` - the item in the filesystem that have been changed | ||
|  |  * `flags: number` - a numeric value describing what the change was | ||
|  |  * `id: string` - an unique-id identifying this specific event | ||
|  | 
 | ||
|  |  Returns closer callback which when called returns a Promise resolving when the watcher process has been shut down. | ||
|  | 
 | ||
|  | ###### `fsevents.getInfo(path: string, flags: number, id: string): FsEventInfo`
 | ||
|  | 
 | ||
|  | The `getInfo` function takes the `path`, `flags` and `id` arguments and converts those parameters into a structure | ||
|  | that is easier to digest to determine what the change was. | ||
|  | 
 | ||
|  | The `FsEventsInfo` has the following shape: | ||
|  | 
 | ||
|  | ```js | ||
|  | /** | ||
|  |  * @typedef {'created'|'modified'|'deleted'|'moved'|'root-changed'|'cloned'|'unknown'} FsEventsEvent | ||
|  |  * @typedef {'file'|'directory'|'symlink'} FsEventsType | ||
|  |  */ | ||
|  | { | ||
|  |   "event": "created", // {FsEventsEvent} | ||
|  |   "path": "file.txt", | ||
|  |   "type": "file",    // {FsEventsType} | ||
|  |   "changes": { | ||
|  |     "inode": true,   // Had iNode Meta-Information changed | ||
|  |     "finder": false, // Had Finder Meta-Data changed | ||
|  |     "access": false, // Had access permissions changed | ||
|  |     "xattrs": false  // Had xAttributes changed | ||
|  |   }, | ||
|  |   "flags": 0x100000000 | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Changelog
 | ||
|  | 
 | ||
|  | - v2.3 supports Apple Silicon ARM CPUs | ||
|  | - v2 supports node 8.16+ and reduces package size massively | ||
|  | - v1.2.8 supports node 6+ | ||
|  | - v1.2.7 supports node 4+ | ||
|  | 
 | ||
|  | ## Troubleshooting
 | ||
|  | 
 | ||
|  | - I'm getting `EBADPLATFORM` `Unsupported platform for fsevents` error. | ||
|  | - It's fine, nothing is broken. fsevents is macos-only. Other platforms are skipped. If you want to hide this warning, report a bug to NPM bugtracker asking them to hide ebadplatform warnings by default. | ||
|  | 
 | ||
|  | ## License
 | ||
|  | 
 | ||
|  | The MIT License Copyright (C) 2010-2020 by Philipp Dunkel, Ben Noordhuis, Elan Shankar, Paul Miller — see LICENSE file. | ||
|  | 
 | ||
|  | Visit our [GitHub page](https://github.com/fsevents/fsevents) and [NPM Page](https://npmjs.org/package/fsevents) |