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

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 (595) hide show
  1. package/api/migrate.js +3 -3
  2. package/bin/cli.js +5 -0
  3. package/commands/account/auth.js +12 -22
  4. package/commands/account/clean.js +5 -6
  5. package/commands/account/createOverride.js +7 -7
  6. package/commands/account/info.js +2 -1
  7. package/commands/account/list.js +3 -5
  8. package/commands/account/remove.js +2 -3
  9. package/commands/account/removeOverride.js +8 -10
  10. package/commands/account/rename.js +5 -6
  11. package/commands/account/use.js +8 -19
  12. package/commands/api.d.ts +10 -0
  13. package/commands/api.js +164 -0
  14. package/commands/app/migrate.js +12 -12
  15. package/commands/app/secret/add.js +6 -7
  16. package/commands/app/secret/delete.js +9 -10
  17. package/commands/app/secret/list.js +6 -7
  18. package/commands/app/secret/update.js +8 -9
  19. package/commands/auth.js +12 -12
  20. package/commands/cms/app/create.js +9 -5
  21. package/commands/cms/convertFields.js +8 -8
  22. package/commands/cms/delete.js +2 -3
  23. package/commands/cms/fetch.js +7 -7
  24. package/commands/cms/function/create.js +9 -5
  25. package/commands/cms/function/deploy.js +2 -3
  26. package/commands/cms/function/list.js +11 -7
  27. package/commands/cms/function/logs.js +17 -23
  28. package/commands/cms/function/server.js +2 -3
  29. package/commands/cms/getReactModule.js +7 -8
  30. package/commands/cms/lighthouseScore.js +25 -24
  31. package/commands/cms/lint.js +4 -5
  32. package/commands/cms/list.js +5 -6
  33. package/commands/cms/module/create.js +9 -5
  34. package/commands/cms/module/marketplace-validate.js +7 -8
  35. package/commands/cms/mv.js +2 -3
  36. package/commands/cms/template/create.js +10 -6
  37. package/commands/cms/theme/create.js +5 -5
  38. package/commands/cms/theme/generate-selectors.js +5 -4
  39. package/commands/cms/theme/marketplace-validate.js +8 -9
  40. package/commands/cms/theme/preview.js +16 -8
  41. package/commands/cms/upload.js +15 -12
  42. package/commands/cms/watch.js +5 -5
  43. package/commands/cms/webpack/create.js +5 -5
  44. package/commands/completion.js +3 -5
  45. package/commands/config/migrate.js +6 -7
  46. package/commands/config/set.js +5 -6
  47. package/commands/customObject/create.js +4 -5
  48. package/commands/customObject/createSchema.js +4 -5
  49. package/commands/customObject/deleteSchema.js +4 -5
  50. package/commands/customObject/fetchAllSchemas.js +2 -3
  51. package/commands/customObject/fetchSchema.js +2 -3
  52. package/commands/customObject/listSchemas.js +2 -3
  53. package/commands/customObject/updateSchema.js +4 -5
  54. package/commands/doctor.js +8 -8
  55. package/commands/feedback.js +6 -4
  56. package/commands/filemanager/fetch.js +5 -6
  57. package/commands/filemanager/upload.js +5 -5
  58. package/commands/getStarted.js +16 -18
  59. package/commands/hubdb/clear.js +5 -6
  60. package/commands/hubdb/create.js +4 -5
  61. package/commands/hubdb/delete.js +8 -9
  62. package/commands/hubdb/fetch.js +5 -6
  63. package/commands/hubdb/list.js +16 -14
  64. package/commands/init.js +14 -17
  65. package/commands/mcp/setup.js +5 -6
  66. package/commands/mcp/start.js +2 -3
  67. package/commands/open.js +4 -5
  68. package/commands/project/add.js +13 -8
  69. package/commands/project/create.js +20 -17
  70. package/commands/project/delete.d.ts +7 -0
  71. package/commands/project/delete.js +74 -0
  72. package/commands/project/deploy.js +39 -36
  73. package/commands/project/dev/deprecatedFlow.js +42 -15
  74. package/commands/project/dev/index.d.ts +3 -3
  75. package/commands/project/dev/index.js +29 -34
  76. package/commands/project/dev/unifiedFlow.js +37 -14
  77. package/commands/project/download.js +10 -11
  78. package/commands/project/info.js +19 -19
  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 +13 -13
  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 +33 -19
  90. package/commands/project/validate.js +12 -12
  91. package/commands/project/watch.js +22 -22
  92. package/commands/project.js +8 -3
  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 +24 -20
  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 +95 -7
  106. package/lang/en.js +98 -13
  107. package/lib/accountAuth.js +2 -2
  108. package/lib/app/migrate.js +7 -0
  109. package/lib/buildAccount.js +3 -3
  110. package/lib/constants.d.ts +0 -1
  111. package/lib/constants.js +0 -1
  112. package/lib/doctor/Diagnosis.js +5 -5
  113. package/lib/doctor/Doctor.js +2 -2
  114. package/lib/errorHandlers/index.js +4 -3
  115. package/lib/errorHandlers/suppressError.js +4 -0
  116. package/lib/errors/PromptExitError.d.ts +4 -2
  117. package/lib/errors/PromptExitError.js +3 -0
  118. package/lib/getStartedV2Actions.js +2 -2
  119. package/lib/hasFeature.js +1 -2
  120. package/lib/middleware/autoUpdateMiddleware.js +6 -3
  121. package/lib/process.d.ts +1 -1
  122. package/lib/process.js +10 -3
  123. package/lib/projects/ProjectLogsManager.js +2 -2
  124. package/lib/projects/create/index.js +2 -2
  125. package/lib/projects/create/legacy.js +2 -2
  126. package/lib/projects/create/v2.js +3 -4
  127. package/lib/projects/delete.d.ts +13 -0
  128. package/lib/projects/delete.js +193 -0
  129. package/lib/projects/deploy.d.ts +1 -1
  130. package/lib/projects/deploy.js +2 -2
  131. package/lib/projects/localDev/AppDevModeInterface.js +11 -11
  132. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +3 -1
  133. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
  134. package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
  135. package/lib/projects/localDev/DevSessionManager.js +31 -19
  136. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +3 -0
  137. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +16 -12
  138. package/lib/projects/localDev/LocalDevProcess.js +6 -5
  139. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  140. package/lib/projects/localDev/LocalDevState.js +3 -1
  141. package/lib/projects/localDev/helpers/account.d.ts +4 -3
  142. package/lib/projects/localDev/helpers/account.js +16 -19
  143. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  144. package/lib/projects/localDev/helpers/process.js +4 -10
  145. package/lib/projects/localDev/helpers/project.d.ts +4 -3
  146. package/lib/projects/localDev/helpers/project.js +31 -15
  147. package/lib/projects/projectInfo.d.ts +3 -20
  148. package/lib/projects/projectInfo.js +32 -54
  149. package/lib/projects/projectProfiles.d.ts +1 -2
  150. package/lib/projects/projectProfiles.js +5 -17
  151. package/lib/projects/upload.js +22 -3
  152. package/lib/projects/workspaces.d.ts +42 -0
  153. package/lib/projects/workspaces.js +350 -0
  154. package/lib/prompts/createApiSamplePrompt.js +4 -0
  155. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  156. package/lib/prompts/projectProfilePrompt.js +46 -0
  157. package/lib/prompts/promptUtils.js +3 -2
  158. package/lib/prompts/selectHubDBTablePrompt.js +2 -2
  159. package/lib/prompts/selectPublicAppForMigrationPrompt.js +2 -2
  160. package/lib/theme/cmsDevServerProcess.d.ts +2 -0
  161. package/lib/theme/cmsDevServerProcess.js +8 -7
  162. package/lib/ui/SpinniesManager.d.ts +1 -0
  163. package/lib/ui/SpinniesManager.js +20 -6
  164. package/lib/ui/spinniesUtils.d.ts +0 -1
  165. package/lib/ui/spinniesUtils.js +6 -16
  166. package/lib/usageTracking.d.ts +3 -4
  167. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  168. package/lib/yargs/makeYargsBuilder.js +33 -0
  169. package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
  170. package/lib/yargs/makeYargsHandlerWithUsageTracking.js +95 -0
  171. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  172. package/lib/yargs/strictEnforceBoolean.js +13 -0
  173. package/lib/yargsUtils.d.ts +3 -16
  174. package/lib/yargsUtils.js +3 -48
  175. package/mcp-server/Tool.d.ts +15 -0
  176. package/mcp-server/Tool.js +53 -0
  177. package/mcp-server/server.js +5 -3
  178. package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +4 -2
  179. package/mcp-server/tools/cms/HsCreateFunctionTool.js +8 -6
  180. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +4 -2
  181. package/mcp-server/tools/cms/HsCreateModuleTool.js +8 -6
  182. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +5 -3
  183. package/mcp-server/tools/cms/HsCreateTemplateTool.js +8 -6
  184. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +4 -2
  185. package/mcp-server/tools/cms/HsFunctionLogsTool.js +8 -6
  186. package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +4 -2
  187. package/mcp-server/tools/cms/HsListFunctionsTool.js +8 -6
  188. package/mcp-server/tools/cms/HsListTool.d.ts +4 -2
  189. package/mcp-server/tools/cms/HsListTool.js +8 -6
  190. package/mcp-server/tools/index.d.ts +3 -2
  191. package/mcp-server/tools/index.js +22 -22
  192. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +6 -4
  193. package/mcp-server/tools/project/AddFeatureToProjectTool.js +8 -6
  194. package/mcp-server/tools/project/CreateProjectTool.d.ts +6 -4
  195. package/mcp-server/tools/project/CreateProjectTool.js +9 -7
  196. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +4 -2
  197. package/mcp-server/tools/project/CreateTestAccountTool.js +20 -8
  198. package/mcp-server/tools/project/DeployProjectTool.d.ts +4 -2
  199. package/mcp-server/tools/project/DeployProjectTool.js +4 -6
  200. package/mcp-server/tools/project/DocFetchTool.d.ts +4 -2
  201. package/mcp-server/tools/project/DocFetchTool.js +8 -6
  202. package/mcp-server/tools/project/DocsSearchTool.d.ts +9 -3
  203. package/mcp-server/tools/project/DocsSearchTool.js +32 -9
  204. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +4 -2
  205. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +8 -6
  206. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +4 -2
  207. package/mcp-server/tools/project/GetApplicationInfoTool.js +8 -6
  208. package/mcp-server/tools/project/GetBuildLogsTool.d.ts +4 -2
  209. package/mcp-server/tools/project/GetBuildLogsTool.js +8 -6
  210. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +4 -2
  211. package/mcp-server/tools/project/GetBuildStatusTool.js +8 -6
  212. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +4 -2
  213. package/mcp-server/tools/project/GetConfigValuesTool.js +12 -7
  214. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +4 -2
  215. package/mcp-server/tools/project/GuidedWalkthroughTool.js +4 -6
  216. package/mcp-server/tools/project/UploadProjectTools.d.ts +4 -2
  217. package/mcp-server/tools/project/UploadProjectTools.js +9 -7
  218. package/mcp-server/tools/project/ValidateProjectTool.d.ts +4 -2
  219. package/mcp-server/tools/project/ValidateProjectTool.js +8 -6
  220. package/mcp-server/tools/project/constants.d.ts +2 -2
  221. package/mcp-server/types.d.ts +0 -7
  222. package/mcp-server/types.js +1 -13
  223. package/mcp-server/utils/logger.d.ts +10 -0
  224. package/mcp-server/utils/logger.js +29 -0
  225. package/mcp-server/utils/toolUsageTracking.js +0 -2
  226. package/package.json +12 -7
  227. package/types/LocalDev.d.ts +5 -0
  228. package/types/Projects.d.ts +19 -0
  229. package/types/Yargs.d.ts +18 -1
  230. package/api/__tests__/migrate.test.d.ts +0 -1
  231. package/api/__tests__/migrate.test.js +0 -199
  232. package/commands/__tests__/account.test.d.ts +0 -1
  233. package/commands/__tests__/account.test.js +0 -69
  234. package/commands/__tests__/auth.test.d.ts +0 -1
  235. package/commands/__tests__/auth.test.js +0 -43
  236. package/commands/__tests__/cms.test.d.ts +0 -1
  237. package/commands/__tests__/cms.test.js +0 -87
  238. package/commands/__tests__/config.test.d.ts +0 -1
  239. package/commands/__tests__/config.test.js +0 -44
  240. package/commands/__tests__/customObject.test.d.ts +0 -1
  241. package/commands/__tests__/customObject.test.js +0 -68
  242. package/commands/__tests__/doctor.test.d.ts +0 -1
  243. package/commands/__tests__/doctor.test.js +0 -132
  244. package/commands/__tests__/feedback.test.d.ts +0 -1
  245. package/commands/__tests__/feedback.test.js +0 -24
  246. package/commands/__tests__/filemanager.test.d.ts +0 -1
  247. package/commands/__tests__/filemanager.test.js +0 -45
  248. package/commands/__tests__/getStarted.test.d.ts +0 -1
  249. package/commands/__tests__/getStarted.test.js +0 -173
  250. package/commands/__tests__/hubdb.test.d.ts +0 -1
  251. package/commands/__tests__/hubdb.test.js +0 -50
  252. package/commands/__tests__/init.test.d.ts +0 -1
  253. package/commands/__tests__/init.test.js +0 -42
  254. package/commands/__tests__/mcp.test.d.ts +0 -1
  255. package/commands/__tests__/mcp.test.js +0 -46
  256. package/commands/__tests__/open.test.d.ts +0 -1
  257. package/commands/__tests__/open.test.js +0 -58
  258. package/commands/__tests__/project.test.d.ts +0 -1
  259. package/commands/__tests__/project.test.js +0 -125
  260. package/commands/__tests__/sandbox.test.d.ts +0 -1
  261. package/commands/__tests__/sandbox.test.js +0 -44
  262. package/commands/__tests__/secret.test.d.ts +0 -1
  263. package/commands/__tests__/secret.test.js +0 -49
  264. package/commands/__tests__/testAccount.test.d.ts +0 -1
  265. package/commands/__tests__/testAccount.test.js +0 -57
  266. package/commands/__tests__/upgrade.test.d.ts +0 -1
  267. package/commands/__tests__/upgrade.test.js +0 -309
  268. package/commands/account/__tests__/auth.test.d.ts +0 -1
  269. package/commands/account/__tests__/auth.test.js +0 -206
  270. package/commands/account/__tests__/clean.test.d.ts +0 -1
  271. package/commands/account/__tests__/clean.test.js +0 -28
  272. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  273. package/commands/account/__tests__/createOverride.test.js +0 -32
  274. package/commands/account/__tests__/info.test.d.ts +0 -1
  275. package/commands/account/__tests__/info.test.js +0 -28
  276. package/commands/account/__tests__/list.test.d.ts +0 -1
  277. package/commands/account/__tests__/list.test.js +0 -153
  278. package/commands/account/__tests__/remove.test.d.ts +0 -1
  279. package/commands/account/__tests__/remove.test.js +0 -36
  280. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  281. package/commands/account/__tests__/removeOverride.js +0 -25
  282. package/commands/account/__tests__/rename.test.d.ts +0 -1
  283. package/commands/account/__tests__/rename.test.js +0 -82
  284. package/commands/account/__tests__/use.test.d.ts +0 -1
  285. package/commands/account/__tests__/use.test.js +0 -170
  286. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  287. package/commands/app/__tests__/migrate.test.js +0 -111
  288. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  289. package/commands/app/secret/__tests__/add.test.js +0 -140
  290. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  291. package/commands/app/secret/__tests__/delete.test.js +0 -28
  292. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  293. package/commands/app/secret/__tests__/list.test.js +0 -25
  294. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  295. package/commands/app/secret/__tests__/update.test.js +0 -28
  296. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  297. package/commands/cms/__tests__/delete.test.js +0 -39
  298. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  299. package/commands/cms/__tests__/fetch.test.js +0 -156
  300. package/commands/cms/__tests__/function.test.d.ts +0 -1
  301. package/commands/cms/__tests__/function.test.js +0 -50
  302. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  303. package/commands/cms/__tests__/lint.test.js +0 -33
  304. package/commands/cms/__tests__/list.test.d.ts +0 -1
  305. package/commands/cms/__tests__/list.test.js +0 -42
  306. package/commands/cms/__tests__/module.test.d.ts +0 -1
  307. package/commands/cms/__tests__/module.test.js +0 -45
  308. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  309. package/commands/cms/__tests__/mv.test.js +0 -46
  310. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  311. package/commands/cms/__tests__/theme.test.js +0 -54
  312. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  313. package/commands/cms/__tests__/upload.test.js +0 -312
  314. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  315. package/commands/cms/__tests__/watch.test.js +0 -204
  316. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  317. package/commands/cms/function/__tests__/logs.test.js +0 -70
  318. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  319. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  320. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  321. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  322. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  323. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  324. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  325. package/commands/customObject/__tests__/create.test.js +0 -40
  326. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  327. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  328. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  329. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  330. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  331. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  332. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  333. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  334. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  335. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  336. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  337. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  338. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  339. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  340. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  341. package/commands/filemanager/__tests__/upload.test.js +0 -191
  342. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  343. package/commands/hubdb/__tests__/clear.test.js +0 -28
  344. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  345. package/commands/hubdb/__tests__/create.test.js +0 -28
  346. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  347. package/commands/hubdb/__tests__/delete.test.js +0 -28
  348. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  349. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  350. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  351. package/commands/hubdb/__tests__/list.test.js +0 -88
  352. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  353. package/commands/mcp/__tests__/setup.test.js +0 -26
  354. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  355. package/commands/mcp/__tests__/start.test.js +0 -144
  356. package/commands/project/__tests__/add.test.d.ts +0 -1
  357. package/commands/project/__tests__/add.test.js +0 -107
  358. package/commands/project/__tests__/create.test.d.ts +0 -1
  359. package/commands/project/__tests__/create.test.js +0 -97
  360. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  361. package/commands/project/__tests__/deploy.test.js +0 -307
  362. package/commands/project/__tests__/dev.test.d.ts +0 -1
  363. package/commands/project/__tests__/dev.test.js +0 -273
  364. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  365. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  366. package/commands/project/__tests__/download.test.d.ts +0 -1
  367. package/commands/project/__tests__/download.test.js +0 -39
  368. package/commands/project/__tests__/info.test.d.ts +0 -1
  369. package/commands/project/__tests__/info.test.js +0 -145
  370. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  371. package/commands/project/__tests__/installDeps.test.js +0 -140
  372. package/commands/project/__tests__/lint.test.d.ts +0 -1
  373. package/commands/project/__tests__/lint.test.js +0 -704
  374. package/commands/project/__tests__/list.test.d.ts +0 -1
  375. package/commands/project/__tests__/list.test.js +0 -31
  376. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  377. package/commands/project/__tests__/listBuilds.test.js +0 -38
  378. package/commands/project/__tests__/logs.test.d.ts +0 -1
  379. package/commands/project/__tests__/logs.test.js +0 -202
  380. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  381. package/commands/project/__tests__/migrate.test.js +0 -106
  382. package/commands/project/__tests__/open.test.d.ts +0 -1
  383. package/commands/project/__tests__/open.test.js +0 -39
  384. package/commands/project/__tests__/profile.test.d.ts +0 -1
  385. package/commands/project/__tests__/profile.test.js +0 -42
  386. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  387. package/commands/project/__tests__/updateDeps.test.js +0 -140
  388. package/commands/project/__tests__/upload.test.d.ts +0 -1
  389. package/commands/project/__tests__/upload.test.js +0 -234
  390. package/commands/project/__tests__/validate.test.d.ts +0 -1
  391. package/commands/project/__tests__/validate.test.js +0 -381
  392. package/commands/project/__tests__/watch.test.d.ts +0 -1
  393. package/commands/project/__tests__/watch.test.js +0 -35
  394. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  395. package/commands/sandbox/__tests__/create.test.js +0 -198
  396. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  397. package/commands/sandbox/__tests__/delete.test.js +0 -31
  398. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  399. package/commands/secret/__tests__/addSecret.test.js +0 -162
  400. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  401. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  402. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  403. package/commands/secret/__tests__/listSecret.test.js +0 -29
  404. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  405. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  406. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  407. package/commands/testAccount/__tests__/create.test.js +0 -106
  408. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  409. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  410. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  411. package/commands/testAccount/__tests__/delete.test.js +0 -29
  412. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  413. package/commands/testAccount/__tests__/importData.test.js +0 -92
  414. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  415. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  416. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  417. package/lib/__tests__/accountAuth.test.js +0 -258
  418. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  419. package/lib/__tests__/accountTypes.test.js +0 -98
  420. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  421. package/lib/__tests__/buildAccount.test.js +0 -211
  422. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  423. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  424. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  425. package/lib/__tests__/commandSuggestion.test.js +0 -121
  426. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  427. package/lib/__tests__/commonOpts.test.js +0 -80
  428. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  429. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  430. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  431. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  432. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  433. package/lib/__tests__/hasFeature.test.js +0 -167
  434. package/lib/__tests__/http.test.d.ts +0 -1
  435. package/lib/__tests__/http.test.js +0 -40
  436. package/lib/__tests__/importData.test.d.ts +0 -1
  437. package/lib/__tests__/importData.test.js +0 -98
  438. package/lib/__tests__/npmCli.test.d.ts +0 -1
  439. package/lib/__tests__/npmCli.test.js +0 -84
  440. package/lib/__tests__/oauth.test.d.ts +0 -1
  441. package/lib/__tests__/oauth.test.js +0 -109
  442. package/lib/__tests__/parsing.test.d.ts +0 -1
  443. package/lib/__tests__/parsing.test.js +0 -34
  444. package/lib/__tests__/polling.test.d.ts +0 -1
  445. package/lib/__tests__/polling.test.js +0 -76
  446. package/lib/__tests__/process.test.d.ts +0 -1
  447. package/lib/__tests__/process.test.js +0 -89
  448. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  449. package/lib/__tests__/sandboxes.test.js +0 -128
  450. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  451. package/lib/__tests__/serverlessLogs.test.js +0 -163
  452. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  453. package/lib/__tests__/usageTracking.test.js +0 -197
  454. package/lib/__tests__/validation.test.d.ts +0 -1
  455. package/lib/__tests__/validation.test.js +0 -143
  456. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  457. package/lib/__tests__/yargsUtils.test.js +0 -124
  458. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  459. package/lib/app/__tests__/migrate.test.js +0 -638
  460. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  461. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  462. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  463. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  464. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  465. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  466. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  467. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  468. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  469. package/lib/mcp/__tests__/setup.test.js +0 -523
  470. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  471. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  472. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  473. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  474. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  475. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  476. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  477. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  478. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  479. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  480. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  481. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  482. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  483. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  484. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  485. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  486. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  487. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  488. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  489. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  490. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  491. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  492. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  493. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  494. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  495. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  496. package/lib/projects/__tests__/components.test.d.ts +0 -1
  497. package/lib/projects/__tests__/components.test.js +0 -440
  498. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  499. package/lib/projects/__tests__/deploy.test.js +0 -231
  500. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  501. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  502. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  503. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  504. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  505. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  506. package/lib/projects/__tests__/projectInfo.test.d.ts +0 -1
  507. package/lib/projects/__tests__/projectInfo.test.js +0 -114
  508. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  509. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  510. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  511. package/lib/projects/__tests__/projects.test.js +0 -58
  512. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  513. package/lib/projects/__tests__/structure.test.js +0 -210
  514. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  515. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  516. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  517. package/lib/projects/__tests__/upload.test.js +0 -183
  518. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  519. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  520. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  521. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  522. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  523. package/lib/projects/create/__tests__/legacy.test.js +0 -72
  524. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  525. package/lib/projects/create/__tests__/v2.test.js +0 -257
  526. package/lib/projects/platformVersion.d.ts +0 -9
  527. package/lib/projects/platformVersion.js +0 -39
  528. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  529. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  530. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  531. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  532. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  533. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  534. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  535. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  536. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  537. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  538. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  539. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  540. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  541. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  542. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  543. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  544. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  545. package/lib/theme/__tests__/migrate.test.js +0 -247
  546. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  547. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  548. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  549. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  550. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  551. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
  552. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  553. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
  554. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  555. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
  556. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  557. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
  558. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  559. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
  560. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  561. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
  562. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  563. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
  564. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  565. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -131
  566. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  567. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
  568. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  569. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
  570. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  571. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  572. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  573. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  574. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  575. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
  576. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  577. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  578. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  579. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  580. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  581. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  582. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  583. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  584. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  585. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  586. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  587. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
  588. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  589. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  590. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  591. package/mcp-server/utils/__tests__/command.test.js +0 -275
  592. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  593. package/mcp-server/utils/__tests__/content.test.js +0 -164
  594. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  595. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
@@ -1,57 +1,60 @@
1
1
  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
- import { isV2Project } from '../../lib/projects/platformVersion.js';
5
- import { trackCommandUsage } from '../../lib/usageTracking.js';
4
+ import { isLegacyProject } from '@hubspot/project-parsing-lib/projects';
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 &&
35
+ !isLegacyProject(projectConfig?.platformVersion)) {
36
+ try {
37
+ const profileName = await projectProfilePrompt(projectDir, projectConfig, profileOption, !!useEnvOption);
38
+ if (profileName) {
39
+ // Use loadProfile instead of loadAndValidateProfile because the local
40
+ // profile does not need to be valid to successfully deploy
41
+ const profile = loadProfile(projectConfig, projectDir, profileName);
42
+ targetAccountId = profile.accountId;
43
+ uiLogger.log(commands.project.deploy.profileMessage(profileName, targetAccountId));
44
+ uiLogger.log('');
36
45
  }
37
- targetAccountId = profile.accountId;
38
- logProfileFooter(profile);
39
46
  }
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
- }
47
+ catch (error) {
48
+ logError(error);
49
+ return exit(EXIT_CODES.ERROR);
49
50
  }
50
51
  }
51
52
  if (!targetAccountId) {
52
53
  targetAccountId = derivedAccountId;
53
54
  }
54
- trackCommandUsage('project-deploy', accountType ? { type: accountType } : undefined, targetAccountId);
55
+ if (accountType) {
56
+ addUsageMetadata({ type: accountType });
57
+ }
55
58
  let projectName = projectOption;
56
59
  if (!projectOption && projectConfig) {
57
60
  projectName = projectConfig.name;
@@ -66,13 +69,13 @@ async function handler(args) {
66
69
  const { data: { latestBuild, deployedBuildId }, } = await fetchProject(targetAccountId, projectName);
67
70
  if (!latestBuild || !latestBuild.buildId) {
68
71
  uiLogger.error(commands.project.deploy.errors.noBuilds);
69
- return process.exit(EXIT_CODES.ERROR);
72
+ return exit(EXIT_CODES.ERROR);
70
73
  }
71
74
  if (buildIdToDeploy) {
72
75
  const validationResult = validateBuildIdForDeploy(buildIdToDeploy, deployedBuildId, latestBuild.buildId, projectName, targetAccountId);
73
76
  if (validationResult !== true) {
74
77
  uiLogger.error(validationResult.toString());
75
- return process.exit(EXIT_CODES.ERROR);
78
+ return exit(EXIT_CODES.ERROR);
76
79
  }
77
80
  }
78
81
  else {
@@ -93,11 +96,11 @@ async function handler(args) {
93
96
  }
94
97
  if (!buildIdToDeploy) {
95
98
  uiLogger.error(commands.project.deploy.errors.noBuildId);
96
- return process.exit(EXIT_CODES.ERROR);
99
+ return exit(EXIT_CODES.ERROR);
97
100
  }
98
- const deployResult = await handleProjectDeploy(targetAccountId, projectName, buildIdToDeploy, isV2Project(projectConfig?.platformVersion), forceOption);
101
+ const deployResult = await handleProjectDeploy(targetAccountId, projectName, buildIdToDeploy, isLegacyProject(projectConfig?.platformVersion), forceOption);
99
102
  if (!deployResult) {
100
- return process.exit(EXIT_CODES.ERROR);
103
+ return exit(EXIT_CODES.ERROR);
101
104
  }
102
105
  else if (formatOutputAsJson) {
103
106
  jsonOutput.deployId = deployResult.deployId;
@@ -124,16 +127,16 @@ async function handler(args) {
124
127
  request: 'project deploy',
125
128
  }));
126
129
  }
127
- return process.exit(EXIT_CODES.ERROR);
130
+ return exit(EXIT_CODES.ERROR);
128
131
  }
129
132
  if (formatOutputAsJson) {
130
133
  uiLogger.json(jsonOutput);
131
134
  }
132
135
  if (deploySuccess) {
133
- process.exit(EXIT_CODES.SUCCESS);
136
+ return exit(EXIT_CODES.SUCCESS);
134
137
  }
135
138
  else {
136
- process.exit(EXIT_CODES.ERROR);
139
+ return exit(EXIT_CODES.ERROR);
137
140
  }
138
141
  }
139
142
  function projectDeployBuilder(yargs) {
@@ -191,6 +194,6 @@ const projectDeployCommand = {
191
194
  command,
192
195
  describe,
193
196
  builder,
194
- handler,
197
+ handler: makeYargsHandlerWithUsageTracking('project-deploy', handler),
195
198
  };
196
199
  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;
@@ -1,49 +1,51 @@
1
- import { trackCommandUsage } from '../../../lib/usageTracking.js';
2
1
  import { getConfigAccountIfExists } from '@hubspot/local-dev-lib/config';
3
- import { getAllHsProfiles, } from '@hubspot/project-parsing-lib/profiles';
4
2
  import { getProjectConfig, validateProjectConfig, } from '../../../lib/projects/config.js';
5
3
  import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
6
4
  import { uiLine } from '../../../lib/ui/index.js';
5
+ import { makeYargsHandlerWithUsageTracking } from '../../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
7
6
  import { deprecatedProjectDevFlow } from './deprecatedFlow.js';
8
7
  import { unifiedProjectDevFlow } from './unifiedFlow.js';
9
- import { isV2Project } from '../../../lib/projects/platformVersion.js';
8
+ import { isLegacyProject } from '@hubspot/project-parsing-lib/projects';
10
9
  import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
11
- import { loadProfile } from '../../../lib/projects/projectProfiles.js';
10
+ import { loadAndValidateProfile } from '../../../lib/projects/projectProfiles.js';
12
11
  import { commands } from '../../../lang/en.js';
13
12
  import { uiLogger } from '../../../lib/ui/logger.js';
14
13
  import { logError } from '../../../lib/errorHandlers/index.js';
15
- import { PromptExitError } from '../../../lib/errors/PromptExitError.js';
16
- import path from 'path';
17
- import { listPrompt } from '../../../lib/prompts/promptUtils.js';
14
+ import { projectProfilePrompt } from '../../../lib/prompts/projectProfilePrompt.js';
15
+ import { isPromptExitError } from '../../../lib/errors/PromptExitError.js';
18
16
  const command = 'dev';
19
17
  const describe = commands.project.dev.describe;
20
18
  function validateAccountFlags(testingAccount, projectAccount, userProvidedAccount, useV2) {
21
19
  // Legacy projects do not support targetTestingAccount and targetProjectAccount
22
20
  if (testingAccount && projectAccount && !useV2) {
23
- uiLogger.error(commands.project.dev.errors.unsupportedAccountFlagLegacy);
24
- process.exit(EXIT_CODES.ERROR);
21
+ throw new Error(commands.project.dev.errors.unsupportedAccountFlagLegacy);
25
22
  }
26
23
  if (userProvidedAccount && useV2) {
27
- uiLogger.error(commands.project.dev.errors.unsupportedAccountFlagV2);
28
- process.exit(EXIT_CODES.ERROR);
24
+ throw new Error(commands.project.dev.errors.unsupportedAccountFlagV2);
29
25
  }
30
26
  }
31
27
  async function handler(args) {
32
- const { derivedAccountId, userProvidedAccount, testingAccount, projectAccount, } = args;
28
+ const { derivedAccountId, userProvidedAccount, testingAccount, projectAccount, profile: profileOption, exit, addUsageMetadata, } = args;
33
29
  const { projectConfig, projectDir } = await getProjectConfig();
34
30
  try {
35
31
  validateProjectConfig(projectConfig, projectDir);
36
32
  }
37
33
  catch (error) {
38
34
  logError(error);
39
- process.exit(EXIT_CODES.ERROR);
35
+ return exit(EXIT_CODES.ERROR);
40
36
  }
41
- const useV2Projects = isV2Project(projectConfig.platformVersion);
37
+ const useV2Projects = !isLegacyProject(projectConfig.platformVersion);
42
38
  if (!projectDir) {
43
39
  uiLogger.error(commands.project.dev.errors.noProjectConfig);
44
- process.exit(EXIT_CODES.ERROR);
40
+ return exit(EXIT_CODES.ERROR);
41
+ }
42
+ try {
43
+ validateAccountFlags(testingAccount, projectAccount, userProvidedAccount, useV2Projects);
44
+ }
45
+ catch (error) {
46
+ logError(error);
47
+ return exit(EXIT_CODES.ERROR);
45
48
  }
46
- validateAccountFlags(testingAccount, projectAccount, userProvidedAccount, useV2Projects);
47
49
  uiLogger.log(commands.project.dev.logs.header);
48
50
  if (useV2Projects) {
49
51
  uiLogger.log(commands.project.dev.logs.learnMoreMessageV2);
@@ -67,19 +69,12 @@ async function handler(args) {
67
69
  targetProjectAccountId = derivedAccountId;
68
70
  }
69
71
  // Determine profile name: from flag or prompt
70
- if (!targetProjectAccountId && isV2Project(projectConfig.platformVersion)) {
71
- let profileName = args.profile;
72
- if (!profileName) {
73
- const existingProfiles = await getAllHsProfiles(path.join(projectDir, projectConfig.srcDir));
74
- if (existingProfiles.length !== 0) {
75
- profileName = await listPrompt(commands.project.dev.prompts.selectProfile, {
76
- choices: existingProfiles,
77
- });
78
- }
79
- }
72
+ if (!targetProjectAccountId &&
73
+ !isLegacyProject(projectConfig.platformVersion)) {
74
+ const profileName = await projectProfilePrompt(projectDir, projectConfig, profileOption);
80
75
  if (profileName) {
81
76
  try {
82
- profile = loadProfile(projectConfig, projectDir, profileName);
77
+ profile = await loadAndValidateProfile(projectConfig, projectDir, profileName);
83
78
  targetProjectAccountId = profile.accountId;
84
79
  uiLogger.log('');
85
80
  uiLogger.log(commands.project.dev.logs.profileProjectAccountExplanation(targetProjectAccountId, profileName));
@@ -87,7 +82,7 @@ async function handler(args) {
87
82
  catch (error) {
88
83
  logError(error);
89
84
  uiLine();
90
- process.exit(EXIT_CODES.ERROR);
85
+ return exit(EXIT_CODES.ERROR);
91
86
  }
92
87
  }
93
88
  }
@@ -99,9 +94,9 @@ async function handler(args) {
99
94
  uiLogger.log(commands.project.dev.logs.defaultProjectAccountExplanation(targetProjectAccountId));
100
95
  }
101
96
  }
102
- trackCommandUsage('project-dev', {}, targetProjectAccountId);
97
+ addUsageMetadata({ accountId: targetProjectAccountId ?? undefined });
103
98
  try {
104
- if (isV2Project(projectConfig.platformVersion)) {
99
+ if (!isLegacyProject(projectConfig.platformVersion)) {
105
100
  const targetTestingAccountId = testingAccount
106
101
  ? getConfigAccountIfExists(testingAccount)?.accountId
107
102
  : undefined;
@@ -124,11 +119,11 @@ async function handler(args) {
124
119
  }
125
120
  }
126
121
  catch (e) {
127
- if (e instanceof PromptExitError) {
128
- process.exit(e.exitCode);
122
+ if (isPromptExitError(e)) {
123
+ throw e;
129
124
  }
130
125
  logError(e);
131
- process.exit(EXIT_CODES.ERROR);
126
+ return exit(EXIT_CODES.ERROR);
132
127
  }
133
128
  }
134
129
  function projectDevBuilder(yargs) {
@@ -168,7 +163,7 @@ export const builder = makeYargsBuilder(projectDevBuilder, command, describe, {
168
163
  const projectDevCommand = {
169
164
  command,
170
165
  describe,
171
- handler,
166
+ handler: makeYargsHandlerWithUsageTracking('project-dev', handler),
172
167
  builder,
173
168
  };
174
169
  export default projectDevCommand;
@@ -17,9 +17,13 @@ import { isTestAccountOrSandbox, isUnifiedAccount, } from '../../../lib/accountT
17
17
  import { uiLogger } from '../../../lib/ui/logger.js';
18
18
  import { commands } from '../../../lang/en.js';
19
19
  import LocalDevWebsocketServer from '../../../lib/projects/localDev/LocalDevWebsocketServer.js';
20
- import { confirmLocalDevIsNotRunning } from '../../../lib/projects/localDev/helpers/process.js';
20
+ import { isLocalDevRunning } from '../../../lib/projects/localDev/helpers/process.js';
21
21
  export async function unifiedProjectDevFlow({ args, targetProjectAccountId, providedTargetTestingAccountId, projectConfig, projectDir, }) {
22
- await confirmLocalDevIsNotRunning();
22
+ const { exit } = args;
23
+ if (await isLocalDevRunning()) {
24
+ uiLogger.error(commands.project.dev.errors.localDevAlreadyRunning);
25
+ return exit(EXIT_CODES.ERROR);
26
+ }
23
27
  const env = getConfigAccountEnvironment(targetProjectAccountId);
24
28
  let projectNodes;
25
29
  let projectProfileData;
@@ -41,23 +45,23 @@ export async function unifiedProjectDevFlow({ args, targetProjectAccountId, prov
41
45
  else {
42
46
  logError(e);
43
47
  }
44
- return process.exit(EXIT_CODES.ERROR);
48
+ return exit(EXIT_CODES.ERROR);
45
49
  }
46
50
  if (!Object.keys(projectNodes).length) {
47
51
  uiLogger.error(commands.project.dev.errors.noRunnableComponents);
48
- process.exit(EXIT_CODES.SUCCESS);
52
+ return exit(EXIT_CODES.SUCCESS);
49
53
  }
50
54
  const targetProjectAccountConfig = getConfigAccountById(targetProjectAccountId);
51
55
  if (!targetProjectAccountConfig) {
52
56
  uiLogger.error(commands.project.dev.errors.noAccount(targetProjectAccountId));
53
- process.exit(EXIT_CODES.ERROR);
57
+ return exit(EXIT_CODES.ERROR);
54
58
  }
55
59
  const accounts = getAllConfigAccounts();
56
60
  const accountIsCombined = await isUnifiedAccount(targetProjectAccountConfig);
57
61
  const targetProjectAccountIsTestAccountOrSandbox = isTestAccountOrSandbox(targetProjectAccountConfig);
58
62
  if (!accountIsCombined) {
59
63
  uiLogger.error(commands.project.dev.errors.accountNotCombined);
60
- process.exit(EXIT_CODES.ERROR);
64
+ return exit(EXIT_CODES.ERROR);
61
65
  }
62
66
  let targetTestingAccountId = providedTargetTestingAccountId;
63
67
  // Temporarily removing logic to use profile account as testing account
@@ -82,11 +86,19 @@ export async function unifiedProjectDevFlow({ args, targetProjectAccountId, prov
82
86
  if (!!devAccountPromptResponse.notInConfigAccount) {
83
87
  // When the developer test account isn't configured in the CLI config yet
84
88
  // Walk the user through adding the account's PAK to the config
85
- await useExistingDevTestAccount(env, devAccountPromptResponse.notInConfigAccount);
89
+ const accountAdded = await useExistingDevTestAccount(env, devAccountPromptResponse.notInConfigAccount);
90
+ if (!accountAdded) {
91
+ return exit(EXIT_CODES.SUCCESS);
92
+ }
86
93
  }
87
94
  else if (devAccountPromptResponse.createNestedAccount) {
88
95
  // Create a new developer test account and automatically add it to the CLI config
89
- targetTestingAccountId = await createDeveloperTestAccountForLocalDev(targetProjectAccountId, targetProjectAccountConfig, env, true);
96
+ try {
97
+ targetTestingAccountId = await createDeveloperTestAccountForLocalDev(targetProjectAccountId, targetProjectAccountConfig, env, true);
98
+ }
99
+ catch {
100
+ return exit(EXIT_CODES.ERROR);
101
+ }
90
102
  }
91
103
  }
92
104
  else if (accountType === HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX) {
@@ -94,7 +106,12 @@ export async function unifiedProjectDevFlow({ args, targetProjectAccountId, prov
94
106
  targetTestingAccountId =
95
107
  sandboxAccountPromptResponse.targetAccountId || undefined;
96
108
  if (sandboxAccountPromptResponse.createNestedAccount) {
97
- targetTestingAccountId = await createSandboxForLocalDev(targetProjectAccountId, targetProjectAccountConfig, env);
109
+ try {
110
+ targetTestingAccountId = await createSandboxForLocalDev(targetProjectAccountId, targetProjectAccountConfig, env);
111
+ }
112
+ catch {
113
+ return exit(EXIT_CODES.ERROR);
114
+ }
98
115
  }
99
116
  }
100
117
  else {
@@ -111,21 +128,26 @@ export async function unifiedProjectDevFlow({ args, targetProjectAccountId, prov
111
128
  });
112
129
  let project = uploadedProject;
113
130
  if (projectExists && project) {
114
- await compareLocalProjectToDeployed(projectConfig, targetProjectAccountId, project.deployedBuild?.buildId, projectNodes, args.profile);
131
+ await compareLocalProjectToDeployed(projectConfig, targetProjectAccountId, project.deployedBuild?.buildId, projectNodes, exit, args.profile);
115
132
  }
116
133
  else {
117
- project = await createNewProjectForLocalDev(projectConfig, targetProjectAccountId, false, false);
118
- await createInitialBuildForNewProject(projectConfig, projectDir, targetProjectAccountId, true, args.profile);
134
+ project = await createNewProjectForLocalDev(projectConfig, targetProjectAccountId, false, false, exit);
135
+ await createInitialBuildForNewProject(projectConfig, projectDir, targetProjectAccountId, exit, true, args.profile);
119
136
  }
120
137
  // Check for missing/outdated dependencies
121
- await checkAndInstallDependencies();
138
+ try {
139
+ await checkAndInstallDependencies();
140
+ }
141
+ catch {
142
+ return exit(EXIT_CODES.ERROR);
143
+ }
122
144
  // End setup, start local dev process
123
145
  try {
124
146
  await startPortManagerServer();
125
147
  }
126
148
  catch (e) {
127
149
  logError(e);
128
- process.exit(EXIT_CODES.ERROR);
150
+ return exit(EXIT_CODES.ERROR);
129
151
  }
130
152
  const localDevProcess = new LocalDevProcess({
131
153
  initialProjectNodes: projectNodes,
@@ -138,6 +160,7 @@ export async function unifiedProjectDevFlow({ args, targetProjectAccountId, prov
138
160
  projectDir,
139
161
  projectData: project,
140
162
  env,
163
+ actions: { exit },
141
164
  });
142
165
  const websocketServer = new LocalDevWebsocketServer(localDevProcess, args.debug);
143
166
  const watcher = new LocalDevWatcher(localDevProcess);
@@ -3,25 +3,24 @@ import { getCwd, sanitizeFileName } from '@hubspot/local-dev-lib/path';
3
3
  import { extractZipArchive } from '@hubspot/local-dev-lib/archive';
4
4
  import { downloadProject, fetchProjectBuilds, } from '@hubspot/local-dev-lib/api/projects';
5
5
  import { logError, ApiErrorContext } from '../../lib/errorHandlers/index.js';
6
- import { PromptExitError } from '../../lib/errors/PromptExitError.js';
6
+ import { isPromptExitError } from '../../lib/errors/PromptExitError.js';
7
7
  import { getProjectConfig } from '../../lib/projects/config.js';
8
8
  import { downloadProjectPrompt } from '../../lib/prompts/downloadProjectPrompt.js';
9
9
  import { commands } from '../../lang/en.js';
10
10
  import { uiLogger } from '../../lib/ui/logger.js';
11
- import { trackCommandUsage } from '../../lib/usageTracking.js';
12
11
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
12
+ import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
13
13
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
14
14
  const command = 'download';
15
15
  const describe = commands.project.download.describe;
16
16
  async function handler(args) {
17
+ const { dest, build, derivedAccountId, exit } = args;
17
18
  const { projectConfig } = await getProjectConfig();
18
19
  if (projectConfig) {
19
20
  uiLogger.error(commands.project.download.warnings.cannotDownloadWithinProject);
20
- process.exit(EXIT_CODES.ERROR);
21
+ return exit(EXIT_CODES.ERROR);
21
22
  }
22
- const { dest, build, derivedAccountId } = args;
23
23
  let buildNumberToDownload = build;
24
- trackCommandUsage('project-download', undefined, derivedAccountId);
25
24
  try {
26
25
  const { project: projectName } = await downloadProjectPrompt(args);
27
26
  if (!buildNumberToDownload) {
@@ -34,7 +33,7 @@ async function handler(args) {
34
33
  }
35
34
  if (!buildNumberToDownload) {
36
35
  uiLogger.error(commands.project.download.errors.noBuildIdToDownload);
37
- process.exit(EXIT_CODES.ERROR);
36
+ return exit(EXIT_CODES.ERROR);
38
37
  }
39
38
  const sanitizedProjectName = sanitizeFileName(projectName);
40
39
  const absoluteDestPath = dest
@@ -43,17 +42,17 @@ async function handler(args) {
43
42
  const { data: zippedProject } = await downloadProject(derivedAccountId, projectName, buildNumberToDownload);
44
43
  await extractZipArchive(zippedProject, sanitizeFileName(projectName), path.resolve(absoluteDestPath));
45
44
  uiLogger.log(commands.project.download.logs.downloadSucceeded(buildNumberToDownload, projectName));
46
- process.exit(EXIT_CODES.SUCCESS);
45
+ return exit(EXIT_CODES.SUCCESS);
47
46
  }
48
47
  catch (e) {
49
- if (e instanceof PromptExitError) {
50
- process.exit(e.exitCode);
48
+ if (isPromptExitError(e)) {
49
+ throw e;
51
50
  }
52
51
  logError(e, new ApiErrorContext({
53
52
  accountId: derivedAccountId,
54
53
  request: 'project download',
55
54
  }));
56
- process.exit(EXIT_CODES.ERROR);
55
+ return exit(EXIT_CODES.ERROR);
57
56
  }
58
57
  }
59
58
  function projectDownloadBuilder(yargs) {
@@ -89,7 +88,7 @@ const builder = makeYargsBuilder(projectDownloadBuilder, command, describe, {
89
88
  const projectDownloadCommand = {
90
89
  command,
91
90
  describe,
92
- handler,
91
+ handler: makeYargsHandlerWithUsageTracking('project-download', handler),
93
92
  builder,
94
93
  };
95
94
  export default projectDownloadCommand;