export const LEGEND = `<
Legend
Declarations
Module
Bootstrap
Providers
Exports
>`; const loopBlock = (symbols, attrs, edge = '') => { let str = ''; if (edge === '->') { str = ` {{~mod.${symbols} :_symbol}} {{?_symbol.alias}} "{{=_symbol.alias}}" -> "{{=mod.name}}" [${attrs}]; {{??_symbol.name}} "{{=_symbol.name}}" -> "{{=mod.name}}" [${attrs}]; {{?}} {{~}} `; } else { str = ` {{~mod.${symbols} :_symbol}} {{?_symbol.alias}} "{{=_symbol.alias}}" [label="{{=_symbol.alias}}", ${attrs}]; {{??_symbol.name}} "{{=_symbol.name}}" [label="{{=_symbol.name}}", ${attrs}]; {{?}} {{~}}`; } return str; } export const DOT_TEMPLATE = ` digraph dependencies { node [shape="rect", style="filled", colorscheme=###scheme###]; ranksep=0.4; compound=false; remincross=true; splines=true; splines=ortho; rankdir=LR; rankdir=TB; rankdir=BT; label=###legend###; ratio=compress; fontname="sans-serif"; {{~it.modules :mod}} subgraph "cluster_{{=mod.name}}" { label=""; style="dotted"; node [shape="folder", fillcolor=1]; /* declarations:start */ subgraph cluster_{{=mod.name}}_declarations { style="solid"; node [style="filled", shape="rect"]; {{~mod.declarations :declaration}} node [fillcolor=2]; "{{=declaration.name}}"; {{~}} } {{~mod.declarations :declaration}} "{{=declaration.name}}" -> "{{=mod.name}}" [style="solid", lhead="cluster_{{=mod.name}}" ltail="cluster_{{=mod.name}}_declarations"]; subgraph "cluster_{{=mod.name}}_{{=declaration.name}}_providers" { style="solid"; {{~declaration.providers :prov}} node [fillcolor=6, shape="oval", style="filled"]; "{{=prov.name}}" -> "{{=declaration.name}}" [lhead="cluster_{{=mod.name}}_declarations" ltail="cluster_{{=mod.name}}_{{=declaration.name}}_providers"]; {{~}} } {{~}} /* declarations:end */ /* imports:start */ subgraph cluster_{{=mod.name}}_imports { style="solid"; node [style="filled", fillcolor=1, shape="rect"]; ${ loopBlock( 'imports', 'shape="folder"' ) } } ${ loopBlock( 'imports', 'lhead="cluster_{{=mod.name}}", ltail="cluster_{{=mod.name}}_imports"', '->' ) } /* imports:end */ /* exports:start */ subgraph cluster_{{=mod.name}}_exports { style="solid"; node [style="filled", fillcolor=4, shape="rect"]; {{~mod.exports :exp}} "{{=exp.name}} " [label="{{=exp.name}} ", shape="rect"] {{~}} } {{~mod.exports :exp}} "{{=mod.name}}" -> "{{=exp.name}} " [style="dashed", ltail="cluster_{{=mod.name}}" lhead="cluster_{{=mod.name}}_exports"]; {{~}} /* exports:end */ /* bootstrap:start */ subgraph cluster_{{=mod.name}}_bootstrap { style="solid"; node [style="filled", fillcolor=5, shape="rect"]; {{~mod.bootstrap :bts}} "{{=bts.name}} " [label="{{=bts.name}} ", shape="rect"] {{~}} } {{~mod.bootstrap :bts}} "{{=mod.name}}" -> "{{=bts.name}} " [style="dotted", lhead="cluster_{{=mod.name}}_bootstrap" ltail="cluster_{{=mod.name}}"]; {{~}} /* bootstrap:end */ /* providers:start */ subgraph cluster_{{=mod.name}}_providers { style="solid"; node [style="filled", fillcolor=6, shape="rect"]; ${ loopBlock( 'providers', 'shape="oval"' ) } } ${ loopBlock( 'providers', 'lhead="cluster_{{=mod.name}}", ltail="cluster_{{=mod.name}}_providers"', '->' ) } /* providers:end */ } {{~}} /* ${LEGEND} */ } `;