{
  "version": 3,
  "sources": ["../../../src/diagrams/railroad/parser/pegParser.ts", "../../../src/diagrams/railroad/pegDiagram.ts"],
  "sourcesContent": ["import {\n  MermaidParseError,\n  createRailroadPegServices,\n  type RailroadPeg,\n  type PegAny,\n  type PegGroup,\n  type PegIdentifier,\n  type PegLiteral,\n  type PegOrderedChoice,\n  type PegPrefix,\n  type PegPrimary,\n  type PegRule as LangiumPegRule,\n  type PegSequence,\n  type PegSuffix,\n} from '@mermaid-js/parser';\n\nimport type { ParserDefinition } from '../../../diagram-api/types.js';\nimport { log } from '../../../logger.js';\nimport { populateCommonDb } from '../../common/populateCommonDb.js';\nimport { db } from '../railroadDb.js';\nimport type { ASTNode, RailroadRule } from '../railroadTypes.js';\n\nconst langiumParser = createRailroadPegServices().RailroadPeg.parser.LangiumParser;\n\nconst transformOrderedChoice = (choice: PegOrderedChoice): ASTNode => {\n  const alternatives = choice.alternatives.map(transformSequence);\n\n  if (alternatives.length === 1) {\n    return alternatives[0];\n  }\n\n  return {\n    type: 'choice',\n    alternatives,\n  };\n};\n\nconst transformSequence = (sequence: PegSequence): ASTNode => {\n  const elements = sequence.elements.map(transformPrefix);\n\n  if (elements.length === 1) {\n    return elements[0];\n  }\n\n  return {\n    type: 'sequence',\n    elements,\n  };\n};\n\nconst transformPrefix = (prefix: PegPrefix): ASTNode => {\n  const inner = transformSuffix(prefix.suffix);\n\n  if (!prefix.operator) {\n    return inner;\n  }\n\n  // & and ! are lookahead operators - render as special nodes\n  const label = prefix.operator === '&' ? `&${nodeToLabel(inner)}` : `!${nodeToLabel(inner)}`;\n  return {\n    type: 'special',\n    text: label,\n  };\n};\n\nconst nodeToLabel = (node: ASTNode): string => {\n  switch (node.type) {\n    case 'terminal':\n      return `\"${node.value}\"`;\n    case 'nonterminal':\n      return node.name;\n    case 'special':\n      return node.text;\n    default:\n      return '(...)';\n  }\n};\n\nconst transformSuffix = (suffix: PegSuffix): ASTNode => {\n  const inner = transformPrimary(suffix.primary);\n\n  if (!suffix.operator) {\n    return inner;\n  }\n\n  switch (suffix.operator) {\n    case '?':\n      return { type: 'optional', element: inner };\n    case '*':\n      return { type: 'repetition', element: inner, min: 0, max: Infinity };\n    case '+':\n      return { type: 'repetition', element: inner, min: 1, max: Infinity };\n    default:\n      throw new Error(`Unsupported PEG suffix operator: ${suffix.operator}`);\n  }\n};\n\nconst transformPrimary = (primary: PegPrimary): ASTNode => {\n  switch (primary.$type) {\n    case 'PegLiteral':\n      return {\n        type: 'terminal',\n        value: (primary as PegLiteral).value,\n      };\n    case 'PegIdentifier':\n      return {\n        type: 'nonterminal',\n        name: (primary as PegIdentifier).name,\n      };\n    case 'PegGroup':\n      return transformOrderedChoice((primary as PegGroup).element);\n    case 'PegAny':\n      return {\n        type: 'special',\n        text: (primary as PegAny).dot,\n      };\n    default:\n      throw new Error(`Unsupported PEG primary node: ${primary.$type}`);\n  }\n};\n\nconst transformRule = (rule: LangiumPegRule): RailroadRule => {\n  return {\n    name: rule.name,\n    definition: transformOrderedChoice(rule.definition),\n  };\n};\n\nconst populateDb = (ast: RailroadPeg): void => {\n  populateCommonDb(ast, db);\n\n  if (ast.title) {\n    db.setTitle(ast.title);\n  }\n\n  ast.rules.map((rule) => db.addRule(transformRule(rule)));\n};\n\nexport const parser: ParserDefinition = {\n  parse: (input: string): void => {\n    db.clear();\n    log.debug('[PEG Parser] Starting Langium parse');\n\n    const result = langiumParser.parse<RailroadPeg>(input);\n    if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {\n      throw new MermaidParseError(result);\n    }\n\n    const ast = result.value;\n    log.debug('[PEG Parser] Parsed rules:', ast.rules.length);\n\n    populateDb(ast);\n    log.debug('[PEG Parser] Parse complete');\n  },\n  parser: {\n    yy: db,\n  },\n};\n\nexport default parser;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { parser } from './parser/pegParser.js';\nimport { db } from './railroadDb.js';\nimport { renderer } from './railroadRenderer.js';\nimport { getStyles } from './styles.js';\n\nexport const diagram: DiagramDefinition = {\n  parser,\n  db,\n  renderer,\n  styles: getStyles,\n};\n"],
  "mappings": "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",
  "names": ["langiumParser", "createRailroadPegServices", "transformOrderedChoice", "__name", "choice", "alternatives", "transformSequence", "sequence", "elements", "transformPrefix", "prefix", "inner", "transformSuffix", "nodeToLabel", "node", "suffix", "transformPrimary", "primary", "transformRule", "rule", "populateDb", "ast", "populateCommonDb", "db", "parser", "input", "log", "result", "MermaidParseError", "diagram", "parser", "db", "renderer", "getStyles"]
}
