tm1npm 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 (451) hide show
  1. package/.env.example +16 -0
  2. package/.eslintrc.js +28 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. package/.github/ISSUE_TEMPLATE/question.md +24 -0
  6. package/.github/workflows/publish-npm.yml +53 -0
  7. package/.github/workflows/test-on-tag.yml +172 -0
  8. package/DEVELOPMENT_GUIDE.md +587 -0
  9. package/LICENSE +21 -0
  10. package/README.md +580 -0
  11. package/jest.ci.config.js +83 -0
  12. package/jest.config.js +68 -0
  13. package/lib/exceptions/TM1Exception.d.ts +17 -0
  14. package/lib/exceptions/TM1Exception.d.ts.map +1 -0
  15. package/lib/exceptions/TM1Exception.js +36 -0
  16. package/lib/exceptions/TM1RestException.d.ts +10 -0
  17. package/lib/exceptions/TM1RestException.d.ts.map +1 -0
  18. package/lib/exceptions/TM1RestException.js +17 -0
  19. package/lib/exceptions/TM1TimeoutException.d.ts +9 -0
  20. package/lib/exceptions/TM1TimeoutException.d.ts.map +1 -0
  21. package/lib/exceptions/TM1TimeoutException.js +16 -0
  22. package/lib/index.d.ts +41 -0
  23. package/lib/index.d.ts.map +1 -0
  24. package/lib/index.js +132 -0
  25. package/lib/objects/Annotation.d.ts +36 -0
  26. package/lib/objects/Annotation.d.ts.map +1 -0
  27. package/lib/objects/Annotation.js +134 -0
  28. package/lib/objects/Application.d.ts +67 -0
  29. package/lib/objects/Application.d.ts.map +1 -0
  30. package/lib/objects/Application.js +125 -0
  31. package/lib/objects/Axis.d.ts +36 -0
  32. package/lib/objects/Axis.d.ts.map +1 -0
  33. package/lib/objects/Axis.js +103 -0
  34. package/lib/objects/Chore.d.ts +43 -0
  35. package/lib/objects/Chore.d.ts.map +1 -0
  36. package/lib/objects/Chore.js +129 -0
  37. package/lib/objects/ChoreFrequency.d.ts +23 -0
  38. package/lib/objects/ChoreFrequency.d.ts.map +1 -0
  39. package/lib/objects/ChoreFrequency.js +61 -0
  40. package/lib/objects/ChoreStartTime.d.ts +15 -0
  41. package/lib/objects/ChoreStartTime.d.ts.map +1 -0
  42. package/lib/objects/ChoreStartTime.js +85 -0
  43. package/lib/objects/ChoreTask.d.ts +28 -0
  44. package/lib/objects/ChoreTask.d.ts.map +1 -0
  45. package/lib/objects/ChoreTask.js +66 -0
  46. package/lib/objects/Cube.d.ts +26 -0
  47. package/lib/objects/Cube.d.ts.map +1 -0
  48. package/lib/objects/Cube.js +109 -0
  49. package/lib/objects/Dimension.d.ts +26 -0
  50. package/lib/objects/Dimension.d.ts.map +1 -0
  51. package/lib/objects/Dimension.js +86 -0
  52. package/lib/objects/Element.d.ts +35 -0
  53. package/lib/objects/Element.d.ts.map +1 -0
  54. package/lib/objects/Element.js +115 -0
  55. package/lib/objects/ElementAttribute.d.ts +28 -0
  56. package/lib/objects/ElementAttribute.d.ts.map +1 -0
  57. package/lib/objects/ElementAttribute.js +97 -0
  58. package/lib/objects/Git.d.ts +21 -0
  59. package/lib/objects/Git.d.ts.map +1 -0
  60. package/lib/objects/Git.js +49 -0
  61. package/lib/objects/GitCommit.d.ts +12 -0
  62. package/lib/objects/GitCommit.d.ts.map +1 -0
  63. package/lib/objects/GitCommit.js +26 -0
  64. package/lib/objects/GitPlan.d.ts +35 -0
  65. package/lib/objects/GitPlan.d.ts.map +1 -0
  66. package/lib/objects/GitPlan.js +78 -0
  67. package/lib/objects/GitRemote.d.ts +12 -0
  68. package/lib/objects/GitRemote.d.ts.map +1 -0
  69. package/lib/objects/GitRemote.js +26 -0
  70. package/lib/objects/Hierarchy.d.ts +47 -0
  71. package/lib/objects/Hierarchy.d.ts.map +1 -0
  72. package/lib/objects/Hierarchy.js +165 -0
  73. package/lib/objects/MDXView.d.ts +19 -0
  74. package/lib/objects/MDXView.d.ts.map +1 -0
  75. package/lib/objects/MDXView.js +67 -0
  76. package/lib/objects/NativeView.d.ts +39 -0
  77. package/lib/objects/NativeView.d.ts.map +1 -0
  78. package/lib/objects/NativeView.js +209 -0
  79. package/lib/objects/Process.d.ts +70 -0
  80. package/lib/objects/Process.d.ts.map +1 -0
  81. package/lib/objects/Process.js +210 -0
  82. package/lib/objects/ProcessDebugBreakpoint.d.ts +60 -0
  83. package/lib/objects/ProcessDebugBreakpoint.d.ts.map +1 -0
  84. package/lib/objects/ProcessDebugBreakpoint.js +168 -0
  85. package/lib/objects/ProcessParameter.d.ts +23 -0
  86. package/lib/objects/ProcessParameter.d.ts.map +1 -0
  87. package/lib/objects/ProcessParameter.js +55 -0
  88. package/lib/objects/ProcessVariable.d.ts +26 -0
  89. package/lib/objects/ProcessVariable.d.ts.map +1 -0
  90. package/lib/objects/ProcessVariable.js +63 -0
  91. package/lib/objects/Rules.d.ts +30 -0
  92. package/lib/objects/Rules.d.ts.map +1 -0
  93. package/lib/objects/Rules.js +103 -0
  94. package/lib/objects/Sandbox.d.ts +21 -0
  95. package/lib/objects/Sandbox.d.ts.map +1 -0
  96. package/lib/objects/Sandbox.js +64 -0
  97. package/lib/objects/Server.d.ts +27 -0
  98. package/lib/objects/Server.d.ts.map +1 -0
  99. package/lib/objects/Server.js +26 -0
  100. package/lib/objects/Subset.d.ts +44 -0
  101. package/lib/objects/Subset.d.ts.map +1 -0
  102. package/lib/objects/Subset.js +222 -0
  103. package/lib/objects/TM1Object.d.ts +8 -0
  104. package/lib/objects/TM1Object.d.ts.map +1 -0
  105. package/lib/objects/TM1Object.js +17 -0
  106. package/lib/objects/TM1Project.d.ts +74 -0
  107. package/lib/objects/TM1Project.d.ts.map +1 -0
  108. package/lib/objects/TM1Project.js +409 -0
  109. package/lib/objects/User.d.ts +42 -0
  110. package/lib/objects/User.d.ts.map +1 -0
  111. package/lib/objects/User.js +157 -0
  112. package/lib/objects/View.d.ts +19 -0
  113. package/lib/objects/View.d.ts.map +1 -0
  114. package/lib/objects/View.js +33 -0
  115. package/lib/objects/index.d.ts +30 -0
  116. package/lib/objects/index.d.ts.map +1 -0
  117. package/lib/objects/index.js +68 -0
  118. package/lib/services/AnnotationService.d.ts +17 -0
  119. package/lib/services/AnnotationService.d.ts.map +1 -0
  120. package/lib/services/AnnotationService.js +91 -0
  121. package/lib/services/ApplicationService.d.ts +21 -0
  122. package/lib/services/ApplicationService.d.ts.map +1 -0
  123. package/lib/services/ApplicationService.js +227 -0
  124. package/lib/services/AuditLogService.d.ts +15 -0
  125. package/lib/services/AuditLogService.d.ts.map +1 -0
  126. package/lib/services/AuditLogService.js +153 -0
  127. package/lib/services/CellService.d.ts +191 -0
  128. package/lib/services/CellService.d.ts.map +1 -0
  129. package/lib/services/CellService.js +597 -0
  130. package/lib/services/ChoreService.d.ts +24 -0
  131. package/lib/services/ChoreService.d.ts.map +1 -0
  132. package/lib/services/ChoreService.js +219 -0
  133. package/lib/services/ConfigurationService.d.ts +18 -0
  134. package/lib/services/ConfigurationService.d.ts.map +1 -0
  135. package/lib/services/ConfigurationService.js +60 -0
  136. package/lib/services/CubeService.d.ts +43 -0
  137. package/lib/services/CubeService.d.ts.map +1 -0
  138. package/lib/services/CubeService.js +296 -0
  139. package/lib/services/DimensionService.d.ts +21 -0
  140. package/lib/services/DimensionService.d.ts.map +1 -0
  141. package/lib/services/DimensionService.js +146 -0
  142. package/lib/services/ElementService.d.ts +132 -0
  143. package/lib/services/ElementService.d.ts.map +1 -0
  144. package/lib/services/ElementService.js +579 -0
  145. package/lib/services/FileService.d.ts +14 -0
  146. package/lib/services/FileService.d.ts.map +1 -0
  147. package/lib/services/FileService.js +65 -0
  148. package/lib/services/GitService.d.ts +23 -0
  149. package/lib/services/GitService.d.ts.map +1 -0
  150. package/lib/services/GitService.js +225 -0
  151. package/lib/services/HierarchyService.d.ts +32 -0
  152. package/lib/services/HierarchyService.d.ts.map +1 -0
  153. package/lib/services/HierarchyService.js +235 -0
  154. package/lib/services/JobService.d.ts +13 -0
  155. package/lib/services/JobService.d.ts.map +1 -0
  156. package/lib/services/JobService.js +83 -0
  157. package/lib/services/LoggerService.d.ts +16 -0
  158. package/lib/services/LoggerService.d.ts.map +1 -0
  159. package/lib/services/LoggerService.js +101 -0
  160. package/lib/services/ManageService.d.ts +47 -0
  161. package/lib/services/ManageService.d.ts.map +1 -0
  162. package/lib/services/ManageService.js +221 -0
  163. package/lib/services/MessageLogService.d.ts +13 -0
  164. package/lib/services/MessageLogService.d.ts.map +1 -0
  165. package/lib/services/MessageLogService.js +175 -0
  166. package/lib/services/MonitoringService.d.ts +29 -0
  167. package/lib/services/MonitoringService.d.ts.map +1 -0
  168. package/lib/services/MonitoringService.js +86 -0
  169. package/lib/services/ObjectService.d.ts +8 -0
  170. package/lib/services/ObjectService.d.ts.map +1 -0
  171. package/lib/services/ObjectService.js +20 -0
  172. package/lib/services/PowerBiService.d.ts +13 -0
  173. package/lib/services/PowerBiService.d.ts.map +1 -0
  174. package/lib/services/PowerBiService.js +52 -0
  175. package/lib/services/ProcessService.d.ts +57 -0
  176. package/lib/services/ProcessService.d.ts.map +1 -0
  177. package/lib/services/ProcessService.js +499 -0
  178. package/lib/services/RestService.d.ts +68 -0
  179. package/lib/services/RestService.d.ts.map +1 -0
  180. package/lib/services/RestService.js +166 -0
  181. package/lib/services/SandboxService.d.ts +28 -0
  182. package/lib/services/SandboxService.d.ts.map +1 -0
  183. package/lib/services/SandboxService.js +197 -0
  184. package/lib/services/SecurityService.d.ts +33 -0
  185. package/lib/services/SecurityService.d.ts.map +1 -0
  186. package/lib/services/SecurityService.js +249 -0
  187. package/lib/services/ServerService.d.ts +55 -0
  188. package/lib/services/ServerService.d.ts.map +1 -0
  189. package/lib/services/ServerService.js +247 -0
  190. package/lib/services/SessionService.d.ts +15 -0
  191. package/lib/services/SessionService.d.ts.map +1 -0
  192. package/lib/services/SessionService.js +68 -0
  193. package/lib/services/SubsetService.d.ts +13 -0
  194. package/lib/services/SubsetService.d.ts.map +1 -0
  195. package/lib/services/SubsetService.js +46 -0
  196. package/lib/services/TM1Service.d.ts +39 -0
  197. package/lib/services/TM1Service.d.ts.map +1 -0
  198. package/lib/services/TM1Service.js +94 -0
  199. package/lib/services/ThreadService.d.ts +15 -0
  200. package/lib/services/ThreadService.d.ts.map +1 -0
  201. package/lib/services/ThreadService.js +104 -0
  202. package/lib/services/TransactionLogService.d.ts +11 -0
  203. package/lib/services/TransactionLogService.d.ts.map +1 -0
  204. package/lib/services/TransactionLogService.js +124 -0
  205. package/lib/services/UserService.d.ts +14 -0
  206. package/lib/services/UserService.d.ts.map +1 -0
  207. package/lib/services/UserService.js +103 -0
  208. package/lib/services/ViewService.d.ts +30 -0
  209. package/lib/services/ViewService.d.ts.map +1 -0
  210. package/lib/services/ViewService.js +331 -0
  211. package/lib/services/index.d.ts +26 -0
  212. package/lib/services/index.d.ts.map +1 -0
  213. package/lib/services/index.js +56 -0
  214. package/lib/tests/100PercentParityCheck.test.d.ts +6 -0
  215. package/lib/tests/100PercentParityCheck.test.d.ts.map +1 -0
  216. package/lib/tests/100PercentParityCheck.test.js +143 -0
  217. package/lib/tests/basic.test.d.ts +6 -0
  218. package/lib/tests/basic.test.d.ts.map +1 -0
  219. package/lib/tests/basic.test.js +52 -0
  220. package/lib/tests/cellService.test.d.ts +6 -0
  221. package/lib/tests/cellService.test.d.ts.map +1 -0
  222. package/lib/tests/cellService.test.js +311 -0
  223. package/lib/tests/ciSetup.d.ts +6 -0
  224. package/lib/tests/ciSetup.d.ts.map +1 -0
  225. package/lib/tests/ciSetup.js +23 -0
  226. package/lib/tests/comprehensive.service.test.d.ts +6 -0
  227. package/lib/tests/comprehensive.service.test.d.ts.map +1 -0
  228. package/lib/tests/comprehensive.service.test.js +507 -0
  229. package/lib/tests/connection.test.d.ts +6 -0
  230. package/lib/tests/connection.test.d.ts.map +1 -0
  231. package/lib/tests/connection.test.js +89 -0
  232. package/lib/tests/cubeService.test.d.ts +6 -0
  233. package/lib/tests/cubeService.test.d.ts.map +1 -0
  234. package/lib/tests/cubeService.test.js +368 -0
  235. package/lib/tests/dimensionService.comprehensive.test.d.ts +7 -0
  236. package/lib/tests/dimensionService.comprehensive.test.d.ts.map +1 -0
  237. package/lib/tests/dimensionService.comprehensive.test.js +614 -0
  238. package/lib/tests/dimensionService.test.d.ts +6 -0
  239. package/lib/tests/dimensionService.test.d.ts.map +1 -0
  240. package/lib/tests/dimensionService.test.js +293 -0
  241. package/lib/tests/edgeCases.test.d.ts +6 -0
  242. package/lib/tests/edgeCases.test.d.ts.map +1 -0
  243. package/lib/tests/edgeCases.test.js +301 -0
  244. package/lib/tests/elementService.comprehensive.test.d.ts +7 -0
  245. package/lib/tests/elementService.comprehensive.test.d.ts.map +1 -0
  246. package/lib/tests/elementService.comprehensive.test.js +846 -0
  247. package/lib/tests/elementService.test.d.ts +6 -0
  248. package/lib/tests/elementService.test.d.ts.map +1 -0
  249. package/lib/tests/elementService.test.js +350 -0
  250. package/lib/tests/enhancedCellService.test.d.ts +2 -0
  251. package/lib/tests/enhancedCellService.test.d.ts.map +1 -0
  252. package/lib/tests/enhancedCellService.test.js +152 -0
  253. package/lib/tests/enhancedCubeService.test.d.ts +2 -0
  254. package/lib/tests/enhancedCubeService.test.d.ts.map +1 -0
  255. package/lib/tests/enhancedCubeService.test.js +246 -0
  256. package/lib/tests/enhancedElementService.test.d.ts +2 -0
  257. package/lib/tests/enhancedElementService.test.d.ts.map +1 -0
  258. package/lib/tests/enhancedElementService.test.js +199 -0
  259. package/lib/tests/enhancedViewService.test.d.ts +2 -0
  260. package/lib/tests/enhancedViewService.test.d.ts.map +1 -0
  261. package/lib/tests/enhancedViewService.test.js +260 -0
  262. package/lib/tests/errorHandling.test.d.ts +6 -0
  263. package/lib/tests/errorHandling.test.d.ts.map +1 -0
  264. package/lib/tests/errorHandling.test.js +227 -0
  265. package/lib/tests/exceptions.test.d.ts +7 -0
  266. package/lib/tests/exceptions.test.d.ts.map +1 -0
  267. package/lib/tests/exceptions.test.js +257 -0
  268. package/lib/tests/hierarchyService.test.d.ts +6 -0
  269. package/lib/tests/hierarchyService.test.d.ts.map +1 -0
  270. package/lib/tests/hierarchyService.test.js +294 -0
  271. package/lib/tests/index.test.d.ts +6 -0
  272. package/lib/tests/index.test.d.ts.map +1 -0
  273. package/lib/tests/index.test.js +346 -0
  274. package/lib/tests/integration.test.d.ts +6 -0
  275. package/lib/tests/integration.test.d.ts.map +1 -0
  276. package/lib/tests/integration.test.js +302 -0
  277. package/lib/tests/integrationTests.test.d.ts +2 -0
  278. package/lib/tests/integrationTests.test.d.ts.map +1 -0
  279. package/lib/tests/integrationTests.test.js +252 -0
  280. package/lib/tests/mdx.advanced.test.d.ts +6 -0
  281. package/lib/tests/mdx.advanced.test.d.ts.map +1 -0
  282. package/lib/tests/mdx.advanced.test.js +437 -0
  283. package/lib/tests/objects.improved.test.d.ts +7 -0
  284. package/lib/tests/objects.improved.test.d.ts.map +1 -0
  285. package/lib/tests/objects.improved.test.js +302 -0
  286. package/lib/tests/performance.test.d.ts +6 -0
  287. package/lib/tests/performance.test.d.ts.map +1 -0
  288. package/lib/tests/performance.test.js +264 -0
  289. package/lib/tests/processService.comprehensive.test.d.ts +7 -0
  290. package/lib/tests/processService.comprehensive.test.d.ts.map +1 -0
  291. package/lib/tests/processService.comprehensive.test.js +656 -0
  292. package/lib/tests/processService.test.d.ts +6 -0
  293. package/lib/tests/processService.test.d.ts.map +1 -0
  294. package/lib/tests/processService.test.js +322 -0
  295. package/lib/tests/restService.test.d.ts +6 -0
  296. package/lib/tests/restService.test.d.ts.map +1 -0
  297. package/lib/tests/restService.test.js +177 -0
  298. package/lib/tests/security.advanced.test.d.ts +6 -0
  299. package/lib/tests/security.advanced.test.d.ts.map +1 -0
  300. package/lib/tests/security.advanced.test.js +407 -0
  301. package/lib/tests/security.test.d.ts +6 -0
  302. package/lib/tests/security.test.d.ts.map +1 -0
  303. package/lib/tests/security.test.js +204 -0
  304. package/lib/tests/securityService.comprehensive.test.d.ts +7 -0
  305. package/lib/tests/securityService.comprehensive.test.d.ts.map +1 -0
  306. package/lib/tests/securityService.comprehensive.test.js +457 -0
  307. package/lib/tests/setup.d.ts +4 -0
  308. package/lib/tests/setup.d.ts.map +1 -0
  309. package/lib/tests/setup.js +40 -0
  310. package/lib/tests/simpleCoverage.test.d.ts +6 -0
  311. package/lib/tests/simpleCoverage.test.d.ts.map +1 -0
  312. package/lib/tests/simpleCoverage.test.js +236 -0
  313. package/lib/tests/stress.performance.test.d.ts +6 -0
  314. package/lib/tests/stress.performance.test.d.ts.map +1 -0
  315. package/lib/tests/stress.performance.test.js +423 -0
  316. package/lib/tests/subsetService.test.d.ts +6 -0
  317. package/lib/tests/subsetService.test.d.ts.map +1 -0
  318. package/lib/tests/subsetService.test.js +271 -0
  319. package/lib/tests/testConfig.d.ts +18 -0
  320. package/lib/tests/testConfig.d.ts.map +1 -0
  321. package/lib/tests/testConfig.js +38 -0
  322. package/lib/tests/testUtils.d.ts +9 -0
  323. package/lib/tests/testUtils.d.ts.map +1 -0
  324. package/lib/tests/testUtils.js +100 -0
  325. package/lib/tests/tm1Service.test.d.ts +7 -0
  326. package/lib/tests/tm1Service.test.d.ts.map +1 -0
  327. package/lib/tests/tm1Service.test.js +290 -0
  328. package/lib/tests/viewService.test.d.ts +6 -0
  329. package/lib/tests/viewService.test.d.ts.map +1 -0
  330. package/lib/tests/viewService.test.js +240 -0
  331. package/lib/utils/Utils.d.ts +90 -0
  332. package/lib/utils/Utils.d.ts.map +1 -0
  333. package/lib/utils/Utils.js +379 -0
  334. package/package.json +81 -0
  335. package/run-all-tests.js +296 -0
  336. package/src/exceptions/TM1Exception.ts +38 -0
  337. package/src/exceptions/TM1RestException.ts +17 -0
  338. package/src/exceptions/TM1TimeoutException.ts +15 -0
  339. package/src/index.ts +94 -0
  340. package/src/objects/Annotation.ts +194 -0
  341. package/src/objects/Application.ts +146 -0
  342. package/src/objects/Axis.ts +149 -0
  343. package/src/objects/Chore.ts +174 -0
  344. package/src/objects/ChoreFrequency.ts +83 -0
  345. package/src/objects/ChoreStartTime.ts +111 -0
  346. package/src/objects/ChoreTask.ts +92 -0
  347. package/src/objects/Cube.ts +125 -0
  348. package/src/objects/Dimension.ts +107 -0
  349. package/src/objects/Element.ts +153 -0
  350. package/src/objects/ElementAttribute.ts +115 -0
  351. package/src/objects/Git.ts +86 -0
  352. package/src/objects/GitCommit.ts +31 -0
  353. package/src/objects/GitPlan.ts +121 -0
  354. package/src/objects/GitRemote.ts +31 -0
  355. package/src/objects/Hierarchy.ts +229 -0
  356. package/src/objects/MDXView.ts +91 -0
  357. package/src/objects/NativeView.ts +268 -0
  358. package/src/objects/Process.ts +320 -0
  359. package/src/objects/ProcessDebugBreakpoint.ts +239 -0
  360. package/src/objects/ProcessParameter.ts +76 -0
  361. package/src/objects/ProcessVariable.ts +89 -0
  362. package/src/objects/Rules.ts +117 -0
  363. package/src/objects/Sandbox.ts +90 -0
  364. package/src/objects/Server.ts +45 -0
  365. package/src/objects/Subset.ts +323 -0
  366. package/src/objects/TM1Object.ts +17 -0
  367. package/src/objects/TM1Project.ts +587 -0
  368. package/src/objects/User.ts +198 -0
  369. package/src/objects/View.ts +43 -0
  370. package/src/objects/index.ts +36 -0
  371. package/src/services/AnnotationService.ts +107 -0
  372. package/src/services/ApplicationService.ts +279 -0
  373. package/src/services/AuditLogService.ts +172 -0
  374. package/src/services/CellService.ts +814 -0
  375. package/src/services/ChoreService.ts +219 -0
  376. package/src/services/ConfigurationService.ts +69 -0
  377. package/src/services/CubeService.ts +338 -0
  378. package/src/services/DimensionService.ts +168 -0
  379. package/src/services/ElementService.ts +966 -0
  380. package/src/services/FileService.ts +67 -0
  381. package/src/services/GitService.ts +324 -0
  382. package/src/services/HierarchyService.ts +284 -0
  383. package/src/services/JobService.ts +59 -0
  384. package/src/services/LoggerService.ts +118 -0
  385. package/src/services/ManageService.ts +322 -0
  386. package/src/services/MessageLogService.ts +211 -0
  387. package/src/services/MonitoringService.ts +105 -0
  388. package/src/services/ObjectService.ts +21 -0
  389. package/src/services/PowerBiService.ts +85 -0
  390. package/src/services/ProcessService.ts +589 -0
  391. package/src/services/RestService.ts +224 -0
  392. package/src/services/SandboxService.ts +217 -0
  393. package/src/services/SecurityService.ts +284 -0
  394. package/src/services/ServerService.ts +313 -0
  395. package/src/services/SessionService.ts +81 -0
  396. package/src/services/SubsetService.ts +52 -0
  397. package/src/services/TM1Service.ts +133 -0
  398. package/src/services/ThreadService.ts +83 -0
  399. package/src/services/TransactionLogService.ts +148 -0
  400. package/src/services/UserService.ts +77 -0
  401. package/src/services/ViewService.ts +398 -0
  402. package/src/services/index.ts +28 -0
  403. package/src/tests/100PercentParityCheck.test.ts +166 -0
  404. package/src/tests/basic.test.ts +59 -0
  405. package/src/tests/cellService.test.ts +405 -0
  406. package/src/tests/ciSetup.ts +26 -0
  407. package/src/tests/comprehensive.service.test.ts +653 -0
  408. package/src/tests/config.ini.template +23 -0
  409. package/src/tests/connection.test.ts +90 -0
  410. package/src/tests/cubeService.test.ts +458 -0
  411. package/src/tests/dimensionService.comprehensive.test.ts +786 -0
  412. package/src/tests/dimensionService.test.ts +373 -0
  413. package/src/tests/edgeCases.test.ts +358 -0
  414. package/src/tests/elementService.comprehensive.test.ts +1190 -0
  415. package/src/tests/elementService.test.ts +472 -0
  416. package/src/tests/enhancedCellService.test.ts +237 -0
  417. package/src/tests/enhancedCubeService.test.ts +384 -0
  418. package/src/tests/enhancedElementService.test.ts +301 -0
  419. package/src/tests/enhancedViewService.test.ts +373 -0
  420. package/src/tests/errorHandling.test.ts +264 -0
  421. package/src/tests/exceptions.test.ts +313 -0
  422. package/src/tests/hierarchyService.test.ts +386 -0
  423. package/src/tests/index.test.ts +376 -0
  424. package/src/tests/integration.test.ts +333 -0
  425. package/src/tests/integrationTests.test.ts +302 -0
  426. package/src/tests/mdx.advanced.test.ts +513 -0
  427. package/src/tests/objects.improved.test.ts +385 -0
  428. package/src/tests/performance.test.ts +314 -0
  429. package/src/tests/processService.comprehensive.test.ts +933 -0
  430. package/src/tests/processService.test.ts +409 -0
  431. package/src/tests/restService.test.ts +218 -0
  432. package/src/tests/security.advanced.test.ts +464 -0
  433. package/src/tests/security.test.ts +233 -0
  434. package/src/tests/securityService.comprehensive.test.ts +582 -0
  435. package/src/tests/setup.ts +42 -0
  436. package/src/tests/simpleCoverage.test.ts +287 -0
  437. package/src/tests/stress.performance.test.ts +531 -0
  438. package/src/tests/subsetService.test.ts +350 -0
  439. package/src/tests/testConfig.ts +53 -0
  440. package/src/tests/testUtils.ts +94 -0
  441. package/src/tests/tm1Service.test.ts +361 -0
  442. package/src/tests/viewService.test.ts +324 -0
  443. package/src/utils/Utils.ts +395 -0
  444. package/tests/README.md +57 -0
  445. package/tests/connection/test-connection.ts +86 -0
  446. package/tests/edge-cases/edge-cases-test.ts +244 -0
  447. package/tests/integration/working-test.ts +193 -0
  448. package/tests/performance/performance-test.ts +133 -0
  449. package/tests/run-all-tests.sh +106 -0
  450. package/tests/security/security-test.ts +103 -0
  451. package/tsconfig.json +20 -0
@@ -0,0 +1,589 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { AxiosResponse } from 'axios';
3
+ import { RestService } from './RestService';
4
+ import { ObjectService } from './ObjectService';
5
+ import { Process } from '../objects/Process';
6
+ import { ProcessDebugBreakpoint } from '../objects/ProcessDebugBreakpoint';
7
+ import { TM1RestException, TM1Exception } from '../exceptions/TM1Exception';
8
+ import { formatUrl, requireDataAdmin, requireVersion, deprecatedInVersion } from '../utils/Utils';
9
+
10
+ export class ProcessService extends ObjectService {
11
+ /** Service to handle Object Updates for TI Processes
12
+ *
13
+ */
14
+
15
+ constructor(rest: RestService) {
16
+ super(rest);
17
+ }
18
+
19
+ public async get(nameProcess: string): Promise<Process> {
20
+ /** Get a process from TM1 Server
21
+ *
22
+ * :param name_process:
23
+ * :return: Instance of the .Process
24
+ */
25
+ const url = formatUrl(
26
+ "/Processes('{}')?$select=*,UIData,VariablesUIData," +
27
+ "DataSource/dataSourceNameForServer," +
28
+ "DataSource/dataSourceNameForClient," +
29
+ "DataSource/asciiDecimalSeparator," +
30
+ "DataSource/asciiDelimiterChar," +
31
+ "DataSource/asciiDelimiterType," +
32
+ "DataSource/asciiHeaderRecords," +
33
+ "DataSource/asciiQuoteCharacter," +
34
+ "DataSource/asciiThousandSeparator," +
35
+ "DataSource/view," +
36
+ "DataSource/query," +
37
+ "DataSource/userName," +
38
+ "DataSource/password," +
39
+ "DataSource/usesUnicode," +
40
+ "DataSource/subset," +
41
+ "DataSource/jsonRootPointer," +
42
+ "DataSource/jsonVariableMapping", nameProcess);
43
+
44
+ const response = await this.rest.get(url);
45
+ return Process.fromDict(response.data);
46
+ }
47
+
48
+ public async getAll(skipControlProcesses: boolean = false): Promise<Process[]> {
49
+ /** Get all processes from TM1 Server
50
+ *
51
+ * :param skip_control_processes: bool, True to exclude processes that begin with "}" or "{"
52
+ * :return: List, instances of the .Process
53
+ */
54
+ const modelProcessFilter = "&$filter=startswith(Name,'}') eq false and startswith(Name,'{') eq false";
55
+
56
+ const url = "/Processes?$select=*,UIData,VariablesUIData," +
57
+ "DataSource/dataSourceNameForServer," +
58
+ "DataSource/dataSourceNameForClient," +
59
+ "DataSource/asciiDecimalSeparator," +
60
+ "DataSource/asciiDelimiterChar," +
61
+ "DataSource/asciiDelimiterType," +
62
+ "DataSource/asciiHeaderRecords," +
63
+ "DataSource/asciiQuoteCharacter," +
64
+ "DataSource/asciiThousandSeparator," +
65
+ "DataSource/view," +
66
+ "DataSource/query," +
67
+ "DataSource/userName," +
68
+ "DataSource/password," +
69
+ "DataSource/usesUnicode," +
70
+ "DataSource/subset," +
71
+ "DataSource/jsonRootPointer," +
72
+ "DataSource/jsonVariableMapping" + (skipControlProcesses ? modelProcessFilter : "");
73
+
74
+ const response = await this.rest.get(url);
75
+ const responseAsDict = response.data;
76
+ return responseAsDict.value.map((p: any) => Process.fromDict(p));
77
+ }
78
+
79
+ public async getAllNames(skipControlProcesses: boolean = false): Promise<string[]> {
80
+ /** Get List with all process names from TM1 Server
81
+ *
82
+ * :param skip_control_processes: bool, True to exclude processes that begin with "}" or "{"
83
+ * :Returns:
84
+ * List of Strings
85
+ */
86
+ const modelProcessFilter = "&$filter=startswith(Name,'}') eq false and startswith(Name,'{') eq false";
87
+ const url = "/Processes?$select=Name" + (skipControlProcesses ? modelProcessFilter : "");
88
+
89
+ const response = await this.rest.get(url);
90
+ const processes = response.data.value.map((process: any) => process.Name);
91
+ return processes;
92
+ }
93
+
94
+ public async searchStringInCode(searchString: string, skipControlProcesses: boolean = false): Promise<string[]> {
95
+ /** Search for a string in all process code
96
+ *
97
+ * :param search_string: string to search for
98
+ * :param skip_control_processes: bool, True to exclude processes that begin with "}" or "{"
99
+ * :return: List of process names that contain the search string
100
+ */
101
+ const allProcesses = await this.getAll(skipControlProcesses);
102
+ const matchingProcesses: string[] = [];
103
+
104
+ for (const process of allProcesses) {
105
+ if (this.processContainsString(process, searchString)) {
106
+ matchingProcesses.push(process.name);
107
+ }
108
+ }
109
+
110
+ return matchingProcesses;
111
+ }
112
+
113
+ private processContainsString(process: Process, searchString: string): boolean {
114
+ /** Check if a process contains a specific string in its code
115
+ */
116
+ const codeProperties = [
117
+ 'prologProcedure',
118
+ 'metadataProcedure',
119
+ 'dataProcedure',
120
+ 'epilogProcedure'
121
+ ];
122
+
123
+ for (const property of codeProperties) {
124
+ const code = (process as any)[property];
125
+ if (code && code.toLowerCase().includes(searchString.toLowerCase())) {
126
+ return true;
127
+ }
128
+ }
129
+
130
+ return false;
131
+ }
132
+
133
+ public async create(process: Process): Promise<AxiosResponse> {
134
+ /** Create a process on TM1 Server
135
+ *
136
+ * :param process: Instance of .Process class
137
+ * :return: response
138
+ */
139
+ const url = "/Processes";
140
+ return await this.rest.post(url, process.body);
141
+ }
142
+
143
+ public async update(process: Process): Promise<AxiosResponse> {
144
+ /** Update an existing process on TM1 Server
145
+ *
146
+ * :param process: Instance of .Process class
147
+ * :return: response
148
+ */
149
+ const url = formatUrl("/Processes('{}')", process.name);
150
+ return await this.rest.patch(url, process.body);
151
+ }
152
+
153
+ public async delete(processName: string): Promise<AxiosResponse> {
154
+ /** Delete a process from TM1 Server
155
+ *
156
+ * :param process_name: name of the process
157
+ * :return: response
158
+ */
159
+ const url = formatUrl("/Processes('{}')", processName);
160
+ return await this.rest.delete(url);
161
+ }
162
+
163
+ public async exists(processName: string): Promise<boolean> {
164
+ /** Check if process exists on TM1 Server
165
+ *
166
+ * :param process_name: name of the process
167
+ * :return: boolean
168
+ */
169
+ try {
170
+ await this.get(processName);
171
+ return true;
172
+ } catch (error) {
173
+ if (error instanceof TM1RestException && error.statusCode === 404) {
174
+ return false;
175
+ }
176
+ throw error;
177
+ }
178
+ }
179
+
180
+ public async execute(processName: string, parameters?: Record<string, any>): Promise<any> {
181
+ /** Execute a process on TM1 Server
182
+ *
183
+ * :param process_name: name of the process
184
+ * :param parameters: dictionary of parameters
185
+ * :return: response
186
+ */
187
+ const url = formatUrl("/Processes('{}')/tm1.Execute", processName);
188
+
189
+ const body: any = {};
190
+ if (parameters && Object.keys(parameters).length > 0) {
191
+ body.Parameters = Object.entries(parameters).map(([name, value]) => ({
192
+ Name: name,
193
+ Value: value
194
+ }));
195
+ }
196
+
197
+ return await this.rest.post(url, JSON.stringify(body));
198
+ }
199
+
200
+ public async executeWithReturn(
201
+ processName: string,
202
+ parameters?: Record<string, any>,
203
+ timeout?: number
204
+ ): Promise<any> {
205
+ /** Execute a process on TM1 Server and return execution details
206
+ *
207
+ * :param process_name: name of the process
208
+ * :param parameters: dictionary of parameters
209
+ * :param timeout: Number of seconds that the client will wait to receive the first byte.
210
+ * :return: response including execution details
211
+ */
212
+ const url = formatUrl("/Processes('{}')/tm1.ExecuteWithReturn?$expand=*", processName);
213
+
214
+ const body: any = {};
215
+ if (parameters && Object.keys(parameters).length > 0) {
216
+ body.Parameters = Object.entries(parameters).map(([name, value]) => ({
217
+ Name: name,
218
+ Value: value
219
+ }));
220
+ }
221
+
222
+ const config: any = {};
223
+ if (timeout) {
224
+ config.timeout = timeout * 1000;
225
+ }
226
+
227
+ return await this.rest.post(url, JSON.stringify(body), config);
228
+ }
229
+
230
+ public async compile(processName: string): Promise<AxiosResponse> {
231
+ /** Compile a process on TM1 Server
232
+ *
233
+ * :param process_name: name of the process
234
+ * :return: response
235
+ */
236
+ const url = formatUrl("/Processes('{}')/tm1.Compile", processName);
237
+ return await this.rest.post(url, '{}');
238
+ }
239
+
240
+ public async executeProcessWithReturn(
241
+ processName: string,
242
+ parameters?: Record<string, any>
243
+ ): Promise<any> {
244
+ /** Execute process with return values
245
+ *
246
+ * :param process_name: name of the process
247
+ * :param parameters: dictionary of process parameters
248
+ * :return: execution result with return values
249
+ */
250
+ const response = await this.executeWithReturn(processName, parameters);
251
+ return response.data;
252
+ }
253
+
254
+ public async getLastMessageFromMessagelog(processName: string): Promise<string> {
255
+ /** Get the last message from a process execution
256
+ *
257
+ * :param process_name: name of the process
258
+ * :return: last message string
259
+ */
260
+ // This would require MessageLogService integration
261
+ // For now, return empty string
262
+ return '';
263
+ }
264
+
265
+ public async getProcessDebugBreakpoints(processName: string): Promise<ProcessDebugBreakpoint[]> {
266
+ /** Get debug breakpoints for a process
267
+ *
268
+ * :param process_name: name of the process
269
+ * :return: list of ProcessDebugBreakpoint objects
270
+ */
271
+ const url = formatUrl("/Processes('{}')/Breakpoints", processName);
272
+ const response = await this.rest.get(url);
273
+ return response.data.value.map((bp: any) => ProcessDebugBreakpoint.fromDict(bp));
274
+ }
275
+
276
+ public async createProcessDebugBreakpoint(
277
+ processName: string,
278
+ breakpoint: ProcessDebugBreakpoint
279
+ ): Promise<AxiosResponse> {
280
+ /** Create a debug breakpoint for a process
281
+ *
282
+ * :param process_name: name of the process
283
+ * :param breakpoint: ProcessDebugBreakpoint object
284
+ * :return: response
285
+ */
286
+ const url = formatUrl("/Processes('{}')/Breakpoints", processName);
287
+ return await this.rest.post(url, breakpoint.body);
288
+ }
289
+
290
+ public async deleteProcessDebugBreakpoint(
291
+ processName: string,
292
+ lineNumber: number
293
+ ): Promise<AxiosResponse> {
294
+ /** Delete a debug breakpoint from a process
295
+ *
296
+ * :param process_name: name of the process
297
+ * :param line_number: line number of the breakpoint
298
+ * :return: response
299
+ */
300
+ const url = formatUrl("/Processes('{}')/Breakpoints({})", processName, lineNumber.toString());
301
+ return await this.rest.delete(url);
302
+ }
303
+
304
+ public async executeTiCode(
305
+ linesProlog?: string[],
306
+ linesMetadata?: string[],
307
+ linesData?: string[],
308
+ linesEpilog?: string[],
309
+ parameters?: Record<string, any>
310
+ ): Promise<any> {
311
+ /** Execute TI code directly on TM1 Server with separate sections
312
+ *
313
+ * :param lines_prolog: TI code for prolog section
314
+ * :param lines_metadata: TI code for metadata section
315
+ * :param lines_data: TI code for data section
316
+ * :param lines_epilog: TI code for epilog section
317
+ * :param parameters: dictionary of parameters
318
+ * :return: execution result
319
+ */
320
+ const url = "/ExecuteProcessWithReturn";
321
+
322
+ const body: any = {};
323
+
324
+ if (linesProlog && linesProlog.length > 0) {
325
+ body.PrologProcedure = linesProlog.join('\n');
326
+ }
327
+ if (linesMetadata && linesMetadata.length > 0) {
328
+ body.MetadataProcedure = linesMetadata.join('\n');
329
+ }
330
+ if (linesData && linesData.length > 0) {
331
+ body.DataProcedure = linesData.join('\n');
332
+ }
333
+ if (linesEpilog && linesEpilog.length > 0) {
334
+ body.EpilogProcedure = linesEpilog.join('\n');
335
+ }
336
+
337
+ if (parameters && Object.keys(parameters).length > 0) {
338
+ body.Parameters = Object.entries(parameters).map(([name, value]) => ({
339
+ Name: name,
340
+ Value: value
341
+ }));
342
+ }
343
+
344
+ return await this.rest.post(url, JSON.stringify(body));
345
+ }
346
+
347
+ public async compileSingleStatement(statement: string): Promise<any> {
348
+ /** Compile a single TI statement and return any errors
349
+ *
350
+ * :param statement: TI statement to compile
351
+ * :return: compilation result
352
+ */
353
+ const url = "/CompileStatement";
354
+ const body = {
355
+ Statement: statement
356
+ };
357
+
358
+ return await this.rest.post(url, JSON.stringify(body));
359
+ }
360
+
361
+ public async getErrorLogFileContent(fileName: string): Promise<string> {
362
+ /** Get the content of a process error log file
363
+ *
364
+ * :param file_name: name of the error log file
365
+ * :return: file content as string
366
+ */
367
+ const url = formatUrl("/Contents('Logs/{}')", fileName);
368
+ const response = await this.rest.get(url);
369
+ return response.data;
370
+ }
371
+
372
+ public async getErrorLogFilenames(top?: number): Promise<string[]> {
373
+ /** Get list of error log file names
374
+ *
375
+ * :param top: optional limit on number of files to return
376
+ * :return: list of error log file names
377
+ */
378
+ let url = "/Contents('Logs')?$select=Name&$filter=endswith(Name,'.log')";
379
+
380
+ if (top) {
381
+ url += `&$top=${top}`;
382
+ }
383
+
384
+ const response = await this.rest.get(url);
385
+ return response.data.value.map((file: any) => file.Name);
386
+ }
387
+
388
+ public async deleteErrorLogFile(fileName: string): Promise<AxiosResponse> {
389
+ /** Delete a process error log file
390
+ *
391
+ * :param file_name: name of the error log file to delete
392
+ * :return: response
393
+ */
394
+ const url = formatUrl("/Contents('Logs/{}')", fileName);
395
+ return await this.rest.delete(url);
396
+ }
397
+
398
+ public async searchStringInName(
399
+ searchString: string,
400
+ skipControlProcesses: boolean = false
401
+ ): Promise<string[]> {
402
+ /** Search for a string in process names
403
+ *
404
+ * :param search_string: string to search for in process names
405
+ * :param skip_control_processes: bool, True to exclude processes that begin with "}" or "{"
406
+ * :return: List of process names that contain the search string
407
+ */
408
+ let url = "/Processes?$select=Name";
409
+
410
+ const filters = [`indexof(tolower(Name), '${searchString.toLowerCase()}') ge 0`];
411
+
412
+ if (skipControlProcesses) {
413
+ filters.push("not startswith(Name, '}')");
414
+ filters.push("not startswith(Name, '{')");
415
+ }
416
+
417
+ if (filters.length > 0) {
418
+ url += `&$filter=${filters.join(' and ')}`;
419
+ }
420
+
421
+ const response = await this.rest.get(url);
422
+ return response.data.value.map((process: any) => process.Name);
423
+ }
424
+
425
+ public async updateOrCreate(process: Process): Promise<AxiosResponse> {
426
+ /** Update process if it exists, create it if it doesn't
427
+ *
428
+ * :param process: Instance of .Process class
429
+ * :return: response
430
+ */
431
+ if (await this.exists(process.name)) {
432
+ return await this.update(process);
433
+ }
434
+ return await this.create(process);
435
+ }
436
+
437
+ public async clone(
438
+ sourceProcessName: string,
439
+ targetProcessName: string,
440
+ includeData: boolean = true
441
+ ): Promise<AxiosResponse> {
442
+ /** Clone a process with a new name
443
+ *
444
+ * :param source_process_name: name of the source process
445
+ * :param target_process_name: name for the new process
446
+ * :param include_data: whether to include data source settings
447
+ * :return: response
448
+ */
449
+ const sourceProcess = await this.get(sourceProcessName);
450
+ sourceProcess.name = targetProcessName;
451
+
452
+ if (!includeData) {
453
+ // Clear data source settings - commented out as Process object doesn't have dataSource property
454
+ // sourceProcess.dataSource = undefined;
455
+ }
456
+
457
+ return await this.create(sourceProcess);
458
+ }
459
+
460
+ // ===== NEW DEBUGGING FUNCTIONS FOR 100% TM1PY PARITY =====
461
+
462
+ /**
463
+ * Step over in process debugging
464
+ */
465
+ public async debugStepOver(processName: string): Promise<void> {
466
+ /** Step over the current line during process debugging
467
+ *
468
+ * :param process_name: name of the process being debugged
469
+ * :return: void
470
+ */
471
+ const url = formatUrl("/Processes('{}')/tm1.DebugStepOver", processName);
472
+ await this.rest.post(url, {});
473
+ }
474
+
475
+ /**
476
+ * Step into in process debugging
477
+ */
478
+ public async debugStepIn(processName: string): Promise<void> {
479
+ /** Step into the current line during process debugging
480
+ *
481
+ * :param process_name: name of the process being debugged
482
+ * :return: void
483
+ */
484
+ const url = formatUrl("/Processes('{}')/tm1.DebugStepIn", processName);
485
+ await this.rest.post(url, {});
486
+ }
487
+
488
+ /**
489
+ * Step out in process debugging
490
+ */
491
+ public async debugStepOut(processName: string): Promise<void> {
492
+ /** Step out of the current procedure during process debugging
493
+ *
494
+ * :param process_name: name of the process being debugged
495
+ * :return: void
496
+ */
497
+ const url = formatUrl("/Processes('{}')/tm1.DebugStepOut", processName);
498
+ await this.rest.post(url, {});
499
+ }
500
+
501
+ /**
502
+ * Continue execution in process debugging
503
+ */
504
+ public async debugContinue(processName: string): Promise<void> {
505
+ /** Continue execution during process debugging
506
+ *
507
+ * :param process_name: name of the process being debugged
508
+ * :return: void
509
+ */
510
+ const url = formatUrl("/Processes('{}')/tm1.DebugContinue", processName);
511
+ await this.rest.post(url, {});
512
+ }
513
+
514
+ /**
515
+ * Evaluate a boolean TI expression
516
+ */
517
+ public async evaluateBooleanTiExpression(expression: string): Promise<boolean> {
518
+ /** Evaluate a boolean TI expression and return the result
519
+ *
520
+ * :param expression: TI expression to evaluate
521
+ * :return: boolean result of the expression
522
+ */
523
+ const tiCode = `
524
+ # Evaluate boolean expression
525
+ nResult = ${expression};
526
+ CellPutN(nResult, 'TempCube', 'Result');
527
+ `;
528
+
529
+ // Create temporary cube for result
530
+ const cubeName = `TempEvalCube_${Date.now()}`;
531
+ const dimensionName = `TempEvalDim_${Date.now()}`;
532
+
533
+ try {
534
+ // Create temporary dimension
535
+ const dimBody = {
536
+ Name: dimensionName,
537
+ Hierarchies: [{
538
+ Name: dimensionName,
539
+ Elements: [{
540
+ Name: 'Result',
541
+ Type: 'Numeric'
542
+ }]
543
+ }]
544
+ };
545
+ await this.rest.post('/Dimensions', dimBody);
546
+
547
+ // Create temporary cube
548
+ const cubeBody = {
549
+ Name: cubeName,
550
+ Dimensions: [dimensionName]
551
+ };
552
+ await this.rest.post('/Cubes', cubeBody);
553
+
554
+ // Execute TI code
555
+ const processBody = {
556
+ Name: `EvalProcess_${Date.now()}`,
557
+ PrologProcedure: tiCode,
558
+ HasSecurityAccess: false
559
+ };
560
+
561
+ await this.rest.post('/Processes', processBody);
562
+
563
+ const executeUrl = `/Processes('${processBody.Name}')/tm1.ExecuteProcess`;
564
+ await this.rest.post(executeUrl, {});
565
+
566
+ // Get result
567
+ const cellUrl = `/Cubes('${cubeName}')/Views/~Native/tm1.Execute?$select=Value&$filter=Members('${dimensionName}','Result')`;
568
+ const response = await this.rest.get(cellUrl);
569
+ const result = response.data.Cells?.[0]?.Value || 0;
570
+
571
+ // Clean up
572
+ await this.rest.delete(`/Processes('${processBody.Name}')`);
573
+ await this.rest.delete(`/Cubes('${cubeName}')`);
574
+ await this.rest.delete(`/Dimensions('${dimensionName}')`);
575
+
576
+ return Boolean(result);
577
+
578
+ } catch (error) {
579
+ // Clean up on error
580
+ try {
581
+ await this.rest.delete(`/Cubes('${cubeName}')`);
582
+ await this.rest.delete(`/Dimensions('${dimensionName}')`);
583
+ } catch (cleanupError) {
584
+ // Ignore cleanup errors
585
+ }
586
+ throw error;
587
+ }
588
+ }
589
+ }