UNPKG

jgb-cli

Version:

```shell npm i -g jgb-cli #全局安装 ```

152 lines 9.59 kB
"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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