summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js
blob: 628b91135bc5f8dc501db633e9a4560fbe820c8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { DepGraph as DependencyGraph } from "dependency-graph";

/* Keeps track of the dependency graph between computed data variables
 * Removes keys from the graph when they are computed.
 */
class ComputedDataQueue {
	constructor() {
		this.graph = new DependencyGraph();
	}

	getOrder() {
		return this.graph.overallOrder();
	}

	getOrderFor(name) {
		return this.graph.dependenciesOf(name);
	}

	getDependsOn(name) {
		return this.graph.dependantsOf(name);
	}

	isUsesStartsWith(name, prefix) {
		if (name.startsWith(prefix)) {
			return true;
		}
		return (
			this.graph.dependenciesOf(name).filter((entry) => {
				return entry.startsWith(prefix);
			}).length > 0
		);
	}

	addNode(name) {
		if (!this.graph.hasNode(name)) {
			this.graph.addNode(name);
		}
	}

	_uses(graph, name, varsUsed = []) {
		if (!graph.hasNode(name)) {
			graph.addNode(name);
		}

		for (let varUsed of varsUsed) {
			if (!graph.hasNode(varUsed)) {
				graph.addNode(varUsed);
			}
			graph.addDependency(name, varUsed);
		}
	}

	uses(name, varsUsed = []) {
		this._uses(this.graph, name, varsUsed);
	}

	markComputed(varsComputed = []) {
		for (let varComputed of varsComputed) {
			this.graph.removeNode(varComputed);
		}
	}
}

export default ComputedDataQueue;