{
  "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": ";;;;;;;;;;;;;;;;;;AACA;AAAA,EACE;AAAA,EACA;AAAA,OAYK;AAQP,IAAM,gBAAgB,uBAAuB,EAAE,SAAS,OAAO;AAE/D,IAAM,sBAAsB,wBAAC,SAAsC;AACjE,UAAQ,KAAK,OAAO;AAAA,IAClB,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAQ,KAA8B;AAAA,MACxC;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAO,KAAiC;AAAA,MAC1C;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAO,KAA6B;AAAA,MACtC;AAAA,IACF,KAAK,wBAAwB;AAC3B,YAAM,WAAY,KAA8B,SAAS,IAAI,mBAAmB;AAChF,aAAO,SAAS,WAAW,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,YAAY,SAAS;AAAA,IAC5E;AAAA,IACA,KAAK,sBAAsB;AACzB,YAAM,eAAgB,KAA4B,aAAa,IAAI,mBAAmB;AACtF,aAAO,aAAa,WAAW,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,UAAU,aAAa;AAAA,IACtF;AAAA,IACA,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,oBAAqB,KAA8B,OAAO;AAAA,MACrE;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,oBAAqB,KAA+B,OAAO;AAAA,QACpE,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,oBAAqB,KAAgC,OAAO;AAAA,QACrE,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF;AACE,YAAM,IAAI,MAAM,oCAAoC,KAAK,KAAK,EAAE;AAAA,EACpE;AACF,GA/C4B;AAiD5B,IAAM,gBAAgB,wBAAC,SAA4C;AACjE,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,YAAY,oBAAoB,KAAK,UAAU;AAAA,EACjD;AACF,GALsB;AAOtB,IAAM,aAAa,wBAAC,QAAwB;AAC1C,mBAAiB,KAAK,EAAE;AAExB,MAAI,IAAI,OAAO;AACb,OAAG,SAAS,IAAI,KAAK;AAAA,EACvB;AAEA,MAAI,MAAM,IAAI,CAAC,SAAS,GAAG,QAAQ,cAAc,IAAI,CAAC,CAAC;AACzD,GARmB;AAUZ,IAAM,SAA2B;AAAA,EACtC,OAAO,wBAAC,UAAwB;AAC9B,OAAG,MAAM;AACT,QAAI,MAAM,0CAA0C;AAEpD,UAAM,SAAS,cAAc,MAAgB,KAAK;AAClD,QAAI,OAAO,YAAY,SAAS,KAAK,OAAO,aAAa,SAAS,GAAG;AACnE,YAAM,IAAI,kBAAkB,MAAM;AAAA,IACpC;AAEA,UAAM,MAAM,OAAO;AACnB,QAAI,MAAM,mCAAmC,IAAI,MAAM,MAAM;AAE7D,eAAW,GAAG;AACd,QAAI,MAAM,kCAAkC;AAAA,EAC9C,GAdO;AAAA,EAeP,QAAQ;AAAA,IACN,IAAI;AAAA,EACN;AACF;;;ACpGO,IAAM,UAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV;AAEA,IAAO,0BAAQ;",
  "names": []
}
