@hubspot/cli 7.6.0-beta.3 → 7.6.0-beta.4

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 (324) hide show
  1. package/api/__tests__/migrate.test.d.ts +1 -0
  2. package/api/__tests__/migrate.test.js +183 -0
  3. package/bin/cli.js +6 -2
  4. package/commands/__tests__/account.test.d.ts +1 -0
  5. package/commands/__tests__/account.test.js +74 -0
  6. package/commands/__tests__/auth.test.d.ts +1 -0
  7. package/commands/__tests__/auth.test.js +43 -0
  8. package/commands/__tests__/cms.test.d.ts +1 -0
  9. package/commands/__tests__/cms.test.js +49 -0
  10. package/commands/__tests__/config.test.d.ts +1 -0
  11. package/commands/__tests__/config.test.js +49 -0
  12. package/commands/__tests__/create.test.d.ts +1 -0
  13. package/commands/__tests__/create.test.js +38 -0
  14. package/commands/__tests__/customObject.test.d.ts +1 -0
  15. package/commands/__tests__/customObject.test.js +54 -0
  16. package/commands/__tests__/doctor.test.d.ts +1 -0
  17. package/commands/__tests__/doctor.test.js +139 -0
  18. package/commands/__tests__/feedback.test.d.ts +1 -0
  19. package/commands/__tests__/feedback.test.js +62 -0
  20. package/commands/__tests__/fetch.test.d.ts +1 -0
  21. package/commands/__tests__/fetch.test.js +56 -0
  22. package/commands/__tests__/filemanager.test.d.ts +1 -0
  23. package/commands/__tests__/filemanager.test.js +50 -0
  24. package/commands/__tests__/function.test.d.ts +1 -0
  25. package/commands/__tests__/function.test.js +51 -0
  26. package/commands/__tests__/getStarted.test.d.ts +1 -0
  27. package/commands/__tests__/getStarted.test.js +170 -0
  28. package/commands/__tests__/hubdb.test.d.ts +1 -0
  29. package/commands/__tests__/hubdb.test.js +55 -0
  30. package/commands/__tests__/init.test.d.ts +1 -0
  31. package/commands/__tests__/init.test.js +47 -0
  32. package/commands/__tests__/lint.test.d.ts +1 -0
  33. package/commands/__tests__/lint.test.js +38 -0
  34. package/commands/__tests__/list.test.d.ts +1 -0
  35. package/commands/__tests__/list.test.js +47 -0
  36. package/commands/__tests__/logs.test.d.ts +1 -0
  37. package/commands/__tests__/logs.test.js +70 -0
  38. package/commands/__tests__/mcp.test.d.ts +1 -0
  39. package/commands/__tests__/mcp.test.js +51 -0
  40. package/commands/__tests__/mv.test.d.ts +1 -0
  41. package/commands/__tests__/mv.test.js +84 -0
  42. package/commands/__tests__/open.test.d.ts +1 -0
  43. package/commands/__tests__/open.test.js +96 -0
  44. package/commands/__tests__/project.test.d.ts +1 -0
  45. package/commands/__tests__/project.test.js +100 -0
  46. package/commands/__tests__/remove.test.d.ts +1 -0
  47. package/commands/__tests__/remove.test.js +77 -0
  48. package/commands/__tests__/sandbox.test.d.ts +1 -0
  49. package/commands/__tests__/sandbox.test.js +49 -0
  50. package/commands/__tests__/secret.test.d.ts +1 -0
  51. package/commands/__tests__/secret.test.js +54 -0
  52. package/commands/__tests__/testAccount.test.d.ts +1 -0
  53. package/commands/__tests__/testAccount.test.js +60 -0
  54. package/commands/__tests__/theme.test.d.ts +1 -0
  55. package/commands/__tests__/theme.test.js +52 -0
  56. package/commands/account/__tests__/auth.test.d.ts +1 -0
  57. package/commands/account/__tests__/auth.test.js +31 -0
  58. package/commands/account/__tests__/clean.test.d.ts +1 -0
  59. package/commands/account/__tests__/clean.test.js +33 -0
  60. package/commands/account/__tests__/createOverride.test.d.ts +1 -0
  61. package/commands/account/__tests__/createOverride.test.js +37 -0
  62. package/commands/account/__tests__/info.test.d.ts +1 -0
  63. package/commands/account/__tests__/info.test.js +33 -0
  64. package/commands/account/__tests__/list.test.d.ts +1 -0
  65. package/commands/account/__tests__/list.test.js +33 -0
  66. package/commands/account/__tests__/remove.test.d.ts +1 -0
  67. package/commands/account/__tests__/remove.test.js +41 -0
  68. package/commands/account/__tests__/removeOverride.d.ts +1 -0
  69. package/commands/account/__tests__/removeOverride.js +30 -0
  70. package/commands/account/__tests__/rename.test.d.ts +1 -0
  71. package/commands/account/__tests__/rename.test.js +47 -0
  72. package/commands/account/__tests__/use.test.d.ts +1 -0
  73. package/commands/account/__tests__/use.test.js +37 -0
  74. package/commands/app/__tests__/migrate.test.d.ts +1 -0
  75. package/commands/app/__tests__/migrate.test.js +129 -0
  76. package/commands/app/secret/__tests__/add.test.d.ts +1 -0
  77. package/commands/app/secret/__tests__/add.test.js +33 -0
  78. package/commands/app/secret/__tests__/delete.test.d.ts +1 -0
  79. package/commands/app/secret/__tests__/delete.test.js +33 -0
  80. package/commands/app/secret/__tests__/list.test.d.ts +1 -0
  81. package/commands/app/secret/__tests__/list.test.js +30 -0
  82. package/commands/app/secret/__tests__/update.test.d.ts +1 -0
  83. package/commands/app/secret/__tests__/update.test.js +33 -0
  84. package/commands/customObject/__tests__/create.test.d.ts +1 -0
  85. package/commands/customObject/__tests__/create.test.js +45 -0
  86. package/commands/customObject/__tests__/schema.test.d.ts +1 -0
  87. package/commands/customObject/__tests__/schema.test.js +58 -0
  88. package/commands/customObject/schema/__tests__/create.test.d.ts +1 -0
  89. package/commands/customObject/schema/__tests__/create.test.js +33 -0
  90. package/commands/customObject/schema/__tests__/delete.test.d.ts +1 -0
  91. package/commands/customObject/schema/__tests__/delete.test.js +47 -0
  92. package/commands/customObject/schema/__tests__/fetch-all.test.d.ts +1 -0
  93. package/commands/customObject/schema/__tests__/fetch-all.test.js +46 -0
  94. package/commands/customObject/schema/__tests__/fetch.test.d.ts +1 -0
  95. package/commands/customObject/schema/__tests__/fetch.test.js +50 -0
  96. package/commands/customObject/schema/__tests__/list.test.d.ts +1 -0
  97. package/commands/customObject/schema/__tests__/list.test.js +34 -0
  98. package/commands/customObject/schema/__tests__/update.test.d.ts +1 -0
  99. package/commands/customObject/schema/__tests__/update.test.js +45 -0
  100. package/commands/fetch.js +0 -1
  101. package/commands/filemanager/__tests__/fetch.test.d.ts +1 -0
  102. package/commands/filemanager/__tests__/fetch.test.js +37 -0
  103. package/commands/filemanager/__tests__/upload.test.d.ts +1 -0
  104. package/commands/filemanager/__tests__/upload.test.js +35 -0
  105. package/commands/getStarted.js +8 -14
  106. package/commands/hubdb/__tests__/clear.test.d.ts +1 -0
  107. package/commands/hubdb/__tests__/clear.test.js +33 -0
  108. package/commands/hubdb/__tests__/create.test.d.ts +1 -0
  109. package/commands/hubdb/__tests__/create.test.js +33 -0
  110. package/commands/hubdb/__tests__/delete.test.d.ts +1 -0
  111. package/commands/hubdb/__tests__/delete.test.js +33 -0
  112. package/commands/hubdb/__tests__/fetch.test.d.ts +1 -0
  113. package/commands/hubdb/__tests__/fetch.test.js +33 -0
  114. package/commands/hubdb/__tests__/list.test.d.ts +1 -0
  115. package/commands/hubdb/__tests__/list.test.js +101 -0
  116. package/commands/logs.js +0 -1
  117. package/commands/mcp/__tests__/setup.test.d.ts +1 -0
  118. package/commands/mcp/__tests__/setup.test.js +31 -0
  119. package/commands/mcp/__tests__/start.test.d.ts +1 -0
  120. package/commands/mcp/__tests__/start.test.js +32 -0
  121. package/commands/mcp/setup.js +1 -0
  122. package/commands/mcp/start.d.ts +4 -1
  123. package/commands/mcp/start.js +8 -3
  124. package/commands/open.js +14 -12
  125. package/commands/project/__tests__/add.test.d.ts +1 -0
  126. package/commands/project/__tests__/add.test.js +48 -0
  127. package/commands/project/__tests__/create.test.d.ts +1 -0
  128. package/commands/project/__tests__/create.test.js +45 -0
  129. package/commands/project/__tests__/deploy.test.d.ts +1 -0
  130. package/commands/project/__tests__/deploy.test.js +350 -0
  131. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +1 -0
  132. package/commands/project/__tests__/devUnifiedFlow.test.js +419 -0
  133. package/commands/project/__tests__/download.test.d.ts +1 -0
  134. package/commands/project/__tests__/download.test.js +44 -0
  135. package/commands/project/__tests__/fixtures/exampleProject.json +33 -0
  136. package/commands/project/__tests__/installDeps.test.d.ts +1 -0
  137. package/commands/project/__tests__/installDeps.test.js +180 -0
  138. package/commands/project/__tests__/listBuilds.test.d.ts +1 -0
  139. package/commands/project/__tests__/listBuilds.test.js +43 -0
  140. package/commands/project/__tests__/logs.test.d.ts +1 -0
  141. package/commands/project/__tests__/logs.test.js +246 -0
  142. package/commands/project/__tests__/migrate.test.d.ts +1 -0
  143. package/commands/project/__tests__/migrate.test.js +116 -0
  144. package/commands/project/__tests__/migrateApp.test.d.ts +1 -0
  145. package/commands/project/__tests__/migrateApp.test.js +87 -0
  146. package/commands/project/__tests__/open.test.d.ts +1 -0
  147. package/commands/project/__tests__/open.test.js +44 -0
  148. package/commands/project/__tests__/profile.test.d.ts +1 -0
  149. package/commands/project/__tests__/profile.test.js +47 -0
  150. package/commands/project/__tests__/upload.test.d.ts +1 -0
  151. package/commands/project/__tests__/upload.test.js +48 -0
  152. package/commands/project/__tests__/watch.test.d.ts +1 -0
  153. package/commands/project/__tests__/watch.test.js +40 -0
  154. package/commands/project/deploy.d.ts +1 -0
  155. package/commands/project/deploy.js +21 -10
  156. package/commands/sandbox/__tests__/create.test.d.ts +1 -0
  157. package/commands/sandbox/__tests__/create.test.js +36 -0
  158. package/commands/sandbox/__tests__/delete.test.d.ts +1 -0
  159. package/commands/sandbox/__tests__/delete.test.js +36 -0
  160. package/commands/secret/__tests__/addSecret.test.d.ts +1 -0
  161. package/commands/secret/__tests__/addSecret.test.js +34 -0
  162. package/commands/secret/__tests__/deleteSecret.test.d.ts +1 -0
  163. package/commands/secret/__tests__/deleteSecret.test.js +46 -0
  164. package/commands/secret/__tests__/listSecret.test.d.ts +1 -0
  165. package/commands/secret/__tests__/listSecret.test.js +34 -0
  166. package/commands/secret/__tests__/updateSecret.test.d.ts +1 -0
  167. package/commands/secret/__tests__/updateSecret.test.js +34 -0
  168. package/commands/testAccount/__tests__/create.test.d.ts +1 -0
  169. package/commands/testAccount/__tests__/create.test.js +38 -0
  170. package/commands/testAccount/__tests__/createConfig.test.d.ts +1 -0
  171. package/commands/testAccount/__tests__/createConfig.test.js +37 -0
  172. package/commands/testAccount/__tests__/delete.test.d.ts +1 -0
  173. package/commands/testAccount/__tests__/delete.test.js +36 -0
  174. package/commands/testAccount/create.js +16 -3
  175. package/commands/testAccount/createConfig.d.ts +0 -2
  176. package/commands/testAccount/createConfig.js +7 -8
  177. package/commands/theme/__tests__/generate-selectors.test.d.ts +1 -0
  178. package/commands/theme/__tests__/generate-selectors.test.js +33 -0
  179. package/commands/theme/__tests__/marketplace-validate.test.d.ts +1 -0
  180. package/commands/theme/__tests__/marketplace-validate.test.js +41 -0
  181. package/commands/theme/__tests__/preview.test.d.ts +1 -0
  182. package/commands/theme/__tests__/preview.test.js +65 -0
  183. package/lang/en.d.ts +15 -2
  184. package/lang/en.js +15 -2
  185. package/lib/__tests__/accountTypes.test.d.ts +1 -0
  186. package/lib/__tests__/accountTypes.test.js +100 -0
  187. package/lib/__tests__/buildAccount.test.d.ts +1 -0
  188. package/lib/__tests__/buildAccount.test.js +231 -0
  189. package/lib/__tests__/commonOpts.test.d.ts +1 -0
  190. package/lib/__tests__/commonOpts.test.js +87 -0
  191. package/lib/__tests__/dependencyManagement.test.d.ts +1 -0
  192. package/lib/__tests__/dependencyManagement.test.js +180 -0
  193. package/lib/__tests__/developerTestAccounts.test.d.ts +1 -0
  194. package/lib/__tests__/developerTestAccounts.test.js +180 -0
  195. package/lib/__tests__/hasFeature.test.d.ts +1 -0
  196. package/lib/__tests__/hasFeature.test.js +37 -0
  197. package/lib/__tests__/npm.test.d.ts +1 -0
  198. package/lib/__tests__/npm.test.js +62 -0
  199. package/lib/__tests__/oauth.test.d.ts +1 -0
  200. package/lib/__tests__/oauth.test.js +113 -0
  201. package/lib/__tests__/parsing.test.d.ts +1 -0
  202. package/lib/__tests__/parsing.test.js +36 -0
  203. package/lib/__tests__/polling.test.d.ts +1 -0
  204. package/lib/__tests__/polling.test.js +78 -0
  205. package/lib/__tests__/process.test.d.ts +1 -0
  206. package/lib/__tests__/process.test.js +90 -0
  207. package/lib/__tests__/projectProfiles.test.d.ts +1 -0
  208. package/lib/__tests__/projectProfiles.test.js +134 -0
  209. package/lib/__tests__/sandboxSync.test.d.ts +1 -0
  210. package/lib/__tests__/sandboxSync.test.js +131 -0
  211. package/lib/__tests__/sandboxes.test.d.ts +1 -0
  212. package/lib/__tests__/sandboxes.test.js +148 -0
  213. package/lib/__tests__/serverlessLogs.test.d.ts +1 -0
  214. package/lib/__tests__/serverlessLogs.test.js +154 -0
  215. package/lib/__tests__/usageTracking.test.d.ts +1 -0
  216. package/lib/__tests__/usageTracking.test.js +165 -0
  217. package/lib/__tests__/validation.test.d.ts +1 -0
  218. package/lib/__tests__/validation.test.js +145 -0
  219. package/lib/__tests__/yargsUtils.test.d.ts +1 -0
  220. package/lib/__tests__/yargsUtils.test.js +74 -0
  221. package/lib/app/__tests__/migrate.test.d.ts +1 -0
  222. package/lib/app/__tests__/migrate.test.js +495 -0
  223. package/lib/app/__tests__/migrate_legacy.test.d.ts +1 -0
  224. package/lib/app/__tests__/migrate_legacy.test.js +136 -0
  225. package/lib/app/migrate.js +2 -6
  226. package/lib/dependencyManagement.d.ts +1 -1
  227. package/lib/dependencyManagement.js +2 -2
  228. package/lib/doctor/Diagnosis.js +11 -11
  229. package/lib/doctor/Doctor.js +42 -42
  230. package/lib/doctor/__tests__/Diagnosis.test.d.ts +1 -0
  231. package/lib/doctor/__tests__/Diagnosis.test.js +87 -0
  232. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +1 -0
  233. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +172 -0
  234. package/lib/doctor/__tests__/Doctor.test.d.ts +1 -0
  235. package/lib/doctor/__tests__/Doctor.test.js +398 -0
  236. package/lib/errorHandlers/index.js +8 -0
  237. package/lib/mcp/setup.js +26 -5
  238. package/lib/middleware/__test__/configMiddleware.test.js +12 -12
  239. package/lib/middleware/__test__/gitMiddleware.test.js +4 -4
  240. package/lib/middleware/__test__/notificationsMiddleware.test.js +2 -2
  241. package/lib/middleware/__test__/requestMiddleware.test.js +2 -2
  242. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +7 -7
  243. package/lib/middleware/notificationsMiddleware.js +16 -13
  244. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +1 -0
  245. package/lib/projects/__tests__/AppDevModeInterface.test.js +517 -0
  246. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +1 -0
  247. package/lib/projects/__tests__/LocalDevProcess.test.js +314 -0
  248. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +1 -0
  249. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +175 -0
  250. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +1 -0
  251. package/lib/projects/__tests__/ProjectLogsManager.test.js +191 -0
  252. package/lib/projects/__tests__/buildAndDeploy.test.d.ts +1 -0
  253. package/lib/projects/__tests__/buildAndDeploy.test.js +25 -0
  254. package/lib/projects/__tests__/components.test.d.ts +1 -0
  255. package/lib/projects/__tests__/components.test.js +186 -0
  256. package/lib/projects/__tests__/projects.test.d.ts +1 -0
  257. package/lib/projects/__tests__/projects.test.js +89 -0
  258. package/lib/projects/__tests__/structure.test.d.ts +1 -0
  259. package/lib/projects/__tests__/structure.test.js +249 -0
  260. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +1 -0
  261. package/lib/projects/add/__tests__/legacyAddComponent.test.js +206 -0
  262. package/lib/projects/add/__tests__/v3AddComponent.test.d.ts +1 -0
  263. package/lib/projects/add/__tests__/v3AddComponent.test.js +190 -0
  264. package/lib/projects/create/__tests__/legacy.test.d.ts +1 -0
  265. package/lib/projects/create/__tests__/legacy.test.js +126 -0
  266. package/lib/projects/create/__tests__/v3.test.d.ts +1 -0
  267. package/lib/projects/create/__tests__/v3.test.js +80 -0
  268. package/lib/projects/create/v3.d.ts +3 -2
  269. package/lib/projects/create/v3.js +2 -2
  270. package/lib/projects/localDev/DevServerManager.js +0 -1
  271. package/lib/projects/upload.js +1 -1
  272. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +1 -0
  273. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +30 -0
  274. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +1 -0
  275. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +42 -0
  276. package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +10 -9
  277. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +75 -31
  278. package/lib/prompts/createModulePrompt.js +1 -2
  279. package/lib/prompts/projectAddPrompt.d.ts +2 -1
  280. package/lib/prompts/projectAddPrompt.js +2 -1
  281. package/lib/prompts/promptUtils.d.ts +2 -2
  282. package/lib/prompts/promptUtils.js +161 -35
  283. package/lib/prompts/selectProjectTemplatePrompt.d.ts +2 -1
  284. package/lib/prompts/selectProjectTemplatePrompt.js +2 -1
  285. package/lib/schema.js +5 -1
  286. package/lib/testUtils.js +1 -2
  287. package/lib/ui/SpinniesManager.js +0 -1
  288. package/lib/ui/index.js +1 -1
  289. package/lib/ui/supportHyperlinks.js +2 -2
  290. package/lib/ui/supportsColor.js +2 -2
  291. package/lib/usageTracking.d.ts +11 -0
  292. package/lib/usageTracking.js +67 -73
  293. package/lib/utils/hasFlag.d.ts +1 -0
  294. package/lib/utils/hasFlag.js +15 -0
  295. package/lib/yargsUtils.d.ts +2 -1
  296. package/lib/yargsUtils.js +3 -13
  297. package/mcp-server/tools/project/AddFeatureToProject.js +4 -1
  298. package/mcp-server/tools/project/CreateProjectTool.d.ts +2 -2
  299. package/mcp-server/tools/project/CreateProjectTool.js +4 -1
  300. package/mcp-server/tools/project/DeployProject.js +4 -1
  301. package/mcp-server/tools/project/GuidedWalkthroughTool.js +4 -1
  302. package/mcp-server/tools/project/UploadProjectTools.js +4 -1
  303. package/mcp-server/tools/project/ValidateProjectTool.js +4 -1
  304. package/mcp-server/tools/project/__tests__/AddFeatureToProject.test.d.ts +1 -0
  305. package/mcp-server/tools/project/__tests__/AddFeatureToProject.test.js +153 -0
  306. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +1 -0
  307. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +130 -0
  308. package/mcp-server/tools/project/__tests__/DeployProject.test.d.ts +1 -0
  309. package/mcp-server/tools/project/__tests__/DeployProject.test.js +121 -0
  310. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +1 -0
  311. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +128 -0
  312. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +1 -0
  313. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +109 -0
  314. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +1 -0
  315. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +112 -0
  316. package/mcp-server/utils/__tests__/command.test.d.ts +1 -0
  317. package/mcp-server/utils/__tests__/command.test.js +47 -0
  318. package/mcp-server/utils/__tests__/project.test.d.ts +1 -0
  319. package/mcp-server/utils/__tests__/project.test.js +84 -0
  320. package/mcp-server/utils/project.js +3 -0
  321. package/mcp-server/utils/toolUsageTracking.d.ts +1 -0
  322. package/mcp-server/utils/toolUsageTracking.js +25 -0
  323. package/package.json +9 -9
  324. package/types/Prompts.d.ts +4 -2
@@ -0,0 +1,398 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Doctor_1 = require("../Doctor");
4
+ const dependencyManagement_1 = require("../../dependencyManagement");
5
+ const portManager_1 = require("@hubspot/local-dev-lib/portManager");
6
+ const personalAccessKey_1 = require("@hubspot/local-dev-lib/personalAccessKey");
7
+ const HubSpotHttpError_1 = require("@hubspot/local-dev-lib/models/HubSpotHttpError");
8
+ const axios_1 = require("axios");
9
+ const index_1 = require("@hubspot/local-dev-lib/errors/index");
10
+ const util_1 = require("util");
11
+ vi.mock('@hubspot/local-dev-lib/logger');
12
+ vi.mock('../Diagnosis');
13
+ vi.mock('../../ui/SpinniesManager');
14
+ vi.mock('../DiagnosticInfoBuilder');
15
+ vi.mock('../../dependencyManagement');
16
+ vi.mock('../../npm');
17
+ vi.mock('@hubspot/local-dev-lib/portManager');
18
+ vi.mock('@hubspot/local-dev-lib/personalAccessKey');
19
+ vi.mock('@hubspot/local-dev-lib/errors/index');
20
+ vi.mock('util');
21
+ const hasMissingPackages = vi.mocked(dependencyManagement_1.hasMissingPackages);
22
+ const isPortManagerPortAvailable = vi.mocked(portManager_1.isPortManagerPortAvailable);
23
+ const utilPromisify = vi.mocked(util_1.promisify);
24
+ const accessTokenForPersonalAccessKey = vi.mocked(personalAccessKey_1.accessTokenForPersonalAccessKey);
25
+ const authorizedScopesForPortalAndUser = vi.mocked(personalAccessKey_1.authorizedScopesForPortalAndUser);
26
+ const scopesOnAccessToken = vi.mocked(personalAccessKey_1.scopesOnAccessToken);
27
+ const isSpecifiedError = vi.mocked(index_1.isSpecifiedError);
28
+ describe('lib/doctor/Doctor', () => {
29
+ let doctor;
30
+ // @ts-ignore
31
+ const diagnosticInfo = {
32
+ account: {},
33
+ arch: 'x64',
34
+ config: 'path/to/config',
35
+ configSettings: { httpUseLocalhost: false },
36
+ configFiles: ['src/serverless.json'],
37
+ diagnosis: '',
38
+ envFiles: [],
39
+ files: [],
40
+ jsonFiles: ['src/serverless.json', 'src/extension.json'],
41
+ packageFiles: ['src/package.json'],
42
+ packageLockFiles: ['src/package-lock.json'],
43
+ path: '',
44
+ platform: 'darwin',
45
+ project: {
46
+ config: {
47
+ projectDir: '/path/to/project',
48
+ projectConfig: {
49
+ name: 'my-project',
50
+ srcDir: '/path/to/project',
51
+ platformVersion: 'test',
52
+ },
53
+ },
54
+ },
55
+ versions: {
56
+ node: '18.1.2',
57
+ '@hubspot/cli': '6.0.0',
58
+ npm: '6.14.13',
59
+ },
60
+ };
61
+ beforeEach(() => {
62
+ doctor = new Doctor_1.Doctor({
63
+ generateDiagnosticInfo: vi.fn().mockResolvedValue({
64
+ ...diagnosticInfo,
65
+ }),
66
+ });
67
+ utilPromisify.mockReturnValue(vi.fn().mockImplementation((filename) => {
68
+ if (filename.includes('invalid')) {
69
+ return 'not-valid-json';
70
+ }
71
+ return JSON.stringify({ valid: true });
72
+ }));
73
+ });
74
+ afterEach(() => {
75
+ vi.clearAllMocks();
76
+ });
77
+ describe('CLI Checks', () => {
78
+ describe('node version', () => {
79
+ it('should add success section if node version is valid', async () => {
80
+ await doctor.diagnose();
81
+ // @ts-expect-error Testing private method
82
+ expect(doctor.diagnosis.addCliSection).toHaveBeenCalledWith({
83
+ type: 'success',
84
+ message: `node v${diagnosticInfo.versions.node} is installed`,
85
+ });
86
+ });
87
+ it('should add error section if node version is not available', async () => {
88
+ doctor = new Doctor_1.Doctor({
89
+ generateDiagnosticInfo: vi.fn().mockResolvedValue({
90
+ ...diagnosticInfo,
91
+ versions: {},
92
+ }),
93
+ });
94
+ await doctor.diagnose();
95
+ // @ts-expect-error Testing private method
96
+ expect(doctor.diagnosis.addCliSection).toHaveBeenCalledWith({
97
+ type: 'error',
98
+ message: 'Unable to determine what version of node is installed',
99
+ });
100
+ });
101
+ it('should add error section if minimum node version is not met', async () => {
102
+ doctor = new Doctor_1.Doctor({
103
+ generateDiagnosticInfo: vi.fn().mockResolvedValue({
104
+ ...diagnosticInfo,
105
+ versions: { node: '1.0.0' },
106
+ }),
107
+ });
108
+ await doctor.diagnose();
109
+ // @ts-expect-error Testing private method
110
+ expect(doctor.diagnosis.addCliSection).toHaveBeenCalledWith({
111
+ type: 'warning',
112
+ message: expect.stringMatching(/Minimum Node version is not met/),
113
+ });
114
+ });
115
+ });
116
+ describe('npm version', () => {
117
+ it('should add success section if npm is installed', async () => {
118
+ await doctor.diagnose();
119
+ // @ts-expect-error Testing private method
120
+ expect(doctor.diagnosis.addCliSection).toHaveBeenCalledWith({
121
+ type: 'success',
122
+ message: `npm v${diagnosticInfo.versions.npm} is installed`,
123
+ });
124
+ });
125
+ it('should add error section if npm is not installed', async () => {
126
+ doctor = new Doctor_1.Doctor({
127
+ generateDiagnosticInfo: vi.fn().mockResolvedValue({
128
+ ...diagnosticInfo,
129
+ versions: {},
130
+ }),
131
+ });
132
+ await doctor.diagnose();
133
+ // @ts-expect-error Testing private method
134
+ expect(doctor.diagnosis.addCliSection).toHaveBeenCalledWith({
135
+ type: 'error',
136
+ message: expect.any(String),
137
+ });
138
+ });
139
+ });
140
+ });
141
+ describe('CLI Config Checks', () => {
142
+ describe('Personal Access Key', () => {
143
+ it('should add success sections if the access token is valid', async () => {
144
+ scopesOnAccessToken.mockResolvedValueOnce(['scope1']);
145
+ authorizedScopesForPortalAndUser.mockResolvedValueOnce([
146
+ {
147
+ scopeGroup: {
148
+ name: 'scope1',
149
+ shortDescription: 'scope1',
150
+ longDescription: 'scope1',
151
+ },
152
+ portalAuthorized: true,
153
+ userAuthorized: true,
154
+ },
155
+ ]);
156
+ await doctor.diagnose();
157
+ // @ts-expect-error Testing private method
158
+ expect(doctor.diagnosis.addCLIConfigSection).toHaveBeenCalledWith({
159
+ type: 'success',
160
+ message: 'Default account active',
161
+ });
162
+ // @ts-expect-error Testing private method
163
+ expect(doctor.diagnosis.addCLIConfigSection).toHaveBeenCalledWith({
164
+ type: 'success',
165
+ message: expect.stringMatching(/Personal Access Key is valid./),
166
+ });
167
+ });
168
+ it('should add an error section if it is unable to determine if the portal is active', async () => {
169
+ accessTokenForPersonalAccessKey.mockRejectedValueOnce(new HubSpotHttpError_1.HubSpotHttpError('Invalid token', { cause: new axios_1.AxiosError() }));
170
+ await doctor.diagnose();
171
+ // @ts-expect-error Testing private method
172
+ expect(doctor.diagnosis.addCLIConfigSection).toHaveBeenCalledWith({
173
+ type: 'error',
174
+ message: 'Unable to determine if the portal is active',
175
+ });
176
+ });
177
+ it('should add an error section if the portal is inactive', async () => {
178
+ accessTokenForPersonalAccessKey.mockRejectedValueOnce(new HubSpotHttpError_1.HubSpotHttpError('Invalid token'));
179
+ isSpecifiedError.mockImplementation((err, fields) => {
180
+ return (fields.statusCode === 401 &&
181
+ fields.category === 'INVALID_AUTHENTICATION' &&
182
+ fields?.subCategory === 'LocalDevAuthErrorType.PORTAL_NOT_ACTIVE');
183
+ });
184
+ await doctor.diagnose();
185
+ // @ts-expect-error Testing private method
186
+ expect(doctor.diagnosis.addCLIConfigSection).toHaveBeenCalledWith({
187
+ type: 'error',
188
+ message: "Default account isn't active",
189
+ secondaryMessaging: expect.stringMatching(/to remove inactive accounts from your CLI config/),
190
+ });
191
+ });
192
+ it('should add an error section if the portal is not found', async () => {
193
+ accessTokenForPersonalAccessKey.mockRejectedValueOnce(new HubSpotHttpError_1.HubSpotHttpError('Not found'));
194
+ isSpecifiedError.mockImplementation((err, fields) => {
195
+ return (fields.statusCode === 404 &&
196
+ fields.category === 'INVALID_AUTHENTICATION' &&
197
+ fields?.subCategory === 'LocalDevAuthErrorType.INVALID_PORTAL_ID');
198
+ });
199
+ await doctor.diagnose();
200
+ // @ts-expect-error Testing private method
201
+ expect(doctor.diagnosis.addCLIConfigSection).toHaveBeenCalledWith({
202
+ type: 'error',
203
+ message: "Default account isn't active",
204
+ secondaryMessaging: expect.stringMatching(/to remove inactive accounts from your CLI config/),
205
+ });
206
+ });
207
+ it('should add multiple sections if token is invalid but the portal is active', async () => {
208
+ accessTokenForPersonalAccessKey.mockRejectedValueOnce(new HubSpotHttpError_1.HubSpotHttpError('Not found'));
209
+ isSpecifiedError.mockImplementation((err, fields) => {
210
+ return (fields.statusCode === 401 &&
211
+ fields.category === 'INVALID_AUTHENTICATION' &&
212
+ fields?.subCategory ===
213
+ 'LocalDevAuthErrorType.FAILED_TO_SIGN_REFRESH_TOKEN_DECODE');
214
+ });
215
+ await doctor.diagnose();
216
+ // @ts-expect-error Testing private method
217
+ expect(doctor.diagnosis.addCLIConfigSection).toHaveBeenCalledWith({
218
+ type: 'success',
219
+ message: 'Default account active',
220
+ });
221
+ // @ts-expect-error Testing private method
222
+ expect(doctor.diagnosis.addCLIConfigSection).toHaveBeenCalledWith({
223
+ type: 'error',
224
+ message: 'Personal access key is invalid',
225
+ secondaryMessaging: expect.stringMatching(/To get a new key, run/),
226
+ });
227
+ });
228
+ it('should add an error section if we are unable to determine if the portal is active', async () => {
229
+ accessTokenForPersonalAccessKey.mockRejectedValueOnce(new HubSpotHttpError_1.HubSpotHttpError('Not found'));
230
+ isSpecifiedError.mockReturnValue(false);
231
+ await doctor.diagnose();
232
+ // @ts-expect-error Testing private method
233
+ expect(doctor.diagnosis.addCLIConfigSection).toHaveBeenCalledWith({
234
+ type: 'error',
235
+ message: 'Unable to determine if the portal is active',
236
+ });
237
+ });
238
+ it('should warn when there are missing authorized scopes', async () => {
239
+ scopesOnAccessToken.mockResolvedValueOnce(['scope1', 'scope2']);
240
+ authorizedScopesForPortalAndUser.mockResolvedValueOnce([
241
+ {
242
+ scopeGroup: {
243
+ name: 'scope1',
244
+ shortDescription: 'scope1',
245
+ longDescription: 'scope1',
246
+ },
247
+ portalAuthorized: true,
248
+ userAuthorized: true,
249
+ },
250
+ {
251
+ scopeGroup: {
252
+ name: 'scope2',
253
+ shortDescription: 'scope2',
254
+ longDescription: 'scope2',
255
+ },
256
+ portalAuthorized: true,
257
+ userAuthorized: true,
258
+ },
259
+ {
260
+ scopeGroup: {
261
+ name: 'scope3',
262
+ shortDescription: 'scope3',
263
+ longDescription: 'scope3',
264
+ },
265
+ portalAuthorized: true,
266
+ userAuthorized: true,
267
+ },
268
+ ]);
269
+ await doctor.diagnose();
270
+ expect(doctor['diagnosis']?.addCLIConfigSection).toHaveBeenCalledWith({
271
+ type: 'warning',
272
+ message: 'Personal access key is valid, but there are more scopes available to your user that are not included in your key.',
273
+ secondaryMessaging: expect.any(String),
274
+ });
275
+ });
276
+ it('should not warn when the missing scope is not authorized', async () => {
277
+ scopesOnAccessToken.mockResolvedValueOnce(['scope1']);
278
+ authorizedScopesForPortalAndUser.mockResolvedValueOnce([
279
+ {
280
+ scopeGroup: {
281
+ name: 'scope1',
282
+ shortDescription: 'scope1',
283
+ longDescription: 'scope1',
284
+ },
285
+ portalAuthorized: true,
286
+ userAuthorized: true,
287
+ },
288
+ {
289
+ scopeGroup: {
290
+ name: 'scope2',
291
+ shortDescription: 'scope2',
292
+ longDescription: 'scope2',
293
+ },
294
+ portalAuthorized: true,
295
+ userAuthorized: false,
296
+ },
297
+ ]);
298
+ await doctor.diagnose();
299
+ expect(doctor['diagnosis']?.addCLIConfigSection).toHaveBeenCalledWith({
300
+ type: 'success',
301
+ message: expect.stringMatching(/Personal Access Key is valid./),
302
+ });
303
+ });
304
+ });
305
+ });
306
+ describe('Project Checks', () => {
307
+ describe('Dependencies', () => {
308
+ it('should add warning section if dependencies are missing', async () => {
309
+ hasMissingPackages.mockResolvedValue(true);
310
+ await doctor.diagnose();
311
+ // @ts-expect-error Testing private method
312
+ expect(doctor.diagnosis.addProjectSection).toHaveBeenCalledWith({
313
+ type: 'warning',
314
+ message: expect.stringMatching(/missing dependencies in/),
315
+ secondaryMessaging: expect.stringMatching(/to install all project dependencies locally/),
316
+ });
317
+ });
318
+ it('should add success section if no dependencies are missing', async () => {
319
+ hasMissingPackages.mockResolvedValue(false);
320
+ await doctor.diagnose();
321
+ // @ts-expect-error Testing private method
322
+ expect(doctor.diagnosis.addProjectSection).toHaveBeenCalledWith({
323
+ type: 'success',
324
+ message: 'App dependencies are installed and up to date',
325
+ });
326
+ });
327
+ it('should add error section if the package.json file is invalid JSON', async () => {
328
+ hasMissingPackages.mockImplementationOnce(() => {
329
+ throw new Error('Uh oh');
330
+ });
331
+ utilPromisify.mockReturnValueOnce(vi.fn().mockImplementation((filename) => {
332
+ if (filename.endsWith('package.json')) {
333
+ return 'not-valid-json';
334
+ }
335
+ return JSON.stringify({ valid: true });
336
+ }));
337
+ await doctor.diagnose();
338
+ // @ts-expect-error Testing private method
339
+ expect(doctor.diagnosis.addProjectSection).toHaveBeenCalledWith({
340
+ type: 'error',
341
+ message: expect.stringMatching(/invalid JSON in/),
342
+ });
343
+ });
344
+ it('should add error section if it is unable to determine if dependencies need installed', async () => {
345
+ hasMissingPackages.mockImplementationOnce(() => {
346
+ throw new Error('Uh oh');
347
+ });
348
+ await doctor.diagnose();
349
+ // @ts-expect-error Testing private method
350
+ expect(doctor.diagnosis.addProjectSection).toHaveBeenCalledWith({
351
+ type: 'error',
352
+ message: expect.stringMatching(/Unable to determine if dependencies are installed/),
353
+ });
354
+ });
355
+ });
356
+ describe('Port', () => {
357
+ it('should add warning section if port is in use', async () => {
358
+ isPortManagerPortAvailable.mockResolvedValue(false);
359
+ await doctor.diagnose();
360
+ // @ts-expect-error Testing private method
361
+ expect(doctor.diagnosis?.addProjectSection).toHaveBeenCalledWith({
362
+ type: 'warning',
363
+ message: 'Port 8080 is in use',
364
+ secondaryMessaging: expect.stringMatching(/Make sure it is available if before running/),
365
+ });
366
+ });
367
+ it('should add success section if port is available', async () => {
368
+ isPortManagerPortAvailable.mockResolvedValue(true);
369
+ await doctor.diagnose();
370
+ // @ts-expect-error Testing private method
371
+ expect(doctor.diagnosis.addProjectSection).toHaveBeenCalledWith({
372
+ type: 'success',
373
+ message: 'Port 8080 available for local development',
374
+ });
375
+ });
376
+ });
377
+ describe('JSON Files', () => {
378
+ it('should add success section if project json files are valid', async () => {
379
+ utilPromisify.mockReturnValueOnce(vi.fn().mockResolvedValue(JSON.stringify({ valid: true })));
380
+ await doctor.diagnose();
381
+ // @ts-expect-error Testing private method
382
+ expect(doctor.diagnosis.addProjectSection).toHaveBeenCalledWith({
383
+ type: 'success',
384
+ message: 'JSON files valid',
385
+ });
386
+ });
387
+ it('should add error section if project json files are invalid', async () => {
388
+ utilPromisify.mockReturnValueOnce(vi.fn().mockResolvedValue('not-valid-json'));
389
+ await doctor.diagnose();
390
+ // @ts-expect-error Testing private method
391
+ expect(doctor.diagnosis.addProjectSection).toHaveBeenCalledWith({
392
+ type: 'error',
393
+ message: expect.stringMatching(/invalid JSON in/),
394
+ });
395
+ });
396
+ });
397
+ });
398
+ });
@@ -13,8 +13,12 @@ const suppressError_1 = require("./suppressError");
13
13
  const lang_1 = require("../lang");
14
14
  const util_1 = __importDefault(require("util"));
15
15
  const ui_1 = require("../ui");
16
+ const exitCodes_1 = require("../enums/exitCodes");
16
17
  function logError(error, context) {
17
18
  debugError(error, context);
19
+ if (isUserCancellationError(error)) {
20
+ process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
21
+ }
18
22
  if (isProjectValidationError(error)) {
19
23
  logger_1.logger.error(error.message);
20
24
  return;
@@ -101,3 +105,7 @@ function isErrorWithMessageOrReason(error) {
101
105
  error !== null &&
102
106
  ('message' in error || 'reason' in error));
103
107
  }
108
+ // Error specific to inquirer prompts - they catch Ctrl+C and return this error
109
+ function isUserCancellationError(error) {
110
+ return error instanceof Error && error.name === 'ExitPromptError';
111
+ }
package/lib/mcp/setup.js CHANGED
@@ -112,9 +112,9 @@ function setupMcpConfigFile(config) {
112
112
  fs_extra_1.default.writeFileSync(config.configPath, JSON.stringify({}, null, 2));
113
113
  }
114
114
  let mcpConfig = {};
115
+ let configContent;
115
116
  try {
116
- const configContent = fs_extra_1.default.readFileSync(config.configPath, 'utf8');
117
- mcpConfig = JSON.parse(configContent);
117
+ configContent = fs_extra_1.default.readFileSync(config.configPath, 'utf8');
118
118
  }
119
119
  catch (error) {
120
120
  SpinniesManager_1.default.fail('spinner', {
@@ -123,6 +123,22 @@ function setupMcpConfigFile(config) {
123
123
  (0, errorHandlers_1.logError)(error);
124
124
  return false;
125
125
  }
126
+ try {
127
+ // In the event the file exists, but is empty, initialize it to and empty object
128
+ if (configContent.trim() === '') {
129
+ mcpConfig = {};
130
+ }
131
+ else {
132
+ mcpConfig = JSON.parse(configContent);
133
+ }
134
+ }
135
+ catch (error) {
136
+ SpinniesManager_1.default.fail('spinner', {
137
+ text: config.failedMessage,
138
+ });
139
+ logger_1.uiLogger.error(en_1.commands.mcp.setup.errors.errorParsingJsonFIle(config.configPath, error instanceof Error ? error.message : `${error}`));
140
+ return false;
141
+ }
126
142
  // Initialize mcpServers if it doesn't exist
127
143
  if (!mcpConfig.mcpServers) {
128
144
  mcpConfig.mcpServers = {};
@@ -157,7 +173,7 @@ async function setupClaudeCode(mcpCommand = defaultMcpCommand) {
157
173
  // Run claude mcp add command
158
174
  const mcpConfig = JSON.stringify({
159
175
  type: 'stdio',
160
- ...mcpCommand,
176
+ ...buildCommandWithAgentString(mcpCommand, claudeCode),
161
177
  });
162
178
  const { stdout } = await (0, command_1.execAsync)('claude mcp list');
163
179
  if (stdout.includes(mcpServerName)) {
@@ -203,7 +219,7 @@ function setupCursor(mcpCommand = defaultMcpCommand) {
203
219
  configuringMessage: en_1.commands.mcp.setup.spinners.configuringCursor,
204
220
  configuredMessage: en_1.commands.mcp.setup.spinners.configuredCursor,
205
221
  failedMessage: en_1.commands.mcp.setup.spinners.failedToConfigureCursor,
206
- mcpCommand,
222
+ mcpCommand: buildCommandWithAgentString(mcpCommand, cursor),
207
223
  });
208
224
  }
209
225
  function setupWindsurf(mcpCommand = defaultMcpCommand) {
@@ -213,6 +229,11 @@ function setupWindsurf(mcpCommand = defaultMcpCommand) {
213
229
  configuringMessage: en_1.commands.mcp.setup.spinners.configuringWindsurf,
214
230
  configuredMessage: en_1.commands.mcp.setup.spinners.configuredWindsurf,
215
231
  failedMessage: en_1.commands.mcp.setup.spinners.failedToConfigureWindsurf,
216
- mcpCommand,
232
+ mcpCommand: buildCommandWithAgentString(mcpCommand, windsurf),
217
233
  });
218
234
  }
235
+ function buildCommandWithAgentString(mcpCommand, agent) {
236
+ const mcpCommandCopy = structuredClone(mcpCommand);
237
+ mcpCommandCopy.args.push('--ai-agent', agent);
238
+ return mcpCommandCopy;
239
+ }
@@ -38,21 +38,21 @@ const cliConfig = __importStar(require("@hubspot/local-dev-lib/config"));
38
38
  const validation = __importStar(require("../../validation"));
39
39
  const exitCodes_1 = require("../../enums/exitCodes");
40
40
  const configMiddleware_1 = require("../configMiddleware");
41
- jest.mock('@hubspot/local-dev-lib/logger', () => ({
41
+ vi.mock('@hubspot/local-dev-lib/logger', () => ({
42
42
  logger: {
43
- error: jest.fn(),
44
- log: jest.fn(),
43
+ error: vi.fn(),
44
+ log: vi.fn(),
45
45
  },
46
46
  }));
47
- jest.mock('@hubspot/local-dev-lib/config');
48
- jest.mock('../../validation');
49
- const validateAccountSpy = jest.spyOn(validation, 'validateAccount');
50
- const loadConfigSpy = jest.spyOn(cliConfig, 'loadConfig');
51
- const getAccountIdSpy = jest.spyOn(cliConfig, 'getAccountId');
52
- const configFileExistsSpy = jest.spyOn(cliConfig, 'configFileExists');
53
- const getConfigPathSpy = jest.spyOn(cliConfig, 'getConfigPath');
54
- const validateConfigSpy = jest.spyOn(cliConfig, 'validateConfig');
55
- const processExitSpy = jest.spyOn(process, 'exit');
47
+ vi.mock('@hubspot/local-dev-lib/config');
48
+ vi.mock('../../validation');
49
+ const validateAccountSpy = vi.spyOn(validation, 'validateAccount');
50
+ const loadConfigSpy = vi.spyOn(cliConfig, 'loadConfig');
51
+ const getAccountIdSpy = vi.spyOn(cliConfig, 'getAccountId');
52
+ const configFileExistsSpy = vi.spyOn(cliConfig, 'configFileExists');
53
+ const getConfigPathSpy = vi.spyOn(cliConfig, 'getConfigPath');
54
+ const validateConfigSpy = vi.spyOn(cliConfig, 'validateConfig');
55
+ const processExitSpy = vi.spyOn(process, 'exit');
56
56
  describe('lib/middleware/configMiddleware', () => {
57
57
  beforeEach(() => {
58
58
  processExitSpy.mockImplementation(code => {
@@ -36,10 +36,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const config = __importStar(require("@hubspot/local-dev-lib/config"));
37
37
  const gitUI = __importStar(require("../../ui/git"));
38
38
  const gitMiddleware_1 = require("../gitMiddleware");
39
- jest.mock('@hubspot/local-dev-lib/config');
40
- jest.mock('../../ui/git');
41
- const getConfigPathSpy = jest.spyOn(config, 'getConfigPath');
42
- const checkAndWarnGitInclusionSpy = jest.spyOn(gitUI, 'checkAndWarnGitInclusion');
39
+ vi.mock('@hubspot/local-dev-lib/config');
40
+ vi.mock('../../ui/git');
41
+ const getConfigPathSpy = vi.spyOn(config, 'getConfigPath');
42
+ const checkAndWarnGitInclusionSpy = vi.spyOn(gitUI, 'checkAndWarnGitInclusion');
43
43
  describe('lib/middleware/gitMiddleware', () => {
44
44
  describe('checkAndWarnGitInclusionMiddleware()', () => {
45
45
  it('should call checkAndWarnGitInclusion when command is provided and config path exists', () => {
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const { notifyAboutUpdates } = require('../notificationsMiddleware');
3
+ const notificationsMiddleware_1 = require("../notificationsMiddleware");
4
4
  describe('lib/middleware/notificationsMiddleware', () => {
5
5
  describe('notifyAboutUpdates()', () => {
6
6
  it('should safely execute without throwing an error', () => {
7
- expect(() => notifyAboutUpdates()).not.toThrow();
7
+ expect(() => (0, notificationsMiddleware_1.notifyAboutUpdates)()).not.toThrow();
8
8
  });
9
9
  });
10
10
  });
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const http_1 = require("@hubspot/local-dev-lib/http");
7
7
  const requestMiddleware_1 = require("../requestMiddleware");
8
8
  const package_json_1 = __importDefault(require("../../../package.json"));
9
- jest.mock('@hubspot/local-dev-lib/http', () => ({
10
- addUserAgentHeader: jest.fn(),
9
+ vi.mock('@hubspot/local-dev-lib/http', () => ({
10
+ addUserAgentHeader: vi.fn(),
11
11
  }));
12
12
  describe('lib/middleware/requestMiddleware', () => {
13
13
  describe('setRequestHeaders()', () => {
@@ -37,17 +37,17 @@ const logger_1 = require("@hubspot/local-dev-lib/logger");
37
37
  const exitCodes_1 = require("../../enums/exitCodes");
38
38
  const projectsConfig = __importStar(require("../../projects/config"));
39
39
  const yargsChecksMiddleware_1 = require("../yargsChecksMiddleware");
40
- jest.mock('@hubspot/local-dev-lib/logger', () => ({
40
+ vi.mock('@hubspot/local-dev-lib/logger', () => ({
41
41
  logger: {
42
- error: jest.fn(),
42
+ error: vi.fn(),
43
43
  },
44
44
  }));
45
- jest.mock('../../projects/config');
46
- jest.mock('../../lang', () => ({
47
- i18n: jest.fn(key => key),
45
+ vi.mock('../../projects/config');
46
+ vi.mock('../../lang', () => ({
47
+ i18n: vi.fn(key => key),
48
48
  }));
49
- const getIsInProjectSpy = jest.spyOn(projectsConfig, 'getIsInProject');
50
- const processExitSpy = jest.spyOn(process, 'exit');
49
+ const getIsInProjectSpy = vi.spyOn(projectsConfig, 'getIsInProject');
50
+ const processExitSpy = vi.spyOn(process, 'exit');
51
51
  describe('lib/middleware/yargsChecksMiddleware', () => {
52
52
  beforeEach(() => {
53
53
  processExitSpy.mockImplementation(code => {
@@ -1,38 +1,41 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.notifyAboutUpdates = notifyAboutUpdates;
4
7
  // Update-notifier is CommonJS, so we need to use require
5
8
  const updateNotifier = require('update-notifier');
6
- const chalk = require('chalk');
7
- const pkg = require('../../package.json');
8
- const { UI_COLORS, uiCommandReference } = require('../ui');
9
- const { i18n } = require('../lang');
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const package_json_1 = __importDefault(require("../../package.json"));
11
+ const ui_1 = require("../ui");
12
+ const lang_1 = require("../lang");
10
13
  const notifier = updateNotifier({
11
- pkg: { ...pkg, name: '@hubspot/cli' },
14
+ pkg: { ...package_json_1.default, name: '@hubspot/cli' },
12
15
  distTag: 'latest',
13
16
  shouldNotifyInNpmScript: true,
14
17
  });
15
18
  const CMS_CLI_PACKAGE_NAME = '@hubspot/cms-cli';
16
19
  function notifyAboutUpdates() {
17
20
  notifier.notify({
18
- message: pkg.name === CMS_CLI_PACKAGE_NAME
19
- ? i18n(`commands.generalErrors.updateNotify.cmsUpdateNotification`, {
21
+ message: package_json_1.default.name === CMS_CLI_PACKAGE_NAME
22
+ ? (0, lang_1.i18n)(`commands.generalErrors.updateNotify.cmsUpdateNotification`, {
20
23
  packageName: CMS_CLI_PACKAGE_NAME,
21
- updateCommand: uiCommandReference('{updateCommand}'),
24
+ updateCommand: (0, ui_1.uiCommandReference)('{updateCommand}'),
22
25
  })
23
- : i18n(`commands.generalErrors.updateNotify.cliUpdateNotification`, {
24
- updateCommand: uiCommandReference('{updateCommand}'),
26
+ : (0, lang_1.i18n)(`commands.generalErrors.updateNotify.cliUpdateNotification`, {
27
+ updateCommand: (0, ui_1.uiCommandReference)('{updateCommand}'),
25
28
  }),
26
29
  defer: false,
27
30
  boxenOptions: {
28
- borderColor: UI_COLORS.MARIGOLD_DARK,
31
+ borderColor: ui_1.UI_COLORS.MARIGOLD_DARK,
29
32
  margin: 1,
30
33
  padding: 1,
31
34
  textAlignment: 'center',
32
35
  borderStyle: 'round',
33
- title: pkg.name === CMS_CLI_PACKAGE_NAME
36
+ title: package_json_1.default.name === CMS_CLI_PACKAGE_NAME
34
37
  ? null
35
- : chalk.bold(i18n(`commands.generalErrors.updateNotify.notifyTitle`)),
38
+ : chalk_1.default.bold((0, lang_1.i18n)(`commands.generalErrors.updateNotify.notifyTitle`)),
36
39
  },
37
40
  });
38
41
  }