@browserstack/testcafe
Version:
Automated browser testing for the modern web development stack.
56 lines • 7.12 kB
JavaScript
;
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;
delete cache[node];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlcy1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXZlL2ZpbGUtd2F0Y2hlci9tb2R1bGVzLWdyYXBoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBQWlDO0FBRWpDLE1BQXFCLFlBQVk7SUFDN0I7UUFDSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZ0JBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlLENBQUUsSUFBSSxFQUFFLEtBQUs7UUFDeEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxNQUFNO1lBQ1AsT0FBTztRQUVYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVqRCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRCLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPLENBQUUsSUFBSSxFQUFFLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDeEIsT0FBTztRQUVYLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLE1BQU07WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUV2QyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSyxDQUFFLEtBQUssRUFBRSxLQUFLO1FBQ2YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXLENBQUUsS0FBSyxFQUFFLElBQUk7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGlCQUFpQixDQUFFLEtBQUssRUFBRSxJQUFJO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1osT0FBTztRQUVYLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUNuQyxPQUFPO1FBRVgsV0FBVzthQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDSjtBQXBFRCwrQkFvRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaCB9IGZyb20gJ2dyYXBobGliJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlc0dyYXBoIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHRoaXMuZ3JhcGggPSBuZXcgR3JhcGgoKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ2hpbGRyZW4gKG5vZGUsIGNhY2hlKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlW25vZGVdO1xuXG4gICAgICAgIGlmICghY2FjaGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG91dEVkZ2VzID0gdGhpcy5ncmFwaC5vdXRFZGdlcyhub2RlKSB8fCBbXTtcblxuICAgICAgICBvdXRFZGdlcy5mb3JFYWNoKGVkZ2UgPT4gdGhpcy5ncmFwaC5yZW1vdmVFZGdlKGVkZ2UudiwgZWRnZS53KSk7XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjYWNoZWQgJiYgY2FjaGVkLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5pZCk7XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbikgcmV0dXJuO1xuXG4gICAgICAgIGNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5pbmRleE9mKCdub2RlX21vZHVsZXMnKSA9PT0gLTEpXG4gICAgICAgICAgICAuZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGROb2RlKGNoaWxkLCBjYWNoZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5zZXRFZGdlKG5vZGUsIGNoaWxkKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZE5vZGUgKG5vZGUsIGNhY2hlKSB7XG4gICAgICAgIGlmICh0aGlzLmdyYXBoLmhhc05vZGUobm9kZSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGVbbm9kZV07XG5cbiAgICAgICAgaWYgKGNhY2hlZClcbiAgICAgICAgICAgIHRoaXMuZ3JhcGguc2V0Tm9kZShub2RlKTtcblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjYWNoZWQgJiYgY2FjaGVkLnBhcmVudDtcblxuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5pZC5pbmRleE9mKCdub2RlX21vZHVsZXMnKSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTm9kZShwYXJlbnQuaWQsIGNhY2hlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGguc2V0RWRnZShwYXJlbnQuaWQsIG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4obm9kZSwgY2FjaGUpO1xuICAgIH1cblxuICAgIGJ1aWxkIChjYWNoZSwgbm9kZXMpIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHRoaXMuYWRkTm9kZShub2RlLCBjYWNoZSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIHJlYnVpbGROb2RlIChjYWNoZSwgbm9kZSkge1xuICAgICAgICB0aGlzLl91cGRhdGVDaGlsZHJlbihub2RlLCBjYWNoZSk7XG4gICAgfVxuXG4gICAgY2xlYXJQYXJlbnRzQ2FjaGUgKGNhY2hlLCBub2RlKSB7XG4gICAgICAgIGlmICghY2FjaGVbbm9kZV0pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZGVsZXRlIGNhY2hlW25vZGVdO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudEVkZ2VzID0gdGhpcy5ncmFwaC5pbkVkZ2VzKG5vZGUpO1xuXG4gICAgICAgIGlmICghcGFyZW50RWRnZXMgfHwgIXBhcmVudEVkZ2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBwYXJlbnRFZGdlc1xuICAgICAgICAgICAgLm1hcChlZGdlID0+IGVkZ2UudilcbiAgICAgICAgICAgIC5mb3JFYWNoKHBhcmVudCA9PiB0aGlzLmNsZWFyUGFyZW50c0NhY2hlKGNhY2hlLCBwYXJlbnQpKTtcbiAgICB9XG59XG4iXX0=