d365fo-mcp 1.0.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 (1055) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +205 -0
  3. package/dist/bridge/bridgeAdapter.d.ts +319 -0
  4. package/dist/bridge/bridgeAdapter.d.ts.map +1 -0
  5. package/dist/bridge/bridgeAdapter.js +2003 -0
  6. package/dist/bridge/bridgeAdapter.js.map +1 -0
  7. package/dist/bridge/bridgeClient.d.ts +255 -0
  8. package/dist/bridge/bridgeClient.d.ts.map +1 -0
  9. package/dist/bridge/bridgeClient.js +741 -0
  10. package/dist/bridge/bridgeClient.js.map +1 -0
  11. package/dist/bridge/bridgeTypes.d.ts +561 -0
  12. package/dist/bridge/bridgeTypes.d.ts.map +1 -0
  13. package/dist/bridge/bridgeTypes.js +6 -0
  14. package/dist/bridge/bridgeTypes.js.map +1 -0
  15. package/dist/bridge/debouncedRefresh.d.ts +16 -0
  16. package/dist/bridge/debouncedRefresh.d.ts.map +1 -0
  17. package/dist/bridge/debouncedRefresh.js +77 -0
  18. package/dist/bridge/debouncedRefresh.js.map +1 -0
  19. package/dist/bridge/index.d.ts +21 -0
  20. package/dist/bridge/index.d.ts.map +1 -0
  21. package/dist/bridge/index.js +20 -0
  22. package/dist/bridge/index.js.map +1 -0
  23. package/dist/cli/commands/config.d.ts +8 -0
  24. package/dist/cli/commands/config.d.ts.map +1 -0
  25. package/dist/cli/commands/config.js +77 -0
  26. package/dist/cli/commands/config.js.map +1 -0
  27. package/dist/cli/commands/doctor.d.ts +2 -0
  28. package/dist/cli/commands/doctor.d.ts.map +1 -0
  29. package/dist/cli/commands/doctor.js +177 -0
  30. package/dist/cli/commands/doctor.js.map +1 -0
  31. package/dist/cli/commands/indexCmd.d.ts +8 -0
  32. package/dist/cli/commands/indexCmd.d.ts.map +1 -0
  33. package/dist/cli/commands/indexCmd.js +78 -0
  34. package/dist/cli/commands/indexCmd.js.map +1 -0
  35. package/dist/cli/commands/instance.d.ts +4 -0
  36. package/dist/cli/commands/instance.d.ts.map +1 -0
  37. package/dist/cli/commands/instance.js +183 -0
  38. package/dist/cli/commands/instance.js.map +1 -0
  39. package/dist/cli/commands/setup.d.ts +4 -0
  40. package/dist/cli/commands/setup.d.ts.map +1 -0
  41. package/dist/cli/commands/setup.js +246 -0
  42. package/dist/cli/commands/setup.js.map +1 -0
  43. package/dist/cli/commands/start.d.ts +2 -0
  44. package/dist/cli/commands/start.d.ts.map +1 -0
  45. package/dist/cli/commands/start.js +49 -0
  46. package/dist/cli/commands/start.js.map +1 -0
  47. package/dist/cli/commands/update.d.ts +4 -0
  48. package/dist/cli/commands/update.d.ts.map +1 -0
  49. package/dist/cli/commands/update.js +55 -0
  50. package/dist/cli/commands/update.js.map +1 -0
  51. package/dist/cli/context.d.ts +26 -0
  52. package/dist/cli/context.d.ts.map +1 -0
  53. package/dist/cli/context.js +38 -0
  54. package/dist/cli/context.js.map +1 -0
  55. package/dist/cli/envFile.d.ts +23 -0
  56. package/dist/cli/envFile.d.ts.map +1 -0
  57. package/dist/cli/envFile.js +79 -0
  58. package/dist/cli/envFile.js.map +1 -0
  59. package/dist/cli/exec.d.ts +13 -0
  60. package/dist/cli/exec.d.ts.map +1 -0
  61. package/dist/cli/exec.js +47 -0
  62. package/dist/cli/exec.js.map +1 -0
  63. package/dist/cli/index.d.ts +3 -0
  64. package/dist/cli/index.d.ts.map +1 -0
  65. package/dist/cli/index.js +122 -0
  66. package/dist/cli/index.js.map +1 -0
  67. package/dist/cli/instances.d.ts +19 -0
  68. package/dist/cli/instances.d.ts.map +1 -0
  69. package/dist/cli/instances.js +60 -0
  70. package/dist/cli/instances.js.map +1 -0
  71. package/dist/cli/mcpJson.d.ts +15 -0
  72. package/dist/cli/mcpJson.d.ts.map +1 -0
  73. package/dist/cli/mcpJson.js +44 -0
  74. package/dist/cli/mcpJson.js.map +1 -0
  75. package/dist/cli/settingsPrompt.d.ts +20 -0
  76. package/dist/cli/settingsPrompt.d.ts.map +1 -0
  77. package/dist/cli/settingsPrompt.js +150 -0
  78. package/dist/cli/settingsPrompt.js.map +1 -0
  79. package/dist/cli/settingsStore.d.ts +47 -0
  80. package/dist/cli/settingsStore.d.ts.map +1 -0
  81. package/dist/cli/settingsStore.js +144 -0
  82. package/dist/cli/settingsStore.js.map +1 -0
  83. package/dist/cli/target.d.ts +23 -0
  84. package/dist/cli/target.d.ts.map +1 -0
  85. package/dist/cli/target.js +62 -0
  86. package/dist/cli/target.js.map +1 -0
  87. package/dist/cli/ui.d.ts +26 -0
  88. package/dist/cli/ui.d.ts.map +1 -0
  89. package/dist/cli/ui.js +48 -0
  90. package/dist/cli/ui.js.map +1 -0
  91. package/dist/cli/xppConfig.d.ts +35 -0
  92. package/dist/cli/xppConfig.d.ts.map +1 -0
  93. package/dist/cli/xppConfig.js +97 -0
  94. package/dist/cli/xppConfig.js.map +1 -0
  95. package/dist/config/configFile.d.ts +50 -0
  96. package/dist/config/configFile.d.ts.map +1 -0
  97. package/dist/config/configFile.js +152 -0
  98. package/dist/config/configFile.js.map +1 -0
  99. package/dist/config/settings.d.ts +58 -0
  100. package/dist/config/settings.d.ts.map +1 -0
  101. package/dist/config/settings.js +641 -0
  102. package/dist/config/settings.js.map +1 -0
  103. package/dist/database/download.d.ts +27 -0
  104. package/dist/database/download.d.ts.map +1 -0
  105. package/dist/database/download.js +241 -0
  106. package/dist/database/download.js.map +1 -0
  107. package/dist/eval/audit/knowledgeAudit.d.ts +66 -0
  108. package/dist/eval/audit/knowledgeAudit.d.ts.map +1 -0
  109. package/dist/eval/audit/knowledgeAudit.js +117 -0
  110. package/dist/eval/audit/knowledgeAudit.js.map +1 -0
  111. package/dist/eval/audit/knowledgeAuditCli.d.ts +17 -0
  112. package/dist/eval/audit/knowledgeAuditCli.d.ts.map +1 -0
  113. package/dist/eval/audit/knowledgeAuditCli.js +83 -0
  114. package/dist/eval/audit/knowledgeAuditCli.js.map +1 -0
  115. package/dist/eval/audit/knowledgeRefs.d.ts +37 -0
  116. package/dist/eval/audit/knowledgeRefs.d.ts.map +1 -0
  117. package/dist/eval/audit/knowledgeRefs.js +150 -0
  118. package/dist/eval/audit/knowledgeRefs.js.map +1 -0
  119. package/dist/eval/audit/symbolLookup.d.ts +23 -0
  120. package/dist/eval/audit/symbolLookup.d.ts.map +1 -0
  121. package/dist/eval/audit/symbolLookup.js +80 -0
  122. package/dist/eval/audit/symbolLookup.js.map +1 -0
  123. package/dist/eval/coverage/coverage.d.ts +65 -0
  124. package/dist/eval/coverage/coverage.d.ts.map +1 -0
  125. package/dist/eval/coverage/coverage.js +136 -0
  126. package/dist/eval/coverage/coverage.js.map +1 -0
  127. package/dist/eval/coverage/coverageCli.d.ts +13 -0
  128. package/dist/eval/coverage/coverageCli.d.ts.map +1 -0
  129. package/dist/eval/coverage/coverageCli.js +106 -0
  130. package/dist/eval/coverage/coverageCli.js.map +1 -0
  131. package/dist/eval/coverage/sources.d.ts +17 -0
  132. package/dist/eval/coverage/sources.d.ts.map +1 -0
  133. package/dist/eval/coverage/sources.js +40 -0
  134. package/dist/eval/coverage/sources.js.map +1 -0
  135. package/dist/eval/coverage/taxonomy.d.ts +59 -0
  136. package/dist/eval/coverage/taxonomy.d.ts.map +1 -0
  137. package/dist/eval/coverage/taxonomy.js +400 -0
  138. package/dist/eval/coverage/taxonomy.js.map +1 -0
  139. package/dist/eval/improver/caseMining.d.ts +55 -0
  140. package/dist/eval/improver/caseMining.d.ts.map +1 -0
  141. package/dist/eval/improver/caseMining.js +64 -0
  142. package/dist/eval/improver/caseMining.js.map +1 -0
  143. package/dist/eval/improver/caseMiningCli.d.ts +10 -0
  144. package/dist/eval/improver/caseMiningCli.d.ts.map +1 -0
  145. package/dist/eval/improver/caseMiningCli.js +50 -0
  146. package/dist/eval/improver/caseMiningCli.js.map +1 -0
  147. package/dist/eval/improver/cli.d.ts +11 -0
  148. package/dist/eval/improver/cli.d.ts.map +1 -0
  149. package/dist/eval/improver/cli.js +73 -0
  150. package/dist/eval/improver/cli.js.map +1 -0
  151. package/dist/eval/improver/cluster.d.ts +47 -0
  152. package/dist/eval/improver/cluster.d.ts.map +1 -0
  153. package/dist/eval/improver/cluster.js +0 -0
  154. package/dist/eval/improver/cluster.js.map +1 -0
  155. package/dist/eval/improver/corpusIO.d.ts +26 -0
  156. package/dist/eval/improver/corpusIO.d.ts.map +1 -0
  157. package/dist/eval/improver/corpusIO.js +50 -0
  158. package/dist/eval/improver/corpusIO.js.map +1 -0
  159. package/dist/eval/improver/fixBrief.d.ts +34 -0
  160. package/dist/eval/improver/fixBrief.d.ts.map +1 -0
  161. package/dist/eval/improver/fixBrief.js +69 -0
  162. package/dist/eval/improver/fixBrief.js.map +1 -0
  163. package/dist/eval/improver/fixBriefCli.d.ts +11 -0
  164. package/dist/eval/improver/fixBriefCli.d.ts.map +1 -0
  165. package/dist/eval/improver/fixBriefCli.js +46 -0
  166. package/dist/eval/improver/fixBriefCli.js.map +1 -0
  167. package/dist/eval/improver/flakeDetection.d.ts +50 -0
  168. package/dist/eval/improver/flakeDetection.d.ts.map +1 -0
  169. package/dist/eval/improver/flakeDetection.js +0 -0
  170. package/dist/eval/improver/flakeDetection.js.map +1 -0
  171. package/dist/eval/improver/flakeDetectionCli.d.ts +8 -0
  172. package/dist/eval/improver/flakeDetectionCli.d.ts.map +1 -0
  173. package/dist/eval/improver/flakeDetectionCli.js +27 -0
  174. package/dist/eval/improver/flakeDetectionCli.js.map +1 -0
  175. package/dist/eval/improver/heldout.d.ts +44 -0
  176. package/dist/eval/improver/heldout.d.ts.map +1 -0
  177. package/dist/eval/improver/heldout.js +52 -0
  178. package/dist/eval/improver/heldout.js.map +1 -0
  179. package/dist/eval/improver/knowledgeFeedback.d.ts +56 -0
  180. package/dist/eval/improver/knowledgeFeedback.d.ts.map +1 -0
  181. package/dist/eval/improver/knowledgeFeedback.js +88 -0
  182. package/dist/eval/improver/knowledgeFeedback.js.map +1 -0
  183. package/dist/eval/improver/knowledgeFeedbackCli.d.ts +8 -0
  184. package/dist/eval/improver/knowledgeFeedbackCli.d.ts.map +1 -0
  185. package/dist/eval/improver/knowledgeFeedbackCli.js +28 -0
  186. package/dist/eval/improver/knowledgeFeedbackCli.js.map +1 -0
  187. package/dist/eval/improver/report.d.ts +36 -0
  188. package/dist/eval/improver/report.d.ts.map +1 -0
  189. package/dist/eval/improver/report.js +61 -0
  190. package/dist/eval/improver/report.js.map +1 -0
  191. package/dist/eval/improver/reportCli.d.ts +7 -0
  192. package/dist/eval/improver/reportCli.d.ts.map +1 -0
  193. package/dist/eval/improver/reportCli.js +27 -0
  194. package/dist/eval/improver/reportCli.js.map +1 -0
  195. package/dist/eval/oracle/actualArtifactResolution.d.ts +49 -0
  196. package/dist/eval/oracle/actualArtifactResolution.d.ts.map +1 -0
  197. package/dist/eval/oracle/actualArtifactResolution.js +73 -0
  198. package/dist/eval/oracle/actualArtifactResolution.js.map +1 -0
  199. package/dist/eval/oracle/cli.d.ts +30 -0
  200. package/dist/eval/oracle/cli.d.ts.map +1 -0
  201. package/dist/eval/oracle/cli.js +179 -0
  202. package/dist/eval/oracle/cli.js.map +1 -0
  203. package/dist/eval/oracle/diff.d.ts +26 -0
  204. package/dist/eval/oracle/diff.d.ts.map +1 -0
  205. package/dist/eval/oracle/diff.js +51 -0
  206. package/dist/eval/oracle/diff.js.map +1 -0
  207. package/dist/eval/oracle/index.d.ts +81 -0
  208. package/dist/eval/oracle/index.d.ts.map +1 -0
  209. package/dist/eval/oracle/index.js +55 -0
  210. package/dist/eval/oracle/index.js.map +1 -0
  211. package/dist/eval/oracle/normalize.d.ts +85 -0
  212. package/dist/eval/oracle/normalize.d.ts.map +1 -0
  213. package/dist/eval/oracle/normalize.js +321 -0
  214. package/dist/eval/oracle/normalize.js.map +1 -0
  215. package/dist/eval/oracle/score.d.ts +26 -0
  216. package/dist/eval/oracle/score.d.ts.map +1 -0
  217. package/dist/eval/oracle/score.js +15 -0
  218. package/dist/eval/oracle/score.js.map +1 -0
  219. package/dist/eval/oracle/systest.d.ts +30 -0
  220. package/dist/eval/oracle/systest.d.ts.map +1 -0
  221. package/dist/eval/oracle/systest.js +98 -0
  222. package/dist/eval/oracle/systest.js.map +1 -0
  223. package/dist/index.d.ts +6 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +753 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.d.ts +10 -0
  228. package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.d.ts.map +1 -0
  229. package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.js +38 -0
  230. package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.js.map +1 -0
  231. package/dist/knowledge/formPatterns/catalog/subPatterns/fields.d.ts +21 -0
  232. package/dist/knowledge/formPatterns/catalog/subPatterns/fields.d.ts.map +1 -0
  233. package/dist/knowledge/formPatterns/catalog/subPatterns/fields.js +168 -0
  234. package/dist/knowledge/formPatterns/catalog/subPatterns/fields.js.map +1 -0
  235. package/dist/knowledge/formPatterns/catalog/subPatterns/panels.d.ts +9 -0
  236. package/dist/knowledge/formPatterns/catalog/subPatterns/panels.d.ts.map +1 -0
  237. package/dist/knowledge/formPatterns/catalog/subPatterns/panels.js +47 -0
  238. package/dist/knowledge/formPatterns/catalog/subPatterns/panels.js.map +1 -0
  239. package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.d.ts +16 -0
  240. package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.d.ts.map +1 -0
  241. package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.js +124 -0
  242. package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.js.map +1 -0
  243. package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.d.ts +12 -0
  244. package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.d.ts.map +1 -0
  245. package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.js +36 -0
  246. package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.js.map +1 -0
  247. package/dist/knowledge/formPatterns/catalog/topLevel/common.d.ts +11 -0
  248. package/dist/knowledge/formPatterns/catalog/topLevel/common.d.ts.map +1 -0
  249. package/dist/knowledge/formPatterns/catalog/topLevel/common.js +37 -0
  250. package/dist/knowledge/formPatterns/catalog/topLevel/common.js.map +1 -0
  251. package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.d.ts +8 -0
  252. package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.d.ts.map +1 -0
  253. package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.js +86 -0
  254. package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.js.map +1 -0
  255. package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.d.ts +7 -0
  256. package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.d.ts.map +1 -0
  257. package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.js +69 -0
  258. package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.js.map +1 -0
  259. package/dist/knowledge/formPatterns/catalog/topLevel/dialog.d.ts +14 -0
  260. package/dist/knowledge/formPatterns/catalog/topLevel/dialog.d.ts.map +1 -0
  261. package/dist/knowledge/formPatterns/catalog/topLevel/dialog.js +187 -0
  262. package/dist/knowledge/formPatterns/catalog/topLevel/dialog.js.map +1 -0
  263. package/dist/knowledge/formPatterns/catalog/topLevel/factBox.d.ts +10 -0
  264. package/dist/knowledge/formPatterns/catalog/topLevel/factBox.d.ts.map +1 -0
  265. package/dist/knowledge/formPatterns/catalog/topLevel/factBox.js +54 -0
  266. package/dist/knowledge/formPatterns/catalog/topLevel/factBox.js.map +1 -0
  267. package/dist/knowledge/formPatterns/catalog/topLevel/listPage.d.ts +7 -0
  268. package/dist/knowledge/formPatterns/catalog/topLevel/listPage.d.ts.map +1 -0
  269. package/dist/knowledge/formPatterns/catalog/topLevel/listPage.js +33 -0
  270. package/dist/knowledge/formPatterns/catalog/topLevel/listPage.js.map +1 -0
  271. package/dist/knowledge/formPatterns/catalog/topLevel/lookup.d.ts +10 -0
  272. package/dist/knowledge/formPatterns/catalog/topLevel/lookup.d.ts.map +1 -0
  273. package/dist/knowledge/formPatterns/catalog/topLevel/lookup.js +95 -0
  274. package/dist/knowledge/formPatterns/catalog/topLevel/lookup.js.map +1 -0
  275. package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.d.ts +16 -0
  276. package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.d.ts.map +1 -0
  277. package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.js +158 -0
  278. package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.js.map +1 -0
  279. package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.d.ts +7 -0
  280. package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.d.ts.map +1 -0
  281. package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.js +34 -0
  282. package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.js.map +1 -0
  283. package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.d.ts +9 -0
  284. package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.d.ts.map +1 -0
  285. package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.js +99 -0
  286. package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.js.map +1 -0
  287. package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.d.ts +8 -0
  288. package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.d.ts.map +1 -0
  289. package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.js +95 -0
  290. package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.js.map +1 -0
  291. package/dist/knowledge/formPatterns/catalog/topLevel/task.d.ts +9 -0
  292. package/dist/knowledge/formPatterns/catalog/topLevel/task.d.ts.map +1 -0
  293. package/dist/knowledge/formPatterns/catalog/topLevel/task.js +42 -0
  294. package/dist/knowledge/formPatterns/catalog/topLevel/task.js.map +1 -0
  295. package/dist/knowledge/formPatterns/catalog/topLevel/wizard.d.ts +7 -0
  296. package/dist/knowledge/formPatterns/catalog/topLevel/wizard.d.ts.map +1 -0
  297. package/dist/knowledge/formPatterns/catalog/topLevel/wizard.js +42 -0
  298. package/dist/knowledge/formPatterns/catalog/topLevel/wizard.js.map +1 -0
  299. package/dist/knowledge/formPatterns/catalog/topLevel/workspace.d.ts +17 -0
  300. package/dist/knowledge/formPatterns/catalog/topLevel/workspace.d.ts.map +1 -0
  301. package/dist/knowledge/formPatterns/catalog/topLevel/workspace.js +157 -0
  302. package/dist/knowledge/formPatterns/catalog/topLevel/workspace.js.map +1 -0
  303. package/dist/knowledge/formPatterns/crossCheck.d.ts +44 -0
  304. package/dist/knowledge/formPatterns/crossCheck.d.ts.map +1 -0
  305. package/dist/knowledge/formPatterns/crossCheck.js +109 -0
  306. package/dist/knowledge/formPatterns/crossCheck.js.map +1 -0
  307. package/dist/knowledge/formPatterns/index.d.ts +30 -0
  308. package/dist/knowledge/formPatterns/index.d.ts.map +1 -0
  309. package/dist/knowledge/formPatterns/index.js +158 -0
  310. package/dist/knowledge/formPatterns/index.js.map +1 -0
  311. package/dist/knowledge/formPatterns/methodStubs.d.ts +45 -0
  312. package/dist/knowledge/formPatterns/methodStubs.d.ts.map +1 -0
  313. package/dist/knowledge/formPatterns/methodStubs.js +257 -0
  314. package/dist/knowledge/formPatterns/methodStubs.js.map +1 -0
  315. package/dist/knowledge/formPatterns/types.d.ts +115 -0
  316. package/dist/knowledge/formPatterns/types.d.ts.map +1 -0
  317. package/dist/knowledge/formPatterns/types.js +44 -0
  318. package/dist/knowledge/formPatterns/types.js.map +1 -0
  319. package/dist/metadata/enhancedParser.d.ts +91 -0
  320. package/dist/metadata/enhancedParser.d.ts.map +1 -0
  321. package/dist/metadata/enhancedParser.js +379 -0
  322. package/dist/metadata/enhancedParser.js.map +1 -0
  323. package/dist/metadata/formPatternMiner.d.ts +78 -0
  324. package/dist/metadata/formPatternMiner.d.ts.map +1 -0
  325. package/dist/metadata/formPatternMiner.js +220 -0
  326. package/dist/metadata/formPatternMiner.js.map +1 -0
  327. package/dist/metadata/labelParser.d.ts +71 -0
  328. package/dist/metadata/labelParser.d.ts.map +1 -0
  329. package/dist/metadata/labelParser.js +258 -0
  330. package/dist/metadata/labelParser.js.map +1 -0
  331. package/dist/metadata/symbolCountsWorker.d.ts +16 -0
  332. package/dist/metadata/symbolCountsWorker.d.ts.map +1 -0
  333. package/dist/metadata/symbolCountsWorker.js +42 -0
  334. package/dist/metadata/symbolCountsWorker.js.map +1 -0
  335. package/dist/metadata/symbolIndex.d.ts +474 -0
  336. package/dist/metadata/symbolIndex.d.ts.map +1 -0
  337. package/dist/metadata/symbolIndex.js +3152 -0
  338. package/dist/metadata/symbolIndex.js.map +1 -0
  339. package/dist/metadata/types.d.ts +267 -0
  340. package/dist/metadata/types.d.ts.map +1 -0
  341. package/dist/metadata/types.js +5 -0
  342. package/dist/metadata/types.js.map +1 -0
  343. package/dist/metadata/xmlParser.d.ts +232 -0
  344. package/dist/metadata/xmlParser.d.ts.map +1 -0
  345. package/dist/metadata/xmlParser.js +1021 -0
  346. package/dist/metadata/xmlParser.js.map +1 -0
  347. package/dist/metadata/xppDeclaration.d.ts +116 -0
  348. package/dist/metadata/xppDeclaration.d.ts.map +1 -0
  349. package/dist/metadata/xppDeclaration.js +350 -0
  350. package/dist/metadata/xppDeclaration.js.map +1 -0
  351. package/dist/middleware/apiKeyAuth.d.ts +7 -0
  352. package/dist/middleware/apiKeyAuth.d.ts.map +1 -0
  353. package/dist/middleware/apiKeyAuth.js +70 -0
  354. package/dist/middleware/apiKeyAuth.js.map +1 -0
  355. package/dist/middleware/rateLimiter.d.ts +7 -0
  356. package/dist/middleware/rateLimiter.d.ts.map +1 -0
  357. package/dist/middleware/rateLimiter.js +78 -0
  358. package/dist/middleware/rateLimiter.js.map +1 -0
  359. package/dist/prompts/codeReview.d.ts +8 -0
  360. package/dist/prompts/codeReview.d.ts.map +1 -0
  361. package/dist/prompts/codeReview.js +619 -0
  362. package/dist/prompts/codeReview.js.map +1 -0
  363. package/dist/prompts/index.d.ts +6 -0
  364. package/dist/prompts/index.d.ts.map +1 -0
  365. package/dist/prompts/index.js +6 -0
  366. package/dist/prompts/index.js.map +1 -0
  367. package/dist/prompts/systemInstructions.d.ts +33 -0
  368. package/dist/prompts/systemInstructions.d.ts.map +1 -0
  369. package/dist/prompts/systemInstructions.js +154 -0
  370. package/dist/prompts/systemInstructions.js.map +1 -0
  371. package/dist/resources/classResource.d.ts +17 -0
  372. package/dist/resources/classResource.d.ts.map +1 -0
  373. package/dist/resources/classResource.js +33 -0
  374. package/dist/resources/classResource.js.map +1 -0
  375. package/dist/resources/index.d.ts +20 -0
  376. package/dist/resources/index.d.ts.map +1 -0
  377. package/dist/resources/index.js +154 -0
  378. package/dist/resources/index.js.map +1 -0
  379. package/dist/server/mcpServer.d.ts +11 -0
  380. package/dist/server/mcpServer.d.ts.map +1 -0
  381. package/dist/server/mcpServer.js +185 -0
  382. package/dist/server/mcpServer.js.map +1 -0
  383. package/dist/server/serverMode.d.ts +53 -0
  384. package/dist/server/serverMode.d.ts.map +1 -0
  385. package/dist/server/serverMode.js +72 -0
  386. package/dist/server/serverMode.js.map +1 -0
  387. package/dist/server/toolAnnotations.d.ts +28 -0
  388. package/dist/server/toolAnnotations.d.ts.map +1 -0
  389. package/dist/server/toolAnnotations.js +70 -0
  390. package/dist/server/toolAnnotations.js.map +1 -0
  391. package/dist/server/toolSchemas/analyzeCode.d.ts +71 -0
  392. package/dist/server/toolSchemas/analyzeCode.d.ts.map +1 -0
  393. package/dist/server/toolSchemas/analyzeCode.js +50 -0
  394. package/dist/server/toolSchemas/analyzeCode.js.map +1 -0
  395. package/dist/server/toolSchemas/batchGetInfo.d.ts +32 -0
  396. package/dist/server/toolSchemas/batchGetInfo.d.ts.map +1 -0
  397. package/dist/server/toolSchemas/batchGetInfo.js +35 -0
  398. package/dist/server/toolSchemas/batchGetInfo.js.map +1 -0
  399. package/dist/server/toolSchemas/buildD365foProject.d.ts +44 -0
  400. package/dist/server/toolSchemas/buildD365foProject.d.ts.map +1 -0
  401. package/dist/server/toolSchemas/buildD365foProject.js +47 -0
  402. package/dist/server/toolSchemas/buildD365foProject.js.map +1 -0
  403. package/dist/server/toolSchemas/d365foFile.d.ts +99 -0
  404. package/dist/server/toolSchemas/d365foFile.d.ts.map +1 -0
  405. package/dist/server/toolSchemas/d365foFile.js +163 -0
  406. package/dist/server/toolSchemas/d365foFile.js.map +1 -0
  407. package/dist/server/toolSchemas/extensionInfo.d.ts +65 -0
  408. package/dist/server/toolSchemas/extensionInfo.d.ts.map +1 -0
  409. package/dist/server/toolSchemas/extensionInfo.js +73 -0
  410. package/dist/server/toolSchemas/extensionInfo.js.map +1 -0
  411. package/dist/server/toolSchemas/findReferences.d.ts +35 -0
  412. package/dist/server/toolSchemas/findReferences.d.ts.map +1 -0
  413. package/dist/server/toolSchemas/findReferences.js +35 -0
  414. package/dist/server/toolSchemas/findReferences.js.map +1 -0
  415. package/dist/server/toolSchemas/generateObject.d.ts +246 -0
  416. package/dist/server/toolSchemas/generateObject.d.ts.map +1 -0
  417. package/dist/server/toolSchemas/generateObject.js +158 -0
  418. package/dist/server/toolSchemas/generateObject.js.map +1 -0
  419. package/dist/server/toolSchemas/getKnowledge.d.ts +39 -0
  420. package/dist/server/toolSchemas/getKnowledge.d.ts.map +1 -0
  421. package/dist/server/toolSchemas/getKnowledge.js +46 -0
  422. package/dist/server/toolSchemas/getKnowledge.js.map +1 -0
  423. package/dist/server/toolSchemas/getMethod.d.ts +30 -0
  424. package/dist/server/toolSchemas/getMethod.d.ts.map +1 -0
  425. package/dist/server/toolSchemas/getMethod.js +34 -0
  426. package/dist/server/toolSchemas/getMethod.js.map +1 -0
  427. package/dist/server/toolSchemas/getObjectInfo.d.ts +24 -0
  428. package/dist/server/toolSchemas/getObjectInfo.d.ts.map +1 -0
  429. package/dist/server/toolSchemas/getObjectInfo.js +30 -0
  430. package/dist/server/toolSchemas/getObjectInfo.js.map +1 -0
  431. package/dist/server/toolSchemas/getWorkspaceInfo.d.ts +29 -0
  432. package/dist/server/toolSchemas/getWorkspaceInfo.d.ts.map +1 -0
  433. package/dist/server/toolSchemas/getWorkspaceInfo.js +29 -0
  434. package/dist/server/toolSchemas/getWorkspaceInfo.js.map +1 -0
  435. package/dist/server/toolSchemas/index.d.ts +1142 -0
  436. package/dist/server/toolSchemas/index.d.ts.map +1 -0
  437. package/dist/server/toolSchemas/index.js +60 -0
  438. package/dist/server/toolSchemas/index.js.map +1 -0
  439. package/dist/server/toolSchemas/labels.d.ts +172 -0
  440. package/dist/server/toolSchemas/labels.d.ts.map +1 -0
  441. package/dist/server/toolSchemas/labels.js +159 -0
  442. package/dist/server/toolSchemas/labels.js.map +1 -0
  443. package/dist/server/toolSchemas/objectPatterns.d.ts +93 -0
  444. package/dist/server/toolSchemas/objectPatterns.d.ts.map +1 -0
  445. package/dist/server/toolSchemas/objectPatterns.js +104 -0
  446. package/dist/server/toolSchemas/objectPatterns.js.map +1 -0
  447. package/dist/server/toolSchemas/prepare.d.ts +49 -0
  448. package/dist/server/toolSchemas/prepare.d.ts.map +1 -0
  449. package/dist/server/toolSchemas/prepare.js +57 -0
  450. package/dist/server/toolSchemas/prepare.js.map +1 -0
  451. package/dist/server/toolSchemas/reviewWorkspaceChanges.d.ts +20 -0
  452. package/dist/server/toolSchemas/reviewWorkspaceChanges.d.ts.map +1 -0
  453. package/dist/server/toolSchemas/reviewWorkspaceChanges.js +19 -0
  454. package/dist/server/toolSchemas/reviewWorkspaceChanges.js.map +1 -0
  455. package/dist/server/toolSchemas/runBpCheck.d.ts +36 -0
  456. package/dist/server/toolSchemas/runBpCheck.d.ts.map +1 -0
  457. package/dist/server/toolSchemas/runBpCheck.js +21 -0
  458. package/dist/server/toolSchemas/runBpCheck.js.map +1 -0
  459. package/dist/server/toolSchemas/runSystestClass.d.ts +32 -0
  460. package/dist/server/toolSchemas/runSystestClass.d.ts.map +1 -0
  461. package/dist/server/toolSchemas/runSystestClass.js +20 -0
  462. package/dist/server/toolSchemas/runSystestClass.js.map +1 -0
  463. package/dist/server/toolSchemas/search.d.ts +109 -0
  464. package/dist/server/toolSchemas/search.d.ts.map +1 -0
  465. package/dist/server/toolSchemas/search.js +123 -0
  466. package/dist/server/toolSchemas/search.js.map +1 -0
  467. package/dist/server/toolSchemas/securityInfo.d.ts +45 -0
  468. package/dist/server/toolSchemas/securityInfo.d.ts.map +1 -0
  469. package/dist/server/toolSchemas/securityInfo.js +39 -0
  470. package/dist/server/toolSchemas/securityInfo.js.map +1 -0
  471. package/dist/server/toolSchemas/suggestEdt.d.ts +29 -0
  472. package/dist/server/toolSchemas/suggestEdt.d.ts.map +1 -0
  473. package/dist/server/toolSchemas/suggestEdt.js +29 -0
  474. package/dist/server/toolSchemas/suggestEdt.js.map +1 -0
  475. package/dist/server/toolSchemas/triggerDbSync.d.ts +47 -0
  476. package/dist/server/toolSchemas/triggerDbSync.d.ts.map +1 -0
  477. package/dist/server/toolSchemas/triggerDbSync.js +31 -0
  478. package/dist/server/toolSchemas/triggerDbSync.js.map +1 -0
  479. package/dist/server/toolSchemas/undoLastModification.d.ts +20 -0
  480. package/dist/server/toolSchemas/undoLastModification.d.ts.map +1 -0
  481. package/dist/server/toolSchemas/undoLastModification.js +17 -0
  482. package/dist/server/toolSchemas/undoLastModification.js.map +1 -0
  483. package/dist/server/toolSchemas/updateSymbolIndex.d.ts +19 -0
  484. package/dist/server/toolSchemas/updateSymbolIndex.d.ts.map +1 -0
  485. package/dist/server/toolSchemas/updateSymbolIndex.js +18 -0
  486. package/dist/server/toolSchemas/updateSymbolIndex.js.map +1 -0
  487. package/dist/server/toolSchemas/validateCode.d.ts +35 -0
  488. package/dist/server/toolSchemas/validateCode.d.ts.map +1 -0
  489. package/dist/server/toolSchemas/validateCode.js +38 -0
  490. package/dist/server/toolSchemas/validateCode.js.map +1 -0
  491. package/dist/server/toolSchemas/validateObjectNaming.d.ts +33 -0
  492. package/dist/server/toolSchemas/validateObjectNaming.d.ts.map +1 -0
  493. package/dist/server/toolSchemas/validateObjectNaming.js +32 -0
  494. package/dist/server/toolSchemas/validateObjectNaming.js.map +1 -0
  495. package/dist/server/toolSchemas/verifyD365foProject.d.ts +50 -0
  496. package/dist/server/toolSchemas/verifyD365foProject.d.ts.map +1 -0
  497. package/dist/server/toolSchemas/verifyD365foProject.js +46 -0
  498. package/dist/server/toolSchemas/verifyD365foProject.js.map +1 -0
  499. package/dist/server/transport.d.ts +30 -0
  500. package/dist/server/transport.d.ts.map +1 -0
  501. package/dist/server/transport.js +391 -0
  502. package/dist/server/transport.js.map +1 -0
  503. package/dist/tools/analyzeCode.d.ts +17 -0
  504. package/dist/tools/analyzeCode.d.ts.map +1 -0
  505. package/dist/tools/analyzeCode.js +63 -0
  506. package/dist/tools/analyzeCode.js.map +1 -0
  507. package/dist/tools/analyzeCompleteness.d.ts +20 -0
  508. package/dist/tools/analyzeCompleteness.d.ts.map +1 -0
  509. package/dist/tools/analyzeCompleteness.js +103 -0
  510. package/dist/tools/analyzeCompleteness.js.map +1 -0
  511. package/dist/tools/analyzeExtensionPoints.d.ts +21 -0
  512. package/dist/tools/analyzeExtensionPoints.d.ts.map +1 -0
  513. package/dist/tools/analyzeExtensionPoints.js +343 -0
  514. package/dist/tools/analyzeExtensionPoints.js.map +1 -0
  515. package/dist/tools/analyzePatterns.d.ts +20 -0
  516. package/dist/tools/analyzePatterns.d.ts.map +1 -0
  517. package/dist/tools/analyzePatterns.js +71 -0
  518. package/dist/tools/analyzePatterns.js.map +1 -0
  519. package/dist/tools/apiUsagePatterns.d.ts +20 -0
  520. package/dist/tools/apiUsagePatterns.d.ts.map +1 -0
  521. package/dist/tools/apiUsagePatterns.js +136 -0
  522. package/dist/tools/apiUsagePatterns.js.map +1 -0
  523. package/dist/tools/batchGetInfo.d.ts +50 -0
  524. package/dist/tools/batchGetInfo.d.ts.map +1 -0
  525. package/dist/tools/batchGetInfo.js +52 -0
  526. package/dist/tools/batchGetInfo.js.map +1 -0
  527. package/dist/tools/batchSearch.d.ts +64 -0
  528. package/dist/tools/batchSearch.d.ts.map +1 -0
  529. package/dist/tools/batchSearch.js +265 -0
  530. package/dist/tools/batchSearch.js.map +1 -0
  531. package/dist/tools/buildProject.d.ts +28 -0
  532. package/dist/tools/buildProject.d.ts.map +1 -0
  533. package/dist/tools/buildProject.js +929 -0
  534. package/dist/tools/buildProject.js.map +1 -0
  535. package/dist/tools/classInfo.d.ts +8 -0
  536. package/dist/tools/classInfo.d.ts.map +1 -0
  537. package/dist/tools/classInfo.js +235 -0
  538. package/dist/tools/classInfo.js.map +1 -0
  539. package/dist/tools/codeGen.d.ts +19 -0
  540. package/dist/tools/codeGen.d.ts.map +1 -0
  541. package/dist/tools/codeGen.js +1956 -0
  542. package/dist/tools/codeGen.js.map +1 -0
  543. package/dist/tools/completion.d.ts +8 -0
  544. package/dist/tools/completion.d.ts.map +1 -0
  545. package/dist/tools/completion.js +272 -0
  546. package/dist/tools/completion.js.map +1 -0
  547. package/dist/tools/configKeyInfo.d.ts +22 -0
  548. package/dist/tools/configKeyInfo.d.ts.map +1 -0
  549. package/dist/tools/configKeyInfo.js +74 -0
  550. package/dist/tools/configKeyInfo.js.map +1 -0
  551. package/dist/tools/createD365File.d.ts +479 -0
  552. package/dist/tools/createD365File.d.ts.map +1 -0
  553. package/dist/tools/createD365File.js +4185 -0
  554. package/dist/tools/createD365File.js.map +1 -0
  555. package/dist/tools/createLabel.d.ts +51 -0
  556. package/dist/tools/createLabel.d.ts.map +1 -0
  557. package/dist/tools/createLabel.js +761 -0
  558. package/dist/tools/createLabel.js.map +1 -0
  559. package/dist/tools/d365foErrorHelp.d.ts +29 -0
  560. package/dist/tools/d365foErrorHelp.d.ts.map +1 -0
  561. package/dist/tools/d365foErrorHelp.js +389 -0
  562. package/dist/tools/d365foErrorHelp.js.map +1 -0
  563. package/dist/tools/d365foFile.d.ts +20 -0
  564. package/dist/tools/d365foFile.d.ts.map +1 -0
  565. package/dist/tools/d365foFile.js +58 -0
  566. package/dist/tools/d365foFile.js.map +1 -0
  567. package/dist/tools/d365foFileOpSpecs.d.ts +41 -0
  568. package/dist/tools/d365foFileOpSpecs.d.ts.map +1 -0
  569. package/dist/tools/d365foFileOpSpecs.js +336 -0
  570. package/dist/tools/d365foFileOpSpecs.js.map +1 -0
  571. package/dist/tools/dataEntityInfo.d.ts +23 -0
  572. package/dist/tools/dataEntityInfo.d.ts.map +1 -0
  573. package/dist/tools/dataEntityInfo.js +45 -0
  574. package/dist/tools/dataEntityInfo.js.map +1 -0
  575. package/dist/tools/dataEntityXml.d.ts +31 -0
  576. package/dist/tools/dataEntityXml.d.ts.map +1 -0
  577. package/dist/tools/dataEntityXml.js +131 -0
  578. package/dist/tools/dataEntityXml.js.map +1 -0
  579. package/dist/tools/dbSync.d.ts +8 -0
  580. package/dist/tools/dbSync.d.ts.map +1 -0
  581. package/dist/tools/dbSync.js +285 -0
  582. package/dist/tools/dbSync.js.map +1 -0
  583. package/dist/tools/edtInfo.d.ts +23 -0
  584. package/dist/tools/edtInfo.d.ts.map +1 -0
  585. package/dist/tools/edtInfo.js +122 -0
  586. package/dist/tools/edtInfo.js.map +1 -0
  587. package/dist/tools/enumInfo.d.ts +17 -0
  588. package/dist/tools/enumInfo.d.ts.map +1 -0
  589. package/dist/tools/enumInfo.js +44 -0
  590. package/dist/tools/enumInfo.js.map +1 -0
  591. package/dist/tools/extensionInfo.d.ts +26 -0
  592. package/dist/tools/extensionInfo.d.ts.map +1 -0
  593. package/dist/tools/extensionInfo.js +73 -0
  594. package/dist/tools/extensionInfo.js.map +1 -0
  595. package/dist/tools/extensionSearch.d.ts +20 -0
  596. package/dist/tools/extensionSearch.d.ts.map +1 -0
  597. package/dist/tools/extensionSearch.js +72 -0
  598. package/dist/tools/extensionSearch.js.map +1 -0
  599. package/dist/tools/extensionStrategyAdvisor.d.ts +15 -0
  600. package/dist/tools/extensionStrategyAdvisor.d.ts.map +1 -0
  601. package/dist/tools/extensionStrategyAdvisor.js +519 -0
  602. package/dist/tools/extensionStrategyAdvisor.js.map +1 -0
  603. package/dist/tools/findCocExtensions.d.ts +20 -0
  604. package/dist/tools/findCocExtensions.d.ts.map +1 -0
  605. package/dist/tools/findCocExtensions.js +285 -0
  606. package/dist/tools/findCocExtensions.js.map +1 -0
  607. package/dist/tools/findEventHandlers.d.ts +21 -0
  608. package/dist/tools/findEventHandlers.d.ts.map +1 -0
  609. package/dist/tools/findEventHandlers.js +196 -0
  610. package/dist/tools/findEventHandlers.js.map +1 -0
  611. package/dist/tools/findReferences.d.ts +30 -0
  612. package/dist/tools/findReferences.d.ts.map +1 -0
  613. package/dist/tools/findReferences.js +551 -0
  614. package/dist/tools/findReferences.js.map +1 -0
  615. package/dist/tools/formInfo.d.ts +13 -0
  616. package/dist/tools/formInfo.d.ts.map +1 -0
  617. package/dist/tools/formInfo.js +407 -0
  618. package/dist/tools/formInfo.js.map +1 -0
  619. package/dist/tools/formPattern.d.ts +19 -0
  620. package/dist/tools/formPattern.d.ts.map +1 -0
  621. package/dist/tools/formPattern.js +52 -0
  622. package/dist/tools/formPattern.js.map +1 -0
  623. package/dist/tools/generateD365Xml.d.ts +12 -0
  624. package/dist/tools/generateD365Xml.d.ts.map +1 -0
  625. package/dist/tools/generateD365Xml.js +1454 -0
  626. package/dist/tools/generateD365Xml.js.map +1 -0
  627. package/dist/tools/generateFindMethods.d.ts +69 -0
  628. package/dist/tools/generateFindMethods.d.ts.map +1 -0
  629. package/dist/tools/generateFindMethods.js +207 -0
  630. package/dist/tools/generateFindMethods.js.map +1 -0
  631. package/dist/tools/generateMetadata.d.ts +37 -0
  632. package/dist/tools/generateMetadata.d.ts.map +1 -0
  633. package/dist/tools/generateMetadata.js +213 -0
  634. package/dist/tools/generateMetadata.js.map +1 -0
  635. package/dist/tools/generateObject.d.ts +34 -0
  636. package/dist/tools/generateObject.d.ts.map +1 -0
  637. package/dist/tools/generateObject.js +47 -0
  638. package/dist/tools/generateObject.js.map +1 -0
  639. package/dist/tools/generateRelationXpp.d.ts +45 -0
  640. package/dist/tools/generateRelationXpp.d.ts.map +1 -0
  641. package/dist/tools/generateRelationXpp.js +129 -0
  642. package/dist/tools/generateRelationXpp.js.map +1 -0
  643. package/dist/tools/generateSmart.d.ts +32 -0
  644. package/dist/tools/generateSmart.d.ts.map +1 -0
  645. package/dist/tools/generateSmart.js +52 -0
  646. package/dist/tools/generateSmart.js.map +1 -0
  647. package/dist/tools/generateSmartForm.d.ts +82 -0
  648. package/dist/tools/generateSmartForm.d.ts.map +1 -0
  649. package/dist/tools/generateSmartForm.js +996 -0
  650. package/dist/tools/generateSmartForm.js.map +1 -0
  651. package/dist/tools/generateSmartReport.d.ts +90 -0
  652. package/dist/tools/generateSmartReport.d.ts.map +1 -0
  653. package/dist/tools/generateSmartReport.js +1254 -0
  654. package/dist/tools/generateSmartReport.js.map +1 -0
  655. package/dist/tools/generateSmartTable.d.ts +138 -0
  656. package/dist/tools/generateSmartTable.d.ts.map +1 -0
  657. package/dist/tools/generateSmartTable.js +1305 -0
  658. package/dist/tools/generateSmartTable.js.map +1 -0
  659. package/dist/tools/generateTableFields.d.ts +48 -0
  660. package/dist/tools/generateTableFields.d.ts.map +1 -0
  661. package/dist/tools/generateTableFields.js +186 -0
  662. package/dist/tools/generateTableFields.js.map +1 -0
  663. package/dist/tools/generateTableRelation.d.ts +35 -0
  664. package/dist/tools/generateTableRelation.d.ts.map +1 -0
  665. package/dist/tools/generateTableRelation.js +161 -0
  666. package/dist/tools/generateTableRelation.js.map +1 -0
  667. package/dist/tools/getFormPatternSpec.d.ts +13 -0
  668. package/dist/tools/getFormPatternSpec.d.ts.map +1 -0
  669. package/dist/tools/getFormPatternSpec.js +290 -0
  670. package/dist/tools/getFormPatternSpec.js.map +1 -0
  671. package/dist/tools/getFormPatterns.d.ts +68 -0
  672. package/dist/tools/getFormPatterns.d.ts.map +1 -0
  673. package/dist/tools/getFormPatterns.js +471 -0
  674. package/dist/tools/getFormPatterns.js.map +1 -0
  675. package/dist/tools/getKnowledge.d.ts +27 -0
  676. package/dist/tools/getKnowledge.d.ts.map +1 -0
  677. package/dist/tools/getKnowledge.js +50 -0
  678. package/dist/tools/getKnowledge.js.map +1 -0
  679. package/dist/tools/getLabelInfo.d.ts +21 -0
  680. package/dist/tools/getLabelInfo.d.ts.map +1 -0
  681. package/dist/tools/getLabelInfo.js +138 -0
  682. package/dist/tools/getLabelInfo.js.map +1 -0
  683. package/dist/tools/getMethod.d.ts +19 -0
  684. package/dist/tools/getMethod.d.ts.map +1 -0
  685. package/dist/tools/getMethod.js +77 -0
  686. package/dist/tools/getMethod.js.map +1 -0
  687. package/dist/tools/getMethodSource.d.ts +17 -0
  688. package/dist/tools/getMethodSource.d.ts.map +1 -0
  689. package/dist/tools/getMethodSource.js +161 -0
  690. package/dist/tools/getMethodSource.js.map +1 -0
  691. package/dist/tools/getObjectInfo.d.ts +17 -0
  692. package/dist/tools/getObjectInfo.d.ts.map +1 -0
  693. package/dist/tools/getObjectInfo.js +88 -0
  694. package/dist/tools/getObjectInfo.js.map +1 -0
  695. package/dist/tools/getTablePatterns.d.ts +45 -0
  696. package/dist/tools/getTablePatterns.d.ts.map +1 -0
  697. package/dist/tools/getTablePatterns.js +235 -0
  698. package/dist/tools/getTablePatterns.js.map +1 -0
  699. package/dist/tools/index.d.ts +11 -0
  700. package/dist/tools/index.d.ts.map +1 -0
  701. package/dist/tools/index.js +11 -0
  702. package/dist/tools/index.js.map +1 -0
  703. package/dist/tools/labels.d.ts +25 -0
  704. package/dist/tools/labels.d.ts.map +1 -0
  705. package/dist/tools/labels.js +111 -0
  706. package/dist/tools/labels.js.map +1 -0
  707. package/dist/tools/macroInfo.d.ts +23 -0
  708. package/dist/tools/macroInfo.d.ts.map +1 -0
  709. package/dist/tools/macroInfo.js +62 -0
  710. package/dist/tools/macroInfo.js.map +1 -0
  711. package/dist/tools/mapInfo.d.ts +21 -0
  712. package/dist/tools/mapInfo.d.ts.map +1 -0
  713. package/dist/tools/mapInfo.js +54 -0
  714. package/dist/tools/mapInfo.js.map +1 -0
  715. package/dist/tools/mapXml.d.ts +26 -0
  716. package/dist/tools/mapXml.d.ts.map +1 -0
  717. package/dist/tools/mapXml.js +88 -0
  718. package/dist/tools/mapXml.js.map +1 -0
  719. package/dist/tools/menuItemInfo.d.ts +20 -0
  720. package/dist/tools/menuItemInfo.d.ts.map +1 -0
  721. package/dist/tools/menuItemInfo.js +185 -0
  722. package/dist/tools/menuItemInfo.js.map +1 -0
  723. package/dist/tools/methodSignature.d.ts +33 -0
  724. package/dist/tools/methodSignature.d.ts.map +1 -0
  725. package/dist/tools/methodSignature.js +348 -0
  726. package/dist/tools/methodSignature.js.map +1 -0
  727. package/dist/tools/modifyD365File.d.ts +130 -0
  728. package/dist/tools/modifyD365File.d.ts.map +1 -0
  729. package/dist/tools/modifyD365File.js +2179 -0
  730. package/dist/tools/modifyD365File.js.map +1 -0
  731. package/dist/tools/objectInfoRegistry.d.ts +36 -0
  732. package/dist/tools/objectInfoRegistry.d.ts.map +1 -0
  733. package/dist/tools/objectInfoRegistry.js +98 -0
  734. package/dist/tools/objectInfoRegistry.js.map +1 -0
  735. package/dist/tools/objectPatterns.d.ts +16 -0
  736. package/dist/tools/objectPatterns.d.ts.map +1 -0
  737. package/dist/tools/objectPatterns.js +84 -0
  738. package/dist/tools/objectPatterns.js.map +1 -0
  739. package/dist/tools/prepare.d.ts +18 -0
  740. package/dist/tools/prepare.d.ts.map +1 -0
  741. package/dist/tools/prepare.js +47 -0
  742. package/dist/tools/prepare.js.map +1 -0
  743. package/dist/tools/prepareChange.d.ts +43 -0
  744. package/dist/tools/prepareChange.d.ts.map +1 -0
  745. package/dist/tools/prepareChange.js +327 -0
  746. package/dist/tools/prepareChange.js.map +1 -0
  747. package/dist/tools/prepareCreate.d.ts +45 -0
  748. package/dist/tools/prepareCreate.d.ts.map +1 -0
  749. package/dist/tools/prepareCreate.js +263 -0
  750. package/dist/tools/prepareCreate.js.map +1 -0
  751. package/dist/tools/queryInfo.d.ts +17 -0
  752. package/dist/tools/queryInfo.d.ts.map +1 -0
  753. package/dist/tools/queryInfo.js +46 -0
  754. package/dist/tools/queryInfo.js.map +1 -0
  755. package/dist/tools/queryViewXml.d.ts +36 -0
  756. package/dist/tools/queryViewXml.d.ts.map +1 -0
  757. package/dist/tools/queryViewXml.js +129 -0
  758. package/dist/tools/queryViewXml.js.map +1 -0
  759. package/dist/tools/renameLabel.d.ts +29 -0
  760. package/dist/tools/renameLabel.d.ts.map +1 -0
  761. package/dist/tools/renameLabel.js +377 -0
  762. package/dist/tools/renameLabel.js.map +1 -0
  763. package/dist/tools/repairFormControls.d.ts +21 -0
  764. package/dist/tools/repairFormControls.d.ts.map +1 -0
  765. package/dist/tools/repairFormControls.js +151 -0
  766. package/dist/tools/repairFormControls.js.map +1 -0
  767. package/dist/tools/reportInfo.d.ts +14 -0
  768. package/dist/tools/reportInfo.d.ts.map +1 -0
  769. package/dist/tools/reportInfo.js +302 -0
  770. package/dist/tools/reportInfo.js.map +1 -0
  771. package/dist/tools/resolveReferences.d.ts +89 -0
  772. package/dist/tools/resolveReferences.d.ts.map +1 -0
  773. package/dist/tools/resolveReferences.js +791 -0
  774. package/dist/tools/resolveReferences.js.map +1 -0
  775. package/dist/tools/reviewWorkspaceChanges.d.ts +14 -0
  776. package/dist/tools/reviewWorkspaceChanges.d.ts.map +1 -0
  777. package/dist/tools/reviewWorkspaceChanges.js +73 -0
  778. package/dist/tools/reviewWorkspaceChanges.js.map +1 -0
  779. package/dist/tools/runBpCheck.d.ts +14 -0
  780. package/dist/tools/runBpCheck.d.ts.map +1 -0
  781. package/dist/tools/runBpCheck.js +241 -0
  782. package/dist/tools/runBpCheck.js.map +1 -0
  783. package/dist/tools/search.d.ts +20 -0
  784. package/dist/tools/search.d.ts.map +1 -0
  785. package/dist/tools/search.js +246 -0
  786. package/dist/tools/search.js.map +1 -0
  787. package/dist/tools/searchLabels.d.ts +26 -0
  788. package/dist/tools/searchLabels.d.ts.map +1 -0
  789. package/dist/tools/searchLabels.js +91 -0
  790. package/dist/tools/searchLabels.js.map +1 -0
  791. package/dist/tools/searchUnified.d.ts +28 -0
  792. package/dist/tools/searchUnified.d.ts.map +1 -0
  793. package/dist/tools/searchUnified.js +48 -0
  794. package/dist/tools/searchUnified.js.map +1 -0
  795. package/dist/tools/securityArtifactInfo.d.ts +14 -0
  796. package/dist/tools/securityArtifactInfo.d.ts.map +1 -0
  797. package/dist/tools/securityArtifactInfo.js +192 -0
  798. package/dist/tools/securityArtifactInfo.js.map +1 -0
  799. package/dist/tools/securityCoverageInfo.d.ts +21 -0
  800. package/dist/tools/securityCoverageInfo.d.ts.map +1 -0
  801. package/dist/tools/securityCoverageInfo.js +248 -0
  802. package/dist/tools/securityCoverageInfo.js.map +1 -0
  803. package/dist/tools/securityInfo.d.ts +22 -0
  804. package/dist/tools/securityInfo.d.ts.map +1 -0
  805. package/dist/tools/securityInfo.js +43 -0
  806. package/dist/tools/securityInfo.js.map +1 -0
  807. package/dist/tools/securityPolicyInfo.d.ts +22 -0
  808. package/dist/tools/securityPolicyInfo.d.ts.map +1 -0
  809. package/dist/tools/securityPolicyInfo.js +49 -0
  810. package/dist/tools/securityPolicyInfo.js.map +1 -0
  811. package/dist/tools/securityPrivilegeXml.d.ts +21 -0
  812. package/dist/tools/securityPrivilegeXml.d.ts.map +1 -0
  813. package/dist/tools/securityPrivilegeXml.js +61 -0
  814. package/dist/tools/securityPrivilegeXml.js.map +1 -0
  815. package/dist/tools/serviceInfo.d.ts +25 -0
  816. package/dist/tools/serviceInfo.d.ts.map +1 -0
  817. package/dist/tools/serviceInfo.js +93 -0
  818. package/dist/tools/serviceInfo.js.map +1 -0
  819. package/dist/tools/suggestEdt.d.ts +15 -0
  820. package/dist/tools/suggestEdt.d.ts.map +1 -0
  821. package/dist/tools/suggestEdt.js +348 -0
  822. package/dist/tools/suggestEdt.js.map +1 -0
  823. package/dist/tools/suggestImplementation.d.ts +20 -0
  824. package/dist/tools/suggestImplementation.d.ts.map +1 -0
  825. package/dist/tools/suggestImplementation.js +144 -0
  826. package/dist/tools/suggestImplementation.js.map +1 -0
  827. package/dist/tools/sysTestRunner.d.ts +14 -0
  828. package/dist/tools/sysTestRunner.d.ts.map +1 -0
  829. package/dist/tools/sysTestRunner.js +145 -0
  830. package/dist/tools/sysTestRunner.js.map +1 -0
  831. package/dist/tools/tableExtensionInfo.d.ts +91 -0
  832. package/dist/tools/tableExtensionInfo.d.ts.map +1 -0
  833. package/dist/tools/tableExtensionInfo.js +305 -0
  834. package/dist/tools/tableExtensionInfo.js.map +1 -0
  835. package/dist/tools/tableInfo.d.ts +23 -0
  836. package/dist/tools/tableInfo.d.ts.map +1 -0
  837. package/dist/tools/tableInfo.js +125 -0
  838. package/dist/tools/tableInfo.js.map +1 -0
  839. package/dist/tools/toolHandler.d.ts +4 -0
  840. package/dist/tools/toolHandler.d.ts.map +1 -0
  841. package/dist/tools/toolHandler.js +508 -0
  842. package/dist/tools/toolHandler.js.map +1 -0
  843. package/dist/tools/undoLastModification.d.ts +15 -0
  844. package/dist/tools/undoLastModification.d.ts.map +1 -0
  845. package/dist/tools/undoLastModification.js +147 -0
  846. package/dist/tools/undoLastModification.js.map +1 -0
  847. package/dist/tools/updateSymbolIndex.d.ts +15 -0
  848. package/dist/tools/updateSymbolIndex.d.ts.map +1 -0
  849. package/dist/tools/updateSymbolIndex.js +520 -0
  850. package/dist/tools/updateSymbolIndex.js.map +1 -0
  851. package/dist/tools/validateCode.d.ts +24 -0
  852. package/dist/tools/validateCode.d.ts.map +1 -0
  853. package/dist/tools/validateCode.js +201 -0
  854. package/dist/tools/validateCode.js.map +1 -0
  855. package/dist/tools/validateFormPattern.d.ts +51 -0
  856. package/dist/tools/validateFormPattern.d.ts.map +1 -0
  857. package/dist/tools/validateFormPattern.js +201 -0
  858. package/dist/tools/validateFormPattern.js.map +1 -0
  859. package/dist/tools/validateObjectNaming.d.ts +21 -0
  860. package/dist/tools/validateObjectNaming.d.ts.map +1 -0
  861. package/dist/tools/validateObjectNaming.js +319 -0
  862. package/dist/tools/validateObjectNaming.js.map +1 -0
  863. package/dist/tools/validateXpp.d.ts +79 -0
  864. package/dist/tools/validateXpp.d.ts.map +1 -0
  865. package/dist/tools/validateXpp.js +705 -0
  866. package/dist/tools/validateXpp.js.map +1 -0
  867. package/dist/tools/verifyD365Project.d.ts +21 -0
  868. package/dist/tools/verifyD365Project.d.ts.map +1 -0
  869. package/dist/tools/verifyD365Project.js +299 -0
  870. package/dist/tools/verifyD365Project.js.map +1 -0
  871. package/dist/tools/viewInfo.d.ts +17 -0
  872. package/dist/tools/viewInfo.d.ts.map +1 -0
  873. package/dist/tools/viewInfo.js +46 -0
  874. package/dist/tools/viewInfo.js.map +1 -0
  875. package/dist/tools/xppKnowledge.d.ts +45 -0
  876. package/dist/tools/xppKnowledge.d.ts.map +1 -0
  877. package/dist/tools/xppKnowledge.js +2815 -0
  878. package/dist/tools/xppKnowledge.js.map +1 -0
  879. package/dist/types/context.d.ts +56 -0
  880. package/dist/types/context.d.ts.map +1 -0
  881. package/dist/types/context.js +5 -0
  882. package/dist/types/context.js.map +1 -0
  883. package/dist/utils/callDedup.d.ts +29 -0
  884. package/dist/utils/callDedup.d.ts.map +1 -0
  885. package/dist/utils/callDedup.js +87 -0
  886. package/dist/utils/callDedup.js.map +1 -0
  887. package/dist/utils/configManager.d.ts +307 -0
  888. package/dist/utils/configManager.d.ts.map +1 -0
  889. package/dist/utils/configManager.js +1169 -0
  890. package/dist/utils/configManager.js.map +1 -0
  891. package/dist/utils/d365XmlNormalizer.d.ts +9 -0
  892. package/dist/utils/d365XmlNormalizer.d.ts.map +1 -0
  893. package/dist/utils/d365XmlNormalizer.js +24 -0
  894. package/dist/utils/d365XmlNormalizer.js.map +1 -0
  895. package/dist/utils/edtExtensionValidator.d.ts +110 -0
  896. package/dist/utils/edtExtensionValidator.d.ts.map +1 -0
  897. package/dist/utils/edtExtensionValidator.js +367 -0
  898. package/dist/utils/edtExtensionValidator.js.map +1 -0
  899. package/dist/utils/eolUtils.d.ts +15 -0
  900. package/dist/utils/eolUtils.d.ts.map +1 -0
  901. package/dist/utils/eolUtils.js +21 -0
  902. package/dist/utils/eolUtils.js.map +1 -0
  903. package/dist/utils/extractManifest.d.ts +34 -0
  904. package/dist/utils/extractManifest.d.ts.map +1 -0
  905. package/dist/utils/extractManifest.js +43 -0
  906. package/dist/utils/extractManifest.js.map +1 -0
  907. package/dist/utils/fieldControlTypes.d.ts +44 -0
  908. package/dist/utils/fieldControlTypes.d.ts.map +1 -0
  909. package/dist/utils/fieldControlTypes.js +97 -0
  910. package/dist/utils/fieldControlTypes.js.map +1 -0
  911. package/dist/utils/formCloner.d.ts +77 -0
  912. package/dist/utils/formCloner.d.ts.map +1 -0
  913. package/dist/utils/formCloner.js +364 -0
  914. package/dist/utils/formCloner.js.map +1 -0
  915. package/dist/utils/formControlExpander.d.ts +68 -0
  916. package/dist/utils/formControlExpander.d.ts.map +1 -0
  917. package/dist/utils/formControlExpander.js +207 -0
  918. package/dist/utils/formControlExpander.js.map +1 -0
  919. package/dist/utils/formControlRepair.d.ts +81 -0
  920. package/dist/utils/formControlRepair.d.ts.map +1 -0
  921. package/dist/utils/formControlRepair.js +203 -0
  922. package/dist/utils/formControlRepair.js.map +1 -0
  923. package/dist/utils/formExtensionShapeValidator.d.ts +44 -0
  924. package/dist/utils/formExtensionShapeValidator.d.ts.map +1 -0
  925. package/dist/utils/formExtensionShapeValidator.js +99 -0
  926. package/dist/utils/formExtensionShapeValidator.js.map +1 -0
  927. package/dist/utils/formPatternTemplates.d.ts +77 -0
  928. package/dist/utils/formPatternTemplates.d.ts.map +1 -0
  929. package/dist/utils/formPatternTemplates.js +1917 -0
  930. package/dist/utils/formPatternTemplates.js.map +1 -0
  931. package/dist/utils/fsExtensionScanner.d.ts +76 -0
  932. package/dist/utils/fsExtensionScanner.d.ts.map +1 -0
  933. package/dist/utils/fsExtensionScanner.js +271 -0
  934. package/dist/utils/fsExtensionScanner.js.map +1 -0
  935. package/dist/utils/fuzzyMatching.d.ts +41 -0
  936. package/dist/utils/fuzzyMatching.d.ts.map +1 -0
  937. package/dist/utils/fuzzyMatching.js +186 -0
  938. package/dist/utils/fuzzyMatching.js.map +1 -0
  939. package/dist/utils/indexStaleness.d.ts +30 -0
  940. package/dist/utils/indexStaleness.d.ts.map +1 -0
  941. package/dist/utils/indexStaleness.js +104 -0
  942. package/dist/utils/indexStaleness.js.map +1 -0
  943. package/dist/utils/loadEnv.d.ts +32 -0
  944. package/dist/utils/loadEnv.d.ts.map +1 -0
  945. package/dist/utils/loadEnv.js +83 -0
  946. package/dist/utils/loadEnv.js.map +1 -0
  947. package/dist/utils/logger.d.ts +4 -0
  948. package/dist/utils/logger.d.ts.map +1 -0
  949. package/dist/utils/logger.js +11 -0
  950. package/dist/utils/logger.js.map +1 -0
  951. package/dist/utils/metadataResolver.d.ts +155 -0
  952. package/dist/utils/metadataResolver.d.ts.map +1 -0
  953. package/dist/utils/metadataResolver.js +277 -0
  954. package/dist/utils/metadataResolver.js.map +1 -0
  955. package/dist/utils/modelClassifier.d.ts +180 -0
  956. package/dist/utils/modelClassifier.d.ts.map +1 -0
  957. package/dist/utils/modelClassifier.js +373 -0
  958. package/dist/utils/modelClassifier.js.map +1 -0
  959. package/dist/utils/operationLocks.d.ts +26 -0
  960. package/dist/utils/operationLocks.d.ts.map +1 -0
  961. package/dist/utils/operationLocks.js +182 -0
  962. package/dist/utils/operationLocks.js.map +1 -0
  963. package/dist/utils/packageResolver.d.ts +52 -0
  964. package/dist/utils/packageResolver.d.ts.map +1 -0
  965. package/dist/utils/packageResolver.js +174 -0
  966. package/dist/utils/packageResolver.js.map +1 -0
  967. package/dist/utils/pathContainment.d.ts +60 -0
  968. package/dist/utils/pathContainment.d.ts.map +1 -0
  969. package/dist/utils/pathContainment.js +270 -0
  970. package/dist/utils/pathContainment.js.map +1 -0
  971. package/dist/utils/projectUtils.d.ts +14 -0
  972. package/dist/utils/projectUtils.d.ts.map +1 -0
  973. package/dist/utils/projectUtils.js +48 -0
  974. package/dist/utils/projectUtils.js.map +1 -0
  975. package/dist/utils/provenanceStore.d.ts +54 -0
  976. package/dist/utils/provenanceStore.d.ts.map +1 -0
  977. package/dist/utils/provenanceStore.js +203 -0
  978. package/dist/utils/provenanceStore.js.map +1 -0
  979. package/dist/utils/richContext.d.ts +45 -0
  980. package/dist/utils/richContext.d.ts.map +1 -0
  981. package/dist/utils/richContext.js +316 -0
  982. package/dist/utils/richContext.js.map +1 -0
  983. package/dist/utils/smartXmlBuilder.d.ts +187 -0
  984. package/dist/utils/smartXmlBuilder.d.ts.map +1 -0
  985. package/dist/utils/smartXmlBuilder.js +504 -0
  986. package/dist/utils/smartXmlBuilder.js.map +1 -0
  987. package/dist/utils/stdioSessionInfo.d.ts +53 -0
  988. package/dist/utils/stdioSessionInfo.d.ts.map +1 -0
  989. package/dist/utils/stdioSessionInfo.js +47 -0
  990. package/dist/utils/stdioSessionInfo.js.map +1 -0
  991. package/dist/utils/suggestionEngine.d.ts +20 -0
  992. package/dist/utils/suggestionEngine.d.ts.map +1 -0
  993. package/dist/utils/suggestionEngine.js +145 -0
  994. package/dist/utils/suggestionEngine.js.map +1 -0
  995. package/dist/utils/symbolLookup.d.ts +60 -0
  996. package/dist/utils/symbolLookup.d.ts.map +1 -0
  997. package/dist/utils/symbolLookup.js +0 -0
  998. package/dist/utils/symbolLookup.js.map +1 -0
  999. package/dist/utils/terminalUi.d.ts +85 -0
  1000. package/dist/utils/terminalUi.d.ts.map +1 -0
  1001. package/dist/utils/terminalUi.js +182 -0
  1002. package/dist/utils/terminalUi.js.map +1 -0
  1003. package/dist/utils/toolMetrics.d.ts +32 -0
  1004. package/dist/utils/toolMetrics.d.ts.map +1 -0
  1005. package/dist/utils/toolMetrics.js +89 -0
  1006. package/dist/utils/toolMetrics.js.map +1 -0
  1007. package/dist/utils/toolProgressMessage.d.ts +8 -0
  1008. package/dist/utils/toolProgressMessage.d.ts.map +1 -0
  1009. package/dist/utils/toolProgressMessage.js +182 -0
  1010. package/dist/utils/toolProgressMessage.js.map +1 -0
  1011. package/dist/utils/workspaceDetector.d.ts +51 -0
  1012. package/dist/utils/workspaceDetector.d.ts.map +1 -0
  1013. package/dist/utils/workspaceDetector.js +328 -0
  1014. package/dist/utils/workspaceDetector.js.map +1 -0
  1015. package/dist/utils/xppConfigProvider.d.ts +48 -0
  1016. package/dist/utils/xppConfigProvider.d.ts.map +1 -0
  1017. package/dist/utils/xppConfigProvider.js +121 -0
  1018. package/dist/utils/xppConfigProvider.js.map +1 -0
  1019. package/dist/utils/xppDocGen.d.ts +39 -0
  1020. package/dist/utils/xppDocGen.d.ts.map +1 -0
  1021. package/dist/utils/xppDocGen.js +518 -0
  1022. package/dist/utils/xppDocGen.js.map +1 -0
  1023. package/dist/utils/xppFormat.d.ts +21 -0
  1024. package/dist/utils/xppFormat.d.ts.map +1 -0
  1025. package/dist/utils/xppFormat.js +102 -0
  1026. package/dist/utils/xppFormat.js.map +1 -0
  1027. package/dist/utils/xppSelectLint.d.ts +18 -0
  1028. package/dist/utils/xppSelectLint.d.ts.map +1 -0
  1029. package/dist/utils/xppSelectLint.js +80 -0
  1030. package/dist/utils/xppSelectLint.js.map +1 -0
  1031. package/dist/validation/formPatternValidator.d.ts +53 -0
  1032. package/dist/validation/formPatternValidator.d.ts.map +1 -0
  1033. package/dist/validation/formPatternValidator.js +454 -0
  1034. package/dist/validation/formPatternValidator.js.map +1 -0
  1035. package/dist/workspace/contextRanker.d.ts +58 -0
  1036. package/dist/workspace/contextRanker.d.ts.map +1 -0
  1037. package/dist/workspace/contextRanker.js +216 -0
  1038. package/dist/workspace/contextRanker.js.map +1 -0
  1039. package/dist/workspace/contextSnapshot.d.ts +68 -0
  1040. package/dist/workspace/contextSnapshot.d.ts.map +1 -0
  1041. package/dist/workspace/contextSnapshot.js +193 -0
  1042. package/dist/workspace/contextSnapshot.js.map +1 -0
  1043. package/dist/workspace/hybridSearch.d.ts +39 -0
  1044. package/dist/workspace/hybridSearch.d.ts.map +1 -0
  1045. package/dist/workspace/hybridSearch.js +96 -0
  1046. package/dist/workspace/hybridSearch.js.map +1 -0
  1047. package/dist/workspace/workspaceScanner.d.ts +95 -0
  1048. package/dist/workspace/workspaceScanner.d.ts.map +1 -0
  1049. package/dist/workspace/workspaceScanner.js +247 -0
  1050. package/dist/workspace/workspaceScanner.js.map +1 -0
  1051. package/dist/workspace/workspaceUtils.d.ts +23 -0
  1052. package/dist/workspace/workspaceUtils.d.ts.map +1 -0
  1053. package/dist/workspace/workspaceUtils.js +77 -0
  1054. package/dist/workspace/workspaceUtils.js.map +1 -0
  1055. package/package.json +94 -0
@@ -0,0 +1,1454 @@
1
+ /**
2
+ * D365FO XML Generator Tool
3
+ * Generates D365FO XML content for classes, tables, enums, etc.
4
+ * Returns XML as text - user/Copilot creates the physical file
5
+ * Works remotely through Azure (no file system access needed)
6
+ */
7
+ import { z } from 'zod';
8
+ import { getConfigManager } from '../utils/configManager.js';
9
+ import { ensureXppDocComment, ensureBlankLineBeforeClosingBrace } from '../utils/xppDocGen.js';
10
+ import { reindentXppSource } from '../utils/xppFormat.js';
11
+ import { decodeXmlEntitiesFromXppSource } from './modifyD365File.js';
12
+ import { buildAxSecurityPrivilegeXml } from './securityPrivilegeXml.js';
13
+ import { buildAxDataEntityXml } from './dataEntityXml.js';
14
+ import { buildAxQueryXml, buildAxViewXml } from './queryViewXml.js';
15
+ import { buildAxMapXml } from './mapXml.js';
16
+ const GenerateD365XmlArgsSchema = z.object({
17
+ objectType: z
18
+ .enum([
19
+ 'class', 'table', 'enum', 'form', 'query', 'view', 'data-entity', 'report',
20
+ 'edt', 'edt-extension',
21
+ 'table-extension', 'form-extension', 'data-entity-extension', 'enum-extension',
22
+ 'menu-item-display', 'menu-item-action', 'menu-item-output',
23
+ 'menu-item-display-extension', 'menu-item-action-extension', 'menu-item-output-extension',
24
+ 'menu', 'menu-extension',
25
+ 'security-privilege', 'security-duty', 'security-role',
26
+ 'security-duty-extension', 'security-role-extension', 'map',
27
+ ])
28
+ .describe('Type of D365FO object'),
29
+ objectName: z
30
+ .string()
31
+ .describe('Name of the object (e.g., MyHelperClass, MyCustomTable)'),
32
+ modelName: z
33
+ .string()
34
+ .optional()
35
+ .describe('Model name (e.g., ContosoExtensions). Auto-detected from mcp.json if omitted.'),
36
+ sourceCode: z
37
+ .string()
38
+ .optional()
39
+ .describe('X++ source code for the object (class declaration, methods, etc.)'),
40
+ properties: z
41
+ .record(z.string(), z.any())
42
+ .optional()
43
+ .describe('Additional properties for the object (extends, implements, label, etc.)'),
44
+ });
45
+ /**
46
+ * XML Template Generator for D365FO Objects
47
+ */
48
+ class XmlTemplateGenerator {
49
+ /**
50
+ * Split X++ class source into the Declaration block (class header + field
51
+ * declarations) and individual method bodies, as required by D365FO XML.
52
+ *
53
+ * D365FO XML structure:
54
+ * <Declaration> = class keyword + field declarations (the outer {} block)
55
+ * <Methods> = one <Method><Name/><Source/></Method> per method body
56
+ *
57
+ * AI generators often emit the entire source (header + methods) as a single
58
+ * string. This helper separates them so the generated XML is correct.
59
+ */
60
+ static splitXppClassSource(fullSource) {
61
+ const firstBrace = fullSource.indexOf('{');
62
+ if (firstBrace === -1)
63
+ return { declaration: fullSource, methods: [] };
64
+ // Walk to the matching '}' that closes the class header block
65
+ let depth = 0;
66
+ let classEndIdx = -1;
67
+ for (let i = firstBrace; i < fullSource.length; i++) {
68
+ if (fullSource[i] === '{')
69
+ depth++;
70
+ else if (fullSource[i] === '}') {
71
+ depth--;
72
+ if (depth === 0) {
73
+ classEndIdx = i;
74
+ break;
75
+ }
76
+ }
77
+ }
78
+ if (classEndIdx === -1)
79
+ return { declaration: fullSource, methods: [] };
80
+ let declaration = fullSource.substring(0, classEndIdx + 1);
81
+ const rest = fullSource.substring(classEndIdx + 1);
82
+ if (!rest.trim()) {
83
+ const innerResult = XmlTemplateGenerator.extractInnerClassMethods(declaration);
84
+ if (innerResult) {
85
+ return innerResult;
86
+ }
87
+ return { declaration, methods: [] };
88
+ }
89
+ // Rescue member-variable declarations that appear outside the class {} block
90
+ const nextBraceInRest = rest.indexOf('{');
91
+ if (nextBraceInRest !== -1) {
92
+ const preMethodText = rest.substring(0, nextBraceInRest);
93
+ const varLines = preMethodText
94
+ .split('\n')
95
+ .filter(l => { const t = l.trim(); return t.endsWith(';') && !t.includes('('); });
96
+ if (varLines.length > 0) {
97
+ const injected = varLines.map(l => ' ' + l.trim()).join('\n');
98
+ declaration = declaration.replace(/}(\s*)$/, `\n${injected}\n\n}`);
99
+ }
100
+ }
101
+ // Parse each method block from the remaining source
102
+ const methods = [];
103
+ let pos = 0;
104
+ while (pos < rest.length) {
105
+ const nextBrace = rest.indexOf('{', pos);
106
+ if (nextBrace === -1)
107
+ break;
108
+ const sigText = rest.substring(pos, nextBrace);
109
+ // Find the matching '}' for this method body (depth-counting)
110
+ let d = 0;
111
+ let bodyEnd = -1;
112
+ for (let i = nextBrace; i < rest.length; i++) {
113
+ if (rest[i] === '{')
114
+ d++;
115
+ else if (rest[i] === '}') {
116
+ d--;
117
+ if (d === 0) {
118
+ bodyEnd = i;
119
+ break;
120
+ }
121
+ }
122
+ }
123
+ if (bodyEnd === -1)
124
+ break;
125
+ const methodSource = rest.substring(pos, bodyEnd + 1).trim();
126
+ // Extract method name: last identifier before '(' in the signature
127
+ const parenIdx = sigText.lastIndexOf('(');
128
+ const nameMatch = parenIdx !== -1 ? sigText.substring(0, parenIdx).match(/(\w+)\s*$/) : null;
129
+ const methodName = nameMatch ? nameMatch[1] : `method${methods.length + 1}`;
130
+ methods.push({ name: methodName, source: methodSource });
131
+ pos = bodyEnd + 1;
132
+ }
133
+ // Fallback: methods declared inside the class {} body rather than after it
134
+ if (methods.length === 0) {
135
+ const innerResult = XmlTemplateGenerator.extractInnerClassMethods(declaration);
136
+ if (innerResult) {
137
+ return innerResult;
138
+ }
139
+ }
140
+ return { declaration, methods };
141
+ }
142
+ /**
143
+ * Extract methods defined INSIDE the class body (depth-1 inside {}).
144
+ * Mirror of the same method in createD365File.ts — kept in sync manually.
145
+ */
146
+ static extractInnerClassMethods(classDeclaration) {
147
+ const classOpenIdx = classDeclaration.indexOf('{');
148
+ const classCloseIdx = classDeclaration.lastIndexOf('}');
149
+ if (classOpenIdx === -1 || classCloseIdx <= classOpenIdx)
150
+ return null;
151
+ const classBody = classDeclaration.substring(classOpenIdx + 1, classCloseIdx);
152
+ const methods = [];
153
+ const memberVarLines = [];
154
+ let pos = 0;
155
+ while (pos < classBody.length) {
156
+ const nextBrace = classBody.indexOf('{', pos);
157
+ if (nextBrace === -1) {
158
+ for (const line of classBody.substring(pos).split('\n')) {
159
+ const t = line.trim();
160
+ if (t.length > 0 && t.endsWith(';') && !t.includes('(') &&
161
+ !t.startsWith('//') && !t.startsWith('*')) {
162
+ memberVarLines.push(t);
163
+ }
164
+ }
165
+ break;
166
+ }
167
+ const sigText = classBody.substring(pos, nextBrace);
168
+ let depth = 0;
169
+ let bodyEnd = -1;
170
+ for (let i = nextBrace; i < classBody.length; i++) {
171
+ if (classBody[i] === '{')
172
+ depth++;
173
+ else if (classBody[i] === '}') {
174
+ depth--;
175
+ if (depth === 0) {
176
+ bodyEnd = i;
177
+ break;
178
+ }
179
+ }
180
+ }
181
+ if (bodyEnd === -1)
182
+ break;
183
+ const parenIdx = sigText.lastIndexOf('(');
184
+ if (parenIdx !== -1) {
185
+ for (const line of sigText.split('\n')) {
186
+ const t = line.trim();
187
+ if (t.length > 0 && t.endsWith(';') && !t.includes('(') &&
188
+ !t.startsWith('//') && !t.startsWith('*') && !t.startsWith('[')) {
189
+ memberVarLines.push(t);
190
+ }
191
+ }
192
+ const beforeLastParen = sigText.substring(0, parenIdx);
193
+ const lastNewlineBeforeLastParen = beforeLastParen.lastIndexOf('\n');
194
+ let methodStartInSig = lastNewlineBeforeLastParen !== -1
195
+ ? lastNewlineBeforeLastParen + 1
196
+ : 0;
197
+ const sigBeforeMethod = sigText.substring(0, methodStartInSig);
198
+ const sigBeforeLines = sigBeforeMethod.split('\n').reverse();
199
+ let droppedChars = 0;
200
+ for (const line of sigBeforeLines) {
201
+ const t = line.trim();
202
+ if (t.length === 0 || t.startsWith('[') || t.startsWith('//') || t.startsWith('*') || t.startsWith('/*')) {
203
+ droppedChars += line.length + 1;
204
+ }
205
+ else {
206
+ break;
207
+ }
208
+ }
209
+ methodStartInSig = Math.max(0, methodStartInSig - droppedChars);
210
+ const methodSource = classBody
211
+ .substring(pos + methodStartInSig, bodyEnd + 1)
212
+ .trim();
213
+ const nameMatch = sigText.substring(0, parenIdx).match(/(\w+)\s*$/);
214
+ const methodName = nameMatch ? nameMatch[1] : `method${methods.length + 1}`;
215
+ methods.push({ name: methodName, source: methodSource });
216
+ }
217
+ else {
218
+ for (const line of sigText.split('\n')) {
219
+ const t = line.trim();
220
+ if (t.length > 0 && t.endsWith(';') && !t.includes('(') &&
221
+ !t.startsWith('//') && !t.startsWith('*')) {
222
+ memberVarLines.push(t);
223
+ }
224
+ }
225
+ }
226
+ pos = bodyEnd + 1;
227
+ }
228
+ if (methods.length === 0)
229
+ return null;
230
+ const classHeader = classDeclaration.substring(0, classOpenIdx + 1);
231
+ const memberVarsXpp = memberVarLines.length > 0
232
+ ? '\n' + memberVarLines.map(v => ' ' + v).join('\n') + '\n\n'
233
+ : '\n';
234
+ return {
235
+ declaration: classHeader + memberVarsXpp + '}',
236
+ methods,
237
+ };
238
+ }
239
+ /**
240
+ * Generate AxClass XML structure
241
+ */
242
+ static generateAxClassXml(className, sourceCode, properties) {
243
+ // Decode XML entities that AI models may introduce when copying from SSRS report
244
+ // entity-encoded <Text> blocks (e.g. &lt;summary&gt; → <summary>).
245
+ const rawSource = decodeXmlEntitiesFromXppSource(sourceCode || `public class ${className}\n{\n}`);
246
+ // Split full X++ source into Declaration (class header + fields) and Methods.
247
+ // D365FO XML requires member variable declarations in <Declaration> and
248
+ // each method body as a separate <Method> element under <Methods>.
249
+ const { declaration, methods } = XmlTemplateGenerator.splitXppClassSource(rawSource);
250
+ const extendsAttr = properties?.extends
251
+ ? `\t<Extends>${properties.extends}</Extends>\n`
252
+ : '';
253
+ const implementsAttr = properties?.implements
254
+ ? `\t<Implements>${properties.implements}</Implements>\n`
255
+ : '';
256
+ const methodsXml = methods.length === 0
257
+ ? '\t\t<Methods />\n'
258
+ : `\t\t<Methods>\n${methods
259
+ .map(m => `\t\t\t<Method>\n\t\t\t\t<Name>${m.name}</Name>\n\t\t\t\t<Source><![CDATA[\n${reindentXppSource(ensureXppDocComment(m.source))}\n\n]]></Source>\n\t\t\t</Method>`)
260
+ .join('\n\n')}\n\t\t</Methods>\n`;
261
+ return `<?xml version="1.0" encoding="utf-8"?>
262
+ <AxClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
263
+ \t<Name>${className}</Name>
264
+ ${extendsAttr}${implementsAttr}\t<SourceCode>
265
+ \t\t<Declaration><![CDATA[
266
+ ${ensureBlankLineBeforeClosingBrace(ensureXppDocComment(declaration))}
267
+ ]]></Declaration>
268
+ ${methodsXml}\t</SourceCode>
269
+ </AxClass>
270
+ `;
271
+ }
272
+ /**
273
+ * Generate AxTable XML structure
274
+ */
275
+ static generateAxTableXml(tableName, properties) {
276
+ const label = properties?.label || tableName;
277
+ const tableGroup = properties?.tableGroup || 'Main';
278
+ const titleField1 = properties?.titleField1 || '';
279
+ const titleField2 = properties?.titleField2 || '';
280
+ const titleField1Xml = titleField1
281
+ ? `\t<TitleField1>${titleField1}</TitleField1>\n`
282
+ : '';
283
+ const titleField2Xml = titleField2
284
+ ? `\t<TitleField2>${titleField2}</TitleField2>\n`
285
+ : '';
286
+ return `<?xml version="1.0" encoding="utf-8"?>
287
+ <AxTable xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
288
+ \t<Name>${tableName}</Name>
289
+ \t<SourceCode>
290
+ \t\t<Declaration><![CDATA[
291
+ public class ${tableName} extends common
292
+ {
293
+ }
294
+ ]]></Declaration>
295
+ \t\t<Methods />
296
+ \t</SourceCode>
297
+ \t<Label>${label}</Label>
298
+ \t<TableGroup>${tableGroup}</TableGroup>
299
+ ${titleField1Xml}${titleField2Xml}\t<DeleteActions />
300
+ \t<FieldGroups>
301
+ \t\t<AxTableFieldGroup>
302
+ \t\t\t<Name>AutoReport</Name>
303
+ \t\t\t<Fields />
304
+ \t\t</AxTableFieldGroup>
305
+ \t\t<AxTableFieldGroup>
306
+ \t\t\t<Name>AutoLookup</Name>
307
+ \t\t\t<Fields />
308
+ \t\t</AxTableFieldGroup>
309
+ \t\t<AxTableFieldGroup>
310
+ \t\t\t<Name>AutoIdentification</Name>
311
+ \t\t\t<AutoPopulate>Yes</AutoPopulate>
312
+ \t\t\t<Fields />
313
+ \t\t</AxTableFieldGroup>
314
+ \t\t<AxTableFieldGroup>
315
+ \t\t\t<Name>AutoSummary</Name>
316
+ \t\t\t<Fields />
317
+ \t\t</AxTableFieldGroup>
318
+ \t\t<AxTableFieldGroup>
319
+ \t\t\t<Name>AutoBrowse</Name>
320
+ \t\t\t<Fields />
321
+ \t\t</AxTableFieldGroup>
322
+ \t</FieldGroups>
323
+ \t<Fields />
324
+ \t<Indexes />
325
+ \t<Relations />
326
+ </AxTable>
327
+ `;
328
+ }
329
+ /**
330
+ * Generate AxEnum XML structure
331
+ */
332
+ static generateAxEnumXml(enumName, properties) {
333
+ const label = properties?.label || enumName;
334
+ // Extensible enums MUST have UseEnumValue=No (xppc hard requirement).
335
+ // Explicit <Value> elements also force UseEnumValue=Yes at compile time,
336
+ // so we suppress them when UseEnumValue=No.
337
+ const useEnumValue = (properties?.isExtensible || properties?.useEnumValue === false)
338
+ ? 'No'
339
+ : (properties?.useEnumValue ? 'Yes' : 'No');
340
+ const suppressExplicitValues = useEnumValue === 'No';
341
+ const configKeyXml = properties?.configurationKey
342
+ ? `\t<ConfigurationKey>${properties.configurationKey}</ConfigurationKey>\n`
343
+ : '';
344
+ // Build <EnumValues> block from properties.enumValues array
345
+ // Each entry: { name: string; value?: number; label?: string; helpText?: string }
346
+ const enumValueSpecs = Array.isArray(properties?.enumValues) ? properties.enumValues : [];
347
+ // D365FO hard limit: max 251 elements (0–250). Warn early — compiler rejects beyond this.
348
+ if (enumValueSpecs.length > 251) {
349
+ throw new Error(`Enum '${enumName}' has ${enumValueSpecs.length} values but D365FO supports a maximum of 251 (0–250). ` +
350
+ `Consider redesigning as a class hierarchy or splitting into multiple enums.`);
351
+ }
352
+ let enumValuesXml;
353
+ if (enumValueSpecs.length === 0) {
354
+ enumValuesXml = '\t<EnumValues />\n';
355
+ }
356
+ else {
357
+ enumValuesXml = '\t<EnumValues>\n';
358
+ let autoValue = 0;
359
+ for (const v of enumValueSpecs) {
360
+ const intValue = v.value ?? autoValue;
361
+ autoValue = intValue + 1;
362
+ enumValuesXml += `\t\t<AxEnumValue>\n`;
363
+ enumValuesXml += `\t\t\t<Name>${v.name}</Name>\n`;
364
+ if (v.label)
365
+ enumValuesXml += `\t\t\t<Label>${v.label}</Label>\n`;
366
+ if (v.helpText)
367
+ enumValuesXml += `\t\t\t<HelpText>${v.helpText}</HelpText>\n`;
368
+ // Omit <Value> when UseEnumValue=No (position-based ordering) or for implicit 0
369
+ if (intValue !== 0 && !suppressExplicitValues)
370
+ enumValuesXml += `\t\t\t<Value>${intValue}</Value>\n`;
371
+ enumValuesXml += `\t\t</AxEnumValue>\n`;
372
+ }
373
+ enumValuesXml += '\t</EnumValues>\n';
374
+ }
375
+ // IsExtensible goes after EnumValues; value is lowercase true/false
376
+ const isExtensibleXml = properties?.isExtensible ? '\t<IsExtensible>true</IsExtensible>\n' : '';
377
+ // Element order matches real D365FO: Name → ConfigurationKey → Label → UseEnumValue → EnumValues → IsExtensible
378
+ return `<?xml version="1.0" encoding="utf-8"?>
379
+ <AxEnum xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
380
+ \t<Name>${enumName}</Name>
381
+ ${configKeyXml}\t<Label>${label}</Label>
382
+ \t<UseEnumValue>${useEnumValue}</UseEnumValue>
383
+ ${enumValuesXml}${isExtensibleXml}</AxEnum>
384
+ `;
385
+ }
386
+ /**
387
+ * Generate AxForm XML structure
388
+ */
389
+ static generateAxFormXml(formName, _properties) {
390
+ // D365FO forms require xmlns="Microsoft.Dynamics.AX.Metadata.V6" and SourceCode first
391
+ // NOTE: <Label> is intentionally absent — AxForm files do not carry a top-level <Label>.
392
+ return `<?xml version="1.0" encoding="utf-8"?>
393
+ <AxForm xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="Microsoft.Dynamics.AX.Metadata.V6">
394
+ \t<Name>${formName}</Name>
395
+ \t<SourceCode>
396
+ \t\t<Methods xmlns="">
397
+ \t\t\t<Method>
398
+ \t\t\t\t<Name>classDeclaration</Name>
399
+ \t\t\t\t<Source><!\[CDATA[
400
+ [Form]
401
+ public class ${formName} extends FormRun
402
+ {
403
+ }
404
+
405
+ ]]></Source>
406
+ \t\t\t</Method>
407
+ \t\t</Methods>
408
+ \t\t<DataSources xmlns="" />
409
+ \t\t<DataControls xmlns="" />
410
+ \t\t<Members xmlns="" />
411
+ \t</SourceCode>
412
+ \t<DataSources />
413
+ \t<Design>
414
+ \t\t<Controls xmlns="" />
415
+ \t</Design>
416
+ \t<Parts />
417
+ </AxForm>
418
+ `;
419
+ }
420
+ /**
421
+ * Generate AxQuery XML structure. Delegates to the shared builder
422
+ * (queryViewXml.ts) so this cannot drift from createD365File.ts's copy.
423
+ */
424
+ static generateAxQueryXml(queryName, properties) {
425
+ return buildAxQueryXml(queryName, properties);
426
+ }
427
+ /**
428
+ * Generate AxView XML structure. Delegates to the shared builder
429
+ * (queryViewXml.ts) so this cannot drift from createD365File.ts's copy.
430
+ */
431
+ static generateAxViewXml(viewName, properties) {
432
+ return buildAxViewXml(viewName, properties);
433
+ }
434
+ /**
435
+ * Generate AxMap XML structure. Delegates to the shared builder (mapXml.ts)
436
+ * so this cannot drift from createD365File.ts's copy.
437
+ */
438
+ static generateAxMapXml(mapName, properties) {
439
+ return buildAxMapXml(mapName, properties);
440
+ }
441
+ /**
442
+ * Generate AxDataEntityView XML structure. Delegates to the shared builder
443
+ * (dataEntityXml.ts) so this cannot drift from createD365File.ts's copy.
444
+ */
445
+ static generateAxDataEntityXml(entityName, properties) {
446
+ return buildAxDataEntityXml(entityName, properties);
447
+ }
448
+ /**
449
+ * Generate AxReport XML skeleton.
450
+ *
451
+ * properties:
452
+ * dpClassName - Data Provider class name (default: <ReportName>DP)
453
+ * tmpTableName - TempDB table name (default: <ReportName>Tmp)
454
+ * datasetName - AxReportDataSet name (default: tmpTableName)
455
+ * designName - AxReportDesign name (default: 'Report')
456
+ * caption - Design caption label ref (e.g. '@MyModel:MyLabel')
457
+ * style - Design style template (e.g. 'TableStyleTemplate')
458
+ * aotQuery - AOT query name for DynamicParameter (e.g. 'SalesTable')
459
+ * fields - Array of { name, alias?, dataType?, caption?, disableAutoCreate? } → AxReportDataSetField
460
+ * datasets - Array of { name, dpClassName, tmpTableName, fields?, aotQuery?, contractParams? } for multi-dataset reports
461
+ * contractParams - Array of { name, dataType?, label?, defaultValue? } → contract class parameters (DataMember)
462
+ * rdlContent - Full RDL XML string to embed (auto-generated from fields when omitted)
463
+ *
464
+ * AOT structure generated (mirrors real D365FO reports like ContosoReports_CashOrder_CZ):
465
+ * <AxReport xmlns="Microsoft.Dynamics.AX.Metadata.V2">
466
+ * <DataMethods />
467
+ * <DataSets>
468
+ * <AxReportDataSet xmlns=""> ← one per dataset
469
+ * <Fields>…</Fields>
470
+ * <Parameters> ← 6 AX system params + {DPCLASS}_DynamicParameter
471
+ * </AxReportDataSet>
472
+ * </DataSets>
473
+ * <DefaultParameterGroup> ← 6 AX params + DynamicParameter (with AOTQuery+DataType)
474
+ * <Designs>
475
+ * <AxReportDesign xmlns="" i:type="AxReportPrecisionDesign">
476
+ * <Text><![CDATA[…RDL…]]></Text> ← 2016 schema with DataSources/DataSets/ReportParameters
477
+ * <DisableIndividualTransformation><Name>…</Name></DisableIndividualTransformation>
478
+ * </Designs>
479
+ * </AxReport>
480
+ */
481
+ static generateAxReportXml(reportName, properties) {
482
+ // Resolve datasets: multi-dataset array or single-dataset shorthand
483
+ let datasets;
484
+ if (properties?.datasets && Array.isArray(properties.datasets)) {
485
+ datasets = properties.datasets;
486
+ }
487
+ else {
488
+ const tmpTableName = properties?.tmpTableName || `${reportName}Tmp`;
489
+ const dpClassName = properties?.dpClassName || `${reportName}DP`;
490
+ const datasetName = properties?.datasetName || tmpTableName;
491
+ datasets = [{
492
+ name: datasetName,
493
+ dpClassName,
494
+ tmpTableName,
495
+ fields: properties?.fields,
496
+ aotQuery: properties?.aotQuery,
497
+ contractParams: properties?.contractParams,
498
+ }];
499
+ }
500
+ const designName = properties?.designName || 'Report';
501
+ const rdlType = (dt) => {
502
+ switch (dt) {
503
+ case 'System.Double': return 'System.Double';
504
+ case 'System.Int32': return 'System.Int32';
505
+ case 'System.Int64': return 'System.Int64';
506
+ case 'System.DateTime': return 'System.DateTime';
507
+ case 'System.Byte[]': return 'System.Byte[]';
508
+ default: return 'System.String';
509
+ }
510
+ };
511
+ // Node.js crypto gives a guaranteed RFC-4122 v4 UUID
512
+ const uuid = () => crypto.randomUUID();
513
+ const buildDatasetXml = (ds) => {
514
+ const dpParamName = `${ds.dpClassName.toUpperCase()}_DynamicParameter`;
515
+ const contractDatasetParamsXml = (ds.contractParams || []).map(cp => {
516
+ const pn = `${ds.name}_ds_${cp.name}`;
517
+ const dt = cp.dataType || 'System.String';
518
+ return `\t\t\t\t<AxReportDataSetParameter>\n\t\t\t\t\t<Name>${pn}</Name>\n\t\t\t\t\t<Alias>${pn}</Alias>\n\t\t\t\t\t<DataType>${dt}</DataType>\n\t\t\t\t\t<Parameter>${pn}</Parameter>\n\t\t\t\t</AxReportDataSetParameter>`;
519
+ }).join('\n');
520
+ let fieldsXml;
521
+ if (ds.fields && ds.fields.length > 0) {
522
+ const entries = ds.fields.map(f => {
523
+ const alias = f.alias || `${ds.tmpTableName}.1.${f.name}`;
524
+ const capLine = f.caption ? `\n\t\t\t\t<Caption>${f.caption}</Caption>` : '';
525
+ const dtLine = f.dataType ? `\n\t\t\t\t<DataType>${f.dataType}</DataType>` : '';
526
+ const disableLine = f.disableAutoCreate ? `\n\t\t\t\t<DisableAutoCreateInDataRegion>true</DisableAutoCreateInDataRegion>` : '';
527
+ return [
528
+ `\t\t\t<AxReportDataSetField>`,
529
+ `\t\t\t\t<Name>${f.name}</Name>`,
530
+ `\t\t\t\t<Alias>${alias}</Alias>${capLine}${dtLine}${disableLine}`,
531
+ `\t\t\t\t<DisplayWidth>Auto</DisplayWidth>`,
532
+ `\t\t\t\t<UserDefined>false</UserDefined>`,
533
+ `\t\t\t</AxReportDataSetField>`,
534
+ ].join('\n');
535
+ });
536
+ fieldsXml = `\t\t\t<Fields>\n${entries.join('\n')}\n\t\t\t</Fields>`;
537
+ }
538
+ else {
539
+ fieldsXml = `\t\t\t<Fields />`;
540
+ }
541
+ return `\t\t<AxReportDataSet xmlns="">
542
+ \t\t\t<Name>${ds.name}</Name>
543
+ \t\t\t<DataSourceType>ReportDataProvider</DataSourceType>
544
+ \t\t\t<Query>SELECT * FROM ${ds.dpClassName}.${ds.tmpTableName}</Query>
545
+ \t\t\t<FieldGroups />
546
+ ${fieldsXml}
547
+ \t\t\t<Parameters>
548
+ \t\t\t\t<AxReportDataSetParameter>
549
+ \t\t\t\t\t<Name>AX_PartitionKey</Name>
550
+ \t\t\t\t\t<Alias>AX_PartitionKey</Alias>
551
+ \t\t\t\t\t<DataType>System.String</DataType>
552
+ \t\t\t\t\t<Parameter>AX_PartitionKey</Parameter>
553
+ \t\t\t\t</AxReportDataSetParameter>
554
+ \t\t\t\t<AxReportDataSetParameter>
555
+ \t\t\t\t\t<Name>AX_CompanyName</Name>
556
+ \t\t\t\t\t<Alias>AX_CompanyName</Alias>
557
+ \t\t\t\t\t<DataType>System.String</DataType>
558
+ \t\t\t\t\t<Parameter>AX_CompanyName</Parameter>
559
+ \t\t\t\t</AxReportDataSetParameter>
560
+ \t\t\t\t<AxReportDataSetParameter>
561
+ \t\t\t\t\t<Name>AX_UserContext</Name>
562
+ \t\t\t\t\t<Alias>AX_UserContext</Alias>
563
+ \t\t\t\t\t<DataType>System.String</DataType>
564
+ \t\t\t\t\t<Parameter>AX_UserContext</Parameter>
565
+ \t\t\t\t</AxReportDataSetParameter>
566
+ \t\t\t\t<AxReportDataSetParameter>
567
+ \t\t\t\t\t<Name>AX_RenderingCulture</Name>
568
+ \t\t\t\t\t<Alias>AX_RenderingCulture</Alias>
569
+ \t\t\t\t\t<DataType>System.String</DataType>
570
+ \t\t\t\t\t<Parameter>AX_RenderingCulture</Parameter>
571
+ \t\t\t\t</AxReportDataSetParameter>
572
+ \t\t\t\t<AxReportDataSetParameter>
573
+ \t\t\t\t\t<Name>AX_ReportContext</Name>
574
+ \t\t\t\t\t<Alias>AX_ReportContext</Alias>
575
+ \t\t\t\t\t<DataType>System.String</DataType>
576
+ \t\t\t\t\t<Parameter>AX_ReportContext</Parameter>
577
+ \t\t\t\t</AxReportDataSetParameter>
578
+ \t\t\t\t<AxReportDataSetParameter>
579
+ \t\t\t\t\t<Name>AX_RdpPreProcessedId</Name>
580
+ \t\t\t\t\t<Alias>AX_RdpPreProcessedId</Alias>
581
+ \t\t\t\t\t<DataType>System.String</DataType>
582
+ \t\t\t\t\t<Parameter>AX_RdpPreProcessedId</Parameter>
583
+ \t\t\t\t</AxReportDataSetParameter>
584
+ ${contractDatasetParamsXml ? contractDatasetParamsXml + '\n' : ''}\t\t\t\t<AxReportDataSetParameter>
585
+ \t\t\t\t\t<Name>${dpParamName}</Name>
586
+ \t\t\t\t\t<Alias>${dpParamName}</Alias>
587
+ \t\t\t\t\t<DataType>Microsoft.Dynamics.AX.Framework.Services.Client.QueryMetadata</DataType>
588
+ \t\t\t\t\t<Parameter>${dpParamName}</Parameter>
589
+ \t\t\t\t</AxReportDataSetParameter>
590
+ \t\t\t</Parameters>
591
+ \t\t</AxReportDataSet>`;
592
+ };
593
+ const datasetsXml = datasets.map(buildDatasetXml).join('\n');
594
+ // DefaultParameterGroup uses the first dataset's DP for DynamicParameter
595
+ const firstDs = datasets[0];
596
+ const dpParamName = `${firstDs.dpClassName.toUpperCase()}_DynamicParameter`;
597
+ const aotQueryLine = firstDs.aotQuery ? `\n\t\t\t\t<AOTQuery>${firstDs.aotQuery}</AOTQuery>` : '';
598
+ // Contract parameters (from DataContract class with [DataMember] attributes)
599
+ const contractParamsXml = (firstDs.contractParams || []).map(cp => {
600
+ const dataTypeLine = cp.dataType ? `\n\t\t\t\t<DataType>${cp.dataType}</DataType>` : '';
601
+ const promptLine = cp.label ? `\n\t\t\t\t<PromptString>${cp.label}</PromptString>` : '';
602
+ return `\t\t\t<AxReportParameterBase xmlns=""
603
+ \t\t\t\t\ti:type="AxReportParameter">
604
+ \t\t\t\t<Name>${firstDs.name}_ds_${cp.name}</Name>${dataTypeLine}${promptLine}
605
+ \t\t\t\t<DefaultValue />
606
+ \t\t\t\t<Values />
607
+ \t\t\t</AxReportParameterBase>`;
608
+ }).join('\n');
609
+ const defaultParamGroupXml = `\t<DefaultParameterGroup>
610
+ \t\t<Name xmlns="">Parameters</Name>
611
+ \t\t<ReportParameterBases xmlns="">
612
+ \t\t\t<AxReportParameterBase xmlns=""
613
+ \t\t\t\t\ti:type="AxReportParameter">
614
+ \t\t\t\t<Name>AX_PartitionKey</Name>
615
+ \t\t\t\t<AllowBlank>true</AllowBlank>
616
+ \t\t\t\t<Nullable>true</Nullable>
617
+ \t\t\t\t<UserVisibility>Hidden</UserVisibility>
618
+ \t\t\t\t<DefaultValue />
619
+ \t\t\t\t<Values />
620
+ \t\t\t</AxReportParameterBase>
621
+ \t\t\t<AxReportParameterBase xmlns=""
622
+ \t\t\t\t\ti:type="AxReportParameter">
623
+ \t\t\t\t<Name>AX_CompanyName</Name>
624
+ \t\t\t\t<UserVisibility>Hidden</UserVisibility>
625
+ \t\t\t\t<DefaultValue />
626
+ \t\t\t\t<Values />
627
+ \t\t\t</AxReportParameterBase>
628
+ \t\t\t<AxReportParameterBase xmlns=""
629
+ \t\t\t\t\ti:type="AxReportParameter">
630
+ \t\t\t\t<Name>AX_UserContext</Name>
631
+ \t\t\t\t<AllowBlank>true</AllowBlank>
632
+ \t\t\t\t<Nullable>true</Nullable>
633
+ \t\t\t\t<UserVisibility>Hidden</UserVisibility>
634
+ \t\t\t\t<DefaultValue />
635
+ \t\t\t\t<Values />
636
+ \t\t\t</AxReportParameterBase>
637
+ \t\t\t<AxReportParameterBase xmlns=""
638
+ \t\t\t\t\ti:type="AxReportParameter">
639
+ \t\t\t\t<Name>AX_RenderingCulture</Name>
640
+ \t\t\t\t<AllowBlank>true</AllowBlank>
641
+ \t\t\t\t<Nullable>true</Nullable>
642
+ \t\t\t\t<UserVisibility>Hidden</UserVisibility>
643
+ \t\t\t\t<DefaultValue />
644
+ \t\t\t\t<Values />
645
+ \t\t\t</AxReportParameterBase>
646
+ \t\t\t<AxReportParameterBase xmlns=""
647
+ \t\t\t\t\ti:type="AxReportParameter">
648
+ \t\t\t\t<Name>AX_ReportContext</Name>
649
+ \t\t\t\t<AllowBlank>true</AllowBlank>
650
+ \t\t\t\t<Nullable>true</Nullable>
651
+ \t\t\t\t<UserVisibility>Hidden</UserVisibility>
652
+ \t\t\t\t<DefaultValue />
653
+ \t\t\t\t<Values />
654
+ \t\t\t</AxReportParameterBase>
655
+ \t\t\t<AxReportParameterBase xmlns=""
656
+ \t\t\t\t\ti:type="AxReportParameter">
657
+ \t\t\t\t<Name>AX_RdpPreProcessedId</Name>
658
+ \t\t\t\t<AllowBlank>true</AllowBlank>
659
+ \t\t\t\t<Nullable>true</Nullable>
660
+ \t\t\t\t<UserVisibility>Hidden</UserVisibility>
661
+ \t\t\t\t<DefaultValue />
662
+ \t\t\t\t<Values />
663
+ \t\t\t</AxReportParameterBase>
664
+ ${contractParamsXml}${contractParamsXml ? '\n' : ''}\t\t\t<AxReportParameterBase xmlns=""
665
+ \t\t\t\t\ti:type="AxReportParameter">
666
+ \t\t\t\t<Name>${dpParamName}</Name>${aotQueryLine}
667
+ \t\t\t\t<AllowBlank>true</AllowBlank>
668
+ \t\t\t\t<DataType>Microsoft.Dynamics.AX.Framework.Services.Client.QueryMetadata</DataType>
669
+ \t\t\t\t<Nullable>true</Nullable>
670
+ \t\t\t\t<UserVisibility>Hidden</UserVisibility>
671
+ \t\t\t\t<DefaultValue />
672
+ \t\t\t\t<Values />
673
+ \t\t\t</AxReportParameterBase>
674
+ \t\t</ReportParameterBases>
675
+ \t</DefaultParameterGroup>`;
676
+ // Auto-generated RDL skeleton (2016 namespace, mirrors real D365FO reports)
677
+ const buildRdlSkeleton = () => {
678
+ const ns2016 = 'http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition';
679
+ const nsRd = 'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner';
680
+ const rdlDataSourcesXml = ` <DataSources>
681
+ <DataSource Name="AutoGen__ReportDataProvider">
682
+ <Transaction>true</Transaction>
683
+ <ConnectionProperties>
684
+ <DataProvider>AXREPORTDATAPROVIDER</DataProvider>
685
+ <ConnectString />
686
+ <IntegratedSecurity>true</IntegratedSecurity>
687
+ </ConnectionProperties>
688
+ <rd:DataSourceID>${uuid()}</rd:DataSourceID>
689
+ </DataSource>
690
+ </DataSources>`;
691
+ const buildRdlDataset = (ds) => {
692
+ const dsDpParam = `${ds.dpClassName.toUpperCase()}_DynamicParameter`;
693
+ const contractParamNamesRdl = (ds.contractParams || []).map(cp => `${ds.name}_ds_${cp.name}`);
694
+ const paramNames = [
695
+ 'AX_PartitionKey', 'AX_CompanyName', 'AX_UserContext',
696
+ 'AX_RenderingCulture', 'AX_ReportContext', 'AX_RdpPreProcessedId',
697
+ ...contractParamNamesRdl,
698
+ dsDpParam,
699
+ ];
700
+ const queryParams = paramNames
701
+ .map(p => ` <QueryParameter Name="${p}">\n <Value>=Parameters!${p}.Value</Value>\n </QueryParameter>`)
702
+ .join('\n');
703
+ let rdlFields = '';
704
+ if (ds.fields && ds.fields.length > 0) {
705
+ const flines = ds.fields.map(f => {
706
+ const alias = f.alias || `${ds.tmpTableName}.1.${f.name}`;
707
+ return ` <Field Name="${f.name}">\n <DataField>${alias}</DataField>\n <rd:TypeName>${rdlType(f.dataType)}</rd:TypeName>\n </Field>`;
708
+ });
709
+ rdlFields = ` <Fields>\n${flines.join('\n')}\n </Fields>\n`;
710
+ }
711
+ return ` <DataSet Name="${ds.name}">
712
+ <rd:DataSetID>${uuid()}</rd:DataSetID>
713
+ <Query>
714
+ <DataSourceName>AutoGen__ReportDataProvider</DataSourceName>
715
+ <QueryParameters>
716
+ ${queryParams}
717
+ </QueryParameters>
718
+ <CommandText>SELECT * FROM ${ds.dpClassName}.${ds.tmpTableName}</CommandText>
719
+ <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
720
+ </Query>
721
+ ${rdlFields} <rd:DataSetInfo>
722
+ <rd:DataSetName>${ds.name}</rd:DataSetName>
723
+ <rd:TableName>Fields</rd:TableName>
724
+ <rd:TableAdapterFillMethod>Fill</rd:TableAdapterFillMethod>
725
+ <rd:TableAdapterGetDataMethod>GetData</rd:TableAdapterGetDataMethod>
726
+ <rd:TableAdapterName>FieldsTableAdapter</rd:TableAdapterName>
727
+ </rd:DataSetInfo>
728
+ </DataSet>`;
729
+ };
730
+ const rdlDatasetsXml = ` <DataSets>\n${datasets.map(buildRdlDataset).join('\n')}\n </DataSets>`;
731
+ // Simple detail tablix per dataset so the design is not empty
732
+ const buildRdlTablix = (ds) => {
733
+ if (!ds.fields || ds.fields.length === 0)
734
+ return '';
735
+ const n = ds.fields.length;
736
+ const colW = +Math.min(1.5, 7 / n).toFixed(2);
737
+ const totalW = +(colW * n).toFixed(2);
738
+ const grp = `Details_${ds.name}`;
739
+ const cols = ds.fields.map(() => ` <TablixColumn><Width>${colW}in</Width></TablixColumn>`).join('\n');
740
+ const hCells = ds.fields.map(f => [
741
+ ` <TablixCell><CellContents>`,
742
+ ` <Textbox Name="Textbox_${f.name}_H">`,
743
+ ` <CanGrow>true</CanGrow><Value>${f.name}</Value>`,
744
+ ` <Style><FontWeight>Bold</FontWeight>`,
745
+ ` <BackgroundColor>LightGrey</BackgroundColor>`,
746
+ ` <Border><Style>Solid</Style></Border>`,
747
+ ` <PaddingLeft>2pt</PaddingLeft><PaddingRight>2pt</PaddingRight>`,
748
+ ` <PaddingTop>2pt</PaddingTop><PaddingBottom>2pt</PaddingBottom>`,
749
+ ` </Style></Textbox>`,
750
+ ` </CellContents></TablixCell>`,
751
+ ].join('\n')).join('\n');
752
+ const dCells = ds.fields.map(f => [
753
+ ` <TablixCell><CellContents>`,
754
+ ` <Textbox Name="Textbox_${f.name}">`,
755
+ ` <CanGrow>true</CanGrow><Value>=Fields!${f.name}.Value</Value>`,
756
+ ` <Style><Border><Style>Solid</Style></Border>`,
757
+ ` <PaddingLeft>2pt</PaddingLeft><PaddingRight>2pt</PaddingRight>`,
758
+ ` <PaddingTop>2pt</PaddingTop><PaddingBottom>2pt</PaddingBottom>`,
759
+ ` </Style></Textbox>`,
760
+ ` </CellContents></TablixCell>`,
761
+ ].join('\n')).join('\n');
762
+ const cMembers = ds.fields.map(() => ` <TablixMember />`).join('\n');
763
+ return [
764
+ ` <Tablix Name="Tablix_${ds.name}">`,
765
+ ` <TablixBody>`,
766
+ ` <TablixColumns>`,
767
+ cols,
768
+ ` </TablixColumns>`,
769
+ ` <TablixRows>`,
770
+ ` <TablixRow><Height>0.25in</Height><TablixCells>`,
771
+ hCells,
772
+ ` </TablixCells></TablixRow>`,
773
+ ` <TablixRow><Height>0.25in</Height><TablixCells>`,
774
+ dCells,
775
+ ` </TablixCells></TablixRow>`,
776
+ ` </TablixRows>`,
777
+ ` </TablixBody>`,
778
+ ` <TablixColumnHierarchy><TablixMembers>`,
779
+ cMembers,
780
+ ` </TablixMembers></TablixColumnHierarchy>`,
781
+ ` <TablixRowHierarchy><TablixMembers>`,
782
+ ` <TablixMember>`,
783
+ ` <KeepWithGroup>After</KeepWithGroup>`,
784
+ ` <RepeatOnNewPage>true</RepeatOnNewPage>`,
785
+ ` </TablixMember>`,
786
+ ` <TablixMember><Group Name="${grp}"><DataGroupName>${grp}</DataGroupName></Group></TablixMember>`,
787
+ ` </TablixMembers></TablixRowHierarchy>`,
788
+ ` <DataSetName>${ds.name}</DataSetName>`,
789
+ ` <Top>0.5in</Top><Left>0.5in</Left>`,
790
+ ` <Height>0.5in</Height><Width>${totalW}in</Width>`,
791
+ ` <Style><Border><Style>Solid</Style></Border></Style>`,
792
+ ` </Tablix>`,
793
+ ].join('\n');
794
+ };
795
+ const rdlBodyItemsXml = datasets.map(buildRdlTablix).filter(Boolean).join('\n');
796
+ const rdlBodyTag = rdlBodyItemsXml
797
+ ? ` <ReportItems>\n${rdlBodyItemsXml}\n </ReportItems>`
798
+ : ` <ReportItems />`;
799
+ const contractRdlParams = (firstDs.contractParams || []).map(cp => ({
800
+ name: `${firstDs.name}_ds_${cp.name}`,
801
+ nullable: true, blank: true, usedInQuery: true,
802
+ }));
803
+ const rdlParamDefs = [
804
+ { name: 'AX_PartitionKey', nullable: true, blank: true, usedInQuery: false },
805
+ { name: 'AX_CompanyName', nullable: false, blank: false, usedInQuery: false },
806
+ { name: 'AX_UserContext', nullable: true, blank: true, usedInQuery: false },
807
+ { name: 'AX_RenderingCulture', nullable: true, blank: true, usedInQuery: false },
808
+ { name: 'AX_ReportContext', nullable: true, blank: true, usedInQuery: true },
809
+ { name: 'AX_RdpPreProcessedId', nullable: true, blank: true, usedInQuery: false },
810
+ { name: dpParamName, nullable: true, blank: true, usedInQuery: false },
811
+ ...contractRdlParams,
812
+ ];
813
+ const rdlParamsXml = ` <ReportParameters>\n` +
814
+ rdlParamDefs.map(p => {
815
+ const nullLine = p.nullable ? `\n <Nullable>true</Nullable>` : '';
816
+ const blankLine = p.blank ? `\n <AllowBlank>true</AllowBlank>` : '';
817
+ const usedLine = p.usedInQuery ? `\n <UsedInQuery>true</UsedInQuery>` : '';
818
+ return ` <ReportParameter Name="${p.name}">\n <DataType>String</DataType>${nullLine}${blankLine}\n <Prompt>${p.name}</Prompt>\n <Hidden>true</Hidden>${usedLine}\n </ReportParameter>`;
819
+ }).join('\n') + `\n </ReportParameters>`;
820
+ const cellDefs = rdlParamDefs
821
+ .map((p, i) => ` <CellDefinition>\n <ColumnIndex>${i}</ColumnIndex>\n <RowIndex>0</RowIndex>\n <ParameterName>${p.name}</ParameterName>\n </CellDefinition>`)
822
+ .join('\n');
823
+ const rdlParamLayoutXml = ` <ReportParametersLayout>
824
+ <GridLayoutDefinition>
825
+ <NumberOfColumns>${rdlParamDefs.length}</NumberOfColumns>
826
+ <NumberOfRows>1</NumberOfRows>
827
+ <CellDefinitions>
828
+ ${cellDefs}
829
+ </CellDefinitions>
830
+ </GridLayoutDefinition>
831
+ </ReportParametersLayout>`;
832
+ return `<?xml version="1.0" encoding="utf-8"?>
833
+ <Report xmlns="${ns2016}" xmlns:rd="${nsRd}">
834
+ <AutoRefresh>0</AutoRefresh>
835
+ ${rdlDataSourcesXml}
836
+ ${rdlDatasetsXml}
837
+ <ReportSections>
838
+ <ReportSection>
839
+ <Body>
840
+ ${rdlBodyTag}
841
+ <Height>1in</Height>
842
+ <Style>
843
+ <Border>
844
+ <Style>None</Style>
845
+ </Border>
846
+ </Style>
847
+ </Body>
848
+ <Width>7.5in</Width>
849
+ <Page>
850
+ <PageHeight>11.69in</PageHeight>
851
+ <PageWidth>8.27in</PageWidth>
852
+ <InteractiveHeight>11in</InteractiveHeight>
853
+ <InteractiveWidth>8.5in</InteractiveWidth>
854
+ <LeftMargin>0.2in</LeftMargin>
855
+ <TopMargin>0.2in</TopMargin>
856
+ <Style />
857
+ </Page>
858
+ </ReportSection>
859
+ </ReportSections>
860
+ ${rdlParamsXml}
861
+ ${rdlParamLayoutXml}
862
+ <Language>en-US</Language>
863
+ <rd:ReportUnitType>Inch</rd:ReportUnitType>
864
+ <rd:ReportID>${uuid()}</rd:ReportID>
865
+ </Report>`;
866
+ };
867
+ const captionLine = properties?.caption ? `\n\t\t\t<Caption>${properties.caption}</Caption>` : '';
868
+ const styleLine = properties?.style ? `\n\t\t\t<Style>${properties.style}</Style>` : '';
869
+ const rdlContent = properties?.rdlContent;
870
+ // Sanitize: fix old-schema <Header> inside <TablixMember> — renamed to <TablixHeader> in 2016 RDL.
871
+ // This handles AI-generated or older-tool-generated RDL that still uses the pre-2016 element name.
872
+ const rdl = (rdlContent || buildRdlSkeleton())
873
+ .replace(/<Header>/g, '<TablixHeader>')
874
+ .replace(/<\/Header>/g, '</TablixHeader>');
875
+ const textElement = `\n\t\t\t<Text><![CDATA[${rdl}]]></Text>`;
876
+ return `<?xml version="1.0" encoding="utf-8"?>
877
+ <AxReport xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="Microsoft.Dynamics.AX.Metadata.V2">
878
+ \t<Name>${reportName}</Name>
879
+ \t<DataMethods />
880
+ \t<DataSets>
881
+ ${datasetsXml}
882
+ \t</DataSets>
883
+ ${defaultParamGroupXml}
884
+ \t<Designs>
885
+ \t\t<AxReportDesign xmlns=""
886
+ \t\t\t\ti:type="AxReportPrecisionDesign">
887
+ \t\t\t<Name>${designName}</Name>${captionLine}${styleLine}${textElement}
888
+ \t\t\t<DisableIndividualTransformation>
889
+ \t\t\t\t<Name>DisableIndividualTransformation</Name>
890
+ \t\t\t</DisableIndividualTransformation>
891
+ \t\t</AxReportDesign>
892
+ \t</Designs>
893
+ \t<EmbeddedImages />
894
+ </AxReport>`;
895
+ }
896
+ /**
897
+ * Main generate method
898
+ */
899
+ static generate(objectType, objectName, sourceCode, properties) {
900
+ switch (objectType) {
901
+ case 'class':
902
+ return this.generateAxClassXml(objectName, sourceCode, properties);
903
+ case 'table':
904
+ return this.generateAxTableXml(objectName, properties);
905
+ case 'enum':
906
+ return this.generateAxEnumXml(objectName, properties);
907
+ case 'form':
908
+ return this.generateAxFormXml(objectName, properties);
909
+ case 'query':
910
+ return this.generateAxQueryXml(objectName, properties);
911
+ case 'view':
912
+ return this.generateAxViewXml(objectName, properties);
913
+ case 'map':
914
+ return this.generateAxMapXml(objectName, properties);
915
+ case 'data-entity':
916
+ return this.generateAxDataEntityXml(objectName, properties);
917
+ case 'report':
918
+ return this.generateAxReportXml(objectName, properties);
919
+ case 'edt':
920
+ return this.generateAxEdtXml(objectName, properties);
921
+ case 'table-extension':
922
+ return this.generateAxTableExtensionXml(objectName, properties);
923
+ case 'form-extension':
924
+ return this.generateAxFormExtensionXml(objectName);
925
+ case 'edt-extension':
926
+ return this.generateAxSimpleExtensionXml('AxEdtExtension', objectName);
927
+ case 'enum-extension':
928
+ return this.generateAxEnumExtensionXml(objectName, properties);
929
+ case 'data-entity-extension':
930
+ return this.generateAxSimpleExtensionXml('AxDataEntityViewExtension', objectName);
931
+ case 'menu-item-display':
932
+ case 'menu-item-action':
933
+ case 'menu-item-output':
934
+ return this.generateAxMenuItemXml(objectType, objectName, properties);
935
+ case 'menu-item-display-extension':
936
+ return this.generateAxSimpleExtensionXml('AxMenuItemDisplayExtension', objectName);
937
+ case 'menu-item-action-extension':
938
+ return this.generateAxSimpleExtensionXml('AxMenuItemActionExtension', objectName);
939
+ case 'menu-item-output-extension':
940
+ return this.generateAxSimpleExtensionXml('AxMenuItemOutputExtension', objectName);
941
+ case 'menu':
942
+ return this.generateAxMenuXml(objectName, properties);
943
+ case 'menu-extension':
944
+ return this.generateAxMenuExtensionXml(objectName);
945
+ case 'security-privilege':
946
+ return this.generateAxSecurityPrivilegeXml(objectName, properties);
947
+ case 'security-duty':
948
+ return this.generateAxSecurityDutyXml(objectName, properties);
949
+ case 'security-role':
950
+ return this.generateAxSecurityRoleXml(objectName, properties);
951
+ case 'security-duty-extension':
952
+ return this.generateAxSecurityDutyExtensionXml(objectName, properties);
953
+ case 'security-role-extension':
954
+ return this.generateAxSecurityRoleExtensionXml(objectName, properties);
955
+ default:
956
+ throw new Error(`Unsupported object type: ${objectType}`);
957
+ }
958
+ }
959
+ static generateAxEdtXml(name, properties) {
960
+ const edtTypeRaw = properties?.edtType || 'AxEdtString';
961
+ const edtTypeNormMap = {
962
+ string: 'AxEdtString',
963
+ integer: 'AxEdtInt',
964
+ int: 'AxEdtInt',
965
+ int64: 'AxEdtInt64',
966
+ real: 'AxEdtReal',
967
+ date: 'AxEdtDate',
968
+ datetime: 'AxEdtUtcDateTime',
969
+ utcdatetime: 'AxEdtUtcDateTime',
970
+ enum: 'AxEdtEnum',
971
+ guid: 'AxEdtGuid',
972
+ container: 'AxEdtContainer',
973
+ };
974
+ const edtType = edtTypeNormMap[edtTypeRaw.toLowerCase()] ?? edtTypeRaw;
975
+ const label = properties?.label || '@TODO:LabelId';
976
+ const extends_ = properties?.extends ? `\n\t<Extends>${properties.extends}</Extends>` : '';
977
+ const stringSize = edtType === 'AxEdtString'
978
+ ? `\n\t<StringSize>${properties?.stringSize ?? 30}</StringSize>` : '';
979
+ return `<?xml version="1.0" encoding="utf-8"?>
980
+ <AxEdt xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns=""
981
+ \ti:type="${edtType}">
982
+ \t<Name>${name}</Name>
983
+ \t<Label>${label}</Label>${extends_}
984
+ \t<ArrayElements />
985
+ \t<Relations />
986
+ \t<TableReferences />${stringSize}
987
+ </AxEdt>`;
988
+ }
989
+ static generateAxSimpleExtensionXml(rootElement, name) {
990
+ return `<?xml version="1.0" encoding="utf-8"?>
991
+ <${rootElement} xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
992
+ \t<Name>${name}</Name>
993
+ \t<PropertyModifications />
994
+ </${rootElement}>`;
995
+ }
996
+ /**
997
+ * Generate AxEnumExtension XML.
998
+ * Name convention: BaseEnumName.PrefixExtension
999
+ *
1000
+ * Supported properties:
1001
+ * enumValues: Array<{ name, label?, value?, countryRegionCodes?, helpText? }>
1002
+ */
1003
+ static generateAxEnumExtensionXml(name, properties) {
1004
+ const enumValueSpecs = Array.isArray(properties?.enumValues) ? properties.enumValues : [];
1005
+ let enumValuesXml;
1006
+ if (enumValueSpecs.length === 0) {
1007
+ enumValuesXml = '\t<EnumValues />';
1008
+ }
1009
+ else {
1010
+ enumValuesXml = '\t<EnumValues>';
1011
+ for (const v of enumValueSpecs) {
1012
+ enumValuesXml += `\n\t\t<AxEnumValue>`;
1013
+ enumValuesXml += `\n\t\t\t<Name>${v.name}</Name>`;
1014
+ if (v.countryRegionCodes)
1015
+ enumValuesXml += `\n\t\t\t<CountryRegionCodes>${v.countryRegionCodes}</CountryRegionCodes>`;
1016
+ if (v.label)
1017
+ enumValuesXml += `\n\t\t\t<Label>${v.label}</Label>`;
1018
+ if (v.helpText)
1019
+ enumValuesXml += `\n\t\t\t<HelpText>${v.helpText}</HelpText>`;
1020
+ if (v.value !== undefined && v.value !== 0)
1021
+ enumValuesXml += `\n\t\t\t<Value>${v.value}</Value>`;
1022
+ enumValuesXml += `\n\t\t</AxEnumValue>`;
1023
+ }
1024
+ enumValuesXml += '\n\t</EnumValues>';
1025
+ }
1026
+ return `<?xml version="1.0" encoding="utf-8"?>
1027
+ <AxEnumExtension xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
1028
+ \t<Name>${name}</Name>
1029
+ ${enumValuesXml}
1030
+ \t<PropertyModifications />
1031
+ \t<ValueModifications />
1032
+ </AxEnumExtension>`;
1033
+ }
1034
+ static generateAxTableExtensionXml(name, properties) {
1035
+ // Fields
1036
+ const fieldSpecs = Array.isArray(properties?.fields) ? properties.fields : [];
1037
+ let fieldsXml;
1038
+ if (fieldSpecs.length === 0) {
1039
+ fieldsXml = '\t<Fields />';
1040
+ }
1041
+ else {
1042
+ fieldsXml = '\t<Fields>\n';
1043
+ for (const f of fieldSpecs) {
1044
+ const iType = f.fieldType ?? (f.enumType ? 'AxTableFieldEnum' : 'AxTableFieldString');
1045
+ fieldsXml += `\t\t<AxTableField xmlns=""\n\t\t\ti:type="${iType}">\n`;
1046
+ fieldsXml += `\t\t\t<Name>${f.name}</Name>\n`;
1047
+ if (f.edt)
1048
+ fieldsXml += `\t\t\t<ExtendedDataType>${f.edt}</ExtendedDataType>\n`;
1049
+ if (f.label)
1050
+ fieldsXml += `\t\t\t<Label>${f.label}</Label>\n`;
1051
+ if (f.mandatory)
1052
+ fieldsXml += `\t\t\t<Mandatory>Yes</Mandatory>\n`;
1053
+ if (f.enumType)
1054
+ fieldsXml += `\t\t\t<EnumType>${f.enumType}</EnumType>\n`;
1055
+ fieldsXml += `\t\t</AxTableField>\n`;
1056
+ }
1057
+ fieldsXml += '\t</Fields>';
1058
+ }
1059
+ // FieldGroups
1060
+ const fgSpecs = Array.isArray(properties?.fieldGroups) ? properties.fieldGroups : [];
1061
+ let fieldGroupsXml;
1062
+ if (fgSpecs.length === 0) {
1063
+ fieldGroupsXml = '\t<FieldGroups />';
1064
+ }
1065
+ else {
1066
+ fieldGroupsXml = '\t<FieldGroups>\n';
1067
+ for (const fg of fgSpecs) {
1068
+ fieldGroupsXml += `\t\t<AxTableFieldGroup>\n\t\t\t<Name>${fg.name}</Name>\n`;
1069
+ if (fg.label)
1070
+ fieldGroupsXml += `\t\t\t<Label>${fg.label}</Label>\n`;
1071
+ const fgFields = Array.isArray(fg.fields) ? fg.fields : [];
1072
+ if (fgFields.length === 0) {
1073
+ fieldGroupsXml += `\t\t\t<Fields />\n`;
1074
+ }
1075
+ else {
1076
+ fieldGroupsXml += `\t\t\t<Fields>\n`;
1077
+ for (const df of fgFields)
1078
+ fieldGroupsXml += `\t\t\t\t<AxTableFieldGroupField>\n\t\t\t\t\t<DataField>${df}</DataField>\n\t\t\t\t</AxTableFieldGroupField>\n`;
1079
+ fieldGroupsXml += `\t\t\t</Fields>\n`;
1080
+ }
1081
+ fieldGroupsXml += `\t\t</AxTableFieldGroup>\n`;
1082
+ }
1083
+ fieldGroupsXml += '\t</FieldGroups>';
1084
+ }
1085
+ // FieldGroupExtensions
1086
+ const fgeSpecs = Array.isArray(properties?.fieldGroupExtensions) ? properties.fieldGroupExtensions : [];
1087
+ let fieldGroupExtensionsXml;
1088
+ if (fgeSpecs.length === 0) {
1089
+ fieldGroupExtensionsXml = '\t<FieldGroupExtensions />';
1090
+ }
1091
+ else {
1092
+ fieldGroupExtensionsXml = '\t<FieldGroupExtensions>\n';
1093
+ for (const fge of fgeSpecs) {
1094
+ fieldGroupExtensionsXml += `\t\t<AxTableFieldGroupExtension>\n\t\t\t<Name>${fge.name}</Name>\n`;
1095
+ const fgeFields = Array.isArray(fge.fields) ? fge.fields : [];
1096
+ if (fgeFields.length === 0) {
1097
+ fieldGroupExtensionsXml += `\t\t\t<Fields />\n`;
1098
+ }
1099
+ else {
1100
+ fieldGroupExtensionsXml += `\t\t\t<Fields>\n`;
1101
+ for (const df of fgeFields)
1102
+ fieldGroupExtensionsXml += `\t\t\t\t<AxTableFieldGroupField>\n\t\t\t\t\t<DataField>${df}</DataField>\n\t\t\t\t</AxTableFieldGroupField>\n`;
1103
+ fieldGroupExtensionsXml += `\t\t\t</Fields>\n`;
1104
+ }
1105
+ fieldGroupExtensionsXml += `\t\t</AxTableFieldGroupExtension>\n`;
1106
+ }
1107
+ fieldGroupExtensionsXml += '\t</FieldGroupExtensions>';
1108
+ }
1109
+ // Indexes
1110
+ const idxSpecs = Array.isArray(properties?.indexes) ? properties.indexes : [];
1111
+ let indexesXml;
1112
+ if (idxSpecs.length === 0) {
1113
+ indexesXml = '\t<Indexes />';
1114
+ }
1115
+ else {
1116
+ indexesXml = '\t<Indexes>\n';
1117
+ for (const idx of idxSpecs) {
1118
+ indexesXml += `\t\t<AxTableIndex>\n\t\t\t<Name>${idx.name}</Name>\n`;
1119
+ if (idx.allowDuplicates !== undefined)
1120
+ indexesXml += `\t\t\t<AllowDuplicates>${idx.allowDuplicates ? 'Yes' : 'No'}</AllowDuplicates>\n`;
1121
+ if (idx.alternateKey)
1122
+ indexesXml += `\t\t\t<AlternateKey>Yes</AlternateKey>\n`;
1123
+ const idxFields = Array.isArray(idx.fields) ? idx.fields : [];
1124
+ if (idxFields.length === 0) {
1125
+ indexesXml += `\t\t\t<Fields />\n`;
1126
+ }
1127
+ else {
1128
+ indexesXml += `\t\t\t<Fields>\n`;
1129
+ for (const f of idxFields) {
1130
+ indexesXml += `\t\t\t\t<AxTableIndexField>\n\t\t\t\t\t<DataField>${f.fieldName}</DataField>\n`;
1131
+ if (f.direction)
1132
+ indexesXml += `\t\t\t\t\t<Direction>${f.direction}</Direction>\n`;
1133
+ indexesXml += `\t\t\t\t</AxTableIndexField>\n`;
1134
+ }
1135
+ indexesXml += `\t\t\t</Fields>\n`;
1136
+ }
1137
+ indexesXml += `\t\t</AxTableIndex>\n`;
1138
+ }
1139
+ indexesXml += '\t</Indexes>';
1140
+ }
1141
+ // Relations
1142
+ const relSpecs = Array.isArray(properties?.relations) ? properties.relations : [];
1143
+ let relationsXml;
1144
+ if (relSpecs.length === 0) {
1145
+ relationsXml = '\t<Relations />';
1146
+ }
1147
+ else {
1148
+ relationsXml = '\t<Relations>\n';
1149
+ for (const rel of relSpecs) {
1150
+ relationsXml += `\t\t<AxTableRelation>\n\t\t\t<Name>${rel.name}</Name>\n`;
1151
+ relationsXml += `\t\t\t<Cardinality>${rel.cardinality || 'ZeroMore'}</Cardinality>\n`;
1152
+ relationsXml += `\t\t\t<RelatedTable>${rel.relatedTable}</RelatedTable>\n`;
1153
+ relationsXml += `\t\t\t<RelatedTableCardinality>${rel.relatedTableCardinality || 'ExactlyOne'}</RelatedTableCardinality>\n`;
1154
+ relationsXml += `\t\t\t<RelationshipType>${rel.relationshipType || 'Association'}</RelationshipType>\n`;
1155
+ const constraints = Array.isArray(rel.constraints) ? rel.constraints : [];
1156
+ if (constraints.length === 0) {
1157
+ relationsXml += `\t\t\t<Constraints />\n`;
1158
+ }
1159
+ else {
1160
+ relationsXml += `\t\t\t<Constraints>\n`;
1161
+ for (const c of constraints) {
1162
+ relationsXml += `\t\t\t\t<AxTableRelationConstraint xmlns="" i:type="AxTableRelationConstraintField">\n`;
1163
+ relationsXml += `\t\t\t\t\t<Name>${c.fieldName}</Name>\n`;
1164
+ relationsXml += `\t\t\t\t\t<Field>${c.fieldName}</Field>\n`;
1165
+ relationsXml += `\t\t\t\t\t<RelatedField>${c.relatedFieldName}</RelatedField>\n`;
1166
+ relationsXml += `\t\t\t\t</AxTableRelationConstraint>\n`;
1167
+ }
1168
+ relationsXml += `\t\t\t</Constraints>\n`;
1169
+ }
1170
+ relationsXml += `\t\t</AxTableRelation>\n`;
1171
+ }
1172
+ relationsXml += '\t</Relations>';
1173
+ }
1174
+ return `<?xml version="1.0" encoding="utf-8"?>
1175
+ <AxTableExtension xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
1176
+ \t<Name>${name}</Name>
1177
+ ${fieldGroupExtensionsXml}
1178
+ ${fieldGroupsXml}
1179
+ \t<FieldModifications />
1180
+ ${fieldsXml}
1181
+ \t<FullTextIndexes />
1182
+ ${indexesXml}
1183
+ \t<Mappings />
1184
+ \t<PropertyModifications />
1185
+ \t<RelationExtensions />
1186
+ \t<RelationModifications />
1187
+ ${relationsXml}
1188
+ </AxTableExtension>`;
1189
+ }
1190
+ static generateAxFormExtensionXml(name) {
1191
+ return `<?xml version="1.0" encoding="utf-8"?>
1192
+ <AxFormExtension xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="Microsoft.Dynamics.AX.Metadata.V6">
1193
+ \t<Name>${name}</Name>
1194
+ \t<ControlModifications />
1195
+ \t<Controls />
1196
+ \t<DataSourceModifications />
1197
+ \t<DataSourceReferences />
1198
+ \t<DataSources />
1199
+ \t<Parts />
1200
+ \t<PropertyModifications />
1201
+ </AxFormExtension>`;
1202
+ }
1203
+ static generateAxMenuItemXml(itemType, name, properties) {
1204
+ const elemName = itemType === 'menu-item-action' ? 'AxMenuItemAction'
1205
+ : itemType === 'menu-item-output' ? 'AxMenuItemOutput'
1206
+ : 'AxMenuItemDisplay';
1207
+ const targetObject = properties?.targetObject || properties?.object || name;
1208
+ const label = properties?.label || '@TODO:LabelId';
1209
+ // Determine ObjectType based on item type and explicit properties.
1210
+ // D365FO serializer rules (confirmed from real XML files):
1211
+ // - AxMenuItemAction: ObjectType is always "Class"; must be present.
1212
+ // - AxMenuItemDisplay: ObjectType is OMITTED when targeting a Form (default);
1213
+ // use "Class" only when explicitly set.
1214
+ // - AxMenuItemOutput: ObjectType is "Class" (controller) or "SSRSReport";
1215
+ // "Report" is NOT a valid value — real files use "SSRSReport".
1216
+ const explicitObjType = properties?.objectType || properties?.targetType;
1217
+ let objType;
1218
+ if (itemType === 'menu-item-action') {
1219
+ objType = explicitObjType || 'Class';
1220
+ }
1221
+ else if (itemType === 'menu-item-output') {
1222
+ if (explicitObjType === 'Report') {
1223
+ objType = 'SSRSReport';
1224
+ }
1225
+ else {
1226
+ objType = explicitObjType || 'Class';
1227
+ }
1228
+ }
1229
+ else {
1230
+ // Display: omit ObjectType when targeting a Form (implicit default)
1231
+ if (explicitObjType && explicitObjType !== 'Form') {
1232
+ objType = explicitObjType;
1233
+ }
1234
+ }
1235
+ const objectTypeXml = objType ? `\n\t<ObjectType>${objType}</ObjectType>` : '';
1236
+ return `<?xml version="1.0" encoding="utf-8"?>
1237
+ <${elemName} xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="Microsoft.Dynamics.AX.Metadata.V1">
1238
+ \t<Name>${name}</Name>
1239
+ \t<Label>${label}</Label>
1240
+ \t<Object>${targetObject}</Object>${objectTypeXml}
1241
+ </${elemName}>`;
1242
+ }
1243
+ static generateAxMenuXml(name, properties) {
1244
+ const label = properties?.label || '@TODO:LabelId';
1245
+ return `<?xml version="1.0" encoding="utf-8"?>
1246
+ <AxMenu xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="Microsoft.Dynamics.AX.Metadata.V1">
1247
+ \t<Name>${name}</Name>
1248
+ \t<Label>${label}</Label>
1249
+ \t<Elements />
1250
+ </AxMenu>`;
1251
+ }
1252
+ static generateAxMenuExtensionXml(name) {
1253
+ return `<?xml version="1.0" encoding="utf-8"?>
1254
+ <AxMenuExtension xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="Microsoft.Dynamics.AX.Metadata.V1">
1255
+ \t<Name>${name}</Name>
1256
+ \t<Customizations />
1257
+ \t<Elements />
1258
+ \t<MenuElementModifications />
1259
+ \t<PropertyModifications />
1260
+ </AxMenuExtension>`;
1261
+ }
1262
+ // Delegates to the shared builder so this mirror and the one in
1263
+ // createD365File.ts cannot drift. @see buildAxSecurityPrivilegeXml.
1264
+ static generateAxSecurityPrivilegeXml(name, properties) {
1265
+ return buildAxSecurityPrivilegeXml(name, properties);
1266
+ }
1267
+ static generateAxSecurityDutyXml(name, properties) {
1268
+ const label = properties?.label || '@TODO:LabelId';
1269
+ return `<?xml version="1.0" encoding="utf-8"?>
1270
+ <AxSecurityDuty xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
1271
+ \t<Name>${name}</Name>
1272
+ \t<Label>${label}</Label>
1273
+ \t<Privileges />
1274
+ </AxSecurityDuty>`;
1275
+ }
1276
+ static generateAxSecurityRoleXml(name, properties) {
1277
+ const label = properties?.label || '@TODO:LabelId';
1278
+ return `<?xml version="1.0" encoding="utf-8"?>
1279
+ <AxSecurityRole xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
1280
+ \t<Name>${name}</Name>
1281
+ \t<Label>${label}</Label>
1282
+ \t<DirectAccessPermissions />
1283
+ \t<Duties />
1284
+ \t<Privileges />
1285
+ \t<SubRoles />
1286
+ </AxSecurityRole>`;
1287
+ }
1288
+ /** Normalize a name list that may arrive as an array or a comma/semicolon/newline-separated string. */
1289
+ static normalizeNameList(value) {
1290
+ if (!value)
1291
+ return [];
1292
+ const arr = Array.isArray(value) ? value : String(value).split(/[,;\n]+/);
1293
+ return arr.map((s) => String(s).trim()).filter((s) => s.length > 0);
1294
+ }
1295
+ static refContainer(container, childTag, names) {
1296
+ if (names.length === 0)
1297
+ return `\t<${container} />`;
1298
+ const children = names
1299
+ .map(n => `\t\t<${childTag}>\n\t\t\t<Name>${n}</Name>\n\t\t</${childTag}>`)
1300
+ .join('\n');
1301
+ return `\t<${container}>\n${children}\n\t</${container}>`;
1302
+ }
1303
+ /**
1304
+ * Generate AxSecurityDutyExtension XML — adds privileges to an EXISTING duty
1305
+ * without overlaying it. Name convention: "<BaseDuty>.<PrefixOrModel>Extension".
1306
+ */
1307
+ static generateAxSecurityDutyExtensionXml(name, properties) {
1308
+ const privileges = this.normalizeNameList(properties?.privileges);
1309
+ return `<?xml version="1.0" encoding="utf-8"?>
1310
+ <AxSecurityDutyExtension xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
1311
+ \t<Name>${name}</Name>
1312
+ ${this.refContainer('Privileges', 'AxSecurityPrivilegeReference', privileges)}
1313
+ \t<PropertyModifications />
1314
+ </AxSecurityDutyExtension>`;
1315
+ }
1316
+ /**
1317
+ * Generate AxSecurityRoleExtension XML — adds duties/privileges to an EXISTING
1318
+ * role without overlaying it. Name convention: "<BaseRole>.<PrefixOrModel>Extension".
1319
+ */
1320
+ static generateAxSecurityRoleExtensionXml(name, properties) {
1321
+ const duties = this.normalizeNameList(properties?.duties);
1322
+ const privileges = this.normalizeNameList(properties?.privileges);
1323
+ return `<?xml version="1.0" encoding="utf-8"?>
1324
+ <AxSecurityRoleExtension xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
1325
+ \t<Name>${name}</Name>
1326
+ \t<DirectAccessPermissions />
1327
+ ${this.refContainer('Duties', 'AxSecurityDutyReference', duties)}
1328
+ ${this.refContainer('Privileges', 'AxSecurityPrivilegeReference', privileges)}
1329
+ \t<PropertyModifications />
1330
+ </AxSecurityRoleExtension>`;
1331
+ }
1332
+ }
1333
+ /**
1334
+ * Generate D365FO XML handler function
1335
+ */
1336
+ export async function handleGenerateD365Xml(request) {
1337
+ try {
1338
+ const args = GenerateD365XmlArgsSchema.parse(request.params.arguments);
1339
+ // Resolve model name: arg → mcp.json modelName → workspacePath segment
1340
+ const configManager = getConfigManager();
1341
+ const modelName = args.modelName || configManager.getModelName();
1342
+ if (!modelName) {
1343
+ const errorMsg = '❌ ERROR: modelName could not be resolved.\n\n' +
1344
+ 'Provide it in one of these ways:\n' +
1345
+ ' 1. Pass modelName explicitly in the tool call arguments\n' +
1346
+ ' 2. Add modelName to .mcp.json context: { "context": { "modelName": "YourModel" } }\n' +
1347
+ ' 3. Add workspacePath ending with the package/model name: { "context": { "workspacePath": "K:\\\\...\\\\YourModel" } }';
1348
+ return { content: [{ type: 'text', text: errorMsg }], isError: true };
1349
+ }
1350
+ console.error(`[generate_d365fo_xml] Generating XML for ${args.objectType}: ${args.objectName}, model: ${modelName}`);
1351
+ // Determine object folder based on type
1352
+ const objectFolderMap = {
1353
+ class: 'AxClass',
1354
+ table: 'AxTable',
1355
+ enum: 'AxEnum',
1356
+ form: 'AxForm',
1357
+ query: 'AxQuery',
1358
+ view: 'AxView',
1359
+ 'data-entity': 'AxDataEntityView',
1360
+ report: 'AxReport',
1361
+ edt: 'AxEdt',
1362
+ 'edt-extension': 'AxEdtExtension',
1363
+ 'table-extension': 'AxTableExtension',
1364
+ 'form-extension': 'AxFormExtension',
1365
+ 'data-entity-extension': 'AxDataEntityViewExtension',
1366
+ 'enum-extension': 'AxEnumExtension',
1367
+ 'menu-item-display': 'AxMenuItemDisplay',
1368
+ 'menu-item-action': 'AxMenuItemAction',
1369
+ 'menu-item-output': 'AxMenuItemOutput',
1370
+ 'menu-item-display-extension': 'AxMenuItemDisplayExtension',
1371
+ 'menu-item-action-extension': 'AxMenuItemActionExtension',
1372
+ 'menu-item-output-extension': 'AxMenuItemOutputExtension',
1373
+ menu: 'AxMenu',
1374
+ 'menu-extension': 'AxMenuExtension',
1375
+ 'security-privilege': 'AxSecurityPrivilege',
1376
+ 'security-duty': 'AxSecurityDuty',
1377
+ 'security-role': 'AxSecurityRole',
1378
+ 'security-duty-extension': 'AxSecurityDutyExtension',
1379
+ 'security-role-extension': 'AxSecurityRoleExtension',
1380
+ map: 'AxMap',
1381
+ };
1382
+ const objectFolder = objectFolderMap[args.objectType];
1383
+ if (!objectFolder) {
1384
+ throw new Error(`Unsupported object type: ${args.objectType}`);
1385
+ }
1386
+ // Generate XML content
1387
+ let xmlContent = XmlTemplateGenerator.generate(args.objectType, args.objectName, args.sourceCode, args.properties);
1388
+ // For reports: convert any remaining CDATA <Text> to entity-encoded form.
1389
+ // The generator now emits entity-encoded directly, but guard against xmlContent
1390
+ // passed in pre-generated form with CDATA.
1391
+ if (args.objectType === 'report') {
1392
+ xmlContent = xmlContent.replace(/<Text><!\[CDATA\[([\s\S]*?)\]\]><\/Text>/g, (_m, inner) => `<Text>${inner.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</Text>`);
1393
+ }
1394
+ console.error(`[generate_d365fo_xml] Generated XML content: ${xmlContent.length} bytes`);
1395
+ // Construct recommended file path
1396
+ const recommendedPath = `K:\\AosService\\PackagesLocalDirectory\\${modelName}\\${modelName}\\${objectFolder}\\${args.objectName}.xml`;
1397
+ // Return XML content with instructions
1398
+ const instructions = `✅ Generated D365FO ${args.objectType} XML for: ${args.objectName}
1399
+
1400
+ 📋 Model: ${modelName}
1401
+ 📁 Recommended path: ${recommendedPath}
1402
+
1403
+ ⚠️ CRITICAL NEXT STEPS (GitHub Copilot MUST do this):
1404
+
1405
+ 1. **Create the file** using create_file tool:
1406
+ - Path: ${recommendedPath}
1407
+ - Content: Use the XML content below (between xml markers)
1408
+ - ⚠️ IMPORTANT: D365FO requires UTF-8 with BOM encoding!
1409
+ - VS Code create_file uses UTF-8 without BOM by default, which may cause "unicode substitution character" errors
1410
+
1411
+ 2. **If you see encoding errors**, manually add UTF-8 BOM:
1412
+ - Open file in hex editor
1413
+ - Ensure first 3 bytes are: EF BB BF (UTF-8 BOM)
1414
+ - Or use d365fo_file(action="create") tool instead (if MCP server runs on local Windows)
1415
+
1416
+ 3. **Add to Visual Studio project** (.rnrproj):
1417
+ <Content Include="${recommendedPath.replace(/\\/g, '\\\\')}" />
1418
+
1419
+ 4. **Build the project** to synchronize with AOT
1420
+
1421
+ ---
1422
+
1423
+ 📄 XML Content (copy exactly, do not modify):
1424
+
1425
+ \`\`\`xml
1426
+ ${xmlContent}
1427
+ \`\`\`
1428
+
1429
+ ---
1430
+
1431
+ 💡 **Alternative:** If MCP server runs on local Windows, use \`d365fo_file(action="create")\` tool instead - it handles UTF-8 BOM automatically and adds to VS project.`;
1432
+ return {
1433
+ content: [
1434
+ {
1435
+ type: 'text',
1436
+ text: instructions,
1437
+ },
1438
+ ],
1439
+ };
1440
+ }
1441
+ catch (error) {
1442
+ console.error(`[generate_d365fo_xml] Error:`, error);
1443
+ return {
1444
+ content: [
1445
+ {
1446
+ type: 'text',
1447
+ text: `❌ Error generating D365FO XML:\n\n${error instanceof Error ? error.message : 'Unknown error'}`,
1448
+ },
1449
+ ],
1450
+ isError: true,
1451
+ };
1452
+ }
1453
+ }
1454
+ //# sourceMappingURL=generateD365Xml.js.map