@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
@@ -14,7 +14,7 @@ exports.useExistingDevTestAccount = useExistingDevTestAccount;
14
14
  exports.createNewProjectForLocalDev = createNewProjectForLocalDev;
15
15
  exports.createInitialBuildForNewProject = createInitialBuildForNewProject;
16
16
  exports.getAccountHomeUrl = getAccountHomeUrl;
17
- const logger_1 = require("@hubspot/local-dev-lib/logger");
17
+ exports.hasSandboxes = hasSandboxes;
18
18
  const config_1 = require("@hubspot/local-dev-lib/constants/config");
19
19
  const index_1 = require("@hubspot/local-dev-lib/errors/index");
20
20
  const urls_1 = require("@hubspot/local-dev-lib/urls");
@@ -23,70 +23,59 @@ const projects_1 = require("@hubspot/local-dev-lib/api/projects");
23
23
  const environments_1 = require("@hubspot/local-dev-lib/constants/environments");
24
24
  const auth_1 = require("@hubspot/local-dev-lib/constants/auth");
25
25
  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';
26
+ const sandboxHubs_1 = require("@hubspot/local-dev-lib/api/sandboxHubs");
27
+ const projectDevTargetAccountPrompt_1 = require("../../prompts/projectDevTargetAccountPrompt");
28
+ const promptUtils_1 = require("../../prompts/promptUtils");
29
+ const sandboxes_1 = require("../../sandboxes");
30
+ const sandboxSync_1 = require("../../sandboxSync");
31
+ const developerTestAccounts_1 = require("../../developerTestAccounts");
32
+ const ui_1 = require("../../ui");
33
+ const SpinniesManager_1 = __importDefault(require("../../ui/SpinniesManager"));
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 en_1 = require("../../../lang/en");
44
+ const logger_1 = require("../../ui/logger");
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.uiLogger.error(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget.configError);
51
50
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
52
51
  }
53
- logger_1.logger.log();
52
+ logger_1.uiLogger.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.uiLogger.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.uiLogger.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.uiLogger.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.uiLogger.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,34 +83,30 @@ 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.uiLogger.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.uiLogger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPrivateAppAccount);
109
93
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
110
94
  }
111
95
  }
112
96
  // If the user isn't using the recommended account type, prompt them to use or create one
113
97
  async function suggestRecommendedNestedAccount(accounts, accountConfig, hasPublicApps) {
114
- logger_1.logger.log();
98
+ logger_1.uiLogger.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.uiLogger.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.uiLogger.log(en_1.lib.localDevHelpers.validateAccountOption.nonSandboxWarning);
121
106
  }
122
107
  (0, ui_1.uiLine)();
123
- logger_1.logger.log();
124
- const targetAccountPrompt = (0, accountTypes_1.isAppDeveloperAccount)(accountConfig)
108
+ logger_1.uiLogger.log('');
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.uiLogger.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.uiLogger.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.uiLogger.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.uiLogger.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.uiLogger.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);
@@ -218,91 +193,85 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
218
193
  async function useExistingDevTestAccount(env, account) {
219
194
  const useExistingDevTestAcct = await (0, projectDevTargetAccountPrompt_1.confirmUseExistingDeveloperTestAccountPrompt)(account);
220
195
  if (!useExistingDevTestAcct) {
221
- 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
- }));
226
- logger_1.logger.log('');
196
+ logger_1.uiLogger.log('');
197
+ logger_1.uiLogger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
198
+ .declineDefaultAccountExplanation);
199
+ logger_1.uiLogger.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.uiLogger.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
- });
246
- logger_1.logger.log();
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);
216
+ logger_1.uiLogger.log('');
247
217
  (0, ui_1.uiLine)();
248
- logger_1.logger.log(explanationString);
218
+ logger_1.uiLogger.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.uiLogger.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
- logger_1.logger.log();
282
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.createNewProjectForLocalDev.choseNotToCreateProject`));
242
+ logger_1.uiLogger.log('');
243
+ logger_1.uiLogger.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.uiLogger.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);
294
253
  }
295
254
  // Create an initial build if the project was newly created in the account
296
255
  // Return the newly deployed build
297
- 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);
256
+ async function createInitialBuildForNewProject(projectConfig, projectDir, targetAccountId, sendIR) {
257
+ const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)({
258
+ accountId: targetAccountId,
259
+ projectConfig,
260
+ projectDir,
261
+ callbackFunc: projectUploadCallback,
262
+ uploadMessage: en_1.lib.localDevHelpers.createInitialBuildForNewProject
263
+ .initialUploadMessage,
264
+ forceCreate: true,
265
+ skipValidation: true,
266
+ sendIR,
267
+ });
299
268
  if (uploadError) {
300
269
  if ((0, index_1.isSpecifiedError)(uploadError, {
301
270
  subCategory: constants_1.PROJECT_ERROR_TYPES.PROJECT_LOCKED,
302
271
  })) {
303
- logger_1.logger.log();
304
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.createInitialBuildForNewProject.projectLockedError`));
305
- logger_1.logger.log();
272
+ logger_1.uiLogger.log('');
273
+ logger_1.uiLogger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.projectLockedError);
274
+ logger_1.uiLogger.log('');
306
275
  }
307
276
  else {
308
277
  (0, index_2.logError)(uploadError, new index_2.ApiErrorContext({
@@ -323,11 +292,11 @@ async function createInitialBuildForNewProject(projectConfig, projectDir, target
323
292
  initialUploadResult.deployResult[constants_1.PROJECT_DEPLOY_TEXT.SUBTASK_KEY];
324
293
  }
325
294
  const failedSubTasks = subTasks.filter(task => task.status === 'FAILURE');
326
- logger_1.logger.log();
295
+ logger_1.uiLogger.log('');
327
296
  failedSubTasks.forEach(failedSubTask => {
328
- logger_1.logger.error(failedSubTask.errorMessage);
297
+ logger_1.uiLogger.error(failedSubTask.errorMessage);
329
298
  });
330
- logger_1.logger.log();
299
+ logger_1.uiLogger.log('');
331
300
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
332
301
  }
333
302
  return initialUploadResult.buildResult;
@@ -336,3 +305,17 @@ function getAccountHomeUrl(accountId) {
336
305
  const baseUrl = (0, urls_1.getHubSpotWebsiteOrigin)((0, config_2.getEnv)(accountId) === 'qa' ? environments_1.ENVIRONMENTS.QA : environments_1.ENVIRONMENTS.PROD);
337
306
  return `${baseUrl}/home?portalId=${accountId}`;
338
307
  }
308
+ async function hasSandboxes(account) {
309
+ const accountId = (0, getAccountIdentifier_1.getAccountIdentifier)(account);
310
+ if (!accountId) {
311
+ return false;
312
+ }
313
+ try {
314
+ const { data: { usage }, } = await (0, sandboxHubs_1.getSandboxUsageLimits)(accountId);
315
+ return usage.STANDARD.limit > 0 || usage.DEVELOPER.limit > 0;
316
+ }
317
+ catch (e) {
318
+ (0, index_2.debugError)(e);
319
+ return false;
320
+ }
321
+ }
@@ -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("../ui/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.uiLogger.log(en_1.lib.projects.logFeedbackMessage.feedbackHeader);
12
+ (0, ui_1.uiLine)();
13
+ logger_1.uiLogger.log(en_1.lib.projects.logFeedbackMessage.feedbackMessage);
14
+ }
15
+ }
@@ -1,9 +1,20 @@
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;
7
7
  };
8
- export declare function handleProjectUpload<T>(accountId: number, projectConfig: ProjectConfig, projectDir: string, callbackFunc: ProjectUploadCallbackFunction<T>, uploadMessage: string, sendIR?: boolean, skipValidation?: boolean): Promise<ProjectUploadResult<T>>;
8
+ type HandleProjectUploadArg<T> = {
9
+ accountId: number;
10
+ projectConfig: ProjectConfig;
11
+ projectDir: string;
12
+ callbackFunc: ProjectUploadCallbackFunction<T>;
13
+ uploadMessage?: string;
14
+ forceCreate?: boolean;
15
+ isUploadCommand?: boolean;
16
+ sendIR?: boolean;
17
+ skipValidation?: boolean;
18
+ };
19
+ export declare function handleProjectUpload<T>({ accountId, projectConfig, projectDir, callbackFunc, uploadMessage, forceCreate, isUploadCommand, sendIR, skipValidation, }: HandleProjectUploadArg<T>): Promise<ProjectUploadResult<T>>;
9
20
  export {};
@@ -10,23 +10,20 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
10
10
  const path_1 = __importDefault(require("path"));
11
11
  const projects_1 = require("@hubspot/local-dev-lib/api/projects");
12
12
  const ignoreRules_1 = require("@hubspot/local-dev-lib/ignoreRules");
13
- const logger_1 = require("@hubspot/local-dev-lib/logger");
14
13
  const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
15
14
  const ui_1 = require("../ui");
16
- const lang_1 = require("../lang");
17
15
  const exitCodes_1 = require("../enums/exitCodes");
18
16
  const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
19
17
  const errorHandlers_1 = require("../errorHandlers");
20
18
  const node_util_1 = __importDefault(require("node:util"));
21
- const i18nKey = 'lib.projectUpload';
19
+ const en_1 = require("../../lang/en");
20
+ const ensureProjectExists_1 = require("./ensureProjectExists");
21
+ const logger_1 = require("../ui/logger");
22
22
  async function uploadProjectFiles(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation) {
23
23
  SpinniesManager_1.default.init({});
24
24
  const accountIdentifier = (0, ui_1.uiAccountDescription)(accountId);
25
25
  SpinniesManager_1.default.add('upload', {
26
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.add`, {
27
- accountIdentifier,
28
- projectName,
29
- }),
26
+ text: en_1.lib.projectUpload.uploadProjectFiles.add(projectName, accountIdentifier),
30
27
  succeedColor: 'white',
31
28
  });
32
29
  let buildId;
@@ -35,48 +32,33 @@ async function uploadProjectFiles(accountId, projectName, filePath, uploadMessag
35
32
  const { data: upload } = await (0, projects_1.uploadProject)(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation);
36
33
  buildId = upload.buildId;
37
34
  SpinniesManager_1.default.succeed('upload', {
38
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.succeed`, {
39
- accountIdentifier,
40
- projectName,
41
- }),
35
+ text: en_1.lib.projectUpload.uploadProjectFiles.succeed(projectName, accountIdentifier),
42
36
  });
43
37
  if (buildId) {
44
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.buildCreated`, {
45
- buildId,
46
- projectName,
47
- }));
38
+ logger_1.uiLogger.debug(en_1.lib.projectUpload.uploadProjectFiles.buildCreated(projectName, buildId));
48
39
  }
49
40
  }
50
41
  catch (err) {
51
42
  SpinniesManager_1.default.fail('upload', {
52
- text: (0, lang_1.i18n)(`${i18nKey}.uploadProjectFiles.fail`, {
53
- accountIdentifier,
54
- projectName,
55
- }),
43
+ text: en_1.lib.projectUpload.uploadProjectFiles.fail(projectName, accountIdentifier),
56
44
  });
57
45
  error = err;
58
46
  }
59
47
  return { buildId, error };
60
48
  }
61
- async function handleProjectUpload(accountId, projectConfig, projectDir, callbackFunc, uploadMessage, sendIR = false, skipValidation = false) {
49
+ async function handleProjectUpload({ accountId, projectConfig, projectDir, callbackFunc, uploadMessage = '', forceCreate = false, isUploadCommand = false, sendIR = false, skipValidation = false, }) {
62
50
  const srcDir = path_1.default.resolve(projectDir, projectConfig.srcDir);
63
51
  const filenames = fs_extra_1.default.readdirSync(srcDir);
64
52
  if (!filenames || filenames.length === 0) {
65
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.emptySource`, {
66
- srcDir: projectConfig.srcDir,
67
- }));
53
+ logger_1.uiLogger.log(en_1.lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir));
68
54
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
69
55
  }
70
56
  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
- }));
57
+ logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.compressing(tempFile.name));
74
58
  const output = fs_extra_1.default.createWriteStream(tempFile.name);
75
59
  const archive = (0, archiver_1.default)('zip');
76
60
  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
- }));
61
+ logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.compressed(archive.pointer()));
80
62
  let intermediateRepresentation;
81
63
  if (sendIR) {
82
64
  try {
@@ -85,11 +67,11 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
85
67
  platformVersion: projectConfig.platformVersion,
86
68
  accountId,
87
69
  }, { skipValidation });
88
- logger_1.logger.debug(node_util_1.default.inspect(intermediateRepresentation, false, null, true));
70
+ logger_1.uiLogger.debug(node_util_1.default.inspect(intermediateRepresentation, false, null, true));
89
71
  }
90
72
  catch (e) {
91
73
  if ((0, project_parsing_lib_1.isTranslationError)(e)) {
92
- logger_1.logger.error(e.toString());
74
+ logger_1.uiLogger.error(e.toString());
93
75
  }
94
76
  else {
95
77
  (0, errorHandlers_1.logError)(e);
@@ -97,6 +79,10 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
97
79
  return process.exit(exitCodes_1.EXIT_CODES.ERROR);
98
80
  }
99
81
  }
82
+ await (0, ensureProjectExists_1.ensureProjectExists)(accountId, projectConfig.name, {
83
+ forceCreate,
84
+ uploadCommand: isUploadCommand,
85
+ });
100
86
  const { buildId, error } = await uploadProjectFiles(accountId, projectConfig.name, tempFile.name, uploadMessage, projectConfig.platformVersion, intermediateRepresentation);
101
87
  if (error) {
102
88
  resolve({ uploadError: error });
@@ -113,9 +99,7 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
113
99
  if (ignored) {
114
100
  const isNodeModule = file.name.includes('node_modules');
115
101
  if (!isNodeModule || !loggedIgnoredNodeModule) {
116
- logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.handleProjectUpload.fileFiltered`, {
117
- filename: file.name,
118
- }));
102
+ logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.fileFiltered(file.name));
119
103
  }
120
104
  if (isNodeModule && !loggedIgnoredNodeModule) {
121
105
  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
  }
@@ -1,4 +1,4 @@
1
1
  import { ProjectConfig } from '../../types/Projects';
2
- type ProjectWatchHandlerFunction = (accountId: number, projectName: string, currentBuildId: number) => Promise<void>;
2
+ type ProjectWatchHandlerFunction = (accountId: number, projectName: string, currentBuildId: number) => Promise<void> | void;
3
3
  export declare function createWatcher(accountId: number, projectConfig: ProjectConfig, projectDir: string, handleBuildStatusFn: ProjectWatchHandlerFunction, handleUserInputFn: ProjectWatchHandlerFunction): Promise<void>;
4
4
  export {};