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.
- package/.env.example +16 -0
- package/.eslintrc.js +28 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/.github/ISSUE_TEMPLATE/question.md +24 -0
- package/.github/workflows/publish-npm.yml +53 -0
- package/.github/workflows/test-on-tag.yml +172 -0
- package/DEVELOPMENT_GUIDE.md +587 -0
- package/LICENSE +21 -0
- package/README.md +580 -0
- package/jest.ci.config.js +83 -0
- package/jest.config.js +68 -0
- package/lib/exceptions/TM1Exception.d.ts +17 -0
- package/lib/exceptions/TM1Exception.d.ts.map +1 -0
- package/lib/exceptions/TM1Exception.js +36 -0
- package/lib/exceptions/TM1RestException.d.ts +10 -0
- package/lib/exceptions/TM1RestException.d.ts.map +1 -0
- package/lib/exceptions/TM1RestException.js +17 -0
- package/lib/exceptions/TM1TimeoutException.d.ts +9 -0
- package/lib/exceptions/TM1TimeoutException.d.ts.map +1 -0
- package/lib/exceptions/TM1TimeoutException.js +16 -0
- package/lib/index.d.ts +41 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +132 -0
- package/lib/objects/Annotation.d.ts +36 -0
- package/lib/objects/Annotation.d.ts.map +1 -0
- package/lib/objects/Annotation.js +134 -0
- package/lib/objects/Application.d.ts +67 -0
- package/lib/objects/Application.d.ts.map +1 -0
- package/lib/objects/Application.js +125 -0
- package/lib/objects/Axis.d.ts +36 -0
- package/lib/objects/Axis.d.ts.map +1 -0
- package/lib/objects/Axis.js +103 -0
- package/lib/objects/Chore.d.ts +43 -0
- package/lib/objects/Chore.d.ts.map +1 -0
- package/lib/objects/Chore.js +129 -0
- package/lib/objects/ChoreFrequency.d.ts +23 -0
- package/lib/objects/ChoreFrequency.d.ts.map +1 -0
- package/lib/objects/ChoreFrequency.js +61 -0
- package/lib/objects/ChoreStartTime.d.ts +15 -0
- package/lib/objects/ChoreStartTime.d.ts.map +1 -0
- package/lib/objects/ChoreStartTime.js +85 -0
- package/lib/objects/ChoreTask.d.ts +28 -0
- package/lib/objects/ChoreTask.d.ts.map +1 -0
- package/lib/objects/ChoreTask.js +66 -0
- package/lib/objects/Cube.d.ts +26 -0
- package/lib/objects/Cube.d.ts.map +1 -0
- package/lib/objects/Cube.js +109 -0
- package/lib/objects/Dimension.d.ts +26 -0
- package/lib/objects/Dimension.d.ts.map +1 -0
- package/lib/objects/Dimension.js +86 -0
- package/lib/objects/Element.d.ts +35 -0
- package/lib/objects/Element.d.ts.map +1 -0
- package/lib/objects/Element.js +115 -0
- package/lib/objects/ElementAttribute.d.ts +28 -0
- package/lib/objects/ElementAttribute.d.ts.map +1 -0
- package/lib/objects/ElementAttribute.js +97 -0
- package/lib/objects/Git.d.ts +21 -0
- package/lib/objects/Git.d.ts.map +1 -0
- package/lib/objects/Git.js +49 -0
- package/lib/objects/GitCommit.d.ts +12 -0
- package/lib/objects/GitCommit.d.ts.map +1 -0
- package/lib/objects/GitCommit.js +26 -0
- package/lib/objects/GitPlan.d.ts +35 -0
- package/lib/objects/GitPlan.d.ts.map +1 -0
- package/lib/objects/GitPlan.js +78 -0
- package/lib/objects/GitRemote.d.ts +12 -0
- package/lib/objects/GitRemote.d.ts.map +1 -0
- package/lib/objects/GitRemote.js +26 -0
- package/lib/objects/Hierarchy.d.ts +47 -0
- package/lib/objects/Hierarchy.d.ts.map +1 -0
- package/lib/objects/Hierarchy.js +165 -0
- package/lib/objects/MDXView.d.ts +19 -0
- package/lib/objects/MDXView.d.ts.map +1 -0
- package/lib/objects/MDXView.js +67 -0
- package/lib/objects/NativeView.d.ts +39 -0
- package/lib/objects/NativeView.d.ts.map +1 -0
- package/lib/objects/NativeView.js +209 -0
- package/lib/objects/Process.d.ts +70 -0
- package/lib/objects/Process.d.ts.map +1 -0
- package/lib/objects/Process.js +210 -0
- package/lib/objects/ProcessDebugBreakpoint.d.ts +60 -0
- package/lib/objects/ProcessDebugBreakpoint.d.ts.map +1 -0
- package/lib/objects/ProcessDebugBreakpoint.js +168 -0
- package/lib/objects/ProcessParameter.d.ts +23 -0
- package/lib/objects/ProcessParameter.d.ts.map +1 -0
- package/lib/objects/ProcessParameter.js +55 -0
- package/lib/objects/ProcessVariable.d.ts +26 -0
- package/lib/objects/ProcessVariable.d.ts.map +1 -0
- package/lib/objects/ProcessVariable.js +63 -0
- package/lib/objects/Rules.d.ts +30 -0
- package/lib/objects/Rules.d.ts.map +1 -0
- package/lib/objects/Rules.js +103 -0
- package/lib/objects/Sandbox.d.ts +21 -0
- package/lib/objects/Sandbox.d.ts.map +1 -0
- package/lib/objects/Sandbox.js +64 -0
- package/lib/objects/Server.d.ts +27 -0
- package/lib/objects/Server.d.ts.map +1 -0
- package/lib/objects/Server.js +26 -0
- package/lib/objects/Subset.d.ts +44 -0
- package/lib/objects/Subset.d.ts.map +1 -0
- package/lib/objects/Subset.js +222 -0
- package/lib/objects/TM1Object.d.ts +8 -0
- package/lib/objects/TM1Object.d.ts.map +1 -0
- package/lib/objects/TM1Object.js +17 -0
- package/lib/objects/TM1Project.d.ts +74 -0
- package/lib/objects/TM1Project.d.ts.map +1 -0
- package/lib/objects/TM1Project.js +409 -0
- package/lib/objects/User.d.ts +42 -0
- package/lib/objects/User.d.ts.map +1 -0
- package/lib/objects/User.js +157 -0
- package/lib/objects/View.d.ts +19 -0
- package/lib/objects/View.d.ts.map +1 -0
- package/lib/objects/View.js +33 -0
- package/lib/objects/index.d.ts +30 -0
- package/lib/objects/index.d.ts.map +1 -0
- package/lib/objects/index.js +68 -0
- package/lib/services/AnnotationService.d.ts +17 -0
- package/lib/services/AnnotationService.d.ts.map +1 -0
- package/lib/services/AnnotationService.js +91 -0
- package/lib/services/ApplicationService.d.ts +21 -0
- package/lib/services/ApplicationService.d.ts.map +1 -0
- package/lib/services/ApplicationService.js +227 -0
- package/lib/services/AuditLogService.d.ts +15 -0
- package/lib/services/AuditLogService.d.ts.map +1 -0
- package/lib/services/AuditLogService.js +153 -0
- package/lib/services/CellService.d.ts +191 -0
- package/lib/services/CellService.d.ts.map +1 -0
- package/lib/services/CellService.js +597 -0
- package/lib/services/ChoreService.d.ts +24 -0
- package/lib/services/ChoreService.d.ts.map +1 -0
- package/lib/services/ChoreService.js +219 -0
- package/lib/services/ConfigurationService.d.ts +18 -0
- package/lib/services/ConfigurationService.d.ts.map +1 -0
- package/lib/services/ConfigurationService.js +60 -0
- package/lib/services/CubeService.d.ts +43 -0
- package/lib/services/CubeService.d.ts.map +1 -0
- package/lib/services/CubeService.js +296 -0
- package/lib/services/DimensionService.d.ts +21 -0
- package/lib/services/DimensionService.d.ts.map +1 -0
- package/lib/services/DimensionService.js +146 -0
- package/lib/services/ElementService.d.ts +132 -0
- package/lib/services/ElementService.d.ts.map +1 -0
- package/lib/services/ElementService.js +579 -0
- package/lib/services/FileService.d.ts +14 -0
- package/lib/services/FileService.d.ts.map +1 -0
- package/lib/services/FileService.js +65 -0
- package/lib/services/GitService.d.ts +23 -0
- package/lib/services/GitService.d.ts.map +1 -0
- package/lib/services/GitService.js +225 -0
- package/lib/services/HierarchyService.d.ts +32 -0
- package/lib/services/HierarchyService.d.ts.map +1 -0
- package/lib/services/HierarchyService.js +235 -0
- package/lib/services/JobService.d.ts +13 -0
- package/lib/services/JobService.d.ts.map +1 -0
- package/lib/services/JobService.js +83 -0
- package/lib/services/LoggerService.d.ts +16 -0
- package/lib/services/LoggerService.d.ts.map +1 -0
- package/lib/services/LoggerService.js +101 -0
- package/lib/services/ManageService.d.ts +47 -0
- package/lib/services/ManageService.d.ts.map +1 -0
- package/lib/services/ManageService.js +221 -0
- package/lib/services/MessageLogService.d.ts +13 -0
- package/lib/services/MessageLogService.d.ts.map +1 -0
- package/lib/services/MessageLogService.js +175 -0
- package/lib/services/MonitoringService.d.ts +29 -0
- package/lib/services/MonitoringService.d.ts.map +1 -0
- package/lib/services/MonitoringService.js +86 -0
- package/lib/services/ObjectService.d.ts +8 -0
- package/lib/services/ObjectService.d.ts.map +1 -0
- package/lib/services/ObjectService.js +20 -0
- package/lib/services/PowerBiService.d.ts +13 -0
- package/lib/services/PowerBiService.d.ts.map +1 -0
- package/lib/services/PowerBiService.js +52 -0
- package/lib/services/ProcessService.d.ts +57 -0
- package/lib/services/ProcessService.d.ts.map +1 -0
- package/lib/services/ProcessService.js +499 -0
- package/lib/services/RestService.d.ts +68 -0
- package/lib/services/RestService.d.ts.map +1 -0
- package/lib/services/RestService.js +166 -0
- package/lib/services/SandboxService.d.ts +28 -0
- package/lib/services/SandboxService.d.ts.map +1 -0
- package/lib/services/SandboxService.js +197 -0
- package/lib/services/SecurityService.d.ts +33 -0
- package/lib/services/SecurityService.d.ts.map +1 -0
- package/lib/services/SecurityService.js +249 -0
- package/lib/services/ServerService.d.ts +55 -0
- package/lib/services/ServerService.d.ts.map +1 -0
- package/lib/services/ServerService.js +247 -0
- package/lib/services/SessionService.d.ts +15 -0
- package/lib/services/SessionService.d.ts.map +1 -0
- package/lib/services/SessionService.js +68 -0
- package/lib/services/SubsetService.d.ts +13 -0
- package/lib/services/SubsetService.d.ts.map +1 -0
- package/lib/services/SubsetService.js +46 -0
- package/lib/services/TM1Service.d.ts +39 -0
- package/lib/services/TM1Service.d.ts.map +1 -0
- package/lib/services/TM1Service.js +94 -0
- package/lib/services/ThreadService.d.ts +15 -0
- package/lib/services/ThreadService.d.ts.map +1 -0
- package/lib/services/ThreadService.js +104 -0
- package/lib/services/TransactionLogService.d.ts +11 -0
- package/lib/services/TransactionLogService.d.ts.map +1 -0
- package/lib/services/TransactionLogService.js +124 -0
- package/lib/services/UserService.d.ts +14 -0
- package/lib/services/UserService.d.ts.map +1 -0
- package/lib/services/UserService.js +103 -0
- package/lib/services/ViewService.d.ts +30 -0
- package/lib/services/ViewService.d.ts.map +1 -0
- package/lib/services/ViewService.js +331 -0
- package/lib/services/index.d.ts +26 -0
- package/lib/services/index.d.ts.map +1 -0
- package/lib/services/index.js +56 -0
- package/lib/tests/100PercentParityCheck.test.d.ts +6 -0
- package/lib/tests/100PercentParityCheck.test.d.ts.map +1 -0
- package/lib/tests/100PercentParityCheck.test.js +143 -0
- package/lib/tests/basic.test.d.ts +6 -0
- package/lib/tests/basic.test.d.ts.map +1 -0
- package/lib/tests/basic.test.js +52 -0
- package/lib/tests/cellService.test.d.ts +6 -0
- package/lib/tests/cellService.test.d.ts.map +1 -0
- package/lib/tests/cellService.test.js +311 -0
- package/lib/tests/ciSetup.d.ts +6 -0
- package/lib/tests/ciSetup.d.ts.map +1 -0
- package/lib/tests/ciSetup.js +23 -0
- package/lib/tests/comprehensive.service.test.d.ts +6 -0
- package/lib/tests/comprehensive.service.test.d.ts.map +1 -0
- package/lib/tests/comprehensive.service.test.js +507 -0
- package/lib/tests/connection.test.d.ts +6 -0
- package/lib/tests/connection.test.d.ts.map +1 -0
- package/lib/tests/connection.test.js +89 -0
- package/lib/tests/cubeService.test.d.ts +6 -0
- package/lib/tests/cubeService.test.d.ts.map +1 -0
- package/lib/tests/cubeService.test.js +368 -0
- package/lib/tests/dimensionService.comprehensive.test.d.ts +7 -0
- package/lib/tests/dimensionService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/dimensionService.comprehensive.test.js +614 -0
- package/lib/tests/dimensionService.test.d.ts +6 -0
- package/lib/tests/dimensionService.test.d.ts.map +1 -0
- package/lib/tests/dimensionService.test.js +293 -0
- package/lib/tests/edgeCases.test.d.ts +6 -0
- package/lib/tests/edgeCases.test.d.ts.map +1 -0
- package/lib/tests/edgeCases.test.js +301 -0
- package/lib/tests/elementService.comprehensive.test.d.ts +7 -0
- package/lib/tests/elementService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/elementService.comprehensive.test.js +846 -0
- package/lib/tests/elementService.test.d.ts +6 -0
- package/lib/tests/elementService.test.d.ts.map +1 -0
- package/lib/tests/elementService.test.js +350 -0
- package/lib/tests/enhancedCellService.test.d.ts +2 -0
- package/lib/tests/enhancedCellService.test.d.ts.map +1 -0
- package/lib/tests/enhancedCellService.test.js +152 -0
- package/lib/tests/enhancedCubeService.test.d.ts +2 -0
- package/lib/tests/enhancedCubeService.test.d.ts.map +1 -0
- package/lib/tests/enhancedCubeService.test.js +246 -0
- package/lib/tests/enhancedElementService.test.d.ts +2 -0
- package/lib/tests/enhancedElementService.test.d.ts.map +1 -0
- package/lib/tests/enhancedElementService.test.js +199 -0
- package/lib/tests/enhancedViewService.test.d.ts +2 -0
- package/lib/tests/enhancedViewService.test.d.ts.map +1 -0
- package/lib/tests/enhancedViewService.test.js +260 -0
- package/lib/tests/errorHandling.test.d.ts +6 -0
- package/lib/tests/errorHandling.test.d.ts.map +1 -0
- package/lib/tests/errorHandling.test.js +227 -0
- package/lib/tests/exceptions.test.d.ts +7 -0
- package/lib/tests/exceptions.test.d.ts.map +1 -0
- package/lib/tests/exceptions.test.js +257 -0
- package/lib/tests/hierarchyService.test.d.ts +6 -0
- package/lib/tests/hierarchyService.test.d.ts.map +1 -0
- package/lib/tests/hierarchyService.test.js +294 -0
- package/lib/tests/index.test.d.ts +6 -0
- package/lib/tests/index.test.d.ts.map +1 -0
- package/lib/tests/index.test.js +346 -0
- package/lib/tests/integration.test.d.ts +6 -0
- package/lib/tests/integration.test.d.ts.map +1 -0
- package/lib/tests/integration.test.js +302 -0
- package/lib/tests/integrationTests.test.d.ts +2 -0
- package/lib/tests/integrationTests.test.d.ts.map +1 -0
- package/lib/tests/integrationTests.test.js +252 -0
- package/lib/tests/mdx.advanced.test.d.ts +6 -0
- package/lib/tests/mdx.advanced.test.d.ts.map +1 -0
- package/lib/tests/mdx.advanced.test.js +437 -0
- package/lib/tests/objects.improved.test.d.ts +7 -0
- package/lib/tests/objects.improved.test.d.ts.map +1 -0
- package/lib/tests/objects.improved.test.js +302 -0
- package/lib/tests/performance.test.d.ts +6 -0
- package/lib/tests/performance.test.d.ts.map +1 -0
- package/lib/tests/performance.test.js +264 -0
- package/lib/tests/processService.comprehensive.test.d.ts +7 -0
- package/lib/tests/processService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/processService.comprehensive.test.js +656 -0
- package/lib/tests/processService.test.d.ts +6 -0
- package/lib/tests/processService.test.d.ts.map +1 -0
- package/lib/tests/processService.test.js +322 -0
- package/lib/tests/restService.test.d.ts +6 -0
- package/lib/tests/restService.test.d.ts.map +1 -0
- package/lib/tests/restService.test.js +177 -0
- package/lib/tests/security.advanced.test.d.ts +6 -0
- package/lib/tests/security.advanced.test.d.ts.map +1 -0
- package/lib/tests/security.advanced.test.js +407 -0
- package/lib/tests/security.test.d.ts +6 -0
- package/lib/tests/security.test.d.ts.map +1 -0
- package/lib/tests/security.test.js +204 -0
- package/lib/tests/securityService.comprehensive.test.d.ts +7 -0
- package/lib/tests/securityService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/securityService.comprehensive.test.js +457 -0
- package/lib/tests/setup.d.ts +4 -0
- package/lib/tests/setup.d.ts.map +1 -0
- package/lib/tests/setup.js +40 -0
- package/lib/tests/simpleCoverage.test.d.ts +6 -0
- package/lib/tests/simpleCoverage.test.d.ts.map +1 -0
- package/lib/tests/simpleCoverage.test.js +236 -0
- package/lib/tests/stress.performance.test.d.ts +6 -0
- package/lib/tests/stress.performance.test.d.ts.map +1 -0
- package/lib/tests/stress.performance.test.js +423 -0
- package/lib/tests/subsetService.test.d.ts +6 -0
- package/lib/tests/subsetService.test.d.ts.map +1 -0
- package/lib/tests/subsetService.test.js +271 -0
- package/lib/tests/testConfig.d.ts +18 -0
- package/lib/tests/testConfig.d.ts.map +1 -0
- package/lib/tests/testConfig.js +38 -0
- package/lib/tests/testUtils.d.ts +9 -0
- package/lib/tests/testUtils.d.ts.map +1 -0
- package/lib/tests/testUtils.js +100 -0
- package/lib/tests/tm1Service.test.d.ts +7 -0
- package/lib/tests/tm1Service.test.d.ts.map +1 -0
- package/lib/tests/tm1Service.test.js +290 -0
- package/lib/tests/viewService.test.d.ts +6 -0
- package/lib/tests/viewService.test.d.ts.map +1 -0
- package/lib/tests/viewService.test.js +240 -0
- package/lib/utils/Utils.d.ts +90 -0
- package/lib/utils/Utils.d.ts.map +1 -0
- package/lib/utils/Utils.js +379 -0
- package/package.json +81 -0
- package/run-all-tests.js +296 -0
- package/src/exceptions/TM1Exception.ts +38 -0
- package/src/exceptions/TM1RestException.ts +17 -0
- package/src/exceptions/TM1TimeoutException.ts +15 -0
- package/src/index.ts +94 -0
- package/src/objects/Annotation.ts +194 -0
- package/src/objects/Application.ts +146 -0
- package/src/objects/Axis.ts +149 -0
- package/src/objects/Chore.ts +174 -0
- package/src/objects/ChoreFrequency.ts +83 -0
- package/src/objects/ChoreStartTime.ts +111 -0
- package/src/objects/ChoreTask.ts +92 -0
- package/src/objects/Cube.ts +125 -0
- package/src/objects/Dimension.ts +107 -0
- package/src/objects/Element.ts +153 -0
- package/src/objects/ElementAttribute.ts +115 -0
- package/src/objects/Git.ts +86 -0
- package/src/objects/GitCommit.ts +31 -0
- package/src/objects/GitPlan.ts +121 -0
- package/src/objects/GitRemote.ts +31 -0
- package/src/objects/Hierarchy.ts +229 -0
- package/src/objects/MDXView.ts +91 -0
- package/src/objects/NativeView.ts +268 -0
- package/src/objects/Process.ts +320 -0
- package/src/objects/ProcessDebugBreakpoint.ts +239 -0
- package/src/objects/ProcessParameter.ts +76 -0
- package/src/objects/ProcessVariable.ts +89 -0
- package/src/objects/Rules.ts +117 -0
- package/src/objects/Sandbox.ts +90 -0
- package/src/objects/Server.ts +45 -0
- package/src/objects/Subset.ts +323 -0
- package/src/objects/TM1Object.ts +17 -0
- package/src/objects/TM1Project.ts +587 -0
- package/src/objects/User.ts +198 -0
- package/src/objects/View.ts +43 -0
- package/src/objects/index.ts +36 -0
- package/src/services/AnnotationService.ts +107 -0
- package/src/services/ApplicationService.ts +279 -0
- package/src/services/AuditLogService.ts +172 -0
- package/src/services/CellService.ts +814 -0
- package/src/services/ChoreService.ts +219 -0
- package/src/services/ConfigurationService.ts +69 -0
- package/src/services/CubeService.ts +338 -0
- package/src/services/DimensionService.ts +168 -0
- package/src/services/ElementService.ts +966 -0
- package/src/services/FileService.ts +67 -0
- package/src/services/GitService.ts +324 -0
- package/src/services/HierarchyService.ts +284 -0
- package/src/services/JobService.ts +59 -0
- package/src/services/LoggerService.ts +118 -0
- package/src/services/ManageService.ts +322 -0
- package/src/services/MessageLogService.ts +211 -0
- package/src/services/MonitoringService.ts +105 -0
- package/src/services/ObjectService.ts +21 -0
- package/src/services/PowerBiService.ts +85 -0
- package/src/services/ProcessService.ts +589 -0
- package/src/services/RestService.ts +224 -0
- package/src/services/SandboxService.ts +217 -0
- package/src/services/SecurityService.ts +284 -0
- package/src/services/ServerService.ts +313 -0
- package/src/services/SessionService.ts +81 -0
- package/src/services/SubsetService.ts +52 -0
- package/src/services/TM1Service.ts +133 -0
- package/src/services/ThreadService.ts +83 -0
- package/src/services/TransactionLogService.ts +148 -0
- package/src/services/UserService.ts +77 -0
- package/src/services/ViewService.ts +398 -0
- package/src/services/index.ts +28 -0
- package/src/tests/100PercentParityCheck.test.ts +166 -0
- package/src/tests/basic.test.ts +59 -0
- package/src/tests/cellService.test.ts +405 -0
- package/src/tests/ciSetup.ts +26 -0
- package/src/tests/comprehensive.service.test.ts +653 -0
- package/src/tests/config.ini.template +23 -0
- package/src/tests/connection.test.ts +90 -0
- package/src/tests/cubeService.test.ts +458 -0
- package/src/tests/dimensionService.comprehensive.test.ts +786 -0
- package/src/tests/dimensionService.test.ts +373 -0
- package/src/tests/edgeCases.test.ts +358 -0
- package/src/tests/elementService.comprehensive.test.ts +1190 -0
- package/src/tests/elementService.test.ts +472 -0
- package/src/tests/enhancedCellService.test.ts +237 -0
- package/src/tests/enhancedCubeService.test.ts +384 -0
- package/src/tests/enhancedElementService.test.ts +301 -0
- package/src/tests/enhancedViewService.test.ts +373 -0
- package/src/tests/errorHandling.test.ts +264 -0
- package/src/tests/exceptions.test.ts +313 -0
- package/src/tests/hierarchyService.test.ts +386 -0
- package/src/tests/index.test.ts +376 -0
- package/src/tests/integration.test.ts +333 -0
- package/src/tests/integrationTests.test.ts +302 -0
- package/src/tests/mdx.advanced.test.ts +513 -0
- package/src/tests/objects.improved.test.ts +385 -0
- package/src/tests/performance.test.ts +314 -0
- package/src/tests/processService.comprehensive.test.ts +933 -0
- package/src/tests/processService.test.ts +409 -0
- package/src/tests/restService.test.ts +218 -0
- package/src/tests/security.advanced.test.ts +464 -0
- package/src/tests/security.test.ts +233 -0
- package/src/tests/securityService.comprehensive.test.ts +582 -0
- package/src/tests/setup.ts +42 -0
- package/src/tests/simpleCoverage.test.ts +287 -0
- package/src/tests/stress.performance.test.ts +531 -0
- package/src/tests/subsetService.test.ts +350 -0
- package/src/tests/testConfig.ts +53 -0
- package/src/tests/testUtils.ts +94 -0
- package/src/tests/tm1Service.test.ts +361 -0
- package/src/tests/viewService.test.ts +324 -0
- package/src/utils/Utils.ts +395 -0
- package/tests/README.md +57 -0
- package/tests/connection/test-connection.ts +86 -0
- package/tests/edge-cases/edge-cases-test.ts +244 -0
- package/tests/integration/working-test.ts +193 -0
- package/tests/performance/performance-test.ts +133 -0
- package/tests/run-all-tests.sh +106 -0
- package/tests/security/security-test.ts +103 -0
- 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
|
+
}
|