@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
@@ -1,3 +1,4 @@
1
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
1
2
  import { migrateApp } from '../../lib/app/migrate.js';
2
3
  import { getProjectConfig } from '../../lib/projects/config.js';
3
4
  import { PLATFORM_VERSIONS } from '@hubspot/local-dev-lib/constants/projects';
@@ -12,17 +13,16 @@ import { getWarningBox } from '../../ui/components/StatusMessageBoxes.js';
12
13
  import { getHasMigratableThemes, migrateThemesV2, } from '../../lib/theme/migrate.js';
13
14
  import { hasFeature } from '../../lib/hasFeature.js';
14
15
  import { FEATURES } from '../../lib/constants.js';
15
- import { trackCommandMetadataUsage, trackCommandUsage, } from '../../lib/usageTracking.js';
16
+ import { trackCommandMetadataUsage } from '../../lib/usageTracking.js';
16
17
  const { v2025_2, v2026_03_beta, v2026_03 } = PLATFORM_VERSIONS;
17
18
  const command = 'migrate';
18
19
  const describe = commands.project.migrate.describe;
19
20
  async function handler(args) {
20
- const { platformVersion, unstable, derivedAccountId } = args;
21
- await trackCommandUsage('project-migrate', {}, derivedAccountId);
21
+ const { platformVersion, unstable, derivedAccountId, exit } = args;
22
22
  const projectConfig = await getProjectConfig();
23
23
  if (!projectConfig.projectConfig) {
24
24
  uiLogger.error(commands.project.migrate.errors.noProjectConfig(uiCommandReference('hs app migrate')));
25
- return process.exit(EXIT_CODES.ERROR);
25
+ return exit(EXIT_CODES.ERROR);
26
26
  }
27
27
  if (projectConfig?.projectConfig) {
28
28
  await renderInline(getWarningBox({
@@ -36,7 +36,7 @@ async function handler(args) {
36
36
  const hasThemeMigrationAccess = await hasFeature(derivedAccountId, FEATURES.THEME_MIGRATION_2025_2);
37
37
  if (!hasThemeMigrationAccess) {
38
38
  uiLogger.error(commands.project.migrate.errors.noThemeMigrationAccess(derivedAccountId));
39
- return process.exit(EXIT_CODES.ERROR);
39
+ return exit(EXIT_CODES.ERROR);
40
40
  }
41
41
  await migrateThemesV2(derivedAccountId, {
42
42
  ...args,
@@ -58,10 +58,10 @@ async function handler(args) {
58
58
  catch (error) {
59
59
  await trackCommandMetadataUsage('project-migrate', { successful: false }, derivedAccountId);
60
60
  logError(error);
61
- return process.exit(EXIT_CODES.ERROR);
61
+ return exit(EXIT_CODES.ERROR);
62
62
  }
63
63
  await trackCommandMetadataUsage('project-migrate', { successful: true }, derivedAccountId);
64
- return process.exit(EXIT_CODES.SUCCESS);
64
+ return exit(EXIT_CODES.SUCCESS);
65
65
  }
66
66
  function projectMigrateBuilder(yargs) {
67
67
  yargs
@@ -85,7 +85,7 @@ const builder = makeYargsBuilder(projectMigrateBuilder, command, commands.projec
85
85
  const migrateCommand = {
86
86
  command,
87
87
  describe,
88
- handler,
88
+ handler: makeYargsHandlerWithUsageTracking('project-migrate', handler),
89
89
  builder,
90
90
  };
91
91
  export default migrateCommand;
@@ -1,5 +1,4 @@
1
1
  import open from 'open';
2
- import { trackCommandUsage } from '../../lib/usageTracking.js';
3
2
  import { commands } from '../../lang/en.js';
4
3
  import { uiLogger } from '../../lib/ui/logger.js';
5
4
  import { getProjectConfig } from '../../lib/projects/config.js';
@@ -7,12 +6,12 @@ import { ensureProjectExists } from '../../lib/projects/ensureProjectExists.js';
7
6
  import { getProjectDetailUrl } from '../../lib/projects/urls.js';
8
7
  import { projectNamePrompt } from '../../lib/prompts/projectNamePrompt.js';
9
8
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
9
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
10
10
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
11
11
  const command = 'open';
12
12
  const describe = commands.project.open.describe;
13
13
  async function handler(args) {
14
- const { project, derivedAccountId } = args;
15
- trackCommandUsage('project-open', undefined, derivedAccountId);
14
+ const { project, derivedAccountId, exit } = args;
16
15
  const { projectConfig } = await getProjectConfig();
17
16
  let projectName = project;
18
17
  if (projectName) {
@@ -20,7 +19,7 @@ async function handler(args) {
20
19
  allowCreate: false,
21
20
  });
22
21
  if (!projectExists) {
23
- process.exit(EXIT_CODES.ERROR);
22
+ return exit(EXIT_CODES.ERROR);
24
23
  }
25
24
  }
26
25
  else if (!projectName && projectConfig) {
@@ -33,7 +32,7 @@ async function handler(args) {
33
32
  const url = getProjectDetailUrl(projectName, derivedAccountId);
34
33
  open(url, { url: true });
35
34
  uiLogger.success(commands.project.open.success(projectName));
36
- process.exit(EXIT_CODES.SUCCESS);
35
+ return exit(EXIT_CODES.SUCCESS);
37
36
  }
38
37
  function projectOpenBuilder(yargs) {
39
38
  yargs.options({
@@ -55,7 +54,7 @@ const builder = makeYargsBuilder(projectOpenBuilder, command, describe, {
55
54
  const projectOpenCommand = {
56
55
  command,
57
56
  describe,
58
- handler,
57
+ handler: makeYargsHandlerWithUsageTracking('project-open', handler),
59
58
  builder,
60
59
  };
61
60
  export default projectOpenCommand;
@@ -2,11 +2,12 @@ import path from 'path';
2
2
  import fs from 'fs';
3
3
  import { getConfigAccountIfExists, getAllConfigAccounts, } from '@hubspot/local-dev-lib/config';
4
4
  import { getAllHsProfiles, getHsProfileFilename, loadHsProfileFile, } from '@hubspot/project-parsing-lib/profiles';
5
- import { trackCommandUsage } from '../../../lib/usageTracking.js';
6
5
  import { getProjectConfig } from '../../../lib/projects/config.js';
6
+ import { isV2Project } from '../../../lib/projects/platformVersion.js';
7
7
  import { uiAccountDescription } from '../../../lib/ui/index.js';
8
8
  import { uiLogger } from '../../../lib/ui/logger.js';
9
9
  import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
10
+ import { makeYargsHandlerWithUsageTracking } from '../../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
10
11
  import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
11
12
  import { commands } from '../../../lang/en.js';
12
13
  import { promptUser, listPrompt, confirmPrompt, } from '../../../lib/prompts/promptUtils.js';
@@ -50,12 +51,15 @@ async function selectProfileToCopyVariablesFrom(existingProfiles) {
50
51
  return profileToCopyVariablesFrom;
51
52
  }
52
53
  async function handler(args) {
53
- const { derivedAccountId } = args;
54
- trackCommandUsage('project-profile-add', undefined, derivedAccountId);
54
+ const { exit } = args;
55
55
  const { projectConfig, projectDir } = await getProjectConfig();
56
56
  if (!projectConfig || !projectDir) {
57
57
  uiLogger.error(commands.project.profile.add.errors.noProjectConfig);
58
- process.exit(EXIT_CODES.ERROR);
58
+ return exit(EXIT_CODES.ERROR);
59
+ }
60
+ if (!isV2Project(projectConfig.platformVersion)) {
61
+ uiLogger.error(commands.project.profile.add.errors.unsupportedPlatformVersion);
62
+ return exit(EXIT_CODES.ERROR);
59
63
  }
60
64
  const projectSourceDir = path.join(projectDir, projectConfig.srcDir);
61
65
  let profileName = args.name;
@@ -115,7 +119,7 @@ async function handler(args) {
115
119
  const configuredAccounts = getAllConfigAccounts();
116
120
  if (!configuredAccounts || !configuredAccounts.length) {
117
121
  uiLogger.error(commands.project.profile.add.errors.noAccountsConfigured);
118
- process.exit(EXIT_CODES.ERROR);
122
+ return exit(EXIT_CODES.ERROR);
119
123
  }
120
124
  const promptResponse = await listPrompt(commands.project.profile.add.prompts.targetAccountPrompt, {
121
125
  choices: configuredAccounts.map(account => {
@@ -171,11 +175,11 @@ async function handler(args) {
171
175
  }
172
176
  catch (err) {
173
177
  uiLogger.error(commands.project.profile.add.errors.failedToCreateProfile);
174
- process.exit(EXIT_CODES.ERROR);
178
+ return exit(EXIT_CODES.ERROR);
175
179
  }
176
180
  uiLogger.log('');
177
181
  uiLogger.log(commands.project.profile.add.logs.profileAdded(profileFilename));
178
- process.exit(EXIT_CODES.SUCCESS);
182
+ return exit(EXIT_CODES.SUCCESS);
179
183
  }
180
184
  function projectProfileAddBuilder(yargs) {
181
185
  yargs.positional('name', {
@@ -197,7 +201,7 @@ const builder = makeYargsBuilder(projectProfileAddBuilder, command, verboseDescr
197
201
  const projectProfileAddCommand = {
198
202
  command,
199
203
  describe,
200
- handler,
204
+ handler: makeYargsHandlerWithUsageTracking('project-profile-add', handler),
201
205
  builder,
202
206
  };
203
207
  export default projectProfileAddCommand;
@@ -3,10 +3,11 @@ import path from 'path';
3
3
  import { getAllHsProfiles, getHsProfileFilename, loadHsProfileFile, } from '@hubspot/project-parsing-lib/profiles';
4
4
  import { fetchProject, deleteProject, } from '@hubspot/local-dev-lib/api/projects';
5
5
  import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
6
- import { trackCommandUsage } from '../../../lib/usageTracking.js';
7
6
  import { getProjectConfig } from '../../../lib/projects/config.js';
7
+ import { isV2Project } from '../../../lib/projects/platformVersion.js';
8
8
  import { uiLogger } from '../../../lib/ui/logger.js';
9
9
  import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
10
+ import { makeYargsHandlerWithUsageTracking } from '../../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
10
11
  import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
11
12
  import { commands } from '../../../lang/en.js';
12
13
  import { confirmPrompt, listPrompt } from '../../../lib/prompts/promptUtils.js';
@@ -16,12 +17,15 @@ import { isDeveloperTestAccount, isSandbox, } from '../../../lib/accountTypes.js
16
17
  const command = 'delete [name]';
17
18
  const describe = commands.project.profile.delete.describe;
18
19
  async function handler(args) {
19
- const { derivedAccountId } = args;
20
- trackCommandUsage('project-profile-delete', undefined, derivedAccountId);
20
+ const { exit } = args;
21
21
  const { projectConfig, projectDir } = await getProjectConfig();
22
22
  if (!projectConfig || !projectDir) {
23
23
  uiLogger.error(commands.project.profile.delete.errors.noProjectConfig);
24
- process.exit(EXIT_CODES.ERROR);
24
+ return exit(EXIT_CODES.ERROR);
25
+ }
26
+ if (!isV2Project(projectConfig.platformVersion)) {
27
+ uiLogger.error(commands.project.profile.delete.errors.unsupportedPlatformVersion);
28
+ return exit(EXIT_CODES.ERROR);
25
29
  }
26
30
  const projectSourceDir = path.join(projectDir, projectConfig.srcDir);
27
31
  let profileName = undefined;
@@ -30,14 +34,14 @@ async function handler(args) {
30
34
  const profileFilename = getHsProfileFilename(profileName);
31
35
  if (!fileExists(path.join(projectSourceDir, profileFilename))) {
32
36
  uiLogger.error(commands.project.profile.delete.errors.noProfileFound(profileFilename));
33
- process.exit(EXIT_CODES.ERROR);
37
+ return exit(EXIT_CODES.ERROR);
34
38
  }
35
39
  }
36
40
  else {
37
41
  const existingProfiles = await getAllHsProfiles(projectSourceDir);
38
42
  if (existingProfiles.length === 0) {
39
43
  uiLogger.error(commands.project.profile.delete.errors.noProfilesFound);
40
- process.exit(EXIT_CODES.ERROR);
44
+ return exit(EXIT_CODES.ERROR);
41
45
  }
42
46
  const promptResponse = await listPrompt(commands.project.profile.delete.prompts.deleteProfilePrompt, {
43
47
  choices: existingProfiles.map(profile => ({
@@ -52,7 +56,7 @@ async function handler(args) {
52
56
  }
53
57
  // This should never happen
54
58
  if (!profileName) {
55
- process.exit(EXIT_CODES.ERROR);
59
+ return exit(EXIT_CODES.ERROR);
56
60
  }
57
61
  let targetAccountId;
58
62
  try {
@@ -68,7 +72,7 @@ async function handler(args) {
68
72
  }
69
73
  catch (err) {
70
74
  uiLogger.error(commands.project.profile.delete.errors.failedToDeleteProfile(profileFilename));
71
- process.exit(EXIT_CODES.ERROR);
75
+ return exit(EXIT_CODES.ERROR);
72
76
  }
73
77
  uiLogger.log(commands.project.profile.delete.logs.profileDeleted(profileFilename));
74
78
  if (targetAccountId) {
@@ -96,7 +100,7 @@ async function handler(args) {
96
100
  catch (err) {
97
101
  debugError(err);
98
102
  uiLogger.error(commands.project.profile.delete.errors.failedToDeleteProject(targetAccountId));
99
- process.exit(EXIT_CODES.ERROR);
103
+ return exit(EXIT_CODES.ERROR);
100
104
  }
101
105
  uiLogger.log(commands.project.profile.delete.logs.deletedProject(targetAccountId));
102
106
  }
@@ -105,7 +109,7 @@ async function handler(args) {
105
109
  }
106
110
  }
107
111
  }
108
- process.exit(EXIT_CODES.SUCCESS);
112
+ return exit(EXIT_CODES.SUCCESS);
109
113
  }
110
114
  function projectProfileDeleteBuilder(yargs) {
111
115
  yargs.positional('name', {
@@ -123,7 +127,7 @@ const builder = makeYargsBuilder(projectProfileDeleteBuilder, command, describe,
123
127
  const projectProfileDeleteCommand = {
124
128
  command,
125
129
  describe,
126
- handler,
130
+ handler: makeYargsHandlerWithUsageTracking('project-profile-delete', handler),
127
131
  builder,
128
132
  };
129
133
  export default projectProfileDeleteCommand;
@@ -1,23 +1,23 @@
1
1
  import { updatePackages, getProjectPackageJsonLocations, } from '../../lib/dependencyManagement.js';
2
2
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
3
+ import { isPromptExitError } from '../../lib/errors/PromptExitError.js';
3
4
  import { getProjectConfig } from '../../lib/projects/config.js';
4
5
  import { promptUser } from '../../lib/prompts/promptUtils.js';
5
6
  import path from 'path';
6
7
  import { commands } from '../../lang/en.js';
7
8
  import { uiLogger } from '../../lib/ui/logger.js';
8
- import { trackCommandUsage } from '../../lib/usageTracking.js';
9
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
9
10
  import { logError } from '../../lib/errorHandlers/index.js';
10
11
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
11
12
  const command = 'update-deps [packages..]';
12
13
  const describe = commands.project.updateDeps.help.describe;
13
14
  async function handler(args) {
14
- const { derivedAccountId, packages } = args;
15
+ const { packages, exit } = args;
15
16
  try {
16
- trackCommandUsage('project-update-deps', undefined, derivedAccountId);
17
17
  const projectConfig = await getProjectConfig();
18
18
  if (!projectConfig || !projectConfig.projectDir) {
19
19
  uiLogger.error(commands.project.updateDeps.noProjectConfig);
20
- return process.exit(EXIT_CODES.ERROR);
20
+ return exit(EXIT_CODES.ERROR);
21
21
  }
22
22
  const { projectDir } = projectConfig;
23
23
  let installLocations = await getProjectPackageJsonLocations();
@@ -50,8 +50,11 @@ async function handler(args) {
50
50
  });
51
51
  }
52
52
  catch (e) {
53
+ if (isPromptExitError(e)) {
54
+ throw e;
55
+ }
53
56
  logError(e);
54
- return process.exit(EXIT_CODES.ERROR);
57
+ return exit(EXIT_CODES.ERROR);
55
58
  }
56
59
  }
57
60
  function projectUpdateDepsBuilder(yargs) {
@@ -74,7 +77,7 @@ const builder = makeYargsBuilder(projectUpdateDepsBuilder, command, describe, {
74
77
  const projectUpdateDepsCommand = {
75
78
  command,
76
79
  describe,
77
- handler,
80
+ handler: makeYargsHandlerWithUsageTracking('project-update-deps', handler),
78
81
  builder,
79
82
  };
80
83
  export default projectUpdateDepsCommand;
@@ -3,7 +3,6 @@ import { uiLogger } from '../../lib/ui/logger.js';
3
3
  import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
4
4
  import { isSpecifiedError } from '@hubspot/local-dev-lib/errors/index';
5
5
  import { isV2Project } from '../../lib/projects/platformVersion.js';
6
- import { trackCommandUsage } from '../../lib/usageTracking.js';
7
6
  import { getProjectConfig, validateProjectConfig, } from '../../lib/projects/config.js';
8
7
  import { logFeedbackMessage } from '../../lib/projects/ui.js';
9
8
  import { handleProjectUpload } from '../../lib/projects/upload.js';
@@ -13,11 +12,13 @@ import { commands } from '../../lang/en.js';
13
12
  import { PROJECT_ERROR_TYPES } from '../../lib/constants.js';
14
13
  import { logError, ApiErrorContext } from '../../lib/errorHandlers/index.js';
15
14
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
15
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
16
16
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
17
+ import { projectProfilePrompt } from '../../lib/prompts/projectProfilePrompt.js';
17
18
  const command = 'upload';
18
19
  const describe = commands.project.upload.describe;
19
20
  async function handler(args) {
20
- const { forceCreate, message, derivedAccountId, skipValidation, formatOutputAsJson, profile, } = args;
21
+ const { forceCreate, message, derivedAccountId, skipValidation, formatOutputAsJson, profile: profileOption, useEnv: useEnvOption, exit, addUsageMetadata, } = args;
21
22
  const jsonOutput = {};
22
23
  const { projectConfig, projectDir } = await getProjectConfig();
23
24
  try {
@@ -25,34 +26,47 @@ async function handler(args) {
25
26
  }
26
27
  catch (error) {
27
28
  logError(error);
28
- process.exit(EXIT_CODES.ERROR);
29
+ return exit(EXIT_CODES.ERROR);
30
+ }
31
+ if (!projectDir) {
32
+ uiLogger.error(commands.project.upload.errors.noProjectConfig);
33
+ return exit(EXIT_CODES.ERROR);
29
34
  }
30
35
  let targetAccountId;
31
- try {
32
- if (isV2Project(projectConfig.platformVersion)) {
33
- targetAccountId = await loadAndValidateProfile(projectConfig, projectDir, profile);
36
+ let profileName = args.profile;
37
+ if (isV2Project(projectConfig?.platformVersion)) {
38
+ try {
39
+ const profileNamePromptResult = await projectProfilePrompt(projectDir, projectConfig, profileOption, !!useEnvOption);
40
+ if (profileNamePromptResult) {
41
+ profileName = profileNamePromptResult;
42
+ const profile = await loadAndValidateProfile(projectConfig, projectDir, profileName);
43
+ targetAccountId = profile.accountId;
44
+ }
45
+ }
46
+ catch (error) {
47
+ logError(error);
48
+ return exit(EXIT_CODES.ERROR);
34
49
  }
35
- }
36
- catch (err) {
37
- logError(err);
38
- process.exit(EXIT_CODES.ERROR);
39
50
  }
40
51
  targetAccountId = targetAccountId || derivedAccountId;
41
52
  const accountConfig = getConfigAccountById(targetAccountId);
42
53
  const accountType = accountConfig && accountConfig.accountType;
43
- trackCommandUsage('project-upload', { type: accountType, assetType: projectConfig.platformVersion }, targetAccountId);
54
+ addUsageMetadata({
55
+ type: accountType,
56
+ assetType: projectConfig.platformVersion,
57
+ });
44
58
  try {
45
59
  const { result, uploadError } = await handleProjectUpload({
46
60
  accountId: targetAccountId,
47
61
  projectConfig,
48
- projectDir: projectDir,
62
+ projectDir,
49
63
  callbackFunc: pollProjectBuildAndDeploy,
50
64
  uploadMessage: message,
51
65
  forceCreate,
52
66
  isUploadCommand: true,
53
67
  sendIR: isV2Project(projectConfig.platformVersion),
54
68
  skipValidation,
55
- profile: args.profile,
69
+ profile: profileName,
56
70
  });
57
71
  if (uploadError) {
58
72
  if (isSpecifiedError(uploadError, {
@@ -68,7 +82,7 @@ async function handler(args) {
68
82
  request: 'project upload',
69
83
  }));
70
84
  }
71
- process.exit(EXIT_CODES.ERROR);
85
+ return exit(EXIT_CODES.ERROR);
72
86
  }
73
87
  if (result && result.succeeded && !result.buildResult.isAutoDeployEnabled) {
74
88
  uiLogger.log(chalk.bold(commands.project.upload.logs.buildSucceeded(result.buildId)));
@@ -88,12 +102,12 @@ async function handler(args) {
88
102
  accountId: targetAccountId,
89
103
  request: 'project upload',
90
104
  }));
91
- process.exit(EXIT_CODES.ERROR);
105
+ return exit(EXIT_CODES.ERROR);
92
106
  }
93
107
  if (formatOutputAsJson) {
94
108
  uiLogger.json(jsonOutput);
95
109
  }
96
- process.exit(EXIT_CODES.SUCCESS);
110
+ return exit(EXIT_CODES.SUCCESS);
97
111
  }
98
112
  function projectUploadBuilder(yargs) {
99
113
  yargs.options({
@@ -139,7 +153,7 @@ const builder = makeYargsBuilder(projectUploadBuilder, command, describe, {
139
153
  const projectUploadCommand = {
140
154
  command,
141
155
  describe,
142
- handler,
156
+ handler: makeYargsHandlerWithUsageTracking('project-upload', handler),
143
157
  builder,
144
158
  };
145
159
  export default projectUploadCommand;
@@ -1,10 +1,10 @@
1
1
  import path from 'path';
2
2
  import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
3
3
  import { isV2Project } from '../../lib/projects/platformVersion.js';
4
- import { trackCommandUsage } from '../../lib/usageTracking.js';
5
4
  import { uiLogger } from '../../lib/ui/logger.js';
6
5
  import { getProjectConfig, validateProjectConfig, } from '../../lib/projects/config.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
  import { validateSourceDirectory, handleTranslate, } from '../../lib/projects/upload.js';
10
10
  import { commands } from '../../lang/en.js';
@@ -15,25 +15,25 @@ import SpinniesManager from '../../lib/ui/SpinniesManager.js';
15
15
  const command = 'validate';
16
16
  const describe = commands.project.validate.describe;
17
17
  async function handler(args) {
18
- const { derivedAccountId, profile } = args;
18
+ const { derivedAccountId, profile, exit, addUsageMetadata } = args;
19
19
  const { projectConfig, projectDir } = await getProjectConfig();
20
20
  const accountConfig = getConfigAccountById(derivedAccountId);
21
21
  const accountType = accountConfig && accountConfig.accountType;
22
- trackCommandUsage('project-validate', { type: accountType }, derivedAccountId);
22
+ addUsageMetadata({ type: accountType });
23
23
  if (!projectConfig || !projectDir) {
24
24
  uiLogger.error(commands.project.validate.mustBeRanWithinAProject);
25
- process.exit(EXIT_CODES.ERROR);
25
+ return exit(EXIT_CODES.ERROR);
26
26
  }
27
- if (!isV2Project(projectConfig?.platformVersion)) {
27
+ if (!isV2Project(projectConfig.platformVersion)) {
28
28
  uiLogger.error(commands.project.validate.badVersion);
29
- process.exit(EXIT_CODES.ERROR);
29
+ return exit(EXIT_CODES.ERROR);
30
30
  }
31
31
  try {
32
32
  validateProjectConfig(projectConfig, projectDir);
33
33
  }
34
34
  catch (error) {
35
35
  logError(error);
36
- process.exit(EXIT_CODES.ERROR);
36
+ return exit(EXIT_CODES.ERROR);
37
37
  }
38
38
  let validationSucceeded = true;
39
39
  const srcDir = path.resolve(projectDir, projectConfig.srcDir);
@@ -100,17 +100,17 @@ async function handler(args) {
100
100
  }
101
101
  }
102
102
  if (!validationSucceeded) {
103
- process.exit(EXIT_CODES.ERROR);
103
+ return exit(EXIT_CODES.ERROR);
104
104
  }
105
105
  try {
106
106
  await validateSourceDirectory(srcDir, projectConfig, projectDir);
107
107
  }
108
108
  catch (e) {
109
109
  logError(e);
110
- process.exit(EXIT_CODES.ERROR);
110
+ return exit(EXIT_CODES.ERROR);
111
111
  }
112
112
  uiLogger.success(commands.project.validate.success(projectConfig.name));
113
- process.exit(EXIT_CODES.SUCCESS);
113
+ return exit(EXIT_CODES.SUCCESS);
114
114
  }
115
115
  function projectValidateBuilder(yargs) {
116
116
  yargs.options({
@@ -150,7 +150,7 @@ const builder = makeYargsBuilder(projectValidateBuilder, command, describe, {
150
150
  const projectValidateCommand = {
151
151
  command,
152
152
  describe,
153
- handler,
153
+ handler: makeYargsHandlerWithUsageTracking('project-validate', handler),
154
154
  builder,
155
155
  };
156
156
  export default projectValidateCommand;
@@ -6,16 +6,17 @@ import { createWatcher } from '../../lib/projects/watch.js';
6
6
  import { logError, ApiErrorContext } from '../../lib/errorHandlers/index.js';
7
7
  import { uiLogger } from '../../lib/ui/logger.js';
8
8
  import { PROJECT_ERROR_TYPES } from '../../lib/constants.js';
9
- import { trackCommandUsage } from '../../lib/usageTracking.js';
10
9
  import { getProjectConfig, validateProjectConfig, } from '../../lib/projects/config.js';
11
10
  import { logFeedbackMessage } from '../../lib/projects/ui.js';
12
11
  import { handleProjectUpload } from '../../lib/projects/upload.js';
13
12
  import { pollBuildStatus, pollDeployStatus, } from '../../lib/projects/pollProjectBuildAndDeploy.js';
14
13
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
15
14
  import { handleKeypress, handleExit } from '../../lib/process.js';
15
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
16
16
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
17
+ import { uiDeprecatedTag } from '../../lib/ui/index.js';
17
18
  const command = 'watch';
18
- const describe = commands.project.watch.describe;
19
+ const describe = uiDeprecatedTag(commands.project.watch.describe, false);
19
20
  async function handleBuildStatus(accountId, projectName, buildId) {
20
21
  const { isAutoDeployEnabled, deployStatusTaskLocator } = await pollBuildStatus(accountId, projectName, buildId, null);
21
22
  if (isAutoDeployEnabled && deployStatusTaskLocator) {
@@ -23,28 +24,28 @@ async function handleBuildStatus(accountId, projectName, buildId) {
23
24
  }
24
25
  logFeedbackMessage(buildId);
25
26
  }
26
- function handleUserInput(accountId, projectName, currentBuildId) {
27
+ function handleUserInput(accountId, projectName, currentBuildId, exit) {
27
28
  const onTerminate = async () => {
28
29
  uiLogger.log(commands.project.watch.logs.processExited);
29
30
  if (currentBuildId) {
30
31
  try {
31
32
  await cancelStagedBuild(accountId, projectName);
32
- process.exit(EXIT_CODES.SUCCESS);
33
+ return exit(EXIT_CODES.SUCCESS);
33
34
  }
34
35
  catch (err) {
35
36
  if (isSpecifiedError(err, {
36
37
  subCategory: PROJECT_ERROR_TYPES.BUILD_NOT_IN_PROGRESS,
37
38
  })) {
38
- process.exit(EXIT_CODES.SUCCESS);
39
+ return exit(EXIT_CODES.SUCCESS);
39
40
  }
40
41
  else {
41
42
  logError(err, new ApiErrorContext({ accountId }));
42
- process.exit(EXIT_CODES.ERROR);
43
+ return exit(EXIT_CODES.ERROR);
43
44
  }
44
45
  }
45
46
  }
46
47
  else {
47
- process.exit(EXIT_CODES.SUCCESS);
48
+ return exit(EXIT_CODES.SUCCESS);
48
49
  }
49
50
  };
50
51
  handleExit(onTerminate);
@@ -55,23 +56,22 @@ function handleUserInput(accountId, projectName, currentBuildId) {
55
56
  });
56
57
  }
57
58
  async function handler(args) {
58
- const { initialUpload, derivedAccountId } = args;
59
- trackCommandUsage('project-watch', undefined, derivedAccountId);
59
+ const { initialUpload, derivedAccountId, exit } = args;
60
60
  const { projectConfig, projectDir } = await getProjectConfig();
61
61
  if (!projectConfig || !projectDir) {
62
62
  uiLogger.error(commands.project.watch.errors.projectConfigNotFound);
63
- return process.exit(EXIT_CODES.ERROR);
63
+ return exit(EXIT_CODES.ERROR);
64
64
  }
65
65
  if (isV2Project(projectConfig.platformVersion)) {
66
- uiLogger.error(projectConfig.platformVersion);
67
- return process.exit(EXIT_CODES.ERROR);
66
+ uiLogger.error(commands.project.watch.errors.v2ApiError(projectConfig.platformVersion));
67
+ return exit(EXIT_CODES.ERROR);
68
68
  }
69
69
  try {
70
70
  validateProjectConfig(projectConfig, projectDir);
71
71
  }
72
72
  catch (error) {
73
73
  logError(error);
74
- process.exit(EXIT_CODES.ERROR);
74
+ return exit(EXIT_CODES.ERROR);
75
75
  }
76
76
  try {
77
77
  const { data: { results: builds }, } = await fetchProjectBuilds(derivedAccountId, projectConfig.name);
@@ -79,14 +79,14 @@ async function handler(args) {
79
79
  const handleWatchTermination = (error) => {
80
80
  if (error) {
81
81
  logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
82
- process.exit(EXIT_CODES.ERROR);
82
+ return exit(EXIT_CODES.ERROR);
83
83
  }
84
84
  else {
85
- process.exit(EXIT_CODES.SUCCESS);
85
+ return exit(EXIT_CODES.SUCCESS);
86
86
  }
87
87
  };
88
88
  const startWatching = async () => {
89
- await createWatcher(derivedAccountId, projectConfig, projectDir, handleBuildStatus, handleUserInput, handleWatchTermination);
89
+ await createWatcher(derivedAccountId, projectConfig, projectDir, handleBuildStatus, (accountId, projectName, buildId) => handleUserInput(accountId, projectName, buildId, exit), handleWatchTermination);
90
90
  };
91
91
  // Upload all files if no build exists for this project yet
92
92
  if (initialUpload || hasNoBuilds) {
@@ -98,7 +98,7 @@ async function handler(args) {
98
98
  isUploadCommand: false,
99
99
  });
100
100
  if (projectNotFound) {
101
- process.exit(EXIT_CODES.ERROR);
101
+ return exit(EXIT_CODES.ERROR);
102
102
  }
103
103
  if (uploadError) {
104
104
  if (isSpecifiedError(uploadError, {
@@ -114,7 +114,7 @@ async function handler(args) {
114
114
  request: 'project upload',
115
115
  }));
116
116
  }
117
- process.exit(EXIT_CODES.ERROR);
117
+ return exit(EXIT_CODES.ERROR);
118
118
  }
119
119
  }
120
120
  else {
@@ -123,7 +123,7 @@ async function handler(args) {
123
123
  }
124
124
  catch (e) {
125
125
  logError(e, new ApiErrorContext({ accountId: derivedAccountId }));
126
- process.exit(EXIT_CODES.ERROR);
126
+ return exit(EXIT_CODES.ERROR);
127
127
  }
128
128
  }
129
129
  function projectWatchBuilder(yargs) {
@@ -146,7 +146,7 @@ const builder = makeYargsBuilder(projectWatchBuilder, command, describe, {
146
146
  const projectWatchCommand = {
147
147
  command,
148
148
  describe,
149
- handler,
149
+ handler: makeYargsHandlerWithUsageTracking('project-watch', handler),
150
150
  builder,
151
151
  };
152
152
  export default projectWatchCommand;
@@ -17,6 +17,8 @@ import updateDeps from './project/updateDeps.js';
17
17
  import profile from './project/profile.js';
18
18
  import projectValidate from './project/validate.js';
19
19
  import list from './project/list.js';
20
+ import info from './project/info.js';
21
+ import deleteProject from './project/delete.js';
20
22
  import { makeYargsBuilder } from '../lib/yargsUtils.js';
21
23
  import { getProjectConfig } from '../lib/projects/config.js';
22
24
  import { isUnsupportedPlatformVersion, LATEST_SUPPORTED_PLATFORM_VERSION, } from '../lib/projects/platformVersion.js';
@@ -44,8 +46,10 @@ function projectBuilder(yargs) {
44
46
  yargs
45
47
  .command(create)
46
48
  .command(add)
49
+ .command(deleteProject)
47
50
  .command(watch)
48
51
  .command(list)
52
+ .command(info)
49
53
  .command(dev)
50
54
  .command(upload)
51
55
  .command(deploy)