summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js
diff options
context:
space:
mode:
authorShipwreckt <me@shipwreckt.co.uk>2025-10-31 20:02:14 +0000
committerShipwreckt <me@shipwreckt.co.uk>2025-10-31 20:02:14 +0000
commit7a52ddeba2a68388b544f529d2d92104420f77b0 (patch)
tree15ddd47457a2cb4a96060747437d36474e4f6b4e /node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js
parent53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff)
Changed from static to 11ty!
Diffstat (limited to 'node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js')
-rw-r--r--node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js b/node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js
new file mode 100644
index 0000000..628b911
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/Data/ComputedDataQueue.js
@@ -0,0 +1,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;