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,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Esquema de color dual: la misma imagen legible en un visor claro y en uno
|
|
3
|
+
* oscuro.
|
|
4
|
+
*
|
|
5
|
+
* Un SVG referenciado desde `<img>` se renderiza como su propio documento, y el
|
|
6
|
+
* navegador le aplica la preferencia de color del usuario. Eso permite declarar
|
|
7
|
+
* los colores como variables CSS y redefinirlas bajo
|
|
8
|
+
* `@media (prefers-color-scheme: dark)`.
|
|
9
|
+
*
|
|
10
|
+
* La sustitucion es textual sobre los hexadecimales que el propio DocViz inyecto
|
|
11
|
+
* al aplicar el tema, y funciona tanto en atributos de presentacion
|
|
12
|
+
* (`fill="var(--dv1,#12508F)"`) como en estilos en linea y hojas de estilo
|
|
13
|
+
* incrustadas: los tres son declaraciones CSS y admiten `var()`.
|
|
14
|
+
*/
|
|
15
|
+
import { ConfigError } from '../core/errors.js';
|
|
16
|
+
/** Roles de la paleta, en el orden en que se emiten las variables. */
|
|
17
|
+
const SCALAR_ROLES = [
|
|
18
|
+
'background',
|
|
19
|
+
'surface',
|
|
20
|
+
'surfaceAlt',
|
|
21
|
+
'border',
|
|
22
|
+
'text',
|
|
23
|
+
'textMuted',
|
|
24
|
+
'primary',
|
|
25
|
+
'primaryText',
|
|
26
|
+
'accent',
|
|
27
|
+
'positive',
|
|
28
|
+
'negative',
|
|
29
|
+
'neutral',
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Empareja cada color de la paleta clara con su equivalente oscuro.
|
|
33
|
+
*
|
|
34
|
+
* Un mismo hexadecimal puede cumplir varios roles —en el tema corporativo, el
|
|
35
|
+
* fondo y el texto sobre el color primario son ambos blanco— y eso es correcto
|
|
36
|
+
* siempre que todos los roles lleven al mismo color oscuro. Si no coincidieran,
|
|
37
|
+
* la sustitucion seria ambigua y el tema esta mal definido, asi que se rechaza
|
|
38
|
+
* en el arranque en lugar de producir una imagen ilegible.
|
|
39
|
+
*/
|
|
40
|
+
export function colorPairs(theme) {
|
|
41
|
+
const light = theme.palette;
|
|
42
|
+
const dark = theme.dark.palette;
|
|
43
|
+
const mapping = new Map();
|
|
44
|
+
const add = (from, to, role) => {
|
|
45
|
+
const key = normalize(from);
|
|
46
|
+
const value = normalize(to);
|
|
47
|
+
const existing = mapping.get(key);
|
|
48
|
+
if (existing !== undefined && existing !== value) {
|
|
49
|
+
throw new ConfigError(`el tema "${theme.name}" asigna dos colores oscuros distintos al mismo color claro`, `${from} -> ${existing} y ${value} (rol "${role}")`);
|
|
50
|
+
}
|
|
51
|
+
mapping.set(key, value);
|
|
52
|
+
};
|
|
53
|
+
for (const role of SCALAR_ROLES)
|
|
54
|
+
add(light[role], dark[role], role);
|
|
55
|
+
light.categorical.forEach((color, i) => add(color, dark.categorical[i], `categorical[${i}]`));
|
|
56
|
+
light.sequential.forEach((color, i) => add(color, dark.sequential[i], `sequential[${i}]`));
|
|
57
|
+
return [...mapping.entries()]
|
|
58
|
+
.filter(([from, to]) => from !== to)
|
|
59
|
+
.map(([light_, dark_]) => ({ light: light_, dark: dark_ }));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Reescribe los colores del tema como variables CSS y anade el bloque que las
|
|
63
|
+
* redefine en modo oscuro.
|
|
64
|
+
*
|
|
65
|
+
* Devuelve el SVG sin tocar si el tema no declara contraparte oscura, o si
|
|
66
|
+
* ninguno de sus colores aparece en la imagen (por ejemplo un diagrama de D2,
|
|
67
|
+
* que trae su propio tema y su propio bloque de modo oscuro).
|
|
68
|
+
*/
|
|
69
|
+
export function applyColorScheme(svg, theme) {
|
|
70
|
+
// D2 y el emisor propio de LikeC4 ya declaran su variante oscura. Volver a
|
|
71
|
+
// sustituir sus colores anidaria variables sin efecto y solo anadiria ruido.
|
|
72
|
+
if (/prefers-color-scheme/i.test(svg))
|
|
73
|
+
return svg;
|
|
74
|
+
const pairs = colorPairs(theme);
|
|
75
|
+
if (pairs.length === 0)
|
|
76
|
+
return svg;
|
|
77
|
+
const declarations = [];
|
|
78
|
+
let out = svg;
|
|
79
|
+
pairs.forEach((pair, index) => {
|
|
80
|
+
const variable = `--dv${index + 1}`;
|
|
81
|
+
const patterns = hexPatterns(pair.light);
|
|
82
|
+
let used = false;
|
|
83
|
+
for (const pattern of patterns) {
|
|
84
|
+
const before = out;
|
|
85
|
+
out = out.replace(pattern, `var(${variable},${pair.light})`);
|
|
86
|
+
if (out !== before)
|
|
87
|
+
used = true;
|
|
88
|
+
}
|
|
89
|
+
if (used)
|
|
90
|
+
declarations.push(`${variable}:${pair.light};|${variable}:${pair.dark};`);
|
|
91
|
+
});
|
|
92
|
+
if (declarations.length === 0)
|
|
93
|
+
return svg;
|
|
94
|
+
const lightBlock = declarations.map((d) => d.split('|')[0]).join('');
|
|
95
|
+
const darkBlock = declarations.map((d) => d.split('|')[1]).join('');
|
|
96
|
+
const style = `<style>:root{${lightBlock}}` +
|
|
97
|
+
`@media (prefers-color-scheme:dark){:root{${darkBlock}}}</style>`;
|
|
98
|
+
const openTag = /<svg\b[^>]*>/i.exec(out);
|
|
99
|
+
if (openTag === null)
|
|
100
|
+
return svg;
|
|
101
|
+
const at = openTag.index + openTag[0].length;
|
|
102
|
+
return `${out.slice(0, at)}${style}${out.slice(at)}`;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Formas en que un motor puede escribir el mismo color.
|
|
106
|
+
*
|
|
107
|
+
* El limite posterior evita que `#12508F` coincida dentro de `#12508FF0`, y la
|
|
108
|
+
* ausencia de limite anterior no hace falta porque `#` ya delimita por delante.
|
|
109
|
+
*/
|
|
110
|
+
function hexPatterns(hex) {
|
|
111
|
+
const body = hex.slice(1);
|
|
112
|
+
const patterns = [new RegExp(`#${body}(?![0-9a-fA-F])`, 'gi')];
|
|
113
|
+
// Notacion corta: `#FFFFFF` puede aparecer como `#fff`.
|
|
114
|
+
if (body[0] === body[1] && body[2] === body[3] && body[4] === body[5]) {
|
|
115
|
+
patterns.push(new RegExp(`#${body[0]}${body[2]}${body[4]}(?![0-9a-fA-F])`, 'gi'));
|
|
116
|
+
}
|
|
117
|
+
return patterns;
|
|
118
|
+
}
|
|
119
|
+
function normalize(hex) {
|
|
120
|
+
return hex.trim().toUpperCase();
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=color-scheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-scheme.js","sourceRoot":"","sources":["../../src/renderers/color-scheme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer D2 — build WebAssembly oficial (`@terrastruct/d2`).
|
|
3
|
+
*
|
|
4
|
+
* Local, sin red y sin binario externo. Se compila y se dibuja en el mismo
|
|
5
|
+
* proceso; el `fs` virtual del compilador solo contiene el diagrama en curso,
|
|
6
|
+
* de modo que un `...@archivo` no puede alcanzar el disco real.
|
|
7
|
+
*/
|
|
8
|
+
import type { DiagramRenderer, OutputFormat, RenderOptions, RenderResult } from '../core/types.js';
|
|
9
|
+
import type { Theme } from '../themes/types.js';
|
|
10
|
+
export interface D2Options {
|
|
11
|
+
/** Motor de layout: `dagre` (por defecto) o `elk`. */
|
|
12
|
+
layout?: 'dagre' | 'elk';
|
|
13
|
+
}
|
|
14
|
+
export declare class D2Renderer implements DiagramRenderer {
|
|
15
|
+
readonly type = "d2";
|
|
16
|
+
readonly defaultFormat: OutputFormat;
|
|
17
|
+
readonly supportedFormats: readonly OutputFormat[];
|
|
18
|
+
private readonly layout;
|
|
19
|
+
private instancePromise?;
|
|
20
|
+
private cachedVersion?;
|
|
21
|
+
constructor(options?: D2Options);
|
|
22
|
+
private instance;
|
|
23
|
+
version(): Promise<string>;
|
|
24
|
+
render(source: string, options: RenderOptions): Promise<RenderResult>;
|
|
25
|
+
dispose(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Antepone la paleta del proyecto a la fuente del diagrama.
|
|
29
|
+
*
|
|
30
|
+
* D2 no admite configurar el tema desde fuera: solo lee `vars.d2-config` del
|
|
31
|
+
* propio documento. Se antepone el bloque para que el autor pueda seguir
|
|
32
|
+
* sobrescribiendo cualquier color mas abajo, y D2 emite ademas su propio
|
|
33
|
+
* `@media (prefers-color-scheme: dark)` con la variante oscura.
|
|
34
|
+
*/
|
|
35
|
+
export declare function withPalette(source: string, theme: Theme): string;
|
|
36
|
+
export declare function createD2Renderer(options?: D2Options): DiagramRenderer;
|
|
37
|
+
//# sourceMappingURL=d2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"d2.d.ts","sourceRoot":"","sources":["../../src/renderers/d2.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGnG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAUhD,MAAM,WAAW,SAAS;IACxB,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CAC1B;AAED,qBAAa,UAAW,YAAW,eAAe;IAChD,QAAQ,CAAC,IAAI,QAAQ;IACrB,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAS;IAC7C,QAAQ,CAAC,gBAAgB,0BAAa;IAEtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAC,CAAsB;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,OAAO,GAAE,SAAc;YAIrB,QAAQ;IAQhB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAM1B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCrE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO/B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAuBhE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,eAAe,CAErE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer D2 — build WebAssembly oficial (`@terrastruct/d2`).
|
|
3
|
+
*
|
|
4
|
+
* Local, sin red y sin binario externo. Se compila y se dibuja en el mismo
|
|
5
|
+
* proceso; el `fs` virtual del compilador solo contiene el diagrama en curso,
|
|
6
|
+
* de modo que un `...@archivo` no puede alcanzar el disco real.
|
|
7
|
+
*/
|
|
8
|
+
import { RenderError } from '../core/errors.js';
|
|
9
|
+
import { packageVersion } from '../core/package-version.js';
|
|
10
|
+
import { assertFormat, asRenderError, svgResult } from './base.js';
|
|
11
|
+
const TYPE = 'd2';
|
|
12
|
+
const SUPPORTED = ['svg'];
|
|
13
|
+
export class D2Renderer {
|
|
14
|
+
type = TYPE;
|
|
15
|
+
defaultFormat = 'svg';
|
|
16
|
+
supportedFormats = SUPPORTED;
|
|
17
|
+
layout;
|
|
18
|
+
instancePromise;
|
|
19
|
+
cachedVersion;
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.layout = options.layout ?? 'dagre';
|
|
22
|
+
}
|
|
23
|
+
async instance() {
|
|
24
|
+
this.instancePromise ??= (async () => {
|
|
25
|
+
const mod = await import('@terrastruct/d2');
|
|
26
|
+
return new mod.D2();
|
|
27
|
+
})();
|
|
28
|
+
return this.instancePromise;
|
|
29
|
+
}
|
|
30
|
+
async version() {
|
|
31
|
+
if (this.cachedVersion !== undefined)
|
|
32
|
+
return this.cachedVersion;
|
|
33
|
+
this.cachedVersion = `d2-${packageVersion('@terrastruct/d2')}-${this.layout}`;
|
|
34
|
+
return this.cachedVersion;
|
|
35
|
+
}
|
|
36
|
+
async render(source, options) {
|
|
37
|
+
assertFormat(TYPE, options.format, SUPPORTED);
|
|
38
|
+
if (source.trim() === '') {
|
|
39
|
+
throw new RenderError(TYPE, 'el diagrama D2 esta vacio');
|
|
40
|
+
}
|
|
41
|
+
const d2 = await this.instance();
|
|
42
|
+
const { theme } = options;
|
|
43
|
+
let svg;
|
|
44
|
+
try {
|
|
45
|
+
const compiled = await d2.compile({ fs: { index: withPalette(source, theme) }, inputPath: 'index', options: { layout: this.layout } }, undefined);
|
|
46
|
+
svg = await d2.render(compiled.diagram, {
|
|
47
|
+
...compiled.renderOptions,
|
|
48
|
+
themeID: theme.d2.themeID,
|
|
49
|
+
darkThemeID: theme.d2.darkThemeID,
|
|
50
|
+
sketch: theme.d2.sketch,
|
|
51
|
+
pad: theme.d2.pad,
|
|
52
|
+
center: true,
|
|
53
|
+
// Sin `scale: 1` el SVG sale con `width`/`height` ajustados a pantalla,
|
|
54
|
+
// lo que en un `<img>` de Markdown produce una imagen borrosa.
|
|
55
|
+
scale: 1,
|
|
56
|
+
noXMLTag: true,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
throw asRenderError(TYPE, err, 'D2 no pudo compilar el diagrama');
|
|
61
|
+
}
|
|
62
|
+
if (typeof svg !== 'string' || !svg.includes('<svg')) {
|
|
63
|
+
throw new RenderError(TYPE, 'D2 no produjo un SVG valido');
|
|
64
|
+
}
|
|
65
|
+
return svgResult(TYPE, svg, options);
|
|
66
|
+
}
|
|
67
|
+
async dispose() {
|
|
68
|
+
// El worker WASM de D2 mantiene vivo el event loop del proceso.
|
|
69
|
+
const instance = await this.instancePromise?.catch(() => undefined);
|
|
70
|
+
const disposable = instance;
|
|
71
|
+
disposable?.worker?.terminate?.();
|
|
72
|
+
this.instancePromise = undefined;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Antepone la paleta del proyecto a la fuente del diagrama.
|
|
77
|
+
*
|
|
78
|
+
* D2 no admite configurar el tema desde fuera: solo lee `vars.d2-config` del
|
|
79
|
+
* propio documento. Se antepone el bloque para que el autor pueda seguir
|
|
80
|
+
* sobrescribiendo cualquier color mas abajo, y D2 emite ademas su propio
|
|
81
|
+
* `@media (prefers-color-scheme: dark)` con la variante oscura.
|
|
82
|
+
*/
|
|
83
|
+
export function withPalette(source, theme) {
|
|
84
|
+
const entries = (map) => Object.entries(map)
|
|
85
|
+
.map(([slot, color]) => ` ${slot}: "${color}"`)
|
|
86
|
+
.join('\n');
|
|
87
|
+
// Un documento que ya trae su propia configuracion manda: no se toca.
|
|
88
|
+
if (/^\s*vars\s*:/m.test(source))
|
|
89
|
+
return source;
|
|
90
|
+
return [
|
|
91
|
+
'vars: {',
|
|
92
|
+
' d2-config: {',
|
|
93
|
+
' theme-overrides: {',
|
|
94
|
+
entries(theme.d2.overrides),
|
|
95
|
+
' }',
|
|
96
|
+
' dark-theme-overrides: {',
|
|
97
|
+
entries(theme.d2.darkOverrides),
|
|
98
|
+
' }',
|
|
99
|
+
' }',
|
|
100
|
+
'}',
|
|
101
|
+
'',
|
|
102
|
+
source,
|
|
103
|
+
].join('\n');
|
|
104
|
+
}
|
|
105
|
+
export function createD2Renderer(options) {
|
|
106
|
+
return new D2Renderer(options);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=d2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"d2.js","sourceRoot":"","sources":["../../src/renderers/d2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer Graphviz — WebAssembly local (`@hpcc-js/wasm-graphviz`).
|
|
3
|
+
*
|
|
4
|
+
* No requiere binario del sistema ni red. El modulo WASM se carga una sola vez
|
|
5
|
+
* y se reutiliza durante todo el build.
|
|
6
|
+
*/
|
|
7
|
+
import type { DiagramRenderer, OutputFormat, RenderOptions, RenderResult } from '../core/types.js';
|
|
8
|
+
import type { Theme } from '../themes/types.js';
|
|
9
|
+
export interface GraphvizOptions {
|
|
10
|
+
/** Motor de layout: dot, neato, fdp, circo, twopi, osage, patchwork. */
|
|
11
|
+
engine?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class GraphvizRenderer implements DiagramRenderer {
|
|
14
|
+
readonly type = "graphviz";
|
|
15
|
+
readonly defaultFormat: OutputFormat;
|
|
16
|
+
readonly supportedFormats: readonly OutputFormat[];
|
|
17
|
+
private readonly engine;
|
|
18
|
+
private modulePromise?;
|
|
19
|
+
private cachedVersion?;
|
|
20
|
+
constructor(options?: GraphvizOptions);
|
|
21
|
+
private load;
|
|
22
|
+
version(): Promise<string>;
|
|
23
|
+
render(source: string, options: RenderOptions): Promise<RenderResult>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Inserta los atributos por defecto del tema dentro del cuerpo del grafo.
|
|
27
|
+
*
|
|
28
|
+
* Se insertan al principio del bloque para que cualquier atributo escrito por
|
|
29
|
+
* el autor los sobrescriba.
|
|
30
|
+
*/
|
|
31
|
+
export declare function applyTheme(source: string, theme: Theme): string;
|
|
32
|
+
export declare function createGraphvizRenderer(options?: GraphvizOptions): DiagramRenderer;
|
|
33
|
+
//# sourceMappingURL=graphviz.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphviz.d.ts","sourceRoot":"","sources":["../../src/renderers/graphviz.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGnG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOhD,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,qBAAa,gBAAiB,YAAW,eAAe;IACtD,QAAQ,CAAC,IAAI,cAAQ;IACrB,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAS;IAC7C,QAAQ,CAAC,gBAAgB,0BAAa;IAEtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,aAAa,CAAC,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,OAAO,GAAE,eAAoB;YAY3B,IAAI;IAQZ,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAU1B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAe5E;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAgB/D;AAQD,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,eAAe,CAEjF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer Graphviz — WebAssembly local (`@hpcc-js/wasm-graphviz`).
|
|
3
|
+
*
|
|
4
|
+
* No requiere binario del sistema ni red. El modulo WASM se carga una sola vez
|
|
5
|
+
* y se reutiliza durante todo el build.
|
|
6
|
+
*/
|
|
7
|
+
import { RenderError } from '../core/errors.js';
|
|
8
|
+
import { packageVersion } from '../core/package-version.js';
|
|
9
|
+
import { assertFormat, asRenderError, svgResult } from './base.js';
|
|
10
|
+
const TYPE = 'graphviz';
|
|
11
|
+
const SUPPORTED = ['svg'];
|
|
12
|
+
const VALID_ENGINES = new Set(['dot', 'neato', 'fdp', 'sfdp', 'circo', 'twopi', 'osage', 'patchwork']);
|
|
13
|
+
export class GraphvizRenderer {
|
|
14
|
+
type = TYPE;
|
|
15
|
+
defaultFormat = 'svg';
|
|
16
|
+
supportedFormats = SUPPORTED;
|
|
17
|
+
engine;
|
|
18
|
+
modulePromise;
|
|
19
|
+
cachedVersion;
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
const engine = options.engine ?? 'dot';
|
|
22
|
+
if (!VALID_ENGINES.has(engine)) {
|
|
23
|
+
throw new RenderError(TYPE, `motor de layout desconocido: ${engine}`, `motores validos: ${[...VALID_ENGINES].join(', ')}`);
|
|
24
|
+
}
|
|
25
|
+
this.engine = engine;
|
|
26
|
+
}
|
|
27
|
+
async load() {
|
|
28
|
+
this.modulePromise ??= (async () => {
|
|
29
|
+
const { Graphviz } = await import('@hpcc-js/wasm-graphviz');
|
|
30
|
+
return (await Graphviz.load());
|
|
31
|
+
})();
|
|
32
|
+
return this.modulePromise;
|
|
33
|
+
}
|
|
34
|
+
async version() {
|
|
35
|
+
if (this.cachedVersion !== undefined)
|
|
36
|
+
return this.cachedVersion;
|
|
37
|
+
const graphviz = await this.load();
|
|
38
|
+
// El propio WASM expone su version; si no, se usa la del paquete npm.
|
|
39
|
+
const raw = graphviz.version?.();
|
|
40
|
+
const version = typeof raw === 'string' && raw !== '' ? raw : packageVersion('@hpcc-js/wasm-graphviz');
|
|
41
|
+
this.cachedVersion = `graphviz-${version}-${this.engine}`;
|
|
42
|
+
return this.cachedVersion;
|
|
43
|
+
}
|
|
44
|
+
async render(source, options) {
|
|
45
|
+
assertFormat(TYPE, options.format, SUPPORTED);
|
|
46
|
+
const graphviz = await this.load();
|
|
47
|
+
const themed = applyTheme(source, options.theme);
|
|
48
|
+
let svg;
|
|
49
|
+
try {
|
|
50
|
+
svg = graphviz.layout(themed, 'svg', this.engine);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
throw asRenderError(TYPE, err, 'Graphviz no pudo procesar el grafo (revisa la sintaxis DOT)');
|
|
54
|
+
}
|
|
55
|
+
if (typeof svg !== 'string' || !svg.includes('<svg')) {
|
|
56
|
+
throw new RenderError(TYPE, 'Graphviz no produjo un SVG valido');
|
|
57
|
+
}
|
|
58
|
+
return svgResult(TYPE, svg, options);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Inserta los atributos por defecto del tema dentro del cuerpo del grafo.
|
|
63
|
+
*
|
|
64
|
+
* Se insertan al principio del bloque para que cualquier atributo escrito por
|
|
65
|
+
* el autor los sobrescriba.
|
|
66
|
+
*/
|
|
67
|
+
export function applyTheme(source, theme) {
|
|
68
|
+
const trimmed = source.trim();
|
|
69
|
+
const openBrace = trimmed.indexOf('{');
|
|
70
|
+
if (openBrace < 0) {
|
|
71
|
+
throw new RenderError(TYPE, 'el grafo no tiene cuerpo: falta la llave de apertura', 'ejemplo minimo: digraph G { A -> B; }');
|
|
72
|
+
}
|
|
73
|
+
const defaults = [
|
|
74
|
+
` graph [${attrs(theme.graphviz.graph)}];`,
|
|
75
|
+
` node [${attrs(theme.graphviz.node)}];`,
|
|
76
|
+
` edge [${attrs(theme.graphviz.edge)}];`,
|
|
77
|
+
].join('\n');
|
|
78
|
+
return `${trimmed.slice(0, openBrace + 1)}\n${defaults}\n${trimmed.slice(openBrace + 1)}`;
|
|
79
|
+
}
|
|
80
|
+
function attrs(map) {
|
|
81
|
+
return Object.entries(map)
|
|
82
|
+
.map(([k, v]) => `${k}="${v.replace(/"/g, '\\"')}"`)
|
|
83
|
+
.join(', ');
|
|
84
|
+
}
|
|
85
|
+
export function createGraphvizRenderer(options) {
|
|
86
|
+
return new GraphvizRenderer(options);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=graphviz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphviz.js","sourceRoot":"","sources":["../../src/renderers/graphviz.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codigo que se ejecuta dentro del navegador, no en Node.
|
|
3
|
+
*
|
|
4
|
+
* Puppeteer serializa estas funciones y las evalua en el contexto de la pagina,
|
|
5
|
+
* asi que aqui se puede usar el DOM y no se puede usar nada del proceso: ni
|
|
6
|
+
* imports, ni variables del modulo, ni tipos de Node.
|
|
7
|
+
*
|
|
8
|
+
* Estan en su propio archivo por dos razones. La primera es que asi queda
|
|
9
|
+
* explicito que pertenecen a otro entorno. La segunda es de medicion: al
|
|
10
|
+
* ejecutarse en Chromium, ninguna herramienta de cobertura del proceso puede
|
|
11
|
+
* verlas, y mezclarlas con el resto falsearia el dato.
|
|
12
|
+
*/
|
|
13
|
+
export interface MermaidArgs {
|
|
14
|
+
code: string;
|
|
15
|
+
id: string;
|
|
16
|
+
config: unknown;
|
|
17
|
+
}
|
|
18
|
+
export type RenderOutcome = {
|
|
19
|
+
svg: string;
|
|
20
|
+
} | {
|
|
21
|
+
error: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Dibuja un diagrama de Mermaid y devuelve su SVG.
|
|
25
|
+
*
|
|
26
|
+
* Ajusta ademas el lienzo al contenido real: algunas notaciones recientes
|
|
27
|
+
* (radar, treemap) escriben etiquetas fuera del `viewBox` que declaran y quedan
|
|
28
|
+
* recortadas. Medirlo solo es posible aqui, con el documento ya construido.
|
|
29
|
+
*/
|
|
30
|
+
export declare function renderMermaidInPage(args: MermaidArgs): Promise<RenderOutcome>;
|
|
31
|
+
/** Dibuja un proceso BPMN con bpmn-js y devuelve su SVG. */
|
|
32
|
+
export declare function renderBpmnInPage(xml: string): Promise<RenderOutcome>;
|
|
33
|
+
//# sourceMappingURL=in-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-page.d.ts","sourceRoot":"","sources":["../../src/renderers/in-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA2CnF;AAED,4DAA4D;AAC5D,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgB1E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codigo que se ejecuta dentro del navegador, no en Node.
|
|
3
|
+
*
|
|
4
|
+
* Puppeteer serializa estas funciones y las evalua en el contexto de la pagina,
|
|
5
|
+
* asi que aqui se puede usar el DOM y no se puede usar nada del proceso: ni
|
|
6
|
+
* imports, ni variables del modulo, ni tipos de Node.
|
|
7
|
+
*
|
|
8
|
+
* Estan en su propio archivo por dos razones. La primera es que asi queda
|
|
9
|
+
* explicito que pertenecen a otro entorno. La segunda es de medicion: al
|
|
10
|
+
* ejecutarse en Chromium, ninguna herramienta de cobertura del proceso puede
|
|
11
|
+
* verlas, y mezclarlas con el resto falsearia el dato.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Dibuja un diagrama de Mermaid y devuelve su SVG.
|
|
15
|
+
*
|
|
16
|
+
* Ajusta ademas el lienzo al contenido real: algunas notaciones recientes
|
|
17
|
+
* (radar, treemap) escriben etiquetas fuera del `viewBox` que declaran y quedan
|
|
18
|
+
* recortadas. Medirlo solo es posible aqui, con el documento ya construido.
|
|
19
|
+
*/
|
|
20
|
+
export async function renderMermaidInPage(args) {
|
|
21
|
+
const mermaid = globalThis.mermaid;
|
|
22
|
+
if (mermaid === undefined)
|
|
23
|
+
return { error: 'el bundle de Mermaid no se cargo en la pagina' };
|
|
24
|
+
try {
|
|
25
|
+
mermaid.initialize(args.config);
|
|
26
|
+
const rendered = await mermaid.render(args.id, args.code);
|
|
27
|
+
const dom = globalThis.document;
|
|
28
|
+
const host = dom?.getElementById('host') ?? null;
|
|
29
|
+
if (host === null)
|
|
30
|
+
return { svg: rendered.svg };
|
|
31
|
+
host.innerHTML = rendered.svg;
|
|
32
|
+
const svgEl = host.querySelector('svg');
|
|
33
|
+
if (svgEl === null)
|
|
34
|
+
return { svg: rendered.svg };
|
|
35
|
+
const box = svgEl.getBBox();
|
|
36
|
+
const declared = svgEl.getAttribute('viewBox');
|
|
37
|
+
const parts = declared?.trim().split(/[\s,]+/).map(Number) ?? [];
|
|
38
|
+
const fits = parts.length === 4 &&
|
|
39
|
+
box.x >= parts[0] - 1 &&
|
|
40
|
+
box.y >= parts[1] - 1 &&
|
|
41
|
+
box.x + box.width <= parts[0] + parts[2] + 1 &&
|
|
42
|
+
box.y + box.height <= parts[1] + parts[3] + 1;
|
|
43
|
+
if (fits || box.width <= 0 || box.height <= 0)
|
|
44
|
+
return { svg: rendered.svg };
|
|
45
|
+
const pad = 8;
|
|
46
|
+
const x = Math.floor(box.x - pad);
|
|
47
|
+
const y = Math.floor(box.y - pad);
|
|
48
|
+
const w = Math.ceil(box.width + pad * 2);
|
|
49
|
+
const h = Math.ceil(box.height + pad * 2);
|
|
50
|
+
svgEl.setAttribute('viewBox', `${x} ${y} ${w} ${h}`);
|
|
51
|
+
svgEl.setAttribute('width', String(w));
|
|
52
|
+
svgEl.setAttribute('height', String(h));
|
|
53
|
+
return { svg: host.innerHTML };
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
const err = e;
|
|
57
|
+
return { error: err.str ?? err.message ?? String(e) };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Dibuja un proceso BPMN con bpmn-js y devuelve su SVG. */
|
|
61
|
+
export async function renderBpmnInPage(xml) {
|
|
62
|
+
const Viewer = globalThis.BpmnJS;
|
|
63
|
+
if (Viewer === undefined)
|
|
64
|
+
return { error: 'el visor de bpmn-js no se cargo en la pagina' };
|
|
65
|
+
const viewer = new Viewer({ container: '#lienzo' });
|
|
66
|
+
try {
|
|
67
|
+
await viewer.importXML(xml);
|
|
68
|
+
const { svg } = await viewer.saveSVG();
|
|
69
|
+
return { svg };
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
const err = e;
|
|
73
|
+
return { error: err.message ?? String(e) };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=in-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-page.js","sourceRoot":"","sources":["../../src/renderers/in-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Construccion del registro de renderers a partir de la configuracion.
|
|
3
|
+
*
|
|
4
|
+
* Es el unico lugar del proyecto donde se decide que motor atiende cada
|
|
5
|
+
* lenguaje. Anadir un renderer nuevo se reduce a registrar una entrada mas.
|
|
6
|
+
*/
|
|
7
|
+
import { RendererRegistry } from '../core/registry.js';
|
|
8
|
+
import type { DocVizConfig } from '../config/types.js';
|
|
9
|
+
export { RendererRegistry } from '../core/registry.js';
|
|
10
|
+
export declare function buildRegistry(config: DocVizConfig): RendererRegistry;
|
|
11
|
+
export { createD2Renderer } from './d2.js';
|
|
12
|
+
export { createGraphvizRenderer } from './graphviz.js';
|
|
13
|
+
export { createKrokiRenderer, assertSafeKrokiUrl } from './kroki.js';
|
|
14
|
+
export { createLikeC4Renderer } from './likec4.js';
|
|
15
|
+
export { createMermaidRenderer } from './mermaid.js';
|
|
16
|
+
export { createPlantUmlRenderer } from './plantuml.js';
|
|
17
|
+
export { createVegaLiteRenderer } from './vega-lite.js';
|
|
18
|
+
export { createSvgbobRenderer } from './svgbob.js';
|
|
19
|
+
export { createBpmnRenderer } from './bpmn.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUvD,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAGxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAcvD,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CA6FpE;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
|