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