@memoarchitect/tools 0.6.7 → 0.8.7

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 (549) hide show
  1. package/README.md +36 -11
  2. package/corpus/README.md +63 -0
  3. package/corpus/sysml-v2-release/bnf/SysML-graphical-bnf.kgbnf +2264 -0
  4. package/package.json +20 -7
  5. package/packages/tools/lib/analysis/dsm.d.ts +1 -1
  6. package/packages/tools/lib/analysis/dsm.d.ts.map +1 -1
  7. package/packages/tools/lib/analysis/dsm.js +1 -1
  8. package/packages/tools/lib/analysis/dsm.js.map +1 -1
  9. package/packages/tools/lib/bin/memo.js +186 -10
  10. package/packages/tools/lib/bin/memo.js.map +1 -1
  11. package/packages/tools/lib/browser/index.d.ts +3 -1
  12. package/packages/tools/lib/browser/index.d.ts.map +1 -1
  13. package/packages/tools/lib/browser/index.js +2 -1
  14. package/packages/tools/lib/browser/index.js.map +1 -1
  15. package/packages/tools/lib/commands/ask.js +1 -1
  16. package/packages/tools/lib/commands/ask.js.map +1 -1
  17. package/packages/tools/lib/commands/check.d.ts.map +1 -1
  18. package/packages/tools/lib/commands/check.js +3 -9
  19. package/packages/tools/lib/commands/check.js.map +1 -1
  20. package/packages/tools/lib/commands/conformance.d.ts +36 -0
  21. package/packages/tools/lib/commands/conformance.d.ts.map +1 -0
  22. package/packages/tools/lib/commands/conformance.js +212 -0
  23. package/packages/tools/lib/commands/conformance.js.map +1 -0
  24. package/packages/tools/lib/commands/convert.d.ts +12 -0
  25. package/packages/tools/lib/commands/convert.d.ts.map +1 -0
  26. package/packages/tools/lib/commands/convert.js +103 -0
  27. package/packages/tools/lib/commands/convert.js.map +1 -0
  28. package/packages/tools/lib/commands/create-package.d.ts +1 -2
  29. package/packages/tools/lib/commands/create-package.d.ts.map +1 -1
  30. package/packages/tools/lib/commands/create-package.js.map +1 -1
  31. package/packages/tools/lib/commands/dev.d.ts +13 -0
  32. package/packages/tools/lib/commands/dev.d.ts.map +1 -1
  33. package/packages/tools/lib/commands/dev.js +245 -89
  34. package/packages/tools/lib/commands/dev.js.map +1 -1
  35. package/packages/tools/lib/commands/dhf-draft.js +1 -1
  36. package/packages/tools/lib/commands/dhf-draft.js.map +1 -1
  37. package/packages/tools/lib/commands/dhf-lint.d.ts +10 -0
  38. package/packages/tools/lib/commands/dhf-lint.d.ts.map +1 -0
  39. package/packages/tools/lib/commands/dhf-lint.js +72 -0
  40. package/packages/tools/lib/commands/dhf-lint.js.map +1 -0
  41. package/packages/tools/lib/commands/dhf-preview.js +1 -1
  42. package/packages/tools/lib/commands/dhf-preview.js.map +1 -1
  43. package/packages/tools/lib/commands/dhf.d.ts.map +1 -1
  44. package/packages/tools/lib/commands/dhf.js +8 -2
  45. package/packages/tools/lib/commands/dhf.js.map +1 -1
  46. package/packages/tools/lib/commands/element.d.ts +34 -0
  47. package/packages/tools/lib/commands/element.d.ts.map +1 -0
  48. package/packages/tools/lib/commands/element.js +174 -0
  49. package/packages/tools/lib/commands/element.js.map +1 -0
  50. package/packages/tools/lib/commands/export.d.ts.map +1 -1
  51. package/packages/tools/lib/commands/export.js +39 -40
  52. package/packages/tools/lib/commands/export.js.map +1 -1
  53. package/packages/tools/lib/commands/generate.d.ts.map +1 -1
  54. package/packages/tools/lib/commands/generate.js +10 -7
  55. package/packages/tools/lib/commands/generate.js.map +1 -1
  56. package/packages/tools/lib/commands/import.d.ts.map +1 -1
  57. package/packages/tools/lib/commands/import.js +25 -12
  58. package/packages/tools/lib/commands/import.js.map +1 -1
  59. package/packages/tools/lib/commands/init.d.ts.map +1 -1
  60. package/packages/tools/lib/commands/init.js +34 -14
  61. package/packages/tools/lib/commands/init.js.map +1 -1
  62. package/packages/tools/lib/commands/inspect.d.ts +5 -0
  63. package/packages/tools/lib/commands/inspect.d.ts.map +1 -0
  64. package/packages/tools/lib/commands/inspect.js +56 -0
  65. package/packages/tools/lib/commands/inspect.js.map +1 -0
  66. package/packages/tools/lib/commands/lock.d.ts.map +1 -1
  67. package/packages/tools/lib/commands/lock.js +7 -2
  68. package/packages/tools/lib/commands/lock.js.map +1 -1
  69. package/packages/tools/lib/commands/ontology.d.ts.map +1 -1
  70. package/packages/tools/lib/commands/ontology.js +69 -116
  71. package/packages/tools/lib/commands/ontology.js.map +1 -1
  72. package/packages/tools/lib/commands/pack.d.ts +1 -1
  73. package/packages/tools/lib/commands/pack.d.ts.map +1 -1
  74. package/packages/tools/lib/commands/pack.js +20 -78
  75. package/packages/tools/lib/commands/pack.js.map +1 -1
  76. package/packages/tools/lib/commands/package.d.ts +10 -0
  77. package/packages/tools/lib/commands/package.d.ts.map +1 -0
  78. package/packages/tools/lib/commands/package.js +113 -0
  79. package/packages/tools/lib/commands/package.js.map +1 -0
  80. package/packages/tools/lib/commands/plugin.js +1 -1
  81. package/packages/tools/lib/commands/plugin.js.map +1 -1
  82. package/packages/tools/lib/commands/rules.d.ts.map +1 -1
  83. package/packages/tools/lib/commands/rules.js +120 -30
  84. package/packages/tools/lib/commands/rules.js.map +1 -1
  85. package/packages/tools/lib/commands/standards.d.ts +28 -0
  86. package/packages/tools/lib/commands/standards.d.ts.map +1 -0
  87. package/packages/tools/lib/commands/standards.js +203 -0
  88. package/packages/tools/lib/commands/standards.js.map +1 -0
  89. package/packages/tools/lib/commands/sysand-publish.d.ts.map +1 -1
  90. package/packages/tools/lib/commands/sysand-publish.js +14 -16
  91. package/packages/tools/lib/commands/sysand-publish.js.map +1 -1
  92. package/packages/tools/lib/commands/toolchain.d.ts +8 -0
  93. package/packages/tools/lib/commands/toolchain.d.ts.map +1 -0
  94. package/packages/tools/lib/commands/toolchain.js +64 -0
  95. package/packages/tools/lib/commands/toolchain.js.map +1 -0
  96. package/packages/tools/lib/commands/validate.d.ts +1 -1
  97. package/packages/tools/lib/commands/validate.d.ts.map +1 -1
  98. package/packages/tools/lib/commands/validate.js +194 -56
  99. package/packages/tools/lib/commands/validate.js.map +1 -1
  100. package/packages/tools/lib/completeness/tracker.d.ts +10 -2
  101. package/packages/tools/lib/completeness/tracker.d.ts.map +1 -1
  102. package/packages/tools/lib/completeness/tracker.js +16 -21
  103. package/packages/tools/lib/completeness/tracker.js.map +1 -1
  104. package/packages/tools/lib/conformance/baseline.d.ts +26 -0
  105. package/packages/tools/lib/conformance/baseline.d.ts.map +1 -0
  106. package/packages/tools/lib/conformance/baseline.js +170 -0
  107. package/packages/tools/lib/conformance/baseline.js.map +1 -0
  108. package/packages/tools/lib/conformance/bnf.d.ts +84 -0
  109. package/packages/tools/lib/conformance/bnf.d.ts.map +1 -0
  110. package/packages/tools/lib/conformance/bnf.js +166 -0
  111. package/packages/tools/lib/conformance/bnf.js.map +1 -0
  112. package/packages/tools/lib/conformance/corpus.d.ts +125 -0
  113. package/packages/tools/lib/conformance/corpus.d.ts.map +1 -0
  114. package/packages/tools/lib/conformance/corpus.js +190 -0
  115. package/packages/tools/lib/conformance/corpus.js.map +1 -0
  116. package/packages/tools/lib/conformance/diff-xmi.d.ts +118 -0
  117. package/packages/tools/lib/conformance/diff-xmi.d.ts.map +1 -0
  118. package/packages/tools/lib/conformance/diff-xmi.js +276 -0
  119. package/packages/tools/lib/conformance/diff-xmi.js.map +1 -0
  120. package/packages/tools/lib/conformance/generated/syside-rules.d.ts +10 -0
  121. package/packages/tools/lib/conformance/generated/syside-rules.d.ts.map +1 -0
  122. package/packages/tools/lib/conformance/generated/syside-rules.js +1142 -0
  123. package/packages/tools/lib/conformance/generated/syside-rules.js.map +1 -0
  124. package/packages/tools/lib/conformance/index.d.ts +7 -0
  125. package/packages/tools/lib/conformance/index.d.ts.map +1 -0
  126. package/packages/tools/lib/conformance/index.js +19 -0
  127. package/packages/tools/lib/conformance/index.js.map +1 -0
  128. package/packages/tools/lib/conformance/run.d.ts +117 -0
  129. package/packages/tools/lib/conformance/run.d.ts.map +1 -0
  130. package/packages/tools/lib/conformance/run.js +0 -0
  131. package/packages/tools/lib/conformance/run.js.map +1 -0
  132. package/packages/tools/lib/conformance/xmi.d.ts +45 -0
  133. package/packages/tools/lib/conformance/xmi.d.ts.map +1 -0
  134. package/packages/tools/lib/conformance/xmi.js +148 -0
  135. package/packages/tools/lib/conformance/xmi.js.map +1 -0
  136. package/packages/tools/lib/dhf/document-compiler.d.ts.map +1 -1
  137. package/packages/tools/lib/dhf/document-compiler.js +13 -8
  138. package/packages/tools/lib/dhf/document-compiler.js.map +1 -1
  139. package/packages/tools/lib/dhf/document-registry.d.ts +16 -2
  140. package/packages/tools/lib/dhf/document-registry.d.ts.map +1 -1
  141. package/packages/tools/lib/dhf/document-registry.js +74 -23
  142. package/packages/tools/lib/dhf/document-registry.js.map +1 -1
  143. package/packages/tools/lib/dhf/index.d.ts +3 -0
  144. package/packages/tools/lib/dhf/index.d.ts.map +1 -1
  145. package/packages/tools/lib/dhf/index.js +4 -0
  146. package/packages/tools/lib/dhf/index.js.map +1 -1
  147. package/packages/tools/lib/dhf/query-engine.d.ts +12 -1
  148. package/packages/tools/lib/dhf/query-engine.d.ts.map +1 -1
  149. package/packages/tools/lib/dhf/query-engine.js +2 -1
  150. package/packages/tools/lib/dhf/query-engine.js.map +1 -1
  151. package/packages/tools/lib/dhf/query-executor.d.ts +72 -5
  152. package/packages/tools/lib/dhf/query-executor.d.ts.map +1 -1
  153. package/packages/tools/lib/dhf/query-executor.js +471 -81
  154. package/packages/tools/lib/dhf/query-executor.js.map +1 -1
  155. package/packages/tools/lib/dhf/script-runner.js +6 -6
  156. package/packages/tools/lib/dhf/script-runner.js.map +1 -1
  157. package/packages/tools/lib/dhf/standards-block.d.ts +40 -0
  158. package/packages/tools/lib/dhf/standards-block.d.ts.map +1 -0
  159. package/packages/tools/lib/dhf/standards-block.js +223 -0
  160. package/packages/tools/lib/dhf/standards-block.js.map +1 -0
  161. package/packages/tools/lib/dhf/standards-library.d.ts +123 -0
  162. package/packages/tools/lib/dhf/standards-library.d.ts.map +1 -0
  163. package/packages/tools/lib/dhf/standards-library.js +295 -0
  164. package/packages/tools/lib/dhf/standards-library.js.map +1 -0
  165. package/packages/tools/lib/dhf/standards-report.d.ts +189 -0
  166. package/packages/tools/lib/dhf/standards-report.d.ts.map +1 -0
  167. package/packages/tools/lib/dhf/standards-report.js +384 -0
  168. package/packages/tools/lib/dhf/standards-report.js.map +1 -0
  169. package/packages/tools/lib/dhf/template-lint.d.ts +42 -0
  170. package/packages/tools/lib/dhf/template-lint.d.ts.map +1 -0
  171. package/packages/tools/lib/dhf/template-lint.js +421 -0
  172. package/packages/tools/lib/dhf/template-lint.js.map +1 -0
  173. package/packages/tools/lib/dhf/template-resolver.d.ts.map +1 -1
  174. package/packages/tools/lib/dhf/template-resolver.js +18 -6
  175. package/packages/tools/lib/dhf/template-resolver.js.map +1 -1
  176. package/packages/tools/lib/import/column-mapper.d.ts +2 -2
  177. package/packages/tools/lib/import/column-mapper.d.ts.map +1 -1
  178. package/packages/tools/lib/import/column-mapper.js +3 -3
  179. package/packages/tools/lib/import/column-mapper.js.map +1 -1
  180. package/packages/tools/lib/importer/cameo-importer.js +2 -2
  181. package/packages/tools/lib/importer/cameo-importer.js.map +1 -1
  182. package/packages/tools/lib/importer/ea-importer.d.ts.map +1 -1
  183. package/packages/tools/lib/importer/ea-importer.js +4 -3
  184. package/packages/tools/lib/importer/ea-importer.js.map +1 -1
  185. package/packages/tools/lib/importer/owl-importer.d.ts.map +1 -1
  186. package/packages/tools/lib/importer/owl-importer.js +2 -3
  187. package/packages/tools/lib/importer/owl-importer.js.map +1 -1
  188. package/packages/tools/lib/index.d.ts +20 -3
  189. package/packages/tools/lib/index.d.ts.map +1 -1
  190. package/packages/tools/lib/index.js +19 -2
  191. package/packages/tools/lib/index.js.map +1 -1
  192. package/packages/tools/lib/language/generated/ast.d.ts +1344 -99
  193. package/packages/tools/lib/language/generated/ast.d.ts.map +1 -1
  194. package/packages/tools/lib/language/generated/ast.js +1066 -32
  195. package/packages/tools/lib/language/generated/ast.js.map +1 -1
  196. package/packages/tools/lib/language/generated/grammar.d.ts.map +1 -1
  197. package/packages/tools/lib/language/generated/grammar.js +5242 -1454
  198. package/packages/tools/lib/language/generated/grammar.js.map +1 -1
  199. package/packages/tools/lib/llm/chat-engine.d.ts +4 -3
  200. package/packages/tools/lib/llm/chat-engine.d.ts.map +1 -1
  201. package/packages/tools/lib/llm/chat-engine.js +15 -12
  202. package/packages/tools/lib/llm/chat-engine.js.map +1 -1
  203. package/packages/tools/lib/llm/generate-engine.d.ts +7 -2
  204. package/packages/tools/lib/llm/generate-engine.d.ts.map +1 -1
  205. package/packages/tools/lib/llm/generate-engine.js +22 -4
  206. package/packages/tools/lib/llm/generate-engine.js.map +1 -1
  207. package/packages/tools/lib/llm/index.d.ts +1 -0
  208. package/packages/tools/lib/llm/index.d.ts.map +1 -1
  209. package/packages/tools/lib/llm/index.js +1 -0
  210. package/packages/tools/lib/llm/index.js.map +1 -1
  211. package/packages/tools/lib/llm/model-context.d.ts +2 -2
  212. package/packages/tools/lib/llm/model-context.d.ts.map +1 -1
  213. package/packages/tools/lib/llm/model-context.js +7 -13
  214. package/packages/tools/lib/llm/model-context.js.map +1 -1
  215. package/packages/tools/lib/llm/sysml-guidance.d.ts +8 -0
  216. package/packages/tools/lib/llm/sysml-guidance.d.ts.map +1 -0
  217. package/packages/tools/lib/llm/sysml-guidance.js +28 -0
  218. package/packages/tools/lib/llm/sysml-guidance.js.map +1 -0
  219. package/packages/tools/lib/lock.d.ts +14 -8
  220. package/packages/tools/lib/lock.d.ts.map +1 -1
  221. package/packages/tools/lib/lock.js +97 -108
  222. package/packages/tools/lib/lock.js.map +1 -1
  223. package/packages/tools/lib/mcp/model-loader.d.ts +3 -0
  224. package/packages/tools/lib/mcp/model-loader.d.ts.map +1 -1
  225. package/packages/tools/lib/mcp/model-loader.js +9 -5
  226. package/packages/tools/lib/mcp/model-loader.js.map +1 -1
  227. package/packages/tools/lib/mcp/tools.d.ts +3 -0
  228. package/packages/tools/lib/mcp/tools.d.ts.map +1 -1
  229. package/packages/tools/lib/mcp/tools.js +8 -9
  230. package/packages/tools/lib/mcp/tools.js.map +1 -1
  231. package/packages/tools/lib/model/activity-notation.d.ts +54 -0
  232. package/packages/tools/lib/model/activity-notation.d.ts.map +1 -0
  233. package/packages/tools/lib/model/activity-notation.js +208 -0
  234. package/packages/tools/lib/model/activity-notation.js.map +1 -0
  235. package/packages/tools/lib/model/builder.d.ts +3 -0
  236. package/packages/tools/lib/model/builder.d.ts.map +1 -1
  237. package/packages/tools/lib/model/builder.js +956 -62
  238. package/packages/tools/lib/model/builder.js.map +1 -1
  239. package/packages/tools/lib/model/config-loader.d.ts +19 -25
  240. package/packages/tools/lib/model/config-loader.d.ts.map +1 -1
  241. package/packages/tools/lib/model/config-loader.js +51 -233
  242. package/packages/tools/lib/model/config-loader.js.map +1 -1
  243. package/packages/tools/lib/model/config.d.ts +42 -213
  244. package/packages/tools/lib/model/config.d.ts.map +1 -1
  245. package/packages/tools/lib/model/config.js +11 -9
  246. package/packages/tools/lib/model/config.js.map +1 -1
  247. package/packages/tools/lib/model/effective-scope.d.ts +74 -0
  248. package/packages/tools/lib/model/effective-scope.d.ts.map +1 -0
  249. package/packages/tools/lib/model/effective-scope.js +133 -0
  250. package/packages/tools/lib/model/effective-scope.js.map +1 -0
  251. package/packages/tools/lib/model/ir-identity.d.ts +94 -0
  252. package/packages/tools/lib/model/ir-identity.d.ts.map +1 -0
  253. package/packages/tools/lib/model/ir-identity.js +178 -0
  254. package/packages/tools/lib/model/ir-identity.js.map +1 -0
  255. package/packages/tools/lib/model/kind-registry.d.ts +134 -1
  256. package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
  257. package/packages/tools/lib/model/kind-registry.js +186 -4
  258. package/packages/tools/lib/model/kind-registry.js.map +1 -1
  259. package/packages/tools/lib/model/layer-resolver.js +1 -1
  260. package/packages/tools/lib/model/layer-resolver.js.map +1 -1
  261. package/packages/tools/lib/model/manifest.d.ts +8 -0
  262. package/packages/tools/lib/model/manifest.d.ts.map +1 -1
  263. package/packages/tools/lib/model/manifest.js +3 -0
  264. package/packages/tools/lib/model/manifest.js.map +1 -1
  265. package/packages/tools/lib/model/methodology-loader.d.ts +19 -24
  266. package/packages/tools/lib/model/methodology-loader.d.ts.map +1 -1
  267. package/packages/tools/lib/model/methodology-loader.js +179 -176
  268. package/packages/tools/lib/model/methodology-loader.js.map +1 -1
  269. package/packages/tools/lib/model/methodology-resolver.d.ts +115 -0
  270. package/packages/tools/lib/model/methodology-resolver.d.ts.map +1 -0
  271. package/packages/tools/lib/model/methodology-resolver.js +317 -0
  272. package/packages/tools/lib/model/methodology-resolver.js.map +1 -0
  273. package/packages/tools/lib/model/naming.d.ts +57 -0
  274. package/packages/tools/lib/model/naming.d.ts.map +1 -0
  275. package/packages/tools/lib/model/naming.js +69 -0
  276. package/packages/tools/lib/model/naming.js.map +1 -0
  277. package/packages/tools/lib/model/native-project.d.ts +130 -0
  278. package/packages/tools/lib/model/native-project.d.ts.map +1 -0
  279. package/packages/tools/lib/model/native-project.js +580 -0
  280. package/packages/tools/lib/model/native-project.js.map +1 -0
  281. package/packages/tools/lib/model/ontology-loader.d.ts +34 -21
  282. package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -1
  283. package/packages/tools/lib/model/ontology-loader.js +343 -614
  284. package/packages/tools/lib/model/ontology-loader.js.map +1 -1
  285. package/packages/tools/lib/model/package-manifest.d.ts +37 -0
  286. package/packages/tools/lib/model/package-manifest.d.ts.map +1 -0
  287. package/packages/tools/lib/model/package-manifest.js +96 -0
  288. package/packages/tools/lib/model/package-manifest.js.map +1 -0
  289. package/packages/tools/lib/model/parser-utils.d.ts +31 -0
  290. package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
  291. package/packages/tools/lib/model/parser-utils.js +89 -1
  292. package/packages/tools/lib/model/parser-utils.js.map +1 -1
  293. package/packages/tools/lib/model/paths.d.ts +10 -4
  294. package/packages/tools/lib/model/paths.d.ts.map +1 -1
  295. package/packages/tools/lib/model/paths.js +10 -4
  296. package/packages/tools/lib/model/paths.js.map +1 -1
  297. package/packages/tools/lib/model/project-conversion.d.ts +226 -0
  298. package/packages/tools/lib/model/project-conversion.d.ts.map +1 -0
  299. package/packages/tools/lib/model/project-conversion.js +946 -0
  300. package/packages/tools/lib/model/project-conversion.js.map +1 -0
  301. package/packages/tools/lib/model/relationship-legality.d.ts +27 -0
  302. package/packages/tools/lib/model/relationship-legality.d.ts.map +1 -1
  303. package/packages/tools/lib/model/relationship-legality.js.map +1 -1
  304. package/packages/tools/lib/model/relationship-registry.d.ts +93 -1
  305. package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
  306. package/packages/tools/lib/model/relationship-registry.js +217 -2
  307. package/packages/tools/lib/model/relationship-registry.js.map +1 -1
  308. package/packages/tools/lib/model/semantic.d.ts +73 -0
  309. package/packages/tools/lib/model/semantic.d.ts.map +1 -1
  310. package/packages/tools/lib/model/semantic.js +6 -0
  311. package/packages/tools/lib/model/semantic.js.map +1 -1
  312. package/packages/tools/lib/model/settings-boundary.d.ts +19 -0
  313. package/packages/tools/lib/model/settings-boundary.d.ts.map +1 -0
  314. package/packages/tools/lib/model/settings-boundary.js +118 -0
  315. package/packages/tools/lib/model/settings-boundary.js.map +1 -0
  316. package/packages/tools/lib/model/short-id.js +3 -3
  317. package/packages/tools/lib/model/short-id.js.map +1 -1
  318. package/packages/tools/lib/model/source-graph.d.ts.map +1 -1
  319. package/packages/tools/lib/model/source-graph.js +5 -1
  320. package/packages/tools/lib/model/source-graph.js.map +1 -1
  321. package/packages/tools/lib/model/source-provenance.d.ts +112 -0
  322. package/packages/tools/lib/model/source-provenance.d.ts.map +1 -0
  323. package/packages/tools/lib/model/source-provenance.js +169 -0
  324. package/packages/tools/lib/model/source-provenance.js.map +1 -0
  325. package/packages/tools/lib/model/sysml-ir.d.ts +9 -0
  326. package/packages/tools/lib/model/sysml-ir.d.ts.map +1 -0
  327. package/packages/tools/lib/model/sysml-ir.js +105 -0
  328. package/packages/tools/lib/model/sysml-ir.js.map +1 -0
  329. package/packages/tools/lib/model/view-deriver.d.ts +10 -1
  330. package/packages/tools/lib/model/view-deriver.d.ts.map +1 -1
  331. package/packages/tools/lib/model/view-deriver.js +139 -11
  332. package/packages/tools/lib/model/view-deriver.js.map +1 -1
  333. package/packages/tools/lib/model/view-kinds.d.ts +2 -0
  334. package/packages/tools/lib/model/view-kinds.d.ts.map +1 -1
  335. package/packages/tools/lib/model/view-kinds.js +11 -0
  336. package/packages/tools/lib/model/view-kinds.js.map +1 -1
  337. package/packages/tools/lib/ontology/owl-exporter.d.ts +2 -2
  338. package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -1
  339. package/packages/tools/lib/ontology/owl-exporter.js +12 -12
  340. package/packages/tools/lib/ontology/owl-exporter.js.map +1 -1
  341. package/packages/tools/lib/operations/ai-authoring.d.ts +24 -0
  342. package/packages/tools/lib/operations/ai-authoring.d.ts.map +1 -0
  343. package/packages/tools/lib/operations/ai-authoring.js +77 -0
  344. package/packages/tools/lib/operations/ai-authoring.js.map +1 -0
  345. package/packages/tools/lib/operations/authoring.d.ts +40 -0
  346. package/packages/tools/lib/operations/authoring.d.ts.map +1 -0
  347. package/packages/tools/lib/operations/authoring.js +56 -0
  348. package/packages/tools/lib/operations/authoring.js.map +1 -0
  349. package/packages/tools/lib/operations/index.d.ts +2 -0
  350. package/packages/tools/lib/operations/index.d.ts.map +1 -1
  351. package/packages/tools/lib/operations/index.js +2 -0
  352. package/packages/tools/lib/operations/index.js.map +1 -1
  353. package/packages/tools/lib/operations/project-snapshot.d.ts +28 -3
  354. package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
  355. package/packages/tools/lib/operations/project-snapshot.js +79 -30
  356. package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
  357. package/packages/tools/lib/protocol/messages.d.ts +381 -12
  358. package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
  359. package/packages/tools/lib/serializer/csv-io.d.ts +7 -7
  360. package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -1
  361. package/packages/tools/lib/serializer/csv-io.js +11 -11
  362. package/packages/tools/lib/serializer/csv-io.js.map +1 -1
  363. package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -1
  364. package/packages/tools/lib/serializer/sysml-generator.js +34 -2
  365. package/packages/tools/lib/serializer/sysml-generator.js.map +1 -1
  366. package/packages/tools/lib/server/config-resolver.d.ts +8 -4
  367. package/packages/tools/lib/server/config-resolver.d.ts.map +1 -1
  368. package/packages/tools/lib/server/config-resolver.js +25 -44
  369. package/packages/tools/lib/server/config-resolver.js.map +1 -1
  370. package/packages/tools/lib/server/conflict-policy.d.ts +44 -0
  371. package/packages/tools/lib/server/conflict-policy.d.ts.map +1 -0
  372. package/packages/tools/lib/server/conflict-policy.js +94 -0
  373. package/packages/tools/lib/server/conflict-policy.js.map +1 -0
  374. package/packages/tools/lib/server/dev-server.d.ts +32 -2
  375. package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
  376. package/packages/tools/lib/server/dev-server.js +875 -54
  377. package/packages/tools/lib/server/dev-server.js.map +1 -1
  378. package/packages/tools/lib/server/element-writer.d.ts +11 -0
  379. package/packages/tools/lib/server/element-writer.d.ts.map +1 -0
  380. package/packages/tools/lib/server/element-writer.js +123 -0
  381. package/packages/tools/lib/server/element-writer.js.map +1 -0
  382. package/packages/tools/lib/server/file-watcher.d.ts +4 -1
  383. package/packages/tools/lib/server/file-watcher.d.ts.map +1 -1
  384. package/packages/tools/lib/server/file-watcher.js +17 -7
  385. package/packages/tools/lib/server/file-watcher.js.map +1 -1
  386. package/packages/tools/lib/server/mutation-domain.d.ts +22 -0
  387. package/packages/tools/lib/server/mutation-domain.d.ts.map +1 -0
  388. package/packages/tools/lib/server/mutation-domain.js +87 -0
  389. package/packages/tools/lib/server/mutation-domain.js.map +1 -0
  390. package/packages/tools/lib/server/package-source.d.ts +26 -0
  391. package/packages/tools/lib/server/package-source.d.ts.map +1 -0
  392. package/packages/tools/lib/server/package-source.js +81 -0
  393. package/packages/tools/lib/server/package-source.js.map +1 -0
  394. package/packages/tools/lib/server/package-writer.d.ts +94 -0
  395. package/packages/tools/lib/server/package-writer.d.ts.map +1 -0
  396. package/packages/tools/lib/server/package-writer.js +317 -0
  397. package/packages/tools/lib/server/package-writer.js.map +1 -0
  398. package/packages/tools/lib/server/persistor.d.ts +81 -6
  399. package/packages/tools/lib/server/persistor.d.ts.map +1 -1
  400. package/packages/tools/lib/server/persistor.js +173 -44
  401. package/packages/tools/lib/server/persistor.js.map +1 -1
  402. package/packages/tools/lib/server/relationship-writer.d.ts +41 -5
  403. package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -1
  404. package/packages/tools/lib/server/relationship-writer.js +157 -13
  405. package/packages/tools/lib/server/relationship-writer.js.map +1 -1
  406. package/packages/tools/lib/server/rule-policy-writer.d.ts +40 -0
  407. package/packages/tools/lib/server/rule-policy-writer.d.ts.map +1 -0
  408. package/packages/tools/lib/server/rule-policy-writer.js +124 -0
  409. package/packages/tools/lib/server/rule-policy-writer.js.map +1 -0
  410. package/packages/tools/lib/server/runtime-budget.d.ts +14 -0
  411. package/packages/tools/lib/server/runtime-budget.d.ts.map +1 -0
  412. package/packages/tools/lib/server/runtime-budget.js +15 -0
  413. package/packages/tools/lib/server/runtime-budget.js.map +1 -0
  414. package/packages/tools/lib/server/sysml-notation.d.ts +36 -0
  415. package/packages/tools/lib/server/sysml-notation.d.ts.map +1 -0
  416. package/packages/tools/lib/server/sysml-notation.js +104 -0
  417. package/packages/tools/lib/server/sysml-notation.js.map +1 -0
  418. package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -1
  419. package/packages/tools/lib/server/view-layout-store.js +1 -0
  420. package/packages/tools/lib/server/view-layout-store.js.map +1 -1
  421. package/packages/tools/lib/sysml-ir/generated/sysml-derivations.d.ts +9 -0
  422. package/packages/tools/lib/sysml-ir/generated/sysml-derivations.d.ts.map +1 -0
  423. package/packages/tools/lib/sysml-ir/generated/sysml-derivations.js +315 -0
  424. package/packages/tools/lib/sysml-ir/generated/sysml-derivations.js.map +1 -0
  425. package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.d.ts +5206 -0
  426. package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.d.ts.map +1 -0
  427. package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.js +1933 -0
  428. package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.js.map +1 -0
  429. package/packages/tools/lib/sysml-ir/index.d.ts +3 -0
  430. package/packages/tools/lib/sysml-ir/index.d.ts.map +1 -0
  431. package/packages/tools/lib/sysml-ir/index.js +3 -0
  432. package/packages/tools/lib/sysml-ir/index.js.map +1 -0
  433. package/packages/tools/lib/sysml-ir/ir.d.ts +50 -0
  434. package/packages/tools/lib/sysml-ir/ir.d.ts.map +1 -0
  435. package/packages/tools/lib/sysml-ir/ir.js +2 -0
  436. package/packages/tools/lib/sysml-ir/ir.js.map +1 -0
  437. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts +3 -0
  438. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts.map +1 -0
  439. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js +97 -0
  440. package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js.map +1 -0
  441. package/packages/tools/lib/sysmlc/index.d.ts +2 -0
  442. package/packages/tools/lib/sysmlc/index.d.ts.map +1 -0
  443. package/packages/tools/lib/sysmlc/index.js +7 -0
  444. package/packages/tools/lib/sysmlc/index.js.map +1 -0
  445. package/packages/tools/lib/sysmlc/server.d.ts +29 -0
  446. package/packages/tools/lib/sysmlc/server.d.ts.map +1 -0
  447. package/packages/tools/lib/sysmlc/server.js +168 -0
  448. package/packages/tools/lib/sysmlc/server.js.map +1 -0
  449. package/packages/tools/lib/toolchain/default-registry.d.ts +12 -0
  450. package/packages/tools/lib/toolchain/default-registry.d.ts.map +1 -0
  451. package/packages/tools/lib/toolchain/default-registry.js +28 -0
  452. package/packages/tools/lib/toolchain/default-registry.js.map +1 -0
  453. package/packages/tools/lib/toolchain/diagnostic.d.ts +57 -0
  454. package/packages/tools/lib/toolchain/diagnostic.d.ts.map +1 -0
  455. package/packages/tools/lib/toolchain/diagnostic.js +69 -0
  456. package/packages/tools/lib/toolchain/diagnostic.js.map +1 -0
  457. package/packages/tools/lib/toolchain/effective.d.ts +36 -0
  458. package/packages/tools/lib/toolchain/effective.d.ts.map +1 -0
  459. package/packages/tools/lib/toolchain/effective.js +91 -0
  460. package/packages/tools/lib/toolchain/effective.js.map +1 -0
  461. package/packages/tools/lib/toolchain/index.d.ts +11 -0
  462. package/packages/tools/lib/toolchain/index.d.ts.map +1 -0
  463. package/packages/tools/lib/toolchain/index.js +21 -0
  464. package/packages/tools/lib/toolchain/index.js.map +1 -0
  465. package/packages/tools/lib/toolchain/lowering.d.ts +63 -0
  466. package/packages/tools/lib/toolchain/lowering.d.ts.map +1 -0
  467. package/packages/tools/lib/toolchain/lowering.js +100 -0
  468. package/packages/tools/lib/toolchain/lowering.js.map +1 -0
  469. package/packages/tools/lib/toolchain/operations.d.ts +87 -0
  470. package/packages/tools/lib/toolchain/operations.d.ts.map +1 -0
  471. package/packages/tools/lib/toolchain/operations.js +111 -0
  472. package/packages/tools/lib/toolchain/operations.js.map +1 -0
  473. package/packages/tools/lib/toolchain/process.d.ts +45 -0
  474. package/packages/tools/lib/toolchain/process.d.ts.map +1 -0
  475. package/packages/tools/lib/toolchain/process.js +125 -0
  476. package/packages/tools/lib/toolchain/process.js.map +1 -0
  477. package/packages/tools/lib/toolchain/protocol.d.ts +122 -0
  478. package/packages/tools/lib/toolchain/protocol.d.ts.map +1 -0
  479. package/packages/tools/lib/toolchain/protocol.js +74 -0
  480. package/packages/tools/lib/toolchain/protocol.js.map +1 -0
  481. package/packages/tools/lib/toolchain/providers/internal-kpar.d.ts +9 -0
  482. package/packages/tools/lib/toolchain/providers/internal-kpar.d.ts.map +1 -0
  483. package/packages/tools/lib/toolchain/providers/internal-kpar.js +84 -0
  484. package/packages/tools/lib/toolchain/providers/internal-kpar.js.map +1 -0
  485. package/packages/tools/lib/toolchain/providers/internal.d.ts +33 -0
  486. package/packages/tools/lib/toolchain/providers/internal.d.ts.map +1 -0
  487. package/packages/tools/lib/toolchain/providers/internal.js +286 -0
  488. package/packages/tools/lib/toolchain/providers/internal.js.map +1 -0
  489. package/packages/tools/lib/toolchain/providers/sysand.d.ts +12 -0
  490. package/packages/tools/lib/toolchain/providers/sysand.d.ts.map +1 -0
  491. package/packages/tools/lib/toolchain/providers/sysand.js +110 -0
  492. package/packages/tools/lib/toolchain/providers/sysand.js.map +1 -0
  493. package/packages/tools/lib/toolchain/providers/syside.d.ts +24 -0
  494. package/packages/tools/lib/toolchain/providers/syside.d.ts.map +1 -0
  495. package/packages/tools/lib/toolchain/providers/syside.js +208 -0
  496. package/packages/tools/lib/toolchain/providers/syside.js.map +1 -0
  497. package/packages/tools/lib/toolchain/registry.d.ts +192 -0
  498. package/packages/tools/lib/toolchain/registry.d.ts.map +1 -0
  499. package/packages/tools/lib/toolchain/registry.js +130 -0
  500. package/packages/tools/lib/toolchain/registry.js.map +1 -0
  501. package/packages/tools/lib/toolchain/schema.d.ts +30 -0
  502. package/packages/tools/lib/toolchain/schema.d.ts.map +1 -0
  503. package/packages/tools/lib/toolchain/schema.js +112 -0
  504. package/packages/tools/lib/toolchain/schema.js.map +1 -0
  505. package/packages/tools/lib/toolchain/sysmlc-client.d.ts +77 -0
  506. package/packages/tools/lib/toolchain/sysmlc-client.d.ts.map +1 -0
  507. package/packages/tools/lib/toolchain/sysmlc-client.js +0 -0
  508. package/packages/tools/lib/toolchain/sysmlc-client.js.map +1 -0
  509. package/packages/tools/lib/validator/architecture-validator.d.ts +8 -1
  510. package/packages/tools/lib/validator/architecture-validator.d.ts.map +1 -1
  511. package/packages/tools/lib/validator/architecture-validator.js +25 -1
  512. package/packages/tools/lib/validator/architecture-validator.js.map +1 -1
  513. package/packages/tools/lib/validator/behavior-validator.d.ts +1 -1
  514. package/packages/tools/lib/validator/behavior-validator.js +1 -1
  515. package/packages/tools/lib/validator/builtin-rules.d.ts +16 -0
  516. package/packages/tools/lib/validator/builtin-rules.d.ts.map +1 -0
  517. package/packages/tools/lib/validator/builtin-rules.js +62 -0
  518. package/packages/tools/lib/validator/builtin-rules.js.map +1 -0
  519. package/packages/tools/lib/validator/constraint-eval.d.ts +31 -0
  520. package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
  521. package/packages/tools/lib/validator/constraint-eval.js +164 -7
  522. package/packages/tools/lib/validator/constraint-eval.js.map +1 -1
  523. package/packages/tools/lib/validator/constraint-loader.d.ts +22 -4
  524. package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -1
  525. package/packages/tools/lib/validator/constraint-loader.js +100 -27
  526. package/packages/tools/lib/validator/constraint-loader.js.map +1 -1
  527. package/packages/tools/lib/validator/rule-engine.d.ts +2 -1
  528. package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
  529. package/packages/tools/lib/validator/rule-engine.js +56 -5
  530. package/packages/tools/lib/validator/rule-engine.js.map +1 -1
  531. package/packages/tools/lib/validator/sysml-constraints.d.ts +64 -0
  532. package/packages/tools/lib/validator/sysml-constraints.d.ts.map +1 -0
  533. package/packages/tools/lib/validator/sysml-constraints.js +251 -0
  534. package/packages/tools/lib/validator/sysml-constraints.js.map +1 -0
  535. package/packages/tools/lib/validator/types.d.ts +33 -0
  536. package/packages/tools/lib/validator/types.d.ts.map +1 -1
  537. package/packages/tools/lib/version.d.ts +2 -0
  538. package/packages/tools/lib/version.d.ts.map +1 -0
  539. package/packages/tools/lib/version.js +26 -0
  540. package/packages/tools/lib/version.js.map +1 -0
  541. package/packages/tools/src/grammar/memo-sysml.langium +517 -41
  542. package/packages/tools/lib/model/dimension-filter.d.ts +0 -33
  543. package/packages/tools/lib/model/dimension-filter.d.ts.map +0 -1
  544. package/packages/tools/lib/model/dimension-filter.js +0 -57
  545. package/packages/tools/lib/model/dimension-filter.js.map +0 -1
  546. package/packages/tools/lib/model/toolchain.d.ts +0 -12
  547. package/packages/tools/lib/model/toolchain.d.ts.map +0 -1
  548. package/packages/tools/lib/model/toolchain.js +0 -92
  549. package/packages/tools/lib/model/toolchain.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir-identity.d.ts","sourceRoot":"","sources":["../../src/model/ir-identity.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAO1D;AAED,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,CAS7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,eAAe,CAU1F;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAS1E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,EAClB,qBAAqB,CAAC,EAAE,MAAM,GAC/B,eAAe,CAajB;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,MAAM,GACtB,MAAM,GAAG,SAAS,CAEpB;AAID,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAUlF;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7F;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACrB,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CACxC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,EAC7B,QAAQ,EAAE,aAAa,GACxB;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAuBlF"}
@@ -0,0 +1,178 @@
1
+ // ─── IR identity: the address every authoring write is made against ──────────
2
+ //
3
+ // Session 3 made the canonical IR the ingestion boundary. Authoring still
4
+ // addressed elements the old way — by authored name, matched with a regular
5
+ // expression over the source text — so two declarations with the same name in
6
+ // different namespaces were the same target as far as a write was concerned,
7
+ // and a rename made the write silently miss.
8
+ //
9
+ // An IR identity is `file-URI + declaration path + metaclass`. It is positional
10
+ // by construction, which is the point: inserting a declaration ahead of another
11
+ // changes the second one's address, so an identity minted against an older
12
+ // revision is *detectably* old rather than quietly pointing at a neighbour.
13
+ // Every write therefore either resolves its identity against the current IR or
14
+ // fails loudly — `StaleIrIdentityError`, naming the identity and what it found.
15
+ //
16
+ // Nothing here reads the filesystem or spawns anything: it is a resolver over
17
+ // an IR that some lowering provider already produced.
18
+ // ─────────────────────────────────────────────────────────────────────────────
19
+ import { resolve } from 'node:path';
20
+ import { pathToFileURL } from 'node:url';
21
+ /**
22
+ * A write was made against an identity the current IR does not have.
23
+ *
24
+ * Loud on purpose. The alternative — falling back to a name lookup — is how a
25
+ * write ends up editing the wrong element, which is the failure this whole
26
+ * module exists to make impossible.
27
+ */
28
+ export class StaleIrIdentityError extends Error {
29
+ identityId;
30
+ constructor(identityId, detail) {
31
+ super(`The edit targets "${identityId}", which is not in the current model revision: ${detail}. `
32
+ + 'Reload the element and repeat the edit; no file was written.');
33
+ this.identityId = identityId;
34
+ this.name = 'StaleIrIdentityError';
35
+ }
36
+ }
37
+ /**
38
+ * Index one IR for identity resolution.
39
+ *
40
+ * Both directions are needed and neither is derivable cheaply from the other:
41
+ * the client holds Memo element IDs and has to mint an identity from one, and
42
+ * the server holds an identity and has to find what it names.
43
+ */
44
+ export function buildIrIdentityIndex(ir) {
45
+ const byMemoElement = {};
46
+ const byIdentity = new Map();
47
+ for (const element of ir?.elements ?? []) {
48
+ const memoElementId = element.kind === 'mapped' ? element.memoElementId : undefined;
49
+ byIdentity.set(element.identity.id, { identity: element.identity, memoElementId });
50
+ if (memoElementId)
51
+ byMemoElement[memoElementId] = element.identity.id;
52
+ }
53
+ return { byMemoElement, byIdentity };
54
+ }
55
+ /**
56
+ * Rebuild an index from the compact table alone.
57
+ *
58
+ * The whole IR is not shipped with a model update — `standardProperties` carry
59
+ * every declared property of every node, and a surface that only needs to
60
+ * *address* an element does not need its contents. The identity ID is a
61
+ * self-describing string, so the table is enough to reconstruct everything the
62
+ * resolver uses.
63
+ */
64
+ export function indexFromIdentityTable(table) {
65
+ const byMemoElement = {};
66
+ const byIdentity = new Map();
67
+ for (const [memoElementId, identityId] of Object.entries(table ?? {})) {
68
+ const identity = parseSysmlIdentityId(identityId);
69
+ if (!identity)
70
+ continue;
71
+ byMemoElement[memoElementId] = identityId;
72
+ byIdentity.set(identityId, { identity, memoElementId });
73
+ }
74
+ return { byMemoElement, byIdentity };
75
+ }
76
+ /**
77
+ * Read an identity ID back into its parts.
78
+ *
79
+ * `file:///…/model/a.sysml#members[0]/members[2]:PartUsage`. The file URI may
80
+ * itself contain `#` only if percent-encoded, and the metaclass never contains
81
+ * `:`, so splitting at the first `#` and the last `:` is unambiguous.
82
+ */
83
+ export function parseSysmlIdentityId(id) {
84
+ const hash = id.indexOf('#');
85
+ const colon = id.lastIndexOf(':');
86
+ if (hash < 0 || colon < hash)
87
+ return undefined;
88
+ const fileUri = id.slice(0, hash);
89
+ const declarationPath = id.slice(hash + 1, colon);
90
+ const metaclass = id.slice(colon + 1);
91
+ if (!fileUri || !declarationPath || !metaclass)
92
+ return undefined;
93
+ return { fileUri, declarationPath, metaclass, id };
94
+ }
95
+ /**
96
+ * The compact table shipped with a model update.
97
+ *
98
+ * The whole IR is not sent: its `standardProperties` carry every declared
99
+ * property of every node, and a client that only needs to address an element
100
+ * does not need its contents.
101
+ */
102
+ export function irIdentityTable(ir) {
103
+ return buildIrIdentityIndex(ir).byMemoElement;
104
+ }
105
+ /**
106
+ * Resolve an identity ID against the current IR, or fail loudly.
107
+ *
108
+ * `expectedMemoElementId`, when given, is checked too: an identity that still
109
+ * exists but now names a different element is exactly as stale as one that has
110
+ * disappeared, and it is the more dangerous of the two.
111
+ */
112
+ export function requireIrIdentity(index, identityId, expectedMemoElementId) {
113
+ const found = index.byIdentity.get(identityId);
114
+ if (!found) {
115
+ throw new StaleIrIdentityError(identityId, 'no declaration in the current IR has that identity');
116
+ }
117
+ if (expectedMemoElementId !== undefined && found.memoElementId !== expectedMemoElementId) {
118
+ throw new StaleIrIdentityError(identityId, `it now names ${found.memoElementId ? `element "${found.memoElementId}"` : 'a declaration Memo does not project'}, `
119
+ + `not "${expectedMemoElementId}"`);
120
+ }
121
+ return found;
122
+ }
123
+ /** The identity a client should quote when it writes to this element. */
124
+ export function identityForMemoElement(index, memoElementId) {
125
+ return index.byMemoElement[memoElementId];
126
+ }
127
+ // ─── Locating the declaration an identity names ─────────────────────────────
128
+ /** `members[3]/members[1]` → `[3, 1]`. Any other shape is not a path we minted. */
129
+ export function parseDeclarationPath(declarationPath) {
130
+ const segments = declarationPath.split('/').filter(Boolean);
131
+ if (segments.length === 0)
132
+ return undefined;
133
+ const indexes = [];
134
+ for (const segment of segments) {
135
+ const match = /^members\[(\d+)\]$/.exec(segment);
136
+ if (!match)
137
+ return undefined;
138
+ indexes.push(Number(match[1]));
139
+ }
140
+ return indexes;
141
+ }
142
+ /** The project-relative file an identity's URI names, given the project root. */
143
+ export function identityFile(identity, projectRoot) {
144
+ const roots = pathToFileURL(resolve(projectRoot)).href.replace(/\/$/, '');
145
+ if (!identity.fileUri.startsWith(`${roots}/`))
146
+ return undefined;
147
+ return decodeURIComponent(identity.fileUri.slice(roots.length + 1));
148
+ }
149
+ /** True when this identity was minted for that project-relative file. */
150
+ export function identityNamesFile(identity, projectRoot, relativePath) {
151
+ return identityFile(identity, projectRoot) === relativePath.replaceAll('\\', '/');
152
+ }
153
+ /**
154
+ * Walk a parsed document to the declaration an identity addresses.
155
+ *
156
+ * The metaclass is verified, not assumed: a path that still resolves but to a
157
+ * different kind of declaration means the file was edited underneath this
158
+ * identity, and continuing would rewrite the wrong lines.
159
+ */
160
+ export function resolveDeclarationByIdentity(root, identity) {
161
+ const path = parseDeclarationPath(identity.declarationPath);
162
+ if (!path) {
163
+ throw new StaleIrIdentityError(identity.id, `"${identity.declarationPath}" is not a declaration path`);
164
+ }
165
+ let node = root;
166
+ for (const [depth, index] of path.entries()) {
167
+ const members = node?.members;
168
+ if (!Array.isArray(members) || index >= members.length) {
169
+ throw new StaleIrIdentityError(identity.id, `the source no longer has a declaration at ${path.slice(0, depth + 1).map(i => `members[${i}]`).join('/')}`);
170
+ }
171
+ node = members[index];
172
+ }
173
+ if (node?.$type !== identity.metaclass) {
174
+ throw new StaleIrIdentityError(identity.id, `that position now holds a ${node?.$type ?? 'nothing'}, not a ${identity.metaclass}`);
175
+ }
176
+ return node;
177
+ }
178
+ //# sourceMappingURL=ir-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir-identity.js","sourceRoot":"","sources":["../../src/model/ir-identity.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,25 @@
1
- import type { KindDefinition, SysMLConstruct } from './config.js';
1
+ import type { SysMLConstruct } from './config.js';
2
+ /**
3
+ * A kind as the registry reports it.
4
+ *
5
+ * This shape used to live in `config.ts`, where a YAML `kinds:` block could
6
+ * declare one. Kinds come from the ontology's own `part def` / `item def`
7
+ * declarations now, so the shape belongs to the registry that derives it.
8
+ */
9
+ export interface KindDefinition {
10
+ /** Human-readable label */
11
+ label: string;
12
+ /** Architecture layer this kind belongs to */
13
+ layer?: string;
14
+ /** SysML v2 construct this kind maps to */
15
+ sysmlConstruct: SysMLConstruct;
16
+ /** Icon identifier for the palette/diagram */
17
+ icon?: string;
18
+ /** Template file for new instances */
19
+ template?: string;
20
+ /** Default attributes for new instances */
21
+ defaultAttributes?: Record<string, string>;
22
+ }
2
23
  import type { ParsedDocument } from './parser-utils.js';
3
24
  import type { KindDefinitionDTO } from './relationship-legality.js';
4
25
  /** Entry in the KindRegistry, matching KindDefinition shape */
@@ -25,6 +46,29 @@ export interface KindRegistryEntry {
25
46
  isAbstract?: boolean;
26
47
  /** Namespace segments mirrored by the ontology source folders. */
27
48
  namespace?: string[];
49
+ /**
50
+ * Fully qualified name, e.g. `memo::ontology::assurance::safety_risk::Hazard`.
51
+ *
52
+ * This is the registry's real identity. `name` is a short index into it,
53
+ * which resolves only while it is unambiguous — see `getCollisions`.
54
+ */
55
+ qualifiedName?: string;
56
+ /** Source file this definition was declared in. */
57
+ sourceFile?: string;
58
+ }
59
+ /**
60
+ * Two definitions sharing a short name.
61
+ *
62
+ * Previously the second silently replaced the first in a `Map` keyed by short
63
+ * name, so which one survived depended on file iteration order and the loss was
64
+ * invisible. Collisions are now recorded and surfaced as load diagnostics.
65
+ */
66
+ export interface KindNameCollision {
67
+ shortName: string;
68
+ /** Qualified names competing for the short name, in discovery order. */
69
+ qualifiedNames: string[];
70
+ /** Files declaring them, aligned with `qualifiedNames`. */
71
+ sourceFiles: string[];
28
72
  }
29
73
  /**
30
74
  * Registry that discovers kinds from SysML AST Definition nodes.
@@ -32,6 +76,27 @@ export interface KindRegistryEntry {
32
76
  */
33
77
  export declare class KindRegistry {
34
78
  private readonly kinds;
79
+ /**
80
+ * Attribute values bound by a `view def`, keyed by definition name, with the
81
+ * definition's own supertype chain already merged in.
82
+ *
83
+ * A view usage inherits these — `view mainScreenLayout : MemoScreenLayoutView`
84
+ * gets that definition's `viewKind` without restating it, and SysIDE in fact
85
+ * REJECTS restating it ("Cannot override a binding feature value"). So the
86
+ * definition is the only place the value can live, and consumers resolve a
87
+ * usage's presentation by falling back here.
88
+ *
89
+ * View definitions are not registered as kinds: they classify views, not
90
+ * model elements, and adding them to the kind extent would put them in the
91
+ * Explorer and in kind counts where they do not belong.
92
+ */
93
+ private readonly viewDefaults;
94
+ private readonly viewSuperTypes;
95
+ /** short name → the qualified name it currently resolves to. */
96
+ private readonly byQualifiedName;
97
+ /** qualified name → declaring file, for collision diagnostics. */
98
+ private readonly sourceFiles;
99
+ private readonly collisions;
35
100
  /** Number of registered kinds */
36
101
  get size(): number;
37
102
  /**
@@ -39,6 +104,11 @@ export declare class KindRegistry {
39
104
  * Returns undefined if the kind is not registered.
40
105
  */
41
106
  getKind(name: string): KindRegistryEntry | undefined;
107
+ /**
108
+ * Attribute values a view usage inherits from its `view def`, resolved up
109
+ * the definition's specialization chain (nearest declaration wins).
110
+ */
111
+ getViewDefaults(viewDefName: string | undefined): Record<string, string> | undefined;
42
112
  /**
43
113
  * Convert a registry entry to a KindDefinition (for backward compat with builder).
44
114
  */
@@ -81,6 +151,44 @@ export declare class KindRegistry {
81
151
  }[];
82
152
  /** Register a kind manually (for testing or config fallback) */
83
153
  register(entry: KindRegistryEntry): void;
154
+ /**
155
+ * Track qualified identity alongside the short-name map.
156
+ *
157
+ * Short-name lookup is kept as-is so every existing caller keeps working;
158
+ * what changes is that a shadowed definition is no longer lost silently.
159
+ * A re-registration of the SAME qualified name is not a collision — that
160
+ * happens legitimately when a registry is copied in `withProjectExtensions`.
161
+ */
162
+ private recordIdentity;
163
+ /**
164
+ * Short names claimed by more than one qualified definition.
165
+ *
166
+ * Callers surface these as load diagnostics: a reference to an ambiguous
167
+ * short name cannot be resolved by load order and needs qualifying.
168
+ */
169
+ getCollisions(): KindNameCollision[];
170
+ /** Qualified name a short name currently resolves to. */
171
+ getQualifiedName(shortName: string): string | undefined;
172
+ /**
173
+ * Give a kind the placement of the kind it specializes, wherever its own
174
+ * declaring path could not supply one.
175
+ *
176
+ * Layer, namespace and standard are derived from the declaring file's path
177
+ * under `src/<layer>/`. An EXTENSION declares its types in
178
+ * `extensions/<name>/src/`, which matches no layer — so `RosNode`,
179
+ * `CloudService` and `AadlThread` all landed in `unknown` and a project
180
+ * that included one showed most of its model as unplaced.
181
+ *
182
+ * The placement is read from the specialization, not from any list of
183
+ * names: `RosNode : SoftwareComponent` is implementation because
184
+ * `SoftwareComponent` is. Resolution repeats so a chain works regardless
185
+ * of source-file order (`RosContainerImage -> ContainerImage ->
186
+ * DeploymentUnit`), and a kind that specializes nothing placed stays
187
+ * `unknown`, which is the honest answer.
188
+ *
189
+ * Must be called after populateFromDocuments() is complete.
190
+ */
191
+ inheritPlacementFromSuperTypes(): void;
84
192
  /**
85
193
  * Compute the derivedBy reverse-lookup for all kinds.
86
194
  * Must be called after populateFromDocuments() is complete.
@@ -94,4 +202,29 @@ export declare class KindRegistry {
94
202
  /** Walk a package declaration and register all Definition nodes */
95
203
  private walkPackage;
96
204
  }
205
+ /**
206
+ * The ontology facts a formatter or importer needs, derived from the registries.
207
+ *
208
+ * Consumers used to take a `MEMOConfig` and read `config.kinds` and
209
+ * `config.relationshipTypes` off it, which meant a settings file could declare
210
+ * a kind the ontology never defined. They take this instead: it can only be
211
+ * built from what the resolved SysML declares.
212
+ */
213
+ export interface OntologyView {
214
+ kinds: Record<string, KindDefinition>;
215
+ relationshipTypes: Array<{
216
+ name: string;
217
+ label: string;
218
+ layer: string;
219
+ color: string;
220
+ }>;
221
+ }
222
+ /** An empty view — what a caller has before any ontology is resolved. */
223
+ export declare const EMPTY_ONTOLOGY_VIEW: OntologyView;
224
+ /** Build a view from populated registries. */
225
+ export declare function ontologyViewFrom(kindRegistry?: {
226
+ toKindsRecord(): Record<string, KindDefinition>;
227
+ }, relationshipRegistry?: {
228
+ toRelationshipTypesArray(): OntologyView['relationshipTypes'];
229
+ }): OntologyView;
97
230
  //# sourceMappingURL=kind-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kind-registry.d.ts","sourceRoot":"","sources":["../../src/model/kind-registry.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAC9B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAiBD;;;GAGG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAE9D,iCAAiC;IACjC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIpD;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAU1D;;;OAGG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAY/C,oCAAoC;IACpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,yBAAyB;IACzB,SAAS,IAAI,MAAM,EAAE;IAIrB,sBAAsB;IACtB,OAAO,IAAI,iBAAiB,EAAE;IAI9B;;;;;;;;;;;;OAYG;IACH,qBAAqB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,YAAY;IAyDhE;;;;OAIG;IACH,gBAAgB,IAAI,iBAAiB,EAAE;IAYvC,wEAAwE;IACxE,mBAAmB,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;KAAE,EAAE;IAczE,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAIxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAiBxB;;;OAGG;IACH,qBAAqB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI;IAexD,mEAAmE;IACnE,OAAO,CAAC,WAAW;CA4CtB"}
1
+ {"version":3,"file":"kind-registry.d.ts","sourceRoot":"","sources":["../../src/model/kind-registry.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,36 @@
14
14
  import { isPartDefinition, isRequirementDefinition, isVerificationDefinition, isStateDefinition, isUseCaseDeclaration, isActionDefinition, isItemDefinition, isPortDefinition, isInterfaceDefinition, isAttributeDefinition, isEnumDefinition, isPackageDeclaration, } from '../language/generated/ast.js';
15
15
  import { resolveLayerFromPath, resolveNamespaceFromPath, resolveStandardFromPath } from './layer-resolver.js';
16
16
  /** AST $type → SysMLConstruct mapping */
17
+ /**
18
+ * Literal attribute values declared in a definition body. Only literals are
19
+ * read: an inherited presentation hint is always a literal, and anything else
20
+ * belongs to the usage.
21
+ */
22
+ function extractBoundAttributes(body) {
23
+ const out = {};
24
+ for (const member of body ?? []) {
25
+ if (member?.$type !== 'AttributeMember' || !member.value || !member.name)
26
+ continue;
27
+ const v = member.value;
28
+ switch (v.$type) {
29
+ case 'StringValue':
30
+ out[member.name] = String(v.value).replace(/^"|"$/g, '');
31
+ break;
32
+ case 'IntValue':
33
+ case 'RealValue':
34
+ out[member.name] = String(v.value);
35
+ break;
36
+ case 'BooleanValue':
37
+ out[member.name] = String(v.value);
38
+ break;
39
+ case 'EnumValue':
40
+ out[member.name] = String(v.enumRef ?? '');
41
+ break;
42
+ default: break;
43
+ }
44
+ }
45
+ return out;
46
+ }
17
47
  const AST_TYPE_TO_CONSTRUCT = {
18
48
  PartDefinition: 'part def',
19
49
  RequirementDefinition: 'requirement def',
@@ -33,6 +63,27 @@ const AST_TYPE_TO_CONSTRUCT = {
33
63
  */
34
64
  export class KindRegistry {
35
65
  kinds = new Map();
66
+ /**
67
+ * Attribute values bound by a `view def`, keyed by definition name, with the
68
+ * definition's own supertype chain already merged in.
69
+ *
70
+ * A view usage inherits these — `view mainScreenLayout : MemoScreenLayoutView`
71
+ * gets that definition's `viewKind` without restating it, and SysIDE in fact
72
+ * REJECTS restating it ("Cannot override a binding feature value"). So the
73
+ * definition is the only place the value can live, and consumers resolve a
74
+ * usage's presentation by falling back here.
75
+ *
76
+ * View definitions are not registered as kinds: they classify views, not
77
+ * model elements, and adding them to the kind extent would put them in the
78
+ * Explorer and in kind counts where they do not belong.
79
+ */
80
+ viewDefaults = new Map();
81
+ viewSuperTypes = new Map();
82
+ /** short name → the qualified name it currently resolves to. */
83
+ byQualifiedName = new Map();
84
+ /** qualified name → declaring file, for collision diagnostics. */
85
+ sourceFiles = new Map();
86
+ collisions = new Map();
36
87
  /** Number of registered kinds */
37
88
  get size() {
38
89
  return this.kinds.size;
@@ -44,6 +95,26 @@ export class KindRegistry {
44
95
  getKind(name) {
45
96
  return this.kinds.get(name);
46
97
  }
98
+ /**
99
+ * Attribute values a view usage inherits from its `view def`, resolved up
100
+ * the definition's specialization chain (nearest declaration wins).
101
+ */
102
+ getViewDefaults(viewDefName) {
103
+ if (!viewDefName)
104
+ return undefined;
105
+ const merged = {};
106
+ const seen = new Set();
107
+ let name = viewDefName;
108
+ while (name && !seen.has(name)) {
109
+ seen.add(name);
110
+ for (const [k, v] of Object.entries(this.viewDefaults.get(name) ?? {})) {
111
+ if (!(k in merged))
112
+ merged[k] = v; // nearest declaration wins
113
+ }
114
+ name = this.viewSuperTypes.get(name);
115
+ }
116
+ return Object.keys(merged).length > 0 ? merged : undefined;
117
+ }
47
118
  /**
48
119
  * Convert a registry entry to a KindDefinition (for backward compat with builder).
49
120
  */
@@ -106,6 +177,12 @@ export class KindRegistry {
106
177
  derivedBy: entry.derivedBy ? [...entry.derivedBy] : undefined,
107
178
  });
108
179
  }
180
+ for (const [name, defaults] of this.viewDefaults) {
181
+ result.viewDefaults.set(name, { ...defaults });
182
+ }
183
+ for (const [name, superType] of this.viewSuperTypes) {
184
+ result.viewSuperTypes.set(name, superType);
185
+ }
109
186
  const discovered = new KindRegistry();
110
187
  discovered.populateFromDocuments(documents);
111
188
  let pending = discovered.entries().filter(entry => !result.has(entry.name));
@@ -185,8 +262,88 @@ export class KindRegistry {
185
262
  }
186
263
  /** Register a kind manually (for testing or config fallback) */
187
264
  register(entry) {
265
+ this.recordIdentity(entry);
188
266
  this.kinds.set(entry.name, entry);
189
267
  }
268
+ /**
269
+ * Track qualified identity alongside the short-name map.
270
+ *
271
+ * Short-name lookup is kept as-is so every existing caller keeps working;
272
+ * what changes is that a shadowed definition is no longer lost silently.
273
+ * A re-registration of the SAME qualified name is not a collision — that
274
+ * happens legitimately when a registry is copied in `withProjectExtensions`.
275
+ */
276
+ recordIdentity(entry) {
277
+ const qualified = entry.qualifiedName ?? entry.name;
278
+ const existing = this.byQualifiedName.get(entry.name);
279
+ if (existing && existing !== qualified) {
280
+ const collision = this.collisions.get(entry.name) ?? {
281
+ shortName: entry.name,
282
+ qualifiedNames: [existing],
283
+ sourceFiles: [this.sourceFiles.get(existing) ?? '(unknown)'],
284
+ };
285
+ if (!collision.qualifiedNames.includes(qualified)) {
286
+ collision.qualifiedNames.push(qualified);
287
+ collision.sourceFiles.push(entry.sourceFile ?? '(unknown)');
288
+ }
289
+ this.collisions.set(entry.name, collision);
290
+ }
291
+ this.byQualifiedName.set(entry.name, qualified);
292
+ if (entry.sourceFile)
293
+ this.sourceFiles.set(qualified, entry.sourceFile);
294
+ }
295
+ /**
296
+ * Short names claimed by more than one qualified definition.
297
+ *
298
+ * Callers surface these as load diagnostics: a reference to an ambiguous
299
+ * short name cannot be resolved by load order and needs qualifying.
300
+ */
301
+ getCollisions() {
302
+ return [...this.collisions.values()]
303
+ .sort((a, b) => a.shortName.localeCompare(b.shortName));
304
+ }
305
+ /** Qualified name a short name currently resolves to. */
306
+ getQualifiedName(shortName) {
307
+ return this.byQualifiedName.get(shortName);
308
+ }
309
+ /**
310
+ * Give a kind the placement of the kind it specializes, wherever its own
311
+ * declaring path could not supply one.
312
+ *
313
+ * Layer, namespace and standard are derived from the declaring file's path
314
+ * under `src/<layer>/`. An EXTENSION declares its types in
315
+ * `extensions/<name>/src/`, which matches no layer — so `RosNode`,
316
+ * `CloudService` and `AadlThread` all landed in `unknown` and a project
317
+ * that included one showed most of its model as unplaced.
318
+ *
319
+ * The placement is read from the specialization, not from any list of
320
+ * names: `RosNode : SoftwareComponent` is implementation because
321
+ * `SoftwareComponent` is. Resolution repeats so a chain works regardless
322
+ * of source-file order (`RosContainerImage -> ContainerImage ->
323
+ * DeploymentUnit`), and a kind that specializes nothing placed stays
324
+ * `unknown`, which is the honest answer.
325
+ *
326
+ * Must be called after populateFromDocuments() is complete.
327
+ */
328
+ inheritPlacementFromSuperTypes() {
329
+ let progressed = true;
330
+ while (progressed) {
331
+ progressed = false;
332
+ for (const entry of this.kinds.values()) {
333
+ if (entry.layer !== 'unknown' || !entry.superType)
334
+ continue;
335
+ const parent = this.kinds.get(entry.superType.split('::').pop() ?? '');
336
+ if (!parent || parent === entry || parent.layer === 'unknown')
337
+ continue;
338
+ entry.layer = parent.layer;
339
+ if (!entry.namespace?.length && parent.namespace)
340
+ entry.namespace = [...parent.namespace];
341
+ if (!entry.standard && parent.standard)
342
+ entry.standard = parent.standard;
343
+ progressed = true;
344
+ }
345
+ }
346
+ }
190
347
  /**
191
348
  * Compute the derivedBy reverse-lookup for all kinds.
192
349
  * Must be called after populateFromDocuments() is complete.
@@ -220,16 +377,30 @@ export class KindRegistry {
220
377
  const namespace = resolveNamespaceFromPath(doc.filePath);
221
378
  for (const member of model.members) {
222
379
  if (isPackageDeclaration(member)) {
223
- this.walkPackage(member, layer, standard, namespace);
380
+ this.walkPackage(member, layer, standard, namespace, [], doc.filePath);
224
381
  }
225
382
  }
226
383
  }
227
384
  }
228
385
  /** Walk a package declaration and register all Definition nodes */
229
- walkPackage(pkg, layer, standard, namespace) {
386
+ walkPackage(pkg, layer, standard, namespace, packagePath = [], sourceFile) {
387
+ // A declaration's qualified name is the enclosing package chain, which
388
+ // is why nested package declarations are required: a file declaring
389
+ // `package a::b` gives no chain to walk.
390
+ const here = pkg.name ? [...packagePath, pkg.name] : packagePath;
230
391
  for (const member of pkg.members) {
231
392
  if (isPackageDeclaration(member)) {
232
- this.walkPackage(member, layer, standard, namespace);
393
+ this.walkPackage(member, layer, standard, namespace, here, sourceFile);
394
+ continue;
395
+ }
396
+ if (member.$type === 'ViewDefinition') {
397
+ const viewName = member.name;
398
+ if (viewName) {
399
+ this.viewDefaults.set(viewName, extractBoundAttributes(member.body));
400
+ const sup = member.specialization?.superType;
401
+ if (sup)
402
+ this.viewSuperTypes.set(viewName, sup);
403
+ }
233
404
  continue;
234
405
  }
235
406
  // Check each definition type
@@ -253,7 +424,7 @@ export class KindRegistry {
253
424
  const superType = 'specialization' in member
254
425
  ? member.specialization?.superType
255
426
  : undefined;
256
- this.kinds.set(name, {
427
+ this.register({
257
428
  name,
258
429
  label: name,
259
430
  layer,
@@ -262,9 +433,20 @@ export class KindRegistry {
262
433
  standard,
263
434
  isAbstract: ('isAbstract' in member && member.isAbstract) || undefined,
264
435
  namespace,
436
+ qualifiedName: [...here, name].join('::'),
437
+ sourceFile,
265
438
  });
266
439
  }
267
440
  }
268
441
  }
269
442
  }
443
+ /** An empty view — what a caller has before any ontology is resolved. */
444
+ export const EMPTY_ONTOLOGY_VIEW = { kinds: {}, relationshipTypes: [] };
445
+ /** Build a view from populated registries. */
446
+ export function ontologyViewFrom(kindRegistry, relationshipRegistry) {
447
+ return {
448
+ kinds: kindRegistry?.toKindsRecord() ?? {},
449
+ relationshipTypes: relationshipRegistry?.toRelationshipTypesArray() ?? [],
450
+ };
451
+ }
270
452
  //# sourceMappingURL=kind-registry.js.map