@hubspot/cli 8.3.0 → 8.4.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) hide show
  1. package/bin/cli.js +2 -0
  2. package/commands/account/auth.js +12 -22
  3. package/commands/account/clean.js +5 -6
  4. package/commands/account/createOverride.js +7 -7
  5. package/commands/account/info.js +2 -1
  6. package/commands/account/list.js +3 -5
  7. package/commands/account/remove.js +2 -3
  8. package/commands/account/removeOverride.js +8 -10
  9. package/commands/account/rename.js +5 -6
  10. package/commands/account/use.js +8 -19
  11. package/commands/api.d.ts +10 -0
  12. package/commands/api.js +164 -0
  13. package/commands/app/migrate.js +8 -8
  14. package/commands/app/secret/add.js +6 -7
  15. package/commands/app/secret/delete.js +9 -10
  16. package/commands/app/secret/list.js +6 -7
  17. package/commands/app/secret/update.js +8 -9
  18. package/commands/auth.js +12 -12
  19. package/commands/cms/app/create.js +9 -5
  20. package/commands/cms/convertFields.js +8 -8
  21. package/commands/cms/delete.js +2 -3
  22. package/commands/cms/fetch.js +7 -7
  23. package/commands/cms/function/create.js +9 -5
  24. package/commands/cms/function/deploy.js +2 -3
  25. package/commands/cms/function/list.js +11 -7
  26. package/commands/cms/function/logs.js +17 -23
  27. package/commands/cms/function/server.js +2 -3
  28. package/commands/cms/getReactModule.js +7 -8
  29. package/commands/cms/lighthouseScore.js +25 -24
  30. package/commands/cms/lint.js +4 -5
  31. package/commands/cms/list.js +5 -6
  32. package/commands/cms/module/create.js +9 -5
  33. package/commands/cms/module/marketplace-validate.js +7 -8
  34. package/commands/cms/mv.js +2 -3
  35. package/commands/cms/template/create.js +10 -6
  36. package/commands/cms/theme/create.js +5 -5
  37. package/commands/cms/theme/generate-selectors.js +5 -4
  38. package/commands/cms/theme/marketplace-validate.js +8 -9
  39. package/commands/cms/theme/preview.js +16 -8
  40. package/commands/cms/upload.js +15 -12
  41. package/commands/cms/watch.js +5 -5
  42. package/commands/cms/webpack/create.js +5 -5
  43. package/commands/completion.js +3 -5
  44. package/commands/config/migrate.js +6 -7
  45. package/commands/config/set.js +5 -6
  46. package/commands/customObject/create.js +4 -5
  47. package/commands/customObject/createSchema.js +4 -5
  48. package/commands/customObject/deleteSchema.js +4 -5
  49. package/commands/customObject/fetchAllSchemas.js +2 -3
  50. package/commands/customObject/fetchSchema.js +2 -3
  51. package/commands/customObject/listSchemas.js +2 -3
  52. package/commands/customObject/updateSchema.js +4 -5
  53. package/commands/doctor.js +8 -8
  54. package/commands/feedback.js +6 -4
  55. package/commands/filemanager/fetch.js +5 -6
  56. package/commands/filemanager/upload.js +5 -5
  57. package/commands/getStarted.js +14 -16
  58. package/commands/hubdb/clear.js +5 -6
  59. package/commands/hubdb/create.js +4 -5
  60. package/commands/hubdb/delete.js +8 -9
  61. package/commands/hubdb/fetch.js +5 -6
  62. package/commands/hubdb/list.js +16 -14
  63. package/commands/init.js +14 -17
  64. package/commands/mcp/setup.js +5 -6
  65. package/commands/mcp/start.js +2 -3
  66. package/commands/open.js +4 -5
  67. package/commands/project/add.js +10 -5
  68. package/commands/project/create.js +10 -10
  69. package/commands/project/delete.d.ts +7 -0
  70. package/commands/project/delete.js +74 -0
  71. package/commands/project/deploy.js +36 -34
  72. package/commands/project/dev/deprecatedFlow.js +42 -15
  73. package/commands/project/dev/index.d.ts +3 -3
  74. package/commands/project/dev/index.js +24 -30
  75. package/commands/project/dev/unifiedFlow.js +37 -14
  76. package/commands/project/download.js +10 -11
  77. package/commands/project/info.d.ts +4 -0
  78. package/commands/project/info.js +67 -0
  79. package/commands/project/installDeps.js +9 -6
  80. package/commands/project/lint.js +11 -8
  81. package/commands/project/list.js +14 -14
  82. package/commands/project/listBuilds.js +8 -6
  83. package/commands/project/logs.js +5 -6
  84. package/commands/project/migrate.js +8 -8
  85. package/commands/project/open.js +5 -6
  86. package/commands/project/profile/add.js +12 -8
  87. package/commands/project/profile/delete.js +15 -11
  88. package/commands/project/updateDeps.js +9 -6
  89. package/commands/project/upload.js +31 -17
  90. package/commands/project/validate.js +11 -11
  91. package/commands/project/watch.js +20 -20
  92. package/commands/project.js +4 -0
  93. package/commands/sandbox/create.js +15 -15
  94. package/commands/sandbox/delete.js +13 -14
  95. package/commands/secret/addSecret.js +6 -7
  96. package/commands/secret/deleteSecret.js +5 -6
  97. package/commands/secret/listSecret.js +2 -3
  98. package/commands/secret/updateSecret.js +4 -5
  99. package/commands/testAccount/create.d.ts +1 -1
  100. package/commands/testAccount/create.js +20 -16
  101. package/commands/testAccount/createConfig.js +7 -8
  102. package/commands/testAccount/delete.js +27 -18
  103. package/commands/testAccount/importData.js +6 -7
  104. package/commands/upgrade.js +9 -10
  105. package/lang/en.d.ts +114 -5
  106. package/lang/en.js +111 -5
  107. package/lib/accountAuth.js +2 -2
  108. package/lib/buildAccount.js +3 -3
  109. package/lib/doctor/Diagnosis.js +5 -5
  110. package/lib/errorHandlers/index.js +4 -3
  111. package/lib/errorHandlers/suppressError.js +4 -0
  112. package/lib/errors/PromptExitError.d.ts +4 -2
  113. package/lib/errors/PromptExitError.js +3 -0
  114. package/lib/process.d.ts +1 -1
  115. package/lib/process.js +10 -3
  116. package/lib/projects/delete.d.ts +13 -0
  117. package/lib/projects/delete.js +193 -0
  118. package/lib/projects/localDev/AppDevModeInterface.js +11 -11
  119. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +3 -1
  120. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
  121. package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
  122. package/lib/projects/localDev/DevSessionManager.js +31 -19
  123. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +3 -0
  124. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +16 -12
  125. package/lib/projects/localDev/LocalDevProcess.js +6 -5
  126. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  127. package/lib/projects/localDev/LocalDevState.js +3 -1
  128. package/lib/projects/localDev/helpers/account.d.ts +4 -3
  129. package/lib/projects/localDev/helpers/account.js +16 -19
  130. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  131. package/lib/projects/localDev/helpers/process.js +4 -10
  132. package/lib/projects/localDev/helpers/project.d.ts +4 -3
  133. package/lib/projects/localDev/helpers/project.js +31 -15
  134. package/lib/projects/projectInfo.d.ts +5 -0
  135. package/lib/projects/projectInfo.js +82 -0
  136. package/lib/projects/projectProfiles.d.ts +1 -2
  137. package/lib/projects/projectProfiles.js +5 -17
  138. package/lib/prompts/createApiSamplePrompt.js +4 -0
  139. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  140. package/lib/prompts/projectProfilePrompt.js +46 -0
  141. package/lib/prompts/promptUtils.js +3 -2
  142. package/lib/prompts/selectHubDBTablePrompt.js +2 -2
  143. package/lib/prompts/selectPublicAppForMigrationPrompt.js +2 -2
  144. package/lib/theme/cmsDevServerProcess.d.ts +2 -0
  145. package/lib/theme/cmsDevServerProcess.js +7 -6
  146. package/lib/ui/SpinniesManager.d.ts +1 -0
  147. package/lib/ui/SpinniesManager.js +20 -6
  148. package/lib/ui/spinniesUtils.d.ts +0 -1
  149. package/lib/ui/spinniesUtils.js +6 -16
  150. package/lib/usageTracking.d.ts +3 -4
  151. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  152. package/lib/yargs/makeYargsBuilder.js +33 -0
  153. package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
  154. package/lib/yargs/makeYargsHandlerWithUsageTracking.js +95 -0
  155. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  156. package/lib/yargs/strictEnforceBoolean.js +13 -0
  157. package/lib/yargsUtils.d.ts +3 -16
  158. package/lib/yargsUtils.js +3 -48
  159. package/package.json +9 -4
  160. package/types/LocalDev.d.ts +5 -0
  161. package/types/Projects.d.ts +19 -0
  162. package/types/Yargs.d.ts +18 -1
  163. package/api/__tests__/migrate.test.d.ts +0 -1
  164. package/api/__tests__/migrate.test.js +0 -199
  165. package/commands/__tests__/account.test.d.ts +0 -1
  166. package/commands/__tests__/account.test.js +0 -69
  167. package/commands/__tests__/auth.test.d.ts +0 -1
  168. package/commands/__tests__/auth.test.js +0 -43
  169. package/commands/__tests__/cms.test.d.ts +0 -1
  170. package/commands/__tests__/cms.test.js +0 -87
  171. package/commands/__tests__/config.test.d.ts +0 -1
  172. package/commands/__tests__/config.test.js +0 -44
  173. package/commands/__tests__/customObject.test.d.ts +0 -1
  174. package/commands/__tests__/customObject.test.js +0 -68
  175. package/commands/__tests__/doctor.test.d.ts +0 -1
  176. package/commands/__tests__/doctor.test.js +0 -132
  177. package/commands/__tests__/feedback.test.d.ts +0 -1
  178. package/commands/__tests__/feedback.test.js +0 -24
  179. package/commands/__tests__/filemanager.test.d.ts +0 -1
  180. package/commands/__tests__/filemanager.test.js +0 -45
  181. package/commands/__tests__/getStarted.test.d.ts +0 -1
  182. package/commands/__tests__/getStarted.test.js +0 -173
  183. package/commands/__tests__/hubdb.test.d.ts +0 -1
  184. package/commands/__tests__/hubdb.test.js +0 -50
  185. package/commands/__tests__/init.test.d.ts +0 -1
  186. package/commands/__tests__/init.test.js +0 -42
  187. package/commands/__tests__/mcp.test.d.ts +0 -1
  188. package/commands/__tests__/mcp.test.js +0 -46
  189. package/commands/__tests__/open.test.d.ts +0 -1
  190. package/commands/__tests__/open.test.js +0 -58
  191. package/commands/__tests__/project.test.d.ts +0 -1
  192. package/commands/__tests__/project.test.js +0 -125
  193. package/commands/__tests__/sandbox.test.d.ts +0 -1
  194. package/commands/__tests__/sandbox.test.js +0 -44
  195. package/commands/__tests__/secret.test.d.ts +0 -1
  196. package/commands/__tests__/secret.test.js +0 -49
  197. package/commands/__tests__/testAccount.test.d.ts +0 -1
  198. package/commands/__tests__/testAccount.test.js +0 -57
  199. package/commands/__tests__/upgrade.test.d.ts +0 -1
  200. package/commands/__tests__/upgrade.test.js +0 -309
  201. package/commands/account/__tests__/auth.test.d.ts +0 -1
  202. package/commands/account/__tests__/auth.test.js +0 -206
  203. package/commands/account/__tests__/clean.test.d.ts +0 -1
  204. package/commands/account/__tests__/clean.test.js +0 -28
  205. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  206. package/commands/account/__tests__/createOverride.test.js +0 -32
  207. package/commands/account/__tests__/info.test.d.ts +0 -1
  208. package/commands/account/__tests__/info.test.js +0 -28
  209. package/commands/account/__tests__/list.test.d.ts +0 -1
  210. package/commands/account/__tests__/list.test.js +0 -153
  211. package/commands/account/__tests__/remove.test.d.ts +0 -1
  212. package/commands/account/__tests__/remove.test.js +0 -36
  213. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  214. package/commands/account/__tests__/removeOverride.js +0 -25
  215. package/commands/account/__tests__/rename.test.d.ts +0 -1
  216. package/commands/account/__tests__/rename.test.js +0 -82
  217. package/commands/account/__tests__/use.test.d.ts +0 -1
  218. package/commands/account/__tests__/use.test.js +0 -170
  219. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  220. package/commands/app/__tests__/migrate.test.js +0 -111
  221. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  222. package/commands/app/secret/__tests__/add.test.js +0 -140
  223. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  224. package/commands/app/secret/__tests__/delete.test.js +0 -28
  225. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  226. package/commands/app/secret/__tests__/list.test.js +0 -25
  227. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  228. package/commands/app/secret/__tests__/update.test.js +0 -28
  229. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  230. package/commands/cms/__tests__/delete.test.js +0 -39
  231. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  232. package/commands/cms/__tests__/fetch.test.js +0 -156
  233. package/commands/cms/__tests__/function.test.d.ts +0 -1
  234. package/commands/cms/__tests__/function.test.js +0 -50
  235. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  236. package/commands/cms/__tests__/lint.test.js +0 -33
  237. package/commands/cms/__tests__/list.test.d.ts +0 -1
  238. package/commands/cms/__tests__/list.test.js +0 -42
  239. package/commands/cms/__tests__/module.test.d.ts +0 -1
  240. package/commands/cms/__tests__/module.test.js +0 -45
  241. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  242. package/commands/cms/__tests__/mv.test.js +0 -46
  243. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  244. package/commands/cms/__tests__/theme.test.js +0 -54
  245. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  246. package/commands/cms/__tests__/upload.test.js +0 -312
  247. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  248. package/commands/cms/__tests__/watch.test.js +0 -204
  249. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  250. package/commands/cms/function/__tests__/logs.test.js +0 -70
  251. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  252. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  253. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  254. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  255. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  256. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  257. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  258. package/commands/customObject/__tests__/create.test.js +0 -40
  259. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  260. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  261. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  262. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  263. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  264. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  265. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  266. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  267. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  268. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  269. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  270. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  271. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  272. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  273. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  274. package/commands/filemanager/__tests__/upload.test.js +0 -191
  275. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  276. package/commands/hubdb/__tests__/clear.test.js +0 -28
  277. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  278. package/commands/hubdb/__tests__/create.test.js +0 -28
  279. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  280. package/commands/hubdb/__tests__/delete.test.js +0 -28
  281. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  282. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  283. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  284. package/commands/hubdb/__tests__/list.test.js +0 -88
  285. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  286. package/commands/mcp/__tests__/setup.test.js +0 -26
  287. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  288. package/commands/mcp/__tests__/start.test.js +0 -144
  289. package/commands/project/__tests__/add.test.d.ts +0 -1
  290. package/commands/project/__tests__/add.test.js +0 -107
  291. package/commands/project/__tests__/create.test.d.ts +0 -1
  292. package/commands/project/__tests__/create.test.js +0 -97
  293. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  294. package/commands/project/__tests__/deploy.test.js +0 -307
  295. package/commands/project/__tests__/dev.test.d.ts +0 -1
  296. package/commands/project/__tests__/dev.test.js +0 -273
  297. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  298. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  299. package/commands/project/__tests__/download.test.d.ts +0 -1
  300. package/commands/project/__tests__/download.test.js +0 -39
  301. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  302. package/commands/project/__tests__/installDeps.test.js +0 -140
  303. package/commands/project/__tests__/lint.test.d.ts +0 -1
  304. package/commands/project/__tests__/lint.test.js +0 -704
  305. package/commands/project/__tests__/list.test.d.ts +0 -1
  306. package/commands/project/__tests__/list.test.js +0 -31
  307. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  308. package/commands/project/__tests__/listBuilds.test.js +0 -38
  309. package/commands/project/__tests__/logs.test.d.ts +0 -1
  310. package/commands/project/__tests__/logs.test.js +0 -202
  311. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  312. package/commands/project/__tests__/migrate.test.js +0 -106
  313. package/commands/project/__tests__/open.test.d.ts +0 -1
  314. package/commands/project/__tests__/open.test.js +0 -39
  315. package/commands/project/__tests__/profile.test.d.ts +0 -1
  316. package/commands/project/__tests__/profile.test.js +0 -42
  317. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  318. package/commands/project/__tests__/updateDeps.test.js +0 -140
  319. package/commands/project/__tests__/upload.test.d.ts +0 -1
  320. package/commands/project/__tests__/upload.test.js +0 -234
  321. package/commands/project/__tests__/validate.test.d.ts +0 -1
  322. package/commands/project/__tests__/validate.test.js +0 -381
  323. package/commands/project/__tests__/watch.test.d.ts +0 -1
  324. package/commands/project/__tests__/watch.test.js +0 -35
  325. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  326. package/commands/sandbox/__tests__/create.test.js +0 -198
  327. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  328. package/commands/sandbox/__tests__/delete.test.js +0 -31
  329. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  330. package/commands/secret/__tests__/addSecret.test.js +0 -162
  331. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  332. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  333. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  334. package/commands/secret/__tests__/listSecret.test.js +0 -29
  335. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  336. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  337. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  338. package/commands/testAccount/__tests__/create.test.js +0 -106
  339. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  340. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  341. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  342. package/commands/testAccount/__tests__/delete.test.js +0 -29
  343. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  344. package/commands/testAccount/__tests__/importData.test.js +0 -92
  345. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  346. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  347. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  348. package/lib/__tests__/accountAuth.test.js +0 -258
  349. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  350. package/lib/__tests__/accountTypes.test.js +0 -98
  351. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  352. package/lib/__tests__/buildAccount.test.js +0 -211
  353. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  354. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  355. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  356. package/lib/__tests__/commandSuggestion.test.js +0 -121
  357. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  358. package/lib/__tests__/commonOpts.test.js +0 -80
  359. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  360. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  361. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  362. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  363. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  364. package/lib/__tests__/hasFeature.test.js +0 -167
  365. package/lib/__tests__/http.test.d.ts +0 -1
  366. package/lib/__tests__/http.test.js +0 -40
  367. package/lib/__tests__/importData.test.d.ts +0 -1
  368. package/lib/__tests__/importData.test.js +0 -98
  369. package/lib/__tests__/npmCli.test.d.ts +0 -1
  370. package/lib/__tests__/npmCli.test.js +0 -84
  371. package/lib/__tests__/oauth.test.d.ts +0 -1
  372. package/lib/__tests__/oauth.test.js +0 -109
  373. package/lib/__tests__/parsing.test.d.ts +0 -1
  374. package/lib/__tests__/parsing.test.js +0 -34
  375. package/lib/__tests__/polling.test.d.ts +0 -1
  376. package/lib/__tests__/polling.test.js +0 -76
  377. package/lib/__tests__/process.test.d.ts +0 -1
  378. package/lib/__tests__/process.test.js +0 -89
  379. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  380. package/lib/__tests__/sandboxes.test.js +0 -128
  381. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  382. package/lib/__tests__/serverlessLogs.test.js +0 -163
  383. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  384. package/lib/__tests__/usageTracking.test.js +0 -197
  385. package/lib/__tests__/validation.test.d.ts +0 -1
  386. package/lib/__tests__/validation.test.js +0 -143
  387. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  388. package/lib/__tests__/yargsUtils.test.js +0 -124
  389. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  390. package/lib/app/__tests__/migrate.test.js +0 -638
  391. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  392. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  393. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  394. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  395. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  396. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  397. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  398. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  399. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  400. package/lib/mcp/__tests__/setup.test.js +0 -523
  401. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  402. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  403. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  404. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  405. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  406. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  407. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  408. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  409. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  410. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  411. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  412. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  413. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  414. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  415. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  416. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  417. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  418. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  419. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  420. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  421. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  422. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  423. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  424. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  425. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  426. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  427. package/lib/projects/__tests__/components.test.d.ts +0 -1
  428. package/lib/projects/__tests__/components.test.js +0 -440
  429. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  430. package/lib/projects/__tests__/deploy.test.js +0 -231
  431. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  432. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  433. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  434. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  435. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  436. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  437. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  438. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  439. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  440. package/lib/projects/__tests__/projects.test.js +0 -58
  441. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  442. package/lib/projects/__tests__/structure.test.js +0 -210
  443. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  444. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  445. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  446. package/lib/projects/__tests__/upload.test.js +0 -183
  447. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  448. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  449. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  450. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  451. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  452. package/lib/projects/create/__tests__/legacy.test.js +0 -72
  453. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  454. package/lib/projects/create/__tests__/v2.test.js +0 -257
  455. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  456. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  457. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  458. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  459. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  460. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  461. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  462. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  463. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  464. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  465. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  466. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  467. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  468. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  469. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  470. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  471. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  472. package/lib/theme/__tests__/migrate.test.js +0 -247
  473. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  474. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  475. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  476. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  477. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  478. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
  479. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  480. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
  481. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  482. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
  483. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  484. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
  485. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  486. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
  487. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  488. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
  489. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  490. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
  491. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  492. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -131
  493. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  494. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
  495. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  496. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
  497. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  498. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  499. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  500. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  501. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  502. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
  503. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  504. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  505. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  506. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  507. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  508. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  509. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  510. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  511. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  512. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  513. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  514. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
  515. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  516. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  517. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  518. package/mcp-server/utils/__tests__/command.test.js +0 -275
  519. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  520. package/mcp-server/utils/__tests__/content.test.js +0 -164
  521. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  522. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
@@ -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
+ }
@@ -6,7 +6,7 @@ import { EXIT_CODES } from '../../enums/exitCodes.js';
6
6
  import { isAppIRNode } from '../../projects/structure.js';
7
7
  import { uiLine } from '../../ui/index.js';
8
8
  import { logError } from '../../errorHandlers/index.js';
9
- import { PromptExitError } from '../../errors/PromptExitError.js';
9
+ import { isPromptExitError } from '../../errors/PromptExitError.js';
10
10
  import { installAppAutoPrompt, installAppBrowserPrompt, } from '../../prompts/installAppPrompt.js';
11
11
  import { confirmPrompt } from '../../prompts/promptUtils.js';
12
12
  import { lib } from '../../../lang/en.js';
@@ -28,7 +28,7 @@ class AppDevModeInterface {
28
28
  !this.localDevState.projectConfig ||
29
29
  !this.localDevState.projectDir) {
30
30
  uiLogger.error(lib.LocalDevManager.failedToInitialize);
31
- process.exit(EXIT_CODES.ERROR);
31
+ throw new Error(lib.LocalDevManager.failedToInitialize);
32
32
  }
33
33
  }
34
34
  getAppNodeFromProjectNodes(projectNodes) {
@@ -46,12 +46,12 @@ class AppDevModeInterface {
46
46
  // App data will never be accessed before being set
47
47
  if (!this.appNode) {
48
48
  uiLogger.log(lib.AppDevModeInterface.appDataNotFound);
49
- process.exit(EXIT_CODES.ERROR);
49
+ throw new Error(lib.AppDevModeInterface.appDataNotFound);
50
50
  }
51
51
  const data = this.localDevState.getAppDataByUid(this.appNode.uid);
52
52
  if (!data) {
53
53
  uiLogger.log(lib.AppDevModeInterface.appDataNotFound);
54
- process.exit(EXIT_CODES.ERROR);
54
+ throw new Error(lib.AppDevModeInterface.appDataNotFound);
55
55
  }
56
56
  return data;
57
57
  }
@@ -108,7 +108,7 @@ class AppDevModeInterface {
108
108
  text: lib.AppDevModeInterface.fetchAppData.error,
109
109
  });
110
110
  logError(e);
111
- process.exit(EXIT_CODES.ERROR);
111
+ return this.localDevState.actions.exit(EXIT_CODES.ERROR);
112
112
  }
113
113
  if (!appData) {
114
114
  return;
@@ -136,7 +136,7 @@ class AppDevModeInterface {
136
136
  uiLine();
137
137
  const proceed = await confirmPrompt(lib.LocalDevManager.activeInstallWarning.confirmationPrompt, { defaultAnswer: false });
138
138
  if (!proceed) {
139
- process.exit(EXIT_CODES.SUCCESS);
139
+ return this.localDevState.actions.exit(EXIT_CODES.SUCCESS);
140
140
  }
141
141
  this.localDevState.addUploadWarning(lib.AppDevModeInterface.defaultMarketplaceAppWarning(this.marketplaceAppInstalls));
142
142
  }
@@ -156,7 +156,7 @@ class AppDevModeInterface {
156
156
  const shouldInstall = await installAppAutoPrompt();
157
157
  if (!shouldInstall) {
158
158
  uiLogger.log(lib.AppDevModeInterface.autoInstallDeclined);
159
- process.exit(EXIT_CODES.SUCCESS);
159
+ return this.localDevState.actions.exit(EXIT_CODES.SUCCESS);
160
160
  }
161
161
  uiLogger.log('');
162
162
  SpinniesManager.add('autoInstallStaticAuthApp', {
@@ -225,7 +225,7 @@ class AppDevModeInterface {
225
225
  if (!serverIsRunningAtRedirectUrl) {
226
226
  uiLogger.log('');
227
227
  uiLogger.error(lib.AppDevModeInterface.oauthAppRedirectUrlError(redirectUrl));
228
- process.exit(EXIT_CODES.ERROR);
228
+ return this.localDevState.actions.exit(EXIT_CODES.ERROR);
229
229
  }
230
230
  }
231
231
  resolveAppInstallPromise() {
@@ -246,7 +246,7 @@ class AppDevModeInterface {
246
246
  }
247
247
  handleAppInstallFailureDevServerMessage() {
248
248
  uiLogger.error(lib.AppDevModeInterface.installationFailed);
249
- process.exit(EXIT_CODES.ERROR);
249
+ this.localDevState.actions.exit(EXIT_CODES.ERROR);
250
250
  }
251
251
  onDevServerMessage = async (message) => {
252
252
  if (message === LOCAL_DEV_SERVER_MESSAGE_TYPES.WEBSOCKET_SERVER_CONNECTED) {
@@ -314,7 +314,7 @@ class AppDevModeInterface {
314
314
  }
315
315
  }
316
316
  catch (e) {
317
- if (e instanceof PromptExitError) {
317
+ if (isPromptExitError(e)) {
318
318
  throw e;
319
319
  }
320
320
  if (SpinniesManager.pick('fetchAppData')) {
@@ -324,7 +324,7 @@ class AppDevModeInterface {
324
324
  });
325
325
  }
326
326
  logError(e);
327
- process.exit(EXIT_CODES.ERROR);
327
+ return this.localDevState.actions.exit(EXIT_CODES.ERROR);
328
328
  }
329
329
  }
330
330
  async start() {
@@ -1,4 +1,5 @@
1
1
  import { ProjectConfig, ComponentTypes, Component } from '../../../types/Projects.js';
2
+ import { ExitFunction } from '../../../types/Yargs.js';
2
3
  type DevServerInterface = {
3
4
  setup?: Function;
4
5
  start?: (options: object) => Promise<void>;
@@ -20,11 +21,12 @@ declare class DevServerManager_DEPRECATED {
20
21
  [key: string]: Component;
21
22
  }) => Promise<void>): Promise<void>;
22
23
  arrangeComponentsByType(components: Component[]): ComponentsByType;
23
- setup({ components, onUploadRequired, accountId, setActiveApp, }: {
24
+ setup({ components, onUploadRequired, accountId, setActiveApp, exit, }: {
24
25
  components: Component[];
25
26
  onUploadRequired: () => void;
26
27
  accountId: number;
27
28
  setActiveApp: (appUid: string | undefined) => Promise<void>;
29
+ exit: ExitFunction;
28
30
  }): Promise<void>;
29
31
  start({ accountId, projectConfig, }: {
30
32
  accountId: number;
@@ -57,7 +57,7 @@ class DevServerManager_DEPRECATED {
57
57
  return acc;
58
58
  }, {});
59
59
  }
60
- async setup({ components, onUploadRequired, accountId, setActiveApp, }) {
60
+ async setup({ components, onUploadRequired, accountId, setActiveApp, exit, }) {
61
61
  this.componentsByType = this.arrangeComponentsByType(components);
62
62
  let env;
63
63
  const accountConfig = getConfigAccountById(accountId);
@@ -69,7 +69,7 @@ class DevServerManager_DEPRECATED {
69
69
  }
70
70
  catch (e) {
71
71
  logError(e);
72
- process.exit(EXIT_CODES.ERROR);
72
+ return exit(EXIT_CODES.ERROR);
73
73
  }
74
74
  await this.iterateDevServers(async (serverInterface, compatibleComponents) => {
75
75
  if (serverInterface.setup) {
@@ -1,14 +1,17 @@
1
1
  import LocalDevLogger from './LocalDevLogger.js';
2
+ import { ExitFunction } from '../../../types/Yargs.js';
2
3
  type DevSessionManagerConstructorOptions = {
3
4
  targetTestingAccountId: number;
4
5
  localDevLogger?: LocalDevLogger;
6
+ exit: ExitFunction;
5
7
  };
6
8
  declare class DevSessionManager {
7
9
  localDevLogger?: LocalDevLogger;
8
10
  targetTestingAccountId: number;
9
- protected _devSessionId: number | undefined;
10
- private _heartbeatInterval;
11
- private _heartbeatRetries;
11
+ protected devSessionId: number | undefined;
12
+ private heartbeatInterval;
13
+ private heartbeatRetries;
14
+ private exit;
12
15
  constructor(options: DevSessionManagerConstructorOptions);
13
16
  private validateSessionIdExists;
14
17
  registerSession(): Promise<boolean>;
@@ -7,18 +7,20 @@ import { getErrorMessage } from '../../errorHandlers/index.js';
7
7
  class DevSessionManager {
8
8
  localDevLogger;
9
9
  targetTestingAccountId;
10
- _devSessionId;
11
- _heartbeatInterval;
12
- _heartbeatRetries;
10
+ devSessionId;
11
+ heartbeatInterval;
12
+ heartbeatRetries;
13
+ exit;
13
14
  constructor(options) {
14
15
  this.targetTestingAccountId = options.targetTestingAccountId;
15
16
  this.localDevLogger = options.localDevLogger;
16
- this._devSessionId = undefined;
17
- this._heartbeatInterval = undefined;
18
- this._heartbeatRetries = 0;
17
+ this.exit = options.exit;
18
+ this.devSessionId = undefined;
19
+ this.heartbeatInterval = undefined;
20
+ this.heartbeatRetries = 0;
19
21
  }
20
22
  validateSessionIdExists() {
21
- if (!this._devSessionId) {
23
+ if (!this.devSessionId) {
22
24
  if (this.localDevLogger) {
23
25
  this.localDevLogger.devSessionMissingSessionIdError();
24
26
  }
@@ -26,7 +28,7 @@ class DevSessionManager {
26
28
  // Fallback for deprecated local dev manager
27
29
  uiLogger.error(lib.LocalDevManager.devSession.missingSessionIdError);
28
30
  }
29
- process.exit(EXIT_CODES.ERROR);
31
+ throw new Error(lib.LocalDevManager.devSession.missingSessionIdError);
30
32
  }
31
33
  }
32
34
  async registerSession() {
@@ -34,7 +36,7 @@ class DevSessionManager {
34
36
  const activeServers = await getActiveServers();
35
37
  const portData = Object.entries(activeServers).map(([serverId, port]) => ({ serverId, port }));
36
38
  const registerDevSessionResponse = await registerDevSession(this.targetTestingAccountId, portData);
37
- this._devSessionId = registerDevSessionResponse.data.sessionId;
39
+ this.devSessionId = registerDevSessionResponse.data.sessionId;
38
40
  }
39
41
  catch (e) {
40
42
  if (this.localDevLogger) {
@@ -46,19 +48,29 @@ class DevSessionManager {
46
48
  }
47
49
  return false;
48
50
  }
49
- this.validateSessionIdExists();
51
+ try {
52
+ this.validateSessionIdExists();
53
+ }
54
+ catch {
55
+ return this.exit(EXIT_CODES.ERROR);
56
+ }
50
57
  this.initializeHeartbeat();
51
58
  return true;
52
59
  }
53
60
  initializeHeartbeat() {
54
- this._heartbeatInterval = setInterval(async () => {
55
- this.validateSessionIdExists();
61
+ this.heartbeatInterval = setInterval(async () => {
62
+ try {
63
+ this.validateSessionIdExists();
64
+ }
65
+ catch {
66
+ return this.exit(EXIT_CODES.ERROR);
67
+ }
56
68
  try {
57
- await devSessionHeartbeat(this.targetTestingAccountId, this._devSessionId);
69
+ await devSessionHeartbeat(this.targetTestingAccountId, this.devSessionId);
58
70
  }
59
71
  catch (e) {
60
- if (this._heartbeatRetries < 3) {
61
- this._heartbeatRetries++;
72
+ if (this.heartbeatRetries < 3) {
73
+ this.heartbeatRetries++;
62
74
  return;
63
75
  }
64
76
  if (this.localDevLogger) {
@@ -68,15 +80,15 @@ class DevSessionManager {
68
80
  // Fallback for deprecated local dev manager
69
81
  uiLogger.error(lib.LocalDevManager.devSession.heartbeatError(getErrorMessage(e)));
70
82
  }
71
- process.exit(EXIT_CODES.ERROR);
83
+ return this.exit(EXIT_CODES.ERROR);
72
84
  }
73
85
  }, 30000);
74
86
  }
75
87
  async deleteDevSession() {
76
- if (this._devSessionId) {
77
- clearInterval(this._heartbeatInterval);
88
+ if (this.devSessionId) {
89
+ clearInterval(this.heartbeatInterval);
78
90
  try {
79
- await deleteDevSession(this.targetTestingAccountId, this._devSessionId);
91
+ await deleteDevSession(this.targetTestingAccountId, this.devSessionId);
80
92
  }
81
93
  catch (e) {
82
94
  if (this.localDevLogger) {
@@ -3,6 +3,7 @@ import { Build } from '@hubspot/local-dev-lib/types/Build';
3
3
  import { PublicApp } from '@hubspot/local-dev-lib/types/Apps';
4
4
  import { Environment } from '@hubspot/local-dev-lib/types/Accounts';
5
5
  import { Component, ProjectConfig } from '../../../types/Projects.js';
6
+ import { ExitFunction } from '../../../types/Yargs.js';
6
7
  type LocalDevManagerConstructorOptions = {
7
8
  targetAccountId: number;
8
9
  parentAccountId: number;
@@ -14,6 +15,7 @@ type LocalDevManagerConstructorOptions = {
14
15
  isGithubLinked: boolean;
15
16
  runnableComponents: Component[];
16
17
  env: Environment;
18
+ exit: ExitFunction;
17
19
  };
18
20
  declare class LocalDevManager_DEPRECATED {
19
21
  targetAccountId: number;
@@ -36,6 +38,7 @@ declare class LocalDevManager_DEPRECATED {
36
38
  projectSourceDir: string;
37
39
  mostRecentUploadWarning: string | null;
38
40
  private devSessionManager;
41
+ private exit;
39
42
  constructor(options: LocalDevManagerConstructorOptions);
40
43
  setActiveApp(appUid?: string): Promise<void>;
41
44
  setActivePublicAppData(): Promise<void>;
@@ -15,7 +15,7 @@ import { componentIsApp, componentIsPublicApp, CONFIG_FILES, getAppCardConfigs,
15
15
  import { ComponentTypes, } from '../../../types/Projects.js';
16
16
  import { UI_COLORS, uiCommandReference, uiAccountDescription, uiLink, uiLine, } from '../../ui/index.js';
17
17
  import { logError } from '../../errorHandlers/index.js';
18
- import { PromptExitError } from '../../errors/PromptExitError.js';
18
+ import { isPromptExitError } from '../../errors/PromptExitError.js';
19
19
  import { installAppBrowserPrompt } from '../../prompts/installAppPrompt.js';
20
20
  import { confirmPrompt } from '../../prompts/promptUtils.js';
21
21
  import { handleKeypress } from '../../process.js';
@@ -47,6 +47,7 @@ class LocalDevManager_DEPRECATED {
47
47
  projectSourceDir;
48
48
  mostRecentUploadWarning;
49
49
  devSessionManager;
50
+ exit;
50
51
  constructor(options) {
51
52
  this.targetAccountId = options.targetAccountId;
52
53
  // The account that the project exists in. This is not always the targetAccountId
@@ -65,19 +66,21 @@ class LocalDevManager_DEPRECATED {
65
66
  this.env = options.env;
66
67
  this.publicAppActiveInstalls = null;
67
68
  this.mostRecentUploadWarning = null;
69
+ this.exit = options.exit;
68
70
  this.projectSourceDir = path.join(this.projectDir, this.projectConfig.srcDir);
69
71
  if (!this.targetAccountId || !this.projectConfig || !this.projectDir) {
70
- uiLogger.log(lib.LocalDevManager.failedToInitialize);
71
- process.exit(EXIT_CODES.ERROR);
72
+ uiLogger.error(lib.LocalDevManager.failedToInitialize);
73
+ throw new Error(lib.LocalDevManager.failedToInitialize);
72
74
  }
73
75
  this.devSessionManager = new DevSessionManager({
74
76
  targetTestingAccountId: this.targetAccountId,
77
+ exit: this.exit,
75
78
  });
76
79
  }
77
80
  async setActiveApp(appUid) {
78
81
  if (!appUid) {
79
82
  uiLogger.error(lib.LocalDevManager.missingUid);
80
- process.exit(EXIT_CODES.ERROR);
83
+ return this.exit(EXIT_CODES.ERROR);
81
84
  }
82
85
  this.activeApp =
83
86
  this.runnableComponents.find(component => {
@@ -90,7 +93,7 @@ class LocalDevManager_DEPRECATED {
90
93
  await this.checkPublicAppInstallation();
91
94
  }
92
95
  catch (e) {
93
- if (e instanceof PromptExitError) {
96
+ if (isPromptExitError(e)) {
94
97
  throw e;
95
98
  }
96
99
  logError(e);
@@ -122,7 +125,7 @@ class LocalDevManager_DEPRECATED {
122
125
  uiLine();
123
126
  const proceed = await confirmPrompt(lib.LocalDevManager.activeInstallWarning.confirmationPrompt, { defaultAnswer: false });
124
127
  if (!proceed) {
125
- process.exit(EXIT_CODES.SUCCESS);
128
+ return this.exit(EXIT_CODES.SUCCESS);
126
129
  }
127
130
  }
128
131
  async start() {
@@ -132,11 +135,11 @@ class LocalDevManager_DEPRECATED {
132
135
  if (!this.deployedBuild) {
133
136
  uiLogger.error(lib.LocalDevManager.noDeployedBuild(this.projectConfig.name, uiAccountDescription(this.targetProjectAccountId), this.getUploadCommand()));
134
137
  uiLogger.log('');
135
- process.exit(EXIT_CODES.SUCCESS);
138
+ return this.exit(EXIT_CODES.SUCCESS);
136
139
  }
137
140
  const setupSucceeded = await this.devServerSetup();
138
141
  if (!setupSucceeded) {
139
- process.exit(EXIT_CODES.ERROR);
142
+ return this.exit(EXIT_CODES.ERROR);
140
143
  }
141
144
  else if (!this.debug) {
142
145
  console.clear();
@@ -156,7 +159,7 @@ class LocalDevManager_DEPRECATED {
156
159
  await this.devServerStart();
157
160
  const devSessionRegistered = await this.devSessionManager.registerSession();
158
161
  if (!devSessionRegistered) {
159
- process.exit(EXIT_CODES.ERROR);
162
+ return this.exit(EXIT_CODES.ERROR);
160
163
  }
161
164
  // Initialize project file watcher to detect configuration file changes
162
165
  this.startWatching();
@@ -181,14 +184,14 @@ class LocalDevManager_DEPRECATED {
181
184
  text: lib.LocalDevManager.exitingFail,
182
185
  });
183
186
  }
184
- process.exit(EXIT_CODES.ERROR);
187
+ return this.exit(EXIT_CODES.ERROR);
185
188
  }
186
189
  if (showProgress) {
187
190
  SpinniesManager.succeed('cleanupMessage', {
188
191
  text: lib.LocalDevManager.exitingSucceed,
189
192
  });
190
193
  }
191
- process.exit(EXIT_CODES.SUCCESS);
194
+ return this.exit(EXIT_CODES.SUCCESS);
192
195
  }
193
196
  async checkPublicAppInstallation() {
194
197
  if (!componentIsPublicApp(this.activeApp) || !this.activePublicAppData) {
@@ -333,6 +336,7 @@ class LocalDevManager_DEPRECATED {
333
336
  onUploadRequired: this.logUploadWarning.bind(this),
334
337
  accountId: this.targetAccountId,
335
338
  setActiveApp: this.setActiveApp.bind(this),
339
+ exit: this.exit,
336
340
  });
337
341
  return true;
338
342
  }
@@ -356,7 +360,7 @@ class LocalDevManager_DEPRECATED {
356
360
  uiLogger.error(getErrorMessage(e));
357
361
  }
358
362
  uiLogger.error(lib.LocalDevManager.devServer.startError(getErrorMessage(e)));
359
- process.exit(EXIT_CODES.ERROR);
363
+ return this.exit(EXIT_CODES.ERROR);
360
364
  }
361
365
  }
362
366
  devServerFileChange(filePath, event) {
@@ -32,6 +32,7 @@ class LocalDevProcess {
32
32
  this.devSessionManager = new DevSessionManager({
33
33
  targetTestingAccountId: this.state.targetTestingAccountId,
34
34
  localDevLogger: this._logger,
35
+ exit: this.state.actions.exit,
35
36
  });
36
37
  }
37
38
  get projectDir() {
@@ -68,7 +69,7 @@ class LocalDevProcess {
68
69
  }
69
70
  catch (e) {
70
71
  this.logger.devServerStartError(e);
71
- process.exit(EXIT_CODES.ERROR);
72
+ return this.state.actions.exit(EXIT_CODES.ERROR);
72
73
  }
73
74
  }
74
75
  async cleanupDevServers() {
@@ -148,7 +149,7 @@ class LocalDevProcess {
148
149
  this.logger.resetSpinnies();
149
150
  const setupSucceeded = await this.setupDevServers();
150
151
  if (!setupSucceeded) {
151
- process.exit(EXIT_CODES.ERROR);
152
+ return this.state.actions.exit(EXIT_CODES.ERROR);
152
153
  }
153
154
  this.logger.startupMessage();
154
155
  if (isConfigFlagEnabled(CONFIG_FLAGS.AUTO_OPEN_BROWSER, true)) {
@@ -157,7 +158,7 @@ class LocalDevProcess {
157
158
  await this.startDevServers();
158
159
  const devSessionRegistered = await this.devSessionManager.registerSession();
159
160
  if (!devSessionRegistered) {
160
- process.exit(EXIT_CODES.ERROR);
161
+ return this.state.actions.exit(EXIT_CODES.ERROR);
161
162
  }
162
163
  this.state.devServersStarted = true;
163
164
  this.logger.monitorConsoleOutput();
@@ -172,12 +173,12 @@ class LocalDevProcess {
172
173
  if (showProgress) {
173
174
  this.logger.cleanupError();
174
175
  }
175
- process.exit(EXIT_CODES.ERROR);
176
+ return this.state.actions.exit(EXIT_CODES.ERROR);
176
177
  }
177
178
  if (showProgress) {
178
179
  this.logger.cleanupSuccess();
179
180
  }
180
- process.exit(EXIT_CODES.SUCCESS);
181
+ return this.state.actions.exit(EXIT_CODES.SUCCESS);
181
182
  }
182
183
  async uploadProject() {
183
184
  this.logger.uploadInitiated();
@@ -3,7 +3,7 @@ import type { HSProfileVariables } from '@hubspot/project-parsing-lib/profiles';
3
3
  import { Environment } from '@hubspot/local-dev-lib/types/Accounts';
4
4
  import { Project } from '@hubspot/local-dev-lib/types/Project';
5
5
  import { ProjectConfig } from '../../../types/Projects.js';
6
- import { LocalDevStateConstructorOptions, LocalDevStateListener, AppLocalDevData, LocalDevServerMessage } from '../../../types/LocalDev.js';
6
+ import { LocalDevStateConstructorOptions, LocalDevStateListener, LocalDevActions, AppLocalDevData, LocalDevServerMessage } from '../../../types/LocalDev.js';
7
7
  declare class LocalDevState {
8
8
  private _targetProjectAccountId;
9
9
  private _targetTestingAccountId;
@@ -21,7 +21,8 @@ declare class LocalDevState {
21
21
  private _devServerMessage;
22
22
  private _uploadWarnings;
23
23
  private _devServersStarted;
24
- constructor({ targetProjectAccountId, targetTestingAccountId, projectConfig, projectDir, projectData, debug, initialProjectNodes, initialProjectProfileData, profile, env, }: LocalDevStateConstructorOptions);
24
+ actions: LocalDevActions;
25
+ constructor({ targetProjectAccountId, targetTestingAccountId, projectConfig, projectDir, projectData, debug, initialProjectNodes, initialProjectProfileData, profile, env, actions, }: LocalDevStateConstructorOptions);
25
26
  private runListeners;
26
27
  get targetProjectAccountId(): number;
27
28
  get targetTestingAccountId(): number;