@hubspot/cli 6.2.0 → 6.2.2-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 (344) hide show
  1. package/README.md +12 -95
  2. package/bin/cli.d.ts +2 -0
  3. package/bin/cli.js +107 -128
  4. package/commands/accounts/clean.d.ts +1 -0
  5. package/commands/accounts/clean.js +82 -116
  6. package/commands/accounts/info.d.ts +1 -0
  7. package/commands/accounts/info.js +32 -43
  8. package/commands/accounts/list.d.ts +1 -0
  9. package/commands/accounts/list.js +65 -92
  10. package/commands/accounts/remove.d.ts +1 -0
  11. package/commands/accounts/remove.js +43 -73
  12. package/commands/accounts/rename.d.ts +1 -0
  13. package/commands/accounts/rename.js +26 -41
  14. package/commands/accounts/use.d.ts +1 -0
  15. package/commands/accounts/use.js +36 -57
  16. package/commands/accounts.d.ts +1 -0
  17. package/commands/accounts.js +16 -18
  18. package/commands/auth.d.ts +1 -0
  19. package/commands/auth.js +133 -200
  20. package/commands/cms/convertFields.d.ts +1 -0
  21. package/commands/cms/convertFields.js +66 -81
  22. package/commands/cms/lighthouseScore.d.ts +1 -0
  23. package/commands/cms/lighthouseScore.js +236 -298
  24. package/commands/cms/reactModules.d.ts +1 -0
  25. package/commands/cms/reactModules.js +46 -53
  26. package/commands/cms.d.ts +1 -0
  27. package/commands/cms.js +11 -13
  28. package/commands/config/set.d.ts +1 -0
  29. package/commands/config/set.js +64 -79
  30. package/commands/config.d.ts +1 -0
  31. package/commands/config.js +7 -9
  32. package/commands/create/api-sample.d.ts +1 -0
  33. package/commands/create/api-sample.js +54 -74
  34. package/commands/create/app.d.ts +1 -0
  35. package/commands/create/app.js +8 -7
  36. package/commands/create/function.d.ts +1 -0
  37. package/commands/create/function.js +15 -14
  38. package/commands/create/index.d.ts +1 -0
  39. package/commands/create/index.js +12 -9
  40. package/commands/create/module.d.ts +1 -0
  41. package/commands/create/module.js +21 -19
  42. package/commands/create/react-app.d.ts +1 -0
  43. package/commands/create/react-app.js +7 -6
  44. package/commands/create/template.d.ts +1 -0
  45. package/commands/create/template.js +23 -24
  46. package/commands/create/vue-app.d.ts +1 -0
  47. package/commands/create/vue-app.js +7 -6
  48. package/commands/create/webpack-serverless.d.ts +1 -0
  49. package/commands/create/webpack-serverless.js +7 -6
  50. package/commands/create/website-theme.d.ts +1 -0
  51. package/commands/create/website-theme.js +15 -15
  52. package/commands/create.d.ts +24 -0
  53. package/commands/create.js +65 -80
  54. package/commands/customObject/create.d.ts +1 -0
  55. package/commands/customObject/create.js +33 -47
  56. package/commands/customObject/schema/create.d.ts +1 -0
  57. package/commands/customObject/schema/create.js +42 -67
  58. package/commands/customObject/schema/delete.d.ts +1 -0
  59. package/commands/customObject/schema/delete.js +28 -39
  60. package/commands/customObject/schema/fetch-all.d.ts +1 -0
  61. package/commands/customObject/schema/fetch-all.js +30 -39
  62. package/commands/customObject/schema/fetch.d.ts +1 -0
  63. package/commands/customObject/schema/fetch.js +48 -63
  64. package/commands/customObject/schema/list.d.ts +1 -0
  65. package/commands/customObject/schema/list.js +14 -17
  66. package/commands/customObject/schema/update.d.ts +1 -0
  67. package/commands/customObject/schema/update.js +46 -72
  68. package/commands/customObject/schema.d.ts +1 -0
  69. package/commands/customObject/schema.js +12 -12
  70. package/commands/customObject.d.ts +1 -0
  71. package/commands/customObject.js +14 -22
  72. package/commands/feedback.d.ts +1 -0
  73. package/commands/feedback.js +25 -33
  74. package/commands/fetch.d.ts +1 -0
  75. package/commands/fetch.js +53 -78
  76. package/commands/filemanager/fetch.d.ts +1 -0
  77. package/commands/filemanager/fetch.js +38 -56
  78. package/commands/filemanager/upload.d.ts +1 -0
  79. package/commands/filemanager/upload.js +88 -128
  80. package/commands/filemanager.d.ts +1 -0
  81. package/commands/filemanager.js +12 -18
  82. package/commands/functions/deploy.d.ts +1 -0
  83. package/commands/functions/deploy.js +76 -99
  84. package/commands/functions/list.d.ts +1 -0
  85. package/commands/functions/list.js +41 -48
  86. package/commands/functions/server.d.ts +1 -0
  87. package/commands/functions/server.js +50 -65
  88. package/commands/functions.d.ts +1 -0
  89. package/commands/functions.js +13 -15
  90. package/commands/hubdb/clear.d.ts +1 -0
  91. package/commands/hubdb/clear.js +37 -56
  92. package/commands/hubdb/create.d.ts +1 -0
  93. package/commands/hubdb/create.js +34 -57
  94. package/commands/hubdb/delete.d.ts +1 -0
  95. package/commands/hubdb/delete.js +29 -44
  96. package/commands/hubdb/fetch.d.ts +1 -0
  97. package/commands/hubdb/fetch.js +30 -46
  98. package/commands/hubdb.d.ts +1 -0
  99. package/commands/hubdb.js +12 -14
  100. package/commands/init.d.ts +1 -0
  101. package/commands/init.js +103 -160
  102. package/commands/lint.d.ts +1 -0
  103. package/commands/lint.js +34 -45
  104. package/commands/list.d.ts +1 -0
  105. package/commands/list.js +74 -101
  106. package/commands/logs.d.ts +1 -0
  107. package/commands/logs.js +98 -121
  108. package/commands/module/marketplace-validate.d.ts +1 -0
  109. package/commands/module/marketplace-validate.js +32 -57
  110. package/commands/module.d.ts +1 -0
  111. package/commands/module.js +7 -9
  112. package/commands/mv.d.ts +1 -0
  113. package/commands/mv.js +53 -71
  114. package/commands/open.d.ts +1 -0
  115. package/commands/open.js +48 -62
  116. package/commands/project/add.d.ts +1 -0
  117. package/commands/project/add.js +47 -70
  118. package/commands/project/cloneApp.d.ts +1 -0
  119. package/commands/project/cloneApp.js +119 -180
  120. package/commands/project/create.d.ts +1 -0
  121. package/commands/project/create.js +49 -81
  122. package/commands/project/deploy.d.ts +1 -0
  123. package/commands/project/deploy.js +105 -182
  124. package/commands/project/dev.d.ts +1 -0
  125. package/commands/project/dev.js +126 -227
  126. package/commands/project/download.d.ts +1 -0
  127. package/commands/project/download.js +73 -123
  128. package/commands/project/installDeps.d.ts +1 -0
  129. package/commands/project/installDeps.js +52 -59
  130. package/commands/project/listBuilds.d.ts +1 -0
  131. package/commands/project/listBuilds.js +97 -139
  132. package/commands/project/logs.d.ts +1 -0
  133. package/commands/project/logs.js +86 -128
  134. package/commands/project/migrateApp.d.ts +1 -0
  135. package/commands/project/migrateApp.js +158 -248
  136. package/commands/project/open.d.ts +1 -0
  137. package/commands/project/open.js +44 -68
  138. package/commands/project/upload.d.ts +1 -0
  139. package/commands/project/upload.js +72 -116
  140. package/commands/project/watch.d.ts +1 -0
  141. package/commands/project/watch.js +94 -152
  142. package/commands/project.d.ts +1 -0
  143. package/commands/project.js +21 -23
  144. package/commands/remove.d.ts +1 -0
  145. package/commands/remove.js +28 -43
  146. package/commands/sandbox/create.d.ts +1 -0
  147. package/commands/sandbox/create.js +143 -187
  148. package/commands/sandbox/delete.d.ts +1 -0
  149. package/commands/sandbox/delete.js +166 -221
  150. package/commands/sandbox.d.ts +1 -0
  151. package/commands/sandbox.js +10 -12
  152. package/commands/secrets/addSecret.d.ts +1 -0
  153. package/commands/secrets/addSecret.js +34 -52
  154. package/commands/secrets/deleteSecret.d.ts +1 -0
  155. package/commands/secrets/deleteSecret.js +33 -50
  156. package/commands/secrets/listSecrets.d.ts +1 -0
  157. package/commands/secrets/listSecrets.js +28 -42
  158. package/commands/secrets/updateSecret.d.ts +1 -0
  159. package/commands/secrets/updateSecret.js +35 -53
  160. package/commands/secrets.d.ts +1 -0
  161. package/commands/secrets.js +12 -13
  162. package/commands/theme/generate-selectors.d.ts +1 -0
  163. package/commands/theme/generate-selectors.js +129 -192
  164. package/commands/theme/marketplace-validate.d.ts +1 -0
  165. package/commands/theme/marketplace-validate.js +32 -57
  166. package/commands/theme/preview.d.ts +1 -0
  167. package/commands/theme/preview.js +170 -195
  168. package/commands/theme.d.ts +1 -0
  169. package/commands/theme.js +9 -11
  170. package/commands/upload.d.ts +1 -0
  171. package/commands/upload.js +199 -287
  172. package/commands/watch.d.ts +1 -0
  173. package/commands/watch.js +128 -172
  174. package/lang/en.lyaml +2 -3
  175. package/lib/DevServerManager.d.ts +1 -0
  176. package/lib/DevServerManager.js +99 -124
  177. package/lib/LocalDevManager.d.ts +1 -0
  178. package/lib/LocalDevManager.js +322 -490
  179. package/lib/accountTypes.d.ts +7 -0
  180. package/lib/accountTypes.js +32 -34
  181. package/lib/buildAccount.d.ts +1 -0
  182. package/lib/buildAccount.js +132 -179
  183. package/lib/commonOpts.d.ts +1 -0
  184. package/lib/commonOpts.js +60 -91
  185. package/lib/configOptions.d.ts +1 -0
  186. package/lib/configOptions.js +110 -0
  187. package/lib/constants.d.ts +84 -0
  188. package/lib/constants.js +64 -91
  189. package/lib/debugInfo.d.ts +1 -0
  190. package/lib/debugInfo.js +14 -13
  191. package/lib/dependencyManagement.d.ts +1 -0
  192. package/lib/dependencyManagement.js +92 -132
  193. package/lib/developerTestAccounts.d.ts +1 -0
  194. package/lib/developerTestAccounts.js +67 -91
  195. package/lib/enums/exitCodes.d.ts +5 -0
  196. package/lib/enums/exitCodes.js +7 -8
  197. package/lib/environment.d.ts +1 -0
  198. package/lib/environment.js +13 -14
  199. package/lib/errorHandlers/index.d.ts +1 -0
  200. package/lib/errorHandlers/index.js +66 -80
  201. package/lib/errorHandlers/suppressError.d.ts +1 -0
  202. package/lib/errorHandlers/suppressError.js +66 -106
  203. package/lib/filesystem.d.ts +2 -0
  204. package/lib/filesystem.js +22 -28
  205. package/lib/generate-selectors.d.ts +1 -0
  206. package/lib/generate-selectors.js +102 -138
  207. package/lib/hasFeature.d.ts +1 -0
  208. package/lib/hasFeature.js +8 -15
  209. package/lib/hasFlag.d.ts +1 -0
  210. package/lib/hasFlag.js +13 -13
  211. package/lib/hublValidate.d.ts +2 -0
  212. package/lib/hublValidate.js +28 -28
  213. package/lib/interpolation.d.ts +1 -0
  214. package/lib/interpolation.js +50 -92
  215. package/lib/interpolationHelpers.d.ts +10 -0
  216. package/lib/interpolationHelpers.js +30 -22
  217. package/lib/lang.d.ts +1 -0
  218. package/lib/lang.js +52 -78
  219. package/lib/links.d.ts +1 -0
  220. package/lib/links.js +94 -114
  221. package/lib/localDev.d.ts +1 -0
  222. package/lib/localDev.js +285 -433
  223. package/lib/marketplace-validate.d.ts +1 -0
  224. package/lib/marketplace-validate.js +105 -126
  225. package/lib/oauth.d.ts +1 -0
  226. package/lib/oauth.js +64 -78
  227. package/lib/polling.d.ts +1 -0
  228. package/lib/polling.js +26 -26
  229. package/lib/process.d.ts +1 -0
  230. package/lib/process.js +41 -53
  231. package/lib/projectLogsManager.d.ts +1 -0
  232. package/lib/projectLogsManager.js +78 -130
  233. package/lib/projectStructure.d.ts +1 -0
  234. package/lib/projectStructure.js +89 -109
  235. package/lib/projects.d.ts +1 -0
  236. package/lib/projects.js +595 -958
  237. package/lib/projectsWatch.d.ts +1 -0
  238. package/lib/projectsWatch.js +127 -228
  239. package/lib/prompts/accountNamePrompt.d.ts +1 -0
  240. package/lib/prompts/accountNamePrompt.js +60 -65
  241. package/lib/prompts/accountsPrompt.d.ts +1 -0
  242. package/lib/prompts/accountsPrompt.js +33 -37
  243. package/lib/prompts/activeInstallConfirmationPrompt.d.ts +1 -0
  244. package/lib/prompts/activeInstallConfirmationPrompt.js +13 -13
  245. package/lib/prompts/cleanUploadPrompt.d.ts +1 -0
  246. package/lib/prompts/cleanUploadPrompt.js +13 -13
  247. package/lib/prompts/cmsFieldPrompt.d.ts +1 -0
  248. package/lib/prompts/cmsFieldPrompt.js +37 -39
  249. package/lib/prompts/createApiSamplePrompt.d.ts +1 -0
  250. package/lib/prompts/createApiSamplePrompt.js +49 -52
  251. package/lib/prompts/createFunctionPrompt.d.ts +1 -0
  252. package/lib/prompts/createFunctionPrompt.js +57 -56
  253. package/lib/prompts/createModulePrompt.d.ts +1 -0
  254. package/lib/prompts/createModulePrompt.js +47 -50
  255. package/lib/prompts/createProjectPrompt.d.ts +1 -0
  256. package/lib/prompts/createProjectPrompt.js +95 -129
  257. package/lib/prompts/createTemplatePrompt.d.ts +1 -0
  258. package/lib/prompts/createTemplatePrompt.js +18 -19
  259. package/lib/prompts/deployBuildIdPrompt.d.ts +1 -0
  260. package/lib/prompts/deployBuildIdPrompt.js +15 -15
  261. package/lib/prompts/downloadProjectPrompt.d.ts +1 -0
  262. package/lib/prompts/downloadProjectPrompt.js +39 -41
  263. package/lib/prompts/feedbackPrompt.d.ts +1 -0
  264. package/lib/prompts/feedbackPrompt.js +29 -30
  265. package/lib/prompts/folderOverwritePrompt.d.ts +1 -0
  266. package/lib/prompts/folderOverwritePrompt.js +10 -10
  267. package/lib/prompts/installPublicAppPrompt.d.ts +1 -0
  268. package/lib/prompts/installPublicAppPrompt.js +29 -42
  269. package/lib/prompts/personalAccessKeyPrompt.d.ts +1 -0
  270. package/lib/prompts/personalAccessKeyPrompt.js +104 -110
  271. package/lib/prompts/previewPrompt.d.ts +1 -0
  272. package/lib/prompts/previewPrompt.js +46 -47
  273. package/lib/prompts/projectAddPrompt.d.ts +1 -0
  274. package/lib/prompts/projectAddPrompt.js +37 -38
  275. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -0
  276. package/lib/prompts/projectDevTargetAccountPrompt.js +150 -193
  277. package/lib/prompts/projectNamePrompt.d.ts +1 -0
  278. package/lib/prompts/projectNamePrompt.js +25 -25
  279. package/lib/prompts/projectsLogsPrompt.d.ts +1 -0
  280. package/lib/prompts/projectsLogsPrompt.js +21 -27
  281. package/lib/prompts/promptUtils.d.ts +1 -0
  282. package/lib/prompts/promptUtils.js +17 -17
  283. package/lib/prompts/sandboxesPrompt.d.ts +1 -0
  284. package/lib/prompts/sandboxesPrompt.js +50 -59
  285. package/lib/prompts/secretPrompt.d.ts +1 -0
  286. package/lib/prompts/secretPrompt.js +15 -16
  287. package/lib/prompts/selectPublicAppPrompt.d.ts +1 -0
  288. package/lib/prompts/selectPublicAppPrompt.js +58 -82
  289. package/lib/prompts/setAsDefaultAccountPrompt.d.ts +1 -0
  290. package/lib/prompts/setAsDefaultAccountPrompt.js +19 -24
  291. package/lib/prompts/uploadPrompt.d.ts +1 -0
  292. package/lib/prompts/uploadPrompt.js +30 -30
  293. package/lib/regex.d.ts +1 -0
  294. package/lib/regex.js +4 -5
  295. package/lib/sandboxSync.d.ts +1 -0
  296. package/lib/sandboxSync.js +100 -166
  297. package/lib/sandboxes.d.ts +1 -0
  298. package/lib/sandboxes.js +201 -316
  299. package/lib/schema.d.ts +3 -0
  300. package/lib/schema.js +29 -33
  301. package/lib/serverlessLogs.d.ts +1 -0
  302. package/lib/serverlessLogs.js +131 -173
  303. package/lib/ui/SpinniesManager.d.ts +1 -0
  304. package/lib/ui/SpinniesManager.js +198 -254
  305. package/lib/ui/git.d.ts +1 -0
  306. package/lib/ui/git.js +20 -19
  307. package/lib/ui/index.d.ts +1 -0
  308. package/lib/ui/index.js +117 -167
  309. package/lib/ui/serverlessFunctionLogs.d.ts +1 -0
  310. package/lib/ui/serverlessFunctionLogs.js +53 -70
  311. package/lib/ui/spinniesUtils.d.ts +1 -0
  312. package/lib/ui/spinniesUtils.js +111 -133
  313. package/lib/ui/supportHyperlinks.d.ts +1 -0
  314. package/lib/ui/supportHyperlinks.js +49 -62
  315. package/lib/ui/supportsColor.d.ts +1 -0
  316. package/lib/ui/supportsColor.js +81 -109
  317. package/lib/ui/table.d.ts +1 -0
  318. package/lib/ui/table.js +49 -55
  319. package/lib/upload.d.ts +1 -0
  320. package/lib/upload.js +40 -43
  321. package/lib/usageTracking.d.ts +1 -0
  322. package/lib/usageTracking.js +133 -155
  323. package/lib/validation.d.ts +1 -0
  324. package/lib/validation.js +144 -203
  325. package/package.json +84 -48
  326. package/CHANGELOG.md +0 -16
  327. package/commands/__tests__/projects.test.js +0 -105
  328. package/commands/config/set/allowUsageTracking.js +0 -52
  329. package/commands/config/set/defaultMode.js +0 -59
  330. package/commands/config/set/httpTimeout.js +0 -42
  331. package/commands/project/__tests__/deploy.test.js +0 -443
  332. package/commands/project/__tests__/installDeps.test.js +0 -168
  333. package/commands/project/__tests__/logs.test.js +0 -304
  334. package/hubspot.sample.config.yml +0 -28
  335. package/jest.config.js +0 -4
  336. package/lib/__tests__/commonOpts.test.js +0 -83
  337. package/lib/__tests__/dependencyManagement.test.js +0 -243
  338. package/lib/__tests__/downloadProjectPrompt.test.js +0 -31
  339. package/lib/__tests__/projectLogsManager.test.js +0 -212
  340. package/lib/__tests__/projects.test.js +0 -140
  341. package/lib/__tests__/serverlessLogs.test.js +0 -162
  342. package/lib/__tests__/validation.test.js +0 -140
  343. package/lib/getFunctionArrays.js +0 -18
  344. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -46
@@ -1,531 +1,363 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-nocheck
1
4
  const path = require('path');
2
5
  const chokidar = require('chokidar');
3
6
  const chalk = require('chalk');
4
7
  const { i18n } = require('./lang');
5
8
  const { handleKeypress } = require('./process');
6
9
  const { logger } = require('@hubspot/local-dev-lib/logger');
7
- const {
8
- fetchAppInstallationData,
9
- } = require('@hubspot/local-dev-lib/api/localDevAuth');
10
- const {
11
- fetchPublicAppsForPortal,
12
- fetchPublicAppProductionInstallCounts,
13
- } = require('@hubspot/local-dev-lib/api/appsDev');
14
- const {
15
- getAccountId,
16
- getConfigDefaultAccount,
17
- } = require('@hubspot/local-dev-lib/config');
10
+ const { fetchAppInstallationData, } = require('@hubspot/local-dev-lib/api/localDevAuth');
11
+ const { fetchPublicAppsForPortal, fetchPublicAppProductionInstallCounts, } = require('@hubspot/local-dev-lib/api/appsDev');
12
+ const { getAccountId, getConfigDefaultAccount, } = require('@hubspot/local-dev-lib/config');
18
13
  const { PROJECT_CONFIG_FILE } = require('./constants');
19
14
  const SpinniesManager = require('./ui/SpinniesManager');
20
15
  const DevServerManager = require('./DevServerManager');
21
16
  const { EXIT_CODES } = require('./enums/exitCodes');
22
17
  const { getProjectDetailUrl } = require('./projects');
23
18
  const { getAccountHomeUrl } = require('./localDev');
24
- const {
25
- CONFIG_FILES,
26
- COMPONENT_TYPES,
27
- getAppCardConfigs,
28
- } = require('./projectStructure');
29
- const {
30
- UI_COLORS,
31
- uiCommandReference,
32
- uiAccountDescription,
33
- uiBetaTag,
34
- uiLink,
35
- uiLine,
36
- } = require('./ui');
19
+ const { CONFIG_FILES, COMPONENT_TYPES, getAppCardConfigs, } = require('./projectStructure');
20
+ const { UI_COLORS, uiCommandReference, uiAccountDescription, uiBetaTag, uiLink, uiLine, } = require('./ui');
37
21
  const { logError } = require('./errorHandlers/index');
38
22
  const { installPublicAppPrompt } = require('./prompts/installPublicAppPrompt');
39
- const {
40
- activeInstallConfirmationPrompt,
41
- } = require('./prompts/activeInstallConfirmationPrompt');
42
-
23
+ const { activeInstallConfirmationPrompt, } = require('./prompts/activeInstallConfirmationPrompt');
43
24
  const WATCH_EVENTS = {
44
- add: 'add',
45
- change: 'change',
46
- unlink: 'unlink',
47
- unlinkDir: 'unlinkDir',
25
+ add: 'add',
26
+ change: 'change',
27
+ unlink: 'unlink',
28
+ unlinkDir: 'unlinkDir',
48
29
  };
49
-
50
30
  const i18nKey = 'lib.LocalDevManager';
51
-
52
31
  class LocalDevManager {
53
- constructor(options) {
54
- this.targetAccountId = options.targetAccountId;
55
- // The account that the project exists in. This is not always the targetAccountId
56
- this.targetProjectAccountId = options.parentAccountId || options.accountId;
57
-
58
- this.projectConfig = options.projectConfig;
59
- this.projectDir = options.projectDir;
60
- this.projectId = options.projectId;
61
- this.debug = options.debug || false;
62
- this.deployedBuild = options.deployedBuild;
63
- this.isGithubLinked = options.isGithubLinked;
64
- this.watcher = null;
65
- this.uploadWarnings = {};
66
- this.runnableComponents = options.runnableComponents;
67
- this.activeApp = null;
68
- this.activePublicAppData = null;
69
- this.env = options.env;
70
- this.publicAppActiveInstalls = null;
71
-
72
- this.projectSourceDir = path.join(
73
- this.projectDir,
74
- this.projectConfig.srcDir
75
- );
76
-
77
- if (!this.targetAccountId || !this.projectConfig || !this.projectDir) {
78
- logger.log(i18n(`${i18nKey}.failedToInitialize`));
79
- process.exit(EXIT_CODES.ERROR);
80
- }
81
- }
82
-
83
- async setActiveApp(appUid) {
84
- if (!appUid) {
85
- logger.error(
86
- i18n(`${i18nKey}.missingUid`, {
87
- devCommand: uiCommandReference('hs project dev'),
88
- })
89
- );
90
- process.exit(EXIT_CODES.ERROR);
91
- }
92
- this.activeApp = this.runnableComponents.find(component => {
93
- return component.config.uid === appUid;
94
- });
95
-
96
- if (this.activeApp.type === COMPONENT_TYPES.publicApp) {
97
- try {
98
- await this.setActivePublicAppData();
99
- await this.checkActivePublicAppInstalls();
100
- await this.checkPublicAppInstallation();
101
- } catch (e) {
102
- logError(e);
103
- }
32
+ constructor(options) {
33
+ this.targetAccountId = options.targetAccountId;
34
+ // The account that the project exists in. This is not always the targetAccountId
35
+ this.targetProjectAccountId = options.parentAccountId || options.accountId;
36
+ this.projectConfig = options.projectConfig;
37
+ this.projectDir = options.projectDir;
38
+ this.projectId = options.projectId;
39
+ this.debug = options.debug || false;
40
+ this.deployedBuild = options.deployedBuild;
41
+ this.isGithubLinked = options.isGithubLinked;
42
+ this.watcher = null;
43
+ this.uploadWarnings = {};
44
+ this.runnableComponents = options.runnableComponents;
45
+ this.activeApp = null;
46
+ this.activePublicAppData = null;
47
+ this.env = options.env;
48
+ this.publicAppActiveInstalls = null;
49
+ this.projectSourceDir = path.join(this.projectDir, this.projectConfig.srcDir);
50
+ if (!this.targetAccountId || !this.projectConfig || !this.projectDir) {
51
+ logger.log(i18n(`${i18nKey}.failedToInitialize`));
52
+ process.exit(EXIT_CODES.ERROR);
53
+ }
104
54
  }
105
- }
106
-
107
- async setActivePublicAppData() {
108
- if (!this.activeApp) {
109
- return;
55
+ async setActiveApp(appUid) {
56
+ if (!appUid) {
57
+ logger.error(i18n(`${i18nKey}.missingUid`, {
58
+ devCommand: uiCommandReference('hs project dev'),
59
+ }));
60
+ process.exit(EXIT_CODES.ERROR);
61
+ }
62
+ this.activeApp = this.runnableComponents.find(component => {
63
+ return component.config.uid === appUid;
64
+ });
65
+ if (this.activeApp.type === COMPONENT_TYPES.publicApp) {
66
+ try {
67
+ await this.setActivePublicAppData();
68
+ await this.checkActivePublicAppInstalls();
69
+ await this.checkPublicAppInstallation();
70
+ }
71
+ catch (e) {
72
+ logError(e);
73
+ }
74
+ }
110
75
  }
111
-
112
- const { data: portalPublicApps } = await fetchPublicAppsForPortal(
113
- this.targetProjectAccountId
114
- );
115
-
116
- const activePublicAppData = portalPublicApps.find(
117
- ({ sourceId }) => sourceId === this.activeApp.config.uid
118
- );
119
-
120
- // TODO: Update to account for new API with { data }
121
- const {
122
- data: { uniquePortalInstallCount },
123
- } = await fetchPublicAppProductionInstallCounts(
124
- activePublicAppData.id,
125
- this.targetProjectAccountId
126
- );
127
-
128
- this.activePublicAppData = activePublicAppData;
129
- this.publicAppActiveInstalls = uniquePortalInstallCount;
130
- }
131
-
132
- async checkActivePublicAppInstalls() {
133
- if (
134
- !this.activePublicAppData ||
135
- !this.publicAppActiveInstalls ||
136
- this.publicAppActiveInstalls < 1
137
- ) {
138
- return;
76
+ async setActivePublicAppData() {
77
+ if (!this.activeApp) {
78
+ return;
79
+ }
80
+ const { data: portalPublicApps } = await fetchPublicAppsForPortal(this.targetProjectAccountId);
81
+ const activePublicAppData = portalPublicApps.find(({ sourceId }) => sourceId === this.activeApp.config.uid);
82
+ // TODO: Update to account for new API with { data }
83
+ const { data: { uniquePortalInstallCount }, } = await fetchPublicAppProductionInstallCounts(activePublicAppData.id, this.targetProjectAccountId);
84
+ this.activePublicAppData = activePublicAppData;
85
+ this.publicAppActiveInstalls = uniquePortalInstallCount;
139
86
  }
140
- uiLine();
141
-
142
- logger.warn(
143
- i18n(`${i18nKey}.activeInstallWarning.installCount`, {
144
- appName: this.activePublicAppData.name,
145
- installCount: this.publicAppActiveInstalls,
146
- installText:
147
- this.publicAppActiveInstalls === 1 ? 'install' : 'installs',
148
- })
149
- );
150
- logger.log(i18n(`${i18nKey}.activeInstallWarning.explanation`));
151
- uiLine();
152
- const proceed = await activeInstallConfirmationPrompt();
153
-
154
- if (!proceed) {
155
- process.exit(EXIT_CODES.SUCCESS);
87
+ async checkActivePublicAppInstalls() {
88
+ if (!this.activePublicAppData ||
89
+ !this.publicAppActiveInstalls ||
90
+ this.publicAppActiveInstalls < 1) {
91
+ return;
92
+ }
93
+ uiLine();
94
+ logger.warn(i18n(`${i18nKey}.activeInstallWarning.installCount`, {
95
+ appName: this.activePublicAppData.name,
96
+ installCount: this.publicAppActiveInstalls,
97
+ installText: this.publicAppActiveInstalls === 1 ? 'install' : 'installs',
98
+ }));
99
+ logger.log(i18n(`${i18nKey}.activeInstallWarning.explanation`));
100
+ uiLine();
101
+ const proceed = await activeInstallConfirmationPrompt();
102
+ if (!proceed) {
103
+ process.exit(EXIT_CODES.SUCCESS);
104
+ }
156
105
  }
157
- }
158
-
159
- async start() {
160
- SpinniesManager.stopAll();
161
- SpinniesManager.init();
162
-
163
- // Local dev currently relies on the existence of a deployed build in the target account
164
- if (!this.deployedBuild) {
165
- logger.error(
166
- i18n(`${i18nKey}.noDeployedBuild`, {
167
- projectName: this.projectConfig.name,
168
- accountIdentifier: uiAccountDescription(this.targetProjectAccountId),
169
- uploadCommand: this.getUploadCommand(),
170
- })
171
- );
172
- logger.log();
173
- process.exit(EXIT_CODES.SUCCESS);
106
+ async start() {
107
+ SpinniesManager.stopAll();
108
+ SpinniesManager.init();
109
+ // Local dev currently relies on the existence of a deployed build in the target account
110
+ if (!this.deployedBuild) {
111
+ logger.error(i18n(`${i18nKey}.noDeployedBuild`, {
112
+ projectName: this.projectConfig.name,
113
+ accountIdentifier: uiAccountDescription(this.targetProjectAccountId),
114
+ uploadCommand: this.getUploadCommand(),
115
+ }));
116
+ logger.log();
117
+ process.exit(EXIT_CODES.SUCCESS);
118
+ }
119
+ const setupSucceeded = await this.devServerSetup();
120
+ if (!setupSucceeded) {
121
+ process.exit(EXIT_CODES.ERROR);
122
+ }
123
+ else if (!this.debug) {
124
+ console.clear();
125
+ }
126
+ uiBetaTag(i18n(`${i18nKey}.betaMessage`));
127
+ logger.log(uiLink(i18n(`${i18nKey}.learnMoreLocalDevServer`), 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'));
128
+ logger.log();
129
+ logger.log(chalk.hex(UI_COLORS.SORBET)(i18n(`${i18nKey}.running`, {
130
+ accountIdentifier: uiAccountDescription(this.targetAccountId),
131
+ projectName: this.projectConfig.name,
132
+ })));
133
+ logger.log(uiLink(i18n(`${i18nKey}.viewProjectLink`), getProjectDetailUrl(this.projectConfig.name, this.targetProjectAccountId)));
134
+ if (this.activeApp.type === COMPONENT_TYPES.publicApp) {
135
+ logger.log(uiLink(i18n(`${i18nKey}.viewTestAccountLink`), getAccountHomeUrl(this.targetAccountId)));
136
+ }
137
+ logger.log();
138
+ logger.log(i18n(`${i18nKey}.quitHelper`));
139
+ uiLine();
140
+ logger.log();
141
+ await this.devServerStart();
142
+ // Initialize project file watcher to detect configuration file changes
143
+ this.startWatching();
144
+ this.updateKeypressListeners();
145
+ this.monitorConsoleOutput();
146
+ // Verify that there are no mismatches between components in the local project
147
+ // and components in the deployed build of the project.
148
+ this.compareLocalProjectToDeployed();
174
149
  }
175
-
176
- const setupSucceeded = await this.devServerSetup();
177
-
178
- if (!setupSucceeded) {
179
- process.exit(EXIT_CODES.ERROR);
180
- } else if (!this.debug) {
181
- console.clear();
150
+ async stop(showProgress = true) {
151
+ if (showProgress) {
152
+ SpinniesManager.add('cleanupMessage', {
153
+ text: i18n(`${i18nKey}.exitingStart`),
154
+ });
155
+ }
156
+ await this.stopWatching();
157
+ const cleanupSucceeded = await this.devServerCleanup();
158
+ if (!cleanupSucceeded) {
159
+ if (showProgress) {
160
+ SpinniesManager.fail('cleanupMessage', {
161
+ text: i18n(`${i18nKey}.exitingFail`),
162
+ });
163
+ }
164
+ process.exit(EXIT_CODES.ERROR);
165
+ }
166
+ if (showProgress) {
167
+ SpinniesManager.succeed('cleanupMessage', {
168
+ text: i18n(`${i18nKey}.exitingSucceed`),
169
+ });
170
+ }
171
+ process.exit(EXIT_CODES.SUCCESS);
182
172
  }
183
-
184
- uiBetaTag(i18n(`${i18nKey}.betaMessage`));
185
-
186
- logger.log(
187
- uiLink(
188
- i18n(`${i18nKey}.learnMoreLocalDevServer`),
189
- 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'
190
- )
191
- );
192
-
193
- logger.log();
194
- logger.log(
195
- chalk.hex(UI_COLORS.SORBET)(
196
- i18n(`${i18nKey}.running`, {
197
- accountIdentifier: uiAccountDescription(this.targetAccountId),
198
- projectName: this.projectConfig.name,
199
- })
200
- )
201
- );
202
- logger.log(
203
- uiLink(
204
- i18n(`${i18nKey}.viewProjectLink`),
205
- getProjectDetailUrl(
206
- this.projectConfig.name,
207
- this.targetProjectAccountId
208
- )
209
- )
210
- );
211
-
212
- if (this.activeApp.type === COMPONENT_TYPES.publicApp) {
213
- logger.log(
214
- uiLink(
215
- i18n(`${i18nKey}.viewTestAccountLink`),
216
- getAccountHomeUrl(this.targetAccountId)
217
- )
218
- );
173
+ async getActiveAppInstallationData() {
174
+ const { data } = await fetchAppInstallationData(this.targetAccountId, this.projectId, this.activeApp.config.uid, this.activeApp.config.auth.requiredScopes, this.activeApp.config.auth.optionalScopes);
175
+ return data;
219
176
  }
220
-
221
- logger.log();
222
- logger.log(i18n(`${i18nKey}.quitHelper`));
223
- uiLine();
224
- logger.log();
225
-
226
- await this.devServerStart();
227
-
228
- // Initialize project file watcher to detect configuration file changes
229
- this.startWatching();
230
-
231
- this.updateKeypressListeners();
232
-
233
- this.monitorConsoleOutput();
234
-
235
- // Verify that there are no mismatches between components in the local project
236
- // and components in the deployed build of the project.
237
- this.compareLocalProjectToDeployed();
238
- }
239
-
240
- async stop(showProgress = true) {
241
- if (showProgress) {
242
- SpinniesManager.add('cleanupMessage', {
243
- text: i18n(`${i18nKey}.exitingStart`),
244
- });
177
+ async checkPublicAppInstallation() {
178
+ const { isInstalledWithScopeGroups, previouslyAuthorizedScopeGroups, } = await this.getActiveAppInstallationData();
179
+ const isReinstall = previouslyAuthorizedScopeGroups.length > 0;
180
+ if (!isInstalledWithScopeGroups) {
181
+ await installPublicAppPrompt(this.env, this.targetAccountId, this.activePublicAppData.clientId, this.activeApp.config.auth.requiredScopes, this.activeApp.config.auth.redirectUrls, isReinstall);
182
+ }
245
183
  }
246
- await this.stopWatching();
247
-
248
- const cleanupSucceeded = await this.devServerCleanup();
249
-
250
- if (!cleanupSucceeded) {
251
- if (showProgress) {
252
- SpinniesManager.fail('cleanupMessage', {
253
- text: i18n(`${i18nKey}.exitingFail`),
184
+ updateKeypressListeners() {
185
+ handleKeypress(async (key) => {
186
+ if ((key.ctrl && key.name === 'c') || key.name === 'q') {
187
+ this.stop();
188
+ }
254
189
  });
255
- }
256
- process.exit(EXIT_CODES.ERROR);
257
190
  }
258
-
259
- if (showProgress) {
260
- SpinniesManager.succeed('cleanupMessage', {
261
- text: i18n(`${i18nKey}.exitingSucceed`),
262
- });
191
+ getUploadCommand() {
192
+ const currentDefaultAccount = getConfigDefaultAccount();
193
+ return this.targetProjectAccountId !== getAccountId(currentDefaultAccount)
194
+ ? uiCommandReference(`hs project upload --account=${this.targetProjectAccountId}`)
195
+ : uiCommandReference('hs project upload');
263
196
  }
264
- process.exit(EXIT_CODES.SUCCESS);
265
- }
266
-
267
- async getActiveAppInstallationData() {
268
- const { data } = await fetchAppInstallationData(
269
- this.targetAccountId,
270
- this.projectId,
271
- this.activeApp.config.uid,
272
- this.activeApp.config.auth.requiredScopes,
273
- this.activeApp.config.auth.optionalScopes
274
- );
275
-
276
- return data;
277
- }
278
-
279
- async checkPublicAppInstallation() {
280
- const {
281
- isInstalledWithScopeGroups,
282
- previouslyAuthorizedScopeGroups,
283
- } = await this.getActiveAppInstallationData();
284
-
285
- const isReinstall = previouslyAuthorizedScopeGroups.length > 0;
286
-
287
- if (!isInstalledWithScopeGroups) {
288
- await installPublicAppPrompt(
289
- this.env,
290
- this.targetAccountId,
291
- this.activePublicAppData.clientId,
292
- this.activeApp.config.auth.requiredScopes,
293
- this.activeApp.config.auth.redirectUrls,
294
- isReinstall
295
- );
296
- }
297
- }
298
-
299
- updateKeypressListeners() {
300
- handleKeypress(async key => {
301
- if ((key.ctrl && key.name === 'c') || key.name === 'q') {
302
- this.stop();
303
- }
304
- });
305
- }
306
-
307
- getUploadCommand() {
308
- const currentDefaultAccount = getConfigDefaultAccount();
309
-
310
- return this.targetProjectAccountId !== getAccountId(currentDefaultAccount)
311
- ? uiCommandReference(
312
- `hs project upload --account=${this.targetProjectAccountId}`
313
- )
314
- : uiCommandReference('hs project upload');
315
- }
316
-
317
- logUploadWarning(reason) {
318
- let warning = reason;
319
- if (!reason) {
320
- warning =
321
- this.activeApp.type === COMPONENT_TYPES.publicApp &&
322
- this.publicAppActiveInstalls > 0
323
- ? i18n(`${i18nKey}.uploadWarning.defaultPublicAppWarning`, {
324
- installCount: this.publicAppActiveInstalls,
325
- installText:
326
- this.publicAppActiveInstalls === 1 ? 'install' : 'installs',
327
- })
328
- : i18n(`${i18nKey}.uploadWarning.defaultWarning`);
197
+ logUploadWarning(reason) {
198
+ let warning = reason;
199
+ if (!reason) {
200
+ warning =
201
+ this.activeApp.type === COMPONENT_TYPES.publicApp &&
202
+ this.publicAppActiveInstalls > 0
203
+ ? i18n(`${i18nKey}.uploadWarning.defaultPublicAppWarning`, {
204
+ installCount: this.publicAppActiveInstalls,
205
+ installText: this.publicAppActiveInstalls === 1 ? 'install' : 'installs',
206
+ })
207
+ : i18n(`${i18nKey}.uploadWarning.defaultWarning`);
208
+ }
209
+ // Avoid logging the warning to the console if it is currently the most
210
+ // recently logged warning. We do not want to spam the console with the same message.
211
+ if (!this.uploadWarnings[warning]) {
212
+ logger.log();
213
+ logger.warn(i18n(`${i18nKey}.uploadWarning.header`, { warning }));
214
+ logger.log(i18n(`${i18nKey}.uploadWarning.stopDev`, {
215
+ command: uiCommandReference('hs project dev'),
216
+ }));
217
+ if (this.isGithubLinked) {
218
+ logger.log(i18n(`${i18nKey}.uploadWarning.pushToGithub`));
219
+ }
220
+ else {
221
+ logger.log(i18n(`${i18nKey}.uploadWarning.runUpload`, {
222
+ command: this.getUploadCommand(),
223
+ }));
224
+ }
225
+ logger.log(i18n(`${i18nKey}.uploadWarning.restartDev`, {
226
+ command: uiCommandReference('hs project dev'),
227
+ }));
228
+ this.mostRecentUploadWarning = warning;
229
+ this.uploadWarnings[warning] = true;
230
+ }
329
231
  }
330
-
331
- // Avoid logging the warning to the console if it is currently the most
332
- // recently logged warning. We do not want to spam the console with the same message.
333
- if (!this.uploadWarnings[warning]) {
334
- logger.log();
335
- logger.warn(i18n(`${i18nKey}.uploadWarning.header`, { warning }));
336
- logger.log(
337
- i18n(`${i18nKey}.uploadWarning.stopDev`, {
338
- command: uiCommandReference('hs project dev'),
339
- })
340
- );
341
- if (this.isGithubLinked) {
342
- logger.log(i18n(`${i18nKey}.uploadWarning.pushToGithub`));
343
- } else {
344
- logger.log(
345
- i18n(`${i18nKey}.uploadWarning.runUpload`, {
346
- command: this.getUploadCommand(),
347
- })
348
- );
349
- }
350
- logger.log(
351
- i18n(`${i18nKey}.uploadWarning.restartDev`, {
352
- command: uiCommandReference('hs project dev'),
353
- })
354
- );
355
-
356
- this.mostRecentUploadWarning = warning;
357
- this.uploadWarnings[warning] = true;
232
+ monitorConsoleOutput() {
233
+ const originalStdoutWrite = process.stdout.write.bind(process.stdout);
234
+ process.stdout.write = function (chunk, encoding, callback) {
235
+ // Reset the most recently logged warning
236
+ if (this.mostRecentUploadWarning &&
237
+ this.uploadWarnings[this.mostRecentUploadWarning]) {
238
+ delete this.uploadWarnings[this.mostRecentUploadWarning];
239
+ }
240
+ return originalStdoutWrite(chunk, encoding, callback);
241
+ }.bind(this);
358
242
  }
359
- }
360
-
361
- monitorConsoleOutput() {
362
- const originalStdoutWrite = process.stdout.write.bind(process.stdout);
363
-
364
- process.stdout.write = function(chunk, encoding, callback) {
365
- // Reset the most recently logged warning
366
- if (
367
- this.mostRecentUploadWarning &&
368
- this.uploadWarnings[this.mostRecentUploadWarning]
369
- ) {
370
- delete this.uploadWarnings[this.mostRecentUploadWarning];
371
- }
372
-
373
- return originalStdoutWrite(chunk, encoding, callback);
374
- }.bind(this);
375
- }
376
-
377
- compareLocalProjectToDeployed() {
378
- const deployedComponentNames = this.deployedBuild.subbuildStatuses.map(
379
- subbuildStatus => subbuildStatus.buildName
380
- );
381
-
382
- let missingComponents = [];
383
-
384
- this.runnableComponents.forEach(({ type, config, path }) => {
385
- if (Object.values(COMPONENT_TYPES).includes(type)) {
386
- const cardConfigs = getAppCardConfigs(config, path);
387
-
388
- if (!deployedComponentNames.includes(config.name)) {
389
- missingComponents.push(
390
- `${i18n(`${i18nKey}.uploadWarning.appLabel`)} ${config.name}`
391
- );
243
+ compareLocalProjectToDeployed() {
244
+ const deployedComponentNames = this.deployedBuild.subbuildStatuses.map(subbuildStatus => subbuildStatus.buildName);
245
+ const missingComponents = [];
246
+ this.runnableComponents.forEach(({ type, config, path }) => {
247
+ if (Object.values(COMPONENT_TYPES).includes(type)) {
248
+ const cardConfigs = getAppCardConfigs(config, path);
249
+ if (!deployedComponentNames.includes(config.name)) {
250
+ missingComponents.push(`${i18n(`${i18nKey}.uploadWarning.appLabel`)} ${config.name}`);
251
+ }
252
+ cardConfigs.forEach(cardConfig => {
253
+ if (cardConfig.data &&
254
+ cardConfig.data.title &&
255
+ !deployedComponentNames.includes(cardConfig.data.title)) {
256
+ missingComponents.push(`${i18n(`${i18nKey}.uploadWarning.uiExtensionLabel`)} ${cardConfig.data.title}`);
257
+ }
258
+ });
259
+ }
260
+ });
261
+ if (missingComponents.length) {
262
+ this.logUploadWarning(i18n(`${i18nKey}.uploadWarning.missingComponents`, {
263
+ missingComponents: missingComponents.join(', '),
264
+ }));
392
265
  }
393
-
394
- cardConfigs.forEach(cardConfig => {
395
- if (
396
- cardConfig.data &&
397
- cardConfig.data.title &&
398
- !deployedComponentNames.includes(cardConfig.data.title)
399
- ) {
400
- missingComponents.push(
401
- `${i18n(`${i18nKey}.uploadWarning.uiExtensionLabel`)} ${
402
- cardConfig.data.title
403
- }`
404
- );
405
- }
266
+ }
267
+ startWatching() {
268
+ this.watcher = chokidar.watch(this.projectDir, {
269
+ ignoreInitial: true,
270
+ });
271
+ const configPaths = this.runnableComponents
272
+ .filter(({ type }) => Object.values(COMPONENT_TYPES).includes(type))
273
+ .map(component => {
274
+ const appConfigPath = path.join(component.path, CONFIG_FILES[component.type]);
275
+ return appConfigPath;
276
+ });
277
+ const projectConfigPath = path.join(this.projectDir, PROJECT_CONFIG_FILE);
278
+ configPaths.push(projectConfigPath);
279
+ this.watcher.on('add', filePath => {
280
+ this.handleWatchEvent(filePath, WATCH_EVENTS.add, configPaths);
281
+ });
282
+ this.watcher.on('change', filePath => {
283
+ this.handleWatchEvent(filePath, WATCH_EVENTS.change, configPaths);
284
+ });
285
+ this.watcher.on('unlink', filePath => {
286
+ this.handleWatchEvent(filePath, WATCH_EVENTS.unlink, configPaths);
287
+ });
288
+ this.watcher.on('unlinkDir', filePath => {
289
+ this.handleWatchEvent(filePath, WATCH_EVENTS.unlinkDir, configPaths);
406
290
  });
407
- }
408
- });
409
-
410
- if (missingComponents.length) {
411
- this.logUploadWarning(
412
- i18n(`${i18nKey}.uploadWarning.missingComponents`, {
413
- missingComponents: missingComponents.join(', '),
414
- })
415
- );
416
291
  }
417
- }
418
-
419
- startWatching() {
420
- this.watcher = chokidar.watch(this.projectDir, {
421
- ignoreInitial: true,
422
- });
423
-
424
- const configPaths = this.runnableComponents
425
- .filter(({ type }) => Object.values(COMPONENT_TYPES).includes(type))
426
- .map(component => {
427
- const appConfigPath = path.join(
428
- component.path,
429
- CONFIG_FILES[component.type]
430
- );
431
- return appConfigPath;
432
- });
433
-
434
- const projectConfigPath = path.join(this.projectDir, PROJECT_CONFIG_FILE);
435
- configPaths.push(projectConfigPath);
436
-
437
- this.watcher.on('add', filePath => {
438
- this.handleWatchEvent(filePath, WATCH_EVENTS.add, configPaths);
439
- });
440
- this.watcher.on('change', filePath => {
441
- this.handleWatchEvent(filePath, WATCH_EVENTS.change, configPaths);
442
- });
443
- this.watcher.on('unlink', filePath => {
444
- this.handleWatchEvent(filePath, WATCH_EVENTS.unlink, configPaths);
445
- });
446
- this.watcher.on('unlinkDir', filePath => {
447
- this.handleWatchEvent(filePath, WATCH_EVENTS.unlinkDir, configPaths);
448
- });
449
- }
450
-
451
- async stopWatching() {
452
- await this.watcher.close();
453
- }
454
-
455
- handleWatchEvent(filePath, event, configPaths) {
456
- if (configPaths.includes(filePath)) {
457
- this.logUploadWarning();
458
- } else {
459
- this.devServerFileChange(filePath, event);
292
+ async stopWatching() {
293
+ await this.watcher.close();
460
294
  }
461
- }
462
-
463
- async devServerSetup() {
464
- try {
465
- await DevServerManager.setup({
466
- components: this.runnableComponents,
467
- onUploadRequired: this.logUploadWarning.bind(this),
468
- accountId: this.targetAccountId,
469
- setActiveApp: this.setActiveApp.bind(this),
470
- });
471
- return true;
472
- } catch (e) {
473
- if (this.debug) {
474
- logger.error(e);
475
- }
476
- logger.error(
477
- i18n(`${i18nKey}.devServer.setupError`, { message: e.message })
478
- );
479
- return false;
295
+ handleWatchEvent(filePath, event, configPaths) {
296
+ if (configPaths.includes(filePath)) {
297
+ this.logUploadWarning();
298
+ }
299
+ else {
300
+ this.devServerFileChange(filePath, event);
301
+ }
480
302
  }
481
- }
482
-
483
- async devServerStart() {
484
- try {
485
- await DevServerManager.start({
486
- accountId: this.targetAccountId,
487
- projectConfig: this.projectConfig,
488
- });
489
- } catch (e) {
490
- if (this.debug) {
491
- logger.error(e);
492
- }
493
- logger.error(
494
- i18n(`${i18nKey}.devServer.startError`, { message: e.message })
495
- );
496
- process.exit(EXIT_CODES.ERROR);
303
+ async devServerSetup() {
304
+ try {
305
+ await DevServerManager.setup({
306
+ components: this.runnableComponents,
307
+ onUploadRequired: this.logUploadWarning.bind(this),
308
+ accountId: this.targetAccountId,
309
+ setActiveApp: this.setActiveApp.bind(this),
310
+ });
311
+ return true;
312
+ }
313
+ catch (e) {
314
+ if (this.debug) {
315
+ logger.error(e);
316
+ }
317
+ logger.error(i18n(`${i18nKey}.devServer.setupError`, { message: e.message }));
318
+ return false;
319
+ }
497
320
  }
498
- }
499
-
500
- devServerFileChange(filePath, event) {
501
- try {
502
- DevServerManager.fileChange({ filePath, event });
503
- } catch (e) {
504
- if (this.debug) {
505
- logger.error(e);
506
- }
507
- logger.error(
508
- i18n(`${i18nKey}.devServer.fileChangeError`, {
509
- message: e.message,
510
- })
511
- );
321
+ async devServerStart() {
322
+ try {
323
+ await DevServerManager.start({
324
+ accountId: this.targetAccountId,
325
+ projectConfig: this.projectConfig,
326
+ });
327
+ }
328
+ catch (e) {
329
+ if (this.debug) {
330
+ logger.error(e);
331
+ }
332
+ logger.error(i18n(`${i18nKey}.devServer.startError`, { message: e.message }));
333
+ process.exit(EXIT_CODES.ERROR);
334
+ }
512
335
  }
513
- }
514
-
515
- async devServerCleanup() {
516
- try {
517
- await DevServerManager.cleanup();
518
- return true;
519
- } catch (e) {
520
- if (this.debug) {
521
- logger.error(e);
522
- }
523
- logger.error(
524
- i18n(`${i18nKey}.devServer.cleanupError`, { message: e.message })
525
- );
526
- return false;
336
+ devServerFileChange(filePath, event) {
337
+ try {
338
+ DevServerManager.fileChange({ filePath, event });
339
+ }
340
+ catch (e) {
341
+ if (this.debug) {
342
+ logger.error(e);
343
+ }
344
+ logger.error(i18n(`${i18nKey}.devServer.fileChangeError`, {
345
+ message: e.message,
346
+ }));
347
+ }
348
+ }
349
+ async devServerCleanup() {
350
+ try {
351
+ await DevServerManager.cleanup();
352
+ return true;
353
+ }
354
+ catch (e) {
355
+ if (this.debug) {
356
+ logger.error(e);
357
+ }
358
+ logger.error(i18n(`${i18nKey}.devServer.cleanupError`, { message: e.message }));
359
+ return false;
360
+ }
527
361
  }
528
- }
529
362
  }
530
-
531
363
  module.exports = LocalDevManager;