@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
@@ -14,6 +14,7 @@ exports.useExistingDevTestAccount = useExistingDevTestAccount;
14
14
  exports.createNewProjectForLocalDev = createNewProjectForLocalDev;
15
15
  exports.createInitialBuildForNewProject = createInitialBuildForNewProject;
16
16
  exports.getAccountHomeUrl = getAccountHomeUrl;
17
+ exports.hasSandboxes = hasSandboxes;
17
18
  const logger_1 = require("@hubspot/local-dev-lib/logger");
18
19
  const config_1 = require("@hubspot/local-dev-lib/constants/config");
19
20
  const index_1 = require("@hubspot/local-dev-lib/errors/index");
@@ -23,70 +24,58 @@ const projects_1 = require("@hubspot/local-dev-lib/api/projects");
23
24
  const environments_1 = require("@hubspot/local-dev-lib/constants/environments");
24
25
  const auth_1 = require("@hubspot/local-dev-lib/constants/auth");
25
26
  const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccountIdentifier");
26
- const projectDevTargetAccountPrompt_1 = require("./prompts/projectDevTargetAccountPrompt");
27
- const promptUtils_1 = require("./prompts/promptUtils");
28
- const sandboxes_1 = require("./sandboxes");
29
- const sandboxSync_1 = require("./sandboxSync");
30
- const developerTestAccounts_1 = require("./developerTestAccounts");
31
- const ui_1 = require("./ui");
32
- const SpinniesManager_1 = __importDefault(require("./ui/SpinniesManager"));
33
- const lang_1 = require("./lang");
34
- const exitCodes_1 = require("./enums/exitCodes");
35
- const usageTracking_1 = require("./usageTracking");
36
- const accountTypes_1 = require("./accountTypes");
37
- const upload_1 = require("./projects/upload");
38
- const buildAndDeploy_1 = require("./projects/buildAndDeploy");
39
- const constants_1 = require("./constants");
40
- const index_2 = require("./errorHandlers/index");
41
- const buildAccount_1 = require("./buildAccount");
42
- const accountNamePrompt_1 = require("./prompts/accountNamePrompt");
43
- const i18nKey = 'lib.localDev';
27
+ const sandboxHubs_1 = require("@hubspot/local-dev-lib/api/sandboxHubs");
28
+ const projectDevTargetAccountPrompt_1 = require("../../prompts/projectDevTargetAccountPrompt");
29
+ const promptUtils_1 = require("../../prompts/promptUtils");
30
+ const sandboxes_1 = require("../../sandboxes");
31
+ const sandboxSync_1 = require("../../sandboxSync");
32
+ const developerTestAccounts_1 = require("../../developerTestAccounts");
33
+ const ui_1 = require("../../ui");
34
+ const SpinniesManager_1 = __importDefault(require("../../ui/SpinniesManager"));
35
+ const exitCodes_1 = require("../../enums/exitCodes");
36
+ const usageTracking_1 = require("../../usageTracking");
37
+ const accountTypes_1 = require("../../accountTypes");
38
+ const upload_1 = require("../../projects/upload");
39
+ const buildAndDeploy_1 = require("../../projects/buildAndDeploy");
40
+ const constants_1 = require("../../constants");
41
+ const index_2 = require("../../errorHandlers/index");
42
+ const buildAccount_1 = require("../../buildAccount");
43
+ const accountNamePrompt_1 = require("../../prompts/accountNamePrompt");
44
+ const en_1 = require("../../../lang/en");
44
45
  // If the user passed in the --account flag, confirm they want to use that account as
45
46
  // their target account, otherwise exit
46
47
  async function confirmDefaultAccountIsTarget(accountConfig) {
47
48
  if (!accountConfig.name || !accountConfig.accountType) {
48
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.confirmDefaultAccountIsTarget.configError`, {
49
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
50
- }));
49
+ logger_1.logger.error(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget.configError);
51
50
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
52
51
  }
53
52
  logger_1.logger.log();
54
53
  const useDefaultAccount = await (0, projectDevTargetAccountPrompt_1.confirmDefaultAccountPrompt)(accountConfig.name, config_1.HUBSPOT_ACCOUNT_TYPE_STRINGS[accountConfig.accountType]);
55
54
  if (!useDefaultAccount) {
56
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.confirmDefaultAccountIsTarget.declineDefaultAccountExplanation`, {
57
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
58
- devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
59
- }));
55
+ logger_1.logger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
56
+ .declineDefaultAccountExplanation);
60
57
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
61
58
  }
62
59
  }
63
60
  // Confirm the default account is supported for the type of apps being developed
64
- function checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps) {
61
+ async function checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps) {
62
+ const defaultAccountIsUnified = await (0, accountTypes_1.isUnifiedAccount)(accountConfig);
65
63
  if (hasPublicApps &&
66
64
  !((0, accountTypes_1.isAppDeveloperAccount)(accountConfig) ||
67
- (0, accountTypes_1.isDeveloperTestAccount)(accountConfig))) {
68
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.checkIfDefaultAccountIsSupported.publicApp`, {
69
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
70
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
71
- }));
65
+ (0, accountTypes_1.isDeveloperTestAccount)(accountConfig) ||
66
+ defaultAccountIsUnified)) {
67
+ logger_1.logger.error(en_1.lib.localDevHelpers.checkIfDefaultAccountIsSupported.publicApp);
72
68
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
73
69
  }
74
70
  else if (!hasPublicApps && (0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
75
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.checkIfDefaultAccountIsSupported.privateApp`, {
76
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
77
- authCommand: (0, ui_1.uiCommandReference)('hs auth'),
78
- }));
71
+ logger_1.logger.error(en_1.lib.localDevHelpers.checkIfDefaultAccountIsSupported.privateApp);
79
72
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
80
73
  }
81
74
  }
82
75
  function checkIfParentAccountIsAuthed(accountConfig) {
83
76
  if (!accountConfig.parentAccountId ||
84
77
  !(0, config_2.getAccountConfig)(accountConfig.parentAccountId)) {
85
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.checkIfParentAccountIsAuthed.notAuthedError`, {
86
- accountId: accountConfig.parentAccountId || '',
87
- accountIdentifier: (0, ui_1.uiAccountDescription)((0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig)),
88
- authCommand: (0, ui_1.uiCommandReference)(`hs auth --account=${accountConfig.parentAccountId}`),
89
- }));
78
+ logger_1.logger.error(en_1.lib.localDevHelpers.checkIfParentAccountIsAuthed.notAuthedError(accountConfig.parentAccountId || '', (0, ui_1.uiAccountDescription)((0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig))));
90
79
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
91
80
  }
92
81
  }
@@ -94,18 +83,13 @@ function checkIfParentAccountIsAuthed(accountConfig) {
94
83
  function checkIfAccountFlagIsSupported(accountConfig, hasPublicApps) {
95
84
  if (hasPublicApps) {
96
85
  if (!(0, accountTypes_1.isDeveloperTestAccount)(accountConfig)) {
97
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.validateAccountOption.invalidPublicAppAccount`, {
98
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
99
- devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
100
- }));
86
+ logger_1.logger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPublicAppAccount);
101
87
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
102
88
  }
103
89
  checkIfParentAccountIsAuthed(accountConfig);
104
90
  }
105
91
  else if ((0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
106
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.validateAccountOption.invalidPrivateAppAccount`, {
107
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
108
- }));
92
+ logger_1.logger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPrivateAppAccount);
109
93
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
110
94
  }
111
95
  }
@@ -114,14 +98,15 @@ async function suggestRecommendedNestedAccount(accounts, accountConfig, hasPubli
114
98
  logger_1.logger.log();
115
99
  (0, ui_1.uiLine)();
116
100
  if (hasPublicApps) {
117
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.validateAccountOption.publicAppNonDeveloperTestAccountWarning`));
101
+ logger_1.logger.log(en_1.lib.localDevHelpers.validateAccountOption
102
+ .publicAppNonDeveloperTestAccountWarning);
118
103
  }
119
104
  else {
120
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.validateAccountOption.nonSandboxWarning`));
105
+ logger_1.logger.log(en_1.lib.localDevHelpers.validateAccountOption.nonSandboxWarning);
121
106
  }
122
107
  (0, ui_1.uiLine)();
123
108
  logger_1.logger.log();
124
- const targetAccountPrompt = (0, accountTypes_1.isAppDeveloperAccount)(accountConfig)
109
+ const targetAccountPrompt = hasPublicApps
125
110
  ? projectDevTargetAccountPrompt_1.selectDeveloperTestTargetAccountPrompt
126
111
  : projectDevTargetAccountPrompt_1.selectSandboxTargetAccountPrompt;
127
112
  return targetAccountPrompt(accounts, accountConfig);
@@ -133,15 +118,10 @@ async function createSandboxForLocalDev(accountId, accountConfig, env) {
133
118
  }
134
119
  catch (err) {
135
120
  if ((0, index_1.isMissingScopeError)(err)) {
136
- logger_1.logger.error((0, lang_1.i18n)('lib.sandbox.create.failure.scopes.message', {
137
- accountName: accountConfig.name || accountId,
138
- }));
121
+ logger_1.logger.error(en_1.lib.sandbox.create.developer.failure.scopes.message);
139
122
  const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
140
123
  const url = `${websiteOrigin}/personal-access-key/${accountId}`;
141
- logger_1.logger.info((0, lang_1.i18n)('lib.sandbox.create.failure.scopes.instructions', {
142
- accountName: accountConfig.name || accountId,
143
- url,
144
- }));
124
+ logger_1.logger.info(en_1.lib.sandbox.create.developer.failure.scopes.instructions(accountConfig.name || accountId, url));
145
125
  }
146
126
  else {
147
127
  (0, index_2.logError)(err);
@@ -157,7 +137,7 @@ async function createSandboxForLocalDev(accountId, accountConfig, env) {
157
137
  const targetAccountId = result.sandbox.sandboxHubId;
158
138
  const sandboxAccountConfig = (0, config_2.getAccountConfig)(result.sandbox.sandboxHubId);
159
139
  if (!sandboxAccountConfig) {
160
- logger_1.logger.error((0, lang_1.i18n)('lib.sandbox.create.failure.generic'));
140
+ logger_1.logger.error(en_1.lib.sandbox.create.developer.failure.generic);
161
141
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
162
142
  }
163
143
  const syncTasks = await (0, sandboxes_1.getAvailableSyncTypes)(accountConfig, sandboxAccountConfig);
@@ -185,15 +165,10 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
185
165
  }
186
166
  catch (err) {
187
167
  if ((0, index_1.isMissingScopeError)(err)) {
188
- logger_1.logger.error((0, lang_1.i18n)('lib.developerTestAccount.create.failure.scopes.message', {
189
- accountName: accountConfig.name || accountId,
190
- }));
168
+ logger_1.logger.error(en_1.lib.developerTestAccount.create.failure.scopes.message);
191
169
  const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
192
170
  const url = `${websiteOrigin}/personal-access-key/${accountId}`;
193
- logger_1.logger.info((0, lang_1.i18n)('lib.developerTestAccount.create.failure.scopes.instructions', {
194
- accountName: accountConfig.name || accountId,
195
- url,
196
- }));
171
+ logger_1.logger.info(en_1.lib.developerTestAccount.create.failure.scopes.instructions(accountConfig.name || accountId, url));
197
172
  }
198
173
  else {
199
174
  (0, index_2.logError)(err);
@@ -207,7 +182,7 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
207
182
  });
208
183
  (0, usageTracking_1.trackCommandMetadataUsage)('developer-test-account-create', { step: 'project-dev' }, accountId);
209
184
  const result = await (0, buildAccount_1.buildDeveloperTestAccount)(name, accountConfig, env, maxTestPortals);
210
- return result.id;
185
+ return result;
211
186
  }
212
187
  catch (err) {
213
188
  (0, index_2.logError)(err);
@@ -219,75 +194,59 @@ async function useExistingDevTestAccount(env, account) {
219
194
  const useExistingDevTestAcct = await (0, projectDevTargetAccountPrompt_1.confirmUseExistingDeveloperTestAccountPrompt)(account);
220
195
  if (!useExistingDevTestAcct) {
221
196
  logger_1.logger.log('');
222
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.confirmDefaultAccountIsTarget.declineDefaultAccountExplanation`, {
223
- useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
224
- devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
225
- }));
197
+ logger_1.logger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
198
+ .declineDefaultAccountExplanation);
226
199
  logger_1.logger.log('');
227
200
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
228
201
  }
229
202
  const devTestAcctConfigName = await (0, buildAccount_1.saveAccountToConfig)(account.id, account.accountName, env);
230
- logger_1.logger.success((0, lang_1.i18n)(`lib.developerTestAccount.create.success.configFileUpdated`, {
231
- accountName: devTestAcctConfigName,
232
- authType: auth_1.PERSONAL_ACCESS_KEY_AUTH_METHOD.name,
233
- }));
203
+ logger_1.logger.success(en_1.lib.developerTestAccount.create.success.configFileUpdated(devTestAcctConfigName, auth_1.PERSONAL_ACCESS_KEY_AUTH_METHOD.name));
234
204
  }
235
205
  // Prompt the user to create a new project if one doesn't exist on their target account
236
206
  async function createNewProjectForLocalDev(projectConfig, targetAccountId, shouldCreateWithoutConfirmation, hasPublicApps) {
237
207
  // Create the project without prompting if this is a newly created sandbox
238
208
  let shouldCreateProject = shouldCreateWithoutConfirmation;
239
209
  if (!shouldCreateProject) {
240
- const explanationString = (0, lang_1.i18n)(hasPublicApps
241
- ? `${i18nKey}.createNewProjectForLocalDev.publicAppProjectMustExistExplanation`
242
- : `${i18nKey}.createNewProjectForLocalDev.projectMustExistExplanation`, {
243
- accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
244
- projectName: projectConfig.name,
245
- });
210
+ const explanationLangFunction = hasPublicApps
211
+ ? en_1.lib.localDevHelpers.createNewProjectForLocalDev
212
+ .publicAppProjectMustExistExplanation
213
+ : en_1.lib.localDevHelpers.createNewProjectForLocalDev
214
+ .projectMustExistExplanation;
215
+ const explanationString = explanationLangFunction((0, ui_1.uiAccountDescription)(targetAccountId), projectConfig.name);
246
216
  logger_1.logger.log();
247
217
  (0, ui_1.uiLine)();
248
218
  logger_1.logger.log(explanationString);
249
219
  (0, ui_1.uiLine)();
250
- shouldCreateProject = await (0, promptUtils_1.confirmPrompt)((0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.createProject`, {
251
- accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
252
- projectName: projectConfig.name,
253
- }));
220
+ shouldCreateProject = await (0, promptUtils_1.confirmPrompt)(en_1.lib.localDevHelpers.createNewProjectForLocalDev.createProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)));
254
221
  }
255
222
  if (shouldCreateProject) {
256
223
  SpinniesManager_1.default.add('createProject', {
257
- text: (0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.creatingProject`, {
258
- accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
259
- projectName: projectConfig.name,
260
- }),
224
+ text: en_1.lib.localDevHelpers.createNewProjectForLocalDev.creatingProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)),
261
225
  });
262
226
  try {
263
227
  const { data: project } = await (0, projects_1.createProject)(targetAccountId, projectConfig.name);
264
228
  SpinniesManager_1.default.succeed('createProject', {
265
- text: (0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.createdProject`, {
266
- accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
267
- projectName: projectConfig.name,
268
- }),
229
+ text: en_1.lib.localDevHelpers.createNewProjectForLocalDev.createdProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)),
269
230
  succeedColor: 'white',
270
231
  });
271
232
  return project;
272
233
  }
273
234
  catch (err) {
274
235
  SpinniesManager_1.default.fail('createProject');
275
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.failedToCreateProject`));
236
+ logger_1.logger.log(en_1.lib.localDevHelpers.createNewProjectForLocalDev.failedToCreateProject);
276
237
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
277
238
  }
278
239
  }
279
240
  else {
280
241
  // We cannot continue if the project does not exist in the target account
281
242
  logger_1.logger.log();
282
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.choseNotToCreateProject`));
243
+ logger_1.logger.log(en_1.lib.localDevHelpers.createNewProjectForLocalDev.choseNotToCreateProject);
283
244
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
284
245
  }
285
246
  }
286
247
  function projectUploadCallback(accountId, projectConfig, tempFile, buildId) {
287
248
  if (!buildId) {
288
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.createInitialBuildForNewProject.initialUploadMessage`, {
289
- uploadCommand: (0, ui_1.uiCommandReference)('hs project upload'),
290
- }));
249
+ logger_1.logger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.genericError);
291
250
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
292
251
  }
293
252
  return (0, buildAndDeploy_1.pollProjectBuildAndDeploy)(accountId, projectConfig, tempFile, buildId, true);
@@ -295,13 +254,13 @@ function projectUploadCallback(accountId, projectConfig, tempFile, buildId) {
295
254
  // Create an initial build if the project was newly created in the account
296
255
  // Return the newly deployed build
297
256
  async function createInitialBuildForNewProject(projectConfig, projectDir, targetAccountId, sendIr) {
298
- const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)(targetAccountId, projectConfig, projectDir, projectUploadCallback, (0, lang_1.i18n)(`${i18nKey}.createInitialBuildForNewProject.initialUploadMessage`), sendIr);
257
+ const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)(targetAccountId, projectConfig, projectDir, projectUploadCallback, en_1.lib.localDevHelpers.createInitialBuildForNewProject.initialUploadMessage, sendIr);
299
258
  if (uploadError) {
300
259
  if ((0, index_1.isSpecifiedError)(uploadError, {
301
260
  subCategory: constants_1.PROJECT_ERROR_TYPES.PROJECT_LOCKED,
302
261
  })) {
303
262
  logger_1.logger.log();
304
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.createInitialBuildForNewProject.projectLockedError`));
263
+ logger_1.logger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.projectLockedError);
305
264
  logger_1.logger.log();
306
265
  }
307
266
  else {
@@ -336,3 +295,17 @@ function getAccountHomeUrl(accountId) {
336
295
  const baseUrl = (0, urls_1.getHubSpotWebsiteOrigin)((0, config_2.getEnv)(accountId) === 'qa' ? environments_1.ENVIRONMENTS.QA : environments_1.ENVIRONMENTS.PROD);
337
296
  return `${baseUrl}/home?portalId=${accountId}`;
338
297
  }
298
+ async function hasSandboxes(account) {
299
+ const accountId = (0, getAccountIdentifier_1.getAccountIdentifier)(account);
300
+ if (!accountId) {
301
+ return false;
302
+ }
303
+ try {
304
+ const { data: { usage }, } = await (0, sandboxHubs_1.getSandboxUsageLimits)(accountId);
305
+ return usage.STANDARD.limit > 0 || usage.DEVELOPER.limit > 0;
306
+ }
307
+ catch (e) {
308
+ (0, index_2.debugError)(e);
309
+ return false;
310
+ }
311
+ }
@@ -0,0 +1 @@
1
+ export declare function logFeedbackMessage(buildId: number): void;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logFeedbackMessage = logFeedbackMessage;
4
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
5
+ const constants_1 = require("../constants");
6
+ const ui_1 = require("../ui");
7
+ const en_1 = require("../../lang/en");
8
+ function logFeedbackMessage(buildId) {
9
+ if (buildId > 0 && buildId % constants_1.FEEDBACK_INTERVAL === 0) {
10
+ (0, ui_1.uiLine)();
11
+ logger_1.logger.log(en_1.lib.projects.logFeedbackMessage.feedbackHeader);
12
+ (0, ui_1.uiLine)();
13
+ logger_1.logger.log(en_1.lib.projects.logFeedbackMessage.feedbackMessage);
14
+ }
15
+ }
@@ -1,6 +1,6 @@
1
1
  import { FileResult } from 'tmp';
2
2
  import { ProjectConfig } from '../../types/Projects';
3
- type ProjectUploadCallbackFunction<T> = (accountId: number, projectConfig: ProjectConfig, tempFile: FileResult, buildId?: number) => Promise<T>;
3
+ type ProjectUploadCallbackFunction<T> = (accountId: number, projectConfig: ProjectConfig, tempFile: FileResult, buildId: number) => Promise<T>;
4
4
  type ProjectUploadResult<T> = {
5
5
  result?: T;
6
6
  uploadError?: unknown;
@@ -13,20 +13,16 @@ const ignoreRules_1 = require("@hubspot/local-dev-lib/ignoreRules");
13
13
  const logger_1 = require("@hubspot/local-dev-lib/logger");
14
14
  const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
15
15
  const ui_1 = require("../ui");
16
- const lang_1 = require("../lang");
17
16
  const exitCodes_1 = require("../enums/exitCodes");
18
17
  const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
19
18
  const errorHandlers_1 = require("../errorHandlers");
20
19
  const node_util_1 = __importDefault(require("node:util"));
21
- const i18nKey = 'lib.projectUpload';
20
+ const en_1 = require("../../lang/en");
22
21
  async function uploadProjectFiles(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation) {
23
22
  SpinniesManager_1.default.init({});
24
23
  const accountIdentifier = (0, ui_1.uiAccountDescription)(accountId);
25
24
  SpinniesManager_1.default.add('upload', {
26
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.add`, {
27
- accountIdentifier,
28
- projectName,
29
- }),
25
+ text: en_1.lib.projectUpload.uploadProjectFiles.add(projectName, accountIdentifier),
30
26
  succeedColor: 'white',
31
27
  });
32
28
  let buildId;
@@ -35,24 +31,15 @@ async function uploadProjectFiles(accountId, projectName, filePath, uploadMessag
35
31
  const { data: upload } = await (0, projects_1.uploadProject)(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation);
36
32
  buildId = upload.buildId;
37
33
  SpinniesManager_1.default.succeed('upload', {
38
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.succeed`, {
39
- accountIdentifier,
40
- projectName,
41
- }),
34
+ text: en_1.lib.projectUpload.uploadProjectFiles.succeed(projectName, accountIdentifier),
42
35
  });
43
36
  if (buildId) {
44
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.buildCreated`, {
45
- buildId,
46
- projectName,
47
- }));
37
+ logger_1.logger.debug(en_1.lib.projectUpload.uploadProjectFiles.buildCreated(projectName, buildId));
48
38
  }
49
39
  }
50
40
  catch (err) {
51
41
  SpinniesManager_1.default.fail('upload', {
52
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.fail`, {
53
- accountIdentifier,
54
- projectName,
55
- }),
42
+ text: en_1.lib.projectUpload.uploadProjectFiles.fail(projectName, accountIdentifier),
56
43
  });
57
44
  error = err;
58
45
  }
@@ -62,21 +49,15 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
62
49
  const srcDir = path_1.default.resolve(projectDir, projectConfig.srcDir);
63
50
  const filenames = fs_extra_1.default.readdirSync(srcDir);
64
51
  if (!filenames || filenames.length === 0) {
65
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.emptySource`, {
66
- srcDir: projectConfig.srcDir,
67
- }));
52
+ logger_1.logger.log(en_1.lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir));
68
53
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
69
54
  }
70
55
  const tempFile = tmp_1.default.fileSync({ postfix: '.zip' });
71
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.compressing`, {
72
- path: tempFile.name,
73
- }));
56
+ logger_1.logger.debug(en_1.lib.projectUpload.handleProjectUpload.compressing(tempFile.name));
74
57
  const output = fs_extra_1.default.createWriteStream(tempFile.name);
75
58
  const archive = (0, archiver_1.default)('zip');
76
59
  const result = new Promise(resolve => output.on('close', async function () {
77
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.compressed`, {
78
- byteCount: archive.pointer(),
79
- }));
60
+ logger_1.logger.debug(en_1.lib.projectUpload.handleProjectUpload.compressed(archive.pointer()));
80
61
  let intermediateRepresentation;
81
62
  if (sendIR) {
82
63
  try {
@@ -113,9 +94,7 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
113
94
  if (ignored) {
114
95
  const isNodeModule = file.name.includes('node_modules');
115
96
  if (!isNodeModule || !loggedIgnoredNodeModule) {
116
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.fileFiltered`, {
117
- filename: file.name,
118
- }));
97
+ logger_1.logger.debug(en_1.lib.projectUpload.handleProjectUpload.fileFiltered(file.name));
119
98
  }
120
99
  if (isNodeModule && !loggedIgnoredNodeModule) {
121
100
  loggedIgnoredNodeModule = true;
@@ -1,4 +1,5 @@
1
1
  export declare function getProjectDetailUrl(projectName: string, accountId: number): string | undefined;
2
+ export declare function getProjectSettingsUrl(projectName: string, accountId: number): string | undefined;
2
3
  export declare function getProjectActivityUrl(projectName: string, accountId: number): string;
3
4
  export declare function getProjectBuildDetailUrl(projectName: string, buildId: number, accountId: number): string;
4
5
  export declare function getProjectDeployDetailUrl(projectName: string, deployId: number, accountId: number): string;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getProjectDetailUrl = getProjectDetailUrl;
4
+ exports.getProjectSettingsUrl = getProjectSettingsUrl;
4
5
  exports.getProjectActivityUrl = getProjectActivityUrl;
5
6
  exports.getProjectBuildDetailUrl = getProjectBuildDetailUrl;
6
7
  exports.getProjectDeployDetailUrl = getProjectDeployDetailUrl;
@@ -16,6 +17,11 @@ function getProjectDetailUrl(projectName, accountId) {
16
17
  return;
17
18
  return `${getProjectHomeUrl(accountId)}/project/${projectName}`;
18
19
  }
20
+ function getProjectSettingsUrl(projectName, accountId) {
21
+ if (!projectName)
22
+ return;
23
+ return `${getProjectDetailUrl(projectName, accountId)}/settings`;
24
+ }
19
25
  function getProjectActivityUrl(projectName, accountId) {
20
26
  return `${getProjectDetailUrl(projectName, accountId)}/activity`;
21
27
  }
@@ -15,9 +15,8 @@ const ignoreRules_1 = require("@hubspot/local-dev-lib/ignoreRules");
15
15
  const projects_1 = require("@hubspot/local-dev-lib/api/projects");
16
16
  const index_1 = require("@hubspot/local-dev-lib/errors/index");
17
17
  const errorHandlers_1 = require("../errorHandlers");
18
- const lang_1 = require("../lang");
19
18
  const constants_1 = require("../constants");
20
- const i18nKey = 'commands.project.subcommands.watch';
19
+ const en_1 = require("../../lang/en");
21
20
  const queue = new p_queue_1.default({
22
21
  concurrency: 10,
23
22
  });
@@ -44,18 +43,18 @@ function debounceQueueBuild(accountId, projectName, platformVersion) {
44
43
  clearTimeout(timer);
45
44
  }
46
45
  timer = setTimeout(async () => {
47
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.debug.pause`, { projectName }));
46
+ logger_1.logger.debug(en_1.commands.project.watch.debug.pause);
48
47
  queue.pause();
49
48
  await queue.onIdle();
50
49
  try {
51
50
  await (0, projects_1.queueBuild)(accountId, projectName, platformVersion);
52
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.debug.buildStarted`, { projectName }));
51
+ logger_1.logger.debug(en_1.commands.project.watch.debug.buildStarted);
53
52
  }
54
53
  catch (err) {
55
54
  if ((0, index_1.isSpecifiedError)(err, {
56
55
  subCategory: constants_1.PROJECT_ERROR_TYPES.MISSING_PROJECT_PROVISION,
57
56
  })) {
58
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logs.watchCancelledFromUi`));
57
+ logger_1.logger.log(en_1.commands.project.watch.logs.watchCancelledFromUi);
59
58
  process.exit(0);
60
59
  }
61
60
  else {
@@ -69,24 +68,24 @@ function debounceQueueBuild(accountId, projectName, platformVersion) {
69
68
  await processStandByQueue(accountId, projectName, platformVersion);
70
69
  }
71
70
  queue.start();
72
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logs.resuming`));
71
+ logger_1.logger.log(en_1.commands.project.watch.logs.resuming);
73
72
  logger_1.logger.log(`\n> Press ${chalk_1.default.bold('q')} to quit watching\n`);
74
73
  }, 2000);
75
74
  }
76
75
  async function queueFileOrFolder(accountId, projectName, platformVersion, filePath, remotePath, action) {
77
76
  if (action === 'upload' &&
78
77
  !(0, path_2.isAllowedExtension)(filePath, Array.from(extensions_1.JSR_ALLOWED_EXTENSIONS))) {
79
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.debug.extensionNotAllowed`, { filePath }));
78
+ logger_1.logger.debug(en_1.commands.project.watch.debug.extensionNotAllowed(filePath));
80
79
  return;
81
80
  }
82
81
  if ((0, ignoreRules_1.shouldIgnoreFile)(filePath, true)) {
83
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.debug.ignored`, { filePath }));
82
+ logger_1.logger.debug(en_1.commands.project.watch.debug.ignored(filePath));
84
83
  return;
85
84
  }
86
85
  if (!queue.isPaused) {
87
86
  debounceQueueBuild(accountId, projectName, platformVersion);
88
87
  }
89
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.debug.uploading`, { filePath, remotePath }));
88
+ logger_1.logger.debug(en_1.commands.project.watch.debug.uploading(filePath, remotePath));
90
89
  return queue.add(async () => {
91
90
  try {
92
91
  if (action === 'upload') {
@@ -95,16 +94,20 @@ async function queueFileOrFolder(accountId, projectName, platformVersion, filePa
95
94
  else if (action === 'deleteFile' || action === 'deleteFolder') {
96
95
  await (0, projects_1.deleteFileFromBuild)(accountId, projectName, remotePath);
97
96
  }
98
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logs.${action}Succeeded`, { filePath, remotePath }));
97
+ logger_1.logger.log(
98
+ // @ts-expect-error
99
+ en_1.commands.project.watch.logs[`${action}Succeeded`](remotePath, filePath));
99
100
  }
100
101
  catch (err) {
101
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.errors.${action}Failed`, { filePath, remotePath }));
102
+ logger_1.logger.debug(
103
+ // @ts-expect-error
104
+ en_1.commands.project.watch.errors[`${action}Failed`](remotePath, filePath));
102
105
  }
103
106
  });
104
107
  }
105
108
  async function createNewBuild(accountId, projectName, platformVersion) {
106
109
  try {
107
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.debug.attemptNewBuild`));
110
+ logger_1.logger.debug(en_1.commands.project.watch.debug.attemptNewBuild);
108
111
  const { data: { buildId }, } = await (0, projects_1.provisionBuild)(accountId, projectName, platformVersion);
109
112
  return buildId;
110
113
  }
@@ -112,7 +115,7 @@ async function createNewBuild(accountId, projectName, platformVersion) {
112
115
  (0, errorHandlers_1.logError)(err, new errorHandlers_1.ApiErrorContext({ accountId }));
113
116
  if ((0, index_1.isSpecifiedError)(err, { subCategory: constants_1.PROJECT_ERROR_TYPES.PROJECT_LOCKED })) {
114
117
  await (0, projects_1.cancelStagedBuild)(accountId, projectName);
115
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logs.previousStagingBuildCancelled`));
118
+ logger_1.logger.log(en_1.commands.project.watch.logs.previousStagingBuildCancelled);
116
119
  }
117
120
  process.exit(1);
118
121
  }
@@ -121,7 +124,7 @@ async function handleWatchEvent(accountId, projectName, platformVersion, project
121
124
  const remotePath = path_1.default.relative(projectSourceDir, filePath);
122
125
  if (queue.isPaused) {
123
126
  if (standbyQueue.find(file => file.filePath === filePath)) {
124
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.debug.fileAlreadyQueued`, { filePath }));
127
+ logger_1.logger.debug(en_1.commands.project.watch.debug.fileAlreadyQueued(filePath));
125
128
  }
126
129
  else {
127
130
  standbyQueue.push({
@@ -145,7 +148,7 @@ async function createWatcher(accountId, projectConfig, projectDir, handleBuildSt
145
148
  ignored: file => (0, ignoreRules_1.shouldIgnoreFile)(file),
146
149
  });
147
150
  watcher.on('ready', async () => {
148
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logs.watching`, { projectDir }));
151
+ logger_1.logger.log(en_1.commands.project.watch.logs.watching(projectDir));
149
152
  logger_1.logger.log(`\n> Press ${chalk_1.default.bold('q')} to quit watching\n`);
150
153
  });
151
154
  watcher.on('add', async (path) => {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectNamePrompt = projectNamePrompt;
4
4
  const promptUtils_1 = require("./promptUtils");
5
5
  const lang_1 = require("../lang");
6
- const projects_1 = require("../projects");
6
+ const ensureProjectExists_1 = require("../projects/ensureProjectExists");
7
7
  const ui_1 = require("../ui");
8
8
  const i18nKey = 'lib.prompts.projectNamePrompt';
9
9
  async function projectNamePrompt(accountId, options = {}) {
@@ -15,7 +15,7 @@ async function projectNamePrompt(accountId, options = {}) {
15
15
  if (typeof val !== 'string' || !val) {
16
16
  return (0, lang_1.i18n)(`${i18nKey}.errors.invalidName`);
17
17
  }
18
- const { projectExists } = await (0, projects_1.ensureProjectExists)(accountId, val, {
18
+ const { projectExists } = await (0, ensureProjectExists_1.ensureProjectExists)(accountId, val, {
19
19
  allowCreate: false,
20
20
  noLogs: true,
21
21
  });
@@ -10,6 +10,6 @@ export declare function listPrompt<T = string>(message: string, { choices, when,
10
10
  }): Promise<T>;
11
11
  export declare function inputPrompt(message: string, { when, validate, defaultAnswer, }?: {
12
12
  when?: boolean | (() => boolean);
13
- validate?: (input: string) => boolean | string;
13
+ validate?: (input: string) => (boolean | string) | Promise<boolean | string>;
14
14
  defaultAnswer?: string;
15
15
  }): Promise<string>;
@@ -22,7 +22,7 @@ declare class SpinniesManager {
22
22
  succeed(name: string, options?: Partial<SpinnerState>): SpinnerState;
23
23
  fail(name: string, options?: Partial<SpinnerState>): SpinnerState;
24
24
  remove(name: string): SpinnerState;
25
- stopAll(newStatus?: typeof VALID_STATUSES[number]): {
25
+ stopAll(newStatus?: (typeof VALID_STATUSES)[number]): {
26
26
  [key: string]: SpinnerState;
27
27
  };
28
28
  private hasAnySpinners;
package/lib/ui/index.d.ts CHANGED
@@ -15,3 +15,4 @@ export declare function uiDeprecatedTag(message: string, log?: boolean): string
15
15
  export declare function uiCommandDisabledBanner(command: string, url?: string, message?: string): void;
16
16
  export declare function uiDeprecatedDescription(message: string, command: string, url?: string): string | undefined;
17
17
  export declare function uiDeprecatedMessage(command: string, url?: string, message?: string): void;
18
+ export declare function indent(level: number): string;