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,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Errores de DocViz.
|
|
3
|
+
*
|
|
4
|
+
* Regla de la especificacion (seccion 11): un fallo de render nunca puede
|
|
5
|
+
* producir silenciosamente un documento incorrecto. Todo error lleva la
|
|
6
|
+
* informacion necesaria para localizarlo: archivo, linea, renderer y motivo.
|
|
7
|
+
*
|
|
8
|
+
* Ademas del texto, todo error lleva un **codigo estable**. El destinatario
|
|
9
|
+
* habitual del reporte es un agente reintentando: un codigo permite decidir la
|
|
10
|
+
* correccion sin analizar el mensaje, que esta escrito para humanos y puede
|
|
11
|
+
* cambiar de redaccion sin previo aviso.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Codigos de regla.
|
|
15
|
+
*
|
|
16
|
+
* Son parte del contrato publico: renombrar uno rompe a quien lo consuma, asi
|
|
17
|
+
* que se anaden codigos nuevos en lugar de reutilizar los existentes.
|
|
18
|
+
*
|
|
19
|
+
* DV0xx entorno, configuracion y motores
|
|
20
|
+
* DV1xx DSL declarativo (lo que escribe el autor del documento)
|
|
21
|
+
*/
|
|
22
|
+
export declare const ERROR_CODES: {
|
|
23
|
+
/** Error sin clasificar. */
|
|
24
|
+
readonly GENERIC: "DV000";
|
|
25
|
+
/** El lenguaje de la valla no tiene renderer registrado. */
|
|
26
|
+
readonly UNKNOWN_RENDERER: "DV001";
|
|
27
|
+
/** El motor devolvio un error de sintaxis o fallo al dibujar. */
|
|
28
|
+
readonly RENDER_FAILED: "DV002";
|
|
29
|
+
/** Una ruta intento salirse del directorio de salida. */
|
|
30
|
+
readonly PATH_SECURITY: "DV003";
|
|
31
|
+
/** Configuracion invalida. */
|
|
32
|
+
readonly CONFIG: "DV004";
|
|
33
|
+
/** El renderer existe pero no esta habilitado en esta maquina. */
|
|
34
|
+
readonly RENDERER_UNAVAILABLE: "DV005";
|
|
35
|
+
/** El renderer no puede producir el formato pedido. */
|
|
36
|
+
readonly FORMAT_UNSUPPORTED: "DV006";
|
|
37
|
+
/** Colision de hash truncado. */
|
|
38
|
+
readonly HASH_COLLISION: "DV007";
|
|
39
|
+
/** DSL invalido sin clasificar. */
|
|
40
|
+
readonly DSL: "DV100";
|
|
41
|
+
/** Falta un campo obligatorio. */
|
|
42
|
+
readonly DSL_FIELD_MISSING: "DV101";
|
|
43
|
+
/** El campo existe pero su valor no tiene la forma esperada. */
|
|
44
|
+
readonly DSL_FIELD_TYPE: "DV102";
|
|
45
|
+
/** El valor no pertenece al conjunto admitido. */
|
|
46
|
+
readonly DSL_VALUE_NOT_ALLOWED: "DV103";
|
|
47
|
+
/** Campo que el tipo no usa: casi siempre una errata. */
|
|
48
|
+
readonly DSL_FIELD_UNKNOWN: "DV104";
|
|
49
|
+
/** El bloque no es YAML valido. */
|
|
50
|
+
readonly DSL_YAML: "DV105";
|
|
51
|
+
/** El `type` no existe o no pertenece a esta valla. */
|
|
52
|
+
readonly DSL_TYPE: "DV106";
|
|
53
|
+
};
|
|
54
|
+
export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
|
|
55
|
+
export interface DocVizErrorLocation {
|
|
56
|
+
/** Ruta relativa al cwd del archivo Markdown fuente. */
|
|
57
|
+
file?: string;
|
|
58
|
+
/** Linea 1-based dentro del archivo fuente. */
|
|
59
|
+
line?: number;
|
|
60
|
+
/** Tipo de renderer implicado. */
|
|
61
|
+
renderer?: string;
|
|
62
|
+
}
|
|
63
|
+
export declare class DocVizError extends Error {
|
|
64
|
+
readonly location: DocVizErrorLocation;
|
|
65
|
+
readonly detail?: string;
|
|
66
|
+
/** Codigo estable de la regla incumplida. */
|
|
67
|
+
readonly code: ErrorCode;
|
|
68
|
+
constructor(message: string, location?: DocVizErrorLocation, detail?: string, code?: ErrorCode);
|
|
69
|
+
/** Vuelve a etiquetar un error con la posicion del bloque que lo produjo. */
|
|
70
|
+
withLocation(location: DocVizErrorLocation): DocVizError;
|
|
71
|
+
/**
|
|
72
|
+
* Devuelve una copia con detalle adicional al final.
|
|
73
|
+
*
|
|
74
|
+
* Se usa para adjuntar diagnosticos que solo se conocen despues de fallar,
|
|
75
|
+
* como las erratas detectadas en los campos del bloque.
|
|
76
|
+
*/
|
|
77
|
+
withExtraDetail(extra: string): DocVizError;
|
|
78
|
+
/**
|
|
79
|
+
* Copia conservando la subclase.
|
|
80
|
+
*
|
|
81
|
+
* Reconstruir con `new DocVizError(...)` convertiria un `DslValidationError`
|
|
82
|
+
* en un error generico a mitad del camino, y quien lo reciba dejaria de poder
|
|
83
|
+
* distinguir de que capa vino.
|
|
84
|
+
*/
|
|
85
|
+
private copyWith;
|
|
86
|
+
/** Formato de reporte exigido por la seccion 11 de la especificacion. */
|
|
87
|
+
format(): string;
|
|
88
|
+
}
|
|
89
|
+
/** El lenguaje de la valla no tiene renderer registrado. */
|
|
90
|
+
export declare class UnknownRendererError extends DocVizError {
|
|
91
|
+
constructor(type: string, known: readonly string[]);
|
|
92
|
+
}
|
|
93
|
+
/** El motor devolvio un error de sintaxis o fallo al dibujar. */
|
|
94
|
+
export declare class RenderError extends DocVizError {
|
|
95
|
+
constructor(renderer: string, message: string, detail?: string, code?: ErrorCode);
|
|
96
|
+
}
|
|
97
|
+
/** Una ruta intento salirse del directorio de salida configurado. */
|
|
98
|
+
export declare class PathSecurityError extends DocVizError {
|
|
99
|
+
constructor(message: string, detail?: string);
|
|
100
|
+
}
|
|
101
|
+
/** El DSL declarativo no cumple su esquema. */
|
|
102
|
+
export declare class DslValidationError extends DocVizError {
|
|
103
|
+
constructor(message: string, detail?: string, code?: ErrorCode);
|
|
104
|
+
}
|
|
105
|
+
/** Error de configuracion (docviz.config.yaml o flags de CLI). */
|
|
106
|
+
export declare class ConfigError extends DocVizError {
|
|
107
|
+
constructor(message: string, detail?: string);
|
|
108
|
+
}
|
|
109
|
+
/** Agrupa todos los fallos de un build para reportarlos juntos. */
|
|
110
|
+
export declare class BuildFailedError extends Error {
|
|
111
|
+
readonly errors: readonly DocVizError[];
|
|
112
|
+
constructor(errors: readonly DocVizError[]);
|
|
113
|
+
format(): string;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW;IACtB,4BAA4B;;IAE5B,4DAA4D;;IAE5D,iEAAiE;;IAEjE,yDAAyD;;IAEzD,8BAA8B;;IAE9B,kEAAkE;;IAElE,uDAAuD;;IAEvD,iCAAiC;;IAGjC,mCAAmC;;IAEnC,kCAAkC;;IAElC,gEAAgE;;IAEhE,kDAAkD;;IAElD,yDAAyD;;IAEzD,mCAAmC;;IAEnC,uDAAuD;;CAE/C,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;gBAGvB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,mBAAwB,EAClC,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,GAAE,SAA+B;IASvC,6EAA6E;IAC7E,YAAY,CAAC,QAAQ,EAAE,mBAAmB,GAAG,WAAW;IAIxD;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAK3C;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAWhB,yEAAyE;IACzE,MAAM,IAAI,MAAM;CAajB;AAED,4DAA4D;AAC5D,qBAAa,oBAAqB,SAAQ,WAAW;gBACvC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE;CASnD;AAED,iEAAiE;AACjE,qBAAa,WAAY,SAAQ,WAAW;gBAC9B,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,SAAqC;CAI5G;AAED,qEAAqE;AACrE,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAI7C;AAED,+CAA+C;AAC/C,qBAAa,kBAAmB,SAAQ,WAAW;gBACrC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,SAA2B;CAIhF;AAED,kEAAkE;AAClE,qBAAa,WAAY,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAI7C;AAED,mEAAmE;AACnE,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;gBAE5B,MAAM,EAAE,SAAS,WAAW,EAAE;IAM1C,MAAM,IAAI,MAAM;CAGjB"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Errores de DocViz.
|
|
3
|
+
*
|
|
4
|
+
* Regla de la especificacion (seccion 11): un fallo de render nunca puede
|
|
5
|
+
* producir silenciosamente un documento incorrecto. Todo error lleva la
|
|
6
|
+
* informacion necesaria para localizarlo: archivo, linea, renderer y motivo.
|
|
7
|
+
*
|
|
8
|
+
* Ademas del texto, todo error lleva un **codigo estable**. El destinatario
|
|
9
|
+
* habitual del reporte es un agente reintentando: un codigo permite decidir la
|
|
10
|
+
* correccion sin analizar el mensaje, que esta escrito para humanos y puede
|
|
11
|
+
* cambiar de redaccion sin previo aviso.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Codigos de regla.
|
|
15
|
+
*
|
|
16
|
+
* Son parte del contrato publico: renombrar uno rompe a quien lo consuma, asi
|
|
17
|
+
* que se anaden codigos nuevos en lugar de reutilizar los existentes.
|
|
18
|
+
*
|
|
19
|
+
* DV0xx entorno, configuracion y motores
|
|
20
|
+
* DV1xx DSL declarativo (lo que escribe el autor del documento)
|
|
21
|
+
*/
|
|
22
|
+
export const ERROR_CODES = {
|
|
23
|
+
/** Error sin clasificar. */
|
|
24
|
+
GENERIC: 'DV000',
|
|
25
|
+
/** El lenguaje de la valla no tiene renderer registrado. */
|
|
26
|
+
UNKNOWN_RENDERER: 'DV001',
|
|
27
|
+
/** El motor devolvio un error de sintaxis o fallo al dibujar. */
|
|
28
|
+
RENDER_FAILED: 'DV002',
|
|
29
|
+
/** Una ruta intento salirse del directorio de salida. */
|
|
30
|
+
PATH_SECURITY: 'DV003',
|
|
31
|
+
/** Configuracion invalida. */
|
|
32
|
+
CONFIG: 'DV004',
|
|
33
|
+
/** El renderer existe pero no esta habilitado en esta maquina. */
|
|
34
|
+
RENDERER_UNAVAILABLE: 'DV005',
|
|
35
|
+
/** El renderer no puede producir el formato pedido. */
|
|
36
|
+
FORMAT_UNSUPPORTED: 'DV006',
|
|
37
|
+
/** Colision de hash truncado. */
|
|
38
|
+
HASH_COLLISION: 'DV007',
|
|
39
|
+
/** DSL invalido sin clasificar. */
|
|
40
|
+
DSL: 'DV100',
|
|
41
|
+
/** Falta un campo obligatorio. */
|
|
42
|
+
DSL_FIELD_MISSING: 'DV101',
|
|
43
|
+
/** El campo existe pero su valor no tiene la forma esperada. */
|
|
44
|
+
DSL_FIELD_TYPE: 'DV102',
|
|
45
|
+
/** El valor no pertenece al conjunto admitido. */
|
|
46
|
+
DSL_VALUE_NOT_ALLOWED: 'DV103',
|
|
47
|
+
/** Campo que el tipo no usa: casi siempre una errata. */
|
|
48
|
+
DSL_FIELD_UNKNOWN: 'DV104',
|
|
49
|
+
/** El bloque no es YAML valido. */
|
|
50
|
+
DSL_YAML: 'DV105',
|
|
51
|
+
/** El `type` no existe o no pertenece a esta valla. */
|
|
52
|
+
DSL_TYPE: 'DV106',
|
|
53
|
+
};
|
|
54
|
+
export class DocVizError extends Error {
|
|
55
|
+
location;
|
|
56
|
+
detail;
|
|
57
|
+
/** Codigo estable de la regla incumplida. */
|
|
58
|
+
code;
|
|
59
|
+
constructor(message, location = {}, detail, code = ERROR_CODES.GENERIC) {
|
|
60
|
+
super(message);
|
|
61
|
+
this.name = 'DocVizError';
|
|
62
|
+
this.location = location;
|
|
63
|
+
this.detail = detail;
|
|
64
|
+
this.code = code;
|
|
65
|
+
}
|
|
66
|
+
/** Vuelve a etiquetar un error con la posicion del bloque que lo produjo. */
|
|
67
|
+
withLocation(location) {
|
|
68
|
+
return this.copyWith({ location: { ...this.location, ...location } });
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Devuelve una copia con detalle adicional al final.
|
|
72
|
+
*
|
|
73
|
+
* Se usa para adjuntar diagnosticos que solo se conocen despues de fallar,
|
|
74
|
+
* como las erratas detectadas en los campos del bloque.
|
|
75
|
+
*/
|
|
76
|
+
withExtraDetail(extra) {
|
|
77
|
+
if (extra.trim() === '')
|
|
78
|
+
return this;
|
|
79
|
+
return this.copyWith({ detail: this.detail === undefined ? extra : `${this.detail}\n${extra}` });
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Copia conservando la subclase.
|
|
83
|
+
*
|
|
84
|
+
* Reconstruir con `new DocVizError(...)` convertiria un `DslValidationError`
|
|
85
|
+
* en un error generico a mitad del camino, y quien lo reciba dejaria de poder
|
|
86
|
+
* distinguir de que capa vino.
|
|
87
|
+
*/
|
|
88
|
+
copyWith(changes) {
|
|
89
|
+
const clone = Object.create(Object.getPrototypeOf(this));
|
|
90
|
+
clone['name'] = this.name;
|
|
91
|
+
clone['message'] = this.message;
|
|
92
|
+
clone['stack'] = this.stack;
|
|
93
|
+
clone['code'] = this.code;
|
|
94
|
+
clone['location'] = changes.location ?? this.location;
|
|
95
|
+
clone['detail'] = changes.detail ?? this.detail;
|
|
96
|
+
return clone;
|
|
97
|
+
}
|
|
98
|
+
/** Formato de reporte exigido por la seccion 11 de la especificacion. */
|
|
99
|
+
format() {
|
|
100
|
+
const lines = ['ERROR'];
|
|
101
|
+
lines.push(`codigo: ${this.code}`);
|
|
102
|
+
if (this.location.file)
|
|
103
|
+
lines.push(`archivo: ${this.location.file}`);
|
|
104
|
+
if (this.location.line !== undefined)
|
|
105
|
+
lines.push(`linea: ${this.location.line}`);
|
|
106
|
+
if (this.location.renderer)
|
|
107
|
+
lines.push(`renderer: ${this.location.renderer}`);
|
|
108
|
+
lines.push(`motivo: ${this.message}`);
|
|
109
|
+
if (this.detail) {
|
|
110
|
+
lines.push('detalle:');
|
|
111
|
+
for (const l of this.detail.trimEnd().split('\n'))
|
|
112
|
+
lines.push(` ${l}`);
|
|
113
|
+
}
|
|
114
|
+
return lines.join('\n');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** El lenguaje de la valla no tiene renderer registrado. */
|
|
118
|
+
export class UnknownRendererError extends DocVizError {
|
|
119
|
+
constructor(type, known) {
|
|
120
|
+
super(`no existe un renderer registrado para "${type}"`, { renderer: type }, `renderers disponibles: ${known.join(', ')}`, ERROR_CODES.UNKNOWN_RENDERER);
|
|
121
|
+
this.name = 'UnknownRendererError';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** El motor devolvio un error de sintaxis o fallo al dibujar. */
|
|
125
|
+
export class RenderError extends DocVizError {
|
|
126
|
+
constructor(renderer, message, detail, code = ERROR_CODES.RENDER_FAILED) {
|
|
127
|
+
super(message, { renderer }, detail, code);
|
|
128
|
+
this.name = 'RenderError';
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** Una ruta intento salirse del directorio de salida configurado. */
|
|
132
|
+
export class PathSecurityError extends DocVizError {
|
|
133
|
+
constructor(message, detail) {
|
|
134
|
+
super(message, {}, detail, ERROR_CODES.PATH_SECURITY);
|
|
135
|
+
this.name = 'PathSecurityError';
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** El DSL declarativo no cumple su esquema. */
|
|
139
|
+
export class DslValidationError extends DocVizError {
|
|
140
|
+
constructor(message, detail, code = ERROR_CODES.DSL) {
|
|
141
|
+
super(message, {}, detail, code);
|
|
142
|
+
this.name = 'DslValidationError';
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/** Error de configuracion (docviz.config.yaml o flags de CLI). */
|
|
146
|
+
export class ConfigError extends DocVizError {
|
|
147
|
+
constructor(message, detail) {
|
|
148
|
+
super(message, {}, detail, ERROR_CODES.CONFIG);
|
|
149
|
+
this.name = 'ConfigError';
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/** Agrupa todos los fallos de un build para reportarlos juntos. */
|
|
153
|
+
export class BuildFailedError extends Error {
|
|
154
|
+
errors;
|
|
155
|
+
constructor(errors) {
|
|
156
|
+
super(`el build fallo con ${errors.length} error(es)`);
|
|
157
|
+
this.name = 'BuildFailedError';
|
|
158
|
+
this.errors = errors;
|
|
159
|
+
}
|
|
160
|
+
format() {
|
|
161
|
+
return this.errors.map((e) => e.format()).join('\n\n');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hashing determinista de recursos (seccion 10 de la especificacion).
|
|
3
|
+
*
|
|
4
|
+
* SHA256(rendererType + source + theme + rendererVersion + format)
|
|
5
|
+
*
|
|
6
|
+
* `format` no aparece en el enunciado original pero es obligatorio: el mismo
|
|
7
|
+
* diagrama emitido como SVG y como PNG son recursos distintos y compartir hash
|
|
8
|
+
* los haria colisionar. El conjunto es un superconjunto del exigido, asi que
|
|
9
|
+
* todas las invalidaciones pedidas se siguen cumpliendo.
|
|
10
|
+
*/
|
|
11
|
+
import type { OutputFormat } from './types.js';
|
|
12
|
+
/** Longitud minima y maxima admitidas para el hash truncado. */
|
|
13
|
+
export declare const MIN_HASH_LENGTH = 8;
|
|
14
|
+
export declare const MAX_HASH_LENGTH = 16;
|
|
15
|
+
export declare const DEFAULT_HASH_LENGTH = 12;
|
|
16
|
+
export interface HashInput {
|
|
17
|
+
rendererType: string;
|
|
18
|
+
source: string;
|
|
19
|
+
themeName: string;
|
|
20
|
+
/** Huella del contenido del tema: cambiar el tema invalida el recurso. */
|
|
21
|
+
themeFingerprint: string;
|
|
22
|
+
rendererVersion: string;
|
|
23
|
+
format: OutputFormat;
|
|
24
|
+
}
|
|
25
|
+
/** Digest completo en hexadecimal (64 caracteres). */
|
|
26
|
+
export declare function fullHash(input: HashInput): string;
|
|
27
|
+
/**
|
|
28
|
+
* Digest truncado usado en el nombre de archivo.
|
|
29
|
+
*
|
|
30
|
+
* La estrategia frente a colisiones no es la longitud sino la deteccion: el
|
|
31
|
+
* builder registra cada hash truncado junto a su digest completo y aborta el
|
|
32
|
+
* build si dos fuentes distintas producen el mismo prefijo (ver `HashRegistry`).
|
|
33
|
+
*/
|
|
34
|
+
export declare function shortHash(input: HashInput, length?: number): string;
|
|
35
|
+
/** Huella de contenido de cualquier objeto serializable (usada por los temas). */
|
|
36
|
+
export declare function fingerprint(value: unknown): string;
|
|
37
|
+
/** JSON con claves ordenadas, para que el orden de propiedades no altere el hash. */
|
|
38
|
+
export declare function stableStringify(value: unknown): string;
|
|
39
|
+
/**
|
|
40
|
+
* Detector de colisiones de hash truncado.
|
|
41
|
+
*
|
|
42
|
+
* Es lo que permite truncar a 8-16 caracteres sin riesgo: si dos entradas
|
|
43
|
+
* distintas comparten prefijo, el build falla en lugar de sobrescribir un
|
|
44
|
+
* recurso ajeno.
|
|
45
|
+
*/
|
|
46
|
+
export declare class HashRegistry {
|
|
47
|
+
private readonly seen;
|
|
48
|
+
/** Devuelve true si el prefijo ya estaba registrado con el mismo digest. */
|
|
49
|
+
claim(short: string, full: string): {
|
|
50
|
+
ok: true;
|
|
51
|
+
duplicate: boolean;
|
|
52
|
+
} | {
|
|
53
|
+
ok: false;
|
|
54
|
+
};
|
|
55
|
+
clear(): void;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/core/hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,gEAAgE;AAChE,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;CACtB;AAkBD,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,GAAE,MAA4B,GAAG,MAAM,CAOxF;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAElD;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOtD;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAElD,4EAA4E;IAC5E,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAA;KAAE;IAUpF,KAAK,IAAI,IAAI;CAGd"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/core/hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lectura de la version de un paquete instalado.
|
|
3
|
+
*
|
|
4
|
+
* No se puede importar `<paquete>/package.json` directamente: varios paquetes
|
|
5
|
+
* (d2, graphviz-wasm, vega) no lo exponen en su mapa `exports`. Se resuelve el
|
|
6
|
+
* modulo y se sube por el arbol hasta encontrar su `package.json`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function packageVersion(name: string, fallback?: string): string;
|
|
9
|
+
//# sourceMappingURL=package-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.d.ts","sourceRoot":"","sources":["../../src/core/package-version.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAgB,GAAG,MAAM,CA4B7E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lectura de la version de un paquete instalado.
|
|
3
|
+
*
|
|
4
|
+
* No se puede importar `<paquete>/package.json` directamente: varios paquetes
|
|
5
|
+
* (d2, graphviz-wasm, vega) no lo exponen en su mapa `exports`. Se resuelve el
|
|
6
|
+
* modulo y se sube por el arbol hasta encontrar su `package.json`.
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync } from 'node:fs';
|
|
9
|
+
import { createRequire } from 'node:module';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
const require_ = createRequire(import.meta.url);
|
|
12
|
+
const cache = new Map();
|
|
13
|
+
export function packageVersion(name, fallback = 'desconocida') {
|
|
14
|
+
const cached = cache.get(name);
|
|
15
|
+
if (cached !== undefined)
|
|
16
|
+
return cached;
|
|
17
|
+
let version = fallback;
|
|
18
|
+
try {
|
|
19
|
+
let dir = path.dirname(require_.resolve(name));
|
|
20
|
+
for (let depth = 0; depth < 12; depth += 1) {
|
|
21
|
+
const candidate = path.join(dir, 'package.json');
|
|
22
|
+
try {
|
|
23
|
+
const pkg = JSON.parse(readFileSync(candidate, 'utf8'));
|
|
24
|
+
if (pkg.name === name && typeof pkg.version === 'string') {
|
|
25
|
+
version = pkg.version;
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// seguir subiendo
|
|
31
|
+
}
|
|
32
|
+
const parent = path.dirname(dir);
|
|
33
|
+
if (parent === dir)
|
|
34
|
+
break;
|
|
35
|
+
dir = parent;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// paquete no resoluble: se devuelve el valor por defecto
|
|
40
|
+
}
|
|
41
|
+
cache.set(name, version);
|
|
42
|
+
return version;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=package-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../src/core/package-version.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAQ,GAAG,aAAa;IACnE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAwC,CAAC;gBAC/F,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACzD,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;oBACtB,MAAM;gBACR,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kBAAkB;YACpB,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM;YAC1B,GAAG,GAAG,MAAM,CAAC;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolucion de rutas de recursos y contencion del directorio de salida
|
|
3
|
+
* (seccion 12, puntos 8 y 9 de la especificacion).
|
|
4
|
+
*
|
|
5
|
+
* Todo lo que se escriba debe quedar dentro del directorio configurado. Ninguna
|
|
6
|
+
* cadena procedente de un documento Markdown se usa como ruta sin pasar por
|
|
7
|
+
* `assertInside`.
|
|
8
|
+
*/
|
|
9
|
+
import type { OutputFormat } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Convierte un titulo en un nombre de archivo seguro: minusculas ASCII,
|
|
12
|
+
* separadas por guiones, sin puntos ni separadores de ruta.
|
|
13
|
+
*/
|
|
14
|
+
export declare function slugify(title: string, fallback?: string): string;
|
|
15
|
+
/** Nombre de archivo del recurso: `<slug>-<hash>.<ext>`. */
|
|
16
|
+
export declare function assetFileName(title: string, hash: string, format: OutputFormat): string;
|
|
17
|
+
/**
|
|
18
|
+
* Verifica que `candidate` quede estrictamente dentro de `root`.
|
|
19
|
+
*
|
|
20
|
+
* Rechaza `..`, rutas absolutas inyectadas, bytes nulos y enlaces que apunten
|
|
21
|
+
* fuera del arbol. Devuelve la ruta absoluta normalizada.
|
|
22
|
+
*/
|
|
23
|
+
export declare function assertInside(root: string, candidate: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Valida un fragmento de ruta relativa proveniente de configuracion
|
|
26
|
+
* (por ejemplo `output.assetsDir`).
|
|
27
|
+
*/
|
|
28
|
+
export declare function assertRelativeDir(value: string, field: string): string;
|
|
29
|
+
/** Convierte una ruta del sistema a separadores POSIX (Markdown siempre usa `/`). */
|
|
30
|
+
export declare function toPosix(p: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Ruta legible de un archivo en un mensaje de error.
|
|
33
|
+
*
|
|
34
|
+
* Relativa a la raiz del proyecto mientras el archivo este dentro; si esta
|
|
35
|
+
* fuera —compilar un directorio de otro sitio es legitimo— se muestra completa,
|
|
36
|
+
* porque `../../../../../private/tmp/...` no ayuda a nadie a encontrarlo.
|
|
37
|
+
*/
|
|
38
|
+
export declare function displayPath(rootDir: string, file: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Ruta relativa desde el documento compilado hasta el recurso, siempre con
|
|
41
|
+
* prefijo `./` o `../` para que sea inequivocamente relativa.
|
|
42
|
+
*/
|
|
43
|
+
export declare function relativeAssetPath(fromDocumentDir: string, assetAbsolutePath: string): string;
|
|
44
|
+
/** Crea el directorio de recursos, comprobando antes que quede dentro de la salida. */
|
|
45
|
+
export declare function ensureAssetsDir(outputDir: string, assetsDir: string): Promise<string>;
|
|
46
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,MAAM,CAUpE;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAEvF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAepE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYtE;AAED,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAI5F;AAED,uFAAuF;AACvF,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK3F"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolucion de rutas de recursos y contencion del directorio de salida
|
|
3
|
+
* (seccion 12, puntos 8 y 9 de la especificacion).
|
|
4
|
+
*
|
|
5
|
+
* Todo lo que se escriba debe quedar dentro del directorio configurado. Ninguna
|
|
6
|
+
* cadena procedente de un documento Markdown se usa como ruta sin pasar por
|
|
7
|
+
* `assertInside`.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdir } from 'node:fs/promises';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
import { PathSecurityError } from './errors.js';
|
|
12
|
+
const DIACRITICS = /[̀-ͯ]/g;
|
|
13
|
+
const NON_SLUG = /[^a-z0-9]+/g;
|
|
14
|
+
/**
|
|
15
|
+
* Convierte un titulo en un nombre de archivo seguro: minusculas ASCII,
|
|
16
|
+
* separadas por guiones, sin puntos ni separadores de ruta.
|
|
17
|
+
*/
|
|
18
|
+
export function slugify(title, fallback = 'diagrama') {
|
|
19
|
+
const slug = title
|
|
20
|
+
.normalize('NFD')
|
|
21
|
+
.replace(DIACRITICS, '')
|
|
22
|
+
.toLowerCase()
|
|
23
|
+
.replace(NON_SLUG, '-')
|
|
24
|
+
.replace(/^-+|-+$/g, '')
|
|
25
|
+
.slice(0, 60)
|
|
26
|
+
.replace(/-+$/g, '');
|
|
27
|
+
return slug.length > 0 ? slug : fallback;
|
|
28
|
+
}
|
|
29
|
+
/** Nombre de archivo del recurso: `<slug>-<hash>.<ext>`. */
|
|
30
|
+
export function assetFileName(title, hash, format) {
|
|
31
|
+
return `${slugify(title)}-${hash}.${format}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Verifica que `candidate` quede estrictamente dentro de `root`.
|
|
35
|
+
*
|
|
36
|
+
* Rechaza `..`, rutas absolutas inyectadas, bytes nulos y enlaces que apunten
|
|
37
|
+
* fuera del arbol. Devuelve la ruta absoluta normalizada.
|
|
38
|
+
*/
|
|
39
|
+
export function assertInside(root, candidate) {
|
|
40
|
+
if (candidate.includes('\0')) {
|
|
41
|
+
throw new PathSecurityError('la ruta contiene un byte nulo', candidate.replace(/\0/g, '\\0'));
|
|
42
|
+
}
|
|
43
|
+
const absRoot = path.resolve(root);
|
|
44
|
+
const absCandidate = path.resolve(absRoot, candidate);
|
|
45
|
+
const rel = path.relative(absRoot, absCandidate);
|
|
46
|
+
if (rel === '')
|
|
47
|
+
return absCandidate;
|
|
48
|
+
if (rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
49
|
+
throw new PathSecurityError('la ruta se sale del directorio de salida configurado', `raiz: ${absRoot}\nruta: ${absCandidate}`);
|
|
50
|
+
}
|
|
51
|
+
return absCandidate;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Valida un fragmento de ruta relativa proveniente de configuracion
|
|
55
|
+
* (por ejemplo `output.assetsDir`).
|
|
56
|
+
*/
|
|
57
|
+
export function assertRelativeDir(value, field) {
|
|
58
|
+
if (value.trim() === '') {
|
|
59
|
+
throw new PathSecurityError(`${field} no puede estar vacio`);
|
|
60
|
+
}
|
|
61
|
+
if (path.isAbsolute(value) || /^[a-zA-Z]:[\\/]/.test(value)) {
|
|
62
|
+
throw new PathSecurityError(`${field} no admite rutas absolutas`, value);
|
|
63
|
+
}
|
|
64
|
+
const normalized = path.normalize(value).replace(/\\/g, '/').replace(/^\.\//, '');
|
|
65
|
+
if (normalized === '..' || normalized.startsWith('../')) {
|
|
66
|
+
throw new PathSecurityError(`${field} no puede apuntar fuera del directorio de salida`, value);
|
|
67
|
+
}
|
|
68
|
+
return normalized.replace(/\/+$/, '');
|
|
69
|
+
}
|
|
70
|
+
/** Convierte una ruta del sistema a separadores POSIX (Markdown siempre usa `/`). */
|
|
71
|
+
export function toPosix(p) {
|
|
72
|
+
return p.split(path.sep).join('/');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Ruta legible de un archivo en un mensaje de error.
|
|
76
|
+
*
|
|
77
|
+
* Relativa a la raiz del proyecto mientras el archivo este dentro; si esta
|
|
78
|
+
* fuera —compilar un directorio de otro sitio es legitimo— se muestra completa,
|
|
79
|
+
* porque `../../../../../private/tmp/...` no ayuda a nadie a encontrarlo.
|
|
80
|
+
*/
|
|
81
|
+
export function displayPath(rootDir, file) {
|
|
82
|
+
const relative = path.relative(rootDir, file);
|
|
83
|
+
if (relative === '' || relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
84
|
+
return toPosix(path.resolve(file));
|
|
85
|
+
}
|
|
86
|
+
return toPosix(relative);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Ruta relativa desde el documento compilado hasta el recurso, siempre con
|
|
90
|
+
* prefijo `./` o `../` para que sea inequivocamente relativa.
|
|
91
|
+
*/
|
|
92
|
+
export function relativeAssetPath(fromDocumentDir, assetAbsolutePath) {
|
|
93
|
+
const rel = toPosix(path.relative(fromDocumentDir, assetAbsolutePath));
|
|
94
|
+
if (rel.startsWith('.'))
|
|
95
|
+
return rel;
|
|
96
|
+
return `./${rel}`;
|
|
97
|
+
}
|
|
98
|
+
/** Crea el directorio de recursos, comprobando antes que quede dentro de la salida. */
|
|
99
|
+
export async function ensureAssetsDir(outputDir, assetsDir) {
|
|
100
|
+
const safe = assertRelativeDir(assetsDir, 'output.assetsDir');
|
|
101
|
+
const abs = assertInside(outputDir, safe);
|
|
102
|
+
await mkdir(abs, { recursive: true });
|
|
103
|
+
return abs;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registro de renderers.
|
|
3
|
+
*
|
|
4
|
+
* El parser Markdown consulta este registro para saber que lenguajes son
|
|
5
|
+
* "compilables"; nunca importa un renderer concreto.
|
|
6
|
+
*/
|
|
7
|
+
import type { DiagramRenderer } from './types.js';
|
|
8
|
+
export declare class RendererRegistry {
|
|
9
|
+
private readonly renderers;
|
|
10
|
+
/** Alias de lenguaje -> tipo canonico (`dot` -> `graphviz`, etc.). */
|
|
11
|
+
private readonly aliases;
|
|
12
|
+
register(type: string, renderer: DiagramRenderer, aliases?: readonly string[]): this;
|
|
13
|
+
unregister(type: string): boolean;
|
|
14
|
+
/** Resuelve alias y devuelve el tipo canonico, o `undefined` si no existe. */
|
|
15
|
+
resolve(type: string): string | undefined;
|
|
16
|
+
has(type: string): boolean;
|
|
17
|
+
/** Devuelve el renderer o lanza `UnknownRendererError`. */
|
|
18
|
+
get(type: string): DiagramRenderer;
|
|
19
|
+
types(): string[];
|
|
20
|
+
/** Todos los lenguajes reconocidos en una valla de codigo, alias incluidos. */
|
|
21
|
+
languages(): string[];
|
|
22
|
+
disposeAll(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO,GAAG,IAAI;IAOxF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQjC,8EAA8E;IAC9E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,2DAA2D;IAC3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAMlC,KAAK,IAAI,MAAM,EAAE;IAIjB,+EAA+E;IAC/E,SAAS,IAAI,MAAM,EAAE;IAIf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAalC"}
|