@oh-my-pi/pi-utils 16.0.7 → 16.0.9
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/CHANGELOG.md +10 -0
- package/dist/types/mermaid-ascii.d.ts +1 -1
- package/dist/types/vendor/mermaid-ascii/ascii/ansi.d.ts +41 -0
- package/dist/types/vendor/mermaid-ascii/ascii/canvas.d.ts +89 -0
- package/dist/types/vendor/mermaid-ascii/ascii/class-diagram.d.ts +7 -0
- package/dist/types/vendor/mermaid-ascii/ascii/converter.d.ts +12 -0
- package/dist/types/vendor/mermaid-ascii/ascii/draw.d.ts +66 -0
- package/dist/types/vendor/mermaid-ascii/ascii/edge-bundling.d.ts +48 -0
- package/dist/types/vendor/mermaid-ascii/ascii/edge-routing.d.ts +43 -0
- package/dist/types/vendor/mermaid-ascii/ascii/er-diagram.d.ts +7 -0
- package/dist/types/vendor/mermaid-ascii/ascii/grid.d.ts +56 -0
- package/dist/types/vendor/mermaid-ascii/ascii/index.d.ts +65 -0
- package/dist/types/vendor/mermaid-ascii/ascii/multiline-utils.d.ts +27 -0
- package/dist/types/vendor/mermaid-ascii/ascii/pathfinder.d.ts +17 -0
- package/dist/types/vendor/mermaid-ascii/ascii/sequence.d.ts +7 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/circle.d.ts +11 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/corners.d.ts +34 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/diamond.d.ts +11 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/hexagon.d.ts +11 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/index.d.ts +26 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/rectangle.d.ts +31 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/rounded.d.ts +11 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/special.d.ts +59 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/stadium.d.ts +17 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/state.d.ts +30 -0
- package/dist/types/vendor/mermaid-ascii/ascii/shapes/types.d.ts +55 -0
- package/dist/types/vendor/mermaid-ascii/ascii/types.d.ts +206 -0
- package/dist/types/vendor/mermaid-ascii/ascii/validate.d.ts +51 -0
- package/dist/types/vendor/mermaid-ascii/ascii/xychart.d.ts +2 -0
- package/dist/types/vendor/mermaid-ascii/class/parser.d.ts +6 -0
- package/dist/types/vendor/mermaid-ascii/class/types.d.ts +102 -0
- package/dist/types/vendor/mermaid-ascii/er/parser.d.ts +6 -0
- package/dist/types/vendor/mermaid-ascii/er/types.d.ts +76 -0
- package/dist/types/vendor/mermaid-ascii/index.d.ts +1 -0
- package/dist/types/vendor/mermaid-ascii/multiline-utils.d.ts +9 -0
- package/dist/types/vendor/mermaid-ascii/parser.d.ts +7 -0
- package/dist/types/vendor/mermaid-ascii/sequence/parser.d.ts +6 -0
- package/dist/types/vendor/mermaid-ascii/sequence/types.d.ts +130 -0
- package/dist/types/vendor/mermaid-ascii/text-metrics.d.ts +21 -0
- package/dist/types/vendor/mermaid-ascii/types.d.ts +114 -0
- package/dist/types/vendor/mermaid-ascii/xychart/colors.d.ts +25 -0
- package/dist/types/vendor/mermaid-ascii/xychart/parser.d.ts +6 -0
- package/dist/types/vendor/mermaid-ascii/xychart/types.d.ts +145 -0
- package/package.json +2 -3
- package/src/mermaid-ascii.ts +1 -1
- package/src/vendor/mermaid-ascii/NOTICE +33 -0
- package/src/vendor/mermaid-ascii/ascii/ansi.ts +409 -0
- package/src/vendor/mermaid-ascii/ascii/canvas.ts +476 -0
- package/src/vendor/mermaid-ascii/ascii/class-diagram.ts +699 -0
- package/src/vendor/mermaid-ascii/ascii/converter.ts +271 -0
- package/src/vendor/mermaid-ascii/ascii/draw.ts +1382 -0
- package/src/vendor/mermaid-ascii/ascii/edge-bundling.ts +328 -0
- package/src/vendor/mermaid-ascii/ascii/edge-routing.ts +297 -0
- package/src/vendor/mermaid-ascii/ascii/er-diagram.ts +441 -0
- package/src/vendor/mermaid-ascii/ascii/grid.ts +578 -0
- package/src/vendor/mermaid-ascii/ascii/index.ts +187 -0
- package/src/vendor/mermaid-ascii/ascii/multiline-utils.ts +78 -0
- package/src/vendor/mermaid-ascii/ascii/pathfinder.ts +215 -0
- package/src/vendor/mermaid-ascii/ascii/sequence.ts +460 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/circle.ts +27 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/corners.ts +127 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/diamond.ts +27 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/hexagon.ts +27 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/index.ts +101 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/rectangle.ts +175 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/rounded.ts +27 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/special.ts +296 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/stadium.ts +114 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/state.ts +192 -0
- package/src/vendor/mermaid-ascii/ascii/shapes/types.ts +73 -0
- package/src/vendor/mermaid-ascii/ascii/types.ts +273 -0
- package/src/vendor/mermaid-ascii/ascii/validate.ts +120 -0
- package/src/vendor/mermaid-ascii/ascii/xychart.ts +875 -0
- package/src/vendor/mermaid-ascii/class/parser.ts +290 -0
- package/src/vendor/mermaid-ascii/class/types.ts +121 -0
- package/src/vendor/mermaid-ascii/er/parser.ts +181 -0
- package/src/vendor/mermaid-ascii/er/types.ts +91 -0
- package/src/vendor/mermaid-ascii/index.ts +14 -0
- package/src/vendor/mermaid-ascii/multiline-utils.ts +30 -0
- package/src/vendor/mermaid-ascii/parser.ts +645 -0
- package/src/vendor/mermaid-ascii/sequence/parser.ts +207 -0
- package/src/vendor/mermaid-ascii/sequence/types.ts +146 -0
- package/src/vendor/mermaid-ascii/text-metrics.ts +71 -0
- package/src/vendor/mermaid-ascii/types.ts +164 -0
- package/src/vendor/mermaid-ascii/xychart/colors.ts +140 -0
- package/src/vendor/mermaid-ascii/xychart/parser.ts +115 -0
- 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
|
+
}
|