Skip to content

Instantly share code, notes, and snippets.

@aztack
Created August 15, 2024 03:40
Show Gist options
  • Save aztack/dd609e86d53dc7174e1cd4230691d3d6 to your computer and use it in GitHub Desktop.
Save aztack/dd609e86d53dc7174e1cd4230691d3d6 to your computer and use it in GitHub Desktop.
Mermaid-querystring
// Function to generate Mermaid graph code from package.json files
async function generateGraph(files: string[]) {
let graph = "graph TD;\n";
for (const file of files) {
const packageJson = JSON.parse(fs.readFileSync(file, 'utf-8'));
const packageName = await hashId(packageJson.name, packageJson.version);
if (packageJson.dependencies) {
for (const dependency in packageJson.dependencies) {
if (excludePkgs.find(p => dependency === p)) {
continue;
}
const v = packageJson.dependencies[dependency].replace('^', '');
graph += ` ${packageName} --> ${await hashId(dependency, v)}\n`;
}
}
}
return graph;
}
// Function to compress the string using pako
function compressString(input: string): string {
const enc = new TextEncoder();
const compressed = pako.deflate(enc.encode(JSON.stringify({
autoSync: true,
mermaid: JSON.stringify({theme: 'default'}),
code: input,
pane: true,
editorMode: 'code',
rough: false,
updateDiagram: true
})), {level: 9 });
return Buffer.from(compressed).toString('base64');
}
// Main function to execute the script
async function main(rootDir: string) {
try {
const files = await globPackages(rootDir);
const graph = await generateGraph(files);
const compressedGraph = compressString(graph);
const url = `https://mermaid.live/edit#pako:${compressedGraph}`;
open(url);
console.log(`URL Opened: ${url}`);
} catch (error) {
console.error("Error:", error);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment