Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/src/resources/tools/ast-tracing/main.js
12922 views
1
import jsonpatch from "https://esm.sh/fast-json-patch";
2
import * as d3 from "https://esm.sh/d3@7";
3
// import YML from "https://esm.sh/json-to-pretty-yaml"; timing out, obnoxious
4
import YML from "https://cdn.skypack.dev/json-to-pretty-yaml";
5
6
import { convertDoc } from "./convert-pandoc-json.js";
7
8
const searchParams = new URLSearchParams(new URL(document.URL).search);
9
10
const data = await fetch(
11
searchParams.get("file") ?? "quarto-filter-trace.json"
12
);
13
const json = await data.json();
14
15
const drawTree = (data, summary) => {
16
const el = d3.select("#output").append("div");
17
const deets = el.append("details");
18
if (summary) {
19
deets.append("summary").text(summary);
20
}
21
deets.append("pre").text(YML.stringify(data));
22
return deets;
23
};
24
25
d3.select("#output").append("h2").text("Starting doc");
26
27
drawTree(convertDoc(json.data[0].doc), "Doc");
28
let isNoOp = true;
29
30
for (let i = 1; i < json.data.length; ++i) {
31
const ops = jsonpatch.compare(
32
convertDoc(json.data[i - 1].doc),
33
convertDoc(json.data[i].doc)
34
);
35
if (ops.length === 0) {
36
d3.select("#output")
37
.append("h2")
38
.text(`Filter: ${json.data[i].state} (no op)`);
39
if (!isNoOp) {
40
drawTree(convertDoc(json.data[i].doc), "Doc");
41
isNoOp = true;
42
}
43
continue;
44
}
45
isNoOp = false;
46
47
d3.select("#output").append("h2").text(`Filter: ${json.data[i].state}`);
48
drawTree(convertDoc(json.data[i].doc), "Doc");
49
drawTree(ops, "Ops")
50
.style("margin-bottom", "0.1em")
51
.style("margin-top", "0.1em");
52
}
53
54