@ffschrattenecker/tm1-mcp-server 6.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 (475) hide show
  1. package/CHANGELOG.md +1211 -0
  2. package/LICENSE +21 -0
  3. package/NOTICE +34 -0
  4. package/README.md +276 -0
  5. package/dist/config.d.ts +35 -0
  6. package/dist/config.js +238 -0
  7. package/dist/http-transport.d.ts +8 -0
  8. package/dist/http-transport.js +132 -0
  9. package/dist/index.d.ts +18 -0
  10. package/dist/index.js +164 -0
  11. package/dist/lib/callgraph/callGraph.d.ts +124 -0
  12. package/dist/lib/callgraph/callGraph.js +334 -0
  13. package/dist/lib/callgraph/choreGraph.d.ts +23 -0
  14. package/dist/lib/callgraph/choreGraph.js +102 -0
  15. package/dist/lib/callgraph/dataFlow.d.ts +74 -0
  16. package/dist/lib/callgraph/dataFlow.js +271 -0
  17. package/dist/lib/callgraph/datasourceMembership.d.ts +31 -0
  18. package/dist/lib/callgraph/datasourceMembership.js +142 -0
  19. package/dist/lib/callgraph/lintTypes.d.ts +28 -0
  20. package/dist/lib/callgraph/lintTypes.js +2 -0
  21. package/dist/lib/callgraph/mdxMembers.d.ts +29 -0
  22. package/dist/lib/callgraph/mdxMembers.js +97 -0
  23. package/dist/lib/callgraph/referenceIndex.d.ts +179 -0
  24. package/dist/lib/callgraph/referenceIndex.js +584 -0
  25. package/dist/lib/callgraph/rulesLinter.d.ts +55 -0
  26. package/dist/lib/callgraph/rulesLinter.js +776 -0
  27. package/dist/lib/callgraph/rulesParser.d.ts +26 -0
  28. package/dist/lib/callgraph/rulesParser.js +71 -0
  29. package/dist/lib/callgraph/subsetUsage.d.ts +16 -0
  30. package/dist/lib/callgraph/subsetUsage.js +134 -0
  31. package/dist/lib/callgraph/tiParser.d.ts +21 -0
  32. package/dist/lib/callgraph/tiParser.js +672 -0
  33. package/dist/lib/callgraph/tiSignatures.d.ts +32 -0
  34. package/dist/lib/callgraph/tiSignatures.js +6185 -0
  35. package/dist/lib/callgraph/tm1-adapter.d.ts +32 -0
  36. package/dist/lib/callgraph/tm1-adapter.js +159 -0
  37. package/dist/lib/callgraph/types.d.ts +53 -0
  38. package/dist/lib/callgraph/types.js +2 -0
  39. package/dist/lib/callgraph/variableEnv.d.ts +86 -0
  40. package/dist/lib/callgraph/variableEnv.js +214 -0
  41. package/dist/lib/cell-address.d.ts +12 -0
  42. package/dist/lib/cell-address.js +71 -0
  43. package/dist/lib/complexity/antipatterns.d.ts +22 -0
  44. package/dist/lib/complexity/antipatterns.js +302 -0
  45. package/dist/lib/complexity/comment-classifier.d.ts +24 -0
  46. package/dist/lib/complexity/comment-classifier.js +43 -0
  47. package/dist/lib/complexity/cross-process.d.ts +78 -0
  48. package/dist/lib/complexity/cross-process.js +114 -0
  49. package/dist/lib/complexity/process-metrics.d.ts +78 -0
  50. package/dist/lib/complexity/process-metrics.js +278 -0
  51. package/dist/lib/complexity/rules-metrics.d.ts +31 -0
  52. package/dist/lib/complexity/rules-metrics.js +99 -0
  53. package/dist/lib/concurrency.d.ts +11 -0
  54. package/dist/lib/concurrency.js +27 -0
  55. package/dist/lib/control-name.d.ts +10 -0
  56. package/dist/lib/control-name.js +10 -0
  57. package/dist/lib/coordinate-error.d.ts +3 -0
  58. package/dist/lib/coordinate-error.js +29 -0
  59. package/dist/lib/credential-format.d.ts +23 -0
  60. package/dist/lib/credential-format.js +25 -0
  61. package/dist/lib/cube-stats/fetcher.d.ts +106 -0
  62. package/dist/lib/cube-stats/fetcher.js +194 -0
  63. package/dist/lib/feeders/brackets.d.ts +47 -0
  64. package/dist/lib/feeders/brackets.js +195 -0
  65. package/dist/lib/feeders/element-type-cache.d.ts +42 -0
  66. package/dist/lib/feeders/element-type-cache.js +86 -0
  67. package/dist/lib/feeders/static-heuristics.d.ts +101 -0
  68. package/dist/lib/feeders/static-heuristics.js +202 -0
  69. package/dist/lib/git-process.d.ts +67 -0
  70. package/dist/lib/git-process.js +243 -0
  71. package/dist/lib/mask-secrets.d.ts +10 -0
  72. package/dist/lib/mask-secrets.js +99 -0
  73. package/dist/lib/mdx.d.ts +3 -0
  74. package/dist/lib/mdx.js +13 -0
  75. package/dist/lib/naming/odata-filter.d.ts +15 -0
  76. package/dist/lib/naming/odata-filter.js +81 -0
  77. package/dist/lib/naming/rules.d.ts +34 -0
  78. package/dist/lib/naming/rules.js +215 -0
  79. package/dist/lib/pro-parser.d.ts +19 -0
  80. package/dist/lib/pro-parser.js +260 -0
  81. package/dist/lib/pro-serializer.d.ts +19 -0
  82. package/dist/lib/pro-serializer.js +170 -0
  83. package/dist/lib/process-parts-schema.d.ts +45 -0
  84. package/dist/lib/process-parts-schema.js +46 -0
  85. package/dist/lib/process-refs.d.ts +88 -0
  86. package/dist/lib/process-refs.js +441 -0
  87. package/dist/lib/rules-outline.d.ts +29 -0
  88. package/dist/lib/rules-outline.js +68 -0
  89. package/dist/lib/rules-patch.d.ts +6 -0
  90. package/dist/lib/rules-patch.js +59 -0
  91. package/dist/lib/safe-regex.d.ts +15 -0
  92. package/dist/lib/safe-regex.js +37 -0
  93. package/dist/lib/sample-cells.d.ts +48 -0
  94. package/dist/lib/sample-cells.js +146 -0
  95. package/dist/lib/slim-json-schema.d.ts +20 -0
  96. package/dist/lib/slim-json-schema.js +68 -0
  97. package/dist/lib/strip-comments.d.ts +23 -0
  98. package/dist/lib/strip-comments.js +61 -0
  99. package/dist/lib/tm1-events.d.ts +16 -0
  100. package/dist/lib/tm1-events.js +29 -0
  101. package/dist/lib/v12-compat/deprecated-ti.d.ts +17 -0
  102. package/dist/lib/v12-compat/deprecated-ti.js +257 -0
  103. package/dist/lib/v12-compat/scanner.d.ts +10 -0
  104. package/dist/lib/v12-compat/scanner.js +43 -0
  105. package/dist/lib/variables-ui-data.d.ts +26 -0
  106. package/dist/lib/variables-ui-data.js +77 -0
  107. package/dist/load-env.d.ts +2 -0
  108. package/dist/load-env.js +29 -0
  109. package/dist/logger.d.ts +4 -0
  110. package/dist/logger.js +60 -0
  111. package/dist/prompts/index.d.ts +3 -0
  112. package/dist/prompts/index.js +141 -0
  113. package/dist/resources/index.d.ts +5 -0
  114. package/dist/resources/index.js +237 -0
  115. package/dist/resources/list-handler.d.ts +40 -0
  116. package/dist/resources/list-handler.js +86 -0
  117. package/dist/resources/subscriptions.d.ts +19 -0
  118. package/dist/resources/subscriptions.js +80 -0
  119. package/dist/schemas/cells.d.ts +17 -0
  120. package/dist/schemas/cells.js +13 -0
  121. package/dist/schemas/common.d.ts +16 -0
  122. package/dist/schemas/common.js +14 -0
  123. package/dist/schemas/index.d.ts +10 -0
  124. package/dist/schemas/index.js +23 -0
  125. package/dist/schemas/metadata.d.ts +70 -0
  126. package/dist/schemas/metadata.js +47 -0
  127. package/dist/schemas/monitoring.d.ts +95 -0
  128. package/dist/schemas/monitoring.js +69 -0
  129. package/dist/schemas/processes.d.ts +74 -0
  130. package/dist/schemas/processes.js +66 -0
  131. package/dist/schemas/scheduling.d.ts +13 -0
  132. package/dist/schemas/scheduling.js +13 -0
  133. package/dist/schemas/security.d.ts +19 -0
  134. package/dist/schemas/security.js +16 -0
  135. package/dist/schemas/subsets.d.ts +12 -0
  136. package/dist/schemas/subsets.js +12 -0
  137. package/dist/schemas/views.d.ts +9 -0
  138. package/dist/schemas/views.js +9 -0
  139. package/dist/session-manager.d.ts +79 -0
  140. package/dist/session-manager.js +281 -0
  141. package/dist/tm1-client/connection/profile.d.ts +13 -0
  142. package/dist/tm1-client/connection/profile.js +99 -0
  143. package/dist/tm1-client/dispatcher.d.ts +5 -0
  144. package/dist/tm1-client/dispatcher.js +31 -0
  145. package/dist/tm1-client/http.d.ts +81 -0
  146. package/dist/tm1-client/http.js +547 -0
  147. package/dist/tm1-client/services/batch-service.d.ts +123 -0
  148. package/dist/tm1-client/services/batch-service.js +455 -0
  149. package/dist/tm1-client/services/cell-service.d.ts +71 -0
  150. package/dist/tm1-client/services/cell-service.js +333 -0
  151. package/dist/tm1-client/services/cellset-transform.d.ts +26 -0
  152. package/dist/tm1-client/services/cellset-transform.js +80 -0
  153. package/dist/tm1-client/services/chore-service.d.ts +68 -0
  154. package/dist/tm1-client/services/chore-service.js +179 -0
  155. package/dist/tm1-client/services/chore-status.d.ts +11 -0
  156. package/dist/tm1-client/services/chore-status.js +127 -0
  157. package/dist/tm1-client/services/cube-service.d.ts +134 -0
  158. package/dist/tm1-client/services/cube-service.js +294 -0
  159. package/dist/tm1-client/services/dimension-service.d.ts +118 -0
  160. package/dist/tm1-client/services/dimension-service.js +249 -0
  161. package/dist/tm1-client/services/element-service.d.ts +245 -0
  162. package/dist/tm1-client/services/element-service.js +809 -0
  163. package/dist/tm1-client/services/fallback.d.ts +44 -0
  164. package/dist/tm1-client/services/fallback.js +72 -0
  165. package/dist/tm1-client/services/file-service.d.ts +53 -0
  166. package/dist/tm1-client/services/file-service.js +218 -0
  167. package/dist/tm1-client/services/hierarchy-service.d.ts +129 -0
  168. package/dist/tm1-client/services/hierarchy-service.js +332 -0
  169. package/dist/tm1-client/services/monitoring-service.d.ts +34 -0
  170. package/dist/tm1-client/services/monitoring-service.js +123 -0
  171. package/dist/tm1-client/services/odata-page.d.ts +71 -0
  172. package/dist/tm1-client/services/odata-page.js +87 -0
  173. package/dist/tm1-client/services/process-service.d.ts +278 -0
  174. package/dist/tm1-client/services/process-service.js +874 -0
  175. package/dist/tm1-client/services/process-status.d.ts +21 -0
  176. package/dist/tm1-client/services/process-status.js +89 -0
  177. package/dist/tm1-client/services/security-service.d.ts +50 -0
  178. package/dist/tm1-client/services/security-service.js +93 -0
  179. package/dist/tm1-client/services/server-service.d.ts +116 -0
  180. package/dist/tm1-client/services/server-service.js +504 -0
  181. package/dist/tm1-client/services/subset-service.d.ts +37 -0
  182. package/dist/tm1-client/services/subset-service.js +122 -0
  183. package/dist/tm1-client/services/view-service.d.ts +46 -0
  184. package/dist/tm1-client/services/view-service.js +287 -0
  185. package/dist/tm1-client.d.ts +56 -0
  186. package/dist/tm1-client.js +126 -0
  187. package/dist/tools/analysis/analyze-callgraph.d.ts +28 -0
  188. package/dist/tools/analysis/analyze-callgraph.js +350 -0
  189. package/dist/tools/analysis/analyze-chore-graph.d.ts +2 -0
  190. package/dist/tools/analysis/analyze-chore-graph.js +148 -0
  191. package/dist/tools/analysis/analyze-object-usage.d.ts +2 -0
  192. package/dist/tools/analysis/analyze-object-usage.js +143 -0
  193. package/dist/tools/analysis/audit-complexity.d.ts +2 -0
  194. package/dist/tools/analysis/audit-complexity.js +255 -0
  195. package/dist/tools/analysis/audit-feeders.d.ts +2 -0
  196. package/dist/tools/analysis/audit-feeders.js +417 -0
  197. package/dist/tools/analysis/audit-naming.d.ts +2 -0
  198. package/dist/tools/analysis/audit-naming.js +379 -0
  199. package/dist/tools/analysis/check-v12-readiness.d.ts +2 -0
  200. package/dist/tools/analysis/check-v12-readiness.js +136 -0
  201. package/dist/tools/analysis/find-orphan-dimensions.d.ts +2 -0
  202. package/dist/tools/analysis/find-orphan-dimensions.js +55 -0
  203. package/dist/tools/analysis/invalidate-callgraph-cache.d.ts +2 -0
  204. package/dist/tools/analysis/invalidate-callgraph-cache.js +40 -0
  205. package/dist/tools/analysis/trace-data-flow.d.ts +2 -0
  206. package/dist/tools/analysis/trace-data-flow.js +138 -0
  207. package/dist/tools/annotations.d.ts +12 -0
  208. package/dist/tools/annotations.js +61 -0
  209. package/dist/tools/celldata/check-feeders.d.ts +2 -0
  210. package/dist/tools/celldata/check-feeders.js +48 -0
  211. package/dist/tools/celldata/check-writable-coords.d.ts +2 -0
  212. package/dist/tools/celldata/check-writable-coords.js +126 -0
  213. package/dist/tools/celldata/execute-mdx.d.ts +17 -0
  214. package/dist/tools/celldata/execute-mdx.js +126 -0
  215. package/dist/tools/celldata/get-cell-value.d.ts +2 -0
  216. package/dist/tools/celldata/get-cell-value.js +30 -0
  217. package/dist/tools/celldata/get-view-definition.d.ts +2 -0
  218. package/dist/tools/celldata/get-view-definition.js +29 -0
  219. package/dist/tools/celldata/get-view.d.ts +2 -0
  220. package/dist/tools/celldata/get-view.js +55 -0
  221. package/dist/tools/celldata/sample-cells.d.ts +2 -0
  222. package/dist/tools/celldata/sample-cells.js +101 -0
  223. package/dist/tools/celldata/trace-cell-calculation.d.ts +2 -0
  224. package/dist/tools/celldata/trace-cell-calculation.js +53 -0
  225. package/dist/tools/celldata/trace-feeders.d.ts +2 -0
  226. package/dist/tools/celldata/trace-feeders.js +44 -0
  227. package/dist/tools/celldata/write-cells.d.ts +2 -0
  228. package/dist/tools/celldata/write-cells.js +65 -0
  229. package/dist/tools/confirm.d.ts +10 -0
  230. package/dist/tools/confirm.js +64 -0
  231. package/dist/tools/define-tool.d.ts +51 -0
  232. package/dist/tools/define-tool.js +49 -0
  233. package/dist/tools/dimension-management/bulk-upsert-elements.d.ts +2 -0
  234. package/dist/tools/dimension-management/bulk-upsert-elements.js +103 -0
  235. package/dist/tools/dimension-management/create-dimension.d.ts +2 -0
  236. package/dist/tools/dimension-management/create-dimension.js +22 -0
  237. package/dist/tools/dimension-management/create-element-attribute.d.ts +2 -0
  238. package/dist/tools/dimension-management/create-element-attribute.js +26 -0
  239. package/dist/tools/dimension-management/create-element.d.ts +2 -0
  240. package/dist/tools/dimension-management/create-element.js +31 -0
  241. package/dist/tools/dimension-management/create-hierarchy.d.ts +2 -0
  242. package/dist/tools/dimension-management/create-hierarchy.js +22 -0
  243. package/dist/tools/dimension-management/delete-dimension.d.ts +2 -0
  244. package/dist/tools/dimension-management/delete-dimension.js +25 -0
  245. package/dist/tools/dimension-management/delete-element.d.ts +2 -0
  246. package/dist/tools/dimension-management/delete-element.js +26 -0
  247. package/dist/tools/dimension-management/delete-elements.d.ts +2 -0
  248. package/dist/tools/dimension-management/delete-elements.js +44 -0
  249. package/dist/tools/dimension-management/delete-hierarchy.d.ts +2 -0
  250. package/dist/tools/dimension-management/delete-hierarchy.js +35 -0
  251. package/dist/tools/dimension-management/get-element-attribute-values.d.ts +2 -0
  252. package/dist/tools/dimension-management/get-element-attribute-values.js +77 -0
  253. package/dist/tools/dimension-management/list-element-attributes.d.ts +2 -0
  254. package/dist/tools/dimension-management/list-element-attributes.js +31 -0
  255. package/dist/tools/dimension-management/move-element.d.ts +2 -0
  256. package/dist/tools/dimension-management/move-element.js +28 -0
  257. package/dist/tools/dimension-management/update-element-attribute-value.d.ts +2 -0
  258. package/dist/tools/dimension-management/update-element-attribute-value.js +80 -0
  259. package/dist/tools/dimension-management/update-element.d.ts +2 -0
  260. package/dist/tools/dimension-management/update-element.js +35 -0
  261. package/dist/tools/error-format.d.ts +22 -0
  262. package/dist/tools/error-format.js +130 -0
  263. package/dist/tools/fileops/delete-file.d.ts +2 -0
  264. package/dist/tools/fileops/delete-file.js +32 -0
  265. package/dist/tools/fileops/get-file-content.d.ts +2 -0
  266. package/dist/tools/fileops/get-file-content.js +76 -0
  267. package/dist/tools/fileops/list-files.d.ts +2 -0
  268. package/dist/tools/fileops/list-files.js +43 -0
  269. package/dist/tools/fileops/search-files.d.ts +2 -0
  270. package/dist/tools/fileops/search-files.js +76 -0
  271. package/dist/tools/fileops/upload-file.d.ts +2 -0
  272. package/dist/tools/fileops/upload-file.js +69 -0
  273. package/dist/tools/format.d.ts +57 -0
  274. package/dist/tools/format.js +157 -0
  275. package/dist/tools/hierarchy.d.ts +6 -0
  276. package/dist/tools/hierarchy.js +27 -0
  277. package/dist/tools/index.d.ts +4 -0
  278. package/dist/tools/index.js +263 -0
  279. package/dist/tools/local-file.d.ts +16 -0
  280. package/dist/tools/local-file.js +88 -0
  281. package/dist/tools/metadata/get-ancestors.d.ts +2 -0
  282. package/dist/tools/metadata/get-ancestors.js +36 -0
  283. package/dist/tools/metadata/get-descendants.d.ts +2 -0
  284. package/dist/tools/metadata/get-descendants.js +64 -0
  285. package/dist/tools/metadata/get-hierarchy.d.ts +2 -0
  286. package/dist/tools/metadata/get-hierarchy.js +130 -0
  287. package/dist/tools/metadata/list-chores.d.ts +2 -0
  288. package/dist/tools/metadata/list-chores.js +62 -0
  289. package/dist/tools/metadata/list-cubes.d.ts +2 -0
  290. package/dist/tools/metadata/list-cubes.js +128 -0
  291. package/dist/tools/metadata/list-dimensions.d.ts +2 -0
  292. package/dist/tools/metadata/list-dimensions.js +131 -0
  293. package/dist/tools/metadata/list-processes-grouped.d.ts +2 -0
  294. package/dist/tools/metadata/list-processes-grouped.js +96 -0
  295. package/dist/tools/metadata/list-processes.d.ts +2 -0
  296. package/dist/tools/metadata/list-processes.js +108 -0
  297. package/dist/tools/metadata/resolve-default-members.d.ts +2 -0
  298. package/dist/tools/metadata/resolve-default-members.js +46 -0
  299. package/dist/tools/model-building/check-cube-rule.d.ts +2 -0
  300. package/dist/tools/model-building/check-cube-rule.js +51 -0
  301. package/dist/tools/model-building/clear-cube.d.ts +2 -0
  302. package/dist/tools/model-building/clear-cube.js +46 -0
  303. package/dist/tools/model-building/create-cube.d.ts +2 -0
  304. package/dist/tools/model-building/create-cube.js +34 -0
  305. package/dist/tools/model-building/delete-cube.d.ts +2 -0
  306. package/dist/tools/model-building/delete-cube.js +27 -0
  307. package/dist/tools/model-building/get-all-cube-rules.d.ts +2 -0
  308. package/dist/tools/model-building/get-all-cube-rules.js +149 -0
  309. package/dist/tools/model-building/get-cube-rules.d.ts +2 -0
  310. package/dist/tools/model-building/get-cube-rules.js +69 -0
  311. package/dist/tools/model-building/rules-source.d.ts +21 -0
  312. package/dist/tools/model-building/rules-source.js +49 -0
  313. package/dist/tools/model-building/search-rules.d.ts +2 -0
  314. package/dist/tools/model-building/search-rules.js +132 -0
  315. package/dist/tools/model-building/set-cube-rules.d.ts +2 -0
  316. package/dist/tools/model-building/set-cube-rules.js +81 -0
  317. package/dist/tools/model-building/unload-cube.d.ts +2 -0
  318. package/dist/tools/model-building/unload-cube.js +23 -0
  319. package/dist/tools/operations/diagnose-process-error.d.ts +2 -0
  320. package/dist/tools/operations/diagnose-process-error.js +178 -0
  321. package/dist/tools/operations/error-log-helpers.d.ts +25 -0
  322. package/dist/tools/operations/error-log-helpers.js +57 -0
  323. package/dist/tools/operations/get-audit-log.d.ts +2 -0
  324. package/dist/tools/operations/get-audit-log.js +70 -0
  325. package/dist/tools/operations/get-cube-stats.d.ts +2 -0
  326. package/dist/tools/operations/get-cube-stats.js +107 -0
  327. package/dist/tools/operations/get-error-log-content.d.ts +2 -0
  328. package/dist/tools/operations/get-error-log-content.js +164 -0
  329. package/dist/tools/operations/get-jobs.d.ts +3 -0
  330. package/dist/tools/operations/get-jobs.js +51 -0
  331. package/dist/tools/operations/get-message-log.d.ts +2 -0
  332. package/dist/tools/operations/get-message-log.js +63 -0
  333. package/dist/tools/operations/get-server-info.d.ts +2 -0
  334. package/dist/tools/operations/get-server-info.js +180 -0
  335. package/dist/tools/operations/get-server-state.d.ts +2 -0
  336. package/dist/tools/operations/get-server-state.js +129 -0
  337. package/dist/tools/operations/get-sessions.d.ts +2 -0
  338. package/dist/tools/operations/get-sessions.js +76 -0
  339. package/dist/tools/operations/get-threads.d.ts +3 -0
  340. package/dist/tools/operations/get-threads.js +50 -0
  341. package/dist/tools/operations/get-transaction-log.d.ts +2 -0
  342. package/dist/tools/operations/get-transaction-log.js +63 -0
  343. package/dist/tools/operations/list-error-logs.d.ts +8 -0
  344. package/dist/tools/operations/list-error-logs.js +157 -0
  345. package/dist/tools/operations/save-data.d.ts +2 -0
  346. package/dist/tools/operations/save-data.js +50 -0
  347. package/dist/tools/pagination.d.ts +32 -0
  348. package/dist/tools/pagination.js +116 -0
  349. package/dist/tools/scheduling/create-chore.d.ts +2 -0
  350. package/dist/tools/scheduling/create-chore.js +93 -0
  351. package/dist/tools/scheduling/delete-chore.d.ts +2 -0
  352. package/dist/tools/scheduling/delete-chore.js +22 -0
  353. package/dist/tools/scheduling/execute-chore.d.ts +2 -0
  354. package/dist/tools/scheduling/execute-chore.js +52 -0
  355. package/dist/tools/scheduling/toggle-chore.d.ts +2 -0
  356. package/dist/tools/scheduling/toggle-chore.js +22 -0
  357. package/dist/tools/scheduling/update-chore.d.ts +2 -0
  358. package/dist/tools/scheduling/update-chore.js +71 -0
  359. package/dist/tools/schemas/common.d.ts +10 -0
  360. package/dist/tools/schemas/common.js +23 -0
  361. package/dist/tools/schemas/items-analysis.d.ts +394 -0
  362. package/dist/tools/schemas/items-analysis.js +419 -0
  363. package/dist/tools/schemas/items-cells.d.ts +70 -0
  364. package/dist/tools/schemas/items-cells.js +65 -0
  365. package/dist/tools/schemas/items-common.d.ts +18 -0
  366. package/dist/tools/schemas/items-common.js +39 -0
  367. package/dist/tools/schemas/items-fileops.d.ts +11 -0
  368. package/dist/tools/schemas/items-fileops.js +13 -0
  369. package/dist/tools/schemas/items-metadata.d.ts +262 -0
  370. package/dist/tools/schemas/items-metadata.js +184 -0
  371. package/dist/tools/schemas/items-monitoring.d.ts +79 -0
  372. package/dist/tools/schemas/items-monitoring.js +78 -0
  373. package/dist/tools/schemas/items-processes.d.ts +279 -0
  374. package/dist/tools/schemas/items-processes.js +235 -0
  375. package/dist/tools/schemas/items-scheduling.d.ts +25 -0
  376. package/dist/tools/schemas/items-scheduling.js +26 -0
  377. package/dist/tools/schemas/items-security.d.ts +19 -0
  378. package/dist/tools/schemas/items-security.js +12 -0
  379. package/dist/tools/schemas/items-subsets.d.ts +2 -0
  380. package/dist/tools/schemas/items-subsets.js +4 -0
  381. package/dist/tools/schemas/items-views.d.ts +38 -0
  382. package/dist/tools/schemas/items-views.js +26 -0
  383. package/dist/tools/schemas/items.d.ts +12 -0
  384. package/dist/tools/schemas/items.js +23 -0
  385. package/dist/tools/schemas/markdown-capable.d.ts +21 -0
  386. package/dist/tools/schemas/markdown-capable.js +58 -0
  387. package/dist/tools/schemas/output-schema.d.ts +24 -0
  388. package/dist/tools/schemas/output-schema.js +25 -0
  389. package/dist/tools/security/assign-client-group.d.ts +2 -0
  390. package/dist/tools/security/assign-client-group.js +20 -0
  391. package/dist/tools/security/create-client.d.ts +2 -0
  392. package/dist/tools/security/create-client.js +28 -0
  393. package/dist/tools/security/delete-client.d.ts +2 -0
  394. package/dist/tools/security/delete-client.js +22 -0
  395. package/dist/tools/security/get-client.d.ts +2 -0
  396. package/dist/tools/security/get-client.js +20 -0
  397. package/dist/tools/security/list-clients.d.ts +2 -0
  398. package/dist/tools/security/list-clients.js +86 -0
  399. package/dist/tools/security/list-groups.d.ts +2 -0
  400. package/dist/tools/security/list-groups.js +43 -0
  401. package/dist/tools/security/remove-client-group.d.ts +2 -0
  402. package/dist/tools/security/remove-client-group.js +27 -0
  403. package/dist/tools/security/update-client.d.ts +2 -0
  404. package/dist/tools/security/update-client.js +22 -0
  405. package/dist/tools/subsets/create-subset.d.ts +2 -0
  406. package/dist/tools/subsets/create-subset.js +44 -0
  407. package/dist/tools/subsets/delete-subset.d.ts +2 -0
  408. package/dist/tools/subsets/delete-subset.js +26 -0
  409. package/dist/tools/subsets/get-subset.d.ts +2 -0
  410. package/dist/tools/subsets/get-subset.js +29 -0
  411. package/dist/tools/subsets/list-subsets.d.ts +2 -0
  412. package/dist/tools/subsets/list-subsets.js +36 -0
  413. package/dist/tools/subsets/update-subset.d.ts +2 -0
  414. package/dist/tools/subsets/update-subset.js +33 -0
  415. package/dist/tools/ti-development/check-process-code.d.ts +2 -0
  416. package/dist/tools/ti-development/check-process-code.js +96 -0
  417. package/dist/tools/ti-development/compile-process.d.ts +2 -0
  418. package/dist/tools/ti-development/compile-process.js +32 -0
  419. package/dist/tools/ti-development/copy-process.d.ts +2 -0
  420. package/dist/tools/ti-development/copy-process.js +32 -0
  421. package/dist/tools/ti-development/delete-process.d.ts +2 -0
  422. package/dist/tools/ti-development/delete-process.js +26 -0
  423. package/dist/tools/ti-development/diff-process-with-file.d.ts +2 -0
  424. package/dist/tools/ti-development/diff-process-with-file.js +208 -0
  425. package/dist/tools/ti-development/diff-processes.d.ts +2 -0
  426. package/dist/tools/ti-development/diff-processes.js +312 -0
  427. package/dist/tools/ti-development/execute-process.d.ts +8 -0
  428. package/dist/tools/ti-development/execute-process.js +109 -0
  429. package/dist/tools/ti-development/export-process-to-git.d.ts +2 -0
  430. package/dist/tools/ti-development/export-process-to-git.js +113 -0
  431. package/dist/tools/ti-development/export-process-to-pro.d.ts +2 -0
  432. package/dist/tools/ti-development/export-process-to-pro.js +117 -0
  433. package/dist/tools/ti-development/get-all-processes-code.d.ts +2 -0
  434. package/dist/tools/ti-development/get-all-processes-code.js +131 -0
  435. package/dist/tools/ti-development/get-process-code.d.ts +2 -0
  436. package/dist/tools/ti-development/get-process-code.js +100 -0
  437. package/dist/tools/ti-development/get-process-datasource.d.ts +2 -0
  438. package/dist/tools/ti-development/get-process-datasource.js +20 -0
  439. package/dist/tools/ti-development/get-process-parameters.d.ts +2 -0
  440. package/dist/tools/ti-development/get-process-parameters.js +25 -0
  441. package/dist/tools/ti-development/get-process-variables.d.ts +2 -0
  442. package/dist/tools/ti-development/get-process-variables.js +38 -0
  443. package/dist/tools/ti-development/get-process.d.ts +2 -0
  444. package/dist/tools/ti-development/get-process.js +163 -0
  445. package/dist/tools/ti-development/import-pro-file.d.ts +2 -0
  446. package/dist/tools/ti-development/import-pro-file.js +153 -0
  447. package/dist/tools/ti-development/import-process-from-git.d.ts +2 -0
  448. package/dist/tools/ti-development/import-process-from-git.js +198 -0
  449. package/dist/tools/ti-development/install-pro-bundle.d.ts +2 -0
  450. package/dist/tools/ti-development/install-pro-bundle.js +288 -0
  451. package/dist/tools/ti-development/preflight.d.ts +39 -0
  452. package/dist/tools/ti-development/preflight.js +56 -0
  453. package/dist/tools/ti-development/process-backup.d.ts +29 -0
  454. package/dist/tools/ti-development/process-backup.js +118 -0
  455. package/dist/tools/ti-development/search-code.d.ts +2 -0
  456. package/dist/tools/ti-development/search-code.js +208 -0
  457. package/dist/tools/ti-development/upsert-process.d.ts +2 -0
  458. package/dist/tools/ti-development/upsert-process.js +167 -0
  459. package/dist/tools/ti-development/validate-process-refs.d.ts +2 -0
  460. package/dist/tools/ti-development/validate-process-refs.js +73 -0
  461. package/dist/tools/views/create-mdx-view.d.ts +2 -0
  462. package/dist/tools/views/create-mdx-view.js +21 -0
  463. package/dist/tools/views/create-native-view.d.ts +2 -0
  464. package/dist/tools/views/create-native-view.js +81 -0
  465. package/dist/tools/views/delete-view.d.ts +2 -0
  466. package/dist/tools/views/delete-view.js +23 -0
  467. package/dist/tools/views/list-views.d.ts +2 -0
  468. package/dist/tools/views/list-views.js +32 -0
  469. package/dist/tools/with-annotations.d.ts +6 -0
  470. package/dist/tools/with-annotations.js +339 -0
  471. package/dist/types.d.ts +409 -0
  472. package/dist/types.js +91 -0
  473. package/dist/version.d.ts +4 -0
  474. package/dist/version.js +18 -0
  475. package/package.json +107 -0
@@ -0,0 +1,584 @@
1
+ import { KNOWN_SIGNATURES } from "./tiSignatures.js";
2
+ import { extractDbCalls, extractBracketRefs, parseBracketDimRefs, validateBracketRefSyntax, } from "./rulesLinter.js";
3
+ import { joinContinuationLines } from "./tiParser.js";
4
+ import { buildProcessEnv, resolveExpression, } from "./variableEnv.js";
5
+ import { rethrowIfSystemic } from "../../tm1-client/services/fallback.js";
6
+ import { extractSubsetUsage } from "./subsetUsage.js";
7
+ function buildArgIdxMap(paramName) {
8
+ const map = new Map();
9
+ for (const [key, sig] of KNOWN_SIGNATURES.entries()) {
10
+ for (let i = 0; i < sig.params.length; i++) {
11
+ if (sig.params[i].name.toLowerCase() === paramName && !map.has(key)) {
12
+ map.set(key, i);
13
+ break;
14
+ }
15
+ }
16
+ }
17
+ return map;
18
+ }
19
+ const CUBE_ARG_IDX = buildArgIdxMap("cubename");
20
+ const DIM_ARG_IDX = buildArgIdxMap("dimensionname");
21
+ const PROCESS_ARG_IDX = buildArgIdxMap("processname");
22
+ const ELEM_ARG_IDX = buildArgIdxMap("elementname");
23
+ const SUBSET_ARG_IDX = buildArgIdxMap("subsetname");
24
+ /** Subset-membership calls whose ElementName arg is a real element-data-flow reference. */
25
+ const SUBSET_ELEM_FUNCS = new Set([
26
+ "subsetelementinsert",
27
+ "subsetelementadd",
28
+ "subsetelementdelete",
29
+ ]);
30
+ const TRACKED_FUNCS = [
31
+ ...new Set([
32
+ ...CUBE_ARG_IDX.keys(),
33
+ ...DIM_ARG_IDX.keys(),
34
+ ...PROCESS_ARG_IDX.keys(),
35
+ ]),
36
+ ];
37
+ const FUNC_RE = new RegExp(`\\b(${TRACKED_FUNCS.join("|")})\\s*\\(`, "gi");
38
+ const SKIP_VALIDATION_FUNCS = new Set([
39
+ "dimensioncreate",
40
+ "cubecreate",
41
+ "hierarchycreate",
42
+ "subsetcreate",
43
+ "subsetcreatebymdx",
44
+ "viewcreate",
45
+ "viewcreatebymdx",
46
+ ]);
47
+ // ─── Helpers (subset of rulesLinter/tiServerLinter internals) ────────────────
48
+ function neutralizeLine(line) {
49
+ return line
50
+ .replace(/'[^']*'/g, (s) => " ".repeat(s.length))
51
+ .replace(/#.*$/, "");
52
+ }
53
+ export function splitArgs(argsStr) {
54
+ if (!argsStr.trim()) {
55
+ return [];
56
+ }
57
+ const args = [];
58
+ let depth = 0;
59
+ let inStr = false;
60
+ let cur = "";
61
+ for (const ch of argsStr) {
62
+ if (ch === "'" && !inStr) {
63
+ inStr = true;
64
+ cur += ch;
65
+ }
66
+ else if (ch === "'" && inStr) {
67
+ inStr = false;
68
+ cur += ch;
69
+ }
70
+ else if (!inStr && ch === "(") {
71
+ depth++;
72
+ cur += ch;
73
+ }
74
+ else if (!inStr && ch === ")") {
75
+ depth--;
76
+ cur += ch;
77
+ }
78
+ else if (!inStr && depth === 0 && ch === ",") {
79
+ args.push(cur.trim());
80
+ cur = "";
81
+ }
82
+ else {
83
+ cur += ch;
84
+ }
85
+ }
86
+ args.push(cur.trim());
87
+ return args.filter((a) => a !== "");
88
+ }
89
+ /** Composite key for the byElement index: dimension + element, both lowercased. */
90
+ export function elementKey(dimension, element) {
91
+ return `${dimension.toLowerCase()} ${element.toLowerCase()}`;
92
+ }
93
+ export function extractStringLiteral(arg) {
94
+ const t = arg.trim();
95
+ if (t.startsWith("'") && t.endsWith("'") && t.length >= 3) {
96
+ const inner = t.slice(1, -1);
97
+ if (!inner.includes("'")) {
98
+ return inner;
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+ const SECTION_MARKER_RE = /^57[2345],\d*$/;
104
+ function truncateSnippet(line) {
105
+ const t = line.trim();
106
+ return t.length > 200 ? t.slice(0, 197) + "…" : t;
107
+ }
108
+ /**
109
+ * Resolve a single value-arg of an ExecuteProcess param-value pair.
110
+ * Uses the caller's ProcessEnv to resolve bare variables to literals or
111
+ * caller-param references.
112
+ */
113
+ function resolveValueArg(arg, env) {
114
+ const valueRaw = arg.trim();
115
+ const binding = resolveExpression(valueRaw, env);
116
+ if (binding.kind === "literal") {
117
+ return { resolution: { kind: "literal", value: binding.value }, valueRaw };
118
+ }
119
+ if (binding.kind === "param") {
120
+ return {
121
+ resolution: { kind: "passthrough", paramName: binding.paramName },
122
+ valueRaw,
123
+ };
124
+ }
125
+ return { resolution: { kind: "dynamic" }, valueRaw };
126
+ }
127
+ /**
128
+ * For ExecuteProcess/RunProcess: parse param pairs starting at arg index 1.
129
+ * Dangling single args (odd count) and pairs with a dynamic param-name arg
130
+ * are skipped.
131
+ */
132
+ function extractCallParams(args, env) {
133
+ const params = [];
134
+ for (let i = 1; i + 1 < args.length; i += 2) {
135
+ const nameLit = extractStringLiteral(args[i]);
136
+ if (nameLit === null) {
137
+ continue;
138
+ }
139
+ const { resolution, valueRaw } = resolveValueArg(args[i + 1], env);
140
+ params.push({ name: nameLit, resolution, valueRaw });
141
+ }
142
+ return params;
143
+ }
144
+ const PROCESS_CALL_FUNCS = new Set(["executeprocess", "runprocess"]);
145
+ /**
146
+ * Extracts cube/dimension/process references from a single TI text (one section).
147
+ * Pure function — no network, no vscode.
148
+ *
149
+ * @param text TI source (prolog/metadata/data/epilog)
150
+ * @param env Process environment for variable resolution in ExecuteProcess args.
151
+ * Defaults to an empty env (no param refs, no local vars) if omitted.
152
+ */
153
+ export function extractTiReferences(text, env, sharedLiveVars, unresolvedOut, unresolvedElemOut) {
154
+ const baseEnv = env ?? {
155
+ paramsLc: new Set(),
156
+ paramOriginal: new Map(),
157
+ paramTypes: new Map(),
158
+ datasourceVars: new Map(),
159
+ vars: new Map(),
160
+ };
161
+ // Flow-sensitive Var-Tracking: Basis-Env (Params/DS-Vars/cross-section-Vars) + live
162
+ // aktualisierte lokale Vars. Jede Zuweisung überschreibt (last-assignment-wins), so dass
163
+ // Orchestrator-Muster wie `sProc='A'; RUNPROCESS(sProc,…); sProc='B'; RUNPROCESS(sProc,…);`
164
+ // beide Calls als eigene Refs auflösen statt auf `dynamic` zu demovieren.
165
+ // sharedLiveVars wird über Sections hinweg durchgereicht (Prolog-Zuweisung sichtbar in Data/Epilog).
166
+ const liveVars = sharedLiveVars ?? new Map(baseEnv.vars);
167
+ const callerEnv = { ...baseEnv, vars: liveVars };
168
+ const refs = [];
169
+ // Multi-line-Calls auf ihre Startzeile zusammenfassen — Continuation-Zeilen werden leer.
170
+ const lines = joinContinuationLines(text.split("\n").map((l) => l.replace(/\r$/, "")));
171
+ const assignRe = /^\s*([A-Za-z_]\w*)\s*=\s*(.+?)\s*;?\s*(?:#.*)?$/;
172
+ for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
173
+ const line = lines[lineIdx];
174
+ if (SECTION_MARKER_RE.test(line.trim()) || line.trim() === "") {
175
+ continue;
176
+ }
177
+ const neutralized = neutralizeLine(line);
178
+ if (neutralized.trim() === "") {
179
+ continue;
180
+ }
181
+ // Vor der Call-Erkennung: Zuweisungen in liveVars eintragen (last-assignment-wins).
182
+ const aM = assignRe.exec(line);
183
+ if (aM && !aM[2].startsWith("=")) {
184
+ const varLc = aM[1].toLowerCase();
185
+ if (!baseEnv.paramsLc.has(varLc) && !baseEnv.datasourceVars.has(varLc)) {
186
+ liveVars.set(varLc, resolveExpression(aM[2], callerEnv));
187
+ }
188
+ }
189
+ FUNC_RE.lastIndex = 0;
190
+ let m;
191
+ while ((m = FUNC_RE.exec(neutralized)) !== null) {
192
+ const funcLower = m[1].toLowerCase();
193
+ const openParen = m.index + m[0].length - 1;
194
+ let depth = 1;
195
+ let i = openParen + 1;
196
+ while (i < neutralized.length && depth > 0) {
197
+ if (neutralized[i] === "(") {
198
+ depth++;
199
+ }
200
+ else if (neutralized[i] === ")") {
201
+ depth--;
202
+ }
203
+ i++;
204
+ }
205
+ if (depth !== 0) {
206
+ continue;
207
+ }
208
+ const argsStr = line.slice(openParen + 1, i - 1);
209
+ const args = splitArgs(argsStr);
210
+ if (SKIP_VALIDATION_FUNCS.has(funcLower)) {
211
+ continue;
212
+ }
213
+ const snippet = truncateSnippet(line);
214
+ const pushRef = (kind, argIdx) => {
215
+ if (argIdx === undefined || argIdx >= args.length) {
216
+ return;
217
+ }
218
+ const argVal = args[argIdx];
219
+ let targetName = extractStringLiteral(argVal);
220
+ if (targetName === null) {
221
+ const binding = resolveExpression(argVal, callerEnv);
222
+ if (binding.kind !== "literal") {
223
+ // Surface (do not resolve) a process-call target that isn't a literal —
224
+ // it's still a real call edge, just one we can't name statically.
225
+ if (unresolvedOut &&
226
+ kind === "process" &&
227
+ PROCESS_CALL_FUNCS.has(funcLower)) {
228
+ unresolvedOut.push({
229
+ line: lineIdx,
230
+ funcName: m[1],
231
+ expr: argVal.trim(),
232
+ snippet,
233
+ reason: binding.kind === "param" ? "param" : "dynamic",
234
+ });
235
+ }
236
+ return;
237
+ }
238
+ targetName = binding.value;
239
+ }
240
+ const params = kind === "process" && PROCESS_CALL_FUNCS.has(funcLower)
241
+ ? extractCallParams(args, callerEnv)
242
+ : undefined;
243
+ refs.push({
244
+ line: lineIdx,
245
+ funcName: m[1],
246
+ targetKind: kind,
247
+ targetName,
248
+ snippet,
249
+ params,
250
+ });
251
+ };
252
+ pushRef("cube", CUBE_ARG_IDX.get(funcLower));
253
+ pushRef("dimension", DIM_ARG_IDX.get(funcLower));
254
+ pushRef("process", PROCESS_ARG_IDX.get(funcLower));
255
+ // Element refs need BOTH the element name and its owning dimension resolved
256
+ // together, so use a dedicated block instead of the single-arg pushRef.
257
+ if (SUBSET_ELEM_FUNCS.has(funcLower)) {
258
+ const elemIdx = ELEM_ARG_IDX.get(funcLower);
259
+ const dimIdx = DIM_ARG_IDX.get(funcLower);
260
+ if (elemIdx !== undefined && elemIdx < args.length) {
261
+ const elemArg = args[elemIdx];
262
+ // Resolve the owning dimension (literal or var); undefined if unresolvable.
263
+ let dimName;
264
+ if (dimIdx !== undefined && dimIdx < args.length) {
265
+ const dimArg = args[dimIdx];
266
+ dimName = extractStringLiteral(dimArg) ?? undefined;
267
+ if (dimName === undefined) {
268
+ const db = resolveExpression(dimArg, callerEnv);
269
+ if (db.kind === "literal") {
270
+ dimName = db.value;
271
+ }
272
+ }
273
+ }
274
+ // Resolve the subset the element was inserted into (literal or var);
275
+ // arg position varies per func (Insert@1, Add/Delete@0) — SUBSET_ARG_IDX handles that.
276
+ let subName;
277
+ const subIdx = SUBSET_ARG_IDX.get(funcLower);
278
+ if (subIdx !== undefined && subIdx < args.length) {
279
+ const subArg = args[subIdx];
280
+ subName = extractStringLiteral(subArg) ?? undefined;
281
+ if (subName === undefined) {
282
+ const sb = resolveExpression(subArg, callerEnv);
283
+ if (sb.kind === "literal") {
284
+ subName = sb.value;
285
+ }
286
+ }
287
+ }
288
+ let elemName = extractStringLiteral(elemArg);
289
+ if (elemName === null) {
290
+ const eb = resolveExpression(elemArg, callerEnv);
291
+ if (eb.kind === "literal") {
292
+ elemName = eb.value;
293
+ }
294
+ else {
295
+ if (unresolvedElemOut) {
296
+ unresolvedElemOut.push({
297
+ line: lineIdx,
298
+ funcName: m[1],
299
+ dimension: dimName,
300
+ expr: elemArg.trim(),
301
+ snippet,
302
+ reason: eb.kind === "param" ? "param" : "dynamic",
303
+ });
304
+ }
305
+ elemName = null;
306
+ }
307
+ }
308
+ if (elemName !== null) {
309
+ // Known edge: elemName resolved but dimName did NOT (e.g. dimension is an
310
+ // unresolved param). The ref is still pushed here (and surfaces in this
311
+ // process's per-row `elements` list via elementsForProcess), but with
312
+ // dimension:undefined it is skipped by the byElement bucketing below
313
+ // (elementKey needs both dim+element) and is NOT recorded in
314
+ // unresolvedElementRefsBySourceProcess either (that bucket is for
315
+ // unresolved ELEMENT args, not unresolved DIMENSION args). So this element
316
+ // is reverse-queryable by name via bySourceProcess but not via the
317
+ // element/dimension filter. A future "unresolved dimension" bucket could
318
+ // close this gap.
319
+ refs.push({
320
+ line: lineIdx,
321
+ funcName: m[1],
322
+ targetKind: "element",
323
+ targetName: elemName,
324
+ dimension: dimName,
325
+ subset: subName,
326
+ snippet,
327
+ params: undefined,
328
+ });
329
+ }
330
+ }
331
+ }
332
+ }
333
+ }
334
+ return refs;
335
+ }
336
+ const FEEDERS_MARKER_RE = /^\s*FEEDERS\s*;/i;
337
+ /**
338
+ * Extracts cube (from DB()) and dimension (from [...] refs) references
339
+ * from a rules/feeders text. Pure function.
340
+ */
341
+ export function extractRulesReferences(text) {
342
+ const refs = [];
343
+ const lines = text.split("\n");
344
+ let section = "rules";
345
+ for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
346
+ const line = lines[lineIdx].replace(/\r$/, "");
347
+ const trimmed = line.trim();
348
+ if (FEEDERS_MARKER_RE.test(trimmed)) {
349
+ section = "feeders";
350
+ continue;
351
+ }
352
+ if (trimmed === "" || trimmed.startsWith("#")) {
353
+ continue;
354
+ }
355
+ const snippet = truncateSnippet(line);
356
+ // DB(...) → cube reference
357
+ for (const call of extractDbCalls(line)) {
358
+ if (call.cubeName !== null) {
359
+ refs.push({
360
+ line: lineIdx,
361
+ section,
362
+ funcName: "DB",
363
+ targetKind: "cube",
364
+ targetName: call.cubeName,
365
+ snippet,
366
+ });
367
+ }
368
+ }
369
+ // [...] → dimension references (only valid syntactic refs)
370
+ for (const bracket of extractBracketRefs(line)) {
371
+ if (validateBracketRefSyntax(bracket) !== null) {
372
+ continue;
373
+ }
374
+ if (!bracket.includes("'")) {
375
+ continue;
376
+ }
377
+ for (const { dim } of parseBracketDimRefs(bracket)) {
378
+ refs.push({
379
+ line: lineIdx,
380
+ section,
381
+ targetKind: "dimension",
382
+ targetName: dim,
383
+ snippet,
384
+ });
385
+ }
386
+ }
387
+ }
388
+ return refs;
389
+ }
390
+ /**
391
+ * Builds a complete reference index from processes + cube rules.
392
+ * Pure function — dependencies are injected to allow testing without network.
393
+ */
394
+ export async function buildReferenceIndex(deps) {
395
+ // Per-source tolerance: a NOT_FOUND / PERMISSION_DENIED on one domain
396
+ // degrades to an empty slice. But a systemic failure (auth expired, server
397
+ // unreachable, lock timeout) must propagate — otherwise an outage builds an
398
+ // empty index that looks like an empty server and gets cached as truth.
399
+ const [processes, cubes, chores] = await Promise.all([
400
+ deps.fetchProcesses().catch((e) => {
401
+ rethrowIfSystemic(e);
402
+ return [];
403
+ }),
404
+ deps.fetchCubesWithRules().catch((e) => {
405
+ rethrowIfSystemic(e);
406
+ return [];
407
+ }),
408
+ deps.fetchChores?.().catch((e) => {
409
+ rethrowIfSystemic(e);
410
+ return [];
411
+ }) ?? Promise.resolve([]),
412
+ ]);
413
+ const all = [];
414
+ const unresolvedCallsBySourceProcess = new Map();
415
+ const unresolvedElementRefsBySourceProcess = new Map();
416
+ const subsetUsageByProcess = new Map();
417
+ const pushTi = (sourceName, section, text, env, sharedLiveVars) => {
418
+ if (!text) {
419
+ return;
420
+ }
421
+ const unresolvedOut = [];
422
+ const unresolvedElemOut = [];
423
+ for (const r of extractTiReferences(text, env, sharedLiveVars, unresolvedOut, unresolvedElemOut)) {
424
+ all.push({
425
+ sourceKind: "process",
426
+ sourceName,
427
+ section,
428
+ line: r.line,
429
+ snippet: r.snippet,
430
+ funcName: r.funcName,
431
+ targetKind: r.targetKind,
432
+ targetName: r.targetName,
433
+ dimension: r.dimension, // ← forward element owner
434
+ subset: r.subset, // ← forward subset the element was inserted into
435
+ params: r.params,
436
+ });
437
+ }
438
+ if (unresolvedOut.length > 0) {
439
+ const key = sourceName.toLowerCase();
440
+ const bucket = unresolvedCallsBySourceProcess.get(key) ?? [];
441
+ for (const u of unresolvedOut) {
442
+ bucket.push({
443
+ section,
444
+ line: u.line,
445
+ funcName: u.funcName,
446
+ expr: u.expr,
447
+ snippet: u.snippet,
448
+ reason: u.reason,
449
+ });
450
+ }
451
+ unresolvedCallsBySourceProcess.set(key, bucket);
452
+ }
453
+ if (unresolvedElemOut.length > 0) {
454
+ const key = sourceName.toLowerCase();
455
+ const arr = unresolvedElementRefsBySourceProcess.get(key) ?? [];
456
+ for (const u of unresolvedElemOut) {
457
+ arr.push({
458
+ section,
459
+ line: u.line,
460
+ funcName: u.funcName,
461
+ dimension: u.dimension,
462
+ expr: u.expr,
463
+ snippet: u.snippet,
464
+ reason: u.reason,
465
+ });
466
+ }
467
+ unresolvedElementRefsBySourceProcess.set(key, arr);
468
+ }
469
+ };
470
+ for (const p of processes) {
471
+ // Build env once from *all* sections concatenated so var assignments made in
472
+ // Prolog are visible to ExecuteProcess calls in Data/Epilog (mirrors TI runtime behavior).
473
+ const combinedText = [p.prolog, p.metadata, p.data, p.epilog].join("\n");
474
+ const env = buildProcessEnv(combinedText, p.parameters ?? []);
475
+ // Shared liveVars über alle 4 Sections — Prolog-Zuweisungen bleiben in Data/Epilog sichtbar
476
+ // und die flow-sensitive Auswertung funktioniert auch über Section-Grenzen hinweg.
477
+ const sharedLiveVars = new Map(env.vars);
478
+ pushTi(p.name, "prolog", p.prolog, env, sharedLiveVars);
479
+ pushTi(p.name, "metadata", p.metadata, env, sharedLiveVars);
480
+ pushTi(p.name, "data", p.data, env, sharedLiveVars);
481
+ pushTi(p.name, "epilog", p.epilog, env, sharedLiveVars);
482
+ subsetUsageByProcess.set(p.name.toLowerCase(), extractSubsetUsage(combinedText, env));
483
+ }
484
+ for (const c of cubes) {
485
+ if (!c.rulesText) {
486
+ continue;
487
+ }
488
+ for (const r of extractRulesReferences(c.rulesText)) {
489
+ all.push({
490
+ sourceKind: "rule",
491
+ sourceName: c.cubeName,
492
+ section: r.section,
493
+ line: r.line,
494
+ snippet: r.snippet,
495
+ funcName: r.funcName,
496
+ targetKind: r.targetKind,
497
+ targetName: r.targetName,
498
+ });
499
+ }
500
+ }
501
+ const byCube = new Map();
502
+ const byDim = new Map();
503
+ const byProcess = new Map();
504
+ const byElement = new Map();
505
+ const bySourceProcess = new Map();
506
+ const bucket = (m, key, ref) => {
507
+ const lc = key.toLowerCase();
508
+ const arr = m.get(lc) ?? [];
509
+ arr.push(ref);
510
+ m.set(lc, arr);
511
+ };
512
+ for (const ref of all) {
513
+ switch (ref.targetKind) {
514
+ case "cube":
515
+ bucket(byCube, ref.targetName, ref);
516
+ break;
517
+ case "dimension":
518
+ bucket(byDim, ref.targetName, ref);
519
+ break;
520
+ case "process":
521
+ bucket(byProcess, ref.targetName, ref);
522
+ break;
523
+ case "element":
524
+ if (ref.dimension) {
525
+ const k = elementKey(ref.dimension, ref.targetName);
526
+ const arr = byElement.get(k) ?? [];
527
+ arr.push(ref);
528
+ byElement.set(k, arr);
529
+ }
530
+ break;
531
+ }
532
+ if (ref.sourceKind === "process") {
533
+ bucket(bySourceProcess, ref.sourceName, ref);
534
+ }
535
+ }
536
+ const processParams = new Map();
537
+ const processDefaults = new Map();
538
+ for (const p of processes) {
539
+ if (p.parameters && p.parameters.length > 0) {
540
+ processParams.set(p.name.toLowerCase(), p.parameters);
541
+ }
542
+ if (p.parameterDefaults && p.parameterDefaults.size > 0) {
543
+ processDefaults.set(p.name.toLowerCase(), p.parameterDefaults);
544
+ }
545
+ }
546
+ const choreTasks = new Map();
547
+ for (const c of chores) {
548
+ if (!c.name) {
549
+ continue;
550
+ }
551
+ choreTasks.set(c.name.toLowerCase(), c.tasks);
552
+ }
553
+ return {
554
+ all,
555
+ byCube,
556
+ byDim,
557
+ byProcess,
558
+ byElement,
559
+ bySourceProcess,
560
+ unresolvedCallsBySourceProcess,
561
+ unresolvedElementRefsBySourceProcess,
562
+ subsetUsageByProcess,
563
+ processParams,
564
+ processDefaults,
565
+ choreTasks,
566
+ };
567
+ }
568
+ /** Convenience lookup — returns [] if target is not indexed. */
569
+ export function lookupReferences(idx, targetKind, targetName) {
570
+ const lc = targetName.toLowerCase();
571
+ switch (targetKind) {
572
+ case "cube":
573
+ return idx.byCube.get(lc) ?? [];
574
+ case "dimension":
575
+ return idx.byDim.get(lc) ?? [];
576
+ case "process":
577
+ return idx.byProcess.get(lc) ?? [];
578
+ // byElement is keyed by elementKey(dim, element), a composite key this single-name
579
+ // lookup can't build — callers needing element refs use idx.byElement directly.
580
+ case "element":
581
+ return [];
582
+ }
583
+ }
584
+ //# sourceMappingURL=referenceIndex.js.map
@@ -0,0 +1,55 @@
1
+ export interface RulesLintDiagnose {
2
+ line: number;
3
+ message: string;
4
+ severity: "error" | "warning" | "hint";
5
+ ruleId: string;
6
+ }
7
+ export type ApiRequestFn = (method: string, path: string) => Promise<{
8
+ statusCode: number;
9
+ body: string;
10
+ }>;
11
+ /**
12
+ * Extracts all [...] block contents from a line (from original, not neutralized).
13
+ * Uses neutralized positions to avoid false positives inside strings/comments.
14
+ */
15
+ export declare function extractBracketRefs(line: string): string[];
16
+ /**
17
+ * Validates the syntax of a [...] cell reference content (without outer brackets).
18
+ * Returns an error message or null if valid.
19
+ *
20
+ * Valid forms:
21
+ * 'DimName':'ElemName'
22
+ * 'DimName':{'E1','E2',...}
23
+ * Multiple of the above separated by commas
24
+ */
25
+ export declare function validateBracketRefSyntax(content: string): string | null;
26
+ /** Parsed dimension + element(s) from a single [...] spec. */
27
+ export interface BracketDimRef {
28
+ dim: string;
29
+ elems: string[];
30
+ }
31
+ /**
32
+ * Parses 'DimName':'ElemName' pairs from a bracket ref content.
33
+ * Only handles quoted string literals — dynamic refs are ignored.
34
+ */
35
+ export declare function parseBracketDimRefs(content: string): BracketDimRef[];
36
+ interface DbCall {
37
+ args: string[];
38
+ cubeName: string | null;
39
+ }
40
+ /**
41
+ * Extracts all DB(...) calls from a line with their parsed arguments.
42
+ * Uses neutralized positions to skip DB() inside strings/comments.
43
+ */
44
+ export declare function extractDbCalls(line: string): DbCall[];
45
+ export declare function lintRules(text: string): RulesLintDiagnose[];
46
+ /**
47
+ * Runs server-side lint checks against an active TM1 connection:
48
+ * - DB() argument count vs. actual cube dimension count
49
+ * - Element existence within the referenced dimension
50
+ *
51
+ * Silently returns [] if the server is unreachable or no relevant refs are found.
52
+ */
53
+ export declare function lintRulesServer(text: string, api: ApiRequestFn): Promise<RulesLintDiagnose[]>;
54
+ export {};
55
+ //# sourceMappingURL=rulesLinter.d.ts.map