Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/tools/sass-variable-explainer/get-dependencies.ts
6433 views
1
import { walk } from "./ast-utils.ts";
2
// import { assert } from "jsr:@std/assert";
3
4
const assert = (condition: any) => {
5
if (!condition) {
6
throw new Error("Assertion failed");
7
}
8
}
9
10
export const getVariableDependencies = (declarations: Map<string, any>) => {
11
const dependencies = new Map<string, {
12
node: any,
13
dependencies: Set<string>
14
}>();
15
for (const [name, node] of declarations) {
16
assert(node?.type === "declaration");
17
const varName = node?.property?.variable?.value;
18
assert(varName === name);
19
if (!dependencies.has(varName)) {
20
dependencies.set(varName, {node: node, dependencies: new Set()});
21
}
22
const varValue = node?.value;
23
walk(varValue, (inner: any) => {
24
if (inner?.type === "variable") {
25
const innerName = inner?.value;
26
if (!innerName) {
27
console.log(inner);
28
throw new Error("stop")
29
}
30
dependencies.get(varName)!.dependencies.add(innerName);
31
}
32
return true;
33
});
34
}
35
return dependencies;
36
}
37