@hubspot/cli 6.2.0 → 6.2.2-experimental.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 (347) hide show
  1. package/bin/cli.d.ts +2 -0
  2. package/bin/cli.js +107 -128
  3. package/commands/accounts/clean.d.ts +4 -0
  4. package/commands/accounts/clean.js +80 -116
  5. package/commands/accounts/info.d.ts +4 -0
  6. package/commands/accounts/info.js +30 -43
  7. package/commands/accounts/list.d.ts +4 -0
  8. package/commands/accounts/list.js +63 -92
  9. package/commands/accounts/remove.d.ts +4 -0
  10. package/commands/accounts/remove.js +41 -73
  11. package/commands/accounts/rename.d.ts +4 -0
  12. package/commands/accounts/rename.js +24 -41
  13. package/commands/accounts/use.d.ts +4 -0
  14. package/commands/accounts/use.js +34 -57
  15. package/commands/accounts.d.ts +3 -0
  16. package/commands/accounts.js +14 -18
  17. package/commands/auth.d.ts +4 -0
  18. package/commands/auth.js +131 -200
  19. package/commands/cms/convertFields.d.ts +4 -0
  20. package/commands/cms/convertFields.js +64 -81
  21. package/commands/cms/lighthouseScore.d.ts +4 -0
  22. package/commands/cms/lighthouseScore.js +234 -298
  23. package/commands/cms/reactModules.d.ts +4 -0
  24. package/commands/cms/reactModules.js +44 -53
  25. package/commands/cms.d.ts +3 -0
  26. package/commands/cms.js +9 -13
  27. package/commands/config/set/allowUsageTracking.d.ts +4 -0
  28. package/commands/config/set/allowUsageTracking.js +31 -38
  29. package/commands/config/set/defaultMode.d.ts +4 -0
  30. package/commands/config/set/defaultMode.js +32 -43
  31. package/commands/config/set/httpTimeout.d.ts +4 -0
  32. package/commands/config/set/httpTimeout.js +21 -30
  33. package/commands/config/set.d.ts +4 -0
  34. package/commands/config/set.js +61 -76
  35. package/commands/config.d.ts +3 -0
  36. package/commands/config.js +5 -9
  37. package/commands/create/api-sample.d.ts +13 -0
  38. package/commands/create/api-sample.js +52 -74
  39. package/commands/create/app.d.ts +10 -0
  40. package/commands/create/app.js +6 -7
  41. package/commands/create/function.d.ts +6 -0
  42. package/commands/create/function.js +13 -14
  43. package/commands/create/index.d.ts +109 -0
  44. package/commands/create/index.js +10 -9
  45. package/commands/create/module.d.ts +11 -0
  46. package/commands/create/module.js +19 -19
  47. package/commands/create/react-app.d.ts +9 -0
  48. package/commands/create/react-app.js +5 -6
  49. package/commands/create/template.d.ts +12 -0
  50. package/commands/create/template.js +21 -24
  51. package/commands/create/vue-app.d.ts +9 -0
  52. package/commands/create/vue-app.js +5 -6
  53. package/commands/create/webpack-serverless.d.ts +9 -0
  54. package/commands/create/webpack-serverless.js +5 -6
  55. package/commands/create/website-theme.d.ts +9 -0
  56. package/commands/create/website-theme.js +13 -15
  57. package/commands/create.d.ts +4 -0
  58. package/commands/create.js +62 -80
  59. package/commands/customObject/create.d.ts +4 -0
  60. package/commands/customObject/create.js +31 -47
  61. package/commands/customObject/schema/create.d.ts +4 -0
  62. package/commands/customObject/schema/create.js +40 -67
  63. package/commands/customObject/schema/delete.d.ts +4 -0
  64. package/commands/customObject/schema/delete.js +26 -39
  65. package/commands/customObject/schema/fetch-all.d.ts +4 -0
  66. package/commands/customObject/schema/fetch-all.js +28 -39
  67. package/commands/customObject/schema/fetch.d.ts +4 -0
  68. package/commands/customObject/schema/fetch.js +46 -63
  69. package/commands/customObject/schema/list.d.ts +3 -0
  70. package/commands/customObject/schema/list.js +12 -17
  71. package/commands/customObject/schema/update.d.ts +4 -0
  72. package/commands/customObject/schema/update.js +44 -72
  73. package/commands/customObject/schema.d.ts +3 -0
  74. package/commands/customObject/schema.js +10 -12
  75. package/commands/customObject.d.ts +3 -0
  76. package/commands/customObject.js +12 -22
  77. package/commands/feedback.d.ts +4 -0
  78. package/commands/feedback.js +23 -33
  79. package/commands/fetch.d.ts +4 -0
  80. package/commands/fetch.js +51 -78
  81. package/commands/filemanager/fetch.d.ts +4 -0
  82. package/commands/filemanager/fetch.js +36 -56
  83. package/commands/filemanager/upload.d.ts +4 -0
  84. package/commands/filemanager/upload.js +86 -128
  85. package/commands/filemanager.d.ts +3 -0
  86. package/commands/filemanager.js +10 -18
  87. package/commands/functions/deploy.d.ts +4 -0
  88. package/commands/functions/deploy.js +74 -99
  89. package/commands/functions/list.d.ts +4 -0
  90. package/commands/functions/list.js +29 -47
  91. package/commands/functions/server.d.ts +4 -0
  92. package/commands/functions/server.js +48 -65
  93. package/commands/functions.d.ts +3 -0
  94. package/commands/functions.js +11 -15
  95. package/commands/hubdb/clear.d.ts +4 -0
  96. package/commands/hubdb/clear.js +35 -56
  97. package/commands/hubdb/create.d.ts +4 -0
  98. package/commands/hubdb/create.js +32 -57
  99. package/commands/hubdb/delete.d.ts +4 -0
  100. package/commands/hubdb/delete.js +27 -44
  101. package/commands/hubdb/fetch.d.ts +4 -0
  102. package/commands/hubdb/fetch.js +28 -46
  103. package/commands/hubdb.d.ts +3 -0
  104. package/commands/hubdb.js +10 -14
  105. package/commands/init.d.ts +4 -0
  106. package/commands/init.js +101 -160
  107. package/commands/lint.d.ts +4 -0
  108. package/commands/lint.js +32 -45
  109. package/commands/list.d.ts +4 -0
  110. package/commands/list.js +72 -101
  111. package/commands/logs.d.ts +4 -0
  112. package/commands/logs.js +96 -121
  113. package/commands/module/marketplace-validate.d.ts +4 -0
  114. package/commands/module/marketplace-validate.js +30 -57
  115. package/commands/module.d.ts +3 -0
  116. package/commands/module.js +5 -9
  117. package/commands/mv.d.ts +4 -0
  118. package/commands/mv.js +51 -71
  119. package/commands/open.d.ts +4 -0
  120. package/commands/open.js +46 -62
  121. package/commands/project/add.d.ts +4 -0
  122. package/commands/project/add.js +45 -70
  123. package/commands/project/cloneApp.d.ts +4 -0
  124. package/commands/project/cloneApp.js +117 -180
  125. package/commands/project/create.d.ts +4 -0
  126. package/commands/project/create.js +47 -81
  127. package/commands/project/deploy.d.ts +4 -0
  128. package/commands/project/deploy.js +103 -182
  129. package/commands/project/dev.d.ts +4 -0
  130. package/commands/project/dev.js +123 -227
  131. package/commands/project/download.d.ts +4 -0
  132. package/commands/project/download.js +71 -123
  133. package/commands/project/installDeps.d.ts +6 -0
  134. package/commands/project/installDeps.js +50 -59
  135. package/commands/project/listBuilds.d.ts +4 -0
  136. package/commands/project/listBuilds.js +95 -139
  137. package/commands/project/logs.d.ts +4 -0
  138. package/commands/project/logs.js +84 -128
  139. package/commands/project/migrateApp.d.ts +4 -0
  140. package/commands/project/migrateApp.js +156 -248
  141. package/commands/project/open.d.ts +4 -0
  142. package/commands/project/open.js +42 -68
  143. package/commands/project/upload.d.ts +4 -0
  144. package/commands/project/upload.js +70 -116
  145. package/commands/project/watch.d.ts +4 -0
  146. package/commands/project/watch.js +92 -152
  147. package/commands/project.d.ts +3 -0
  148. package/commands/project.js +19 -23
  149. package/commands/remove.d.ts +4 -0
  150. package/commands/remove.js +26 -43
  151. package/commands/sandbox/create.d.ts +4 -0
  152. package/commands/sandbox/create.js +141 -187
  153. package/commands/sandbox/delete.d.ts +4 -0
  154. package/commands/sandbox/delete.js +164 -221
  155. package/commands/sandbox.d.ts +3 -0
  156. package/commands/sandbox.js +8 -12
  157. package/commands/secrets/addSecret.d.ts +4 -0
  158. package/commands/secrets/addSecret.js +32 -52
  159. package/commands/secrets/deleteSecret.d.ts +4 -0
  160. package/commands/secrets/deleteSecret.js +31 -50
  161. package/commands/secrets/listSecrets.d.ts +4 -0
  162. package/commands/secrets/listSecrets.js +26 -42
  163. package/commands/secrets/updateSecret.d.ts +4 -0
  164. package/commands/secrets/updateSecret.js +33 -53
  165. package/commands/secrets.d.ts +3 -0
  166. package/commands/secrets.js +10 -13
  167. package/commands/theme/generate-selectors.d.ts +4 -0
  168. package/commands/theme/generate-selectors.js +127 -192
  169. package/commands/theme/marketplace-validate.d.ts +4 -0
  170. package/commands/theme/marketplace-validate.js +30 -57
  171. package/commands/theme/preview.d.ts +4 -0
  172. package/commands/theme/preview.js +161 -196
  173. package/commands/theme.d.ts +3 -0
  174. package/commands/theme.js +7 -11
  175. package/commands/upload.d.ts +4 -0
  176. package/commands/upload.js +197 -287
  177. package/commands/watch.d.ts +4 -0
  178. package/commands/watch.js +126 -172
  179. package/lang/en.lyaml +2 -3
  180. package/lib/DevServerManager.d.ts +35 -0
  181. package/lib/DevServerManager.js +97 -124
  182. package/lib/LocalDevManager.d.ts +41 -0
  183. package/lib/LocalDevManager.js +320 -490
  184. package/lib/accountTypes.d.ts +6 -0
  185. package/lib/accountTypes.js +16 -32
  186. package/lib/buildAccount.d.ts +22 -0
  187. package/lib/buildAccount.js +130 -179
  188. package/lib/commonOpts.d.ts +20 -0
  189. package/lib/commonOpts.js +58 -91
  190. package/lib/constants.d.ts +83 -0
  191. package/lib/constants.js +61 -71
  192. package/lib/debugInfo.d.ts +3 -0
  193. package/lib/debugInfo.js +12 -13
  194. package/lib/dependencyManagement.d.ts +7 -0
  195. package/lib/dependencyManagement.js +90 -132
  196. package/lib/developerTestAccounts.d.ts +7 -0
  197. package/lib/developerTestAccounts.js +65 -91
  198. package/lib/enums/exitCodes.d.ts +5 -0
  199. package/lib/enums/exitCodes.js +5 -7
  200. package/lib/environment.d.ts +1 -0
  201. package/lib/environment.js +10 -10
  202. package/lib/errorHandlers/index.d.ts +19 -0
  203. package/lib/errorHandlers/index.js +64 -80
  204. package/lib/errorHandlers/suppressError.d.ts +1 -0
  205. package/lib/errorHandlers/suppressError.js +64 -106
  206. package/lib/filesystem.d.ts +2 -0
  207. package/lib/filesystem.js +16 -24
  208. package/lib/generate-selectors.d.ts +6 -0
  209. package/lib/generate-selectors.js +99 -137
  210. package/lib/getFunctionArrays.d.ts +1 -0
  211. package/lib/getFunctionArrays.js +12 -13
  212. package/lib/hasFeature.d.ts +1 -0
  213. package/lib/hasFeature.js +5 -11
  214. package/lib/hasFlag.d.ts +2 -0
  215. package/lib/hasFlag.js +6 -10
  216. package/lib/hublValidate.d.ts +4 -0
  217. package/lib/hublValidate.js +20 -24
  218. package/lib/interpolation.d.ts +10 -0
  219. package/lib/interpolation.js +48 -92
  220. package/lib/interpolationHelpers.d.ts +6 -0
  221. package/lib/interpolationHelpers.js +19 -19
  222. package/lib/lang.d.ts +3 -0
  223. package/lib/lang.js +50 -78
  224. package/lib/links.d.ts +127 -0
  225. package/lib/links.js +92 -114
  226. package/lib/localDev.d.ts +11 -0
  227. package/lib/localDev.js +283 -433
  228. package/lib/marketplace-validate.d.ts +5 -0
  229. package/lib/marketplace-validate.js +103 -126
  230. package/lib/oauth.d.ts +1 -0
  231. package/lib/oauth.js +62 -78
  232. package/lib/polling.d.ts +1 -0
  233. package/lib/polling.js +24 -26
  234. package/lib/process.d.ts +2 -0
  235. package/lib/process.js +39 -53
  236. package/lib/projectLogsManager.d.ts +19 -0
  237. package/lib/projectLogsManager.js +76 -130
  238. package/lib/projectStructure.d.ts +13 -0
  239. package/lib/projectStructure.js +87 -109
  240. package/lib/projects.d.ts +40 -0
  241. package/lib/projects.js +589 -957
  242. package/lib/projectsWatch.d.ts +1 -0
  243. package/lib/projectsWatch.js +122 -228
  244. package/lib/prompts/accountNamePrompt.d.ts +11 -0
  245. package/lib/prompts/accountNamePrompt.js +58 -65
  246. package/lib/prompts/accountsPrompt.d.ts +3 -0
  247. package/lib/prompts/accountsPrompt.js +31 -37
  248. package/lib/prompts/activeInstallConfirmationPrompt.d.ts +1 -0
  249. package/lib/prompts/activeInstallConfirmationPrompt.js +11 -13
  250. package/lib/prompts/cleanUploadPrompt.d.ts +1 -0
  251. package/lib/prompts/cleanUploadPrompt.js +11 -13
  252. package/lib/prompts/cmsFieldPrompt.d.ts +1 -0
  253. package/lib/prompts/cmsFieldPrompt.js +35 -39
  254. package/lib/prompts/createApiSamplePrompt.d.ts +1 -0
  255. package/lib/prompts/createApiSamplePrompt.js +47 -52
  256. package/lib/prompts/createFunctionPrompt.d.ts +1 -0
  257. package/lib/prompts/createFunctionPrompt.js +55 -56
  258. package/lib/prompts/createModulePrompt.d.ts +1 -0
  259. package/lib/prompts/createModulePrompt.js +45 -50
  260. package/lib/prompts/createProjectPrompt.d.ts +1 -0
  261. package/lib/prompts/createProjectPrompt.js +88 -127
  262. package/lib/prompts/createTemplatePrompt.d.ts +1 -0
  263. package/lib/prompts/createTemplatePrompt.js +16 -19
  264. package/lib/prompts/deployBuildIdPrompt.d.ts +1 -0
  265. package/lib/prompts/deployBuildIdPrompt.js +13 -15
  266. package/lib/prompts/downloadProjectPrompt.d.ts +1 -0
  267. package/lib/prompts/downloadProjectPrompt.js +36 -40
  268. package/lib/prompts/feedbackPrompt.d.ts +2 -0
  269. package/lib/prompts/feedbackPrompt.js +27 -30
  270. package/lib/prompts/folderOverwritePrompt.d.ts +1 -0
  271. package/lib/prompts/folderOverwritePrompt.js +8 -10
  272. package/lib/prompts/installPublicAppPrompt.d.ts +1 -0
  273. package/lib/prompts/installPublicAppPrompt.js +27 -42
  274. package/lib/prompts/personalAccessKeyPrompt.d.ts +69 -0
  275. package/lib/prompts/personalAccessKeyPrompt.js +102 -110
  276. package/lib/prompts/previewPrompt.d.ts +2 -0
  277. package/lib/prompts/previewPrompt.js +44 -47
  278. package/lib/prompts/projectAddPrompt.d.ts +1 -0
  279. package/lib/prompts/projectAddPrompt.js +35 -38
  280. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +4 -0
  281. package/lib/prompts/projectDevTargetAccountPrompt.js +148 -193
  282. package/lib/prompts/projectNamePrompt.d.ts +1 -0
  283. package/lib/prompts/projectNamePrompt.js +23 -25
  284. package/lib/prompts/projectsLogsPrompt.d.ts +5 -0
  285. package/lib/prompts/projectsLogsPrompt.js +19 -27
  286. package/lib/prompts/promptUtils.d.ts +2 -0
  287. package/lib/prompts/promptUtils.js +15 -17
  288. package/lib/prompts/sandboxesPrompt.d.ts +2 -0
  289. package/lib/prompts/sandboxesPrompt.js +48 -59
  290. package/lib/prompts/secretPrompt.d.ts +1 -0
  291. package/lib/prompts/secretPrompt.js +13 -16
  292. package/lib/prompts/selectPublicAppPrompt.d.ts +5 -0
  293. package/lib/prompts/selectPublicAppPrompt.js +55 -81
  294. package/lib/prompts/setAsDefaultAccountPrompt.d.ts +1 -0
  295. package/lib/prompts/setAsDefaultAccountPrompt.js +17 -24
  296. package/lib/prompts/uploadPrompt.d.ts +1 -0
  297. package/lib/prompts/uploadPrompt.js +28 -30
  298. package/lib/regex.d.ts +1 -0
  299. package/lib/regex.js +2 -2
  300. package/lib/sandboxSync.d.ts +8 -0
  301. package/lib/sandboxSync.js +98 -166
  302. package/lib/sandboxes.d.ts +40 -0
  303. package/lib/sandboxes.js +199 -316
  304. package/lib/schema.d.ts +2 -0
  305. package/lib/schema.js +20 -26
  306. package/lib/serverlessLogs.d.ts +8 -0
  307. package/lib/serverlessLogs.js +128 -172
  308. package/lib/ui/SpinniesManager.d.ts +61 -0
  309. package/lib/ui/SpinniesManager.js +196 -254
  310. package/lib/ui/git.d.ts +1 -0
  311. package/lib/ui/git.js +18 -19
  312. package/lib/ui/index.d.ts +36 -0
  313. package/lib/ui/index.js +115 -167
  314. package/lib/ui/serverlessFunctionLogs.d.ts +1 -0
  315. package/lib/ui/serverlessFunctionLogs.js +51 -70
  316. package/lib/ui/spinniesUtils.d.ts +60 -0
  317. package/lib/ui/spinniesUtils.js +109 -133
  318. package/lib/ui/supportHyperlinks.d.ts +3 -0
  319. package/lib/ui/supportHyperlinks.js +46 -61
  320. package/lib/ui/supportsColor.d.ts +13 -0
  321. package/lib/ui/supportsColor.js +78 -108
  322. package/lib/ui/table.d.ts +2 -0
  323. package/lib/ui/table.js +47 -55
  324. package/lib/upload.d.ts +1 -0
  325. package/lib/upload.js +37 -42
  326. package/lib/usageTracking.d.ts +6 -0
  327. package/lib/usageTracking.js +131 -155
  328. package/lib/validation.d.ts +16 -0
  329. package/lib/validation.js +142 -203
  330. package/package.json +78 -48
  331. package/CHANGELOG.md +0 -16
  332. package/LICENSE +0 -12
  333. package/README.md +0 -154
  334. package/commands/__tests__/projects.test.js +0 -105
  335. package/commands/project/__tests__/deploy.test.js +0 -443
  336. package/commands/project/__tests__/installDeps.test.js +0 -168
  337. package/commands/project/__tests__/logs.test.js +0 -304
  338. package/hubspot.sample.config.yml +0 -28
  339. package/jest.config.js +0 -4
  340. package/lib/__tests__/commonOpts.test.js +0 -83
  341. package/lib/__tests__/dependencyManagement.test.js +0 -243
  342. package/lib/__tests__/downloadProjectPrompt.test.js +0 -31
  343. package/lib/__tests__/projectLogsManager.test.js +0 -212
  344. package/lib/__tests__/projects.test.js +0 -140
  345. package/lib/__tests__/serverlessLogs.test.js +0 -162
  346. package/lib/__tests__/validation.test.js +0 -140
  347. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -46
package/lib/localDev.js CHANGED
@@ -1,485 +1,335 @@
1
+ "use strict";
1
2
  const { logger } = require('@hubspot/local-dev-lib/logger');
2
- const {
3
- HUBSPOT_ACCOUNT_TYPES,
4
- HUBSPOT_ACCOUNT_TYPE_STRINGS,
5
- } = require('@hubspot/local-dev-lib/constants/config');
6
- const {
7
- isMissingScopeError,
8
- isSpecifiedError,
9
- } = require('@hubspot/local-dev-lib/errors/index');
3
+ const { HUBSPOT_ACCOUNT_TYPES, HUBSPOT_ACCOUNT_TYPE_STRINGS, } = require('@hubspot/local-dev-lib/constants/config');
4
+ const { isMissingScopeError, isSpecifiedError, } = require('@hubspot/local-dev-lib/errors/index');
10
5
  const { getHubSpotWebsiteOrigin } = require('@hubspot/local-dev-lib/urls');
11
6
  const { getAccountConfig, getEnv } = require('@hubspot/local-dev-lib/config');
12
7
  const { createProject } = require('@hubspot/local-dev-lib/api/projects');
13
- const {
14
- ENVIRONMENTS,
15
- } = require('@hubspot/local-dev-lib/constants/environments');
16
- const {
17
- confirmDefaultAccountPrompt,
18
- selectSandboxTargetAccountPrompt,
19
- selectDeveloperTestTargetAccountPrompt,
20
- confirmUseExistingDeveloperTestAccountPrompt,
21
- } = require('./prompts/projectDevTargetAccountPrompt');
8
+ const { ENVIRONMENTS, } = require('@hubspot/local-dev-lib/constants/environments');
9
+ const { confirmDefaultAccountPrompt, selectSandboxTargetAccountPrompt, selectDeveloperTestTargetAccountPrompt, confirmUseExistingDeveloperTestAccountPrompt, } = require('./prompts/projectDevTargetAccountPrompt');
22
10
  const { confirmPrompt } = require('./prompts/promptUtils');
23
- const {
24
- validateSandboxUsageLimits,
25
- getAvailableSyncTypes,
26
- } = require('./sandboxes');
11
+ const { validateSandboxUsageLimits, getAvailableSyncTypes, } = require('./sandboxes');
27
12
  const { syncSandbox } = require('./sandboxSync');
28
- const {
29
- validateDevTestAccountUsageLimits,
30
- } = require('./developerTestAccounts');
13
+ const { validateDevTestAccountUsageLimits, } = require('./developerTestAccounts');
31
14
  const { uiCommandReference, uiLine, uiAccountDescription } = require('./ui');
32
15
  const SpinniesManager = require('./ui/SpinniesManager');
33
16
  const { i18n } = require('./lang');
34
17
  const { EXIT_CODES } = require('./enums/exitCodes');
35
18
  const { trackCommandMetadataUsage } = require('./usageTracking');
36
- const {
37
- isAppDeveloperAccount,
38
- isDeveloperTestAccount,
39
- } = require('./accountTypes');
40
- const {
41
- handleProjectUpload,
42
- pollProjectBuildAndDeploy,
43
- } = require('./projects');
44
- const {
45
- PROJECT_ERROR_TYPES,
46
- PROJECT_BUILD_TEXT,
47
- PROJECT_DEPLOY_TEXT,
48
- } = require('./constants');
19
+ const { isAppDeveloperAccount, isDeveloperTestAccount, } = require('./accountTypes');
20
+ const { handleProjectUpload, pollProjectBuildAndDeploy, } = require('./projects');
21
+ const { PROJECT_ERROR_TYPES, PROJECT_BUILD_TEXT, PROJECT_DEPLOY_TEXT, } = require('./constants');
49
22
  const { logError, ApiErrorContext } = require('./errorHandlers/index');
50
- const {
51
- PERSONAL_ACCESS_KEY_AUTH_METHOD,
52
- } = require('@hubspot/local-dev-lib/constants/auth');
23
+ const { PERSONAL_ACCESS_KEY_AUTH_METHOD, } = require('@hubspot/local-dev-lib/constants/auth');
53
24
  const { buildNewAccount, saveAccountToConfig } = require('./buildAccount');
54
25
  const { hubspotAccountNamePrompt } = require('./prompts/accountNamePrompt');
55
-
56
26
  const i18nKey = 'lib.localDev';
57
-
58
27
  // If the user passed in the --account flag, confirm they want to use that account as
59
28
  // their target account, otherwise exit
60
- const confirmDefaultAccountIsTarget = async accountConfig => {
61
- logger.log();
62
- const useDefaultAccount = await confirmDefaultAccountPrompt(
63
- accountConfig.name,
64
- HUBSPOT_ACCOUNT_TYPE_STRINGS[accountConfig.accountType]
65
- );
66
-
67
- if (!useDefaultAccount) {
68
- logger.log(
69
- i18n(
70
- `${i18nKey}.confirmDefaultAccountIsTarget.declineDefaultAccountExplanation`,
71
- {
72
- useCommand: uiCommandReference('hs accounts use'),
73
- devCommand: uiCommandReference('hs project dev'),
74
- }
75
- )
76
- );
77
- process.exit(EXIT_CODES.SUCCESS);
78
- }
29
+ const confirmDefaultAccountIsTarget = async (accountConfig) => {
30
+ logger.log();
31
+ const useDefaultAccount = await confirmDefaultAccountPrompt(accountConfig.name, HUBSPOT_ACCOUNT_TYPE_STRINGS[accountConfig.accountType]);
32
+ if (!useDefaultAccount) {
33
+ logger.log(i18n(`${i18nKey}.confirmDefaultAccountIsTarget.declineDefaultAccountExplanation`, {
34
+ useCommand: uiCommandReference('hs accounts use'),
35
+ devCommand: uiCommandReference('hs project dev'),
36
+ }));
37
+ process.exit(EXIT_CODES.SUCCESS);
38
+ }
79
39
  };
80
-
81
40
  // Confirm the default account is supported for the type of apps being developed
82
41
  const checkIfDefaultAccountIsSupported = (accountConfig, hasPublicApps) => {
83
- if (hasPublicApps && !isAppDeveloperAccount(accountConfig)) {
84
- logger.error(
85
- i18n(`${i18nKey}.checkIfDefaultAccountIsSupported.publicApp`, {
86
- useCommand: uiCommandReference('hs accounts use'),
87
- authCommand: uiCommandReference('hs auth'),
88
- })
89
- );
90
- process.exit(EXIT_CODES.SUCCESS);
91
- } else if (!hasPublicApps && isAppDeveloperAccount(accountConfig)) {
92
- logger.error(
93
- i18n(`${i18nKey}.checkIfDefaultAccountIsSupported.privateApp`, {
94
- useCommand: uiCommandReference('hs accounts use'),
95
- authCommand: uiCommandReference('hs auth'),
96
- })
97
- );
98
- process.exit(EXIT_CODES.SUCCESS);
99
- }
42
+ if (hasPublicApps &&
43
+ !(isAppDeveloperAccount(accountConfig) ||
44
+ isDeveloperTestAccount(accountConfig))) {
45
+ logger.error(i18n(`${i18nKey}.checkIfDefaultAccountIsSupported.publicApp`, {
46
+ useCommand: uiCommandReference('hs accounts use'),
47
+ authCommand: uiCommandReference('hs auth'),
48
+ }));
49
+ process.exit(EXIT_CODES.SUCCESS);
50
+ }
51
+ else if (!hasPublicApps && isAppDeveloperAccount(accountConfig)) {
52
+ logger.error(i18n(`${i18nKey}.checkIfDefaultAccountIsSupported.privateApp`, {
53
+ useCommand: uiCommandReference('hs accounts use'),
54
+ authCommand: uiCommandReference('hs auth'),
55
+ }));
56
+ process.exit(EXIT_CODES.SUCCESS);
57
+ }
100
58
  };
101
-
102
59
  const checkIfParentAccountIsAuthed = accountConfig => {
103
- if (!getAccountConfig(accountConfig.parentAccountId)) {
104
- logger.error(
105
- i18n(`${i18nKey}.checkIfParentAccountIsAuthed.notAuthedError`, {
106
- accountId: accountConfig.parentAccountId,
107
- accountIdentifier: uiAccountDescription(accountConfig.portalId),
108
- authCommand: uiCommandReference(
109
- `hs auth --account=${accountConfig.parentAccountId}`
110
- ),
111
- })
112
- );
113
- process.exit(EXIT_CODES.SUCCESS);
114
- }
60
+ if (!getAccountConfig(accountConfig.parentAccountId)) {
61
+ logger.error(i18n(`${i18nKey}.checkIfParentAccountIsAuthed.notAuthedError`, {
62
+ accountId: accountConfig.parentAccountId,
63
+ accountIdentifier: uiAccountDescription(accountConfig.portalId),
64
+ authCommand: uiCommandReference(`hs auth --account=${accountConfig.parentAccountId}`),
65
+ }));
66
+ process.exit(EXIT_CODES.SUCCESS);
67
+ }
115
68
  };
116
-
117
69
  // Confirm the default account is a developer account if developing public apps
118
70
  const checkIfAccountFlagIsSupported = (accountConfig, hasPublicApps) => {
119
- if (hasPublicApps) {
120
- if (!isDeveloperTestAccount) {
121
- logger.error(
122
- i18n(`${i18nKey}.validateAccountOption.invalidPublicAppAccount`, {
123
- useCommand: uiCommandReference('hs accounts use'),
124
- devCommand: uiCommandReference('hs project dev'),
125
- })
126
- );
127
- process.exit(EXIT_CODES.SUCCESS);
71
+ if (hasPublicApps) {
72
+ if (!isDeveloperTestAccount) {
73
+ logger.error(i18n(`${i18nKey}.validateAccountOption.invalidPublicAppAccount`, {
74
+ useCommand: uiCommandReference('hs accounts use'),
75
+ devCommand: uiCommandReference('hs project dev'),
76
+ }));
77
+ process.exit(EXIT_CODES.SUCCESS);
78
+ }
79
+ checkIfParentAccountIsAuthed(accountConfig);
80
+ }
81
+ else if (isAppDeveloperAccount(accountConfig)) {
82
+ logger.error(i18n(`${i18nKey}.validateAccountOption.invalidPrivateAppAccount`, {
83
+ useCommand: uiCommandReference('hs accounts use'),
84
+ }));
85
+ process.exit(EXIT_CODES.SUCCESS);
128
86
  }
129
- checkIfParentAccountIsAuthed(accountConfig);
130
- } else if (isAppDeveloperAccount(accountConfig)) {
131
- logger.error(
132
- i18n(`${i18nKey}.validateAccountOption.invalidPrivateAppAccount`, {
133
- useCommand: uiCommandReference('hs accounts use'),
134
- })
135
- );
136
- process.exit(EXIT_CODES.SUCCESS);
137
- }
138
87
  };
139
-
140
88
  // If the user isn't using the recommended account type, prompt them to use or create one
141
- const suggestRecommendedNestedAccount = async (
142
- accounts,
143
- accountConfig,
144
- hasPublicApps
145
- ) => {
146
- logger.log();
147
- uiLine();
148
- if (hasPublicApps) {
149
- logger.log(
150
- i18n(
151
- `${i18nKey}.validateAccountOption.publicAppNonDeveloperTestAccountWarning`
152
- )
153
- );
154
- } else {
155
- logger.log(i18n(`${i18nKey}.validateAccountOption.nonSandboxWarning`));
156
- }
157
- uiLine();
158
- logger.log();
159
-
160
- const targetAccountPrompt = isAppDeveloperAccount(accountConfig)
161
- ? selectDeveloperTestTargetAccountPrompt
162
- : selectSandboxTargetAccountPrompt;
163
-
164
- return targetAccountPrompt(accounts, accountConfig, hasPublicApps);
89
+ const suggestRecommendedNestedAccount = async (accounts, accountConfig, hasPublicApps) => {
90
+ logger.log();
91
+ uiLine();
92
+ if (hasPublicApps) {
93
+ logger.log(i18n(`${i18nKey}.validateAccountOption.publicAppNonDeveloperTestAccountWarning`));
94
+ }
95
+ else {
96
+ logger.log(i18n(`${i18nKey}.validateAccountOption.nonSandboxWarning`));
97
+ }
98
+ uiLine();
99
+ logger.log();
100
+ const targetAccountPrompt = isAppDeveloperAccount(accountConfig)
101
+ ? selectDeveloperTestTargetAccountPrompt
102
+ : selectSandboxTargetAccountPrompt;
103
+ return targetAccountPrompt(accounts, accountConfig, hasPublicApps);
165
104
  };
166
-
167
105
  // Create a new sandbox and return its accountId
168
106
  const createSandboxForLocalDev = async (accountId, accountConfig, env) => {
169
- try {
170
- await validateSandboxUsageLimits(
171
- accountConfig,
172
- HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
173
- env
174
- );
175
- } catch (err) {
176
- if (isMissingScopeError(err)) {
177
- logger.error(
178
- i18n('lib.sandbox.create.failure.scopes.message', {
179
- accountName: accountConfig.name || accountId,
180
- })
181
- );
182
- const websiteOrigin = getHubSpotWebsiteOrigin(env);
183
- const url = `${websiteOrigin}/personal-access-key/${accountId}`;
184
- logger.info(
185
- i18n('lib.sandbox.create.failure.scopes.instructions', {
186
- accountName: accountConfig.name || accountId,
187
- url,
188
- })
189
- );
190
- } else {
191
- logError(err);
107
+ try {
108
+ await validateSandboxUsageLimits(accountConfig, HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX, env);
109
+ }
110
+ catch (err) {
111
+ if (isMissingScopeError(err)) {
112
+ logger.error(i18n('lib.sandbox.create.failure.scopes.message', {
113
+ accountName: accountConfig.name || accountId,
114
+ }));
115
+ const websiteOrigin = getHubSpotWebsiteOrigin(env);
116
+ const url = `${websiteOrigin}/personal-access-key/${accountId}`;
117
+ logger.info(i18n('lib.sandbox.create.failure.scopes.instructions', {
118
+ accountName: accountConfig.name || accountId,
119
+ url,
120
+ }));
121
+ }
122
+ else {
123
+ logError(err);
124
+ }
125
+ process.exit(EXIT_CODES.ERROR);
126
+ }
127
+ try {
128
+ const { name } = await hubspotAccountNamePrompt({
129
+ accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
130
+ });
131
+ trackCommandMetadataUsage('sandbox-create', { step: 'project-dev' }, accountId);
132
+ const { result } = await buildNewAccount({
133
+ name,
134
+ accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
135
+ accountConfig,
136
+ env,
137
+ });
138
+ const targetAccountId = result.sandbox.sandboxHubId;
139
+ const sandboxAccountConfig = getAccountConfig(result.sandbox.sandboxHubId);
140
+ const syncTasks = await getAvailableSyncTypes(accountConfig, sandboxAccountConfig);
141
+ // For v1 sandboxes, keep sync here. Once we migrate to v2, this will be handled by BE automatically
142
+ await syncSandbox({
143
+ accountConfig: sandboxAccountConfig,
144
+ parentAccountConfig: accountConfig,
145
+ env,
146
+ syncTasks,
147
+ slimInfoMessage: true,
148
+ });
149
+ return targetAccountId;
150
+ }
151
+ catch (err) {
152
+ logError(err);
153
+ process.exit(EXIT_CODES.ERROR);
192
154
  }
193
- process.exit(EXIT_CODES.ERROR);
194
- }
195
- try {
196
- const { name } = await hubspotAccountNamePrompt({
197
- accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
198
- });
199
-
200
- trackCommandMetadataUsage(
201
- 'sandbox-create',
202
- { step: 'project-dev' },
203
- accountId
204
- );
205
-
206
- const { result } = await buildNewAccount({
207
- name,
208
- accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
209
- accountConfig,
210
- env,
211
- });
212
-
213
- const targetAccountId = result.sandbox.sandboxHubId;
214
-
215
- const sandboxAccountConfig = getAccountConfig(result.sandbox.sandboxHubId);
216
- const syncTasks = await getAvailableSyncTypes(
217
- accountConfig,
218
- sandboxAccountConfig
219
- );
220
- // For v1 sandboxes, keep sync here. Once we migrate to v2, this will be handled by BE automatically
221
- await syncSandbox({
222
- accountConfig: sandboxAccountConfig,
223
- parentAccountConfig: accountConfig,
224
- env,
225
- syncTasks,
226
- slimInfoMessage: true,
227
- });
228
- return targetAccountId;
229
- } catch (err) {
230
- logError(err);
231
- process.exit(EXIT_CODES.ERROR);
232
- }
233
155
  };
234
-
235
156
  // Create a developer test account and return its accountId
236
- const createDeveloperTestAccountForLocalDev = async (
237
- accountId,
238
- accountConfig,
239
- env
240
- ) => {
241
- let currentPortalCount = 0;
242
- let maxTestPortals = 10;
243
- try {
244
- const validateResult = await validateDevTestAccountUsageLimits(
245
- accountConfig
246
- );
247
- if (validateResult) {
248
- currentPortalCount = validateResult.results
249
- ? validateResult.results.length
250
- : 0;
251
- maxTestPortals = validateResult.maxTestPortals;
157
+ const createDeveloperTestAccountForLocalDev = async (accountId, accountConfig, env) => {
158
+ let currentPortalCount = 0;
159
+ let maxTestPortals = 10;
160
+ try {
161
+ const validateResult = await validateDevTestAccountUsageLimits(accountConfig);
162
+ if (validateResult) {
163
+ currentPortalCount = validateResult.results
164
+ ? validateResult.results.length
165
+ : 0;
166
+ maxTestPortals = validateResult.maxTestPortals;
167
+ }
252
168
  }
253
- } catch (err) {
254
- if (isMissingScopeError(err)) {
255
- logger.error(
256
- i18n('lib.developerTestAccount.create.failure.scopes.message', {
257
- accountName: accountConfig.name || accountId,
258
- })
259
- );
260
- const websiteOrigin = getHubSpotWebsiteOrigin(env);
261
- const url = `${websiteOrigin}/personal-access-key/${accountId}`;
262
- logger.info(
263
- i18n('lib.developerTestAccount.create.failure.scopes.instructions', {
264
- accountName: accountConfig.name || accountId,
265
- url,
266
- })
267
- );
268
- } else {
269
- logError(err);
169
+ catch (err) {
170
+ if (isMissingScopeError(err)) {
171
+ logger.error(i18n('lib.developerTestAccount.create.failure.scopes.message', {
172
+ accountName: accountConfig.name || accountId,
173
+ }));
174
+ const websiteOrigin = getHubSpotWebsiteOrigin(env);
175
+ const url = `${websiteOrigin}/personal-access-key/${accountId}`;
176
+ logger.info(i18n('lib.developerTestAccount.create.failure.scopes.instructions', {
177
+ accountName: accountConfig.name || accountId,
178
+ url,
179
+ }));
180
+ }
181
+ else {
182
+ logError(err);
183
+ }
184
+ process.exit(EXIT_CODES.ERROR);
185
+ }
186
+ try {
187
+ const { name } = await hubspotAccountNamePrompt({
188
+ currentPortalCount,
189
+ accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
190
+ });
191
+ trackCommandMetadataUsage('developer-test-account-create', { step: 'project-dev' }, accountId);
192
+ const { result } = await buildNewAccount({
193
+ name,
194
+ accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
195
+ accountConfig,
196
+ env,
197
+ portalLimit: maxTestPortals,
198
+ });
199
+ return result.id;
200
+ }
201
+ catch (err) {
202
+ logError(err);
203
+ process.exit(EXIT_CODES.ERROR);
270
204
  }
271
- process.exit(EXIT_CODES.ERROR);
272
- }
273
-
274
- try {
275
- const { name } = await hubspotAccountNamePrompt({
276
- currentPortalCount,
277
- accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
278
- });
279
- trackCommandMetadataUsage(
280
- 'developer-test-account-create',
281
- { step: 'project-dev' },
282
- accountId
283
- );
284
-
285
- const { result } = await buildNewAccount({
286
- name,
287
- accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
288
- accountConfig,
289
- env,
290
- portalLimit: maxTestPortals,
291
- });
292
-
293
- return result.id;
294
- } catch (err) {
295
- logError(err);
296
- process.exit(EXIT_CODES.ERROR);
297
- }
298
205
  };
299
-
300
206
  // Prompt user to confirm usage of an existing developer test account that is not currently in the config
301
207
  const useExistingDevTestAccount = async (env, account) => {
302
- const useExistingDevTestAcct = await confirmUseExistingDeveloperTestAccountPrompt(
303
- account
304
- );
305
- if (!useExistingDevTestAcct) {
306
- logger.log('');
307
- logger.log(
308
- i18n(
309
- `${i18nKey}.confirmDefaultAccountIsTarget.declineDefaultAccountExplanation`,
310
- {
311
- useCommand: uiCommandReference('hs accounts use'),
312
- devCommand: uiCommandReference('hs project dev'),
313
- }
314
- )
315
- );
316
- logger.log('');
317
- process.exit(EXIT_CODES.SUCCESS);
318
- }
319
- const devTestAcctConfigName = await saveAccountToConfig({
320
- env,
321
- accountName: account.accountName,
322
- accountId: account.id,
323
- });
324
- logger.success(
325
- i18n(`lib.developerTestAccount.create.success.configFileUpdated`, {
326
- accountName: devTestAcctConfigName,
327
- authType: PERSONAL_ACCESS_KEY_AUTH_METHOD.name,
328
- })
329
- );
208
+ const useExistingDevTestAcct = await confirmUseExistingDeveloperTestAccountPrompt(account);
209
+ if (!useExistingDevTestAcct) {
210
+ logger.log('');
211
+ logger.log(i18n(`${i18nKey}.confirmDefaultAccountIsTarget.declineDefaultAccountExplanation`, {
212
+ useCommand: uiCommandReference('hs accounts use'),
213
+ devCommand: uiCommandReference('hs project dev'),
214
+ }));
215
+ logger.log('');
216
+ process.exit(EXIT_CODES.SUCCESS);
217
+ }
218
+ const devTestAcctConfigName = await saveAccountToConfig({
219
+ env,
220
+ accountName: account.accountName,
221
+ accountId: account.id,
222
+ });
223
+ logger.success(i18n(`lib.developerTestAccount.create.success.configFileUpdated`, {
224
+ accountName: devTestAcctConfigName,
225
+ authType: PERSONAL_ACCESS_KEY_AUTH_METHOD.name,
226
+ }));
330
227
  };
331
-
332
228
  // Prompt the user to create a new project if one doesn't exist on their target account
333
- const createNewProjectForLocalDev = async (
334
- projectConfig,
335
- targetAccountId,
336
- shouldCreateWithoutConfirmation,
337
- hasPublicApps
338
- ) => {
339
- // Create the project without prompting if this is a newly created sandbox
340
- let shouldCreateProject = shouldCreateWithoutConfirmation;
341
-
342
- if (!shouldCreateProject) {
343
- const explanationString = i18n(
344
- hasPublicApps
345
- ? `${i18nKey}.createNewProjectForLocalDev.publicAppProjectMustExistExplanation`
346
- : `${i18nKey}.createNewProjectForLocalDev.projectMustExistExplanation`,
347
- {
348
- accountIdentifier: uiAccountDescription(targetAccountId),
349
- projectName: projectConfig.name,
350
- }
351
- );
352
- logger.log();
353
- uiLine();
354
- logger.log(explanationString);
355
- uiLine();
356
-
357
- shouldCreateProject = await confirmPrompt(
358
- i18n(`${i18nKey}.createNewProjectForLocalDev.createProject`, {
359
- accountIdentifier: uiAccountDescription(targetAccountId),
360
- projectName: projectConfig.name,
361
- })
362
- );
363
- }
364
-
365
- if (shouldCreateProject) {
366
- SpinniesManager.add('createProject', {
367
- text: i18n(`${i18nKey}.createNewProjectForLocalDev.creatingProject`, {
368
- accountIdentifier: uiAccountDescription(targetAccountId),
369
- projectName: projectConfig.name,
370
- }),
371
- });
372
-
373
- try {
374
- const { data: project } = await createProject(
375
- targetAccountId,
376
- projectConfig.name
377
- );
378
- SpinniesManager.succeed('createProject', {
379
- text: i18n(`${i18nKey}.createNewProjectForLocalDev.createdProject`, {
380
- accountIdentifier: uiAccountDescription(targetAccountId),
381
- projectName: projectConfig.name,
382
- }),
383
- succeedColor: 'white',
384
- });
385
- return project;
386
- } catch (err) {
387
- SpinniesManager.fail('createProject');
388
- logger.log(
389
- i18n(`${i18nKey}.createNewProjectForLocalDev.failedToCreateProject`)
390
- );
391
- process.exit(EXIT_CODES.ERROR);
229
+ const createNewProjectForLocalDev = async (projectConfig, targetAccountId, shouldCreateWithoutConfirmation, hasPublicApps) => {
230
+ // Create the project without prompting if this is a newly created sandbox
231
+ let shouldCreateProject = shouldCreateWithoutConfirmation;
232
+ if (!shouldCreateProject) {
233
+ const explanationString = i18n(hasPublicApps
234
+ ? `${i18nKey}.createNewProjectForLocalDev.publicAppProjectMustExistExplanation`
235
+ : `${i18nKey}.createNewProjectForLocalDev.projectMustExistExplanation`, {
236
+ accountIdentifier: uiAccountDescription(targetAccountId),
237
+ projectName: projectConfig.name,
238
+ });
239
+ logger.log();
240
+ uiLine();
241
+ logger.log(explanationString);
242
+ uiLine();
243
+ shouldCreateProject = await confirmPrompt(i18n(`${i18nKey}.createNewProjectForLocalDev.createProject`, {
244
+ accountIdentifier: uiAccountDescription(targetAccountId),
245
+ projectName: projectConfig.name,
246
+ }));
247
+ }
248
+ if (shouldCreateProject) {
249
+ SpinniesManager.add('createProject', {
250
+ text: i18n(`${i18nKey}.createNewProjectForLocalDev.creatingProject`, {
251
+ accountIdentifier: uiAccountDescription(targetAccountId),
252
+ projectName: projectConfig.name,
253
+ }),
254
+ });
255
+ try {
256
+ const { data: project } = await createProject(targetAccountId, projectConfig.name);
257
+ SpinniesManager.succeed('createProject', {
258
+ text: i18n(`${i18nKey}.createNewProjectForLocalDev.createdProject`, {
259
+ accountIdentifier: uiAccountDescription(targetAccountId),
260
+ projectName: projectConfig.name,
261
+ }),
262
+ succeedColor: 'white',
263
+ });
264
+ return project;
265
+ }
266
+ catch (err) {
267
+ SpinniesManager.fail('createProject');
268
+ logger.log(i18n(`${i18nKey}.createNewProjectForLocalDev.failedToCreateProject`));
269
+ process.exit(EXIT_CODES.ERROR);
270
+ }
271
+ }
272
+ else {
273
+ // We cannot continue if the project does not exist in the target account
274
+ logger.log();
275
+ logger.log(i18n(`${i18nKey}.createNewProjectForLocalDev.choseNotToCreateProject`));
276
+ process.exit(EXIT_CODES.SUCCESS);
392
277
  }
393
- } else {
394
- // We cannot continue if the project does not exist in the target account
395
- logger.log();
396
- logger.log(
397
- i18n(`${i18nKey}.createNewProjectForLocalDev.choseNotToCreateProject`)
398
- );
399
- process.exit(EXIT_CODES.SUCCESS);
400
- }
401
278
  };
402
-
403
279
  // Create an initial build if the project was newly created in the account
404
280
  // Return the newly deployed build
405
- const createInitialBuildForNewProject = async (
406
- projectConfig,
407
- projectDir,
408
- targetAccountId
409
- ) => {
410
- const initialUploadResult = await handleProjectUpload(
411
- targetAccountId,
412
- projectConfig,
413
- projectDir,
414
- (...args) => pollProjectBuildAndDeploy(...args, true),
415
- i18n(`${i18nKey}.createInitialBuildForNewProject.initialUploadMessage`)
416
- );
417
-
418
- if (initialUploadResult.uploadError) {
419
- if (
420
- isSpecifiedError(initialUploadResult.uploadError, {
421
- subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED,
422
- })
423
- ) {
424
- logger.log();
425
- logger.error(
426
- i18n(`${i18nKey}.createInitialBuildForNewProject.projectLockedError`)
427
- );
428
- logger.log();
429
- } else {
430
- logError(
431
- initialUploadResult.uploadError,
432
- new ApiErrorContext({
433
- accountId: targetAccountId,
434
- projectName: projectConfig.name,
435
- })
436
- );
281
+ const createInitialBuildForNewProject = async (projectConfig, projectDir, targetAccountId) => {
282
+ const initialUploadResult = await handleProjectUpload(targetAccountId, projectConfig, projectDir, (...args) => pollProjectBuildAndDeploy(...args, true), i18n(`${i18nKey}.createInitialBuildForNewProject.initialUploadMessage`));
283
+ if (initialUploadResult.uploadError) {
284
+ if (isSpecifiedError(initialUploadResult.uploadError, {
285
+ subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED,
286
+ })) {
287
+ logger.log();
288
+ logger.error(i18n(`${i18nKey}.createInitialBuildForNewProject.projectLockedError`));
289
+ logger.log();
290
+ }
291
+ else {
292
+ logError(initialUploadResult.uploadError, new ApiErrorContext({
293
+ accountId: targetAccountId,
294
+ projectName: projectConfig.name,
295
+ }));
296
+ }
297
+ process.exit(EXIT_CODES.ERROR);
437
298
  }
438
- process.exit(EXIT_CODES.ERROR);
439
- }
440
-
441
- if (!initialUploadResult.succeeded) {
442
- let subTasks = [];
443
-
444
- if (initialUploadResult.buildResult.status === 'FAILURE') {
445
- subTasks =
446
- initialUploadResult.buildResult[PROJECT_BUILD_TEXT.SUBTASK_KEY];
447
- } else if (initialUploadResult.deployResult.status === 'FAILURE') {
448
- subTasks =
449
- initialUploadResult.deployResult[PROJECT_DEPLOY_TEXT.SUBTASK_KEY];
299
+ if (!initialUploadResult.succeeded) {
300
+ let subTasks = [];
301
+ if (initialUploadResult.buildResult.status === 'FAILURE') {
302
+ subTasks =
303
+ initialUploadResult.buildResult[PROJECT_BUILD_TEXT.SUBTASK_KEY];
304
+ }
305
+ else if (initialUploadResult.deployResult.status === 'FAILURE') {
306
+ subTasks =
307
+ initialUploadResult.deployResult[PROJECT_DEPLOY_TEXT.SUBTASK_KEY];
308
+ }
309
+ const failedSubTasks = subTasks.filter(task => task.status === 'FAILURE');
310
+ logger.log();
311
+ failedSubTasks.forEach(failedSubTask => {
312
+ logger.error(failedSubTask.errorMessage);
313
+ });
314
+ logger.log();
315
+ process.exit(EXIT_CODES.ERROR);
450
316
  }
451
-
452
- const failedSubTasks = subTasks.filter(task => task.status === 'FAILURE');
453
-
454
- logger.log();
455
- failedSubTasks.forEach(failedSubTask => {
456
- logger.error(failedSubTask.errorMessage);
457
- });
458
- logger.log();
459
-
460
- process.exit(EXIT_CODES.ERROR);
461
- }
462
-
463
- return initialUploadResult.buildResult;
317
+ return initialUploadResult.buildResult;
464
318
  };
465
-
466
319
  const getAccountHomeUrl = accountId => {
467
- const baseUrl = getHubSpotWebsiteOrigin(
468
- getEnv(accountId) === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD
469
- );
470
- return `${baseUrl}/home?portalId=${accountId}`;
320
+ const baseUrl = getHubSpotWebsiteOrigin(getEnv(accountId) === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD);
321
+ return `${baseUrl}/home?portalId=${accountId}`;
471
322
  };
472
-
473
323
  module.exports = {
474
- confirmDefaultAccountIsTarget,
475
- checkIfDefaultAccountIsSupported,
476
- checkIfAccountFlagIsSupported,
477
- suggestRecommendedNestedAccount,
478
- createSandboxForLocalDev,
479
- createDeveloperTestAccountForLocalDev,
480
- useExistingDevTestAccount,
481
- createNewProjectForLocalDev,
482
- createInitialBuildForNewProject,
483
- getAccountHomeUrl,
484
- checkIfParentAccountIsAuthed,
324
+ confirmDefaultAccountIsTarget,
325
+ checkIfDefaultAccountIsSupported,
326
+ checkIfAccountFlagIsSupported,
327
+ suggestRecommendedNestedAccount,
328
+ createSandboxForLocalDev,
329
+ createDeveloperTestAccountForLocalDev,
330
+ useExistingDevTestAccount,
331
+ createNewProjectForLocalDev,
332
+ createInitialBuildForNewProject,
333
+ getAccountHomeUrl,
334
+ checkIfParentAccountIsAuthed,
485
335
  };