docviz-builder 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +371 -0
- package/LICENSE +21 -0
- package/README.md +837 -0
- package/bin/docviz-mcp.mjs +10 -0
- package/bin/docviz.mjs +11 -0
- package/dist/build/builder.d.ts +62 -0
- package/dist/build/builder.d.ts.map +1 -0
- package/dist/build/builder.js +337 -0
- package/dist/build/builder.js.map +1 -0
- package/dist/build/diff.d.ts +64 -0
- package/dist/build/diff.d.ts.map +1 -0
- package/dist/build/diff.js +156 -0
- package/dist/build/diff.js.map +1 -0
- package/dist/build/doctor.d.ts +39 -0
- package/dist/build/doctor.d.ts.map +1 -0
- package/dist/build/doctor.js +190 -0
- package/dist/build/doctor.js.map +1 -0
- package/dist/build/init.d.ts +28 -0
- package/dist/build/init.d.ts.map +1 -0
- package/dist/build/init.js +274 -0
- package/dist/build/init.js.map +1 -0
- package/dist/build/preview.d.ts +13 -0
- package/dist/build/preview.d.ts.map +1 -0
- package/dist/build/preview.js +277 -0
- package/dist/build/preview.js.map +1 -0
- package/dist/build/skill.d.ts +41 -0
- package/dist/build/skill.d.ts.map +1 -0
- package/dist/build/skill.js +63 -0
- package/dist/build/skill.js.map +1 -0
- package/dist/build/verify.d.ts +26 -0
- package/dist/build/verify.d.ts.map +1 -0
- package/dist/build/verify.js +99 -0
- package/dist/build/verify.js.map +1 -0
- package/dist/cli.d.ts +20 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +427 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/load.d.ts +32 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +279 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/types.d.ts +89 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +5 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/cache.d.ts +32 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +69 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/errors.d.ts +115 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +164 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/hash.d.ts +57 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +0 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/package-version.d.ts +9 -0
- package/dist/core/package-version.d.ts.map +1 -0
- package/dist/core/package-version.js +44 -0
- package/dist/core/package-version.js.map +1 -0
- package/dist/core/paths.d.ts +46 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +105 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/registry.d.ts +24 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +72 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/types.d.ts +78 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +11 -0
- package/dist/core/types.js.map +1 -0
- package/dist/dsl/architecture.d.ts +15 -0
- package/dist/dsl/architecture.d.ts.map +1 -0
- package/dist/dsl/architecture.js +242 -0
- package/dist/dsl/architecture.js.map +1 -0
- package/dist/dsl/catalog.d.ts +62 -0
- package/dist/dsl/catalog.d.ts.map +1 -0
- package/dist/dsl/catalog.en.d.ts +18 -0
- package/dist/dsl/catalog.en.d.ts.map +1 -0
- package/dist/dsl/catalog.en.js +299 -0
- package/dist/dsl/catalog.en.js.map +1 -0
- package/dist/dsl/catalog.js +1082 -0
- package/dist/dsl/catalog.js.map +1 -0
- package/dist/dsl/chart.d.ts +14 -0
- package/dist/dsl/chart.d.ts.map +1 -0
- package/dist/dsl/chart.js +435 -0
- package/dist/dsl/chart.js.map +1 -0
- package/dist/dsl/compile.d.ts +31 -0
- package/dist/dsl/compile.d.ts.map +1 -0
- package/dist/dsl/compile.js +120 -0
- package/dist/dsl/compile.js.map +1 -0
- package/dist/dsl/diagram-bpmn.d.ts +13 -0
- package/dist/dsl/diagram-bpmn.d.ts.map +1 -0
- package/dist/dsl/diagram-bpmn.js +215 -0
- package/dist/dsl/diagram-bpmn.js.map +1 -0
- package/dist/dsl/diagram-product.d.ts +15 -0
- package/dist/dsl/diagram-product.d.ts.map +1 -0
- package/dist/dsl/diagram-product.js +291 -0
- package/dist/dsl/diagram-product.js.map +1 -0
- package/dist/dsl/diagram-technical.d.ts +28 -0
- package/dist/dsl/diagram-technical.d.ts.map +1 -0
- package/dist/dsl/diagram-technical.js +365 -0
- package/dist/dsl/diagram-technical.js.map +1 -0
- package/dist/dsl/diagram.d.ts +22 -0
- package/dist/dsl/diagram.d.ts.map +1 -0
- package/dist/dsl/diagram.js +542 -0
- package/dist/dsl/diagram.js.map +1 -0
- package/dist/dsl/fallbacks-d2.d.ts +27 -0
- package/dist/dsl/fallbacks-d2.d.ts.map +1 -0
- package/dist/dsl/fallbacks-d2.js +265 -0
- package/dist/dsl/fallbacks-d2.js.map +1 -0
- package/dist/dsl/fallbacks.d.ts +25 -0
- package/dist/dsl/fallbacks.d.ts.map +1 -0
- package/dist/dsl/fallbacks.js +264 -0
- package/dist/dsl/fallbacks.js.map +1 -0
- package/dist/dsl/fields.d.ts +93 -0
- package/dist/dsl/fields.d.ts.map +1 -0
- package/dist/dsl/fields.js +233 -0
- package/dist/dsl/fields.js.map +1 -0
- package/dist/dsl/index.d.ts +50 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +114 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl/util.d.ts +105 -0
- package/dist/dsl/util.d.ts.map +1 -0
- package/dist/dsl/util.js +261 -0
- package/dist/dsl/util.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown/scan.d.ts +73 -0
- package/dist/markdown/scan.d.ts.map +1 -0
- package/dist/markdown/scan.js +150 -0
- package/dist/markdown/scan.js.map +1 -0
- package/dist/markdown/transform.d.ts +28 -0
- package/dist/markdown/transform.d.ts.map +1 -0
- package/dist/markdown/transform.js +38 -0
- package/dist/markdown/transform.js.map +1 -0
- package/dist/mcp/server.d.ts +18 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +118 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +118 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +573 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/renderers/base.d.ts +18 -0
- package/dist/renderers/base.d.ts.map +1 -0
- package/dist/renderers/base.js +59 -0
- package/dist/renderers/base.js.map +1 -0
- package/dist/renderers/bpmn.d.ts +68 -0
- package/dist/renderers/bpmn.d.ts.map +1 -0
- package/dist/renderers/bpmn.js +158 -0
- package/dist/renderers/bpmn.js.map +1 -0
- package/dist/renderers/browser.d.ts +30 -0
- package/dist/renderers/browser.d.ts.map +1 -0
- package/dist/renderers/browser.js +143 -0
- package/dist/renderers/browser.js.map +1 -0
- package/dist/renderers/color-scheme.d.ts +40 -0
- package/dist/renderers/color-scheme.d.ts.map +1 -0
- package/dist/renderers/color-scheme.js +122 -0
- package/dist/renderers/color-scheme.js.map +1 -0
- package/dist/renderers/d2.d.ts +37 -0
- package/dist/renderers/d2.d.ts.map +1 -0
- package/dist/renderers/d2.js +108 -0
- package/dist/renderers/d2.js.map +1 -0
- package/dist/renderers/graphviz.d.ts +33 -0
- package/dist/renderers/graphviz.d.ts.map +1 -0
- package/dist/renderers/graphviz.js +88 -0
- package/dist/renderers/graphviz.js.map +1 -0
- package/dist/renderers/in-page.d.ts +33 -0
- package/dist/renderers/in-page.d.ts.map +1 -0
- package/dist/renderers/in-page.js +76 -0
- package/dist/renderers/in-page.js.map +1 -0
- package/dist/renderers/index.d.ts +20 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +94 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/kroki.d.ts +38 -0
- package/dist/renderers/kroki.d.ts.map +1 -0
- package/dist/renderers/kroki.js +151 -0
- package/dist/renderers/kroki.js.map +1 -0
- package/dist/renderers/likec4-svg.d.ts +82 -0
- package/dist/renderers/likec4-svg.d.ts.map +1 -0
- package/dist/renderers/likec4-svg.js +435 -0
- package/dist/renderers/likec4-svg.js.map +1 -0
- package/dist/renderers/likec4.d.ts +22 -0
- package/dist/renderers/likec4.d.ts.map +1 -0
- package/dist/renderers/likec4.js +77 -0
- package/dist/renderers/likec4.js.map +1 -0
- package/dist/renderers/mermaid.d.ts +64 -0
- package/dist/renderers/mermaid.d.ts.map +1 -0
- package/dist/renderers/mermaid.js +196 -0
- package/dist/renderers/mermaid.js.map +1 -0
- package/dist/renderers/plantuml.d.ts +56 -0
- package/dist/renderers/plantuml.d.ts.map +1 -0
- package/dist/renderers/plantuml.js +195 -0
- package/dist/renderers/plantuml.js.map +1 -0
- package/dist/renderers/svg-utils.d.ts +46 -0
- package/dist/renderers/svg-utils.d.ts.map +1 -0
- package/dist/renderers/svg-utils.js +439 -0
- package/dist/renderers/svg-utils.js.map +1 -0
- package/dist/renderers/svgbob.d.ts +26 -0
- package/dist/renderers/svgbob.d.ts.map +1 -0
- package/dist/renderers/svgbob.js +70 -0
- package/dist/renderers/svgbob.js.map +1 -0
- package/dist/renderers/vega-lite.d.ts +18 -0
- package/dist/renderers/vega-lite.d.ts.map +1 -0
- package/dist/renderers/vega-lite.js +94 -0
- package/dist/renderers/vega-lite.js.map +1 -0
- package/dist/themes/index.d.ts +17 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +419 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/types.d.ts +99 -0
- package/dist/themes/types.d.ts.map +1 -0
- package/dist/themes/types.js +9 -0
- package/dist/themes/types.js.map +1 -0
- package/eval/casos.json +513 -0
- package/package.json +114 -0
- package/scripts/capture-preview.mjs +101 -0
- package/scripts/check-github.mjs +128 -0
- package/scripts/eval.d.mts +8 -0
- package/scripts/eval.mjs +284 -0
- package/scripts/fetch-plantuml.mjs +122 -0
- package/scripts/generate-catalog-doc.mjs +106 -0
- package/scripts/rasterize.mjs +68 -0
- package/scripts/sync-docs.mjs +158 -0
- package/skills/docviz/SKILL.md +111 -0
- package/vendor/.gitkeep +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Despacho de compiladores: (tipo, motor) -> fuente.
|
|
3
|
+
*
|
|
4
|
+
* Es la union entre el catalogo, que declara la intencion, y los compiladores,
|
|
5
|
+
* que hablan el idioma de cada motor. Un tipo con respaldo aparece aqui dos
|
|
6
|
+
* veces, una por cada motor, porque el respaldo no es reenviar el mismo texto:
|
|
7
|
+
* hay que compilarlo de nuevo.
|
|
8
|
+
*/
|
|
9
|
+
import { ERROR_CODES } from '../core/errors.js';
|
|
10
|
+
import { fail } from './util.js';
|
|
11
|
+
import { findType, TYPE_CATALOG } from './catalog.js';
|
|
12
|
+
import { activityDiagram, beforeAfter, capabilityMap, classDiagram, dependencyGraph, flowchart, gantt, matrix2x2, operatingModel, pillars, roadmap, sequence, stateDiagram, tree, valueChain, } from './diagram.js';
|
|
13
|
+
import { componentDiagram, deployment, entityRelationship, jsonTree, plantUmlGantt, plantUmlMindmap, useCase, wireframe, workBreakdown, yamlTree, } from './diagram-technical.js';
|
|
14
|
+
import { block, gitGraph, journey, kanban, mindmap, quadrant, radar, sankey, treemap, } from './diagram-product.js';
|
|
15
|
+
import { asciiArt, bpmn } from './diagram-bpmn.js';
|
|
16
|
+
import { architectureC4, d2Flow, mermaidErd, mermaidTimeline } from './fallbacks.js';
|
|
17
|
+
import { d2Class, d2Component, d2Deployment, d2Sequence, d2State, d2UseCase, d2Wbs, } from './fallbacks-d2.js';
|
|
18
|
+
import { architectureLikeC4 } from './architecture.js';
|
|
19
|
+
import { compileChartOfType } from './chart.js';
|
|
20
|
+
/**
|
|
21
|
+
* Compiladores por tipo y motor.
|
|
22
|
+
*
|
|
23
|
+
* El motor listado como `engine` en el catalogo debe existir aqui; una prueba
|
|
24
|
+
* comprueba que catalogo y compiladores no se desincronicen.
|
|
25
|
+
*/
|
|
26
|
+
const COMPILERS = {
|
|
27
|
+
// UML
|
|
28
|
+
sequence: { plantuml: sequence, d2: d2Sequence },
|
|
29
|
+
class: { plantuml: classDiagram, d2: d2Class },
|
|
30
|
+
state: { plantuml: stateDiagram, d2: d2State },
|
|
31
|
+
activity: { plantuml: activityDiagram },
|
|
32
|
+
erd: { plantuml: entityRelationship, mermaid: mermaidErd },
|
|
33
|
+
'use-case': { plantuml: useCase, d2: d2UseCase },
|
|
34
|
+
component: { plantuml: componentDiagram, d2: d2Component },
|
|
35
|
+
deployment: { plantuml: deployment, d2: d2Deployment },
|
|
36
|
+
wireframe: { plantuml: wireframe },
|
|
37
|
+
json: { plantuml: jsonTree },
|
|
38
|
+
yaml: { plantuml: yamlTree },
|
|
39
|
+
wbs: { plantuml: workBreakdown, d2: d2Wbs },
|
|
40
|
+
// Flujos, tiempo y producto
|
|
41
|
+
flow: { mermaid: flowchart, d2: d2Flow },
|
|
42
|
+
gantt: { mermaid: gantt, plantuml: plantUmlGantt },
|
|
43
|
+
journey: { mermaid: journey },
|
|
44
|
+
'git-graph': { mermaid: gitGraph },
|
|
45
|
+
kanban: { mermaid: kanban },
|
|
46
|
+
quadrant: { mermaid: quadrant },
|
|
47
|
+
sankey: { mermaid: sankey },
|
|
48
|
+
treemap: { mermaid: treemap },
|
|
49
|
+
radar: { mermaid: radar },
|
|
50
|
+
mindmap: { mermaid: mindmap, plantuml: plantUmlMindmap },
|
|
51
|
+
block: { mermaid: block },
|
|
52
|
+
// Ejecutivos y dependencias
|
|
53
|
+
'strategy-tree': { d2: tree },
|
|
54
|
+
'issue-tree': { d2: tree },
|
|
55
|
+
'decision-tree': { d2: tree },
|
|
56
|
+
'strategy-pillars': { d2: pillars },
|
|
57
|
+
'capability-map': { d2: capabilityMap },
|
|
58
|
+
'operating-model': { d2: operatingModel },
|
|
59
|
+
'value-chain': { d2: valueChain },
|
|
60
|
+
'before-after': { d2: beforeAfter },
|
|
61
|
+
'matrix-2x2': { d2: matrix2x2 },
|
|
62
|
+
timeline: { d2: roadmap, mermaid: mermaidTimeline },
|
|
63
|
+
roadmap: { d2: roadmap },
|
|
64
|
+
'dependency-map': { graphviz: dependencyGraph },
|
|
65
|
+
// Notaciones especiales
|
|
66
|
+
bpmn: { bpmn },
|
|
67
|
+
ascii: { svgbob: asciiArt },
|
|
68
|
+
// Arquitectura
|
|
69
|
+
'c4-context': { likec4: architectureLikeC4, 'plantuml-c4': architectureC4 },
|
|
70
|
+
'c4-container': { likec4: architectureLikeC4, 'plantuml-c4': architectureC4 },
|
|
71
|
+
'c4-component': { likec4: architectureLikeC4, 'plantuml-c4': architectureC4 },
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Decide que motor usar y compila.
|
|
75
|
+
*
|
|
76
|
+
* `isAvailable` permite al llamador informar de que motores estan registrados;
|
|
77
|
+
* si el preferido no lo esta, se prueba con los respaldos declarados.
|
|
78
|
+
*/
|
|
79
|
+
export function compileType(doc, typeName, isAvailable) {
|
|
80
|
+
const spec = findType(typeName);
|
|
81
|
+
if (spec === undefined) {
|
|
82
|
+
fail(`el tipo "${typeName}" no existe`, `tipos disponibles: ${TYPE_CATALOG.map((s) => s.type).sort().join(', ')}`, ERROR_CODES.DSL_TYPE);
|
|
83
|
+
}
|
|
84
|
+
const byEngine = COMPILERS[spec.type];
|
|
85
|
+
if (byEngine === undefined) {
|
|
86
|
+
fail(`el tipo "${spec.type}" esta en el catalogo pero no tiene compilador`);
|
|
87
|
+
}
|
|
88
|
+
const candidates = [spec.engine, ...(spec.fallbacks ?? [])];
|
|
89
|
+
const usable = candidates.filter((engine) => byEngine[engine] !== undefined);
|
|
90
|
+
const chosen = usable.find((engine) => isAvailable(engine));
|
|
91
|
+
if (chosen === undefined) {
|
|
92
|
+
const alternatives = usable.length > 1 ? ` (respaldos: ${usable.slice(1).join(', ')})` : '';
|
|
93
|
+
fail(`el tipo "${spec.type}" necesita el motor ${spec.engine}${alternatives}, y no hay ninguno disponible`, 'habilita ese renderer en docviz.config.yaml o instala lo que necesita: Java para PlantUML, un Chromium para Mermaid y BPMN', ERROR_CODES.RENDERER_UNAVAILABLE);
|
|
94
|
+
}
|
|
95
|
+
return { engine: chosen, source: byEngine[chosen](doc), spec };
|
|
96
|
+
}
|
|
97
|
+
/** Compila un grafico, que siempre se resuelve con Vega-Lite. */
|
|
98
|
+
export function compileChartType(doc, typeName) {
|
|
99
|
+
const spec = findType(typeName);
|
|
100
|
+
if (spec === undefined || spec.lang !== 'chart') {
|
|
101
|
+
fail(`el tipo de grafico "${typeName}" no existe`, `tipos disponibles: ${TYPE_CATALOG.filter((s) => s.lang === 'chart').map((s) => s.type).sort().join(', ')}`, ERROR_CODES.DSL_TYPE);
|
|
102
|
+
}
|
|
103
|
+
return { engine: spec.engine, source: compileChartOfType(doc, spec.type), spec };
|
|
104
|
+
}
|
|
105
|
+
/** Tipos que tienen compilador para el motor indicado. */
|
|
106
|
+
export function typesForEngine(engine) {
|
|
107
|
+
return Object.entries(COMPILERS)
|
|
108
|
+
.filter(([, byEngine]) => byEngine[engine] !== undefined)
|
|
109
|
+
.map(([type]) => type)
|
|
110
|
+
.sort();
|
|
111
|
+
}
|
|
112
|
+
/** Nombres de tipo que tienen compilador, para comprobar la sincronia. */
|
|
113
|
+
export function compiledTypeNames() {
|
|
114
|
+
return Object.keys(COMPILERS).sort();
|
|
115
|
+
}
|
|
116
|
+
/** Motores declarados en el mapa de compiladores. */
|
|
117
|
+
export function compilerEngines(type) {
|
|
118
|
+
return Object.keys(COMPILERS[type] ?? {});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/dsl/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compilador de BPMN.
|
|
3
|
+
*
|
|
4
|
+
* BPMN 2.0 separa el proceso (que pasa) de su diagrama (donde se dibuja cada
|
|
5
|
+
* cosa), y el segundo exige coordenadas explicitas para cada figura y cada
|
|
6
|
+
* punto de cada flecha. Escribir eso a mano es inviable, asi que aqui se
|
|
7
|
+
* calcula un trazado de izquierda a derecha y las compuertas abren una fila
|
|
8
|
+
* adicional por debajo.
|
|
9
|
+
*/
|
|
10
|
+
export declare function bpmn(doc: Record<string, unknown>): string;
|
|
11
|
+
/** Arte ASCII: el motor lo consume tal cual, solo se valida que exista. */
|
|
12
|
+
export declare function asciiArt(doc: Record<string, unknown>): string;
|
|
13
|
+
//# sourceMappingURL=diagram-bpmn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-bpmn.d.ts","sourceRoot":"","sources":["../../src/dsl/diagram-bpmn.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4CH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA0GzD;AAyHD,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAU7D"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compilador de BPMN.
|
|
3
|
+
*
|
|
4
|
+
* BPMN 2.0 separa el proceso (que pasa) de su diagrama (donde se dibuja cada
|
|
5
|
+
* cosa), y el segundo exige coordenadas explicitas para cada figura y cada
|
|
6
|
+
* punto de cada flecha. Escribir eso a mano es inviable, asi que aqui se
|
|
7
|
+
* calcula un trazado de izquierda a derecha y las compuertas abren una fila
|
|
8
|
+
* adicional por debajo.
|
|
9
|
+
*/
|
|
10
|
+
import { fail } from './util.js';
|
|
11
|
+
import { asRecord, optionalArray, optionalString, requireArray, requireString } from './util.js';
|
|
12
|
+
const START_SIZE = 36;
|
|
13
|
+
const END_SIZE = 36;
|
|
14
|
+
const TASK_WIDTH = 110;
|
|
15
|
+
const TASK_HEIGHT = 80;
|
|
16
|
+
const GATEWAY_SIZE = 50;
|
|
17
|
+
const GAP = 55;
|
|
18
|
+
const ROW_HEIGHT = 130;
|
|
19
|
+
const ORIGIN_X = 60;
|
|
20
|
+
const ORIGIN_Y = 80;
|
|
21
|
+
export function bpmn(doc) {
|
|
22
|
+
const rawFlow = requireArray(doc['flow'] ?? doc['pasos'], 'diagram.flow');
|
|
23
|
+
let counter = 0;
|
|
24
|
+
const nextId = (prefix) => `${prefix}_${(counter += 1)}`;
|
|
25
|
+
const parseSteps = (items, field) => items.map((raw) => {
|
|
26
|
+
const record = typeof raw === 'string' ? { task: raw } : asRecord(raw, field);
|
|
27
|
+
for (const kind of ['start', 'task', 'end']) {
|
|
28
|
+
const name = optionalString(record, kind);
|
|
29
|
+
if (name !== undefined)
|
|
30
|
+
return { kind, id: nextId(kind), name };
|
|
31
|
+
}
|
|
32
|
+
const gateway = optionalString(record, 'gateway');
|
|
33
|
+
if (gateway !== undefined) {
|
|
34
|
+
const branches = [];
|
|
35
|
+
const yes = optionalArray(record['yes'] ?? record['si'], `${field}[].yes`);
|
|
36
|
+
const no = optionalArray(record['no'], `${field}[].no`);
|
|
37
|
+
if (yes.length === 0 && no.length === 0) {
|
|
38
|
+
fail(`la compuerta "${gateway}" no tiene ramas`, 'declara al menos `yes:` o `no:` con sus pasos');
|
|
39
|
+
}
|
|
40
|
+
if (yes.length > 0) {
|
|
41
|
+
branches.push({ label: optionalString(record, 'yesLabel') ?? 'si', steps: parseSteps(yes, `${field}[].yes`) });
|
|
42
|
+
}
|
|
43
|
+
if (no.length > 0) {
|
|
44
|
+
branches.push({ label: optionalString(record, 'noLabel') ?? 'no', steps: parseSteps(no, `${field}[].no`) });
|
|
45
|
+
}
|
|
46
|
+
return { kind: 'gateway', id: nextId('gw'), name: gateway, branches };
|
|
47
|
+
}
|
|
48
|
+
fail(`no se entiende el paso de ${field}`, 'cada paso es `start:`, `task:`, `gateway:` o `end:`\nejemplo: - task: Revisar solicitud');
|
|
49
|
+
});
|
|
50
|
+
const steps = parseSteps(rawFlow, 'diagram.flow');
|
|
51
|
+
if (steps.length === 0)
|
|
52
|
+
fail('diagram.flow debe declarar al menos un paso');
|
|
53
|
+
const shapes = [];
|
|
54
|
+
const flows = [];
|
|
55
|
+
/**
|
|
56
|
+
* Coloca una secuencia de pasos en una fila y devuelve el ultimo colocado.
|
|
57
|
+
* Cada compuerta empuja sus ramas a filas inferiores.
|
|
58
|
+
*/
|
|
59
|
+
const layout = (sequence, startX, row, incoming) => {
|
|
60
|
+
let x = startX;
|
|
61
|
+
let previous = incoming;
|
|
62
|
+
let last;
|
|
63
|
+
let maxRow = row;
|
|
64
|
+
const y = ORIGIN_Y + row * ROW_HEIGHT;
|
|
65
|
+
for (const step of sequence) {
|
|
66
|
+
const size = sizeOf(step.kind);
|
|
67
|
+
const shape = {
|
|
68
|
+
id: step.id,
|
|
69
|
+
kind: step.kind,
|
|
70
|
+
name: step.name,
|
|
71
|
+
x,
|
|
72
|
+
// Las figuras se centran respecto a la altura de la tarea.
|
|
73
|
+
y: y + (TASK_HEIGHT - size.height) / 2,
|
|
74
|
+
width: size.width,
|
|
75
|
+
height: size.height,
|
|
76
|
+
};
|
|
77
|
+
shapes.push(shape);
|
|
78
|
+
if (previous !== undefined) {
|
|
79
|
+
flows.push(connect(nextId('flow'), previous.shape, shape, previous.label));
|
|
80
|
+
}
|
|
81
|
+
previous = { shape };
|
|
82
|
+
last = shape;
|
|
83
|
+
x += size.width + GAP;
|
|
84
|
+
if (step.kind === 'gateway' && step.branches !== undefined) {
|
|
85
|
+
let branchRow = row;
|
|
86
|
+
let widest = x;
|
|
87
|
+
step.branches.forEach((branch, index) => {
|
|
88
|
+
// La primera rama continua en la fila actual; el resto baja una fila.
|
|
89
|
+
const targetRow = index === 0 ? row : (branchRow += 1);
|
|
90
|
+
const result = layout(branch.steps, x, targetRow, { shape, label: branch.label });
|
|
91
|
+
widest = Math.max(widest, result.nextX);
|
|
92
|
+
maxRow = Math.max(maxRow, result.maxRow);
|
|
93
|
+
if (index === 0) {
|
|
94
|
+
previous = result.last !== undefined ? { shape: result.last } : previous;
|
|
95
|
+
last = result.last ?? last;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
x = widest;
|
|
99
|
+
// Tras una compuerta, la secuencia principal ya la continuo la rama 0.
|
|
100
|
+
return { last, nextX: x, maxRow };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { last, nextX: x, maxRow };
|
|
104
|
+
};
|
|
105
|
+
layout(steps, ORIGIN_X, 0, undefined);
|
|
106
|
+
return buildXml(shapes, flows);
|
|
107
|
+
}
|
|
108
|
+
function sizeOf(kind) {
|
|
109
|
+
switch (kind) {
|
|
110
|
+
case 'start':
|
|
111
|
+
return { width: START_SIZE, height: START_SIZE };
|
|
112
|
+
case 'end':
|
|
113
|
+
return { width: END_SIZE, height: END_SIZE };
|
|
114
|
+
case 'gateway':
|
|
115
|
+
return { width: GATEWAY_SIZE, height: GATEWAY_SIZE };
|
|
116
|
+
default:
|
|
117
|
+
return { width: TASK_WIDTH, height: TASK_HEIGHT };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Traza la flecha entre dos figuras.
|
|
122
|
+
*
|
|
123
|
+
* En la misma fila basta una recta; si la figura destino esta mas abajo, se
|
|
124
|
+
* baja en vertical desde el centro del origen y luego se avanza en horizontal,
|
|
125
|
+
* que es como se dibujan las ramas de una compuerta.
|
|
126
|
+
*/
|
|
127
|
+
function connect(id, from, to, label) {
|
|
128
|
+
const fromCx = from.x + from.width;
|
|
129
|
+
const fromCy = from.y + from.height / 2;
|
|
130
|
+
const toCy = to.y + to.height / 2;
|
|
131
|
+
const flow = { id, from: from.id, to: to.id, waypoints: [] };
|
|
132
|
+
if (label !== undefined)
|
|
133
|
+
flow.label = label;
|
|
134
|
+
if (Math.abs(fromCy - toCy) < 1) {
|
|
135
|
+
flow.waypoints = [
|
|
136
|
+
[fromCx, fromCy],
|
|
137
|
+
[to.x, toCy],
|
|
138
|
+
];
|
|
139
|
+
return flow;
|
|
140
|
+
}
|
|
141
|
+
const cx = from.x + from.width / 2;
|
|
142
|
+
flow.waypoints = [
|
|
143
|
+
[cx, from.y + from.height],
|
|
144
|
+
[cx, toCy],
|
|
145
|
+
[to.x, toCy],
|
|
146
|
+
];
|
|
147
|
+
return flow;
|
|
148
|
+
}
|
|
149
|
+
function buildXml(shapes, flows) {
|
|
150
|
+
const outgoing = new Map();
|
|
151
|
+
const incoming = new Map();
|
|
152
|
+
for (const flow of flows) {
|
|
153
|
+
(outgoing.get(flow.from) ?? outgoing.set(flow.from, []).get(flow.from)).push(flow.id);
|
|
154
|
+
(incoming.get(flow.to) ?? incoming.set(flow.to, []).get(flow.to)).push(flow.id);
|
|
155
|
+
}
|
|
156
|
+
const element = (shape) => {
|
|
157
|
+
const tag = shape.kind === 'start'
|
|
158
|
+
? 'bpmn:startEvent'
|
|
159
|
+
: shape.kind === 'end'
|
|
160
|
+
? 'bpmn:endEvent'
|
|
161
|
+
: shape.kind === 'gateway'
|
|
162
|
+
? 'bpmn:exclusiveGateway'
|
|
163
|
+
: 'bpmn:task';
|
|
164
|
+
const refs = [
|
|
165
|
+
...(incoming.get(shape.id) ?? []).map((f) => `<bpmn:incoming>${f}</bpmn:incoming>`),
|
|
166
|
+
...(outgoing.get(shape.id) ?? []).map((f) => `<bpmn:outgoing>${f}</bpmn:outgoing>`),
|
|
167
|
+
].join('');
|
|
168
|
+
return ` <${tag} id="${shape.id}" name="${xml(shape.name)}">${refs}</${tag}>`;
|
|
169
|
+
};
|
|
170
|
+
const sequenceFlow = (flow) => ` <bpmn:sequenceFlow id="${flow.id}" sourceRef="${flow.from}" targetRef="${flow.to}"${flow.label !== undefined ? ` name="${xml(flow.label)}"` : ''}/>`;
|
|
171
|
+
const shapeDi = (shape) => ` <bpmndi:BPMNShape id="${shape.id}_di" bpmnElement="${shape.id}"${shape.kind === 'gateway' ? ' isMarkerVisible="true"' : ''}><dc:Bounds x="${round(shape.x)}" y="${round(shape.y)}" width="${shape.width}" height="${shape.height}"/></bpmndi:BPMNShape>`;
|
|
172
|
+
const edgeDi = (flow) => ` <bpmndi:BPMNEdge id="${flow.id}_di" bpmnElement="${flow.id}">${flow.waypoints
|
|
173
|
+
.map(([x, y]) => `<di:waypoint x="${round(x)}" y="${round(y)}"/>`)
|
|
174
|
+
.join('')}</bpmndi:BPMNEdge>`;
|
|
175
|
+
return [
|
|
176
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
177
|
+
'<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"',
|
|
178
|
+
' xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"',
|
|
179
|
+
' xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"',
|
|
180
|
+
' xmlns:di="http://www.omg.org/spec/DD/20100524/DI"',
|
|
181
|
+
' id="docviz" targetNamespace="http://docviz">',
|
|
182
|
+
' <bpmn:process id="proceso" isExecutable="false">',
|
|
183
|
+
...shapes.map(element),
|
|
184
|
+
...flows.map(sequenceFlow),
|
|
185
|
+
' </bpmn:process>',
|
|
186
|
+
' <bpmndi:BPMNDiagram id="diagrama">',
|
|
187
|
+
' <bpmndi:BPMNPlane id="plano" bpmnElement="proceso">',
|
|
188
|
+
...shapes.map(shapeDi),
|
|
189
|
+
...flows.map(edgeDi),
|
|
190
|
+
' </bpmndi:BPMNPlane>',
|
|
191
|
+
' </bpmndi:BPMNDiagram>',
|
|
192
|
+
'</bpmn:definitions>',
|
|
193
|
+
].join('\n');
|
|
194
|
+
}
|
|
195
|
+
function xml(text) {
|
|
196
|
+
return text
|
|
197
|
+
.replace(/&/g, '&')
|
|
198
|
+
.replace(/</g, '<')
|
|
199
|
+
.replace(/>/g, '>')
|
|
200
|
+
.replace(/"/g, '"');
|
|
201
|
+
}
|
|
202
|
+
function round(value) {
|
|
203
|
+
return Math.round(value);
|
|
204
|
+
}
|
|
205
|
+
// --------------------------------------------------------------------------
|
|
206
|
+
/** Arte ASCII: el motor lo consume tal cual, solo se valida que exista. */
|
|
207
|
+
export function asciiArt(doc) {
|
|
208
|
+
const art = doc['art'] ?? doc['arte'] ?? doc['source'];
|
|
209
|
+
if (typeof art !== 'string' || art.trim() === '') {
|
|
210
|
+
fail('diagram.art debe contener el dibujo en caracteres', 'usa un bloque literal de YAML:\nart: |\n .-----.\n | Uno |\n \'-----\'');
|
|
211
|
+
}
|
|
212
|
+
// Se conserva la indentacion interna: en arte ASCII, cada espacio cuenta.
|
|
213
|
+
return art.replace(/\s+$/, '');
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=diagram-bpmn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-bpmn.js","sourceRoot":"","sources":["../../src/dsl/diagram-bpmn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipos de producto y proceso que se dibujan con Mermaid: recorrido de usuario,
|
|
3
|
+
* historia de ramas, tablero, priorizacion, flujo de volumenes, composicion,
|
|
4
|
+
* perfil multieje, mapa mental y bloques.
|
|
5
|
+
*/
|
|
6
|
+
export declare function journey(doc: Record<string, unknown>): string;
|
|
7
|
+
export declare function gitGraph(doc: Record<string, unknown>): string;
|
|
8
|
+
export declare function kanban(doc: Record<string, unknown>): string;
|
|
9
|
+
export declare function quadrant(doc: Record<string, unknown>): string;
|
|
10
|
+
export declare function sankey(doc: Record<string, unknown>): string;
|
|
11
|
+
export declare function treemap(doc: Record<string, unknown>): string;
|
|
12
|
+
export declare function radar(doc: Record<string, unknown>): string;
|
|
13
|
+
export declare function mindmap(doc: Record<string, unknown>): string;
|
|
14
|
+
export declare function block(doc: Record<string, unknown>): string;
|
|
15
|
+
//# sourceMappingURL=diagram-product.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-product.d.ts","sourceRoot":"","sources":["../../src/dsl/diagram-product.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0BH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAuB5D;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA6C7D;AAaD,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAkB3D;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAsC7D;AAID,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAa3D;AAQD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAyB5D;AAID,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA6C1D;AAoBD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAW5D;AAID,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA4B1D"}
|