whipped 0.8.1 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/cli.js +1296 -311
  2. package/dist/mcp-server.js +150 -2
  3. package/dist/migrations/014_companion_sessions.sql +34 -0
  4. package/dist/migrations/015_companion_worktree_mode.sql +45 -0
  5. package/dist/migrations/016_companion_plans.sql +22 -0
  6. package/dist/migrations/017_companion_saved_plans.sql +23 -0
  7. package/dist/migrations/018_generalize_plan_session_ref.sql +29 -0
  8. package/dist/migrations/019_rename_plan_to_canvas.sql +20 -0
  9. package/dist/web-ui/assets/abnfDiagram-VRR7QNED-CMDqE9Fd.js +119 -0
  10. package/dist/web-ui/assets/arc-Dbpy-AQ8.js +131 -0
  11. package/dist/web-ui/assets/architectureDiagram-ZJ3FMSHR-BKEqdC5c.js +8821 -0
  12. package/dist/web-ui/assets/blockDiagram-677ZJIJ3-CTsEohS4.js +3801 -0
  13. package/dist/web-ui/assets/c4Diagram-LMCZKHZV-Dn6mvxwq.js +2479 -0
  14. package/dist/web-ui/assets/channel-CGIzRjBJ.js +7 -0
  15. package/dist/web-ui/assets/chunk-2Q5K7J3B-DYVO9tIE.js +17 -0
  16. package/dist/web-ui/assets/chunk-32BRIVSS-CqBj7LwD.js +116 -0
  17. package/dist/web-ui/assets/chunk-5VM5RSS4-D6as2qUK.js +19 -0
  18. package/dist/web-ui/assets/chunk-EX3LRPZG-Daf_kmKB.js +1996 -0
  19. package/dist/web-ui/assets/chunk-JWPE2WC7-Ab-zf2K1.js +17 -0
  20. package/dist/web-ui/assets/chunk-MOJQB5TN-DnYfTlwW.js +855 -0
  21. package/dist/web-ui/assets/chunk-RYQCIY6F-BkiNDZ_4.js +476 -0
  22. package/dist/web-ui/assets/chunk-V7JOEXUC-DCb_30mT.js +2022 -0
  23. package/dist/web-ui/assets/chunk-VR4S4FIN-CO86AkST.js +25 -0
  24. package/dist/web-ui/assets/chunk-XXDRQBXY--g2YuB3U.js +13 -0
  25. package/dist/web-ui/assets/classDiagram-OUVF2IWQ-C25Jck2H.js +24 -0
  26. package/dist/web-ui/assets/classDiagram-v2-EOCWNBFH-C25Jck2H.js +24 -0
  27. package/dist/web-ui/assets/cose-bilkent-JH36ORCC-DhhXza2J.js +4943 -0
  28. package/dist/web-ui/assets/cynefin-VYW2F7L2-CaR1DgV9.js +31527 -0
  29. package/dist/web-ui/assets/cynefinDiagram-TSTJHNR4-CLGnTJf1.js +454 -0
  30. package/dist/web-ui/assets/cytoscape.esm-CaQ7Fomf.js +30346 -0
  31. package/dist/web-ui/assets/dagre-VKFMJZFB-DitV5zjf.js +526 -0
  32. package/dist/web-ui/assets/defaultLocale-B2RvLBDe.js +206 -0
  33. package/dist/web-ui/assets/diagram-FQU43EPY-C1rGhyyl.js +636 -0
  34. package/dist/web-ui/assets/diagram-G47NLZAW-CTQhjAQX.js +858 -0
  35. package/dist/web-ui/assets/diagram-NH7WQ7WH-DI8N7xbl.js +212 -0
  36. package/dist/web-ui/assets/diagram-OA4YK3LP-WcmQFHPD.js +492 -0
  37. package/dist/web-ui/assets/diagram-WEI45ONY-P5J7jo04.js +309 -0
  38. package/dist/web-ui/assets/ebnfDiagram-CCIWWBDH-VgG6WhIs.js +139 -0
  39. package/dist/web-ui/assets/erDiagram-Q63AITRT-aQJn3J15.js +1238 -0
  40. package/dist/web-ui/assets/flowDiagram-23GEKE2U-mdFXB92B.js +2353 -0
  41. package/dist/web-ui/assets/ganttDiagram-NO4QXBWP-CqDgijmY.js +3733 -0
  42. package/dist/web-ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  43. package/dist/web-ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  44. package/dist/web-ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  45. package/dist/web-ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  46. package/dist/web-ui/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
  47. package/dist/web-ui/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
  48. package/dist/web-ui/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
  49. package/dist/web-ui/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
  50. package/dist/web-ui/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
  51. package/dist/web-ui/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
  52. package/dist/web-ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  53. package/dist/web-ui/assets/gitGraphDiagram-IHSO6WYX-8juiaoTk.js +1385 -0
  54. package/dist/web-ui/assets/graph-BMLV0goG.js +2042 -0
  55. package/dist/web-ui/assets/{index-CRXPsGTP.css → index-DPjATOCj.css} +800 -1207
  56. package/dist/web-ui/assets/{index-BMFVAmy4.js → index-DddtVpjm.js} +41479 -39640
  57. package/dist/web-ui/assets/infoDiagram-FWYZ7A6U-C2g8E3ea.js +32 -0
  58. package/dist/web-ui/assets/init-ZxktEp_H.js +16 -0
  59. package/dist/web-ui/assets/ishikawaDiagram-FXEZZL3T-cBRjKZAE.js +967 -0
  60. package/dist/web-ui/assets/journeyDiagram-5HDEW3XC-BvGisWzY.js +1256 -0
  61. package/dist/web-ui/assets/kanban-definition-HUTT4EX6-xCU5FVAS.js +1055 -0
  62. package/dist/web-ui/assets/katex-CqNtglxf.js +14499 -0
  63. package/dist/web-ui/assets/layout-BNmRhaUB.js +2359 -0
  64. package/dist/web-ui/assets/linear-uVfTbk22.js +340 -0
  65. package/dist/web-ui/assets/map-BEO0Bu8q.js +298 -0
  66. package/dist/web-ui/assets/mermaid.core-D-SdXkuv.js +26639 -0
  67. package/dist/web-ui/assets/mindmap-definition-LN4V7U3C-BXMrLpcc.js +1183 -0
  68. package/dist/web-ui/assets/ordinal-DSZU4PqD.js +76 -0
  69. package/dist/web-ui/assets/pegDiagram-2B236MQR-4QY6zfTY.js +127 -0
  70. package/dist/web-ui/assets/pieDiagram-ENE6RG2P-CvA8hnwZ.js +318 -0
  71. package/dist/web-ui/assets/quadrantDiagram-ABIIQ3AL-b9LyRoDu.js +1341 -0
  72. package/dist/web-ui/assets/railroadDiagram-RFXS5EU6-xnbYx8zt.js +93 -0
  73. package/dist/web-ui/assets/requirementDiagram-TGXJPOKE-DXgeFZvD.js +1205 -0
  74. package/dist/web-ui/assets/sankeyDiagram-HTMAVEWB-N3WPRpVR.js +1264 -0
  75. package/dist/web-ui/assets/sequenceDiagram-DBY2YBRQ-CasLOrw_.js +4523 -0
  76. package/dist/web-ui/assets/sizeCapture-X5ZJPWSS-DlBvxVbP.js +64 -0
  77. package/dist/web-ui/assets/stateDiagram-2N3HPSRC-fp4Rfa7y.js +453 -0
  78. package/dist/web-ui/assets/stateDiagram-v2-6OUMAXLB-B1Sbo4u9.js +23 -0
  79. package/dist/web-ui/assets/swimlanes-5IMT3BWC-D8woP0NL.js +8575 -0
  80. package/dist/web-ui/assets/swimlanesDiagram-G3AALYLV-BkAvTJ1E.js +21 -0
  81. package/dist/web-ui/assets/timeline-definition-FHXFAJF6-Bri3dfoP.js +1606 -0
  82. package/dist/web-ui/assets/vennDiagram-L72KCM5P-DTZlIjiw.js +2523 -0
  83. package/dist/web-ui/assets/wardleyDiagram-EHGQE667-CCyt_RTI.js +978 -0
  84. package/dist/web-ui/assets/xychartDiagram-FW5EYKEG-DtQR47sr.js +1972 -0
  85. package/dist/web-ui/index.html +2 -2
  86. package/package.json +1 -1
@@ -0,0 +1,309 @@
1
+ import { p as populateCommonDb } from "./chunk-JWPE2WC7-Ab-zf2K1.js";
2
+ import { s as setAccDescription, g as getAccDescription, o as getDiagramTitle, n as setDiagramTitle, a as getAccTitle, b as setAccTitle, _ as __name, D as selectSvgElement, p as clear, A as cleanAndMerge, y as getConfig, B as defaultConfig_default, l as log, E as getThemeVariables3, e as configureSvgSize } from "./mermaid.core-D-SdXkuv.js";
3
+ import { p as parse } from "./cynefin-VYW2F7L2-CaR1DgV9.js";
4
+ import "./index-DddtVpjm.js";
5
+ var defaultOptions = {
6
+ showLegend: true,
7
+ ticks: 5,
8
+ max: null,
9
+ min: 0,
10
+ graticule: "circle"
11
+ };
12
+ var defaultRadarData = {
13
+ axes: [],
14
+ curves: [],
15
+ options: defaultOptions
16
+ };
17
+ var data = structuredClone(defaultRadarData);
18
+ var DEFAULT_RADAR_CONFIG = defaultConfig_default.radar;
19
+ var getConfig2 = /* @__PURE__ */ __name(() => {
20
+ const config = cleanAndMerge({
21
+ ...DEFAULT_RADAR_CONFIG,
22
+ ...getConfig().radar
23
+ });
24
+ return config;
25
+ }, "getConfig");
26
+ var getAxes = /* @__PURE__ */ __name(() => data.axes, "getAxes");
27
+ var getCurves = /* @__PURE__ */ __name(() => data.curves, "getCurves");
28
+ var getOptions = /* @__PURE__ */ __name(() => data.options, "getOptions");
29
+ var setAxes = /* @__PURE__ */ __name((axes) => {
30
+ data.axes = axes.map((axis) => {
31
+ return {
32
+ name: axis.name,
33
+ label: axis.label ?? axis.name
34
+ };
35
+ });
36
+ }, "setAxes");
37
+ var setCurves = /* @__PURE__ */ __name((curves) => {
38
+ data.curves = curves.map((curve) => {
39
+ return {
40
+ name: curve.name,
41
+ label: curve.label ?? curve.name,
42
+ entries: computeCurveEntries(curve.entries)
43
+ };
44
+ });
45
+ }, "setCurves");
46
+ var computeCurveEntries = /* @__PURE__ */ __name((entries) => {
47
+ if (entries[0].axis == void 0) {
48
+ return entries.map((entry) => entry.value);
49
+ }
50
+ const axes = getAxes();
51
+ if (axes.length === 0) {
52
+ throw new Error("Axes must be populated before curves for reference entries");
53
+ }
54
+ return axes.map((axis) => {
55
+ const entry = entries.find((entry2) => {
56
+ var _a;
57
+ return ((_a = entry2.axis) == null ? void 0 : _a.$refText) === axis.name;
58
+ });
59
+ if (entry === void 0) {
60
+ throw new Error("Missing entry for axis " + axis.label);
61
+ }
62
+ return entry.value;
63
+ });
64
+ }, "computeCurveEntries");
65
+ var setOptions = /* @__PURE__ */ __name((options) => {
66
+ var _a, _b, _c, _d, _e;
67
+ const optionMap = options.reduce(
68
+ (acc, option) => {
69
+ acc[option.name] = option;
70
+ return acc;
71
+ },
72
+ {}
73
+ );
74
+ data.options = {
75
+ showLegend: ((_a = optionMap.showLegend) == null ? void 0 : _a.value) ?? defaultOptions.showLegend,
76
+ ticks: ((_b = optionMap.ticks) == null ? void 0 : _b.value) ?? defaultOptions.ticks,
77
+ max: ((_c = optionMap.max) == null ? void 0 : _c.value) ?? defaultOptions.max,
78
+ min: ((_d = optionMap.min) == null ? void 0 : _d.value) ?? defaultOptions.min,
79
+ graticule: ((_e = optionMap.graticule) == null ? void 0 : _e.value) ?? defaultOptions.graticule
80
+ };
81
+ }, "setOptions");
82
+ var clear2 = /* @__PURE__ */ __name(() => {
83
+ clear();
84
+ data = structuredClone(defaultRadarData);
85
+ }, "clear");
86
+ var db = {
87
+ getAxes,
88
+ getCurves,
89
+ getOptions,
90
+ setAxes,
91
+ setCurves,
92
+ setOptions,
93
+ getConfig: getConfig2,
94
+ clear: clear2,
95
+ setAccTitle,
96
+ getAccTitle,
97
+ setDiagramTitle,
98
+ getDiagramTitle,
99
+ getAccDescription,
100
+ setAccDescription
101
+ };
102
+ var populate = /* @__PURE__ */ __name((ast) => {
103
+ populateCommonDb(ast, db);
104
+ const { axes, curves, options } = ast;
105
+ db.setAxes(axes);
106
+ db.setCurves(curves);
107
+ db.setOptions(options);
108
+ }, "populate");
109
+ var parser = {
110
+ parse: /* @__PURE__ */ __name(async (input) => {
111
+ const ast = await parse("radar", input);
112
+ log.debug(ast);
113
+ populate(ast);
114
+ }, "parse")
115
+ };
116
+ var draw = /* @__PURE__ */ __name((_text, id, _version, diagram2) => {
117
+ const db2 = diagram2.db;
118
+ const axes = db2.getAxes();
119
+ const curves = db2.getCurves();
120
+ const options = db2.getOptions();
121
+ const config = db2.getConfig();
122
+ const title = db2.getDiagramTitle();
123
+ const svg = selectSvgElement(id);
124
+ const g = drawFrame(svg, config);
125
+ const maxValue = options.max ?? Math.max(...curves.map((curve) => Math.max(...curve.entries)));
126
+ const minValue = options.min;
127
+ const radius = Math.min(config.width, config.height) / 2;
128
+ drawGraticule(g, axes, radius, options.ticks, options.graticule);
129
+ drawAxes(g, axes, radius, config);
130
+ drawCurves(g, axes, curves, minValue, maxValue, options.graticule, config);
131
+ drawLegend(g, curves, options.showLegend, config);
132
+ g.append("text").attr("class", "radarTitle").text(title).attr("x", 0).attr("y", -config.height / 2 - config.marginTop);
133
+ }, "draw");
134
+ var drawFrame = /* @__PURE__ */ __name((svg, config) => {
135
+ const totalWidth = config.width + config.marginLeft + config.marginRight;
136
+ const totalHeight = config.height + config.marginTop + config.marginBottom;
137
+ const center = {
138
+ x: config.marginLeft + config.width / 2,
139
+ y: config.marginTop + config.height / 2
140
+ };
141
+ configureSvgSize(svg, totalHeight, totalWidth, config.useMaxWidth ?? true);
142
+ svg.attr("viewBox", `0 0 ${totalWidth} ${totalHeight}`).attr("overflow", "visible");
143
+ return svg.append("g").attr("transform", `translate(${center.x}, ${center.y})`);
144
+ }, "drawFrame");
145
+ var drawGraticule = /* @__PURE__ */ __name((g, axes, radius, ticks, graticule) => {
146
+ if (graticule === "circle") {
147
+ for (let i = 0; i < ticks; i++) {
148
+ const r = radius * (i + 1) / ticks;
149
+ g.append("circle").attr("r", r).attr("class", "radarGraticule");
150
+ }
151
+ } else if (graticule === "polygon") {
152
+ const numAxes = axes.length;
153
+ for (let i = 0; i < ticks; i++) {
154
+ const r = radius * (i + 1) / ticks;
155
+ const points = axes.map((_, j) => {
156
+ const angle = 2 * j * Math.PI / numAxes - Math.PI / 2;
157
+ const x = r * Math.cos(angle);
158
+ const y = r * Math.sin(angle);
159
+ return `${x},${y}`;
160
+ }).join(" ");
161
+ g.append("polygon").attr("points", points).attr("class", "radarGraticule");
162
+ }
163
+ }
164
+ }, "drawGraticule");
165
+ var drawAxes = /* @__PURE__ */ __name((g, axes, radius, config) => {
166
+ const numAxes = axes.length;
167
+ for (let i = 0; i < numAxes; i++) {
168
+ const label = axes[i].label;
169
+ const angle = 2 * i * Math.PI / numAxes - Math.PI / 2;
170
+ const cosA = Math.cos(angle);
171
+ const sinA = Math.sin(angle);
172
+ g.append("line").attr("x1", 0).attr("y1", 0).attr("x2", radius * config.axisScaleFactor * cosA).attr("y2", radius * config.axisScaleFactor * sinA).attr("class", "radarAxisLine");
173
+ const textAnchor = cosA > 0.01 ? "start" : cosA < -0.01 ? "end" : "middle";
174
+ const dominantBaseline = sinA > 0.01 ? "hanging" : sinA < -0.01 ? "auto" : "central";
175
+ const labelPad = 4;
176
+ g.append("text").text(label).attr("x", radius * config.axisLabelFactor * cosA + labelPad * cosA).attr("y", radius * config.axisLabelFactor * sinA + labelPad * sinA).attr("text-anchor", textAnchor).attr("dominant-baseline", dominantBaseline).attr("class", "radarAxisLabel");
177
+ }
178
+ }, "drawAxes");
179
+ function drawCurves(g, axes, curves, minValue, maxValue, graticule, config) {
180
+ const numAxes = axes.length;
181
+ const radius = Math.min(config.width, config.height) / 2;
182
+ curves.forEach((curve, index) => {
183
+ if (curve.entries.length !== numAxes) {
184
+ return;
185
+ }
186
+ const points = curve.entries.map((entry, i) => {
187
+ const angle = 2 * Math.PI * i / numAxes - Math.PI / 2;
188
+ const r = relativeRadius(entry, minValue, maxValue, radius);
189
+ const x = r * Math.cos(angle);
190
+ const y = r * Math.sin(angle);
191
+ return { x, y };
192
+ });
193
+ if (graticule === "circle") {
194
+ g.append("path").attr("d", closedRoundCurve(points, config.curveTension)).attr("class", `radarCurve-${index}`);
195
+ } else if (graticule === "polygon") {
196
+ g.append("polygon").attr("points", points.map((p) => `${p.x},${p.y}`).join(" ")).attr("class", `radarCurve-${index}`);
197
+ }
198
+ });
199
+ }
200
+ __name(drawCurves, "drawCurves");
201
+ function relativeRadius(value, minValue, maxValue, radius) {
202
+ const clippedValue = Math.min(Math.max(value, minValue), maxValue);
203
+ return radius * (clippedValue - minValue) / (maxValue - minValue);
204
+ }
205
+ __name(relativeRadius, "relativeRadius");
206
+ function closedRoundCurve(points, tension) {
207
+ const numPoints = points.length;
208
+ let d = `M${points[0].x},${points[0].y}`;
209
+ for (let i = 0; i < numPoints; i++) {
210
+ const p0 = points[(i - 1 + numPoints) % numPoints];
211
+ const p1 = points[i];
212
+ const p2 = points[(i + 1) % numPoints];
213
+ const p3 = points[(i + 2) % numPoints];
214
+ const cp1 = {
215
+ x: p1.x + (p2.x - p0.x) * tension,
216
+ y: p1.y + (p2.y - p0.y) * tension
217
+ };
218
+ const cp2 = {
219
+ x: p2.x - (p3.x - p1.x) * tension,
220
+ y: p2.y - (p3.y - p1.y) * tension
221
+ };
222
+ d += ` C${cp1.x},${cp1.y} ${cp2.x},${cp2.y} ${p2.x},${p2.y}`;
223
+ }
224
+ return `${d} Z`;
225
+ }
226
+ __name(closedRoundCurve, "closedRoundCurve");
227
+ function drawLegend(g, curves, showLegend, config) {
228
+ if (!showLegend) {
229
+ return;
230
+ }
231
+ const legendX = (config.width / 2 + config.marginRight) * 3 / 4;
232
+ const legendY = -(config.height / 2 + config.marginTop) * 3 / 4;
233
+ const lineHeight = 20;
234
+ curves.forEach((curve, index) => {
235
+ const itemGroup = g.append("g").attr("transform", `translate(${legendX}, ${legendY + index * lineHeight})`);
236
+ itemGroup.append("rect").attr("width", 12).attr("height", 12).attr("class", `radarLegendBox-${index}`);
237
+ itemGroup.append("text").attr("x", 16).attr("y", 0).attr("class", "radarLegendText").text(curve.label);
238
+ });
239
+ }
240
+ __name(drawLegend, "drawLegend");
241
+ var renderer = { draw };
242
+ var genIndexStyles = /* @__PURE__ */ __name((themeVariables, radarOptions) => {
243
+ let sections = "";
244
+ for (let i = 0; i < themeVariables.THEME_COLOR_LIMIT; i++) {
245
+ const indexColor = themeVariables[`cScale${i}`];
246
+ sections += `
247
+ .radarCurve-${i} {
248
+ color: ${indexColor};
249
+ fill: ${indexColor};
250
+ fill-opacity: ${radarOptions.curveOpacity};
251
+ stroke: ${indexColor};
252
+ stroke-width: ${radarOptions.curveStrokeWidth};
253
+ }
254
+ .radarLegendBox-${i} {
255
+ fill: ${indexColor};
256
+ fill-opacity: ${radarOptions.curveOpacity};
257
+ stroke: ${indexColor};
258
+ }
259
+ `;
260
+ }
261
+ return sections;
262
+ }, "genIndexStyles");
263
+ var buildRadarStyleOptions = /* @__PURE__ */ __name((radar) => {
264
+ const defaultThemeVariables = getThemeVariables3();
265
+ const currentConfig = getConfig();
266
+ const themeVariables = cleanAndMerge(defaultThemeVariables, currentConfig.themeVariables);
267
+ const radarOptions = cleanAndMerge(themeVariables.radar, radar);
268
+ return { themeVariables, radarOptions };
269
+ }, "buildRadarStyleOptions");
270
+ var styles = /* @__PURE__ */ __name(({ radar } = {}) => {
271
+ const { themeVariables, radarOptions } = buildRadarStyleOptions(radar);
272
+ return `
273
+ .radarTitle {
274
+ font-size: ${themeVariables.fontSize};
275
+ color: ${themeVariables.titleColor};
276
+ dominant-baseline: hanging;
277
+ text-anchor: middle;
278
+ }
279
+ .radarAxisLine {
280
+ stroke: ${radarOptions.axisColor};
281
+ stroke-width: ${radarOptions.axisStrokeWidth};
282
+ }
283
+ .radarAxisLabel {
284
+ font-size: ${radarOptions.axisLabelFontSize}px;
285
+ color: ${radarOptions.axisColor};
286
+ }
287
+ .radarGraticule {
288
+ fill: ${radarOptions.graticuleColor};
289
+ fill-opacity: ${radarOptions.graticuleOpacity};
290
+ stroke: ${radarOptions.graticuleColor};
291
+ stroke-width: ${radarOptions.graticuleStrokeWidth};
292
+ }
293
+ .radarLegendText {
294
+ text-anchor: start;
295
+ font-size: ${radarOptions.legendFontSize}px;
296
+ dominant-baseline: hanging;
297
+ }
298
+ ${genIndexStyles(themeVariables, radarOptions)}
299
+ `;
300
+ }, "styles");
301
+ var diagram = {
302
+ parser,
303
+ db,
304
+ renderer,
305
+ styles
306
+ };
307
+ export {
308
+ diagram
309
+ };
@@ -0,0 +1,139 @@
1
+ import { g as getStyles, r as renderer, d as db } from "./chunk-MOJQB5TN-DnYfTlwW.js";
2
+ import { p as populateCommonDb } from "./chunk-JWPE2WC7-Ab-zf2K1.js";
3
+ import { _ as __name, l as log } from "./mermaid.core-D-SdXkuv.js";
4
+ import { M as MermaidParseError, a as createRailroadEbnfServices } from "./cynefin-VYW2F7L2-CaR1DgV9.js";
5
+ import "./index-DddtVpjm.js";
6
+ var langiumParser = createRailroadEbnfServices().RailroadEbnf.parser.LangiumParser;
7
+ var transformChoice = /* @__PURE__ */ __name((choice) => {
8
+ const alternatives = choice.alternatives.map(transformSequence);
9
+ if (alternatives.length === 1) {
10
+ return alternatives[0];
11
+ }
12
+ return {
13
+ type: "choice",
14
+ alternatives
15
+ };
16
+ }, "transformChoice");
17
+ var transformSequence = /* @__PURE__ */ __name((sequence) => {
18
+ const elements = sequence.elements.map(transformTerm);
19
+ if (elements.length === 1) {
20
+ return elements[0];
21
+ }
22
+ return {
23
+ type: "sequence",
24
+ elements
25
+ };
26
+ }, "transformSequence");
27
+ var transformPrimary = /* @__PURE__ */ __name((primary) => {
28
+ switch (primary.$type) {
29
+ case "EbnfTerminal":
30
+ return {
31
+ type: "terminal",
32
+ value: primary.value
33
+ };
34
+ case "EbnfNonTerminal":
35
+ return {
36
+ type: "nonterminal",
37
+ name: primary.name
38
+ };
39
+ case "EbnfSpecial":
40
+ return {
41
+ type: "special",
42
+ text: primary.text
43
+ };
44
+ case "EbnfGroup":
45
+ return transformChoice(primary.element);
46
+ case "EbnfOptional":
47
+ return {
48
+ type: "optional",
49
+ element: transformChoice(primary.element)
50
+ };
51
+ case "EbnfRepetition":
52
+ return {
53
+ type: "repetition",
54
+ element: transformChoice(primary.element),
55
+ min: 0,
56
+ max: Infinity
57
+ };
58
+ default:
59
+ throw new Error(`Unsupported EBNF primary node: ${primary.$type}`);
60
+ }
61
+ }, "transformPrimary");
62
+ var transformPostfix = /* @__PURE__ */ __name((node, postfix) => {
63
+ switch (postfix.$type) {
64
+ case "EbnfOptionalPostfix":
65
+ return {
66
+ type: "optional",
67
+ element: node
68
+ };
69
+ case "EbnfZeroOrMorePostfix":
70
+ return {
71
+ type: "repetition",
72
+ element: node,
73
+ min: 0,
74
+ max: Infinity
75
+ };
76
+ case "EbnfOneOrMorePostfix":
77
+ return {
78
+ type: "repetition",
79
+ element: node,
80
+ min: 1,
81
+ max: Infinity
82
+ };
83
+ case "EbnfExceptionPostfix":
84
+ return {
85
+ type: "sequence",
86
+ elements: [
87
+ node,
88
+ { type: "terminal", value: "-" },
89
+ transformPrimary(postfix.except)
90
+ ]
91
+ };
92
+ default:
93
+ throw new Error(`Unsupported EBNF postfix node: ${postfix.$type}`);
94
+ }
95
+ }, "transformPostfix");
96
+ var transformTerm = /* @__PURE__ */ __name((term) => {
97
+ return term.postfixes.reduce((currentNode, postfix) => {
98
+ return transformPostfix(currentNode, postfix);
99
+ }, transformPrimary(term.base));
100
+ }, "transformTerm");
101
+ var transformRule = /* @__PURE__ */ __name((rule) => {
102
+ return {
103
+ name: rule.name,
104
+ definition: transformChoice(rule.definition)
105
+ };
106
+ }, "transformRule");
107
+ var populateDb = /* @__PURE__ */ __name((ast) => {
108
+ populateCommonDb(ast, db);
109
+ if (ast.title) {
110
+ db.setTitle(ast.title);
111
+ }
112
+ ast.rules.map((rule) => db.addRule(transformRule(rule)));
113
+ }, "populateDb");
114
+ var parser = {
115
+ parse: /* @__PURE__ */ __name((input) => {
116
+ db.clear();
117
+ log.debug("[EBNF Parser] Starting Langium parse");
118
+ const result = langiumParser.parse(input);
119
+ if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {
120
+ throw new MermaidParseError(result);
121
+ }
122
+ const ast = result.value;
123
+ log.debug("[EBNF Parser] Parsed rules:", ast.rules.length);
124
+ populateDb(ast);
125
+ log.debug("[EBNF Parser] Parse complete");
126
+ }, "parse"),
127
+ parser: {
128
+ yy: db
129
+ }
130
+ };
131
+ var diagram = {
132
+ parser,
133
+ db,
134
+ renderer,
135
+ styles: getStyles
136
+ };
137
+ export {
138
+ diagram
139
+ };