@hubspot/cli 7.4.4-experimental.0 → 7.4.5-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) 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 +4 -5
  17. package/commands/app/migrate.js +19 -8
  18. package/commands/auth.js +14 -11
  19. package/commands/cms/lighthouseScore.js +6 -2
  20. package/commands/cms.js +1 -2
  21. package/commands/completion.js +2 -3
  22. package/commands/config/migrate.d.ts +10 -0
  23. package/commands/config/migrate.js +84 -0
  24. package/commands/config/set.d.ts +10 -0
  25. package/commands/config/set.js +34 -29
  26. package/commands/config.d.ts +4 -1
  27. package/commands/config.js +45 -11
  28. package/commands/create/api-sample.js +3 -1
  29. package/commands/create/website-theme.js +1 -1
  30. package/commands/create.js +7 -8
  31. package/commands/customObject/schema/delete.js +4 -1
  32. package/commands/customObject/schema/fetch-all.js +2 -1
  33. package/commands/customObject/schema/fetch.js +2 -1
  34. package/commands/customObject.js +3 -4
  35. package/commands/doctor.js +5 -6
  36. package/commands/feedback.js +7 -8
  37. package/commands/fetch.js +6 -7
  38. package/commands/filemanager.js +1 -2
  39. package/commands/function.js +1 -2
  40. package/commands/hubdb/clear.js +5 -6
  41. package/commands/hubdb/create.js +7 -8
  42. package/commands/hubdb/delete.js +8 -7
  43. package/commands/hubdb/fetch.js +4 -5
  44. package/commands/hubdb.js +1 -2
  45. package/commands/init.js +18 -20
  46. package/commands/lint.js +3 -4
  47. package/commands/list.js +5 -6
  48. package/commands/logs.js +12 -13
  49. package/commands/module/marketplace-validate.js +5 -6
  50. package/commands/module.js +1 -3
  51. package/commands/mv.js +4 -5
  52. package/commands/open.js +4 -5
  53. package/commands/project/add.js +19 -15
  54. package/commands/project/cloneApp.d.ts +5 -1
  55. package/commands/project/cloneApp.js +25 -20
  56. package/commands/project/create.js +19 -15
  57. package/commands/project/deploy.js +19 -17
  58. package/commands/project/dev/deprecatedFlow.js +32 -25
  59. package/commands/project/dev/index.js +15 -11
  60. package/commands/project/dev/unifiedFlow.js +10 -11
  61. package/commands/project/download.js +10 -11
  62. package/commands/project/installDeps.d.ts +9 -1
  63. package/commands/project/installDeps.js +46 -31
  64. package/commands/project/listBuilds.js +18 -14
  65. package/commands/project/logs.d.ts +13 -1
  66. package/commands/project/logs.js +72 -63
  67. package/commands/project/migrate.d.ts +11 -0
  68. package/commands/project/migrate.js +67 -0
  69. package/commands/project/migrateApp.d.ts +4 -4
  70. package/commands/project/migrateApp.js +7 -5
  71. package/commands/project/open.js +15 -8
  72. package/commands/project/upload.d.ts +12 -0
  73. package/commands/project/upload.js +69 -50
  74. package/commands/project/watch.js +25 -7
  75. package/commands/project.js +3 -2
  76. package/commands/remove.js +7 -5
  77. package/commands/sandbox/create.js +10 -11
  78. package/commands/sandbox/delete.js +18 -19
  79. package/commands/sandbox.js +1 -2
  80. package/commands/secret/addSecret.js +5 -6
  81. package/commands/secret/deleteSecret.js +12 -9
  82. package/commands/secret/listSecret.js +3 -4
  83. package/commands/secret/updateSecret.js +9 -8
  84. package/commands/secret.js +1 -2
  85. package/commands/theme/generate-selectors.js +5 -6
  86. package/commands/theme/marketplace-validate.js +5 -6
  87. package/commands/theme/preview.js +16 -16
  88. package/commands/theme.js +1 -2
  89. package/commands/upload.js +23 -24
  90. package/commands/watch.js +18 -19
  91. package/lang/en.d.ts +2797 -0
  92. package/lang/en.js +2652 -3300
  93. package/lang/en.lyaml +97 -43
  94. package/lib/accountTypes.d.ts +1 -0
  95. package/lib/accountTypes.js +12 -0
  96. package/lib/app/migrate.d.ts +10 -4
  97. package/lib/app/migrate.js +188 -92
  98. package/lib/app/migrate_legacy.d.ts +2 -2
  99. package/lib/app/migrate_legacy.js +10 -7
  100. package/lib/buildAccount.d.ts +1 -2
  101. package/lib/buildAccount.js +7 -5
  102. package/lib/commonOpts.d.ts +2 -3
  103. package/lib/commonOpts.js +12 -2
  104. package/lib/configMigrate.d.ts +2 -0
  105. package/lib/configMigrate.js +104 -0
  106. package/lib/constants.d.ts +4 -0
  107. package/lib/constants.js +5 -1
  108. package/lib/dependencyManagement.js +2 -2
  109. package/lib/doctor/Diagnosis.d.ts +1 -2
  110. package/lib/doctor/Diagnosis.js +10 -6
  111. package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
  112. package/lib/doctor/DiagnosticInfoBuilder.js +10 -9
  113. package/lib/doctor/Doctor.d.ts +1 -0
  114. package/lib/doctor/Doctor.js +18 -0
  115. package/lib/hasFeature.d.ts +3 -1
  116. package/lib/middleware/__test__/configMiddleware.test.d.ts +1 -0
  117. package/lib/middleware/__test__/configMiddleware.test.js +194 -0
  118. package/lib/middleware/__test__/gitMiddleware.test.d.ts +1 -0
  119. package/lib/middleware/__test__/gitMiddleware.test.js +76 -0
  120. package/lib/middleware/__test__/notificationsMiddleware.test.d.ts +1 -0
  121. package/lib/middleware/__test__/notificationsMiddleware.test.js +10 -0
  122. package/lib/middleware/__test__/requestMiddleware.test.d.ts +1 -0
  123. package/lib/middleware/__test__/requestMiddleware.test.js +20 -0
  124. package/lib/middleware/__test__/utils.test.d.ts +1 -0
  125. package/lib/middleware/__test__/utils.test.js +53 -0
  126. package/lib/middleware/__test__/yargsChecksMiddleware.test.d.ts +1 -0
  127. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +81 -0
  128. package/lib/middleware/configMiddleware.d.ts +13 -0
  129. package/lib/middleware/configMiddleware.js +116 -0
  130. package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
  131. package/lib/middleware/fireAlarmMiddleware.js +137 -0
  132. package/lib/middleware/gitMiddleware.d.ts +2 -0
  133. package/lib/middleware/gitMiddleware.js +14 -0
  134. package/lib/middleware/notificationsMiddleware.d.ts +1 -0
  135. package/lib/middleware/notificationsMiddleware.js +38 -0
  136. package/lib/middleware/requestMiddleware.d.ts +1 -0
  137. package/lib/middleware/requestMiddleware.js +11 -0
  138. package/lib/middleware/utils.d.ts +8 -0
  139. package/lib/middleware/utils.js +17 -0
  140. package/lib/middleware/yargsChecksMiddleware.d.ts +4 -0
  141. package/lib/middleware/yargsChecksMiddleware.js +24 -0
  142. package/lib/projects/ProjectLogsManager.d.ts +1 -1
  143. package/lib/projects/ProjectLogsManager.js +15 -20
  144. package/lib/projects/buildAndDeploy.js +15 -26
  145. package/lib/projects/config.d.ts +9 -0
  146. package/lib/projects/config.js +79 -0
  147. package/lib/projects/create.js +4 -5
  148. package/lib/projects/ensureProjectExists.d.ts +11 -0
  149. package/lib/projects/ensureProjectExists.js +97 -0
  150. package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
  151. package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +5 -6
  152. package/lib/{DevServerManagerV2.d.ts → projects/localDev/DevServerManagerV2.d.ts} +1 -1
  153. package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +3 -4
  154. package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
  155. package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +42 -76
  156. package/lib/{LocalDevManagerV2.d.ts → projects/localDev/LocalDevManagerV2.d.ts} +2 -2
  157. package/lib/{LocalDevManagerV2.js → projects/localDev/LocalDevManagerV2.js} +37 -70
  158. package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +4 -3
  159. package/lib/{localDev.js → projects/localDev/helpers.js} +72 -99
  160. package/lib/projects/ui.d.ts +1 -0
  161. package/lib/projects/ui.js +15 -0
  162. package/lib/projects/upload.d.ts +1 -1
  163. package/lib/projects/upload.js +9 -30
  164. package/lib/projects/urls.d.ts +1 -0
  165. package/lib/projects/urls.js +6 -0
  166. package/lib/projects/watch.js +18 -15
  167. package/lib/prompts/projectNamePrompt.js +2 -2
  168. package/lib/prompts/promptUtils.d.ts +1 -1
  169. package/lib/ui/SpinniesManager.d.ts +1 -1
  170. package/lib/ui/index.d.ts +1 -0
  171. package/lib/ui/index.js +5 -0
  172. package/lib/ui/spinniesUtils.d.ts +5 -5
  173. package/package.json +7 -6
  174. package/types/Yargs.d.ts +0 -10
  175. package/lib/projects/index.d.ts +0 -20
  176. package/lib/projects/index.js +0 -194
@@ -12,7 +12,7 @@ const errorHandlers_1 = require("../../lib/errorHandlers");
12
12
  const usageTracking_1 = require("../../lib/usageTracking");
13
13
  const lang_1 = require("../../lib/lang");
14
14
  const projectAddPrompt_1 = require("../../lib/prompts/projectAddPrompt");
15
- const projects_1 = require("../../lib/projects");
15
+ const config_1 = require("../../lib/projects/config");
16
16
  const create_1 = require("../../lib/projects/create");
17
17
  const structure_1 = require("../../lib/projects/structure");
18
18
  const Projects_1 = require("../../types/Projects");
@@ -20,15 +20,14 @@ const ui_1 = require("../../lib/ui");
20
20
  const constants_1 = require("../../lib/constants");
21
21
  const exitCodes_1 = require("../../lib/enums/exitCodes");
22
22
  const yargsUtils_1 = require("../../lib/yargsUtils");
23
- const i18nKey = 'commands.project.subcommands.add';
24
23
  exports.command = 'add';
25
- exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
24
+ exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.add.describe`), false);
26
25
  async function handler(args) {
27
26
  const { derivedAccountId } = args;
28
27
  (0, usageTracking_1.trackCommandUsage)('project-add', undefined, derivedAccountId);
29
- const { projectConfig, projectDir } = await (0, projects_1.getProjectConfig)();
28
+ const { projectConfig, projectDir } = await (0, config_1.getProjectConfig)();
30
29
  if (!projectDir || !projectConfig) {
31
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.error.locationInProject`));
30
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.locationInProject`));
32
31
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
33
32
  }
34
33
  // We currently only support adding private apps to projects
@@ -41,11 +40,11 @@ async function handler(args) {
41
40
  (0, errorHandlers_1.debugError)(err);
42
41
  }
43
42
  if (projectContainsPublicApp) {
44
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.error.projectContainsPublicApp`));
43
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.projectContainsPublicApp`));
45
44
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
46
45
  }
47
46
  logger_1.logger.log('');
48
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.creatingComponent`, {
47
+ logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.add.creatingComponent`, {
49
48
  projectName: projectConfig.name,
50
49
  }));
51
50
  logger_1.logger.log('');
@@ -61,12 +60,12 @@ async function handler(args) {
61
60
  (0, errorHandlers_1.debugError)(err);
62
61
  }
63
62
  if (!latestRepoReleaseTag) {
64
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.error.failedToFetchComponentList`));
63
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToFetchComponentList`));
65
64
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
66
65
  }
67
66
  const components = await (0, create_1.getProjectComponentListFromRepo)(latestRepoReleaseTag);
68
67
  if (!components.length) {
69
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.error.failedToFetchComponentList`));
68
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToFetchComponentList`));
70
69
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
71
70
  }
72
71
  const projectAddPromptResponse = await (0, projectAddPrompt_1.projectAddPrompt)(components, args);
@@ -78,13 +77,13 @@ async function handler(args) {
78
77
  hideLogs: true,
79
78
  });
80
79
  logger_1.logger.log('');
81
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.success`, {
80
+ logger_1.logger.success((0, lang_1.i18n)(`commands.project.subcommands.add.success`, {
82
81
  componentName: projectAddPromptResponse.name,
83
82
  }));
84
83
  }
85
84
  catch (error) {
86
85
  (0, errorHandlers_1.debugError)(error);
87
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.error.failedToDownloadComponent`));
86
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToDownloadComponent`));
88
87
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
89
88
  }
90
89
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
@@ -92,19 +91,24 @@ async function handler(args) {
92
91
  function projectAddBuilder(yargs) {
93
92
  yargs.options({
94
93
  type: {
95
- describe: (0, lang_1.i18n)(`${i18nKey}.options.type.describe`),
94
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.add.options.type.describe`),
96
95
  type: 'string',
97
96
  },
98
97
  name: {
99
- describe: (0, lang_1.i18n)(`${i18nKey}.options.name.describe`),
98
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.add.options.name.describe`),
100
99
  type: 'string',
101
100
  },
102
101
  });
103
- yargs.example([['$0 project add', (0, lang_1.i18n)(`${i18nKey}.examples.default`)]]);
102
+ yargs.example([
103
+ [
104
+ '$0 project add',
105
+ (0, lang_1.i18n)(`commands.project.subcommands.add.examples.default`),
106
+ ],
107
+ ]);
104
108
  yargs.example([
105
109
  [
106
110
  '$0 project add --name="my-component" --type="components/example-app"',
107
- (0, lang_1.i18n)(`${i18nKey}.examples.withFlags`),
111
+ (0, lang_1.i18n)(`commands.project.subcommands.add.examples.withFlags`),
108
112
  ],
109
113
  ]);
110
114
  return yargs;
@@ -1,8 +1,12 @@
1
1
  import { ArgumentsCamelCase, Argv, CommandModule } from 'yargs';
2
- import { CloneAppArgs } from '../../types/Yargs';
2
+ import { AccountArgs, CommonArgs, ConfigArgs, EnvironmentArgs } from '../../types/Yargs';
3
3
  export declare const command = "clone-app";
4
4
  export declare const describe: string | undefined;
5
5
  export declare const deprecated = true;
6
+ export type CloneAppArgs = ConfigArgs & EnvironmentArgs & AccountArgs & CommonArgs & {
7
+ dest: string;
8
+ appId: number;
9
+ };
6
10
  export declare const handler: (options: ArgumentsCamelCase<CloneAppArgs>) => Promise<never>;
7
11
  export declare const builder: (yargs: Argv) => Argv<CloneAppArgs>;
8
12
  declare const cloneAppCommand: CommandModule<unknown, CloneAppArgs>;
@@ -17,29 +17,29 @@ const ui_2 = require("../../lib/ui");
17
17
  const errorHandlers_1 = require("../../lib/errorHandlers");
18
18
  const exitCodes_1 = require("../../lib/enums/exitCodes");
19
19
  const accountTypes_1 = require("../../lib/accountTypes");
20
- const projects_1 = require("../../lib/projects");
20
+ const config_1 = require("../../lib/projects/config");
21
21
  const constants_1 = require("../../lib/constants");
22
- const projects_2 = require("@hubspot/local-dev-lib/api/projects");
22
+ const projects_1 = require("@hubspot/local-dev-lib/api/projects");
23
23
  const path_2 = require("@hubspot/local-dev-lib/path");
24
24
  const logger_1 = require("@hubspot/local-dev-lib/logger");
25
25
  const archive_1 = require("@hubspot/local-dev-lib/archive");
26
- const config_1 = require("@hubspot/local-dev-lib/config");
26
+ const config_2 = require("@hubspot/local-dev-lib/config");
27
27
  const SpinniesManager_1 = __importDefault(require("../../lib/ui/SpinniesManager"));
28
28
  const migrate_1 = require("../../lib/app/migrate");
29
- const i18nKey = 'commands.project.subcommands.cloneApp';
30
29
  exports.command = 'clone-app';
31
- exports.describe = (0, ui_1.uiDeprecatedTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
30
+ exports.describe = (0, ui_1.uiDeprecatedTag)((0, lang_1.i18n)(`commands.project.subcommands.cloneApp.describe`), false);
32
31
  exports.deprecated = true;
33
32
  const handler = async (options) => {
34
33
  const { derivedAccountId } = options;
35
34
  await (0, usageTracking_1.trackCommandUsage)('clone-app', {}, derivedAccountId);
36
- const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
35
+ const accountConfig = (0, config_2.getAccountConfig)(derivedAccountId);
37
36
  const accountName = (0, ui_2.uiAccountDescription)(derivedAccountId);
38
37
  if (!accountConfig) {
39
38
  throw new Error((0, lang_1.i18n)(`commands.projects.subcommands.cloneApp.errors.noAccountConfig`));
40
39
  }
41
- if (!(0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
42
- (0, migrate_1.logInvalidAccountError)(i18nKey);
40
+ const defaultAccountIsUnified = await (0, accountTypes_1.isUnifiedAccount)(accountConfig);
41
+ if (!(0, accountTypes_1.isAppDeveloperAccount)(accountConfig) && !defaultAccountIsUnified) {
42
+ (0, migrate_1.logInvalidAccountError)();
43
43
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
44
44
  }
45
45
  let appId;
@@ -67,17 +67,17 @@ const handler = async (options) => {
67
67
  try {
68
68
  SpinniesManager_1.default.init();
69
69
  SpinniesManager_1.default.add('cloneApp', {
70
- text: (0, lang_1.i18n)(`${i18nKey}.cloneStatus.inProgress`),
70
+ text: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.cloneStatus.inProgress`),
71
71
  });
72
- const { data: { exportId }, } = await (0, projects_2.cloneApp)(derivedAccountId, appId);
73
- const { status } = await (0, polling_1.poll)(() => (0, projects_2.checkCloneStatus)(derivedAccountId, exportId));
72
+ const { data: { exportId }, } = await (0, projects_1.cloneApp)(derivedAccountId, appId);
73
+ const { status } = await (0, polling_1.poll)(() => (0, projects_1.checkCloneStatus)(derivedAccountId, exportId));
74
74
  if (status === 'SUCCESS') {
75
75
  // Ensure correct project folder structure exists
76
76
  const baseDestPath = path_1.default.resolve((0, path_2.getCwd)(), projectDest);
77
77
  const absoluteDestPath = path_1.default.resolve(baseDestPath, 'src', 'app');
78
78
  fs_1.default.mkdirSync(absoluteDestPath, { recursive: true });
79
79
  // Extract zipped app files and place them in correct directory
80
- const { data: zippedApp } = await (0, projects_2.downloadClonedProject)(derivedAccountId, exportId);
80
+ const { data: zippedApp } = await (0, projects_1.downloadClonedProject)(derivedAccountId, exportId);
81
81
  await (0, archive_1.extractZipArchive)(zippedApp, (0, path_2.sanitizeFileName)(projectName), absoluteDestPath, {
82
82
  includesRootDir: true,
83
83
  hideLogs: true,
@@ -89,17 +89,19 @@ const handler = async (options) => {
89
89
  srcDir: 'src',
90
90
  platformVersion: '2023.2',
91
91
  };
92
- const success = (0, projects_1.writeProjectConfig)(configPath, configContent);
92
+ const success = (0, config_1.writeProjectConfig)(configPath, configContent);
93
93
  SpinniesManager_1.default.succeed('cloneApp', {
94
- text: (0, lang_1.i18n)(`${i18nKey}.cloneStatus.done`),
94
+ text: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.cloneStatus.done`),
95
95
  succeedColor: 'white',
96
96
  });
97
97
  if (!success) {
98
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.couldNotWriteConfigPath`), configPath);
98
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.cloneApp.errors.couldNotWriteConfigPath`), configPath);
99
99
  }
100
100
  logger_1.logger.log('');
101
101
  (0, ui_2.uiLine)();
102
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.cloneStatus.success`, { dest: projectDest }));
102
+ logger_1.logger.success((0, lang_1.i18n)(`commands.project.subcommands.cloneApp.cloneStatus.success`, {
103
+ dest: projectDest,
104
+ }));
103
105
  logger_1.logger.log('');
104
106
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
105
107
  }
@@ -107,7 +109,7 @@ const handler = async (options) => {
107
109
  catch (error) {
108
110
  await (0, usageTracking_1.trackCommandMetadataUsage)('clone-app', { successful: false }, derivedAccountId);
109
111
  SpinniesManager_1.default.fail('cloneApp', {
110
- text: (0, lang_1.i18n)(`${i18nKey}.cloneStatus.failure`),
112
+ text: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.cloneStatus.failure`),
111
113
  failColor: 'white',
112
114
  });
113
115
  // Migrations endpoints return a response object with an errors property. The errors property contains an array of errors.
@@ -128,16 +130,19 @@ exports.handler = handler;
128
130
  const builder = (yargs) => {
129
131
  yargs.options({
130
132
  dest: {
131
- describe: (0, lang_1.i18n)(`${i18nKey}.options.dest.describe`),
133
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.options.dest.describe`),
132
134
  type: 'string',
133
135
  },
134
136
  'app-id': {
135
- describe: (0, lang_1.i18n)(`${i18nKey}.options.appId.describe`),
137
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.options.appId.describe`),
136
138
  type: 'number',
137
139
  },
138
140
  });
139
141
  yargs.example([
140
- ['$0 project clone-app', (0, lang_1.i18n)(`${i18nKey}.examples.default`)],
142
+ [
143
+ '$0 project clone-app',
144
+ (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.examples.default`),
145
+ ],
141
146
  ]);
142
147
  (0, commonOpts_1.addConfigOptions)(yargs);
143
148
  (0, commonOpts_1.addAccountOptions)(yargs);
@@ -10,16 +10,15 @@ const { getCwd } = require('@hubspot/local-dev-lib/path');
10
10
  const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
11
11
  const { trackCommandUsage } = require('../../lib/usageTracking');
12
12
  const { createProjectPrompt, } = require('../../lib/prompts/createProjectPrompt');
13
- const { writeProjectConfig, getProjectConfig } = require('../../lib/projects');
13
+ const { writeProjectConfig, getProjectConfig, } = require('../../lib/projects/config');
14
14
  const { getProjectTemplateListFromRepo, EMPTY_PROJECT_TEMPLATE_NAME, } = require('../../lib/projects/create');
15
15
  const { i18n } = require('../../lib/lang');
16
16
  const { uiBetaTag, uiFeatureHighlight } = require('../../lib/ui');
17
17
  const { debugError } = require('../../lib/errorHandlers');
18
18
  const { EXIT_CODES } = require('../../lib/enums/exitCodes');
19
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
20
  exports.command = 'create';
22
- exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
21
+ exports.describe = uiBetaTag(i18n(`commands.project.subcommands.create.describe`), false);
23
22
  exports.handler = async (options) => {
24
23
  const { derivedAccountId } = options;
25
24
  let latestRepoReleaseTag;
@@ -33,13 +32,13 @@ exports.handler = async (options) => {
33
32
  }
34
33
  }
35
34
  catch (err) {
36
- logger.error(i18n(`${i18nKey}.error.failedToFetchProjectList`));
35
+ logger.error(i18n(`commands.project.subcommands.create.error.failedToFetchProjectList`));
37
36
  process.exit(EXIT_CODES.ERROR);
38
37
  }
39
38
  }
40
39
  const projectTemplates = await getProjectTemplateListFromRepo(templateSource, latestRepoReleaseTag || DEFAULT_PROJECT_TEMPLATE_BRANCH);
41
40
  if (!projectTemplates.length) {
42
- logger.error(i18n(`${i18nKey}.error.failedToFetchProjectList`));
41
+ logger.error(i18n(`commands.project.subcommands.create.error.failedToFetchProjectList`));
43
42
  process.exit(EXIT_CODES.ERROR);
44
43
  }
45
44
  const createProjectPromptResponse = await createProjectPrompt(options, projectTemplates);
@@ -48,7 +47,7 @@ exports.handler = async (options) => {
48
47
  const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await getProjectConfig(projectDest);
49
48
  // Exit if the target destination is within an existing project
50
49
  if (existingProjectConfig && projectDest.startsWith(existingProjectDir)) {
51
- logger.error(i18n(`${i18nKey}.errors.cannotNestProjects`, {
50
+ logger.error(i18n(`commands.project.subcommands.create.errors.cannotNestProjects`, {
52
51
  projectDir: existingProjectDir,
53
52
  }));
54
53
  process.exit(EXIT_CODES.ERROR);
@@ -62,7 +61,7 @@ exports.handler = async (options) => {
62
61
  }
63
62
  catch (err) {
64
63
  debugError(err);
65
- logger.error(i18n(`${i18nKey}.errors.failedToDownloadProject`));
64
+ logger.error(i18n(`commands.project.subcommands.create.errors.failedToDownloadProject`));
66
65
  process.exit(EXIT_CODES.ERROR);
67
66
  }
68
67
  const projectConfigPath = path.join(projectDest, PROJECT_CONFIG_FILE);
@@ -77,12 +76,12 @@ exports.handler = async (options) => {
77
76
  fs.ensureDirSync(path.join(projectDest, 'src'));
78
77
  }
79
78
  logger.log('');
80
- logger.success(i18n(`${i18nKey}.logs.success`, {
79
+ logger.success(i18n(`commands.project.subcommands.create.logs.success`, {
81
80
  projectName: createProjectPromptResponse.name,
82
81
  projectDest,
83
82
  }));
84
83
  logger.log('');
85
- logger.log(chalk.bold(i18n(`${i18nKey}.logs.welcomeMessage`)));
84
+ logger.log(chalk.bold(i18n(`commands.project.subcommands.create.logs.welcomeMessage`)));
86
85
  uiFeatureHighlight([
87
86
  'projectCommandTip',
88
87
  'projectUploadCommand',
@@ -97,27 +96,32 @@ exports.handler = async (options) => {
97
96
  exports.builder = yargs => {
98
97
  yargs.options({
99
98
  name: {
100
- describe: i18n(`${i18nKey}.options.name.describe`),
99
+ describe: i18n(`commands.project.subcommands.create.options.name.describe`),
101
100
  type: 'string',
102
101
  },
103
102
  dest: {
104
- describe: i18n(`${i18nKey}.options.dest.describe`),
103
+ describe: i18n(`commands.project.subcommands.create.options.dest.describe`),
105
104
  type: 'string',
106
105
  },
107
106
  template: {
108
- describe: i18n(`${i18nKey}.options.template.describe`),
107
+ describe: i18n(`commands.project.subcommands.create.options.template.describe`),
109
108
  type: 'string',
110
109
  },
111
110
  'template-source': {
112
- describe: i18n(`${i18nKey}.options.templateSource.describe`),
111
+ describe: i18n(`commands.project.subcommands.create.options.templateSource.describe`),
113
112
  type: 'string',
114
113
  },
115
114
  });
116
- yargs.example([['$0 project create', i18n(`${i18nKey}.examples.default`)]]);
115
+ yargs.example([
116
+ [
117
+ '$0 project create',
118
+ i18n(`commands.project.subcommands.create.examples.default`),
119
+ ],
120
+ ]);
117
121
  yargs.example([
118
122
  [
119
123
  '$0 project create --template-source HubSpot/ui-extensions-examples',
120
- i18n(`${i18nKey}.examples.templateSource`),
124
+ i18n(`commands.project.subcommands.create.examples.templateSource`),
121
125
  ],
122
126
  ]);
123
127
  addConfigOptions(yargs);
@@ -13,7 +13,7 @@ const index_1 = require("@hubspot/local-dev-lib/errors/index");
13
13
  const buildAndDeploy_1 = require("../../lib/projects/buildAndDeploy");
14
14
  const usageTracking_1 = require("../../lib/usageTracking");
15
15
  const index_2 = require("../../lib/errorHandlers/index");
16
- const projects_2 = require("../../lib/projects");
16
+ const config_2 = require("../../lib/projects/config");
17
17
  const buildAndDeploy_2 = require("../../lib/projects/buildAndDeploy");
18
18
  const urls_1 = require("../../lib/projects/urls");
19
19
  const projectNamePrompt_1 = require("../../lib/prompts/projectNamePrompt");
@@ -23,21 +23,20 @@ const ui_1 = require("../../lib/ui");
23
23
  const exitCodes_1 = require("../../lib/enums/exitCodes");
24
24
  const ui_2 = require("../../lib/ui");
25
25
  const yargsUtils_1 = require("../../lib/yargsUtils");
26
- const i18nKey = 'commands.project.subcommands.deploy';
27
26
  exports.command = 'deploy';
28
- exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
27
+ exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.deploy.describe`), false);
29
28
  function validateBuildId(buildId, deployedBuildId, latestBuildId, projectName, accountId) {
30
29
  if (Number(buildId) > latestBuildId) {
31
- return (0, lang_1.i18n)(`${i18nKey}.errors.buildIdDoesNotExist`, {
30
+ return (0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.buildIdDoesNotExist`, {
32
31
  buildId: buildId,
33
32
  projectName: projectName,
34
- linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
33
+ linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
35
34
  });
36
35
  }
37
36
  if (Number(buildId) === deployedBuildId) {
38
- return (0, lang_1.i18n)(`${i18nKey}.errors.buildAlreadyDeployed`, {
37
+ return (0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.buildAlreadyDeployed`, {
39
38
  buildId: buildId,
40
- linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
39
+ linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
41
40
  });
42
41
  }
43
42
  return true;
@@ -48,7 +47,7 @@ async function handler(args) {
48
47
  const { project: projectOption, buildId: buildIdOption } = args;
49
48
  const accountType = accountConfig && accountConfig.accountType;
50
49
  (0, usageTracking_1.trackCommandUsage)('project-deploy', accountType ? { type: accountType } : undefined, derivedAccountId);
51
- const { projectConfig } = await (0, projects_2.getProjectConfig)();
50
+ const { projectConfig } = await (0, config_2.getProjectConfig)();
52
51
  let projectName = projectOption;
53
52
  if (!projectOption && projectConfig) {
54
53
  projectName = projectConfig.name;
@@ -61,7 +60,7 @@ async function handler(args) {
61
60
  try {
62
61
  const { data: { latestBuild, deployedBuildId }, } = await (0, projects_1.fetchProject)(derivedAccountId, projectName);
63
62
  if (!latestBuild || !latestBuild.buildId) {
64
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noBuilds`));
63
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.noBuilds`));
65
64
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
66
65
  }
67
66
  if (buildIdToDeploy) {
@@ -74,7 +73,7 @@ async function handler(args) {
74
73
  else {
75
74
  const deployBuildIdPromptResponse = await (0, promptUtils_1.promptUser)({
76
75
  name: 'buildId',
77
- message: (0, lang_1.i18n)(`${i18nKey}.deployBuildIdPrompt`),
76
+ message: (0, lang_1.i18n)(`commands.project.subcommands.deploy.deployBuildIdPrompt`),
78
77
  default: latestBuild.buildId === deployedBuildId
79
78
  ? undefined
80
79
  : latestBuild.buildId,
@@ -83,19 +82,19 @@ async function handler(args) {
83
82
  buildIdToDeploy = deployBuildIdPromptResponse.buildId;
84
83
  }
85
84
  if (!buildIdToDeploy) {
86
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noBuildId`));
85
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.noBuildId`));
87
86
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
88
87
  }
89
88
  const { data: deployResp } = await (0, projects_1.deployProject)(derivedAccountId, projectName, buildIdToDeploy, (0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion));
90
89
  if (!deployResp) {
91
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.deploy`));
90
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.deploy`));
92
91
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
93
92
  }
94
93
  await (0, buildAndDeploy_2.pollDeployStatus)(derivedAccountId, projectName, Number(deployResp.id), buildIdToDeploy);
95
94
  }
96
95
  catch (e) {
97
96
  if ((0, index_1.isHubSpotHttpError)(e) && e.status === 404) {
98
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.projectNotFound`, {
97
+ logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.projectNotFound`, {
99
98
  projectName: chalk_1.default.bold(projectName),
100
99
  accountIdentifier: (0, ui_2.uiAccountDescription)(derivedAccountId),
101
100
  command: (0, ui_2.uiCommandReference)('hs project upload'),
@@ -116,20 +115,23 @@ async function handler(args) {
116
115
  function projectDeployBuilder(yargs) {
117
116
  yargs.options({
118
117
  project: {
119
- describe: (0, lang_1.i18n)(`${i18nKey}.options.project.describe`),
118
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.project.describe`),
120
119
  type: 'string',
121
120
  },
122
121
  build: {
123
122
  alias: ['build-id'],
124
- describe: (0, lang_1.i18n)(`${i18nKey}.options.build.describe`),
123
+ describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.build.describe`),
125
124
  type: 'number',
126
125
  },
127
126
  });
128
127
  yargs.example([
129
- ['$0 project deploy', (0, lang_1.i18n)(`${i18nKey}.examples.default`)],
128
+ [
129
+ '$0 project deploy',
130
+ (0, lang_1.i18n)(`commands.project.subcommands.deploy.examples.default`),
131
+ ],
130
132
  [
131
133
  '$0 project deploy --project="my-project" --build=5',
132
- (0, lang_1.i18n)(`${i18nKey}.examples.withOptions`),
134
+ (0, lang_1.i18n)(`commands.project.subcommands.deploy.examples.withOptions`),
133
135
  ],
134
136
  ]);
135
137
  return yargs;
@@ -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,