@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
package/lang/en.js CHANGED
@@ -1320,6 +1320,30 @@ export const commands = {
1320
1320
  shuttingDown: 'Shutting down MCP server...',
1321
1321
  },
1322
1322
  },
1323
+ api: {
1324
+ describe: 'Make an authenticated HTTP request to the HubSpot API.',
1325
+ verboseDescribe: `Make an authenticated HTTP request to any HubSpot API that supports PAKs using your CLI authentication.\n\nThis command is intended for testing and exploration of HubSpot APIs. It uses the authentication credentials configured in the CLI to make requests on your behalf.\n\nThe endpoint should be the API path, e.g. ${chalk.bold('/crm/v3/objects/contacts')}. The request will be authenticated using the account specified by ${uiCommandReference('--account')} or the default account.\n\nNote: The available endpoints depend on the scopes granted to your personal access key. If you receive a 403 error, check that your key includes the required scopes for the endpoint you are trying to reach. ${uiLink('Learn more about the HubSpot API', 'https://developers.hubspot.com/docs/api-reference/latest/overview')}`,
1326
+ positionals: {
1327
+ endpoint: {
1328
+ describe: 'API endpoint path (e.g. /crm/v3/objects/contacts)',
1329
+ },
1330
+ },
1331
+ options: {
1332
+ method: {
1333
+ describe: 'HTTP method to use. Defaults to GET, or POST if --data is provided',
1334
+ },
1335
+ data: {
1336
+ describe: 'JSON-formatted request body for POST, PUT, and PATCH requests',
1337
+ },
1338
+ },
1339
+ requestLog: (method, url) => `${chalk.bold(method)} ${url}`,
1340
+ requestBodyLog: (body) => `Request body: ${body}`,
1341
+ responseLog: 'Response:',
1342
+ errors: {
1343
+ invalidJson: 'The value passed to --data is not valid JSON. Please provide a valid JSON string.',
1344
+ statusLine: (status, statusText) => `${chalk.red(`${status} ${statusText}`)}`,
1345
+ },
1346
+ },
1323
1347
  open: {
1324
1348
  describe: 'Open a HubSpot page in your browser.',
1325
1349
  options: {
@@ -1361,6 +1385,7 @@ export const commands = {
1361
1385
  },
1362
1386
  errors: {
1363
1387
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
1388
+ unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
1364
1389
  profileExists: (profileName) => `Profile ${chalk.bold(profileName)} already exists. Please choose a different name.`,
1365
1390
  invalidTargetAccount: 'Target account is not configured in the CLI',
1366
1391
  noAccountsConfigured: 'No accounts configured in the CLI',
@@ -1391,6 +1416,7 @@ export const commands = {
1391
1416
  },
1392
1417
  errors: {
1393
1418
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
1419
+ unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
1394
1420
  noProfileFound: (profileName) => `No profile with filename ${chalk.bold(profileName)} found in your project.`,
1395
1421
  noProfilesFound: 'No profiles found in your project.',
1396
1422
  failedToDeleteProfile: (profileName) => `Unable to delete profile ${chalk.bold(profileName)}. Please try again.`,
@@ -1424,7 +1450,7 @@ export const commands = {
1424
1450
  noRunnableComponents: `No supported components were found in this project. Run ${uiCommandReference('hs project add')} to see a list of available components and add one to your project.`,
1425
1451
  accountNotCombined: `\nLocal development of unified apps is currently only compatible with accounts that are opted into the unified apps beta. Make sure that this account is opted in or switch accounts using ${uiCommandReference('hs account use')}.`,
1426
1452
  unsupportedAccountFlagLegacy: 'The --project-account and --testing-account flags are not supported for projects with platform versions earlier than 2025.2.',
1427
- unsupportedAccountFlagV2: 'The --account flag is is not supported supported for projects with platform versions 2025.2 and newer. Use --testing-account and --project-account flags to specify accounts to use for local dev',
1453
+ unsupportedAccountFlagV2: 'The --account flag is not supported for projects with platform versions 2025.2 and newer. Use --testing-account and --project-account flags to specify accounts to use for local dev',
1428
1454
  localDevAlreadyRunning: `Another ${uiCommandReference('hs project dev')} process is already running. To proceed with local development of this project, stop the existing process and re-run ${uiCommandReference('hs project dev')}.`,
1429
1455
  },
1430
1456
  examples: {
@@ -1614,6 +1640,7 @@ export const commands = {
1614
1640
  deploy: {
1615
1641
  describe: 'Deploy a project build.',
1616
1642
  deployBuildIdPrompt: '[--build] Deploy which build?',
1643
+ profileMessage: (profileName, accountId) => `Deploying with ${chalk.bold(profileName)} profile: ${uiAccountDescription(accountId)}`,
1617
1644
  debug: {
1618
1645
  deploying: (path) => `Deploying project at path: ${path}`,
1619
1646
  },
@@ -1726,6 +1753,7 @@ export const commands = {
1726
1753
  autoDeployDisabled: (deployCommand) => `Automatic deploys are disabled for this project. Run ${uiCommandReference(deployCommand)} to deploy this build.`,
1727
1754
  },
1728
1755
  errors: {
1756
+ noProjectConfig: 'No project detected. Run this command from a project directory.',
1729
1757
  projectLockedError: `Your project is locked. This may mean that another user is running the ${uiCommandReference('hs project dev')} command for this project. If this is you, unlock the project in Projects UI.`,
1730
1758
  },
1731
1759
  options: {
@@ -1929,9 +1957,9 @@ export const commands = {
1929
1957
  },
1930
1958
  info: {
1931
1959
  describe: 'Display information about a project, its app, and its components',
1960
+ verboseDescribe: `Display information about a project, its app, and its components\n\nShows the project's platform version, deployed build ID, auto-deploy status, app metadata, and a list of components.\n\nRun ${uiCommandReference('hs project info --json')} to output the result as JSON for scripting.`,
1932
1961
  project: {
1933
- title: 'Project',
1934
- name: (name) => `Name: ${name}`,
1962
+ title: (name) => `Project: ${name}`,
1935
1963
  platformVersion: (version) => `Platform Version: ${version}`,
1936
1964
  id: (id) => `Project ID: ${id}`,
1937
1965
  deployedBuild: (buildId) => `Deployed Build: #${buildId}`,
@@ -1945,6 +1973,10 @@ export const commands = {
1945
1973
  authType: (authType) => `Auth Type: ${authType}`,
1946
1974
  distributionType: (distributionType) => `Distribution: ${distributionType}`,
1947
1975
  },
1976
+ examples: {
1977
+ default: 'Display project information',
1978
+ json: 'Output as JSON for scripting',
1979
+ },
1948
1980
  viewProjectLink: 'View project in HubSpot',
1949
1981
  componentsHeader: 'Components',
1950
1982
  labels: {
@@ -1952,12 +1984,51 @@ export const commands = {
1952
1984
  uid: 'UID',
1953
1985
  },
1954
1986
  errors: {
1955
- noProjectConfig: 'No project found. Run this command from a project directory.',
1987
+ noProjectConfig: `No project found in this directory.\n\nRun ${uiCommandReference('hs project create')} to start a new project, or change to a directory containing hsproject.json.`,
1956
1988
  projectNotFound: (projectName, accountId) => `Project "${projectName}" was not found in account ${uiAccountDescription(accountId)}. Make sure the project has been uploaded at least once.`,
1957
- noDeployedBuild: 'This project has not been deployed yet. Deploy your project to see component information.',
1989
+ noDeployedBuild: `This project has not been deployed yet.\n\nRun ${uiCommandReference('hs project deploy')} to deploy your project.`,
1958
1990
  unsupportedPlatformVersion: (platformVersion) => `This command is not supported for platform version ${chalk.bold(platformVersion)}. Please upgrade to 2025.2 or later.`,
1959
1991
  },
1960
1992
  },
1993
+ delete: {
1994
+ describe: 'Delete a project from the current target account',
1995
+ verboseDescribe: `Delete a project from the current target account\n\nThis will permanently delete the project, all deployed components, and any app installations associated with it. Your local project files will not be affected.`,
1996
+ warnings: {
1997
+ irreversibleTitle: 'Warning: This will permanently delete your project',
1998
+ irreversible: 'Deleting this project will also delete all deployed components and app installations. This action cannot be undone. Your local project files will not be affected.',
1999
+ },
2000
+ prompts: {
2001
+ selectProject: (accountId) => `Select a project to delete in ${uiAccountDescription(accountId)}`,
2002
+ confirmDelete: (projectName, accountId) => `[--force] Delete ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}? This cannot be undone.`,
2003
+ validation: {
2004
+ projectRequired: 'Please select a project to delete',
2005
+ },
2006
+ },
2007
+ logs: {
2008
+ deleting: (projectName) => `Deleting project ${chalk.bold(projectName)}...`,
2009
+ deleted: (projectName, accountId) => `Deleted project ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}`,
2010
+ cancelled: 'Deletion cancelled',
2011
+ componentsToDeleteUnified: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c.componentId)} (${mapToUserFriendlyName(c.componentType)})`).join('\n')}`,
2012
+ componentsToDeleteLegacy: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c)}`).join('\n')}`,
2013
+ deletingComponents: (projectName) => `Deleting deployed components from ${chalk.bold(projectName)}...`,
2014
+ componentsDeleted: (projectName) => `Deleted deployed components from ${chalk.bold(projectName)}`,
2015
+ unableToDetermineIfComponentsWereDeleted: (projectName) => `Unable to determine if components were successfully deleted from ${chalk.bold(projectName)}. Please try again.`,
2016
+ installWarning: (installCount) => `This project has ${chalk.bold(String(installCount))} active app ${installCount === 1 ? 'installation' : 'installations'} that will be deleted.`,
2017
+ installCountUnknown: 'Unable to determine the number of active app installations for this project.',
2018
+ },
2019
+ errors: {
2020
+ noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
2021
+ projectNotFound: (projectName, accountId) => `Project ${chalk.bold(projectName)} not found in ${uiAccountDescription(accountId)}`,
2022
+ deleteFailed: (projectName) => `Failed to delete project ${chalk.bold(projectName)}. Run with --debug for details or try again.`,
2023
+ cannotDelete: (projectName, reason) => `Cannot delete project ${chalk.bold(projectName)}: ${reason}`,
2024
+ noPlatformVersion: 'Unable to determine platform version for project',
2025
+ componentDeletionFailed: (projectName) => `Failed to delete deployed components from ${chalk.bold(projectName)}. The project was not deleted.`,
2026
+ },
2027
+ options: {
2028
+ project: 'name of the project to delete',
2029
+ force: 'skip confirmation prompt',
2030
+ },
2031
+ },
1961
2032
  },
1962
2033
  sandbox: {
1963
2034
  describe: 'Commands for managing sandboxes.',
@@ -3116,11 +3187,6 @@ export const lib = {
3116
3187
  profileTargetAccount: (accountId) => `Targeting ${uiAccountDescription(accountId)}`,
3117
3188
  profileVariables: 'Profile variables',
3118
3189
  },
3119
- exitIfUsingProfiles: {
3120
- errors: {
3121
- noProfileSpecified: `This project is configured to use profiles, but no profile was specified. Target a profile using the ${uiCommandReference('--profile')} flag.`,
3122
- },
3123
- },
3124
3190
  loadProfile: {
3125
3191
  errors: {
3126
3192
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
@@ -3233,6 +3299,15 @@ export const lib = {
3233
3299
  fileFiltered: (filename) => `Ignore rule triggered for "${filename}"`,
3234
3300
  legacyFileDetected: (filename, platformVersion) => `The ${chalk.bold(filename)} file is not supported on platform version ${chalk.bold(platformVersion)} and will be ignored.`,
3235
3301
  projectDoesNotExist: (accountId) => `Upload cancelled. Run ${uiCommandReference('hs project upload')} again to create the project in ${uiAccountDescription(accountId)}.`,
3302
+ workspaceIncluded: (workspaceDir, archivePath) => `Including workspace: ${workspaceDir} → ${archivePath}`,
3303
+ fileDependencyIncluded: (packageName, localPath, archivePath) => `Including file: dependency ${packageName}: ${localPath} → ${archivePath}`,
3304
+ malformedPackageJson: (packageJsonPath, error) => `Skipping malformed package.json at ${packageJsonPath}: ${error}`,
3305
+ workspaceCollision: (archivePath, workspaceDir, existingWorkspace) => `Workspace collision: ${archivePath} from ${workspaceDir} and ${existingWorkspace}`,
3306
+ fileDependencyAlreadyIncluded: (packageName, archivePath) => `file: dependency ${packageName} already included as workspace: ${archivePath}`,
3307
+ updatingLockfile: (lockfilePath) => `Updating package-lock.json in archive: ${lockfilePath}`,
3308
+ updatingPackageJsonWorkspaces: (packageJsonPath) => `Updating package.json workspaces in archive: ${packageJsonPath}`,
3309
+ updatedWorkspaces: (workspaces) => ` Updated workspaces: ${workspaces}`,
3310
+ updatedFileDependency: (packageName, relativePath) => ` Updated dependencies.${packageName}: file:${relativePath}`,
3236
3311
  },
3237
3312
  },
3238
3313
  importData: {
@@ -3343,6 +3418,9 @@ export const lib = {
3343
3418
  pakFailure: 'Failed to generate personal access key for developer test account',
3344
3419
  },
3345
3420
  },
3421
+ usageTracking: {
3422
+ transparencyMessage: `HubSpot CLI collects anonymous usage data to improve the product. Run ${uiCommandReference('hs config set --enable-usage-tracking=false', false)} to opt out.\n`,
3423
+ },
3346
3424
  configOptions: {
3347
3425
  enableOrDisableBooleanFieldPrompt: {
3348
3426
  message: (fieldName) => `Choose to enable or disable ${fieldName}`,
@@ -3431,8 +3509,14 @@ export const lib = {
3431
3509
  promptUtils: {
3432
3510
  errors: {
3433
3511
  noSelectableChoices: 'Exiting prompt because no selectable choices are available',
3512
+ userCancelled: 'User cancelled prompt',
3434
3513
  },
3435
3514
  },
3515
+ projectProfilePrompt: {
3516
+ message: '[--profile] This project is configured to use profiles. Select a profile to use:',
3517
+ exitMessage: `This project is configured to use profiles, but no profile was specified. Try again using ${uiCommandReference('--profile')}`,
3518
+ noValidProfilesMessage: 'There are no valid profiles in this project. Ensure the accounts they are targeting are authenticated and try again.',
3519
+ },
3436
3520
  importDataFilePathPrompt: {
3437
3521
  promptContext: `To view the JSON schema for data imports, visit ${uiLink('the docs', 'https://developers.hubspot.com/docs/guides/api/crm/imports')}`,
3438
3522
  promptMessage: '[--file-path] Select the JSON file that will be used to import your data.',
@@ -3,7 +3,7 @@ import { getAccessToken, updateConfigWithAccessToken, } from '@hubspot/local-dev
3
3
  import { toKebabCase } from '@hubspot/local-dev-lib/text';
4
4
  import { handleMerge, handleMigration } from './configMigrate.js';
5
5
  import { debugError, logError } from './errorHandlers/index.js';
6
- import { PromptExitError } from './errors/PromptExitError.js';
6
+ import { isPromptExitError } from './errors/PromptExitError.js';
7
7
  import { personalAccessKeyPrompt } from './prompts/personalAccessKeyPrompt.js';
8
8
  import { cliAccountNamePrompt } from './prompts/accountNamePrompt.js';
9
9
  import { setAsDefaultAccountPrompt } from './prompts/setAsDefaultAccountPrompt.js';
@@ -37,7 +37,7 @@ async function updateConfigWithNewAccount(env, configAlreadyExists, providedPers
37
37
  return updatedConfig;
38
38
  }
39
39
  catch (e) {
40
- if (e instanceof PromptExitError) {
40
+ if (isPromptExitError(e)) {
41
41
  throw e;
42
42
  }
43
43
  debugError(e);
@@ -4,7 +4,7 @@ import { uiLogger } from './ui/logger.js';
4
4
  import { createDeveloperTestAccount, fetchDeveloperTestAccountGateSyncStatus, generateDeveloperTestAccountPersonalAccessKey, } from '@hubspot/local-dev-lib/api/developerTestAccounts';
5
5
  import { HUBSPOT_ACCOUNT_TYPES } from '@hubspot/local-dev-lib/constants/config';
6
6
  import { createV2Sandbox, getSandboxPersonalAccessKey, } from '@hubspot/local-dev-lib/api/sandboxHubs';
7
- import { PromptExitError } from './errors/PromptExitError.js';
7
+ import { isPromptExitError } from './errors/PromptExitError.js';
8
8
  import { personalAccessKeyPrompt } from './prompts/personalAccessKeyPrompt.js';
9
9
  import { createDeveloperTestAccountConfigPrompt } from './prompts/createDeveloperTestAccountConfigPrompt.js';
10
10
  import { cliAccountNamePrompt } from './prompts/accountNamePrompt.js';
@@ -128,7 +128,7 @@ export async function buildDeveloperTestAccount(testAccountName, parentAccountCo
128
128
  await saveAccountToConfig(developerTestAccountId, testAccountName, env, developerTestAccountPersonalAccessKey);
129
129
  }
130
130
  catch (err) {
131
- if (err instanceof PromptExitError) {
131
+ if (isPromptExitError(err)) {
132
132
  throw err;
133
133
  }
134
134
  logError(err);
@@ -174,7 +174,7 @@ export async function buildV2Sandbox(sandboxName, parentAccountConfig, sandboxTy
174
174
  await saveAccountToConfig(sandbox.sandboxHubId, sandboxName, env, pak, force);
175
175
  }
176
176
  catch (err) {
177
- if (err instanceof PromptExitError) {
177
+ if (isPromptExitError(err)) {
178
178
  throw err;
179
179
  }
180
180
  logError(err);
@@ -78,7 +78,6 @@ export declare const APP_AUTH_TYPES: {
78
78
  export declare const FEATURES: {
79
79
  readonly UNIFIED_APPS: "Developers:UnifiedApps:PrivateBeta";
80
80
  readonly APP_EVENTS: "Developers:UnifiedApps:AppEventsAccess";
81
- readonly APPS_HOME: "UIE:AppHome";
82
81
  readonly THEME_MIGRATION_2025_2: "Developers:ProjectThemeMigrations:2025.2";
83
82
  readonly AGENT_TOOLS: "ThirdPartyAgentTools";
84
83
  };
package/lib/constants.js CHANGED
@@ -70,7 +70,6 @@ export const APP_AUTH_TYPES = {
70
70
  export const FEATURES = {
71
71
  UNIFIED_APPS: 'Developers:UnifiedApps:PrivateBeta',
72
72
  APP_EVENTS: 'Developers:UnifiedApps:AppEventsAccess',
73
- APPS_HOME: 'UIE:AppHome',
74
73
  THEME_MIGRATION_2025_2: 'Developers:ProjectThemeMigrations:2025.2',
75
74
  AGENT_TOOLS: 'ThirdPartyAgentTools',
76
75
  };
@@ -1,4 +1,4 @@
1
- import { prefixOptions } from '../ui/spinniesUtils.js';
1
+ import { getLabels } from '@hubspot/local-dev-lib/logger';
2
2
  import chalk from 'chalk';
3
3
  import { helpers } from '../interpolation.js';
4
4
  import { uiAccountDescription } from '../ui/index.js';
@@ -10,11 +10,11 @@ export class Diagnosis {
10
10
  errorCount = 0;
11
11
  warningCount = 0;
12
12
  constructor({ diagnosticInfo, accountId }) {
13
- const { succeedPrefix, failPrefix } = prefixOptions({});
13
+ const labels = getLabels();
14
14
  this.prefixes = {
15
- success: chalk.green(succeedPrefix),
16
- error: chalk.red(failPrefix),
17
- warning: helpers.orange('!'),
15
+ success: chalk.green(labels.success),
16
+ error: chalk.red(labels.error),
17
+ warning: helpers.orange(labels.warning),
18
18
  };
19
19
  this.diagnosis = {
20
20
  cli: {
@@ -7,11 +7,12 @@ import util from 'util';
7
7
  import { isProjectValidationError } from '../errors/ProjectValidationError.js';
8
8
  export function logError(error, context) {
9
9
  debugError(error, context);
10
- if (isProjectValidationError(error)) {
11
- uiLogger.error(error.message);
10
+ // This should be right after debugError. Add anything else below it
11
+ if (shouldSuppressError(error, context)) {
12
12
  return;
13
13
  }
14
- if (shouldSuppressError(error, context)) {
14
+ if (isProjectValidationError(error)) {
15
+ uiLogger.error(error.message);
15
16
  return;
16
17
  }
17
18
  if (isHubSpotHttpError(error)) {
@@ -3,6 +3,7 @@ import { uiLogger } from '../ui/logger.js';
3
3
  import { PLATFORM_VERSION_ERROR_TYPES } from '../constants.js';
4
4
  import { lib } from '../../lang/en.js';
5
5
  import { uiAccountDescription, uiLine, uiLink } from '../ui/index.js';
6
+ import { isPromptExitError } from '../errors/PromptExitError.js';
6
7
  function createPlatformVersionError(err, subCategory) {
7
8
  let translationKey = 'unspecifiedPlatformVersion';
8
9
  let platformVersion = 'unspecified platformVersion';
@@ -27,6 +28,9 @@ function createPlatformVersionError(err, subCategory) {
27
28
  uiLine();
28
29
  }
29
30
  export function shouldSuppressError(err, context) {
31
+ if (isPromptExitError(err)) {
32
+ return true;
33
+ }
30
34
  if (isMissingScopeError(err)) {
31
35
  uiLogger.error(lib.errorHandlers.suppressErrors.missingScopeError(context?.request || 'request', context?.accountId ? uiAccountDescription(context.accountId) : ''));
32
36
  return true;
@@ -1,4 +1,6 @@
1
+ import { ExitCode } from '../../types/Yargs.js';
1
2
  export declare class PromptExitError extends Error {
2
- exitCode: number;
3
- constructor(message: string, exitCode: number);
3
+ exitCode: ExitCode;
4
+ constructor(message: string, exitCode: ExitCode);
4
5
  }
6
+ export declare function isPromptExitError(e: unknown): e is PromptExitError;
@@ -6,3 +6,6 @@ export class PromptExitError extends Error {
6
6
  this.exitCode = exitCode;
7
7
  }
8
8
  }
9
+ export function isPromptExitError(e) {
10
+ return e instanceof PromptExitError;
11
+ }
package/lib/hasFeature.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { http } from '@hubspot/local-dev-lib/http';
2
2
  import { fetchEnabledFeatures } from '@hubspot/local-dev-lib/api/localDevAuth';
3
- import { FEATURES } from './constants.js';
4
- const FEATURES_THAT_DEFAULT_ON = [FEATURES.APPS_HOME];
3
+ const FEATURES_THAT_DEFAULT_ON = [];
5
4
  export async function hasFeature(accountId, feature) {
6
5
  const { data: { enabledFeatures }, } = await fetchEnabledFeatures(accountId);
7
6
  if (enabledFeatures[feature] === undefined &&
@@ -42,6 +42,10 @@ export async function autoUpdateCLI(argv) {
42
42
  debugError(e);
43
43
  }
44
44
  const cliUpgradeInfo = getCliUpgradeInfo();
45
+ // Ignore all update notifications if the current version is a pre-release (contains a hyphen)
46
+ if (cliUpgradeInfo.current && cliUpgradeInfo.current.includes('-')) {
47
+ showManualInstallHelp = false;
48
+ }
45
49
  if (isAllowAutoUpdatesEnabled &&
46
50
  cliUpgradeInfo.current &&
47
51
  cliUpgradeInfo.latest &&
@@ -49,9 +53,8 @@ export async function autoUpdateCLI(argv) {
49
53
  !argv.useEnv &&
50
54
  !process.env.SKIP_HUBSPOT_CLI_AUTO_UPDATES &&
51
55
  !preventAutoUpdateForCommand(argv._)) {
52
- // Ignore all update notifications if the current version is a pre-release (contains a hyphen)
53
- if (cliUpgradeInfo.current.includes('-')) {
54
- showManualInstallHelp = false;
56
+ if (!showManualInstallHelp) {
57
+ // Pre-release version detected, skip auto-update
55
58
  }
56
59
  else if (!['major', 'latest'].includes(cliUpgradeInfo.type)) {
57
60
  // type "latest" => current installed version is latest
package/lib/process.d.ts CHANGED
@@ -8,6 +8,6 @@ interface KeyPress {
8
8
  export declare const TERMINATION_SIGNALS: string[];
9
9
  export declare function handleExit(callback: (onTerminate: {
10
10
  isSIGHUP: boolean;
11
- }) => void): void;
11
+ }) => void): () => void;
12
12
  export declare function handleKeypress(callback: (onKeyPress: KeyPress) => void): void;
13
13
  export {};
package/lib/process.js CHANGED
@@ -16,9 +16,9 @@ export const TERMINATION_SIGNALS = [
16
16
  ];
17
17
  export function handleExit(callback) {
18
18
  let exitInProgress = false;
19
+ const listeners = [];
19
20
  TERMINATION_SIGNALS.forEach(signal => {
20
- process.removeAllListeners(signal);
21
- process.on(signal, async (...args) => {
21
+ const handler = async (...args) => {
22
22
  // Prevent duplicate exit handling
23
23
  if (!exitInProgress) {
24
24
  exitInProgress = true;
@@ -38,8 +38,15 @@ export function handleExit(callback) {
38
38
  }
39
39
  await callback({ isSIGHUP });
40
40
  }
41
- });
41
+ };
42
+ listeners.push({ signal, handler });
43
+ process.on(signal, handler);
42
44
  });
45
+ return () => {
46
+ for (const { signal, handler } of listeners) {
47
+ process.removeListener(signal, handler);
48
+ }
49
+ };
43
50
  }
44
51
  export function handleKeypress(callback) {
45
52
  readline.createInterface(process.stdin, process.stdout);
@@ -1,7 +1,7 @@
1
1
  import { marketplaceDistribution, oAuth, privateDistribution, staticAuth, EMPTY_PROJECT, PROJECT_WITH_APP, FEATURES, } from '../../constants.js';
2
2
  import { commands, lib } from '../../../lang/en.js';
3
3
  import { listPrompt } from '../../prompts/promptUtils.js';
4
- import { APP_EVENTS_KEY as AppEventsKey, PAGES_KEY as PagesKey, } from '@hubspot/project-parsing-lib/constants';
4
+ import { APP_EVENTS_KEY as AppEventsKey } from '@hubspot/project-parsing-lib/constants';
5
5
  import { isV2Project } from '../platformVersion.js';
6
6
  import path from 'path';
7
7
  import { getConfigForPlatformVersion } from './legacy.js';
@@ -47,7 +47,6 @@ export async function createV2App(providedAuth, providedDistribution) {
47
47
  }
48
48
  const componentTypeToGateMap = {
49
49
  [AppEventsKey]: FEATURES.APP_EVENTS,
50
- [PagesKey]: FEATURES.APPS_HOME,
51
50
  'workflow-action-tool': FEATURES.AGENT_TOOLS,
52
51
  };
53
52
  export async function calculateComponentTemplateChoices(components, authType, distribution, accountId, projectMetadata) {
@@ -0,0 +1,13 @@
1
+ export declare const DELETION_POLL_TIMEOUT_MS: number;
2
+ export declare const DELETION_DEPLOY_SUCCESS_STATES: string[];
3
+ export declare const DELETION_DEPLOY_ERROR_STATES: ("FAILURE" | "ERROR" | "REVERTED")[];
4
+ export declare function resolveProjectName(accountId: number, projectArg: string | undefined): Promise<string>;
5
+ export declare function fetchProjectInstallCount(accountId: number, projectId: number): Promise<number>;
6
+ export declare function checkDeployedComponents(accountId: number, projectName: string): Promise<{
7
+ platformVersion: string;
8
+ hasUnifiedComponents: boolean;
9
+ projectId: number;
10
+ }>;
11
+ export declare function deleteDeployedComponents(accountId: number, projectName: string): Promise<void>;
12
+ export declare function handleProjectDeletion(accountId: number, projectName: string): Promise<void>;
13
+ export declare function confirmDeletion(projectName: string, accountId: number, projectId: number): Promise<void>;
@@ -0,0 +1,193 @@
1
+ import { fetchProjects, fetchProject, stageProjectForDeletion, getDeployStatus, deleteProject, } from '@hubspot/local-dev-lib/api/projects';
2
+ import { fetchPublicAppsForPortal } from '@hubspot/local-dev-lib/api/appsDev';
3
+ import { debugError, getErrorMessage } from '../errorHandlers/index.js';
4
+ import { uiLogger } from '../ui/logger.js';
5
+ import SpinniesManager from '../ui/SpinniesManager.js';
6
+ import { commands } from '../../lang/en.js';
7
+ import { confirmPrompt, listPrompt } from '../prompts/promptUtils.js';
8
+ import { poll, DEFAULT_POLLING_STATES, DEFAULT_POLLING_STATUS_LOOKUP, } from '../polling.js';
9
+ import { PromptExitError } from '../errors/PromptExitError.js';
10
+ import { EXIT_CODES } from '../enums/exitCodes.js';
11
+ import { AUTO_GENERATED_COMPONENT_TYPES } from '@hubspot/project-parsing-lib/constants';
12
+ import { mapToUserFacingType } from '@hubspot/project-parsing-lib/transform';
13
+ import { isV2Project } from './platformVersion.js';
14
+ import { COMPONENT_TYPES, SUBCOMPONENT_TYPES, } from '@hubspot/local-dev-lib/enums/build';
15
+ export const DELETION_POLL_TIMEOUT_MS = 5 * 60 * 1000;
16
+ export const DELETION_DEPLOY_SUCCESS_STATES = [
17
+ DEFAULT_POLLING_STATES.SUCCESS,
18
+ 'FINISHED',
19
+ ];
20
+ export const DELETION_DEPLOY_ERROR_STATES = DEFAULT_POLLING_STATUS_LOOKUP.errorStates;
21
+ const LEGACY_COMPONENTS_TO_FILTER = [
22
+ SUBCOMPONENT_TYPES.SERVERLESS_PKG,
23
+ SUBCOMPONENT_TYPES.REACT_EXTENSION,
24
+ SUBCOMPONENT_TYPES.PACKAGE_LOCK_FILE,
25
+ COMPONENT_TYPES.PRIVATE_APP,
26
+ COMPONENT_TYPES.PUBLIC_APP,
27
+ ];
28
+ const legacyComponentFriendlyNames = {
29
+ [SUBCOMPONENT_TYPES.APP_ID]: 'Private App',
30
+ [SUBCOMPONENT_TYPES.PUBLIC_APP_ID]: 'Public App',
31
+ [SUBCOMPONENT_TYPES.CRM_CARD_V2]: 'Card',
32
+ [SUBCOMPONENT_TYPES.CARD_V2]: 'Card',
33
+ [SUBCOMPONENT_TYPES.SERVERLESS_FUNCTION]: 'Serverless Function',
34
+ [SUBCOMPONENT_TYPES.APP_FUNCTION]: 'App Function',
35
+ [SUBCOMPONENT_TYPES.AUTOMATION_ACTION]: 'Automation Action',
36
+ [SUBCOMPONENT_TYPES.WEBHOOKS]: 'Webhooks',
37
+ [COMPONENT_TYPES.THEME]: 'Theme',
38
+ [COMPONENT_TYPES.REACT_THEME]: 'React Theme',
39
+ };
40
+ function mapLegacyComponentToUserFriendlyName(type) {
41
+ return legacyComponentFriendlyNames[type] || 'unknown';
42
+ }
43
+ export async function resolveProjectName(accountId, projectArg) {
44
+ const { data } = await fetchProjects(accountId);
45
+ const projects = data.results;
46
+ if (projectArg) {
47
+ if (!projects.some(p => p.name === projectArg)) {
48
+ throw new Error(commands.project.delete.errors.projectNotFound(projectArg, accountId));
49
+ }
50
+ return projectArg;
51
+ }
52
+ if (projects.length === 0) {
53
+ throw new Error(commands.project.delete.errors.noProjectsFound(accountId));
54
+ }
55
+ const selected = await listPrompt(commands.project.delete.prompts.selectProject(accountId), {
56
+ choices: projects.map(p => ({ name: p.name, value: p.name })),
57
+ validate: value => !!value || commands.project.delete.prompts.validation.projectRequired,
58
+ });
59
+ if (!selected) {
60
+ throw new Error(commands.project.delete.prompts.validation.projectRequired);
61
+ }
62
+ return selected;
63
+ }
64
+ export async function fetchProjectInstallCount(accountId, projectId) {
65
+ try {
66
+ const { data } = await fetchPublicAppsForPortal(accountId);
67
+ return data.results
68
+ .filter(app => app.projectId === projectId)
69
+ .reduce((sum, app) => sum + app.publicApplicationInstallCounts.uniquePortalInstallCount, 0);
70
+ }
71
+ catch (e) {
72
+ debugError(e);
73
+ uiLogger.warn(commands.project.delete.logs.installCountUnknown);
74
+ return 0;
75
+ }
76
+ }
77
+ export async function checkDeployedComponents(accountId, projectName) {
78
+ const { data: projectData } = await fetchProject(accountId, projectName);
79
+ const platformVersion = projectData.deployedBuild?.platformVersion ||
80
+ projectData.latestBuild?.platformVersion;
81
+ if (!platformVersion) {
82
+ throw new Error(commands.project.delete.errors.noPlatformVersion);
83
+ }
84
+ if (!isV2Project(platformVersion)) {
85
+ const userVisibleComponents = [];
86
+ projectData.deployedBuild?.subbuildStatuses?.forEach(item => {
87
+ if (LEGACY_COMPONENTS_TO_FILTER.includes(item.buildType)) {
88
+ return;
89
+ }
90
+ userVisibleComponents.push(`${item.buildName} - (${mapLegacyComponentToUserFriendlyName(item.buildType)})`);
91
+ });
92
+ if (userVisibleComponents.length > 0) {
93
+ uiLogger.log(commands.project.delete.logs.componentsToDeleteLegacy(userVisibleComponents));
94
+ }
95
+ return {
96
+ platformVersion,
97
+ hasUnifiedComponents: false,
98
+ projectId: projectData.id,
99
+ };
100
+ }
101
+ try {
102
+ const { data } = await stageProjectForDeletion(accountId, projectName, true);
103
+ if (data.hasDeployedComponents) {
104
+ const userVisibleComponents = data.componentsToRemove.filter(item => !AUTO_GENERATED_COMPONENT_TYPES.includes(mapToUserFacingType(item.componentType)));
105
+ uiLogger.log(commands.project.delete.logs.componentsToDeleteUnified(userVisibleComponents));
106
+ }
107
+ return {
108
+ hasUnifiedComponents: data.hasDeployedComponents,
109
+ platformVersion,
110
+ projectId: projectData.id,
111
+ };
112
+ }
113
+ catch (e) {
114
+ debugError(e);
115
+ throw new Error(commands.project.delete.errors.cannotDelete(projectName, getErrorMessage(e)));
116
+ }
117
+ }
118
+ export async function deleteDeployedComponents(accountId, projectName) {
119
+ SpinniesManager.add('removeComponents', {
120
+ text: commands.project.delete.logs.deletingComponents(projectName),
121
+ });
122
+ let projectDeletionResponse;
123
+ try {
124
+ const { data } = await stageProjectForDeletion(accountId, projectName, false);
125
+ projectDeletionResponse = data;
126
+ }
127
+ catch (e) {
128
+ debugError(e);
129
+ SpinniesManager.fail('removeComponents', {
130
+ text: commands.project.delete.errors.componentDeletionFailed(projectName),
131
+ });
132
+ throw new Error(commands.project.delete.errors.componentDeletionFailed(projectName));
133
+ }
134
+ const { deployId, hasDeployedComponents } = projectDeletionResponse;
135
+ if (deployId === undefined) {
136
+ if (hasDeployedComponents) {
137
+ SpinniesManager.fail('removeComponents', {
138
+ text: commands.project.delete.logs.unableToDetermineIfComponentsWereDeleted(projectName),
139
+ });
140
+ throw new Error(commands.project.delete.logs.unableToDetermineIfComponentsWereDeleted(projectName));
141
+ }
142
+ else {
143
+ SpinniesManager.succeed('removeComponents', {
144
+ text: commands.project.delete.logs.componentsDeleted(projectName),
145
+ });
146
+ }
147
+ return;
148
+ }
149
+ try {
150
+ await poll(() => getDeployStatus(accountId, projectName, deployId), {
151
+ successStates: DELETION_DEPLOY_SUCCESS_STATES,
152
+ errorStates: DELETION_DEPLOY_ERROR_STATES,
153
+ }, DELETION_POLL_TIMEOUT_MS);
154
+ SpinniesManager.succeed('removeComponents', {
155
+ text: commands.project.delete.logs.componentsDeleted(projectName),
156
+ });
157
+ }
158
+ catch (e) {
159
+ debugError(e);
160
+ SpinniesManager.fail('removeComponents', {
161
+ text: commands.project.delete.errors.componentDeletionFailed(projectName),
162
+ });
163
+ throw new Error(commands.project.delete.errors.componentDeletionFailed(projectName));
164
+ }
165
+ }
166
+ export async function handleProjectDeletion(accountId, projectName) {
167
+ try {
168
+ SpinniesManager.add('deleteProject', {
169
+ text: commands.project.delete.logs.deleting(projectName),
170
+ });
171
+ await deleteProject(accountId, projectName);
172
+ SpinniesManager.succeed('deleteProject', {
173
+ text: commands.project.delete.logs.deleted(projectName, accountId),
174
+ });
175
+ }
176
+ catch (e) {
177
+ SpinniesManager.fail('deleteProject', {
178
+ text: commands.project.delete.errors.deleteFailed(projectName),
179
+ });
180
+ throw e;
181
+ }
182
+ }
183
+ export async function confirmDeletion(projectName, accountId, projectId) {
184
+ const installCount = await fetchProjectInstallCount(accountId, projectId);
185
+ if (installCount > 0) {
186
+ uiLogger.warn(commands.project.delete.logs.installWarning(installCount));
187
+ }
188
+ const confirmed = await confirmPrompt(commands.project.delete.prompts.confirmDelete(projectName, accountId), { defaultAnswer: false });
189
+ if (!confirmed) {
190
+ uiLogger.log(commands.project.delete.logs.cancelled);
191
+ throw new PromptExitError(commands.project.delete.logs.cancelled, EXIT_CODES.SUCCESS);
192
+ }
193
+ }