"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const graphlib_1 = require("graphlib"); const node_modules_folder_name_1 = __importDefault(require("../../utils/node-modules-folder-name")); 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.includes(node_modules_folder_name_1.default)) .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.includes(node_modules_folder_name_1.default)) { 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlcy1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXZlL2ZpbGUtd2F0Y2hlci9tb2R1bGVzLWdyYXBoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdUNBQWlDO0FBQ2pDLG9HQUFnRTtBQUVoRSxNQUFxQixZQUFZO0lBQzdCO1FBQ0ksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGdCQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZUFBZSxDQUFFLElBQUksRUFBRSxLQUFLO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsTUFBTTtZQUNQLE9BQU87UUFFWCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFakQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUV0QixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGtDQUFZLENBQUMsQ0FBQzthQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTyxDQUFFLElBQUksRUFBRSxLQUFLO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ3hCLE9BQU87UUFFWCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsSUFBSSxNQUFNO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFdkMsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQ0FBWSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSyxDQUFFLEtBQUssRUFBRSxLQUFLO1FBQ2YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXLENBQUUsS0FBSyxFQUFFLElBQUk7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGlCQUFpQixDQUFFLEtBQUssRUFBRSxJQUFJO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1osT0FBTztRQUVYLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUNuQyxPQUFPO1FBRVgsV0FBVzthQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDSjtBQXBFRCwrQkFvRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaCB9IGZyb20gJ2dyYXBobGliJztcbmltcG9ydCBOT0RFX01PRFVMRVMgZnJvbSAnLi4vLi4vdXRpbHMvbm9kZS1tb2R1bGVzLWZvbGRlci1uYW1lJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlc0dyYXBoIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHRoaXMuZ3JhcGggPSBuZXcgR3JhcGgoKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ2hpbGRyZW4gKG5vZGUsIGNhY2hlKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IGNhY2hlW25vZGVdO1xuXG4gICAgICAgIGlmICghY2FjaGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG91dEVkZ2VzID0gdGhpcy5ncmFwaC5vdXRFZGdlcyhub2RlKSB8fCBbXTtcblxuICAgICAgICBvdXRFZGdlcy5mb3JFYWNoKGVkZ2UgPT4gdGhpcy5ncmFwaC5yZW1vdmVFZGdlKGVkZ2UudiwgZWRnZS53KSk7XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjYWNoZWQgJiYgY2FjaGVkLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC5pZCk7XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbikgcmV0dXJuO1xuXG4gICAgICAgIGNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiAhY2hpbGQuaW5jbHVkZXMoTk9ERV9NT0RVTEVTKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE5vZGUoY2hpbGQsIGNhY2hlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoLnNldEVkZ2Uobm9kZSwgY2hpbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkTm9kZSAobm9kZSwgY2FjaGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JhcGguaGFzTm9kZShub2RlKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBjYWNoZWQgPSBjYWNoZVtub2RlXTtcblxuICAgICAgICBpZiAoY2FjaGVkKVxuICAgICAgICAgICAgdGhpcy5ncmFwaC5zZXROb2RlKG5vZGUpO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNhY2hlZCAmJiBjYWNoZWQucGFyZW50O1xuXG4gICAgICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5pZC5pbmNsdWRlcyhOT0RFX01PRFVMRVMpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZE5vZGUocGFyZW50LmlkLCBjYWNoZSk7XG4gICAgICAgICAgICB0aGlzLmdyYXBoLnNldEVkZ2UocGFyZW50LmlkLCBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUNoaWxkcmVuKG5vZGUsIGNhY2hlKTtcbiAgICB9XG5cbiAgICBidWlsZCAoY2FjaGUsIG5vZGVzKSB7XG4gICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB0aGlzLmFkZE5vZGUobm9kZSwgY2FjaGUsIHRydWUpKTtcbiAgICB9XG5cbiAgICByZWJ1aWxkTm9kZSAoY2FjaGUsIG5vZGUpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4obm9kZSwgY2FjaGUpO1xuICAgIH1cblxuICAgIGNsZWFyUGFyZW50c0NhY2hlIChjYWNoZSwgbm9kZSkge1xuICAgICAgICBpZiAoIWNhY2hlW25vZGVdKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGRlbGV0ZSBjYWNoZVtub2RlXTtcblxuICAgICAgICBjb25zdCBwYXJlbnRFZGdlcyA9IHRoaXMuZ3JhcGguaW5FZGdlcyhub2RlKTtcblxuICAgICAgICBpZiAoIXBhcmVudEVkZ2VzIHx8ICFwYXJlbnRFZGdlcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgcGFyZW50RWRnZXNcbiAgICAgICAgICAgIC5tYXAoZWRnZSA9PiBlZGdlLnYpXG4gICAgICAgICAgICAuZm9yRWFjaChwYXJlbnQgPT4gdGhpcy5jbGVhclBhcmVudHNDYWNoZShjYWNoZSwgcGFyZW50KSk7XG4gICAgfVxufVxuIl19