{
  "version": 3,
  "sources": ["../../../src/diagrams/railroad/parser/railroadParser.ts", "../../../src/diagrams/railroad/railroadDiagram.ts"],
  "sourcesContent": ["// cspell:ignore nonterminal\nimport {\n  MermaidParseError,\n  createRailroadServices,\n  type Railroad,\n  type RailroadChoiceExpr,\n  type RailroadExpression,\n  type RailroadNonTerminalExpr,\n  type RailroadOneOrMoreExpr,\n  type RailroadOptionalExpr,\n  type RailroadRule as LangiumRailroadRule,\n  type RailroadSequenceExpr,\n  type RailroadSpecialExpr,\n  type RailroadTerminalExpr,\n  type RailroadZeroOrMoreExpr,\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 = createRailroadServices().Railroad.parser.LangiumParser;\n\nconst transformExpression = (expr: RailroadExpression): ASTNode => {\n  switch (expr.$type) {\n    case 'RailroadTerminalExpr':\n      return {\n        type: 'terminal',\n        value: (expr as RailroadTerminalExpr).value,\n      };\n    case 'RailroadNonTerminalExpr':\n      return {\n        type: 'nonterminal',\n        name: (expr as RailroadNonTerminalExpr).name,\n      };\n    case 'RailroadSpecialExpr':\n      return {\n        type: 'special',\n        text: (expr as RailroadSpecialExpr).text,\n      };\n    case 'RailroadSequenceExpr': {\n      const elements = (expr as RailroadSequenceExpr).elements.map(transformExpression);\n      return elements.length === 1 ? elements[0] : { type: 'sequence', elements };\n    }\n    case 'RailroadChoiceExpr': {\n      const alternatives = (expr as RailroadChoiceExpr).alternatives.map(transformExpression);\n      return alternatives.length === 1 ? alternatives[0] : { type: 'choice', alternatives };\n    }\n    case 'RailroadOptionalExpr':\n      return {\n        type: 'optional',\n        element: transformExpression((expr as RailroadOptionalExpr).element),\n      };\n    case 'RailroadOneOrMoreExpr':\n      return {\n        type: 'repetition',\n        element: transformExpression((expr as RailroadOneOrMoreExpr).element),\n        min: 1,\n        max: Infinity,\n      };\n    case 'RailroadZeroOrMoreExpr':\n      return {\n        type: 'repetition',\n        element: transformExpression((expr as RailroadZeroOrMoreExpr).element),\n        min: 0,\n        max: Infinity,\n      };\n    default:\n      throw new Error(`Unsupported railroad expression: ${expr.$type}`);\n  }\n};\n\nconst transformRule = (rule: LangiumRailroadRule): RailroadRule => {\n  return {\n    name: rule.name,\n    definition: transformExpression(rule.definition),\n  };\n};\n\nconst populateDb = (ast: Railroad): 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('[Railroad Parser] Starting Langium parse');\n\n    const result = langiumParser.parse<Railroad>(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('[Railroad Parser] Parsed rules:', ast.rules.length);\n\n    populateDb(ast);\n    log.debug('[Railroad 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/railroadParser.js';\nimport { db } from './railroadDb.js';\nimport { renderer } from './railroadRenderer.js';\nimport { getStyles } from './styles.js';\n\n/**\n * Railroad Diagram Definition\n * Provides grammar visualization as railroad diagrams\n */\nexport const diagram: DiagramDefinition = {\n  parser,\n  db,\n  renderer,\n  styles: getStyles,\n};\n\nexport default diagram;\n"],
  "mappings": "4uBAuBA,IAAMA,EAAgBC,EAAuB,EAAE,SAAS,OAAO,cAEzDC,EAAsBC,EAACC,GAAsC,CACjE,OAAQA,EAAK,MAAO,CAClB,IAAK,uBACH,MAAO,CACL,KAAM,WACN,MAAQA,EAA8B,KACxC,EACF,IAAK,0BACH,MAAO,CACL,KAAM,cACN,KAAOA,EAAiC,IAC1C,EACF,IAAK,sBACH,MAAO,CACL,KAAM,UACN,KAAOA,EAA6B,IACtC,EACF,IAAK,uBAAwB,CAC3B,IAAMC,EAAYD,EAA8B,SAAS,IAAIF,CAAmB,EAChF,OAAOG,EAAS,SAAW,EAAIA,EAAS,CAAC,EAAI,CAAE,KAAM,WAAY,SAAAA,CAAS,CAC5E,CACA,IAAK,qBAAsB,CACzB,IAAMC,EAAgBF,EAA4B,aAAa,IAAIF,CAAmB,EACtF,OAAOI,EAAa,SAAW,EAAIA,EAAa,CAAC,EAAI,CAAE,KAAM,SAAU,aAAAA,CAAa,CACtF,CACA,IAAK,uBACH,MAAO,CACL,KAAM,WACN,QAASJ,EAAqBE,EAA8B,OAAO,CACrE,EACF,IAAK,wBACH,MAAO,CACL,KAAM,aACN,QAASF,EAAqBE,EAA+B,OAAO,EACpE,IAAK,EACL,IAAK,GACP,EACF,IAAK,yBACH,MAAO,CACL,KAAM,aACN,QAASF,EAAqBE,EAAgC,OAAO,EACrE,IAAK,EACL,IAAK,GACP,EACF,QACE,MAAM,IAAI,MAAM,oCAAoCA,EAAK,KAAK,EAAE,CACpE,CACF,EA/C4B,uBAiDtBG,EAAgBJ,EAACK,IACd,CACL,KAAMA,EAAK,KACX,WAAYN,EAAoBM,EAAK,UAAU,CACjD,GAJoB,iBAOhBC,EAAaN,EAACO,GAAwB,CAC1CC,EAAiBD,EAAKE,CAAE,EAEpBF,EAAI,OACNE,EAAG,SAASF,EAAI,KAAK,EAGvBA,EAAI,MAAM,IAAKF,GAASI,EAAG,QAAQL,EAAcC,CAAI,CAAC,CAAC,CACzD,EARmB,cAUNK,EAA2B,CACtC,MAAOV,EAACW,GAAwB,CAC9BF,EAAG,MAAM,EACTG,EAAI,MAAM,0CAA0C,EAEpD,IAAMC,EAAShB,EAAc,MAAgBc,CAAK,EAClD,GAAIE,EAAO,YAAY,OAAS,GAAKA,EAAO,aAAa,OAAS,EAChE,MAAM,IAAIC,EAAkBD,CAAM,EAGpC,IAAMN,EAAMM,EAAO,MACnBD,EAAI,MAAM,kCAAmCL,EAAI,MAAM,MAAM,EAE7DD,EAAWC,CAAG,EACdK,EAAI,MAAM,kCAAkC,CAC9C,EAdO,SAeP,OAAQ,CACN,GAAIH,CACN,CACF,ECpGO,IAAMM,EAA6B,CACxC,OAAAC,EACA,GAAAC,EACA,SAAAC,EACA,OAAQC,CACV,EAEOC,EAAQL",
  "names": ["langiumParser", "createRailroadServices", "transformExpression", "__name", "expr", "elements", "alternatives", "transformRule", "rule", "populateDb", "ast", "populateCommonDb", "db", "parser", "input", "log", "result", "MermaidParseError", "diagram", "parser", "db", "renderer", "getStyles", "railroadDiagram_default"]
}
