UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

56 lines 7.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const graphlib_1 = require("graphlib"); class ModulesGraph { constructor() { this.graph = new graphlib_1.Graph(); } _updateChildren(node, cache) { const cached = cache[node]; if (!cached) return; const outEdges = this.graph.outEdges(node) || []; outEdges.forEach(edge => this.graph.removeEdge(edge.v, edge.w)); const children = cached && cached.children.map(child => child.id); if (!children) return; children.filter(child => child.indexOf('node_modules') === -1) .forEach(child => { this.addNode(child, cache); this.graph.setEdge(node, child); }); } addNode(node, cache) { if (this.graph.hasNode(node)) return; const cached = cache[node]; if (cached) this.graph.setNode(node); const parent = cached && cached.parent; if (parent && parent.id.indexOf('node_modules') < 0) { this.addNode(parent.id, cache); this.graph.setEdge(parent.id, node); } this._updateChildren(node, cache); } build(cache, nodes) { nodes.forEach(node => this.addNode(node, cache, true)); } rebuildNode(cache, node) { this._updateChildren(node, cache); } clearParentsCache(cache, node) { if (!cache[node]) return; cache[node] = null; const parentEdges = this.graph.inEdges(node); if (!parentEdges || !parentEdges.length) return; parentEdges .map(edge => edge.v) .forEach(parent => this.clearParentsCache(cache, parent)); } } exports.default = ModulesGraph; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlcy1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXZlL2ZpbGUtd2F0Y2hlci9tb2R1bGVzLWdyYXBoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBQWlDO0FBRWpDLE1BQXFCLFlBQVk7SUFDN0I7UUFDSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZ0JBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlLENBQUUsSUFBSSxFQUFFLEtBQUs7UUFDeEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxNQUFNO1lBQ1AsT0FBTztRQUVYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVqRCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPLENBQUUsSUFBSSxFQUFFLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDeEIsT0FBTztRQUVYLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLE1BQU07WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUV2QyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSyxDQUFFLEtBQUssRUFBRSxLQUFLO1FBQ2YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXLENBQUUsS0FBSyxFQUFFLElBQUk7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGlCQUFpQixDQUFFLEtBQUssRUFBRSxJQUFJO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1osT0FBTztRQUVYLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQ25DLE9BQU87UUFFWCxXQUFXO2FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNuQixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNKO0FBcEVELCtCQW9FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoIH0gZnJvbSAnZ3JhcGhsaWInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGVzR3JhcGgge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgdGhpcy5ncmFwaCA9IG5ldyBHcmFwaCgpO1xuICAgIH1cblxuICAgIF91cGRhdGVDaGlsZHJlbiAobm9kZSwgY2FjaGUpIHtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGVbbm9kZV07XG5cbiAgICAgICAgaWYgKCFjYWNoZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgb3V0RWRnZXMgPSB0aGlzLmdyYXBoLm91dEVkZ2VzKG5vZGUpIHx8IFtdO1xuXG4gICAgICAgIG91dEVkZ2VzLmZvckVhY2goZWRnZSA9PiB0aGlzLmdyYXBoLnJlbW92ZUVkZ2UoZWRnZS52LCBlZGdlLncpKTtcblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNhY2hlZCAmJiBjYWNoZWQuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLmlkKTtcblxuICAgICAgICBpZiAoIWNoaWxkcmVuKSByZXR1cm47XG5cbiAgICAgICAgY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IGNoaWxkLmluZGV4T2YoJ25vZGVfbW9kdWxlcycpID09PSAtMSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE5vZGUoY2hpbGQsIGNhY2hlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoLnNldEVkZ2Uobm9kZSwgY2hpbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkTm9kZSAobm9kZSwgY2FjaGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JhcGguaGFzTm9kZShub2RlKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBjYWNoZWQgPSBjYWNoZVtub2RlXTtcblxuICAgICAgICBpZiAoY2FjaGVkKVxuICAgICAgICAgICAgdGhpcy5ncmFwaC5zZXROb2RlKG5vZGUpO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNhY2hlZCAmJiBjYWNoZWQucGFyZW50O1xuXG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmlkLmluZGV4T2YoJ25vZGVfbW9kdWxlcycpIDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hZGROb2RlKHBhcmVudC5pZCwgY2FjaGUpO1xuICAgICAgICAgICAgdGhpcy5ncmFwaC5zZXRFZGdlKHBhcmVudC5pZCwgbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVDaGlsZHJlbihub2RlLCBjYWNoZSk7XG4gICAgfVxuXG4gICAgYnVpbGQgKGNhY2hlLCBub2Rlcykge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gdGhpcy5hZGROb2RlKG5vZGUsIGNhY2hlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgcmVidWlsZE5vZGUgKGNhY2hlLCBub2RlKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNoaWxkcmVuKG5vZGUsIGNhY2hlKTtcbiAgICB9XG5cbiAgICBjbGVhclBhcmVudHNDYWNoZSAoY2FjaGUsIG5vZGUpIHtcbiAgICAgICAgaWYgKCFjYWNoZVtub2RlXSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYWNoZVtub2RlXSA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgcGFyZW50RWRnZXMgPSB0aGlzLmdyYXBoLmluRWRnZXMobm9kZSk7XG5cbiAgICAgICAgaWYgKCFwYXJlbnRFZGdlcyB8fCAhcGFyZW50RWRnZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHBhcmVudEVkZ2VzXG4gICAgICAgICAgICAubWFwKGVkZ2UgPT4gZWRnZS52KVxuICAgICAgICAgICAgLmZvckVhY2gocGFyZW50ID0+IHRoaXMuY2xlYXJQYXJlbnRzQ2FjaGUoY2FjaGUsIHBhcmVudCkpO1xuICAgIH1cbn1cbiJdfQ==