@hubspot/cli 7.4.7-experimental.0 → 7.4.7

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 (225) hide show
  1. package/api/migrate.d.ts +14 -4
  2. package/api/migrate.js +16 -2
  3. package/bin/cli.js +8 -183
  4. package/commands/account/auth.d.ts +10 -0
  5. package/commands/account/auth.js +188 -0
  6. package/commands/account/clean.js +38 -5
  7. package/commands/account/createOverride.d.ts +10 -0
  8. package/commands/account/createOverride.js +104 -0
  9. package/commands/account/info.js +38 -4
  10. package/commands/account/list.js +23 -5
  11. package/commands/account/remove.js +36 -2
  12. package/commands/account/removeOverride.d.ts +10 -0
  13. package/commands/account/removeOverride.js +76 -0
  14. package/commands/account/use.js +25 -3
  15. package/commands/account.js +7 -2
  16. package/commands/app/migrate.d.ts +6 -6
  17. package/commands/app/migrate.js +62 -45
  18. package/commands/app.js +0 -2
  19. package/commands/auth.js +14 -11
  20. package/commands/cms/lighthouseScore.js +7 -3
  21. package/commands/cms.js +1 -2
  22. package/commands/completion.js +2 -3
  23. package/commands/config/migrate.d.ts +10 -0
  24. package/commands/config/migrate.js +84 -0
  25. package/commands/config/set.d.ts +10 -0
  26. package/commands/config/set.js +34 -29
  27. package/commands/config.d.ts +4 -1
  28. package/commands/config.js +45 -11
  29. package/commands/create/api-sample.js +3 -1
  30. package/commands/create/website-theme.js +1 -1
  31. package/commands/create.js +7 -8
  32. package/commands/customObject/schema/delete.js +4 -1
  33. package/commands/customObject/schema/fetch-all.js +2 -1
  34. package/commands/customObject/schema/fetch.js +2 -1
  35. package/commands/customObject.js +3 -4
  36. package/commands/doctor.js +5 -6
  37. package/commands/feedback.js +7 -8
  38. package/commands/fetch.js +6 -7
  39. package/commands/filemanager.js +1 -2
  40. package/commands/function.js +1 -2
  41. package/commands/hubdb/clear.js +5 -6
  42. package/commands/hubdb/create.js +7 -8
  43. package/commands/hubdb/delete.js +8 -7
  44. package/commands/hubdb/fetch.js +4 -5
  45. package/commands/hubdb.js +1 -2
  46. package/commands/init.js +18 -20
  47. package/commands/lint.js +3 -4
  48. package/commands/list.js +5 -6
  49. package/commands/logs.js +12 -13
  50. package/commands/module/marketplace-validate.js +5 -6
  51. package/commands/module.js +1 -3
  52. package/commands/mv.js +4 -5
  53. package/commands/open.js +4 -5
  54. package/commands/project/add.d.ts +3 -7
  55. package/commands/project/add.js +28 -23
  56. package/commands/project/cloneApp.d.ts +6 -8
  57. package/commands/project/cloneApp.js +49 -45
  58. package/commands/project/create.d.ts +10 -1
  59. package/commands/project/create.js +85 -63
  60. package/commands/project/deploy.d.ts +3 -6
  61. package/commands/project/deploy.js +27 -25
  62. package/commands/project/dev/deprecatedFlow.js +32 -25
  63. package/commands/project/dev/index.d.ts +4 -2
  64. package/commands/project/dev/index.js +31 -18
  65. package/commands/project/dev/unifiedFlow.js +10 -11
  66. package/commands/project/download.d.ts +3 -7
  67. package/commands/project/download.js +18 -19
  68. package/commands/project/installDeps.d.ts +6 -1
  69. package/commands/project/installDeps.js +48 -32
  70. package/commands/project/listBuilds.d.ts +3 -7
  71. package/commands/project/listBuilds.js +32 -27
  72. package/commands/project/logs.d.ts +10 -1
  73. package/commands/project/logs.js +73 -65
  74. package/commands/project/migrate.d.ts +6 -0
  75. package/commands/project/migrate.js +71 -0
  76. package/commands/project/migrateApp.d.ts +3 -8
  77. package/commands/project/migrateApp.js +23 -20
  78. package/commands/project/open.d.ts +3 -7
  79. package/commands/project/open.js +29 -21
  80. package/commands/project/upload.d.ts +9 -1
  81. package/commands/project/upload.js +78 -54
  82. package/commands/project/watch.d.ts +6 -1
  83. package/commands/project/watch.js +95 -61
  84. package/commands/project.d.ts +3 -1
  85. package/commands/project.js +47 -35
  86. package/commands/remove.js +7 -5
  87. package/commands/sandbox/create.js +10 -11
  88. package/commands/sandbox/delete.js +18 -19
  89. package/commands/sandbox.js +1 -2
  90. package/commands/secret/addSecret.js +5 -6
  91. package/commands/secret/deleteSecret.js +12 -9
  92. package/commands/secret/listSecret.js +3 -4
  93. package/commands/secret/updateSecret.js +9 -8
  94. package/commands/secret.js +1 -2
  95. package/commands/theme/generate-selectors.js +5 -6
  96. package/commands/theme/marketplace-validate.js +5 -6
  97. package/commands/theme/preview.js +16 -16
  98. package/commands/theme.js +1 -2
  99. package/commands/upload.js +23 -24
  100. package/commands/watch.js +18 -19
  101. package/lang/en.d.ts +2806 -0
  102. package/lang/en.js +2659 -3300
  103. package/lang/en.lyaml +98 -41
  104. package/lib/accountTypes.d.ts +1 -0
  105. package/lib/accountTypes.js +12 -0
  106. package/lib/app/migrate.d.ts +10 -4
  107. package/lib/app/migrate.js +208 -94
  108. package/lib/app/migrate_legacy.d.ts +2 -2
  109. package/lib/app/migrate_legacy.js +10 -7
  110. package/lib/buildAccount.d.ts +1 -2
  111. package/lib/buildAccount.js +11 -10
  112. package/lib/commonOpts.d.ts +3 -4
  113. package/lib/commonOpts.js +46 -18
  114. package/lib/configMigrate.d.ts +2 -0
  115. package/lib/configMigrate.js +104 -0
  116. package/lib/configOptions.js +11 -10
  117. package/lib/constants.d.ts +4 -0
  118. package/lib/constants.js +5 -1
  119. package/lib/dependencyManagement.js +2 -2
  120. package/lib/doctor/Diagnosis.d.ts +1 -2
  121. package/lib/doctor/Diagnosis.js +19 -16
  122. package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
  123. package/lib/doctor/DiagnosticInfoBuilder.js +10 -9
  124. package/lib/doctor/Doctor.d.ts +1 -0
  125. package/lib/doctor/Doctor.js +57 -44
  126. package/lib/errorHandlers/index.js +6 -7
  127. package/lib/errorHandlers/suppressError.js +6 -7
  128. package/lib/generateSelectors.js +1 -2
  129. package/lib/hasFeature.d.ts +3 -1
  130. package/lib/middleware/__test__/configMiddleware.test.d.ts +1 -0
  131. package/lib/middleware/__test__/configMiddleware.test.js +194 -0
  132. package/lib/middleware/__test__/gitMiddleware.test.d.ts +1 -0
  133. package/lib/middleware/__test__/gitMiddleware.test.js +76 -0
  134. package/lib/middleware/__test__/notificationsMiddleware.test.d.ts +1 -0
  135. package/lib/middleware/__test__/notificationsMiddleware.test.js +10 -0
  136. package/lib/middleware/__test__/requestMiddleware.test.d.ts +1 -0
  137. package/lib/middleware/__test__/requestMiddleware.test.js +20 -0
  138. package/lib/middleware/__test__/utils.test.d.ts +1 -0
  139. package/lib/middleware/__test__/utils.test.js +53 -0
  140. package/lib/middleware/__test__/yargsChecksMiddleware.test.d.ts +1 -0
  141. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +81 -0
  142. package/lib/middleware/configMiddleware.d.ts +13 -0
  143. package/lib/middleware/configMiddleware.js +116 -0
  144. package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
  145. package/lib/middleware/fireAlarmMiddleware.js +123 -0
  146. package/lib/middleware/gitMiddleware.d.ts +2 -0
  147. package/lib/middleware/gitMiddleware.js +14 -0
  148. package/lib/middleware/notificationsMiddleware.d.ts +1 -0
  149. package/lib/middleware/notificationsMiddleware.js +38 -0
  150. package/lib/middleware/requestMiddleware.d.ts +1 -0
  151. package/lib/middleware/requestMiddleware.js +11 -0
  152. package/lib/middleware/utils.d.ts +8 -0
  153. package/lib/middleware/utils.js +17 -0
  154. package/lib/middleware/yargsChecksMiddleware.d.ts +4 -0
  155. package/lib/middleware/yargsChecksMiddleware.js +24 -0
  156. package/lib/oauth.js +1 -2
  157. package/lib/process.js +1 -2
  158. package/lib/projects/ProjectLogsManager.d.ts +1 -1
  159. package/lib/projects/ProjectLogsManager.js +16 -21
  160. package/lib/projects/buildAndDeploy.js +28 -39
  161. package/lib/projects/config.d.ts +9 -0
  162. package/lib/projects/config.js +79 -0
  163. package/lib/projects/create.js +5 -6
  164. package/lib/projects/ensureProjectExists.d.ts +11 -0
  165. package/lib/projects/ensureProjectExists.js +97 -0
  166. package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
  167. package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +6 -6
  168. package/lib/{DevServerManagerV2.d.ts → projects/localDev/DevServerManagerV2.d.ts} +1 -1
  169. package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +3 -4
  170. package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
  171. package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +49 -82
  172. package/lib/{LocalDevManagerV2.d.ts → projects/localDev/LocalDevManagerV2.d.ts} +2 -2
  173. package/lib/{LocalDevManagerV2.js → projects/localDev/LocalDevManagerV2.js} +43 -75
  174. package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +5 -4
  175. package/lib/{localDev.js → projects/localDev/helpers.js} +97 -114
  176. package/lib/projects/ui.d.ts +1 -0
  177. package/lib/projects/ui.js +15 -0
  178. package/lib/projects/upload.d.ts +13 -2
  179. package/lib/projects/upload.js +18 -34
  180. package/lib/projects/urls.d.ts +1 -0
  181. package/lib/projects/urls.js +6 -0
  182. package/lib/projects/watch.d.ts +1 -1
  183. package/lib/projects/watch.js +21 -18
  184. package/lib/prompts/accountNamePrompt.js +16 -13
  185. package/lib/prompts/accountsPrompt.js +1 -2
  186. package/lib/prompts/cmsFieldPrompt.js +1 -2
  187. package/lib/prompts/createApiSamplePrompt.js +4 -5
  188. package/lib/prompts/createFunctionPrompt.js +13 -14
  189. package/lib/prompts/createModulePrompt.js +8 -9
  190. package/lib/prompts/createProjectPrompt.d.ts +11 -4
  191. package/lib/prompts/createProjectPrompt.js +14 -9
  192. package/lib/prompts/createTemplatePrompt.js +1 -2
  193. package/lib/prompts/downloadProjectPrompt.js +3 -4
  194. package/lib/prompts/installPublicAppPrompt.js +6 -5
  195. package/lib/prompts/personalAccessKeyPrompt.js +17 -18
  196. package/lib/prompts/previewPrompt.js +5 -6
  197. package/lib/prompts/projectAddPrompt.js +4 -5
  198. package/lib/prompts/projectDevTargetAccountPrompt.js +11 -12
  199. package/lib/prompts/projectNamePrompt.js +5 -6
  200. package/lib/prompts/projectsLogsPrompt.js +3 -2
  201. package/lib/prompts/promptUtils.d.ts +1 -1
  202. package/lib/prompts/sandboxesPrompt.js +5 -6
  203. package/lib/prompts/secretPrompt.js +2 -3
  204. package/lib/prompts/selectHubDBTablePrompt.js +11 -8
  205. package/lib/prompts/selectPublicAppPrompt.js +6 -7
  206. package/lib/prompts/setAsDefaultAccountPrompt.js +1 -2
  207. package/lib/prompts/uploadPrompt.js +4 -5
  208. package/lib/sandboxSync.js +15 -14
  209. package/lib/sandboxes.js +12 -13
  210. package/lib/serverlessLogs.js +4 -6
  211. package/lib/ui/SpinniesManager.d.ts +1 -1
  212. package/lib/ui/boxen.d.ts +5 -0
  213. package/lib/ui/boxen.js +30 -0
  214. package/lib/ui/git.js +8 -9
  215. package/lib/ui/index.d.ts +4 -2
  216. package/lib/ui/index.js +16 -16
  217. package/lib/ui/logger.d.ts +10 -0
  218. package/lib/ui/logger.js +15 -0
  219. package/lib/ui/serverlessFunctionLogs.js +2 -3
  220. package/lib/ui/spinniesUtils.d.ts +5 -5
  221. package/lib/yargsUtils.d.ts +1 -1
  222. package/package.json +7 -6
  223. package/types/Yargs.d.ts +5 -11
  224. package/lib/projects/index.d.ts +0 -20
  225. package/lib/projects/index.js +0 -195
@@ -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;
6
+ const path_1 = __importDefault(require("path"));
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
10
+ const github_1 = require("@hubspot/local-dev-lib/github");
11
+ const path_2 = require("@hubspot/local-dev-lib/path");
12
+ const usageTracking_1 = require("../../lib/usageTracking");
13
+ const createProjectPrompt_1 = require("../../lib/prompts/createProjectPrompt");
14
+ const config_1 = require("../../lib/projects/config");
15
+ const create_1 = require("../../lib/projects/create");
16
+ const lang_1 = require("../../lib/lang");
17
+ const ui_1 = require("../../lib/ui");
18
+ const errorHandlers_1 = require("../../lib/errorHandlers");
19
+ const exitCodes_1 = require("../../lib/enums/exitCodes");
20
+ const constants_1 = require("../../lib/constants");
21
+ const yargsUtils_1 = require("../../lib/yargsUtils");
22
+ const command = 'create';
23
+ const describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.create.describe`), false);
24
+ async function handler(args) {
25
+ const { derivedAccountId } = args;
25
26
  let latestRepoReleaseTag;
26
- let templateSource = options.templateSource;
27
+ let templateSource = args.templateSource;
27
28
  if (!templateSource) {
28
- templateSource = HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
29
+ templateSource = constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
29
30
  try {
30
- const releaseData = await fetchReleaseData(HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH);
31
+ const releaseData = await (0, github_1.fetchReleaseData)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH);
31
32
  if (releaseData) {
32
33
  latestRepoReleaseTag = releaseData.tag_name;
33
34
  }
34
35
  }
35
36
  catch (err) {
36
- logger.error(i18n(`${i18nKey}.error.failedToFetchProjectList`));
37
- process.exit(EXIT_CODES.ERROR);
37
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.error.failedToFetchProjectList`));
38
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
38
39
  }
39
40
  }
40
- const projectTemplates = await getProjectTemplateListFromRepo(templateSource, latestRepoReleaseTag || DEFAULT_PROJECT_TEMPLATE_BRANCH);
41
+ if (!templateSource || !templateSource.includes('/')) {
42
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.error.invalidTemplateSource`));
43
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
44
+ }
45
+ const projectTemplates = await (0, create_1.getProjectTemplateListFromRepo)(templateSource, latestRepoReleaseTag || constants_1.DEFAULT_PROJECT_TEMPLATE_BRANCH);
41
46
  if (!projectTemplates.length) {
42
- logger.error(i18n(`${i18nKey}.error.failedToFetchProjectList`));
43
- process.exit(EXIT_CODES.ERROR);
47
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.error.failedToFetchProjectList`));
48
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
44
49
  }
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);
50
+ const createProjectPromptResponse = await (0, createProjectPrompt_1.createProjectPrompt)(args, projectTemplates);
51
+ const projectDest = path_1.default.resolve((0, path_2.getCwd)(), createProjectPromptResponse.dest);
52
+ (0, usageTracking_1.trackCommandUsage)('project-create', { type: createProjectPromptResponse.projectTemplate.name }, derivedAccountId);
53
+ const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await (0, config_1.getProjectConfig)(projectDest);
49
54
  // Exit if the target destination is within an existing project
50
- if (existingProjectConfig && projectDest.startsWith(existingProjectDir)) {
51
- logger.error(i18n(`${i18nKey}.errors.cannotNestProjects`, {
55
+ if (existingProjectConfig &&
56
+ existingProjectDir &&
57
+ projectDest.startsWith(existingProjectDir)) {
58
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.cannotNestProjects`, {
52
59
  projectDir: existingProjectDir,
53
60
  }));
54
- process.exit(EXIT_CODES.ERROR);
61
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
55
62
  }
56
63
  try {
57
- await cloneGithubRepo(templateSource, projectDest, {
64
+ await (0, github_1.cloneGithubRepo)(templateSource, projectDest, {
58
65
  sourceDir: createProjectPromptResponse.projectTemplate.path,
59
66
  tag: latestRepoReleaseTag,
60
67
  hideLogs: true,
61
68
  });
62
69
  }
63
70
  catch (err) {
64
- debugError(err);
65
- logger.error(i18n(`${i18nKey}.errors.failedToDownloadProject`));
66
- process.exit(EXIT_CODES.ERROR);
71
+ (0, errorHandlers_1.debugError)(err);
72
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.failedToDownloadProject`));
73
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
67
74
  }
68
- const projectConfigPath = path.join(projectDest, PROJECT_CONFIG_FILE);
69
- const parsedConfigFile = JSON.parse(fs.readFileSync(projectConfigPath).toString());
70
- writeProjectConfig(projectConfigPath, {
75
+ const projectConfigPath = path_1.default.join(projectDest, constants_1.PROJECT_CONFIG_FILE);
76
+ const parsedConfigFile = JSON.parse(fs_extra_1.default.readFileSync(projectConfigPath).toString());
77
+ (0, config_1.writeProjectConfig)(projectConfigPath, {
71
78
  ...parsedConfigFile,
72
79
  name: createProjectPromptResponse.name,
73
80
  });
74
81
  // If the template is 'no-template', we need to manually create a src directory
75
82
  if (createProjectPromptResponse.projectTemplate.name ===
76
- EMPTY_PROJECT_TEMPLATE_NAME) {
77
- fs.ensureDirSync(path.join(projectDest, 'src'));
83
+ create_1.EMPTY_PROJECT_TEMPLATE_NAME) {
84
+ fs_extra_1.default.ensureDirSync(path_1.default.join(projectDest, 'src'));
78
85
  }
79
- logger.log('');
80
- logger.success(i18n(`${i18nKey}.logs.success`, {
86
+ logger_1.logger.log('');
87
+ logger_1.logger.success((0, lang_1.i18n)(`commands.project.subcommands.create.logs.success`, {
81
88
  projectName: createProjectPromptResponse.name,
82
89
  projectDest,
83
90
  }));
84
- logger.log('');
85
- logger.log(chalk.bold(i18n(`${i18nKey}.logs.welcomeMessage`)));
86
- uiFeatureHighlight([
91
+ logger_1.logger.log('');
92
+ logger_1.logger.log(chalk_1.default.bold((0, lang_1.i18n)(`commands.project.subcommands.create.logs.welcomeMessage`)));
93
+ (0, ui_1.uiFeatureHighlight)([
87
94
  'projectCommandTip',
88
95
  'projectUploadCommand',
89
96
  'projectDevCommand',
@@ -92,36 +99,51 @@ 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: (0, lang_1.i18n)(`commands.project.subcommands.create.options.name.describe`),
101
108
  type: 'string',
102
109
  },
103
110
  dest: {
104
- describe: i18n(`${i18nKey}.options.dest.describe`),
111
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.create.options.dest.describe`),
105
112
  type: 'string',
106
113
  },
107
114
  template: {
108
- describe: i18n(`${i18nKey}.options.template.describe`),
115
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.create.options.template.describe`),
109
116
  type: 'string',
110
117
  },
111
118
  'template-source': {
112
- describe: i18n(`${i18nKey}.options.templateSource.describe`),
119
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.create.options.templateSource.describe`),
113
120
  type: 'string',
114
121
  },
115
122
  });
116
- yargs.example([['$0 project create', i18n(`${i18nKey}.examples.default`)]]);
123
+ yargs.example([
124
+ [
125
+ '$0 project create',
126
+ (0, lang_1.i18n)(`commands.project.subcommands.create.examples.default`),
127
+ ],
128
+ ]);
117
129
  yargs.example([
118
130
  [
119
131
  '$0 project create --template-source HubSpot/ui-extensions-examples',
120
- i18n(`${i18nKey}.examples.templateSource`),
132
+ (0, lang_1.i18n)(`commands.project.subcommands.create.examples.templateSource`),
121
133
  ],
122
134
  ]);
123
- addConfigOptions(yargs);
124
- addAccountOptions(yargs);
125
- addUseEnvironmentOptions(yargs);
126
135
  return yargs;
136
+ }
137
+ const builder = (0, yargsUtils_1.makeYargsBuilder)(projectCreateBuilder, command, describe, {
138
+ useGlobalOptions: true,
139
+ useAccountOptions: true,
140
+ useConfigOptions: true,
141
+ useEnvironmentOptions: true,
142
+ });
143
+ const projectCreateCommand = {
144
+ command,
145
+ describe,
146
+ handler,
147
+ builder,
127
148
  };
149
+ exports.default = projectCreateCommand;
@@ -1,11 +1,8 @@
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;
9
6
  };
10
- export declare function handler(args: ArgumentsCamelCase<ProjectDeployArgs>): Promise<void>;
11
- export declare const builder: (yargs: Argv) => Promise<Argv<ProjectDeployArgs>>;
7
+ declare const projectDeployCommand: YargsCommandModule<unknown, ProjectDeployArgs>;
8
+ 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,21 +21,20 @@ 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 command = 'deploy';
25
+ const describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.deploy.describe`), false);
29
26
  function validateBuildId(buildId, deployedBuildId, latestBuildId, projectName, accountId) {
30
27
  if (Number(buildId) > latestBuildId) {
31
- return (0, lang_1.i18n)(`${i18nKey}.errors.buildIdDoesNotExist`, {
28
+ return (0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.buildIdDoesNotExist`, {
32
29
  buildId: buildId,
33
30
  projectName: projectName,
34
- linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
31
+ linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
35
32
  });
36
33
  }
37
34
  if (Number(buildId) === deployedBuildId) {
38
- return (0, lang_1.i18n)(`${i18nKey}.errors.buildAlreadyDeployed`, {
35
+ return (0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.buildAlreadyDeployed`, {
39
36
  buildId: buildId,
40
- linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
37
+ linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
41
38
  });
42
39
  }
43
40
  return true;
@@ -48,7 +45,7 @@ async function handler(args) {
48
45
  const { project: projectOption, buildId: buildIdOption } = args;
49
46
  const accountType = accountConfig && accountConfig.accountType;
50
47
  (0, usageTracking_1.trackCommandUsage)('project-deploy', accountType ? { type: accountType } : undefined, derivedAccountId);
51
- const { projectConfig } = await (0, projects_2.getProjectConfig)();
48
+ const { projectConfig } = await (0, config_2.getProjectConfig)();
52
49
  let projectName = projectOption;
53
50
  if (!projectOption && projectConfig) {
54
51
  projectName = projectConfig.name;
@@ -61,7 +58,7 @@ async function handler(args) {
61
58
  try {
62
59
  const { data: { latestBuild, deployedBuildId }, } = await (0, projects_1.fetchProject)(derivedAccountId, projectName);
63
60
  if (!latestBuild || !latestBuild.buildId) {
64
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noBuilds`));
61
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.noBuilds`));
65
62
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
66
63
  }
67
64
  if (buildIdToDeploy) {
@@ -74,7 +71,7 @@ async function handler(args) {
74
71
  else {
75
72
  const deployBuildIdPromptResponse = await (0, promptUtils_1.promptUser)({
76
73
  name: 'buildId',
77
- message: (0, lang_1.i18n)(`${i18nKey}.deployBuildIdPrompt`),
74
+ message: (0, lang_1.i18n)(`commands.project.subcommands.deploy.deployBuildIdPrompt`),
78
75
  default: latestBuild.buildId === deployedBuildId
79
76
  ? undefined
80
77
  : latestBuild.buildId,
@@ -83,19 +80,19 @@ async function handler(args) {
83
80
  buildIdToDeploy = deployBuildIdPromptResponse.buildId;
84
81
  }
85
82
  if (!buildIdToDeploy) {
86
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noBuildId`));
83
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.noBuildId`));
87
84
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
88
85
  }
89
86
  const { data: deployResp } = await (0, projects_1.deployProject)(derivedAccountId, projectName, buildIdToDeploy, (0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion));
90
87
  if (!deployResp) {
91
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.deploy`));
88
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.deploy`));
92
89
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
93
90
  }
94
91
  await (0, buildAndDeploy_2.pollDeployStatus)(derivedAccountId, projectName, Number(deployResp.id), buildIdToDeploy);
95
92
  }
96
93
  catch (e) {
97
94
  if ((0, index_1.isHubSpotHttpError)(e) && e.status === 404) {
98
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.projectNotFound`, {
95
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.projectNotFound`, {
99
96
  projectName: chalk_1.default.bold(projectName),
100
97
  accountIdentifier: (0, ui_2.uiAccountDescription)(derivedAccountId),
101
98
  command: (0, ui_2.uiCommandReference)('hs project upload'),
@@ -116,32 +113,37 @@ async function handler(args) {
116
113
  function projectDeployBuilder(yargs) {
117
114
  yargs.options({
118
115
  project: {
119
- describe: (0, lang_1.i18n)(`${i18nKey}.options.project.describe`),
116
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.project.describe`),
120
117
  type: 'string',
121
118
  },
122
119
  build: {
123
120
  alias: ['build-id'],
124
- describe: (0, lang_1.i18n)(`${i18nKey}.options.build.describe`),
121
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.build.describe`),
125
122
  type: 'number',
126
123
  },
127
124
  });
128
125
  yargs.example([
129
- ['$0 project deploy', (0, lang_1.i18n)(`${i18nKey}.examples.default`)],
126
+ [
127
+ '$0 project deploy',
128
+ (0, lang_1.i18n)(`commands.project.subcommands.deploy.examples.default`),
129
+ ],
130
130
  [
131
131
  '$0 project deploy --project="my-project" --build=5',
132
- (0, lang_1.i18n)(`${i18nKey}.examples.withOptions`),
132
+ (0, lang_1.i18n)(`commands.project.subcommands.deploy.examples.withOptions`),
133
133
  ],
134
134
  ]);
135
135
  return yargs;
136
136
  }
137
- exports.builder = (0, yargsUtils_1.makeYargsBuilder)(projectDeployBuilder, exports.command, exports.describe, {
137
+ const builder = (0, yargsUtils_1.makeYargsBuilder)(projectDeployBuilder, command, describe, {
138
+ useGlobalOptions: true,
138
139
  useConfigOptions: true,
139
140
  useAccountOptions: true,
140
141
  useEnvironmentOptions: true,
141
142
  });
142
- module.exports = {
143
- command: exports.command,
144
- describe: exports.describe,
145
- builder: exports.builder,
143
+ const projectDeployCommand = {
144
+ command,
145
+ describe,
146
+ builder,
146
147
  handler,
147
148
  };
149
+ exports.default = projectDeployCommand;
@@ -13,12 +13,11 @@ 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';
20
+ const ensureProjectExists_1 = require("../../../lib/projects/ensureProjectExists");
22
21
  async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, projectDir) {
23
22
  const { providedAccountId, derivedAccountId } = args;
24
23
  const env = (0, environment_1.getValidEnv)((0, config_1.getEnv)(derivedAccountId));
@@ -28,25 +27,34 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
28
27
  const hasPrivateApps = !!componentTypes[Projects_1.ComponentTypes.PrivateApp];
29
28
  const hasPublicApps = !!componentTypes[Projects_1.ComponentTypes.PublicApp];
30
29
  if (runnableComponents.length === 0) {
31
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noRunnableComponents`, {
30
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noRunnableComponents`, {
32
31
  projectDir,
33
32
  command: (0, ui_1.uiCommandReference)('hs project add'),
34
33
  }));
35
34
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
36
35
  }
37
36
  else if (hasPrivateApps && hasPublicApps) {
38
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.invalidProjectComponents`));
37
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.invalidProjectComponents`));
39
38
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
40
39
  }
41
40
  const accounts = (0, config_1.getConfigAccounts)();
42
41
  if (!accounts) {
43
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccountsInConfig`, {
42
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccountsInConfig`, {
44
43
  authCommand: (0, ui_1.uiCommandReference)('hs auth'),
45
44
  }));
46
45
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
47
46
  }
48
- const defaultAccountIsRecommendedType = (0, accountTypes_1.isDeveloperTestAccount)(accountConfig) ||
49
- (!hasPublicApps && (0, accountTypes_1.isSandbox)(accountConfig));
47
+ let bypassRecommendedAccountPrompt = false;
48
+ if ((0, accountTypes_1.isDeveloperTestAccount)(accountConfig)) {
49
+ bypassRecommendedAccountPrompt = true;
50
+ }
51
+ else if (!hasPublicApps && (0, accountTypes_1.isSandbox)(accountConfig)) {
52
+ bypassRecommendedAccountPrompt = true;
53
+ }
54
+ else if (!hasPublicApps) {
55
+ const defaultAccountHasSandboxes = await (0, helpers_1.hasSandboxes)(accountConfig);
56
+ bypassRecommendedAccountPrompt = !defaultAccountHasSandboxes;
57
+ }
50
58
  // targetProjectAccountId and targetTestingAccountId are set to null if --account flag is not provided.
51
59
  // 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
60
  let targetProjectAccountId = providedAccountId ? derivedAccountId : null;
@@ -54,20 +62,20 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
54
62
  let targetTestingAccountId = providedAccountId ? derivedAccountId : null;
55
63
  // Check that the default account or flag option is valid for the type of app in this project
56
64
  if (providedAccountId) {
57
- (0, localDev_1.checkIfAccountFlagIsSupported)(accountConfig, hasPublicApps);
65
+ (0, helpers_1.checkIfAccountFlagIsSupported)(accountConfig, hasPublicApps);
58
66
  if (hasPublicApps) {
59
67
  targetProjectAccountId = accountConfig.parentAccountId || null;
60
68
  }
61
69
  }
62
70
  else {
63
- (0, localDev_1.checkIfDefaultAccountIsSupported)(accountConfig, hasPublicApps);
71
+ await (0, helpers_1.checkIfDefaultAccountIsSupported)(accountConfig, hasPublicApps);
64
72
  }
65
73
  // The user is targeting an account type that we recommend developing on
66
- if (!targetProjectAccountId && defaultAccountIsRecommendedType) {
74
+ if (!targetProjectAccountId && bypassRecommendedAccountPrompt) {
67
75
  targetTestingAccountId = derivedAccountId;
68
- await (0, localDev_1.confirmDefaultAccountIsTarget)(accountConfig);
76
+ await (0, helpers_1.confirmDefaultAccountIsTarget)(accountConfig);
69
77
  if (hasPublicApps) {
70
- (0, localDev_1.checkIfParentAccountIsAuthed)(accountConfig);
78
+ (0, helpers_1.checkIfParentAccountIsAuthed)(accountConfig);
71
79
  targetProjectAccountId = accountConfig.parentAccountId || null;
72
80
  }
73
81
  else {
@@ -77,34 +85,33 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
77
85
  let createNewSandbox = false;
78
86
  let createNewDeveloperTestAccount = false;
79
87
  if (!targetProjectAccountId) {
80
- const { targetAccountId, parentAccountId, createNestedAccount, notInConfigAccount, } = await (0, localDev_1.suggestRecommendedNestedAccount)(accounts, accountConfig, hasPublicApps);
88
+ const { targetAccountId, parentAccountId, createNestedAccount, notInConfigAccount, } = await (0, helpers_1.suggestRecommendedNestedAccount)(accounts, accountConfig, hasPublicApps);
81
89
  targetProjectAccountId = hasPublicApps
82
90
  ? parentAccountId || null
83
91
  : targetAccountId;
84
92
  targetTestingAccountId = targetAccountId;
85
93
  // Only used for developer test accounts that are not yet in the config
86
94
  if (notInConfigAccount) {
87
- await (0, localDev_1.useExistingDevTestAccount)(env, notInConfigAccount);
95
+ await (0, helpers_1.useExistingDevTestAccount)(env, notInConfigAccount);
88
96
  }
89
- createNewSandbox = (0, accountTypes_1.isStandardAccount)(accountConfig) && createNestedAccount;
90
- createNewDeveloperTestAccount =
91
- (0, accountTypes_1.isAppDeveloperAccount)(accountConfig) && createNestedAccount;
97
+ createNewSandbox = hasPrivateApps && createNestedAccount;
98
+ createNewDeveloperTestAccount = hasPublicApps && createNestedAccount;
92
99
  }
93
100
  if (createNewSandbox) {
94
- targetProjectAccountId = await (0, localDev_1.createSandboxForLocalDev)(derivedAccountId, accountConfig, env);
101
+ targetProjectAccountId = await (0, helpers_1.createSandboxForLocalDev)(derivedAccountId, accountConfig, env);
95
102
  // We will be running our tests against this new sandbox account
96
103
  targetTestingAccountId = targetProjectAccountId;
97
104
  }
98
105
  if (createNewDeveloperTestAccount) {
99
- targetTestingAccountId = await (0, localDev_1.createDeveloperTestAccountForLocalDev)(derivedAccountId, accountConfig, env);
106
+ targetTestingAccountId = await (0, helpers_1.createDeveloperTestAccountForLocalDev)(derivedAccountId, accountConfig, env);
100
107
  targetProjectAccountId = derivedAccountId;
101
108
  }
102
109
  if (!targetProjectAccountId || !targetTestingAccountId) {
103
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccount`));
110
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccount`));
104
111
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
105
112
  }
106
113
  // eslint-disable-next-line prefer-const
107
- let { projectExists, project } = await (0, projects_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
114
+ let { projectExists, project } = await (0, ensureProjectExists_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
108
115
  allowCreate: false,
109
116
  noLogs: true,
110
117
  withPolling: createNewSandbox,
@@ -117,8 +124,8 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
117
124
  isGithubLinked = Boolean(project.sourceIntegration && project.sourceIntegration.source === 'GITHUB');
118
125
  }
119
126
  else {
120
- project = await (0, localDev_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps);
121
- deployedBuild = await (0, localDev_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId);
127
+ project = await (0, helpers_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps);
128
+ deployedBuild = await (0, helpers_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId);
122
129
  }
123
130
  const LocalDev = new LocalDevManager_1.default({
124
131
  runnableComponents,
@@ -1,6 +1,8 @@
1
- import { ArgumentsCamelCase, Argv } from 'yargs';
1
+ import { ArgumentsCamelCase, Argv, CommandModule } from 'yargs';
2
2
  import { ProjectDevArgs } from '../../../types/Yargs';
3
3
  export declare const command = "dev";
4
4
  export declare const describe: string;
5
5
  export declare function handler(args: ArgumentsCamelCase<ProjectDevArgs>): Promise<void>;
6
- export declare function builder(yargs: Argv): Argv<ProjectDevArgs>;
6
+ export declare const builder: (yargs: Argv) => Promise<Argv<ProjectDevArgs>>;
7
+ declare const projectDevCommand: CommandModule<unknown, ProjectDevArgs>;
8
+ export default projectDevCommand;
@@ -1,52 +1,65 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.describe = exports.command = void 0;
3
+ exports.builder = exports.describe = exports.command = void 0;
4
4
  exports.handler = handler;
5
- exports.builder = builder;
6
- const commonOpts_1 = require("../../../lib/commonOpts");
7
5
  const usageTracking_1 = require("../../../lib/usageTracking");
8
6
  const lang_1 = require("../../../lib/lang");
9
7
  const logger_1 = require("@hubspot/local-dev-lib/logger");
10
8
  const config_1 = require("@hubspot/local-dev-lib/config");
11
- const projects_1 = require("../../../lib/projects");
9
+ const config_2 = require("../../../lib/projects/config");
12
10
  const exitCodes_1 = require("../../../lib/enums/exitCodes");
13
11
  const ui_1 = require("../../../lib/ui");
14
12
  const deprecatedFlow_1 = require("./deprecatedFlow");
15
13
  const unifiedFlow_1 = require("./unifiedFlow");
16
14
  const buildAndDeploy_1 = require("../../../lib/projects/buildAndDeploy");
17
- const i18nKey = 'commands.project.subcommands.dev';
15
+ const yargsUtils_1 = require("../../../lib/yargsUtils");
18
16
  exports.command = 'dev';
19
- exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
17
+ exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.dev.describe`), false);
20
18
  async function handler(args) {
21
19
  const { derivedAccountId } = args;
22
20
  const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
23
21
  (0, usageTracking_1.trackCommandUsage)('project-dev', {}, derivedAccountId);
24
- const { projectConfig, projectDir } = await (0, projects_1.getProjectConfig)();
25
- (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.logs.betaMessage`));
26
- logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.logs.learnMoreLocalDevServer`), 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'));
22
+ const { projectConfig, projectDir } = await (0, config_2.getProjectConfig)();
23
+ (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.dev.logs.betaMessage`));
24
+ logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.dev.logs.learnMoreLocalDevServer`), 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'));
27
25
  if (!projectConfig || !projectDir) {
28
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noProjectConfig`, {
26
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noProjectConfig`, {
29
27
  accountId: derivedAccountId,
30
28
  authCommand: (0, ui_1.uiCommandReference)('hs auth'),
31
29
  }));
32
30
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
33
31
  }
34
32
  if (!accountConfig) {
35
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccount`));
33
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccount`));
36
34
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
37
35
  }
38
- (0, projects_1.validateProjectConfig)(projectConfig, projectDir);
39
- if ((0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion)) {
36
+ (0, config_2.validateProjectConfig)(projectConfig, projectDir);
37
+ if ((0, buildAndDeploy_1.useV3Api)(projectConfig.platformVersion)) {
40
38
  await (0, unifiedFlow_1.unifiedProjectDevFlow)(args, accountConfig, projectConfig, projectDir);
41
39
  }
42
40
  else {
43
41
  await (0, deprecatedFlow_1.deprecatedProjectDevFlow)(args, accountConfig, projectConfig, projectDir);
44
42
  }
45
43
  }
46
- function builder(yargs) {
47
- (0, commonOpts_1.addConfigOptions)(yargs);
48
- (0, commonOpts_1.addAccountOptions)(yargs);
49
- (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
50
- yargs.example([['$0 project dev', (0, lang_1.i18n)(`${i18nKey}.examples.default`)]]);
44
+ function projectDevBuilder(yargs) {
45
+ yargs.example([
46
+ [
47
+ '$0 project dev',
48
+ (0, lang_1.i18n)(`commands.project.subcommands.dev.examples.default`),
49
+ ],
50
+ ]);
51
51
  return yargs;
52
52
  }
53
+ exports.builder = (0, yargsUtils_1.makeYargsBuilder)(projectDevBuilder, exports.command, exports.describe, {
54
+ useGlobalOptions: true,
55
+ useAccountOptions: true,
56
+ useConfigOptions: true,
57
+ useEnvironmentOptions: true,
58
+ });
59
+ const projectDevCommand = {
60
+ command: exports.command,
61
+ describe: exports.describe,
62
+ handler,
63
+ builder: exports.builder,
64
+ };
65
+ exports.default = projectDevCommand;