1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | const sane_1 = __importDefault(require("sane"));
|
6 | const events_1 = require("events");
|
7 | const source_node_1 = __importDefault(require("./wrappers/source-node"));
|
8 | const bind_file_event_1 = __importDefault(require("./utils/bind-file-event"));
|
9 | const logger = require('heimdalljs-logger')('broccoli:watcherAdapter');
|
10 | function defaultFilterFunction(name) {
|
11 | return /^[^.]/.test(name);
|
12 | }
|
13 | class 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 |
|
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 | ;
|
69 | module.exports = WatcherAdapter;
|
70 |
|
\ | No newline at end of file |