@diagrammo/dgmo 0.46.0 → 0.47.0

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 (232) hide show
  1. package/dist/advanced.d.cts +3 -855
  2. package/dist/advanced.d.ts +3 -855
  3. package/dist/advanced.js +541 -70107
  4. package/dist/analyzer-UYKBXAKR.js +15 -0
  5. package/dist/auto.cjs +1 -1
  6. package/dist/auto.js +1 -1
  7. package/dist/auto.mjs +1 -1
  8. package/dist/block.js +83 -69417
  9. package/dist/calculator-LDYQCDDY.js +11 -0
  10. package/dist/charts-d3-QOZHKTCT.js +25 -0
  11. package/dist/chunk-2DXMZRWJ.js +800 -0
  12. package/dist/chunk-2LACINWN.js +786 -0
  13. package/dist/chunk-33LCUH4H.js +893 -0
  14. package/dist/chunk-3CIOJ5YJ.js +35 -0
  15. package/dist/chunk-3HDBAXF5.js +86 -0
  16. package/dist/chunk-3JLKYGBQ.js +290 -0
  17. package/dist/chunk-3MQQNXPD.js +415 -0
  18. package/dist/chunk-3R5POCTZ.js +967 -0
  19. package/dist/chunk-3SMGIJDD.js +112 -0
  20. package/dist/chunk-44CM72SQ.js +409 -0
  21. package/dist/chunk-4GRI7MEB.js +1604 -0
  22. package/dist/chunk-4OHACBGX.js +606 -0
  23. package/dist/chunk-5DH3KYFH.js +21 -0
  24. package/dist/chunk-5MLYVTYM.js +76 -0
  25. package/dist/chunk-5QXL4NYS.js +553 -0
  26. package/dist/chunk-5WRI5ZAA.js +31 -0
  27. package/dist/chunk-6EK55ART.js +117 -0
  28. package/dist/chunk-6FZYCKXB.js +2065 -0
  29. package/dist/chunk-6HO5ZTXK.js +277 -0
  30. package/dist/chunk-6KFWC4CO.js +7 -0
  31. package/dist/chunk-6MTWIQVO.js +121 -0
  32. package/dist/chunk-6NYWYNBI.js +329 -0
  33. package/dist/chunk-6SM5NJQH.js +620 -0
  34. package/dist/chunk-725LDASD.js +422 -0
  35. package/dist/chunk-76OWZ3BA.js +130 -0
  36. package/dist/chunk-7JEGTRLD.js +338 -0
  37. package/dist/chunk-A44USUV7.js +923 -0
  38. package/dist/chunk-A4GOY3PE.js +25 -0
  39. package/dist/chunk-A4VFQH5G.js +251 -0
  40. package/dist/chunk-AELOBFW5.js +375 -0
  41. package/dist/chunk-AN2MOO5T.js +522 -0
  42. package/dist/chunk-BMR4CIEO.js +41 -0
  43. package/dist/chunk-BS7SV7C3.js +51 -0
  44. package/dist/chunk-BUPDIHML.js +613 -0
  45. package/dist/chunk-BUVJFRPY.js +887 -0
  46. package/dist/chunk-C3Z4DX3V.js +112 -0
  47. package/dist/chunk-CI2G3OEB.js +1818 -0
  48. package/dist/chunk-CKNVO24D.js +54 -0
  49. package/dist/chunk-CUVHQHZ7.js +391 -0
  50. package/dist/chunk-CXK4DZH3.js +114 -0
  51. package/dist/chunk-DKEPS5LH.js +315 -0
  52. package/dist/chunk-DU7W62N5.js +487 -0
  53. package/dist/chunk-DZAQBW35.js +751 -0
  54. package/dist/chunk-EB6FPQUP.js +316 -0
  55. package/dist/chunk-EMS2SK26.js +376 -0
  56. package/dist/chunk-ERLBPDGU.js +510 -0
  57. package/dist/chunk-EVCVDTXE.js +732 -0
  58. package/dist/chunk-FCIIHT24.js +384 -0
  59. package/dist/chunk-FFUN5D66.js +97 -0
  60. package/dist/chunk-FITOLXSX.js +714 -0
  61. package/dist/chunk-FMDSF3OV.js +68 -0
  62. package/dist/chunk-FNB3PNGF.js +410 -0
  63. package/dist/chunk-G2H74XJZ.js +2104 -0
  64. package/dist/chunk-GMR5MFHJ.js +339 -0
  65. package/dist/chunk-H6PI3KJT.js +305 -0
  66. package/dist/chunk-I46X5VUA.js +59 -0
  67. package/dist/chunk-I5IGB56C.js +255 -0
  68. package/dist/chunk-IH6ZMVQ5.js +3950 -0
  69. package/dist/chunk-IJZFN3HM.js +463 -0
  70. package/dist/chunk-IPWPWM6R.js +3079 -0
  71. package/dist/chunk-IYULMRBE.js +23 -0
  72. package/dist/chunk-IZMRON6C.js +167 -0
  73. package/dist/chunk-J5FIXQRT.js +813 -0
  74. package/dist/chunk-JED6ZDEE.js +73 -0
  75. package/dist/chunk-JEUJOX5X.js +136 -0
  76. package/dist/chunk-JM4LEPY3.js +436 -0
  77. package/dist/chunk-L3UHP6TD.js +101 -0
  78. package/dist/chunk-L66GEFB6.js +524 -0
  79. package/dist/chunk-LIOHW36Z.js +469 -0
  80. package/dist/chunk-LP7EC4MI.js +16 -0
  81. package/dist/chunk-MITI6NOL.js +548 -0
  82. package/dist/chunk-MO5YHHMQ.js +168 -0
  83. package/dist/chunk-MZSBFAPJ.js +885 -0
  84. package/dist/chunk-NNAAJVBU.js +9 -0
  85. package/dist/chunk-NOTA6TEI.js +47 -0
  86. package/dist/chunk-NURGB5Z4.js +335 -0
  87. package/dist/chunk-NX4EQS3U.js +1062 -0
  88. package/dist/chunk-NXMESY4J.js +1 -0
  89. package/dist/chunk-OJR3MQYV.js +1458 -0
  90. package/dist/chunk-OURHMODR.js +454 -0
  91. package/dist/chunk-P235SVAH.js +1057 -0
  92. package/dist/chunk-P4RH4OSP.js +1038 -0
  93. package/dist/chunk-P6T66CCZ.js +226 -0
  94. package/dist/chunk-PBAHEPLQ.js +223 -0
  95. package/dist/chunk-PBHE5UG6.js +1530 -0
  96. package/dist/chunk-PDKUANDZ.js +35 -0
  97. package/dist/chunk-PWIHZ6NJ.js +296 -0
  98. package/dist/chunk-QEBUY5NY.js +1685 -0
  99. package/dist/chunk-QLCCJEJI.js +253 -0
  100. package/dist/chunk-QOOUC2J5.js +52 -0
  101. package/dist/chunk-QYTPPDAO.js +402 -0
  102. package/dist/chunk-R3XI2VC7.js +801 -0
  103. package/dist/chunk-RCERWOJR.js +154 -0
  104. package/dist/chunk-RJE5JTVK.js +362 -0
  105. package/dist/chunk-RTLBSQ3G.js +1155 -0
  106. package/dist/chunk-RUNNI6VE.js +448 -0
  107. package/dist/chunk-RVMRZAPB.js +354 -0
  108. package/dist/chunk-RYEGFMUO.js +955 -0
  109. package/dist/chunk-RZCF2VVM.js +528 -0
  110. package/dist/chunk-SML67VPV.js +1025 -0
  111. package/dist/chunk-SQ7IY53Q.js +44 -0
  112. package/dist/chunk-SQAG3UXH.js +161 -0
  113. package/dist/chunk-SRTU6HMQ.js +1851 -0
  114. package/dist/chunk-T2OE3YQB.js +550 -0
  115. package/dist/chunk-T3UBLACL.js +299 -0
  116. package/dist/chunk-TLVIHFRO.js +296 -0
  117. package/dist/chunk-TYS6CSS5.js +52 -0
  118. package/dist/chunk-U6EQI3U6.js +130 -0
  119. package/dist/chunk-UJ4FJLBF.js +86 -0
  120. package/dist/chunk-ULOEATBZ.js +347 -0
  121. package/dist/chunk-UNCCZ3NU.js +127 -0
  122. package/dist/chunk-USZW2HHU.js +197 -0
  123. package/dist/chunk-UWN33VNX.js +1610 -0
  124. package/dist/chunk-UZ7EZW3B.js +40 -0
  125. package/dist/chunk-VOKGH627.js +37 -0
  126. package/dist/chunk-WBRZJOEC.js +204 -0
  127. package/dist/chunk-WCSOJFU3.js +380 -0
  128. package/dist/chunk-WCT3NYCV.js +160 -0
  129. package/dist/chunk-WVAJFAIA.js +529 -0
  130. package/dist/chunk-X5LCYCL5.js +394 -0
  131. package/dist/chunk-XAKEUMEJ.js +1256 -0
  132. package/dist/chunk-Y2ZE3MSG.js +590 -0
  133. package/dist/chunk-Y3J7VR52.js +646 -0
  134. package/dist/chunk-Y5QGVTVC.js +33 -0
  135. package/dist/chunk-YAA6IID3.js +548 -0
  136. package/dist/chunk-YGJTDXVR.js +692 -0
  137. package/dist/chunk-YRYKTYMQ.js +186 -0
  138. package/dist/chunk-YYVTBZZC.js +61 -0
  139. package/dist/chunk-Z5CGSFJB.js +647 -0
  140. package/dist/chunk-Z72XRXD4.js +787 -0
  141. package/dist/chunk-ZGR7ULFJ.js +978 -0
  142. package/dist/chunk-ZJEL4H2R.js +851 -0
  143. package/dist/chunk-ZO27FGJS.js +554 -0
  144. package/dist/collapse-CLPJD2RL.js +11 -0
  145. package/dist/collapse-SLINJQW6.js +9 -0
  146. package/dist/collapse-ZWUFFCK2.js +9 -0
  147. package/dist/compute-G55RG53N.js +8 -0
  148. package/dist/dgmo-router-DZCIDUO5.js +73 -0
  149. package/dist/dimensions-J3FHIMJ6.js +22 -0
  150. package/dist/element.cjs +1 -1
  151. package/dist/element.js +1 -1
  152. package/dist/element.mjs +1 -1
  153. package/dist/flowchart-parser-ZNSKIBVR.js +21 -0
  154. package/dist/flowchart-renderer-ZAEOL4DX.js +35 -0
  155. package/dist/index.cjs +3 -3
  156. package/dist/index.d.cts +3 -469
  157. package/dist/index.d.ts +3 -469
  158. package/dist/index.js +137 -69685
  159. package/dist/layout-46N4JJYK.js +17 -0
  160. package/dist/layout-5RA6QWR6.js +26 -0
  161. package/dist/layout-5T6RH5M6.js +14 -0
  162. package/dist/layout-7QXCNOVS.js +13 -0
  163. package/dist/layout-EE6GE46Y.js +17 -0
  164. package/dist/layout-G23F7LDH.js +9 -0
  165. package/dist/layout-HRBZPFCN.js +23 -0
  166. package/dist/layout-HWDSRX5E.js +20 -0
  167. package/dist/layout-HYZPWAK5.js +18 -0
  168. package/dist/layout-N76NR4ZO.js +19 -0
  169. package/dist/layout-OB3RI63S.js +14 -0
  170. package/dist/layout-S2QBYSK2.js +15 -0
  171. package/dist/layout-UM5F4DJB.js +15 -0
  172. package/dist/layout-search-OYV77HHS.js +1655 -0
  173. package/dist/load-data-EHDDZ5ZS.js +8 -0
  174. package/dist/palettes-PRJ2RI6D.js +56 -0
  175. package/dist/parser-2MFP2H2E.js +11 -0
  176. package/dist/parser-3STE62GB.js +21 -0
  177. package/dist/parser-4FL2CMDG.js +18 -0
  178. package/dist/parser-4OGOBJJ4.js +13 -0
  179. package/dist/parser-6BTRLKRZ.js +15 -0
  180. package/dist/parser-AQETEVRW.js +21 -0
  181. package/dist/parser-CFZD5IBL.js +12 -0
  182. package/dist/parser-FUSKFGZN.js +16 -0
  183. package/dist/parser-I6KXEYFK.js +13 -0
  184. package/dist/parser-IXSZZQHY.js +18 -0
  185. package/dist/parser-JAL2HD4I.js +13 -0
  186. package/dist/parser-KNSQSKQO.js +20 -0
  187. package/dist/parser-N5O4IHUN.js +13 -0
  188. package/dist/parser-NGU3ETO6.js +16 -0
  189. package/dist/parser-NRAI6O25.js +19 -0
  190. package/dist/parser-O5J4VBII.js +11 -0
  191. package/dist/parser-OV7NOBW6.js +21 -0
  192. package/dist/parser-PQ3POX45.js +23 -0
  193. package/dist/parser-TFZFBVWN.js +11 -0
  194. package/dist/parser-TRTHDFPP.js +18 -0
  195. package/dist/parser-VQP2UJ6W.js +11 -0
  196. package/dist/parser-XDVELHRK.js +13 -0
  197. package/dist/parser-XKRP7QKP.js +11 -0
  198. package/dist/parser-Y6WTBU76.js +14 -0
  199. package/dist/parser-ZSDPZYQP.js +12 -0
  200. package/dist/renderer-2XQQQ6QR.js +28 -0
  201. package/dist/renderer-5NDVNDAZ.js +26 -0
  202. package/dist/renderer-6EEZHMH4.js +26 -0
  203. package/dist/renderer-6W5462RB.js +43 -0
  204. package/dist/renderer-7MVLWWQD.js +22 -0
  205. package/dist/renderer-AWWAF6XD.js +33 -0
  206. package/dist/renderer-BYCNMBF7.js +34 -0
  207. package/dist/renderer-CLJHQPBJ.js +29 -0
  208. package/dist/renderer-GHPZMFU2.js +15 -0
  209. package/dist/renderer-JGBKUCZD.js +16 -0
  210. package/dist/renderer-KQB7UGDS.js +19 -0
  211. package/dist/renderer-PGX2TKVS.js +24 -0
  212. package/dist/renderer-QIWVHWZO.js +15 -0
  213. package/dist/renderer-RPOA5YPZ.js +35 -0
  214. package/dist/renderer-SMIBCRVB.js +24 -0
  215. package/dist/renderer-T7YKC5VP.js +28 -0
  216. package/dist/renderer-TOCOVLHS.js +37 -0
  217. package/dist/renderer-UWA5XS74.js +39 -0
  218. package/dist/renderer-VACVQYML.js +25 -0
  219. package/dist/renderer-W4M6QLIJ.js +37 -0
  220. package/dist/renderer-WZRREQ2P.js +23 -0
  221. package/dist/renderer-YY2OSF6E.js +27 -0
  222. package/dist/renderer-Z7I3W2PP.js +24 -0
  223. package/dist/renderer-ZGNTUWC4.js +22 -0
  224. package/dist/renderer-ZTR3DER3.js +19 -0
  225. package/dist/renderer-radial-C32GPJQ7.js +21 -0
  226. package/dist/resolver-NOAA7ID7.js +13 -0
  227. package/dist/state-collapse-HCGD6IVJ.js +8 -0
  228. package/dist/state-parser-Z2V23ATR.js +18 -0
  229. package/dist/state-renderer-RFYHSP4K.js +34 -0
  230. package/dist/themes-1-CuKpeH.d.cts +908 -0
  231. package/dist/themes-1-CuKpeH.d.ts +908 -0
  232. package/package.json +1 -1
@@ -0,0 +1,448 @@
1
+ import {
2
+ tryCollectNote
3
+ } from "./chunk-5MLYVTYM.js";
4
+ import {
5
+ resolveNotes
6
+ } from "./chunk-FMDSF3OV.js";
7
+ import {
8
+ validateLabelCharacters
9
+ } from "./chunk-FFUN5D66.js";
10
+ import {
11
+ displayName,
12
+ normalizeName
13
+ } from "./chunk-NOTA6TEI.js";
14
+ import {
15
+ OPTION_NOCOLON_RE,
16
+ measureIndent,
17
+ parseFirstLine,
18
+ tryParseSharedOption
19
+ } from "./chunk-Y3J7VR52.js";
20
+ import {
21
+ resolveColorWithDiagnostic
22
+ } from "./chunk-TLVIHFRO.js";
23
+ import {
24
+ NAME_DIAGNOSTIC_CODES,
25
+ formatDgmoError,
26
+ makeDgmoError,
27
+ nameMergedMessage
28
+ } from "./chunk-CXK4DZH3.js";
29
+
30
+ // src/class/parser.ts
31
+ function classId(name) {
32
+ return normalizeName(name);
33
+ }
34
+ var CLASS_DECL_RE = /^(?:(abstract|interface|enum)\s+)?(?:"([^"]+)"|([A-Z][^":]*?))(?:\s+extends\s+(?:"([^"]+)"|([A-Z][^":]*?)))?(?:\s+implements\s+(?:"([^"]+)"|([A-Z][^":]*?)))?(?:\s+\[(abstract|interface|enum)\])?(?:\s+(red|orange|yellow|green|blue|purple|teal|cyan|gray|black|white))?(?:\s+as\s+([A-Za-z][A-Za-z0-9_]{0,11}))?\s*$/;
35
+ var INDENT_REL_ARROW_RE = /^(--\|>|\.\.\|>|\*--|o--|\.\.>|->)\s*(?:"([^"]+)"|([A-Za-z][^":]*?))(?:\s+:?\s*(.+))?$/;
36
+ var REL_ARROW_RE = /^(?:"([^"]+)"|([A-Z][^":]*?))\s*(--\|>|\.\.\|>|\*--|o--|\.\.>|->)\s*(?:"([^"]+)"|([A-Z][^":]*?))(?:\s+:?\s*(.+))?$/;
37
+ var VISIBILITY_RE = /^([+\-#])\s*/;
38
+ var STATIC_SUFFIX_RE = /\{static\}\s*$/;
39
+ var METHOD_RE = /^(.+?)\(([^)]*)\)(?:\s*:\s*(.+))?$/;
40
+ var FIELD_RE = /^(.+?)\s*:\s*(.+)$/;
41
+ var ARROW_TO_TYPE = {
42
+ "--|>": "extends",
43
+ "..|>": "implements",
44
+ "*--": "composes",
45
+ "o--": "aggregates",
46
+ "..>": "depends",
47
+ "->": "associates"
48
+ };
49
+ function parseVisibility(prefix) {
50
+ switch (prefix) {
51
+ case "-":
52
+ return "private";
53
+ case "#":
54
+ return "protected";
55
+ default:
56
+ return "public";
57
+ }
58
+ }
59
+ function parseMember(line, lineNumber, isEnum) {
60
+ let text = line.trim();
61
+ if (!text) return null;
62
+ if (isEnum) {
63
+ return {
64
+ name: text,
65
+ visibility: "public",
66
+ isStatic: false,
67
+ isMethod: false,
68
+ lineNumber
69
+ };
70
+ }
71
+ let visibility = "public";
72
+ const visMatch = text.match(VISIBILITY_RE);
73
+ if (visMatch) {
74
+ visibility = parseVisibility(visMatch[1]);
75
+ text = text.substring(visMatch[0].length);
76
+ }
77
+ let isStatic = false;
78
+ if (STATIC_SUFFIX_RE.test(text)) {
79
+ isStatic = true;
80
+ text = text.replace(STATIC_SUFFIX_RE, "").trim();
81
+ }
82
+ const methodMatch = text.match(METHOD_RE);
83
+ if (methodMatch) {
84
+ const methodType = methodMatch[3]?.trim();
85
+ return {
86
+ name: methodMatch[1].trim(),
87
+ params: methodMatch[2].trim(),
88
+ ...methodType !== void 0 && { type: methodType },
89
+ visibility,
90
+ isStatic,
91
+ isMethod: true,
92
+ lineNumber
93
+ };
94
+ }
95
+ const fieldMatch = text.match(FIELD_RE);
96
+ if (fieldMatch) {
97
+ return {
98
+ name: fieldMatch[1].trim(),
99
+ type: fieldMatch[2].trim(),
100
+ visibility,
101
+ isStatic,
102
+ isMethod: false,
103
+ lineNumber
104
+ };
105
+ }
106
+ return {
107
+ name: text,
108
+ visibility,
109
+ isStatic,
110
+ isMethod: false,
111
+ lineNumber
112
+ };
113
+ }
114
+ function parseClassDiagram(content, palette) {
115
+ const lines = content.split("\n");
116
+ const options = {};
117
+ const result = {
118
+ type: "class",
119
+ classes: [],
120
+ relationships: [],
121
+ options,
122
+ diagnostics: [],
123
+ error: null
124
+ };
125
+ const classMap = /* @__PURE__ */ new Map();
126
+ const notes = [];
127
+ const nameAliasMap = /* @__PURE__ */ new Map();
128
+ function resolveAliasName(token) {
129
+ if (!token) return token;
130
+ const trimmed = token.trim();
131
+ const hit = nameAliasMap.get(trimmed);
132
+ if (hit !== void 0) {
133
+ for (const [, node] of classMap) {
134
+ if (classId(node.name) === hit) return node.name;
135
+ }
136
+ }
137
+ return token;
138
+ }
139
+ let currentClass = null;
140
+ let contentStarted = false;
141
+ function getOrCreateClass(name, lineNumber) {
142
+ const key = classId(name);
143
+ const existing = classMap.get(key);
144
+ if (existing) {
145
+ const incomingDisplay = displayName(name);
146
+ const existingDisplay = displayName(existing.name);
147
+ if (incomingDisplay !== existingDisplay) {
148
+ result.diagnostics.push(
149
+ makeDgmoError(
150
+ lineNumber,
151
+ nameMergedMessage({
152
+ incomingDisplay,
153
+ incomingLine: lineNumber,
154
+ existingDisplay,
155
+ existingLine: existing.lineNumber
156
+ }),
157
+ "warning",
158
+ NAME_DIAGNOSTIC_CODES.NAME_MERGED
159
+ )
160
+ );
161
+ }
162
+ return existing;
163
+ }
164
+ const node = {
165
+ id: key,
166
+ name,
167
+ members: [],
168
+ lineNumber
169
+ };
170
+ classMap.set(key, node);
171
+ result.classes.push(node);
172
+ return node;
173
+ }
174
+ for (let i = 0; i < lines.length; i++) {
175
+ const raw = lines[i];
176
+ const trimmed = raw.trim();
177
+ const lineNumber = i + 1;
178
+ const indent = measureIndent(raw);
179
+ if (!trimmed) {
180
+ if (indent === 0) currentClass = null;
181
+ continue;
182
+ }
183
+ if (trimmed.startsWith("//")) continue;
184
+ if (indent === 0) {
185
+ const noteResult = tryCollectNote(
186
+ lines,
187
+ i,
188
+ indent,
189
+ palette,
190
+ result.diagnostics
191
+ );
192
+ if (noteResult) {
193
+ currentClass = null;
194
+ contentStarted = true;
195
+ if (noteResult.note) notes.push(noteResult.note);
196
+ i = noteResult.lastIndex;
197
+ continue;
198
+ }
199
+ }
200
+ if (!contentStarted && indent === 0 && i === 0) {
201
+ const firstLine = parseFirstLine(trimmed);
202
+ if (firstLine?.chartType === "class") {
203
+ if (firstLine.title) {
204
+ result.title = firstLine.title;
205
+ result.titleLineNumber = lineNumber;
206
+ }
207
+ continue;
208
+ }
209
+ }
210
+ if (!contentStarted && indent === 0 && /^[a-z]/.test(trimmed)) {
211
+ if (trimmed.toLowerCase() === "no-auto-color") {
212
+ result.diagnostics.push(
213
+ makeDgmoError(
214
+ lineNumber,
215
+ '"no-auto-color" was removed \u2014 colors are always auto-assigned from the palette; delete this line.',
216
+ "warning"
217
+ )
218
+ );
219
+ continue;
220
+ }
221
+ if (tryParseSharedOption(trimmed, options)) {
222
+ continue;
223
+ }
224
+ const optMatch = trimmed.match(OPTION_NOCOLON_RE);
225
+ if (optMatch) {
226
+ const key = optMatch[1].toLowerCase();
227
+ const value = optMatch[2].trim();
228
+ if (key !== "abstract" && key !== "interface" && key !== "enum") {
229
+ options[key] = value;
230
+ continue;
231
+ }
232
+ }
233
+ }
234
+ if (indent > 0 && currentClass) {
235
+ const indentRel = trimmed.match(INDENT_REL_ARROW_RE);
236
+ if (indentRel) {
237
+ const arrow = indentRel[1];
238
+ const rawTarget = (indentRel[2] ?? indentRel[3] ?? "").trim();
239
+ const targetName = resolveAliasName(rawTarget) ?? rawTarget;
240
+ const label = indentRel[4]?.trim();
241
+ getOrCreateClass(targetName, lineNumber);
242
+ if (label) {
243
+ result.diagnostics.push(
244
+ ...validateLabelCharacters(label, lineNumber)
245
+ );
246
+ }
247
+ result.relationships.push({
248
+ source: currentClass.id,
249
+ target: classId(targetName),
250
+ // INDENT_REL_ARROW_RE only matches arrows present in ARROW_TO_TYPE.
251
+ type: ARROW_TO_TYPE[arrow],
252
+ ...label && { label },
253
+ lineNumber
254
+ });
255
+ continue;
256
+ }
257
+ const member = parseMember(
258
+ trimmed,
259
+ lineNumber,
260
+ currentClass.modifier === "enum"
261
+ );
262
+ if (member) {
263
+ currentClass.members.push(member);
264
+ }
265
+ continue;
266
+ }
267
+ currentClass = null;
268
+ contentStarted = true;
269
+ const relArrow = trimmed.match(REL_ARROW_RE);
270
+ if (relArrow) {
271
+ const sourceName = (relArrow[1] ?? relArrow[2] ?? "").trim();
272
+ const arrow = relArrow[3];
273
+ const targetName = (relArrow[4] ?? relArrow[5] ?? "").trim();
274
+ result.diagnostics.push(
275
+ makeDgmoError(
276
+ lineNumber,
277
+ `Relationship "${sourceName} ${arrow} ${targetName}" must be indented under the source class "${sourceName}"`,
278
+ "warning"
279
+ )
280
+ );
281
+ continue;
282
+ }
283
+ const classDecl = trimmed.match(CLASS_DECL_RE);
284
+ if (classDecl) {
285
+ const prefixModifier = classDecl[1];
286
+ const name = (classDecl[2] ?? classDecl[3] ?? "").trim();
287
+ const extendsRaw = classDecl[4] ?? classDecl[5];
288
+ const extendsParent = extendsRaw ? extendsRaw.trim() : void 0;
289
+ const implementsRaw = classDecl[6] ?? classDecl[7];
290
+ const implementsInterface = implementsRaw ? implementsRaw.trim() : void 0;
291
+ const bracketModifier = classDecl[8];
292
+ const modifier = prefixModifier ?? bracketModifier;
293
+ const colorName = classDecl[9]?.trim();
294
+ const color = colorName ? resolveColorWithDiagnostic(
295
+ colorName,
296
+ lineNumber,
297
+ result.diagnostics,
298
+ palette
299
+ ) : void 0;
300
+ const aliasLiteral = classDecl[10];
301
+ const node = getOrCreateClass(name, lineNumber);
302
+ if (modifier) node.modifier = modifier;
303
+ if (color) node.color = color;
304
+ if (aliasLiteral) nameAliasMap.set(aliasLiteral, classId(name));
305
+ node.lineNumber = lineNumber;
306
+ if (extendsParent) {
307
+ const ext = resolveAliasName(extendsParent) ?? extendsParent;
308
+ getOrCreateClass(ext, lineNumber);
309
+ result.relationships.push({
310
+ source: classId(name),
311
+ target: classId(ext),
312
+ type: "extends",
313
+ lineNumber
314
+ });
315
+ }
316
+ if (implementsInterface) {
317
+ const impl = resolveAliasName(implementsInterface) ?? implementsInterface;
318
+ getOrCreateClass(impl, lineNumber);
319
+ result.relationships.push({
320
+ source: classId(name),
321
+ target: classId(impl),
322
+ type: "implements",
323
+ lineNumber
324
+ });
325
+ }
326
+ currentClass = node;
327
+ continue;
328
+ }
329
+ result.diagnostics.push(
330
+ makeDgmoError(
331
+ lineNumber,
332
+ `Unexpected line: '${trimmed}'. Classes start uppercase at indent 0 ('Ship'); members are indented and colon-typed ('+ name: string', '+ sail(): void'); relationships are indented arrows ('--|> Vessel'). (\xA710)`,
333
+ "warning"
334
+ )
335
+ );
336
+ }
337
+ if (notes.length > 0) {
338
+ result.notes = notes;
339
+ resolveNotes(
340
+ notes,
341
+ result.classes.map((c) => ({ id: c.id, label: c.name })),
342
+ result.diagnostics
343
+ );
344
+ }
345
+ if (result.classes.length === 0 && !result.error) {
346
+ const diag = makeDgmoError(
347
+ 1,
348
+ 'No classes found. Add class declarations like "ClassName" or "ClassName [interface]".'
349
+ );
350
+ result.diagnostics.push(diag);
351
+ result.error = formatDgmoError(diag);
352
+ }
353
+ if (result.classes.length >= 2 && result.relationships.length >= 1 && !result.error) {
354
+ const connectedIds = /* @__PURE__ */ new Set();
355
+ for (const rel of result.relationships) {
356
+ connectedIds.add(rel.source);
357
+ connectedIds.add(rel.target);
358
+ }
359
+ for (const cls of result.classes) {
360
+ if (!connectedIds.has(cls.id)) {
361
+ result.diagnostics.push(
362
+ makeDgmoError(
363
+ cls.lineNumber,
364
+ `Class "${cls.name}" is not connected to any other class`,
365
+ "warning"
366
+ )
367
+ );
368
+ }
369
+ }
370
+ }
371
+ return result;
372
+ }
373
+ function looksLikeClassDiagram(content) {
374
+ const lines = content.split("\n");
375
+ let hasModifier = false;
376
+ let hasRelationship = false;
377
+ let hasIndentedMember = false;
378
+ let hasClassDecl = false;
379
+ for (const line of lines) {
380
+ const trimmed = line.trim();
381
+ if (!trimmed || trimmed.startsWith("//")) continue;
382
+ if (/^(chart|title)\s*:/i.test(trimmed)) continue;
383
+ if (/^class(\s|$)/i.test(trimmed)) continue;
384
+ const indent = measureIndent(line);
385
+ if (indent === 0) {
386
+ if (/^(abstract|interface|enum)\s+[A-Z][A-Za-z0-9_]*/i.test(trimmed)) {
387
+ hasModifier = true;
388
+ hasClassDecl = true;
389
+ }
390
+ if (/^[A-Z][A-Za-z0-9_]*\s+\[(abstract|interface|enum)\]/i.test(trimmed)) {
391
+ hasModifier = true;
392
+ hasClassDecl = true;
393
+ }
394
+ if (/^[A-Z][A-Za-z0-9_]*\s+(extends|implements)\s+[A-Z]/.test(trimmed)) {
395
+ hasRelationship = true;
396
+ hasClassDecl = true;
397
+ }
398
+ if (REL_ARROW_RE.test(trimmed)) {
399
+ hasRelationship = true;
400
+ }
401
+ if (CLASS_DECL_RE.test(trimmed)) {
402
+ hasClassDecl = true;
403
+ }
404
+ } else {
405
+ if (/^[+\-#]?\s*\w+.*[:(]/.test(trimmed)) {
406
+ hasIndentedMember = true;
407
+ }
408
+ if (INDENT_REL_ARROW_RE.test(trimmed)) {
409
+ hasRelationship = true;
410
+ }
411
+ }
412
+ }
413
+ if (hasModifier) return true;
414
+ if (hasRelationship && hasClassDecl && hasIndentedMember) return true;
415
+ return false;
416
+ }
417
+ function extractSymbols(docText) {
418
+ const entities = [];
419
+ let inMetadata = true;
420
+ for (const rawLine of docText.split("\n")) {
421
+ const line = rawLine.trim();
422
+ if (inMetadata && (/^[a-z-]+\s*:/i.test(line) || /^class(\s|$)/i.test(line)))
423
+ continue;
424
+ if (inMetadata && line.toLowerCase() === "no-auto-color") continue;
425
+ if (inMetadata && /^[a-z]/.test(line) && OPTION_NOCOLON_RE.test(line)) {
426
+ const key = line.match(OPTION_NOCOLON_RE)[1].toLowerCase();
427
+ if (key !== "abstract" && key !== "interface" && key !== "enum") continue;
428
+ }
429
+ inMetadata = false;
430
+ if (line.length === 0 || /^\s/.test(rawLine)) continue;
431
+ const m = CLASS_DECL_RE.exec(line);
432
+ if (m) {
433
+ const name = (m[2] ?? m[3] ?? "").trim();
434
+ if (name && !entities.includes(name)) entities.push(name);
435
+ }
436
+ }
437
+ return {
438
+ kind: "class",
439
+ entities
440
+ };
441
+ }
442
+
443
+ export {
444
+ parseClassDiagram,
445
+ looksLikeClassDiagram,
446
+ extractSymbols
447
+ };
448
+ //# sourceMappingURL=chunk-RUNNI6VE.js.map