@oh-my-pi/pi-utils 16.0.7 → 16.0.8

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 (87) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/types/mermaid-ascii.d.ts +1 -1
  3. package/dist/types/vendor/mermaid-ascii/ascii/ansi.d.ts +41 -0
  4. package/dist/types/vendor/mermaid-ascii/ascii/canvas.d.ts +89 -0
  5. package/dist/types/vendor/mermaid-ascii/ascii/class-diagram.d.ts +7 -0
  6. package/dist/types/vendor/mermaid-ascii/ascii/converter.d.ts +12 -0
  7. package/dist/types/vendor/mermaid-ascii/ascii/draw.d.ts +66 -0
  8. package/dist/types/vendor/mermaid-ascii/ascii/edge-bundling.d.ts +48 -0
  9. package/dist/types/vendor/mermaid-ascii/ascii/edge-routing.d.ts +43 -0
  10. package/dist/types/vendor/mermaid-ascii/ascii/er-diagram.d.ts +7 -0
  11. package/dist/types/vendor/mermaid-ascii/ascii/grid.d.ts +56 -0
  12. package/dist/types/vendor/mermaid-ascii/ascii/index.d.ts +65 -0
  13. package/dist/types/vendor/mermaid-ascii/ascii/multiline-utils.d.ts +27 -0
  14. package/dist/types/vendor/mermaid-ascii/ascii/pathfinder.d.ts +17 -0
  15. package/dist/types/vendor/mermaid-ascii/ascii/sequence.d.ts +7 -0
  16. package/dist/types/vendor/mermaid-ascii/ascii/shapes/circle.d.ts +11 -0
  17. package/dist/types/vendor/mermaid-ascii/ascii/shapes/corners.d.ts +34 -0
  18. package/dist/types/vendor/mermaid-ascii/ascii/shapes/diamond.d.ts +11 -0
  19. package/dist/types/vendor/mermaid-ascii/ascii/shapes/hexagon.d.ts +11 -0
  20. package/dist/types/vendor/mermaid-ascii/ascii/shapes/index.d.ts +26 -0
  21. package/dist/types/vendor/mermaid-ascii/ascii/shapes/rectangle.d.ts +31 -0
  22. package/dist/types/vendor/mermaid-ascii/ascii/shapes/rounded.d.ts +11 -0
  23. package/dist/types/vendor/mermaid-ascii/ascii/shapes/special.d.ts +59 -0
  24. package/dist/types/vendor/mermaid-ascii/ascii/shapes/stadium.d.ts +17 -0
  25. package/dist/types/vendor/mermaid-ascii/ascii/shapes/state.d.ts +30 -0
  26. package/dist/types/vendor/mermaid-ascii/ascii/shapes/types.d.ts +55 -0
  27. package/dist/types/vendor/mermaid-ascii/ascii/types.d.ts +206 -0
  28. package/dist/types/vendor/mermaid-ascii/ascii/validate.d.ts +51 -0
  29. package/dist/types/vendor/mermaid-ascii/ascii/xychart.d.ts +2 -0
  30. package/dist/types/vendor/mermaid-ascii/class/parser.d.ts +6 -0
  31. package/dist/types/vendor/mermaid-ascii/class/types.d.ts +102 -0
  32. package/dist/types/vendor/mermaid-ascii/er/parser.d.ts +6 -0
  33. package/dist/types/vendor/mermaid-ascii/er/types.d.ts +76 -0
  34. package/dist/types/vendor/mermaid-ascii/index.d.ts +1 -0
  35. package/dist/types/vendor/mermaid-ascii/multiline-utils.d.ts +9 -0
  36. package/dist/types/vendor/mermaid-ascii/parser.d.ts +7 -0
  37. package/dist/types/vendor/mermaid-ascii/sequence/parser.d.ts +6 -0
  38. package/dist/types/vendor/mermaid-ascii/sequence/types.d.ts +130 -0
  39. package/dist/types/vendor/mermaid-ascii/text-metrics.d.ts +21 -0
  40. package/dist/types/vendor/mermaid-ascii/types.d.ts +114 -0
  41. package/dist/types/vendor/mermaid-ascii/xychart/colors.d.ts +25 -0
  42. package/dist/types/vendor/mermaid-ascii/xychart/parser.d.ts +6 -0
  43. package/dist/types/vendor/mermaid-ascii/xychart/types.d.ts +145 -0
  44. package/package.json +2 -3
  45. package/src/mermaid-ascii.ts +1 -1
  46. package/src/vendor/mermaid-ascii/NOTICE +33 -0
  47. package/src/vendor/mermaid-ascii/ascii/ansi.ts +409 -0
  48. package/src/vendor/mermaid-ascii/ascii/canvas.ts +476 -0
  49. package/src/vendor/mermaid-ascii/ascii/class-diagram.ts +699 -0
  50. package/src/vendor/mermaid-ascii/ascii/converter.ts +271 -0
  51. package/src/vendor/mermaid-ascii/ascii/draw.ts +1382 -0
  52. package/src/vendor/mermaid-ascii/ascii/edge-bundling.ts +328 -0
  53. package/src/vendor/mermaid-ascii/ascii/edge-routing.ts +297 -0
  54. package/src/vendor/mermaid-ascii/ascii/er-diagram.ts +441 -0
  55. package/src/vendor/mermaid-ascii/ascii/grid.ts +578 -0
  56. package/src/vendor/mermaid-ascii/ascii/index.ts +187 -0
  57. package/src/vendor/mermaid-ascii/ascii/multiline-utils.ts +78 -0
  58. package/src/vendor/mermaid-ascii/ascii/pathfinder.ts +215 -0
  59. package/src/vendor/mermaid-ascii/ascii/sequence.ts +460 -0
  60. package/src/vendor/mermaid-ascii/ascii/shapes/circle.ts +27 -0
  61. package/src/vendor/mermaid-ascii/ascii/shapes/corners.ts +127 -0
  62. package/src/vendor/mermaid-ascii/ascii/shapes/diamond.ts +27 -0
  63. package/src/vendor/mermaid-ascii/ascii/shapes/hexagon.ts +27 -0
  64. package/src/vendor/mermaid-ascii/ascii/shapes/index.ts +101 -0
  65. package/src/vendor/mermaid-ascii/ascii/shapes/rectangle.ts +175 -0
  66. package/src/vendor/mermaid-ascii/ascii/shapes/rounded.ts +27 -0
  67. package/src/vendor/mermaid-ascii/ascii/shapes/special.ts +296 -0
  68. package/src/vendor/mermaid-ascii/ascii/shapes/stadium.ts +114 -0
  69. package/src/vendor/mermaid-ascii/ascii/shapes/state.ts +192 -0
  70. package/src/vendor/mermaid-ascii/ascii/shapes/types.ts +73 -0
  71. package/src/vendor/mermaid-ascii/ascii/types.ts +273 -0
  72. package/src/vendor/mermaid-ascii/ascii/validate.ts +120 -0
  73. package/src/vendor/mermaid-ascii/ascii/xychart.ts +875 -0
  74. package/src/vendor/mermaid-ascii/class/parser.ts +290 -0
  75. package/src/vendor/mermaid-ascii/class/types.ts +121 -0
  76. package/src/vendor/mermaid-ascii/er/parser.ts +181 -0
  77. package/src/vendor/mermaid-ascii/er/types.ts +91 -0
  78. package/src/vendor/mermaid-ascii/index.ts +14 -0
  79. package/src/vendor/mermaid-ascii/multiline-utils.ts +30 -0
  80. package/src/vendor/mermaid-ascii/parser.ts +645 -0
  81. package/src/vendor/mermaid-ascii/sequence/parser.ts +207 -0
  82. package/src/vendor/mermaid-ascii/sequence/types.ts +146 -0
  83. package/src/vendor/mermaid-ascii/text-metrics.ts +71 -0
  84. package/src/vendor/mermaid-ascii/types.ts +164 -0
  85. package/src/vendor/mermaid-ascii/xychart/colors.ts +140 -0
  86. package/src/vendor/mermaid-ascii/xychart/parser.ts +115 -0
  87. package/src/vendor/mermaid-ascii/xychart/types.ts +150 -0
@@ -0,0 +1,120 @@
1
+ /**
2
+ * ASCII Rendering Validation Utilities
3
+ *
4
+ * Provides validation functions for ASCII diagram output,
5
+ * including diagonal line detection to ensure orthogonal-only routing.
6
+ */
7
+
8
+ /**
9
+ * Characters that represent diagonal lines in ASCII and Unicode modes.
10
+ * These should never appear in properly rendered diagrams.
11
+ */
12
+ export const DIAGONAL_CHARS = {
13
+ ascii: ['/', '\\'],
14
+ unicode: ['\u2571', '\u2572'], // ╱ ╲
15
+ all: ['/', '\\', '\u2571', '\u2572'],
16
+ } as const
17
+
18
+ /**
19
+ * Position of a diagonal character in ASCII output.
20
+ */
21
+ export interface DiagonalPosition {
22
+ line: number
23
+ col: number
24
+ char: string
25
+ }
26
+
27
+ /**
28
+ * Check if ASCII output contains any diagonal line characters.
29
+ * Returns true if diagonals are found (which is an error condition).
30
+ *
31
+ * @param asciiOutput - The rendered ASCII diagram string
32
+ * @returns true if diagonal characters are present, false otherwise
33
+ */
34
+ export function hasDiagonalLines(asciiOutput: string): boolean {
35
+ return DIAGONAL_CHARS.all.some((char) => asciiOutput.includes(char))
36
+ }
37
+
38
+ /**
39
+ * Find all diagonal line character positions in ASCII output.
40
+ * Useful for debugging when diagonals are detected.
41
+ *
42
+ * Skips diagonal characters that appear inside node labels (between box borders).
43
+ * This prevents false positives from labels like "feature/auth" or "release/1.0".
44
+ *
45
+ * @param asciiOutput - The rendered ASCII diagram string
46
+ * @returns Array of positions where diagonal characters were found
47
+ */
48
+ export function findDiagonalLines(asciiOutput: string): DiagonalPosition[] {
49
+ const positions: DiagonalPosition[] = []
50
+ const lines = asciiOutput.split('\n')
51
+
52
+ // Box-drawing characters that indicate node boundaries
53
+ const boxBorders = new Set(['│', '┤', '├', '║', '┃', '|'])
54
+
55
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
56
+ const line = lines[lineNum]!
57
+
58
+ // Find all box border positions in this line
59
+ const borderPositions: number[] = []
60
+ for (let col = 0; col < line.length; col++) {
61
+ if (boxBorders.has(line[col]!)) {
62
+ borderPositions.push(col)
63
+ }
64
+ }
65
+
66
+ for (let col = 0; col < line.length; col++) {
67
+ const char = line[col]!
68
+ if (DIAGONAL_CHARS.all.includes(char as '/' | '\\' | '╱' | '╲')) {
69
+ // Check if this position is inside a node (between two box borders)
70
+ // Find the nearest borders before and after this position
71
+ let insideNode = false
72
+ for (let i = 0; i < borderPositions.length - 1; i++) {
73
+ const leftBorder = borderPositions[i]!
74
+ const rightBorder = borderPositions[i + 1]!
75
+ if (col > leftBorder && col < rightBorder) {
76
+ // This diagonal char is between two borders - likely inside a node label
77
+ insideNode = true
78
+ break
79
+ }
80
+ }
81
+
82
+ if (!insideNode) {
83
+ positions.push({
84
+ line: lineNum + 1, // 1-indexed for human readability
85
+ col: col + 1,
86
+ char,
87
+ })
88
+ }
89
+ }
90
+ }
91
+ }
92
+
93
+ return positions
94
+ }
95
+
96
+ /**
97
+ * Assert that ASCII output contains no diagonal lines.
98
+ * Throws an error with detailed position information if diagonals are found.
99
+ *
100
+ * @param asciiOutput - The rendered ASCII diagram string
101
+ * @param context - Optional context string for error message (e.g., diagram name)
102
+ * @throws Error if diagonal characters are present
103
+ */
104
+ export function assertNoDiagonals(asciiOutput: string, context?: string): void {
105
+ if (!hasDiagonalLines(asciiOutput)) {
106
+ return
107
+ }
108
+
109
+ const positions = findDiagonalLines(asciiOutput)
110
+ const contextStr = context ? ` in "${context}"` : ''
111
+ const positionStr = positions
112
+ .map((p) => ` Line ${p.line}, Col ${p.col}: '${p.char}'`)
113
+ .join('\n')
114
+
115
+ throw new Error(
116
+ `Diagonal lines detected${contextStr}. ` +
117
+ `Edges must use orthogonal Manhattan routing (90° bends only).\n` +
118
+ `Found ${positions.length} diagonal character(s):\n${positionStr}`
119
+ )
120
+ }