jgb-cli
Version:
```shell npm i -g jgb-cli #全局安装 ```
152 lines • 9.59 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
// import FSWatcher = require('fswatcher-child');
var chokidar_1 = require("chokidar");
var Path = require("path");
/**
* This watcher wraps chokidar so that we watch directories rather than individual files on macOS.
* This prevents us from hitting EMFILE errors when running out of file descriptors.
* Chokidar does not have support for watching directories on non-macOS platforms, so we disable
* this behavior in order to prevent watching more individual files than necessary (e.g. node_modules).
*/
var Watcher = /** @class */ (function () {
function Watcher() {
// this.watcher = chokidar.watch('', {
// ignoreInitial: true,
// ignorePermissionErrors: true,
// ignored: /\.cache|\.git/,
// });
this.watchedDirectories = new Map();
this.stopped = false;
this.watcher = new chokidar_1.FSWatcher({
useFsEvents: this.shouldWatchDirs,
ignoreInitial: true,
ignorePermissionErrors: true,
ignored: /\.cache|\.git/,
});
}
/**
* Find a parent directory of `path` which is already watched
*/
Watcher.prototype.getWatchedParent = function (path) {
path = Path.dirname(path);
var root = Path.parse(path).root;
while (path !== root) {
if (this.watchedDirectories.has(path)) {
return path;
}
path = Path.dirname(path);
}
return null;
};
/**
* Find a list of child directories of `path` which are already watched
*/
Watcher.prototype.getWatchedChildren = function (path) {
var e_1, _a;
path = Path.dirname(path) + Path.sep;
var res = [];
try {
for (var _b = tslib_1.__values(this.watchedDirectories.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
var dir = _c.value;
if (dir.startsWith(path)) {
res.push(dir);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
return res;
};
/**
* Add a path to the watcher
*/
Watcher.prototype.watch = function (path) {
var e_2, _a;
if (this.shouldWatchDirs) {
// If there is no parent directory already watching this path, add a new watcher.
var parent_1 = this.getWatchedParent(path);
if (!parent_1) {
// Find watchers on child directories, and remove them. They will be handled by the new parent watcher.
var children = this.getWatchedChildren(path);
var count = 1;
try {
// tslint:disable-next-line:no-shadowed-variable
for (var children_1 = tslib_1.__values(children), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) {
var dir_1 = children_1_1.value;
count += this.watchedDirectories.get(dir_1);
this.watcher.unwatch(dir_1);
this.watchedDirectories.delete(dir_1);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (children_1_1 && !children_1_1.done && (_a = children_1.return)) _a.call(children_1);
}
finally { if (e_2) throw e_2.error; }
}
var dir = Path.dirname(path);
this.watcher.add(dir);
this.watchedDirectories.set(dir, count);
}
else {
// Otherwise, increment the reference count of the parent watcher.
this.watchedDirectories.set(parent_1, this.watchedDirectories.get(parent_1) + 1);
}
}
else {
this.watcher.add(path);
}
};
/**
* Remove a path from the watcher
*/
Watcher.prototype.unwatch = function (path) {
if (this.shouldWatchDirs) {
var dir = this.getWatchedParent(path);
if (dir) {
// When the count of files watching a directory reaches zero, unwatch it.
var count = this.watchedDirectories.get(dir) - 1;
if (count === 0) {
this.watchedDirectories.delete(dir);
this.watcher.unwatch(dir);
}
else {
this.watchedDirectories.set(dir, count);
}
}
}
else {
this.watcher.unwatch(path);
}
};
/**
* Add an event handler
*/
Watcher.prototype.on = function (event, callback) {
this.watcher.on(event, callback);
};
/**
* Add an event handler
*/
Watcher.prototype.once = function (event, callback) {
this.watcher.once(event, callback);
};
/**
* Stop watching all paths
*/
Watcher.prototype.stop = function () {
this.stopped = true;
this.watcher.close();
};
return Watcher;
}());
exports.default = Watcher;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9XYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFpRDtBQUNqRCxxQ0FBcUM7QUFDckMsMkJBQTZCO0FBRTdCOzs7OztHQUtHO0FBQ0g7SUFLRTtRQUNFLHNDQUFzQztRQUN0Qyx5QkFBeUI7UUFDekIsa0NBQWtDO1FBQ2xDLDhCQUE4QjtRQUM5QixNQUFNO1FBUFIsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMvQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBUWQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLG9CQUFTLENBQUM7WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ2pDLGFBQWEsRUFBRSxJQUFJO1lBQ25CLHNCQUFzQixFQUFFLElBQUk7WUFDNUIsT0FBTyxFQUFFLGVBQWU7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0NBQWdCLEdBQWhCLFVBQWlCLElBQVk7UUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkMsT0FBTyxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3BCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQ0FBa0IsR0FBbEIsVUFBbUIsSUFBWTs7UUFDN0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxD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