@hubspot/cli 7.8.0-experimental.0 → 7.8.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 (357) hide show
  1. package/bin/cli.js +31 -27
  2. package/commands/__tests__/auth.test.js +5 -0
  3. package/commands/__tests__/doctor.test.js +16 -16
  4. package/commands/__tests__/getStarted.test.js +2 -2
  5. package/commands/__tests__/mcp.test.js +1 -1
  6. package/commands/__tests__/project.test.js +2 -3
  7. package/commands/account/auth.js +1 -0
  8. package/commands/account/clean.js +18 -27
  9. package/commands/account/createOverride.js +13 -31
  10. package/commands/account/info.js +20 -31
  11. package/commands/account/list.js +16 -22
  12. package/commands/account/remove.js +12 -20
  13. package/commands/account/removeOverride.js +11 -21
  14. package/commands/account/rename.js +6 -9
  15. package/commands/account/use.js +12 -26
  16. package/commands/account.js +2 -2
  17. package/commands/app/__tests__/migrate.test.js +5 -6
  18. package/commands/app/migrate.js +13 -19
  19. package/commands/app/secret/add.js +2 -1
  20. package/commands/app/secret/delete.js +2 -1
  21. package/commands/app/secret/list.js +2 -1
  22. package/commands/app/secret/update.js +2 -1
  23. package/commands/app/secret.js +2 -1
  24. package/commands/app.js +2 -2
  25. package/commands/auth.d.ts +1 -0
  26. package/commands/auth.js +17 -7
  27. package/commands/cms/convertFields.js +7 -9
  28. package/commands/cms/getReactModule.js +9 -14
  29. package/commands/cms/lighthouseScore.js +33 -36
  30. package/commands/cms.js +2 -2
  31. package/commands/completion.js +3 -3
  32. package/commands/config/set.d.ts +1 -1
  33. package/commands/config/set.js +64 -37
  34. package/commands/config.js +2 -2
  35. package/commands/create.js +2 -2
  36. package/commands/customObject/create.js +10 -12
  37. package/commands/customObject/schema/create.js +9 -11
  38. package/commands/customObject/schema/delete.js +16 -16
  39. package/commands/customObject/schema/fetch-all.js +12 -11
  40. package/commands/customObject/schema/fetch.js +15 -15
  41. package/commands/customObject/schema/list.js +4 -4
  42. package/commands/customObject/schema/update.js +13 -13
  43. package/commands/customObject/schema.js +2 -2
  44. package/commands/customObject.js +6 -7
  45. package/commands/doctor.js +8 -11
  46. package/commands/feedback.js +8 -13
  47. package/commands/fetch.js +8 -8
  48. package/commands/filemanager/fetch.js +7 -7
  49. package/commands/filemanager/upload.js +15 -34
  50. package/commands/filemanager.js +2 -2
  51. package/commands/function/deploy.js +11 -29
  52. package/commands/function/list.js +8 -8
  53. package/commands/function/server.js +9 -11
  54. package/commands/function.d.ts +1 -1
  55. package/commands/function.js +2 -2
  56. package/commands/getStarted.d.ts +1 -3
  57. package/commands/getStarted.js +68 -20
  58. package/commands/hubdb/clear.js +7 -15
  59. package/commands/hubdb/create.js +9 -15
  60. package/commands/hubdb/delete.js +8 -15
  61. package/commands/hubdb/fetch.js +6 -9
  62. package/commands/hubdb.d.ts +1 -1
  63. package/commands/hubdb.js +2 -2
  64. package/commands/init.js +2 -3
  65. package/commands/lint.js +16 -16
  66. package/commands/list.js +8 -14
  67. package/commands/logs.js +14 -20
  68. package/commands/mcp/__tests__/setup.test.js +2 -2
  69. package/commands/mcp/setup.js +11 -2
  70. package/commands/mcp.js +3 -3
  71. package/commands/mv.js +6 -17
  72. package/commands/open.js +5 -5
  73. package/commands/project/__tests__/add.test.js +15 -13
  74. package/commands/project/__tests__/create.test.js +6 -6
  75. package/commands/project/__tests__/deploy.test.js +3 -7
  76. package/commands/project/__tests__/devUnifiedFlow.test.js +2 -4
  77. package/commands/project/__tests__/installDeps.test.js +8 -8
  78. package/commands/project/__tests__/list.test.js +31 -0
  79. package/commands/project/__tests__/logs.test.js +1 -4
  80. package/commands/project/__tests__/migrate.test.js +7 -7
  81. package/commands/project/__tests__/migrateApp.test.js +3 -7
  82. package/commands/project/__tests__/profile.test.js +1 -1
  83. package/commands/project/__tests__/validate.test.js +98 -0
  84. package/commands/project/add.d.ts +2 -2
  85. package/commands/project/add.js +7 -10
  86. package/commands/project/cloneApp.js +14 -19
  87. package/commands/project/create.js +4 -11
  88. package/commands/project/deploy.js +5 -5
  89. package/commands/project/dev/deprecatedFlow.js +9 -18
  90. package/commands/project/dev/index.js +21 -18
  91. package/commands/project/dev/unifiedFlow.js +15 -8
  92. package/commands/project/download.js +15 -16
  93. package/commands/project/installDeps.d.ts +2 -2
  94. package/commands/project/installDeps.js +9 -9
  95. package/commands/project/list.d.ts +4 -0
  96. package/commands/project/list.js +62 -0
  97. package/commands/project/listBuilds.js +12 -21
  98. package/commands/project/logs.js +21 -24
  99. package/commands/project/migrate.js +33 -12
  100. package/commands/project/migrateApp.js +10 -17
  101. package/commands/project/open.js +6 -14
  102. package/commands/project/profile/add.js +3 -3
  103. package/commands/project/profile/delete.js +1 -2
  104. package/commands/project/profile.js +2 -3
  105. package/commands/project/upload.js +16 -25
  106. package/commands/project/validate.js +7 -7
  107. package/commands/project/watch.js +13 -22
  108. package/commands/project.js +4 -3
  109. package/commands/sandbox/__tests__/create.test.js +5 -5
  110. package/commands/sandbox/create.js +22 -32
  111. package/commands/sandbox/delete.js +39 -64
  112. package/commands/sandbox.js +2 -2
  113. package/commands/secret/addSecret.js +7 -17
  114. package/commands/secret/deleteSecret.js +10 -20
  115. package/commands/secret/listSecret.js +8 -10
  116. package/commands/secret/updateSecret.js +9 -17
  117. package/commands/secret.js +2 -2
  118. package/commands/testAccount/__tests__/delete.test.js +2 -4
  119. package/commands/testAccount/create.js +2 -2
  120. package/commands/testAccount/delete.d.ts +4 -3
  121. package/commands/testAccount/delete.js +155 -14
  122. package/commands/testAccount/importData.d.ts +1 -1
  123. package/commands/testAccount/importData.js +1 -1
  124. package/commands/testAccount.js +1 -1
  125. package/commands/theme/preview.js +1 -4
  126. package/lang/en.d.ts +365 -111
  127. package/lang/en.js +409 -158
  128. package/lang/en.lyaml +4 -4
  129. package/lib/__tests__/buildAccount.test.js +4 -3
  130. package/lib/__tests__/commonOpts.test.js +1 -1
  131. package/lib/__tests__/dependencyManagement.test.js +1 -1
  132. package/lib/__tests__/developerTestAccounts.test.js +3 -3
  133. package/lib/__tests__/hasFeature.test.js +145 -7
  134. package/lib/__tests__/npm.test.js +1 -1
  135. package/lib/__tests__/oauth.test.js +4 -4
  136. package/lib/__tests__/process.test.js +10 -5
  137. package/lib/__tests__/sandboxSync.test.js +8 -8
  138. package/lib/__tests__/sandboxes.test.js +8 -8
  139. package/lib/__tests__/serverlessLogs.test.js +1 -1
  140. package/lib/__tests__/usageTracking.test.js +5 -5
  141. package/lib/__tests__/validation.test.js +2 -1
  142. package/lib/__tests__/yargsUtils.test.js +83 -9
  143. package/lib/app/__tests__/migrate.test.js +19 -56
  144. package/lib/app/__tests__/migrate_legacy.test.js +1 -1
  145. package/lib/app/migrate.d.ts +2 -8
  146. package/lib/app/migrate.js +6 -81
  147. package/lib/app/migrate_legacy.js +20 -24
  148. package/lib/buildAccount.d.ts +2 -2
  149. package/lib/buildAccount.js +32 -64
  150. package/lib/commonOpts.d.ts +1 -1
  151. package/lib/commonOpts.js +25 -22
  152. package/lib/configMigrate.js +88 -9
  153. package/lib/configOptions.js +7 -0
  154. package/lib/constants.d.ts +22 -1
  155. package/lib/constants.js +26 -1
  156. package/lib/dependencyManagement.d.ts +0 -5
  157. package/lib/dependencyManagement.js +9 -36
  158. package/lib/developerTestAccounts.js +9 -23
  159. package/lib/doctor/Diagnosis.js +11 -23
  160. package/lib/doctor/DiagnosticInfoBuilder.js +12 -11
  161. package/lib/doctor/Doctor.js +42 -90
  162. package/lib/doctor/__tests__/Doctor.test.js +4 -4
  163. package/lib/errorHandlers/index.js +12 -20
  164. package/lib/errorHandlers/suppressError.js +11 -18
  165. package/lib/hasFeature.js +6 -0
  166. package/lib/lang.js +6 -5
  167. package/lib/links.d.ts +1 -0
  168. package/lib/links.js +14 -7
  169. package/lib/mcp/setup.js +1 -1
  170. package/lib/middleware/__test__/commandTargetingUtils.test.js +99 -0
  171. package/lib/middleware/__test__/configMiddleware.test.js +11 -11
  172. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +6 -8
  173. package/lib/middleware/commandTargetingUtils.d.ts +8 -0
  174. package/lib/middleware/commandTargetingUtils.js +74 -0
  175. package/lib/middleware/configMiddleware.d.ts +1 -1
  176. package/lib/middleware/configMiddleware.js +21 -81
  177. package/lib/middleware/fireAlarmMiddleware.js +15 -5
  178. package/lib/middleware/gitMiddleware.js +5 -1
  179. package/lib/middleware/notificationsMiddleware.js +5 -11
  180. package/lib/middleware/yargsChecksMiddleware.js +6 -9
  181. package/lib/npm.js +2 -2
  182. package/lib/oauth.js +5 -5
  183. package/lib/process.js +5 -4
  184. package/lib/projects/__tests__/AppDevModeInterface.test.js +87 -90
  185. package/lib/projects/__tests__/LocalDevProcess.test.js +231 -19
  186. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +89 -63
  187. package/lib/projects/__tests__/deploy.test.js +73 -8
  188. package/lib/projects/__tests__/localDevProjectHelpers.test.js +6 -2
  189. package/lib/projects/__tests__/platformVersion.test.js +8 -8
  190. package/lib/projects/__tests__/projects.test.js +12 -12
  191. package/lib/projects/__tests__/structure.test.js +3 -3
  192. package/lib/projects/__tests__/upload.test.d.ts +1 -0
  193. package/lib/projects/__tests__/upload.test.js +82 -0
  194. package/lib/projects/add/__tests__/legacyAddComponent.test.js +6 -6
  195. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +1 -0
  196. package/lib/projects/add/__tests__/{v3AddComponent.test.js → v2AddComponent.test.js} +39 -39
  197. package/lib/projects/add/{v3AddComponent.d.ts → v2AddComponent.d.ts} +1 -1
  198. package/lib/projects/add/{v3AddComponent.js → v2AddComponent.js} +5 -5
  199. package/lib/projects/create/__tests__/legacy.test.js +5 -5
  200. package/lib/projects/create/__tests__/v2.test.d.ts +1 -0
  201. package/lib/projects/create/__tests__/{v3.test.js → v2.test.js} +82 -7
  202. package/lib/projects/create/index.js +4 -4
  203. package/lib/projects/create/legacy.js +2 -2
  204. package/lib/projects/create/{v3.d.ts → v2.d.ts} +3 -3
  205. package/lib/projects/create/{v3.js → v2.js} +16 -13
  206. package/lib/projects/deploy.d.ts +1 -1
  207. package/lib/projects/deploy.js +2 -2
  208. package/lib/projects/localDev/AppDevModeInterface.d.ts +10 -1
  209. package/lib/projects/localDev/AppDevModeInterface.js +118 -89
  210. package/lib/projects/localDev/DevServerManager.d.ts +11 -29
  211. package/lib/projects/localDev/DevServerManager.js +19 -61
  212. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +40 -0
  213. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +120 -0
  214. package/lib/projects/localDev/LocalDevLogger.d.ts +4 -0
  215. package/lib/projects/localDev/LocalDevLogger.js +27 -6
  216. package/lib/projects/localDev/{LocalDevManager.js → LocalDevManager_DEPRECATED.js} +10 -11
  217. package/lib/projects/localDev/LocalDevProcess.d.ts +7 -5
  218. package/lib/projects/localDev/LocalDevProcess.js +93 -21
  219. package/lib/projects/localDev/LocalDevState.d.ts +12 -8
  220. package/lib/projects/localDev/LocalDevState.js +27 -17
  221. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +6 -1
  222. package/lib/projects/localDev/LocalDevWebsocketServer.js +94 -33
  223. package/lib/projects/localDev/helpers/account.d.ts +1 -1
  224. package/lib/projects/localDev/helpers/account.js +2 -2
  225. package/lib/projects/localDev/helpers/project.d.ts +3 -2
  226. package/lib/projects/localDev/helpers/project.js +49 -10
  227. package/lib/projects/localDev/localDevWebsocketServerUtils.d.ts +7 -0
  228. package/lib/projects/localDev/localDevWebsocketServerUtils.js +19 -0
  229. package/lib/projects/platformVersion.d.ts +1 -1
  230. package/lib/projects/platformVersion.js +1 -1
  231. package/lib/projects/pollProjectBuildAndDeploy.js +4 -4
  232. package/lib/projects/structure.js +6 -6
  233. package/lib/projects/upload.d.ts +1 -1
  234. package/lib/projects/upload.js +17 -8
  235. package/lib/projects/urls.d.ts +0 -1
  236. package/lib/projects/urls.js +0 -3
  237. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +1 -0
  238. package/lib/prompts/__tests__/projectAddPrompt.test.js +10 -10
  239. package/lib/prompts/accountNamePrompt.js +14 -19
  240. package/lib/prompts/accountsPrompt.js +2 -2
  241. package/lib/prompts/cmsFieldPrompt.js +2 -2
  242. package/lib/prompts/createApiSamplePrompt.js +5 -5
  243. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +10 -1
  244. package/lib/prompts/createFunctionPrompt.js +14 -14
  245. package/lib/prompts/createModulePrompt.js +9 -9
  246. package/lib/prompts/createTemplatePrompt.js +2 -2
  247. package/lib/prompts/downloadProjectPrompt.js +5 -8
  248. package/lib/prompts/installAppPrompt.d.ts +1 -6
  249. package/lib/prompts/installAppPrompt.js +1 -6
  250. package/lib/prompts/personalAccessKeyPrompt.js +3 -3
  251. package/lib/prompts/previewPrompt.js +6 -6
  252. package/lib/prompts/projectAddPrompt.d.ts +2 -2
  253. package/lib/prompts/projectAddPrompt.js +9 -2
  254. package/lib/prompts/projectDevTargetAccountPrompt.js +20 -32
  255. package/lib/prompts/projectNamePrompt.js +4 -8
  256. package/lib/prompts/projectsLogsPrompt.js +2 -4
  257. package/lib/prompts/promptUtils.js +30 -9
  258. package/lib/prompts/sandboxesPrompt.js +7 -7
  259. package/lib/prompts/secretPrompt.js +3 -3
  260. package/lib/prompts/selectAppPrompt.js +3 -3
  261. package/lib/prompts/selectHubDBTablePrompt.js +9 -13
  262. package/lib/prompts/selectProjectTemplatePrompt.js +2 -0
  263. package/lib/prompts/selectPublicAppForMigrationPrompt.js +15 -19
  264. package/lib/prompts/setAsDefaultAccountPrompt.js +4 -8
  265. package/lib/prompts/uploadPrompt.js +5 -5
  266. package/lib/sandboxSync.js +24 -41
  267. package/lib/sandboxes.js +19 -47
  268. package/lib/schema.js +3 -3
  269. package/lib/serverlessLogs.js +11 -13
  270. package/lib/theme/__tests__/migrate.test.d.ts +1 -0
  271. package/lib/theme/__tests__/migrate.test.js +233 -0
  272. package/lib/theme/migrate.d.ts +13 -0
  273. package/lib/theme/migrate.js +90 -0
  274. package/lib/ui/SpinniesManager.d.ts +2 -0
  275. package/lib/ui/SpinniesManager.js +112 -8
  276. package/lib/ui/boxen.js +1 -2
  277. package/lib/ui/git.js +13 -10
  278. package/lib/ui/index.d.ts +4 -0
  279. package/lib/ui/index.js +47 -38
  280. package/lib/ui/serverlessFunctionLogs.js +9 -7
  281. package/lib/ui/uiMessages.d.ts +72 -0
  282. package/lib/ui/uiMessages.js +75 -0
  283. package/lib/usageTracking.js +8 -8
  284. package/lib/validation.js +20 -23
  285. package/lib/yargsUtils.d.ts +1 -1
  286. package/lib/yargsUtils.js +12 -5
  287. package/mcp-server/tools/cms/HsCreateFunctionTool.js +1 -1
  288. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +2 -2
  289. package/mcp-server/tools/cms/HsCreateModuleTool.js +1 -1
  290. package/mcp-server/tools/cms/HsCreateTemplateTool.js +1 -1
  291. package/mcp-server/tools/cms/HsFunctionLogsTool.js +2 -2
  292. package/mcp-server/tools/cms/HsListFunctionsTool.js +1 -1
  293. package/mcp-server/tools/cms/HsListTool.js +1 -1
  294. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +1 -1
  295. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +1 -1
  296. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +1 -1
  297. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +2 -2
  298. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +1 -1
  299. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +1 -1
  300. package/mcp-server/tools/index.js +4 -0
  301. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +3 -3
  302. package/mcp-server/tools/project/AddFeatureToProjectTool.js +3 -3
  303. package/mcp-server/tools/project/CreateProjectTool.d.ts +3 -3
  304. package/mcp-server/tools/project/CreateProjectTool.js +5 -5
  305. package/mcp-server/tools/project/DeployProjectTool.js +1 -1
  306. package/mcp-server/tools/project/DocFetchTool.js +2 -2
  307. package/mcp-server/tools/project/DocsSearchTool.d.ts +4 -1
  308. package/mcp-server/tools/project/DocsSearchTool.js +7 -7
  309. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +23 -0
  310. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +68 -0
  311. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +11 -0
  312. package/mcp-server/tools/project/GetApplicationInfoTool.js +49 -0
  313. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +4 -1
  314. package/mcp-server/tools/project/GetConfigValuesTool.js +13 -7
  315. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +2 -2
  316. package/mcp-server/tools/project/GuidedWalkthroughTool.js +1 -1
  317. package/mcp-server/tools/project/UploadProjectTools.js +2 -2
  318. package/mcp-server/tools/project/ValidateProjectTool.js +1 -1
  319. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +1 -1
  320. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +2 -2
  321. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +1 -1
  322. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +2 -2
  323. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +14 -12
  324. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +1 -0
  325. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +169 -0
  326. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +1 -0
  327. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +115 -0
  328. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +9 -8
  329. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +1 -1
  330. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +1 -1
  331. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +1 -1
  332. package/mcp-server/tools/project/constants.d.ts +1 -1
  333. package/mcp-server/tools/project/constants.js +9 -3
  334. package/mcp-server/utils/__tests__/cliConfig.test.d.ts +1 -0
  335. package/mcp-server/utils/__tests__/cliConfig.test.js +110 -0
  336. package/mcp-server/utils/cliConfig.d.ts +1 -0
  337. package/mcp-server/utils/cliConfig.js +12 -0
  338. package/mcp-server/utils/toolUsageTracking.js +2 -2
  339. package/package.json +8 -12
  340. package/types/LocalDev.d.ts +19 -3
  341. package/ui/components/HorizontalSelectPrompt.js +1 -1
  342. package/ui/index.js +1 -1
  343. package/commands/getStartedV2.d.ts +0 -9
  344. package/commands/getStartedV2.js +0 -39
  345. package/lib/middleware/__test__/utils.test.js +0 -51
  346. package/lib/middleware/utils.d.ts +0 -8
  347. package/lib/middleware/utils.js +0 -14
  348. package/lib/projects/localDev/DevServerManagerV2.d.ts +0 -22
  349. package/lib/projects/localDev/DevServerManagerV2.js +0 -81
  350. package/ui/components/Ascii.d.ts +0 -10
  351. package/ui/components/Ascii.js +0 -11
  352. package/ui/views/GetStarted.d.ts +0 -7
  353. package/ui/views/GetStarted.js +0 -157
  354. /package/{lib/middleware/__test__/utils.test.d.ts → commands/project/__tests__/list.test.d.ts} +0 -0
  355. /package/{lib/projects/add/__tests__/v3AddComponent.test.d.ts → commands/project/__tests__/validate.test.d.ts} +0 -0
  356. /package/lib/{projects/create/__tests__/v3.test.d.ts → middleware/__test__/commandTargetingUtils.test.d.ts} +0 -0
  357. /package/lib/projects/localDev/{LocalDevManager.d.ts → LocalDevManager_DEPRECATED.d.ts} +0 -0
@@ -1,26 +1,24 @@
1
1
  import { accountNameExistsInConfig } from '@hubspot/local-dev-lib/config';
2
2
  import { promptUser } from './promptUtils.js';
3
- import { i18n } from '../lang.js';
3
+ import { lib } from '../../lang/en.js';
4
4
  import { HUBSPOT_ACCOUNT_TYPES } from '@hubspot/local-dev-lib/constants/config';
5
5
  export function getCliAccountNamePromptConfig(defaultName) {
6
6
  return {
7
7
  name: 'name',
8
- message: i18n(`lib.prompts.accountNamePrompt.enterAccountName`),
8
+ message: lib.prompts.accountNamePrompt.enterAccountName,
9
9
  default: defaultName,
10
10
  validate(val) {
11
11
  if (typeof val !== 'string') {
12
- return i18n(`lib.prompts.accountNamePrompt.errors.invalidName`);
12
+ return lib.prompts.accountNamePrompt.errors.invalidName;
13
13
  }
14
14
  else if (!val.length) {
15
- return i18n(`lib.prompts.accountNamePrompt.errors.nameRequired`);
15
+ return lib.prompts.accountNamePrompt.errors.nameRequired;
16
16
  }
17
17
  else if (val.indexOf(' ') >= 0) {
18
- return i18n(`lib.prompts.accountNamePrompt.errors.spacesInName`);
18
+ return lib.prompts.accountNamePrompt.errors.spacesInName;
19
19
  }
20
20
  return accountNameExistsInConfig(val)
21
- ? i18n(`lib.prompts.accountNamePrompt.errors.accountNameExists`, {
22
- name: val,
23
- })
21
+ ? lib.prompts.accountNamePrompt.errors.accountNameExists(val)
24
22
  : true;
25
23
  },
26
24
  };
@@ -37,14 +35,13 @@ export function hubspotAccountNamePrompt({ accountType, currentPortalCount = 0,
37
35
  let defaultName;
38
36
  if (isSandbox) {
39
37
  promptMessageString = isDevelopmentSandbox
40
- ? i18n(`lib.prompts.accountNamePrompt.enterDevelopmentSandboxName`)
41
- : i18n(`lib.prompts.accountNamePrompt.enterStandardSandboxName`);
38
+ ? lib.prompts.accountNamePrompt.enterDevelopmentSandboxName
39
+ : lib.prompts.accountNamePrompt.enterStandardSandboxName;
42
40
  }
43
41
  else if (isDeveloperTestAccount) {
44
- promptMessageString = i18n(`lib.prompts.accountNamePrompt.enterDeveloperTestAccountName`);
45
- defaultName = i18n(`lib.prompts.accountNamePrompt.developerTestAccountDefaultName`, {
46
- count: currentPortalCount + 1,
47
- });
42
+ promptMessageString =
43
+ lib.prompts.accountNamePrompt.enterDeveloperTestAccountName;
44
+ defaultName = lib.prompts.accountNamePrompt.developerTestAccountDefaultName(currentPortalCount + 1);
48
45
  }
49
46
  return promptUser([
50
47
  {
@@ -52,15 +49,13 @@ export function hubspotAccountNamePrompt({ accountType, currentPortalCount = 0,
52
49
  message: promptMessageString,
53
50
  validate(val) {
54
51
  if (typeof val !== 'string') {
55
- return i18n(`lib.prompts.accountNamePrompt.errors.invalidName`);
52
+ return lib.prompts.accountNamePrompt.errors.invalidName;
56
53
  }
57
54
  else if (!val.trim().length) {
58
- return i18n(`lib.prompts.accountNamePrompt.errors.nameRequired`);
55
+ return lib.prompts.accountNamePrompt.errors.nameRequired;
59
56
  }
60
57
  return accountNameExistsInConfig(val)
61
- ? i18n(`lib.prompts.accountNamePrompt.errors.accountNameExists`, {
62
- name: val,
63
- })
58
+ ? lib.prompts.accountNamePrompt.errors.accountNameExists(val)
64
59
  : true;
65
60
  },
66
61
  default: defaultName,
@@ -1,7 +1,7 @@
1
1
  import { getConfigDefaultAccount, getConfigAccounts, } from '@hubspot/local-dev-lib/config';
2
2
  import { getAccountIdentifier } from '@hubspot/local-dev-lib/config/getAccountIdentifier';
3
3
  import { promptUser } from './promptUtils.js';
4
- import { i18n } from '../lang.js';
4
+ import { commands } from '../../lang/en.js';
5
5
  import { uiAccountDescription } from '../ui/index.js';
6
6
  function mapAccountChoices(portals) {
7
7
  return (portals?.map(p => ({
@@ -17,7 +17,7 @@ export async function selectAccountFromConfig(prompt = '') {
17
17
  type: 'list',
18
18
  name: 'default',
19
19
  pageSize: 20,
20
- message: prompt || i18n(`commands.account.subcommands.use.promptMessage`),
20
+ message: prompt || commands.account.subcommands.use.promptMessage,
21
21
  choices: mapAccountChoices(accountsList),
22
22
  default: defaultAccount ?? undefined,
23
23
  },
@@ -1,7 +1,7 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs';
3
3
  import { promptUser } from './promptUtils.js';
4
- import { i18n } from '../lang.js';
4
+ import { lib } from '../../lang/en.js';
5
5
  import { escapeRegExp } from '@hubspot/local-dev-lib/escapeRegExp';
6
6
  const FIELDS_FILES = ['fields.json', 'fields.js', 'fields.cjs', 'fields.mjs'];
7
7
  export async function fieldsJsPrompt(filePath, projectDir, skipFiles = []) {
@@ -26,7 +26,7 @@ export async function fieldsJsPrompt(filePath, projectDir, skipFiles = []) {
26
26
  }));
27
27
  const promptVal = await promptUser([
28
28
  {
29
- message: i18n(`lib.prompts.uploadPrompt.fieldsPrompt`, { dir: fileDir }),
29
+ message: lib.prompts.uploadPrompt.fieldsPrompt(fileDir),
30
30
  type: 'list',
31
31
  name: 'filePathChoice',
32
32
  choices: selection,
@@ -1,10 +1,10 @@
1
1
  import { promptUser } from './promptUtils.js';
2
- import { i18n } from '../lang.js';
2
+ import { lib } from '../../lang/en.js';
3
3
  function getSampleTypesPrompt(choices) {
4
4
  return {
5
5
  type: 'rawlist',
6
6
  name: 'sampleType',
7
- message: i18n(`lib.prompts.createApiSamplePrompt.selectApiSampleApp`),
7
+ message: lib.prompts.createApiSamplePrompt.selectApiSampleApp,
8
8
  choices: choices.map(choice => ({
9
9
  name: `${choice.name} - ${choice.description}`,
10
10
  value: choice.id,
@@ -15,7 +15,7 @@ function getSampleTypesPrompt(choices) {
15
15
  resolve(true);
16
16
  }
17
17
  else {
18
- reject(i18n(`lib.prompts.createApiSamplePrompt.errors.apiSampleAppRequired`));
18
+ reject(lib.prompts.createApiSamplePrompt.errors.apiSampleAppRequired);
19
19
  }
20
20
  });
21
21
  },
@@ -25,7 +25,7 @@ function getLanguagesPrompt(choices) {
25
25
  return {
26
26
  type: 'rawlist',
27
27
  name: 'sampleLanguage',
28
- message: i18n(`lib.prompts.createApiSamplePrompt.selectLanguage`),
28
+ message: lib.prompts.createApiSamplePrompt.selectLanguage,
29
29
  choices: choices.map(choice => ({
30
30
  name: choice,
31
31
  value: choice,
@@ -35,7 +35,7 @@ function getLanguagesPrompt(choices) {
35
35
  if (input && input.length > 0) {
36
36
  resolve(true);
37
37
  }
38
- reject(i18n(`lib.prompts.createApiSamplePrompt.errors.languageRequired`));
38
+ reject(lib.prompts.createApiSamplePrompt.errors.languageRequired);
39
39
  });
40
40
  },
41
41
  };
@@ -94,7 +94,16 @@ export async function createDeveloperTestAccountConfigPrompt(args = {}, supportF
94
94
  },
95
95
  ],
96
96
  });
97
- if (useDefaultAccountLevelsPromptResult.useDefaultAccountLevels === 'manual') {
97
+ if (useDefaultAccountLevelsPromptResult.useDefaultAccountLevels === 'default') {
98
+ accountLevelsArray = [
99
+ { hub: 'MARKETING', tier: AccountTiers.ENTERPRISE },
100
+ { hub: 'OPS', tier: AccountTiers.ENTERPRISE },
101
+ { hub: 'SERVICE', tier: AccountTiers.ENTERPRISE },
102
+ { hub: 'SALES', tier: AccountTiers.ENTERPRISE },
103
+ { hub: 'CONTENT', tier: AccountTiers.ENTERPRISE },
104
+ ];
105
+ }
106
+ else {
98
107
  const accountLevelsPromptResult = await promptUser({
99
108
  name: 'testAccountLevels',
100
109
  message: lib.prompts.createDeveloperTestAccountConfigPrompt.tiersPrompt,
@@ -1,33 +1,33 @@
1
1
  import { promptUser } from './promptUtils.js';
2
- import { i18n } from '../lang.js';
2
+ import { lib } from '../../lang/en.js';
3
3
  const FUNCTIONS_FOLDER_PROMPT = {
4
4
  name: 'functionsFolder',
5
- message: i18n(`lib.prompts.createFunctionPrompt.enterFolder`),
5
+ message: lib.prompts.createFunctionPrompt.enterFolder,
6
6
  validate(val) {
7
7
  if (typeof val !== 'string') {
8
- return i18n(`lib.prompts.createFunctionPrompt.errors.invalid`);
8
+ return lib.prompts.createFunctionPrompt.errors.invalid;
9
9
  }
10
10
  else if (!val.length) {
11
- return i18n(`lib.prompts.createFunctionPrompt.errors.blank`);
11
+ return lib.prompts.createFunctionPrompt.errors.blank;
12
12
  }
13
13
  else if (val.indexOf(' ') >= 0) {
14
- return i18n(`lib.prompts.createFunctionPrompt.errors.space`);
14
+ return lib.prompts.createFunctionPrompt.errors.space;
15
15
  }
16
16
  return true;
17
17
  },
18
18
  };
19
19
  const FUNCTION_FILENAME_PROMPT = {
20
20
  name: 'filename',
21
- message: i18n(`lib.prompts.createFunctionPrompt.enterFilename`),
21
+ message: lib.prompts.createFunctionPrompt.enterFilename,
22
22
  validate(val) {
23
23
  if (typeof val !== 'string') {
24
- return i18n(`lib.prompts.createFunctionPrompt.errors.invalid`);
24
+ return lib.prompts.createFunctionPrompt.errors.invalid;
25
25
  }
26
26
  else if (!val.length) {
27
- return i18n(`lib.prompts.createFunctionPrompt.errors.blank`);
27
+ return lib.prompts.createFunctionPrompt.errors.blank;
28
28
  }
29
29
  else if (val.indexOf(' ') >= 0) {
30
- return i18n(`lib.prompts.createFunctionPrompt.errors.space`);
30
+ return lib.prompts.createFunctionPrompt.errors.space;
31
31
  }
32
32
  return true;
33
33
  },
@@ -35,22 +35,22 @@ const FUNCTION_FILENAME_PROMPT = {
35
35
  const ENDPOINT_METHOD_PROMPT = {
36
36
  type: 'list',
37
37
  name: 'endpointMethod',
38
- message: i18n(`lib.prompts.createFunctionPrompt.selectEndpointMethod`),
38
+ message: lib.prompts.createFunctionPrompt.selectEndpointMethod,
39
39
  default: 'GET',
40
40
  choices: ['DELETE', 'GET', 'PATCH', 'POST', 'PUT'],
41
41
  };
42
42
  const ENDPOINT_PATH_PROMPT = {
43
43
  name: 'endpointPath',
44
- message: i18n(`lib.prompts.createFunctionPrompt.enterEndpointPath`),
44
+ message: lib.prompts.createFunctionPrompt.enterEndpointPath,
45
45
  validate(val) {
46
46
  if (typeof val !== 'string') {
47
- return i18n(`lib.prompts.createFunctionPrompt.errors.invalid`);
47
+ return lib.prompts.createFunctionPrompt.errors.invalid;
48
48
  }
49
49
  else if (!val.length) {
50
- return i18n(`lib.prompts.createFunctionPrompt.errors.blank`);
50
+ return lib.prompts.createFunctionPrompt.errors.blank;
51
51
  }
52
52
  else if (val.indexOf(' ') >= 0) {
53
- return i18n(`lib.prompts.createFunctionPrompt.errors.space`);
53
+ return lib.prompts.createFunctionPrompt.errors.space;
54
54
  }
55
55
  return true;
56
56
  },
@@ -1,14 +1,14 @@
1
1
  import { promptUser } from './promptUtils.js';
2
- import { i18n } from '../lang.js';
2
+ import { lib } from '../../lang/en.js';
3
3
  const MODULE_LABEL_PROMPT = {
4
4
  name: 'moduleLabel',
5
- message: i18n(`lib.prompts.createModulePrompt.enterLabel`),
5
+ message: lib.prompts.createModulePrompt.enterLabel,
6
6
  validate(val) {
7
7
  if (typeof val !== 'string') {
8
- return i18n(`lib.prompts.createModulePrompt.errors.invalidLabel`);
8
+ return lib.prompts.createModulePrompt.errors.invalidLabel;
9
9
  }
10
10
  else if (!val.length) {
11
- return i18n(`lib.prompts.createModulePrompt.errors.labelRequired`);
11
+ return lib.prompts.createModulePrompt.errors.labelRequired;
12
12
  }
13
13
  return true;
14
14
  },
@@ -16,13 +16,13 @@ const MODULE_LABEL_PROMPT = {
16
16
  const REACT_TYPE_PROMPT = {
17
17
  type: 'confirm',
18
18
  name: 'reactType',
19
- message: i18n(`lib.prompts.createModulePrompt.selectReactType`),
19
+ message: lib.prompts.createModulePrompt.selectReactType,
20
20
  default: false,
21
21
  };
22
22
  const CONTENT_TYPES_PROMPT = {
23
23
  type: 'checkbox',
24
24
  name: 'contentTypes',
25
- message: i18n(`lib.prompts.createModulePrompt.selectContentType`),
25
+ message: lib.prompts.createModulePrompt.selectContentType,
26
26
  choices: [
27
27
  { name: 'Any', value: 'ANY', checked: true },
28
28
  { name: 'Landing page', value: 'LANDING_PAGE' },
@@ -42,20 +42,20 @@ const CONTENT_TYPES_PROMPT = {
42
42
  if (input.length > 0) {
43
43
  resolve(true);
44
44
  }
45
- reject(i18n(`lib.prompts.createModulePrompt.errors.contentTypeRequired`));
45
+ reject(lib.prompts.createModulePrompt.errors.contentTypeRequired);
46
46
  });
47
47
  },
48
48
  };
49
49
  const GLOBAL_PROMPT = {
50
50
  type: 'confirm',
51
51
  name: 'global',
52
- message: i18n(`lib.prompts.createModulePrompt.confirmGlobal`),
52
+ message: lib.prompts.createModulePrompt.confirmGlobal,
53
53
  default: false,
54
54
  };
55
55
  const AVAILABLE_FOR_NEW_CONTENT = {
56
56
  type: 'confirm',
57
57
  name: 'availableForNewContent',
58
- message: i18n(`lib.prompts.createModulePrompt.availableForNewContent`),
58
+ message: lib.prompts.createModulePrompt.availableForNewContent,
59
59
  default: true,
60
60
  };
61
61
  export function createModulePrompt(commandArgs = {}) {
@@ -1,5 +1,5 @@
1
1
  import { promptUser } from './promptUtils.js';
2
- import { i18n } from '../lang.js';
2
+ import { lib } from '../../lang/en.js';
3
3
  const templateTypeChoices = [
4
4
  { name: 'page', value: 'page-template' },
5
5
  { name: 'email', value: 'email-template' },
@@ -13,7 +13,7 @@ const templateTypeChoices = [
13
13
  const TEMPLATE_TYPE_PROMPT = {
14
14
  type: 'list',
15
15
  name: 'templateType',
16
- message: i18n(`lib.prompts.createTemplatePrompt.selectTemplate`),
16
+ message: lib.prompts.createTemplatePrompt.selectTemplate,
17
17
  default: 'page',
18
18
  choices: templateTypeChoices,
19
19
  };
@@ -2,16 +2,16 @@ import { promptUser } from './promptUtils.js';
2
2
  import { getAccountId } from '@hubspot/local-dev-lib/config';
3
3
  import { fetchProjects } from '@hubspot/local-dev-lib/api/projects';
4
4
  import { logError, ApiErrorContext } from '../errorHandlers/index.js';
5
- import { logger } from '@hubspot/local-dev-lib/logger';
5
+ import { uiLogger } from '../ui/logger.js';
6
6
  import { EXIT_CODES } from '../enums/exitCodes.js';
7
- import { i18n } from '../lang.js';
7
+ import { lib } from '../../lang/en.js';
8
8
  async function createProjectsList(accountId) {
9
9
  try {
10
10
  if (accountId) {
11
11
  const { data: projects } = await fetchProjects(accountId);
12
12
  return projects.results;
13
13
  }
14
- logger.error(i18n(`lib.prompts.downloadProjectPrompt.errors.accountIdRequired`));
14
+ uiLogger.error(lib.prompts.downloadProjectPrompt.errors.accountIdRequired);
15
15
  process.exit(EXIT_CODES.ERROR);
16
16
  }
17
17
  catch (e) {
@@ -28,11 +28,8 @@ export async function downloadProjectPrompt(promptOptions) {
28
28
  message: () => {
29
29
  return promptOptions.project &&
30
30
  !projectsList.find(p => p.name === promptOptions.name)
31
- ? i18n(`lib.prompts.downloadProjectPrompt.errors.projectNotFound`, {
32
- projectName: promptOptions.project,
33
- accountId: accountId || '',
34
- })
35
- : i18n(`lib.prompts.downloadProjectPrompt.selectProject`);
31
+ ? lib.prompts.downloadProjectPrompt.errors.projectNotFound(promptOptions.project, accountId || 0)
32
+ : lib.prompts.downloadProjectPrompt.selectProject;
36
33
  },
37
34
  when: !promptOptions.project ||
38
35
  !projectsList.find(p => p.name === promptOptions.project),
@@ -1,7 +1,2 @@
1
- export declare function installAppBrowserPrompt(installUrl: string, isReinstall?: boolean, staticAuthInstallOptions?: {
2
- testingAccountId: number;
3
- projectAccountId: number;
4
- projectName: string;
5
- appUid: string;
6
- }): Promise<void>;
1
+ export declare function installAppBrowserPrompt(installUrl: string, isReinstall?: boolean): Promise<void>;
7
2
  export declare function installAppAutoPrompt(): Promise<boolean>;
@@ -3,7 +3,7 @@ import { promptUser } from './promptUtils.js';
3
3
  import { EXIT_CODES } from '../enums/exitCodes.js';
4
4
  import { lib } from '../../lang/en.js';
5
5
  import { uiLogger } from '../ui/logger.js';
6
- export async function installAppBrowserPrompt(installUrl, isReinstall = false, staticAuthInstallOptions) {
6
+ export async function installAppBrowserPrompt(installUrl, isReinstall = false) {
7
7
  uiLogger.log('');
8
8
  if (isReinstall) {
9
9
  uiLogger.log(lib.prompts.installAppPrompt.reinstallExplanation);
@@ -11,11 +11,6 @@ export async function installAppBrowserPrompt(installUrl, isReinstall = false, s
11
11
  else {
12
12
  uiLogger.log(lib.prompts.installAppPrompt.explanation);
13
13
  }
14
- if (staticAuthInstallOptions) {
15
- const { testingAccountId, projectAccountId, projectName, appUid } = staticAuthInstallOptions;
16
- uiLogger.log(lib.prompts.installAppPrompt.staticAuthExplanation(projectAccountId, testingAccountId, projectName, appUid));
17
- uiLogger.log('');
18
- }
19
14
  const { shouldOpenBrowser } = await promptUser({
20
15
  name: 'shouldOpenBrowser',
21
16
  type: 'confirm',
@@ -2,7 +2,7 @@ import open from 'open';
2
2
  import { OAUTH_SCOPES, DEFAULT_OAUTH_SCOPES, } from '@hubspot/local-dev-lib/constants/auth';
3
3
  import { deleteEmptyConfigFile } from '@hubspot/local-dev-lib/config';
4
4
  import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
5
- import { logger } from '@hubspot/local-dev-lib/logger';
5
+ import { uiLogger } from '../ui/logger.js';
6
6
  import { promptUser } from './promptUtils.js';
7
7
  import { getCliAccountNamePromptConfig, } from './accountNamePrompt.js';
8
8
  import { uiInfoSection } from '../ui/index.js';
@@ -17,7 +17,7 @@ export async function personalAccessKeyPrompt({ env, account, }) {
17
17
  let url = `${websiteOrigin}/l/personal-access-key`;
18
18
  if (process.env.BROWSER !== 'none') {
19
19
  uiInfoSection(lib.prompts.personalAccessKeyPrompt.personalAccessKeySetupTitle, () => {
20
- logger.log(lib.prompts.personalAccessKeyPrompt.personalAccessKeyBrowserOpenPrep);
20
+ uiLogger.log(lib.prompts.personalAccessKeyPrompt.personalAccessKeyBrowserOpenPrep);
21
21
  });
22
22
  if (account) {
23
23
  url = `${websiteOrigin}/personal-access-key/${account}`;
@@ -33,7 +33,7 @@ export async function personalAccessKeyPrompt({ env, account, }) {
33
33
  lib.prompts.personalAccessKeyPrompt.personalAccessKeyPromptChoices
34
34
  .OPEN_BROWSER) {
35
35
  open(url, { url: true });
36
- logger.log(lib.prompts.personalAccessKeyPrompt.logs.openingWebBrowser(url));
36
+ uiLogger.log(lib.prompts.personalAccessKeyPrompt.logs.openingWebBrowser(url));
37
37
  }
38
38
  }
39
39
  const { personalAccessKey } = await promptUser(PERSONAL_ACCESS_KEY);
@@ -1,29 +1,29 @@
1
1
  import path from 'path';
2
2
  import { getCwd } from '@hubspot/local-dev-lib/path';
3
3
  import { promptUser } from './promptUtils.js';
4
- import { i18n } from '../lang.js';
4
+ import { lib } from '../../lang/en.js';
5
5
  export async function previewPrompt(promptOptions = {}) {
6
6
  return promptUser([
7
7
  {
8
8
  name: 'src',
9
- message: i18n(`lib.prompts.previewPrompt.enterSrc`),
9
+ message: lib.prompts.previewPrompt.enterSrc,
10
10
  when: !promptOptions.src,
11
11
  default: '.',
12
12
  validate: (input) => {
13
13
  if (!input) {
14
- return i18n(`lib.prompts.previewPrompt.errors.srcRequired`);
14
+ return lib.prompts.previewPrompt.errors.srcRequired;
15
15
  }
16
16
  return true;
17
17
  },
18
18
  },
19
19
  {
20
20
  name: 'dest',
21
- message: i18n(`lib.prompts.previewPrompt.enterDest`),
21
+ message: lib.prompts.previewPrompt.enterDest,
22
22
  when: !promptOptions.dest,
23
23
  default: path.basename(getCwd()),
24
24
  validate: (input) => {
25
25
  if (!input) {
26
- return i18n(`lib.prompts.previewPrompt.errors.destRequired`);
26
+ return lib.prompts.previewPrompt.errors.destRequired;
27
27
  }
28
28
  return true;
29
29
  },
@@ -34,7 +34,7 @@ export async function previewProjectPrompt(themeComponents) {
34
34
  return promptUser([
35
35
  {
36
36
  name: 'themeComponentPath',
37
- message: i18n(`lib.prompts.previewPrompt.themeProjectSelect`),
37
+ message: lib.prompts.previewPrompt.themeProjectSelect,
38
38
  type: 'list',
39
39
  choices: themeComponents.map(t => {
40
40
  const themeName = path.basename(t.path);
@@ -4,12 +4,12 @@ type ProjectAddPromptResponse = {
4
4
  componentTemplate: ComponentTemplate;
5
5
  name: string;
6
6
  };
7
- type ProjectAddPromptResponseV3 = {
7
+ type ProjectAddPromptResponseV2 = {
8
8
  componentTemplate: ComponentTemplate[];
9
9
  };
10
10
  export declare function projectAddPrompt(components: ComponentTemplate[], promptOptions?: {
11
11
  name?: string;
12
12
  type?: string;
13
13
  }): Promise<ProjectAddPromptResponse>;
14
- export declare function projectAddPromptV3(components: (ComponentTemplateChoice | Separator)[], selectedFeatures: string[] | undefined): Promise<ProjectAddPromptResponseV3>;
14
+ export declare function projectAddPromptV2(components: (ComponentTemplateChoice | Separator)[], selectedFeatures: string[] | undefined): Promise<ProjectAddPromptResponseV2>;
15
15
  export {};
@@ -1,6 +1,7 @@
1
1
  import { Separator } from '@inquirer/prompts';
2
2
  import { promptUser } from './promptUtils.js';
3
3
  import { lib } from '../../lang/en.js';
4
+ import { uiLogger } from '../ui/logger.js';
4
5
  function findComponentByPathOrLabel(components, componentPathOrLabel) {
5
6
  return components.find(c => c.path === componentPathOrLabel || c.label === componentPathOrLabel);
6
7
  }
@@ -44,7 +45,7 @@ export async function projectAddPrompt(components, promptOptions = {}) {
44
45
  }
45
46
  return result;
46
47
  }
47
- export async function projectAddPromptV3(components, selectedFeatures) {
48
+ export async function projectAddPromptV2(components, selectedFeatures) {
48
49
  const selectedComponents = [];
49
50
  if (selectedFeatures) {
50
51
  components.forEach(template => {
@@ -59,13 +60,19 @@ export async function projectAddPromptV3(components, selectedFeatures) {
59
60
  }
60
61
  });
61
62
  }
63
+ if (!components?.length) {
64
+ uiLogger.error(lib.prompts.projectAddPrompt.errors.noSelectableChoices);
65
+ uiLogger.log('');
66
+ return { componentTemplate: [] };
67
+ }
62
68
  const result = await promptUser([
63
69
  {
64
70
  name: 'componentTemplate',
65
- message: lib.prompts.projectAddPrompt.selectType,
71
+ message: lib.prompts.projectAddPrompt.selectFeatures,
66
72
  when: !selectedFeatures && selectedComponents.length === 0,
67
73
  type: 'checkbox',
68
74
  choices: components,
75
+ pageSize: components.length,
69
76
  },
70
77
  ]);
71
78
  if (!result.componentTemplate) {
@@ -2,11 +2,11 @@ import { getAccountId } from '@hubspot/local-dev-lib/config';
2
2
  import { getSandboxUsageLimits } from '@hubspot/local-dev-lib/api/sandboxHubs';
3
3
  import { HUBSPOT_ACCOUNT_TYPES, HUBSPOT_ACCOUNT_TYPE_STRINGS, } from '@hubspot/local-dev-lib/constants/config';
4
4
  import { getAccountIdentifier } from '@hubspot/local-dev-lib/config/getAccountIdentifier';
5
- import { logger } from '@hubspot/local-dev-lib/logger';
6
5
  import { fetchDeveloperTestAccounts } from '@hubspot/local-dev-lib/api/developerTestAccounts';
7
6
  import { promptUser } from './promptUtils.js';
8
- import { i18n } from '../lang.js';
9
- import { uiAccountDescription, uiCommandReference } from '../ui/index.js';
7
+ import { lib } from '../../lang/en.js';
8
+ import { uiLogger } from '../ui/logger.js';
9
+ import { uiAccountDescription } from '../ui/index.js';
10
10
  import { isSandbox } from '../accountTypes.js';
11
11
  import { EXIT_CODES } from '../enums/exitCodes.js';
12
12
  function mapNestedAccount(accountConfig) {
@@ -36,12 +36,12 @@ export async function selectSandboxTargetAccountPrompt(accounts, defaultAccountC
36
36
  sandboxUsage = data.usage;
37
37
  }
38
38
  else {
39
- logger.error(i18n(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`));
39
+ uiLogger.error(lib.prompts.projectDevTargetAccountPrompt.noAccountId);
40
40
  process.exit(EXIT_CODES.ERROR);
41
41
  }
42
42
  }
43
43
  catch (err) {
44
- logger.debug('Unable to fetch sandbox usage limits: ', err);
44
+ uiLogger.debug('Unable to fetch sandbox usage limits: ', err);
45
45
  }
46
46
  const sandboxAccounts = accounts
47
47
  .reverse()
@@ -49,15 +49,11 @@ export async function selectSandboxTargetAccountPrompt(accounts, defaultAccountC
49
49
  let disabledMessage = false;
50
50
  if (sandboxUsage['DEVELOPER'] && sandboxUsage['DEVELOPER'].available === 0) {
51
51
  if (sandboxAccounts.length < sandboxUsage['DEVELOPER'].limit) {
52
- disabledMessage = i18n(`lib.prompts.projectDevTargetAccountPrompt.sandboxLimitWithSuggestion`, {
53
- authCommand: uiCommandReference('hs auth'),
54
- limit: sandboxUsage['DEVELOPER'].limit,
55
- });
52
+ disabledMessage =
53
+ lib.prompts.projectDevTargetAccountPrompt.sandboxLimitWithSuggestion(sandboxUsage['DEVELOPER'].limit);
56
54
  }
57
55
  else {
58
- disabledMessage = i18n(`lib.prompts.projectDevTargetAccountPrompt.sandboxLimit`, {
59
- limit: sandboxUsage['DEVELOPER'].limit,
60
- });
56
+ disabledMessage = lib.prompts.projectDevTargetAccountPrompt.sandboxLimit(sandboxUsage['DEVELOPER'].limit);
61
57
  }
62
58
  }
63
59
  // Order choices by Developer Sandbox -> Standard Sandbox
@@ -69,7 +65,7 @@ export async function selectSandboxTargetAccountPrompt(accounts, defaultAccountC
69
65
  .filter(a => a.accountType === HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX)
70
66
  .map(mapNestedAccount),
71
67
  {
72
- name: i18n(`lib.prompts.projectDevTargetAccountPrompt.createNewSandboxOption`),
68
+ name: lib.prompts.projectDevTargetAccountPrompt.createNewSandboxOption,
73
69
  value: {
74
70
  targetAccountId: null,
75
71
  createNestedAccount: true,
@@ -77,7 +73,8 @@ export async function selectSandboxTargetAccountPrompt(accounts, defaultAccountC
77
73
  disabled: disabledMessage,
78
74
  },
79
75
  {
80
- name: i18n(`lib.prompts.projectDevTargetAccountPrompt.chooseDefaultAccountOption`),
76
+ name: lib.prompts.projectDevTargetAccountPrompt
77
+ .chooseDefaultAccountOption,
81
78
  value: {
82
79
  targetAccountId: defaultAccountId,
83
80
  createNestedAccount: false,
@@ -95,21 +92,19 @@ export async function selectDeveloperTestTargetAccountPrompt(accounts, defaultAc
95
92
  devTestAccountsResponse = data;
96
93
  }
97
94
  else {
98
- logger.error(i18n(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`));
95
+ uiLogger.error(lib.prompts.projectDevTargetAccountPrompt.noAccountId);
99
96
  process.exit(EXIT_CODES.ERROR);
100
97
  }
101
98
  }
102
99
  catch (err) {
103
- logger.debug('Unable to fetch developer test account usage limits: ', err);
100
+ uiLogger.debug('Unable to fetch developer test account usage limits: ', err);
104
101
  }
105
102
  let disabledMessage = false;
106
103
  if (devTestAccountsResponse &&
107
104
  devTestAccountsResponse.results.length >=
108
105
  devTestAccountsResponse.maxTestPortals) {
109
- disabledMessage = i18n(`lib.prompts.projectDevTargetAccountPrompt.developerTestAccountLimit`, {
110
- authCommand: uiCommandReference('hs auth'),
111
- limit: devTestAccountsResponse.maxTestPortals,
112
- });
106
+ disabledMessage =
107
+ lib.prompts.projectDevTargetAccountPrompt.developerTestAccountLimit(devTestAccountsResponse.maxTestPortals);
113
108
  }
114
109
  const devTestAccounts = [];
115
110
  if (devTestAccountsResponse && devTestAccountsResponse.results) {
@@ -130,7 +125,8 @@ export async function selectDeveloperTestTargetAccountPrompt(accounts, defaultAc
130
125
  const choices = [
131
126
  ...devTestAccounts,
132
127
  {
133
- name: i18n(`lib.prompts.projectDevTargetAccountPrompt.createNewDeveloperTestAccountOption`),
128
+ name: lib.prompts.projectDevTargetAccountPrompt
129
+ .createNewDeveloperTestAccountOption,
134
130
  value: {
135
131
  targetAccountId: null,
136
132
  createNestedAccount: true,
@@ -146,10 +142,7 @@ async function selectTargetAccountPrompt(defaultAccountId, accountType, choices)
146
142
  {
147
143
  name: 'targetAccountInfo',
148
144
  type: 'list',
149
- message: i18n(`lib.prompts.projectDevTargetAccountPrompt.promptMessage`, {
150
- accountIdentifier: uiAccountDescription(accountId),
151
- accountType,
152
- }),
145
+ message: lib.prompts.projectDevTargetAccountPrompt.promptMessage(accountType, uiAccountDescription(accountId)),
153
146
  choices,
154
147
  loop: false,
155
148
  },
@@ -161,10 +154,7 @@ export async function confirmDefaultAccountPrompt(accountName, accountType) {
161
154
  {
162
155
  name: 'useDefaultAccount',
163
156
  type: 'confirm',
164
- message: i18n(`lib.prompts.projectDevTargetAccountPrompt.confirmDefaultAccount`, {
165
- accountName,
166
- accountType,
167
- }),
157
+ message: lib.prompts.projectDevTargetAccountPrompt.confirmDefaultAccount(accountName, accountType),
168
158
  },
169
159
  ]);
170
160
  return useDefaultAccount;
@@ -174,9 +164,7 @@ export async function confirmUseExistingDeveloperTestAccountPrompt(account) {
174
164
  {
175
165
  name: 'confirmUseExistingDeveloperTestAccount',
176
166
  type: 'confirm',
177
- message: i18n(`lib.prompts.projectDevTargetAccountPrompt.confirmUseExistingDeveloperTestAccount`, {
178
- accountName: getNonConfigDeveloperTestAccountName(account),
179
- }),
167
+ message: lib.prompts.projectDevTargetAccountPrompt.confirmUseExistingDeveloperTestAccount(getNonConfigDeveloperTestAccountName(account)),
180
168
  },
181
169
  ]);
182
170
  return confirmUseExistingDeveloperTestAccount;