UNPKG

mermaid

Version:

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

115 lines (112 loc) 3.01 kB
import { db, getStyles, renderer } from "./chunk-MOJQB5TN.mjs"; import { populateCommonDb } from "./chunk-JWPE2WC7.mjs"; import "./chunk-VAUOI2AC.mjs"; import "./chunk-WYO6CB5R.mjs"; import { log } from "./chunk-X3CZISLH.mjs"; import { __name } from "./chunk-Y2CYZVJY.mjs"; // src/diagrams/railroad/parser/railroadParser.ts import { MermaidParseError, createRailroadServices } from "@mermaid-js/parser"; var langiumParser = createRailroadServices().Railroad.parser.LangiumParser; var transformExpression = /* @__PURE__ */ __name((expr) => { switch (expr.$type) { case "RailroadTerminalExpr": return { type: "terminal", value: expr.value }; case "RailroadNonTerminalExpr": return { type: "nonterminal", name: expr.name }; case "RailroadSpecialExpr": return { type: "special", text: expr.text }; case "RailroadSequenceExpr": { const elements = expr.elements.map(transformExpression); return elements.length === 1 ? elements[0] : { type: "sequence", elements }; } case "RailroadChoiceExpr": { const alternatives = expr.alternatives.map(transformExpression); return alternatives.length === 1 ? alternatives[0] : { type: "choice", alternatives }; } case "RailroadOptionalExpr": return { type: "optional", element: transformExpression(expr.element) }; case "RailroadOneOrMoreExpr": return { type: "repetition", element: transformExpression(expr.element), min: 1, max: Infinity }; case "RailroadZeroOrMoreExpr": return { type: "repetition", element: transformExpression(expr.element), min: 0, max: Infinity }; default: throw new Error(`Unsupported railroad expression: ${expr.$type}`); } }, "transformExpression"); var transformRule = /* @__PURE__ */ __name((rule) => { return { name: rule.name, definition: transformExpression(rule.definition) }; }, "transformRule"); var populateDb = /* @__PURE__ */ __name((ast) => { populateCommonDb(ast, db); if (ast.title) { db.setTitle(ast.title); } ast.rules.map((rule) => db.addRule(transformRule(rule))); }, "populateDb"); var parser = { parse: /* @__PURE__ */ __name((input) => { db.clear(); log.debug("[Railroad Parser] Starting Langium parse"); const result = langiumParser.parse(input); if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) { throw new MermaidParseError(result); } const ast = result.value; log.debug("[Railroad Parser] Parsed rules:", ast.rules.length); populateDb(ast); log.debug("[Railroad Parser] Parse complete"); }, "parse"), parser: { yy: db } }; // src/diagrams/railroad/railroadDiagram.ts var diagram = { parser, db, renderer, styles: getStyles }; var railroadDiagram_default = diagram; export { railroadDiagram_default as default, diagram };