mermaid
Version:
Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.
8 lines (7 loc) • 5.9 kB
Source Map (JSON)
{
"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": []
}