@thermopylae/lib.cache
Version:
41 lines (40 loc) • 1.39 kB
JavaScript
import { array } from '@thermopylae/lib.utils';
const DEPENDENCIES_SYM = Symbol('GRAPH_DEPENDENCIES_SYM');
const DEPENDENTS_SYM = Symbol('GRAPH_DEPENDENTS_SYM');
class DependencyGraph {
static NO_DEPENDENCIES = [];
removeNode(node) {
if (node[DEPENDENCIES_SYM]) {
for (const dependency of node[DEPENDENCIES_SYM]) {
array.removeInPlace(dependency[DEPENDENTS_SYM], node);
}
node[DEPENDENCIES_SYM] = undefined;
}
if (node[DEPENDENTS_SYM]) {
for (const dependent of node[DEPENDENTS_SYM]) {
array.removeInPlace(dependent[DEPENDENCIES_SYM], node);
}
node[DEPENDENTS_SYM] = undefined;
}
}
addDependency(from, to) {
DependencyGraph.dependencies(from).push(to);
DependencyGraph.dependents(to).push(from);
}
directDependenciesOf(node) {
return (node[DEPENDENCIES_SYM] || DependencyGraph.NO_DEPENDENCIES);
}
static dependencies(node) {
if (node[DEPENDENCIES_SYM] == null) {
node[DEPENDENCIES_SYM] = [];
}
return node[DEPENDENCIES_SYM];
}
static dependents(node) {
if (node[DEPENDENTS_SYM] == null) {
node[DEPENDENTS_SYM] = [];
}
return node[DEPENDENTS_SYM];
}
}
export { DependencyGraph, DEPENDENCIES_SYM, DEPENDENTS_SYM };