mermaid2term 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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/types.ts","../src/diagrams/flowchart/parser.ts","../src/core/characters.ts","../src/core/canvas.ts","../src/layout/sugiyama.ts","../src/diagrams/flowchart/renderer.ts","../src/diagrams/sequence/parser.ts","../src/diagrams/sequence/renderer.ts","../src/index.ts","../src/cli.ts"],"names":["nodeIds","lineChar","Command","readFileSync"],"mappings":"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","file":"cli.cjs","sourcesContent":["/**\n * Core type definitions for the mermaid2term library\n */\n\n// ============================================================================\n// Coordinate Systems\n// ============================================================================\n\n/**\n * Grid coordinate - logical positioning in the layout grid\n * Each node occupies a 3x3 grid cell (border + content + border)\n */\nexport interface GridCoord {\n x: number;\n y: number;\n}\n\n/**\n * Drawing coordinate - physical character position in the output canvas\n */\nexport interface DrawingCoord {\n x: number;\n y: number;\n}\n\n/**\n * Direction for graph layout and edge routing\n */\nexport type Direction = 'up' | 'down' | 'left' | 'right';\n\n/**\n * Graph flow direction\n */\nexport type GraphDirection = 'LR' | 'RL' | 'TD' | 'BT';\n\n// ============================================================================\n// Node Types\n// ============================================================================\n\n/**\n * Shape types for flowchart nodes\n */\nexport type NodeShape = \n | 'rect' // [text] - Rectangle\n | 'round' // (text) - Rounded rectangle / stadium\n | 'diamond' // {text} - Diamond / decision\n | 'circle' // ((text)) - Circle\n | 'asymmetric' // >text] - Asymmetric / flag\n | 'hexagon' // {{text}} - Hexagon\n | 'parallelogram' // [/text/] - Parallelogram\n | 'trapezoid' // [/text\\] - Trapezoid\n | 'cylinder' // [(text)] - Cylinder / database\n | 'subroutine'; // [[text]] - Subroutine\n\n/**\n * A node in the diagram graph\n */\nexport interface Node {\n /** Unique identifier */\n id: string;\n /** Display label (may differ from id) */\n label: string;\n /** Visual shape */\n shape: NodeShape;\n /** Style class name (from classDef) */\n styleClass?: string;\n /** Assigned grid position after layout */\n gridCoord?: GridCoord;\n /** Assigned drawing position after coordinate transformation */\n drawingCoord?: DrawingCoord;\n /** Width in characters (calculated from label + padding) */\n width?: number;\n /** Height in characters */\n height?: number;\n}\n\n// ============================================================================\n// Edge Types\n// ============================================================================\n\n/**\n * Arrow/line style for edges\n */\nexport type EdgeStyle = 'solid' | 'dotted' | 'thick';\n\n/**\n * Arrow head type\n */\nexport type ArrowType = \n | 'arrow' // --> Standard arrow\n | 'open' // --- No arrow head\n | 'circle' // --o Circle end\n | 'cross'; // --x Cross end\n\n/**\n * An edge connecting two nodes\n */\nexport interface Edge {\n /** Source node id */\n from: string;\n /** Target node id */\n to: string;\n /** Optional label on the edge */\n label?: string;\n /** Line style */\n style: EdgeStyle;\n /** Arrow head type at the target end */\n arrowType: ArrowType;\n /** Whether arrow points both ways */\n bidirectional: boolean;\n /** Calculated path through grid after layout */\n path?: GridCoord[];\n /** Starting direction from source node */\n startDirection?: Direction;\n /** Ending direction into target node */\n endDirection?: Direction;\n}\n\n// ============================================================================\n// Style Types\n// ============================================================================\n\n/**\n * Style class definition (from classDef)\n */\nexport interface StyleClass {\n name: string;\n fill?: string;\n stroke?: string;\n color?: string;\n strokeWidth?: string;\n}\n\n// ============================================================================\n// Render Options\n// ============================================================================\n\n/**\n * Character set to use for rendering\n */\nexport type Charset = 'unicode' | 'ascii';\n\n/**\n * Options for rendering diagrams\n */\nexport interface RenderOptions {\n /** Character set - unicode for nice box drawing, ascii for compatibility */\n charset: Charset;\n /** Maximum output width in characters (0 = unlimited) */\n maxWidth: number;\n /** Horizontal spacing between nodes (in grid units) */\n paddingX: number;\n /** Vertical spacing between nodes (in grid units) */\n paddingY: number;\n /** Padding inside node borders */\n borderPadding: number;\n /** Show debug coordinates overlay */\n showCoords: boolean;\n}\n\n/**\n * Default render options\n */\nexport const DEFAULT_RENDER_OPTIONS: RenderOptions = {\n charset: 'unicode',\n maxWidth: 0,\n paddingX: 2,\n paddingY: 1,\n borderPadding: 1,\n showCoords: false,\n};\n\n// ============================================================================\n// Diagram Types\n// ============================================================================\n\n/**\n * Supported diagram types\n */\nexport type DiagramType = 'flowchart' | 'sequence' | 'class' | 'state' | 'er' | 'unknown';\n\n/**\n * Base interface for all diagram ASTs\n */\nexport interface BaseDiagramAST {\n type: DiagramType;\n}\n\n/**\n * Result of layout computation\n */\nexport interface LayoutResult {\n /** Total width needed */\n width: number;\n /** Total height needed */\n height: number;\n /** Positioned nodes */\n nodes: Node[];\n /** Routed edges */\n edges: Edge[];\n /** Column widths (grid coord -> char width) */\n columnWidths: Map<number, number>;\n /** Row heights (grid coord -> char height) */\n rowHeights: Map<number, number>;\n}\n\n// ============================================================================\n// Diagram Renderer Interface\n// ============================================================================\n\n/**\n * Interface that all diagram type renderers must implement\n */\nexport interface DiagramRenderer<T extends BaseDiagramAST = BaseDiagramAST> {\n /** Parse input string into diagram AST */\n parse(input: string): T;\n \n /** Compute layout positions for all elements */\n layout(ast: T, options: RenderOptions): LayoutResult;\n \n /** Render laid-out diagram to ASCII string */\n render(layout: LayoutResult, options: RenderOptions): string;\n}\n","import type { GraphDirection, NodeShape, EdgeStyle, ArrowType, StyleClass } from '../../core/types.js';\nimport type { FlowchartAST, FlowchartNode, FlowchartEdge, Subgraph } from './types.js';\n\ninterface ParsedNode {\n id: string;\n label: string;\n shape: NodeShape;\n styleClass?: string;\n}\n\n\n\nconst DIRECTION_PATTERN = /^(?:graph|flowchart)\\s+(LR|RL|TD|TB|BT)\\s*$/i;\nconst NODE_DEF_PATTERNS: Array<{ pattern: RegExp; shape: NodeShape }> = [\n { pattern: /^(\\w+)\\[\\[(.+)\\]\\]$/, shape: 'subroutine' },\n { pattern: /^(\\w+)\\[\\((.+)\\)\\]$/, shape: 'cylinder' },\n { pattern: /^(\\w+)\\(\\((.+)\\)\\)$/, shape: 'circle' },\n { pattern: /^(\\w+)\\{\\{(.+)\\}\\}$/, shape: 'hexagon' },\n { pattern: /^(\\w+)\\{(.+)\\}$/, shape: 'diamond' },\n { pattern: /^(\\w+)\\((.+)\\)$/, shape: 'round' },\n { pattern: /^(\\w+)\\[\\/(.+)\\/\\]$/, shape: 'parallelogram' },\n { pattern: /^(\\w+)\\[\\\\(.+)\\\\\\]$/, shape: 'parallelogram' },\n { pattern: /^(\\w+)>(.+)\\]$/, shape: 'asymmetric' },\n { pattern: /^(\\w+)\\[(.+)\\]$/, shape: 'rect' },\n { pattern: /^(\\w+)$/, shape: 'rect' },\n];\n\nconst EDGE_PATTERNS = [\n { pattern: /^-->\\|(.+?)\\|$/, style: 'solid' as EdgeStyle, arrowType: 'arrow' as ArrowType, hasLabel: true },\n { pattern: /^-->$/, style: 'solid' as EdgeStyle, arrowType: 'arrow' as ArrowType, hasLabel: false },\n { pattern: /^---\\|(.+?)\\|$/, style: 'solid' as EdgeStyle, arrowType: 'open' as ArrowType, hasLabel: true },\n { pattern: /^---$/, style: 'solid' as EdgeStyle, arrowType: 'open' as ArrowType, hasLabel: false },\n { pattern: /^-\\.->\\|(.+?)\\|$/, style: 'dotted' as EdgeStyle, arrowType: 'arrow' as ArrowType, hasLabel: true },\n { pattern: /^-\\.->$/, style: 'dotted' as EdgeStyle, arrowType: 'arrow' as ArrowType, hasLabel: false },\n { pattern: /^-\\.-\\|(.+?)\\|$/, style: 'dotted' as EdgeStyle, arrowType: 'open' as ArrowType, hasLabel: true },\n { pattern: /^-\\.-$/, style: 'dotted' as EdgeStyle, arrowType: 'open' as ArrowType, hasLabel: false },\n { pattern: /^==>\\|(.+?)\\|$/, style: 'thick' as EdgeStyle, arrowType: 'arrow' as ArrowType, hasLabel: true },\n { pattern: /^==>$/, style: 'thick' as EdgeStyle, arrowType: 'arrow' as ArrowType, hasLabel: false },\n { pattern: /^--o$/, style: 'solid' as EdgeStyle, arrowType: 'circle' as ArrowType, hasLabel: false },\n { pattern: /^--x$/, style: 'solid' as EdgeStyle, arrowType: 'cross' as ArrowType, hasLabel: false },\n { pattern: /^<-->$/, style: 'solid' as EdgeStyle, arrowType: 'arrow' as ArrowType, hasLabel: false, bidirectional: true },\n];\n\nconst CLASSDEF_PATTERN = /^classDef\\s+(\\w+)\\s+(.+)$/;\nconst CLASS_ASSIGNMENT_PATTERN = /^class\\s+(.+)\\s+(\\w+)$/;\nconst NODE_CLASS_PATTERN = /^(\\w+):::(\\w+)$/;\nconst AMPERSAND_SPLIT = /\\s*&\\s*/;\n\nfunction parseNodeDefinition(text: string): ParsedNode {\n const trimmed = text.trim();\n \n const classMatch = trimmed.match(NODE_CLASS_PATTERN);\n let nodeText = trimmed;\n let styleClass: string | undefined;\n \n if (classMatch) {\n nodeText = classMatch[1];\n styleClass = classMatch[2];\n }\n \n for (const { pattern, shape } of NODE_DEF_PATTERNS) {\n const match = nodeText.match(pattern);\n if (match) {\n const id = match[1];\n const label = match[2] ?? match[1];\n return { id, label, shape, styleClass };\n }\n }\n \n return { id: trimmed, label: trimmed, shape: 'rect', styleClass };\n}\n\nfunction parseEdgeOperator(text: string): { style: EdgeStyle; arrowType: ArrowType; label?: string; bidirectional: boolean } | null {\n for (const edgeDef of EDGE_PATTERNS) {\n const match = text.match(edgeDef.pattern);\n if (match) {\n return {\n style: edgeDef.style,\n arrowType: edgeDef.arrowType,\n label: edgeDef.hasLabel ? match[1] : undefined,\n bidirectional: edgeDef.bidirectional ?? false,\n };\n }\n }\n return null;\n}\n\nfunction parseStyleClass(propsString: string): Partial<StyleClass> {\n const props: Partial<StyleClass> = {};\n const pairs = propsString.split(',');\n \n for (const pair of pairs) {\n const [key, value] = pair.split(':').map(s => s.trim());\n if (key && value) {\n switch (key) {\n case 'fill': props.fill = value; break;\n case 'stroke': props.stroke = value; break;\n case 'color': props.color = value; break;\n case 'stroke-width': props.strokeWidth = value; break;\n }\n }\n }\n \n return props;\n}\n\nconst EDGE_OPERATOR_REGEX = /(<-->|-->\\|[^|]+\\||-->|---\\|[^|]+\\||---|-\\.->\\|[^|]+\\||-\\.->|-\\.-\\|[^|]+\\||-\\.-|==>\\|[^|]+\\||==>|--o|--x)/;\n\nfunction tokenizeEdgeLine(line: string): string[] {\n const tokens: string[] = [];\n let current = '';\n let inBracket = 0;\n let inParen = 0;\n let inBrace = 0;\n let inPipe = false;\n \n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n \n if (char === '[') inBracket++;\n else if (char === ']') inBracket--;\n else if (char === '(') inParen++;\n else if (char === ')') inParen--;\n else if (char === '{') inBrace++;\n else if (char === '}') inBrace--;\n else if (char === '|') inPipe = !inPipe;\n \n const inContainer = inBracket > 0 || inParen > 0 || inBrace > 0 || inPipe;\n \n if (!inContainer && char === ' ') {\n if (current.trim()) {\n tokens.push(current.trim());\n }\n current = '';\n } else {\n current += char;\n }\n }\n \n if (current.trim()) {\n tokens.push(current.trim());\n }\n \n const expandedTokens: string[] = [];\n for (const token of tokens) {\n const parts = token.split(EDGE_OPERATOR_REGEX).filter(p => p);\n if (parts.length > 1) {\n expandedTokens.push(...parts);\n } else {\n expandedTokens.push(token);\n }\n }\n \n return expandedTokens;\n}\n\nexport function parseFlowchart(input: string): FlowchartAST {\n const trimmedInput = input.trim();\n const normalizedInput = trimmedInput.includes(';')\n ? trimmedInput.replace(/;/g, '\\n')\n : trimmedInput;\n const lines = normalizedInput.split('\\n').map(line => line.trim()).filter(line => line && !line.startsWith('%%'));\n \n if (lines.length === 0) {\n throw new Error('Empty flowchart input');\n }\n \n const directionMatch = lines[0].match(DIRECTION_PATTERN);\n if (!directionMatch) {\n throw new Error(`Invalid flowchart header. Expected \"graph LR|RL|TD|TB|BT\" or \"flowchart LR|RL|TD|TB|BT\", got: \"${lines[0]}\"`);\n }\n \n let direction = directionMatch[1].toUpperCase();\n if (direction === 'TB') direction = 'TD';\n const graphDirection = direction as GraphDirection;\n \n const nodes = new Map<string, FlowchartNode>();\n const edges: FlowchartEdge[] = [];\n const styleClasses = new Map<string, StyleClass>();\n const subgraphs: Subgraph[] = [];\n const nodeClassAssignments = new Map<string, string>();\n \n let nodeIndex = 0;\n let edgeIndex = 0;\n \n function getOrCreateNode(parsed: ParsedNode): FlowchartNode {\n let node = nodes.get(parsed.id);\n if (!node) {\n node = {\n id: parsed.id,\n label: parsed.label,\n shape: parsed.shape,\n styleClass: parsed.styleClass,\n index: nodeIndex++,\n };\n nodes.set(parsed.id, node);\n } else {\n if (parsed.label !== parsed.id) {\n node.label = parsed.label;\n }\n if (parsed.shape !== 'rect') {\n node.shape = parsed.shape;\n }\n if (parsed.styleClass) {\n node.styleClass = parsed.styleClass;\n }\n }\n return node;\n }\n \n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n \n const classDefMatch = line.match(CLASSDEF_PATTERN);\n if (classDefMatch) {\n const [, name, propsString] = classDefMatch;\n const props = parseStyleClass(propsString);\n styleClasses.set(name, { name, ...props });\n continue;\n }\n \n const classAssignMatch = line.match(CLASS_ASSIGNMENT_PATTERN);\n if (classAssignMatch) {\n const [, nodeIds, className] = classAssignMatch;\n for (const nodeId of nodeIds.split(',').map(s => s.trim())) {\n nodeClassAssignments.set(nodeId, className);\n }\n continue;\n }\n \n if (line.startsWith('subgraph') || line === 'end') {\n continue;\n }\n \n const tokens = tokenizeEdgeLine(line);\n if (tokens.length === 0) continue;\n \n if (tokens.length === 1) {\n const ampersandParts = tokens[0].split(AMPERSAND_SPLIT);\n for (const part of ampersandParts) {\n const parsed = parseNodeDefinition(part);\n getOrCreateNode(parsed);\n }\n continue;\n }\n \n let currentFromNodes: ParsedNode[] = [];\n let expectingEdge = false;\n \n for (const token of tokens) {\n const edgeOp = parseEdgeOperator(token);\n \n if (edgeOp) {\n expectingEdge = true;\n continue;\n }\n \n const ampersandParts = token.split(AMPERSAND_SPLIT);\n const parsedNodes = ampersandParts.map(parseNodeDefinition);\n \n if (currentFromNodes.length > 0 && expectingEdge) {\n const lastEdgeOp = (() => {\n for (let j = tokens.indexOf(token) - 1; j >= 0; j--) {\n const op = parseEdgeOperator(tokens[j]);\n if (op) return op;\n }\n return { style: 'solid' as EdgeStyle, arrowType: 'arrow' as ArrowType, label: undefined, bidirectional: false };\n })();\n \n for (const fromParsed of currentFromNodes) {\n const fromNode = getOrCreateNode(fromParsed);\n for (const toParsed of parsedNodes) {\n const toNode = getOrCreateNode(toParsed);\n edges.push({\n from: fromNode.id,\n to: toNode.id,\n label: lastEdgeOp.label,\n style: lastEdgeOp.style,\n arrowType: lastEdgeOp.arrowType,\n bidirectional: lastEdgeOp.bidirectional,\n index: edgeIndex++,\n });\n \n if (lastEdgeOp.bidirectional) {\n edges.push({\n from: toNode.id,\n to: fromNode.id,\n style: lastEdgeOp.style,\n arrowType: lastEdgeOp.arrowType,\n bidirectional: false,\n index: edgeIndex++,\n });\n }\n }\n }\n }\n \n currentFromNodes = parsedNodes;\n expectingEdge = false;\n }\n }\n \n for (const [nodeId, className] of nodeClassAssignments) {\n const node = nodes.get(nodeId);\n if (node) {\n node.styleClass = className;\n }\n }\n \n return {\n type: 'flowchart',\n direction: graphDirection,\n nodes,\n edges,\n subgraphs,\n styleClasses,\n };\n}\n","import type { Charset } from './types.js';\n\nexport interface BoxChars {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n horizontal: string;\n vertical: string;\n}\n\nexport interface LineChars {\n horizontal: string;\n vertical: string;\n dottedHorizontal: string;\n dottedVertical: string;\n thickHorizontal: string;\n thickVertical: string;\n}\n\nexport interface ArrowChars {\n up: string;\n down: string;\n left: string;\n right: string;\n upOpen: string;\n downOpen: string;\n leftOpen: string;\n rightOpen: string;\n circle: string;\n cross: string;\n}\n\nexport interface JunctionChars {\n cross: string;\n leftT: string;\n rightT: string;\n topT: string;\n bottomT: string;\n}\n\nexport interface CharacterSet {\n box: BoxChars;\n line: LineChars;\n arrow: ArrowChars;\n junction: JunctionChars;\n}\n\nconst UNICODE_CHARS: CharacterSet = {\n box: {\n topLeft: '┌',\n topRight: '┐',\n bottomLeft: '└',\n bottomRight: '┘',\n horizontal: '─',\n vertical: '│',\n },\n line: {\n horizontal: '─',\n vertical: '│',\n dottedHorizontal: '┈',\n dottedVertical: '┊',\n thickHorizontal: '━',\n thickVertical: '┃',\n },\n arrow: {\n up: '▲',\n down: '▼',\n left: '◄',\n right: '►',\n upOpen: '△',\n downOpen: '▽',\n leftOpen: '◁',\n rightOpen: '▷',\n circle: '●',\n cross: '×',\n },\n junction: {\n cross: '┼',\n leftT: '├',\n rightT: '┤',\n topT: '┬',\n bottomT: '┴',\n },\n};\n\nconst ASCII_CHARS: CharacterSet = {\n box: {\n topLeft: '+',\n topRight: '+',\n bottomLeft: '+',\n bottomRight: '+',\n horizontal: '-',\n vertical: '|',\n },\n line: {\n horizontal: '-',\n vertical: '|',\n dottedHorizontal: '.',\n dottedVertical: ':',\n thickHorizontal: '=',\n thickVertical: '#',\n },\n arrow: {\n up: '^',\n down: 'v',\n left: '<',\n right: '>',\n upOpen: '^',\n downOpen: 'v',\n leftOpen: '<',\n rightOpen: '>',\n circle: 'o',\n cross: 'x',\n },\n junction: {\n cross: '+',\n leftT: '+',\n rightT: '+',\n topT: '+',\n bottomT: '+',\n },\n};\n\nexport function getCharacterSet(charset: Charset): CharacterSet {\n return charset === 'unicode' ? UNICODE_CHARS : ASCII_CHARS;\n}\n\nconst JUNCTION_MERGE_MAP: Record<string, Record<string, string>> = {\n '─': { '│': '┼', '┌': '┬', '┐': '┬', '└': '┴', '┘': '┴', '├': '┼', '┤': '┼', '┬': '┬', '┴': '┴' },\n '│': { '─': '┼', '┌': '├', '┐': '┤', '└': '├', '┘': '┤', '┬': '┼', '┴': '┼', '├': '├', '┤': '┤' },\n '┌': { '─': '┬', '│': '├', '┘': '┼', '┐': '┬', '└': '├' },\n '┐': { '─': '┬', '│': '┤', '└': '┼', '┌': '┬', '┘': '┤' },\n '└': { '─': '┴', '│': '├', '┐': '┼', '┌': '├', '┘': '┴' },\n '┘': { '─': '┴', '│': '┤', '┌': '┼', '└': '┴', '┐': '┤' },\n '├': { '─': '┼', '┤': '┼', '┬': '┼', '┴': '┼' },\n '┤': { '─': '┼', '├': '┼', '┬': '┼', '┴': '┼' },\n '┬': { '│': '┼', '├': '┼', '┤': '┼', '┴': '┼' },\n '┴': { '│': '┼', '├': '┼', '┤': '┼', '┬': '┼' },\n};\n\nexport function mergeJunctionChars(existing: string, incoming: string): string {\n if (existing === ' ') return incoming;\n if (incoming === ' ') return existing;\n if (existing === incoming) return existing;\n \n const merged = JUNCTION_MERGE_MAP[existing]?.[incoming];\n if (merged) return merged;\n \n const reverseMerged = JUNCTION_MERGE_MAP[incoming]?.[existing];\n if (reverseMerged) return reverseMerged;\n \n return incoming;\n}\n\nexport function isLineOrJunctionChar(char: string): boolean {\n return '─│├┤┬┴┼┈┊━┃-|+'.includes(char);\n}\n\nexport function isJunctionChar(char: string): boolean {\n return '─│┌┐└┘├┤┬┴┼┈┊━┃-|+'.includes(char);\n}\n\nexport function isHorizontalChar(char: string): boolean {\n return '─┈━-═'.includes(char);\n}\n\nexport function isVerticalChar(char: string): boolean {\n return '│┊┃|║'.includes(char);\n}\n\nexport function connectsLeft(char: string): boolean {\n return '─┈━-═┼┴┬┤┘┐├└┌+◄<◁'.includes(char);\n}\n\nexport function connectsRight(char: string): boolean {\n return '─┈━-═┼┴┬├┘┐┤└┌+►>▷'.includes(char);\n}\n\nexport function connectsUp(char: string): boolean {\n return '│┊┃|║┼├┤┴┘└+▲^△'.includes(char);\n}\n\nexport function connectsDown(char: string): boolean {\n return '│┊┃|║┼├┤┬┐┌+▼v▽'.includes(char);\n}\n\nexport function getJunctionChar(\n up: boolean,\n down: boolean, \n left: boolean,\n right: boolean,\n charset: Charset\n): string {\n const chars = getCharacterSet(charset);\n const count = [up, down, left, right].filter(Boolean).length;\n \n if (count === 4) return chars.junction.cross;\n if (count === 3) {\n if (!up) return chars.junction.topT;\n if (!down) return chars.junction.bottomT;\n if (!left) return chars.junction.leftT;\n if (!right) return chars.junction.rightT;\n }\n if (count === 2) {\n if (up && down) return chars.line.vertical;\n if (left && right) return chars.line.horizontal;\n if (down && right) return chars.box.topLeft;\n if (down && left) return chars.box.topRight;\n if (up && right) return chars.box.bottomLeft;\n if (up && left) return chars.box.bottomRight;\n }\n if (count === 1) {\n if (up || down) return chars.line.vertical;\n if (left || right) return chars.line.horizontal;\n }\n return ' ';\n}\n","import type { DrawingCoord, Charset } from './types.js';\nimport { \n getCharacterSet, \n mergeJunctionChars, \n isLineOrJunctionChar,\n connectsUp,\n connectsDown,\n connectsLeft,\n connectsRight,\n getJunctionChar,\n type CharacterSet \n} from './characters.js';\n\nexport class Canvas {\n private grid: string[][];\n private chars: CharacterSet;\n \n constructor(\n private width: number,\n private height: number,\n charset: Charset = 'unicode'\n ) {\n this.grid = Array.from({ length: height }, () => \n Array.from({ length: width }, () => ' ')\n );\n this.chars = getCharacterSet(charset);\n }\n\n getWidth(): number {\n return this.width;\n }\n\n getHeight(): number {\n return this.height;\n }\n\n set(x: number, y: number, char: string): void {\n if (x >= 0 && x < this.width && y >= 0 && y < this.height) {\n const existing = this.grid[y][x];\n if (isLineOrJunctionChar(existing) && isLineOrJunctionChar(char)) {\n this.grid[y][x] = mergeJunctionChars(existing, char);\n } else if (existing === ' ' || !isLineOrJunctionChar(existing)) {\n this.grid[y][x] = char;\n }\n }\n }\n\n forceSet(x: number, y: number, char: string): void {\n if (x >= 0 && x < this.width && y >= 0 && y < this.height) {\n this.grid[y][x] = char;\n }\n }\n\n get(x: number, y: number): string {\n if (x >= 0 && x < this.width && y >= 0 && y < this.height) {\n return this.grid[y][x];\n }\n return ' ';\n }\n\n drawText(x: number, y: number, text: string): void {\n for (let i = 0; i < text.length; i++) {\n if (x + i < this.width) {\n this.grid[y][x + i] = text[i];\n }\n }\n }\n\n drawHorizontalLine(x1: number, x2: number, y: number, char?: string): void {\n const lineChar = char ?? this.chars.line.horizontal;\n const startX = Math.min(x1, x2);\n const endX = Math.max(x1, x2);\n for (let x = startX; x <= endX; x++) {\n this.set(x, y, lineChar);\n }\n }\n\n drawVerticalLine(x: number, y1: number, y2: number, char?: string): void {\n const lineChar = char ?? this.chars.line.vertical;\n const startY = Math.min(y1, y2);\n const endY = Math.max(y1, y2);\n for (let y = startY; y <= endY; y++) {\n this.set(x, y, lineChar);\n }\n }\n\n drawBox(x: number, y: number, width: number, height: number): void {\n const { topLeft, topRight, bottomLeft, bottomRight, horizontal, vertical } = this.chars.box;\n \n this.set(x, y, topLeft);\n this.set(x + width - 1, y, topRight);\n this.set(x, y + height - 1, bottomLeft);\n this.set(x + width - 1, y + height - 1, bottomRight);\n \n for (let i = 1; i < width - 1; i++) {\n this.set(x + i, y, horizontal);\n this.set(x + i, y + height - 1, horizontal);\n }\n \n for (let i = 1; i < height - 1; i++) {\n this.set(x, y + i, vertical);\n this.set(x + width - 1, y + i, vertical);\n }\n }\n\n drawArrow(x: number, y: number, direction: 'up' | 'down' | 'left' | 'right'): void {\n this.set(x, y, this.chars.arrow[direction]);\n }\n\n expandTo(newWidth: number, newHeight: number): void {\n if (newWidth > this.width) {\n for (const row of this.grid) {\n while (row.length < newWidth) {\n row.push(' ');\n }\n }\n this.width = newWidth;\n }\n \n if (newHeight > this.height) {\n while (this.grid.length < newHeight) {\n this.grid.push(Array.from({ length: this.width }, () => ' '));\n }\n this.height = newHeight;\n }\n }\n\n merge(other: Canvas, offsetX: number, offsetY: number): void {\n const requiredWidth = offsetX + other.getWidth();\n const requiredHeight = offsetY + other.getHeight();\n this.expandTo(requiredWidth, requiredHeight);\n \n for (let y = 0; y < other.getHeight(); y++) {\n for (let x = 0; x < other.getWidth(); x++) {\n const char = other.get(x, y);\n if (char !== ' ') {\n this.set(offsetX + x, offsetY + y, char);\n }\n }\n }\n }\n\n fixJunctions(): void {\n const junctionChars = '┼┬┴├┤+';\n \n for (let y = 0; y < this.height; y++) {\n for (let x = 0; x < this.width; x++) {\n const char = this.grid[y][x];\n if (!junctionChars.includes(char)) continue;\n \n const above = y > 0 ? this.grid[y - 1][x] : ' ';\n const below = y < this.height - 1 ? this.grid[y + 1][x] : ' ';\n const left = x > 0 ? this.grid[y][x - 1] : ' ';\n const right = x < this.width - 1 ? this.grid[y][x + 1] : ' ';\n \n const hasUp = connectsDown(above);\n const hasDown = connectsUp(below);\n const hasLeft = connectsRight(left);\n const hasRight = connectsLeft(right);\n \n const charset: Charset = this.chars === getCharacterSet('unicode') ? 'unicode' : 'ascii';\n const corrected = getJunctionChar(hasUp, hasDown, hasLeft, hasRight, charset);\n \n if (corrected !== char) {\n this.grid[y][x] = corrected;\n }\n }\n }\n }\n\n toString(): string {\n this.fixJunctions();\n return this.grid\n .map(row => row.join('').trimEnd())\n .join('\\n')\n .trimEnd();\n }\n\n static fromCoord(coord: DrawingCoord): { x: number; y: number } {\n return { x: coord.x, y: coord.y };\n }\n}\n","import type { GraphDirection, GridCoord, RenderOptions } from '../core/types.js';\nimport type { FlowchartNode, FlowchartEdge, FlowchartAST } from '../diagrams/flowchart/types.js';\n\nexport interface LayoutedGraph {\n nodes: Map<string, FlowchartNode>;\n edges: FlowchartEdge[];\n backEdges: Set<FlowchartEdge>;\n width: number;\n height: number;\n columnWidths: Map<number, number>;\n rowHeights: Map<number, number>;\n}\n\nfunction getOutgoingEdges(nodeId: string, edges: FlowchartEdge[]): FlowchartEdge[] {\n return edges.filter(e => e.from === nodeId);\n}\n\nfunction getIncomingEdges(nodeId: string, edges: FlowchartEdge[]): FlowchartEdge[] {\n return edges.filter(e => e.to === nodeId);\n}\n\nfunction detectCyclesAndBackEdges(\n nodes: Map<string, FlowchartNode>,\n edges: FlowchartEdge[]\n): { backEdges: Set<FlowchartEdge>; forwardEdges: FlowchartEdge[] } {\n const backEdges = new Set<FlowchartEdge>();\n const visited = new Set<string>();\n const inStack = new Set<string>();\n \n function dfs(nodeId: string): void {\n visited.add(nodeId);\n inStack.add(nodeId);\n \n for (const edge of getOutgoingEdges(nodeId, edges)) {\n if (inStack.has(edge.to)) {\n backEdges.add(edge);\n } else if (!visited.has(edge.to)) {\n dfs(edge.to);\n }\n }\n \n inStack.delete(nodeId);\n }\n \n for (const nodeId of nodes.keys()) {\n if (!visited.has(nodeId)) {\n dfs(nodeId);\n }\n }\n \n const forwardEdges = edges.filter(e => !backEdges.has(e));\n return { backEdges, forwardEdges };\n}\n\nfunction assignLayers(\n nodes: Map<string, FlowchartNode>,\n forwardEdges: FlowchartEdge[]\n): Map<string, number> {\n const layers = new Map<string, number>();\n const inDegree = new Map<string, number>();\n \n for (const nodeId of nodes.keys()) {\n inDegree.set(nodeId, 0);\n }\n \n for (const edge of forwardEdges) {\n inDegree.set(edge.to, (inDegree.get(edge.to) ?? 0) + 1);\n }\n \n const queue: string[] = [];\n for (const [nodeId, degree] of inDegree) {\n if (degree === 0) {\n queue.push(nodeId);\n layers.set(nodeId, 0);\n }\n }\n \n while (queue.length > 0) {\n const nodeId = queue.shift()!;\n const currentLayer = layers.get(nodeId) ?? 0;\n \n for (const edge of getOutgoingEdges(nodeId, forwardEdges)) {\n const targetLayer = Math.max(layers.get(edge.to) ?? 0, currentLayer + 1);\n layers.set(edge.to, targetLayer);\n \n const newDegree = (inDegree.get(edge.to) ?? 1) - 1;\n inDegree.set(edge.to, newDegree);\n \n if (newDegree === 0) {\n queue.push(edge.to);\n }\n }\n }\n \n for (const nodeId of nodes.keys()) {\n if (!layers.has(nodeId)) {\n layers.set(nodeId, 0);\n }\n }\n \n return layers;\n}\n\nfunction orderNodesInLayers(\n nodes: Map<string, FlowchartNode>,\n edges: FlowchartEdge[],\n layers: Map<string, number>,\n backEdges: Set<FlowchartEdge>\n): Map<number, string[]> {\n const layerNodes = new Map<number, string[]>();\n \n for (const [nodeId, layer] of layers) {\n if (!layerNodes.has(layer)) {\n layerNodes.set(layer, []);\n }\n layerNodes.get(layer)!.push(nodeId);\n }\n \n const forwardEdges = edges.filter(e => !backEdges.has(e));\n \n for (let iteration = 0; iteration < 4; iteration++) {\n const sortedLayers = [...layerNodes.keys()].sort((a, b) => a - b);\n \n for (const layer of sortedLayers) {\n if (layer === 0) {\n const nodeIds = layerNodes.get(layer)!;\n nodeIds.sort((a, b) => (nodes.get(a)?.index ?? 0) - (nodes.get(b)?.index ?? 0));\n continue;\n }\n \n const nodeIds = layerNodes.get(layer)!;\n const prevLayerNodes = layerNodes.get(layer - 1) ?? [];\n const prevPositions = new Map(prevLayerNodes.map((id, idx) => [id, idx]));\n \n nodeIds.sort((a, b) => {\n const aIncoming = getIncomingEdges(a, forwardEdges);\n const bIncoming = getIncomingEdges(b, forwardEdges);\n \n const aBarycenter = aIncoming.length > 0\n ? aIncoming.reduce((sum, e) => sum + (prevPositions.get(e.from) ?? 0), 0) / aIncoming.length\n : nodes.get(a)?.index ?? 0;\n const bBarycenter = bIncoming.length > 0\n ? bIncoming.reduce((sum, e) => sum + (prevPositions.get(e.from) ?? 0), 0) / bIncoming.length\n : nodes.get(b)?.index ?? 0;\n \n return aBarycenter - bBarycenter;\n });\n }\n }\n \n return layerNodes;\n}\n\nfunction assignGridCoordinates(\n nodes: Map<string, FlowchartNode>,\n layerNodes: Map<number, string[]>,\n direction: GraphDirection,\n _options: RenderOptions\n): void {\n const isHorizontal = direction === 'LR' || direction === 'RL';\n const isReversed = direction === 'RL' || direction === 'BT';\n const spacing = 1;\n \n const maxLayer = Math.max(...layerNodes.keys(), 0);\n \n for (const [layer, nodeIds] of layerNodes) {\n const actualLayer = isReversed ? maxLayer - layer : layer;\n \n for (let pos = 0; pos < nodeIds.length; pos++) {\n const nodeId = nodeIds[pos];\n const node = nodes.get(nodeId);\n if (!node) continue;\n \n if (isHorizontal) {\n node.gridCoord = {\n x: actualLayer * spacing,\n y: pos * spacing,\n };\n } else {\n node.gridCoord = {\n x: pos * spacing,\n y: actualLayer * spacing,\n };\n }\n }\n }\n}\n\nfunction calculateDimensions(\n nodes: Map<string, FlowchartNode>,\n options: RenderOptions\n): { columnWidths: Map<number, number>; rowHeights: Map<number, number> } {\n const columnWidths = new Map<number, number>();\n const rowHeights = new Map<number, number>();\n \n for (const node of nodes.values()) {\n if (!node.gridCoord) continue;\n \n const labelWidth = node.label.length + options.borderPadding * 2 + 2;\n const labelHeight = 1 + options.borderPadding * 2 + 2;\n \n node.width = labelWidth;\n node.height = labelHeight;\n \n const col = node.gridCoord.x;\n const row = node.gridCoord.y;\n \n const currentColWidth = columnWidths.get(col) ?? 0;\n columnWidths.set(col, Math.max(currentColWidth, labelWidth));\n \n const currentRowHeight = rowHeights.get(row) ?? 0;\n rowHeights.set(row, Math.max(currentRowHeight, labelHeight));\n }\n \n const maxCol = columnWidths.size > 0 ? Math.max(...columnWidths.keys()) : 0;\n const maxRow = rowHeights.size > 0 ? Math.max(...rowHeights.keys()) : 0;\n \n for (let i = 0; i <= maxCol; i++) {\n if (!columnWidths.has(i)) {\n columnWidths.set(i, options.paddingX);\n }\n }\n \n for (let i = 0; i <= maxRow; i++) {\n if (!rowHeights.has(i)) {\n rowHeights.set(i, options.paddingY);\n }\n }\n \n return { columnWidths, rowHeights };\n}\n\nfunction gridToDrawingCoord(\n gridCoord: GridCoord,\n columnWidths: Map<number, number>,\n rowHeights: Map<number, number>,\n paddingX: number,\n paddingY: number\n): { x: number; y: number } {\n let x = 0;\n for (let col = 0; col < gridCoord.x; col++) {\n x += (columnWidths.get(col) ?? 0) + paddingX;\n }\n \n let y = 0;\n for (let row = 0; row < gridCoord.y; row++) {\n y += (rowHeights.get(row) ?? 0) + paddingY;\n }\n \n return { x, y };\n}\n\nexport function layoutFlowchart(\n ast: FlowchartAST,\n options: RenderOptions\n): LayoutedGraph {\n const { nodes, edges, direction } = ast;\n \n if (nodes.size === 0) {\n return {\n nodes,\n edges,\n backEdges: new Set(),\n width: 0,\n height: 0,\n columnWidths: new Map(),\n rowHeights: new Map(),\n };\n }\n \n const { backEdges, forwardEdges } = detectCyclesAndBackEdges(nodes, edges);\n const layers = assignLayers(nodes, forwardEdges);\n const layerNodes = orderNodesInLayers(nodes, edges, layers, backEdges);\n assignGridCoordinates(nodes, layerNodes, direction, options);\n \n const { columnWidths, rowHeights } = calculateDimensions(nodes, options);\n \n for (const node of nodes.values()) {\n if (node.gridCoord) {\n const baseCoord = gridToDrawingCoord(\n node.gridCoord,\n columnWidths,\n rowHeights,\n options.paddingX,\n options.paddingY\n );\n \n const colWidth = columnWidths.get(node.gridCoord.x) ?? 0;\n const rowHeight = rowHeights.get(node.gridCoord.y) ?? 0;\n const nodeWidth = node.width ?? 0;\n const nodeHeight = node.height ?? 0;\n \n node.drawingCoord = {\n x: baseCoord.x + Math.floor((colWidth - nodeWidth) / 2),\n y: baseCoord.y + Math.floor((rowHeight - nodeHeight) / 2),\n };\n }\n }\n \n let totalWidth = 0;\n for (const width of columnWidths.values()) {\n totalWidth += width + options.paddingX;\n }\n \n let totalHeight = 0;\n for (const height of rowHeights.values()) {\n totalHeight += height + options.paddingY;\n }\n \n return {\n nodes,\n edges,\n backEdges,\n width: totalWidth,\n height: totalHeight,\n columnWidths,\n rowHeights,\n };\n}\n","import { Canvas } from '../../core/canvas.js';\nimport { getCharacterSet } from '../../core/characters.js';\nimport type { RenderOptions, Direction } from '../../core/types.js';\nimport type { FlowchartAST, FlowchartNode, FlowchartEdge } from './types.js';\nimport { layoutFlowchart } from '../../layout/sugiyama.js';\n\nfunction drawNode(\n canvas: Canvas,\n node: FlowchartNode\n): void {\n if (!node.drawingCoord || !node.width || !node.height) return;\n \n const { x, y } = node.drawingCoord;\n const { width, height } = node;\n \n canvas.drawBox(x, y, width, height);\n \n const textX = x + Math.floor((width - node.label.length) / 2);\n const textY = y + Math.floor(height / 2);\n canvas.drawText(textX, textY, node.label);\n}\n\nfunction getNodeCenter(node: FlowchartNode): { x: number; y: number } {\n if (!node.drawingCoord || !node.width || !node.height) {\n return { x: 0, y: 0 };\n }\n const { x, y } = node.drawingCoord;\n return {\n x: x + Math.floor(node.width / 2),\n y: y + Math.floor(node.height / 2),\n };\n}\n\nfunction getNodeBorderPoint(\n node: FlowchartNode,\n direction: Direction\n): { x: number; y: number } {\n if (!node.drawingCoord || !node.width || !node.height) {\n return { x: 0, y: 0 };\n }\n \n const { x, y } = node.drawingCoord;\n const { width, height } = node;\n const centerX = x + Math.floor(width / 2);\n const centerY = y + Math.floor(height / 2);\n \n switch (direction) {\n case 'right':\n return { x: x + width - 1, y: centerY };\n case 'left':\n return { x, y: centerY };\n case 'down':\n return { x: centerX, y: y + height - 1 };\n case 'up':\n return { x: centerX, y };\n }\n}\n\nfunction determineEdgeDirection(\n fromNode: FlowchartNode,\n toNode: FlowchartNode,\n graphDirection: 'LR' | 'RL' | 'TD' | 'BT'\n): { startDir: Direction; endDir: Direction } {\n const fromCenter = getNodeCenter(fromNode);\n const toCenter = getNodeCenter(toNode);\n \n const dx = toCenter.x - fromCenter.x;\n const dy = toCenter.y - fromCenter.y;\n \n switch (graphDirection) {\n case 'LR':\n if (dx > 0) return { startDir: 'right', endDir: 'left' };\n if (dx < 0) return { startDir: 'left', endDir: 'right' };\n return dy > 0 ? { startDir: 'down', endDir: 'up' } : { startDir: 'up', endDir: 'down' };\n \n case 'RL':\n if (dx < 0) return { startDir: 'left', endDir: 'right' };\n if (dx > 0) return { startDir: 'right', endDir: 'left' };\n return dy > 0 ? { startDir: 'down', endDir: 'up' } : { startDir: 'up', endDir: 'down' };\n \n case 'TD':\n if (dy > 0) return { startDir: 'down', endDir: 'up' };\n if (dy < 0) return { startDir: 'up', endDir: 'down' };\n return dx > 0 ? { startDir: 'right', endDir: 'left' } : { startDir: 'left', endDir: 'right' };\n \n case 'BT':\n if (dy < 0) return { startDir: 'up', endDir: 'down' };\n if (dy > 0) return { startDir: 'down', endDir: 'up' };\n return dx > 0 ? { startDir: 'right', endDir: 'left' } : { startDir: 'left', endDir: 'right' };\n }\n}\n\nfunction drawBackEdge(\n canvas: Canvas,\n edge: FlowchartEdge,\n fromNode: FlowchartNode,\n toNode: FlowchartNode,\n graphDirection: 'LR' | 'RL' | 'TD' | 'BT',\n options: RenderOptions\n): void {\n const chars = getCharacterSet(options.charset);\n const isVertical = graphDirection === 'TD' || graphDirection === 'BT';\n \n const hChar = edge.style === 'dotted' ? chars.line.dottedHorizontal\n : edge.style === 'thick' ? chars.line.thickHorizontal\n : chars.line.horizontal;\n \n const vChar = edge.style === 'dotted' ? chars.line.dottedVertical\n : edge.style === 'thick' ? chars.line.thickVertical\n : chars.line.vertical;\n\n if (isVertical) {\n // TD/BT: Back-edge goes out the right side, up, then into the right side of target\n const fromRight = getNodeBorderPoint(fromNode, 'right');\n const toRight = getNodeBorderPoint(toNode, 'right');\n \n const loopX = Math.max(fromRight.x, toRight.x) + 3;\n \n // Draw: right from source -> up/down -> left into target\n canvas.drawHorizontalLine(fromRight.x + 1, loopX, fromRight.y, hChar);\n canvas.drawVerticalLine(loopX, Math.min(fromRight.y, toRight.y), Math.max(fromRight.y, toRight.y), vChar);\n canvas.drawHorizontalLine(toRight.x + 1, loopX, toRight.y, hChar);\n } else {\n // LR/RL: Back-edge goes out the bottom, left/right, then into the bottom of target\n const fromBottom = getNodeBorderPoint(fromNode, 'down');\n const toBottom = getNodeBorderPoint(toNode, 'down');\n \n const loopY = Math.max(fromBottom.y, toBottom.y) + 2;\n \n // Draw: down from source -> left/right -> up into target\n canvas.drawVerticalLine(fromBottom.x, fromBottom.y + 1, loopY, vChar);\n canvas.drawHorizontalLine(Math.min(fromBottom.x, toBottom.x), Math.max(fromBottom.x, toBottom.x), loopY, hChar);\n canvas.drawVerticalLine(toBottom.x, toBottom.y + 1, loopY, vChar);\n }\n}\n\nfunction drawEdge(\n canvas: Canvas,\n edge: FlowchartEdge,\n fromNode: FlowchartNode,\n toNode: FlowchartNode,\n graphDirection: 'LR' | 'RL' | 'TD' | 'BT',\n options: RenderOptions,\n isBackEdge: boolean = false,\n sourceIndex: number = 0,\n totalFromSource: number = 1,\n targetIndex: number = 0,\n totalToTarget: number = 1\n): void {\n // Handle back-edges specially - route them around nodes\n if (isBackEdge) {\n drawBackEdge(canvas, edge, fromNode, toNode, graphDirection, options);\n return;\n }\n\n const chars = getCharacterSet(options.charset);\n const { startDir, endDir } = determineEdgeDirection(fromNode, toNode, graphDirection);\n \n const startBorder = getNodeBorderPoint(fromNode, startDir);\n const endBorder = getNodeBorderPoint(toNode, endDir);\n \n const hChar = edge.style === 'dotted' ? chars.line.dottedHorizontal\n : edge.style === 'thick' ? chars.line.thickHorizontal\n : chars.line.horizontal;\n \n const vChar = edge.style === 'dotted' ? chars.line.dottedVertical\n : edge.style === 'thick' ? chars.line.thickVertical\n : chars.line.vertical;\n\n let startX = startBorder.x;\n let startY = startBorder.y;\n let endX = endBorder.x;\n let endY = endBorder.y;\n \n if (startDir === 'right') startX += 1;\n else if (startDir === 'left') startX -= 1;\n else if (startDir === 'down') startY += 1;\n else if (startDir === 'up') startY -= 1;\n\n const dx = Math.abs(endX - startX);\n const dy = Math.abs(endY - startY);\n const isVerticalPrimary = startDir === 'down' || startDir === 'up';\n const isHorizontalPrimary = startDir === 'left' || startDir === 'right';\n \n const alignmentTolerance = 3;\n const effectivelyAlignedX = dx <= alignmentTolerance && isVerticalPrimary;\n const effectivelyAlignedY = dy <= alignmentTolerance && isHorizontalPrimary;\n\n if (startY === endY || effectivelyAlignedY) {\n canvas.drawHorizontalLine(Math.min(startX, endX), Math.max(startX, endX), startY, hChar);\n } else if (startX === endX || effectivelyAlignedX) {\n canvas.drawVerticalLine(endX, Math.min(startY, endY), Math.max(startY, endY), vChar);\n } else {\n const isVerticalFirst = startDir === 'down' || startDir === 'up';\n \n if (isVerticalFirst) {\n const sourceOffset = totalFromSource > 1 ? (sourceIndex - Math.floor(totalFromSource / 2)) * 2 : 0;\n const baseTurnY = endY + (endDir === 'up' ? -2 : 2);\n const turnY = totalToTarget > 1 ? baseTurnY : baseTurnY + sourceOffset;\n \n canvas.drawVerticalLine(startX, Math.min(startY, turnY), Math.max(startY, turnY), vChar);\n canvas.drawHorizontalLine(Math.min(startX, endX), Math.max(startX, endX), turnY, hChar);\n \n if (targetIndex === 0) {\n canvas.drawVerticalLine(endX, Math.min(turnY, endY), Math.max(turnY, endY), vChar);\n }\n } else {\n const sourceOffset = totalFromSource > 1 ? (sourceIndex - Math.floor(totalFromSource / 2)) * 2 : 0;\n const baseTurnX = endX + (endDir === 'left' ? -2 : 2);\n const turnX = totalToTarget > 1 ? baseTurnX : baseTurnX + sourceOffset;\n \n canvas.drawHorizontalLine(Math.min(startX, turnX), Math.max(startX, turnX), startY, hChar);\n canvas.drawVerticalLine(turnX, Math.min(startY, endY), Math.max(startY, endY), vChar);\n \n if (targetIndex === 0) {\n canvas.drawHorizontalLine(Math.min(turnX, endX), Math.max(turnX, endX), endY, hChar);\n }\n }\n }\n \n\n \n if (edge.label) {\n const isHorizontalEdge = startY === endY || effectivelyAlignedY;\n const isVerticalEdge = startX === endX || effectivelyAlignedX;\n \n if (isHorizontalEdge) {\n const availableSpace = Math.abs(endX - startX) - 2;\n if (availableSpace >= edge.label.length) {\n const midX = Math.floor((startX + endX) / 2);\n const labelX = midX - Math.floor(edge.label.length / 2);\n canvas.drawText(labelX, startY - 1, edge.label);\n }\n } else if (isVerticalEdge) {\n const midY = Math.floor((startY + endY) / 2);\n canvas.drawText(endX + 2, midY, edge.label);\n } else {\n const isVerticalFirst = startDir === 'down' || startDir === 'up';\n if (isVerticalFirst) {\n const labelX = endX + 1;\n const labelY = endY - 2;\n canvas.drawText(labelX, labelY, edge.label);\n } else {\n const labelY = Math.min(startY, endY) + Math.floor(Math.abs(endY - startY) / 2);\n const labelX = endX + 2;\n canvas.drawText(labelX, labelY, edge.label);\n }\n }\n }\n}\n\nexport function renderFlowchart(\n ast: FlowchartAST,\n options: RenderOptions\n): string {\n const layout = layoutFlowchart(ast, options);\n \n if (layout.nodes.size === 0) {\n return '';\n }\n \n const canvas = new Canvas(layout.width + 10, layout.height + 10, options.charset);\n \n const edgesBySource = new Map<string, FlowchartEdge[]>();\n const edgesByTarget = new Map<string, FlowchartEdge[]>();\n for (const edge of layout.edges) {\n const fromList = edgesBySource.get(edge.from) ?? [];\n fromList.push(edge);\n edgesBySource.set(edge.from, fromList);\n \n const toList = edgesByTarget.get(edge.to) ?? [];\n toList.push(edge);\n edgesByTarget.set(edge.to, toList);\n }\n \n for (const edge of layout.edges) {\n const fromNode = layout.nodes.get(edge.from);\n const toNode = layout.nodes.get(edge.to);\n \n if (fromNode && toNode) {\n const isBackEdge = layout.backEdges.has(edge);\n const edgesFromSameSource = edgesBySource.get(edge.from) ?? [];\n const edgesToSameTarget = edgesByTarget.get(edge.to) ?? [];\n const sourceIndex = edgesFromSameSource.indexOf(edge);\n const targetIndex = edgesToSameTarget.indexOf(edge);\n drawEdge(\n canvas, edge, fromNode, toNode, ast.direction, options,\n isBackEdge,\n sourceIndex, edgesFromSameSource.length,\n targetIndex, edgesToSameTarget.length\n );\n }\n }\n \n for (const node of layout.nodes.values()) {\n drawNode(canvas, node);\n }\n \n for (const edge of layout.edges) {\n const toNode = layout.nodes.get(edge.to);\n if (toNode && edge.arrowType !== 'open') {\n const isBackEdge = layout.backEdges.has(edge);\n const chars = getCharacterSet(options.charset);\n \n let endDir: Direction;\n if (isBackEdge) {\n const isVertical = ast.direction === 'TD' || ast.direction === 'BT';\n endDir = isVertical ? 'right' : 'down';\n } else {\n endDir = determineEdgeDirection(\n layout.nodes.get(edge.from)!,\n toNode,\n ast.direction\n ).endDir;\n }\n \n const endBorder = getNodeBorderPoint(toNode, endDir);\n const arrowChar = edge.arrowType === 'arrow'\n ? (endDir === 'left' ? chars.arrow.right\n : endDir === 'right' ? chars.arrow.left\n : endDir === 'up' ? chars.arrow.down\n : chars.arrow.up)\n : edge.arrowType === 'circle' ? chars.arrow.circle\n : chars.arrow.cross;\n canvas.forceSet(endBorder.x, endBorder.y, arrowChar);\n }\n }\n \n return canvas.toString();\n}\n","import type { SequenceAST, Participant, Message, MessageStyle, ArrowStyle } from './types.js';\n\nconst SEQUENCE_HEADER = /^sequenceDiagram\\s*$/i;\nconst PARTICIPANT_PATTERN = /^participant\\s+(\\S+)(?:\\s+as\\s+(.+))?$/i;\nconst ACTOR_PATTERN = /^actor\\s+(\\S+)(?:\\s+as\\s+(.+))?$/i;\n\nconst MESSAGE_PATTERNS: Array<{\n pattern: RegExp;\n style: MessageStyle;\n arrowStyle: ArrowStyle;\n}> = [\n // Order matters: longer arrow patterns must come before shorter ones\n { pattern: /^(\\w+)\\s*->>>\\s*(\\w+)\\s*:\\s*(.*)$/, style: 'solid', arrowStyle: 'filled' },\n { pattern: /^(\\w+)\\s*-->>>\\s*(\\w+)\\s*:\\s*(.*)$/, style: 'dotted', arrowStyle: 'filled' },\n { pattern: /^(\\w+)\\s*->>\\s*(\\w+)\\s*:\\s*(.*)$/, style: 'solid', arrowStyle: 'filled' },\n { pattern: /^(\\w+)\\s*-->>\\s*(\\w+)\\s*:\\s*(.*)$/, style: 'dotted', arrowStyle: 'filled' },\n { pattern: /^(\\w+)\\s*-->\\s*(\\w+)\\s*:\\s*(.*)$/, style: 'dotted', arrowStyle: 'open' },\n { pattern: /^(\\w+)\\s*->\\s*(\\w+)\\s*:\\s*(.*)$/, style: 'solid', arrowStyle: 'open' },\n { pattern: /^(\\w+)\\s*--x\\s*(\\w+)\\s*:\\s*(.*)$/, style: 'dotted', arrowStyle: 'filled' },\n { pattern: /^(\\w+)\\s*-x\\s*(\\w+)\\s*:\\s*(.*)$/, style: 'solid', arrowStyle: 'filled' },\n];\n\nfunction getOrCreateParticipant(\n participants: Map<string, Participant>,\n id: string,\n alias?: string\n): Participant {\n let participant = participants.get(id);\n if (!participant) {\n participant = {\n id,\n alias: alias ?? id,\n index: participants.size,\n };\n participants.set(id, participant);\n } else if (alias && participant.alias === participant.id) {\n participant.alias = alias;\n }\n return participant;\n}\n\nexport function parseSequence(input: string): SequenceAST {\n const lines = input.split('\\n').map(line => line.trim()).filter(line => line && !line.startsWith('%%'));\n\n if (lines.length === 0) {\n throw new Error('Empty sequence diagram input');\n }\n\n if (!SEQUENCE_HEADER.test(lines[0])) {\n throw new Error(`Invalid sequence diagram header. Expected \"sequenceDiagram\", got: \"${lines[0]}\"`);\n }\n\n const participants = new Map<string, Participant>();\n const messages: Message[] = [];\n let messageIndex = 0;\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('Note ') || line.startsWith('note ')) continue;\n if (line.startsWith('loop ') || line.startsWith('alt ') || line.startsWith('opt ')) continue;\n if (line === 'end') continue;\n if (line.startsWith('rect ')) continue;\n if (line.startsWith('activate ') || line.startsWith('deactivate ')) continue;\n\n const participantMatch = line.match(PARTICIPANT_PATTERN);\n if (participantMatch) {\n const [, id, alias] = participantMatch;\n getOrCreateParticipant(participants, id, alias);\n continue;\n }\n\n const actorMatch = line.match(ACTOR_PATTERN);\n if (actorMatch) {\n const [, id, alias] = actorMatch;\n getOrCreateParticipant(participants, id, alias);\n continue;\n }\n\n for (const { pattern, style, arrowStyle } of MESSAGE_PATTERNS) {\n const match = line.match(pattern);\n if (match) {\n const [, from, to, text] = match;\n getOrCreateParticipant(participants, from);\n getOrCreateParticipant(participants, to);\n messages.push({\n from,\n to,\n text: text.trim(),\n style,\n arrowStyle,\n index: messageIndex++,\n });\n break;\n }\n }\n }\n\n return {\n type: 'sequence',\n participants,\n messages,\n };\n}\n","import { Canvas } from '../../core/canvas.js';\nimport { getCharacterSet } from '../../core/characters.js';\nimport type { RenderOptions } from '../../core/types.js';\nimport type { SequenceAST, Participant, Message } from './types.js';\n\nconst PARTICIPANT_BOX_HEIGHT = 3;\nconst PARTICIPANT_PADDING = 2;\nconst PARTICIPANT_GAP = 6;\nconst MESSAGE_ROW_HEIGHT = 2;\nconst LIFELINE_START_OFFSET = 2;\n\ninterface ParticipantLayout {\n participant: Participant;\n x: number;\n width: number;\n centerX: number;\n}\n\ninterface SequenceLayout {\n participants: ParticipantLayout[];\n participantMap: Map<string, ParticipantLayout>;\n width: number;\n height: number;\n}\n\nfunction layoutSequence(ast: SequenceAST, _options: RenderOptions): SequenceLayout {\n const participantList = Array.from(ast.participants.values()).sort((a, b) => a.index - b.index);\n const layouts: ParticipantLayout[] = [];\n const participantMap = new Map<string, ParticipantLayout>();\n\n let currentX = PARTICIPANT_PADDING;\n\n for (const participant of participantList) {\n const labelWidth = participant.alias.length;\n const boxWidth = Math.max(labelWidth + 4, 7);\n\n const layout: ParticipantLayout = {\n participant,\n x: currentX,\n width: boxWidth,\n centerX: currentX + Math.floor(boxWidth / 2),\n };\n\n layouts.push(layout);\n participantMap.set(participant.id, layout);\n\n currentX += boxWidth + PARTICIPANT_GAP;\n }\n\n const totalWidth = currentX - PARTICIPANT_GAP + PARTICIPANT_PADDING;\n\n const lifelineHeight = ast.messages.length * MESSAGE_ROW_HEIGHT + LIFELINE_START_OFFSET;\n const totalHeight = PARTICIPANT_BOX_HEIGHT + lifelineHeight + PARTICIPANT_BOX_HEIGHT + 2;\n\n return {\n participants: layouts,\n participantMap,\n width: totalWidth,\n height: totalHeight,\n };\n}\n\nfunction drawParticipantBox(\n canvas: Canvas,\n layout: ParticipantLayout,\n y: number\n): void {\n canvas.drawBox(layout.x, y, layout.width, PARTICIPANT_BOX_HEIGHT);\n\n const textX = layout.x + Math.floor((layout.width - layout.participant.alias.length) / 2);\n const textY = y + 1;\n canvas.drawText(textX, textY, layout.participant.alias);\n}\n\nfunction drawLifeline(\n canvas: Canvas,\n layout: ParticipantLayout,\n startY: number,\n endY: number,\n chars: ReturnType<typeof getCharacterSet>\n): void {\n const x = layout.centerX;\n for (let y = startY; y <= endY; y++) {\n canvas.set(x, y, chars.line.vertical);\n }\n}\n\nfunction drawMessage(\n canvas: Canvas,\n message: Message,\n fromLayout: ParticipantLayout,\n toLayout: ParticipantLayout,\n y: number,\n chars: ReturnType<typeof getCharacterSet>\n): void {\n const fromX = fromLayout.centerX;\n const toX = toLayout.centerX;\n\n const isSelfMessage = fromLayout.participant.id === toLayout.participant.id;\n\n if (isSelfMessage) {\n const loopWidth = 4;\n const lineChar = message.style === 'dotted' ? chars.line.dottedHorizontal : chars.line.horizontal;\n const vChar = message.style === 'dotted' ? chars.line.dottedVertical : chars.line.vertical;\n\n canvas.drawHorizontalLine(fromX, fromX + loopWidth, y, lineChar);\n canvas.set(fromX + loopWidth, y, vChar);\n canvas.set(fromX + loopWidth, y + 1, vChar);\n canvas.drawHorizontalLine(fromX, fromX + loopWidth, y + 1, lineChar);\n canvas.forceSet(fromX, y + 1, chars.arrow.left);\n\n if (message.text) {\n canvas.drawText(fromX + loopWidth + 2, y, message.text);\n }\n return;\n }\n\n const isLeftToRight = fromX < toX;\n const startX = isLeftToRight ? fromX + 1 : fromX - 1;\n const endX = isLeftToRight ? toX - 1 : toX + 1;\n\n const lineChar = message.style === 'dotted' ? chars.line.dottedHorizontal : chars.line.horizontal;\n\n canvas.drawHorizontalLine(startX, endX, y, lineChar);\n\n const arrowChar = message.arrowStyle === 'filled'\n ? (isLeftToRight ? chars.arrow.right : chars.arrow.left)\n : (isLeftToRight ? chars.arrow.rightOpen : chars.arrow.leftOpen);\n\n canvas.forceSet(isLeftToRight ? toX : toX, y, arrowChar);\n\n if (message.text) {\n const textLen = message.text.length;\n const midX = Math.floor((fromX + toX) / 2);\n const textX = midX - Math.floor(textLen / 2);\n canvas.drawText(textX, y - 1, message.text);\n }\n}\n\nexport function renderSequence(\n ast: SequenceAST,\n options: RenderOptions\n): string {\n if (ast.participants.size === 0) {\n return '';\n }\n\n const layout = layoutSequence(ast, options);\n const chars = getCharacterSet(options.charset);\n const canvas = new Canvas(layout.width + 4, layout.height + 4, options.charset);\n\n const topBoxY = options.paddingY;\n for (const pLayout of layout.participants) {\n drawParticipantBox(canvas, pLayout, topBoxY);\n }\n\n const lifelineStartY = topBoxY + PARTICIPANT_BOX_HEIGHT;\n const messagesEndY = lifelineStartY + ast.messages.length * MESSAGE_ROW_HEIGHT + LIFELINE_START_OFFSET;\n const bottomBoxY = messagesEndY + 1;\n\n for (const pLayout of layout.participants) {\n drawLifeline(canvas, pLayout, lifelineStartY, messagesEndY, chars);\n }\n\n for (const message of ast.messages) {\n const fromLayout = layout.participantMap.get(message.from);\n const toLayout = layout.participantMap.get(message.to);\n\n if (fromLayout && toLayout) {\n const messageY = lifelineStartY + LIFELINE_START_OFFSET + message.index * MESSAGE_ROW_HEIGHT;\n drawMessage(canvas, message, fromLayout, toLayout, messageY, chars);\n }\n }\n\n for (const pLayout of layout.participants) {\n drawParticipantBox(canvas, pLayout, bottomBoxY);\n }\n\n return canvas.toString();\n}\n","import type { RenderOptions, DiagramType } from './core/types.js';\nimport { DEFAULT_RENDER_OPTIONS } from './core/types.js';\nimport { parseFlowchart } from './diagrams/flowchart/parser.js';\nimport { renderFlowchart } from './diagrams/flowchart/renderer.js';\nimport { parseSequence } from './diagrams/sequence/parser.js';\nimport { renderSequence } from './diagrams/sequence/renderer.js';\n\nexport * from './core/types.js';\nexport * from './core/canvas.js';\nexport * from './core/characters.js';\nexport * from './diagrams/flowchart/index.js';\nexport * from './diagrams/sequence/index.js';\n\nconst FLOWCHART_PATTERN = /^(?:graph|flowchart)\\s+(LR|RL|TD|TB|BT)/im;\nconst SEQUENCE_PATTERN = /^sequenceDiagram/im;\nconst CLASS_PATTERN = /^classDiagram/im;\nconst STATE_PATTERN = /^stateDiagram/im;\nconst ER_PATTERN = /^erDiagram/im;\n\nexport function detectDiagramType(input: string): DiagramType {\n const trimmed = input.trim();\n \n if (FLOWCHART_PATTERN.test(trimmed)) return 'flowchart';\n if (SEQUENCE_PATTERN.test(trimmed)) return 'sequence';\n if (CLASS_PATTERN.test(trimmed)) return 'class';\n if (STATE_PATTERN.test(trimmed)) return 'state';\n if (ER_PATTERN.test(trimmed)) return 'er';\n \n return 'unknown';\n}\n\nexport function render(\n input: string,\n options: Partial<RenderOptions> = {}\n): string {\n const fullOptions: RenderOptions = { ...DEFAULT_RENDER_OPTIONS, ...options };\n const diagramType = detectDiagramType(input);\n \n switch (diagramType) {\n case 'flowchart': {\n const ast = parseFlowchart(input);\n return renderFlowchart(ast, fullOptions);\n }\n case 'sequence': {\n const ast = parseSequence(input);\n return renderSequence(ast, fullOptions);\n }\n case 'class':\n throw new Error('Class diagrams not yet implemented');\n case 'state':\n throw new Error('State diagrams not yet implemented');\n case 'er':\n throw new Error('ER diagrams not yet implemented');\n case 'unknown':\n throw new Error(`Unknown diagram type. Input must start with a valid Mermaid diagram declaration (e.g., \"graph LR\", \"sequenceDiagram\", etc.)`);\n }\n}\n\nexport function renderToFlowchart(\n input: string,\n options: Partial<RenderOptions> = {}\n): string {\n const fullOptions: RenderOptions = { ...DEFAULT_RENDER_OPTIONS, ...options };\n const ast = parseFlowchart(input);\n return renderFlowchart(ast, fullOptions);\n}\n\nexport function renderToSequence(\n input: string,\n options: Partial<RenderOptions> = {}\n): string {\n const fullOptions: RenderOptions = { ...DEFAULT_RENDER_OPTIONS, ...options };\n const ast = parseSequence(input);\n return renderSequence(ast, fullOptions);\n}\n","import { Command } from 'commander';\nimport { readFileSync } from 'fs';\nimport { render } from './index.js';\nimport type { Charset } from './core/types.js';\n\nconst program = new Command();\n\nprogram\n .name('mermaid2term')\n .description('Render Mermaid diagrams as ASCII art in the terminal')\n .version('0.1.0')\n .argument('[file]', 'Mermaid file to render (use - for stdin)')\n .option('-a, --ascii', 'Use ASCII-only characters instead of Unicode', false)\n .option('-w, --width <number>', 'Maximum output width (0 for unlimited)', '0')\n .option('-x, --padding-x <number>', 'Horizontal spacing between nodes', '5')\n .option('-y, --padding-y <number>', 'Vertical spacing between nodes', '5')\n .option('-p, --border-padding <number>', 'Padding inside node borders', '1')\n .option('-c, --coords', 'Show coordinate debug overlay', false)\n .action(async (file: string | undefined, opts) => {\n try {\n let input: string;\n \n if (!file || file === '-') {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n input = Buffer.concat(chunks).toString('utf-8');\n } else {\n input = readFileSync(file, 'utf-8');\n }\n \n if (!input.trim()) {\n console.error('Error: Empty input');\n process.exit(1);\n }\n \n const output = render(input, {\n charset: opts.ascii ? 'ascii' : 'unicode' as Charset,\n maxWidth: parseInt(opts.width, 10),\n paddingX: parseInt(opts.paddingX, 10),\n paddingY: parseInt(opts.paddingY, 10),\n borderPadding: parseInt(opts.borderPadding, 10),\n showCoords: opts.coords,\n });\n \n console.log(output);\n } catch (error) {\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n } else {\n console.error('An unknown error occurred');\n }\n process.exit(1);\n }\n });\n\nprogram.parse();\n"]}
package/dist/cli.d.cts ADDED
@@ -0,0 +1,2 @@
1
+
2
+ export { }
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+
2
+ export { }