UNPKG

mermaid

Version:

Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.

8 lines (7 loc) 5.95 kB
{ "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"] }