@hubspot/cli 8.3.0 → 8.4.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) hide show
  1. package/bin/cli.js +2 -0
  2. package/commands/account/auth.js +12 -22
  3. package/commands/account/clean.js +5 -6
  4. package/commands/account/createOverride.js +7 -7
  5. package/commands/account/info.js +2 -1
  6. package/commands/account/list.js +3 -5
  7. package/commands/account/remove.js +2 -3
  8. package/commands/account/removeOverride.js +8 -10
  9. package/commands/account/rename.js +5 -6
  10. package/commands/account/use.js +8 -19
  11. package/commands/api.d.ts +10 -0
  12. package/commands/api.js +164 -0
  13. package/commands/app/migrate.js +8 -8
  14. package/commands/app/secret/add.js +6 -7
  15. package/commands/app/secret/delete.js +9 -10
  16. package/commands/app/secret/list.js +6 -7
  17. package/commands/app/secret/update.js +8 -9
  18. package/commands/auth.js +12 -12
  19. package/commands/cms/app/create.js +9 -5
  20. package/commands/cms/convertFields.js +8 -8
  21. package/commands/cms/delete.js +2 -3
  22. package/commands/cms/fetch.js +7 -7
  23. package/commands/cms/function/create.js +9 -5
  24. package/commands/cms/function/deploy.js +2 -3
  25. package/commands/cms/function/list.js +11 -7
  26. package/commands/cms/function/logs.js +17 -23
  27. package/commands/cms/function/server.js +2 -3
  28. package/commands/cms/getReactModule.js +7 -8
  29. package/commands/cms/lighthouseScore.js +25 -24
  30. package/commands/cms/lint.js +4 -5
  31. package/commands/cms/list.js +5 -6
  32. package/commands/cms/module/create.js +9 -5
  33. package/commands/cms/module/marketplace-validate.js +7 -8
  34. package/commands/cms/mv.js +2 -3
  35. package/commands/cms/template/create.js +10 -6
  36. package/commands/cms/theme/create.js +5 -5
  37. package/commands/cms/theme/generate-selectors.js +5 -4
  38. package/commands/cms/theme/marketplace-validate.js +8 -9
  39. package/commands/cms/theme/preview.js +16 -8
  40. package/commands/cms/upload.js +15 -12
  41. package/commands/cms/watch.js +5 -5
  42. package/commands/cms/webpack/create.js +5 -5
  43. package/commands/completion.js +3 -5
  44. package/commands/config/migrate.js +6 -7
  45. package/commands/config/set.js +5 -6
  46. package/commands/customObject/create.js +4 -5
  47. package/commands/customObject/createSchema.js +4 -5
  48. package/commands/customObject/deleteSchema.js +4 -5
  49. package/commands/customObject/fetchAllSchemas.js +2 -3
  50. package/commands/customObject/fetchSchema.js +2 -3
  51. package/commands/customObject/listSchemas.js +2 -3
  52. package/commands/customObject/updateSchema.js +4 -5
  53. package/commands/doctor.js +8 -8
  54. package/commands/feedback.js +6 -4
  55. package/commands/filemanager/fetch.js +5 -6
  56. package/commands/filemanager/upload.js +5 -5
  57. package/commands/getStarted.js +14 -16
  58. package/commands/hubdb/clear.js +5 -6
  59. package/commands/hubdb/create.js +4 -5
  60. package/commands/hubdb/delete.js +8 -9
  61. package/commands/hubdb/fetch.js +5 -6
  62. package/commands/hubdb/list.js +16 -14
  63. package/commands/init.js +14 -17
  64. package/commands/mcp/setup.js +5 -6
  65. package/commands/mcp/start.js +2 -3
  66. package/commands/open.js +4 -5
  67. package/commands/project/add.js +10 -5
  68. package/commands/project/create.js +10 -10
  69. package/commands/project/delete.d.ts +7 -0
  70. package/commands/project/delete.js +74 -0
  71. package/commands/project/deploy.js +36 -34
  72. package/commands/project/dev/deprecatedFlow.js +42 -15
  73. package/commands/project/dev/index.d.ts +3 -3
  74. package/commands/project/dev/index.js +24 -30
  75. package/commands/project/dev/unifiedFlow.js +37 -14
  76. package/commands/project/download.js +10 -11
  77. package/commands/project/info.d.ts +4 -0
  78. package/commands/project/info.js +67 -0
  79. package/commands/project/installDeps.js +9 -6
  80. package/commands/project/lint.js +11 -8
  81. package/commands/project/list.js +14 -14
  82. package/commands/project/listBuilds.js +8 -6
  83. package/commands/project/logs.js +5 -6
  84. package/commands/project/migrate.js +8 -8
  85. package/commands/project/open.js +5 -6
  86. package/commands/project/profile/add.js +12 -8
  87. package/commands/project/profile/delete.js +15 -11
  88. package/commands/project/updateDeps.js +9 -6
  89. package/commands/project/upload.js +31 -17
  90. package/commands/project/validate.js +11 -11
  91. package/commands/project/watch.js +20 -20
  92. package/commands/project.js +4 -0
  93. package/commands/sandbox/create.js +15 -15
  94. package/commands/sandbox/delete.js +13 -14
  95. package/commands/secret/addSecret.js +6 -7
  96. package/commands/secret/deleteSecret.js +5 -6
  97. package/commands/secret/listSecret.js +2 -3
  98. package/commands/secret/updateSecret.js +4 -5
  99. package/commands/testAccount/create.d.ts +1 -1
  100. package/commands/testAccount/create.js +20 -16
  101. package/commands/testAccount/createConfig.js +7 -8
  102. package/commands/testAccount/delete.js +27 -18
  103. package/commands/testAccount/importData.js +6 -7
  104. package/commands/upgrade.js +9 -10
  105. package/lang/en.d.ts +114 -5
  106. package/lang/en.js +111 -5
  107. package/lib/accountAuth.js +2 -2
  108. package/lib/buildAccount.js +3 -3
  109. package/lib/doctor/Diagnosis.js +5 -5
  110. package/lib/errorHandlers/index.js +4 -3
  111. package/lib/errorHandlers/suppressError.js +4 -0
  112. package/lib/errors/PromptExitError.d.ts +4 -2
  113. package/lib/errors/PromptExitError.js +3 -0
  114. package/lib/process.d.ts +1 -1
  115. package/lib/process.js +10 -3
  116. package/lib/projects/delete.d.ts +13 -0
  117. package/lib/projects/delete.js +193 -0
  118. package/lib/projects/localDev/AppDevModeInterface.js +11 -11
  119. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +3 -1
  120. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
  121. package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
  122. package/lib/projects/localDev/DevSessionManager.js +31 -19
  123. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +3 -0
  124. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +16 -12
  125. package/lib/projects/localDev/LocalDevProcess.js +6 -5
  126. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  127. package/lib/projects/localDev/LocalDevState.js +3 -1
  128. package/lib/projects/localDev/helpers/account.d.ts +4 -3
  129. package/lib/projects/localDev/helpers/account.js +16 -19
  130. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  131. package/lib/projects/localDev/helpers/process.js +4 -10
  132. package/lib/projects/localDev/helpers/project.d.ts +4 -3
  133. package/lib/projects/localDev/helpers/project.js +31 -15
  134. package/lib/projects/projectInfo.d.ts +5 -0
  135. package/lib/projects/projectInfo.js +82 -0
  136. package/lib/projects/projectProfiles.d.ts +1 -2
  137. package/lib/projects/projectProfiles.js +5 -17
  138. package/lib/prompts/createApiSamplePrompt.js +4 -0
  139. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  140. package/lib/prompts/projectProfilePrompt.js +46 -0
  141. package/lib/prompts/promptUtils.js +3 -2
  142. package/lib/prompts/selectHubDBTablePrompt.js +2 -2
  143. package/lib/prompts/selectPublicAppForMigrationPrompt.js +2 -2
  144. package/lib/theme/cmsDevServerProcess.d.ts +2 -0
  145. package/lib/theme/cmsDevServerProcess.js +7 -6
  146. package/lib/ui/SpinniesManager.d.ts +1 -0
  147. package/lib/ui/SpinniesManager.js +20 -6
  148. package/lib/ui/spinniesUtils.d.ts +0 -1
  149. package/lib/ui/spinniesUtils.js +6 -16
  150. package/lib/usageTracking.d.ts +3 -4
  151. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  152. package/lib/yargs/makeYargsBuilder.js +33 -0
  153. package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
  154. package/lib/yargs/makeYargsHandlerWithUsageTracking.js +95 -0
  155. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  156. package/lib/yargs/strictEnforceBoolean.js +13 -0
  157. package/lib/yargsUtils.d.ts +3 -16
  158. package/lib/yargsUtils.js +3 -48
  159. package/package.json +9 -4
  160. package/types/LocalDev.d.ts +5 -0
  161. package/types/Projects.d.ts +19 -0
  162. package/types/Yargs.d.ts +18 -1
  163. package/api/__tests__/migrate.test.d.ts +0 -1
  164. package/api/__tests__/migrate.test.js +0 -199
  165. package/commands/__tests__/account.test.d.ts +0 -1
  166. package/commands/__tests__/account.test.js +0 -69
  167. package/commands/__tests__/auth.test.d.ts +0 -1
  168. package/commands/__tests__/auth.test.js +0 -43
  169. package/commands/__tests__/cms.test.d.ts +0 -1
  170. package/commands/__tests__/cms.test.js +0 -87
  171. package/commands/__tests__/config.test.d.ts +0 -1
  172. package/commands/__tests__/config.test.js +0 -44
  173. package/commands/__tests__/customObject.test.d.ts +0 -1
  174. package/commands/__tests__/customObject.test.js +0 -68
  175. package/commands/__tests__/doctor.test.d.ts +0 -1
  176. package/commands/__tests__/doctor.test.js +0 -132
  177. package/commands/__tests__/feedback.test.d.ts +0 -1
  178. package/commands/__tests__/feedback.test.js +0 -24
  179. package/commands/__tests__/filemanager.test.d.ts +0 -1
  180. package/commands/__tests__/filemanager.test.js +0 -45
  181. package/commands/__tests__/getStarted.test.d.ts +0 -1
  182. package/commands/__tests__/getStarted.test.js +0 -173
  183. package/commands/__tests__/hubdb.test.d.ts +0 -1
  184. package/commands/__tests__/hubdb.test.js +0 -50
  185. package/commands/__tests__/init.test.d.ts +0 -1
  186. package/commands/__tests__/init.test.js +0 -42
  187. package/commands/__tests__/mcp.test.d.ts +0 -1
  188. package/commands/__tests__/mcp.test.js +0 -46
  189. package/commands/__tests__/open.test.d.ts +0 -1
  190. package/commands/__tests__/open.test.js +0 -58
  191. package/commands/__tests__/project.test.d.ts +0 -1
  192. package/commands/__tests__/project.test.js +0 -125
  193. package/commands/__tests__/sandbox.test.d.ts +0 -1
  194. package/commands/__tests__/sandbox.test.js +0 -44
  195. package/commands/__tests__/secret.test.d.ts +0 -1
  196. package/commands/__tests__/secret.test.js +0 -49
  197. package/commands/__tests__/testAccount.test.d.ts +0 -1
  198. package/commands/__tests__/testAccount.test.js +0 -57
  199. package/commands/__tests__/upgrade.test.d.ts +0 -1
  200. package/commands/__tests__/upgrade.test.js +0 -309
  201. package/commands/account/__tests__/auth.test.d.ts +0 -1
  202. package/commands/account/__tests__/auth.test.js +0 -206
  203. package/commands/account/__tests__/clean.test.d.ts +0 -1
  204. package/commands/account/__tests__/clean.test.js +0 -28
  205. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  206. package/commands/account/__tests__/createOverride.test.js +0 -32
  207. package/commands/account/__tests__/info.test.d.ts +0 -1
  208. package/commands/account/__tests__/info.test.js +0 -28
  209. package/commands/account/__tests__/list.test.d.ts +0 -1
  210. package/commands/account/__tests__/list.test.js +0 -153
  211. package/commands/account/__tests__/remove.test.d.ts +0 -1
  212. package/commands/account/__tests__/remove.test.js +0 -36
  213. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  214. package/commands/account/__tests__/removeOverride.js +0 -25
  215. package/commands/account/__tests__/rename.test.d.ts +0 -1
  216. package/commands/account/__tests__/rename.test.js +0 -82
  217. package/commands/account/__tests__/use.test.d.ts +0 -1
  218. package/commands/account/__tests__/use.test.js +0 -170
  219. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  220. package/commands/app/__tests__/migrate.test.js +0 -111
  221. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  222. package/commands/app/secret/__tests__/add.test.js +0 -140
  223. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  224. package/commands/app/secret/__tests__/delete.test.js +0 -28
  225. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  226. package/commands/app/secret/__tests__/list.test.js +0 -25
  227. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  228. package/commands/app/secret/__tests__/update.test.js +0 -28
  229. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  230. package/commands/cms/__tests__/delete.test.js +0 -39
  231. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  232. package/commands/cms/__tests__/fetch.test.js +0 -156
  233. package/commands/cms/__tests__/function.test.d.ts +0 -1
  234. package/commands/cms/__tests__/function.test.js +0 -50
  235. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  236. package/commands/cms/__tests__/lint.test.js +0 -33
  237. package/commands/cms/__tests__/list.test.d.ts +0 -1
  238. package/commands/cms/__tests__/list.test.js +0 -42
  239. package/commands/cms/__tests__/module.test.d.ts +0 -1
  240. package/commands/cms/__tests__/module.test.js +0 -45
  241. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  242. package/commands/cms/__tests__/mv.test.js +0 -46
  243. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  244. package/commands/cms/__tests__/theme.test.js +0 -54
  245. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  246. package/commands/cms/__tests__/upload.test.js +0 -312
  247. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  248. package/commands/cms/__tests__/watch.test.js +0 -204
  249. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  250. package/commands/cms/function/__tests__/logs.test.js +0 -70
  251. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  252. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  253. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  254. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  255. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  256. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  257. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  258. package/commands/customObject/__tests__/create.test.js +0 -40
  259. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  260. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  261. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  262. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  263. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  264. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  265. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  266. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  267. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  268. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  269. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  270. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  271. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  272. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  273. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  274. package/commands/filemanager/__tests__/upload.test.js +0 -191
  275. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  276. package/commands/hubdb/__tests__/clear.test.js +0 -28
  277. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  278. package/commands/hubdb/__tests__/create.test.js +0 -28
  279. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  280. package/commands/hubdb/__tests__/delete.test.js +0 -28
  281. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  282. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  283. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  284. package/commands/hubdb/__tests__/list.test.js +0 -88
  285. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  286. package/commands/mcp/__tests__/setup.test.js +0 -26
  287. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  288. package/commands/mcp/__tests__/start.test.js +0 -144
  289. package/commands/project/__tests__/add.test.d.ts +0 -1
  290. package/commands/project/__tests__/add.test.js +0 -107
  291. package/commands/project/__tests__/create.test.d.ts +0 -1
  292. package/commands/project/__tests__/create.test.js +0 -97
  293. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  294. package/commands/project/__tests__/deploy.test.js +0 -307
  295. package/commands/project/__tests__/dev.test.d.ts +0 -1
  296. package/commands/project/__tests__/dev.test.js +0 -273
  297. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  298. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  299. package/commands/project/__tests__/download.test.d.ts +0 -1
  300. package/commands/project/__tests__/download.test.js +0 -39
  301. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  302. package/commands/project/__tests__/installDeps.test.js +0 -140
  303. package/commands/project/__tests__/lint.test.d.ts +0 -1
  304. package/commands/project/__tests__/lint.test.js +0 -704
  305. package/commands/project/__tests__/list.test.d.ts +0 -1
  306. package/commands/project/__tests__/list.test.js +0 -31
  307. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  308. package/commands/project/__tests__/listBuilds.test.js +0 -38
  309. package/commands/project/__tests__/logs.test.d.ts +0 -1
  310. package/commands/project/__tests__/logs.test.js +0 -202
  311. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  312. package/commands/project/__tests__/migrate.test.js +0 -106
  313. package/commands/project/__tests__/open.test.d.ts +0 -1
  314. package/commands/project/__tests__/open.test.js +0 -39
  315. package/commands/project/__tests__/profile.test.d.ts +0 -1
  316. package/commands/project/__tests__/profile.test.js +0 -42
  317. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  318. package/commands/project/__tests__/updateDeps.test.js +0 -140
  319. package/commands/project/__tests__/upload.test.d.ts +0 -1
  320. package/commands/project/__tests__/upload.test.js +0 -234
  321. package/commands/project/__tests__/validate.test.d.ts +0 -1
  322. package/commands/project/__tests__/validate.test.js +0 -381
  323. package/commands/project/__tests__/watch.test.d.ts +0 -1
  324. package/commands/project/__tests__/watch.test.js +0 -35
  325. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  326. package/commands/sandbox/__tests__/create.test.js +0 -198
  327. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  328. package/commands/sandbox/__tests__/delete.test.js +0 -31
  329. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  330. package/commands/secret/__tests__/addSecret.test.js +0 -162
  331. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  332. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  333. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  334. package/commands/secret/__tests__/listSecret.test.js +0 -29
  335. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  336. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  337. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  338. package/commands/testAccount/__tests__/create.test.js +0 -106
  339. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  340. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  341. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  342. package/commands/testAccount/__tests__/delete.test.js +0 -29
  343. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  344. package/commands/testAccount/__tests__/importData.test.js +0 -92
  345. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  346. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  347. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  348. package/lib/__tests__/accountAuth.test.js +0 -258
  349. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  350. package/lib/__tests__/accountTypes.test.js +0 -98
  351. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  352. package/lib/__tests__/buildAccount.test.js +0 -211
  353. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  354. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  355. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  356. package/lib/__tests__/commandSuggestion.test.js +0 -121
  357. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  358. package/lib/__tests__/commonOpts.test.js +0 -80
  359. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  360. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  361. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  362. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  363. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  364. package/lib/__tests__/hasFeature.test.js +0 -167
  365. package/lib/__tests__/http.test.d.ts +0 -1
  366. package/lib/__tests__/http.test.js +0 -40
  367. package/lib/__tests__/importData.test.d.ts +0 -1
  368. package/lib/__tests__/importData.test.js +0 -98
  369. package/lib/__tests__/npmCli.test.d.ts +0 -1
  370. package/lib/__tests__/npmCli.test.js +0 -84
  371. package/lib/__tests__/oauth.test.d.ts +0 -1
  372. package/lib/__tests__/oauth.test.js +0 -109
  373. package/lib/__tests__/parsing.test.d.ts +0 -1
  374. package/lib/__tests__/parsing.test.js +0 -34
  375. package/lib/__tests__/polling.test.d.ts +0 -1
  376. package/lib/__tests__/polling.test.js +0 -76
  377. package/lib/__tests__/process.test.d.ts +0 -1
  378. package/lib/__tests__/process.test.js +0 -89
  379. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  380. package/lib/__tests__/sandboxes.test.js +0 -128
  381. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  382. package/lib/__tests__/serverlessLogs.test.js +0 -163
  383. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  384. package/lib/__tests__/usageTracking.test.js +0 -197
  385. package/lib/__tests__/validation.test.d.ts +0 -1
  386. package/lib/__tests__/validation.test.js +0 -143
  387. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  388. package/lib/__tests__/yargsUtils.test.js +0 -124
  389. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  390. package/lib/app/__tests__/migrate.test.js +0 -638
  391. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  392. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  393. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  394. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  395. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  396. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  397. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  398. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  399. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  400. package/lib/mcp/__tests__/setup.test.js +0 -523
  401. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  402. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  403. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  404. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  405. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  406. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  407. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  408. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  409. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  410. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  411. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  412. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  413. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  414. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  415. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  416. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  417. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  418. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  419. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  420. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  421. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  422. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  423. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  424. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  425. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  426. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  427. package/lib/projects/__tests__/components.test.d.ts +0 -1
  428. package/lib/projects/__tests__/components.test.js +0 -440
  429. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  430. package/lib/projects/__tests__/deploy.test.js +0 -231
  431. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  432. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  433. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  434. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  435. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  436. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  437. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  438. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  439. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  440. package/lib/projects/__tests__/projects.test.js +0 -58
  441. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  442. package/lib/projects/__tests__/structure.test.js +0 -210
  443. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  444. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  445. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  446. package/lib/projects/__tests__/upload.test.js +0 -183
  447. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  448. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  449. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  450. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  451. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  452. package/lib/projects/create/__tests__/legacy.test.js +0 -72
  453. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  454. package/lib/projects/create/__tests__/v2.test.js +0 -257
  455. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  456. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  457. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  458. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  459. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  460. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  461. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  462. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  463. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  464. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  465. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  466. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  467. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  468. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  469. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  470. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  471. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  472. package/lib/theme/__tests__/migrate.test.js +0 -247
  473. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  474. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  475. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  476. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  477. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  478. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
  479. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  480. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
  481. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  482. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
  483. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  484. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
  485. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  486. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
  487. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  488. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
  489. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  490. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
  491. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  492. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -131
  493. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  494. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
  495. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  496. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
  497. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  498. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  499. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  500. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  501. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  502. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
  503. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  504. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  505. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  506. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  507. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  508. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  509. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  510. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  511. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  512. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  513. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  514. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
  515. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  516. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  517. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  518. package/mcp-server/utils/__tests__/command.test.js +0 -275
  519. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  520. package/mcp-server/utils/__tests__/content.test.js +0 -164
  521. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  522. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
@@ -7,30 +7,29 @@ import { commands, lib } from '../../lang/en.js';
7
7
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
8
8
  import { uiFeatureHighlight, uiBetaTag } from '../../lib/ui/index.js';
9
9
  import { SANDBOX_TYPE_MAP, validateSandboxUsageLimits, } from '../../lib/sandboxes.js';
10
- import { trackCommandUsage } from '../../lib/usageTracking.js';
11
10
  import { sandboxTypePrompt } from '../../lib/prompts/sandboxesPrompt.js';
12
11
  import { promptUser } from '../../lib/prompts/promptUtils.js';
13
12
  import { logError } from '../../lib/errorHandlers/index.js';
14
13
  import { buildV2Sandbox } from '../../lib/buildAccount.js';
15
14
  import { hubspotAccountNamePrompt } from '../../lib/prompts/accountNamePrompt.js';
15
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
16
16
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
17
17
  const command = 'create';
18
18
  const describe = uiBetaTag(commands.sandbox.subcommands.create.describe, false);
19
19
  async function handler(args) {
20
- const { name, type, force, derivedAccountId } = args;
20
+ const { name, type, force, derivedAccountId, exit } = args;
21
21
  const accountConfig = getConfigAccountById(derivedAccountId);
22
22
  const env = getConfigAccountEnvironment(derivedAccountId);
23
- trackCommandUsage('sandbox-create', {}, derivedAccountId);
24
23
  // Check if account config exists
25
24
  if (!accountConfig) {
26
25
  uiLogger.error(commands.sandbox.subcommands.create.failure.noAccountConfig(derivedAccountId));
27
- process.exit(EXIT_CODES.ERROR);
26
+ return exit(EXIT_CODES.ERROR);
28
27
  }
29
28
  // Default account is not a production portal
30
29
  if (accountConfig.accountType &&
31
30
  accountConfig.accountType !== HUBSPOT_ACCOUNT_TYPES.STANDARD) {
32
31
  uiLogger.error(commands.sandbox.subcommands.create.failure.invalidAccountType(HUBSPOT_ACCOUNT_TYPE_STRINGS[HUBSPOT_ACCOUNT_TYPES[accountConfig.accountType]], accountConfig.name || ''));
33
- process.exit(EXIT_CODES.ERROR);
32
+ return exit(EXIT_CODES.ERROR);
34
33
  }
35
34
  let typePrompt;
36
35
  let namePrompt;
@@ -40,7 +39,7 @@ async function handler(args) {
40
39
  }
41
40
  else {
42
41
  uiLogger.error(commands.sandbox.subcommands.create.failure.optionMissing.type);
43
- process.exit(EXIT_CODES.ERROR);
42
+ return exit(EXIT_CODES.ERROR);
44
43
  }
45
44
  }
46
45
  const sandboxType = type
@@ -64,7 +63,7 @@ async function handler(args) {
64
63
  else {
65
64
  logError(err);
66
65
  }
67
- process.exit(EXIT_CODES.ERROR);
66
+ return exit(EXIT_CODES.ERROR);
68
67
  }
69
68
  if (!name) {
70
69
  if (!force) {
@@ -72,14 +71,15 @@ async function handler(args) {
72
71
  }
73
72
  else {
74
73
  uiLogger.error(commands.sandbox.subcommands.create.failure.optionMissing.name);
75
- process.exit(EXIT_CODES.ERROR);
74
+ return exit(EXIT_CODES.ERROR);
76
75
  }
77
76
  }
78
- const sandboxName = name || (namePrompt && namePrompt.name);
79
- if (!sandboxName) {
77
+ const maybeSandboxName = name || (namePrompt && namePrompt.name);
78
+ if (!maybeSandboxName) {
80
79
  uiLogger.error(commands.sandbox.subcommands.create.failure.optionMissing.name);
81
- process.exit(EXIT_CODES.ERROR);
80
+ return exit(EXIT_CODES.ERROR);
82
81
  }
82
+ const sandboxName = maybeSandboxName;
83
83
  let contactRecordsSyncPromptResult = false;
84
84
  if (!force) {
85
85
  const isStandardSandbox = sandboxType === HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX;
@@ -101,7 +101,7 @@ async function handler(args) {
101
101
  // Check if sandbox account config exists
102
102
  if (!sandboxAccountConfig) {
103
103
  uiLogger.error(commands.sandbox.subcommands.create.failure.noSandboxAccountConfig(result.sandbox.sandboxHubId));
104
- process.exit(EXIT_CODES.ERROR);
104
+ return exit(EXIT_CODES.ERROR);
105
105
  }
106
106
  const highlightItems = ['accountsUseCommand', 'projectCreateCommand'];
107
107
  if (sandboxType === HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX) {
@@ -111,11 +111,11 @@ async function handler(args) {
111
111
  highlightItems.push('projectUploadCommand');
112
112
  }
113
113
  uiFeatureHighlight(highlightItems);
114
- process.exit(EXIT_CODES.SUCCESS);
114
+ return exit(EXIT_CODES.SUCCESS);
115
115
  }
116
116
  catch (error) {
117
117
  // Errors are logged in util functions
118
- process.exit(EXIT_CODES.ERROR);
118
+ return exit(EXIT_CODES.ERROR);
119
119
  }
120
120
  }
121
121
  function sandboxCreateBuilder(yargs) {
@@ -150,7 +150,7 @@ const builder = makeYargsBuilder(sandboxCreateBuilder, command, describe, {
150
150
  const sandboxCreateCommand = {
151
151
  command,
152
152
  describe,
153
- handler,
153
+ handler: makeYargsHandlerWithUsageTracking('sandbox-create', handler),
154
154
  builder,
155
155
  };
156
156
  export default sandboxCreateCommand;
@@ -4,7 +4,6 @@ import { deleteSandbox } from '@hubspot/local-dev-lib/api/sandboxHubs';
4
4
  import { getConfigAccountEnvironment, removeAccountFromConfig, setConfigAccountAsDefault, getAllConfigAccounts, getConfigAccountIfExists, getConfigDefaultAccountIfExists, } from '@hubspot/local-dev-lib/config';
5
5
  import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
6
6
  import { getValidEnv } from '@hubspot/local-dev-lib/environment';
7
- import { trackCommandUsage } from '../../lib/usageTracking.js';
8
7
  import { logError, debugError } from '../../lib/errorHandlers/index.js';
9
8
  import { commands } from '../../lang/en.js';
10
9
  import { deleteSandboxPrompt } from '../../lib/prompts/sandboxesPrompt.js';
@@ -12,12 +11,12 @@ import { selectAccountFromConfig } from '../../lib/prompts/accountsPrompt.js';
12
11
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
13
12
  import { promptUser } from '../../lib/prompts/promptUtils.js';
14
13
  import { uiAuthCommandReference, uiBetaTag } from '../../lib/ui/index.js';
14
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
15
15
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
16
16
  const command = 'delete';
17
17
  const describe = uiBetaTag(commands.sandbox.subcommands.delete.describe, false);
18
18
  async function handler(args) {
19
- const { userProvidedAccount, derivedAccountId, force } = args;
20
- trackCommandUsage('sandbox-delete', {}, derivedAccountId);
19
+ const { userProvidedAccount, force, exit } = args;
21
20
  let accountPrompt;
22
21
  if (!userProvidedAccount) {
23
22
  if (!force) {
@@ -27,19 +26,19 @@ async function handler(args) {
27
26
  // Account is required, throw error if force flag is present and no account is specified
28
27
  uiLogger.log('');
29
28
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noAccount);
30
- process.exit(EXIT_CODES.ERROR);
29
+ return exit(EXIT_CODES.ERROR);
31
30
  }
32
31
  if (!accountPrompt) {
33
32
  uiLogger.log('');
34
33
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noSandboxAccounts);
35
- process.exit(EXIT_CODES.ERROR);
34
+ return exit(EXIT_CODES.ERROR);
36
35
  }
37
36
  }
38
37
  const accountIdentifier = userProvidedAccount || accountPrompt.account;
39
38
  const sandboxAccount = getConfigAccountIfExists(accountIdentifier);
40
39
  if (!sandboxAccount) {
41
40
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noSandboxAccountId);
42
- process.exit(EXIT_CODES.ERROR);
41
+ return exit(EXIT_CODES.ERROR);
43
42
  }
44
43
  const sandboxAccountId = sandboxAccount.accountId;
45
44
  const defaultAccount = getConfigDefaultAccountIfExists();
@@ -56,14 +55,14 @@ async function handler(args) {
56
55
  const parentAccountPrompt = await deleteSandboxPrompt(true);
57
56
  if (!parentAccountPrompt) {
58
57
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noParentAccount);
59
- process.exit(EXIT_CODES.ERROR);
58
+ return exit(EXIT_CODES.ERROR);
60
59
  }
61
60
  const parentAccount = getConfigAccountIfExists(parentAccountPrompt.account);
62
61
  parentAccountId = parentAccount?.accountId;
63
62
  }
64
63
  else {
65
64
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noParentAccount);
66
- process.exit(EXIT_CODES.ERROR);
65
+ return exit(EXIT_CODES.ERROR);
67
66
  }
68
67
  }
69
68
  }
@@ -76,7 +75,7 @@ async function handler(args) {
76
75
  uiLogger.log('');
77
76
  uiLogger.error(commands.sandbox.subcommands.delete.failure.noParentPortalAvailable(command, url));
78
77
  uiLogger.log('');
79
- process.exit(EXIT_CODES.ERROR);
78
+ return exit(EXIT_CODES.ERROR);
80
79
  }
81
80
  uiLogger.debug(commands.sandbox.subcommands.delete.debug.deleting(sandboxAccountId));
82
81
  if (isDefaultAccount) {
@@ -93,7 +92,7 @@ async function handler(args) {
93
92
  },
94
93
  ]);
95
94
  if (!confirmed) {
96
- process.exit(EXIT_CODES.SUCCESS);
95
+ return exit(EXIT_CODES.SUCCESS);
97
96
  }
98
97
  }
99
98
  await deleteSandbox(parentAccountId, sandboxAccountId);
@@ -111,7 +110,7 @@ async function handler(args) {
111
110
  // If force is specified, skip prompt and set the parent account id as the default account
112
111
  setConfigAccountAsDefault(parentAccountId);
113
112
  }
114
- process.exit(EXIT_CODES.SUCCESS);
113
+ return exit(EXIT_CODES.SUCCESS);
115
114
  }
116
115
  catch (err) {
117
116
  debugError(err);
@@ -147,12 +146,12 @@ async function handler(args) {
147
146
  // If force is specified, skip prompt and set the parent account id as the default account
148
147
  setConfigAccountAsDefault(parentAccountId);
149
148
  }
150
- process.exit(EXIT_CODES.SUCCESS);
149
+ return exit(EXIT_CODES.SUCCESS);
151
150
  }
152
151
  else {
153
152
  logError(err);
154
153
  }
155
- process.exit(EXIT_CODES.ERROR);
154
+ return exit(EXIT_CODES.ERROR);
156
155
  }
157
156
  }
158
157
  function sandboxDeleteBuilder(yargs) {
@@ -183,7 +182,7 @@ const builder = makeYargsBuilder(sandboxDeleteBuilder, command, describe, {
183
182
  const sandboxDeleteCommand = {
184
183
  command,
185
184
  describe,
186
- handler,
185
+ handler: makeYargsHandlerWithUsageTracking('sandbox-delete', handler),
187
186
  builder,
188
187
  };
189
188
  export default sandboxDeleteCommand;
@@ -1,17 +1,16 @@
1
1
  import { addSecret, fetchSecrets } from '@hubspot/local-dev-lib/api/secrets';
2
2
  import { logError, ApiErrorContext } from '../../lib/errorHandlers/index.js';
3
- import { trackCommandUsage } from '../../lib/usageTracking.js';
4
3
  import { secretValuePrompt, secretNamePrompt, } from '../../lib/prompts/secretPrompt.js';
5
4
  import { commands } from '../../lang/en.js';
6
5
  import { uiLogger } from '../../lib/ui/logger.js';
7
6
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
7
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
8
8
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
9
9
  const command = 'add [name]';
10
10
  const describe = commands.secret.subcommands.add.describe;
11
11
  async function handler(args) {
12
- const { name, derivedAccountId } = args;
12
+ const { name, derivedAccountId, exit } = args;
13
13
  let secretName = name;
14
- trackCommandUsage('secrets-add', {}, derivedAccountId);
15
14
  try {
16
15
  if (!secretName) {
17
16
  const { secretName: name } = await secretNamePrompt();
@@ -20,7 +19,7 @@ async function handler(args) {
20
19
  const { data: { results: secrets }, } = await fetchSecrets(derivedAccountId);
21
20
  if (secrets.includes(secretName)) {
22
21
  uiLogger.error(commands.secret.subcommands.add.errors.alreadyExists(secretName));
23
- return process.exit(EXIT_CODES.ERROR);
22
+ return exit(EXIT_CODES.ERROR);
24
23
  }
25
24
  const { secretValue } = await secretValuePrompt();
26
25
  await addSecret(derivedAccountId, secretName, secretValue);
@@ -32,9 +31,9 @@ async function handler(args) {
32
31
  request: 'add secret',
33
32
  accountId: derivedAccountId,
34
33
  }));
35
- return process.exit(EXIT_CODES.ERROR);
34
+ return exit(EXIT_CODES.ERROR);
36
35
  }
37
- process.exit(EXIT_CODES.SUCCESS);
36
+ return exit(EXIT_CODES.SUCCESS);
38
37
  }
39
38
  function addSecretBuilder(yargs) {
40
39
  yargs.positional('name', {
@@ -52,7 +51,7 @@ const builder = makeYargsBuilder(addSecretBuilder, command, describe, {
52
51
  const addSecretCommand = {
53
52
  command,
54
53
  describe,
55
- handler,
54
+ handler: makeYargsHandlerWithUsageTracking('secrets-add', handler),
56
55
  builder,
57
56
  };
58
57
  export default addSecretCommand;
@@ -3,21 +3,20 @@ import { secretListPrompt } from '../../lib/prompts/secretPrompt.js';
3
3
  import { confirmPrompt } from '../../lib/prompts/promptUtils.js';
4
4
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
5
5
  import { ApiErrorContext, logError } from '../../lib/errorHandlers/index.js';
6
- import { trackCommandUsage } from '../../lib/usageTracking.js';
7
6
  import { commands } from './../../lang/en.js';
8
7
  import { uiLogger } from '../../lib/ui/logger.js';
8
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
9
9
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
10
10
  const command = 'delete [name]';
11
11
  const describe = commands.secret.subcommands.delete.describe;
12
12
  async function handler(args) {
13
- const { name, derivedAccountId, force } = args;
13
+ const { name, derivedAccountId, force, exit } = args;
14
14
  let secretName = name;
15
- trackCommandUsage('secrets-delete', {}, derivedAccountId);
16
15
  try {
17
16
  const { data: { results: secrets }, } = await fetchSecrets(derivedAccountId);
18
17
  if (secretName && !secrets.includes(secretName)) {
19
18
  uiLogger.error(commands.secret.subcommands.delete.errors.noSecret(secretName));
20
- process.exit(EXIT_CODES.ERROR);
19
+ return exit(EXIT_CODES.ERROR);
21
20
  }
22
21
  if (!secretName) {
23
22
  const { secretToModify } = await secretListPrompt(secrets, commands.secret.subcommands.delete.selectSecret);
@@ -29,7 +28,7 @@ async function handler(args) {
29
28
  }));
30
29
  if (!confirmDelete) {
31
30
  uiLogger.success(commands.secret.subcommands.delete.deleteCanceled);
32
- process.exit(EXIT_CODES.SUCCESS);
31
+ return exit(EXIT_CODES.SUCCESS);
33
32
  }
34
33
  await deleteSecret(derivedAccountId, secretName);
35
34
  uiLogger.success(commands.secret.subcommands.delete.success.delete(secretName, derivedAccountId));
@@ -65,7 +64,7 @@ const builder = makeYargsBuilder(deleteSecretBuilder, command, describe, {
65
64
  const deleteSecretCommand = {
66
65
  command,
67
66
  describe,
68
- handler,
67
+ handler: makeYargsHandlerWithUsageTracking('secrets-delete', handler),
69
68
  builder,
70
69
  };
71
70
  export default deleteSecretCommand;
@@ -1,15 +1,14 @@
1
1
  import { fetchSecrets } from '@hubspot/local-dev-lib/api/secrets';
2
2
  import { logError, ApiErrorContext } from '../../lib/errorHandlers/index.js';
3
- import { trackCommandUsage } from '../../lib/usageTracking.js';
4
3
  import { uiAccountDescription } from '../../lib/ui/index.js';
5
4
  import { commands } from '../../lang/en.js';
6
5
  import { uiLogger } from '../../lib/ui/logger.js';
6
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
7
7
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
8
8
  const command = 'list';
9
9
  const describe = commands.secret.subcommands.list.describe;
10
10
  async function handler(args) {
11
11
  const { derivedAccountId } = args;
12
- trackCommandUsage('secrets-list', {}, derivedAccountId);
13
12
  try {
14
13
  const { data: { results }, } = await fetchSecrets(derivedAccountId);
15
14
  const groupLabel = commands.secret.subcommands.list.groupLabel(uiAccountDescription(derivedAccountId));
@@ -37,7 +36,7 @@ const builder = makeYargsBuilder(listSecretBuilder, command, describe, {
37
36
  const listSecretCommand = {
38
37
  command,
39
38
  describe,
40
- handler,
39
+ handler: makeYargsHandlerWithUsageTracking('secrets-list', handler),
41
40
  builder,
42
41
  };
43
42
  export default listSecretCommand;
@@ -1,22 +1,21 @@
1
1
  import { updateSecret, fetchSecrets } from '@hubspot/local-dev-lib/api/secrets';
2
2
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
3
3
  import { ApiErrorContext, logError } from '../../lib/errorHandlers/index.js';
4
- import { trackCommandUsage } from '../../lib/usageTracking.js';
5
4
  import { secretValuePrompt, secretListPrompt, } from '../../lib/prompts/secretPrompt.js';
6
5
  import { commands } from '../../lang/en.js';
7
6
  import { uiLogger } from '../../lib/ui/logger.js';
7
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
8
8
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
9
9
  const command = 'update [name]';
10
10
  const describe = commands.secret.subcommands.update.describe;
11
11
  async function handler(args) {
12
- const { name, derivedAccountId } = args;
12
+ const { name, derivedAccountId, exit } = args;
13
13
  let secretName = name;
14
- trackCommandUsage('secrets-update', {}, derivedAccountId);
15
14
  try {
16
15
  const { data: { results: secrets }, } = await fetchSecrets(derivedAccountId);
17
16
  if (secretName && !secrets.includes(secretName)) {
18
17
  uiLogger.error(commands.secret.subcommands.update.errors.noSecret(secretName));
19
- process.exit(EXIT_CODES.ERROR);
18
+ return exit(EXIT_CODES.ERROR);
20
19
  }
21
20
  if (!secretName) {
22
21
  const { secretToModify } = await secretListPrompt(secrets, commands.secret.subcommands.update.selectSecret);
@@ -51,7 +50,7 @@ const builder = makeYargsBuilder(updateSecretBuilder, command, describe, {
51
50
  const updateSecretCommand = {
52
51
  command,
53
52
  describe,
54
- handler,
53
+ handler: makeYargsHandlerWithUsageTracking('secrets-update', handler),
55
54
  builder,
56
55
  };
57
56
  export default updateSecretCommand;
@@ -1,5 +1,5 @@
1
1
  import { AccountLevel } from '@hubspot/local-dev-lib/types/developerTestAccounts.js';
2
- import { CommonArgs, ConfigArgs, AccountArgs, TestingArgs, YargsCommandModule, EnvironmentArgs, JSONOutputArgs } from '../../types/Yargs.js';
2
+ import { CommonArgs, ConfigArgs, AccountArgs, TestingArgs, EnvironmentArgs, JSONOutputArgs, YargsCommandModule } from '../../types/Yargs.js';
3
3
  type CreateTestAccountArgs = CommonArgs & AccountArgs & ConfigArgs & TestingArgs & EnvironmentArgs & JSONOutputArgs & {
4
4
  configPath?: string;
5
5
  name?: string;
@@ -3,16 +3,16 @@ import path from 'path';
3
3
  import { getValidEnv } from '@hubspot/local-dev-lib/environment';
4
4
  import { getConfigAccountEnvironment } from '@hubspot/local-dev-lib/config';
5
5
  import { getCwd } from '@hubspot/local-dev-lib/path';
6
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
6
7
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
7
8
  import { promptUser, listPrompt } from '../../lib/prompts/promptUtils.js';
8
9
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
9
10
  import { uiLogger } from '../../lib/ui/logger.js';
10
- import { trackCommandUsage } from '../../lib/usageTracking.js';
11
11
  import { fileExists } from '../../lib/validation.js';
12
12
  import { commands } from '../../lang/en.js';
13
13
  import { createDeveloperTestAccountConfigPrompt } from '../../lib/prompts/createDeveloperTestAccountConfigPrompt.js';
14
14
  import { debugError, logError } from '../../lib/errorHandlers/index.js';
15
- import { PromptExitError } from '../../lib/errors/PromptExitError.js';
15
+ import { isPromptExitError } from '../../lib/errors/PromptExitError.js';
16
16
  import SpinniesManager from '../../lib/ui/SpinniesManager.js';
17
17
  import { createDeveloperTestAccountV2, saveAccountToConfig, } from '../../lib/buildAccount.js';
18
18
  import { ACCOUNT_LEVEL_CHOICES, ACCOUNT_LEVELS } from '../../lib/constants.js';
@@ -29,18 +29,16 @@ function hasAnyFlags(args) {
29
29
  contentLevel ||
30
30
  commerceLevel);
31
31
  }
32
- async function readConfigFile(configPath) {
32
+ function readConfigFile(configPath) {
33
33
  const absoluteConfigPath = path.resolve(getCwd(), configPath);
34
34
  if (!fileExists(absoluteConfigPath)) {
35
- uiLogger.error(commands.testAccount.create.errors.configFileNotFound(absoluteConfigPath));
36
- process.exit(EXIT_CODES.ERROR);
35
+ throw new Error(commands.testAccount.create.errors.configFileNotFound(absoluteConfigPath));
37
36
  }
38
37
  try {
39
38
  return JSON.parse(fs.readFileSync(absoluteConfigPath, 'utf8'));
40
39
  }
41
40
  catch (err) {
42
- uiLogger.error(commands.testAccount.create.errors.configFileParseFailed(absoluteConfigPath));
43
- process.exit(EXIT_CODES.ERROR);
41
+ throw new Error(commands.testAccount.create.errors.configFileParseFailed(absoluteConfigPath));
44
42
  }
45
43
  }
46
44
  async function promptForConfigPath() {
@@ -90,10 +88,16 @@ async function buildTestAccountConfig(args) {
90
88
  });
91
89
  }
92
90
  async function handler(args) {
93
- const { derivedAccountId, formatOutputAsJson } = args;
94
- trackCommandUsage('test-account-create', {}, derivedAccountId);
91
+ const { derivedAccountId, formatOutputAsJson, exit } = args;
95
92
  const env = getValidEnv(getConfigAccountEnvironment(derivedAccountId));
96
- const testAccountConfig = await buildTestAccountConfig(args);
93
+ let testAccountConfig;
94
+ try {
95
+ testAccountConfig = await buildTestAccountConfig(args);
96
+ }
97
+ catch (error) {
98
+ logError(error);
99
+ return exit(EXIT_CODES.ERROR);
100
+ }
97
101
  const resultJson = {};
98
102
  SpinniesManager.init({
99
103
  succeedColor: 'white',
@@ -112,7 +116,7 @@ async function handler(args) {
112
116
  SpinniesManager.fail('createTestAccount', {
113
117
  text: commands.testAccount.create.polling.createFailure,
114
118
  });
115
- process.exit(EXIT_CODES.ERROR);
119
+ return exit(EXIT_CODES.ERROR);
116
120
  }
117
121
  SpinniesManager.succeed('createTestAccount', {
118
122
  text: commands.testAccount.create.polling.success(testAccountConfig.accountName, resultJson.accountId, derivedAccountId),
@@ -131,15 +135,15 @@ async function handler(args) {
131
135
  }
132
136
  }
133
137
  catch (e) {
134
- if (e instanceof PromptExitError) {
135
- process.exit(e.exitCode);
138
+ if (isPromptExitError(e)) {
139
+ throw e;
136
140
  }
137
141
  debugError(e);
138
142
  uiLogger.error(commands.testAccount.create.errors.saveAccountToConfigFailure(testAccountConfig.accountName));
139
- process.exit(EXIT_CODES.ERROR);
143
+ return exit(EXIT_CODES.ERROR);
140
144
  }
141
145
  }
142
- process.exit(EXIT_CODES.SUCCESS);
146
+ return exit(EXIT_CODES.SUCCESS);
143
147
  }
144
148
  function createTestAccountBuilder(yargs) {
145
149
  yargs.option('config-path', {
@@ -226,7 +230,7 @@ const builder = makeYargsBuilder(createTestAccountBuilder, command, describe, {
226
230
  const createTestAccountCommand = {
227
231
  command,
228
232
  describe,
229
- handler,
233
+ handler: makeYargsHandlerWithUsageTracking('test-account-create', handler),
230
234
  builder,
231
235
  };
232
236
  export default createTestAccountCommand;
@@ -1,19 +1,18 @@
1
1
  import fs from 'fs-extra';
2
2
  import path from 'path';
3
3
  import { getCwd } from '@hubspot/local-dev-lib/path';
4
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
4
5
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
5
6
  import { promptUser } from '../../lib/prompts/promptUtils.js';
6
7
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
7
8
  import { uiLogger } from '../../lib/ui/logger.js';
8
- import { trackCommandUsage } from '../../lib/usageTracking.js';
9
9
  import { commands } from '../../lang/en.js';
10
10
  import { createDeveloperTestAccountConfigPrompt } from '../../lib/prompts/createDeveloperTestAccountConfigPrompt.js';
11
11
  import { fileExists } from '../../lib/validation.js';
12
12
  const command = 'create-config';
13
13
  const describe = commands.testAccount.createConfig.describe;
14
14
  async function handler(args) {
15
- const { derivedAccountId, name, description, path: configPath } = args;
16
- trackCommandUsage('test-account-create-config', {}, derivedAccountId);
15
+ const { name, description, path: configPath, exit } = args;
17
16
  let accountConfigPath = configPath;
18
17
  const testAccountConfig = await createDeveloperTestAccountConfigPrompt({
19
18
  name,
@@ -43,21 +42,21 @@ async function handler(args) {
43
42
  }
44
43
  if (!accountConfigPath) {
45
44
  uiLogger.error(commands.testAccount.createConfig.errors.pathError);
46
- process.exit(EXIT_CODES.ERROR);
45
+ return exit(EXIT_CODES.ERROR);
47
46
  }
48
47
  if (fileExists(accountConfigPath)) {
49
48
  uiLogger.error(commands.testAccount.createConfig.errors.pathExistsError);
50
- process.exit(EXIT_CODES.ERROR);
49
+ return exit(EXIT_CODES.ERROR);
51
50
  }
52
51
  try {
53
52
  fs.writeFileSync(path.resolve(getCwd(), accountConfigPath), JSON.stringify(testAccountConfig, null, 2), 'utf8');
54
53
  }
55
54
  catch (err) {
56
55
  uiLogger.error(commands.testAccount.createConfig.errors.failedToCreate);
57
- process.exit(EXIT_CODES.ERROR);
56
+ return exit(EXIT_CODES.ERROR);
58
57
  }
59
58
  uiLogger.success(commands.testAccount.createConfig.success.configFileCreated(accountConfigPath));
60
- process.exit(EXIT_CODES.SUCCESS);
59
+ return exit(EXIT_CODES.SUCCESS);
61
60
  }
62
61
  function createTestAccountConfigBuilder(yargs) {
63
62
  yargs.option('name', {
@@ -86,7 +85,7 @@ const builder = makeYargsBuilder(createTestAccountConfigBuilder, command, descri
86
85
  const createTestAccountConfigCommand = {
87
86
  command,
88
87
  describe,
89
- handler,
88
+ handler: makeYargsHandlerWithUsageTracking('test-account-create-config', handler),
90
89
  builder,
91
90
  };
92
91
  export default createTestAccountConfigCommand;
@@ -1,12 +1,12 @@
1
1
  import { fetchDeveloperTestAccounts, deleteDeveloperTestAccount, } from '@hubspot/local-dev-lib/api/developerTestAccounts';
2
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
2
3
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
3
4
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
4
5
  import { uiLogger } from '../../lib/ui/logger.js';
5
- import { trackCommandUsage } from '../../lib/usageTracking.js';
6
6
  import { commands } from '../../lang/en.js';
7
7
  import { removeAccountFromConfig, getConfigAccountById, getConfigAccountIfExists, setConfigAccountAsDefault, getConfigDefaultAccountIfExists, } from '@hubspot/local-dev-lib/config';
8
8
  import { promptUser } from '../../lib/prompts/promptUtils.js';
9
- import { debugError } from '../../lib/errorHandlers/index.js';
9
+ import { debugError, logError } from '../../lib/errorHandlers/index.js';
10
10
  const command = 'delete [test-account]';
11
11
  const describe = commands.testAccount.delete.describe;
12
12
  async function getAccountPromptOptions(derivedAccountId) {
@@ -25,8 +25,7 @@ async function getAccountPromptOptions(derivedAccountId) {
25
25
  async function accountToDeleteSelectionPrompt(derivedAccountId) {
26
26
  const accountData = await getAccountPromptOptions(derivedAccountId);
27
27
  if (accountData.length === 0) {
28
- uiLogger.error(commands.testAccount.delete.errors.noAccountsToDelete(derivedAccountId));
29
- process.exit(EXIT_CODES.ERROR);
28
+ throw new Error(commands.testAccount.delete.errors.noAccountsToDelete(derivedAccountId));
30
29
  }
31
30
  const { testAccountToDelete } = await promptUser([
32
31
  {
@@ -79,33 +78,35 @@ async function deleteTestAccountFromConfig(testAccountId, parentAccountName, acc
79
78
  uiLogger.error(commands.testAccount.delete.errors.failedToDeleteFromConfig(testAccountId));
80
79
  }
81
80
  }
82
- async function validateTestAccountConfigs(testAccountId) {
81
+ function validateTestAccountConfigs(testAccountId) {
83
82
  if (!testAccountId) {
84
- uiLogger.error(commands.testAccount.delete.errors.testAccountNotFound(testAccountId));
85
- process.exit(EXIT_CODES.ERROR);
83
+ throw new Error(commands.testAccount.delete.errors.testAccountNotFound(testAccountId));
86
84
  }
87
85
  const testAccountConfig = getConfigAccountById(testAccountId);
88
86
  if (!testAccountConfig) {
89
- uiLogger.error(commands.testAccount.delete.errors.testAccountNotFound(testAccountId));
90
- process.exit(EXIT_CODES.ERROR);
87
+ throw new Error(commands.testAccount.delete.errors.testAccountNotFound(testAccountId));
91
88
  }
92
89
  const parentAccountConfig = getConfigAccountById(testAccountConfig.parentAccountId);
93
90
  if (!parentAccountConfig) {
94
- uiLogger.error(commands.testAccount.delete.errors.parentAccountNotFound(testAccountId));
95
- process.exit(EXIT_CODES.ERROR);
91
+ throw new Error(commands.testAccount.delete.errors.parentAccountNotFound(testAccountId));
96
92
  }
97
93
  const parentAccountName = parentAccountConfig.name;
98
94
  return { testAccountConfig, parentAccountName };
99
95
  }
100
96
  async function handler(args) {
101
- const { derivedAccountId, testAccount, force } = args;
102
- trackCommandUsage('test-account-delete', {}, derivedAccountId);
97
+ const { derivedAccountId, testAccount, force, exit } = args;
103
98
  let testAccountIdToDelete = 0;
104
99
  // See if the account exists
105
100
  if (testAccount) {
106
101
  const account = getConfigAccountIfExists(testAccount);
107
102
  const accountId = account?.accountId || null;
108
- await validateTestAccountConfigs(accountId);
103
+ try {
104
+ validateTestAccountConfigs(accountId);
105
+ }
106
+ catch (error) {
107
+ logError(error);
108
+ return exit(EXIT_CODES.ERROR);
109
+ }
109
110
  if (accountId) {
110
111
  testAccountIdToDelete = accountId;
111
112
  }
@@ -119,10 +120,18 @@ async function handler(args) {
119
120
  catch (err) {
120
121
  debugError(err);
121
122
  uiLogger.error(commands.testAccount.delete.errors.failedToSelectAccount);
122
- process.exit(EXIT_CODES.ERROR);
123
+ return exit(EXIT_CODES.ERROR);
123
124
  }
124
125
  }
125
- const { testAccountConfig, parentAccountName } = await validateTestAccountConfigs(testAccountIdToDelete);
126
+ let testAccountConfig;
127
+ let parentAccountName;
128
+ try {
129
+ ({ testAccountConfig, parentAccountName } = validateTestAccountConfigs(testAccountIdToDelete));
130
+ }
131
+ catch (error) {
132
+ logError(error);
133
+ return exit(EXIT_CODES.ERROR);
134
+ }
126
135
  // If --force, don't prompt user; else confirm deletion
127
136
  let shouldDeleteAccount;
128
137
  if (force) {
@@ -139,7 +148,7 @@ async function handler(args) {
139
148
  else {
140
149
  uiLogger.info(commands.testAccount.delete.info.deletionCanceled);
141
150
  }
142
- process.exit(EXIT_CODES.SUCCESS);
151
+ return exit(EXIT_CODES.SUCCESS);
143
152
  }
144
153
  function deleteTestAccountBuilder(yargs) {
145
154
  yargs.positional('test-account', {
@@ -182,7 +191,7 @@ const builder = makeYargsBuilder(deleteTestAccountBuilder, command, describe, {
182
191
  const deleteTestAccountCommand = {
183
192
  command,
184
193
  describe,
185
- handler,
194
+ handler: makeYargsHandlerWithUsageTracking('test-account-delete', handler),
186
195
  builder,
187
196
  };
188
197
  export default deleteTestAccountCommand;