Skip to content

Instantly share code, notes, and snippets.

@4513ECHO
Created August 26, 2024 06:08
Show Gist options
  • Save 4513ECHO/8079bbce733d382bca5ce4321a34a527 to your computer and use it in GitHub Desktop.
Save 4513ECHO/8079bbce733d382bca5ce4321a34a527 to your computer and use it in GitHub Desktop.
Visualize dependency graph of deno
import { createGraph } from "jsr:@deno/graph@^0.81.3";
import { relative } from "jsr:@std/path@^1.0.2/relative";
import { resolve } from "jsr:@std/path@^1.0.2/resolve";
import { toFileUrl } from "jsr:@std/path@^1.0.2/to-file-url";
import { digraph, toDot } from "npm:ts-graphviz@^2.1.2";
const [entrypoint, baseDir] = Deno.args;
const graph = await createGraph(
toFileUrl(resolve(entrypoint)).href,
);
const resolved = graph.modules
.filter(({ specifier }) => !specifier.startsWith("https://"))
.map(({ specifier, dependencies }) => ({
specifier,
dependencies: dependencies
?.filter(({ specifier }) => !specifier.startsWith("jsr:"))
?.map(({ specifier, code, type }) => ({
specifier: code?.specifier ?? type?.specifier ?? specifier,
})),
}));
const root = toFileUrl(resolve(baseDir)).href;
const G = digraph("G", undefined, (g) => {
for (const { specifier: parent, dependencies } of resolved) {
const parentNode = g.node(relative(root, parent));
for (const { specifier } of dependencies ?? []) {
g.edge([parentNode, g.node(relative(root, specifier))]);
}
}
});
console.log(toDot(G));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment