UNPKG

@thermopylae/lib.cache

Version:
41 lines (40 loc) 1.39 kB
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 };