@peernova/cuneiform-sf 1.0.2 → 1.0.4-beta.8

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 (494) hide show
  1. package/LICENSE +81 -30
  2. package/README.md +59 -95
  3. package/lib/adapters/connection-facade.d.ts +458 -0
  4. package/lib/adapters/connection-facade.js +379 -0
  5. package/lib/adapters/connection-facade.js.map +1 -0
  6. package/lib/adapters/errors.d.ts +547 -0
  7. package/lib/adapters/errors.js +937 -0
  8. package/lib/adapters/errors.js.map +1 -0
  9. package/lib/adapters/index.d.ts +33 -0
  10. package/lib/adapters/index.js +50 -0
  11. package/lib/adapters/index.js.map +1 -0
  12. package/lib/adapters/lifecycle.d.ts +119 -0
  13. package/lib/adapters/lifecycle.js +94 -0
  14. package/lib/adapters/lifecycle.js.map +1 -0
  15. package/lib/adapters/rest/cache.d.ts +69 -0
  16. package/lib/adapters/rest/cache.js +133 -0
  17. package/lib/adapters/rest/cache.js.map +1 -0
  18. package/lib/adapters/rest/index.d.ts +11 -0
  19. package/lib/adapters/rest/index.js +18 -0
  20. package/lib/adapters/rest/index.js.map +1 -0
  21. package/lib/adapters/rest/profiling-rest-client.d.ts +137 -0
  22. package/lib/adapters/rest/profiling-rest-client.js +115 -0
  23. package/lib/adapters/rest/profiling-rest-client.js.map +1 -0
  24. package/lib/adapters/rest/rest-api-adapter.d.ts +389 -0
  25. package/lib/adapters/rest/rest-api-adapter.js +747 -0
  26. package/lib/adapters/rest/rest-api-adapter.js.map +1 -0
  27. package/lib/adapters/rest/types.d.ts +34 -0
  28. package/lib/adapters/rest/types.js +9 -0
  29. package/lib/adapters/rest/types.js.map +1 -0
  30. package/lib/adapters/retry.d.ts +91 -0
  31. package/lib/adapters/retry.js +215 -0
  32. package/lib/adapters/retry.js.map +1 -0
  33. package/lib/adapters/soql/cuneiform-query-builder.d.ts +391 -0
  34. package/lib/adapters/soql/cuneiform-query-builder.js +559 -0
  35. package/lib/adapters/soql/cuneiform-query-builder.js.map +1 -0
  36. package/lib/adapters/soql/index.d.ts +13 -0
  37. package/lib/adapters/soql/index.js +21 -0
  38. package/lib/adapters/soql/index.js.map +1 -0
  39. package/lib/adapters/soql/soql-query-adapter.d.ts +141 -0
  40. package/lib/adapters/soql/soql-query-adapter.js +259 -0
  41. package/lib/adapters/soql/soql-query-adapter.js.map +1 -0
  42. package/lib/adapters/soql/types.d.ts +37 -0
  43. package/lib/adapters/soql/types.js +19 -0
  44. package/lib/adapters/soql/types.js.map +1 -0
  45. package/lib/adapters/testing/index.d.ts +37 -0
  46. package/lib/adapters/testing/index.js +20 -0
  47. package/lib/adapters/testing/index.js.map +1 -0
  48. package/lib/adapters/testing/mock-connection.d.ts +77 -0
  49. package/lib/adapters/testing/mock-connection.js +207 -0
  50. package/lib/adapters/testing/mock-connection.js.map +1 -0
  51. package/lib/adapters/testing/mock-logger.d.ts +29 -0
  52. package/lib/adapters/testing/mock-logger.js +57 -0
  53. package/lib/adapters/testing/mock-logger.js.map +1 -0
  54. package/lib/adapters/testing/mock-mcp-adapters.d.ts +32 -0
  55. package/lib/adapters/testing/mock-mcp-adapters.js +52 -0
  56. package/lib/adapters/testing/mock-mcp-adapters.js.map +1 -0
  57. package/lib/adapters/testing/mock-oclif-config.d.ts +22 -0
  58. package/lib/adapters/testing/mock-oclif-config.js +90 -0
  59. package/lib/adapters/testing/mock-oclif-config.js.map +1 -0
  60. package/lib/adapters/testing/mock-rest-adapter.d.ts +26 -0
  61. package/lib/adapters/testing/mock-rest-adapter.js +243 -0
  62. package/lib/adapters/testing/mock-rest-adapter.js.map +1 -0
  63. package/lib/adapters/testing/mock-salesforce-connection.d.ts +40 -0
  64. package/lib/adapters/testing/mock-salesforce-connection.js +61 -0
  65. package/lib/adapters/testing/mock-salesforce-connection.js.map +1 -0
  66. package/lib/adapters/testing/mock-soql-adapter.d.ts +30 -0
  67. package/lib/adapters/testing/mock-soql-adapter.js +120 -0
  68. package/lib/adapters/testing/mock-soql-adapter.js.map +1 -0
  69. package/lib/adapters/testing/mock-tooling-adapter.d.ts +24 -0
  70. package/lib/adapters/testing/mock-tooling-adapter.js +163 -0
  71. package/lib/adapters/testing/mock-tooling-adapter.js.map +1 -0
  72. package/lib/adapters/testing/stub-connection.d.ts +93 -0
  73. package/lib/adapters/testing/stub-connection.js +97 -0
  74. package/lib/adapters/testing/stub-connection.js.map +1 -0
  75. package/lib/adapters/testing/stub-rest-adapter.d.ts +52 -0
  76. package/lib/adapters/testing/stub-rest-adapter.js +58 -0
  77. package/lib/adapters/testing/stub-rest-adapter.js.map +1 -0
  78. package/lib/adapters/testing/stub-soql-adapter.d.ts +56 -0
  79. package/lib/adapters/testing/stub-soql-adapter.js +50 -0
  80. package/lib/adapters/testing/stub-soql-adapter.js.map +1 -0
  81. package/lib/adapters/testing/types.d.ts +71 -0
  82. package/lib/adapters/testing/types.js +9 -0
  83. package/lib/adapters/testing/types.js.map +1 -0
  84. package/lib/adapters/tooling/index.d.ts +10 -0
  85. package/lib/adapters/tooling/index.js +17 -0
  86. package/lib/adapters/tooling/index.js.map +1 -0
  87. package/lib/adapters/tooling/tooling-api-adapter.d.ts +157 -0
  88. package/lib/adapters/tooling/tooling-api-adapter.js +339 -0
  89. package/lib/adapters/tooling/tooling-api-adapter.js.map +1 -0
  90. package/lib/adapters/tooling/types.d.ts +81 -0
  91. package/lib/adapters/tooling/types.js +9 -0
  92. package/lib/adapters/tooling/types.js.map +1 -0
  93. package/lib/adapters/types.d.ts +112 -0
  94. package/lib/adapters/types.js +169 -0
  95. package/lib/adapters/types.js.map +1 -0
  96. package/lib/base/cuneiform-command.d.ts +152 -0
  97. package/lib/base/cuneiform-command.js +243 -0
  98. package/lib/base/cuneiform-command.js.map +1 -0
  99. package/lib/commands/cuneiform/compatibility/check.d.ts +43 -0
  100. package/lib/commands/cuneiform/compatibility/check.js +114 -0
  101. package/lib/commands/cuneiform/compatibility/check.js.map +1 -0
  102. package/lib/commands/cuneiform/definition/create.d.ts +119 -0
  103. package/lib/commands/cuneiform/definition/create.js +693 -0
  104. package/lib/commands/cuneiform/definition/create.js.map +1 -0
  105. package/lib/commands/cuneiform/definition/export.d.ts +57 -0
  106. package/lib/commands/cuneiform/definition/export.js +133 -0
  107. package/lib/commands/cuneiform/definition/export.js.map +1 -0
  108. package/lib/commands/cuneiform/definition/get.d.ts +86 -0
  109. package/lib/commands/cuneiform/definition/get.js +270 -0
  110. package/lib/commands/cuneiform/definition/get.js.map +1 -0
  111. package/lib/commands/cuneiform/definition/import.d.ts +54 -0
  112. package/lib/commands/cuneiform/definition/import.js +118 -0
  113. package/lib/commands/cuneiform/definition/import.js.map +1 -0
  114. package/lib/commands/cuneiform/definition/list.d.ts +110 -0
  115. package/lib/commands/cuneiform/definition/list.js +344 -0
  116. package/lib/commands/cuneiform/definition/list.js.map +1 -0
  117. package/lib/commands/cuneiform/definition/purge.d.ts +105 -0
  118. package/lib/commands/cuneiform/definition/purge.js +533 -0
  119. package/lib/commands/cuneiform/definition/purge.js.map +1 -0
  120. package/lib/commands/cuneiform/definition/update.d.ts +58 -0
  121. package/lib/commands/cuneiform/definition/update.js +206 -0
  122. package/lib/commands/cuneiform/definition/update.js.map +1 -0
  123. package/lib/commands/cuneiform/mcp/serve.d.ts +56 -0
  124. package/lib/commands/cuneiform/mcp/serve.js +109 -0
  125. package/lib/commands/cuneiform/mcp/serve.js.map +1 -0
  126. package/lib/commands/cuneiform/object/describe.d.ts +61 -0
  127. package/lib/commands/cuneiform/object/describe.js +461 -0
  128. package/lib/commands/cuneiform/object/describe.js.map +1 -0
  129. package/lib/commands/cuneiform/object/list.d.ts +111 -0
  130. package/lib/commands/cuneiform/object/list.js +239 -0
  131. package/lib/commands/cuneiform/object/list.js.map +1 -0
  132. package/lib/commands/cuneiform/org/details.d.ts +99 -0
  133. package/lib/commands/cuneiform/org/details.js +521 -0
  134. package/lib/commands/cuneiform/org/details.js.map +1 -0
  135. package/lib/commands/cuneiform/org/reset.d.ts +46 -0
  136. package/lib/commands/cuneiform/org/reset.js +135 -0
  137. package/lib/commands/cuneiform/org/reset.js.map +1 -0
  138. package/lib/commands/cuneiform/profile/request/cancel.d.ts +59 -0
  139. package/lib/commands/cuneiform/profile/request/cancel.js +202 -0
  140. package/lib/commands/cuneiform/profile/request/cancel.js.map +1 -0
  141. package/lib/commands/cuneiform/profile/request/delete.d.ts +59 -0
  142. package/lib/commands/cuneiform/profile/request/delete.js +223 -0
  143. package/lib/commands/cuneiform/profile/request/delete.js.map +1 -0
  144. package/lib/commands/cuneiform/profile/request/list.d.ts +35 -0
  145. package/lib/commands/cuneiform/profile/request/list.js +102 -0
  146. package/lib/commands/cuneiform/profile/request/list.js.map +1 -0
  147. package/lib/commands/cuneiform/profile.d.ts +90 -0
  148. package/lib/commands/cuneiform/profile.js +322 -0
  149. package/lib/commands/cuneiform/profile.js.map +1 -0
  150. package/lib/commands/cuneiform/summary/purge.d.ts +77 -0
  151. package/lib/commands/cuneiform/summary/purge.js +429 -0
  152. package/lib/commands/cuneiform/summary/purge.js.map +1 -0
  153. package/lib/commands/cuneiform/summary/reprofile.d.ts +60 -0
  154. package/lib/commands/cuneiform/summary/reprofile.js +236 -0
  155. package/lib/commands/cuneiform/summary/reprofile.js.map +1 -0
  156. package/lib/commands/cuneiform/summary/stop.d.ts +59 -0
  157. package/lib/commands/cuneiform/summary/stop.js +234 -0
  158. package/lib/commands/cuneiform/summary/stop.js.map +1 -0
  159. package/lib/commands/cuneiform/user/details.d.ts +73 -0
  160. package/lib/commands/cuneiform/user/details.js +391 -0
  161. package/lib/commands/cuneiform/user/details.js.map +1 -0
  162. package/lib/constants/index.d.ts +8 -0
  163. package/lib/constants/index.js +16 -0
  164. package/lib/constants/index.js.map +1 -0
  165. package/lib/constants/namespace-constants.d.ts +91 -0
  166. package/lib/constants/namespace-constants.js +211 -0
  167. package/lib/constants/namespace-constants.js.map +1 -0
  168. package/lib/debug/command-debug-proxy.d.ts +101 -0
  169. package/lib/debug/command-debug-proxy.js +171 -0
  170. package/lib/debug/command-debug-proxy.js.map +1 -0
  171. package/lib/debug/debug-logger.d.ts +85 -0
  172. package/lib/debug/debug-logger.js +133 -0
  173. package/lib/debug/debug-logger.js.map +1 -0
  174. package/lib/debug/index.d.ts +12 -0
  175. package/lib/debug/index.js +20 -0
  176. package/lib/debug/index.js.map +1 -0
  177. package/lib/debug/service-debug-proxy.d.ts +30 -0
  178. package/lib/debug/service-debug-proxy.js +102 -0
  179. package/lib/debug/service-debug-proxy.js.map +1 -0
  180. package/lib/hooks/prerun.d.ts +25 -0
  181. package/lib/hooks/prerun.js +47 -0
  182. package/lib/hooks/prerun.js.map +1 -0
  183. package/lib/mcp/config/mcp-config.d.ts +55 -0
  184. package/lib/mcp/config/mcp-config.js +51 -0
  185. package/lib/mcp/config/mcp-config.js.map +1 -0
  186. package/lib/mcp/config/pagination.d.ts +96 -0
  187. package/lib/mcp/config/pagination.js +108 -0
  188. package/lib/mcp/config/pagination.js.map +1 -0
  189. package/lib/mcp/config/system-prompts.d.ts +18 -0
  190. package/lib/mcp/config/system-prompts.js +92 -0
  191. package/lib/mcp/config/system-prompts.js.map +1 -0
  192. package/lib/mcp/errors.d.ts +23 -0
  193. package/lib/mcp/errors.js +27 -0
  194. package/lib/mcp/errors.js.map +1 -0
  195. package/lib/mcp/schemas/input-schemas.d.ts +327 -0
  196. package/lib/mcp/schemas/input-schemas.js +302 -0
  197. package/lib/mcp/schemas/input-schemas.js.map +1 -0
  198. package/lib/mcp/server.d.ts +40 -0
  199. package/lib/mcp/server.js +316 -0
  200. package/lib/mcp/server.js.map +1 -0
  201. package/lib/mcp/tools/contactpoint-tools.d.ts +14 -0
  202. package/lib/mcp/tools/contactpoint-tools.js +34 -0
  203. package/lib/mcp/tools/contactpoint-tools.js.map +1 -0
  204. package/lib/mcp/tools/definition-io-tools.d.ts +19 -0
  205. package/lib/mcp/tools/definition-io-tools.js +152 -0
  206. package/lib/mcp/tools/definition-io-tools.js.map +1 -0
  207. package/lib/mcp/tools/definition-tools.d.ts +51 -0
  208. package/lib/mcp/tools/definition-tools.js +199 -0
  209. package/lib/mcp/tools/definition-tools.js.map +1 -0
  210. package/lib/mcp/tools/index.d.ts +37 -0
  211. package/lib/mcp/tools/index.js +88 -0
  212. package/lib/mcp/tools/index.js.map +1 -0
  213. package/lib/mcp/tools/object-tools.d.ts +22 -0
  214. package/lib/mcp/tools/object-tools.js +306 -0
  215. package/lib/mcp/tools/object-tools.js.map +1 -0
  216. package/lib/mcp/tools/org-tools.d.ts +14 -0
  217. package/lib/mcp/tools/org-tools.js +177 -0
  218. package/lib/mcp/tools/org-tools.js.map +1 -0
  219. package/lib/mcp/tools/profile-tools.d.ts +59 -0
  220. package/lib/mcp/tools/profile-tools.js +213 -0
  221. package/lib/mcp/tools/profile-tools.js.map +1 -0
  222. package/lib/mcp/tools/summary-tools.d.ts +14 -0
  223. package/lib/mcp/tools/summary-tools.js +38 -0
  224. package/lib/mcp/tools/summary-tools.js.map +1 -0
  225. package/lib/mcp/tools/tool-factory.d.ts +63 -0
  226. package/lib/mcp/tools/tool-factory.js +146 -0
  227. package/lib/mcp/tools/tool-factory.js.map +1 -0
  228. package/lib/mcp/tools/user-tools.d.ts +25 -0
  229. package/lib/mcp/tools/user-tools.js +167 -0
  230. package/lib/mcp/tools/user-tools.js.map +1 -0
  231. package/lib/models/date-literal.d.ts +211 -0
  232. package/lib/models/date-literal.js +615 -0
  233. package/lib/models/date-literal.js.map +1 -0
  234. package/lib/models/object-describe-types.d.ts +173 -0
  235. package/lib/models/object-describe-types.js +9 -0
  236. package/lib/models/object-describe-types.js.map +1 -0
  237. package/lib/models/profile-request-types.d.ts +118 -0
  238. package/lib/models/profile-request-types.js +23 -0
  239. package/lib/models/profile-request-types.js.map +1 -0
  240. package/lib/models/profiling-execution-types.d.ts +154 -0
  241. package/lib/models/profiling-execution-types.js +14 -0
  242. package/lib/models/profiling-execution-types.js.map +1 -0
  243. package/lib/models/service-result.d.ts +114 -0
  244. package/lib/models/service-result.js +81 -0
  245. package/lib/models/service-result.js.map +1 -0
  246. package/lib/models/sfdmu-types.d.ts +53 -0
  247. package/lib/models/sfdmu-types.js +23 -0
  248. package/lib/models/sfdmu-types.js.map +1 -0
  249. package/lib/models/status-types.d.ts +38 -0
  250. package/lib/models/status-types.js +12 -0
  251. package/lib/models/status-types.js.map +1 -0
  252. package/lib/models/summary-bulk-types.d.ts +61 -0
  253. package/lib/models/summary-bulk-types.js +23 -0
  254. package/lib/models/summary-bulk-types.js.map +1 -0
  255. package/lib/models/user-details-types.d.ts +163 -0
  256. package/lib/models/user-details-types.js +9 -0
  257. package/lib/models/user-details-types.js.map +1 -0
  258. package/lib/models/year-range.d.ts +78 -0
  259. package/lib/models/year-range.js +153 -0
  260. package/lib/models/year-range.js.map +1 -0
  261. package/lib/operations/CompatibilityCheckOperation.d.ts +62 -0
  262. package/lib/operations/CompatibilityCheckOperation.js +102 -0
  263. package/lib/operations/CompatibilityCheckOperation.js.map +1 -0
  264. package/lib/operations/DefinitionCreateOperation.d.ts +411 -0
  265. package/lib/operations/DefinitionCreateOperation.js +1121 -0
  266. package/lib/operations/DefinitionCreateOperation.js.map +1 -0
  267. package/lib/operations/DefinitionExportOperation.d.ts +155 -0
  268. package/lib/operations/DefinitionExportOperation.js +281 -0
  269. package/lib/operations/DefinitionExportOperation.js.map +1 -0
  270. package/lib/operations/DefinitionImportOperation.d.ts +144 -0
  271. package/lib/operations/DefinitionImportOperation.js +357 -0
  272. package/lib/operations/DefinitionImportOperation.js.map +1 -0
  273. package/lib/operations/DefinitionListOperation.d.ts +66 -0
  274. package/lib/operations/DefinitionListOperation.js +108 -0
  275. package/lib/operations/DefinitionListOperation.js.map +1 -0
  276. package/lib/operations/DefinitionPurgeOperation.d.ts +199 -0
  277. package/lib/operations/DefinitionPurgeOperation.js +465 -0
  278. package/lib/operations/DefinitionPurgeOperation.js.map +1 -0
  279. package/lib/operations/DefinitionUpdateOperation.d.ts +78 -0
  280. package/lib/operations/DefinitionUpdateOperation.js +142 -0
  281. package/lib/operations/DefinitionUpdateOperation.js.map +1 -0
  282. package/lib/operations/OrgDetailsOperation.d.ts +253 -0
  283. package/lib/operations/OrgDetailsOperation.js +456 -0
  284. package/lib/operations/OrgDetailsOperation.js.map +1 -0
  285. package/lib/operations/OrgResetOperation.d.ts +114 -0
  286. package/lib/operations/OrgResetOperation.js +209 -0
  287. package/lib/operations/OrgResetOperation.js.map +1 -0
  288. package/lib/operations/ProfileOperation.d.ts +187 -0
  289. package/lib/operations/ProfileOperation.js +373 -0
  290. package/lib/operations/ProfileOperation.js.map +1 -0
  291. package/lib/operations/ProfileRequestCancelOperation.d.ts +59 -0
  292. package/lib/operations/ProfileRequestCancelOperation.js +137 -0
  293. package/lib/operations/ProfileRequestCancelOperation.js.map +1 -0
  294. package/lib/operations/ProfileRequestDeleteOperation.d.ts +64 -0
  295. package/lib/operations/ProfileRequestDeleteOperation.js +134 -0
  296. package/lib/operations/ProfileRequestDeleteOperation.js.map +1 -0
  297. package/lib/operations/ProfileRequestListOperation.d.ts +39 -0
  298. package/lib/operations/ProfileRequestListOperation.js +61 -0
  299. package/lib/operations/ProfileRequestListOperation.js.map +1 -0
  300. package/lib/operations/SummaryPurgeOperation.d.ts +134 -0
  301. package/lib/operations/SummaryPurgeOperation.js +257 -0
  302. package/lib/operations/SummaryPurgeOperation.js.map +1 -0
  303. package/lib/operations/SummaryReprofileOperation.d.ts +88 -0
  304. package/lib/operations/SummaryReprofileOperation.js +174 -0
  305. package/lib/operations/SummaryReprofileOperation.js.map +1 -0
  306. package/lib/operations/SummaryStopOperation.d.ts +87 -0
  307. package/lib/operations/SummaryStopOperation.js +175 -0
  308. package/lib/operations/SummaryStopOperation.js.map +1 -0
  309. package/lib/services/BulkExecutionService.d.ts +120 -0
  310. package/lib/services/BulkExecutionService.js +535 -0
  311. package/lib/services/BulkExecutionService.js.map +1 -0
  312. package/lib/services/CompatibilityService.d.ts +81 -0
  313. package/lib/services/CompatibilityService.js +118 -0
  314. package/lib/services/CompatibilityService.js.map +1 -0
  315. package/lib/services/ConfigureMode.d.ts +85 -0
  316. package/lib/services/ConfigureMode.js +390 -0
  317. package/lib/services/ConfigureMode.js.map +1 -0
  318. package/lib/services/ContactPointService.d.ts +111 -0
  319. package/lib/services/ContactPointService.js +286 -0
  320. package/lib/services/ContactPointService.js.map +1 -0
  321. package/lib/services/DataAvailabilityService.d.ts +81 -0
  322. package/lib/services/DataAvailabilityService.js +128 -0
  323. package/lib/services/DataAvailabilityService.js.map +1 -0
  324. package/lib/services/DefinitionFieldGenerationService.d.ts +309 -0
  325. package/lib/services/DefinitionFieldGenerationService.js +795 -0
  326. package/lib/services/DefinitionFieldGenerationService.js.map +1 -0
  327. package/lib/services/DefinitionQueryBuilder.d.ts +59 -0
  328. package/lib/services/DefinitionQueryBuilder.js +234 -0
  329. package/lib/services/DefinitionQueryBuilder.js.map +1 -0
  330. package/lib/services/ObjectDescribeService.d.ts +436 -0
  331. package/lib/services/ObjectDescribeService.js +869 -0
  332. package/lib/services/ObjectDescribeService.js.map +1 -0
  333. package/lib/services/ObjectFilteringService.d.ts +400 -0
  334. package/lib/services/ObjectFilteringService.js +878 -0
  335. package/lib/services/ObjectFilteringService.js.map +1 -0
  336. package/lib/services/ObjectListCommandService.d.ts +429 -0
  337. package/lib/services/ObjectListCommandService.js +873 -0
  338. package/lib/services/ObjectListCommandService.js.map +1 -0
  339. package/lib/services/ObjectListService.d.ts +201 -0
  340. package/lib/services/ObjectListService.js +345 -0
  341. package/lib/services/ObjectListService.js.map +1 -0
  342. package/lib/services/OrgInfoService.d.ts +485 -0
  343. package/lib/services/OrgInfoService.js +1122 -0
  344. package/lib/services/OrgInfoService.js.map +1 -0
  345. package/lib/services/PollingService.d.ts +105 -0
  346. package/lib/services/PollingService.js +117 -0
  347. package/lib/services/PollingService.js.map +1 -0
  348. package/lib/services/ProfileRequestService.d.ts +186 -0
  349. package/lib/services/ProfileRequestService.js +555 -0
  350. package/lib/services/ProfileRequestService.js.map +1 -0
  351. package/lib/services/ProfilingDefinitionService.d.ts +535 -0
  352. package/lib/services/ProfilingDefinitionService.js +981 -0
  353. package/lib/services/ProfilingDefinitionService.js.map +1 -0
  354. package/lib/services/ProfilingExecutionService.d.ts +122 -0
  355. package/lib/services/ProfilingExecutionService.js +320 -0
  356. package/lib/services/ProfilingExecutionService.js.map +1 -0
  357. package/lib/services/ProfilingSummaryService.d.ts +292 -0
  358. package/lib/services/ProfilingSummaryService.js +685 -0
  359. package/lib/services/ProfilingSummaryService.js.map +1 -0
  360. package/lib/services/RecordTypeService.d.ts +129 -0
  361. package/lib/services/RecordTypeService.js +284 -0
  362. package/lib/services/RecordTypeService.js.map +1 -0
  363. package/lib/services/SFDMUService.d.ts +133 -0
  364. package/lib/services/SFDMUService.js +295 -0
  365. package/lib/services/SFDMUService.js.map +1 -0
  366. package/lib/services/TabDetectionService.d.ts +105 -0
  367. package/lib/services/TabDetectionService.js +206 -0
  368. package/lib/services/TabDetectionService.js.map +1 -0
  369. package/lib/services/UnconfigureMode.d.ts +74 -0
  370. package/lib/services/UnconfigureMode.js +378 -0
  371. package/lib/services/UnconfigureMode.js.map +1 -0
  372. package/lib/services/UserConfigurationService.d.ts +155 -0
  373. package/lib/services/UserConfigurationService.js +573 -0
  374. package/lib/services/UserConfigurationService.js.map +1 -0
  375. package/lib/services/UserConfigurationTypes.d.ts +181 -0
  376. package/lib/services/UserConfigurationTypes.js +14 -0
  377. package/lib/services/UserConfigurationTypes.js.map +1 -0
  378. package/lib/services/UserReadinessService.d.ts +330 -0
  379. package/lib/services/UserReadinessService.js +831 -0
  380. package/lib/services/UserReadinessService.js.map +1 -0
  381. package/lib/services/constants.d.ts +53 -0
  382. package/lib/services/constants.js +71 -0
  383. package/lib/services/constants.js.map +1 -0
  384. package/lib/services/namespace-constants.d.ts +1 -0
  385. package/lib/services/namespace-constants.js +11 -0
  386. package/lib/services/namespace-constants.js.map +1 -0
  387. package/lib/services/validation.d.ts +47 -0
  388. package/lib/services/validation.js +119 -0
  389. package/lib/services/validation.js.map +1 -0
  390. package/lib/utils/batch-processor.d.ts +13 -0
  391. package/lib/utils/batch-processor.js +39 -0
  392. package/lib/utils/batch-processor.js.map +1 -0
  393. package/lib/utils/formatting/availability-grid.d.ts +81 -0
  394. package/lib/utils/formatting/availability-grid.js +94 -0
  395. package/lib/utils/formatting/availability-grid.js.map +1 -0
  396. package/lib/utils/formatting/business-process-grid.d.ts +51 -0
  397. package/lib/utils/formatting/business-process-grid.js +58 -0
  398. package/lib/utils/formatting/business-process-grid.js.map +1 -0
  399. package/lib/utils/formatting/command-display.d.ts +154 -0
  400. package/lib/utils/formatting/command-display.js +154 -0
  401. package/lib/utils/formatting/command-display.js.map +1 -0
  402. package/lib/utils/formatting/definition-create-display.d.ts +118 -0
  403. package/lib/utils/formatting/definition-create-display.js +231 -0
  404. package/lib/utils/formatting/definition-create-display.js.map +1 -0
  405. package/lib/utils/formatting/empty-states.d.ts +35 -0
  406. package/lib/utils/formatting/empty-states.js +70 -0
  407. package/lib/utils/formatting/empty-states.js.map +1 -0
  408. package/lib/utils/formatting/errors.d.ts +33 -0
  409. package/lib/utils/formatting/errors.js +72 -0
  410. package/lib/utils/formatting/errors.js.map +1 -0
  411. package/lib/utils/formatting/field-types.d.ts +32 -0
  412. package/lib/utils/formatting/field-types.js +88 -0
  413. package/lib/utils/formatting/field-types.js.map +1 -0
  414. package/lib/utils/formatting/index.d.ts +29 -0
  415. package/lib/utils/formatting/index.js +28 -0
  416. package/lib/utils/formatting/index.js.map +1 -0
  417. package/lib/utils/formatting/indicators.d.ts +113 -0
  418. package/lib/utils/formatting/indicators.js +161 -0
  419. package/lib/utils/formatting/indicators.js.map +1 -0
  420. package/lib/utils/formatting/loading-messages.d.ts +37 -0
  421. package/lib/utils/formatting/loading-messages.js +50 -0
  422. package/lib/utils/formatting/loading-messages.js.map +1 -0
  423. package/lib/utils/formatting/namespace-display.d.ts +31 -0
  424. package/lib/utils/formatting/namespace-display.js +64 -0
  425. package/lib/utils/formatting/namespace-display.js.map +1 -0
  426. package/lib/utils/formatting/numbers.d.ts +73 -0
  427. package/lib/utils/formatting/numbers.js +187 -0
  428. package/lib/utils/formatting/numbers.js.map +1 -0
  429. package/lib/utils/formatting/object-describe-display.d.ts +114 -0
  430. package/lib/utils/formatting/object-describe-display.js +440 -0
  431. package/lib/utils/formatting/object-describe-display.js.map +1 -0
  432. package/lib/utils/formatting/object-list-display.d.ts +213 -0
  433. package/lib/utils/formatting/object-list-display.js +672 -0
  434. package/lib/utils/formatting/object-list-display.js.map +1 -0
  435. package/lib/utils/formatting/org-identity.d.ts +15 -0
  436. package/lib/utils/formatting/org-identity.js +28 -0
  437. package/lib/utils/formatting/org-identity.js.map +1 -0
  438. package/lib/utils/formatting/record-age-grid.d.ts +41 -0
  439. package/lib/utils/formatting/record-age-grid.js +56 -0
  440. package/lib/utils/formatting/record-age-grid.js.map +1 -0
  441. package/lib/utils/formatting/sections.d.ts +108 -0
  442. package/lib/utils/formatting/sections.js +150 -0
  443. package/lib/utils/formatting/sections.js.map +1 -0
  444. package/lib/utils/formatting/tables.d.ts +90 -0
  445. package/lib/utils/formatting/tables.js +113 -0
  446. package/lib/utils/formatting/tables.js.map +1 -0
  447. package/lib/utils/formatting/user-details-display.d.ts +101 -0
  448. package/lib/utils/formatting/user-details-display.js +425 -0
  449. package/lib/utils/formatting/user-details-display.js.map +1 -0
  450. package/lib/utils/pagination/index.d.ts +11 -0
  451. package/lib/utils/pagination/index.js +18 -0
  452. package/lib/utils/pagination/index.js.map +1 -0
  453. package/lib/utils/pagination/keypress-reader.d.ts +20 -0
  454. package/lib/utils/pagination/keypress-reader.js +63 -0
  455. package/lib/utils/pagination/keypress-reader.js.map +1 -0
  456. package/lib/utils/pagination/paginate-output.d.ts +48 -0
  457. package/lib/utils/pagination/paginate-output.js +136 -0
  458. package/lib/utils/pagination/paginate-output.js.map +1 -0
  459. package/messages/compatibility.check.md +71 -0
  460. package/messages/cuneiform.access.md +138 -0
  461. package/messages/definition.create.md +511 -0
  462. package/messages/definition.export.md +84 -0
  463. package/messages/definition.get.md +147 -0
  464. package/messages/definition.import.md +65 -0
  465. package/messages/definition.list.md +264 -0
  466. package/messages/definition.purge.md +318 -0
  467. package/messages/definition.update.md +118 -0
  468. package/messages/mcp.serve.md +66 -0
  469. package/messages/object.describe.md +201 -0
  470. package/messages/object.list.md +443 -0
  471. package/messages/org.details.md +386 -0
  472. package/messages/org.reset.md +71 -0
  473. package/messages/profile.md +231 -0
  474. package/messages/profile.request.cancel.md +143 -0
  475. package/messages/profile.request.delete.md +139 -0
  476. package/messages/profile.request.list.md +89 -0
  477. package/messages/summary.purge.md +218 -0
  478. package/messages/summary.reprofile.md +150 -0
  479. package/messages/summary.stop.md +157 -0
  480. package/messages/user.details.md +501 -0
  481. package/oclif.lock +2887 -2149
  482. package/oclif.manifest.json +2813 -31
  483. package/package.json +94 -19
  484. package/lib/commands/cuneiform/about.d.ts +0 -13
  485. package/lib/commands/cuneiform/about.js +0 -26
  486. package/lib/commands/cuneiform/about.js.map +0 -1
  487. package/lib/commands/hello/world.d.ts +0 -14
  488. package/lib/commands/hello/world.js +0 -27
  489. package/lib/commands/hello/world.js.map +0 -1
  490. package/lib/index.d.ts +0 -2
  491. package/lib/index.js +0 -2
  492. package/lib/index.js.map +0 -1
  493. package/messages/cuneiform.about.md +0 -19
  494. package/messages/hello.world.md +0 -29
@@ -0,0 +1,105 @@
1
+ import { CuneiformCommand } from '../../../base/cuneiform-command.js';
2
+ import { type BlockedDefinition } from '../../../operations/DefinitionPurgeOperation.js';
3
+ /**
4
+ * Command result type for JSON output.
5
+ */
6
+ export type DefinitionPurgeResult = {
7
+ /** Whether the operation was successful */
8
+ success: boolean;
9
+ /** Number of definitions deleted */
10
+ deleted: number;
11
+ /** Number of definitions skipped */
12
+ skipped: number;
13
+ /** Number of definitions that failed to delete */
14
+ failed: number;
15
+ /** Number of definitions queued (have related requests in queue) */
16
+ queued: number;
17
+ /** Total number of definitions processed */
18
+ total: number;
19
+ /** Whether this was a dry run */
20
+ dryRun: boolean;
21
+ /** Definitions blocked by summaries */
22
+ blockedBySummaries: BlockedDefinition[];
23
+ /** Whether the operation was cancelled by the user */
24
+ cancelled?: boolean;
25
+ /** Error message if failed */
26
+ error?: string;
27
+ };
28
+ /**
29
+ * Purges profiling definitions from a Salesforce org.
30
+ *
31
+ * Aligned with the definition create command's UX:
32
+ * - Inclusive AND filter model (--objects, --filter, --pattern, --method, --category, --status)
33
+ * - Per-definition progress output with [DELETED]/[SKIP]/[FAIL] indicators
34
+ * - Separate blocked sections with actionable guidance
35
+ * - Summary line: Deleted: X | Skipped: Y | Failed: Z | Total: N
36
+ * - --dry-run preview mode
37
+ */
38
+ export default class DefinitionPurge extends CuneiformCommand<DefinitionPurgeResult> {
39
+ static readonly summary: string;
40
+ static readonly description: string;
41
+ static readonly examples: string[];
42
+ static readonly flags: {
43
+ 'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
44
+ 'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
45
+ all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
46
+ keys: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
47
+ objects: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
48
+ filter: import("@oclif/core/interfaces").OptionFlag<"standard" | "custom" | undefined, import("@oclif/core/interfaces").CustomOptions>;
49
+ pattern: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
50
+ method: import("@oclif/core/interfaces").OptionFlag<"metadata" | "historical" | "comparative" | undefined, import("@oclif/core/interfaces").CustomOptions>;
51
+ category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
52
+ status: import("@oclif/core/interfaces").OptionFlag<"ERROR" | "NOT PROFILED" | "IN PROGRESS" | "SUCCESS" | "COMPLETE w/ FAILURES" | undefined, import("@oclif/core/interfaces").CustomOptions>;
53
+ namespace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
54
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
55
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
56
+ 'no-prompt': import("@oclif/core/interfaces").BooleanFlag<boolean>;
57
+ format: import("@oclif/core/interfaces").OptionFlag<"table" | "json", import("@oclif/core/interfaces").CustomOptions>;
58
+ };
59
+ /**
60
+ * Maps error codes to i18n message keys with optional parameter interpolation.
61
+ */
62
+ private static readonly ERROR_CODE_MAP;
63
+ private static readonly REASON_LABELS;
64
+ private static readonly QUEUED_REASON;
65
+ private static formatReason;
66
+ private static isQueuedError;
67
+ /**
68
+ * Renders a padded row for the progress table.
69
+ * The first column (#) is right-aligned; all others are left-aligned.
70
+ */
71
+ private static formatProgressRow;
72
+ /**
73
+ * Returns the status indicator for a progress event.
74
+ */
75
+ private static statusIndicator;
76
+ /**
77
+ * Computes column widths from header and row data.
78
+ * The first column (row number) gets a minimum width of 4.
79
+ */
80
+ private static computeColumnWidths;
81
+ /**
82
+ * Executes the purge command.
83
+ */
84
+ run(): Promise<DefinitionPurgeResult>;
85
+ /**
86
+ * Displays progress events as a dynamically-sized table.
87
+ */
88
+ private displayProgressTable;
89
+ /**
90
+ * Displays the categorized preview before user confirmation.
91
+ *
92
+ * Uses {@link paginateOutput} to page through large record sets interactively.
93
+ * Column widths are computed from ALL rows upfront so they remain consistent
94
+ * across pages. The header and separator are printed once before pagination.
95
+ *
96
+ * @param preview - Categorized preview data from the operation layer.
97
+ * @param skipPrompt - When true, renders all rows without interactive pagination.
98
+ * @returns Pagination result metadata, or undefined if no rows to display.
99
+ */
100
+ private displayPreview;
101
+ /**
102
+ * Displays purge results with create-aligned formatting.
103
+ */
104
+ private displayResults;
105
+ }
@@ -0,0 +1,533 @@
1
+ /*
2
+ * Copyright (c) 2026, PeerNova, Inc. All Rights Reserved.
3
+ * PROPRIETARY AND CONFIDENTIAL. Unauthorized copying, modification,
4
+ * or distribution is strictly prohibited. Use is governed by the
5
+ * Master Subscription Agreement (MSA) between PeerNova, Inc. and the
6
+ * licensee. See LICENSE file in the repo root.
7
+ */
8
+ import { Flags } from '@salesforce/sf-plugins-core';
9
+ import { Messages } from '@salesforce/core';
10
+ import { CuneiformCommand } from '../../../base/cuneiform-command.js';
11
+ import { ProfilingDefinitionService, } from '../../../services/ProfilingDefinitionService.js';
12
+ import { DefinitionPurgeOperation, PurgeErrorCodes, PURGE_CANCELLED_MESSAGE, } from '../../../operations/DefinitionPurgeOperation.js';
13
+ import { OrgInfoService } from '../../../services/OrgInfoService.js';
14
+ import { renderOrgContext, displaySummaryBox } from '../../../utils/formatting/command-display.js';
15
+ import { statusSymbol } from '../../../utils/formatting/indicators.js';
16
+ import { formatNumber } from '../../../utils/formatting/numbers.js';
17
+ import { paginateOutput } from '../../../utils/pagination/paginate-output.js';
18
+ import { createDefaultIO } from '../../../utils/pagination/keypress-reader.js';
19
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
20
+ const messages = Messages.loadMessages('@peernova/cuneiform-sf', 'definition.purge');
21
+ /**
22
+ * Purges profiling definitions from a Salesforce org.
23
+ *
24
+ * Aligned with the definition create command's UX:
25
+ * - Inclusive AND filter model (--objects, --filter, --pattern, --method, --category, --status)
26
+ * - Per-definition progress output with [DELETED]/[SKIP]/[FAIL] indicators
27
+ * - Separate blocked sections with actionable guidance
28
+ * - Summary line: Deleted: X | Skipped: Y | Failed: Z | Total: N
29
+ * - --dry-run preview mode
30
+ */
31
+ // eslint-disable-next-line sf-plugin/only-extend-SfCommand -- CuneiformCommand extends SfCommand with shared access gate logic
32
+ export default class DefinitionPurge extends CuneiformCommand {
33
+ static summary = messages.getMessage('summary');
34
+ static description = messages.getMessage('description');
35
+ static examples = messages.getMessages('examples');
36
+ // eslint-disable-next-line sf-plugin/spread-base-flags -- CuneiformCommand has no additional flags to spread
37
+ static flags = {
38
+ 'target-org': Flags.requiredOrg({
39
+ summary: messages.getMessage('flags.target-org.summary'),
40
+ char: 'o',
41
+ required: true,
42
+ }),
43
+ 'api-version': Flags.orgApiVersion(),
44
+ all: Flags.boolean({
45
+ summary: messages.getMessage('flags.all.summary'),
46
+ char: 'a',
47
+ }),
48
+ keys: Flags.string({
49
+ summary: messages.getMessage('flags.keys.summary'),
50
+ char: 'k',
51
+ multiple: true,
52
+ }),
53
+ objects: Flags.string({
54
+ summary: messages.getMessage('flags.objects.summary'),
55
+ char: 'b',
56
+ multiple: true,
57
+ }),
58
+ filter: Flags.option({
59
+ summary: messages.getMessage('flags.filter.summary'),
60
+ char: 'f',
61
+ options: ['standard', 'custom'],
62
+ })(),
63
+ pattern: Flags.string({
64
+ summary: messages.getMessage('flags.pattern.summary'),
65
+ char: 'p',
66
+ }),
67
+ method: Flags.option({
68
+ summary: messages.getMessage('flags.method.summary'),
69
+ char: 't',
70
+ options: ['metadata', 'historical', 'comparative'],
71
+ })(),
72
+ category: Flags.string({
73
+ summary: messages.getMessage('flags.category.summary'),
74
+ char: 'c',
75
+ }),
76
+ status: Flags.option({
77
+ summary: messages.getMessage('flags.status.summary'),
78
+ char: 's',
79
+ options: ['NOT PROFILED', 'IN PROGRESS', 'SUCCESS', 'COMPLETE w/ FAILURES', 'ERROR'],
80
+ })(),
81
+ namespace: Flags.string({
82
+ summary: messages.getMessage('flags.namespace.summary'),
83
+ char: 'n',
84
+ }),
85
+ limit: Flags.integer({
86
+ summary: messages.getMessage('flags.limit.summary'),
87
+ char: 'l',
88
+ min: 1,
89
+ default: 50,
90
+ }),
91
+ 'dry-run': Flags.boolean({
92
+ summary: messages.getMessage('flags.dry-run.summary'),
93
+ char: 'd',
94
+ default: false,
95
+ }),
96
+ 'no-prompt': Flags.boolean({
97
+ summary: messages.getMessage('flags.no-prompt.summary'),
98
+ char: 'y',
99
+ default: false,
100
+ }),
101
+ format: Flags.option({
102
+ summary: messages.getMessage('flags.format.summary'),
103
+ options: ['table', 'json'],
104
+ default: 'table',
105
+ })(),
106
+ };
107
+ /**
108
+ * Maps error codes to i18n message keys with optional parameter interpolation.
109
+ */
110
+ static ERROR_CODE_MAP = {
111
+ [PurgeErrorCodes.NO_SELECTION_CRITERIA]: 'errors.noSelectionCriteria',
112
+ [PurgeErrorCodes.NO_ELIGIBLE_DEFINITIONS]: 'errors.noEligibleDefinitions',
113
+ [PurgeErrorCodes.QUERY_FAILED]: 'errors.queryFailed',
114
+ [PurgeErrorCodes.DELETE_FAILED]: 'errors.deleteFailed',
115
+ };
116
+ // eslint-disable-next-line camelcase -- Keys match service-layer snake_case reason codes
117
+ static REASON_LABELS = {
118
+ // eslint-disable-next-line camelcase -- Service-layer reason code
119
+ has_summaries: messages.getMessage('reason.hasSummaries'),
120
+ // eslint-disable-next-line camelcase -- Service-layer reason code
121
+ not_found: messages.getMessage('reason.notFound'),
122
+ // eslint-disable-next-line camelcase -- Service-layer reason code
123
+ lookup_failed: messages.getMessage('reason.lookupFailed'),
124
+ };
125
+ static QUEUED_REASON = messages.getMessage('reason.queuedKeyword');
126
+ static formatReason(reason) {
127
+ return DefinitionPurge.REASON_LABELS[reason] ?? reason;
128
+ }
129
+ static isQueuedError(reason) {
130
+ return reason?.toLowerCase().includes(DefinitionPurge.QUEUED_REASON) ?? false;
131
+ }
132
+ /**
133
+ * Renders a padded row for the progress table.
134
+ * The first column (#) is right-aligned; all others are left-aligned.
135
+ */
136
+ static formatProgressRow(cols, widths) {
137
+ return ' ' + cols.map((col, i) => (i === 0 ? col.padStart(widths[i]) : col.padEnd(widths[i]))).join(' ');
138
+ }
139
+ /**
140
+ * Returns the status indicator for a progress event.
141
+ */
142
+ static statusIndicator(event) {
143
+ if (event.status === 'deleted')
144
+ return ` ${statusSymbol('success')}`;
145
+ if (event.status === 'skipped')
146
+ return ` ${statusSymbol('warning')} ${DefinitionPurge.formatReason(event.reason ?? '')}`;
147
+ return ` ${statusSymbol('error')} ${DefinitionPurge.formatReason(event.reason ?? '')}`;
148
+ }
149
+ /**
150
+ * Computes column widths from header and row data.
151
+ * The first column (row number) gets a minimum width of 4.
152
+ */
153
+ static computeColumnWidths(headers, rows) {
154
+ return headers.map((h, i) => Math.max(i === 0 ? 4 : h.length, ...rows.map((r) => r[i].length)));
155
+ }
156
+ /**
157
+ * Executes the purge command.
158
+ */
159
+ async run() {
160
+ const { flags } = await this.parse(DefinitionPurge);
161
+ const targetOrg = flags['target-org'].getUsername();
162
+ if (!targetOrg) {
163
+ this.error(messages.getMessage('errors.noTargetOrg'));
164
+ }
165
+ const dryRun = flags['dry-run'];
166
+ const noPrompt = flags['no-prompt'];
167
+ // Warn when --all and explicit --limit are combined (limit is ignored with --all)
168
+ if (flags.all && this.argv.some((a) => a === '--limit' || a === '-l')) {
169
+ this.warn(messages.getMessage('warnings.limitIgnoredWithAll'));
170
+ }
171
+ // Initialize services
172
+ const { facade, soqlAdapter, restAdapter } = await this.initConnection(flags);
173
+ const definitionService = new ProfilingDefinitionService({ soqlAdapter, restAdapter });
174
+ const orgInfoService = new OrgInfoService({ connectionFacade: facade, soqlAdapter });
175
+ const operation = new DefinitionPurgeOperation(definitionService);
176
+ // Collect progress events, then render after completion for proper column sizing
177
+ const progressEvents = [];
178
+ // Build operation options
179
+ const operationOptions = {
180
+ targetOrg,
181
+ all: flags.all,
182
+ keys: DefinitionPurge.parseMultiValueFlag(flags.keys, { caseInsensitive: true }),
183
+ objectNames: DefinitionPurge.parseMultiValueFlag(flags.objects, { caseInsensitive: true }),
184
+ filter: flags.filter,
185
+ pattern: flags.pattern,
186
+ method: flags.method,
187
+ category: flags.category,
188
+ status: flags.status,
189
+ namespace: flags.namespace,
190
+ limit: flags.limit,
191
+ dryRun,
192
+ noPrompt,
193
+ onDefinitionsFound: (count) => {
194
+ const foundKey = count === 1 ? 'output.definitionsFound.singular' : 'output.definitionsFound.plural';
195
+ this.spinner.stop(messages.getMessage(foundKey, [formatNumber(count)]));
196
+ // Start delete spinner immediately when prompts are skipped
197
+ if (noPrompt || dryRun) {
198
+ this.spinner.start(messages.getMessage('spinner.deletingDefinitions'));
199
+ }
200
+ },
201
+ onPreviewReady: async (preview) => {
202
+ // Display paginated preview table
203
+ const paginationResult = await this.displayPreview(preview, noPrompt);
204
+ // If user quit pagination early, treat as cancel
205
+ if (paginationResult?.action === 'quit')
206
+ return false;
207
+ // Nothing to delete — show message and abort without prompting
208
+ if (preview.deletable.length === 0) {
209
+ this.log(messages.getMessage('output.noDeletable'));
210
+ return false;
211
+ }
212
+ // For --json mode, skip interactive prompt
213
+ if (this.jsonEnabled())
214
+ return true;
215
+ // Prompt for confirmation
216
+ const confirmed = await this.confirm({
217
+ message: preview.deletable.length === 1
218
+ ? messages.getMessage('prompt.confirm.singular')
219
+ : messages.getMessage('prompt.confirm.plural', [String(preview.deletable.length)]),
220
+ });
221
+ if (confirmed) {
222
+ this.spinner.start(messages.getMessage('spinner.deletingDefinitions'));
223
+ }
224
+ return confirmed;
225
+ },
226
+ onProgress: (event) => {
227
+ progressEvents.push(event);
228
+ const counts = { deleted: 0, skipped: 0, failed: 0, queued: 0 };
229
+ for (const e of progressEvents) {
230
+ if (e.status === 'deleted')
231
+ counts.deleted++;
232
+ else if (e.status === 'skipped')
233
+ counts.skipped++;
234
+ else if (DefinitionPurge.isQueuedError(e.reason))
235
+ counts.queued++;
236
+ else
237
+ counts.failed++;
238
+ }
239
+ const parts = [`${formatNumber(event.current)}/${formatNumber(event.total)}`];
240
+ if (counts.deleted > 0)
241
+ parts.push(`${formatNumber(counts.deleted)} ${messages.getMessage('spinner.status.deleted')}`);
242
+ if (counts.skipped > 0)
243
+ parts.push(`${formatNumber(counts.skipped)} ${messages.getMessage('spinner.status.skipped')}`);
244
+ if (counts.failed > 0)
245
+ parts.push(`${formatNumber(counts.failed)} ${messages.getMessage('spinner.status.failed')}`);
246
+ if (counts.queued > 0)
247
+ parts.push(`${formatNumber(counts.queued)} ${messages.getMessage('spinner.status.queued')}`);
248
+ this.spinner.status = parts.join(', ');
249
+ },
250
+ };
251
+ // Fetch org identity first so it displays at the top
252
+ const modeText = dryRun ? `${messages.getMessage('output.initializing.dryRunMode')} ` : '';
253
+ this.log(messages.getMessage('output.initializing', [modeText]));
254
+ this.spinner.start(messages.getMessage('spinner.connecting'));
255
+ const orgIdentityResult = await orgInfoService.getOrgIdentity();
256
+ this.spinner.stop();
257
+ // Display org identity header (non-fatal if unavailable)
258
+ if (orgIdentityResult.success) {
259
+ this.log('');
260
+ this.log(renderOrgContext({
261
+ orgName: orgIdentityResult.data.organizationName,
262
+ orgId: orgIdentityResult.data.organizationId,
263
+ instanceUrl: facade.instanceUrl ?? '',
264
+ isSandbox: orgIdentityResult.data.isSandbox ?? false,
265
+ }));
266
+ }
267
+ // Execute purge
268
+ this.log('');
269
+ this.spinner.start(messages.getMessage('spinner.retrievingDefinitions'));
270
+ const result = await operation.execute(operationOptions);
271
+ this.spinner.stop();
272
+ // Handle no eligible definitions as a friendly message (not an error)
273
+ if (!result.success && result.errorCode === PurgeErrorCodes.NO_ELIGIBLE_DEFINITIONS) {
274
+ this.log('');
275
+ this.log(messages.getMessage('output.noEligible.message'));
276
+ this.log(messages.getMessage('output.noEligible.guidance'));
277
+ this.log('');
278
+ const zeroEntries = [
279
+ { key: messages.getMessage('output.summary.deleted'), value: formatNumber(0) },
280
+ { key: messages.getMessage('output.summary.skipped'), value: formatNumber(0) },
281
+ { key: messages.getMessage('output.summary.failed'), value: formatNumber(0) },
282
+ { key: messages.getMessage('output.summary.queued'), value: formatNumber(0) },
283
+ { key: messages.getMessage('output.summary.total'), value: formatNumber(0) },
284
+ ];
285
+ displaySummaryBox(this.log.bind(this), {
286
+ title: messages.getMessage('output.summaryHeader'),
287
+ entries: zeroEntries,
288
+ });
289
+ return {
290
+ success: true,
291
+ deleted: 0,
292
+ skipped: 0,
293
+ failed: 0,
294
+ queued: 0,
295
+ total: 0,
296
+ dryRun: dryRun ?? false,
297
+ blockedBySummaries: [],
298
+ };
299
+ }
300
+ // Handle user cancellation
301
+ if (result.success && result.message === PURGE_CANCELLED_MESSAGE) {
302
+ this.log('');
303
+ this.log(messages.getMessage('output.cancelled'));
304
+ return {
305
+ success: true,
306
+ deleted: 0,
307
+ skipped: 0,
308
+ failed: 0,
309
+ queued: 0,
310
+ total: result.data.total,
311
+ dryRun: dryRun ?? false,
312
+ cancelled: true,
313
+ blockedBySummaries: result.data.blockedBySummaries,
314
+ };
315
+ }
316
+ // Handle other failures as errors
317
+ if (!result.success) {
318
+ const errorMessage = DefinitionPurge.resolveErrorMessage(DefinitionPurge.ERROR_CODE_MAP, result.errorCode, result.message, messages);
319
+ this.error(errorMessage, { code: result.errorCode });
320
+ }
321
+ const data = result.data;
322
+ // Separate queued events from regular progress events
323
+ const queuedEvents = progressEvents.filter((e) => e.status === 'failed' && DefinitionPurge.isQueuedError(e.reason));
324
+ const regularEvents = progressEvents.filter((e) => !(e.status === 'failed' && DefinitionPurge.isQueuedError(e.reason)));
325
+ // Display progress table with dynamic column widths
326
+ this.displayProgressTable(regularEvents);
327
+ // Display results (blocked sections, summary)
328
+ this.displayResults(data, dryRun, flags.format, queuedEvents);
329
+ // Display warnings
330
+ if (result.warnings && result.warnings.length > 0) {
331
+ this.log('');
332
+ for (const warning of result.warnings) {
333
+ this.warn(warning);
334
+ }
335
+ }
336
+ return {
337
+ success: true,
338
+ deleted: data.deleted,
339
+ skipped: data.skipped,
340
+ failed: data.failed - queuedEvents.length,
341
+ queued: queuedEvents.length,
342
+ total: data.total,
343
+ dryRun: dryRun ?? false,
344
+ blockedBySummaries: data.blockedBySummaries,
345
+ };
346
+ }
347
+ /**
348
+ * Displays progress events as a dynamically-sized table.
349
+ */
350
+ displayProgressTable(events) {
351
+ if (events.length === 0)
352
+ return;
353
+ const headers = [
354
+ '#',
355
+ messages.getMessage('table.header.key'),
356
+ messages.getMessage('table.header.object'),
357
+ messages.getMessage('table.header.category'),
358
+ messages.getMessage('table.header.timeCategory'),
359
+ messages.getMessage('table.header.segmentCategory'),
360
+ messages.getMessage('table.header.status'),
361
+ messages.getMessage('table.header.deleted'),
362
+ ];
363
+ // Build row data
364
+ const rows = events.map((e, i) => {
365
+ const objectCol = e.objectLabel ?? e.objectName ?? '';
366
+ return [
367
+ String(i + 1),
368
+ e.key ?? '',
369
+ objectCol,
370
+ e.category ?? '',
371
+ e.timeCategory ?? '',
372
+ e.segmentCategory ?? '',
373
+ e.profilingStatus ?? '',
374
+ DefinitionPurge.statusIndicator(e),
375
+ ];
376
+ });
377
+ const widths = DefinitionPurge.computeColumnWidths(headers, rows);
378
+ this.log('');
379
+ this.log(DefinitionPurge.formatProgressRow(headers, widths));
380
+ this.log(' ' + widths.map((w) => '─'.repeat(w)).join(' '));
381
+ for (const row of rows) {
382
+ this.log(DefinitionPurge.formatProgressRow(row, widths));
383
+ }
384
+ }
385
+ /**
386
+ * Displays the categorized preview before user confirmation.
387
+ *
388
+ * Uses {@link paginateOutput} to page through large record sets interactively.
389
+ * Column widths are computed from ALL rows upfront so they remain consistent
390
+ * across pages. The header and separator are printed once before pagination.
391
+ *
392
+ * @param preview - Categorized preview data from the operation layer.
393
+ * @param skipPrompt - When true, renders all rows without interactive pagination.
394
+ * @returns Pagination result metadata, or undefined if no rows to display.
395
+ */
396
+ async displayPreview(preview, skipPrompt) {
397
+ const allDefs = [...preview.deletable, ...preview.blockedBySummaries];
398
+ if (allDefs.length === 0)
399
+ return undefined;
400
+ const headers = [
401
+ '#',
402
+ messages.getMessage('table.header.key'),
403
+ messages.getMessage('table.header.object'),
404
+ messages.getMessage('table.header.category'),
405
+ messages.getMessage('table.header.timeCategory'),
406
+ messages.getMessage('table.header.segmentCategory'),
407
+ messages.getMessage('table.header.status'),
408
+ messages.getMessage('table.header.canDelete'),
409
+ ];
410
+ const rows = allDefs.map((def, i) => {
411
+ let canDelete = ` ${statusSymbol('success')}`;
412
+ if (preview.blockedBySummaries.some((b) => b.id === def.id))
413
+ canDelete = ` ${statusSymbol('error')} ${messages.getMessage('reason.hasSummaries')}`;
414
+ // Show label only — fall back to API name if label is unavailable
415
+ const objectCol = def.objectLabel ?? def.objectName;
416
+ return [
417
+ String(i + 1),
418
+ def.key,
419
+ objectCol,
420
+ def.category ?? '',
421
+ def.timeCategory ?? '',
422
+ def.segmentCategory ?? '',
423
+ def.status,
424
+ canDelete,
425
+ ];
426
+ });
427
+ // Compute widths from ALL rows so columns stay aligned across pages
428
+ const widths = DefinitionPurge.computeColumnWidths(headers, rows);
429
+ // Print header and separator once before paginated rows
430
+ this.log('');
431
+ this.log(DefinitionPurge.formatProgressRow(headers, widths));
432
+ this.log(' ' + widths.map((w) => '─'.repeat(w)).join(' '));
433
+ // Paginate the row data — only create terminal IO when interactive prompts are possible
434
+ const isNonInteractive = skipPrompt === true || this.jsonEnabled();
435
+ const result = await paginateOutput(rows, (pageRows) => {
436
+ for (const row of pageRows) {
437
+ this.log(DefinitionPurge.formatProgressRow(row, widths));
438
+ }
439
+ }, {
440
+ noPrompt: skipPrompt,
441
+ jsonEnabled: this.jsonEnabled(),
442
+ io: isNonInteractive ? undefined : createDefaultIO(),
443
+ });
444
+ // Print summary after pagination completes
445
+ this.log('');
446
+ this.log(messages.getMessage('preview.summary', [
447
+ formatNumber(preview.deletable.length),
448
+ formatNumber(preview.blockedBySummaries.length),
449
+ ]));
450
+ this.log('');
451
+ return result;
452
+ }
453
+ /**
454
+ * Displays purge results with create-aligned formatting.
455
+ */
456
+ displayResults(data, dryRun, format, queuedEvents = []) {
457
+ this.log('');
458
+ // Dry-run banner
459
+ if (dryRun && data.preview) {
460
+ const bannerKey = data.preview.deletable === 1 ? 'dryRun.banner.singular' : 'dryRun.banner.plural';
461
+ this.log(messages.getMessage(bannerKey, [
462
+ formatNumber(data.preview.deletable),
463
+ formatNumber(data.preview.blockedBySummaries),
464
+ ]));
465
+ this.log('');
466
+ if (format === 'table' && data.preview.definitions.length > 0) {
467
+ const dryRunHeaders = [
468
+ '#',
469
+ messages.getMessage('table.column.key'),
470
+ messages.getMessage('table.column.name'),
471
+ messages.getMessage('table.column.object'),
472
+ messages.getMessage('table.column.status'),
473
+ messages.getMessage('table.column.action'),
474
+ ];
475
+ const dryRunRows = data.preview.definitions.map((d, i) => [
476
+ String(i + 1),
477
+ d.key,
478
+ d.name,
479
+ d.objectName,
480
+ d.status,
481
+ d.action.toUpperCase(),
482
+ ]);
483
+ const dryRunWidths = DefinitionPurge.computeColumnWidths(dryRunHeaders, dryRunRows);
484
+ this.log(DefinitionPurge.formatProgressRow(dryRunHeaders, dryRunWidths));
485
+ this.log(' ' + dryRunWidths.map((w) => '─'.repeat(w)).join(' '));
486
+ for (const row of dryRunRows) {
487
+ this.log(DefinitionPurge.formatProgressRow(row, dryRunWidths));
488
+ }
489
+ }
490
+ }
491
+ // Blocked by summaries section
492
+ if (data.blockedBySummaries.length > 0) {
493
+ this.log('');
494
+ this.log(messages.getMessage('blockedBySummaries.header'));
495
+ if (format === 'table') {
496
+ const bsHeaders = [
497
+ '#',
498
+ messages.getMessage('table.column.key'),
499
+ messages.getMessage('table.column.name'),
500
+ messages.getMessage('table.column.object'),
501
+ ];
502
+ const bsRows = data.blockedBySummaries.map((d, i) => [String(i + 1), d.key, d.name, d.objectName]);
503
+ const bsWidths = DefinitionPurge.computeColumnWidths(bsHeaders, bsRows);
504
+ this.log(DefinitionPurge.formatProgressRow(bsHeaders, bsWidths));
505
+ this.log(' ' + bsWidths.map((w) => '─'.repeat(w)).join(' '));
506
+ for (const row of bsRows) {
507
+ this.log(DefinitionPurge.formatProgressRow(row, bsWidths));
508
+ }
509
+ }
510
+ }
511
+ // Queued section (definitions with related requests in queue)
512
+ if (queuedEvents.length > 0) {
513
+ this.log('');
514
+ this.log(messages.getMessage('queued.header'));
515
+ this.displayProgressTable(queuedEvents);
516
+ }
517
+ // Summary section (aligned with create command)
518
+ const queuedCount = queuedEvents.length;
519
+ const adjustedFailed = data.failed - queuedCount;
520
+ const summaryEntries = [
521
+ { key: messages.getMessage('output.summary.deleted'), value: formatNumber(data.deleted) },
522
+ { key: messages.getMessage('output.summary.skipped'), value: formatNumber(data.skipped) },
523
+ { key: messages.getMessage('output.summary.failed'), value: formatNumber(adjustedFailed) },
524
+ { key: messages.getMessage('output.summary.queued'), value: formatNumber(queuedCount) },
525
+ { key: messages.getMessage('output.summary.total'), value: formatNumber(data.total) },
526
+ ];
527
+ displaySummaryBox(this.log.bind(this), {
528
+ title: messages.getMessage('output.summaryHeader'),
529
+ entries: summaryEntries,
530
+ });
531
+ }
532
+ }
533
+ //# sourceMappingURL=purge.js.map