@hubspot/cli 7.5.11-experimental.0 → 7.6.0-beta.1

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 (352) hide show
  1. package/bin/cli.js +102 -95
  2. package/commands/account/auth.d.ts +5 -7
  3. package/commands/account/auth.js +74 -87
  4. package/commands/account/clean.d.ts +3 -7
  5. package/commands/account/clean.js +16 -9
  6. package/commands/account/createOverride.d.ts +3 -7
  7. package/commands/account/createOverride.js +23 -6
  8. package/commands/account/info.d.ts +3 -7
  9. package/commands/account/info.js +13 -5
  10. package/commands/account/list.d.ts +3 -7
  11. package/commands/account/list.js +15 -8
  12. package/commands/account/remove.d.ts +3 -7
  13. package/commands/account/remove.js +21 -9
  14. package/commands/account/removeOverride.d.ts +3 -7
  15. package/commands/account/removeOverride.js +23 -6
  16. package/commands/account/rename.d.ts +3 -7
  17. package/commands/account/rename.js +16 -9
  18. package/commands/account/use.d.ts +5 -9
  19. package/commands/account/use.js +14 -6
  20. package/commands/account.d.ts +3 -4
  21. package/commands/account.js +33 -58
  22. package/commands/app/migrate.d.ts +1 -2
  23. package/commands/app/migrate.js +7 -8
  24. package/commands/app/secret/add.d.ts +7 -0
  25. package/commands/app/secret/add.js +64 -0
  26. package/commands/app/secret/delete.d.ts +8 -0
  27. package/commands/app/secret/delete.js +87 -0
  28. package/commands/app/secret/list.d.ts +6 -0
  29. package/commands/app/secret/list.js +64 -0
  30. package/commands/app/secret/update.d.ts +7 -0
  31. package/commands/app/secret/update.js +77 -0
  32. package/commands/app/secret.d.ts +3 -0
  33. package/commands/app/secret.js +30 -0
  34. package/commands/app.d.ts +2 -5
  35. package/commands/app.js +10 -8
  36. package/commands/auth.d.ts +5 -7
  37. package/commands/auth.js +29 -28
  38. package/commands/cms/convertFields.d.ts +7 -1
  39. package/commands/cms/convertFields.js +57 -41
  40. package/commands/cms/getReactModule.d.ts +7 -1
  41. package/commands/cms/getReactModule.js +52 -34
  42. package/commands/cms/lighthouseScore.d.ts +8 -1
  43. package/commands/cms/lighthouseScore.js +129 -100
  44. package/commands/cms.d.ts +3 -1
  45. package/commands/cms.js +22 -15
  46. package/commands/completion.d.ts +3 -1
  47. package/commands/completion.js +23 -12
  48. package/commands/config/migrate.d.ts +3 -7
  49. package/commands/config/migrate.js +37 -46
  50. package/commands/config/set.d.ts +5 -6
  51. package/commands/config/set.js +38 -14
  52. package/commands/config.d.ts +3 -4
  53. package/commands/config.js +18 -44
  54. package/commands/create/api-sample.d.ts +3 -1
  55. package/commands/create/api-sample.js +34 -38
  56. package/commands/create/app.d.ts +3 -1
  57. package/commands/create/app.js +9 -7
  58. package/commands/create/function.d.ts +3 -1
  59. package/commands/create/function.js +11 -10
  60. package/commands/create/index.d.ts +5 -1
  61. package/commands/create/index.js +23 -11
  62. package/commands/create/module.d.ts +3 -1
  63. package/commands/create/module.js +14 -13
  64. package/commands/create/react-app.d.ts +3 -1
  65. package/commands/create/react-app.js +10 -7
  66. package/commands/create/template.d.ts +3 -1
  67. package/commands/create/template.js +14 -14
  68. package/commands/create/vue-app.d.ts +3 -1
  69. package/commands/create/vue-app.js +10 -7
  70. package/commands/create/webpack-serverless.d.ts +3 -1
  71. package/commands/create/webpack-serverless.js +10 -7
  72. package/commands/create/website-theme.d.ts +3 -1
  73. package/commands/create/website-theme.js +10 -9
  74. package/commands/create.d.ts +4 -24
  75. package/commands/create.js +62 -74
  76. package/commands/customObject/create.d.ts +4 -9
  77. package/commands/customObject/create.js +17 -10
  78. package/commands/customObject/schema/create.d.ts +4 -9
  79. package/commands/customObject/schema/create.js +18 -11
  80. package/commands/customObject/schema/delete.d.ts +4 -9
  81. package/commands/customObject/schema/delete.js +17 -10
  82. package/commands/customObject/schema/fetch-all.d.ts +4 -9
  83. package/commands/customObject/schema/fetch-all.js +17 -10
  84. package/commands/customObject/schema/fetch.d.ts +4 -9
  85. package/commands/customObject/schema/fetch.js +17 -10
  86. package/commands/customObject/schema/list.d.ts +4 -8
  87. package/commands/customObject/schema/list.js +17 -10
  88. package/commands/customObject/schema/update.d.ts +4 -9
  89. package/commands/customObject/schema/update.js +18 -11
  90. package/commands/customObject/schema.d.ts +3 -5
  91. package/commands/customObject/schema.js +27 -54
  92. package/commands/customObject.d.ts +3 -4
  93. package/commands/customObject.js +18 -45
  94. package/commands/doctor.d.ts +6 -8
  95. package/commands/doctor.js +30 -21
  96. package/commands/feedback.d.ts +4 -1
  97. package/commands/feedback.js +38 -47
  98. package/commands/fetch.d.ts +12 -1
  99. package/commands/fetch.js +49 -33
  100. package/commands/filemanager/fetch.d.ts +4 -9
  101. package/commands/filemanager/fetch.js +18 -11
  102. package/commands/filemanager/upload.d.ts +4 -9
  103. package/commands/filemanager/upload.js +17 -11
  104. package/commands/filemanager.d.ts +3 -4
  105. package/commands/filemanager.js +18 -41
  106. package/commands/function/deploy.d.ts +6 -1
  107. package/commands/function/deploy.js +70 -50
  108. package/commands/function/list.d.ts +6 -1
  109. package/commands/function/list.js +44 -32
  110. package/commands/function/server.d.ts +10 -1
  111. package/commands/function/server.js +49 -38
  112. package/commands/function.d.ts +5 -1
  113. package/commands/function.js +22 -10
  114. package/commands/getStarted.d.ts +9 -0
  115. package/commands/getStarted.js +227 -0
  116. package/commands/hubdb/clear.d.ts +4 -9
  117. package/commands/hubdb/clear.js +17 -10
  118. package/commands/hubdb/create.d.ts +4 -9
  119. package/commands/hubdb/create.js +17 -10
  120. package/commands/hubdb/delete.d.ts +4 -9
  121. package/commands/hubdb/delete.js +17 -10
  122. package/commands/hubdb/fetch.d.ts +4 -9
  123. package/commands/hubdb/fetch.js +17 -10
  124. package/commands/hubdb/list.d.ts +4 -0
  125. package/commands/hubdb/list.js +83 -0
  126. package/commands/hubdb.d.ts +3 -2
  127. package/commands/hubdb.js +23 -45
  128. package/commands/init.d.ts +3 -7
  129. package/commands/init.js +17 -8
  130. package/commands/lint.d.ts +6 -4
  131. package/commands/lint.js +42 -43
  132. package/commands/list.d.ts +3 -7
  133. package/commands/list.js +17 -11
  134. package/commands/logs.d.ts +10 -1
  135. package/commands/logs.js +53 -44
  136. package/commands/mcp/setup.d.ts +7 -0
  137. package/commands/mcp/setup.js +52 -0
  138. package/commands/mcp/start.d.ts +3 -0
  139. package/commands/mcp/start.js +77 -0
  140. package/commands/mcp.d.ts +3 -0
  141. package/commands/mcp.js +26 -0
  142. package/commands/module/marketplace-validate.d.ts +6 -1
  143. package/commands/module/marketplace-validate.js +39 -29
  144. package/commands/module.d.ts +3 -1
  145. package/commands/module.js +23 -10
  146. package/commands/mv.d.ts +3 -7
  147. package/commands/mv.js +17 -11
  148. package/commands/open.d.ts +3 -7
  149. package/commands/open.js +17 -11
  150. package/commands/project/add.d.ts +5 -2
  151. package/commands/project/add.js +43 -80
  152. package/commands/project/cloneApp.d.ts +1 -1
  153. package/commands/project/cloneApp.js +2 -2
  154. package/commands/project/create.d.ts +2 -8
  155. package/commands/project/create.js +84 -55
  156. package/commands/project/deploy.d.ts +2 -0
  157. package/commands/project/deploy.js +67 -13
  158. package/commands/project/dev/deprecatedFlow.d.ts +8 -2
  159. package/commands/project/dev/deprecatedFlow.js +9 -1
  160. package/commands/project/dev/index.d.ts +1 -4
  161. package/commands/project/dev/index.js +88 -31
  162. package/commands/project/dev/unifiedFlow.d.ts +11 -2
  163. package/commands/project/dev/unifiedFlow.js +81 -41
  164. package/commands/project/listBuilds.js +2 -5
  165. package/commands/project/migrate.d.ts +1 -0
  166. package/commands/project/profile/add.d.ts +7 -0
  167. package/commands/project/profile/add.js +209 -0
  168. package/commands/project/profile/delete.d.ts +6 -0
  169. package/commands/project/profile/delete.js +123 -0
  170. package/commands/project/profile.d.ts +3 -0
  171. package/commands/project/profile.js +25 -0
  172. package/commands/project/upload.d.ts +1 -0
  173. package/commands/project/upload.js +22 -8
  174. package/commands/project/validate.d.ts +6 -0
  175. package/commands/project/validate.js +82 -0
  176. package/commands/project.js +4 -2
  177. package/commands/remove.d.ts +3 -7
  178. package/commands/remove.js +22 -22
  179. package/commands/sandbox/create.d.ts +4 -9
  180. package/commands/sandbox/create.js +18 -11
  181. package/commands/sandbox/delete.d.ts +4 -9
  182. package/commands/sandbox/delete.js +18 -11
  183. package/commands/sandbox.d.ts +3 -4
  184. package/commands/sandbox.js +18 -43
  185. package/commands/secret/addSecret.d.ts +4 -9
  186. package/commands/secret/addSecret.js +17 -10
  187. package/commands/secret/deleteSecret.d.ts +4 -9
  188. package/commands/secret/deleteSecret.js +17 -10
  189. package/commands/secret/listSecret.d.ts +4 -9
  190. package/commands/secret/listSecret.js +17 -10
  191. package/commands/secret/updateSecret.d.ts +4 -9
  192. package/commands/secret/updateSecret.js +17 -10
  193. package/commands/secret.d.ts +3 -4
  194. package/commands/secret.js +23 -48
  195. package/commands/testAccount/create.d.ts +6 -0
  196. package/commands/testAccount/create.js +100 -0
  197. package/commands/testAccount/createConfig.d.ts +10 -0
  198. package/commands/testAccount/createConfig.js +98 -0
  199. package/commands/testAccount/delete.d.ts +6 -0
  200. package/commands/testAccount/delete.js +48 -0
  201. package/commands/testAccount.d.ts +3 -0
  202. package/commands/testAccount.js +28 -0
  203. package/commands/theme/generate-selectors.d.ts +3 -7
  204. package/commands/theme/generate-selectors.js +20 -15
  205. package/commands/theme/marketplace-validate.d.ts +4 -9
  206. package/commands/theme/marketplace-validate.js +22 -17
  207. package/commands/theme/preview.d.ts +4 -9
  208. package/commands/theme/preview.js +32 -26
  209. package/commands/theme.d.ts +3 -4
  210. package/commands/theme.js +22 -47
  211. package/commands/upload.d.ts +12 -1
  212. package/commands/upload.js +116 -134
  213. package/commands/watch.d.ts +14 -1
  214. package/commands/watch.js +74 -75
  215. package/lang/en.d.ts +1135 -660
  216. package/lang/en.js +935 -471
  217. package/lang/en.lyaml +30 -213
  218. package/lib/accountTypes.js +1 -2
  219. package/lib/app/migrate.d.ts +23 -0
  220. package/lib/app/migrate.js +29 -6
  221. package/lib/app/migrate_legacy.js +7 -7
  222. package/lib/app/urls.d.ts +16 -0
  223. package/lib/app/urls.js +16 -0
  224. package/lib/commonOpts.d.ts +1 -3
  225. package/lib/commonOpts.js +1 -1
  226. package/lib/configMigrate.d.ts +2 -2
  227. package/lib/configMigrate.js +34 -55
  228. package/lib/configOptions.d.ts +4 -0
  229. package/lib/configOptions.js +41 -46
  230. package/lib/constants.d.ts +29 -0
  231. package/lib/constants.js +30 -1
  232. package/lib/dependencyManagement.d.ts +0 -5
  233. package/lib/dependencyManagement.js +13 -39
  234. package/lib/doctor/Doctor.js +3 -2
  235. package/lib/errorHandlers/index.js +7 -0
  236. package/lib/filesystem.d.ts +1 -1
  237. package/lib/generateSelectors.js +3 -5
  238. package/lib/interpolation.d.ts +2 -3
  239. package/lib/lang.d.ts +2 -3
  240. package/lib/marketplaceValidate.d.ts +12 -2
  241. package/lib/marketplaceValidate.js +22 -29
  242. package/lib/mcp/setup.d.ts +21 -0
  243. package/lib/mcp/setup.js +218 -0
  244. package/lib/middleware/autoUpdateMiddleware.d.ts +1 -0
  245. package/lib/middleware/autoUpdateMiddleware.js +89 -0
  246. package/lib/middleware/configMiddleware.js +23 -0
  247. package/lib/middleware/fireAlarmMiddleware.d.ts +2 -2
  248. package/lib/middleware/fireAlarmMiddleware.js +5 -3
  249. package/lib/npm.d.ts +9 -0
  250. package/lib/npm.js +36 -0
  251. package/lib/projectProfiles.d.ts +7 -0
  252. package/lib/projectProfiles.js +83 -0
  253. package/lib/projects/add/legacyAddComponent.d.ts +5 -0
  254. package/lib/projects/add/legacyAddComponent.js +48 -0
  255. package/lib/projects/add/v3AddComponent.d.ts +8 -0
  256. package/lib/projects/add/v3AddComponent.js +85 -0
  257. package/lib/projects/buildAndDeploy.js +18 -3
  258. package/lib/projects/components.d.ts +2 -0
  259. package/lib/projects/components.js +82 -0
  260. package/lib/projects/create/index.d.ts +23 -0
  261. package/lib/projects/create/index.js +33 -0
  262. package/lib/projects/create/legacy.d.ts +6 -0
  263. package/lib/projects/{create.js → create/legacy.js} +20 -11
  264. package/lib/projects/create/v3.d.ts +27 -0
  265. package/lib/projects/create/v3.js +158 -0
  266. package/lib/projects/localDev/AppDevModeInterface.d.ts +30 -0
  267. package/lib/projects/localDev/AppDevModeInterface.js +215 -0
  268. package/lib/projects/localDev/DevServerManagerV2.d.ts +11 -22
  269. package/lib/projects/localDev/DevServerManagerV2.js +19 -15
  270. package/lib/projects/localDev/LocalDevLogger.d.ts +30 -0
  271. package/lib/projects/localDev/LocalDevLogger.js +159 -0
  272. package/lib/projects/localDev/LocalDevManager.js +12 -5
  273. package/lib/projects/localDev/LocalDevProcess.d.ts +34 -0
  274. package/lib/projects/localDev/LocalDevProcess.js +201 -0
  275. package/lib/projects/localDev/LocalDevState.d.ts +50 -0
  276. package/lib/projects/localDev/LocalDevState.js +119 -0
  277. package/lib/projects/localDev/LocalDevWatcher.d.ts +10 -0
  278. package/lib/projects/localDev/LocalDevWatcher.js +53 -0
  279. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +20 -0
  280. package/lib/projects/localDev/LocalDevWebsocketServer.js +131 -0
  281. package/lib/projects/localDev/helpers.d.ts +3 -2
  282. package/lib/projects/localDev/helpers.js +32 -2
  283. package/lib/projects/upload.d.ts +5 -1
  284. package/lib/projects/upload.js +60 -20
  285. package/lib/projects/urls.d.ts +3 -0
  286. package/lib/projects/urls.js +17 -1
  287. package/lib/prompts/createApiSamplePrompt.d.ts +2 -10
  288. package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +17 -0
  289. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +96 -0
  290. package/lib/prompts/createProjectPrompt.d.ts +14 -5
  291. package/lib/prompts/createProjectPrompt.js +38 -13
  292. package/lib/prompts/createTemplatePrompt.d.ts +22 -4
  293. package/lib/prompts/installAppPrompt.d.ts +2 -0
  294. package/lib/prompts/installAppPrompt.js +45 -0
  295. package/lib/prompts/personalAccessKeyPrompt.js +35 -24
  296. package/lib/prompts/projectAddPrompt.d.ts +5 -1
  297. package/lib/prompts/projectAddPrompt.js +35 -7
  298. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
  299. package/lib/prompts/projectDevTargetAccountPrompt.js +6 -6
  300. package/lib/prompts/promptUtils.d.ts +4 -1
  301. package/lib/prompts/promptUtils.js +5 -1
  302. package/lib/prompts/selectAppPrompt.d.ts +2 -0
  303. package/lib/prompts/selectAppPrompt.js +40 -0
  304. package/lib/prompts/{selectPublicAppPrompt.d.ts → selectPublicAppForMigrationPrompt.d.ts} +1 -1
  305. package/lib/prompts/{selectPublicAppPrompt.js → selectPublicAppForMigrationPrompt.js} +8 -8
  306. package/lib/prompts/setAsDefaultAccountPrompt.js +10 -0
  307. package/lib/testUtils.d.ts +3 -3
  308. package/lib/testUtils.js +8 -9
  309. package/lib/ui/index.js +4 -1
  310. package/lib/upload.d.ts +1 -1
  311. package/lib/validation.js +4 -5
  312. package/lib/yargsUtils.d.ts +4 -0
  313. package/lib/yargsUtils.js +6 -0
  314. package/mcp-server/server.d.ts +1 -0
  315. package/mcp-server/server.js +18 -0
  316. package/mcp-server/tools/index.d.ts +2 -0
  317. package/mcp-server/tools/index.js +19 -0
  318. package/mcp-server/tools/project/AddFeatureToProject.d.ts +29 -0
  319. package/mcp-server/tools/project/AddFeatureToProject.js +85 -0
  320. package/mcp-server/tools/project/CreateProjectTool.d.ts +35 -0
  321. package/mcp-server/tools/project/CreateProjectTool.js +104 -0
  322. package/mcp-server/tools/project/DeployProject.d.ts +20 -0
  323. package/mcp-server/tools/project/DeployProject.js +50 -0
  324. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +17 -0
  325. package/mcp-server/tools/project/GuidedWalkthroughTool.js +58 -0
  326. package/mcp-server/tools/project/UploadProjectTools.d.ts +17 -0
  327. package/mcp-server/tools/project/UploadProjectTools.js +35 -0
  328. package/mcp-server/tools/project/ValidateProjectTool.d.ts +17 -0
  329. package/mcp-server/tools/project/ValidateProjectTool.js +35 -0
  330. package/mcp-server/tools/project/constants.d.ts +3 -0
  331. package/mcp-server/tools/project/constants.js +13 -0
  332. package/mcp-server/types.d.ts +14 -0
  333. package/mcp-server/types.js +17 -0
  334. package/mcp-server/utils/command.d.ts +3 -0
  335. package/mcp-server/utils/command.js +16 -0
  336. package/mcp-server/utils/content.d.ts +3 -0
  337. package/mcp-server/utils/content.js +21 -0
  338. package/mcp-server/utils/project.d.ts +5 -0
  339. package/mcp-server/utils/project.js +17 -0
  340. package/package.json +24 -16
  341. package/types/Cms.d.ts +30 -0
  342. package/types/Cms.js +2 -0
  343. package/types/LocalDev.d.ts +35 -0
  344. package/types/LocalDev.js +2 -0
  345. package/types/Projects.d.ts +19 -2
  346. package/types/Prompts.d.ts +0 -7
  347. package/types/Yargs.d.ts +10 -1
  348. package/lib/projects/create.d.ts +0 -5
  349. package/lib/projects/localDev/LocalDevManagerV2.d.ts +0 -64
  350. package/lib/projects/localDev/LocalDevManagerV2.js +0 -345
  351. package/lib/prompts/installPublicAppPrompt.d.ts +0 -1
  352. package/lib/prompts/installPublicAppPrompt.js +0 -41
@@ -0,0 +1,5 @@
1
+ import { ProjectConfig } from '../../../types/Projects';
2
+ export declare function legacyAddComponent(args: {
3
+ name?: string;
4
+ type?: string;
5
+ }, projectDir: string, projectConfig: ProjectConfig): Promise<void>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.legacyAddComponent = legacyAddComponent;
7
+ const Projects_1 = require("../../../types/Projects");
8
+ const structure_1 = require("../structure");
9
+ const errorHandlers_1 = require("../../errorHandlers");
10
+ const en_1 = require("../../../lang/en");
11
+ const legacy_1 = require("../create/legacy");
12
+ const projectAddPrompt_1 = require("../../prompts/projectAddPrompt");
13
+ const path_1 = __importDefault(require("path"));
14
+ const constants_1 = require("../../constants");
15
+ const github_1 = require("@hubspot/local-dev-lib/github");
16
+ const logger_1 = require("../../ui/logger");
17
+ async function legacyAddComponent(args, projectDir, projectConfig) {
18
+ // We currently only support adding private apps to projects
19
+ let projectContainsPublicApp = false;
20
+ try {
21
+ const components = await (0, structure_1.findProjectComponents)(projectDir);
22
+ projectContainsPublicApp = components.some(c => c.type === Projects_1.ComponentTypes.PublicApp);
23
+ }
24
+ catch (err) {
25
+ (0, errorHandlers_1.debugError)(err);
26
+ }
27
+ if (projectContainsPublicApp) {
28
+ throw new Error(en_1.commands.project.add.error.projectContainsPublicApp);
29
+ }
30
+ logger_1.uiLogger.log(en_1.commands.project.add.creatingComponent(projectConfig.name));
31
+ const components = await (0, legacy_1.getProjectComponentListFromRepo)(projectConfig.platformVersion);
32
+ if (!components || !components.length) {
33
+ throw new Error(en_1.commands.project.add.error.failedToFetchComponentList);
34
+ }
35
+ const projectAddPromptResponse = await (0, projectAddPrompt_1.projectAddPrompt)(components, args);
36
+ try {
37
+ const componentPath = path_1.default.join(projectDir, projectConfig.srcDir, projectAddPromptResponse.name);
38
+ await (0, github_1.cloneGithubRepo)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, componentPath, {
39
+ sourceDir: projectAddPromptResponse.componentTemplate.path,
40
+ branch: 'main',
41
+ hideLogs: true,
42
+ });
43
+ logger_1.uiLogger.success(en_1.commands.project.add.success(projectAddPromptResponse.name));
44
+ }
45
+ catch (error) {
46
+ throw new Error(en_1.commands.project.add.error.failedToDownloadComponent);
47
+ }
48
+ }
@@ -0,0 +1,8 @@
1
+ import { ProjectConfig } from '../../../types/Projects';
2
+ export declare function v3AddComponent(args: {
3
+ name?: string;
4
+ type?: string;
5
+ features?: string[];
6
+ auth?: string;
7
+ distribution?: string;
8
+ }, projectDir: string, projectConfig: ProjectConfig): Promise<void>;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.v3AddComponent = v3AddComponent;
7
+ const en_1 = require("../../../lang/en");
8
+ const legacy_1 = require("../create/legacy");
9
+ const v3_1 = require("../create/v3");
10
+ const path_1 = __importDefault(require("path"));
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const projectAddPrompt_1 = require("../../prompts/projectAddPrompt");
13
+ const constants_1 = require("../../constants");
14
+ const components_1 = require("../components");
15
+ const project_1 = require("@hubspot/project-parsing-lib/src/lib/project");
16
+ const constants_2 = require("@hubspot/project-parsing-lib/src/lib/constants");
17
+ const github_1 = require("@hubspot/local-dev-lib/github");
18
+ const errorHandlers_1 = require("../../errorHandlers");
19
+ const logger_1 = require("../../ui/logger");
20
+ async function v3AddComponent(args, projectDir, projectConfig) {
21
+ logger_1.uiLogger.log(en_1.commands.project.add.creatingComponent(projectConfig.name));
22
+ const config = await (0, legacy_1.getConfigForPlatformVersion)(projectConfig.platformVersion);
23
+ const { components, parentComponents } = config;
24
+ if (!components || !components.length) {
25
+ throw new Error(en_1.commands.project.add.error.failedToFetchComponentList);
26
+ }
27
+ const projectSrcDirectory = path_1.default.join(projectDir, projectConfig.srcDir);
28
+ const projectMetadata = await (0, project_1.getProjectMetadata)(projectSrcDirectory);
29
+ let derivedAuthType;
30
+ let derivedDistribution;
31
+ const appsMetadata = projectMetadata.components[constants_2.AppKey];
32
+ const shouldCreateApp = appsMetadata.count === 0;
33
+ if (shouldCreateApp) {
34
+ const { authType, distribution } = await (0, v3_1.createV3App)(args.auth, args.distribution);
35
+ derivedDistribution = distribution;
36
+ derivedAuthType = authType;
37
+ }
38
+ else if (appsMetadata.count > appsMetadata.maxCount) {
39
+ throw new Error(en_1.lib.projects.create.errors.exceededMaxNumberOfApps(appsMetadata.maxCount));
40
+ }
41
+ else {
42
+ const apps = appsMetadata.hsMetaFiles.map(appLoc => {
43
+ try {
44
+ return JSON.parse(fs_1.default.readFileSync(appLoc, 'utf8'));
45
+ }
46
+ catch (err) {
47
+ throw new Error(en_1.lib.projects.create.errors.unableToParseAppConfig(appLoc));
48
+ }
49
+ });
50
+ derivedDistribution = apps[0].config?.distribution;
51
+ derivedAuthType = apps[0].config?.auth?.type;
52
+ }
53
+ const componentTemplateChoices = (0, v3_1.calculateComponentTemplateChoices)(components, derivedAuthType, derivedDistribution, projectMetadata);
54
+ const projectAddPromptResponse = await (0, projectAddPrompt_1.projectAddPromptV3)(componentTemplateChoices, args.features);
55
+ try {
56
+ const components = projectAddPromptResponse.componentTemplate?.map((componentTemplate) => {
57
+ return path_1.default.join(projectConfig.platformVersion, componentTemplate.path);
58
+ }) || [];
59
+ if (shouldCreateApp) {
60
+ const parentComponent = parentComponents?.find(possibleParent => {
61
+ return (possibleParent.type === v3_1.PROJECT_WITH_APP &&
62
+ possibleParent.authType === derivedAuthType &&
63
+ possibleParent.distribution === derivedDistribution);
64
+ });
65
+ if (parentComponent) {
66
+ components.push(path_1.default.join(projectConfig.platformVersion, parentComponent.path));
67
+ }
68
+ }
69
+ await (0, github_1.cloneGithubRepo)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, projectDir, {
70
+ sourceDir: components,
71
+ hideLogs: true,
72
+ branch: 'main',
73
+ handleCollision: components_1.handleComponentCollision,
74
+ });
75
+ logger_1.uiLogger.success(en_1.commands.project.add.success(projectAddPromptResponse.componentTemplate
76
+ .map(template => `'${template.label}'`)
77
+ .join(', '), projectAddPromptResponse.componentTemplate.length > 1));
78
+ }
79
+ catch (error) {
80
+ (0, errorHandlers_1.debugError)(error);
81
+ throw new Error(en_1.commands.project.add.error.failedToDownloadComponent, {
82
+ cause: error,
83
+ });
84
+ }
85
+ }
@@ -17,6 +17,8 @@ const urls_1 = require("./urls");
17
17
  const exitCodes_1 = require("../enums/exitCodes");
18
18
  const en_1 = require("../../lang/en");
19
19
  const logger_1 = require("../ui/logger");
20
+ const constants_2 = require("@hubspot/project-parsing-lib/src/lib/constants");
21
+ const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
20
22
  const SPINNER_STATUS = {
21
23
  SPINNING: 'spinning',
22
24
  };
@@ -71,14 +73,27 @@ function makePollTaskStatusFunc({ statusFn, structureFn, statusText, statusStrin
71
73
  structureFn(accountId, taskName, taskId),
72
74
  ]);
73
75
  const subtasks = getSubtasks(initialTaskStatus);
74
- const tasksById = subtasks.reduce((acc, subtask) => {
76
+ const hiddenComponentBuildIds = [];
77
+ const tasksById = subtasks
78
+ .filter(subtask => {
79
+ // TODO: Remove this filtering logic when visible=false for SERVERLESS_PACKAGE
80
+ const shouldBeVisible = getSubtaskType(subtask) !== (0, project_parsing_lib_1.mapToInternalType)(constants_2.AppFunctionsPackageKey);
81
+ if (!shouldBeVisible) {
82
+ hiddenComponentBuildIds.push(subtask.id);
83
+ }
84
+ return shouldBeVisible;
85
+ })
86
+ .reduce((acc, subtask) => {
75
87
  const { id, visible } = subtask;
76
88
  if (visible) {
77
89
  acc[id] = subtask;
78
90
  }
79
91
  return acc;
80
92
  }, {});
81
- const structuredTasks = Object.keys(taskStructure).map(key => {
93
+ const structuredTasks = Object.keys(taskStructure)
94
+ // TODO: Remove this filtering logic when visible=false for SERVERLESS_PACKAGE
95
+ .filter(buildId => !hiddenComponentBuildIds.includes(buildId))
96
+ .map(key => {
82
97
  return {
83
98
  ...tasksById[key],
84
99
  subtasks: taskStructure[key]
@@ -213,7 +228,7 @@ function makePollTaskStatusFunc({ statusFn, structureFn, statusText, statusStrin
213
228
  }
214
229
  function pollBuildAutodeployStatus(accountId, taskName, buildId) {
215
230
  return new Promise((resolve, reject) => {
216
- let maxIntervals = (30 * 1000) / constants_1.DEFAULT_POLLING_DELAY; // Num of intervals in ~30s
231
+ let maxIntervals = (15 * 1000) / constants_1.DEFAULT_POLLING_DELAY; // Num of intervals in ~15s
217
232
  const pollInterval = setInterval(async () => {
218
233
  let build;
219
234
  try {
@@ -0,0 +1,2 @@
1
+ import { Collision } from '@hubspot/local-dev-lib/types/Archive';
2
+ export declare function handleComponentCollision({ dest, src, collisions }: Collision): void;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleComponentCollision = handleComponentCollision;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
10
+ // Handles a collision between component source files
11
+ function handleComponentCollision({ dest, src, collisions }) {
12
+ const hsMetaFiles = [];
13
+ const packageJsonFiles = [];
14
+ const sourceFiles = [];
15
+ collisions.forEach(collision => {
16
+ if (collision.endsWith(project_parsing_lib_1.metafileExtension)) {
17
+ hsMetaFiles.push(collision);
18
+ }
19
+ else if (path_1.default.parse(collision).base === 'package.json') {
20
+ packageJsonFiles.push(collision);
21
+ }
22
+ else {
23
+ sourceFiles.push(collision);
24
+ }
25
+ });
26
+ const sourceFilenameMapping = sourceFiles.reduce((acc, filename) => {
27
+ const { name, ext, dir } = path_1.default.parse(filename);
28
+ return {
29
+ ...acc,
30
+ [filename]: path_1.default.join(dir, `${name}-${Date.now()}${ext}`),
31
+ };
32
+ }, {});
33
+ const metafileExtensionPrefix = path_1.default.parse(project_parsing_lib_1.metafileExtension).name;
34
+ const metaFilenameMapping = hsMetaFiles.reduce((acc, filename) => {
35
+ const { name, dir } = path_1.default.parse(filename);
36
+ return {
37
+ ...acc,
38
+ [filename]: path_1.default.join(dir, `${name.replace(metafileExtensionPrefix, '')}-${Date.now()}${project_parsing_lib_1.metafileExtension}`),
39
+ };
40
+ }, {});
41
+ // Update the metafiles that might contain references to the old filenames
42
+ hsMetaFiles.forEach(file => {
43
+ updateMetaFile({
44
+ dest,
45
+ src,
46
+ file,
47
+ sourceFilenameMapping,
48
+ metaFilenameMapping,
49
+ });
50
+ });
51
+ // Copy the renamed files into their new destination location
52
+ Object.entries(sourceFilenameMapping).forEach(([key, value]) => {
53
+ fs_1.default.copyFileSync(path_1.default.join(src, key), path_1.default.join(dest, value));
54
+ });
55
+ if (packageJsonFiles.length) {
56
+ handlePackageJsonCollisions(dest, src, packageJsonFiles);
57
+ }
58
+ }
59
+ function updateMetaFile({ dest, src, file, sourceFilenameMapping, metaFilenameMapping, }) {
60
+ let text = fs_1.default.readFileSync(path_1.default.join(src, file), 'utf-8');
61
+ Object.entries(sourceFilenameMapping).forEach(([key, value]) => {
62
+ const { base: oldFileName } = path_1.default.parse(key);
63
+ const { base: newFileName } = path_1.default.parse(value);
64
+ text = text.replace(oldFileName, newFileName);
65
+ });
66
+ fs_1.default.writeFileSync(path_1.default.join(dest, metaFilenameMapping[file]), text);
67
+ }
68
+ function handlePackageJsonCollisions(dest, src, packageJsonFiles) {
69
+ packageJsonFiles.forEach(file => {
70
+ const existingPackageJsonContents = JSON.parse(fs_1.default.readFileSync(path_1.default.join(dest, file), 'utf-8'));
71
+ const newPackageJsonContents = JSON.parse(fs_1.default.readFileSync(path_1.default.join(src, file), 'utf-8'));
72
+ existingPackageJsonContents.dependencies = {
73
+ ...newPackageJsonContents.dependencies,
74
+ ...existingPackageJsonContents.dependencies,
75
+ };
76
+ existingPackageJsonContents.devDependencies = {
77
+ ...newPackageJsonContents.devDependencies,
78
+ ...existingPackageJsonContents.devDependencies,
79
+ };
80
+ fs_1.default.writeFileSync(path_1.default.join(dest, file), JSON.stringify(existingPackageJsonContents, null, 2));
81
+ });
82
+ }
@@ -0,0 +1,23 @@
1
+ import { ArgumentsCamelCase } from 'yargs';
2
+ import { ProjectTemplateRepoConfig } from '../../../types/Projects';
3
+ import { CreateProjectPromptResponse } from '../../prompts/createProjectPrompt';
4
+ import { AccountArgs, CommonArgs, ConfigArgs, EnvironmentArgs } from '../../../types/Yargs';
5
+ import { RepoPath } from '@hubspot/local-dev-lib/types/Github';
6
+ export type ProjectCreateArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & {
7
+ name?: string;
8
+ dest?: string;
9
+ templateSource?: RepoPath;
10
+ template?: string;
11
+ features?: string[];
12
+ platformVersion: string;
13
+ projectBase?: string;
14
+ auth?: string;
15
+ distribution?: string;
16
+ };
17
+ export declare function handleProjectCreationFlow(args: ArgumentsCamelCase<ProjectCreateArgs>): Promise<{
18
+ authType?: string;
19
+ distribution?: string;
20
+ repoConfig?: ProjectTemplateRepoConfig;
21
+ projectContents?: string;
22
+ createProjectPromptResponse: CreateProjectPromptResponse;
23
+ }>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleProjectCreationFlow = handleProjectCreationFlow;
4
+ const createProjectPrompt_1 = require("../../prompts/createProjectPrompt");
5
+ const constants_1 = require("../../constants");
6
+ const buildAndDeploy_1 = require("../buildAndDeploy");
7
+ const v3_1 = require("./v3");
8
+ const legacy_1 = require("./legacy");
9
+ const logger_1 = require("../../ui/logger");
10
+ const en_1 = require("../../../lang/en");
11
+ const exitCodes_1 = require("../../enums/exitCodes");
12
+ async function handleProjectCreationFlow(args) {
13
+ const { platformVersion, templateSource, projectBase, auth: providedAuth, distribution: providedDistribution, } = args;
14
+ const repo = templateSource || constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
15
+ if ((0, buildAndDeploy_1.useV3Api)(platformVersion)) {
16
+ const { componentTemplateChoices, authType, distribution, repoConfig, projectContents, } = await (0, v3_1.v3ComponentFlow)(platformVersion, projectBase, providedAuth, providedDistribution);
17
+ const createProjectPromptResponse = await (0, createProjectPrompt_1.createProjectPrompt)(args, undefined, projectContents !== v3_1.EMPTY_PROJECT ? componentTemplateChoices : undefined);
18
+ return {
19
+ authType,
20
+ distribution,
21
+ repoConfig,
22
+ projectContents,
23
+ createProjectPromptResponse,
24
+ };
25
+ }
26
+ const projectTemplates = await (0, legacy_1.getProjectTemplateListFromRepo)(repo, 'main');
27
+ if (!projectTemplates.length) {
28
+ logger_1.uiLogger.error(en_1.commands.project.create.errors.failedToFetchProjectList);
29
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
30
+ }
31
+ const createProjectPromptResponse = await (0, createProjectPrompt_1.createProjectPrompt)(args, projectTemplates);
32
+ return { createProjectPromptResponse };
33
+ }
@@ -0,0 +1,6 @@
1
+ import { RepoPath } from '@hubspot/local-dev-lib/types/Github';
2
+ import { ProjectTemplate, ComponentTemplate, ProjectTemplateRepoConfig } from '../../../types/Projects';
3
+ export declare const EMPTY_PROJECT_TEMPLATE_NAME = "no-template";
4
+ export declare function getConfigForPlatformVersion(platformVersion: string): Promise<ProjectTemplateRepoConfig> | never;
5
+ export declare function getProjectComponentListFromRepo(platformVersion: string): Promise<ComponentTemplate[]>;
6
+ export declare function getProjectTemplateListFromRepo(templateSource: RepoPath, githubRef: string): Promise<ProjectTemplate[]>;
@@ -1,24 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EMPTY_PROJECT_TEMPLATE_NAME = void 0;
4
+ exports.getConfigForPlatformVersion = getConfigForPlatformVersion;
4
5
  exports.getProjectComponentListFromRepo = getProjectComponentListFromRepo;
5
6
  exports.getProjectTemplateListFromRepo = getProjectTemplateListFromRepo;
6
7
  const github_1 = require("@hubspot/local-dev-lib/api/github");
7
- const constants_1 = require("../constants");
8
- const exitCodes_1 = require("../enums/exitCodes");
9
- const index_1 = require("../errorHandlers/index");
10
- const en_1 = require("../../lang/en");
11
- const logger_1 = require("../ui/logger");
8
+ const constants_1 = require("../../constants");
9
+ const exitCodes_1 = require("../../enums/exitCodes");
10
+ const errorHandlers_1 = require("../../errorHandlers");
11
+ const logger_1 = require("../../ui/logger");
12
+ const buildAndDeploy_1 = require("../buildAndDeploy");
13
+ const en_1 = require("../../../lang/en");
14
+ const PROJECT_TEMPLATE_PROPERTIES = ['name', 'label', 'path'];
12
15
  exports.EMPTY_PROJECT_TEMPLATE_NAME = 'no-template';
13
- const PROJECT_TEMPLATE_PROPERTIES = ['name', 'label', 'path', 'insertPath'];
14
- async function getProjectComponentListFromRepo(githubRef) {
16
+ async function getConfigForPlatformVersion(platformVersion) {
17
+ let path = '';
18
+ if ((0, buildAndDeploy_1.useV3Api)(platformVersion)) {
19
+ path = `${platformVersion}/`;
20
+ }
21
+ const { data } = await (0, github_1.fetchRepoFile)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, `${path}config.json`, 'main');
22
+ return data;
23
+ }
24
+ async function getProjectComponentListFromRepo(platformVersion) {
15
25
  let config;
16
26
  try {
17
- const { data } = await (0, github_1.fetchRepoFile)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, 'config.json', githubRef);
18
- config = data;
27
+ config = await getConfigForPlatformVersion(platformVersion);
19
28
  }
20
29
  catch (err) {
21
- (0, index_1.debugError)(err);
30
+ (0, errorHandlers_1.debugError)(err);
22
31
  }
23
32
  if (config) {
24
33
  return config[constants_1.PROJECT_COMPONENT_TYPES.COMPONENTS] || [];
@@ -32,7 +41,7 @@ async function getProjectTemplateListFromRepo(templateSource, githubRef) {
32
41
  config = data;
33
42
  }
34
43
  catch (e) {
35
- (0, index_1.debugError)(e);
44
+ (0, errorHandlers_1.debugError)(e);
36
45
  logger_1.uiLogger.error(en_1.lib.projects.create.errors.missingConfigFileTemplateSource);
37
46
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
38
47
  }
@@ -0,0 +1,27 @@
1
+ import { ComponentTemplate, ComponentTemplateChoice, ProjectTemplateRepoConfig } from '../../../types/Projects';
2
+ import { ProjectMetadata } from '@hubspot/project-parsing-lib/src/lib/project';
3
+ import { CreateProjectPromptResponse } from '../../prompts/createProjectPrompt';
4
+ export declare const EMPTY_PROJECT = "empty";
5
+ export declare const PROJECT_WITH_APP = "app";
6
+ export declare function createV3App(providedAuth: string | undefined, providedDistribution: string | undefined): Promise<{
7
+ authType: string;
8
+ distribution: string;
9
+ }>;
10
+ export declare function calculateComponentTemplateChoices(components: ComponentTemplate[], authType: string | undefined, distribution: string | undefined, projectMetadata?: ProjectMetadata): ComponentTemplateChoice[];
11
+ type V3ComponentInfo = {
12
+ authType?: string;
13
+ distribution?: string;
14
+ repoConfig?: ProjectTemplateRepoConfig;
15
+ projectContents?: string;
16
+ componentTemplateChoices?: ComponentTemplateChoice[];
17
+ };
18
+ export declare function v3ComponentFlow(platformVersion: string, projectBase: string | undefined, providedAuth: string | undefined, providedDistribution: string | undefined): Promise<V3ComponentInfo>;
19
+ export declare function generateComponentPaths({ createProjectPromptResponse, platformVersion, repoConfig, projectContents, authType, distribution, }: {
20
+ createProjectPromptResponse: CreateProjectPromptResponse;
21
+ platformVersion: string;
22
+ repoConfig?: ProjectTemplateRepoConfig;
23
+ projectContents?: string;
24
+ authType?: string;
25
+ distribution?: string;
26
+ }): string[];
27
+ export {};
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PROJECT_WITH_APP = exports.EMPTY_PROJECT = void 0;
7
+ exports.createV3App = createV3App;
8
+ exports.calculateComponentTemplateChoices = calculateComponentTemplateChoices;
9
+ exports.v3ComponentFlow = v3ComponentFlow;
10
+ exports.generateComponentPaths = generateComponentPaths;
11
+ const constants_1 = require("../../constants");
12
+ const en_1 = require("../../../lang/en");
13
+ const promptUtils_1 = require("../../prompts/promptUtils");
14
+ const chalk_1 = __importDefault(require("chalk"));
15
+ const buildAndDeploy_1 = require("../buildAndDeploy");
16
+ const path_1 = __importDefault(require("path"));
17
+ const legacy_1 = require("./legacy");
18
+ const errorHandlers_1 = require("../../errorHandlers");
19
+ const exitCodes_1 = require("../../enums/exitCodes");
20
+ const inquirer = require('inquirer');
21
+ exports.EMPTY_PROJECT = 'empty';
22
+ exports.PROJECT_WITH_APP = 'app';
23
+ async function createV3App(providedAuth, providedDistribution) {
24
+ let authType;
25
+ if (providedAuth &&
26
+ providedDistribution === constants_1.marketplaceDistribution &&
27
+ providedAuth !== constants_1.oAuth) {
28
+ throw new Error(en_1.lib.projects.create.errors.invalidAuthDistCombo(providedAuth, providedDistribution));
29
+ }
30
+ const distribution = providedDistribution ||
31
+ (await (0, promptUtils_1.listPrompt)(en_1.lib.projects.create.prompt.distribution, {
32
+ choices: [
33
+ {
34
+ name: en_1.lib.projects.create.prompt.marketPlaceDistribution,
35
+ value: constants_1.marketplaceDistribution,
36
+ },
37
+ {
38
+ name: en_1.lib.projects.create.prompt.privateDistribution,
39
+ value: constants_1.privateDistribution,
40
+ },
41
+ ],
42
+ }));
43
+ if (distribution === constants_1.marketplaceDistribution) {
44
+ // This is the only valid auth type for marketplace
45
+ authType = constants_1.oAuth;
46
+ }
47
+ else {
48
+ authType =
49
+ providedAuth ||
50
+ (await (0, promptUtils_1.listPrompt)(en_1.lib.projects.create.prompt.auth, {
51
+ choices: [
52
+ { name: en_1.lib.projects.create.prompt.staticAuth, value: constants_1.staticAuth },
53
+ { name: en_1.lib.projects.create.prompt.oauth, value: constants_1.oAuth },
54
+ ],
55
+ }));
56
+ }
57
+ return {
58
+ distribution,
59
+ authType,
60
+ };
61
+ }
62
+ function calculateComponentTemplateChoices(components, authType, distribution, projectMetadata) {
63
+ const enabledComponents = [];
64
+ const disabledComponents = [];
65
+ components.forEach(template => {
66
+ const { supportedAuthTypes, supportedDistributions } = template;
67
+ const disabledReasons = [];
68
+ if (projectMetadata) {
69
+ const { count, maxCount } = projectMetadata.components[template.type];
70
+ if (count >= maxCount) {
71
+ disabledReasons.push(en_1.commands.project.add.error.maxExceeded(maxCount));
72
+ }
73
+ }
74
+ if (Array.isArray(supportedAuthTypes) &&
75
+ authType &&
76
+ !supportedAuthTypes.includes(authType)) {
77
+ disabledReasons.push(en_1.commands.project.add.error.authTypeNotAllowed(authType));
78
+ }
79
+ if (Array.isArray(supportedDistributions) &&
80
+ distribution &&
81
+ !supportedDistributions.includes(distribution)) {
82
+ disabledReasons.push(en_1.commands.project.add.error.distributionNotAllowed(distribution));
83
+ }
84
+ if (disabledReasons.length > 0) {
85
+ disabledComponents.push({
86
+ name: `[${chalk_1.default.yellow('DISABLED')}] ${template.label}`,
87
+ value: template,
88
+ disabled: disabledReasons.join(' '),
89
+ });
90
+ }
91
+ else {
92
+ enabledComponents.push({
93
+ name: template.label,
94
+ value: template,
95
+ });
96
+ }
97
+ });
98
+ return disabledComponents.length
99
+ ? [...enabledComponents, new inquirer.Separator(), ...disabledComponents]
100
+ : [...enabledComponents];
101
+ }
102
+ async function v3ComponentFlow(platformVersion, projectBase, providedAuth, providedDistribution) {
103
+ let repoConfig = undefined;
104
+ let authType;
105
+ let distribution;
106
+ try {
107
+ repoConfig = await (0, legacy_1.getConfigForPlatformVersion)(platformVersion);
108
+ }
109
+ catch (error) {
110
+ (0, errorHandlers_1.logError)(error);
111
+ return process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
112
+ }
113
+ const projectContentsChoice = projectBase ||
114
+ (await (0, promptUtils_1.listPrompt)(en_1.commands.project.create.prompts.parentComponents, {
115
+ choices: [
116
+ {
117
+ name: en_1.commands.project.create.prompts.emptyProject,
118
+ value: exports.EMPTY_PROJECT,
119
+ },
120
+ { name: en_1.commands.project.create.prompts.app, value: exports.PROJECT_WITH_APP },
121
+ ],
122
+ }));
123
+ if (projectContentsChoice === exports.PROJECT_WITH_APP) {
124
+ const { authType: selectedAuthType, distribution: selectedDistribution } = await createV3App(providedAuth, providedDistribution);
125
+ authType = selectedAuthType;
126
+ distribution = selectedDistribution;
127
+ }
128
+ const componentTemplateChoices = calculateComponentTemplateChoices(repoConfig?.components || [], authType, distribution);
129
+ return {
130
+ componentTemplateChoices,
131
+ authType,
132
+ distribution,
133
+ projectContents: projectContentsChoice,
134
+ repoConfig,
135
+ };
136
+ }
137
+ function generateComponentPaths({ createProjectPromptResponse, platformVersion, repoConfig, projectContents, authType, distribution, }) {
138
+ if (!(0, buildAndDeploy_1.useV3Api)(platformVersion)) {
139
+ return [];
140
+ }
141
+ const components = createProjectPromptResponse.componentTemplates?.map((componentTemplate) => {
142
+ return path_1.default.join(platformVersion, componentTemplate.path);
143
+ }) || [];
144
+ if (projectContents && projectContents !== exports.EMPTY_PROJECT) {
145
+ const parentComponent = repoConfig?.parentComponents?.find(possibleParent => {
146
+ return (possibleParent.type === projectContents &&
147
+ possibleParent.authType === authType &&
148
+ possibleParent.distribution === distribution);
149
+ });
150
+ if (parentComponent) {
151
+ components.push(path_1.default.join(platformVersion, parentComponent.path));
152
+ }
153
+ }
154
+ if (repoConfig?.defaultFiles) {
155
+ components.push(path_1.default.join(platformVersion, repoConfig?.defaultFiles));
156
+ }
157
+ return components;
158
+ }
@@ -0,0 +1,30 @@
1
+ import { AppIRNode } from '../../../types/ProjectComponents';
2
+ import LocalDevState from './LocalDevState';
3
+ import LocalDevLogger from './LocalDevLogger';
4
+ type AppDevModeInterfaceConstructorOptions = {
5
+ localDevState: LocalDevState;
6
+ localDevLogger: LocalDevLogger;
7
+ };
8
+ declare class AppDevModeInterface {
9
+ localDevState: LocalDevState;
10
+ localDevLogger: LocalDevLogger;
11
+ _appNode?: AppIRNode | null;
12
+ marketplaceAppInstalls?: number;
13
+ constructor(options: AppDevModeInterfaceConstructorOptions);
14
+ private get appNode();
15
+ private get appData();
16
+ private set appData(value);
17
+ private isAutomaticallyInstallable;
18
+ private getAppInstallUrl;
19
+ private fetchAppData;
20
+ private checkMarketplaceAppInstalls;
21
+ private autoInstallStaticAuthApp;
22
+ private installAppOrOpenInstallUrl;
23
+ private checkTestAccountAppInstallation;
24
+ private setUpLocalDevServerMessageListeners;
25
+ setup(args: any): Promise<void>;
26
+ start(): Promise<void>;
27
+ fileChange(filePath: string, event: string): Promise<void>;
28
+ cleanup(): Promise<void>;
29
+ }
30
+ export default AppDevModeInterface;