@memoarchitect/tools 0.4.4

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 (588) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/package.json +86 -0
  4. package/packages/tools/lib/__tests__/archetype-parsing.test.d.ts +2 -0
  5. package/packages/tools/lib/__tests__/archetype-parsing.test.d.ts.map +1 -0
  6. package/packages/tools/lib/__tests__/archetype-parsing.test.js +42 -0
  7. package/packages/tools/lib/__tests__/archetype-parsing.test.js.map +1 -0
  8. package/packages/tools/lib/__tests__/architecture-discovery.test.d.ts +2 -0
  9. package/packages/tools/lib/__tests__/architecture-discovery.test.d.ts.map +1 -0
  10. package/packages/tools/lib/__tests__/architecture-discovery.test.js +82 -0
  11. package/packages/tools/lib/__tests__/architecture-discovery.test.js.map +1 -0
  12. package/packages/tools/lib/__tests__/behavior.test.d.ts +2 -0
  13. package/packages/tools/lib/__tests__/behavior.test.d.ts.map +1 -0
  14. package/packages/tools/lib/__tests__/behavior.test.js +766 -0
  15. package/packages/tools/lib/__tests__/behavior.test.js.map +1 -0
  16. package/packages/tools/lib/__tests__/builder.test.d.ts +2 -0
  17. package/packages/tools/lib/__tests__/builder.test.d.ts.map +1 -0
  18. package/packages/tools/lib/__tests__/builder.test.js +728 -0
  19. package/packages/tools/lib/__tests__/builder.test.js.map +1 -0
  20. package/packages/tools/lib/__tests__/config-loader.test.d.ts +2 -0
  21. package/packages/tools/lib/__tests__/config-loader.test.d.ts.map +1 -0
  22. package/packages/tools/lib/__tests__/config-loader.test.js +196 -0
  23. package/packages/tools/lib/__tests__/config-loader.test.js.map +1 -0
  24. package/packages/tools/lib/__tests__/conformance.test.d.ts +2 -0
  25. package/packages/tools/lib/__tests__/conformance.test.d.ts.map +1 -0
  26. package/packages/tools/lib/__tests__/conformance.test.js +467 -0
  27. package/packages/tools/lib/__tests__/conformance.test.js.map +1 -0
  28. package/packages/tools/lib/__tests__/constraint-eval.test.d.ts +2 -0
  29. package/packages/tools/lib/__tests__/constraint-eval.test.d.ts.map +1 -0
  30. package/packages/tools/lib/__tests__/constraint-eval.test.js +195 -0
  31. package/packages/tools/lib/__tests__/constraint-eval.test.js.map +1 -0
  32. package/packages/tools/lib/__tests__/constraint-grammar.test.d.ts +2 -0
  33. package/packages/tools/lib/__tests__/constraint-grammar.test.d.ts.map +1 -0
  34. package/packages/tools/lib/__tests__/constraint-grammar.test.js +163 -0
  35. package/packages/tools/lib/__tests__/constraint-grammar.test.js.map +1 -0
  36. package/packages/tools/lib/__tests__/constraint-loader.test.d.ts +2 -0
  37. package/packages/tools/lib/__tests__/constraint-loader.test.d.ts.map +1 -0
  38. package/packages/tools/lib/__tests__/constraint-loader.test.js +150 -0
  39. package/packages/tools/lib/__tests__/constraint-loader.test.js.map +1 -0
  40. package/packages/tools/lib/__tests__/csv-io.test.d.ts +2 -0
  41. package/packages/tools/lib/__tests__/csv-io.test.d.ts.map +1 -0
  42. package/packages/tools/lib/__tests__/csv-io.test.js +317 -0
  43. package/packages/tools/lib/__tests__/csv-io.test.js.map +1 -0
  44. package/packages/tools/lib/__tests__/dhf-doc-store.test.d.ts +2 -0
  45. package/packages/tools/lib/__tests__/dhf-doc-store.test.d.ts.map +1 -0
  46. package/packages/tools/lib/__tests__/dhf-doc-store.test.js +94 -0
  47. package/packages/tools/lib/__tests__/dhf-doc-store.test.js.map +1 -0
  48. package/packages/tools/lib/__tests__/dhf-template-resolver.test.d.ts +2 -0
  49. package/packages/tools/lib/__tests__/dhf-template-resolver.test.d.ts.map +1 -0
  50. package/packages/tools/lib/__tests__/dhf-template-resolver.test.js +39 -0
  51. package/packages/tools/lib/__tests__/dhf-template-resolver.test.js.map +1 -0
  52. package/packages/tools/lib/__tests__/dhf.test.d.ts +2 -0
  53. package/packages/tools/lib/__tests__/dhf.test.d.ts.map +1 -0
  54. package/packages/tools/lib/__tests__/dhf.test.js +393 -0
  55. package/packages/tools/lib/__tests__/dhf.test.js.map +1 -0
  56. package/packages/tools/lib/__tests__/dimension-filter.test.d.ts +2 -0
  57. package/packages/tools/lib/__tests__/dimension-filter.test.d.ts.map +1 -0
  58. package/packages/tools/lib/__tests__/dimension-filter.test.js +85 -0
  59. package/packages/tools/lib/__tests__/dimension-filter.test.js.map +1 -0
  60. package/packages/tools/lib/__tests__/dsm.test.d.ts +2 -0
  61. package/packages/tools/lib/__tests__/dsm.test.d.ts.map +1 -0
  62. package/packages/tools/lib/__tests__/dsm.test.js +112 -0
  63. package/packages/tools/lib/__tests__/dsm.test.js.map +1 -0
  64. package/packages/tools/lib/__tests__/e2e-workflow.test.d.ts +2 -0
  65. package/packages/tools/lib/__tests__/e2e-workflow.test.d.ts.map +1 -0
  66. package/packages/tools/lib/__tests__/e2e-workflow.test.js +707 -0
  67. package/packages/tools/lib/__tests__/e2e-workflow.test.js.map +1 -0
  68. package/packages/tools/lib/__tests__/file-watcher.test.d.ts +2 -0
  69. package/packages/tools/lib/__tests__/file-watcher.test.d.ts.map +1 -0
  70. package/packages/tools/lib/__tests__/file-watcher.test.js +31 -0
  71. package/packages/tools/lib/__tests__/file-watcher.test.js.map +1 -0
  72. package/packages/tools/lib/__tests__/impact.test.d.ts +2 -0
  73. package/packages/tools/lib/__tests__/impact.test.d.ts.map +1 -0
  74. package/packages/tools/lib/__tests__/impact.test.js +82 -0
  75. package/packages/tools/lib/__tests__/impact.test.js.map +1 -0
  76. package/packages/tools/lib/__tests__/importer.test.d.ts +2 -0
  77. package/packages/tools/lib/__tests__/importer.test.d.ts.map +1 -0
  78. package/packages/tools/lib/__tests__/importer.test.js +336 -0
  79. package/packages/tools/lib/__tests__/importer.test.js.map +1 -0
  80. package/packages/tools/lib/__tests__/kind-registry.test.d.ts +2 -0
  81. package/packages/tools/lib/__tests__/kind-registry.test.d.ts.map +1 -0
  82. package/packages/tools/lib/__tests__/kind-registry.test.js +132 -0
  83. package/packages/tools/lib/__tests__/kind-registry.test.js.map +1 -0
  84. package/packages/tools/lib/__tests__/llm.test.d.ts +2 -0
  85. package/packages/tools/lib/__tests__/llm.test.d.ts.map +1 -0
  86. package/packages/tools/lib/__tests__/llm.test.js +275 -0
  87. package/packages/tools/lib/__tests__/llm.test.js.map +1 -0
  88. package/packages/tools/lib/__tests__/manifest-resolver.test.d.ts +2 -0
  89. package/packages/tools/lib/__tests__/manifest-resolver.test.d.ts.map +1 -0
  90. package/packages/tools/lib/__tests__/manifest-resolver.test.js +97 -0
  91. package/packages/tools/lib/__tests__/manifest-resolver.test.js.map +1 -0
  92. package/packages/tools/lib/__tests__/markdown-to-ir.test.d.ts +2 -0
  93. package/packages/tools/lib/__tests__/markdown-to-ir.test.d.ts.map +1 -0
  94. package/packages/tools/lib/__tests__/markdown-to-ir.test.js +74 -0
  95. package/packages/tools/lib/__tests__/markdown-to-ir.test.js.map +1 -0
  96. package/packages/tools/lib/__tests__/methodology-scope.test.d.ts +2 -0
  97. package/packages/tools/lib/__tests__/methodology-scope.test.d.ts.map +1 -0
  98. package/packages/tools/lib/__tests__/methodology-scope.test.js +59 -0
  99. package/packages/tools/lib/__tests__/methodology-scope.test.js.map +1 -0
  100. package/packages/tools/lib/__tests__/parser.test.d.ts +2 -0
  101. package/packages/tools/lib/__tests__/parser.test.d.ts.map +1 -0
  102. package/packages/tools/lib/__tests__/parser.test.js +938 -0
  103. package/packages/tools/lib/__tests__/parser.test.js.map +1 -0
  104. package/packages/tools/lib/__tests__/plugin.test.d.ts +2 -0
  105. package/packages/tools/lib/__tests__/plugin.test.d.ts.map +1 -0
  106. package/packages/tools/lib/__tests__/plugin.test.js +308 -0
  107. package/packages/tools/lib/__tests__/plugin.test.js.map +1 -0
  108. package/packages/tools/lib/__tests__/relationship-registry.test.d.ts +2 -0
  109. package/packages/tools/lib/__tests__/relationship-registry.test.d.ts.map +1 -0
  110. package/packages/tools/lib/__tests__/relationship-registry.test.js +96 -0
  111. package/packages/tools/lib/__tests__/relationship-registry.test.js.map +1 -0
  112. package/packages/tools/lib/__tests__/rule-registry.test.d.ts +2 -0
  113. package/packages/tools/lib/__tests__/rule-registry.test.d.ts.map +1 -0
  114. package/packages/tools/lib/__tests__/rule-registry.test.js +53 -0
  115. package/packages/tools/lib/__tests__/rule-registry.test.js.map +1 -0
  116. package/packages/tools/lib/__tests__/toolchain.test.d.ts +2 -0
  117. package/packages/tools/lib/__tests__/toolchain.test.d.ts.map +1 -0
  118. package/packages/tools/lib/__tests__/toolchain.test.js +94 -0
  119. package/packages/tools/lib/__tests__/toolchain.test.js.map +1 -0
  120. package/packages/tools/lib/__tests__/view-deriver-samples.test.d.ts +2 -0
  121. package/packages/tools/lib/__tests__/view-deriver-samples.test.d.ts.map +1 -0
  122. package/packages/tools/lib/__tests__/view-deriver-samples.test.js +39 -0
  123. package/packages/tools/lib/__tests__/view-deriver-samples.test.js.map +1 -0
  124. package/packages/tools/lib/__tests__/view-kinds.test.d.ts +2 -0
  125. package/packages/tools/lib/__tests__/view-kinds.test.d.ts.map +1 -0
  126. package/packages/tools/lib/__tests__/view-kinds.test.js +263 -0
  127. package/packages/tools/lib/__tests__/view-kinds.test.js.map +1 -0
  128. package/packages/tools/lib/__tests__/view-layout-store.test.d.ts +2 -0
  129. package/packages/tools/lib/__tests__/view-layout-store.test.d.ts.map +1 -0
  130. package/packages/tools/lib/__tests__/view-layout-store.test.js +61 -0
  131. package/packages/tools/lib/__tests__/view-layout-store.test.js.map +1 -0
  132. package/packages/tools/lib/analysis/dsm.d.ts +47 -0
  133. package/packages/tools/lib/analysis/dsm.d.ts.map +1 -0
  134. package/packages/tools/lib/analysis/dsm.js +172 -0
  135. package/packages/tools/lib/analysis/dsm.js.map +1 -0
  136. package/packages/tools/lib/analysis/impact.d.ts +35 -0
  137. package/packages/tools/lib/analysis/impact.d.ts.map +1 -0
  138. package/packages/tools/lib/analysis/impact.js +97 -0
  139. package/packages/tools/lib/analysis/impact.js.map +1 -0
  140. package/packages/tools/lib/bin/memo.d.ts +3 -0
  141. package/packages/tools/lib/bin/memo.d.ts.map +1 -0
  142. package/packages/tools/lib/bin/memo.js +461 -0
  143. package/packages/tools/lib/bin/memo.js.map +1 -0
  144. package/packages/tools/lib/browser/index.d.ts +13 -0
  145. package/packages/tools/lib/browser/index.d.ts.map +1 -0
  146. package/packages/tools/lib/browser/index.js +11 -0
  147. package/packages/tools/lib/browser/index.js.map +1 -0
  148. package/packages/tools/lib/commands/archetype-loader.d.ts +15 -0
  149. package/packages/tools/lib/commands/archetype-loader.d.ts.map +1 -0
  150. package/packages/tools/lib/commands/archetype-loader.js +31 -0
  151. package/packages/tools/lib/commands/archetype-loader.js.map +1 -0
  152. package/packages/tools/lib/commands/ask.d.ts +6 -0
  153. package/packages/tools/lib/commands/ask.d.ts.map +1 -0
  154. package/packages/tools/lib/commands/ask.js +79 -0
  155. package/packages/tools/lib/commands/ask.js.map +1 -0
  156. package/packages/tools/lib/commands/check.d.ts +6 -0
  157. package/packages/tools/lib/commands/check.d.ts.map +1 -0
  158. package/packages/tools/lib/commands/check.js +214 -0
  159. package/packages/tools/lib/commands/check.js.map +1 -0
  160. package/packages/tools/lib/commands/create-package.d.ts +12 -0
  161. package/packages/tools/lib/commands/create-package.d.ts.map +1 -0
  162. package/packages/tools/lib/commands/create-package.js +293 -0
  163. package/packages/tools/lib/commands/create-package.js.map +1 -0
  164. package/packages/tools/lib/commands/dev.d.ts +6 -0
  165. package/packages/tools/lib/commands/dev.d.ts.map +1 -0
  166. package/packages/tools/lib/commands/dev.js +316 -0
  167. package/packages/tools/lib/commands/dev.js.map +1 -0
  168. package/packages/tools/lib/commands/dhf-draft.d.ts +8 -0
  169. package/packages/tools/lib/commands/dhf-draft.d.ts.map +1 -0
  170. package/packages/tools/lib/commands/dhf-draft.js +115 -0
  171. package/packages/tools/lib/commands/dhf-draft.js.map +1 -0
  172. package/packages/tools/lib/commands/dhf-init.d.ts +4 -0
  173. package/packages/tools/lib/commands/dhf-init.d.ts.map +1 -0
  174. package/packages/tools/lib/commands/dhf-init.js +270 -0
  175. package/packages/tools/lib/commands/dhf-init.js.map +1 -0
  176. package/packages/tools/lib/commands/dhf-preview.d.ts +4 -0
  177. package/packages/tools/lib/commands/dhf-preview.d.ts.map +1 -0
  178. package/packages/tools/lib/commands/dhf-preview.js +285 -0
  179. package/packages/tools/lib/commands/dhf-preview.js.map +1 -0
  180. package/packages/tools/lib/commands/dhf.d.ts +27 -0
  181. package/packages/tools/lib/commands/dhf.d.ts.map +1 -0
  182. package/packages/tools/lib/commands/dhf.js +334 -0
  183. package/packages/tools/lib/commands/dhf.js.map +1 -0
  184. package/packages/tools/lib/commands/export.d.ts +9 -0
  185. package/packages/tools/lib/commands/export.d.ts.map +1 -0
  186. package/packages/tools/lib/commands/export.js +136 -0
  187. package/packages/tools/lib/commands/export.js.map +1 -0
  188. package/packages/tools/lib/commands/generate.d.ts +6 -0
  189. package/packages/tools/lib/commands/generate.d.ts.map +1 -0
  190. package/packages/tools/lib/commands/generate.js +80 -0
  191. package/packages/tools/lib/commands/generate.js.map +1 -0
  192. package/packages/tools/lib/commands/import-ea.d.ts +32 -0
  193. package/packages/tools/lib/commands/import-ea.d.ts.map +1 -0
  194. package/packages/tools/lib/commands/import-ea.js +156 -0
  195. package/packages/tools/lib/commands/import-ea.js.map +1 -0
  196. package/packages/tools/lib/commands/import-owl.d.ts +19 -0
  197. package/packages/tools/lib/commands/import-owl.d.ts.map +1 -0
  198. package/packages/tools/lib/commands/import-owl.js +103 -0
  199. package/packages/tools/lib/commands/import-owl.js.map +1 -0
  200. package/packages/tools/lib/commands/import-sysand.d.ts +11 -0
  201. package/packages/tools/lib/commands/import-sysand.d.ts.map +1 -0
  202. package/packages/tools/lib/commands/import-sysand.js +87 -0
  203. package/packages/tools/lib/commands/import-sysand.js.map +1 -0
  204. package/packages/tools/lib/commands/import.d.ts +30 -0
  205. package/packages/tools/lib/commands/import.d.ts.map +1 -0
  206. package/packages/tools/lib/commands/import.js +250 -0
  207. package/packages/tools/lib/commands/import.js.map +1 -0
  208. package/packages/tools/lib/commands/init-wizard.d.ts +10 -0
  209. package/packages/tools/lib/commands/init-wizard.d.ts.map +1 -0
  210. package/packages/tools/lib/commands/init-wizard.js +69 -0
  211. package/packages/tools/lib/commands/init-wizard.js.map +1 -0
  212. package/packages/tools/lib/commands/init.d.ts +30 -0
  213. package/packages/tools/lib/commands/init.d.ts.map +1 -0
  214. package/packages/tools/lib/commands/init.js +238 -0
  215. package/packages/tools/lib/commands/init.js.map +1 -0
  216. package/packages/tools/lib/commands/install.d.ts +8 -0
  217. package/packages/tools/lib/commands/install.d.ts.map +1 -0
  218. package/packages/tools/lib/commands/install.js +238 -0
  219. package/packages/tools/lib/commands/install.js.map +1 -0
  220. package/packages/tools/lib/commands/lock.d.ts +2 -0
  221. package/packages/tools/lib/commands/lock.d.ts.map +1 -0
  222. package/packages/tools/lib/commands/lock.js +29 -0
  223. package/packages/tools/lib/commands/lock.js.map +1 -0
  224. package/packages/tools/lib/commands/ontology.d.ts +14 -0
  225. package/packages/tools/lib/commands/ontology.d.ts.map +1 -0
  226. package/packages/tools/lib/commands/ontology.js +464 -0
  227. package/packages/tools/lib/commands/ontology.js.map +1 -0
  228. package/packages/tools/lib/commands/pack.d.ts +4 -0
  229. package/packages/tools/lib/commands/pack.d.ts.map +1 -0
  230. package/packages/tools/lib/commands/pack.js +89 -0
  231. package/packages/tools/lib/commands/pack.js.map +1 -0
  232. package/packages/tools/lib/commands/plugin.d.ts +10 -0
  233. package/packages/tools/lib/commands/plugin.d.ts.map +1 -0
  234. package/packages/tools/lib/commands/plugin.js +195 -0
  235. package/packages/tools/lib/commands/plugin.js.map +1 -0
  236. package/packages/tools/lib/commands/req.d.ts +10 -0
  237. package/packages/tools/lib/commands/req.d.ts.map +1 -0
  238. package/packages/tools/lib/commands/req.js +64 -0
  239. package/packages/tools/lib/commands/req.js.map +1 -0
  240. package/packages/tools/lib/commands/roundtrip.d.ts +6 -0
  241. package/packages/tools/lib/commands/roundtrip.d.ts.map +1 -0
  242. package/packages/tools/lib/commands/roundtrip.js +162 -0
  243. package/packages/tools/lib/commands/roundtrip.js.map +1 -0
  244. package/packages/tools/lib/commands/rules.d.ts +15 -0
  245. package/packages/tools/lib/commands/rules.d.ts.map +1 -0
  246. package/packages/tools/lib/commands/rules.js +282 -0
  247. package/packages/tools/lib/commands/rules.js.map +1 -0
  248. package/packages/tools/lib/commands/sysand-publish.d.ts +6 -0
  249. package/packages/tools/lib/commands/sysand-publish.d.ts.map +1 -0
  250. package/packages/tools/lib/commands/sysand-publish.js +231 -0
  251. package/packages/tools/lib/commands/sysand-publish.js.map +1 -0
  252. package/packages/tools/lib/commands/validate.d.ts +6 -0
  253. package/packages/tools/lib/commands/validate.d.ts.map +1 -0
  254. package/packages/tools/lib/commands/validate.js +269 -0
  255. package/packages/tools/lib/commands/validate.js.map +1 -0
  256. package/packages/tools/lib/completeness/tracker.d.ts +11 -0
  257. package/packages/tools/lib/completeness/tracker.d.ts.map +1 -0
  258. package/packages/tools/lib/completeness/tracker.js +86 -0
  259. package/packages/tools/lib/completeness/tracker.js.map +1 -0
  260. package/packages/tools/lib/dhf/dhf-config-v2.d.ts +102 -0
  261. package/packages/tools/lib/dhf/dhf-config-v2.d.ts.map +1 -0
  262. package/packages/tools/lib/dhf/dhf-config-v2.js +82 -0
  263. package/packages/tools/lib/dhf/dhf-config-v2.js.map +1 -0
  264. package/packages/tools/lib/dhf/dhf-config.d.ts +53 -0
  265. package/packages/tools/lib/dhf/dhf-config.d.ts.map +1 -0
  266. package/packages/tools/lib/dhf/dhf-config.js +44 -0
  267. package/packages/tools/lib/dhf/dhf-config.js.map +1 -0
  268. package/packages/tools/lib/dhf/directive-parser.d.ts +31 -0
  269. package/packages/tools/lib/dhf/directive-parser.d.ts.map +1 -0
  270. package/packages/tools/lib/dhf/directive-parser.js +83 -0
  271. package/packages/tools/lib/dhf/directive-parser.js.map +1 -0
  272. package/packages/tools/lib/dhf/document-compiler.d.ts +68 -0
  273. package/packages/tools/lib/dhf/document-compiler.d.ts.map +1 -0
  274. package/packages/tools/lib/dhf/document-compiler.js +209 -0
  275. package/packages/tools/lib/dhf/document-compiler.js.map +1 -0
  276. package/packages/tools/lib/dhf/document-ir.d.ts +170 -0
  277. package/packages/tools/lib/dhf/document-ir.d.ts.map +1 -0
  278. package/packages/tools/lib/dhf/document-ir.js +47 -0
  279. package/packages/tools/lib/dhf/document-ir.js.map +1 -0
  280. package/packages/tools/lib/dhf/document-registry.d.ts +45 -0
  281. package/packages/tools/lib/dhf/document-registry.d.ts.map +1 -0
  282. package/packages/tools/lib/dhf/document-registry.js +342 -0
  283. package/packages/tools/lib/dhf/document-registry.js.map +1 -0
  284. package/packages/tools/lib/dhf/export-plugin.d.ts +24 -0
  285. package/packages/tools/lib/dhf/export-plugin.d.ts.map +1 -0
  286. package/packages/tools/lib/dhf/export-plugin.js +24 -0
  287. package/packages/tools/lib/dhf/export-plugin.js.map +1 -0
  288. package/packages/tools/lib/dhf/exporters/docx-exporter.d.ts +15 -0
  289. package/packages/tools/lib/dhf/exporters/docx-exporter.d.ts.map +1 -0
  290. package/packages/tools/lib/dhf/exporters/docx-exporter.js +159 -0
  291. package/packages/tools/lib/dhf/exporters/docx-exporter.js.map +1 -0
  292. package/packages/tools/lib/dhf/exporters/html-exporter.d.ts +9 -0
  293. package/packages/tools/lib/dhf/exporters/html-exporter.d.ts.map +1 -0
  294. package/packages/tools/lib/dhf/exporters/html-exporter.js +248 -0
  295. package/packages/tools/lib/dhf/exporters/html-exporter.js.map +1 -0
  296. package/packages/tools/lib/dhf/exporters/markdown-exporter.d.ts +9 -0
  297. package/packages/tools/lib/dhf/exporters/markdown-exporter.d.ts.map +1 -0
  298. package/packages/tools/lib/dhf/exporters/markdown-exporter.js +147 -0
  299. package/packages/tools/lib/dhf/exporters/markdown-exporter.js.map +1 -0
  300. package/packages/tools/lib/dhf/index.d.ts +15 -0
  301. package/packages/tools/lib/dhf/index.d.ts.map +1 -0
  302. package/packages/tools/lib/dhf/index.js +21 -0
  303. package/packages/tools/lib/dhf/index.js.map +1 -0
  304. package/packages/tools/lib/dhf/markdown-to-ir.d.ts +19 -0
  305. package/packages/tools/lib/dhf/markdown-to-ir.d.ts.map +1 -0
  306. package/packages/tools/lib/dhf/markdown-to-ir.js +193 -0
  307. package/packages/tools/lib/dhf/markdown-to-ir.js.map +1 -0
  308. package/packages/tools/lib/dhf/query-engine.d.ts +61 -0
  309. package/packages/tools/lib/dhf/query-engine.d.ts.map +1 -0
  310. package/packages/tools/lib/dhf/query-engine.js +109 -0
  311. package/packages/tools/lib/dhf/query-engine.js.map +1 -0
  312. package/packages/tools/lib/dhf/query-executor.d.ts +33 -0
  313. package/packages/tools/lib/dhf/query-executor.d.ts.map +1 -0
  314. package/packages/tools/lib/dhf/query-executor.js +222 -0
  315. package/packages/tools/lib/dhf/query-executor.js.map +1 -0
  316. package/packages/tools/lib/dhf/script-runner.d.ts +4 -0
  317. package/packages/tools/lib/dhf/script-runner.d.ts.map +1 -0
  318. package/packages/tools/lib/dhf/script-runner.js +62 -0
  319. package/packages/tools/lib/dhf/script-runner.js.map +1 -0
  320. package/packages/tools/lib/dhf/snapshot.d.ts +60 -0
  321. package/packages/tools/lib/dhf/snapshot.d.ts.map +1 -0
  322. package/packages/tools/lib/dhf/snapshot.js +185 -0
  323. package/packages/tools/lib/dhf/snapshot.js.map +1 -0
  324. package/packages/tools/lib/dhf/template-engine.d.ts +18 -0
  325. package/packages/tools/lib/dhf/template-engine.d.ts.map +1 -0
  326. package/packages/tools/lib/dhf/template-engine.js +339 -0
  327. package/packages/tools/lib/dhf/template-engine.js.map +1 -0
  328. package/packages/tools/lib/dhf/template-resolver.d.ts +42 -0
  329. package/packages/tools/lib/dhf/template-resolver.d.ts.map +1 -0
  330. package/packages/tools/lib/dhf/template-resolver.js +196 -0
  331. package/packages/tools/lib/dhf/template-resolver.js.map +1 -0
  332. package/packages/tools/lib/import/column-mapper.d.ts +35 -0
  333. package/packages/tools/lib/import/column-mapper.d.ts.map +1 -0
  334. package/packages/tools/lib/import/column-mapper.js +171 -0
  335. package/packages/tools/lib/import/column-mapper.js.map +1 -0
  336. package/packages/tools/lib/import/import-diff.d.ts +49 -0
  337. package/packages/tools/lib/import/import-diff.d.ts.map +1 -0
  338. package/packages/tools/lib/import/import-diff.js +102 -0
  339. package/packages/tools/lib/import/import-diff.js.map +1 -0
  340. package/packages/tools/lib/import/recipes.d.ts +43 -0
  341. package/packages/tools/lib/import/recipes.d.ts.map +1 -0
  342. package/packages/tools/lib/import/recipes.js +133 -0
  343. package/packages/tools/lib/import/recipes.js.map +1 -0
  344. package/packages/tools/lib/importer/cameo-importer.d.ts +103 -0
  345. package/packages/tools/lib/importer/cameo-importer.d.ts.map +1 -0
  346. package/packages/tools/lib/importer/cameo-importer.js +384 -0
  347. package/packages/tools/lib/importer/cameo-importer.js.map +1 -0
  348. package/packages/tools/lib/importer/ea-importer.d.ts +115 -0
  349. package/packages/tools/lib/importer/ea-importer.d.ts.map +1 -0
  350. package/packages/tools/lib/importer/ea-importer.js +325 -0
  351. package/packages/tools/lib/importer/ea-importer.js.map +1 -0
  352. package/packages/tools/lib/importer/index.d.ts +5 -0
  353. package/packages/tools/lib/importer/index.d.ts.map +1 -0
  354. package/packages/tools/lib/importer/index.js +15 -0
  355. package/packages/tools/lib/importer/index.js.map +1 -0
  356. package/packages/tools/lib/importer/owl-importer.d.ts +91 -0
  357. package/packages/tools/lib/importer/owl-importer.d.ts.map +1 -0
  358. package/packages/tools/lib/importer/owl-importer.js +429 -0
  359. package/packages/tools/lib/importer/owl-importer.js.map +1 -0
  360. package/packages/tools/lib/importer/sysand-importer.d.ts +78 -0
  361. package/packages/tools/lib/importer/sysand-importer.d.ts.map +1 -0
  362. package/packages/tools/lib/importer/sysand-importer.js +188 -0
  363. package/packages/tools/lib/importer/sysand-importer.js.map +1 -0
  364. package/packages/tools/lib/index.d.ts +44 -0
  365. package/packages/tools/lib/index.d.ts.map +1 -0
  366. package/packages/tools/lib/index.js +56 -0
  367. package/packages/tools/lib/index.js.map +1 -0
  368. package/packages/tools/lib/language/generated/ast.d.ts +629 -0
  369. package/packages/tools/lib/language/generated/ast.d.ts.map +1 -0
  370. package/packages/tools/lib/language/generated/ast.js +961 -0
  371. package/packages/tools/lib/language/generated/ast.js.map +1 -0
  372. package/packages/tools/lib/language/generated/grammar.d.ts +7 -0
  373. package/packages/tools/lib/language/generated/grammar.d.ts.map +1 -0
  374. package/packages/tools/lib/language/generated/grammar.js +5676 -0
  375. package/packages/tools/lib/language/generated/grammar.js.map +1 -0
  376. package/packages/tools/lib/language/generated/module.d.ts +14 -0
  377. package/packages/tools/lib/language/generated/module.d.ts.map +1 -0
  378. package/packages/tools/lib/language/generated/module.js +21 -0
  379. package/packages/tools/lib/language/generated/module.js.map +1 -0
  380. package/packages/tools/lib/language/memo-sysml-module.d.ts +24 -0
  381. package/packages/tools/lib/language/memo-sysml-module.d.ts.map +1 -0
  382. package/packages/tools/lib/language/memo-sysml-module.js +20 -0
  383. package/packages/tools/lib/language/memo-sysml-module.js.map +1 -0
  384. package/packages/tools/lib/llm/ask-engine.d.ts +17 -0
  385. package/packages/tools/lib/llm/ask-engine.d.ts.map +1 -0
  386. package/packages/tools/lib/llm/ask-engine.js +43 -0
  387. package/packages/tools/lib/llm/ask-engine.js.map +1 -0
  388. package/packages/tools/lib/llm/draft-engine.d.ts +32 -0
  389. package/packages/tools/lib/llm/draft-engine.d.ts.map +1 -0
  390. package/packages/tools/lib/llm/draft-engine.js +270 -0
  391. package/packages/tools/lib/llm/draft-engine.js.map +1 -0
  392. package/packages/tools/lib/llm/generate-engine.d.ts +21 -0
  393. package/packages/tools/lib/llm/generate-engine.d.ts.map +1 -0
  394. package/packages/tools/lib/llm/generate-engine.js +83 -0
  395. package/packages/tools/lib/llm/generate-engine.js.map +1 -0
  396. package/packages/tools/lib/llm/index.d.ts +6 -0
  397. package/packages/tools/lib/llm/index.d.ts.map +1 -0
  398. package/packages/tools/lib/llm/index.js +11 -0
  399. package/packages/tools/lib/llm/index.js.map +1 -0
  400. package/packages/tools/lib/llm/llm-provider.d.ts +40 -0
  401. package/packages/tools/lib/llm/llm-provider.d.ts.map +1 -0
  402. package/packages/tools/lib/llm/llm-provider.js +121 -0
  403. package/packages/tools/lib/llm/llm-provider.js.map +1 -0
  404. package/packages/tools/lib/llm/model-context.d.ts +28 -0
  405. package/packages/tools/lib/llm/model-context.d.ts.map +1 -0
  406. package/packages/tools/lib/llm/model-context.js +162 -0
  407. package/packages/tools/lib/llm/model-context.js.map +1 -0
  408. package/packages/tools/lib/lock.d.ts +43 -0
  409. package/packages/tools/lib/lock.d.ts.map +1 -0
  410. package/packages/tools/lib/lock.js +225 -0
  411. package/packages/tools/lib/lock.js.map +1 -0
  412. package/packages/tools/lib/model/builder.d.ts +22 -0
  413. package/packages/tools/lib/model/builder.d.ts.map +1 -0
  414. package/packages/tools/lib/model/builder.js +708 -0
  415. package/packages/tools/lib/model/builder.js.map +1 -0
  416. package/packages/tools/lib/model/config-loader.d.ts +34 -0
  417. package/packages/tools/lib/model/config-loader.d.ts.map +1 -0
  418. package/packages/tools/lib/model/config-loader.js +257 -0
  419. package/packages/tools/lib/model/config-loader.js.map +1 -0
  420. package/packages/tools/lib/model/config.d.ts +220 -0
  421. package/packages/tools/lib/model/config.d.ts.map +1 -0
  422. package/packages/tools/lib/model/config.js +14 -0
  423. package/packages/tools/lib/model/config.js.map +1 -0
  424. package/packages/tools/lib/model/content-store.d.ts +8 -0
  425. package/packages/tools/lib/model/content-store.d.ts.map +1 -0
  426. package/packages/tools/lib/model/content-store.js +59 -0
  427. package/packages/tools/lib/model/content-store.js.map +1 -0
  428. package/packages/tools/lib/model/dimension-filter.d.ts +33 -0
  429. package/packages/tools/lib/model/dimension-filter.d.ts.map +1 -0
  430. package/packages/tools/lib/model/dimension-filter.js +57 -0
  431. package/packages/tools/lib/model/dimension-filter.js.map +1 -0
  432. package/packages/tools/lib/model/kind-registry.d.ts +72 -0
  433. package/packages/tools/lib/model/kind-registry.d.ts.map +1 -0
  434. package/packages/tools/lib/model/kind-registry.js +178 -0
  435. package/packages/tools/lib/model/kind-registry.js.map +1 -0
  436. package/packages/tools/lib/model/layer-resolver.d.ts +25 -0
  437. package/packages/tools/lib/model/layer-resolver.d.ts.map +1 -0
  438. package/packages/tools/lib/model/layer-resolver.js +82 -0
  439. package/packages/tools/lib/model/layer-resolver.js.map +1 -0
  440. package/packages/tools/lib/model/manifest.d.ts +23 -0
  441. package/packages/tools/lib/model/manifest.d.ts.map +1 -0
  442. package/packages/tools/lib/model/manifest.js +117 -0
  443. package/packages/tools/lib/model/manifest.js.map +1 -0
  444. package/packages/tools/lib/model/methodology-loader.d.ts +56 -0
  445. package/packages/tools/lib/model/methodology-loader.d.ts.map +1 -0
  446. package/packages/tools/lib/model/methodology-loader.js +203 -0
  447. package/packages/tools/lib/model/methodology-loader.js.map +1 -0
  448. package/packages/tools/lib/model/ontology-loader.d.ts +113 -0
  449. package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -0
  450. package/packages/tools/lib/model/ontology-loader.js +901 -0
  451. package/packages/tools/lib/model/ontology-loader.js.map +1 -0
  452. package/packages/tools/lib/model/package-registry.d.ts +62 -0
  453. package/packages/tools/lib/model/package-registry.d.ts.map +1 -0
  454. package/packages/tools/lib/model/package-registry.js +164 -0
  455. package/packages/tools/lib/model/package-registry.js.map +1 -0
  456. package/packages/tools/lib/model/parser-utils.d.ts +23 -0
  457. package/packages/tools/lib/model/parser-utils.d.ts.map +1 -0
  458. package/packages/tools/lib/model/parser-utils.js +63 -0
  459. package/packages/tools/lib/model/parser-utils.js.map +1 -0
  460. package/packages/tools/lib/model/paths.d.ts +18 -0
  461. package/packages/tools/lib/model/paths.d.ts.map +1 -0
  462. package/packages/tools/lib/model/paths.js +26 -0
  463. package/packages/tools/lib/model/paths.js.map +1 -0
  464. package/packages/tools/lib/model/relationship-registry.d.ts +64 -0
  465. package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -0
  466. package/packages/tools/lib/model/relationship-registry.js +141 -0
  467. package/packages/tools/lib/model/relationship-registry.js.map +1 -0
  468. package/packages/tools/lib/model/semantic.d.ts +175 -0
  469. package/packages/tools/lib/model/semantic.d.ts.map +1 -0
  470. package/packages/tools/lib/model/semantic.js +61 -0
  471. package/packages/tools/lib/model/semantic.js.map +1 -0
  472. package/packages/tools/lib/model/short-id.d.ts +32 -0
  473. package/packages/tools/lib/model/short-id.d.ts.map +1 -0
  474. package/packages/tools/lib/model/short-id.js +136 -0
  475. package/packages/tools/lib/model/short-id.js.map +1 -0
  476. package/packages/tools/lib/model/toolchain.d.ts +12 -0
  477. package/packages/tools/lib/model/toolchain.d.ts.map +1 -0
  478. package/packages/tools/lib/model/toolchain.js +92 -0
  479. package/packages/tools/lib/model/toolchain.js.map +1 -0
  480. package/packages/tools/lib/model/view-deriver.d.ts +22 -0
  481. package/packages/tools/lib/model/view-deriver.d.ts.map +1 -0
  482. package/packages/tools/lib/model/view-deriver.js +160 -0
  483. package/packages/tools/lib/model/view-deriver.js.map +1 -0
  484. package/packages/tools/lib/model/view-kinds.d.ts +29 -0
  485. package/packages/tools/lib/model/view-kinds.d.ts.map +1 -0
  486. package/packages/tools/lib/model/view-kinds.js +80 -0
  487. package/packages/tools/lib/model/view-kinds.js.map +1 -0
  488. package/packages/tools/lib/ontology/owl-exporter.d.ts +43 -0
  489. package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -0
  490. package/packages/tools/lib/ontology/owl-exporter.js +70 -0
  491. package/packages/tools/lib/ontology/owl-exporter.js.map +1 -0
  492. package/packages/tools/lib/operations/index.d.ts +8 -0
  493. package/packages/tools/lib/operations/index.d.ts.map +1 -0
  494. package/packages/tools/lib/operations/index.js +8 -0
  495. package/packages/tools/lib/operations/index.js.map +1 -0
  496. package/packages/tools/lib/operations/project-snapshot.d.ts +17 -0
  497. package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -0
  498. package/packages/tools/lib/operations/project-snapshot.js +103 -0
  499. package/packages/tools/lib/operations/project-snapshot.js.map +1 -0
  500. package/packages/tools/lib/plugin/index.d.ts +5 -0
  501. package/packages/tools/lib/plugin/index.d.ts.map +1 -0
  502. package/packages/tools/lib/plugin/index.js +10 -0
  503. package/packages/tools/lib/plugin/index.js.map +1 -0
  504. package/packages/tools/lib/plugin/plugin-loader.d.ts +26 -0
  505. package/packages/tools/lib/plugin/plugin-loader.d.ts.map +1 -0
  506. package/packages/tools/lib/plugin/plugin-loader.js +216 -0
  507. package/packages/tools/lib/plugin/plugin-loader.js.map +1 -0
  508. package/packages/tools/lib/plugin/plugin-registry.d.ts +49 -0
  509. package/packages/tools/lib/plugin/plugin-registry.d.ts.map +1 -0
  510. package/packages/tools/lib/plugin/plugin-registry.js +121 -0
  511. package/packages/tools/lib/plugin/plugin-registry.js.map +1 -0
  512. package/packages/tools/lib/plugin/plugin-scaffold.d.ts +17 -0
  513. package/packages/tools/lib/plugin/plugin-scaffold.d.ts.map +1 -0
  514. package/packages/tools/lib/plugin/plugin-scaffold.js +223 -0
  515. package/packages/tools/lib/plugin/plugin-scaffold.js.map +1 -0
  516. package/packages/tools/lib/plugin/plugin-types.d.ts +115 -0
  517. package/packages/tools/lib/plugin/plugin-types.d.ts.map +1 -0
  518. package/packages/tools/lib/plugin/plugin-types.js +11 -0
  519. package/packages/tools/lib/plugin/plugin-types.js.map +1 -0
  520. package/packages/tools/lib/protocol/messages.d.ts +470 -0
  521. package/packages/tools/lib/protocol/messages.d.ts.map +1 -0
  522. package/packages/tools/lib/protocol/messages.js +6 -0
  523. package/packages/tools/lib/protocol/messages.js.map +1 -0
  524. package/packages/tools/lib/serializer/csv-io.d.ts +113 -0
  525. package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -0
  526. package/packages/tools/lib/serializer/csv-io.js +394 -0
  527. package/packages/tools/lib/serializer/csv-io.js.map +1 -0
  528. package/packages/tools/lib/serializer/sysml-generator.d.ts +32 -0
  529. package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -0
  530. package/packages/tools/lib/serializer/sysml-generator.js +120 -0
  531. package/packages/tools/lib/serializer/sysml-generator.js.map +1 -0
  532. package/packages/tools/lib/server/config-resolver.d.ts +14 -0
  533. package/packages/tools/lib/server/config-resolver.d.ts.map +1 -0
  534. package/packages/tools/lib/server/config-resolver.js +54 -0
  535. package/packages/tools/lib/server/config-resolver.js.map +1 -0
  536. package/packages/tools/lib/server/dev-server.d.ts +17 -0
  537. package/packages/tools/lib/server/dev-server.d.ts.map +1 -0
  538. package/packages/tools/lib/server/dev-server.js +939 -0
  539. package/packages/tools/lib/server/dev-server.js.map +1 -0
  540. package/packages/tools/lib/server/dhf-doc-store.d.ts +11 -0
  541. package/packages/tools/lib/server/dhf-doc-store.d.ts.map +1 -0
  542. package/packages/tools/lib/server/dhf-doc-store.js +181 -0
  543. package/packages/tools/lib/server/dhf-doc-store.js.map +1 -0
  544. package/packages/tools/lib/server/file-watcher.d.ts +20 -0
  545. package/packages/tools/lib/server/file-watcher.d.ts.map +1 -0
  546. package/packages/tools/lib/server/file-watcher.js +140 -0
  547. package/packages/tools/lib/server/file-watcher.js.map +1 -0
  548. package/packages/tools/lib/server/persistor.d.ts +25 -0
  549. package/packages/tools/lib/server/persistor.d.ts.map +1 -0
  550. package/packages/tools/lib/server/persistor.js +100 -0
  551. package/packages/tools/lib/server/persistor.js.map +1 -0
  552. package/packages/tools/lib/server/view-layout-store.d.ts +8 -0
  553. package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -0
  554. package/packages/tools/lib/server/view-layout-store.js +73 -0
  555. package/packages/tools/lib/server/view-layout-store.js.map +1 -0
  556. package/packages/tools/lib/types/index.d.ts +4 -0
  557. package/packages/tools/lib/types/index.d.ts.map +1 -0
  558. package/packages/tools/lib/types/index.js +6 -0
  559. package/packages/tools/lib/types/index.js.map +1 -0
  560. package/packages/tools/lib/validator/behavior-validator.d.ts +12 -0
  561. package/packages/tools/lib/validator/behavior-validator.d.ts.map +1 -0
  562. package/packages/tools/lib/validator/behavior-validator.js +124 -0
  563. package/packages/tools/lib/validator/behavior-validator.js.map +1 -0
  564. package/packages/tools/lib/validator/constraint-eval.d.ts +90 -0
  565. package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -0
  566. package/packages/tools/lib/validator/constraint-eval.js +478 -0
  567. package/packages/tools/lib/validator/constraint-eval.js.map +1 -0
  568. package/packages/tools/lib/validator/constraint-loader.d.ts +10 -0
  569. package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -0
  570. package/packages/tools/lib/validator/constraint-loader.js +113 -0
  571. package/packages/tools/lib/validator/constraint-loader.js.map +1 -0
  572. package/packages/tools/lib/validator/rule-engine.d.ts +13 -0
  573. package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -0
  574. package/packages/tools/lib/validator/rule-engine.js +38 -0
  575. package/packages/tools/lib/validator/rule-engine.js.map +1 -0
  576. package/packages/tools/lib/validator/rule-registry.d.ts +61 -0
  577. package/packages/tools/lib/validator/rule-registry.d.ts.map +1 -0
  578. package/packages/tools/lib/validator/rule-registry.js +142 -0
  579. package/packages/tools/lib/validator/rule-registry.js.map +1 -0
  580. package/packages/tools/lib/validator/types.d.ts +59 -0
  581. package/packages/tools/lib/validator/types.d.ts.map +1 -0
  582. package/packages/tools/lib/validator/types.js +3 -0
  583. package/packages/tools/lib/validator/types.js.map +1 -0
  584. package/packages/tools/lib/validator/view-validator.d.ts +11 -0
  585. package/packages/tools/lib/validator/view-validator.d.ts.map +1 -0
  586. package/packages/tools/lib/validator/view-validator.js +48 -0
  587. package/packages/tools/lib/validator/view-validator.js.map +1 -0
  588. package/packages/tools/src/grammar/memo-sysml.langium +450 -0
@@ -0,0 +1,708 @@
1
+ // ─── Model Builder ────────────────────────────────────────────────────────────
2
+ //
3
+ // Walks Langium AST documents and produces a serializable MemoModel.
4
+ // Maps SysML usages → MemoElements and ConnectionUsages → MemoRelationships.
5
+ //
6
+ // Key design decisions:
7
+ // - usage.type (e.g. "Hazard") is matched against config.kinds for layer info
8
+ // - ConnectionUsage.type (e.g. "Mitigates") → lowercase → matches config.relationshipTypes
9
+ // - PackageRegistry tracks cross-file packages and resolves imports
10
+ // - Connections are deferred until all elements are extracted (two-pass)
11
+ // - Doc comments are extracted from usage bodies
12
+ //
13
+ // Dual-mode resolution (M41):
14
+ // - If KindRegistry is provided, it takes precedence over config.kinds
15
+ // - If RelationshipRegistry is provided, it takes precedence for relationship validation
16
+ // - Falls back to config when registries are not provided or entry not found
17
+ // - Backward compatible: existing callers pass no registries, behavior unchanged
18
+ //
19
+ // Phase 5 additions:
20
+ // - ActionDefinition bodies extract parameters (in/out/inout)
21
+ // - ActionUsage supports composite actions with nested actions
22
+ // - FlowConnectionUsage → MemoRelationship of type "flow" with flowItem
23
+ // - SuccessionUsage → MemoRelationship pairs of type "succession"
24
+ // - AllocateUsage → MemoRelationship of type "allocateTo"
25
+ // - ItemDefinition → MemoElement with construct "item"
26
+ // ─────────────────────────────────────────────────────────────────────────────
27
+ import { PackageRegistry } from './package-registry.js';
28
+ import { assignSequentialShortIds } from './short-id.js';
29
+ let relationshipCounter = 0;
30
+ /**
31
+ * Resolve a kind definition using registry-first, config-fallback strategy.
32
+ * Returns the KindDefinition and the resolved kind name.
33
+ */
34
+ function resolveKindDef(typeName, config, registries) {
35
+ // Try registry first
36
+ if (registries?.kindRegistry) {
37
+ const entry = registries.kindRegistry.getKind(typeName);
38
+ if (entry) {
39
+ return {
40
+ kindDef: { label: entry.label, layer: entry.layer, sysmlConstruct: entry.sysmlConstruct },
41
+ resolvedKind: typeName,
42
+ };
43
+ }
44
+ // Try local part of qualified name
45
+ if (typeName.includes('::')) {
46
+ const localType = typeName.split('::').pop();
47
+ const localEntry = registries.kindRegistry.getKind(localType);
48
+ if (localEntry) {
49
+ return {
50
+ kindDef: { label: localEntry.label, layer: localEntry.layer, sysmlConstruct: localEntry.sysmlConstruct },
51
+ resolvedKind: localType,
52
+ };
53
+ }
54
+ }
55
+ }
56
+ // Fall back to config (if kinds are present)
57
+ const kinds = config.kinds ?? {};
58
+ const kindDef = kinds[typeName];
59
+ if (kindDef) {
60
+ return { kindDef, resolvedKind: typeName };
61
+ }
62
+ // Try local part of qualified name in config
63
+ if (typeName.includes('::')) {
64
+ const localType = typeName.split('::').pop();
65
+ if (kinds[localType]) {
66
+ return { kindDef: kinds[localType], resolvedKind: localType };
67
+ }
68
+ }
69
+ return { kindDef: undefined, resolvedKind: typeName };
70
+ }
71
+ /**
72
+ * Build a MemoModel from parsed documents and config.
73
+ * Optionally accepts registries for dual-mode resolution (registry-first, config-fallback).
74
+ */
75
+ export function buildMemoModel(documents, config, parseErrors = [], registries) {
76
+ relationshipCounter = 0;
77
+ const elements = new Map();
78
+ const relationships = [];
79
+ const errors = [...parseErrors];
80
+ const deferredConnections = [];
81
+ const deferredFlows = [];
82
+ const deferredSuccessions = [];
83
+ const deferredAllocates = [];
84
+ // Phase 1: Build package registry from all documents
85
+ const registry = new PackageRegistry();
86
+ registry.buildFromDocuments(documents);
87
+ // Phase 2: Extract elements from all documents (populates registry)
88
+ for (const { document, filePath } of documents) {
89
+ const model = document.parseResult.value;
90
+ extractFromModel(model, filePath, config, elements, deferredConnections, deferredFlows, deferredSuccessions, deferredAllocates, errors, registry, registries);
91
+ }
92
+ // Phase 3: Resolve connections using the registry (all elements now known)
93
+ const allElementIds = new Set(elements.keys());
94
+ for (const { conn, filePath, packageName } of deferredConnections) {
95
+ resolveConnection(conn, filePath, packageName, config, elements, relationships, registry, allElementIds);
96
+ }
97
+ // Phase 3b: Resolve flow connections
98
+ for (const { flow, filePath, packageName, parentActionId } of deferredFlows) {
99
+ resolveFlowConnection(flow, filePath, packageName, parentActionId, relationships, allElementIds);
100
+ }
101
+ // Phase 3c: Resolve successions
102
+ for (const { succession, filePath, packageName, parentActionId } of deferredSuccessions) {
103
+ resolveSuccession(succession, filePath, packageName, parentActionId, relationships, allElementIds);
104
+ }
105
+ // Phase 3d: Resolve allocations
106
+ for (const { allocate, filePath, packageName } of deferredAllocates) {
107
+ resolveAllocate(allocate, filePath, packageName, elements, relationships, registry, allElementIds);
108
+ }
109
+ // Build indexes
110
+ const elementsByKind = new Map();
111
+ const elementsByLayer = new Map();
112
+ for (const el of elements.values()) {
113
+ if (!elementsByKind.has(el.kind))
114
+ elementsByKind.set(el.kind, []);
115
+ elementsByKind.get(el.kind).push(el);
116
+ if (!elementsByLayer.has(el.layer))
117
+ elementsByLayer.set(el.layer, []);
118
+ elementsByLayer.get(el.layer).push(el);
119
+ }
120
+ // Assign sequential short IDs: sort each kind group by element id, then
121
+ // assign PREFIX-1, PREFIX-2, ... Deletion-stable (survivors keep their seq).
122
+ for (const [kind, kindElements] of elementsByKind) {
123
+ const idToShortId = assignSequentialShortIds(kind, kindElements.map(e => e.id));
124
+ for (const el of kindElements) {
125
+ el.shortId = idToShortId.get(el.id);
126
+ }
127
+ }
128
+ // Phase 4: Validate relationship end types (warnings only).
129
+ // A kind conforms to an end type if it equals it or specializes it
130
+ // (transitively) — e.g. HardwareAssembly conforms to ArchitectureElement.
131
+ if (registries?.relationshipRegistry) {
132
+ const conformsTo = (kind, expected) => {
133
+ let current = kind;
134
+ const seen = new Set();
135
+ while (current && !seen.has(current)) {
136
+ if (current === expected)
137
+ return true;
138
+ seen.add(current);
139
+ current = registries.kindRegistry?.getKind(current)?.superType;
140
+ }
141
+ // Legacy fallback when the kind hierarchy is unknown to the registry
142
+ return kind.endsWith(expected);
143
+ };
144
+ for (const rel of relationships) {
145
+ const regEntry = registries.relationshipRegistry.getRelType(rel.type);
146
+ if (!regEntry || regEntry.ends.length === 0)
147
+ continue;
148
+ const sourceEl = elements.get(rel.sourceId);
149
+ const targetEl = elements.get(rel.targetId);
150
+ // Check if the source/target kinds match the typed ends
151
+ for (const end of regEntry.ends) {
152
+ if (!end.type)
153
+ continue; // untyped ends allow any kind
154
+ // Match end to source or target by position (first end = source, second = target)
155
+ const endIndex = regEntry.ends.indexOf(end);
156
+ const el = endIndex === 0 ? sourceEl : targetEl;
157
+ if (!el)
158
+ continue;
159
+ if (!conformsTo(el.kind, end.type)) {
160
+ errors.push({
161
+ message: `[well-formedness] Relationship "${rel.type}" expects ${end.name} to be ${end.type}, but found ${el.kind}`,
162
+ file: rel.file ?? '',
163
+ });
164
+ }
165
+ }
166
+ }
167
+ }
168
+ const relationshipsByType = new Map();
169
+ const outgoing = new Map();
170
+ const incoming = new Map();
171
+ for (const rel of relationships) {
172
+ if (!relationshipsByType.has(rel.type))
173
+ relationshipsByType.set(rel.type, []);
174
+ relationshipsByType.get(rel.type).push(rel);
175
+ if (!outgoing.has(rel.sourceId))
176
+ outgoing.set(rel.sourceId, []);
177
+ outgoing.get(rel.sourceId).push(rel);
178
+ if (!incoming.has(rel.targetId))
179
+ incoming.set(rel.targetId, []);
180
+ incoming.get(rel.targetId).push(rel);
181
+ }
182
+ return {
183
+ elements,
184
+ relationships,
185
+ errors,
186
+ elementsByKind,
187
+ elementsByLayer,
188
+ relationshipsByType,
189
+ outgoing,
190
+ incoming,
191
+ };
192
+ }
193
+ // ─── AST Walking ────────────────────────────────────────────────────────────
194
+ function extractFromModel(model, filePath, config, elements, deferredConnections, deferredFlows, deferredSuccessions, deferredAllocates, errors, registry, registries) {
195
+ for (const member of model.members) {
196
+ if (member.$type === 'PackageDeclaration') {
197
+ extractFromPackage(member, filePath, '', config, elements, deferredConnections, deferredFlows, deferredSuccessions, deferredAllocates, errors, registry, registries);
198
+ }
199
+ }
200
+ }
201
+ function extractFromPackage(pkg, filePath, parentPackage, config, elements, deferredConnections, deferredFlows, deferredSuccessions, deferredAllocates, errors, registry, registries) {
202
+ const packageName = parentPackage ? `${parentPackage}::${pkg.name}` : pkg.name;
203
+ for (const member of pkg.members) {
204
+ switch (member.$type) {
205
+ case 'PackageDeclaration':
206
+ extractFromPackage(member, filePath, packageName, config, elements, deferredConnections, deferredFlows, deferredSuccessions, deferredAllocates, errors, registry, registries);
207
+ break;
208
+ case 'PartUsage':
209
+ extractUsage(member, 'part', filePath, packageName, config, elements, registry, registries);
210
+ break;
211
+ case 'RequirementUsage':
212
+ extractUsage(member, 'requirement', filePath, packageName, config, elements, registry, registries);
213
+ break;
214
+ case 'ActionUsage':
215
+ extractActionUsage(member, filePath, packageName, config, elements, deferredFlows, deferredSuccessions, registry, registries);
216
+ break;
217
+ case 'PortUsage':
218
+ extractUsage(member, 'port', filePath, packageName, config, elements, registry, registries);
219
+ break;
220
+ case 'ViewUsage':
221
+ extractUsage(member, 'view', filePath, packageName, config, elements, registry, registries);
222
+ break;
223
+ case 'ConnectionUsage':
224
+ // Defer connection resolution until all elements are extracted
225
+ deferredConnections.push({
226
+ conn: member,
227
+ filePath,
228
+ packageName,
229
+ });
230
+ break;
231
+ case 'AllocateUsage':
232
+ deferredAllocates.push({
233
+ allocate: member,
234
+ filePath,
235
+ packageName,
236
+ });
237
+ break;
238
+ // ─── Definition members ─────────────────────────────────────
239
+ case 'ActionDefinition':
240
+ extractActionDefinition(member, filePath, packageName, config, elements, registry);
241
+ break;
242
+ case 'ItemDefinition':
243
+ extractItemDefinition(member, filePath, packageName, config, elements, registry);
244
+ break;
245
+ case 'PartDefinition':
246
+ case 'PortDefinition':
247
+ case 'InterfaceDefinition':
248
+ case 'ConnectionDefinition':
249
+ extractDefinitionPorts(member, filePath, packageName, config, elements, registry, registries);
250
+ break;
251
+ // Other definitions (viewpoint def, view def, etc.) inside packages are
252
+ // ontology-level — we don't extract them as model elements in device projects
253
+ }
254
+ }
255
+ }
256
+ function extractUsage(usage, construct, filePath, packageName, config, elements, registry, registries) {
257
+ const id = usage.name;
258
+ const typeName = usage.type; // e.g. "Hazard", "Requirement"
259
+ // Dual-mode resolution: registry first, then config fallback
260
+ const { kindDef: finalKindDef, resolvedKind } = typeName
261
+ ? resolveKindDef(typeName, config, registries)
262
+ : { kindDef: undefined, resolvedKind: 'Unknown' };
263
+ const attributes = extractAttributes(usage.body);
264
+ const doc = extractDocComment(usage.body);
265
+ // Nested part members: capture reference bindings (`part viewpoint :> vp;`)
266
+ // and one level of nested part bodies (`part selectionQuery { ... }`) as
267
+ // plain / prefixed attributes, so SysML-modelled views expose their
268
+ // viewpoint binding and selection-query metadata to consumers.
269
+ for (const member of usage.body || []) {
270
+ if (member.$type !== 'PartMember')
271
+ continue;
272
+ const pm = member;
273
+ if (pm.boundRef && pm.name) {
274
+ attributes[pm.name] = pm.boundRef;
275
+ }
276
+ else if (pm.body && pm.name) {
277
+ const nested = extractAttributes(pm.body);
278
+ for (const [k, v] of Object.entries(nested)) {
279
+ attributes[`${pm.name}.${k}`] = v;
280
+ }
281
+ }
282
+ }
283
+ // Human-readable name: prefer "attribute redefines name" over usage name
284
+ const displayName = attributes['name'] || attributes['title'] || id;
285
+ const element = {
286
+ id,
287
+ name: displayName,
288
+ kind: resolvedKind,
289
+ construct,
290
+ layer: finalKindDef?.layer || 'unknown',
291
+ file: filePath,
292
+ package: packageName || undefined,
293
+ attributes,
294
+ doc,
295
+ };
296
+ // Port-specific fields
297
+ if (construct === 'port') {
298
+ const portNode = usage;
299
+ element.portSpec = {
300
+ type: portNode.type,
301
+ direction: portNode.direction,
302
+ isConjugated: portNode.isConjugated ?? false,
303
+ };
304
+ }
305
+ elements.set(id, element);
306
+ registry.registerElement(id, packageName);
307
+ }
308
+ /**
309
+ * Extract an ActionDefinition as a MemoElement with parameters.
310
+ */
311
+ function extractActionDefinition(actionDef, filePath, packageName, config, elements, registry) {
312
+ const id = actionDef.name;
313
+ // Extract parameters from body
314
+ const parameters = [];
315
+ const bodyMembers = actionDef.body || [];
316
+ for (const member of bodyMembers) {
317
+ if (member.$type === 'ActionParameterMember') {
318
+ const param = member;
319
+ parameters.push({
320
+ name: param.name,
321
+ direction: param.direction,
322
+ type: param.type,
323
+ });
324
+ }
325
+ }
326
+ const attributes = extractAttributes(bodyMembers);
327
+ const doc = extractDocComment(bodyMembers);
328
+ const behaviorKind = actionDef.behaviorKind ?? 'action';
329
+ const element = {
330
+ id,
331
+ name: id,
332
+ kind: behaviorKind === 'operator' ? 'OperatorDefinition'
333
+ : behaviorKind === 'function' ? 'FunctionDefinition' : 'ActionDefinition',
334
+ construct: 'action',
335
+ layer: 'behavior',
336
+ file: filePath,
337
+ package: packageName || undefined,
338
+ attributes: { ...attributes, behaviorKind },
339
+ doc,
340
+ parameters: parameters.length > 0 ? parameters : undefined,
341
+ };
342
+ elements.set(id, element);
343
+ registry.registerElement(id, packageName);
344
+ }
345
+ /**
346
+ * Extract an ItemDefinition as a MemoElement.
347
+ */
348
+ function extractItemDefinition(itemDef, filePath, packageName, config, elements, registry) {
349
+ const id = itemDef.name;
350
+ const attributes = extractAttributes(itemDef.body);
351
+ const doc = extractDocComment(itemDef.body);
352
+ const element = {
353
+ id,
354
+ name: id,
355
+ kind: 'ItemDefinition',
356
+ construct: 'item',
357
+ layer: 'behavior',
358
+ file: filePath,
359
+ package: packageName || undefined,
360
+ attributes,
361
+ doc,
362
+ };
363
+ elements.set(id, element);
364
+ registry.registerElement(id, packageName);
365
+ }
366
+ /**
367
+ * Walk a definition body to extract port usages as owned port elements.
368
+ * Sets owner on ports and ownedPorts on the definition.
369
+ */
370
+ function extractDefinitionPorts(def, filePath, packageName, config, elements, registry, registries) {
371
+ const ownerId = def.name;
372
+ const body = def.body || [];
373
+ const ownedPortIds = [];
374
+ for (const member of body) {
375
+ if (member.$type === 'PortUsage') {
376
+ const portUsage = member;
377
+ extractUsage(portUsage, 'port', filePath, packageName, config, elements, registry, registries);
378
+ const portEl = elements.get(portUsage.name);
379
+ if (portEl) {
380
+ portEl.owner = ownerId;
381
+ ownedPortIds.push(portUsage.name);
382
+ }
383
+ }
384
+ }
385
+ if (ownedPortIds.length > 0) {
386
+ const ownerEl = elements.get(ownerId);
387
+ if (ownerEl) {
388
+ ownerEl.ownedPorts = ownedPortIds;
389
+ }
390
+ }
391
+ }
392
+ /**
393
+ * Extract an ActionUsage, including nested actions, flows, and successions.
394
+ * Supports both typed (action name : Type;) and composite (action name { ... }) forms.
395
+ */
396
+ function extractActionUsage(usage, filePath, packageName, config, elements, deferredFlows, deferredSuccessions, registry, registries, parentActionId) {
397
+ const id = usage.name;
398
+ const typeName = usage.type;
399
+ // Dual-mode resolution: registry first, then config fallback. A type
400
+ // that resolves without a real layer is a model-local action def, not an
401
+ // ontology kind — the usage stays an ActionUsage on the behavior layer
402
+ // (the def reference is kept in the actionType attribute below).
403
+ const behaviorKind = usage.behaviorKind ?? 'action';
404
+ let kind = behaviorKind === 'operator' ? 'OperatorUsage'
405
+ : behaviorKind === 'function' ? 'FunctionUsage' : 'ActionUsage';
406
+ let layer = 'behavior';
407
+ if (typeName) {
408
+ const { kindDef, resolvedKind } = resolveKindDef(typeName, config, registries);
409
+ if (kindDef && kindDef.layer && kindDef.layer !== 'unknown') {
410
+ kind = resolvedKind;
411
+ layer = kindDef.layer;
412
+ }
413
+ }
414
+ const bodyMembers = usage.body || [];
415
+ const attributes = extractAttributes(bodyMembers);
416
+ attributes['behaviorKind'] = behaviorKind;
417
+ const doc = extractDocComment(bodyMembers);
418
+ const displayName = attributes['name'] || attributes['title'] || id;
419
+ // Store the action definition type for flow type checking
420
+ if (typeName) {
421
+ attributes['actionType'] = typeName;
422
+ }
423
+ const element = {
424
+ id,
425
+ name: displayName,
426
+ kind,
427
+ construct: 'action',
428
+ layer,
429
+ file: filePath,
430
+ package: packageName || undefined,
431
+ attributes,
432
+ doc,
433
+ parentAction: parentActionId,
434
+ };
435
+ elements.set(id, element);
436
+ registry.registerElement(id, packageName);
437
+ // Walk body for nested behavior members
438
+ for (const member of bodyMembers) {
439
+ switch (member.$type) {
440
+ case 'ActionUsage':
441
+ // Nested action usage — recursive extraction
442
+ extractActionUsage(member, filePath, packageName, config, elements, deferredFlows, deferredSuccessions, registry, registries, id);
443
+ break;
444
+ case 'FlowConnectionUsage':
445
+ deferredFlows.push({
446
+ flow: member,
447
+ filePath,
448
+ packageName,
449
+ parentActionId: id,
450
+ });
451
+ break;
452
+ case 'SuccessionUsage':
453
+ deferredSuccessions.push({
454
+ succession: member,
455
+ filePath,
456
+ packageName,
457
+ parentActionId: id,
458
+ });
459
+ break;
460
+ case 'ControlNodeUsage':
461
+ extractControlNode(member, filePath, packageName, elements, registry, id);
462
+ break;
463
+ }
464
+ }
465
+ }
466
+ /**
467
+ * Extract a fork/join control node. Modeled as a behavior-layer element with
468
+ * `construct: 'action'` so it participates in succession ordering and swimlane
469
+ * layout like any other flow step, but carries a distinct kind
470
+ * (`ForkNode` / `JoinNode`) and a `controlKind` attribute so renderers draw it
471
+ * as a synchronization bar rather than an action card.
472
+ */
473
+ function extractControlNode(node, filePath, packageName, elements, registry, parentActionId) {
474
+ const id = node.name;
475
+ const kind = node.controlKind === 'fork' ? 'ForkNode' : 'JoinNode';
476
+ elements.set(id, {
477
+ id,
478
+ name: node.controlKind,
479
+ kind,
480
+ construct: 'action',
481
+ layer: 'behavior',
482
+ file: filePath,
483
+ package: packageName || undefined,
484
+ attributes: { controlKind: node.controlKind },
485
+ parentAction: parentActionId,
486
+ });
487
+ registry.registerElement(id, packageName);
488
+ }
489
+ function resolveConnection(conn, filePath, packageName, config, elements, relationships, registry, allElementIds) {
490
+ const typeName = conn.type; // e.g. "Mitigates", "TraceTo"
491
+ if (!typeName)
492
+ return;
493
+ if (!conn.source || !conn.target)
494
+ return;
495
+ // Normalize: "Mitigates" → "mitigates", "TraceTo" → "traceTo"
496
+ const normalizedType = normalizeRelType(typeName);
497
+ // Resolve source and target using registry for cross-file resolution
498
+ const sourceId = resolveEndpointId(conn.source.ref, packageName, registry, allElementIds);
499
+ const targetId = resolveEndpointId(conn.target.ref, packageName, registry, allElementIds);
500
+ if (!sourceId || !targetId)
501
+ return;
502
+ const rel = {
503
+ id: `rel-${++relationshipCounter}`,
504
+ type: normalizedType,
505
+ sourceId,
506
+ sourceEnd: conn.source.endName,
507
+ targetId,
508
+ targetEnd: conn.target.endName,
509
+ file: filePath,
510
+ };
511
+ // Tag port IDs when endpoints reference port elements
512
+ const sourceEl = elements.get(sourceId);
513
+ if (sourceEl?.construct === 'port') {
514
+ rel.sourcePortId = sourceId;
515
+ }
516
+ const targetEl = elements.get(targetId);
517
+ if (targetEl?.construct === 'port') {
518
+ rel.targetPortId = targetId;
519
+ }
520
+ relationships.push(rel);
521
+ }
522
+ /**
523
+ * Resolve a flow connection usage into a MemoRelationship.
524
+ * Flow endpoints use dot notation: "actionName.paramName"
525
+ */
526
+ function resolveFlowConnection(flow, filePath, packageName, parentActionId, relationships, allElementIds) {
527
+ const sourceRef = flow.source?.ref;
528
+ const targetRef = flow.target?.ref;
529
+ if (!sourceRef || !targetRef)
530
+ return;
531
+ // Parse dot notation: "receive.prescription" → actionId="receive", port="prescription"
532
+ const sourceParts = sourceRef.split('.');
533
+ const targetParts = targetRef.split('.');
534
+ const sourceActionId = sourceParts[0];
535
+ const sourcePort = sourceParts.length > 1 ? sourceParts.slice(1).join('.') : '';
536
+ const targetActionId = targetParts[0];
537
+ const targetPort = targetParts.length > 1 ? targetParts.slice(1).join('.') : '';
538
+ // Only create relationship if both endpoints reference known elements
539
+ if (!allElementIds.has(sourceActionId) || !allElementIds.has(targetActionId))
540
+ return;
541
+ const rel = {
542
+ id: `rel-${++relationshipCounter}`,
543
+ type: 'flow',
544
+ sourceId: sourceActionId,
545
+ sourceEnd: sourcePort,
546
+ targetId: targetActionId,
547
+ targetEnd: targetPort,
548
+ file: filePath,
549
+ flowItem: flow.itemType || undefined,
550
+ };
551
+ relationships.push(rel);
552
+ }
553
+ /**
554
+ * Resolve a succession usage into pairs of MemoRelationships.
555
+ * "first start then A then B then done" → (start→A), (A→B), (B→done)
556
+ */
557
+ function resolveSuccession(succession, filePath, packageName, parentActionId, relationships, allElementIds) {
558
+ const steps = succession.steps || [];
559
+ if (steps.length < 2)
560
+ return;
561
+ for (let i = 0; i < steps.length - 1; i++) {
562
+ const fromRef = steps[i].ref;
563
+ const toRef = steps[i + 1].ref;
564
+ // "start" and "done" are pseudo-elements; use parent action as context
565
+ const sourceId = fromRef === 'start'
566
+ ? (parentActionId ? `${parentActionId}__start` : '__start')
567
+ : fromRef;
568
+ const targetId = toRef === 'done'
569
+ ? (parentActionId ? `${parentActionId}__done` : '__done')
570
+ : toRef;
571
+ // Skip if neither endpoint is a known element (allow start/done pseudo-elements)
572
+ const sourceKnown = fromRef === 'start' || allElementIds.has(sourceId);
573
+ const targetKnown = toRef === 'done' || allElementIds.has(targetId);
574
+ if (!sourceKnown || !targetKnown)
575
+ continue;
576
+ const rel = {
577
+ id: `rel-${++relationshipCounter}`,
578
+ type: 'succession',
579
+ sourceId,
580
+ sourceEnd: '',
581
+ targetId,
582
+ targetEnd: '',
583
+ file: filePath,
584
+ };
585
+ relationships.push(rel);
586
+ }
587
+ }
588
+ /**
589
+ * Resolve an allocate usage into a MemoRelationship and set allocatedTo on the element.
590
+ */
591
+ function resolveAllocate(allocate, filePath, packageName, elements, relationships, registry, allElementIds) {
592
+ const sourceRef = allocate.source;
593
+ const targetRef = allocate.target;
594
+ if (!sourceRef || !targetRef)
595
+ return;
596
+ // Resolve references
597
+ const sourceId = resolveEndpointId(sourceRef, packageName, registry, allElementIds);
598
+ const targetId = resolveEndpointId(targetRef, packageName, registry, allElementIds);
599
+ if (!sourceId || !targetId)
600
+ return;
601
+ // Set allocatedTo on the source element
602
+ const sourceEl = elements.get(sourceId);
603
+ if (sourceEl) {
604
+ sourceEl.allocatedTo = targetId;
605
+ }
606
+ const rel = {
607
+ id: `rel-${++relationshipCounter}`,
608
+ type: 'allocateTo',
609
+ sourceId,
610
+ sourceEnd: 'action',
611
+ targetId,
612
+ targetEnd: 'part',
613
+ file: filePath,
614
+ };
615
+ relationships.push(rel);
616
+ }
617
+ // ─── Helpers ────────────────────────────────────────────────────────────────
618
+ function extractAttributes(body) {
619
+ if (!body)
620
+ return {};
621
+ const attrs = {};
622
+ for (const member of body) {
623
+ if (member.$type === 'AttributeMember') {
624
+ const attr = member;
625
+ if (attr.value) {
626
+ attrs[attr.name] = extractAttributeValue(attr.value);
627
+ }
628
+ else if (attr.type) {
629
+ attrs[attr.name] = `<${attr.type}>`;
630
+ }
631
+ }
632
+ }
633
+ return attrs;
634
+ }
635
+ function extractAttributeValue(value) {
636
+ if (!value)
637
+ return '';
638
+ switch (value.$type) {
639
+ case 'StringValue':
640
+ return value.value.replace(/^"|"$/g, '');
641
+ case 'IntValue':
642
+ return String(value.value);
643
+ case 'RealValue':
644
+ return String(value.value);
645
+ case 'BooleanValue':
646
+ return value.value;
647
+ case 'EnumValue':
648
+ return value.enumRef;
649
+ case 'SetLiteral':
650
+ // { A, B, "c" } → "A, B, c" — keeps attributes flat and readable
651
+ return (value.elements ?? [])
652
+ .map(el => el.value ?? (el.stringValue ?? '').replace(/^"|"$/g, ''))
653
+ .filter((s) => s.length > 0)
654
+ .join(', ');
655
+ default:
656
+ return String(value);
657
+ }
658
+ }
659
+ function extractDocComment(body) {
660
+ if (!body)
661
+ return undefined;
662
+ const doc = body.find((m) => m.$type === 'DocComment');
663
+ if (!doc)
664
+ return undefined;
665
+ return doc.content
666
+ .replace(/^doc\s+\/\*\s*/, '')
667
+ .replace(/\s*\*\/$/, '')
668
+ .replace(/\n\s*\*\s?/g, ' ')
669
+ .trim();
670
+ }
671
+ /**
672
+ * Resolve a QualifiedName reference to just the local name.
673
+ * In SysML v2 usages: `control ::> rcFlowRateLimiter` — ref is "rcFlowRateLimiter"
674
+ */
675
+ function resolveRef(ref) {
676
+ if (!ref)
677
+ return undefined;
678
+ // Take the last segment of a qualified name
679
+ const parts = ref.split('::');
680
+ return parts[parts.length - 1] || undefined;
681
+ }
682
+ /**
683
+ * Resolve a relationship endpoint reference to an element id, including
684
+ * dotted feature chains (`sampleActionFlow.process.processStepB`): elements
685
+ * are registered under their leaf name, so when the full reference is not a
686
+ * known element id, resolve its last dot segment instead.
687
+ */
688
+ function resolveEndpointId(ref, packageName, registry, allElementIds) {
689
+ const direct = registry.resolveElementId(ref, packageName, allElementIds) || resolveRef(ref);
690
+ if (direct && allElementIds.has(direct))
691
+ return direct;
692
+ if (ref.includes('.')) {
693
+ const leaf = ref.split('.').pop();
694
+ const resolved = registry.resolveElementId(leaf, packageName, allElementIds) || resolveRef(leaf);
695
+ if (resolved && allElementIds.has(resolved))
696
+ return resolved;
697
+ }
698
+ return direct;
699
+ }
700
+ /**
701
+ * Normalize relationship type name:
702
+ * PascalCase → camelCase for matching against config.relationshipTypes[].name
703
+ * "Mitigates" → "mitigates", "TraceTo" → "traceTo", "AllocateTo" → "allocateTo"
704
+ */
705
+ function normalizeRelType(name) {
706
+ return name.charAt(0).toLowerCase() + name.slice(1);
707
+ }
708
+ //# sourceMappingURL=builder.js.map