@hubspot/cli 7.5.10-experimental.0 → 7.6.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/bin/cli.js +102 -95
  2. package/commands/account/auth.d.ts +5 -7
  3. package/commands/account/auth.js +74 -87
  4. package/commands/account/clean.d.ts +3 -7
  5. package/commands/account/clean.js +16 -9
  6. package/commands/account/createOverride.d.ts +3 -7
  7. package/commands/account/createOverride.js +23 -6
  8. package/commands/account/info.d.ts +3 -7
  9. package/commands/account/info.js +13 -5
  10. package/commands/account/list.d.ts +3 -7
  11. package/commands/account/list.js +15 -8
  12. package/commands/account/remove.d.ts +3 -7
  13. package/commands/account/remove.js +21 -9
  14. package/commands/account/removeOverride.d.ts +3 -7
  15. package/commands/account/removeOverride.js +23 -6
  16. package/commands/account/rename.d.ts +3 -7
  17. package/commands/account/rename.js +16 -9
  18. package/commands/account/use.d.ts +5 -9
  19. package/commands/account/use.js +14 -6
  20. package/commands/account.d.ts +3 -4
  21. package/commands/account.js +33 -58
  22. package/commands/app/migrate.d.ts +1 -2
  23. package/commands/app/migrate.js +7 -8
  24. package/commands/app/secret/add.d.ts +7 -0
  25. package/commands/app/secret/add.js +64 -0
  26. package/commands/app/secret/delete.d.ts +8 -0
  27. package/commands/app/secret/delete.js +87 -0
  28. package/commands/app/secret/list.d.ts +6 -0
  29. package/commands/app/secret/list.js +64 -0
  30. package/commands/app/secret/update.d.ts +7 -0
  31. package/commands/app/secret/update.js +77 -0
  32. package/commands/app/secret.d.ts +3 -0
  33. package/commands/app/secret.js +30 -0
  34. package/commands/app.d.ts +2 -5
  35. package/commands/app.js +10 -8
  36. package/commands/auth.d.ts +5 -7
  37. package/commands/auth.js +30 -29
  38. package/commands/cms/convertFields.d.ts +7 -1
  39. package/commands/cms/convertFields.js +57 -41
  40. package/commands/cms/getReactModule.d.ts +7 -1
  41. package/commands/cms/getReactModule.js +52 -34
  42. package/commands/cms/lighthouseScore.d.ts +8 -1
  43. package/commands/cms/lighthouseScore.js +129 -100
  44. package/commands/cms.d.ts +3 -1
  45. package/commands/cms.js +22 -15
  46. package/commands/completion.d.ts +3 -1
  47. package/commands/completion.js +23 -12
  48. package/commands/config/migrate.d.ts +3 -7
  49. package/commands/config/migrate.js +37 -46
  50. package/commands/config/set.d.ts +5 -6
  51. package/commands/config/set.js +38 -14
  52. package/commands/config.d.ts +3 -4
  53. package/commands/config.js +18 -44
  54. package/commands/create/api-sample.d.ts +3 -1
  55. package/commands/create/api-sample.js +34 -38
  56. package/commands/create/app.d.ts +3 -1
  57. package/commands/create/app.js +9 -7
  58. package/commands/create/function.d.ts +3 -1
  59. package/commands/create/function.js +11 -10
  60. package/commands/create/index.d.ts +5 -1
  61. package/commands/create/index.js +23 -11
  62. package/commands/create/module.d.ts +3 -1
  63. package/commands/create/module.js +14 -13
  64. package/commands/create/react-app.d.ts +3 -1
  65. package/commands/create/react-app.js +10 -7
  66. package/commands/create/template.d.ts +3 -1
  67. package/commands/create/template.js +14 -14
  68. package/commands/create/vue-app.d.ts +3 -1
  69. package/commands/create/vue-app.js +10 -7
  70. package/commands/create/webpack-serverless.d.ts +3 -1
  71. package/commands/create/webpack-serverless.js +10 -7
  72. package/commands/create/website-theme.d.ts +3 -1
  73. package/commands/create/website-theme.js +10 -9
  74. package/commands/create.d.ts +4 -24
  75. package/commands/create.js +62 -74
  76. package/commands/customObject/create.d.ts +4 -9
  77. package/commands/customObject/create.js +17 -10
  78. package/commands/customObject/schema/create.d.ts +4 -9
  79. package/commands/customObject/schema/create.js +18 -11
  80. package/commands/customObject/schema/delete.d.ts +4 -9
  81. package/commands/customObject/schema/delete.js +17 -10
  82. package/commands/customObject/schema/fetch-all.d.ts +4 -9
  83. package/commands/customObject/schema/fetch-all.js +17 -10
  84. package/commands/customObject/schema/fetch.d.ts +4 -9
  85. package/commands/customObject/schema/fetch.js +17 -10
  86. package/commands/customObject/schema/list.d.ts +4 -8
  87. package/commands/customObject/schema/list.js +17 -10
  88. package/commands/customObject/schema/update.d.ts +4 -9
  89. package/commands/customObject/schema/update.js +18 -11
  90. package/commands/customObject/schema.d.ts +3 -5
  91. package/commands/customObject/schema.js +27 -54
  92. package/commands/customObject.d.ts +3 -4
  93. package/commands/customObject.js +18 -45
  94. package/commands/doctor.d.ts +6 -8
  95. package/commands/doctor.js +30 -21
  96. package/commands/feedback.d.ts +4 -1
  97. package/commands/feedback.js +38 -47
  98. package/commands/fetch.d.ts +12 -1
  99. package/commands/fetch.js +49 -33
  100. package/commands/filemanager/fetch.d.ts +4 -9
  101. package/commands/filemanager/fetch.js +18 -11
  102. package/commands/filemanager/upload.d.ts +4 -9
  103. package/commands/filemanager/upload.js +17 -11
  104. package/commands/filemanager.d.ts +3 -4
  105. package/commands/filemanager.js +18 -41
  106. package/commands/function/deploy.d.ts +6 -1
  107. package/commands/function/deploy.js +70 -50
  108. package/commands/function/list.d.ts +6 -1
  109. package/commands/function/list.js +44 -32
  110. package/commands/function/server.d.ts +10 -1
  111. package/commands/function/server.js +49 -38
  112. package/commands/function.d.ts +5 -1
  113. package/commands/function.js +22 -10
  114. package/commands/getStarted.d.ts +9 -0
  115. package/commands/getStarted.js +227 -0
  116. package/commands/hubdb/clear.d.ts +4 -9
  117. package/commands/hubdb/clear.js +17 -10
  118. package/commands/hubdb/create.d.ts +4 -9
  119. package/commands/hubdb/create.js +17 -10
  120. package/commands/hubdb/delete.d.ts +4 -9
  121. package/commands/hubdb/delete.js +17 -10
  122. package/commands/hubdb/fetch.d.ts +4 -9
  123. package/commands/hubdb/fetch.js +17 -10
  124. package/commands/hubdb/list.d.ts +4 -0
  125. package/commands/hubdb/list.js +83 -0
  126. package/commands/hubdb.d.ts +3 -2
  127. package/commands/hubdb.js +23 -45
  128. package/commands/init.d.ts +3 -7
  129. package/commands/init.js +17 -8
  130. package/commands/lint.d.ts +6 -4
  131. package/commands/lint.js +42 -43
  132. package/commands/list.d.ts +3 -7
  133. package/commands/list.js +17 -11
  134. package/commands/logs.d.ts +10 -1
  135. package/commands/logs.js +53 -44
  136. package/commands/mcp/setup.d.ts +7 -0
  137. package/commands/mcp/setup.js +52 -0
  138. package/commands/mcp/start.d.ts +3 -0
  139. package/commands/mcp/start.js +77 -0
  140. package/commands/mcp.d.ts +3 -0
  141. package/commands/mcp.js +26 -0
  142. package/commands/module/marketplace-validate.d.ts +6 -1
  143. package/commands/module/marketplace-validate.js +39 -29
  144. package/commands/module.d.ts +3 -1
  145. package/commands/module.js +23 -10
  146. package/commands/mv.d.ts +3 -7
  147. package/commands/mv.js +17 -11
  148. package/commands/open.d.ts +3 -7
  149. package/commands/open.js +17 -11
  150. package/commands/project/add.d.ts +5 -2
  151. package/commands/project/add.js +43 -80
  152. package/commands/project/cloneApp.d.ts +1 -1
  153. package/commands/project/cloneApp.js +2 -2
  154. package/commands/project/create.d.ts +2 -8
  155. package/commands/project/create.js +84 -55
  156. package/commands/project/deploy.d.ts +2 -0
  157. package/commands/project/deploy.js +67 -13
  158. package/commands/project/dev/deprecatedFlow.d.ts +8 -2
  159. package/commands/project/dev/deprecatedFlow.js +9 -1
  160. package/commands/project/dev/index.d.ts +1 -4
  161. package/commands/project/dev/index.js +74 -72
  162. package/commands/project/dev/unifiedFlow.d.ts +10 -2
  163. package/commands/project/dev/unifiedFlow.js +74 -40
  164. package/commands/project/listBuilds.js +2 -5
  165. package/commands/project/migrate.d.ts +1 -0
  166. package/commands/project/migrate.js +7 -2
  167. package/commands/project/profile/add.js +102 -64
  168. package/commands/project/profile/delete.d.ts +6 -0
  169. package/commands/project/profile/{remove.js → delete.js} +38 -28
  170. package/commands/project/profile.js +2 -2
  171. package/commands/project/upload.js +5 -53
  172. package/commands/project/validate.d.ts +6 -0
  173. package/commands/project/validate.js +82 -0
  174. package/commands/project.js +2 -2
  175. package/commands/remove.d.ts +3 -7
  176. package/commands/remove.js +22 -22
  177. package/commands/sandbox/create.d.ts +4 -9
  178. package/commands/sandbox/create.js +18 -11
  179. package/commands/sandbox/delete.d.ts +4 -9
  180. package/commands/sandbox/delete.js +18 -11
  181. package/commands/sandbox.d.ts +3 -4
  182. package/commands/sandbox.js +18 -43
  183. package/commands/secret/addSecret.d.ts +4 -9
  184. package/commands/secret/addSecret.js +17 -10
  185. package/commands/secret/deleteSecret.d.ts +4 -9
  186. package/commands/secret/deleteSecret.js +17 -10
  187. package/commands/secret/listSecret.d.ts +4 -9
  188. package/commands/secret/listSecret.js +17 -10
  189. package/commands/secret/updateSecret.d.ts +4 -9
  190. package/commands/secret/updateSecret.js +17 -10
  191. package/commands/secret.d.ts +3 -4
  192. package/commands/secret.js +23 -48
  193. package/commands/testAccount/create.d.ts +6 -0
  194. package/commands/testAccount/create.js +100 -0
  195. package/commands/testAccount/createConfig.d.ts +10 -0
  196. package/commands/testAccount/createConfig.js +98 -0
  197. package/commands/testAccount/delete.d.ts +6 -0
  198. package/commands/testAccount/delete.js +48 -0
  199. package/commands/testAccount.d.ts +3 -0
  200. package/commands/testAccount.js +28 -0
  201. package/commands/theme/generate-selectors.d.ts +3 -7
  202. package/commands/theme/generate-selectors.js +20 -15
  203. package/commands/theme/marketplace-validate.d.ts +4 -9
  204. package/commands/theme/marketplace-validate.js +22 -17
  205. package/commands/theme/preview.d.ts +4 -9
  206. package/commands/theme/preview.js +32 -26
  207. package/commands/theme.d.ts +3 -4
  208. package/commands/theme.js +22 -47
  209. package/commands/upload.d.ts +12 -1
  210. package/commands/upload.js +116 -134
  211. package/commands/watch.d.ts +14 -1
  212. package/commands/watch.js +74 -75
  213. package/lang/en.d.ts +1092 -683
  214. package/lang/en.js +898 -494
  215. package/lang/en.lyaml +28 -225
  216. package/lib/accountTypes.js +1 -2
  217. package/lib/app/migrate.d.ts +23 -0
  218. package/lib/app/migrate.js +34 -12
  219. package/lib/app/migrate_legacy.js +7 -7
  220. package/lib/app/urls.d.ts +16 -0
  221. package/lib/app/urls.js +16 -0
  222. package/lib/commonOpts.d.ts +1 -3
  223. package/lib/commonOpts.js +1 -1
  224. package/lib/configMigrate.d.ts +2 -2
  225. package/lib/configMigrate.js +34 -55
  226. package/lib/configOptions.d.ts +4 -0
  227. package/lib/configOptions.js +41 -46
  228. package/lib/constants.d.ts +29 -0
  229. package/lib/constants.js +30 -1
  230. package/lib/dependencyManagement.d.ts +0 -5
  231. package/lib/dependencyManagement.js +13 -39
  232. package/lib/doctor/Doctor.js +3 -2
  233. package/lib/errorHandlers/index.js +7 -0
  234. package/lib/errorHandlers/suppressError.js +12 -19
  235. package/lib/filesystem.d.ts +1 -1
  236. package/lib/generateSelectors.js +3 -5
  237. package/lib/interpolation.d.ts +2 -3
  238. package/lib/lang.d.ts +2 -3
  239. package/lib/marketplaceValidate.d.ts +12 -2
  240. package/lib/marketplaceValidate.js +22 -29
  241. package/lib/mcp/setup.d.ts +21 -0
  242. package/lib/mcp/setup.js +218 -0
  243. package/lib/middleware/autoUpdateMiddleware.d.ts +1 -0
  244. package/lib/middleware/autoUpdateMiddleware.js +89 -0
  245. package/lib/middleware/configMiddleware.js +23 -0
  246. package/lib/middleware/fireAlarmMiddleware.d.ts +2 -2
  247. package/lib/middleware/fireAlarmMiddleware.js +12 -24
  248. package/lib/npm.d.ts +9 -0
  249. package/lib/npm.js +36 -0
  250. package/lib/projectProfiles.d.ts +7 -0
  251. package/lib/projectProfiles.js +83 -0
  252. package/lib/projects/add/legacyAddComponent.d.ts +5 -0
  253. package/lib/projects/add/legacyAddComponent.js +48 -0
  254. package/lib/projects/add/v3AddComponent.d.ts +8 -0
  255. package/lib/projects/add/v3AddComponent.js +85 -0
  256. package/lib/projects/buildAndDeploy.js +18 -3
  257. package/lib/projects/components.d.ts +2 -0
  258. package/lib/projects/components.js +82 -0
  259. package/lib/projects/create/index.d.ts +23 -0
  260. package/lib/projects/create/index.js +33 -0
  261. package/lib/projects/create/legacy.d.ts +6 -0
  262. package/lib/projects/{create.js → create/legacy.js} +20 -11
  263. package/lib/projects/create/v3.d.ts +27 -0
  264. package/lib/projects/create/v3.js +158 -0
  265. package/lib/projects/localDev/AppDevModeInterface.d.ts +30 -0
  266. package/lib/projects/localDev/AppDevModeInterface.js +215 -0
  267. package/lib/projects/localDev/DevServerManager.js +4 -3
  268. package/lib/projects/localDev/DevServerManagerV2.d.ts +11 -22
  269. package/lib/projects/localDev/DevServerManagerV2.js +21 -17
  270. package/lib/projects/localDev/LocalDevLogger.d.ts +30 -0
  271. package/lib/projects/localDev/LocalDevLogger.js +159 -0
  272. package/lib/projects/localDev/LocalDevManager.js +12 -5
  273. package/lib/projects/localDev/LocalDevProcess.d.ts +34 -0
  274. package/lib/projects/localDev/LocalDevProcess.js +201 -0
  275. package/lib/projects/localDev/LocalDevState.d.ts +50 -0
  276. package/lib/projects/localDev/LocalDevState.js +119 -0
  277. package/lib/projects/localDev/LocalDevWatcher.d.ts +10 -0
  278. package/lib/projects/localDev/LocalDevWatcher.js +53 -0
  279. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +20 -0
  280. package/lib/projects/localDev/LocalDevWebsocketServer.js +131 -0
  281. package/lib/projects/localDev/helpers.d.ts +2 -1
  282. package/lib/projects/localDev/helpers.js +30 -1
  283. package/lib/projects/upload.d.ts +3 -0
  284. package/lib/projects/upload.js +59 -19
  285. package/lib/projects/urls.d.ts +3 -0
  286. package/lib/projects/urls.js +17 -1
  287. package/lib/prompts/createApiSamplePrompt.d.ts +2 -10
  288. package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +17 -0
  289. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +96 -0
  290. package/lib/prompts/createProjectPrompt.d.ts +14 -5
  291. package/lib/prompts/createProjectPrompt.js +38 -13
  292. package/lib/prompts/createTemplatePrompt.d.ts +22 -4
  293. package/lib/prompts/installAppPrompt.d.ts +2 -0
  294. package/lib/prompts/installAppPrompt.js +45 -0
  295. package/lib/prompts/personalAccessKeyPrompt.js +35 -24
  296. package/lib/prompts/projectAddPrompt.d.ts +5 -1
  297. package/lib/prompts/projectAddPrompt.js +35 -7
  298. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
  299. package/lib/prompts/projectDevTargetAccountPrompt.js +6 -6
  300. package/lib/prompts/promptUtils.d.ts +4 -1
  301. package/lib/prompts/promptUtils.js +5 -1
  302. package/lib/prompts/selectAppPrompt.d.ts +2 -0
  303. package/lib/prompts/selectAppPrompt.js +40 -0
  304. package/lib/prompts/{selectPublicAppPrompt.d.ts → selectPublicAppForMigrationPrompt.d.ts} +1 -1
  305. package/lib/prompts/{selectPublicAppPrompt.js → selectPublicAppForMigrationPrompt.js} +8 -8
  306. package/lib/prompts/setAsDefaultAccountPrompt.js +10 -0
  307. package/lib/testUtils.d.ts +3 -3
  308. package/lib/testUtils.js +8 -9
  309. package/lib/ui/boxen.d.ts +5 -0
  310. package/lib/ui/boxen.js +30 -0
  311. package/lib/ui/index.js +4 -1
  312. package/lib/upload.d.ts +1 -1
  313. package/lib/yargsUtils.d.ts +4 -0
  314. package/lib/yargsUtils.js +6 -0
  315. package/mcp-server/server.d.ts +1 -0
  316. package/mcp-server/server.js +18 -0
  317. package/mcp-server/tools/index.d.ts +2 -0
  318. package/mcp-server/tools/index.js +19 -0
  319. package/mcp-server/tools/project/AddFeatureToProject.d.ts +29 -0
  320. package/mcp-server/tools/project/AddFeatureToProject.js +85 -0
  321. package/mcp-server/tools/project/CreateProjectTool.d.ts +35 -0
  322. package/mcp-server/tools/project/CreateProjectTool.js +104 -0
  323. package/mcp-server/tools/project/DeployProject.d.ts +20 -0
  324. package/mcp-server/tools/project/DeployProject.js +50 -0
  325. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +17 -0
  326. package/mcp-server/tools/project/GuidedWalkthroughTool.js +58 -0
  327. package/mcp-server/tools/project/UploadProjectTools.d.ts +17 -0
  328. package/mcp-server/tools/project/UploadProjectTools.js +35 -0
  329. package/mcp-server/tools/project/ValidateProjectTool.d.ts +17 -0
  330. package/mcp-server/tools/project/ValidateProjectTool.js +35 -0
  331. package/mcp-server/tools/project/constants.d.ts +3 -0
  332. package/mcp-server/tools/project/constants.js +13 -0
  333. package/mcp-server/types.d.ts +14 -0
  334. package/mcp-server/types.js +17 -0
  335. package/mcp-server/utils/command.d.ts +3 -0
  336. package/mcp-server/utils/command.js +16 -0
  337. package/mcp-server/utils/content.d.ts +3 -0
  338. package/mcp-server/utils/content.js +21 -0
  339. package/mcp-server/utils/project.d.ts +5 -0
  340. package/mcp-server/utils/project.js +17 -0
  341. package/package.json +24 -16
  342. package/types/Cms.d.ts +30 -0
  343. package/types/Cms.js +2 -0
  344. package/types/LocalDev.d.ts +35 -0
  345. package/types/LocalDev.js +2 -0
  346. package/types/Projects.d.ts +19 -2
  347. package/types/Prompts.d.ts +0 -7
  348. package/types/Yargs.d.ts +7 -0
  349. package/commands/project/profile/remove.d.ts +0 -6
  350. package/lib/projects/create.d.ts +0 -5
  351. package/lib/projects/localDev/LocalDevManagerV2.d.ts +0 -64
  352. package/lib/projects/localDev/LocalDevManagerV2.js +0 -345
  353. package/lib/prompts/installPublicAppPrompt.d.ts +0 -1
  354. package/lib/prompts/installPublicAppPrompt.js +0 -41
@@ -8,43 +8,58 @@ const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const path_2 = require("@hubspot/local-dev-lib/path");
10
10
  const promptUtils_1 = require("./promptUtils");
11
- const lang_1 = require("../lang");
12
11
  const constants_1 = require("../constants");
12
+ const en_1 = require("../../lang/en");
13
13
  function validateProjectDirectory(input) {
14
14
  if (!input) {
15
- return (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.errors.destRequired`);
15
+ return en_1.lib.prompts.createProjectPrompt.errors.destRequired;
16
16
  }
17
17
  if (fs_1.default.existsSync(path_1.default.resolve((0, path_2.getCwd)(), path_1.default.join(input, constants_1.PROJECT_CONFIG_FILE)))) {
18
- return (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.errors.invalidDest`);
18
+ return en_1.lib.prompts.createProjectPrompt.errors.invalidDest;
19
19
  }
20
20
  if (!(0, path_2.isValidPath)(input)) {
21
- return (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.errors.invalidCharacters`);
21
+ return en_1.lib.prompts.createProjectPrompt.errors.invalidCharacters;
22
22
  }
23
23
  return true;
24
24
  }
25
25
  function findTemplateByNameOrLabel(projectTemplates, templateNameOrLabel) {
26
26
  return projectTemplates.find(t => t.name === templateNameOrLabel || t.label === templateNameOrLabel);
27
27
  }
28
- async function createProjectPrompt(promptOptions, projectTemplates) {
28
+ async function createProjectPrompt(promptOptions, projectTemplates, componentTemplates) {
29
29
  const createProjectFromTemplate = !!projectTemplates && projectTemplates.length > 0;
30
+ const createProjectFromComponents = Array.isArray(componentTemplates) && componentTemplates?.length > 0;
31
+ const selectedComponents = [];
32
+ if (createProjectFromComponents && promptOptions.features) {
33
+ componentTemplates.forEach(template => {
34
+ if (!template.value) {
35
+ return;
36
+ }
37
+ if (promptOptions.features?.includes(template.value.type)) {
38
+ if (template.disabled) {
39
+ throw new Error(`Cannot create project with template '${template.value.type}'. Reasons: ${template.disabled}`);
40
+ }
41
+ selectedComponents.push(template.value);
42
+ }
43
+ });
44
+ }
30
45
  const providedTemplateIsValid = createProjectFromTemplate &&
31
46
  !!promptOptions.template &&
32
47
  !!findTemplateByNameOrLabel(projectTemplates, promptOptions.template);
33
48
  const result = await (0, promptUtils_1.promptUser)([
34
49
  {
35
50
  name: 'name',
36
- message: (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.enterName`),
51
+ message: en_1.lib.prompts.createProjectPrompt.enterName,
37
52
  when: !promptOptions.name,
38
53
  validate: (input) => {
39
54
  if (!input) {
40
- return (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.errors.nameRequired`);
55
+ return en_1.lib.prompts.createProjectPrompt.errors.nameRequired;
41
56
  }
42
57
  return true;
43
58
  },
44
59
  },
45
60
  {
46
61
  name: 'dest',
47
- message: (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.enterDest`),
62
+ message: en_1.lib.prompts.createProjectPrompt.enterDest,
48
63
  when: !promptOptions.dest,
49
64
  default: answers => {
50
65
  const projectName = (0, path_2.sanitizeFileName)(promptOptions.name || answers.name);
@@ -59,10 +74,8 @@ async function createProjectPrompt(promptOptions, projectTemplates) {
59
74
  name: 'projectTemplate',
60
75
  message: () => {
61
76
  return promptOptions.template && !providedTemplateIsValid
62
- ? (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.errors.invalidTemplate`, {
63
- template: promptOptions.template,
64
- })
65
- : (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.selectTemplate`);
77
+ ? en_1.lib.prompts.createProjectPrompt.errors.invalidTemplate(promptOptions.template)
78
+ : en_1.lib.prompts.createProjectPrompt.selectTemplate;
66
79
  },
67
80
  when: createProjectFromTemplate && !providedTemplateIsValid,
68
81
  type: 'list',
@@ -75,6 +88,15 @@ async function createProjectPrompt(promptOptions, projectTemplates) {
75
88
  })
76
89
  : undefined,
77
90
  },
91
+ {
92
+ name: 'componentTemplates',
93
+ message: en_1.lib.prompts.createProjectPrompt.features,
94
+ when: !promptOptions.features &&
95
+ createProjectFromComponents &&
96
+ selectedComponents.length === 0,
97
+ type: 'checkbox',
98
+ choices: componentTemplates,
99
+ },
78
100
  ]);
79
101
  if (!result.name) {
80
102
  result.name = promptOptions.name;
@@ -82,12 +104,15 @@ async function createProjectPrompt(promptOptions, projectTemplates) {
82
104
  if (!result.dest) {
83
105
  result.dest = promptOptions.dest;
84
106
  }
107
+ if (!result.componentTemplates) {
108
+ result.componentTemplates = selectedComponents;
109
+ }
85
110
  if (providedTemplateIsValid) {
86
111
  result.projectTemplate = findTemplateByNameOrLabel(projectTemplates, promptOptions.template);
87
112
  }
88
113
  if (projectTemplates && projectTemplates.length > 0) {
89
114
  if (!result.projectTemplate) {
90
- throw new Error((0, lang_1.i18n)(`lib.prompts.createProjectPrompt.errors.projectTemplateRequired`));
115
+ throw new Error(en_1.lib.prompts.createProjectPrompt.errors.projectTemplateRequired);
91
116
  }
92
117
  return result;
93
118
  }
@@ -1,7 +1,25 @@
1
- declare const templateTypeChoices: {
2
- name: string;
3
- value: string;
4
- }[];
1
+ declare const templateTypeChoices: [{
2
+ readonly name: "page";
3
+ readonly value: "page-template";
4
+ }, {
5
+ readonly name: "email";
6
+ readonly value: "email-template";
7
+ }, {
8
+ readonly name: "partial";
9
+ readonly value: "partial";
10
+ }, {
11
+ readonly name: "global partial";
12
+ readonly value: "global-partial";
13
+ }, {
14
+ readonly name: "blog listing";
15
+ readonly value: "blog-listing-template";
16
+ }, {
17
+ readonly name: "blog post";
18
+ readonly value: "blog-post-template";
19
+ }, {
20
+ readonly name: "search results";
21
+ readonly value: "search-template";
22
+ }];
5
23
  interface CreateTemplatePromptResponse {
6
24
  templateType: (typeof templateTypeChoices)[number]['value'];
7
25
  }
@@ -0,0 +1,2 @@
1
+ export declare function installAppBrowserPrompt(installUrl: string, isReinstall?: boolean): Promise<void>;
2
+ export declare function installAppAutoPrompt(): Promise<boolean>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.installAppBrowserPrompt = installAppBrowserPrompt;
7
+ exports.installAppAutoPrompt = installAppAutoPrompt;
8
+ const open_1 = __importDefault(require("open"));
9
+ const promptUtils_1 = require("./promptUtils");
10
+ const exitCodes_1 = require("../enums/exitCodes");
11
+ const en_1 = require("../../lang/en");
12
+ const logger_1 = require("../ui/logger");
13
+ async function installAppBrowserPrompt(installUrl, isReinstall = false) {
14
+ logger_1.uiLogger.log('');
15
+ if (isReinstall) {
16
+ logger_1.uiLogger.log(en_1.lib.prompts.installAppPrompt.reinstallExplanation);
17
+ }
18
+ else {
19
+ logger_1.uiLogger.log(en_1.lib.prompts.installAppPrompt.explanation);
20
+ }
21
+ const { shouldOpenBrowser } = await (0, promptUtils_1.promptUser)({
22
+ name: 'shouldOpenBrowser',
23
+ type: 'confirm',
24
+ message: isReinstall
25
+ ? en_1.lib.prompts.installAppPrompt.reinstallPrompt
26
+ : en_1.lib.prompts.installAppPrompt.prompt,
27
+ });
28
+ if (!isReinstall && !shouldOpenBrowser) {
29
+ logger_1.uiLogger.log(en_1.lib.prompts.installAppPrompt.decline);
30
+ process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
31
+ }
32
+ else if (!shouldOpenBrowser) {
33
+ return;
34
+ }
35
+ (0, open_1.default)(installUrl);
36
+ }
37
+ async function installAppAutoPrompt() {
38
+ logger_1.uiLogger.log('');
39
+ const { shouldInstall } = await (0, promptUtils_1.promptUser)({
40
+ name: 'shouldInstall',
41
+ type: 'confirm',
42
+ message: en_1.lib.prompts.installAppPrompt.autoPrompt,
43
+ });
44
+ return shouldInstall;
45
+ }
@@ -12,9 +12,9 @@ const urls_1 = require("@hubspot/local-dev-lib/urls");
12
12
  const logger_1 = require("@hubspot/local-dev-lib/logger");
13
13
  const promptUtils_1 = require("./promptUtils");
14
14
  const accountNamePrompt_1 = require("./accountNamePrompt");
15
- const lang_1 = require("../lang");
16
15
  const ui_1 = require("../ui");
17
16
  const exitCodes_1 = require("../enums/exitCodes");
17
+ const en_1 = require("../../lang/en");
18
18
  /**
19
19
  * Displays notification to user that we are about to open the browser,
20
20
  * then opens their browser to the personal-access-key shortlink
@@ -23,24 +23,26 @@ async function personalAccessKeyPrompt({ env, account, }) {
23
23
  const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
24
24
  let url = `${websiteOrigin}/l/personal-access-key`;
25
25
  if (process.env.BROWSER !== 'none') {
26
- (0, ui_1.uiInfoSection)((0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.personalAccessKeySetupTitle`), () => {
27
- logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.personalAccessKeyBrowserOpenPrep`));
26
+ (0, ui_1.uiInfoSection)(en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeySetupTitle, () => {
27
+ logger_1.logger.log(en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeyBrowserOpenPrep);
28
28
  });
29
29
  if (account) {
30
30
  url = `${websiteOrigin}/personal-access-key/${account}`;
31
31
  }
32
- const { personalAcessKeyBrowserOpenPrep: shouldOpen } = await (0, promptUtils_1.promptUser)([
32
+ const { personalAcessKeyBrowserOpenPrep: choice } = await (0, promptUtils_1.promptUser)([
33
33
  PERSONAL_ACCESS_KEY_BROWSER_OPEN_PREP,
34
34
  ]);
35
- if (shouldOpen) {
36
- (0, open_1.default)(url, { url: true });
37
- }
38
- else {
35
+ if (!choice) {
39
36
  (0, config_1.deleteEmptyConfigFile)();
40
37
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
41
38
  }
39
+ if (choice ===
40
+ en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeyPromptChoices
41
+ .OPEN_BROWSER) {
42
+ (0, open_1.default)(url, { url: true });
43
+ logger_1.logger.log(en_1.lib.prompts.personalAccessKeyPrompt.logs.openingWebBrowser(url));
44
+ }
42
45
  }
43
- logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.logs.openingWebBrowser`, { url }));
44
46
  const { personalAccessKey } = await (0, promptUtils_1.promptUser)(PERSONAL_ACCESS_KEY);
45
47
  return {
46
48
  personalAccessKey,
@@ -49,52 +51,59 @@ async function personalAccessKeyPrompt({ env, account, }) {
49
51
  }
50
52
  const ACCOUNT_ID = {
51
53
  name: 'accountId',
52
- message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.enterAccountId`),
54
+ message: en_1.lib.prompts.personalAccessKeyPrompt.enterAccountId,
53
55
  type: 'number',
54
56
  validate(val) {
55
57
  if (!Number.isNaN(val) && val !== undefined && val > 0) {
56
58
  return true;
57
59
  }
58
- return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidAccountId`);
60
+ return en_1.lib.prompts.personalAccessKeyPrompt.errors.invalidAccountId;
59
61
  },
60
62
  };
61
63
  const CLIENT_ID = {
62
64
  name: 'clientId',
63
- message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.enterClientId`),
65
+ message: en_1.lib.prompts.personalAccessKeyPrompt.enterClientId,
64
66
  validate(val) {
65
67
  if (typeof val !== 'string') {
66
- return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientId`);
68
+ return en_1.lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientId;
67
69
  }
68
70
  else if (val.length !== 36) {
69
- return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientIdLength`);
71
+ return en_1.lib.prompts.personalAccessKeyPrompt.errors
72
+ .invalidOauthClientIdLength;
70
73
  }
71
74
  return true;
72
75
  },
73
76
  };
74
77
  const CLIENT_SECRET = {
75
78
  name: 'clientSecret',
76
- message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.enterClientSecret`),
79
+ message: en_1.lib.prompts.personalAccessKeyPrompt.enterClientSecret,
77
80
  validate(val) {
78
81
  if (typeof val !== 'string') {
79
- return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientSecret`);
82
+ return en_1.lib.prompts.personalAccessKeyPrompt.errors
83
+ .invalidOauthClientSecret;
80
84
  }
81
85
  else if (val.length !== 36) {
82
- return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientSecretLength`);
86
+ return en_1.lib.prompts.personalAccessKeyPrompt.errors
87
+ .invalidOauthClientSecretLength;
83
88
  }
84
89
  else if (val[0] === '*') {
85
- return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientSecretCopy`);
90
+ return en_1.lib.prompts.personalAccessKeyPrompt.errors
91
+ .invalidOauthClientSecretCopy;
86
92
  }
87
93
  return true;
88
94
  },
89
95
  };
90
96
  const PERSONAL_ACCESS_KEY_BROWSER_OPEN_PREP = {
91
97
  name: 'personalAcessKeyBrowserOpenPrep',
92
- type: 'confirm',
93
- message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.personalAccessKeyBrowserOpenPrompt`),
98
+ type: 'list',
99
+ message: 'Choose your preferred method of authentication',
100
+ choices: Object.values(en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeyPromptChoices),
101
+ default: en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeyPromptChoices
102
+ .OPEN_BROWSER,
94
103
  };
95
104
  const PERSONAL_ACCESS_KEY = {
96
105
  name: 'personalAccessKey',
97
- message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.enterPersonalAccessKey`),
106
+ message: en_1.lib.prompts.personalAccessKeyPrompt.enterPersonalAccessKey,
98
107
  transformer: (val) => {
99
108
  if (!val)
100
109
  return val;
@@ -106,10 +115,12 @@ const PERSONAL_ACCESS_KEY = {
106
115
  },
107
116
  validate(val) {
108
117
  if (!val || typeof val !== 'string') {
109
- return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidPersonalAccessKey`);
118
+ return en_1.lib.prompts.personalAccessKeyPrompt.errors
119
+ .invalidPersonalAccessKey;
110
120
  }
111
121
  else if (val[0] === '•') {
112
- return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidPersonalAccessKeyCopy`);
122
+ return en_1.lib.prompts.personalAccessKeyPrompt.errors
123
+ .invalidPersonalAccessKeyCopy;
113
124
  }
114
125
  return true;
115
126
  },
@@ -117,7 +128,7 @@ const PERSONAL_ACCESS_KEY = {
117
128
  const SCOPES = {
118
129
  type: 'checkbox',
119
130
  name: 'scopes',
120
- message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.selectScopes`),
131
+ message: en_1.lib.prompts.personalAccessKeyPrompt.selectScopes,
121
132
  default: [...auth_1.DEFAULT_OAUTH_SCOPES],
122
133
  choices: [...auth_1.OAUTH_SCOPES],
123
134
  };
@@ -1,10 +1,14 @@
1
- import { ComponentTemplate } from '../../types/Projects';
1
+ import { ComponentTemplate, ComponentTemplateChoice } from '../../types/Projects';
2
2
  type ProjectAddPromptResponse = {
3
3
  componentTemplate: ComponentTemplate;
4
4
  name: string;
5
5
  };
6
+ type ProjectAddPromptResponseV3 = {
7
+ componentTemplate: ComponentTemplate[];
8
+ };
6
9
  export declare function projectAddPrompt(components: ComponentTemplate[], promptOptions?: {
7
10
  name?: string;
8
11
  type?: string;
9
12
  }): Promise<ProjectAddPromptResponse>;
13
+ export declare function projectAddPromptV3(components: ComponentTemplateChoice[], selectedFeatures: string[] | undefined): Promise<ProjectAddPromptResponseV3>;
10
14
  export {};
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectAddPrompt = projectAddPrompt;
4
+ exports.projectAddPromptV3 = projectAddPromptV3;
4
5
  const promptUtils_1 = require("./promptUtils");
5
- const lang_1 = require("../lang");
6
+ const en_1 = require("../../lang/en");
6
7
  function findComponentByPathOrLabel(components, componentPathOrLabel) {
7
8
  return components.find(c => c.path === componentPathOrLabel || c.label === componentPathOrLabel);
8
9
  }
@@ -14,10 +15,8 @@ async function projectAddPrompt(components, promptOptions = {}) {
14
15
  name: 'componentTemplate',
15
16
  message: () => {
16
17
  return promptOptions.type && !providedTypeIsValid
17
- ? (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.errors.invalidType`, {
18
- type: promptOptions.type,
19
- })
20
- : (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.selectType`);
18
+ ? en_1.lib.prompts.projectAddPrompt.errors.invalidType(promptOptions.type)
19
+ : en_1.lib.prompts.projectAddPrompt.selectType;
21
20
  },
22
21
  when: !providedTypeIsValid,
23
22
  type: 'list',
@@ -30,11 +29,11 @@ async function projectAddPrompt(components, promptOptions = {}) {
30
29
  },
31
30
  {
32
31
  name: 'name',
33
- message: (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.enterName`),
32
+ message: en_1.lib.prompts.projectAddPrompt.enterName,
34
33
  when: !promptOptions.name,
35
34
  validate: (input) => {
36
35
  if (!input) {
37
- return (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.errors.nameRequired`);
36
+ return en_1.lib.prompts.projectAddPrompt.errors.nameRequired;
38
37
  }
39
38
  return true;
40
39
  },
@@ -48,3 +47,32 @@ async function projectAddPrompt(components, promptOptions = {}) {
48
47
  }
49
48
  return result;
50
49
  }
50
+ async function projectAddPromptV3(components, selectedFeatures) {
51
+ const selectedComponents = [];
52
+ if (selectedFeatures) {
53
+ components.forEach(template => {
54
+ if (!template.value) {
55
+ return;
56
+ }
57
+ if (selectedFeatures?.includes(template.value.type)) {
58
+ if (template.disabled) {
59
+ throw new Error(en_1.lib.prompts.projectAddPrompt.errors.cannotAddFeature(template.value.type, template.disabled));
60
+ }
61
+ selectedComponents.push(template.value);
62
+ }
63
+ });
64
+ }
65
+ const result = await (0, promptUtils_1.promptUser)([
66
+ {
67
+ name: 'componentTemplate',
68
+ message: en_1.lib.prompts.projectAddPrompt.selectType,
69
+ when: !selectedFeatures && selectedComponents.length === 0,
70
+ type: 'checkbox',
71
+ choices: components,
72
+ },
73
+ ]);
74
+ if (!result.componentTemplate) {
75
+ result.componentTemplate = selectedComponents;
76
+ }
77
+ return result;
78
+ }
@@ -1,6 +1,11 @@
1
1
  import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
2
2
  import { DeveloperTestAccount } from '@hubspot/local-dev-lib/types/developerTestAccounts';
3
- import { ProjectDevTargetAccountPromptResponse } from '../../types/Prompts';
3
+ export type ProjectDevTargetAccountPromptResponse = {
4
+ targetAccountId: number | null;
5
+ createNestedAccount: boolean;
6
+ parentAccountId?: number | null;
7
+ notInConfigAccount?: DeveloperTestAccount | null;
8
+ };
4
9
  export declare function selectSandboxTargetAccountPrompt(accounts: CLIAccount[], defaultAccountConfig: CLIAccount): Promise<ProjectDevTargetAccountPromptResponse>;
5
10
  export declare function selectDeveloperTestTargetAccountPrompt(accounts: CLIAccount[], defaultAccountConfig: CLIAccount): Promise<ProjectDevTargetAccountPromptResponse>;
6
11
  export declare function confirmDefaultAccountPrompt(accountName: string, accountType: string): Promise<boolean>;
@@ -4,16 +4,16 @@ exports.selectSandboxTargetAccountPrompt = selectSandboxTargetAccountPrompt;
4
4
  exports.selectDeveloperTestTargetAccountPrompt = selectDeveloperTestTargetAccountPrompt;
5
5
  exports.confirmDefaultAccountPrompt = confirmDefaultAccountPrompt;
6
6
  exports.confirmUseExistingDeveloperTestAccountPrompt = confirmUseExistingDeveloperTestAccountPrompt;
7
- const promptUtils_1 = require("./promptUtils");
8
- const lang_1 = require("../lang");
9
- const ui_1 = require("../ui");
10
- const accountTypes_1 = require("../accountTypes");
11
7
  const config_1 = require("@hubspot/local-dev-lib/config");
12
8
  const sandboxHubs_1 = require("@hubspot/local-dev-lib/api/sandboxHubs");
13
9
  const config_2 = require("@hubspot/local-dev-lib/constants/config");
14
10
  const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccountIdentifier");
15
11
  const logger_1 = require("@hubspot/local-dev-lib/logger");
16
12
  const developerTestAccounts_1 = require("@hubspot/local-dev-lib/api/developerTestAccounts");
13
+ const promptUtils_1 = require("./promptUtils");
14
+ const lang_1 = require("../lang");
15
+ const ui_1 = require("../ui");
16
+ const accountTypes_1 = require("../accountTypes");
17
17
  const exitCodes_1 = require("../enums/exitCodes");
18
18
  function mapNestedAccount(accountConfig) {
19
19
  const parentAccountId = accountConfig.parentAccountId ?? null;
@@ -42,7 +42,7 @@ async function selectSandboxTargetAccountPrompt(accounts, defaultAccountConfig)
42
42
  sandboxUsage = data.usage;
43
43
  }
44
44
  else {
45
- logger_1.logger.error(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`);
45
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`));
46
46
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
47
47
  }
48
48
  }
@@ -101,7 +101,7 @@ async function selectDeveloperTestTargetAccountPrompt(accounts, defaultAccountCo
101
101
  devTestAccountsResponse = data;
102
102
  }
103
103
  else {
104
- logger_1.logger.error(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`);
104
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`));
105
105
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
106
106
  }
107
107
  }
@@ -1,12 +1,15 @@
1
1
  import { PromptConfig, GenericPromptResponse, PromptWhen, PromptChoices } from '../../types/Prompts';
2
+ export declare const Separator: any;
2
3
  export declare function promptUser<T extends GenericPromptResponse>(config: PromptConfig<T> | PromptConfig<T>[]): Promise<T>;
3
4
  export declare function confirmPrompt(message: string, options?: {
4
5
  defaultAnswer?: boolean;
5
6
  when?: PromptWhen;
6
7
  }): Promise<boolean>;
7
- export declare function listPrompt<T = string>(message: string, { choices, when, }: {
8
+ export declare function listPrompt<T = string>(message: string, { choices, when, defaultAnswer, validate, }: {
8
9
  choices: PromptChoices<T>;
9
10
  when?: PromptWhen;
11
+ defaultAnswer?: string | number | boolean;
12
+ validate?: (input: T[]) => (boolean | string) | Promise<boolean | string>;
10
13
  }): Promise<T>;
11
14
  export declare function inputPrompt(message: string, { when, validate, defaultAnswer, }?: {
12
15
  when?: boolean | (() => boolean);
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Separator = void 0;
3
4
  exports.promptUser = promptUser;
4
5
  exports.confirmPrompt = confirmPrompt;
5
6
  exports.listPrompt = listPrompt;
6
7
  exports.inputPrompt = inputPrompt;
7
8
  const inquirer = require('inquirer');
8
9
  const promptModule = inquirer.createPromptModule();
10
+ exports.Separator = new inquirer.Separator();
9
11
  function promptUser(config) {
10
12
  return promptModule(config);
11
13
  }
@@ -22,7 +24,7 @@ async function confirmPrompt(message, options = {}) {
22
24
  ]);
23
25
  return choice;
24
26
  }
25
- async function listPrompt(message, { choices, when, }) {
27
+ async function listPrompt(message, { choices, when, defaultAnswer, validate, }) {
26
28
  const { choice } = await promptUser([
27
29
  {
28
30
  name: 'choice',
@@ -30,6 +32,8 @@ async function listPrompt(message, { choices, when, }) {
30
32
  message,
31
33
  choices,
32
34
  when,
35
+ default: defaultAnswer,
36
+ validate,
33
37
  },
34
38
  ]);
35
39
  return choice;
@@ -0,0 +1,2 @@
1
+ import { PublicApp } from '@hubspot/local-dev-lib/types/Apps';
2
+ export declare function selectAppPrompt(accountId: number, appId?: number): Promise<PublicApp | null>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.selectAppPrompt = selectAppPrompt;
4
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
5
+ const appsDev_1 = require("@hubspot/local-dev-lib/api/appsDev");
6
+ const index_1 = require("../errorHandlers/index");
7
+ const en_1 = require("../../lang/en");
8
+ const promptUtils_1 = require("../prompts/promptUtils");
9
+ async function selectAppPrompt(accountId, appId) {
10
+ let availableApps = [];
11
+ try {
12
+ const appsResponse = await (0, appsDev_1.fetchPublicAppsForPortal)(accountId);
13
+ if (appsResponse.data.results) {
14
+ availableApps = appsResponse.data.results;
15
+ }
16
+ }
17
+ catch (err) {
18
+ (0, index_1.debugError)(err);
19
+ }
20
+ if (availableApps.length === 0) {
21
+ logger_1.logger.error(en_1.lib.prompts.selectAppPrompt.errors.noApps);
22
+ return null;
23
+ }
24
+ if (appId) {
25
+ const targetApp = availableApps.find(app => app.id === appId);
26
+ if (targetApp) {
27
+ return targetApp;
28
+ }
29
+ else {
30
+ logger_1.logger.error(en_1.lib.prompts.selectAppPrompt.errors.invalidAppId);
31
+ }
32
+ }
33
+ const appPromptValue = await (0, promptUtils_1.listPrompt)(en_1.lib.prompts.selectAppPrompt.selectAppId, {
34
+ choices: availableApps.map(app => ({
35
+ name: `${app.name} (${app.id})`,
36
+ value: app,
37
+ })),
38
+ });
39
+ return appPromptValue;
40
+ }
@@ -1,7 +1,7 @@
1
1
  type PublicAppPromptResponse = {
2
2
  appId: number;
3
3
  };
4
- export declare function selectPublicAppPrompt({ accountId, accountName, isMigratingApp, }: {
4
+ export declare function selectPublicAppForMigrationPrompt({ accountId, accountName, isMigratingApp, }: {
5
5
  accountId: number | null;
6
6
  accountName: string;
7
7
  isMigratingApp?: boolean;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.selectPublicAppPrompt = selectPublicAppPrompt;
3
+ exports.selectPublicAppForMigrationPrompt = selectPublicAppForMigrationPrompt;
4
4
  const promptUtils_1 = require("./promptUtils");
5
5
  const lang_1 = require("../lang");
6
6
  const ui_1 = require("../ui");
@@ -11,7 +11,7 @@ const exitCodes_1 = require("../enums/exitCodes");
11
11
  async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = false) {
12
12
  try {
13
13
  if (!accountId) {
14
- logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.noAccountId`));
14
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.noAccountId`));
15
15
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
16
16
  }
17
17
  const { data: { results: publicApps }, } = await (0, appsDev_1.fetchPublicAppsForPortal)(accountId);
@@ -26,8 +26,8 @@ async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = fa
26
26
  ? 'noAppsMigrationMessage'
27
27
  : 'noAppsCloneMessage';
28
28
  (0, ui_1.uiLine)();
29
- logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.${headerTranslationKey}`));
30
- logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.${messageTranslationKey}`, { accountName }));
29
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.${headerTranslationKey}`));
30
+ logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.${messageTranslationKey}`, { accountName }));
31
31
  (0, ui_1.uiLine)();
32
32
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
33
33
  }
@@ -35,11 +35,11 @@ async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = fa
35
35
  }
36
36
  catch (error) {
37
37
  (0, index_1.logError)(error, accountId ? { accountId } : undefined);
38
- logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.errorFetchingApps`));
38
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.errorFetchingApps`));
39
39
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
40
40
  }
41
41
  }
42
- async function selectPublicAppPrompt({ accountId, accountName, isMigratingApp = false, }) {
42
+ async function selectPublicAppForMigrationPrompt({ accountId, accountName, isMigratingApp = false, }) {
43
43
  const publicApps = await fetchPublicAppOptions(accountId, accountName, isMigratingApp);
44
44
  const translationKey = isMigratingApp
45
45
  ? 'selectAppIdMigrate'
@@ -47,7 +47,7 @@ async function selectPublicAppPrompt({ accountId, accountName, isMigratingApp =
47
47
  return (0, promptUtils_1.promptUser)([
48
48
  {
49
49
  name: 'appId',
50
- message: (0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.${translationKey}`, {
50
+ message: (0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.${translationKey}`, {
51
51
  accountName,
52
52
  }),
53
53
  type: 'list',
@@ -56,7 +56,7 @@ async function selectPublicAppPrompt({ accountId, accountName, isMigratingApp =
56
56
  if (isMigratingApp && preventProjectMigrations && listingInfo) {
57
57
  return {
58
58
  name: `${app.name} (${app.id})`,
59
- disabled: (0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.cannotBeMigrated`),
59
+ disabled: (0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.cannotBeMigrated`),
60
60
  };
61
61
  }
62
62
  return {