UNPKG

@browserstack/testcafe

Version:

Automated browser testing for the modern web development stack.

62 lines 7.45 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; let instance = null; 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] && 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(controller, file)); } } } exports.default = FileWatcher; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl2ZS9maWxlLXdhdGNoZXIvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsNENBQW9CO0FBQ3BCLG9FQUEyQztBQUUzQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUVqQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFFcEIsTUFBcUIsV0FBWSxTQUFRLGdCQUFZO0lBQ2pEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBVyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBTyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUUzQixRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ25CO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVUsQ0FBRSxVQUFVLEVBQUUsSUFBSTtRQUN4QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTVCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx1QkFBWSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7YUFDSTtZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNoRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUUsVUFBVSxFQUFFLElBQUk7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUN0QixPQUFPO1FBRVgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRWxDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSTtRQUNBLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTyxDQUFFLFVBQVUsRUFBRSxJQUFJO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsRDtZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM3RTtJQUNMLENBQUM7Q0FDSjtBQTdERCw4QkE2REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IE1vZHVsZXNHcmFwaCBmcm9tICcuL21vZHVsZXMtZ3JhcGgnO1xuXG5jb25zdCBXQVRDSF9MT0NLRURfVElNRU9VVCA9IDcwMDtcblxubGV0IGluc3RhbmNlID0gbnVsbDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVdhdGNoZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLndhdGNoZXJzICAgICAgICAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubG9ja2VkRmlsZXMgICAgICA9IHt9O1xuICAgICAgICAgICAgdGhpcy5tb2R1bGVzR3JhcGggICAgID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGFzdENoYW5nZWRGaWxlcyA9IFtdO1xuXG4gICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgX29uQ2hhbmdlZCAoY29udHJvbGxlciwgZmlsZSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IHJlcXVpcmUuY2FjaGU7XG5cbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXNHcmFwaCkge1xuICAgICAgICAgICAgdGhpcy5tb2R1bGVzR3JhcGggPSBuZXcgTW9kdWxlc0dyYXBoKCk7XG4gICAgICAgICAgICB0aGlzLm1vZHVsZXNHcmFwaC5idWlsZChjYWNoZSwgT2JqZWN0LmtleXModGhpcy53YXRjaGVycykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYXN0Q2hhbmdlZEZpbGVzLmZvckVhY2goY2hhbmdlZEZpbGUgPT4gdGhpcy5tb2R1bGVzR3JhcGgucmVidWlsZE5vZGUoY2FjaGUsIGNoYW5nZWRGaWxlKSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RDaGFuZ2VkRmlsZXMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdENoYW5nZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICB0aGlzLm1vZHVsZXNHcmFwaC5jbGVhclBhcmVudHNDYWNoZShjYWNoZSwgZmlsZSk7XG5cbiAgICAgICAgY29udHJvbGxlci5ydW5UZXN0cyh0cnVlKTtcbiAgICB9XG5cbiAgICBfd2F0Y2ggKGNvbnRyb2xsZXIsIGZpbGUpIHtcbiAgICAgICAgaWYgKHRoaXMubG9ja2VkRmlsZXNbZmlsZV0pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5sb2NrZWRGaWxlc1tmaWxlXSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VkKGNvbnRyb2xsZXIsIGZpbGUpO1xuXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5sb2NrZWRGaWxlc1tmaWxlXTtcbiAgICAgICAgfSwgV0FUQ0hfTE9DS0VEX1RJTUVPVVQpO1xuICAgIH1cblxuICAgIHN0b3AgKCkge1xuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMud2F0Y2hlcnMpLmZvckVhY2god2F0Y2hlciA9PiB7XG4gICAgICAgICAgICB3YXRjaGVyLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZEZpbGUgKGNvbnRyb2xsZXIsIGZpbGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJzW2ZpbGVdICYmIGZpbGUuaW5kZXhPZignbm9kZV9tb2R1bGVzJykgPCAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2R1bGVzR3JhcGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RDaGFuZ2VkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNHcmFwaC5hZGROb2RlKGZpbGUsIHJlcXVpcmUuY2FjaGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLndhdGNoZXJzW2ZpbGVdID0gZnMud2F0Y2goZmlsZSwgKCkgPT4gdGhpcy5fd2F0Y2goY29udHJvbGxlciwgZmlsZSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19