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