69 lines
8.5 KiB
JavaScript
69 lines
8.5 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const events_1 = __importDefault(require("events"));
|
|
const fs_1 = __importDefault(require("fs"));
|
|
const modules_graph_1 = __importDefault(require("./modules-graph"));
|
|
const node_modules_folder_name_1 = __importDefault(require("../../utils/node-modules-folder-name"));
|
|
const to_posix_path_1 = __importDefault(require("../../utils/to-posix-path"));
|
|
const WATCH_LOCKED_TIMEOUT = 700;
|
|
let instance = null;
|
|
const BABEL_PRESET_STAGE_2_MODULE_PATH = 'lib/compiler/babel/preset-stage-2.js';
|
|
class FileWatcher extends events_1.default {
|
|
constructor() {
|
|
super();
|
|
if (!instance) {
|
|
this.watchers = {};
|
|
this.lockedFiles = {};
|
|
this.modulesGraph = null;
|
|
this.lastChangedFiles = [];
|
|
instance = this;
|
|
}
|
|
return instance;
|
|
}
|
|
_onChanged(controller, file) {
|
|
const cache = require.cache;
|
|
if (!this.modulesGraph) {
|
|
this.modulesGraph = new modules_graph_1.default();
|
|
this.modulesGraph.build(cache, Object.keys(this.watchers));
|
|
}
|
|
else {
|
|
this.lastChangedFiles.forEach(changedFile => this.modulesGraph.rebuildNode(cache, changedFile));
|
|
this.lastChangedFiles = [];
|
|
}
|
|
this.lastChangedFiles.push(file);
|
|
this.modulesGraph.clearParentsCache(cache, file);
|
|
controller.runTests(true);
|
|
}
|
|
_watch(controller, file) {
|
|
if (this.lockedFiles[file])
|
|
return;
|
|
this.lockedFiles[file] = setTimeout(() => {
|
|
this._onChanged(controller, file);
|
|
delete this.lockedFiles[file];
|
|
}, WATCH_LOCKED_TIMEOUT);
|
|
}
|
|
stop() {
|
|
Object.values(this.watchers).forEach(watcher => {
|
|
watcher.close();
|
|
});
|
|
}
|
|
addFile(controller, file) {
|
|
if (this.watchers[file] || !FileWatcher.shouldWatchFile(file))
|
|
return;
|
|
if (this.modulesGraph) {
|
|
this.lastChangedFiles.push(file);
|
|
this.modulesGraph.addNode(file, require.cache);
|
|
}
|
|
this.watchers[file] = fs_1.default.watch(file, () => this._watch(controller, file));
|
|
}
|
|
static shouldWatchFile(file) {
|
|
return !file.includes(node_modules_folder_name_1.default) &&
|
|
!(0, to_posix_path_1.default)(file).includes(BABEL_PRESET_STAGE_2_MODULE_PATH);
|
|
}
|
|
}
|
|
exports.default = FileWatcher;
|
|
module.exports = exports.default;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl2ZS9maWxlLXdhdGNoZXIvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsNENBQW9CO0FBQ3BCLG9FQUEyQztBQUMzQyxvR0FBZ0U7QUFDaEUsOEVBQW9EO0FBRXBELE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRWpDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUVwQixNQUFNLGdDQUFnQyxHQUFHLHNDQUFzQyxDQUFDO0FBRWhGLE1BQXFCLFdBQVksU0FBUSxnQkFBWTtJQUNqRDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLElBQUksQ0FBQyxRQUFRLEdBQVcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLEdBQU8sSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFFM0IsUUFBUSxHQUFHLElBQUksQ0FBQztTQUNuQjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxVQUFVLENBQUUsVUFBVSxFQUFFLElBQUk7UUFDeEIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksdUJBQVksRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzlEO2FBQ0k7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztTQUM5QjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakQsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFFLFVBQVUsRUFBRSxJQUFJO1FBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDdEIsT0FBTztRQUVYLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUk7UUFDQSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sQ0FBRSxVQUFVLEVBQUUsSUFBSTtRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN6RCxPQUFPO1FBRVgsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBRSxJQUFJO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtDQUFZLENBQUM7WUFDL0IsQ0FBQyxJQUFBLHVCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNKO0FBbkVELDhCQW1FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgTW9kdWxlc0dyYXBoIGZyb20gJy4vbW9kdWxlcy1ncmFwaCc7XG5pbXBvcnQgTk9ERV9NT0RVTEVTIGZyb20gJy4uLy4uL3V0aWxzL25vZGUtbW9kdWxlcy1mb2xkZXItbmFtZSc7XG5pbXBvcnQgdG9Qb3NpeFBhdGggZnJvbSAnLi4vLi4vdXRpbHMvdG8tcG9zaXgtcGF0aCc7XG5cbmNvbnN0IFdBVENIX0xPQ0tFRF9USU1FT1VUID0gNzAwO1xuXG5sZXQgaW5zdGFuY2UgPSBudWxsO1xuXG5jb25zdCBCQUJFTF9QUkVTRVRfU1RBR0VfMl9NT0RVTEVfUEFUSCA9ICdsaWIvY29tcGlsZXIvYmFiZWwvcHJlc2V0LXN0YWdlLTIuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlV2F0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMud2F0Y2hlcnMgICAgICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5sb2NrZWRGaWxlcyAgICAgID0ge307XG4gICAgICAgICAgICB0aGlzLm1vZHVsZXNHcmFwaCAgICAgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sYXN0Q2hhbmdlZEZpbGVzID0gW107XG5cbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBfb25DaGFuZ2VkIChjb250cm9sbGVyLCBmaWxlKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gcmVxdWlyZS5jYWNoZTtcblxuICAgICAgICBpZiAoIXRoaXMubW9kdWxlc0dyYXBoKSB7XG4gICAgICAgICAgICB0aGlzLm1vZHVsZXNHcmFwaCA9IG5ldyBNb2R1bGVzR3JhcGgoKTtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlc0dyYXBoLmJ1aWxkKGNhY2hlLCBPYmplY3Qua2V5cyh0aGlzLndhdGNoZXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RDaGFuZ2VkRmlsZXMuZm9yRWFjaChjaGFuZ2VkRmlsZSA9PiB0aGlzLm1vZHVsZXNHcmFwaC5yZWJ1aWxkTm9kZShjYWNoZSwgY2hhbmdlZEZpbGUpKTtcbiAgICAgICAgICAgIHRoaXMubGFzdENoYW5nZWRGaWxlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0Q2hhbmdlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIHRoaXMubW9kdWxlc0dyYXBoLmNsZWFyUGFyZW50c0NhY2hlKGNhY2hlLCBmaWxlKTtcblxuICAgICAgICBjb250cm9sbGVyLnJ1blRlc3RzKHRydWUpO1xuICAgIH1cblxuICAgIF93YXRjaCAoY29udHJvbGxlciwgZmlsZSkge1xuICAgICAgICBpZiAodGhpcy5sb2NrZWRGaWxlc1tmaWxlXSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLmxvY2tlZEZpbGVzW2ZpbGVdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZWQoY29udHJvbGxlciwgZmlsZSk7XG5cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxvY2tlZEZpbGVzW2ZpbGVdO1xuICAgICAgICB9LCBXQVRDSF9MT0NLRURfVElNRU9VVCk7XG4gICAgfVxuXG4gICAgc3RvcCAoKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy53YXRjaGVycykuZm9yRWFjaCh3YXRjaGVyID0+IHtcbiAgICAgICAgICAgIHdhdGNoZXIuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRmlsZSAoY29udHJvbGxlciwgZmlsZSkge1xuICAgICAgICBpZiAodGhpcy53YXRjaGVyc1tmaWxlXSB8fCAhRmlsZVdhdGNoZXIuc2hvdWxkV2F0Y2hGaWxlKGZpbGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXNHcmFwaCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0Q2hhbmdlZEZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICB0aGlzLm1vZHVsZXNHcmFwaC5hZGROb2RlKGZpbGUsIHJlcXVpcmUuY2FjaGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YXRjaGVyc1tmaWxlXSA9IGZzLndhdGNoKGZpbGUsICgpID0+IHRoaXMuX3dhdGNoKGNvbnRyb2xsZXIsIGZpbGUpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvdWxkV2F0Y2hGaWxlIChmaWxlKSB7XG4gICAgICAgIHJldHVybiAhZmlsZS5pbmNsdWRlcyhOT0RFX01PRFVMRVMpICYmXG4gICAgICAgICAgICAhdG9Qb3NpeFBhdGgoZmlsZSkuaW5jbHVkZXMoQkFCRUxfUFJFU0VUX1NUQUdFXzJfTU9EVUxFX1BBVEgpO1xuICAgIH1cbn1cbiJdfQ==
|