Path: blob/main/src/resources/tools/ast-tracing/main.js
12922 views
import jsonpatch from "https://esm.sh/fast-json-patch";1import * as d3 from "https://esm.sh/d3@7";2// import YML from "https://esm.sh/json-to-pretty-yaml"; timing out, obnoxious3import YML from "https://cdn.skypack.dev/json-to-pretty-yaml";45import { convertDoc } from "./convert-pandoc-json.js";67const searchParams = new URLSearchParams(new URL(document.URL).search);89const data = await fetch(10searchParams.get("file") ?? "quarto-filter-trace.json"11);12const json = await data.json();1314const drawTree = (data, summary) => {15const el = d3.select("#output").append("div");16const deets = el.append("details");17if (summary) {18deets.append("summary").text(summary);19}20deets.append("pre").text(YML.stringify(data));21return deets;22};2324d3.select("#output").append("h2").text("Starting doc");2526drawTree(convertDoc(json.data[0].doc), "Doc");27let isNoOp = true;2829for (let i = 1; i < json.data.length; ++i) {30const ops = jsonpatch.compare(31convertDoc(json.data[i - 1].doc),32convertDoc(json.data[i].doc)33);34if (ops.length === 0) {35d3.select("#output")36.append("h2")37.text(`Filter: ${json.data[i].state} (no op)`);38if (!isNoOp) {39drawTree(convertDoc(json.data[i].doc), "Doc");40isNoOp = true;41}42continue;43}44isNoOp = false;4546d3.select("#output").append("h2").text(`Filter: ${json.data[i].state}`);47drawTree(convertDoc(json.data[i].doc), "Doc");48drawTree(ops, "Ops")49.style("margin-bottom", "0.1em")50.style("margin-top", "0.1em");51}525354