UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

59 lines 7.35 kB
"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 WATCH_LOCKED_TIMEOUT = 700; class FileWatcher extends events_1.default { constructor(files) { super(); this.FILE_CHANGED_EVENT = 'file-changed'; this.watchers = {}; this.lockedFiles = {}; this.modulesGraph = null; this.lastChangedFiles = []; files.forEach(f => this.addFile(f)); } _onChanged(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); this.emit(this.FILE_CHANGED_EVENT, { file }); } _watch(file) { if (this.lockedFiles[file]) return; this.lockedFiles[file] = setTimeout(() => { this._onChanged(file); delete this.lockedFiles[file]; }, WATCH_LOCKED_TIMEOUT); } stop() { Object.values(this.watchers).forEach(watcher => { watcher.close(); }); } addFile(file) { if (!this.watchers[file] && file.indexOf('node_modules') < 0) { if (this.modulesGraph) { this.lastChangedFiles.push(file); this.modulesGraph.addNode(file, require.cache); } this.watchers[file] = fs_1.default.watch(file, () => this._watch(file)); } } } exports.default = FileWatcher; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl2ZS9maWxlLXdhdGNoZXIvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsNENBQW9CO0FBQ3BCLG9FQUEyQztBQUUzQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUVqQyxNQUFxQixXQUFZLFNBQVEsZ0JBQVk7SUFDakQsWUFBYSxLQUFLO1FBQ2QsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO1FBRXpDLElBQUksQ0FBQyxRQUFRLEdBQVcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQU8sSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFM0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsVUFBVSxDQUFFLElBQUk7UUFDWixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTVCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx1QkFBWSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7YUFDSTtZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNoRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sQ0FBRSxJQUFJO1FBQ1IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUN0QixPQUFPO1FBRVgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJO1FBQ0EsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPLENBQUUsSUFBSTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsRDtZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0wsQ0FBQztDQUNKO0FBM0RELDhCQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgTW9kdWxlc0dyYXBoIGZyb20gJy4vbW9kdWxlcy1ncmFwaCc7XG5cbmNvbnN0IFdBVENIX0xPQ0tFRF9USU1FT1VUID0gNzAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlV2F0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3IgKGZpbGVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5GSUxFX0NIQU5HRURfRVZFTlQgPSAnZmlsZS1jaGFuZ2VkJztcblxuICAgICAgICB0aGlzLndhdGNoZXJzICAgICAgICAgPSB7fTtcbiAgICAgICAgdGhpcy5sb2NrZWRGaWxlcyAgICAgID0ge307XG4gICAgICAgIHRoaXMubW9kdWxlc0dyYXBoICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMubGFzdENoYW5nZWRGaWxlcyA9IFtdO1xuXG4gICAgICAgIGZpbGVzLmZvckVhY2goZiA9PiB0aGlzLmFkZEZpbGUoZikpO1xuICAgIH1cblxuICAgIF9vbkNoYW5nZWQgKGZpbGUpIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSByZXF1aXJlLmNhY2hlO1xuXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzR3JhcGgpIHtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlc0dyYXBoID0gbmV3IE1vZHVsZXNHcmFwaCgpO1xuICAgICAgICAgICAgdGhpcy5tb2R1bGVzR3JhcGguYnVpbGQoY2FjaGUsIE9iamVjdC5rZXlzKHRoaXMud2F0Y2hlcnMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFzdENoYW5nZWRGaWxlcy5mb3JFYWNoKGNoYW5nZWRGaWxlID0+IHRoaXMubW9kdWxlc0dyYXBoLnJlYnVpbGROb2RlKGNhY2hlLCBjaGFuZ2VkRmlsZSkpO1xuICAgICAgICAgICAgdGhpcy5sYXN0Q2hhbmdlZEZpbGVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RDaGFuZ2VkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgdGhpcy5tb2R1bGVzR3JhcGguY2xlYXJQYXJlbnRzQ2FjaGUoY2FjaGUsIGZpbGUpO1xuXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLkZJTEVfQ0hBTkdFRF9FVkVOVCwgeyBmaWxlIH0pO1xuICAgIH1cblxuICAgIF93YXRjaCAoZmlsZSkge1xuICAgICAgICBpZiAodGhpcy5sb2NrZWRGaWxlc1tmaWxlXSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLmxvY2tlZEZpbGVzW2ZpbGVdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZWQoZmlsZSk7XG5cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxvY2tlZEZpbGVzW2ZpbGVdO1xuICAgICAgICB9LCBXQVRDSF9MT0NLRURfVElNRU9VVCk7XG4gICAgfVxuXG4gICAgc3RvcCAoKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy53YXRjaGVycykuZm9yRWFjaCh3YXRjaGVyID0+IHtcbiAgICAgICAgICAgIHdhdGNoZXIuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRmlsZSAoZmlsZSkge1xuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcnNbZmlsZV0gJiYgZmlsZS5pbmRleE9mKCdub2RlX21vZHVsZXMnKSA8IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZHVsZXNHcmFwaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdENoYW5nZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc0dyYXBoLmFkZE5vZGUoZmlsZSwgcmVxdWlyZS5jYWNoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMud2F0Y2hlcnNbZmlsZV0gPSBmcy53YXRjaChmaWxlLCAoKSA9PiB0aGlzLl93YXRjaChmaWxlKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=