zombie-mermaid 2.2.3 → 2.2.6

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.
Files changed (321) hide show
  1. package/README.md +4 -4
  2. package/dist/ascii.cjs +1 -11
  3. package/dist/ascii.d.cts +1 -167
  4. package/dist/ascii.d.ts +1 -167
  5. package/dist/ascii.js +1 -6591
  6. package/dist/cli.js +836 -10946
  7. package/dist/index.cjs +2 -81
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +42 -680
  10. package/dist/index.d.ts +42 -680
  11. package/dist/index.js +408 -10002
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcp.cjs +1 -17909
  14. package/dist/mcp.d.cts +1 -11
  15. package/dist/mcp.d.ts +1 -11
  16. package/dist/mcp.js +1 -17884
  17. package/package.json +29 -29
  18. package/src/__tests__/workspace-package-boundaries.test.ts +15 -16
  19. package/src/__tests__/xychart-parser-categories.test.ts +78 -0
  20. package/src/ascii-entry.ts +14 -0
  21. package/src/cli/html-viewer.ts +5 -0
  22. package/src/mcp-entry.ts +21 -0
  23. package/dist/ascii.cjs.map +0 -1
  24. package/dist/ascii.js.map +0 -1
  25. package/dist/mcp.cjs.map +0 -1
  26. package/dist/mcp.js.map +0 -1
  27. package/packages/ascii-renderer/LICENSE +0 -22
  28. package/packages/ascii-renderer/src/ansi.ts +0 -490
  29. package/packages/ascii-renderer/src/canvas.ts +0 -658
  30. package/packages/ascii-renderer/src/class-diagram.ts +0 -2001
  31. package/packages/ascii-renderer/src/converter.ts +0 -446
  32. package/packages/ascii-renderer/src/coords.ts +0 -58
  33. package/packages/ascii-renderer/src/display-width.ts +0 -151
  34. package/packages/ascii-renderer/src/draw-arrows.ts +0 -549
  35. package/packages/ascii-renderer/src/draw-boxes.ts +0 -267
  36. package/packages/ascii-renderer/src/draw-bundles.ts +0 -611
  37. package/packages/ascii-renderer/src/draw-lines.ts +0 -174
  38. package/packages/ascii-renderer/src/draw-subgraphs.ts +0 -108
  39. package/packages/ascii-renderer/src/draw.ts +0 -337
  40. package/packages/ascii-renderer/src/edge-bundling.ts +0 -435
  41. package/packages/ascii-renderer/src/edge-cell-styles.ts +0 -81
  42. package/packages/ascii-renderer/src/edge-routing.ts +0 -1049
  43. package/packages/ascii-renderer/src/er-diagram.ts +0 -1488
  44. package/packages/ascii-renderer/src/flowchart.ts +0 -94
  45. package/packages/ascii-renderer/src/grid-occupancy.ts +0 -234
  46. package/packages/ascii-renderer/src/grid.ts +0 -1267
  47. package/packages/ascii-renderer/src/hyperlinks.ts +0 -248
  48. package/packages/ascii-renderer/src/index.ts +0 -163
  49. package/packages/ascii-renderer/src/lane-search.ts +0 -68
  50. package/packages/ascii-renderer/src/multiline-utils.ts +0 -82
  51. package/packages/ascii-renderer/src/pathfinder.ts +0 -448
  52. package/packages/ascii-renderer/src/registry.ts +0 -88
  53. package/packages/ascii-renderer/src/sequence.ts +0 -1318
  54. package/packages/ascii-renderer/src/shapes/circle.ts +0 -31
  55. package/packages/ascii-renderer/src/shapes/corners.ts +0 -273
  56. package/packages/ascii-renderer/src/shapes/diamond.ts +0 -31
  57. package/packages/ascii-renderer/src/shapes/hexagon.ts +0 -31
  58. package/packages/ascii-renderer/src/shapes/index.ts +0 -123
  59. package/packages/ascii-renderer/src/shapes/rectangle.ts +0 -199
  60. package/packages/ascii-renderer/src/shapes/rounded.ts +0 -31
  61. package/packages/ascii-renderer/src/shapes/special.ts +0 -352
  62. package/packages/ascii-renderer/src/shapes/stadium.ts +0 -122
  63. package/packages/ascii-renderer/src/shapes/state.ts +0 -204
  64. package/packages/ascii-renderer/src/shapes/types.ts +0 -78
  65. package/packages/ascii-renderer/src/territory.ts +0 -136
  66. package/packages/ascii-renderer/src/types.ts +0 -454
  67. package/packages/ascii-renderer/src/validate.ts +0 -189
  68. package/packages/ascii-renderer/src/xychart.ts +0 -1085
  69. package/packages/core/LICENSE +0 -22
  70. package/packages/core/src/click-directive.ts +0 -106
  71. package/packages/core/src/color-utils.ts +0 -205
  72. package/packages/core/src/diagram-type.ts +0 -35
  73. package/packages/core/src/direction-override.ts +0 -46
  74. package/packages/core/src/direction.ts +0 -56
  75. package/packages/core/src/index.ts +0 -34
  76. package/packages/core/src/init-directive.ts +0 -248
  77. package/packages/core/src/multiline-utils.ts +0 -275
  78. package/packages/core/src/statements.ts +0 -197
  79. package/packages/core/src/style-directives.ts +0 -214
  80. package/packages/core/src/text-metrics.ts +0 -498
  81. package/packages/core/src/theme.ts +0 -696
  82. package/packages/core/src/types.ts +0 -670
  83. package/packages/mcp/LICENSE +0 -22
  84. package/packages/mcp/src/index.ts +0 -17
  85. package/packages/mcp/src/server.ts +0 -135
  86. package/packages/mcp/src/tools/check-sequence-activations.ts +0 -91
  87. package/packages/mcp/src/tools/fix-sequence-activations.ts +0 -77
  88. package/packages/mcp/src/tools/render-ascii.ts +0 -99
  89. package/packages/mcp/src/tools/render-svg.ts +0 -95
  90. package/packages/mermaid-parser/LICENSE +0 -22
  91. package/packages/mermaid-parser/src/class/format.ts +0 -15
  92. package/packages/mermaid-parser/src/class/parser.ts +0 -593
  93. package/packages/mermaid-parser/src/class/types.ts +0 -166
  94. package/packages/mermaid-parser/src/er/parser.ts +0 -286
  95. package/packages/mermaid-parser/src/er/types.ts +0 -99
  96. package/packages/mermaid-parser/src/expanded-shapes.ts +0 -376
  97. package/packages/mermaid-parser/src/index.ts +0 -48
  98. package/packages/mermaid-parser/src/sequence/activation-check.ts +0 -149
  99. package/packages/mermaid-parser/src/sequence/activation-fix.ts +0 -112
  100. package/packages/mermaid-parser/src/sequence/box-color.ts +0 -85
  101. package/packages/mermaid-parser/src/sequence/parser.ts +0 -613
  102. package/packages/mermaid-parser/src/sequence/types.ts +0 -242
  103. package/packages/mermaid-parser/src/xychart/colors.ts +0 -177
  104. package/packages/mermaid-parser/src/xychart/parser.ts +0 -203
  105. package/packages/mermaid-parser/src/xychart/types.ts +0 -150
  106. package/packages/svg-renderer/LICENSE +0 -22
  107. package/packages/svg-renderer/src/class/layout.ts +0 -360
  108. package/packages/svg-renderer/src/class/renderer.ts +0 -636
  109. package/packages/svg-renderer/src/edge-curves.ts +0 -204
  110. package/packages/svg-renderer/src/elk-instance.ts +0 -292
  111. package/packages/svg-renderer/src/er/layout.ts +0 -200
  112. package/packages/svg-renderer/src/er/renderer.ts +0 -493
  113. package/packages/svg-renderer/src/index.ts +0 -58
  114. package/packages/svg-renderer/src/layout-engine/constants.ts +0 -19
  115. package/packages/svg-renderer/src/layout-engine/edge-bundling.ts +0 -379
  116. package/packages/svg-renderer/src/layout-engine/elk-adapter-utils.ts +0 -81
  117. package/packages/svg-renderer/src/layout-engine/elk-graph-builder.ts +0 -240
  118. package/packages/svg-renderer/src/layout-engine/from-elk.ts +0 -685
  119. package/packages/svg-renderer/src/layout-engine/layer-alignment.ts +0 -174
  120. package/packages/svg-renderer/src/layout-engine/to-elk.ts +0 -695
  121. package/packages/svg-renderer/src/layout-engine.ts +0 -74
  122. package/packages/svg-renderer/src/layout.ts +0 -8
  123. package/packages/svg-renderer/src/renderer.ts +0 -1485
  124. package/packages/svg-renderer/src/resolve-colors.ts +0 -339
  125. package/packages/svg-renderer/src/sequence/layout.ts +0 -698
  126. package/packages/svg-renderer/src/sequence/renderer.ts +0 -546
  127. package/packages/svg-renderer/src/shape-clipping.ts +0 -197
  128. package/packages/svg-renderer/src/styles.ts +0 -118
  129. package/packages/svg-renderer/src/xychart/layout.ts +0 -682
  130. package/packages/svg-renderer/src/xychart/renderer.ts +0 -684
  131. package/src/__tests__/ascii-canvas-write.test.ts +0 -137
  132. package/src/__tests__/ascii-charset-border-junctions.test.ts +0 -63
  133. package/src/__tests__/ascii-cjk-width.test.ts +0 -150
  134. package/src/__tests__/ascii-class-box-occupancy.test.ts +0 -462
  135. package/src/__tests__/ascii-class-column-width-488-489.test.ts +0 -639
  136. package/src/__tests__/ascii-class-cross-level-jog-corruption.test.ts +0 -187
  137. package/src/__tests__/ascii-class-detour-label-routing-487.test.ts +0 -114
  138. package/src/__tests__/ascii-class-diagram-compartments.test.ts +0 -70
  139. package/src/__tests__/ascii-class-label-box-collision.test.ts +0 -60
  140. package/src/__tests__/ascii-class-label-row-collision-531.test.ts +0 -135
  141. package/src/__tests__/ascii-class-label-territory-row-awareness.test.ts +0 -57
  142. package/src/__tests__/ascii-class-padding.test.ts +0 -104
  143. package/src/__tests__/ascii-class-parent-alignment-971.test.ts +0 -139
  144. package/src/__tests__/ascii-class-parent-alignment-972.test.ts +0 -208
  145. package/src/__tests__/ascii-class-reciprocal-relationships-448.test.ts +0 -169
  146. package/src/__tests__/ascii-combining-mark-width.test.ts +0 -70
  147. package/src/__tests__/ascii-coords-overlay.test.ts +0 -64
  148. package/src/__tests__/ascii-decision-lr-box-start.test.ts +0 -106
  149. package/src/__tests__/ascii-display-width-unit.test.ts +0 -154
  150. package/src/__tests__/ascii-draw-arrows-coverage.test.ts +0 -171
  151. package/src/__tests__/ascii-draw-arrows-single-point-path.test.ts +0 -112
  152. package/src/__tests__/ascii-edge-bundling-rank-violation-454.test.ts +0 -72
  153. package/src/__tests__/ascii-edge-ending-glyphs.test.ts +0 -206
  154. package/src/__tests__/ascii-edge-label-diagonal-fallback-418.test.ts +0 -95
  155. package/src/__tests__/ascii-edge-routing-fixes.test.ts +0 -178
  156. package/src/__tests__/ascii-edge-routing-single-point-path.test.ts +0 -107
  157. package/src/__tests__/ascii-edge-styles.test.ts +0 -149
  158. package/src/__tests__/ascii-emoji-cluster-width.test.ts +0 -101
  159. package/src/__tests__/ascii-er-box-occupancy.test.ts +0 -251
  160. package/src/__tests__/ascii-er-cardinality.test.ts +0 -40
  161. package/src/__tests__/ascii-er-corner-glyphs.test.ts +0 -249
  162. package/src/__tests__/ascii-er-jog-stray-line.test.ts +0 -111
  163. package/src/__tests__/ascii-er-label-padding.test.ts +0 -118
  164. package/src/__tests__/ascii-er-padding.test.ts +0 -114
  165. package/src/__tests__/ascii-er-relationship-label-corruption-350.test.ts +0 -458
  166. package/src/__tests__/ascii-er-relationship-overwrite.test.ts +0 -325
  167. package/src/__tests__/ascii-er-stray-connectors.test.ts +0 -347
  168. package/src/__tests__/ascii-er-unrelated-stem-separation-411.test.ts +0 -98
  169. package/src/__tests__/ascii-er-vertical-one-marker.test.ts +0 -110
  170. package/src/__tests__/ascii-label-line-terminal-fallback.test.ts +0 -172
  171. package/src/__tests__/ascii-lane-search.test.ts +0 -207
  172. package/src/__tests__/ascii-multibox-cjk-width.test.ts +0 -184
  173. package/src/__tests__/ascii-multiline.test.ts +0 -291
  174. package/src/__tests__/ascii-padding-edge-cases.test.ts +0 -154
  175. package/src/__tests__/ascii-pathfinder-route-edge.test.ts +0 -194
  176. package/src/__tests__/ascii-sequence-alt-else-label.test.ts +0 -236
  177. package/src/__tests__/ascii-sequence-block-wall-clearance.test.ts +0 -217
  178. package/src/__tests__/ascii-sequence-box-group.test.ts +0 -159
  179. package/src/__tests__/ascii-sequence-cjk-width.test.ts +0 -235
  180. package/src/__tests__/ascii-sequence-create-destroy.test.ts +0 -114
  181. package/src/__tests__/ascii-sequence-form-invariants.test.ts +0 -432
  182. package/src/__tests__/ascii-sequence-mermaid-parity.test.ts +0 -219
  183. package/src/__tests__/ascii-sequence-notes.test.ts +0 -61
  184. package/src/__tests__/ascii-sequence-padding.test.ts +0 -119
  185. package/src/__tests__/ascii-sequence-self-arrow.test.ts +0 -206
  186. package/src/__tests__/ascii-shape-diamond.test.ts +0 -38
  187. package/src/__tests__/ascii-shape-rectangle.test.ts +0 -258
  188. package/src/__tests__/ascii-shape-rounded.test.ts +0 -36
  189. package/src/__tests__/ascii-shapes-circle.test.ts +0 -41
  190. package/src/__tests__/ascii-shapes-hexagon.test.ts +0 -42
  191. package/src/__tests__/ascii-shapes-special.test.ts +0 -349
  192. package/src/__tests__/ascii-shapes-stadium.test.ts +0 -217
  193. package/src/__tests__/ascii-shapes-state.test.ts +0 -234
  194. package/src/__tests__/ascii-state-bidirectional-label-swap-530.test.ts +0 -130
  195. package/src/__tests__/ascii-subgraph-direction-honored-445.test.ts +0 -90
  196. package/src/__tests__/ascii-subgraph-label-border-clip.test.ts +0 -152
  197. package/src/__tests__/ascii-subgraph-title-padding.test.ts +0 -77
  198. package/src/__tests__/ascii-territory-unit.test.ts +0 -219
  199. package/src/__tests__/ascii-validate.test.ts +0 -220
  200. package/src/__tests__/ascii.test.ts +0 -328
  201. package/src/__tests__/box-color.test.ts +0 -80
  202. package/src/__tests__/class-arrow-directions.test.ts +0 -505
  203. package/src/__tests__/click-directive.test.ts +0 -63
  204. package/src/__tests__/color-utils.test.ts +0 -186
  205. package/src/__tests__/diagram-type.test.ts +0 -28
  206. package/src/__tests__/draw-lines.test.ts +0 -93
  207. package/src/__tests__/edge-cell-styles.test.ts +0 -180
  208. package/src/__tests__/elk-adapter-utils.test.ts +0 -166
  209. package/src/__tests__/grid-occupancy.test.ts +0 -240
  210. package/src/__tests__/helpers/ascii-form.ts +0 -142
  211. package/src/__tests__/helpers/terminal-display-width.ts +0 -74
  212. package/src/__tests__/mcp-check-sequence-activations-tool.test.ts +0 -85
  213. package/src/__tests__/mcp-fix-sequence-activations-tool.test.ts +0 -134
  214. package/src/__tests__/mcp-server.test.ts +0 -163
  215. package/src/__tests__/pathfinder.test.ts +0 -246
  216. package/src/__tests__/sequence-activation-fix.test.ts +0 -91
  217. package/src/__tests__/testdata/ascii/ampersand_lhs.txt +0 -18
  218. package/src/__tests__/testdata/ascii/ampersand_lhs_and_rhs.txt +0 -18
  219. package/src/__tests__/testdata/ascii/ampersand_rhs.txt +0 -18
  220. package/src/__tests__/testdata/ascii/ampersand_td_fanin.txt +0 -18
  221. package/src/__tests__/testdata/ascii/ampersand_td_fanout.txt +0 -18
  222. package/src/__tests__/testdata/ascii/ampersand_without_edge.txt +0 -18
  223. package/src/__tests__/testdata/ascii/back_reference_from_child.txt +0 -10
  224. package/src/__tests__/testdata/ascii/backlink_from_bottom.txt +0 -22
  225. package/src/__tests__/testdata/ascii/backlink_from_top.txt +0 -22
  226. package/src/__tests__/testdata/ascii/backlink_with_short_y_padding.txt +0 -20
  227. package/src/__tests__/testdata/ascii/cls_all_relationships.txt +0 -19
  228. package/src/__tests__/testdata/ascii/cls_annotation.txt +0 -29
  229. package/src/__tests__/testdata/ascii/cls_association.txt +0 -14
  230. package/src/__tests__/testdata/ascii/cls_basic.txt +0 -15
  231. package/src/__tests__/testdata/ascii/cls_dependency.txt +0 -14
  232. package/src/__tests__/testdata/ascii/cls_inheritance.txt +0 -20
  233. package/src/__tests__/testdata/ascii/cls_methods.txt +0 -21
  234. package/src/__tests__/testdata/ascii/comments.txt +0 -23
  235. package/src/__tests__/testdata/ascii/custom_padding.txt +0 -10
  236. package/src/__tests__/testdata/ascii/duplicate_labels.txt +0 -19
  237. package/src/__tests__/testdata/ascii/er_attributes.txt +0 -21
  238. package/src/__tests__/testdata/ascii/er_basic.txt +0 -8
  239. package/src/__tests__/testdata/ascii/er_identifying.txt +0 -18
  240. package/src/__tests__/testdata/ascii/flowchart_tb_simple.txt +0 -29
  241. package/src/__tests__/testdata/ascii/graph_bt_direction.txt +0 -28
  242. package/src/__tests__/testdata/ascii/graph_tb_direction.txt +0 -26
  243. package/src/__tests__/testdata/ascii/nested_subgraphs_with_labels.txt +0 -36
  244. package/src/__tests__/testdata/ascii/preserve_order_of_definition.txt +0 -23
  245. package/src/__tests__/testdata/ascii/self_reference.txt +0 -10
  246. package/src/__tests__/testdata/ascii/self_reference_with_edge.txt +0 -10
  247. package/src/__tests__/testdata/ascii/seq_basic.txt +0 -17
  248. package/src/__tests__/testdata/ascii/seq_multiple_messages.txt +0 -25
  249. package/src/__tests__/testdata/ascii/seq_self_message.txt +0 -18
  250. package/src/__tests__/testdata/ascii/single_node.txt +0 -8
  251. package/src/__tests__/testdata/ascii/single_node_longer_name.txt +0 -8
  252. package/src/__tests__/testdata/ascii/subgraph_complex_mixed.txt +0 -38
  253. package/src/__tests__/testdata/ascii/subgraph_complex_nested.txt +0 -49
  254. package/src/__tests__/testdata/ascii/subgraph_direction_override.txt +0 -47
  255. package/src/__tests__/testdata/ascii/subgraph_empty.txt +0 -10
  256. package/src/__tests__/testdata/ascii/subgraph_mixed_nodes.txt +0 -20
  257. package/src/__tests__/testdata/ascii/subgraph_mixed_nodes_td.txt +0 -48
  258. package/src/__tests__/testdata/ascii/subgraph_multiple_edges.txt +0 -32
  259. package/src/__tests__/testdata/ascii/subgraph_multiple_nodes.txt +0 -16
  260. package/src/__tests__/testdata/ascii/subgraph_nested.txt +0 -24
  261. package/src/__tests__/testdata/ascii/subgraph_nested_with_external.txt +0 -30
  262. package/src/__tests__/testdata/ascii/subgraph_node_outside_lr.txt +0 -17
  263. package/src/__tests__/testdata/ascii/subgraph_single_node.txt +0 -16
  264. package/src/__tests__/testdata/ascii/subgraph_td_direction.txt +0 -26
  265. package/src/__tests__/testdata/ascii/subgraph_td_multiple.txt +0 -44
  266. package/src/__tests__/testdata/ascii/subgraph_td_multiple_paddingy.txt +0 -42
  267. package/src/__tests__/testdata/ascii/subgraph_three_levels_nested.txt +0 -32
  268. package/src/__tests__/testdata/ascii/subgraph_three_separate.txt +0 -24
  269. package/src/__tests__/testdata/ascii/subgraph_two_separate.txt +0 -20
  270. package/src/__tests__/testdata/ascii/subgraph_with_labels.txt +0 -20
  271. package/src/__tests__/testdata/ascii/three_nodes.txt +0 -9
  272. package/src/__tests__/testdata/ascii/three_nodes_single_line.txt +0 -8
  273. package/src/__tests__/testdata/ascii/two_layer_single_graph.txt +0 -19
  274. package/src/__tests__/testdata/ascii/two_layer_single_graph_longer_names.txt +0 -19
  275. package/src/__tests__/testdata/ascii/two_nodes_linked.txt +0 -8
  276. package/src/__tests__/testdata/ascii/two_nodes_longer_names.txt +0 -8
  277. package/src/__tests__/testdata/ascii/two_root_nodes.txt +0 -19
  278. package/src/__tests__/testdata/ascii/two_root_nodes_longer_names.txt +0 -19
  279. package/src/__tests__/testdata/ascii/two_single_root_nodes.txt +0 -19
  280. package/src/__tests__/testdata/unicode/ampersand_lhs.txt +0 -18
  281. package/src/__tests__/testdata/unicode/ampersand_lhs_and_rhs.txt +0 -18
  282. package/src/__tests__/testdata/unicode/ampersand_rhs.txt +0 -18
  283. package/src/__tests__/testdata/unicode/ampersand_without_edge.txt +0 -18
  284. package/src/__tests__/testdata/unicode/back_reference_from_child.txt +0 -10
  285. package/src/__tests__/testdata/unicode/backlink_from_bottom.txt +0 -22
  286. package/src/__tests__/testdata/unicode/backlink_from_top.txt +0 -22
  287. package/src/__tests__/testdata/unicode/cls_all_relationships.txt +0 -19
  288. package/src/__tests__/testdata/unicode/cls_annotation.txt +0 -29
  289. package/src/__tests__/testdata/unicode/cls_association.txt +0 -14
  290. package/src/__tests__/testdata/unicode/cls_basic.txt +0 -15
  291. package/src/__tests__/testdata/unicode/cls_dependency.txt +0 -14
  292. package/src/__tests__/testdata/unicode/cls_inheritance.txt +0 -20
  293. package/src/__tests__/testdata/unicode/cls_methods.txt +0 -21
  294. package/src/__tests__/testdata/unicode/comments.txt +0 -23
  295. package/src/__tests__/testdata/unicode/duplicate_labels.txt +0 -19
  296. package/src/__tests__/testdata/unicode/er_attributes.txt +0 -21
  297. package/src/__tests__/testdata/unicode/er_basic.txt +0 -8
  298. package/src/__tests__/testdata/unicode/er_identifying.txt +0 -18
  299. package/src/__tests__/testdata/unicode/graph_bt_direction.txt +0 -28
  300. package/src/__tests__/testdata/unicode/preserve_order_of_definition.txt +0 -23
  301. package/src/__tests__/testdata/unicode/self_reference.txt +0 -10
  302. package/src/__tests__/testdata/unicode/self_reference_with_edge.txt +0 -10
  303. package/src/__tests__/testdata/unicode/seq_basic.txt +0 -17
  304. package/src/__tests__/testdata/unicode/seq_multiple_messages.txt +0 -25
  305. package/src/__tests__/testdata/unicode/seq_self_message.txt +0 -18
  306. package/src/__tests__/testdata/unicode/single_node.txt +0 -8
  307. package/src/__tests__/testdata/unicode/single_node_longer_name.txt +0 -8
  308. package/src/__tests__/testdata/unicode/three_nodes.txt +0 -9
  309. package/src/__tests__/testdata/unicode/three_nodes_single_line.txt +0 -8
  310. package/src/__tests__/testdata/unicode/two_layer_single_graph.txt +0 -19
  311. package/src/__tests__/testdata/unicode/two_layer_single_graph_longer_names.txt +0 -19
  312. package/src/__tests__/testdata/unicode/two_nodes_linked.txt +0 -8
  313. package/src/__tests__/testdata/unicode/two_nodes_longer_names.txt +0 -8
  314. package/src/__tests__/testdata/unicode/two_root_nodes.txt +0 -19
  315. package/src/__tests__/testdata/unicode/two_root_nodes_longer_names.txt +0 -19
  316. package/src/__tests__/testdata/unicode/two_single_root_nodes.txt +0 -19
  317. package/src/__tests__/text-metrics.test.ts +0 -473
  318. package/src/__tests__/theme-palette-contrast.test.ts +0 -84
  319. package/src/__tests__/theme.test.ts +0 -132
  320. package/src/__tests__/xychart-ascii.test.ts +0 -376
  321. package/src/__tests__/xychart-colors.test.ts +0 -149
@@ -1,328 +0,0 @@
1
- /**
2
- * Golden-file tests for the ASCII/Unicode renderer.
3
- *
4
- * Ported from AlexanderGrooff/mermaid-ascii cmd/graph_test.go.
5
- * Each .txt file contains mermaid input above a `---` separator
6
- * and the expected ASCII/Unicode output below it.
7
- *
8
- * Test data: 44 ASCII files + 22 Unicode files = 66 total.
9
- */
10
- import { describe, it, expect } from 'vitest'
11
- import { renderMermaidASCII } from '@zombie-mermaid/ascii-renderer'
12
- import {
13
- hasDiagonalLines,
14
- DIAGONAL_CHARS,
15
- } from '../../packages/ascii-renderer/src/validate.ts'
16
- import { readdirSync, readFileSync } from 'node:fs'
17
- import { join, dirname } from 'node:path'
18
- import { fileURLToPath } from 'node:url'
19
-
20
- // ============================================================================
21
- // Test case parser — matches Go's testutil.ReadTestCase format
22
- // ============================================================================
23
-
24
- interface TestCase {
25
- mermaid: string
26
- expected: string
27
- paddingX: number
28
- paddingY: number
29
- }
30
-
31
- /**
32
- * Parse a golden test file into its components.
33
- * Format:
34
- * [paddingX=N] (optional)
35
- * [paddingY=N] (optional)
36
- * <mermaid code>
37
- * ---
38
- * <expected output>
39
- */
40
- function parseTestCase(content: string): TestCase {
41
- const tc: TestCase = { mermaid: '', expected: '', paddingX: 5, paddingY: 5 }
42
- const lines = content.split('\n')
43
- const paddingRegex = /^(?:padding([xy]))\s*=\s*(\d+)\s*$/i
44
-
45
- let inMermaid = true
46
- let mermaidStarted = false
47
- const mermaidLines: string[] = []
48
- const expectedLines: string[] = []
49
-
50
- for (const line of lines) {
51
- if (line === '---') {
52
- inMermaid = false
53
- continue
54
- }
55
-
56
- if (inMermaid) {
57
- const trimmed = line.trim()
58
-
59
- // Before mermaid code starts, parse padding directives and skip blanks
60
- if (!mermaidStarted) {
61
- if (trimmed === '') continue
62
- const match = trimmed.match(paddingRegex)
63
- if (match) {
64
- const value = parseInt(match[2]!, 10)
65
- if (match[1]!.toLowerCase() === 'x') {
66
- tc.paddingX = value
67
- } else {
68
- tc.paddingY = value
69
- }
70
- continue
71
- }
72
- }
73
-
74
- mermaidStarted = true
75
- mermaidLines.push(line)
76
- } else {
77
- expectedLines.push(line)
78
- }
79
- }
80
-
81
- tc.mermaid = mermaidLines.join('\n') + '\n'
82
-
83
- // Strip final trailing newline (matches Go's strings.TrimSuffix(expected, "\n"))
84
- let expected = expectedLines.join('\n')
85
- if (expected.endsWith('\n')) {
86
- expected = expected.slice(0, -1)
87
- }
88
- tc.expected = expected
89
-
90
- return tc
91
- }
92
-
93
- // ============================================================================
94
- // Whitespace normalization — matches Go's testutil.NormalizeWhitespace
95
- // ============================================================================
96
-
97
- /**
98
- * Normalize whitespace for comparison:
99
- * - Trim trailing spaces from each line
100
- * - Remove leading/trailing blank lines
101
- */
102
- function normalizeWhitespace(s: string): string {
103
- const lines = s.split('\n')
104
- const normalized = lines.map((l) => l.trimEnd())
105
-
106
- // Remove leading blank lines
107
- while (normalized.length > 0 && normalized[0] === '') {
108
- normalized.shift()
109
- }
110
- // Remove trailing blank lines
111
- while (normalized.length > 0 && normalized[normalized.length - 1] === '') {
112
- normalized.pop()
113
- }
114
-
115
- return normalized.join('\n')
116
- }
117
-
118
- /** Replace spaces with middle dots for clearer diff output. */
119
- function visualizeWhitespace(s: string): string {
120
- return s.replaceAll(' ', '·')
121
- }
122
-
123
- // ============================================================================
124
- // Test runner — dynamically loads all golden files from testdata directories
125
- // ============================================================================
126
-
127
- function runGoldenTests(dir: string, useAscii: boolean): void {
128
- const files = readdirSync(dir)
129
- .filter((f) => f.endsWith('.txt'))
130
- .sort()
131
-
132
- for (const file of files) {
133
- const testName = file.replace('.txt', '')
134
-
135
- it(testName, () => {
136
- const content = readFileSync(join(dir, file), 'utf-8')
137
- const tc = parseTestCase(content)
138
-
139
- const actual = renderMermaidASCII(tc.mermaid, {
140
- useAscii,
141
- paddingX: tc.paddingX,
142
- paddingY: tc.paddingY,
143
- })
144
-
145
- const normalizedExpected = normalizeWhitespace(tc.expected)
146
- const normalizedActual = normalizeWhitespace(actual)
147
-
148
- if (normalizedExpected !== normalizedActual) {
149
- const expectedVis = visualizeWhitespace(normalizedExpected)
150
- const actualVis = visualizeWhitespace(normalizedActual)
151
- expect(actualVis).toBe(expectedVis)
152
- }
153
- })
154
- }
155
- }
156
-
157
- // ============================================================================
158
- // Test suites
159
- // ============================================================================
160
-
161
- const testdataDir = join(dirname(fileURLToPath(import.meta.url)), 'testdata')
162
-
163
- describe('ASCII rendering', () => {
164
- runGoldenTests(join(testdataDir, 'ascii'), true)
165
- })
166
-
167
- describe('Unicode rendering', () => {
168
- runGoldenTests(join(testdataDir, 'unicode'), false)
169
- })
170
-
171
- // ============================================================================
172
- // Config behavior tests — ported from Go's TestGraphUseAsciiConfig
173
- // ============================================================================
174
-
175
- describe('Config behavior', () => {
176
- const mermaidInput = 'graph LR\nA --> B'
177
-
178
- it('ASCII and Unicode outputs should differ', () => {
179
- const asciiOutput = renderMermaidASCII(mermaidInput, { useAscii: true })
180
- const unicodeOutput = renderMermaidASCII(mermaidInput, { useAscii: false })
181
- expect(asciiOutput).not.toBe(unicodeOutput)
182
- })
183
-
184
- it('ASCII output should not contain Unicode box-drawing characters', () => {
185
- const output = renderMermaidASCII(mermaidInput, { useAscii: true })
186
- expect(output).not.toContain('┌')
187
- expect(output).not.toContain('─')
188
- expect(output).not.toContain('│')
189
- })
190
-
191
- it('Unicode output should contain Unicode box-drawing characters', () => {
192
- const output = renderMermaidASCII(mermaidInput, { useAscii: false })
193
- const hasUnicode =
194
- output.includes('┌') || output.includes('─') || output.includes('│')
195
- expect(hasUnicode).toBe(true)
196
- })
197
- })
198
-
199
- // ============================================================================
200
- // Diagonal validation — ensures all edges use orthogonal Manhattan routing
201
- // ============================================================================
202
-
203
- describe('Diagonal validation', () => {
204
- const asciiDir = join(testdataDir, 'ascii')
205
- const unicodeDir = join(testdataDir, 'unicode')
206
-
207
- it('ASCII output should never contain diagonal characters', () => {
208
- // Test all ASCII golden files
209
- const files = readdirSync(asciiDir).filter((f) => f.endsWith('.txt'))
210
- for (const file of files) {
211
- const content = readFileSync(join(asciiDir, file), 'utf-8')
212
- const { mermaid, paddingX, paddingY } = parseTestCase(content)
213
- const output = renderMermaidASCII(mermaid, {
214
- useAscii: true,
215
- boxBorderPadding: paddingX,
216
- paddingY: paddingY,
217
- })
218
-
219
- // Check for diagonal characters
220
- for (const char of DIAGONAL_CHARS.ascii) {
221
- expect(output).not.toContain(char)
222
- }
223
- }
224
- })
225
-
226
- it('Unicode output should never contain diagonal characters', () => {
227
- // Test all Unicode golden files
228
- const files = readdirSync(unicodeDir).filter((f) => f.endsWith('.txt'))
229
- for (const file of files) {
230
- const content = readFileSync(join(unicodeDir, file), 'utf-8')
231
- const { mermaid, paddingX, paddingY } = parseTestCase(content)
232
- const output = renderMermaidASCII(mermaid, {
233
- useAscii: false,
234
- boxBorderPadding: paddingX,
235
- paddingY: paddingY,
236
- })
237
-
238
- // Check for diagonal characters
239
- for (const char of DIAGONAL_CHARS.unicode) {
240
- expect(output).not.toContain(char)
241
- }
242
- }
243
- })
244
-
245
- it('hasDiagonalLines utility correctly detects diagonal characters', () => {
246
- // Should detect ASCII diagonals
247
- expect(hasDiagonalLines('A / B')).toBe(true)
248
- expect(hasDiagonalLines('A \\ B')).toBe(true)
249
-
250
- // Should detect Unicode diagonals
251
- expect(hasDiagonalLines('A ╱ B')).toBe(true)
252
- expect(hasDiagonalLines('A ╲ B')).toBe(true)
253
-
254
- // Should not flag clean output
255
- expect(hasDiagonalLines('┌───┐\n│ A │\n└───┘')).toBe(false)
256
- expect(hasDiagonalLines('+---+\n| A |\n+---+')).toBe(false)
257
- })
258
- })
259
-
260
- // ============================================================================
261
- // Issue #65 regressions
262
- // ============================================================================
263
-
264
- describe('Issue #65 – --o/--x edges no longer drop the target node', () => {
265
- it('renders both nodes and a connector for A --o B', () => {
266
- const output = renderMermaidASCII('graph LR\n A --o B')
267
- expect(output).toContain('A')
268
- expect(output).toContain('B')
269
- // The connecting line/arrow should be present, not just two bare boxes.
270
- expect(output).toMatch(/[─▼►]/)
271
- })
272
-
273
- it('renders both nodes and a connector for A --x B', () => {
274
- const output = renderMermaidASCII('graph LR\n A --x B')
275
- expect(output).toContain('A')
276
- expect(output).toContain('B')
277
- expect(output).toMatch(/[─▼►]/)
278
- })
279
- })
280
-
281
- describe('Issue #65 – edges to a subgraph id no longer create phantom nodes', () => {
282
- const mermaid = `flowchart TD
283
- subgraph ONE["First"]
284
- A1["a"] --> A2["b"]
285
- end
286
- subgraph TWO["Second"]
287
- B1["c"] --> B2["d"]
288
- end
289
- ONE --> TWO`
290
-
291
- it('does not render a standalone "ONE" or "TWO" box disconnected from the subgraphs', () => {
292
- const output = renderMermaidASCII(mermaid)
293
- // The subgraph titles ("First"/"Second") should render; the raw
294
- // subgraph ids should not appear as their own node labels.
295
- expect(output).toContain('First')
296
- expect(output).toContain('Second')
297
- expect(output).not.toMatch(/│\s*ONE\s*│/)
298
- expect(output).not.toMatch(/│\s*TWO\s*│/)
299
- })
300
-
301
- it('draws a real connector between the two subgraph frames', () => {
302
- const output = renderMermaidASCII(mermaid)
303
- // A vertical connector should cross between the two subgraph boxes.
304
- expect(output).toMatch(/[│▼]/)
305
- })
306
- })
307
-
308
- describe('Issue #65 – inline <i>/<b>/<em>/<strong> tags are stripped', () => {
309
- it('strips inline formatting tags from a node label', () => {
310
- const output = renderMermaidASCII(
311
- 'flowchart TD\n A["italic <i>word</i> and bold <b>x</b>"]',
312
- )
313
- expect(output).toContain('italic word and bold x')
314
- expect(output).not.toContain('<i>')
315
- expect(output).not.toContain('</i>')
316
- expect(output).not.toContain('<b>')
317
- expect(output).not.toContain('</b>')
318
- })
319
-
320
- it('strips <em>/<strong> as well', () => {
321
- const output = renderMermaidASCII(
322
- 'flowchart TD\n A["<em>emphasis</em> and <strong>strong</strong>"]',
323
- )
324
- expect(output).toContain('emphasis and strong')
325
- expect(output).not.toContain('<em>')
326
- expect(output).not.toContain('<strong>')
327
- })
328
- })
@@ -1,80 +0,0 @@
1
- /**
2
- * Tests for `box <color?> <label?>` header parsing (#419).
3
- *
4
- * Mirrors Mermaid's `parseBoxData`: the leading word (or `rgb()`/`hsl()`
5
- * call) is a colour if it matches a known CSS colour form, otherwise the
6
- * whole header is the label. `transparent` is treated as "no colour".
7
- */
8
- import { describe, it, expect } from 'vitest'
9
- import { isCssColor, parseBoxHeader } from '@zombie-mermaid/mermaid-parser'
10
-
11
- describe('isCssColor', () => {
12
- it('recognizes CSS named colours, case-insensitively', () => {
13
- expect(isCssColor('red')).toBe(true)
14
- expect(isCssColor('RED')).toBe(true)
15
- expect(isCssColor('rebeccapurple')).toBe(true)
16
- expect(isCssColor('notacolor')).toBe(false)
17
- })
18
-
19
- it('recognizes hex colours (3/4/6/8 digit)', () => {
20
- expect(isCssColor('#fff')).toBe(true)
21
- expect(isCssColor('#ffff')).toBe(true)
22
- expect(isCssColor('#ff00aa')).toBe(true)
23
- expect(isCssColor('#ff00aa80')).toBe(true)
24
- expect(isCssColor('#ff00a')).toBe(false)
25
- expect(isCssColor('#gggggg')).toBe(false)
26
- })
27
-
28
- it('recognizes rgb()/rgba()/hsl()/hsla() function forms', () => {
29
- expect(isCssColor('rgb(33,66,99)')).toBe(true)
30
- expect(isCssColor('rgba(33,66,99,0.5)')).toBe(true)
31
- expect(isCssColor('hsl(10, 40%, 90%)')).toBe(true)
32
- expect(isCssColor('hsla(10, 40%, 90%, 0.5)')).toBe(true)
33
- expect(isCssColor('rgb(33 66 99 / 50%)')).toBe(true)
34
- })
35
-
36
- it('does not treat "transparent" as a CSS colour on its own', () => {
37
- // transparent is handled separately by parseBoxHeader, not as a colour
38
- expect(isCssColor('transparent')).toBe(false)
39
- })
40
- })
41
-
42
- describe('parseBoxHeader', () => {
43
- it('splits a leading colour word from the rest as the label', () => {
44
- expect(parseBoxHeader('Aqua Group 1')).toEqual({
45
- color: 'Aqua',
46
- label: 'Group 1',
47
- })
48
- })
49
-
50
- it('treats the whole header as the label when the first word is not a colour', () => {
51
- expect(parseBoxHeader('Group 1')).toEqual({ label: 'Group 1' })
52
- })
53
-
54
- it('returns an empty label for an empty header', () => {
55
- expect(parseBoxHeader('')).toEqual({ label: '' })
56
- })
57
-
58
- it('treats a single colour word with nothing after it as colour-only (no label)', () => {
59
- expect(parseBoxHeader('red')).toEqual({ color: 'red', label: '' })
60
- })
61
-
62
- it('consumes "transparent" as "no colour" rather than as the label', () => {
63
- expect(parseBoxHeader('transparent Group 1')).toEqual({ label: 'Group 1' })
64
- expect(parseBoxHeader('transparent')).toEqual({ label: '' })
65
- })
66
-
67
- it('accepts a hex colour followed by a label', () => {
68
- expect(parseBoxHeader('#33001a Group 1')).toEqual({
69
- color: '#33001a',
70
- label: 'Group 1',
71
- })
72
- })
73
-
74
- it('accepts an rgb()/hsl() function colour followed by a label', () => {
75
- expect(parseBoxHeader('rgb(33,66,99) Group 1')).toEqual({
76
- color: 'rgb(33,66,99)',
77
- label: 'Group 1',
78
- })
79
- })
80
- })