driftdetect-core 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/dist/boundaries/types.d.ts +1 -1
  2. package/dist/boundaries/types.d.ts.map +1 -1
  3. package/dist/call-graph/analysis/graph-builder.d.ts.map +1 -1
  4. package/dist/call-graph/analysis/graph-builder.js +1 -0
  5. package/dist/call-graph/analysis/graph-builder.js.map +1 -1
  6. package/dist/call-graph/extractors/go-data-access-extractor.d.ts +80 -0
  7. package/dist/call-graph/extractors/go-data-access-extractor.d.ts.map +1 -0
  8. package/dist/call-graph/extractors/go-data-access-extractor.js +457 -0
  9. package/dist/call-graph/extractors/go-data-access-extractor.js.map +1 -0
  10. package/dist/call-graph/extractors/go-extractor.d.ts +103 -0
  11. package/dist/call-graph/extractors/go-extractor.d.ts.map +1 -0
  12. package/dist/call-graph/extractors/go-extractor.js +509 -0
  13. package/dist/call-graph/extractors/go-extractor.js.map +1 -0
  14. package/dist/call-graph/extractors/go-hybrid-extractor.d.ts +97 -0
  15. package/dist/call-graph/extractors/go-hybrid-extractor.d.ts.map +1 -0
  16. package/dist/call-graph/extractors/go-hybrid-extractor.js +496 -0
  17. package/dist/call-graph/extractors/go-hybrid-extractor.js.map +1 -0
  18. package/dist/call-graph/extractors/regex/go-regex.d.ts +51 -0
  19. package/dist/call-graph/extractors/regex/go-regex.d.ts.map +1 -0
  20. package/dist/call-graph/extractors/regex/go-regex.js +435 -0
  21. package/dist/call-graph/extractors/regex/go-regex.js.map +1 -0
  22. package/dist/call-graph/extractors/regex/index.d.ts +1 -0
  23. package/dist/call-graph/extractors/regex/index.d.ts.map +1 -1
  24. package/dist/call-graph/extractors/regex/index.js +8 -0
  25. package/dist/call-graph/extractors/regex/index.js.map +1 -1
  26. package/dist/call-graph/index.d.ts +3 -0
  27. package/dist/call-graph/index.d.ts.map +1 -1
  28. package/dist/call-graph/index.js +5 -0
  29. package/dist/call-graph/index.js.map +1 -1
  30. package/dist/call-graph/types.d.ts +1 -1
  31. package/dist/call-graph/types.d.ts.map +1 -1
  32. package/dist/constraints/extraction/constraint-synthesizer.d.ts +72 -0
  33. package/dist/constraints/extraction/constraint-synthesizer.d.ts.map +1 -0
  34. package/dist/constraints/extraction/constraint-synthesizer.js +336 -0
  35. package/dist/constraints/extraction/constraint-synthesizer.js.map +1 -0
  36. package/dist/constraints/extraction/index.d.ts +10 -0
  37. package/dist/constraints/extraction/index.d.ts.map +1 -0
  38. package/dist/constraints/extraction/index.js +10 -0
  39. package/dist/constraints/extraction/index.js.map +1 -0
  40. package/dist/constraints/extraction/invariant-detector.d.ts +109 -0
  41. package/dist/constraints/extraction/invariant-detector.d.ts.map +1 -0
  42. package/dist/constraints/extraction/invariant-detector.js +979 -0
  43. package/dist/constraints/extraction/invariant-detector.js.map +1 -0
  44. package/dist/constraints/index.d.ts +15 -0
  45. package/dist/constraints/index.d.ts.map +1 -0
  46. package/dist/constraints/index.js +16 -0
  47. package/dist/constraints/index.js.map +1 -0
  48. package/dist/constraints/store/constraint-store.d.ts +110 -0
  49. package/dist/constraints/store/constraint-store.d.ts.map +1 -0
  50. package/dist/constraints/store/constraint-store.js +584 -0
  51. package/dist/constraints/store/constraint-store.js.map +1 -0
  52. package/dist/constraints/types.d.ts +605 -0
  53. package/dist/constraints/types.d.ts.map +1 -0
  54. package/dist/constraints/types.js +57 -0
  55. package/dist/constraints/types.js.map +1 -0
  56. package/dist/constraints/verification/constraint-verifier.d.ts +100 -0
  57. package/dist/constraints/verification/constraint-verifier.d.ts.map +1 -0
  58. package/dist/constraints/verification/constraint-verifier.js +638 -0
  59. package/dist/constraints/verification/constraint-verifier.js.map +1 -0
  60. package/dist/constraints/verification/index.d.ts +8 -0
  61. package/dist/constraints/verification/index.d.ts.map +1 -0
  62. package/dist/constraints/verification/index.js +8 -0
  63. package/dist/constraints/verification/index.js.map +1 -0
  64. package/dist/decisions/analyzer/decision-mining-analyzer.d.ts +121 -0
  65. package/dist/decisions/analyzer/decision-mining-analyzer.d.ts.map +1 -0
  66. package/dist/decisions/analyzer/decision-mining-analyzer.js +904 -0
  67. package/dist/decisions/analyzer/decision-mining-analyzer.js.map +1 -0
  68. package/dist/decisions/analyzer/index.d.ts +5 -0
  69. package/dist/decisions/analyzer/index.d.ts.map +1 -0
  70. package/dist/decisions/analyzer/index.js +5 -0
  71. package/dist/decisions/analyzer/index.js.map +1 -0
  72. package/dist/decisions/extractors/base-commit-extractor.d.ts +104 -0
  73. package/dist/decisions/extractors/base-commit-extractor.d.ts.map +1 -0
  74. package/dist/decisions/extractors/base-commit-extractor.js +305 -0
  75. package/dist/decisions/extractors/base-commit-extractor.js.map +1 -0
  76. package/dist/decisions/extractors/csharp-commit-extractor.d.ts +18 -0
  77. package/dist/decisions/extractors/csharp-commit-extractor.d.ts.map +1 -0
  78. package/dist/decisions/extractors/csharp-commit-extractor.js +281 -0
  79. package/dist/decisions/extractors/csharp-commit-extractor.js.map +1 -0
  80. package/dist/decisions/extractors/index.d.ts +31 -0
  81. package/dist/decisions/extractors/index.d.ts.map +1 -0
  82. package/dist/decisions/extractors/index.js +63 -0
  83. package/dist/decisions/extractors/index.js.map +1 -0
  84. package/dist/decisions/extractors/java-commit-extractor.d.ts +18 -0
  85. package/dist/decisions/extractors/java-commit-extractor.d.ts.map +1 -0
  86. package/dist/decisions/extractors/java-commit-extractor.js +248 -0
  87. package/dist/decisions/extractors/java-commit-extractor.js.map +1 -0
  88. package/dist/decisions/extractors/php-commit-extractor.d.ts +18 -0
  89. package/dist/decisions/extractors/php-commit-extractor.d.ts.map +1 -0
  90. package/dist/decisions/extractors/php-commit-extractor.js +280 -0
  91. package/dist/decisions/extractors/php-commit-extractor.js.map +1 -0
  92. package/dist/decisions/extractors/python-commit-extractor.d.ts +18 -0
  93. package/dist/decisions/extractors/python-commit-extractor.d.ts.map +1 -0
  94. package/dist/decisions/extractors/python-commit-extractor.js +248 -0
  95. package/dist/decisions/extractors/python-commit-extractor.js.map +1 -0
  96. package/dist/decisions/extractors/typescript-commit-extractor.d.ts +37 -0
  97. package/dist/decisions/extractors/typescript-commit-extractor.d.ts.map +1 -0
  98. package/dist/decisions/extractors/typescript-commit-extractor.js +229 -0
  99. package/dist/decisions/extractors/typescript-commit-extractor.js.map +1 -0
  100. package/dist/decisions/git/commit-parser.d.ts +58 -0
  101. package/dist/decisions/git/commit-parser.d.ts.map +1 -0
  102. package/dist/decisions/git/commit-parser.js +344 -0
  103. package/dist/decisions/git/commit-parser.js.map +1 -0
  104. package/dist/decisions/git/diff-analyzer.d.ts +30 -0
  105. package/dist/decisions/git/diff-analyzer.d.ts.map +1 -0
  106. package/dist/decisions/git/diff-analyzer.js +492 -0
  107. package/dist/decisions/git/diff-analyzer.js.map +1 -0
  108. package/dist/decisions/git/git-walker.d.ts +64 -0
  109. package/dist/decisions/git/git-walker.d.ts.map +1 -0
  110. package/dist/decisions/git/git-walker.js +441 -0
  111. package/dist/decisions/git/git-walker.js.map +1 -0
  112. package/dist/decisions/git/index.d.ts +11 -0
  113. package/dist/decisions/git/index.d.ts.map +1 -0
  114. package/dist/decisions/git/index.js +13 -0
  115. package/dist/decisions/git/index.js.map +1 -0
  116. package/dist/decisions/git/types.d.ts +223 -0
  117. package/dist/decisions/git/types.d.ts.map +1 -0
  118. package/dist/decisions/git/types.js +7 -0
  119. package/dist/decisions/git/types.js.map +1 -0
  120. package/dist/decisions/index.d.ts +27 -0
  121. package/dist/decisions/index.d.ts.map +1 -0
  122. package/dist/decisions/index.js +45 -0
  123. package/dist/decisions/index.js.map +1 -0
  124. package/dist/decisions/types.d.ts +530 -0
  125. package/dist/decisions/types.d.ts.map +1 -0
  126. package/dist/decisions/types.js +8 -0
  127. package/dist/decisions/types.js.map +1 -0
  128. package/dist/go/go-analyzer.d.ts +203 -0
  129. package/dist/go/go-analyzer.d.ts.map +1 -0
  130. package/dist/go/go-analyzer.js +509 -0
  131. package/dist/go/go-analyzer.js.map +1 -0
  132. package/dist/go/index.d.ts +7 -0
  133. package/dist/go/index.d.ts.map +1 -0
  134. package/dist/go/index.js +8 -0
  135. package/dist/go/index.js.map +1 -0
  136. package/dist/index.d.ts +11 -0
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +56 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/parsers/tree-sitter/go-loader.d.ts +50 -0
  141. package/dist/parsers/tree-sitter/go-loader.d.ts.map +1 -0
  142. package/dist/parsers/tree-sitter/go-loader.js +161 -0
  143. package/dist/parsers/tree-sitter/go-loader.js.map +1 -0
  144. package/dist/parsers/tree-sitter/tree-sitter-go-parser.d.ts +250 -0
  145. package/dist/parsers/tree-sitter/tree-sitter-go-parser.d.ts.map +1 -0
  146. package/dist/parsers/tree-sitter/tree-sitter-go-parser.js +707 -0
  147. package/dist/parsers/tree-sitter/tree-sitter-go-parser.js.map +1 -0
  148. package/dist/parsers/types.d.ts +1 -1
  149. package/dist/parsers/types.d.ts.map +1 -1
  150. package/dist/simulation/approach-generator.d.ts +73 -0
  151. package/dist/simulation/approach-generator.d.ts.map +1 -0
  152. package/dist/simulation/approach-generator.js +371 -0
  153. package/dist/simulation/approach-generator.js.map +1 -0
  154. package/dist/simulation/index.d.ts +14 -0
  155. package/dist/simulation/index.d.ts.map +1 -0
  156. package/dist/simulation/index.js +19 -0
  157. package/dist/simulation/index.js.map +1 -0
  158. package/dist/simulation/language-strategies/csharp-strategies.d.ts +17 -0
  159. package/dist/simulation/language-strategies/csharp-strategies.d.ts.map +1 -0
  160. package/dist/simulation/language-strategies/csharp-strategies.js +118 -0
  161. package/dist/simulation/language-strategies/csharp-strategies.js.map +1 -0
  162. package/dist/simulation/language-strategies/index.d.ts +41 -0
  163. package/dist/simulation/language-strategies/index.d.ts.map +1 -0
  164. package/dist/simulation/language-strategies/index.js +92 -0
  165. package/dist/simulation/language-strategies/index.js.map +1 -0
  166. package/dist/simulation/language-strategies/java-strategies.d.ts +17 -0
  167. package/dist/simulation/language-strategies/java-strategies.d.ts.map +1 -0
  168. package/dist/simulation/language-strategies/java-strategies.js +119 -0
  169. package/dist/simulation/language-strategies/java-strategies.js.map +1 -0
  170. package/dist/simulation/language-strategies/php-strategies.d.ts +17 -0
  171. package/dist/simulation/language-strategies/php-strategies.d.ts.map +1 -0
  172. package/dist/simulation/language-strategies/php-strategies.js +129 -0
  173. package/dist/simulation/language-strategies/php-strategies.js.map +1 -0
  174. package/dist/simulation/language-strategies/python-strategies.d.ts +17 -0
  175. package/dist/simulation/language-strategies/python-strategies.d.ts.map +1 -0
  176. package/dist/simulation/language-strategies/python-strategies.js +208 -0
  177. package/dist/simulation/language-strategies/python-strategies.js.map +1 -0
  178. package/dist/simulation/language-strategies/types.d.ts +67 -0
  179. package/dist/simulation/language-strategies/types.d.ts.map +1 -0
  180. package/dist/simulation/language-strategies/types.js +23 -0
  181. package/dist/simulation/language-strategies/types.js.map +1 -0
  182. package/dist/simulation/language-strategies/typescript-strategies.d.ts +17 -0
  183. package/dist/simulation/language-strategies/typescript-strategies.d.ts.map +1 -0
  184. package/dist/simulation/language-strategies/typescript-strategies.js +251 -0
  185. package/dist/simulation/language-strategies/typescript-strategies.js.map +1 -0
  186. package/dist/simulation/scorers/friction-scorer.d.ts +45 -0
  187. package/dist/simulation/scorers/friction-scorer.d.ts.map +1 -0
  188. package/dist/simulation/scorers/friction-scorer.js +336 -0
  189. package/dist/simulation/scorers/friction-scorer.js.map +1 -0
  190. package/dist/simulation/scorers/impact-scorer.d.ts +56 -0
  191. package/dist/simulation/scorers/impact-scorer.d.ts.map +1 -0
  192. package/dist/simulation/scorers/impact-scorer.js +273 -0
  193. package/dist/simulation/scorers/impact-scorer.js.map +1 -0
  194. package/dist/simulation/scorers/index.d.ts +12 -0
  195. package/dist/simulation/scorers/index.d.ts.map +1 -0
  196. package/dist/simulation/scorers/index.js +12 -0
  197. package/dist/simulation/scorers/index.js.map +1 -0
  198. package/dist/simulation/scorers/pattern-alignment-scorer.d.ts +83 -0
  199. package/dist/simulation/scorers/pattern-alignment-scorer.d.ts.map +1 -0
  200. package/dist/simulation/scorers/pattern-alignment-scorer.js +367 -0
  201. package/dist/simulation/scorers/pattern-alignment-scorer.js.map +1 -0
  202. package/dist/simulation/scorers/security-scorer.d.ts +63 -0
  203. package/dist/simulation/scorers/security-scorer.d.ts.map +1 -0
  204. package/dist/simulation/scorers/security-scorer.js +346 -0
  205. package/dist/simulation/scorers/security-scorer.js.map +1 -0
  206. package/dist/simulation/simulation-engine.d.ts +89 -0
  207. package/dist/simulation/simulation-engine.d.ts.map +1 -0
  208. package/dist/simulation/simulation-engine.js +480 -0
  209. package/dist/simulation/simulation-engine.js.map +1 -0
  210. package/dist/simulation/types.d.ts +200 -0
  211. package/dist/simulation/types.d.ts.map +1 -0
  212. package/dist/simulation/types.js +23 -0
  213. package/dist/simulation/types.js.map +1 -0
  214. package/dist/speculative/approach-generator.d.ts +2 -0
  215. package/dist/speculative/approach-generator.d.ts.map +1 -0
  216. package/dist/speculative/approach-generator.js +2 -0
  217. package/dist/speculative/approach-generator.js.map +1 -0
  218. package/dist/speculative/templates/types.d.ts +133 -0
  219. package/dist/speculative/templates/types.d.ts.map +1 -0
  220. package/dist/speculative/templates/types.js +208 -0
  221. package/dist/speculative/templates/types.js.map +1 -0
  222. package/dist/speculative/types.d.ts +523 -0
  223. package/dist/speculative/types.d.ts.map +1 -0
  224. package/dist/speculative/types.js +71 -0
  225. package/dist/speculative/types.js.map +1 -0
  226. package/dist/test-topology/extractors/base-test-extractor.d.ts +1 -1
  227. package/dist/test-topology/extractors/base-test-extractor.d.ts.map +1 -1
  228. package/dist/test-topology/extractors/base-test-extractor.js.map +1 -1
  229. package/dist/test-topology/extractors/go-test-extractor.d.ts +33 -0
  230. package/dist/test-topology/extractors/go-test-extractor.d.ts.map +1 -0
  231. package/dist/test-topology/extractors/go-test-extractor.js +436 -0
  232. package/dist/test-topology/extractors/go-test-extractor.js.map +1 -0
  233. package/dist/test-topology/extractors/index.d.ts +1 -0
  234. package/dist/test-topology/extractors/index.d.ts.map +1 -1
  235. package/dist/test-topology/extractors/index.js +1 -0
  236. package/dist/test-topology/extractors/index.js.map +1 -1
  237. package/dist/test-topology/extractors/regex/go-test-regex.d.ts +62 -0
  238. package/dist/test-topology/extractors/regex/go-test-regex.d.ts.map +1 -0
  239. package/dist/test-topology/extractors/regex/go-test-regex.js +528 -0
  240. package/dist/test-topology/extractors/regex/go-test-regex.js.map +1 -0
  241. package/dist/test-topology/extractors/regex/index.d.ts +1 -0
  242. package/dist/test-topology/extractors/regex/index.d.ts.map +1 -1
  243. package/dist/test-topology/extractors/regex/index.js +4 -0
  244. package/dist/test-topology/extractors/regex/index.js.map +1 -1
  245. package/dist/test-topology/hybrid-test-topology-analyzer.d.ts.map +1 -1
  246. package/dist/test-topology/hybrid-test-topology-analyzer.js +1 -0
  247. package/dist/test-topology/hybrid-test-topology-analyzer.js.map +1 -1
  248. package/dist/test-topology/test-topology-analyzer.d.ts.map +1 -1
  249. package/dist/test-topology/test-topology-analyzer.js +1 -0
  250. package/dist/test-topology/test-topology-analyzer.js.map +1 -1
  251. package/dist/test-topology/types.d.ts +2 -2
  252. package/dist/test-topology/types.d.ts.map +1 -1
  253. package/dist/unified-provider/matching/database-sql-matcher.d.ts +42 -0
  254. package/dist/unified-provider/matching/database-sql-matcher.d.ts.map +1 -0
  255. package/dist/unified-provider/matching/database-sql-matcher.js +282 -0
  256. package/dist/unified-provider/matching/database-sql-matcher.js.map +1 -0
  257. package/dist/unified-provider/matching/gorm-matcher.d.ts +41 -0
  258. package/dist/unified-provider/matching/gorm-matcher.d.ts.map +1 -0
  259. package/dist/unified-provider/matching/gorm-matcher.js +222 -0
  260. package/dist/unified-provider/matching/gorm-matcher.js.map +1 -0
  261. package/dist/unified-provider/matching/index.d.ts +3 -0
  262. package/dist/unified-provider/matching/index.d.ts.map +1 -1
  263. package/dist/unified-provider/matching/index.js +4 -0
  264. package/dist/unified-provider/matching/index.js.map +1 -1
  265. package/dist/unified-provider/matching/matcher-registry.d.ts.map +1 -1
  266. package/dist/unified-provider/matching/matcher-registry.js +7 -0
  267. package/dist/unified-provider/matching/matcher-registry.js.map +1 -1
  268. package/dist/unified-provider/matching/sqlx-matcher.d.ts +40 -0
  269. package/dist/unified-provider/matching/sqlx-matcher.d.ts.map +1 -0
  270. package/dist/unified-provider/matching/sqlx-matcher.js +214 -0
  271. package/dist/unified-provider/matching/sqlx-matcher.js.map +1 -0
  272. package/dist/unified-provider/normalization/go-normalizer.d.ts +62 -0
  273. package/dist/unified-provider/normalization/go-normalizer.d.ts.map +1 -0
  274. package/dist/unified-provider/normalization/go-normalizer.js +608 -0
  275. package/dist/unified-provider/normalization/go-normalizer.js.map +1 -0
  276. package/dist/unified-provider/normalization/index.d.ts +1 -0
  277. package/dist/unified-provider/normalization/index.d.ts.map +1 -1
  278. package/dist/unified-provider/normalization/index.js +6 -1
  279. package/dist/unified-provider/normalization/index.js.map +1 -1
  280. package/dist/unified-provider/types.d.ts +1 -1
  281. package/dist/unified-provider/types.d.ts.map +1 -1
  282. package/dist/wpf/extractors/binding-error-detector.d.ts +75 -0
  283. package/dist/wpf/extractors/binding-error-detector.d.ts.map +1 -0
  284. package/dist/wpf/extractors/binding-error-detector.js +290 -0
  285. package/dist/wpf/extractors/binding-error-detector.js.map +1 -0
  286. package/dist/wpf/extractors/code-behind-linker.d.ts +70 -0
  287. package/dist/wpf/extractors/code-behind-linker.d.ts.map +1 -0
  288. package/dist/wpf/extractors/code-behind-linker.js +172 -0
  289. package/dist/wpf/extractors/code-behind-linker.js.map +1 -0
  290. package/dist/wpf/extractors/dependency-property-extractor.d.ts +61 -0
  291. package/dist/wpf/extractors/dependency-property-extractor.d.ts.map +1 -0
  292. package/dist/wpf/extractors/dependency-property-extractor.js +201 -0
  293. package/dist/wpf/extractors/dependency-property-extractor.js.map +1 -0
  294. package/dist/wpf/extractors/regex/viewmodel-regex.d.ts +82 -0
  295. package/dist/wpf/extractors/regex/viewmodel-regex.d.ts.map +1 -0
  296. package/dist/wpf/extractors/regex/viewmodel-regex.js +412 -0
  297. package/dist/wpf/extractors/regex/viewmodel-regex.js.map +1 -0
  298. package/dist/wpf/extractors/regex/xaml-regex.d.ts +77 -0
  299. package/dist/wpf/extractors/regex/xaml-regex.d.ts.map +1 -0
  300. package/dist/wpf/extractors/regex/xaml-regex.js +353 -0
  301. package/dist/wpf/extractors/regex/xaml-regex.js.map +1 -0
  302. package/dist/wpf/extractors/resource-dictionary-parser.d.ts +103 -0
  303. package/dist/wpf/extractors/resource-dictionary-parser.d.ts.map +1 -0
  304. package/dist/wpf/extractors/resource-dictionary-parser.js +296 -0
  305. package/dist/wpf/extractors/resource-dictionary-parser.js.map +1 -0
  306. package/dist/wpf/extractors/value-converter-extractor.d.ts +128 -0
  307. package/dist/wpf/extractors/value-converter-extractor.d.ts.map +1 -0
  308. package/dist/wpf/extractors/value-converter-extractor.js +312 -0
  309. package/dist/wpf/extractors/value-converter-extractor.js.map +1 -0
  310. package/dist/wpf/extractors/viewmodel-hybrid-extractor.d.ts +104 -0
  311. package/dist/wpf/extractors/viewmodel-hybrid-extractor.d.ts.map +1 -0
  312. package/dist/wpf/extractors/viewmodel-hybrid-extractor.js +513 -0
  313. package/dist/wpf/extractors/viewmodel-hybrid-extractor.js.map +1 -0
  314. package/dist/wpf/extractors/xaml-hybrid-extractor.d.ts +98 -0
  315. package/dist/wpf/extractors/xaml-hybrid-extractor.d.ts.map +1 -0
  316. package/dist/wpf/extractors/xaml-hybrid-extractor.js +444 -0
  317. package/dist/wpf/extractors/xaml-hybrid-extractor.js.map +1 -0
  318. package/dist/wpf/index.d.ts +25 -0
  319. package/dist/wpf/index.d.ts.map +1 -0
  320. package/dist/wpf/index.js +31 -0
  321. package/dist/wpf/index.js.map +1 -0
  322. package/dist/wpf/integration/wpf-callgraph-adapter.d.ts +82 -0
  323. package/dist/wpf/integration/wpf-callgraph-adapter.d.ts.map +1 -0
  324. package/dist/wpf/integration/wpf-callgraph-adapter.js +311 -0
  325. package/dist/wpf/integration/wpf-callgraph-adapter.js.map +1 -0
  326. package/dist/wpf/integration/wpf-data-flow-tracer.d.ts +129 -0
  327. package/dist/wpf/integration/wpf-data-flow-tracer.d.ts.map +1 -0
  328. package/dist/wpf/integration/wpf-data-flow-tracer.js +367 -0
  329. package/dist/wpf/integration/wpf-data-flow-tracer.js.map +1 -0
  330. package/dist/wpf/linkers/datacontext-resolver.d.ts +66 -0
  331. package/dist/wpf/linkers/datacontext-resolver.d.ts.map +1 -0
  332. package/dist/wpf/linkers/datacontext-resolver.js +240 -0
  333. package/dist/wpf/linkers/datacontext-resolver.js.map +1 -0
  334. package/dist/wpf/linkers/viewmodel-linker.d.ts +71 -0
  335. package/dist/wpf/linkers/viewmodel-linker.d.ts.map +1 -0
  336. package/dist/wpf/linkers/viewmodel-linker.js +268 -0
  337. package/dist/wpf/linkers/viewmodel-linker.js.map +1 -0
  338. package/dist/wpf/types.d.ts +451 -0
  339. package/dist/wpf/types.d.ts.map +1 -0
  340. package/dist/wpf/types.js +8 -0
  341. package/dist/wpf/types.js.map +1 -0
  342. package/dist/wpf/wpf-analyzer.d.ts +114 -0
  343. package/dist/wpf/wpf-analyzer.d.ts.map +1 -0
  344. package/dist/wpf/wpf-analyzer.js +332 -0
  345. package/dist/wpf/wpf-analyzer.js.map +1 -0
  346. package/dist/wrappers/integration/adapter.d.ts.map +1 -1
  347. package/dist/wrappers/integration/adapter.js +1 -0
  348. package/dist/wrappers/integration/adapter.js.map +1 -1
  349. package/package.json +29 -18
  350. package/LICENSE +0 -21
@@ -0,0 +1,240 @@
1
+ /**
2
+ * DataContext Resolver
3
+ *
4
+ * Resolves DataContext inheritance chain for XAML views.
5
+ * Determines which ViewModel class provides data for bindings.
6
+ */
7
+ import * as path from 'node:path';
8
+ // ============================================================================
9
+ // DataContext Resolver
10
+ // ============================================================================
11
+ export class DataContextResolver {
12
+ viewModels = new Map();
13
+ xamlFiles = new Map();
14
+ /**
15
+ * Register a ViewModel for resolution
16
+ */
17
+ registerViewModel(viewModel) {
18
+ this.viewModels.set(viewModel.className, viewModel);
19
+ this.viewModels.set(viewModel.qualifiedName, viewModel);
20
+ // Also register without namespace prefix for XAML matching
21
+ // e.g., "vm:MainViewModel" should match "MainViewModel"
22
+ const shortName = viewModel.className.split('.').pop() ?? viewModel.className;
23
+ if (shortName !== viewModel.className) {
24
+ this.viewModels.set(shortName, viewModel);
25
+ }
26
+ }
27
+ /**
28
+ * Register XAML extraction result
29
+ */
30
+ registerXaml(filePath, result) {
31
+ this.xamlFiles.set(filePath, result);
32
+ }
33
+ /**
34
+ * Resolve DataContext for a XAML file
35
+ */
36
+ resolve(xamlPath, xamlResult) {
37
+ const resolutionPath = [];
38
+ let resolvedType = null;
39
+ let confidence = 'low';
40
+ // Strategy 1: Design-time DataContext (highest confidence)
41
+ if (xamlResult.dataContextType) {
42
+ // Strip namespace prefix if present (e.g., "vm:MainViewModel" -> "MainViewModel")
43
+ const strippedType = this.stripNamespacePrefix(xamlResult.dataContextType);
44
+ // Try to find the ViewModel
45
+ const vm = this.viewModels.get(strippedType) ?? this.viewModels.get(xamlResult.dataContextType);
46
+ if (vm) {
47
+ resolvedType = vm.className;
48
+ resolutionPath.push({
49
+ source: 'design-time',
50
+ type: resolvedType,
51
+ });
52
+ confidence = 'high';
53
+ }
54
+ else {
55
+ // Still record the type even if we can't find the ViewModel
56
+ resolvedType = strippedType;
57
+ resolutionPath.push({
58
+ source: 'design-time',
59
+ type: resolvedType,
60
+ });
61
+ confidence = 'medium';
62
+ }
63
+ }
64
+ // Strategy 2: Convention-based (View → ViewModel naming)
65
+ if (!resolvedType) {
66
+ const conventionResult = this.resolveByConvention(xamlPath);
67
+ if (conventionResult) {
68
+ resolvedType = conventionResult;
69
+ resolutionPath.push({
70
+ source: 'inherited', // Convention is a form of implicit inheritance
71
+ type: resolvedType,
72
+ });
73
+ confidence = 'medium';
74
+ }
75
+ }
76
+ // Strategy 3: x:Class based code-behind analysis
77
+ if (!resolvedType && xamlResult.xClass) {
78
+ const codeBehindResult = this.resolveFromCodeBehind(xamlResult.xClass, xamlPath);
79
+ if (codeBehindResult) {
80
+ resolvedType = codeBehindResult.type;
81
+ resolutionPath.push({
82
+ source: 'code-behind',
83
+ type: resolvedType,
84
+ location: codeBehindResult.location,
85
+ });
86
+ confidence = codeBehindResult.confidence;
87
+ }
88
+ }
89
+ return {
90
+ xamlFile: xamlPath,
91
+ element: 'root',
92
+ resolvedType,
93
+ resolutionPath,
94
+ confidence,
95
+ };
96
+ }
97
+ /**
98
+ * Strip namespace prefix from type name
99
+ * e.g., "vm:MainViewModel" -> "MainViewModel"
100
+ * e.g., "local:Converters.BoolToVisibility" -> "Converters.BoolToVisibility"
101
+ */
102
+ stripNamespacePrefix(typeName) {
103
+ const colonIndex = typeName.indexOf(':');
104
+ if (colonIndex !== -1) {
105
+ return typeName.slice(colonIndex + 1);
106
+ }
107
+ return typeName;
108
+ }
109
+ /**
110
+ * Resolve all registered XAML files
111
+ */
112
+ resolveAll() {
113
+ const results = [];
114
+ for (const [filePath, xamlResult] of this.xamlFiles) {
115
+ results.push(this.resolve(filePath, xamlResult));
116
+ }
117
+ return results;
118
+ }
119
+ /**
120
+ * Resolve by naming convention (View → ViewModel)
121
+ */
122
+ resolveByConvention(xamlPath) {
123
+ const fileName = path.basename(xamlPath, '.xaml');
124
+ // Common conventions:
125
+ // MainWindow → MainWindowViewModel or MainViewModel
126
+ // UserView → UserViewModel
127
+ // SettingsPage → SettingsPageViewModel or SettingsViewModel
128
+ const conventions = [
129
+ `${fileName}ViewModel`,
130
+ fileName.replace(/View$/, 'ViewModel'),
131
+ fileName.replace(/Window$/, 'ViewModel'),
132
+ fileName.replace(/Page$/, 'ViewModel'),
133
+ fileName.replace(/Control$/, 'ViewModel'),
134
+ ];
135
+ for (const vmName of conventions) {
136
+ if (this.viewModels.has(vmName)) {
137
+ return vmName;
138
+ }
139
+ }
140
+ return null;
141
+ }
142
+ /**
143
+ * Resolve from code-behind file
144
+ */
145
+ resolveFromCodeBehind(xClass, _xamlPath) {
146
+ // We can't read the file synchronously here, but we can infer
147
+ // based on the x:Class and registered ViewModels
148
+ // Extract class name from x:Class
149
+ const className = xClass.split('.').pop() ?? xClass;
150
+ // Look for matching ViewModel by convention
151
+ const vmName = className.replace(/(?:View|Window|Page|Control)$/, '') + 'ViewModel';
152
+ if (this.viewModels.has(vmName)) {
153
+ return {
154
+ type: vmName,
155
+ confidence: 'medium',
156
+ };
157
+ }
158
+ return null;
159
+ }
160
+ /**
161
+ * Find ViewModel for a binding path
162
+ */
163
+ findViewModelForBinding(xamlPath, _bindingPath) {
164
+ const resolution = this.xamlFiles.get(xamlPath);
165
+ if (!resolution)
166
+ return null;
167
+ const dcResolution = this.resolve(xamlPath, resolution);
168
+ if (!dcResolution.resolvedType)
169
+ return null;
170
+ return this.viewModels.get(dcResolution.resolvedType) ?? null;
171
+ }
172
+ /**
173
+ * Validate a binding against its ViewModel
174
+ */
175
+ validateBinding(xamlPath, bindingPath) {
176
+ const viewModel = this.findViewModelForBinding(xamlPath, bindingPath);
177
+ if (!viewModel) {
178
+ return {
179
+ valid: false,
180
+ error: 'Could not resolve DataContext',
181
+ };
182
+ }
183
+ // Handle nested paths (e.g., "User.Name")
184
+ const pathParts = bindingPath.split('.');
185
+ const propertyName = pathParts[0];
186
+ if (!propertyName) {
187
+ return { valid: false, error: 'Empty binding path' };
188
+ }
189
+ // Check if property exists
190
+ const property = viewModel.properties.find(p => p.name === propertyName);
191
+ const command = viewModel.commands.find(c => c.name === propertyName);
192
+ if (property) {
193
+ return { valid: true, property: property.name };
194
+ }
195
+ if (command) {
196
+ return { valid: true, property: command.name };
197
+ }
198
+ // Property not found - suggest similar
199
+ const similar = this.findSimilarProperty(propertyName, viewModel);
200
+ return {
201
+ valid: false,
202
+ error: `Property '${propertyName}' not found in ${viewModel.className}`,
203
+ ...(similar && { suggestion: `Did you mean '${similar}'?` }),
204
+ };
205
+ }
206
+ /**
207
+ * Find similar property name (for suggestions)
208
+ */
209
+ findSimilarProperty(name, viewModel) {
210
+ const lowerName = name.toLowerCase();
211
+ const allNames = [
212
+ ...viewModel.properties.map(p => p.name),
213
+ ...viewModel.commands.map(c => c.name),
214
+ ];
215
+ // Simple similarity: starts with same letters or contains
216
+ for (const candidate of allNames) {
217
+ const lowerCandidate = candidate.toLowerCase();
218
+ if (lowerCandidate.startsWith(lowerName.slice(0, 3)) ||
219
+ lowerCandidate.includes(lowerName) ||
220
+ lowerName.includes(lowerCandidate)) {
221
+ return candidate;
222
+ }
223
+ }
224
+ return null;
225
+ }
226
+ /**
227
+ * Clear all registered data
228
+ */
229
+ clear() {
230
+ this.viewModels.clear();
231
+ this.xamlFiles.clear();
232
+ }
233
+ }
234
+ /**
235
+ * Factory function
236
+ */
237
+ export function createDataContextResolver() {
238
+ return new DataContextResolver();
239
+ }
240
+ //# sourceMappingURL=datacontext-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datacontext-resolver.js","sourceRoot":"","sources":["../../../src/wpf/linkers/datacontext-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * ViewModel Linker
3
+ *
4
+ * Links XAML bindings to ViewModel properties and commands.
5
+ * Creates edges for the call graph integration.
6
+ */
7
+ import type { ViewModelLink, XamlExtractionResult, ViewModelAnalysis, SourceLocation } from '../types.js';
8
+ import { DataContextResolver } from './datacontext-resolver.js';
9
+ export interface LinkingResult {
10
+ /** Successfully linked bindings */
11
+ links: ViewModelLink[];
12
+ /** Unresolved bindings */
13
+ unresolved: UnresolvedBinding[];
14
+ /** Statistics */
15
+ stats: LinkingStats;
16
+ }
17
+ export interface UnresolvedBinding {
18
+ /** XAML file */
19
+ xamlFile: string;
20
+ /** Binding path */
21
+ bindingPath: string;
22
+ /** Reason for failure */
23
+ reason: string;
24
+ /** Suggested fix */
25
+ suggestion?: string | undefined;
26
+ /** Location */
27
+ location: SourceLocation;
28
+ }
29
+ export interface LinkingStats {
30
+ /** Total bindings processed */
31
+ totalBindings: number;
32
+ /** Successfully linked */
33
+ linkedCount: number;
34
+ /** Unresolved */
35
+ unresolvedCount: number;
36
+ /** Link rate */
37
+ linkRate: number;
38
+ }
39
+ export declare class ViewModelLinker {
40
+ private resolver;
41
+ constructor(resolver?: DataContextResolver);
42
+ /**
43
+ * Link all bindings in a XAML file to ViewModel properties
44
+ */
45
+ linkBindings(xamlPath: string, xamlResult: XamlExtractionResult, viewModel: ViewModelAnalysis | null): LinkingResult;
46
+ /**
47
+ * Link a single binding to ViewModel property
48
+ */
49
+ private linkBinding;
50
+ /**
51
+ * Link a command binding to ViewModel command
52
+ */
53
+ private linkCommand;
54
+ /**
55
+ * Find similar property name for suggestions
56
+ */
57
+ private findSimilarProperty;
58
+ /**
59
+ * Find similar command name for suggestions
60
+ */
61
+ private findSimilarCommand;
62
+ /**
63
+ * Get the DataContext resolver
64
+ */
65
+ getResolver(): DataContextResolver;
66
+ }
67
+ /**
68
+ * Factory function
69
+ */
70
+ export declare function createViewModelLinker(resolver?: DataContextResolver): ViewModelLinker;
71
+ //# sourceMappingURL=viewmodel-linker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewmodel-linker.d.ts","sourceRoot":"","sources":["../../../src/wpf/linkers/viewmodel-linker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EAGjB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMhE,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,0BAA0B;IAC1B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,iBAAiB;IACjB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,eAAe;IACf,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAsB;gBAE1B,QAAQ,CAAC,EAAE,mBAAmB;IAI1C;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAClC,aAAa;IAsChB;;OAEG;IACH,OAAO,CAAC,WAAW;IAiHnB;;OAEG;IACH,OAAO,CAAC,WAAW;IA0EnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,WAAW,IAAI,mBAAmB;CAGnC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAErF"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * ViewModel Linker
3
+ *
4
+ * Links XAML bindings to ViewModel properties and commands.
5
+ * Creates edges for the call graph integration.
6
+ */
7
+ import { DataContextResolver } from './datacontext-resolver.js';
8
+ // ============================================================================
9
+ // ViewModel Linker
10
+ // ============================================================================
11
+ export class ViewModelLinker {
12
+ resolver;
13
+ constructor(resolver) {
14
+ this.resolver = resolver ?? new DataContextResolver();
15
+ }
16
+ /**
17
+ * Link all bindings in a XAML file to ViewModel properties
18
+ */
19
+ linkBindings(xamlPath, xamlResult, viewModel) {
20
+ const links = [];
21
+ const unresolved = [];
22
+ // Process data bindings
23
+ for (const binding of xamlResult.bindings) {
24
+ const result = this.linkBinding(xamlPath, binding, viewModel);
25
+ if (result.link) {
26
+ links.push(result.link);
27
+ }
28
+ else if (result.unresolved) {
29
+ unresolved.push(result.unresolved);
30
+ }
31
+ }
32
+ // Process command bindings
33
+ for (const command of xamlResult.commands) {
34
+ const result = this.linkCommand(xamlPath, command, viewModel);
35
+ if (result.link) {
36
+ links.push(result.link);
37
+ }
38
+ else if (result.unresolved) {
39
+ unresolved.push(result.unresolved);
40
+ }
41
+ }
42
+ const totalBindings = xamlResult.bindings.length + xamlResult.commands.length;
43
+ return {
44
+ links,
45
+ unresolved,
46
+ stats: {
47
+ totalBindings,
48
+ linkedCount: links.length,
49
+ unresolvedCount: unresolved.length,
50
+ linkRate: totalBindings > 0 ? links.length / totalBindings : 1,
51
+ },
52
+ };
53
+ }
54
+ /**
55
+ * Link a single binding to ViewModel property
56
+ */
57
+ linkBinding(xamlPath, binding, viewModel) {
58
+ const bindingPath = binding.parsed.path;
59
+ if (!bindingPath) {
60
+ return {
61
+ unresolved: {
62
+ xamlFile: xamlPath,
63
+ bindingPath: binding.bindingExpression,
64
+ reason: 'Empty binding path',
65
+ location: binding.location,
66
+ },
67
+ };
68
+ }
69
+ if (!viewModel) {
70
+ return {
71
+ unresolved: {
72
+ xamlFile: xamlPath,
73
+ bindingPath,
74
+ reason: 'Could not resolve DataContext',
75
+ location: binding.location,
76
+ },
77
+ };
78
+ }
79
+ // Handle nested paths (e.g., "User.Name")
80
+ const pathParts = bindingPath.split('.');
81
+ const propertyName = pathParts[0];
82
+ if (!propertyName) {
83
+ return {
84
+ unresolved: {
85
+ xamlFile: xamlPath,
86
+ bindingPath,
87
+ reason: 'Invalid binding path',
88
+ location: binding.location,
89
+ },
90
+ };
91
+ }
92
+ // Find property in ViewModel
93
+ const property = viewModel.properties.find(p => p.name === propertyName);
94
+ if (!property) {
95
+ // Check if it's a command being used as a binding (unusual but possible)
96
+ const command = viewModel.commands.find(c => c.name === propertyName);
97
+ if (command) {
98
+ return {
99
+ link: {
100
+ xamlFile: xamlPath,
101
+ xamlElement: binding.elementName,
102
+ bindingPath,
103
+ viewModelClass: viewModel.className,
104
+ viewModelProperty: command.name,
105
+ propertyType: command.commandType,
106
+ notifiesChange: false,
107
+ locations: {
108
+ xaml: binding.location,
109
+ csharp: command.location,
110
+ },
111
+ confidence: 0.8,
112
+ },
113
+ };
114
+ }
115
+ // Property not found
116
+ const suggestion = this.findSimilarProperty(propertyName, viewModel);
117
+ return {
118
+ unresolved: {
119
+ xamlFile: xamlPath,
120
+ bindingPath,
121
+ reason: `Property '${propertyName}' not found in ${viewModel.className}`,
122
+ suggestion: suggestion ? `Did you mean '${suggestion}'?` : undefined,
123
+ location: binding.location,
124
+ },
125
+ };
126
+ }
127
+ // Check for TwoWay binding on readonly property
128
+ if (binding.parsed.mode === 'TwoWay' && !property.hasSetter) {
129
+ return {
130
+ unresolved: {
131
+ xamlFile: xamlPath,
132
+ bindingPath,
133
+ reason: `TwoWay binding on readonly property '${propertyName}'`,
134
+ suggestion: 'Change binding mode to OneWay or add setter to property',
135
+ location: binding.location,
136
+ },
137
+ };
138
+ }
139
+ return {
140
+ link: {
141
+ xamlFile: xamlPath,
142
+ xamlElement: binding.elementName,
143
+ bindingPath,
144
+ viewModelClass: viewModel.className,
145
+ viewModelProperty: property.name,
146
+ propertyType: property.type,
147
+ notifiesChange: property.raisesPropertyChanged,
148
+ locations: {
149
+ xaml: binding.location,
150
+ csharp: property.location,
151
+ },
152
+ confidence: 0.9,
153
+ },
154
+ };
155
+ }
156
+ /**
157
+ * Link a command binding to ViewModel command
158
+ */
159
+ linkCommand(xamlPath, command, viewModel) {
160
+ const commandPath = command.binding;
161
+ if (!viewModel) {
162
+ return {
163
+ unresolved: {
164
+ xamlFile: xamlPath,
165
+ bindingPath: commandPath,
166
+ reason: 'Could not resolve DataContext',
167
+ location: command.location,
168
+ },
169
+ };
170
+ }
171
+ // Find command in ViewModel
172
+ const vmCommand = viewModel.commands.find(c => c.name === commandPath);
173
+ if (!vmCommand) {
174
+ // Check if it's a property that might be a command
175
+ const property = viewModel.properties.find(p => p.name === commandPath);
176
+ if (property && property.type.includes('Command')) {
177
+ return {
178
+ link: {
179
+ xamlFile: xamlPath,
180
+ xamlElement: command.elementName,
181
+ bindingPath: commandPath,
182
+ viewModelClass: viewModel.className,
183
+ viewModelProperty: property.name,
184
+ propertyType: property.type,
185
+ notifiesChange: false,
186
+ locations: {
187
+ xaml: command.location,
188
+ csharp: property.location,
189
+ },
190
+ confidence: 0.85,
191
+ },
192
+ };
193
+ }
194
+ // Command not found
195
+ const suggestion = this.findSimilarCommand(commandPath, viewModel);
196
+ return {
197
+ unresolved: {
198
+ xamlFile: xamlPath,
199
+ bindingPath: commandPath,
200
+ reason: `Command '${commandPath}' not found in ${viewModel.className}`,
201
+ suggestion: suggestion ? `Did you mean '${suggestion}'?` : undefined,
202
+ location: command.location,
203
+ },
204
+ };
205
+ }
206
+ return {
207
+ link: {
208
+ xamlFile: xamlPath,
209
+ xamlElement: command.elementName,
210
+ bindingPath: commandPath,
211
+ viewModelClass: viewModel.className,
212
+ viewModelProperty: vmCommand.name,
213
+ propertyType: vmCommand.commandType,
214
+ notifiesChange: false,
215
+ locations: {
216
+ xaml: command.location,
217
+ csharp: vmCommand.location,
218
+ },
219
+ confidence: 0.95,
220
+ },
221
+ };
222
+ }
223
+ /**
224
+ * Find similar property name for suggestions
225
+ */
226
+ findSimilarProperty(name, viewModel) {
227
+ const lowerName = name.toLowerCase();
228
+ const candidates = viewModel.properties.map(p => p.name);
229
+ for (const candidate of candidates) {
230
+ const lowerCandidate = candidate.toLowerCase();
231
+ if (lowerCandidate.startsWith(lowerName.slice(0, 3)) ||
232
+ lowerCandidate.includes(lowerName) ||
233
+ lowerName.includes(lowerCandidate)) {
234
+ return candidate;
235
+ }
236
+ }
237
+ return null;
238
+ }
239
+ /**
240
+ * Find similar command name for suggestions
241
+ */
242
+ findSimilarCommand(name, viewModel) {
243
+ const lowerName = name.toLowerCase();
244
+ const candidates = viewModel.commands.map(c => c.name);
245
+ for (const candidate of candidates) {
246
+ const lowerCandidate = candidate.toLowerCase();
247
+ if (lowerCandidate.startsWith(lowerName.slice(0, 3)) ||
248
+ lowerCandidate.includes(lowerName) ||
249
+ lowerName.includes(lowerCandidate)) {
250
+ return candidate;
251
+ }
252
+ }
253
+ return null;
254
+ }
255
+ /**
256
+ * Get the DataContext resolver
257
+ */
258
+ getResolver() {
259
+ return this.resolver;
260
+ }
261
+ }
262
+ /**
263
+ * Factory function
264
+ */
265
+ export function createViewModelLinker(resolver) {
266
+ return new ViewModelLinker(resolver);
267
+ }
268
+ //# sourceMappingURL=viewmodel-linker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewmodel-linker.js","sourceRoot":"","sources":["../../../src/wpf/linkers/viewmodel-linker.ts"],"names":[],"mappings":"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"}