UNPKG

2.81 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5const sane_1 = __importDefault(require("sane"));
6const events_1 = require("events");
7const source_node_1 = __importDefault(require("./wrappers/source-node"));
8const bind_file_event_1 = __importDefault(require("./utils/bind-file-event"));
9const logger = require('heimdalljs-logger')('broccoli:watcherAdapter');
10function defaultFilterFunction(name) {
11 return /^[^.]/.test(name);
12}
13class WatcherAdapter extends events_1.EventEmitter {
14 constructor(watchedNodes, options = {}) {
15 super();
16 if (!Array.isArray(watchedNodes)) {
17 throw new TypeError(`WatcherAdapter's first argument must be an array of SourceNodeWrapper nodes`);
18 }
19 for (const node of watchedNodes) {
20 if (!(node instanceof source_node_1.default)) {
21 throw new Error(`${node} is not a SourceNode`);
22 }
23 if (node.nodeInfo.watched !== true) {
24 throw new Error(`'${node.nodeInfo.sourceDirectory}' is not watched`);
25 }
26 }
27 this.watchedNodes = watchedNodes;
28 this.options = options;
29 this.options.filter = this.options.filter || defaultFilterFunction;
30 this.watchers = [];
31 }
32 watch() {
33 let watchers = this.watchedNodes.map((node) => {
34 const watchedPath = node.nodeInfo.sourceDirectory;
35 const watcher = sane_1.default(watchedPath, this.options);
36 this.watchers.push(watcher);
37 bind_file_event_1.default(this, watcher, node, 'change');
38 bind_file_event_1.default(this, watcher, node, 'add');
39 bind_file_event_1.default(this, watcher, node, 'delete');
40 return new Promise((resolve, reject) => {
41 watcher.on('ready', resolve);
42 watcher.on('error', reject);
43 }).then(() => {
44 watcher.removeAllListeners('ready');
45 watcher.removeAllListeners('error');
46 watcher.on('error', (err) => {
47 logger.debug('error', err);
48 this.emit('error', err);
49 });
50 logger.debug('ready', watchedPath);
51 });
52 });
53 return Promise.all(watchers).then(() => { });
54 }
55 quit() {
56 let closing = this.watchers.map((watcher) => new Promise((resolve, reject) =>
57 // @ts-ignore
58 watcher.close((err) => {
59 if (err)
60 reject(err);
61 else
62 resolve();
63 })));
64 this.watchers.length = 0;
65 return Promise.all(closing).then(() => { });
66 }
67}
68;
69module.exports = WatcherAdapter;
70//# sourceMappingURL=watcher_adapter.js.map
\No newline at end of file