@hubspot/cli 7.5.2-experimental.0 → 7.5.3-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 (413) hide show
  1. package/api/migrate.d.ts +12 -3
  2. package/api/migrate.js +9 -2
  3. package/bin/cli.js +100 -93
  4. package/commands/account/auth.d.ts +8 -0
  5. package/commands/account/auth.js +175 -0
  6. package/commands/account/clean.d.ts +3 -7
  7. package/commands/account/clean.js +54 -14
  8. package/commands/account/createOverride.d.ts +6 -0
  9. package/commands/account/createOverride.js +121 -0
  10. package/commands/account/info.d.ts +3 -7
  11. package/commands/account/info.js +36 -5
  12. package/commands/account/list.d.ts +3 -7
  13. package/commands/account/list.js +38 -15
  14. package/commands/account/remove.d.ts +3 -7
  15. package/commands/account/remove.js +49 -9
  16. package/commands/account/removeOverride.d.ts +6 -0
  17. package/commands/account/removeOverride.js +93 -0
  18. package/commands/account/rename.d.ts +3 -7
  19. package/commands/account/rename.js +16 -9
  20. package/commands/account/use.d.ts +5 -9
  21. package/commands/account/use.js +27 -6
  22. package/commands/account.d.ts +3 -4
  23. package/commands/account.js +33 -53
  24. package/commands/app/migrate.d.ts +5 -6
  25. package/commands/app/migrate.js +60 -44
  26. package/commands/app/secret/add.d.ts +7 -0
  27. package/commands/app/secret/add.js +64 -0
  28. package/commands/app/secret/delete.d.ts +8 -0
  29. package/commands/app/secret/delete.js +87 -0
  30. package/commands/app/secret/list.d.ts +6 -0
  31. package/commands/app/secret/list.js +64 -0
  32. package/commands/app/secret/update.d.ts +7 -0
  33. package/commands/app/secret/update.js +77 -0
  34. package/commands/app/secret.d.ts +3 -0
  35. package/commands/app/secret.js +30 -0
  36. package/commands/app.d.ts +2 -5
  37. package/commands/app.js +10 -10
  38. package/commands/auth.d.ts +5 -7
  39. package/commands/auth.js +37 -33
  40. package/commands/cms/convertFields.d.ts +7 -1
  41. package/commands/cms/convertFields.js +57 -41
  42. package/commands/cms/getReactModule.d.ts +7 -1
  43. package/commands/cms/getReactModule.js +52 -34
  44. package/commands/cms/lighthouseScore.d.ts +8 -1
  45. package/commands/cms/lighthouseScore.js +129 -100
  46. package/commands/cms.d.ts +3 -1
  47. package/commands/cms.js +22 -16
  48. package/commands/completion.d.ts +3 -1
  49. package/commands/completion.js +23 -13
  50. package/commands/config/migrate.d.ts +6 -0
  51. package/commands/config/migrate.js +75 -0
  52. package/commands/config/set.d.ts +10 -1
  53. package/commands/config/set.js +56 -32
  54. package/commands/config.d.ts +3 -1
  55. package/commands/config.js +19 -11
  56. package/commands/create/api-sample.d.ts +3 -1
  57. package/commands/create/api-sample.js +34 -38
  58. package/commands/create/app.d.ts +3 -1
  59. package/commands/create/app.js +9 -7
  60. package/commands/create/function.d.ts +3 -1
  61. package/commands/create/function.js +11 -10
  62. package/commands/create/index.d.ts +5 -1
  63. package/commands/create/index.js +23 -11
  64. package/commands/create/module.d.ts +3 -1
  65. package/commands/create/module.js +14 -13
  66. package/commands/create/react-app.d.ts +3 -1
  67. package/commands/create/react-app.js +10 -7
  68. package/commands/create/template.d.ts +3 -1
  69. package/commands/create/template.js +14 -14
  70. package/commands/create/vue-app.d.ts +3 -1
  71. package/commands/create/vue-app.js +10 -7
  72. package/commands/create/webpack-serverless.d.ts +3 -1
  73. package/commands/create/webpack-serverless.js +10 -7
  74. package/commands/create/website-theme.d.ts +3 -1
  75. package/commands/create/website-theme.js +10 -9
  76. package/commands/create.d.ts +4 -24
  77. package/commands/create.js +62 -75
  78. package/commands/customObject/create.d.ts +4 -9
  79. package/commands/customObject/create.js +17 -10
  80. package/commands/customObject/schema/create.d.ts +4 -9
  81. package/commands/customObject/schema/create.js +18 -11
  82. package/commands/customObject/schema/delete.d.ts +4 -9
  83. package/commands/customObject/schema/delete.js +17 -10
  84. package/commands/customObject/schema/fetch-all.d.ts +4 -9
  85. package/commands/customObject/schema/fetch-all.js +17 -10
  86. package/commands/customObject/schema/fetch.d.ts +4 -9
  87. package/commands/customObject/schema/fetch.js +17 -10
  88. package/commands/customObject/schema/list.d.ts +4 -8
  89. package/commands/customObject/schema/list.js +17 -10
  90. package/commands/customObject/schema/update.d.ts +4 -9
  91. package/commands/customObject/schema/update.js +18 -11
  92. package/commands/customObject/schema.d.ts +3 -5
  93. package/commands/customObject/schema.js +27 -54
  94. package/commands/customObject.d.ts +3 -4
  95. package/commands/customObject.js +20 -48
  96. package/commands/doctor.d.ts +6 -8
  97. package/commands/doctor.js +30 -22
  98. package/commands/feedback.d.ts +4 -1
  99. package/commands/feedback.js +38 -48
  100. package/commands/fetch.d.ts +12 -1
  101. package/commands/fetch.js +49 -34
  102. package/commands/filemanager/fetch.d.ts +4 -9
  103. package/commands/filemanager/fetch.js +18 -11
  104. package/commands/filemanager/upload.d.ts +4 -9
  105. package/commands/filemanager/upload.js +17 -11
  106. package/commands/filemanager.d.ts +3 -4
  107. package/commands/filemanager.js +18 -42
  108. package/commands/function/deploy.d.ts +6 -1
  109. package/commands/function/deploy.js +70 -50
  110. package/commands/function/list.d.ts +6 -1
  111. package/commands/function/list.js +44 -32
  112. package/commands/function/server.d.ts +10 -1
  113. package/commands/function/server.js +49 -38
  114. package/commands/function.d.ts +5 -1
  115. package/commands/function.js +22 -11
  116. package/commands/getStarted.d.ts +9 -0
  117. package/commands/getStarted.js +227 -0
  118. package/commands/hubdb/clear.d.ts +4 -9
  119. package/commands/hubdb/clear.js +21 -15
  120. package/commands/hubdb/create.d.ts +4 -9
  121. package/commands/hubdb/create.js +23 -17
  122. package/commands/hubdb/delete.d.ts +4 -9
  123. package/commands/hubdb/delete.js +24 -16
  124. package/commands/hubdb/fetch.d.ts +4 -9
  125. package/commands/hubdb/fetch.js +20 -14
  126. package/commands/hubdb/list.d.ts +4 -0
  127. package/commands/hubdb/list.js +83 -0
  128. package/commands/hubdb.d.ts +3 -2
  129. package/commands/hubdb.js +24 -47
  130. package/commands/init.d.ts +3 -7
  131. package/commands/init.js +31 -24
  132. package/commands/lint.d.ts +6 -4
  133. package/commands/lint.js +42 -44
  134. package/commands/list.d.ts +3 -7
  135. package/commands/list.js +21 -16
  136. package/commands/logs.d.ts +10 -1
  137. package/commands/logs.js +53 -45
  138. package/commands/mcp/setup.d.ts +7 -0
  139. package/commands/mcp/setup.js +50 -0
  140. package/commands/mcp/start.d.ts +3 -0
  141. package/commands/mcp/start.js +75 -0
  142. package/commands/mcp.d.ts +3 -0
  143. package/commands/mcp.js +26 -0
  144. package/commands/module/marketplace-validate.d.ts +6 -1
  145. package/commands/module/marketplace-validate.js +39 -30
  146. package/commands/module.d.ts +3 -1
  147. package/commands/module.js +23 -12
  148. package/commands/mv.d.ts +3 -7
  149. package/commands/mv.js +20 -15
  150. package/commands/open.d.ts +3 -7
  151. package/commands/open.js +20 -15
  152. package/commands/project/add.d.ts +8 -9
  153. package/commands/project/add.js +53 -85
  154. package/commands/project/cloneApp.d.ts +6 -8
  155. package/commands/project/cloneApp.js +51 -47
  156. package/commands/project/create.d.ts +4 -1
  157. package/commands/project/create.js +132 -81
  158. package/commands/project/deploy.d.ts +5 -6
  159. package/commands/project/deploy.js +93 -37
  160. package/commands/project/dev/deprecatedFlow.d.ts +8 -2
  161. package/commands/project/dev/deprecatedFlow.js +41 -26
  162. package/commands/project/dev/index.d.ts +4 -5
  163. package/commands/project/dev/index.js +103 -33
  164. package/commands/project/dev/unifiedFlow.d.ts +11 -2
  165. package/commands/project/dev/unifiedFlow.js +85 -46
  166. package/commands/project/download.d.ts +3 -7
  167. package/commands/project/download.js +18 -19
  168. package/commands/project/installDeps.d.ts +6 -1
  169. package/commands/project/installDeps.js +48 -32
  170. package/commands/project/listBuilds.d.ts +3 -7
  171. package/commands/project/listBuilds.js +32 -30
  172. package/commands/project/logs.d.ts +10 -1
  173. package/commands/project/logs.js +73 -65
  174. package/commands/project/migrate.d.ts +7 -8
  175. package/commands/project/migrate.js +49 -26
  176. package/commands/project/migrateApp.d.ts +3 -8
  177. package/commands/project/migrateApp.js +23 -20
  178. package/commands/project/open.d.ts +3 -7
  179. package/commands/project/open.js +29 -21
  180. package/commands/project/profile/add.d.ts +7 -0
  181. package/commands/project/profile/add.js +209 -0
  182. package/commands/project/profile/delete.d.ts +6 -0
  183. package/commands/project/profile/delete.js +123 -0
  184. package/commands/project/profile.d.ts +3 -0
  185. package/commands/project/profile.js +25 -0
  186. package/commands/project/upload.d.ts +10 -1
  187. package/commands/project/upload.js +94 -56
  188. package/commands/project/validate.d.ts +6 -0
  189. package/commands/project/validate.js +81 -0
  190. package/commands/project/watch.d.ts +6 -1
  191. package/commands/project/watch.js +95 -61
  192. package/commands/project.d.ts +3 -1
  193. package/commands/project.js +49 -37
  194. package/commands/remove.d.ts +3 -7
  195. package/commands/remove.js +22 -20
  196. package/commands/sandbox/create.d.ts +4 -9
  197. package/commands/sandbox/create.js +27 -21
  198. package/commands/sandbox/delete.d.ts +4 -9
  199. package/commands/sandbox/delete.js +35 -29
  200. package/commands/sandbox.d.ts +3 -4
  201. package/commands/sandbox.js +18 -44
  202. package/commands/secret/addSecret.d.ts +4 -9
  203. package/commands/secret/addSecret.js +21 -15
  204. package/commands/secret/deleteSecret.d.ts +4 -9
  205. package/commands/secret/deleteSecret.js +28 -18
  206. package/commands/secret/listSecret.d.ts +4 -9
  207. package/commands/secret/listSecret.js +19 -13
  208. package/commands/secret/updateSecret.d.ts +4 -9
  209. package/commands/secret/updateSecret.js +25 -17
  210. package/commands/secret.d.ts +3 -4
  211. package/commands/secret.js +23 -49
  212. package/commands/theme/generate-selectors.d.ts +3 -7
  213. package/commands/theme/generate-selectors.js +20 -16
  214. package/commands/theme/marketplace-validate.d.ts +4 -9
  215. package/commands/theme/marketplace-validate.js +22 -18
  216. package/commands/theme/preview.d.ts +4 -9
  217. package/commands/theme/preview.js +36 -30
  218. package/commands/theme.d.ts +3 -4
  219. package/commands/theme.js +22 -48
  220. package/commands/upload.d.ts +12 -1
  221. package/commands/upload.js +116 -135
  222. package/commands/watch.d.ts +14 -1
  223. package/commands/watch.js +74 -76
  224. package/lang/en.d.ts +3218 -0
  225. package/lang/en.js +3075 -3313
  226. package/lang/en.lyaml +96 -228
  227. package/lib/accountTypes.d.ts +1 -0
  228. package/lib/accountTypes.js +11 -0
  229. package/lib/app/migrate.d.ts +33 -4
  230. package/lib/app/migrate.js +172 -91
  231. package/lib/app/migrate_legacy.d.ts +2 -2
  232. package/lib/app/migrate_legacy.js +12 -11
  233. package/lib/app/urls.d.ts +16 -0
  234. package/lib/app/urls.js +16 -0
  235. package/lib/buildAccount.d.ts +1 -2
  236. package/lib/buildAccount.js +11 -10
  237. package/lib/commonOpts.d.ts +4 -7
  238. package/lib/commonOpts.js +47 -19
  239. package/lib/configMigrate.d.ts +2 -0
  240. package/lib/configMigrate.js +83 -0
  241. package/lib/configOptions.d.ts +4 -0
  242. package/lib/configOptions.js +41 -45
  243. package/lib/constants.d.ts +33 -0
  244. package/lib/constants.js +34 -1
  245. package/lib/dependencyManagement.d.ts +0 -5
  246. package/lib/dependencyManagement.js +14 -40
  247. package/lib/doctor/Diagnosis.d.ts +1 -2
  248. package/lib/doctor/Diagnosis.js +19 -16
  249. package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
  250. package/lib/doctor/DiagnosticInfoBuilder.js +10 -9
  251. package/lib/doctor/Doctor.d.ts +1 -0
  252. package/lib/doctor/Doctor.js +60 -46
  253. package/lib/errorHandlers/index.js +13 -7
  254. package/lib/errorHandlers/suppressError.js +18 -26
  255. package/lib/filesystem.d.ts +1 -1
  256. package/lib/generateSelectors.js +3 -6
  257. package/lib/hasFeature.d.ts +3 -1
  258. package/lib/interpolation.d.ts +2 -3
  259. package/lib/lang.d.ts +2 -3
  260. package/lib/marketplaceValidate.d.ts +12 -2
  261. package/lib/marketplaceValidate.js +22 -29
  262. package/lib/mcp/setup.d.ts +12 -0
  263. package/lib/mcp/setup.js +216 -0
  264. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +3 -3
  265. package/lib/middleware/autoUpdateMiddleware.d.ts +1 -0
  266. package/lib/middleware/autoUpdateMiddleware.js +89 -0
  267. package/lib/middleware/configMiddleware.js +37 -3
  268. package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
  269. package/lib/middleware/fireAlarmMiddleware.js +125 -0
  270. package/lib/middleware/yargsChecksMiddleware.js +2 -2
  271. package/lib/npm.d.ts +9 -0
  272. package/lib/npm.js +36 -0
  273. package/lib/oauth.js +1 -2
  274. package/lib/process.js +1 -2
  275. package/lib/projectProfiles.d.ts +7 -0
  276. package/lib/projectProfiles.js +83 -0
  277. package/lib/projects/ProjectLogsManager.d.ts +1 -1
  278. package/lib/projects/ProjectLogsManager.js +16 -21
  279. package/lib/projects/add/legacyAddComponent.d.ts +5 -0
  280. package/lib/projects/add/legacyAddComponent.js +48 -0
  281. package/lib/projects/add/v3AddComponent.d.ts +8 -0
  282. package/lib/projects/add/v3AddComponent.js +85 -0
  283. package/lib/projects/buildAndDeploy.js +46 -42
  284. package/lib/projects/components.d.ts +2 -0
  285. package/lib/projects/components.js +82 -0
  286. package/lib/projects/config.d.ts +9 -0
  287. package/lib/projects/config.js +79 -0
  288. package/lib/projects/create/index.d.ts +23 -0
  289. package/lib/projects/create/index.js +33 -0
  290. package/lib/projects/create/legacy.d.ts +6 -0
  291. package/lib/projects/{create.js → create/legacy.js} +23 -15
  292. package/lib/projects/create/v3.d.ts +27 -0
  293. package/lib/projects/create/v3.js +158 -0
  294. package/lib/projects/ensureProjectExists.d.ts +11 -0
  295. package/lib/projects/ensureProjectExists.js +97 -0
  296. package/lib/projects/localDev/AppDevModeInterface.d.ts +30 -0
  297. package/lib/projects/localDev/AppDevModeInterface.js +214 -0
  298. package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
  299. package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +6 -6
  300. package/lib/projects/localDev/DevServerManagerV2.d.ts +22 -0
  301. package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +22 -19
  302. package/lib/projects/localDev/LocalDevLogger.d.ts +30 -0
  303. package/lib/projects/localDev/LocalDevLogger.js +159 -0
  304. package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
  305. package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +57 -83
  306. package/lib/projects/localDev/LocalDevProcess.d.ts +34 -0
  307. package/lib/projects/localDev/LocalDevProcess.js +201 -0
  308. package/lib/projects/localDev/LocalDevState.d.ts +50 -0
  309. package/lib/projects/localDev/LocalDevState.js +119 -0
  310. package/lib/projects/localDev/LocalDevWatcher.d.ts +10 -0
  311. package/lib/projects/localDev/LocalDevWatcher.js +53 -0
  312. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +20 -0
  313. package/lib/projects/localDev/LocalDevWebsocketServer.js +131 -0
  314. package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +6 -4
  315. package/lib/{localDev.js → projects/localDev/helpers.js} +127 -114
  316. package/lib/projects/ui.d.ts +1 -0
  317. package/lib/projects/ui.js +15 -0
  318. package/lib/projects/upload.d.ts +17 -2
  319. package/lib/projects/upload.js +74 -50
  320. package/lib/projects/urls.d.ts +4 -0
  321. package/lib/projects/urls.js +23 -1
  322. package/lib/projects/watch.d.ts +1 -1
  323. package/lib/projects/watch.js +21 -18
  324. package/lib/prompts/accountNamePrompt.js +16 -13
  325. package/lib/prompts/accountsPrompt.js +1 -2
  326. package/lib/prompts/cmsFieldPrompt.js +1 -2
  327. package/lib/prompts/createApiSamplePrompt.d.ts +2 -10
  328. package/lib/prompts/createApiSamplePrompt.js +4 -5
  329. package/lib/prompts/createFunctionPrompt.js +13 -14
  330. package/lib/prompts/createModulePrompt.js +8 -9
  331. package/lib/prompts/createProjectPrompt.d.ts +20 -4
  332. package/lib/prompts/createProjectPrompt.js +43 -13
  333. package/lib/prompts/createTemplatePrompt.d.ts +22 -4
  334. package/lib/prompts/createTemplatePrompt.js +1 -2
  335. package/lib/prompts/downloadProjectPrompt.js +3 -4
  336. package/lib/prompts/installAppPrompt.d.ts +2 -0
  337. package/lib/prompts/installAppPrompt.js +45 -0
  338. package/lib/prompts/personalAccessKeyPrompt.js +35 -25
  339. package/lib/prompts/previewPrompt.js +5 -6
  340. package/lib/prompts/projectAddPrompt.d.ts +5 -1
  341. package/lib/prompts/projectAddPrompt.js +35 -8
  342. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
  343. package/lib/prompts/projectDevTargetAccountPrompt.js +15 -16
  344. package/lib/prompts/projectNamePrompt.js +5 -6
  345. package/lib/prompts/projectsLogsPrompt.js +3 -2
  346. package/lib/prompts/promptUtils.d.ts +4 -2
  347. package/lib/prompts/promptUtils.js +3 -1
  348. package/lib/prompts/sandboxesPrompt.js +5 -6
  349. package/lib/prompts/secretPrompt.js +2 -3
  350. package/lib/prompts/selectAppPrompt.d.ts +2 -0
  351. package/lib/prompts/selectAppPrompt.js +40 -0
  352. package/lib/prompts/selectHubDBTablePrompt.js +11 -8
  353. package/lib/prompts/{selectPublicAppPrompt.d.ts → selectPublicAppForMigrationPrompt.d.ts} +1 -1
  354. package/lib/prompts/{selectPublicAppPrompt.js → selectPublicAppForMigrationPrompt.js} +8 -9
  355. package/lib/prompts/setAsDefaultAccountPrompt.js +11 -2
  356. package/lib/prompts/uploadPrompt.js +4 -5
  357. package/lib/sandboxSync.js +15 -14
  358. package/lib/sandboxes.js +12 -13
  359. package/lib/serverlessLogs.js +4 -6
  360. package/lib/testUtils.d.ts +3 -3
  361. package/lib/testUtils.js +8 -9
  362. package/lib/ui/boxen.d.ts +5 -0
  363. package/lib/ui/boxen.js +30 -0
  364. package/lib/ui/git.js +8 -9
  365. package/lib/ui/index.d.ts +4 -2
  366. package/lib/ui/index.js +20 -17
  367. package/lib/ui/logger.d.ts +10 -0
  368. package/lib/ui/logger.js +15 -0
  369. package/lib/ui/serverlessFunctionLogs.js +2 -3
  370. package/lib/upload.d.ts +1 -1
  371. package/lib/validation.js +4 -5
  372. package/lib/yargsUtils.d.ts +5 -1
  373. package/lib/yargsUtils.js +6 -0
  374. package/mcp-server/server.d.ts +1 -0
  375. package/mcp-server/server.js +18 -0
  376. package/mcp-server/tools/index.d.ts +2 -0
  377. package/mcp-server/tools/index.js +17 -0
  378. package/mcp-server/tools/project/AddFeatureToProject.d.ts +29 -0
  379. package/mcp-server/tools/project/AddFeatureToProject.js +85 -0
  380. package/mcp-server/tools/project/CreateProjectTool.d.ts +35 -0
  381. package/mcp-server/tools/project/CreateProjectTool.js +100 -0
  382. package/mcp-server/tools/project/DeployProject.d.ts +20 -0
  383. package/mcp-server/tools/project/DeployProject.js +50 -0
  384. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +17 -0
  385. package/mcp-server/tools/project/GuidedWalkthroughTool.js +58 -0
  386. package/mcp-server/tools/project/UploadProjectTools.d.ts +17 -0
  387. package/mcp-server/tools/project/UploadProjectTools.js +35 -0
  388. package/mcp-server/tools/project/constants.d.ts +3 -0
  389. package/mcp-server/tools/project/constants.js +13 -0
  390. package/mcp-server/types.d.ts +14 -0
  391. package/mcp-server/types.js +17 -0
  392. package/mcp-server/utils/command.d.ts +3 -0
  393. package/mcp-server/utils/command.js +16 -0
  394. package/mcp-server/utils/content.d.ts +3 -0
  395. package/mcp-server/utils/content.js +21 -0
  396. package/mcp-server/utils/project.d.ts +5 -0
  397. package/mcp-server/utils/project.js +17 -0
  398. package/package.json +19 -11
  399. package/types/Cms.d.ts +30 -0
  400. package/types/Cms.js +2 -0
  401. package/types/LocalDev.d.ts +35 -0
  402. package/types/LocalDev.js +2 -0
  403. package/types/Projects.d.ts +19 -2
  404. package/types/Prompts.d.ts +0 -7
  405. package/types/Yargs.d.ts +14 -14
  406. package/lib/DevServerManagerV2.d.ts +0 -33
  407. package/lib/LocalDevManagerV2.d.ts +0 -64
  408. package/lib/LocalDevManagerV2.js +0 -377
  409. package/lib/projects/create.d.ts +0 -5
  410. package/lib/projects/index.d.ts +0 -21
  411. package/lib/projects/index.js +0 -194
  412. package/lib/prompts/installPublicAppPrompt.d.ts +0 -1
  413. package/lib/prompts/installPublicAppPrompt.js +0 -40
@@ -13,13 +13,12 @@ const lang_1 = require("../../../lib/lang");
13
13
  const exitCodes_1 = require("../../../lib/enums/exitCodes");
14
14
  const ui_1 = require("../../../lib/ui");
15
15
  const SpinniesManager_1 = __importDefault(require("../../../lib/ui/SpinniesManager"));
16
- const LocalDevManager_1 = __importDefault(require("../../../lib/LocalDevManager"));
17
- const localDev_1 = require("../../../lib/localDev");
16
+ const LocalDevManager_1 = __importDefault(require("../../../lib/projects/localDev/LocalDevManager"));
17
+ const helpers_1 = require("../../../lib/projects/localDev/helpers");
18
18
  const process_1 = require("../../../lib/process");
19
19
  const accountTypes_1 = require("../../../lib/accountTypes");
20
- const projects_1 = require("../../../lib/projects");
21
- const i18nKey = 'commands.project.subcommands.dev';
22
- async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, projectDir) {
20
+ const ensureProjectExists_1 = require("../../../lib/projects/ensureProjectExists");
21
+ async function deprecatedProjectDevFlow({ args, accountId, projectConfig, projectDir, }) {
23
22
  const { providedAccountId, derivedAccountId } = args;
24
23
  const env = (0, environment_1.getValidEnv)((0, config_1.getEnv)(derivedAccountId));
25
24
  const components = await (0, structure_1.findProjectComponents)(projectDir);
@@ -27,26 +26,43 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
27
26
  const componentTypes = (0, structure_1.getProjectComponentTypes)(runnableComponents);
28
27
  const hasPrivateApps = !!componentTypes[Projects_1.ComponentTypes.PrivateApp];
29
28
  const hasPublicApps = !!componentTypes[Projects_1.ComponentTypes.PublicApp];
29
+ const accountConfig = (0, config_1.getAccountConfig)(accountId);
30
+ if (!accountConfig) {
31
+ logger_1.logger.error((0, lang_1.i18n)('commands.project.subcommands.dev.errors.noAccount', {
32
+ accountId: accountId,
33
+ authCommand: (0, ui_1.uiCommandReference)('hs auth'),
34
+ }));
35
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
36
+ }
30
37
  if (runnableComponents.length === 0) {
31
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noRunnableComponents`, {
38
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noRunnableComponents`, {
32
39
  projectDir,
33
40
  command: (0, ui_1.uiCommandReference)('hs project add'),
34
41
  }));
35
42
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
36
43
  }
37
44
  else if (hasPrivateApps && hasPublicApps) {
38
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.invalidProjectComponents`));
45
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.invalidProjectComponents`));
39
46
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
40
47
  }
41
48
  const accounts = (0, config_1.getConfigAccounts)();
42
49
  if (!accounts) {
43
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccountsInConfig`, {
50
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccountsInConfig`, {
44
51
  authCommand: (0, ui_1.uiCommandReference)('hs auth'),
45
52
  }));
46
53
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
47
54
  }
48
- const defaultAccountIsRecommendedType = (0, accountTypes_1.isDeveloperTestAccount)(accountConfig) ||
49
- (!hasPublicApps && (0, accountTypes_1.isSandbox)(accountConfig));
55
+ let bypassRecommendedAccountPrompt = false;
56
+ if ((0, accountTypes_1.isDeveloperTestAccount)(accountConfig)) {
57
+ bypassRecommendedAccountPrompt = true;
58
+ }
59
+ else if (!hasPublicApps && (0, accountTypes_1.isSandbox)(accountConfig)) {
60
+ bypassRecommendedAccountPrompt = true;
61
+ }
62
+ else if (!hasPublicApps) {
63
+ const defaultAccountHasSandboxes = await (0, helpers_1.hasSandboxes)(accountConfig);
64
+ bypassRecommendedAccountPrompt = !defaultAccountHasSandboxes;
65
+ }
50
66
  // targetProjectAccountId and targetTestingAccountId are set to null if --account flag is not provided.
51
67
  // By setting them to null, we can later check if they need to be assigned based on the default account configuration and the type of app.
52
68
  let targetProjectAccountId = providedAccountId ? derivedAccountId : null;
@@ -54,20 +70,20 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
54
70
  let targetTestingAccountId = providedAccountId ? derivedAccountId : null;
55
71
  // Check that the default account or flag option is valid for the type of app in this project
56
72
  if (providedAccountId) {
57
- (0, localDev_1.checkIfAccountFlagIsSupported)(accountConfig, hasPublicApps);
73
+ (0, helpers_1.checkIfAccountFlagIsSupported)(accountConfig, hasPublicApps);
58
74
  if (hasPublicApps) {
59
75
  targetProjectAccountId = accountConfig.parentAccountId || null;
60
76
  }
61
77
  }
62
78
  else {
63
- (0, localDev_1.checkIfDefaultAccountIsSupported)(accountConfig, hasPublicApps);
79
+ await (0, helpers_1.checkIfDefaultAccountIsSupported)(accountConfig, hasPublicApps);
64
80
  }
65
81
  // The user is targeting an account type that we recommend developing on
66
- if (!targetProjectAccountId && defaultAccountIsRecommendedType) {
82
+ if (!targetProjectAccountId && bypassRecommendedAccountPrompt) {
67
83
  targetTestingAccountId = derivedAccountId;
68
- await (0, localDev_1.confirmDefaultAccountIsTarget)(accountConfig);
84
+ await (0, helpers_1.confirmDefaultAccountIsTarget)(accountConfig);
69
85
  if (hasPublicApps) {
70
- (0, localDev_1.checkIfParentAccountIsAuthed)(accountConfig);
86
+ (0, helpers_1.checkIfParentAccountIsAuthed)(accountConfig);
71
87
  targetProjectAccountId = accountConfig.parentAccountId || null;
72
88
  }
73
89
  else {
@@ -77,34 +93,33 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
77
93
  let createNewSandbox = false;
78
94
  let createNewDeveloperTestAccount = false;
79
95
  if (!targetProjectAccountId) {
80
- const { targetAccountId, parentAccountId, createNestedAccount, notInConfigAccount, } = await (0, localDev_1.suggestRecommendedNestedAccount)(accounts, accountConfig, hasPublicApps);
96
+ const { targetAccountId, parentAccountId, createNestedAccount, notInConfigAccount, } = await (0, helpers_1.suggestRecommendedNestedAccount)(accounts, accountConfig, hasPublicApps);
81
97
  targetProjectAccountId = hasPublicApps
82
98
  ? parentAccountId || null
83
99
  : targetAccountId;
84
100
  targetTestingAccountId = targetAccountId;
85
101
  // Only used for developer test accounts that are not yet in the config
86
102
  if (notInConfigAccount) {
87
- await (0, localDev_1.useExistingDevTestAccount)(env, notInConfigAccount);
103
+ await (0, helpers_1.useExistingDevTestAccount)(env, notInConfigAccount);
88
104
  }
89
- createNewSandbox = (0, accountTypes_1.isStandardAccount)(accountConfig) && createNestedAccount;
90
- createNewDeveloperTestAccount =
91
- (0, accountTypes_1.isAppDeveloperAccount)(accountConfig) && createNestedAccount;
105
+ createNewSandbox = hasPrivateApps && createNestedAccount;
106
+ createNewDeveloperTestAccount = hasPublicApps && createNestedAccount;
92
107
  }
93
108
  if (createNewSandbox) {
94
- targetProjectAccountId = await (0, localDev_1.createSandboxForLocalDev)(derivedAccountId, accountConfig, env);
109
+ targetProjectAccountId = await (0, helpers_1.createSandboxForLocalDev)(derivedAccountId, accountConfig, env);
95
110
  // We will be running our tests against this new sandbox account
96
111
  targetTestingAccountId = targetProjectAccountId;
97
112
  }
98
113
  if (createNewDeveloperTestAccount) {
99
- targetTestingAccountId = await (0, localDev_1.createDeveloperTestAccountForLocalDev)(derivedAccountId, accountConfig, env);
114
+ targetTestingAccountId = await (0, helpers_1.createDeveloperTestAccountForLocalDev)(derivedAccountId, accountConfig, env);
100
115
  targetProjectAccountId = derivedAccountId;
101
116
  }
102
117
  if (!targetProjectAccountId || !targetTestingAccountId) {
103
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccount`));
118
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccount`));
104
119
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
105
120
  }
106
121
  // eslint-disable-next-line prefer-const
107
- let { projectExists, project } = await (0, projects_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
122
+ let { projectExists, project } = await (0, ensureProjectExists_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
108
123
  allowCreate: false,
109
124
  noLogs: true,
110
125
  withPolling: createNewSandbox,
@@ -117,8 +132,8 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
117
132
  isGithubLinked = Boolean(project.sourceIntegration && project.sourceIntegration.source === 'GITHUB');
118
133
  }
119
134
  else {
120
- project = await (0, localDev_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps);
121
- deployedBuild = await (0, localDev_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId);
135
+ project = await (0, helpers_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps);
136
+ deployedBuild = await (0, helpers_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId);
122
137
  }
123
138
  const LocalDev = new LocalDevManager_1.default({
124
139
  runnableComponents,
@@ -1,6 +1,5 @@
1
- import { ArgumentsCamelCase, Argv } from 'yargs';
1
+ import { Argv, CommandModule } from 'yargs';
2
2
  import { ProjectDevArgs } from '../../../types/Yargs';
3
- export declare const command = "dev";
4
- export declare const describe: string;
5
- export declare function handler(args: ArgumentsCamelCase<ProjectDevArgs>): Promise<void>;
6
- export declare function builder(yargs: Argv): Argv<ProjectDevArgs>;
3
+ export declare const builder: (yargs: Argv) => Promise<Argv<ProjectDevArgs>>;
4
+ declare const projectDevCommand: CommandModule<unknown, ProjectDevArgs>;
5
+ export default projectDevCommand;
@@ -1,52 +1,122 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.describe = exports.command = void 0;
4
- exports.handler = handler;
5
- exports.builder = builder;
6
- const commonOpts_1 = require("../../../lib/commonOpts");
3
+ exports.builder = void 0;
7
4
  const usageTracking_1 = require("../../../lib/usageTracking");
8
- const lang_1 = require("../../../lib/lang");
9
- const logger_1 = require("@hubspot/local-dev-lib/logger");
10
5
  const config_1 = require("@hubspot/local-dev-lib/config");
11
- const projects_1 = require("../../../lib/projects");
6
+ const config_2 = require("../../../lib/projects/config");
12
7
  const exitCodes_1 = require("../../../lib/enums/exitCodes");
13
8
  const ui_1 = require("../../../lib/ui");
14
9
  const deprecatedFlow_1 = require("./deprecatedFlow");
15
10
  const unifiedFlow_1 = require("./unifiedFlow");
16
11
  const buildAndDeploy_1 = require("../../../lib/projects/buildAndDeploy");
17
- const i18nKey = 'commands.project.subcommands.dev';
18
- exports.command = 'dev';
19
- exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
20
- async function handler(args) {
21
- const { derivedAccountId } = args;
22
- const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
23
- (0, usageTracking_1.trackCommandUsage)('project-dev', {}, derivedAccountId);
24
- const { projectConfig, projectDir } = await (0, projects_1.getProjectConfig)();
25
- (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.logs.betaMessage`));
26
- logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.logs.learnMoreLocalDevServer`), 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'));
27
- if (!projectConfig || !projectDir) {
28
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noProjectConfig`, {
29
- accountId: derivedAccountId,
30
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
31
- }));
12
+ const yargsUtils_1 = require("../../../lib/yargsUtils");
13
+ const projectProfiles_1 = require("../../../lib/projectProfiles");
14
+ const en_1 = require("../../../lang/en");
15
+ const logger_1 = require("../../../lib/ui/logger");
16
+ const command = 'dev';
17
+ const describe = (0, ui_1.uiBetaTag)(en_1.commands.project.dev.describe, false);
18
+ function validateAccountFlags(testingAccount, projectAccount, providedAccountId, useV3) {
19
+ // Legacy projects do not support targetTestingAccount and targetProjectAccount
20
+ if (testingAccount && projectAccount && !useV3) {
21
+ logger_1.uiLogger.error(en_1.commands.project.dev.errors.unsupportedAccountFlagLegacy);
32
22
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
33
23
  }
34
- if (!accountConfig) {
35
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccount`));
24
+ if (providedAccountId && useV3) {
25
+ logger_1.uiLogger.error(en_1.commands.project.dev.errors.unsupportedAccountFlagV3);
36
26
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
37
27
  }
38
- (0, projects_1.validateProjectConfig)(projectConfig, projectDir);
39
- if ((0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion)) {
40
- await (0, unifiedFlow_1.unifiedProjectDevFlow)(args, accountConfig, projectConfig, projectDir);
28
+ }
29
+ async function handler(args) {
30
+ const { derivedAccountId, providedAccountId, testingAccount, projectAccount, } = args;
31
+ const { projectConfig, projectDir } = await (0, config_2.getProjectConfig)();
32
+ (0, config_2.validateProjectConfig)(projectConfig, projectDir);
33
+ const useV3 = (0, buildAndDeploy_1.useV3Api)(projectConfig.platformVersion);
34
+ if (!projectDir) {
35
+ logger_1.uiLogger.error(en_1.commands.project.dev.errors.noProjectConfig);
36
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
37
+ }
38
+ validateAccountFlags(testingAccount, projectAccount, providedAccountId, useV3);
39
+ let targetProjectAccountId = (projectAccount && (0, config_1.getAccountId)(projectAccount)) ||
40
+ (providedAccountId && derivedAccountId);
41
+ let profile;
42
+ if (!targetProjectAccountId && (0, buildAndDeploy_1.useV3Api)(projectConfig.platformVersion)) {
43
+ if (args.profile) {
44
+ (0, projectProfiles_1.logProfileHeader)(args.profile);
45
+ profile = (0, projectProfiles_1.loadProfile)(projectConfig, projectDir, args.profile);
46
+ if (!profile) {
47
+ (0, ui_1.uiLine)();
48
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
49
+ }
50
+ targetProjectAccountId = profile.accountId;
51
+ (0, projectProfiles_1.logProfileFooter)(profile);
52
+ }
53
+ else {
54
+ // A profile must be specified if this project has profiles configured
55
+ await (0, projectProfiles_1.exitIfUsingProfiles)(projectConfig, projectDir);
56
+ }
57
+ }
58
+ if (!targetProjectAccountId) {
59
+ // The user is not using profile or account flags, so we can use the derived accountId
60
+ targetProjectAccountId = derivedAccountId;
61
+ }
62
+ (0, usageTracking_1.trackCommandUsage)('project-dev', {}, targetProjectAccountId);
63
+ (0, ui_1.uiBetaTag)(en_1.commands.project.dev.logs.betaMessage);
64
+ logger_1.uiLogger.log(en_1.commands.project.dev.logs.learnMoreLocalDevServer);
65
+ if ((0, buildAndDeploy_1.useV3Api)(projectConfig.platformVersion)) {
66
+ const targetTestingAccountId = (testingAccount && (0, config_1.getAccountId)(testingAccount)) || undefined;
67
+ await (0, unifiedFlow_1.unifiedProjectDevFlow)({
68
+ args,
69
+ targetProjectAccountId,
70
+ providedTargetTestingAccountId: targetTestingAccountId,
71
+ projectConfig,
72
+ projectDir,
73
+ profileConfig: profile,
74
+ });
41
75
  }
42
76
  else {
43
- await (0, deprecatedFlow_1.deprecatedProjectDevFlow)(args, accountConfig, projectConfig, projectDir);
77
+ await (0, deprecatedFlow_1.deprecatedProjectDevFlow)({
78
+ args,
79
+ accountId: targetProjectAccountId,
80
+ projectConfig,
81
+ projectDir,
82
+ });
44
83
  }
45
84
  }
46
- function builder(yargs) {
47
- (0, commonOpts_1.addConfigOptions)(yargs);
48
- (0, commonOpts_1.addAccountOptions)(yargs);
49
- (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
50
- yargs.example([['$0 project dev', (0, lang_1.i18n)(`${i18nKey}.examples.default`)]]);
85
+ function projectDevBuilder(yargs) {
86
+ yargs.option('profile', {
87
+ type: 'string',
88
+ alias: 'p',
89
+ description: en_1.commands.project.dev.options.profile,
90
+ hidden: true,
91
+ });
92
+ yargs.options('testingAccount', {
93
+ type: 'string',
94
+ description: en_1.commands.project.dev.options.testingAccount,
95
+ hidden: true,
96
+ implies: ['projectAccount'],
97
+ });
98
+ yargs.options('projectAccount', {
99
+ type: 'string',
100
+ description: en_1.commands.project.dev.options.projectAccount,
101
+ hidden: true,
102
+ implies: ['testingAccount'],
103
+ });
104
+ yargs.example([['$0 project dev', en_1.commands.project.dev.examples.default]]);
105
+ yargs.conflicts('profile', 'account');
106
+ yargs.conflicts('profile', 'testingAccount');
107
+ yargs.conflicts('profile', 'projectAccount');
51
108
  return yargs;
52
109
  }
110
+ exports.builder = (0, yargsUtils_1.makeYargsBuilder)(projectDevBuilder, command, describe, {
111
+ useGlobalOptions: true,
112
+ useAccountOptions: true,
113
+ useConfigOptions: true,
114
+ useEnvironmentOptions: true,
115
+ });
116
+ const projectDevCommand = {
117
+ command,
118
+ describe,
119
+ handler,
120
+ builder: exports.builder,
121
+ };
122
+ exports.default = projectDevCommand;
@@ -1,5 +1,14 @@
1
1
  import { ArgumentsCamelCase } from 'yargs';
2
- import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
2
+ import { HsProfileFile } from '@hubspot/project-parsing-lib/src/lib/types';
3
3
  import { ProjectDevArgs } from '../../../types/Yargs';
4
4
  import { ProjectConfig } from '../../../types/Projects';
5
- export declare function unifiedProjectDevFlow(args: ArgumentsCamelCase<ProjectDevArgs>, accountConfig: CLIAccount, projectConfig: ProjectConfig, projectDir: string): Promise<void>;
5
+ type UnifiedProjectDevFlowArgs = {
6
+ args: ArgumentsCamelCase<ProjectDevArgs>;
7
+ targetProjectAccountId: number;
8
+ providedTargetTestingAccountId?: number;
9
+ projectConfig: ProjectConfig;
10
+ projectDir: string;
11
+ profileConfig?: HsProfileFile;
12
+ };
13
+ export declare function unifiedProjectDevFlow({ args, targetProjectAccountId, providedTargetTestingAccountId, projectConfig, projectDir, profileConfig, }: UnifiedProjectDevFlowArgs): Promise<void>;
14
+ export {};
@@ -6,27 +6,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.unifiedProjectDevFlow = unifiedProjectDevFlow;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const util_1 = __importDefault(require("util"));
9
- const logger_1 = require("@hubspot/local-dev-lib/logger");
9
+ const config_1 = require("@hubspot/local-dev-lib/constants/config");
10
10
  const errors_1 = require("@hubspot/project-parsing-lib/src/lib/errors");
11
11
  const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
12
- const config_1 = require("@hubspot/local-dev-lib/config");
12
+ const config_2 = require("@hubspot/local-dev-lib/config");
13
13
  const environment_1 = require("@hubspot/local-dev-lib/environment");
14
14
  const errorHandlers_1 = require("../../../lib/errorHandlers");
15
15
  const exitCodes_1 = require("../../../lib/enums/exitCodes");
16
- const projects_1 = require("../../../lib/projects");
17
- const localDev_1 = require("../../../lib/localDev");
16
+ const ensureProjectExists_1 = require("../../../lib/projects/ensureProjectExists");
17
+ const helpers_1 = require("../../../lib/projects/localDev/helpers");
18
18
  const projectDevTargetAccountPrompt_1 = require("../../../lib/prompts/projectDevTargetAccountPrompt");
19
19
  const SpinniesManager_1 = __importDefault(require("../../../lib/ui/SpinniesManager"));
20
- const LocalDevManagerV2_1 = __importDefault(require("../../../lib/LocalDevManagerV2"));
20
+ const LocalDevProcess_1 = __importDefault(require("../../../lib/projects/localDev/LocalDevProcess"));
21
+ const LocalDevWatcher_1 = __importDefault(require("../../../lib/projects/localDev/LocalDevWatcher"));
21
22
  const process_1 = require("../../../lib/process");
22
23
  const accountTypes_1 = require("../../../lib/accountTypes");
23
24
  const ui_1 = require("../../../lib/ui");
24
- const lang_1 = require("../../../lib/lang");
25
- const i18nKey = 'commands.project.subcommands.dev';
26
- async function unifiedProjectDevFlow(args, accountConfig, projectConfig, projectDir) {
27
- logger_1.logger.log('Unified Apps Local Dev');
28
- const targetProjectAccountId = args.derivedAccountId;
29
- const env = (0, environment_1.getValidEnv)((0, config_1.getEnv)(targetProjectAccountId));
25
+ const logger_1 = require("../../../lib/ui/logger");
26
+ const en_1 = require("../../../lang/en");
27
+ const LocalDevWebsocketServer_1 = __importDefault(require("../../../lib/projects/localDev/LocalDevWebsocketServer"));
28
+ async function unifiedProjectDevFlow({ args, targetProjectAccountId, providedTargetTestingAccountId, projectConfig, projectDir, profileConfig, }) {
29
+ const env = (0, environment_1.getValidEnv)((0, config_2.getEnv)(targetProjectAccountId));
30
30
  let projectNodes;
31
31
  // Get IR
32
32
  try {
@@ -34,52 +34,72 @@ async function unifiedProjectDevFlow(args, accountConfig, projectConfig, project
34
34
  projectSourceDir: path_1.default.join(projectDir, projectConfig.srcDir),
35
35
  platformVersion: projectConfig.platformVersion,
36
36
  accountId: targetProjectAccountId,
37
- });
37
+ }, { profile: args.profile });
38
38
  projectNodes = intermediateRepresentation.intermediateNodesIndexedByUid;
39
- logger_1.logger.debug(util_1.default.inspect(projectNodes, false, null, true));
39
+ logger_1.uiLogger.debug(util_1.default.inspect(projectNodes, false, null, true));
40
40
  }
41
41
  catch (e) {
42
42
  if ((0, errors_1.isTranslationError)(e)) {
43
- logger_1.logger.error(e.toString());
43
+ logger_1.uiLogger.error(e.toString());
44
44
  }
45
45
  else {
46
46
  (0, errorHandlers_1.logError)(e);
47
47
  }
48
48
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
49
49
  }
50
- // @TODO Do we need to do more than this or leave it to the dev servers?
51
50
  if (!Object.keys(projectNodes).length) {
52
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noRunnableComponents`, {
53
- projectDir,
54
- command: (0, ui_1.uiCommandReference)('hs project add'),
55
- }));
51
+ logger_1.uiLogger.error(en_1.commands.project.dev.errors.noRunnableComponents);
56
52
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
57
53
  }
58
- // @TODO Validate component types (i.e. previously you could not have both private and public apps)
59
- const accounts = (0, config_1.getConfigAccounts)();
60
- // TODO Ideally this should require the user to target a Combined account
61
- // For now, check if the account is either developer or standard
62
- const derivedAccountIsRecommendedType = (0, accountTypes_1.isAppDeveloperAccount)(accountConfig) || (0, accountTypes_1.isStandardAccount)(accountConfig);
63
- if (!derivedAccountIsRecommendedType) {
64
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.invalidUnifiedAppsAccount`), {
65
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
66
- });
67
- process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
54
+ const targetProjectAccountConfig = (0, config_2.getAccountConfig)(targetProjectAccountId);
55
+ if (!targetProjectAccountConfig) {
56
+ logger_1.uiLogger.error(en_1.commands.project.dev.errors.noAccount(targetProjectAccountId));
57
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
68
58
  }
69
- let targetTestingAccountId = null;
70
- const devAccountPromptResponse = await (0, projectDevTargetAccountPrompt_1.selectDeveloperTestTargetAccountPrompt)(accounts, accountConfig);
71
- targetTestingAccountId = devAccountPromptResponse.targetAccountId;
72
- if (!!devAccountPromptResponse.notInConfigAccount) {
73
- // When the developer test account isn't configured in the CLI config yet
74
- // Walk the user through adding the account's PAK to the config
75
- await (0, localDev_1.useExistingDevTestAccount)(env, devAccountPromptResponse.notInConfigAccount);
59
+ const accounts = (0, config_2.getConfigAccounts)();
60
+ const accountIsCombined = await (0, accountTypes_1.isUnifiedAccount)(targetProjectAccountConfig);
61
+ if (!accountIsCombined && !profileConfig) {
62
+ logger_1.uiLogger.error(en_1.commands.project.dev.errors.accountNotCombined);
63
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
76
64
  }
77
- else if (devAccountPromptResponse.createNestedAccount) {
78
- // Create a new developer test account and automatically add it to the CLI config
79
- targetTestingAccountId = await (0, localDev_1.createDeveloperTestAccountForLocalDev)(targetProjectAccountId, accountConfig, env);
65
+ let targetTestingAccountId = providedTargetTestingAccountId;
66
+ if (profileConfig) {
67
+ // Bypass the prompt for the testing account if the user has a profile configured
68
+ targetTestingAccountId = profileConfig.accountId;
69
+ }
70
+ else if (!targetTestingAccountId) {
71
+ logger_1.uiLogger.log('');
72
+ (0, ui_1.uiLine)();
73
+ logger_1.uiLogger.log(en_1.commands.project.dev.logs.accountTypeInformation);
74
+ logger_1.uiLogger.log(en_1.commands.project.dev.logs.learnMoreMessage);
75
+ (0, ui_1.uiLine)();
76
+ logger_1.uiLogger.log('');
77
+ const accountType = await (0, helpers_1.selectAccountTypePrompt)(targetProjectAccountConfig);
78
+ if (accountType === config_1.HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST) {
79
+ const devAccountPromptResponse = await (0, projectDevTargetAccountPrompt_1.selectDeveloperTestTargetAccountPrompt)(accounts, targetProjectAccountConfig);
80
+ targetTestingAccountId =
81
+ devAccountPromptResponse.targetAccountId || undefined;
82
+ if (!!devAccountPromptResponse.notInConfigAccount) {
83
+ // When the developer test account isn't configured in the CLI config yet
84
+ // Walk the user through adding the account's PAK to the config
85
+ await (0, helpers_1.useExistingDevTestAccount)(env, devAccountPromptResponse.notInConfigAccount);
86
+ }
87
+ else if (devAccountPromptResponse.createNestedAccount) {
88
+ // Create a new developer test account and automatically add it to the CLI config
89
+ targetTestingAccountId = await (0, helpers_1.createDeveloperTestAccountForLocalDev)(targetProjectAccountId, targetProjectAccountConfig, env);
90
+ }
91
+ }
92
+ else if (accountType === config_1.HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX) {
93
+ const sandboxAccountPromptResponse = await (0, projectDevTargetAccountPrompt_1.selectSandboxTargetAccountPrompt)(accounts, targetProjectAccountConfig);
94
+ targetTestingAccountId =
95
+ sandboxAccountPromptResponse.targetAccountId || undefined;
96
+ }
97
+ else {
98
+ targetTestingAccountId = targetProjectAccountId;
99
+ }
80
100
  }
81
101
  // Check if project exists in HubSpot
82
- const { projectExists, project: uploadedProject } = await (0, projects_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
102
+ const { projectExists, project: uploadedProject } = await (0, ensureProjectExists_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
83
103
  allowCreate: false,
84
104
  noLogs: true,
85
105
  });
@@ -92,11 +112,12 @@ async function unifiedProjectDevFlow(args, accountConfig, projectConfig, project
92
112
  isGithubLinked = Boolean(project.sourceIntegration && project.sourceIntegration.source === 'GITHUB');
93
113
  }
94
114
  else {
95
- project = await (0, localDev_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, false, false);
96
- deployedBuild = await (0, localDev_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId, true);
115
+ project = await (0, helpers_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, false, false);
116
+ deployedBuild = await (0, helpers_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId, true, args.profile);
97
117
  }
98
- const LocalDev = new LocalDevManagerV2_1.default({
99
- projectNodes,
118
+ // End setup, start local dev process
119
+ const localDevProcess = new LocalDevProcess_1.default({
120
+ initialProjectNodes: projectNodes,
100
121
  debug: args.debug,
101
122
  deployedBuild,
102
123
  isGithubLinked,
@@ -104,9 +125,27 @@ async function unifiedProjectDevFlow(args, accountConfig, projectConfig, project
104
125
  targetTestingAccountId: targetTestingAccountId,
105
126
  projectConfig,
106
127
  projectDir,
128
+ projectName: project.name,
107
129
  projectId: project.id,
108
130
  env,
109
131
  });
110
- await LocalDev.start();
111
- (0, process_1.handleExit)(({ isSIGHUP }) => LocalDev.stop(!isSIGHUP));
132
+ await localDevProcess.start();
133
+ const watcher = new LocalDevWatcher_1.default(localDevProcess);
134
+ watcher.start();
135
+ const websocketServer = new LocalDevWebsocketServer_1.default(localDevProcess, args.debug);
136
+ await websocketServer.start();
137
+ (0, process_1.handleKeypress)(async (key) => {
138
+ if ((key.ctrl && key.name === 'c') || key.name === 'q') {
139
+ await Promise.all([
140
+ localDevProcess.stop(),
141
+ watcher.stop(),
142
+ websocketServer.shutdown(),
143
+ ]);
144
+ }
145
+ });
146
+ (0, process_1.handleExit)(({ isSIGHUP }) => {
147
+ localDevProcess.stop(!isSIGHUP);
148
+ watcher.stop();
149
+ websocketServer.shutdown();
150
+ });
112
151
  }
@@ -1,12 +1,8 @@
1
- import { Argv, ArgumentsCamelCase } from 'yargs';
2
- import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs } from '../../types/Yargs';
3
- export declare const command = "download";
4
- export declare const describe: string;
1
+ import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs, YargsCommandModule } from '../../types/Yargs';
5
2
  type ProjectDownloadArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & {
6
3
  project?: string;
7
4
  dest?: string;
8
5
  build?: number;
9
6
  };
10
- export declare function handler(args: ArgumentsCamelCase<ProjectDownloadArgs>): Promise<void>;
11
- export declare const builder: (yargs: Argv) => Promise<Argv<ProjectDownloadArgs>>;
12
- export {};
7
+ declare const projectDownloadCommand: YargsCommandModule<unknown, ProjectDownloadArgs>;
8
+ export default projectDownloadCommand;
@@ -3,28 +3,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.builder = exports.describe = exports.command = void 0;
7
- exports.handler = handler;
8
6
  const path_1 = __importDefault(require("path"));
9
7
  const path_2 = require("@hubspot/local-dev-lib/path");
10
8
  const logger_1 = require("@hubspot/local-dev-lib/logger");
11
9
  const archive_1 = require("@hubspot/local-dev-lib/archive");
12
10
  const projects_1 = require("@hubspot/local-dev-lib/api/projects");
13
11
  const index_1 = require("../../lib/errorHandlers/index");
14
- const projects_2 = require("../../lib/projects");
12
+ const config_1 = require("../../lib/projects/config");
15
13
  const downloadProjectPrompt_1 = require("../../lib/prompts/downloadProjectPrompt");
16
14
  const lang_1 = require("../../lib/lang");
17
15
  const ui_1 = require("../../lib/ui");
18
16
  const usageTracking_1 = require("../../lib/usageTracking");
19
17
  const exitCodes_1 = require("../../lib/enums/exitCodes");
20
18
  const yargsUtils_1 = require("../../lib/yargsUtils");
21
- const i18nKey = 'commands.project.subcommands.download';
22
- exports.command = 'download';
23
- exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
19
+ const command = 'download';
20
+ const describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.download.describe`), false);
24
21
  async function handler(args) {
25
- const { projectConfig } = await (0, projects_2.getProjectConfig)();
22
+ const { projectConfig } = await (0, config_1.getProjectConfig)();
26
23
  if (projectConfig) {
27
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.warnings.cannotDownloadWithinProject`));
24
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.download.warnings.cannotDownloadWithinProject`));
28
25
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
29
26
  }
30
27
  const { dest, build, derivedAccountId } = args;
@@ -41,13 +38,13 @@ async function handler(args) {
41
38
  }
42
39
  }
43
40
  if (!buildNumberToDownload) {
44
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noBuildIdToDownload`));
41
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.download.errors.noBuildIdToDownload`));
45
42
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
46
43
  }
47
44
  const absoluteDestPath = dest ? path_1.default.resolve((0, path_2.getCwd)(), dest) : (0, path_2.getCwd)();
48
45
  const { data: zippedProject } = await (0, projects_1.downloadProject)(derivedAccountId, projectName, buildNumberToDownload);
49
46
  await (0, archive_1.extractZipArchive)(zippedProject, (0, path_2.sanitizeFileName)(projectName), path_1.default.resolve(absoluteDestPath), { includesRootDir: false });
50
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logs.downloadSucceeded`, {
47
+ logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.download.logs.downloadSucceeded`, {
51
48
  buildId: buildNumberToDownload,
52
49
  projectName,
53
50
  }));
@@ -64,15 +61,15 @@ async function handler(args) {
64
61
  function projectDownloadBuilder(yargs) {
65
62
  yargs.options({
66
63
  project: {
67
- describe: (0, lang_1.i18n)(`${i18nKey}.options.project.describe`),
64
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.download.options.project.describe`),
68
65
  type: 'string',
69
66
  },
70
67
  dest: {
71
- describe: (0, lang_1.i18n)(`${i18nKey}.options.dest.describe`),
68
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.download.options.dest.describe`),
72
69
  type: 'string',
73
70
  },
74
71
  build: {
75
- describe: (0, lang_1.i18n)(`${i18nKey}.options.build.describe`),
72
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.download.options.build.describe`),
76
73
  alias: ['build-id'],
77
74
  type: 'number',
78
75
  },
@@ -80,19 +77,21 @@ function projectDownloadBuilder(yargs) {
80
77
  yargs.example([
81
78
  [
82
79
  '$0 project download --project=myProject --dest=myProjectFolder',
83
- (0, lang_1.i18n)(`${i18nKey}.examples.default`),
80
+ (0, lang_1.i18n)(`commands.project.subcommands.download.examples.default`),
84
81
  ],
85
82
  ]);
86
83
  return yargs;
87
84
  }
88
- exports.builder = (0, yargsUtils_1.makeYargsBuilder)(projectDownloadBuilder, exports.command, exports.describe, {
85
+ const builder = (0, yargsUtils_1.makeYargsBuilder)(projectDownloadBuilder, command, describe, {
86
+ useGlobalOptions: true,
89
87
  useConfigOptions: true,
90
88
  useAccountOptions: true,
91
89
  useEnvironmentOptions: true,
92
90
  });
93
- module.exports = {
94
- command: exports.command,
95
- describe: exports.describe,
96
- builder: exports.builder,
91
+ const projectDownloadCommand = {
92
+ command,
93
+ describe,
97
94
  handler,
95
+ builder,
98
96
  };
97
+ exports.default = projectDownloadCommand;