@hubspot/cli 8.0.11-experimental.0 → 8.0.11-experimental.1

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 (534) 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.js +17 -17
  78. package/commands/project/installDeps.js +9 -6
  79. package/commands/project/lint.js +11 -8
  80. package/commands/project/list.js +14 -14
  81. package/commands/project/listBuilds.js +8 -6
  82. package/commands/project/logs.js +5 -6
  83. package/commands/project/migrate.js +8 -8
  84. package/commands/project/open.js +5 -6
  85. package/commands/project/profile/add.js +12 -8
  86. package/commands/project/profile/delete.js +15 -11
  87. package/commands/project/updateDeps.js +9 -6
  88. package/commands/project/upload.js +31 -17
  89. package/commands/project/validate.js +11 -11
  90. package/commands/project/watch.js +20 -20
  91. package/commands/project.js +2 -0
  92. package/commands/sandbox/create.js +15 -15
  93. package/commands/sandbox/delete.js +13 -14
  94. package/commands/secret/addSecret.js +6 -7
  95. package/commands/secret/deleteSecret.js +5 -6
  96. package/commands/secret/listSecret.js +2 -3
  97. package/commands/secret/updateSecret.js +4 -5
  98. package/commands/testAccount/create.d.ts +1 -1
  99. package/commands/testAccount/create.js +20 -16
  100. package/commands/testAccount/createConfig.js +7 -8
  101. package/commands/testAccount/delete.js +27 -18
  102. package/commands/testAccount/importData.js +6 -7
  103. package/commands/upgrade.js +9 -10
  104. package/lang/en.d.ts +94 -7
  105. package/lang/en.js +94 -10
  106. package/lib/accountAuth.js +2 -2
  107. package/lib/buildAccount.js +3 -3
  108. package/lib/constants.d.ts +0 -1
  109. package/lib/constants.js +0 -1
  110. package/lib/doctor/Diagnosis.js +5 -5
  111. package/lib/errorHandlers/index.js +4 -3
  112. package/lib/errorHandlers/suppressError.js +4 -0
  113. package/lib/errors/PromptExitError.d.ts +4 -2
  114. package/lib/errors/PromptExitError.js +3 -0
  115. package/lib/hasFeature.js +1 -2
  116. package/lib/middleware/autoUpdateMiddleware.js +6 -3
  117. package/lib/process.d.ts +1 -1
  118. package/lib/process.js +10 -3
  119. package/lib/projects/create/v2.js +1 -2
  120. package/lib/projects/delete.d.ts +13 -0
  121. package/lib/projects/delete.js +193 -0
  122. package/lib/projects/localDev/AppDevModeInterface.js +11 -11
  123. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +3 -1
  124. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
  125. package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
  126. package/lib/projects/localDev/DevSessionManager.js +31 -19
  127. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +3 -0
  128. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +16 -12
  129. package/lib/projects/localDev/LocalDevProcess.js +6 -5
  130. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  131. package/lib/projects/localDev/LocalDevState.js +3 -1
  132. package/lib/projects/localDev/helpers/account.d.ts +4 -3
  133. package/lib/projects/localDev/helpers/account.js +16 -19
  134. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  135. package/lib/projects/localDev/helpers/process.js +4 -10
  136. package/lib/projects/localDev/helpers/project.d.ts +4 -3
  137. package/lib/projects/localDev/helpers/project.js +31 -15
  138. package/lib/projects/projectInfo.d.ts +3 -20
  139. package/lib/projects/projectInfo.js +32 -54
  140. package/lib/projects/projectProfiles.d.ts +1 -2
  141. package/lib/projects/projectProfiles.js +5 -17
  142. package/lib/projects/upload.js +19 -0
  143. package/lib/projects/workspaces.d.ts +42 -0
  144. package/lib/projects/workspaces.js +350 -0
  145. package/lib/prompts/createApiSamplePrompt.js +4 -0
  146. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  147. package/lib/prompts/projectProfilePrompt.js +46 -0
  148. package/lib/prompts/promptUtils.js +3 -2
  149. package/lib/prompts/selectHubDBTablePrompt.js +2 -2
  150. package/lib/prompts/selectPublicAppForMigrationPrompt.js +2 -2
  151. package/lib/theme/cmsDevServerProcess.d.ts +2 -0
  152. package/lib/theme/cmsDevServerProcess.js +7 -6
  153. package/lib/ui/SpinniesManager.d.ts +1 -0
  154. package/lib/ui/SpinniesManager.js +20 -6
  155. package/lib/ui/spinniesUtils.d.ts +0 -1
  156. package/lib/ui/spinniesUtils.js +6 -16
  157. package/lib/usageTracking.d.ts +3 -4
  158. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  159. package/lib/yargs/makeYargsBuilder.js +33 -0
  160. package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
  161. package/lib/yargs/makeYargsHandlerWithUsageTracking.js +95 -0
  162. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  163. package/lib/yargs/strictEnforceBoolean.js +13 -0
  164. package/lib/yargsUtils.d.ts +3 -16
  165. package/lib/yargsUtils.js +3 -48
  166. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +1 -1
  167. package/package.json +10 -5
  168. package/types/LocalDev.d.ts +5 -0
  169. package/types/Projects.d.ts +19 -0
  170. package/types/Yargs.d.ts +18 -1
  171. package/api/__tests__/migrate.test.d.ts +0 -1
  172. package/api/__tests__/migrate.test.js +0 -199
  173. package/commands/__tests__/account.test.d.ts +0 -1
  174. package/commands/__tests__/account.test.js +0 -69
  175. package/commands/__tests__/auth.test.d.ts +0 -1
  176. package/commands/__tests__/auth.test.js +0 -43
  177. package/commands/__tests__/cms.test.d.ts +0 -1
  178. package/commands/__tests__/cms.test.js +0 -87
  179. package/commands/__tests__/config.test.d.ts +0 -1
  180. package/commands/__tests__/config.test.js +0 -44
  181. package/commands/__tests__/customObject.test.d.ts +0 -1
  182. package/commands/__tests__/customObject.test.js +0 -68
  183. package/commands/__tests__/doctor.test.d.ts +0 -1
  184. package/commands/__tests__/doctor.test.js +0 -132
  185. package/commands/__tests__/feedback.test.d.ts +0 -1
  186. package/commands/__tests__/feedback.test.js +0 -24
  187. package/commands/__tests__/filemanager.test.d.ts +0 -1
  188. package/commands/__tests__/filemanager.test.js +0 -45
  189. package/commands/__tests__/getStarted.test.d.ts +0 -1
  190. package/commands/__tests__/getStarted.test.js +0 -173
  191. package/commands/__tests__/hubdb.test.d.ts +0 -1
  192. package/commands/__tests__/hubdb.test.js +0 -50
  193. package/commands/__tests__/init.test.d.ts +0 -1
  194. package/commands/__tests__/init.test.js +0 -42
  195. package/commands/__tests__/mcp.test.d.ts +0 -1
  196. package/commands/__tests__/mcp.test.js +0 -46
  197. package/commands/__tests__/open.test.d.ts +0 -1
  198. package/commands/__tests__/open.test.js +0 -58
  199. package/commands/__tests__/project.test.d.ts +0 -1
  200. package/commands/__tests__/project.test.js +0 -125
  201. package/commands/__tests__/sandbox.test.d.ts +0 -1
  202. package/commands/__tests__/sandbox.test.js +0 -44
  203. package/commands/__tests__/secret.test.d.ts +0 -1
  204. package/commands/__tests__/secret.test.js +0 -49
  205. package/commands/__tests__/testAccount.test.d.ts +0 -1
  206. package/commands/__tests__/testAccount.test.js +0 -57
  207. package/commands/__tests__/upgrade.test.d.ts +0 -1
  208. package/commands/__tests__/upgrade.test.js +0 -309
  209. package/commands/account/__tests__/auth.test.d.ts +0 -1
  210. package/commands/account/__tests__/auth.test.js +0 -206
  211. package/commands/account/__tests__/clean.test.d.ts +0 -1
  212. package/commands/account/__tests__/clean.test.js +0 -28
  213. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  214. package/commands/account/__tests__/createOverride.test.js +0 -32
  215. package/commands/account/__tests__/info.test.d.ts +0 -1
  216. package/commands/account/__tests__/info.test.js +0 -28
  217. package/commands/account/__tests__/list.test.d.ts +0 -1
  218. package/commands/account/__tests__/list.test.js +0 -153
  219. package/commands/account/__tests__/remove.test.d.ts +0 -1
  220. package/commands/account/__tests__/remove.test.js +0 -36
  221. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  222. package/commands/account/__tests__/removeOverride.js +0 -25
  223. package/commands/account/__tests__/rename.test.d.ts +0 -1
  224. package/commands/account/__tests__/rename.test.js +0 -82
  225. package/commands/account/__tests__/use.test.d.ts +0 -1
  226. package/commands/account/__tests__/use.test.js +0 -170
  227. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  228. package/commands/app/__tests__/migrate.test.js +0 -111
  229. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  230. package/commands/app/secret/__tests__/add.test.js +0 -140
  231. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  232. package/commands/app/secret/__tests__/delete.test.js +0 -28
  233. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  234. package/commands/app/secret/__tests__/list.test.js +0 -25
  235. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  236. package/commands/app/secret/__tests__/update.test.js +0 -28
  237. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  238. package/commands/cms/__tests__/delete.test.js +0 -39
  239. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  240. package/commands/cms/__tests__/fetch.test.js +0 -156
  241. package/commands/cms/__tests__/function.test.d.ts +0 -1
  242. package/commands/cms/__tests__/function.test.js +0 -50
  243. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  244. package/commands/cms/__tests__/lint.test.js +0 -33
  245. package/commands/cms/__tests__/list.test.d.ts +0 -1
  246. package/commands/cms/__tests__/list.test.js +0 -42
  247. package/commands/cms/__tests__/module.test.d.ts +0 -1
  248. package/commands/cms/__tests__/module.test.js +0 -45
  249. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  250. package/commands/cms/__tests__/mv.test.js +0 -46
  251. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  252. package/commands/cms/__tests__/theme.test.js +0 -54
  253. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  254. package/commands/cms/__tests__/upload.test.js +0 -312
  255. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  256. package/commands/cms/__tests__/watch.test.js +0 -204
  257. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  258. package/commands/cms/function/__tests__/logs.test.js +0 -70
  259. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  260. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  261. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  262. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  263. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  264. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  265. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  266. package/commands/customObject/__tests__/create.test.js +0 -40
  267. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  268. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  269. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  270. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  271. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  272. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  273. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  274. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  275. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  276. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  277. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  278. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  279. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  280. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  281. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  282. package/commands/filemanager/__tests__/upload.test.js +0 -191
  283. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  284. package/commands/hubdb/__tests__/clear.test.js +0 -28
  285. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  286. package/commands/hubdb/__tests__/create.test.js +0 -28
  287. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  288. package/commands/hubdb/__tests__/delete.test.js +0 -28
  289. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  290. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  291. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  292. package/commands/hubdb/__tests__/list.test.js +0 -88
  293. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  294. package/commands/mcp/__tests__/setup.test.js +0 -26
  295. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  296. package/commands/mcp/__tests__/start.test.js +0 -144
  297. package/commands/project/__tests__/add.test.d.ts +0 -1
  298. package/commands/project/__tests__/add.test.js +0 -107
  299. package/commands/project/__tests__/create.test.d.ts +0 -1
  300. package/commands/project/__tests__/create.test.js +0 -97
  301. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  302. package/commands/project/__tests__/deploy.test.js +0 -307
  303. package/commands/project/__tests__/dev.test.d.ts +0 -1
  304. package/commands/project/__tests__/dev.test.js +0 -273
  305. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  306. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  307. package/commands/project/__tests__/download.test.d.ts +0 -1
  308. package/commands/project/__tests__/download.test.js +0 -39
  309. package/commands/project/__tests__/info.test.d.ts +0 -1
  310. package/commands/project/__tests__/info.test.js +0 -145
  311. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  312. package/commands/project/__tests__/installDeps.test.js +0 -140
  313. package/commands/project/__tests__/lint.test.d.ts +0 -1
  314. package/commands/project/__tests__/lint.test.js +0 -704
  315. package/commands/project/__tests__/list.test.d.ts +0 -1
  316. package/commands/project/__tests__/list.test.js +0 -31
  317. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  318. package/commands/project/__tests__/listBuilds.test.js +0 -38
  319. package/commands/project/__tests__/logs.test.d.ts +0 -1
  320. package/commands/project/__tests__/logs.test.js +0 -202
  321. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  322. package/commands/project/__tests__/migrate.test.js +0 -106
  323. package/commands/project/__tests__/open.test.d.ts +0 -1
  324. package/commands/project/__tests__/open.test.js +0 -39
  325. package/commands/project/__tests__/profile.test.d.ts +0 -1
  326. package/commands/project/__tests__/profile.test.js +0 -42
  327. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  328. package/commands/project/__tests__/updateDeps.test.js +0 -140
  329. package/commands/project/__tests__/upload.test.d.ts +0 -1
  330. package/commands/project/__tests__/upload.test.js +0 -234
  331. package/commands/project/__tests__/validate.test.d.ts +0 -1
  332. package/commands/project/__tests__/validate.test.js +0 -381
  333. package/commands/project/__tests__/watch.test.d.ts +0 -1
  334. package/commands/project/__tests__/watch.test.js +0 -35
  335. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  336. package/commands/sandbox/__tests__/create.test.js +0 -198
  337. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  338. package/commands/sandbox/__tests__/delete.test.js +0 -31
  339. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  340. package/commands/secret/__tests__/addSecret.test.js +0 -162
  341. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  342. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  343. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  344. package/commands/secret/__tests__/listSecret.test.js +0 -29
  345. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  346. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  347. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  348. package/commands/testAccount/__tests__/create.test.js +0 -106
  349. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  350. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  351. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  352. package/commands/testAccount/__tests__/delete.test.js +0 -29
  353. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  354. package/commands/testAccount/__tests__/importData.test.js +0 -92
  355. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  356. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  357. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  358. package/lib/__tests__/accountAuth.test.js +0 -258
  359. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  360. package/lib/__tests__/accountTypes.test.js +0 -98
  361. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  362. package/lib/__tests__/buildAccount.test.js +0 -211
  363. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  364. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  365. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  366. package/lib/__tests__/commandSuggestion.test.js +0 -121
  367. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  368. package/lib/__tests__/commonOpts.test.js +0 -80
  369. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  370. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  371. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  372. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  373. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  374. package/lib/__tests__/hasFeature.test.js +0 -167
  375. package/lib/__tests__/http.test.d.ts +0 -1
  376. package/lib/__tests__/http.test.js +0 -40
  377. package/lib/__tests__/importData.test.d.ts +0 -1
  378. package/lib/__tests__/importData.test.js +0 -98
  379. package/lib/__tests__/npmCli.test.d.ts +0 -1
  380. package/lib/__tests__/npmCli.test.js +0 -84
  381. package/lib/__tests__/oauth.test.d.ts +0 -1
  382. package/lib/__tests__/oauth.test.js +0 -109
  383. package/lib/__tests__/parsing.test.d.ts +0 -1
  384. package/lib/__tests__/parsing.test.js +0 -34
  385. package/lib/__tests__/polling.test.d.ts +0 -1
  386. package/lib/__tests__/polling.test.js +0 -76
  387. package/lib/__tests__/process.test.d.ts +0 -1
  388. package/lib/__tests__/process.test.js +0 -89
  389. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  390. package/lib/__tests__/sandboxes.test.js +0 -128
  391. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  392. package/lib/__tests__/serverlessLogs.test.js +0 -163
  393. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  394. package/lib/__tests__/usageTracking.test.js +0 -197
  395. package/lib/__tests__/validation.test.d.ts +0 -1
  396. package/lib/__tests__/validation.test.js +0 -143
  397. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  398. package/lib/__tests__/yargsUtils.test.js +0 -124
  399. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  400. package/lib/app/__tests__/migrate.test.js +0 -638
  401. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  402. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  403. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  404. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  405. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  406. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  407. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  408. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  409. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  410. package/lib/mcp/__tests__/setup.test.js +0 -523
  411. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  412. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  413. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  414. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  415. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  416. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  417. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  418. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  419. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  420. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  421. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  422. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  423. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  424. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  425. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  426. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  427. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  428. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  429. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  430. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  431. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  432. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  433. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  434. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  435. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  436. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  437. package/lib/projects/__tests__/components.test.d.ts +0 -1
  438. package/lib/projects/__tests__/components.test.js +0 -440
  439. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  440. package/lib/projects/__tests__/deploy.test.js +0 -231
  441. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  442. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  443. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  444. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  445. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  446. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  447. package/lib/projects/__tests__/projectInfo.test.d.ts +0 -1
  448. package/lib/projects/__tests__/projectInfo.test.js +0 -114
  449. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  450. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  451. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  452. package/lib/projects/__tests__/projects.test.js +0 -58
  453. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  454. package/lib/projects/__tests__/structure.test.js +0 -210
  455. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  456. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  457. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  458. package/lib/projects/__tests__/upload.test.js +0 -183
  459. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  460. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  461. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  462. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  463. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  464. package/lib/projects/create/__tests__/legacy.test.js +0 -72
  465. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  466. package/lib/projects/create/__tests__/v2.test.js +0 -257
  467. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  468. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  469. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  470. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  471. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  472. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  473. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  474. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  475. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  476. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  477. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  478. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  479. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  480. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  481. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  482. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  483. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  484. package/lib/theme/__tests__/migrate.test.js +0 -247
  485. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  486. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  487. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  488. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  489. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  490. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
  491. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  492. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
  493. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  494. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
  495. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  496. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
  497. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  498. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
  499. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  500. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
  501. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  502. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
  503. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  504. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -131
  505. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  506. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
  507. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  508. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
  509. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  510. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  511. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  512. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  513. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  514. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
  515. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  516. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  517. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  518. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  519. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  520. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  521. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  522. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  523. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  524. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  525. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  526. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
  527. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  528. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  529. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  530. package/mcp-server/utils/__tests__/command.test.js +0 -275
  531. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  532. package/mcp-server/utils/__tests__/content.test.js +0 -164
  533. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  534. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
@@ -1,20 +1,19 @@
1
1
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
2
2
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
3
3
  import { commands } from '../../lang/en.js';
4
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
4
5
  import { addMcpServerToConfig, supportedTools } from '../../lib/mcp/setup.js';
5
- import { trackCommandUsage } from '../../lib/usageTracking.js';
6
6
  const command = ['setup'];
7
7
  const describe = commands.mcp.setup.describe;
8
8
  async function handler(args) {
9
- const { derivedAccountId } = args;
10
- await trackCommandUsage('mcp-setup', {}, derivedAccountId);
9
+ const { exit } = args;
11
10
  try {
12
11
  await addMcpServerToConfig(args.client);
13
12
  }
14
13
  catch (e) {
15
- process.exit(EXIT_CODES.ERROR);
14
+ return exit(EXIT_CODES.ERROR);
16
15
  }
17
- process.exit(EXIT_CODES.SUCCESS);
16
+ return exit(EXIT_CODES.SUCCESS);
18
17
  }
19
18
  function setupBuilder(yargs) {
20
19
  yargs.option('client', {
@@ -30,7 +29,7 @@ const builder = makeYargsBuilder(setupBuilder, command, describe, {
30
29
  const mcpSetupCommand = {
31
30
  command,
32
31
  describe,
33
- handler,
32
+ handler: makeYargsHandlerWithUsageTracking('mcp-setup', handler),
34
33
  builder,
35
34
  };
36
35
  export default mcpSetupCommand;
@@ -7,14 +7,13 @@ import { uiLogger } from '../../lib/ui/logger.js';
7
7
  import { logError } from '../../lib/errorHandlers/index.js';
8
8
  import { commands } from '../../lang/en.js';
9
9
  import { handleExit } from '../../lib/process.js';
10
- import { trackCommandUsage } from '../../lib/usageTracking.js';
10
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
11
11
  import { fileURLToPath } from 'url';
12
12
  const command = 'start';
13
13
  const describe = undefined; // Leave hidden for now
14
14
  const __filename = fileURLToPath(import.meta.url);
15
15
  const __dirname = path.dirname(__filename);
16
16
  async function handler(args) {
17
- trackCommandUsage('mcp-start', {}, args.derivedAccountId);
18
17
  await startMcpServer(args.aiAgent);
19
18
  }
20
19
  async function startMcpServer(aiAgent) {
@@ -66,7 +65,7 @@ const builder = makeYargsBuilder(startBuilder, command, describe, {
66
65
  const mcpStartCommand = {
67
66
  command,
68
67
  describe,
69
- handler,
68
+ handler: makeYargsHandlerWithUsageTracking('mcp-start', handler),
70
69
  builder,
71
70
  };
72
71
  export default mcpStartCommand;
package/commands/open.js CHANGED
@@ -1,8 +1,8 @@
1
- import { trackCommandUsage } from '../lib/usageTracking.js';
2
1
  import { logSiteLinks, getSiteLinksAsArray, openLink } from '../lib/links.js';
3
2
  import { promptUser } from '../lib/prompts/promptUtils.js';
4
3
  import { commands } from '../lang/en.js';
5
4
  import { EXIT_CODES } from '../lib/enums/exitCodes.js';
5
+ import { makeYargsHandlerWithUsageTracking } from '../lib/yargs/makeYargsHandlerWithUsageTracking.js';
6
6
  import { makeYargsBuilder } from '../lib/yargsUtils.js';
7
7
  const separator = ' => ';
8
8
  async function createListPrompt(accountId) {
@@ -22,8 +22,7 @@ async function createListPrompt(accountId) {
22
22
  const command = 'open [shortcut]';
23
23
  const describe = commands.open.describe;
24
24
  async function handler(args) {
25
- const { shortcut, list, derivedAccountId } = args;
26
- trackCommandUsage('open', undefined, derivedAccountId);
25
+ const { shortcut, list, derivedAccountId, exit } = args;
27
26
  if (shortcut === undefined && !list) {
28
27
  const { open } = await createListPrompt(derivedAccountId);
29
28
  openLink(derivedAccountId, open);
@@ -34,7 +33,7 @@ async function handler(args) {
34
33
  else if (shortcut) {
35
34
  openLink(derivedAccountId, shortcut);
36
35
  }
37
- process.exit(EXIT_CODES.SUCCESS);
36
+ return exit(EXIT_CODES.SUCCESS);
38
37
  }
39
38
  function openBuilder(yargs) {
40
39
  yargs.positional('[shortcut]', {
@@ -64,7 +63,7 @@ const builder = makeYargsBuilder(openBuilder, command, describe, {
64
63
  const openCommand = {
65
64
  command,
66
65
  describe,
67
- handler,
66
+ handler: makeYargsHandlerWithUsageTracking('open', handler),
68
67
  builder,
69
68
  };
70
69
  export default openCommand;
@@ -1,6 +1,8 @@
1
1
  import { logError } from '../../lib/errorHandlers/index.js';
2
2
  import { getProjectConfig } from '../../lib/projects/config.js';
3
3
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
4
+ import { isPromptExitError } from '../../lib/errors/PromptExitError.js';
5
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
4
6
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
5
7
  import { commands } from '../../lang/en.js';
6
8
  import { isV2Project } from '../../lib/projects/platformVersion.js';
@@ -11,12 +13,12 @@ import { uiLogger } from '../../lib/ui/logger.js';
11
13
  const command = 'add';
12
14
  const describe = commands.project.add.describe;
13
15
  async function handler(args) {
16
+ const { derivedAccountId, exit } = args;
14
17
  try {
15
- const { derivedAccountId } = args;
16
18
  const { projectConfig, projectDir } = await getProjectConfig();
17
19
  if (!projectDir || !projectConfig) {
18
20
  uiLogger.error(commands.project.add.error.locationInProject);
19
- process.exit(EXIT_CODES.ERROR);
21
+ return exit(EXIT_CODES.ERROR);
20
22
  }
21
23
  const isV2ProjectCreate = isV2Project(projectConfig.platformVersion);
22
24
  if (isV2ProjectCreate) {
@@ -27,10 +29,13 @@ async function handler(args) {
27
29
  }
28
30
  }
29
31
  catch (e) {
32
+ if (isPromptExitError(e)) {
33
+ throw e;
34
+ }
30
35
  logError(e);
31
- process.exit(EXIT_CODES.ERROR);
36
+ return exit(EXIT_CODES.ERROR);
32
37
  }
33
- process.exit(EXIT_CODES.SUCCESS);
38
+ return exit(EXIT_CODES.SUCCESS);
34
39
  }
35
40
  function projectAddBuilder(yargs) {
36
41
  yargs.options({
@@ -73,7 +78,7 @@ const builder = makeYargsBuilder(projectAddBuilder, command, describe, {
73
78
  const projectAddCommand = {
74
79
  command,
75
80
  describe,
76
- handler,
81
+ handler: makeYargsHandlerWithUsageTracking('project-add', handler),
77
82
  builder,
78
83
  };
79
84
  export default projectAddCommand;
@@ -2,7 +2,6 @@ import path from 'path';
2
2
  import fs from 'fs-extra';
3
3
  import { cloneGithubRepo } from '@hubspot/local-dev-lib/github';
4
4
  import { getCwd } from '@hubspot/local-dev-lib/path';
5
- import { trackCommandUsage } from '../../lib/usageTracking.js';
6
5
  import { writeProjectConfig, getProjectConfig, } from '../../lib/projects/config.js';
7
6
  import { EMPTY_PROJECT_TEMPLATE_NAME } from '../../lib/projects/create/legacy.js';
8
7
  import { generateComponentPaths } from '../../lib/projects/create/v2.js';
@@ -10,6 +9,7 @@ import { PROJECT_WITH_APP, EMPTY_PROJECT } from '../../lib/constants.js';
10
9
  import { debugError, logError } from '../../lib/errorHandlers/index.js';
11
10
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
12
11
  import { PROJECT_CONFIG_FILE, HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, marketplaceDistribution, privateDistribution, oAuth, staticAuth, DEFAULT_PROJECT_TEMPLATE_BRANCH, } from '../../lib/constants.js';
12
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
13
13
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
14
14
  import { PLATFORM_VERSIONS } from '@hubspot/local-dev-lib/constants/projects';
15
15
  import { commands } from '../../lang/en.js';
@@ -22,10 +22,10 @@ const command = ['create', 'init'];
22
22
  const describe = commands.project.create.describe;
23
23
  const { v2025_1, v2025_2, v2026_03_beta, v2026_03 } = PLATFORM_VERSIONS;
24
24
  async function handler(args) {
25
- const { derivedAccountId, platformVersion, templateSource } = args;
25
+ const { platformVersion, templateSource, exit, addUsageMetadata } = args;
26
26
  if (templateSource && !templateSource.includes('/')) {
27
27
  uiLogger.error(commands.project.create.errors.invalidTemplateSource);
28
- process.exit(EXIT_CODES.ERROR);
28
+ return exit(EXIT_CODES.ERROR);
29
29
  }
30
30
  const repo = templateSource || HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
31
31
  let handleResult;
@@ -34,16 +34,16 @@ async function handler(args) {
34
34
  }
35
35
  catch (error) {
36
36
  logError(error);
37
- process.exit(EXIT_CODES.ERROR);
37
+ return exit(EXIT_CODES.ERROR);
38
38
  }
39
39
  const { authType, distribution, repoConfig, projectContents, selectProjectTemplatePromptResponse, projectNameAndDestPromptResponse, } = handleResult;
40
- trackCommandUsage('project-create', {
40
+ addUsageMetadata({
41
41
  type: selectProjectTemplatePromptResponse.projectTemplate?.name ||
42
42
  (selectProjectTemplatePromptResponse.componentTemplates || [])
43
43
  // @ts-expect-error
44
44
  .map((item) => item.type)
45
45
  .join(','),
46
- }, derivedAccountId);
46
+ });
47
47
  const projectDest = path.resolve(getCwd(), projectNameAndDestPromptResponse.dest);
48
48
  const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await getProjectConfig(projectDest);
49
49
  // Exit if the target destination is within an existing project
@@ -51,7 +51,7 @@ async function handler(args) {
51
51
  existingProjectDir &&
52
52
  projectDest.startsWith(existingProjectDir)) {
53
53
  uiLogger.error(commands.project.create.errors.cannotNestProjects(existingProjectDir));
54
- process.exit(EXIT_CODES.ERROR);
54
+ return exit(EXIT_CODES.ERROR);
55
55
  }
56
56
  const components = generateComponentPaths({
57
57
  selectProjectTemplatePromptResponse,
@@ -79,7 +79,7 @@ async function handler(args) {
79
79
  });
80
80
  debugError(err);
81
81
  uiLogger.error(commands.project.create.errors.failedToDownloadProject);
82
- process.exit(EXIT_CODES.ERROR);
82
+ return exit(EXIT_CODES.ERROR);
83
83
  }
84
84
  const projectConfigPath = path.join(projectDest, PROJECT_CONFIG_FILE);
85
85
  const parsedConfigFile = JSON.parse(fs.readFileSync(projectConfigPath).toString());
@@ -102,7 +102,7 @@ async function handler(args) {
102
102
  if (isProjectEmpty) {
103
103
  fs.ensureDirSync(path.join(projectDest, 'src'));
104
104
  }
105
- process.exit(EXIT_CODES.SUCCESS);
105
+ return exit(EXIT_CODES.SUCCESS);
106
106
  }
107
107
  function projectCreateBuilder(yargs) {
108
108
  yargs.options({
@@ -169,7 +169,7 @@ const builder = makeYargsBuilder(projectCreateBuilder, command, describe, {
169
169
  const projectCreateCommand = {
170
170
  command,
171
171
  describe,
172
- handler,
172
+ handler: makeYargsHandlerWithUsageTracking('project-create', handler),
173
173
  builder,
174
174
  };
175
175
  export default projectCreateCommand;
@@ -0,0 +1,7 @@
1
+ import { AccountArgs, CommonArgs, ConfigArgs, YargsCommandModule } from '../../types/Yargs.js';
2
+ export type ProjectDeleteArgs = CommonArgs & ConfigArgs & AccountArgs & {
3
+ projectName?: string;
4
+ force: boolean;
5
+ };
6
+ declare const projectDeleteCommand: YargsCommandModule<unknown, ProjectDeleteArgs>;
7
+ export default projectDeleteCommand;
@@ -0,0 +1,74 @@
1
+ import { makeYargsBuilder } from '../../lib/yargsUtils.js';
2
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
3
+ import { logError } from '../../lib/errorHandlers/index.js';
4
+ import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
5
+ import { renderInline } from '../../ui/render.js';
6
+ import { getWarningBox } from '../../ui/components/StatusMessageBoxes.js';
7
+ import { commands } from '../../lang/en.js';
8
+ import { isV2Project } from '../../lib/projects/platformVersion.js';
9
+ import { isPromptExitError } from '../../lib/errors/PromptExitError.js';
10
+ import { resolveProjectName, checkDeployedComponents, deleteDeployedComponents, confirmDeletion, handleProjectDeletion, } from '../../lib/projects/delete.js';
11
+ const command = 'delete';
12
+ const describe = commands.project.delete.describe;
13
+ const verboseDescribe = commands.project.delete.verboseDescribe;
14
+ async function handler(args) {
15
+ const { derivedAccountId, projectName: projectNameArg, force, exit } = args;
16
+ await renderInline(getWarningBox({
17
+ title: commands.project.delete.warnings.irreversibleTitle,
18
+ message: commands.project.delete.warnings.irreversible,
19
+ }));
20
+ try {
21
+ const projectName = await resolveProjectName(derivedAccountId, projectNameArg);
22
+ const { platformVersion, hasUnifiedComponents, projectId } = await checkDeployedComponents(derivedAccountId, projectName);
23
+ if (!force) {
24
+ await confirmDeletion(projectName, derivedAccountId, projectId);
25
+ }
26
+ if (isV2Project(platformVersion) && hasUnifiedComponents) {
27
+ await deleteDeployedComponents(derivedAccountId, projectName);
28
+ }
29
+ await handleProjectDeletion(derivedAccountId, projectName);
30
+ }
31
+ catch (e) {
32
+ if (isPromptExitError(e)) {
33
+ throw e;
34
+ }
35
+ logError(e);
36
+ return exit(EXIT_CODES.ERROR);
37
+ }
38
+ return exit(EXIT_CODES.SUCCESS);
39
+ }
40
+ function projectDeleteBuilder(yargs) {
41
+ yargs.option('project-name', {
42
+ describe: commands.project.delete.options.project,
43
+ type: 'string',
44
+ });
45
+ yargs.option('force', {
46
+ describe: commands.project.delete.options.force,
47
+ type: 'boolean',
48
+ default: false,
49
+ });
50
+ yargs.example([
51
+ [
52
+ '$0 project delete --project-name=my-project',
53
+ 'Delete a project in the current account named "my-project"',
54
+ ],
55
+ [
56
+ '$0 project delete --project-name=my-project --force',
57
+ 'Delete and skip confirmation prompt',
58
+ ],
59
+ ]);
60
+ return yargs;
61
+ }
62
+ const builder = makeYargsBuilder(projectDeleteBuilder, command, verboseDescribe, {
63
+ useGlobalOptions: true,
64
+ useConfigOptions: true,
65
+ useAccountOptions: true,
66
+ useEnvironmentOptions: true,
67
+ });
68
+ const projectDeleteCommand = {
69
+ command,
70
+ describe,
71
+ handler: makeYargsHandlerWithUsageTracking('project-delete', handler),
72
+ builder,
73
+ };
74
+ export default projectDeleteCommand;
@@ -2,56 +2,58 @@ import { fetchProject } from '@hubspot/local-dev-lib/api/projects';
2
2
  import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
3
3
  import { isHubSpotHttpError } from '@hubspot/local-dev-lib/errors/index';
4
4
  import { isV2Project } from '../../lib/projects/platformVersion.js';
5
- import { trackCommandUsage } from '../../lib/usageTracking.js';
6
5
  import { logError, ApiErrorContext } from '../../lib/errorHandlers/index.js';
7
- import { getProjectConfig } from '../../lib/projects/config.js';
6
+ import { getProjectConfig, validateProjectConfig, } from '../../lib/projects/config.js';
8
7
  import { projectNamePrompt } from '../../lib/prompts/projectNamePrompt.js';
8
+ import { projectProfilePrompt } from '../../lib/prompts/projectProfilePrompt.js';
9
9
  import { promptUser } from '../../lib/prompts/promptUtils.js';
10
10
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
11
11
  import { uiLogger } from '../../lib/ui/logger.js';
12
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
12
13
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
13
- import { loadProfile, logProfileFooter, logProfileHeader, enforceProfileUsage, } from '../../lib/projects/projectProfiles.js';
14
+ import { loadProfile } from '../../lib/projects/projectProfiles.js';
14
15
  import { PROJECT_DEPLOY_TEXT } from '../../lib/constants.js';
15
16
  import { commands } from '../../lang/en.js';
16
17
  import { handleProjectDeploy, validateBuildIdForDeploy, logDeployErrors, } from '../../lib/projects/deploy.js';
17
18
  const command = 'deploy';
18
19
  const describe = commands.project.deploy.describe;
19
20
  async function handler(args) {
20
- const { derivedAccountId, project: projectOption, buildId: buildIdOption, force: forceOption, deployLatestBuild: deployLatestBuildOption, json: formatOutputAsJson, } = args;
21
+ const { derivedAccountId, project: projectOption, buildId: buildIdOption, force: forceOption, deployLatestBuild: deployLatestBuildOption, json: formatOutputAsJson, profile: profileOption, useEnv: useEnvOption, exit, addUsageMetadata, } = args;
21
22
  const accountConfig = getConfigAccountById(derivedAccountId);
22
23
  const accountType = accountConfig && accountConfig.accountType;
23
24
  let targetAccountId;
24
25
  const jsonOutput = {};
25
26
  const { projectConfig, projectDir } = await getProjectConfig();
26
- if (isV2Project(projectConfig?.platformVersion)) {
27
- if (args.profile) {
28
- logProfileHeader(args.profile);
29
- let profile;
30
- try {
31
- profile = loadProfile(projectConfig, projectDir, args.profile);
32
- }
33
- catch (error) {
34
- logError(error);
35
- process.exit(EXIT_CODES.ERROR);
27
+ let isInProjectDirectory = false;
28
+ // Validate project config, but it's valid to run this command from outside a project dir
29
+ try {
30
+ validateProjectConfig(projectConfig, projectDir);
31
+ isInProjectDirectory = true;
32
+ }
33
+ catch (e) { }
34
+ if (isInProjectDirectory && isV2Project(projectConfig?.platformVersion)) {
35
+ try {
36
+ const profileName = await projectProfilePrompt(projectDir, projectConfig, profileOption, !!useEnvOption);
37
+ if (profileName) {
38
+ // Use loadProfile instead of loadAndValidateProfile because the local
39
+ // profile does not need to be valid to successfully deploy
40
+ const profile = loadProfile(projectConfig, projectDir, profileName);
41
+ targetAccountId = profile.accountId;
42
+ uiLogger.log(commands.project.deploy.profileMessage(profileName, targetAccountId));
43
+ uiLogger.log('');
36
44
  }
37
- targetAccountId = profile.accountId;
38
- logProfileFooter(profile);
39
45
  }
40
- else {
41
- // A profile must be specified if this project has profiles configured
42
- try {
43
- await enforceProfileUsage(projectConfig, projectDir);
44
- }
45
- catch (error) {
46
- logError(error);
47
- process.exit(EXIT_CODES.ERROR);
48
- }
46
+ catch (error) {
47
+ logError(error);
48
+ return exit(EXIT_CODES.ERROR);
49
49
  }
50
50
  }
51
51
  if (!targetAccountId) {
52
52
  targetAccountId = derivedAccountId;
53
53
  }
54
- trackCommandUsage('project-deploy', accountType ? { type: accountType } : undefined, targetAccountId);
54
+ if (accountType) {
55
+ addUsageMetadata({ type: accountType });
56
+ }
55
57
  let projectName = projectOption;
56
58
  if (!projectOption && projectConfig) {
57
59
  projectName = projectConfig.name;
@@ -66,13 +68,13 @@ async function handler(args) {
66
68
  const { data: { latestBuild, deployedBuildId }, } = await fetchProject(targetAccountId, projectName);
67
69
  if (!latestBuild || !latestBuild.buildId) {
68
70
  uiLogger.error(commands.project.deploy.errors.noBuilds);
69
- return process.exit(EXIT_CODES.ERROR);
71
+ return exit(EXIT_CODES.ERROR);
70
72
  }
71
73
  if (buildIdToDeploy) {
72
74
  const validationResult = validateBuildIdForDeploy(buildIdToDeploy, deployedBuildId, latestBuild.buildId, projectName, targetAccountId);
73
75
  if (validationResult !== true) {
74
76
  uiLogger.error(validationResult.toString());
75
- return process.exit(EXIT_CODES.ERROR);
77
+ return exit(EXIT_CODES.ERROR);
76
78
  }
77
79
  }
78
80
  else {
@@ -93,11 +95,11 @@ async function handler(args) {
93
95
  }
94
96
  if (!buildIdToDeploy) {
95
97
  uiLogger.error(commands.project.deploy.errors.noBuildId);
96
- return process.exit(EXIT_CODES.ERROR);
98
+ return exit(EXIT_CODES.ERROR);
97
99
  }
98
100
  const deployResult = await handleProjectDeploy(targetAccountId, projectName, buildIdToDeploy, isV2Project(projectConfig?.platformVersion), forceOption);
99
101
  if (!deployResult) {
100
- return process.exit(EXIT_CODES.ERROR);
102
+ return exit(EXIT_CODES.ERROR);
101
103
  }
102
104
  else if (formatOutputAsJson) {
103
105
  jsonOutput.deployId = deployResult.deployId;
@@ -124,16 +126,16 @@ async function handler(args) {
124
126
  request: 'project deploy',
125
127
  }));
126
128
  }
127
- return process.exit(EXIT_CODES.ERROR);
129
+ return exit(EXIT_CODES.ERROR);
128
130
  }
129
131
  if (formatOutputAsJson) {
130
132
  uiLogger.json(jsonOutput);
131
133
  }
132
134
  if (deploySuccess) {
133
- process.exit(EXIT_CODES.SUCCESS);
135
+ return exit(EXIT_CODES.SUCCESS);
134
136
  }
135
137
  else {
136
- process.exit(EXIT_CODES.ERROR);
138
+ return exit(EXIT_CODES.ERROR);
137
139
  }
138
140
  }
139
141
  function projectDeployBuilder(yargs) {
@@ -191,6 +193,6 @@ const projectDeployCommand = {
191
193
  command,
192
194
  describe,
193
195
  builder,
194
- handler,
196
+ handler: makeYargsHandlerWithUsageTracking('project-deploy', handler),
195
197
  };
196
198
  export default projectDeployCommand;
@@ -8,10 +8,11 @@ import LocalDevManager_DEPRECATED from '../../../lib/projects/localDev/LocalDevM
8
8
  import { confirmDefaultAccountIsTarget, suggestRecommendedNestedAccount, checkIfAccountFlagIsSupported, checkIfDefaultAccountIsSupported, createSandboxForLocalDev, createDeveloperTestAccountForLocalDev, useExistingDevTestAccount, checkIfParentAccountIsAuthed, hasSandboxes, } from '../../../lib/projects/localDev/helpers/account.js';
9
9
  import { createInitialBuildForNewProject, createNewProjectForLocalDev, } from '../../../lib/projects/localDev/helpers/project.js';
10
10
  import { handleExit } from '../../../lib/process.js';
11
+ import { getErrorMessage } from '../../../lib/errorHandlers/index.js';
11
12
  import { isSandbox, isDeveloperTestAccount, } from '../../../lib/accountTypes.js';
12
13
  import { ensureProjectExists } from '../../../lib/projects/ensureProjectExists.js';
13
14
  export async function deprecatedProjectDevFlow({ args, accountId, projectConfig, projectDir, }) {
14
- const { userProvidedAccount, derivedAccountId } = args;
15
+ const { userProvidedAccount, derivedAccountId, exit } = args;
15
16
  const env = getConfigAccountEnvironment(derivedAccountId);
16
17
  const components = await findProjectComponents(projectDir);
17
18
  const runnableComponents = components.filter(component => component.runnable);
@@ -21,20 +22,20 @@ export async function deprecatedProjectDevFlow({ args, accountId, projectConfig,
21
22
  const accountConfig = getConfigAccountById(accountId);
22
23
  if (!accountConfig) {
23
24
  uiLogger.error(commands.project.dev.errors.noAccount(accountId));
24
- process.exit(EXIT_CODES.ERROR);
25
+ return exit(EXIT_CODES.ERROR);
25
26
  }
26
27
  if (runnableComponents.length === 0) {
27
28
  uiLogger.error(commands.project.dev.errors.noRunnableComponents);
28
- process.exit(EXIT_CODES.SUCCESS);
29
+ return exit(EXIT_CODES.SUCCESS);
29
30
  }
30
31
  else if (hasPrivateApps && hasPublicApps) {
31
32
  uiLogger.error(commands.project.dev.errors.invalidProjectComponents);
32
- process.exit(EXIT_CODES.SUCCESS);
33
+ return exit(EXIT_CODES.SUCCESS);
33
34
  }
34
35
  const accounts = getAllConfigAccounts();
35
36
  if (!accounts) {
36
37
  uiLogger.error(commands.project.dev.errors.noAccountsInConfig);
37
- process.exit(EXIT_CODES.ERROR);
38
+ return exit(EXIT_CODES.ERROR);
38
39
  }
39
40
  let bypassRecommendedAccountPrompt = false;
40
41
  if (isDeveloperTestAccount(accountConfig)) {
@@ -54,20 +55,32 @@ export async function deprecatedProjectDevFlow({ args, accountId, projectConfig,
54
55
  let targetTestingAccountId = userProvidedAccount ? derivedAccountId : null;
55
56
  // Check that the default account or flag option is valid for the type of app in this project
56
57
  if (userProvidedAccount) {
57
- checkIfAccountFlagIsSupported(accountConfig, hasPublicApps);
58
+ try {
59
+ checkIfAccountFlagIsSupported(accountConfig, hasPublicApps);
60
+ }
61
+ catch (e) {
62
+ uiLogger.error(getErrorMessage(e));
63
+ return exit(EXIT_CODES.SUCCESS);
64
+ }
58
65
  if (hasPublicApps) {
59
66
  targetProjectAccountId = accountConfig.parentAccountId || null;
60
67
  }
61
68
  }
62
69
  else {
63
- await checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps);
70
+ await checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps, exit);
64
71
  }
65
72
  // The user is targeting an account type that we recommend developing on
66
73
  if (!targetProjectAccountId && bypassRecommendedAccountPrompt) {
67
74
  targetTestingAccountId = derivedAccountId;
68
- await confirmDefaultAccountIsTarget(accountConfig);
75
+ await confirmDefaultAccountIsTarget(accountConfig, exit);
69
76
  if (hasPublicApps) {
70
- checkIfParentAccountIsAuthed(accountConfig);
77
+ try {
78
+ checkIfParentAccountIsAuthed(accountConfig);
79
+ }
80
+ catch (e) {
81
+ uiLogger.error(getErrorMessage(e));
82
+ return exit(EXIT_CODES.SUCCESS);
83
+ }
71
84
  targetProjectAccountId = accountConfig.parentAccountId || null;
72
85
  }
73
86
  else {
@@ -84,23 +97,36 @@ export async function deprecatedProjectDevFlow({ args, accountId, projectConfig,
84
97
  targetTestingAccountId = targetAccountId;
85
98
  // Only used for developer test accounts that are not yet in the config
86
99
  if (notInConfigAccount) {
87
- await useExistingDevTestAccount(env, notInConfigAccount);
100
+ const accountAdded = await useExistingDevTestAccount(env, notInConfigAccount);
101
+ if (!accountAdded) {
102
+ return exit(EXIT_CODES.SUCCESS);
103
+ }
88
104
  }
89
105
  createNewSandbox = hasPrivateApps && createNestedAccount;
90
106
  createNewDeveloperTestAccount = hasPublicApps && createNestedAccount;
91
107
  }
92
108
  if (createNewSandbox) {
93
- targetProjectAccountId = await createSandboxForLocalDev(derivedAccountId, accountConfig, env);
109
+ try {
110
+ targetProjectAccountId = await createSandboxForLocalDev(derivedAccountId, accountConfig, env);
111
+ }
112
+ catch {
113
+ return exit(EXIT_CODES.ERROR);
114
+ }
94
115
  // We will be running our tests against this new sandbox account
95
116
  targetTestingAccountId = targetProjectAccountId;
96
117
  }
97
118
  if (createNewDeveloperTestAccount) {
98
- targetTestingAccountId = await createDeveloperTestAccountForLocalDev(derivedAccountId, accountConfig, env);
119
+ try {
120
+ targetTestingAccountId = await createDeveloperTestAccountForLocalDev(derivedAccountId, accountConfig, env, false);
121
+ }
122
+ catch {
123
+ return exit(EXIT_CODES.ERROR);
124
+ }
99
125
  targetProjectAccountId = derivedAccountId;
100
126
  }
101
127
  if (!targetProjectAccountId || !targetTestingAccountId) {
102
128
  uiLogger.error(commands.project.dev.errors.noAccount(accountId));
103
- process.exit(EXIT_CODES.ERROR);
129
+ return exit(EXIT_CODES.ERROR);
104
130
  }
105
131
  // eslint-disable-next-line prefer-const
106
132
  let { projectExists, project } = await ensureProjectExists(targetProjectAccountId, projectConfig.name, {
@@ -115,8 +141,8 @@ export async function deprecatedProjectDevFlow({ args, accountId, projectConfig,
115
141
  isGithubLinked = Boolean(project.sourceIntegration && project.sourceIntegration.source === 'GITHUB');
116
142
  }
117
143
  else {
118
- project = await createNewProjectForLocalDev(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps);
119
- deployedBuild = await createInitialBuildForNewProject(projectConfig, projectDir, targetProjectAccountId);
144
+ project = await createNewProjectForLocalDev(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps, exit);
145
+ deployedBuild = await createInitialBuildForNewProject(projectConfig, projectDir, targetProjectAccountId, exit);
120
146
  }
121
147
  const LocalDev = new LocalDevManager_DEPRECATED({
122
148
  runnableComponents,
@@ -129,6 +155,7 @@ export async function deprecatedProjectDevFlow({ args, accountId, projectConfig,
129
155
  projectId: project.id,
130
156
  targetAccountId: targetTestingAccountId,
131
157
  env,
158
+ exit,
132
159
  });
133
160
  await LocalDev.start();
134
161
  handleExit(({ isSIGHUP }) => LocalDev.stop(!isSIGHUP));
@@ -1,5 +1,5 @@
1
- import { Argv, CommandModule } from 'yargs';
2
- import { ProjectDevArgs } from '../../../types/Yargs.js';
1
+ import { Argv } from 'yargs';
2
+ import { ProjectDevArgs, YargsCommandModule } from '../../../types/Yargs.js';
3
3
  export declare const builder: (yargs: Argv) => Promise<Argv<ProjectDevArgs>>;
4
- declare const projectDevCommand: CommandModule<unknown, ProjectDevArgs>;
4
+ declare const projectDevCommand: YargsCommandModule<unknown, ProjectDevArgs>;
5
5
  export default projectDevCommand;