@hubspot/cli 7.5.1-experimental.0 → 7.5.2-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 (377) hide show
  1. package/api/migrate.d.ts +12 -3
  2. package/api/migrate.js +9 -2
  3. package/bin/cli.js +96 -93
  4. package/commands/account/auth.d.ts +6 -0
  5. package/commands/account/auth.js +167 -0
  6. package/commands/account/clean.d.ts +3 -7
  7. package/commands/account/clean.js +54 -14
  8. package/commands/account/createOverride.d.ts +6 -0
  9. package/commands/account/createOverride.js +121 -0
  10. package/commands/account/info.d.ts +3 -7
  11. package/commands/account/info.js +51 -9
  12. package/commands/account/list.d.ts +3 -7
  13. package/commands/account/list.js +38 -13
  14. package/commands/account/remove.d.ts +3 -7
  15. package/commands/account/remove.js +57 -11
  16. package/commands/account/removeOverride.d.ts +6 -0
  17. package/commands/account/removeOverride.js +93 -0
  18. package/commands/account/rename.d.ts +3 -7
  19. package/commands/account/rename.js +16 -9
  20. package/commands/account/use.d.ts +5 -9
  21. package/commands/account/use.js +39 -9
  22. package/commands/account.d.ts +3 -4
  23. package/commands/account.js +33 -53
  24. package/commands/app/migrate.d.ts +5 -6
  25. package/commands/app/migrate.js +60 -44
  26. package/commands/app/secret/add.d.ts +7 -0
  27. package/commands/app/secret/add.js +64 -0
  28. package/commands/app/secret/delete.d.ts +8 -0
  29. package/commands/app/secret/delete.js +87 -0
  30. package/commands/app/secret/list.d.ts +6 -0
  31. package/commands/app/secret/list.js +64 -0
  32. package/commands/app/secret/update.d.ts +7 -0
  33. package/commands/app/secret/update.js +77 -0
  34. package/commands/app/secret.d.ts +3 -0
  35. package/commands/app/secret.js +30 -0
  36. package/commands/app.d.ts +2 -5
  37. package/commands/app.js +10 -10
  38. package/commands/auth.d.ts +3 -7
  39. package/commands/auth.js +20 -25
  40. package/commands/cms/convertFields.d.ts +7 -1
  41. package/commands/cms/convertFields.js +57 -41
  42. package/commands/cms/getReactModule.d.ts +7 -1
  43. package/commands/cms/getReactModule.js +52 -34
  44. package/commands/cms/lighthouseScore.d.ts +8 -1
  45. package/commands/cms/lighthouseScore.js +133 -100
  46. package/commands/cms.d.ts +3 -1
  47. package/commands/cms.js +22 -16
  48. package/commands/completion.d.ts +3 -1
  49. package/commands/completion.js +23 -13
  50. package/commands/config/migrate.d.ts +6 -0
  51. package/commands/config/migrate.js +75 -0
  52. package/commands/config/set.d.ts +10 -1
  53. package/commands/config/set.js +61 -32
  54. package/commands/config.d.ts +3 -1
  55. package/commands/config.js +19 -11
  56. package/commands/create/api-sample.d.ts +3 -1
  57. package/commands/create/api-sample.js +34 -36
  58. package/commands/create/app.d.ts +3 -1
  59. package/commands/create/app.js +9 -7
  60. package/commands/create/function.d.ts +3 -1
  61. package/commands/create/function.js +11 -10
  62. package/commands/create/index.d.ts +5 -1
  63. package/commands/create/index.js +23 -11
  64. package/commands/create/module.d.ts +3 -1
  65. package/commands/create/module.js +14 -13
  66. package/commands/create/react-app.d.ts +3 -1
  67. package/commands/create/react-app.js +10 -7
  68. package/commands/create/template.d.ts +3 -1
  69. package/commands/create/template.js +14 -14
  70. package/commands/create/vue-app.d.ts +3 -1
  71. package/commands/create/vue-app.js +10 -7
  72. package/commands/create/webpack-serverless.d.ts +3 -1
  73. package/commands/create/webpack-serverless.js +10 -7
  74. package/commands/create/website-theme.d.ts +3 -1
  75. package/commands/create/website-theme.js +10 -9
  76. package/commands/create.d.ts +4 -24
  77. package/commands/create.js +62 -75
  78. package/commands/customObject/create.d.ts +4 -9
  79. package/commands/customObject/create.js +17 -10
  80. package/commands/customObject/schema/create.d.ts +4 -9
  81. package/commands/customObject/schema/create.js +18 -11
  82. package/commands/customObject/schema/delete.d.ts +4 -9
  83. package/commands/customObject/schema/delete.js +21 -11
  84. package/commands/customObject/schema/fetch-all.d.ts +4 -9
  85. package/commands/customObject/schema/fetch-all.js +19 -11
  86. package/commands/customObject/schema/fetch.d.ts +4 -9
  87. package/commands/customObject/schema/fetch.js +19 -11
  88. package/commands/customObject/schema/list.d.ts +4 -8
  89. package/commands/customObject/schema/list.js +17 -10
  90. package/commands/customObject/schema/update.d.ts +4 -9
  91. package/commands/customObject/schema/update.js +18 -11
  92. package/commands/customObject/schema.d.ts +3 -5
  93. package/commands/customObject/schema.js +27 -54
  94. package/commands/customObject.d.ts +3 -4
  95. package/commands/customObject.js +20 -48
  96. package/commands/doctor.d.ts +6 -8
  97. package/commands/doctor.js +30 -22
  98. package/commands/feedback.d.ts +4 -1
  99. package/commands/feedback.js +38 -48
  100. package/commands/fetch.d.ts +12 -1
  101. package/commands/fetch.js +49 -34
  102. package/commands/filemanager/fetch.d.ts +4 -9
  103. package/commands/filemanager/fetch.js +18 -11
  104. package/commands/filemanager/upload.d.ts +4 -9
  105. package/commands/filemanager/upload.js +17 -11
  106. package/commands/filemanager.d.ts +3 -4
  107. package/commands/filemanager.js +18 -42
  108. package/commands/function/deploy.d.ts +6 -1
  109. package/commands/function/deploy.js +70 -50
  110. package/commands/function/list.d.ts +6 -1
  111. package/commands/function/list.js +44 -32
  112. package/commands/function/server.d.ts +10 -1
  113. package/commands/function/server.js +49 -38
  114. package/commands/function.d.ts +5 -1
  115. package/commands/function.js +22 -11
  116. package/commands/hubdb/clear.d.ts +4 -9
  117. package/commands/hubdb/clear.js +21 -15
  118. package/commands/hubdb/create.d.ts +4 -9
  119. package/commands/hubdb/create.js +23 -17
  120. package/commands/hubdb/delete.d.ts +4 -9
  121. package/commands/hubdb/delete.js +24 -16
  122. package/commands/hubdb/fetch.d.ts +4 -9
  123. package/commands/hubdb/fetch.js +20 -14
  124. package/commands/hubdb.d.ts +3 -2
  125. package/commands/hubdb.js +22 -47
  126. package/commands/init.d.ts +3 -7
  127. package/commands/init.js +25 -23
  128. package/commands/lint.d.ts +6 -4
  129. package/commands/lint.js +42 -44
  130. package/commands/list.d.ts +3 -7
  131. package/commands/list.js +21 -16
  132. package/commands/logs.d.ts +10 -1
  133. package/commands/logs.js +53 -45
  134. package/commands/module/marketplace-validate.d.ts +6 -1
  135. package/commands/module/marketplace-validate.js +39 -30
  136. package/commands/module.d.ts +3 -1
  137. package/commands/module.js +23 -12
  138. package/commands/mv.d.ts +3 -7
  139. package/commands/mv.js +20 -15
  140. package/commands/open.d.ts +3 -7
  141. package/commands/open.js +20 -15
  142. package/commands/project/add.d.ts +8 -9
  143. package/commands/project/add.js +53 -85
  144. package/commands/project/cloneApp.d.ts +6 -8
  145. package/commands/project/cloneApp.js +51 -47
  146. package/commands/project/create.d.ts +4 -1
  147. package/commands/project/create.js +132 -81
  148. package/commands/project/deploy.d.ts +4 -6
  149. package/commands/project/deploy.js +66 -36
  150. package/commands/project/dev/deprecatedFlow.d.ts +8 -2
  151. package/commands/project/dev/deprecatedFlow.js +41 -26
  152. package/commands/project/dev/index.d.ts +4 -5
  153. package/commands/project/dev/index.js +103 -33
  154. package/commands/project/dev/unifiedFlow.d.ts +11 -2
  155. package/commands/project/dev/unifiedFlow.js +87 -46
  156. package/commands/project/download.d.ts +3 -7
  157. package/commands/project/download.js +18 -19
  158. package/commands/project/installDeps.d.ts +6 -1
  159. package/commands/project/installDeps.js +48 -32
  160. package/commands/project/listBuilds.d.ts +3 -7
  161. package/commands/project/listBuilds.js +32 -27
  162. package/commands/project/logs.d.ts +10 -1
  163. package/commands/project/logs.js +73 -65
  164. package/commands/project/migrate.d.ts +7 -8
  165. package/commands/project/migrate.js +49 -26
  166. package/commands/project/migrateApp.d.ts +3 -8
  167. package/commands/project/migrateApp.js +23 -20
  168. package/commands/project/open.d.ts +3 -7
  169. package/commands/project/open.js +29 -21
  170. package/commands/project/profile/add.d.ts +7 -0
  171. package/commands/project/profile/add.js +209 -0
  172. package/commands/project/profile/delete.d.ts +6 -0
  173. package/commands/project/profile/delete.js +123 -0
  174. package/commands/project/profile.d.ts +3 -0
  175. package/commands/project/profile.js +25 -0
  176. package/commands/project/upload.d.ts +10 -1
  177. package/commands/project/upload.js +110 -56
  178. package/commands/project/watch.d.ts +6 -1
  179. package/commands/project/watch.js +95 -61
  180. package/commands/project.d.ts +3 -1
  181. package/commands/project.js +47 -37
  182. package/commands/remove.d.ts +3 -7
  183. package/commands/remove.js +22 -20
  184. package/commands/sandbox/create.d.ts +4 -9
  185. package/commands/sandbox/create.js +27 -21
  186. package/commands/sandbox/delete.d.ts +4 -9
  187. package/commands/sandbox/delete.js +35 -29
  188. package/commands/sandbox.d.ts +3 -4
  189. package/commands/sandbox.js +18 -44
  190. package/commands/secret/addSecret.d.ts +4 -9
  191. package/commands/secret/addSecret.js +21 -15
  192. package/commands/secret/deleteSecret.d.ts +4 -9
  193. package/commands/secret/deleteSecret.js +28 -18
  194. package/commands/secret/listSecret.d.ts +4 -9
  195. package/commands/secret/listSecret.js +19 -13
  196. package/commands/secret/updateSecret.d.ts +4 -9
  197. package/commands/secret/updateSecret.js +25 -17
  198. package/commands/secret.d.ts +3 -4
  199. package/commands/secret.js +23 -49
  200. package/commands/theme/generate-selectors.d.ts +3 -7
  201. package/commands/theme/generate-selectors.js +20 -16
  202. package/commands/theme/marketplace-validate.d.ts +4 -9
  203. package/commands/theme/marketplace-validate.js +22 -18
  204. package/commands/theme/preview.d.ts +4 -9
  205. package/commands/theme/preview.js +36 -30
  206. package/commands/theme.d.ts +3 -4
  207. package/commands/theme.js +22 -48
  208. package/commands/upload.d.ts +12 -1
  209. package/commands/upload.js +116 -135
  210. package/commands/watch.d.ts +14 -1
  211. package/commands/watch.js +74 -76
  212. package/lang/en.d.ts +3078 -0
  213. package/lang/en.js +2940 -3317
  214. package/lang/en.lyaml +89 -214
  215. package/lib/accountTypes.d.ts +1 -0
  216. package/lib/accountTypes.js +11 -0
  217. package/lib/app/migrate.d.ts +33 -4
  218. package/lib/app/migrate.js +171 -86
  219. package/lib/app/migrate_legacy.d.ts +2 -2
  220. package/lib/app/migrate_legacy.js +12 -11
  221. package/lib/app/urls.d.ts +16 -0
  222. package/lib/app/urls.js +16 -0
  223. package/lib/buildAccount.d.ts +1 -2
  224. package/lib/buildAccount.js +11 -10
  225. package/lib/commonOpts.d.ts +4 -7
  226. package/lib/commonOpts.js +47 -19
  227. package/lib/configMigrate.d.ts +2 -0
  228. package/lib/configMigrate.js +83 -0
  229. package/lib/configOptions.d.ts +4 -0
  230. package/lib/configOptions.js +41 -45
  231. package/lib/constants.d.ts +24 -0
  232. package/lib/constants.js +25 -1
  233. package/lib/dependencyManagement.d.ts +0 -5
  234. package/lib/dependencyManagement.js +14 -40
  235. package/lib/doctor/Diagnosis.d.ts +1 -2
  236. package/lib/doctor/Diagnosis.js +19 -16
  237. package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
  238. package/lib/doctor/DiagnosticInfoBuilder.js +10 -9
  239. package/lib/doctor/Doctor.d.ts +1 -0
  240. package/lib/doctor/Doctor.js +59 -45
  241. package/lib/errorHandlers/index.js +6 -7
  242. package/lib/errorHandlers/suppressError.js +18 -26
  243. package/lib/filesystem.d.ts +1 -1
  244. package/lib/generateSelectors.js +3 -6
  245. package/lib/hasFeature.d.ts +3 -1
  246. package/lib/interpolation.d.ts +2 -3
  247. package/lib/lang.d.ts +2 -3
  248. package/lib/marketplaceValidate.d.ts +12 -2
  249. package/lib/marketplaceValidate.js +22 -29
  250. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +3 -3
  251. package/lib/middleware/autoUpdateMiddleware.d.ts +1 -0
  252. package/lib/middleware/autoUpdateMiddleware.js +89 -0
  253. package/lib/middleware/configMiddleware.js +23 -3
  254. package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
  255. package/lib/middleware/fireAlarmMiddleware.js +125 -0
  256. package/lib/middleware/yargsChecksMiddleware.js +2 -2
  257. package/lib/npm.d.ts +9 -0
  258. package/lib/npm.js +36 -0
  259. package/lib/oauth.js +1 -2
  260. package/lib/process.js +1 -2
  261. package/lib/projectProfiles.d.ts +6 -0
  262. package/lib/projectProfiles.js +65 -0
  263. package/lib/projects/ProjectLogsManager.d.ts +1 -1
  264. package/lib/projects/ProjectLogsManager.js +16 -21
  265. package/lib/projects/add/legacyAddComponent.d.ts +5 -0
  266. package/lib/projects/add/legacyAddComponent.js +48 -0
  267. package/lib/projects/add/v3AddComponent.d.ts +8 -0
  268. package/lib/projects/add/v3AddComponent.js +85 -0
  269. package/lib/projects/buildAndDeploy.js +45 -41
  270. package/lib/projects/components.d.ts +2 -0
  271. package/lib/projects/components.js +82 -0
  272. package/lib/projects/config.d.ts +9 -0
  273. package/lib/projects/config.js +79 -0
  274. package/lib/projects/create/index.d.ts +23 -0
  275. package/lib/projects/create/index.js +33 -0
  276. package/lib/projects/create/legacy.d.ts +6 -0
  277. package/lib/projects/{create.js → create/legacy.js} +23 -15
  278. package/lib/projects/create/v3.d.ts +27 -0
  279. package/lib/projects/create/v3.js +158 -0
  280. package/lib/projects/ensureProjectExists.d.ts +11 -0
  281. package/lib/projects/ensureProjectExists.js +97 -0
  282. package/lib/projects/localDev/AppDevModeInterface.d.ts +26 -0
  283. package/lib/projects/localDev/AppDevModeInterface.js +178 -0
  284. package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
  285. package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +6 -6
  286. package/lib/projects/localDev/DevServerManagerV2.d.ts +22 -0
  287. package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +22 -19
  288. package/lib/projects/localDev/LocalDevLogger.d.ts +30 -0
  289. package/lib/projects/localDev/LocalDevLogger.js +158 -0
  290. package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
  291. package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +57 -83
  292. package/lib/projects/localDev/LocalDevProcess.d.ts +33 -0
  293. package/lib/projects/localDev/LocalDevProcess.js +198 -0
  294. package/lib/projects/localDev/LocalDevState.d.ts +47 -0
  295. package/lib/projects/localDev/LocalDevState.js +109 -0
  296. package/lib/projects/localDev/LocalDevWatcher.d.ts +10 -0
  297. package/lib/projects/localDev/LocalDevWatcher.js +53 -0
  298. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +20 -0
  299. package/lib/projects/localDev/LocalDevWebsocketServer.js +130 -0
  300. package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +6 -4
  301. package/lib/{localDev.js → projects/localDev/helpers.js} +127 -114
  302. package/lib/projects/ui.d.ts +1 -0
  303. package/lib/projects/ui.js +15 -0
  304. package/lib/projects/upload.d.ts +14 -2
  305. package/lib/projects/upload.js +25 -35
  306. package/lib/projects/urls.d.ts +1 -0
  307. package/lib/projects/urls.js +6 -0
  308. package/lib/projects/watch.d.ts +1 -1
  309. package/lib/projects/watch.js +21 -18
  310. package/lib/prompts/accountNamePrompt.js +16 -13
  311. package/lib/prompts/accountsPrompt.js +1 -2
  312. package/lib/prompts/cmsFieldPrompt.js +1 -2
  313. package/lib/prompts/createApiSamplePrompt.d.ts +2 -10
  314. package/lib/prompts/createApiSamplePrompt.js +4 -5
  315. package/lib/prompts/createFunctionPrompt.js +13 -14
  316. package/lib/prompts/createModulePrompt.js +8 -9
  317. package/lib/prompts/createProjectPrompt.d.ts +20 -4
  318. package/lib/prompts/createProjectPrompt.js +41 -13
  319. package/lib/prompts/createTemplatePrompt.d.ts +22 -4
  320. package/lib/prompts/createTemplatePrompt.js +1 -2
  321. package/lib/prompts/downloadProjectPrompt.js +3 -4
  322. package/lib/prompts/installAppPrompt.d.ts +1 -0
  323. package/lib/prompts/installAppPrompt.js +35 -0
  324. package/lib/prompts/personalAccessKeyPrompt.js +17 -18
  325. package/lib/prompts/previewPrompt.js +5 -6
  326. package/lib/prompts/projectAddPrompt.d.ts +5 -1
  327. package/lib/prompts/projectAddPrompt.js +35 -8
  328. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
  329. package/lib/prompts/projectDevTargetAccountPrompt.js +15 -16
  330. package/lib/prompts/projectNamePrompt.js +5 -6
  331. package/lib/prompts/projectsLogsPrompt.js +3 -2
  332. package/lib/prompts/promptUtils.d.ts +3 -2
  333. package/lib/prompts/promptUtils.js +2 -1
  334. package/lib/prompts/sandboxesPrompt.js +5 -6
  335. package/lib/prompts/secretPrompt.js +2 -3
  336. package/lib/prompts/selectAppPrompt.d.ts +2 -0
  337. package/lib/prompts/selectAppPrompt.js +40 -0
  338. package/lib/prompts/selectHubDBTablePrompt.js +11 -8
  339. package/lib/prompts/{selectPublicAppPrompt.d.ts → selectPublicAppForMigrationPrompt.d.ts} +1 -1
  340. package/lib/prompts/{selectPublicAppPrompt.js → selectPublicAppForMigrationPrompt.js} +8 -9
  341. package/lib/prompts/setAsDefaultAccountPrompt.js +11 -2
  342. package/lib/prompts/uploadPrompt.js +4 -5
  343. package/lib/sandboxSync.js +15 -14
  344. package/lib/sandboxes.js +12 -13
  345. package/lib/serverlessLogs.js +4 -6
  346. package/lib/testUtils.d.ts +3 -3
  347. package/lib/testUtils.js +8 -9
  348. package/lib/ui/SpinniesManager.d.ts +1 -1
  349. package/lib/ui/boxen.d.ts +5 -0
  350. package/lib/ui/boxen.js +30 -0
  351. package/lib/ui/git.js +8 -9
  352. package/lib/ui/index.d.ts +4 -2
  353. package/lib/ui/index.js +20 -17
  354. package/lib/ui/logger.d.ts +10 -0
  355. package/lib/ui/logger.js +15 -0
  356. package/lib/ui/serverlessFunctionLogs.js +2 -3
  357. package/lib/ui/spinniesUtils.d.ts +5 -5
  358. package/lib/upload.d.ts +1 -1
  359. package/lib/validation.js +4 -5
  360. package/lib/yargsUtils.d.ts +5 -1
  361. package/lib/yargsUtils.js +6 -0
  362. package/package.json +16 -10
  363. package/types/Cms.d.ts +30 -0
  364. package/types/Cms.js +2 -0
  365. package/types/LocalDev.d.ts +33 -0
  366. package/types/LocalDev.js +2 -0
  367. package/types/Projects.d.ts +19 -2
  368. package/types/Prompts.d.ts +0 -7
  369. package/types/Yargs.d.ts +14 -14
  370. package/lib/DevServerManagerV2.d.ts +0 -33
  371. package/lib/LocalDevManagerV2.d.ts +0 -64
  372. package/lib/LocalDevManagerV2.js +0 -377
  373. package/lib/projects/create.d.ts +0 -5
  374. package/lib/projects/index.d.ts +0 -21
  375. package/lib/projects/index.js +0 -194
  376. package/lib/prompts/installPublicAppPrompt.d.ts +0 -1
  377. package/lib/prompts/installPublicAppPrompt.js +0 -40
@@ -1,89 +1,96 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- // @ts-nocheck
4
- const path = require('path');
5
- const fs = require('fs-extra');
6
- const chalk = require('chalk');
7
- const { logger } = require('@hubspot/local-dev-lib/logger');
8
- const { fetchReleaseData, cloneGithubRepo, } = require('@hubspot/local-dev-lib/github');
9
- const { getCwd } = require('@hubspot/local-dev-lib/path');
10
- const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
11
- const { trackCommandUsage } = require('../../lib/usageTracking');
12
- const { createProjectPrompt, } = require('../../lib/prompts/createProjectPrompt');
13
- const { writeProjectConfig, getProjectConfig } = require('../../lib/projects');
14
- const { getProjectTemplateListFromRepo, EMPTY_PROJECT_TEMPLATE_NAME, } = require('../../lib/projects/create');
15
- const { i18n } = require('../../lib/lang');
16
- const { uiBetaTag, uiFeatureHighlight } = require('../../lib/ui');
17
- const { debugError } = require('../../lib/errorHandlers');
18
- const { EXIT_CODES } = require('../../lib/enums/exitCodes');
19
- const { PROJECT_CONFIG_FILE, HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, DEFAULT_PROJECT_TEMPLATE_BRANCH, } = require('../../lib/constants');
20
- const i18nKey = 'commands.project.subcommands.create';
21
- exports.command = 'create';
22
- exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
23
- exports.handler = async (options) => {
24
- const { derivedAccountId } = options;
25
- let latestRepoReleaseTag;
26
- let templateSource = options.templateSource;
27
- if (!templateSource) {
28
- templateSource = HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
29
- try {
30
- const releaseData = await fetchReleaseData(HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH);
31
- if (releaseData) {
32
- latestRepoReleaseTag = releaseData.tag_name;
33
- }
34
- }
35
- catch (err) {
36
- logger.error(i18n(`${i18nKey}.error.failedToFetchProjectList`));
37
- process.exit(EXIT_CODES.ERROR);
38
- }
6
+ const path_1 = __importDefault(require("path"));
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const github_1 = require("@hubspot/local-dev-lib/github");
9
+ const path_2 = require("@hubspot/local-dev-lib/path");
10
+ const usageTracking_1 = require("../../lib/usageTracking");
11
+ const config_1 = require("../../lib/projects/config");
12
+ const legacy_1 = require("../../lib/projects/create/legacy");
13
+ const v3_1 = require("../../lib/projects/create/v3");
14
+ const ui_1 = require("../../lib/ui");
15
+ const errorHandlers_1 = require("../../lib/errorHandlers");
16
+ const exitCodes_1 = require("../../lib/enums/exitCodes");
17
+ const constants_1 = require("../../lib/constants");
18
+ const yargsUtils_1 = require("../../lib/yargsUtils");
19
+ const projects_1 = require("@hubspot/local-dev-lib/constants/projects");
20
+ const en_1 = require("../../lang/en");
21
+ const logger_1 = require("../../lib/ui/logger");
22
+ const v3_2 = require("../../lib/projects/create/v3");
23
+ const create_1 = require("../../lib/projects/create");
24
+ const command = ['create', 'init'];
25
+ const describe = (0, ui_1.uiBetaTag)(en_1.commands.project.create.describe, false);
26
+ const { v2023_2, v2025_1, v2025_2 } = projects_1.PLATFORM_VERSIONS;
27
+ async function handler(args) {
28
+ const { derivedAccountId, platformVersion, templateSource } = args;
29
+ if (templateSource && !templateSource.includes('/')) {
30
+ logger_1.uiLogger.error(en_1.commands.project.create.errors.invalidTemplateSource);
31
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
32
+ }
33
+ const repo = templateSource || constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
34
+ let handleResult;
35
+ try {
36
+ handleResult = await (0, create_1.handleProjectCreationFlow)(args);
39
37
  }
40
- const projectTemplates = await getProjectTemplateListFromRepo(templateSource, latestRepoReleaseTag || DEFAULT_PROJECT_TEMPLATE_BRANCH);
41
- if (!projectTemplates.length) {
42
- logger.error(i18n(`${i18nKey}.error.failedToFetchProjectList`));
43
- process.exit(EXIT_CODES.ERROR);
38
+ catch (error) {
39
+ (0, errorHandlers_1.logError)(error);
40
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
44
41
  }
45
- const createProjectPromptResponse = await createProjectPrompt(options, projectTemplates);
46
- const projectDest = path.resolve(getCwd(), createProjectPromptResponse.dest);
47
- trackCommandUsage('project-create', { type: createProjectPromptResponse.projectTemplate.name }, derivedAccountId);
48
- const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await getProjectConfig(projectDest);
42
+ const { authType, distribution, repoConfig, projectContents, createProjectPromptResponse, } = handleResult;
43
+ (0, usageTracking_1.trackCommandUsage)('project-create', {
44
+ type: createProjectPromptResponse.projectTemplate?.name ||
45
+ (createProjectPromptResponse.componentTemplates || [])
46
+ // @ts-expect-error
47
+ .map((item) => item.label)
48
+ .join(','),
49
+ }, derivedAccountId);
50
+ const projectDest = path_1.default.resolve((0, path_2.getCwd)(), createProjectPromptResponse.dest);
51
+ const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await (0, config_1.getProjectConfig)(projectDest);
49
52
  // Exit if the target destination is within an existing project
50
- if (existingProjectConfig && projectDest.startsWith(existingProjectDir)) {
51
- logger.error(i18n(`${i18nKey}.errors.cannotNestProjects`, {
52
- projectDir: existingProjectDir,
53
- }));
54
- process.exit(EXIT_CODES.ERROR);
53
+ if (existingProjectConfig &&
54
+ existingProjectDir &&
55
+ projectDest.startsWith(existingProjectDir)) {
56
+ logger_1.uiLogger.error(en_1.commands.project.create.errors.cannotNestProjects(existingProjectDir));
57
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
55
58
  }
59
+ const components = (0, v3_2.generateComponentPaths)({
60
+ createProjectPromptResponse,
61
+ platformVersion,
62
+ repoConfig,
63
+ projectContents,
64
+ authType,
65
+ distribution,
66
+ });
56
67
  try {
57
- await cloneGithubRepo(templateSource, projectDest, {
58
- sourceDir: createProjectPromptResponse.projectTemplate.path,
59
- tag: latestRepoReleaseTag,
68
+ await (0, github_1.cloneGithubRepo)(repo, projectDest, {
69
+ sourceDir: createProjectPromptResponse.projectTemplate?.path || components,
60
70
  hideLogs: true,
71
+ branch: 'main',
61
72
  });
62
73
  }
63
74
  catch (err) {
64
- debugError(err);
65
- logger.error(i18n(`${i18nKey}.errors.failedToDownloadProject`));
66
- process.exit(EXIT_CODES.ERROR);
75
+ (0, errorHandlers_1.debugError)(err);
76
+ logger_1.uiLogger.error(en_1.commands.project.create.errors.failedToDownloadProject);
77
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
67
78
  }
68
- const projectConfigPath = path.join(projectDest, PROJECT_CONFIG_FILE);
69
- const parsedConfigFile = JSON.parse(fs.readFileSync(projectConfigPath).toString());
70
- writeProjectConfig(projectConfigPath, {
79
+ const projectConfigPath = path_1.default.join(projectDest, constants_1.PROJECT_CONFIG_FILE);
80
+ const parsedConfigFile = JSON.parse(fs_extra_1.default.readFileSync(projectConfigPath).toString());
81
+ (0, config_1.writeProjectConfig)(projectConfigPath, {
71
82
  ...parsedConfigFile,
72
83
  name: createProjectPromptResponse.name,
73
84
  });
74
85
  // If the template is 'no-template', we need to manually create a src directory
75
- if (createProjectPromptResponse.projectTemplate.name ===
76
- EMPTY_PROJECT_TEMPLATE_NAME) {
77
- fs.ensureDirSync(path.join(projectDest, 'src'));
86
+ if (createProjectPromptResponse.projectTemplate?.name ===
87
+ legacy_1.EMPTY_PROJECT_TEMPLATE_NAME ||
88
+ projectContents === v3_1.EMPTY_PROJECT) {
89
+ fs_extra_1.default.ensureDirSync(path_1.default.join(projectDest, 'src'));
78
90
  }
79
- logger.log('');
80
- logger.success(i18n(`${i18nKey}.logs.success`, {
81
- projectName: createProjectPromptResponse.name,
82
- projectDest,
83
- }));
84
- logger.log('');
85
- logger.log(chalk.bold(i18n(`${i18nKey}.logs.welcomeMessage`)));
86
- uiFeatureHighlight([
91
+ logger_1.uiLogger.success(en_1.commands.project.create.logs.success(createProjectPromptResponse.name, projectDest));
92
+ logger_1.uiLogger.log(en_1.commands.project.create.logs.welcomeMessage);
93
+ (0, ui_1.uiFeatureHighlight)([
87
94
  'projectCommandTip',
88
95
  'projectUploadCommand',
89
96
  'projectDevCommand',
@@ -92,36 +99,80 @@ exports.handler = async (options) => {
92
99
  'feedbackCommand',
93
100
  'sampleProjects',
94
101
  ]);
95
- process.exit(EXIT_CODES.SUCCESS);
96
- };
97
- exports.builder = yargs => {
102
+ process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
103
+ }
104
+ function projectCreateBuilder(yargs) {
98
105
  yargs.options({
99
106
  name: {
100
- describe: i18n(`${i18nKey}.options.name.describe`),
107
+ describe: en_1.commands.project.create.options.name.describe,
101
108
  type: 'string',
102
109
  },
103
110
  dest: {
104
- describe: i18n(`${i18nKey}.options.dest.describe`),
111
+ describe: en_1.commands.project.create.options.dest.describe,
105
112
  type: 'string',
106
113
  },
107
114
  template: {
108
- describe: i18n(`${i18nKey}.options.template.describe`),
115
+ // TODO: When we release 2025.2 scaffolding, we need to point out this is only valid for 2025.1 prior
116
+ describe: en_1.commands.project.create.options.template.describe,
109
117
  type: 'string',
110
118
  },
111
119
  'template-source': {
112
- describe: i18n(`${i18nKey}.options.templateSource.describe`),
120
+ describe: en_1.commands.project.create.options.templateSource.describe,
121
+ type: 'string',
122
+ },
123
+ 'platform-version': {
124
+ describe: en_1.commands.project.create.options.platformVersion.describe,
125
+ hidden: true,
126
+ type: 'string',
127
+ choices: [v2023_2, v2025_1, v2025_2],
128
+ default: v2023_2,
129
+ },
130
+ 'project-base': {
131
+ describe: en_1.commands.project.create.options.projectBase.describe,
132
+ hidden: true,
133
+ type: 'string',
134
+ choices: [v3_1.EMPTY_PROJECT, v3_1.PROJECT_WITH_APP],
135
+ },
136
+ distribution: {
137
+ describe: en_1.commands.project.create.options.distribution.describe,
138
+ hidden: true,
139
+ type: 'string',
140
+ choices: [constants_1.privateDistribution, constants_1.marketplaceDistribution],
141
+ },
142
+ auth: {
143
+ describe: en_1.commands.project.create.options.auth.describe,
144
+ hidden: true,
113
145
  type: 'string',
146
+ choices: [constants_1.oAuth, constants_1.staticAuth],
147
+ },
148
+ features: {
149
+ describe: en_1.commands.project.create.options.features.describe,
150
+ hidden: true,
151
+ type: 'array',
114
152
  },
115
153
  });
116
- yargs.example([['$0 project create', i18n(`${i18nKey}.examples.default`)]]);
154
+ yargs.conflicts('template', 'features');
155
+ yargs.example([
156
+ ['$0 project create', en_1.commands.project.create.examples.default],
157
+ ]);
117
158
  yargs.example([
118
159
  [
119
160
  '$0 project create --template-source HubSpot/ui-extensions-examples',
120
- i18n(`${i18nKey}.examples.templateSource`),
161
+ en_1.commands.project.create.examples.templateSource,
121
162
  ],
122
163
  ]);
123
- addConfigOptions(yargs);
124
- addAccountOptions(yargs);
125
- addUseEnvironmentOptions(yargs);
126
164
  return yargs;
165
+ }
166
+ const builder = (0, yargsUtils_1.makeYargsBuilder)(projectCreateBuilder, command, describe, {
167
+ useGlobalOptions: true,
168
+ useAccountOptions: true,
169
+ useConfigOptions: true,
170
+ useEnvironmentOptions: true,
171
+ });
172
+ const projectCreateCommand = {
173
+ command,
174
+ describe,
175
+ handler,
176
+ builder,
127
177
  };
178
+ exports.default = projectCreateCommand;
@@ -1,11 +1,9 @@
1
- import { Argv, ArgumentsCamelCase } from 'yargs';
2
- import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs } from '../../types/Yargs';
3
- export declare const command = "deploy";
4
- export declare const describe: string;
1
+ import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs, YargsCommandModule } from '../../types/Yargs';
5
2
  export type ProjectDeployArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & {
6
3
  project?: string;
7
4
  build?: number;
8
5
  buildId?: number;
6
+ profile?: string;
9
7
  };
10
- export declare function handler(args: ArgumentsCamelCase<ProjectDeployArgs>): Promise<void>;
11
- export declare const builder: (yargs: Argv) => Promise<Argv<ProjectDeployArgs>>;
8
+ declare const projectDeployCommand: YargsCommandModule<unknown, ProjectDeployArgs>;
9
+ export default projectDeployCommand;
@@ -3,8 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.builder = exports.describe = exports.command = void 0;
7
- exports.handler = handler;
8
6
  const chalk_1 = __importDefault(require("chalk"));
9
7
  const projects_1 = require("@hubspot/local-dev-lib/api/projects");
10
8
  const config_1 = require("@hubspot/local-dev-lib/config");
@@ -13,7 +11,7 @@ const index_1 = require("@hubspot/local-dev-lib/errors/index");
13
11
  const buildAndDeploy_1 = require("../../lib/projects/buildAndDeploy");
14
12
  const usageTracking_1 = require("../../lib/usageTracking");
15
13
  const index_2 = require("../../lib/errorHandlers/index");
16
- const projects_2 = require("../../lib/projects");
14
+ const config_2 = require("../../lib/projects/config");
17
15
  const buildAndDeploy_2 = require("../../lib/projects/buildAndDeploy");
18
16
  const urls_1 = require("../../lib/projects/urls");
19
17
  const projectNamePrompt_1 = require("../../lib/prompts/projectNamePrompt");
@@ -23,49 +21,68 @@ const ui_1 = require("../../lib/ui");
23
21
  const exitCodes_1 = require("../../lib/enums/exitCodes");
24
22
  const ui_2 = require("../../lib/ui");
25
23
  const yargsUtils_1 = require("../../lib/yargsUtils");
26
- const i18nKey = 'commands.project.subcommands.deploy';
27
- exports.command = 'deploy';
28
- exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
24
+ const projectProfiles_1 = require("../../lib/projectProfiles");
25
+ const command = 'deploy';
26
+ const describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.deploy.describe`), false);
29
27
  function validateBuildId(buildId, deployedBuildId, latestBuildId, projectName, accountId) {
30
28
  if (Number(buildId) > latestBuildId) {
31
- return (0, lang_1.i18n)(`${i18nKey}.errors.buildIdDoesNotExist`, {
29
+ return (0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.buildIdDoesNotExist`, {
32
30
  buildId: buildId,
33
31
  projectName: projectName,
34
- linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
32
+ linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
35
33
  });
36
34
  }
37
35
  if (Number(buildId) === deployedBuildId) {
38
- return (0, lang_1.i18n)(`${i18nKey}.errors.buildAlreadyDeployed`, {
36
+ return (0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.buildAlreadyDeployed`, {
39
37
  buildId: buildId,
40
- linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
38
+ linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
41
39
  });
42
40
  }
43
41
  return true;
44
42
  }
45
43
  async function handler(args) {
46
- const { derivedAccountId } = args;
44
+ const { derivedAccountId, project: projectOption, buildId: buildIdOption, } = args;
47
45
  const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
48
- const { project: projectOption, buildId: buildIdOption } = args;
49
46
  const accountType = accountConfig && accountConfig.accountType;
50
- (0, usageTracking_1.trackCommandUsage)('project-deploy', accountType ? { type: accountType } : undefined, derivedAccountId);
51
- const { projectConfig } = await (0, projects_2.getProjectConfig)();
47
+ let targetAccountId;
48
+ const { projectConfig, projectDir } = await (0, config_2.getProjectConfig)();
49
+ if ((0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion)) {
50
+ if (args.profile) {
51
+ (0, projectProfiles_1.logProfileHeader)(args.profile);
52
+ const profile = (0, projectProfiles_1.loadProfile)(projectConfig, projectDir, args.profile);
53
+ if (!profile) {
54
+ (0, ui_1.uiLine)();
55
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
56
+ }
57
+ targetAccountId = profile.accountId;
58
+ (0, projectProfiles_1.logProfileFooter)(profile);
59
+ }
60
+ else {
61
+ // A profile must be specified if this project has profiles configured
62
+ await (0, projectProfiles_1.exitIfUsingProfiles)(projectConfig, projectDir);
63
+ }
64
+ }
65
+ if (!targetAccountId) {
66
+ targetAccountId = derivedAccountId;
67
+ }
68
+ (0, usageTracking_1.trackCommandUsage)('project-deploy', accountType ? { type: accountType } : undefined, targetAccountId);
52
69
  let projectName = projectOption;
53
70
  if (!projectOption && projectConfig) {
54
71
  projectName = projectConfig.name;
55
72
  }
56
- const namePromptResponse = await (0, projectNamePrompt_1.projectNamePrompt)(derivedAccountId, {
73
+ const namePromptResponse = await (0, projectNamePrompt_1.projectNamePrompt)(targetAccountId, {
57
74
  project: projectName,
58
75
  });
59
76
  projectName = namePromptResponse.projectName;
60
77
  let buildIdToDeploy = buildIdOption;
61
78
  try {
62
- const { data: { latestBuild, deployedBuildId }, } = await (0, projects_1.fetchProject)(derivedAccountId, projectName);
79
+ const { data: { latestBuild, deployedBuildId }, } = await (0, projects_1.fetchProject)(targetAccountId, projectName);
63
80
  if (!latestBuild || !latestBuild.buildId) {
64
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noBuilds`));
81
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.noBuilds`));
65
82
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
66
83
  }
67
84
  if (buildIdToDeploy) {
68
- const validationResult = validateBuildId(buildIdToDeploy, deployedBuildId, latestBuild.buildId, projectName, derivedAccountId);
85
+ const validationResult = validateBuildId(buildIdToDeploy, deployedBuildId, latestBuild.buildId, projectName, targetAccountId);
69
86
  if (validationResult !== true) {
70
87
  logger_1.logger.error(validationResult);
71
88
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
@@ -74,30 +91,30 @@ async function handler(args) {
74
91
  else {
75
92
  const deployBuildIdPromptResponse = await (0, promptUtils_1.promptUser)({
76
93
  name: 'buildId',
77
- message: (0, lang_1.i18n)(`${i18nKey}.deployBuildIdPrompt`),
94
+ message: (0, lang_1.i18n)(`commands.project.subcommands.deploy.deployBuildIdPrompt`),
78
95
  default: latestBuild.buildId === deployedBuildId
79
96
  ? undefined
80
97
  : latestBuild.buildId,
81
- validate: buildId => validateBuildId(buildId, deployedBuildId, latestBuild.buildId, projectName, derivedAccountId),
98
+ validate: buildId => validateBuildId(buildId, deployedBuildId, latestBuild.buildId, projectName, targetAccountId),
82
99
  });
83
100
  buildIdToDeploy = deployBuildIdPromptResponse.buildId;
84
101
  }
85
102
  if (!buildIdToDeploy) {
86
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noBuildId`));
103
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.noBuildId`));
87
104
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
88
105
  }
89
- const { data: deployResp } = await (0, projects_1.deployProject)(derivedAccountId, projectName, buildIdToDeploy, (0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion));
106
+ const { data: deployResp } = await (0, projects_1.deployProject)(targetAccountId, projectName, buildIdToDeploy, (0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion));
90
107
  if (!deployResp) {
91
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.deploy`));
108
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.deploy`));
92
109
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
93
110
  }
94
- await (0, buildAndDeploy_2.pollDeployStatus)(derivedAccountId, projectName, Number(deployResp.id), buildIdToDeploy);
111
+ await (0, buildAndDeploy_2.pollDeployStatus)(targetAccountId, projectName, Number(deployResp.id), buildIdToDeploy);
95
112
  }
96
113
  catch (e) {
97
114
  if ((0, index_1.isHubSpotHttpError)(e) && e.status === 404) {
98
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.projectNotFound`, {
115
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.projectNotFound`, {
99
116
  projectName: chalk_1.default.bold(projectName),
100
- accountIdentifier: (0, ui_2.uiAccountDescription)(derivedAccountId),
117
+ accountIdentifier: (0, ui_2.uiAccountDescription)(targetAccountId),
101
118
  command: (0, ui_2.uiCommandReference)('hs project upload'),
102
119
  }));
103
120
  }
@@ -106,7 +123,7 @@ async function handler(args) {
106
123
  }
107
124
  else {
108
125
  (0, index_2.logError)(e, new index_2.ApiErrorContext({
109
- accountId: derivedAccountId,
126
+ accountId: targetAccountId,
110
127
  request: 'project deploy',
111
128
  }));
112
129
  }
@@ -116,32 +133,45 @@ async function handler(args) {
116
133
  function projectDeployBuilder(yargs) {
117
134
  yargs.options({
118
135
  project: {
119
- describe: (0, lang_1.i18n)(`${i18nKey}.options.project.describe`),
136
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.project.describe`),
120
137
  type: 'string',
121
138
  },
122
139
  build: {
123
140
  alias: ['build-id'],
124
- describe: (0, lang_1.i18n)(`${i18nKey}.options.build.describe`),
141
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.build.describe`),
125
142
  type: 'number',
126
143
  },
144
+ profile: {
145
+ alias: ['p'],
146
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.profile.describe`),
147
+ type: 'string',
148
+ hidden: true,
149
+ },
127
150
  });
151
+ yargs.conflicts('profile', 'project');
152
+ yargs.conflicts('profile', 'account');
128
153
  yargs.example([
129
- ['$0 project deploy', (0, lang_1.i18n)(`${i18nKey}.examples.default`)],
154
+ [
155
+ '$0 project deploy',
156
+ (0, lang_1.i18n)(`commands.project.subcommands.deploy.examples.default`),
157
+ ],
130
158
  [
131
159
  '$0 project deploy --project="my-project" --build=5',
132
- (0, lang_1.i18n)(`${i18nKey}.examples.withOptions`),
160
+ (0, lang_1.i18n)(`commands.project.subcommands.deploy.examples.withOptions`),
133
161
  ],
134
162
  ]);
135
163
  return yargs;
136
164
  }
137
- exports.builder = (0, yargsUtils_1.makeYargsBuilder)(projectDeployBuilder, exports.command, exports.describe, {
165
+ const builder = (0, yargsUtils_1.makeYargsBuilder)(projectDeployBuilder, command, describe, {
166
+ useGlobalOptions: true,
138
167
  useConfigOptions: true,
139
168
  useAccountOptions: true,
140
169
  useEnvironmentOptions: true,
141
170
  });
142
- module.exports = {
143
- command: exports.command,
144
- describe: exports.describe,
145
- builder: exports.builder,
171
+ const projectDeployCommand = {
172
+ command,
173
+ describe,
174
+ builder,
146
175
  handler,
147
176
  };
177
+ exports.default = projectDeployCommand;
@@ -1,5 +1,11 @@
1
1
  import { ArgumentsCamelCase } from 'yargs';
2
- import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
3
2
  import { ProjectConfig } from '../../../types/Projects';
4
3
  import { ProjectDevArgs } from '../../../types/Yargs';
5
- export declare function deprecatedProjectDevFlow(args: ArgumentsCamelCase<ProjectDevArgs>, accountConfig: CLIAccount, projectConfig: ProjectConfig, projectDir: string): Promise<void>;
4
+ type DeprecatedProjectDevFlowArgs = {
5
+ args: ArgumentsCamelCase<ProjectDevArgs>;
6
+ accountId: number;
7
+ projectConfig: ProjectConfig;
8
+ projectDir: string;
9
+ };
10
+ export declare function deprecatedProjectDevFlow({ args, accountId, projectConfig, projectDir, }: DeprecatedProjectDevFlowArgs): Promise<void>;
11
+ export {};
@@ -13,13 +13,12 @@ const lang_1 = require("../../../lib/lang");
13
13
  const exitCodes_1 = require("../../../lib/enums/exitCodes");
14
14
  const ui_1 = require("../../../lib/ui");
15
15
  const SpinniesManager_1 = __importDefault(require("../../../lib/ui/SpinniesManager"));
16
- const LocalDevManager_1 = __importDefault(require("../../../lib/LocalDevManager"));
17
- const localDev_1 = require("../../../lib/localDev");
16
+ const LocalDevManager_1 = __importDefault(require("../../../lib/projects/localDev/LocalDevManager"));
17
+ const helpers_1 = require("../../../lib/projects/localDev/helpers");
18
18
  const process_1 = require("../../../lib/process");
19
19
  const accountTypes_1 = require("../../../lib/accountTypes");
20
- const projects_1 = require("../../../lib/projects");
21
- const i18nKey = 'commands.project.subcommands.dev';
22
- async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, projectDir) {
20
+ const ensureProjectExists_1 = require("../../../lib/projects/ensureProjectExists");
21
+ async function deprecatedProjectDevFlow({ args, accountId, projectConfig, projectDir, }) {
23
22
  const { providedAccountId, derivedAccountId } = args;
24
23
  const env = (0, environment_1.getValidEnv)((0, config_1.getEnv)(derivedAccountId));
25
24
  const components = await (0, structure_1.findProjectComponents)(projectDir);
@@ -27,26 +26,43 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
27
26
  const componentTypes = (0, structure_1.getProjectComponentTypes)(runnableComponents);
28
27
  const hasPrivateApps = !!componentTypes[Projects_1.ComponentTypes.PrivateApp];
29
28
  const hasPublicApps = !!componentTypes[Projects_1.ComponentTypes.PublicApp];
29
+ const accountConfig = (0, config_1.getAccountConfig)(accountId);
30
+ if (!accountConfig) {
31
+ logger_1.logger.error((0, lang_1.i18n)('commands.project.subcommands.dev.errors.noAccount', {
32
+ accountId: accountId,
33
+ authCommand: (0, ui_1.uiCommandReference)('hs auth'),
34
+ }));
35
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
36
+ }
30
37
  if (runnableComponents.length === 0) {
31
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noRunnableComponents`, {
38
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noRunnableComponents`, {
32
39
  projectDir,
33
40
  command: (0, ui_1.uiCommandReference)('hs project add'),
34
41
  }));
35
42
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
36
43
  }
37
44
  else if (hasPrivateApps && hasPublicApps) {
38
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.invalidProjectComponents`));
45
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.invalidProjectComponents`));
39
46
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
40
47
  }
41
48
  const accounts = (0, config_1.getConfigAccounts)();
42
49
  if (!accounts) {
43
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccountsInConfig`, {
50
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccountsInConfig`, {
44
51
  authCommand: (0, ui_1.uiCommandReference)('hs auth'),
45
52
  }));
46
53
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
47
54
  }
48
- const defaultAccountIsRecommendedType = (0, accountTypes_1.isDeveloperTestAccount)(accountConfig) ||
49
- (!hasPublicApps && (0, accountTypes_1.isSandbox)(accountConfig));
55
+ let bypassRecommendedAccountPrompt = false;
56
+ if ((0, accountTypes_1.isDeveloperTestAccount)(accountConfig)) {
57
+ bypassRecommendedAccountPrompt = true;
58
+ }
59
+ else if (!hasPublicApps && (0, accountTypes_1.isSandbox)(accountConfig)) {
60
+ bypassRecommendedAccountPrompt = true;
61
+ }
62
+ else if (!hasPublicApps) {
63
+ const defaultAccountHasSandboxes = await (0, helpers_1.hasSandboxes)(accountConfig);
64
+ bypassRecommendedAccountPrompt = !defaultAccountHasSandboxes;
65
+ }
50
66
  // targetProjectAccountId and targetTestingAccountId are set to null if --account flag is not provided.
51
67
  // By setting them to null, we can later check if they need to be assigned based on the default account configuration and the type of app.
52
68
  let targetProjectAccountId = providedAccountId ? derivedAccountId : null;
@@ -54,20 +70,20 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
54
70
  let targetTestingAccountId = providedAccountId ? derivedAccountId : null;
55
71
  // Check that the default account or flag option is valid for the type of app in this project
56
72
  if (providedAccountId) {
57
- (0, localDev_1.checkIfAccountFlagIsSupported)(accountConfig, hasPublicApps);
73
+ (0, helpers_1.checkIfAccountFlagIsSupported)(accountConfig, hasPublicApps);
58
74
  if (hasPublicApps) {
59
75
  targetProjectAccountId = accountConfig.parentAccountId || null;
60
76
  }
61
77
  }
62
78
  else {
63
- (0, localDev_1.checkIfDefaultAccountIsSupported)(accountConfig, hasPublicApps);
79
+ await (0, helpers_1.checkIfDefaultAccountIsSupported)(accountConfig, hasPublicApps);
64
80
  }
65
81
  // The user is targeting an account type that we recommend developing on
66
- if (!targetProjectAccountId && defaultAccountIsRecommendedType) {
82
+ if (!targetProjectAccountId && bypassRecommendedAccountPrompt) {
67
83
  targetTestingAccountId = derivedAccountId;
68
- await (0, localDev_1.confirmDefaultAccountIsTarget)(accountConfig);
84
+ await (0, helpers_1.confirmDefaultAccountIsTarget)(accountConfig);
69
85
  if (hasPublicApps) {
70
- (0, localDev_1.checkIfParentAccountIsAuthed)(accountConfig);
86
+ (0, helpers_1.checkIfParentAccountIsAuthed)(accountConfig);
71
87
  targetProjectAccountId = accountConfig.parentAccountId || null;
72
88
  }
73
89
  else {
@@ -77,34 +93,33 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
77
93
  let createNewSandbox = false;
78
94
  let createNewDeveloperTestAccount = false;
79
95
  if (!targetProjectAccountId) {
80
- const { targetAccountId, parentAccountId, createNestedAccount, notInConfigAccount, } = await (0, localDev_1.suggestRecommendedNestedAccount)(accounts, accountConfig, hasPublicApps);
96
+ const { targetAccountId, parentAccountId, createNestedAccount, notInConfigAccount, } = await (0, helpers_1.suggestRecommendedNestedAccount)(accounts, accountConfig, hasPublicApps);
81
97
  targetProjectAccountId = hasPublicApps
82
98
  ? parentAccountId || null
83
99
  : targetAccountId;
84
100
  targetTestingAccountId = targetAccountId;
85
101
  // Only used for developer test accounts that are not yet in the config
86
102
  if (notInConfigAccount) {
87
- await (0, localDev_1.useExistingDevTestAccount)(env, notInConfigAccount);
103
+ await (0, helpers_1.useExistingDevTestAccount)(env, notInConfigAccount);
88
104
  }
89
- createNewSandbox = (0, accountTypes_1.isStandardAccount)(accountConfig) && createNestedAccount;
90
- createNewDeveloperTestAccount =
91
- (0, accountTypes_1.isAppDeveloperAccount)(accountConfig) && createNestedAccount;
105
+ createNewSandbox = hasPrivateApps && createNestedAccount;
106
+ createNewDeveloperTestAccount = hasPublicApps && createNestedAccount;
92
107
  }
93
108
  if (createNewSandbox) {
94
- targetProjectAccountId = await (0, localDev_1.createSandboxForLocalDev)(derivedAccountId, accountConfig, env);
109
+ targetProjectAccountId = await (0, helpers_1.createSandboxForLocalDev)(derivedAccountId, accountConfig, env);
95
110
  // We will be running our tests against this new sandbox account
96
111
  targetTestingAccountId = targetProjectAccountId;
97
112
  }
98
113
  if (createNewDeveloperTestAccount) {
99
- targetTestingAccountId = await (0, localDev_1.createDeveloperTestAccountForLocalDev)(derivedAccountId, accountConfig, env);
114
+ targetTestingAccountId = await (0, helpers_1.createDeveloperTestAccountForLocalDev)(derivedAccountId, accountConfig, env);
100
115
  targetProjectAccountId = derivedAccountId;
101
116
  }
102
117
  if (!targetProjectAccountId || !targetTestingAccountId) {
103
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccount`));
118
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccount`));
104
119
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
105
120
  }
106
121
  // eslint-disable-next-line prefer-const
107
- let { projectExists, project } = await (0, projects_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
122
+ let { projectExists, project } = await (0, ensureProjectExists_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
108
123
  allowCreate: false,
109
124
  noLogs: true,
110
125
  withPolling: createNewSandbox,
@@ -117,8 +132,8 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
117
132
  isGithubLinked = Boolean(project.sourceIntegration && project.sourceIntegration.source === 'GITHUB');
118
133
  }
119
134
  else {
120
- project = await (0, localDev_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps);
121
- deployedBuild = await (0, localDev_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId);
135
+ project = await (0, helpers_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps);
136
+ deployedBuild = await (0, helpers_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId);
122
137
  }
123
138
  const LocalDev = new LocalDevManager_1.default({
124
139
  runnableComponents,