UNPKG

mermaid

Version:

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

139 lines (136 loc) 4.06 kB
import { AbstractMermaidTokenBuilder, AbstractMermaidValueConverter, EmptyFileSystem, MermaidGeneratedSharedModule, TreemapGeneratedModule, __name as __name2, createDefaultCoreModule, createDefaultSharedCoreModule, inject, lib_exports } from "./chunk-M2LLTEOO.mjs"; import { __name } from "./chunk-DLQEHMXD.mjs"; // ../parser/dist/chunks/mermaid-parser.core/chunk-VX7I4HLL.mjs var TreemapTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "TreemapTokenBuilder"); } static { __name2(this, "TreemapTokenBuilder"); } constructor() { super(["treemap"]); } }; var classDefRegex = /classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/; var TreemapValueConverter = class extends AbstractMermaidValueConverter { static { __name(this, "TreemapValueConverter"); } static { __name2(this, "TreemapValueConverter"); } runCustomConverter(rule, input, _cstNode) { if (rule.name === "NUMBER2") { return parseFloat(input.replace(/,/g, "")); } else if (rule.name === "SEPARATOR") { return input.substring(1, input.length - 1); } else if (rule.name === "STRING2") { return input.substring(1, input.length - 1); } else if (rule.name === "INDENTATION") { return input.length; } else if (rule.name === "ClassDef") { if (typeof input !== "string") { return input; } const match = classDefRegex.exec(input); if (match) { return { $type: "ClassDefStatement", className: match[1], styleText: match[2] || void 0 }; } } return void 0; } }; function registerValidationChecks(services) { const validator = services.validation.TreemapValidator; const registry = services.validation.ValidationRegistry; if (registry) { const checks = { Treemap: validator.checkSingleRoot.bind(validator) // Remove unused validation for TreemapRow }; registry.register(checks, validator); } } __name(registerValidationChecks, "registerValidationChecks"); __name2(registerValidationChecks, "registerValidationChecks"); var TreemapValidator = class { static { __name(this, "TreemapValidator"); } static { __name2(this, "TreemapValidator"); } /** * Validates that a treemap has only one root node. * A root node is defined as a node that has no indentation. */ checkSingleRoot(doc, accept) { let rootNodeIndentation; for (const row of doc.TreemapRows) { if (!row.item) { continue; } if (rootNodeIndentation === void 0 && // Check if this is a root node (no indentation) row.indent === void 0) { rootNodeIndentation = 0; } else if (row.indent === void 0) { accept("error", "Multiple root nodes are not allowed in a treemap.", { node: row, property: "item" }); } else if (rootNodeIndentation !== void 0 && rootNodeIndentation >= parseInt(row.indent, 10)) { accept("error", "Multiple root nodes are not allowed in a treemap.", { node: row, property: "item" }); } } } }; var TreemapModule = { parser: { TokenBuilder: /* @__PURE__ */ __name2(() => new TreemapTokenBuilder(), "TokenBuilder"), ValueConverter: /* @__PURE__ */ __name2(() => new TreemapValueConverter(), "ValueConverter") }, validation: { TreemapValidator: /* @__PURE__ */ __name2(() => new TreemapValidator(), "TreemapValidator") } }; function createTreemapServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Treemap = inject( createDefaultCoreModule({ shared }), TreemapGeneratedModule, TreemapModule ); shared.ServiceRegistry.register(Treemap); registerValidationChecks(Treemap); return { shared, Treemap }; } __name(createTreemapServices, "createTreemapServices"); __name2(createTreemapServices, "createTreemapServices"); export { TreemapModule, createTreemapServices };