diff --git a/init.lua b/init.lua index aaa175a..4c80372 100644 --- a/init.lua +++ b/init.lua @@ -74,4 +74,28 @@ function M.grep_engine_calls(source_string) return out end +-- Generates mermaid topology-block from manifest + engine_calls. +-- engine_calls: array from grep_engine_calls (presence determines engine-node). +-- Returns: mermaid-source-string (no markers - caller wraps). +function M.generate_topology_block(manifest, engine_calls) + local lines = {"graph LR"} + local self_node = string.format(' this["%s"]', manifest.id) + table.insert(lines, self_node) + + if manifest.deps then + for _, dep in ipairs(manifest.deps) do + local dep_var = string.gsub(dep.id, "[%-%.]", "_") + table.insert(lines, string.format(' %s["%s"]', dep_var, dep.id)) + table.insert(lines, string.format(' this --> %s', dep_var)) + end + end + + if engine_calls and #engine_calls > 0 then + table.insert(lines, ' engine["engine.*"]') + table.insert(lines, ' this --> engine') + end + + return table.concat(lines, "\n") +end + return M