@hubspot/cli 7.6.0-beta.5 → 7.6.0-beta.6

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 (587) hide show
  1. package/api/__tests__/migrate.test.js +27 -29
  2. package/api/migrate.d.ts +7 -0
  3. package/api/migrate.js +22 -22
  4. package/bin/cli.js +92 -97
  5. package/bin/hs +2 -2
  6. package/bin/hscms +2 -2
  7. package/bin/silenceErrors.js +1 -2
  8. package/commands/__tests__/account.test.js +29 -34
  9. package/commands/__tests__/auth.test.js +11 -16
  10. package/commands/__tests__/cms.test.js +15 -20
  11. package/commands/__tests__/config.test.js +14 -19
  12. package/commands/__tests__/create.test.js +10 -15
  13. package/commands/__tests__/customObject.test.js +14 -19
  14. package/commands/__tests__/doctor.test.js +43 -48
  15. package/commands/__tests__/feedback.test.js +7 -45
  16. package/commands/__tests__/fetch.test.js +29 -28
  17. package/commands/__tests__/filemanager.test.js +14 -19
  18. package/commands/__tests__/function.test.js +16 -21
  19. package/commands/__tests__/getStarted.test.js +45 -50
  20. package/commands/__tests__/hubdb.test.js +17 -22
  21. package/commands/__tests__/init.test.js +12 -17
  22. package/commands/__tests__/lint.test.js +13 -18
  23. package/commands/__tests__/list.test.js +18 -23
  24. package/commands/__tests__/logs.test.js +28 -27
  25. package/commands/__tests__/mcp.test.js +14 -19
  26. package/commands/__tests__/mv.test.js +14 -52
  27. package/commands/__tests__/open.test.js +13 -51
  28. package/commands/__tests__/project.test.js +44 -49
  29. package/commands/__tests__/remove.test.js +13 -51
  30. package/commands/__tests__/sandbox.test.js +14 -19
  31. package/commands/__tests__/secret.test.js +16 -21
  32. package/commands/__tests__/testAccount.test.js +16 -21
  33. package/commands/__tests__/theme.test.js +15 -20
  34. package/commands/account/__tests__/auth.test.js +11 -16
  35. package/commands/account/__tests__/clean.test.js +12 -17
  36. package/commands/account/__tests__/createOverride.test.js +10 -15
  37. package/commands/account/__tests__/info.test.js +11 -16
  38. package/commands/account/__tests__/list.test.js +11 -16
  39. package/commands/account/__tests__/remove.test.js +13 -18
  40. package/commands/account/__tests__/removeOverride.js +8 -13
  41. package/commands/account/__tests__/rename.test.js +15 -20
  42. package/commands/account/__tests__/use.test.js +10 -15
  43. package/commands/account/auth.d.ts +1 -1
  44. package/commands/account/auth.js +78 -69
  45. package/commands/account/clean.d.ts +1 -1
  46. package/commands/account/clean.js +55 -60
  47. package/commands/account/createOverride.d.ts +1 -1
  48. package/commands/account/createOverride.js +52 -57
  49. package/commands/account/info.d.ts +1 -1
  50. package/commands/account/info.js +33 -35
  51. package/commands/account/list.d.ts +1 -1
  52. package/commands/account/list.js +43 -45
  53. package/commands/account/remove.d.ts +1 -1
  54. package/commands/account/remove.js +37 -42
  55. package/commands/account/removeOverride.d.ts +1 -1
  56. package/commands/account/removeOverride.js +38 -43
  57. package/commands/account/rename.d.ts +1 -1
  58. package/commands/account/rename.js +18 -20
  59. package/commands/account/use.d.ts +1 -1
  60. package/commands/account/use.js +29 -31
  61. package/commands/account.d.ts +1 -1
  62. package/commands/account.js +23 -28
  63. package/commands/app/__tests__/migrate.test.js +29 -34
  64. package/commands/app/migrate.d.ts +2 -2
  65. package/commands/app/migrate.js +40 -43
  66. package/commands/app/secret/__tests__/add.test.js +6 -11
  67. package/commands/app/secret/__tests__/delete.test.js +6 -11
  68. package/commands/app/secret/__tests__/list.test.js +6 -11
  69. package/commands/app/secret/__tests__/update.test.js +6 -11
  70. package/commands/app/secret/add.d.ts +1 -1
  71. package/commands/app/secret/add.js +28 -30
  72. package/commands/app/secret/delete.d.ts +1 -1
  73. package/commands/app/secret/delete.js +34 -36
  74. package/commands/app/secret/list.d.ts +1 -1
  75. package/commands/app/secret/list.js +25 -27
  76. package/commands/app/secret/update.d.ts +1 -1
  77. package/commands/app/secret/update.js +32 -34
  78. package/commands/app/secret.d.ts +1 -1
  79. package/commands/app/secret.js +12 -17
  80. package/commands/app.d.ts +1 -1
  81. package/commands/app.js +6 -11
  82. package/commands/auth.d.ts +1 -1
  83. package/commands/auth.js +70 -72
  84. package/commands/cms/convertFields.d.ts +1 -1
  85. package/commands/cms/convertFields.js +34 -39
  86. package/commands/cms/getReactModule.d.ts +1 -1
  87. package/commands/cms/getReactModule.js +32 -37
  88. package/commands/cms/lighthouseScore.d.ts +1 -1
  89. package/commands/cms/lighthouseScore.js +67 -72
  90. package/commands/cms.d.ts +1 -1
  91. package/commands/cms.js +11 -16
  92. package/commands/completion.d.ts +1 -1
  93. package/commands/completion.js +10 -15
  94. package/commands/config/migrate.d.ts +1 -1
  95. package/commands/config/migrate.js +27 -32
  96. package/commands/config/set.d.ts +2 -1
  97. package/commands/config/set.js +40 -32
  98. package/commands/config.d.ts +1 -1
  99. package/commands/config.js +8 -13
  100. package/commands/create/api-sample.d.ts +1 -1
  101. package/commands/create/api-sample.js +28 -33
  102. package/commands/create/app.d.ts +1 -1
  103. package/commands/create/app.js +3 -5
  104. package/commands/create/function.d.ts +1 -1
  105. package/commands/create/function.js +9 -11
  106. package/commands/create/index.d.ts +1 -1
  107. package/commands/create/index.js +19 -24
  108. package/commands/create/module.d.ts +1 -1
  109. package/commands/create/module.js +12 -14
  110. package/commands/create/react-app.d.ts +1 -1
  111. package/commands/create/react-app.js +3 -5
  112. package/commands/create/template.d.ts +1 -1
  113. package/commands/create/template.js +12 -14
  114. package/commands/create/vue-app.d.ts +1 -1
  115. package/commands/create/vue-app.js +3 -5
  116. package/commands/create/webpack-serverless.d.ts +1 -1
  117. package/commands/create/webpack-serverless.js +3 -5
  118. package/commands/create/website-theme.d.ts +1 -1
  119. package/commands/create/website-theme.js +5 -7
  120. package/commands/create.d.ts +2 -2
  121. package/commands/create.js +30 -35
  122. package/commands/customObject/__tests__/create.test.js +13 -18
  123. package/commands/customObject/__tests__/schema.test.js +18 -23
  124. package/commands/customObject/create.d.ts +1 -1
  125. package/commands/customObject/create.js +28 -30
  126. package/commands/customObject/schema/__tests__/create.test.js +13 -18
  127. package/commands/customObject/schema/__tests__/delete.test.js +13 -18
  128. package/commands/customObject/schema/__tests__/fetch-all.test.js +13 -18
  129. package/commands/customObject/schema/__tests__/fetch.test.js +13 -18
  130. package/commands/customObject/schema/__tests__/list.test.js +13 -18
  131. package/commands/customObject/schema/__tests__/update.test.js +13 -18
  132. package/commands/customObject/schema/create.d.ts +1 -1
  133. package/commands/customObject/schema/create.js +28 -30
  134. package/commands/customObject/schema/delete.d.ts +1 -1
  135. package/commands/customObject/schema/delete.js +24 -26
  136. package/commands/customObject/schema/fetch-all.d.ts +1 -1
  137. package/commands/customObject/schema/fetch-all.js +22 -24
  138. package/commands/customObject/schema/fetch.d.ts +1 -1
  139. package/commands/customObject/schema/fetch.js +24 -26
  140. package/commands/customObject/schema/list.d.ts +1 -1
  141. package/commands/customObject/schema/list.js +13 -15
  142. package/commands/customObject/schema/update.d.ts +1 -1
  143. package/commands/customObject/schema/update.js +32 -34
  144. package/commands/customObject/schema.d.ts +1 -1
  145. package/commands/customObject/schema.js +17 -22
  146. package/commands/customObject.d.ts +1 -1
  147. package/commands/customObject.js +13 -18
  148. package/commands/doctor.d.ts +1 -1
  149. package/commands/doctor.js +28 -33
  150. package/commands/feedback.d.ts +1 -1
  151. package/commands/feedback.js +19 -24
  152. package/commands/fetch.d.ts +1 -1
  153. package/commands/fetch.js +28 -30
  154. package/commands/filemanager/__tests__/fetch.test.js +17 -22
  155. package/commands/filemanager/__tests__/upload.test.js +15 -20
  156. package/commands/filemanager/fetch.d.ts +1 -1
  157. package/commands/filemanager/fetch.js +23 -25
  158. package/commands/filemanager/upload.d.ts +1 -1
  159. package/commands/filemanager/upload.js +39 -44
  160. package/commands/filemanager.d.ts +1 -1
  161. package/commands/filemanager.js +8 -13
  162. package/commands/function/deploy.d.ts +1 -1
  163. package/commands/function/deploy.js +35 -40
  164. package/commands/function/list.d.ts +1 -1
  165. package/commands/function/list.js +24 -29
  166. package/commands/function/server.d.ts +1 -1
  167. package/commands/function/server.js +15 -17
  168. package/commands/function.d.ts +1 -1
  169. package/commands/function.js +12 -18
  170. package/commands/getStarted.d.ts +1 -1
  171. package/commands/getStarted.js +119 -125
  172. package/commands/hubdb/__tests__/clear.test.js +13 -18
  173. package/commands/hubdb/__tests__/create.test.js +13 -18
  174. package/commands/hubdb/__tests__/delete.test.js +13 -18
  175. package/commands/hubdb/__tests__/fetch.test.js +13 -18
  176. package/commands/hubdb/__tests__/list.test.js +23 -28
  177. package/commands/hubdb/clear.d.ts +1 -1
  178. package/commands/hubdb/clear.js +20 -22
  179. package/commands/hubdb/create.d.ts +1 -1
  180. package/commands/hubdb/create.js +30 -35
  181. package/commands/hubdb/delete.d.ts +1 -1
  182. package/commands/hubdb/delete.js +24 -26
  183. package/commands/hubdb/fetch.d.ts +1 -1
  184. package/commands/hubdb/fetch.js +17 -19
  185. package/commands/hubdb/list.d.ts +1 -1
  186. package/commands/hubdb/list.js +33 -35
  187. package/commands/hubdb.d.ts +1 -1
  188. package/commands/hubdb.js +18 -24
  189. package/commands/init.d.ts +1 -1
  190. package/commands/init.js +83 -88
  191. package/commands/lint.d.ts +1 -1
  192. package/commands/lint.js +24 -26
  193. package/commands/list.d.ts +1 -1
  194. package/commands/list.js +32 -37
  195. package/commands/logs.d.ts +1 -1
  196. package/commands/logs.js +35 -37
  197. package/commands/mcp/__tests__/setup.test.js +7 -12
  198. package/commands/mcp/__tests__/start.test.js +7 -12
  199. package/commands/mcp/setup.d.ts +1 -1
  200. package/commands/mcp/setup.js +17 -19
  201. package/commands/mcp/start.d.ts +1 -1
  202. package/commands/mcp/start.js +32 -34
  203. package/commands/mcp.d.ts +1 -1
  204. package/commands/mcp.js +7 -12
  205. package/commands/module/marketplace-validate.d.ts +1 -1
  206. package/commands/module/marketplace-validate.js +21 -26
  207. package/commands/module.d.ts +1 -1
  208. package/commands/module.js +7 -13
  209. package/commands/mv.d.ts +1 -1
  210. package/commands/mv.js +20 -22
  211. package/commands/open.d.ts +1 -1
  212. package/commands/open.js +19 -21
  213. package/commands/project/__tests__/add.test.js +10 -15
  214. package/commands/project/__tests__/create.test.js +14 -19
  215. package/commands/project/__tests__/deploy.test.js +96 -134
  216. package/commands/project/__tests__/devUnifiedFlow.test.js +133 -141
  217. package/commands/project/__tests__/download.test.js +14 -19
  218. package/commands/project/__tests__/installDeps.test.js +32 -70
  219. package/commands/project/__tests__/listBuilds.test.js +14 -19
  220. package/commands/project/__tests__/logs.test.js +56 -94
  221. package/commands/project/__tests__/migrate.test.js +25 -30
  222. package/commands/project/__tests__/migrateApp.test.js +17 -22
  223. package/commands/project/__tests__/open.test.js +16 -21
  224. package/commands/project/__tests__/profile.test.js +14 -19
  225. package/commands/project/__tests__/upload.test.js +18 -23
  226. package/commands/project/__tests__/watch.test.js +14 -19
  227. package/commands/project/add.d.ts +1 -1
  228. package/commands/project/add.js +34 -36
  229. package/commands/project/cloneApp.d.ts +1 -1
  230. package/commands/project/cloneApp.js +67 -72
  231. package/commands/project/create.d.ts +2 -2
  232. package/commands/project/create.js +63 -68
  233. package/commands/project/deploy.d.ts +1 -1
  234. package/commands/project/deploy.js +67 -69
  235. package/commands/project/dev/deprecatedFlow.d.ts +2 -2
  236. package/commands/project/dev/deprecatedFlow.js +52 -58
  237. package/commands/project/dev/index.d.ts +1 -1
  238. package/commands/project/dev/index.js +44 -47
  239. package/commands/project/dev/unifiedFlow.d.ts +3 -3
  240. package/commands/project/dev/unifiedFlow.js +63 -71
  241. package/commands/project/download.d.ts +1 -1
  242. package/commands/project/download.js +35 -40
  243. package/commands/project/installDeps.d.ts +1 -1
  244. package/commands/project/installDeps.js +29 -34
  245. package/commands/project/listBuilds.d.ts +1 -1
  246. package/commands/project/listBuilds.js +40 -45
  247. package/commands/project/logs.d.ts +1 -1
  248. package/commands/project/logs.js +52 -54
  249. package/commands/project/migrate.d.ts +1 -1
  250. package/commands/project/migrate.js +24 -26
  251. package/commands/project/migrateApp.d.ts +2 -2
  252. package/commands/project/migrateApp.js +18 -20
  253. package/commands/project/open.d.ts +1 -1
  254. package/commands/project/open.js +25 -30
  255. package/commands/project/profile/add.d.ts +1 -1
  256. package/commands/project/profile/add.js +68 -73
  257. package/commands/project/profile/delete.d.ts +1 -1
  258. package/commands/project/profile/delete.js +68 -61
  259. package/commands/project/profile.d.ts +1 -1
  260. package/commands/project/profile.js +9 -14
  261. package/commands/project/upload.d.ts +1 -1
  262. package/commands/project/upload.js +50 -55
  263. package/commands/project/validate.d.ts +1 -1
  264. package/commands/project/validate.js +36 -40
  265. package/commands/project/watch.d.ts +1 -1
  266. package/commands/project/watch.js +59 -61
  267. package/commands/project.d.ts +1 -1
  268. package/commands/project.js +38 -43
  269. package/commands/remove.d.ts +1 -1
  270. package/commands/remove.js +15 -17
  271. package/commands/sandbox/__tests__/create.test.js +222 -20
  272. package/commands/sandbox/__tests__/delete.test.js +15 -20
  273. package/commands/sandbox/create.d.ts +2 -2
  274. package/commands/sandbox/create.js +92 -79
  275. package/commands/sandbox/delete.d.ts +1 -1
  276. package/commands/sandbox/delete.js +94 -96
  277. package/commands/sandbox.d.ts +1 -1
  278. package/commands/sandbox.js +9 -14
  279. package/commands/secret/__tests__/addSecret.test.js +13 -18
  280. package/commands/secret/__tests__/deleteSecret.test.js +13 -18
  281. package/commands/secret/__tests__/listSecret.test.js +13 -18
  282. package/commands/secret/__tests__/updateSecret.test.js +13 -18
  283. package/commands/secret/addSecret.d.ts +1 -1
  284. package/commands/secret/addSecret.js +26 -28
  285. package/commands/secret/deleteSecret.d.ts +1 -1
  286. package/commands/secret/deleteSecret.js +27 -29
  287. package/commands/secret/listSecret.d.ts +1 -1
  288. package/commands/secret/listSecret.js +19 -21
  289. package/commands/secret/updateSecret.d.ts +1 -1
  290. package/commands/secret/updateSecret.js +25 -27
  291. package/commands/secret.d.ts +1 -1
  292. package/commands/secret.js +13 -18
  293. package/commands/testAccount/__tests__/create.test.js +17 -22
  294. package/commands/testAccount/__tests__/createConfig.test.js +6 -11
  295. package/commands/testAccount/__tests__/delete.test.js +15 -20
  296. package/commands/testAccount/create.d.ts +1 -1
  297. package/commands/testAccount/create.js +63 -58
  298. package/commands/testAccount/createConfig.d.ts +1 -1
  299. package/commands/testAccount/createConfig.js +36 -41
  300. package/commands/testAccount/delete.d.ts +1 -1
  301. package/commands/testAccount/delete.js +17 -19
  302. package/commands/testAccount.d.ts +1 -1
  303. package/commands/testAccount.js +10 -15
  304. package/commands/theme/__tests__/generate-selectors.test.js +7 -12
  305. package/commands/theme/__tests__/marketplace-validate.test.js +14 -19
  306. package/commands/theme/__tests__/preview.test.js +12 -17
  307. package/commands/theme/generate-selectors.d.ts +1 -1
  308. package/commands/theme/generate-selectors.js +23 -28
  309. package/commands/theme/marketplace-validate.d.ts +1 -1
  310. package/commands/theme/marketplace-validate.js +19 -24
  311. package/commands/theme/preview.d.ts +1 -1
  312. package/commands/theme/preview.js +60 -65
  313. package/commands/theme.d.ts +1 -1
  314. package/commands/theme.js +11 -16
  315. package/commands/upload.d.ts +1 -1
  316. package/commands/upload.js +77 -82
  317. package/commands/watch.d.ts +1 -1
  318. package/commands/watch.js +45 -51
  319. package/lang/en.d.ts +31 -8
  320. package/lang/en.js +404 -384
  321. package/lang/en.lyaml +4 -2
  322. package/lib/__tests__/accountTypes.test.js +20 -22
  323. package/lib/__tests__/buildAccount.test.js +88 -65
  324. package/lib/__tests__/commonOpts.test.js +20 -22
  325. package/lib/__tests__/dependencyManagement.test.js +46 -51
  326. package/lib/__tests__/developerTestAccounts.test.js +27 -62
  327. package/lib/__tests__/hasFeature.test.js +6 -8
  328. package/lib/__tests__/npm.test.js +15 -20
  329. package/lib/__tests__/oauth.test.js +23 -28
  330. package/lib/__tests__/parsing.test.js +18 -20
  331. package/lib/__tests__/polling.test.js +24 -26
  332. package/lib/__tests__/process.test.js +14 -19
  333. package/lib/__tests__/projectProfiles.test.js +34 -39
  334. package/lib/__tests__/sandboxSync.test.js +30 -35
  335. package/lib/__tests__/sandboxes.test.js +29 -31
  336. package/lib/__tests__/serverlessLogs.test.js +8 -13
  337. package/lib/__tests__/usageTracking.test.js +33 -34
  338. package/lib/__tests__/validation.test.js +18 -20
  339. package/lib/__tests__/yargsUtils.test.js +17 -41
  340. package/lib/accountTypes.js +24 -34
  341. package/lib/app/__tests__/migrate.test.js +117 -109
  342. package/lib/app/__tests__/migrate_legacy.test.js +29 -31
  343. package/lib/app/migrate.d.ts +18 -4
  344. package/lib/app/migrate.js +152 -148
  345. package/lib/app/migrate_legacy.d.ts +1 -1
  346. package/lib/app/migrate_legacy.js +72 -78
  347. package/lib/app/urls.js +5 -9
  348. package/lib/buildAccount.d.ts +5 -2
  349. package/lib/buildAccount.js +126 -80
  350. package/lib/commonOpts.d.ts +1 -1
  351. package/lib/commonOpts.js +67 -59
  352. package/lib/configMigrate.js +34 -38
  353. package/lib/configOptions.d.ts +5 -0
  354. package/lib/configOptions.js +44 -40
  355. package/lib/constants.d.ts +8 -0
  356. package/lib/constants.js +39 -34
  357. package/lib/customObject.js +2 -6
  358. package/lib/dependencyManagement.js +37 -45
  359. package/lib/developerTestAccounts.d.ts +1 -1
  360. package/lib/developerTestAccounts.js +34 -39
  361. package/lib/doctor/Diagnosis.d.ts +1 -1
  362. package/lib/doctor/Diagnosis.js +25 -29
  363. package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
  364. package/lib/doctor/DiagnosticInfoBuilder.js +30 -37
  365. package/lib/doctor/Doctor.d.ts +1 -1
  366. package/lib/doctor/Doctor.js +94 -101
  367. package/lib/doctor/__tests__/Diagnosis.test.js +9 -14
  368. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +29 -34
  369. package/lib/doctor/__tests__/Doctor.test.js +24 -26
  370. package/lib/enums/exitCodes.js +1 -4
  371. package/lib/errorHandlers/index.js +33 -44
  372. package/lib/errorHandlers/suppressError.d.ts +1 -1
  373. package/lib/errorHandlers/suppressError.js +28 -31
  374. package/lib/errors/ProjectValidationError.d.ts +4 -0
  375. package/lib/errors/ProjectValidationError.js +9 -0
  376. package/lib/filesystem.js +8 -15
  377. package/lib/generateSelectors.js +18 -29
  378. package/lib/hasFeature.d.ts +1 -1
  379. package/lib/hasFeature.js +3 -6
  380. package/lib/interpolation.js +11 -18
  381. package/lib/lang.d.ts +1 -1
  382. package/lib/lang.js +22 -27
  383. package/lib/links.js +16 -24
  384. package/lib/marketplaceValidate.js +29 -39
  385. package/lib/mcp/setup.d.ts +4 -0
  386. package/lib/mcp/setup.js +106 -82
  387. package/lib/middleware/__test__/configMiddleware.test.js +20 -55
  388. package/lib/middleware/__test__/gitMiddleware.test.js +7 -42
  389. package/lib/middleware/__test__/notificationsMiddleware.test.js +2 -4
  390. package/lib/middleware/__test__/requestMiddleware.test.js +6 -11
  391. package/lib/middleware/__test__/utils.test.js +9 -11
  392. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +9 -44
  393. package/lib/middleware/autoUpdateMiddleware.js +33 -40
  394. package/lib/middleware/configMiddleware.js +36 -42
  395. package/lib/middleware/fireAlarmMiddleware.js +12 -18
  396. package/lib/middleware/gitMiddleware.js +5 -8
  397. package/lib/middleware/notificationsMiddleware.js +16 -23
  398. package/lib/middleware/requestMiddleware.js +4 -10
  399. package/lib/middleware/utils.js +1 -4
  400. package/lib/middleware/yargsChecksMiddleware.js +10 -13
  401. package/lib/npm.js +14 -23
  402. package/lib/oauth.js +29 -35
  403. package/lib/parsing.js +3 -6
  404. package/lib/polling.js +11 -15
  405. package/lib/process.js +11 -19
  406. package/lib/projectProfiles.d.ts +2 -2
  407. package/lib/projectProfiles.js +32 -42
  408. package/lib/projects/ProjectLogsManager.js +18 -21
  409. package/lib/projects/__tests__/AppDevModeInterface.test.js +140 -145
  410. package/lib/projects/__tests__/LocalDevProcess.test.js +100 -140
  411. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +201 -37
  412. package/lib/projects/__tests__/ProjectLogsManager.test.js +56 -58
  413. package/lib/projects/__tests__/buildAndDeploy.test.js +7 -9
  414. package/lib/projects/__tests__/components.test.js +9 -14
  415. package/lib/projects/__tests__/localDevHelpers.test.js +117 -0
  416. package/lib/projects/__tests__/projects.test.js +35 -40
  417. package/lib/projects/__tests__/structure.test.js +43 -81
  418. package/lib/projects/add/__tests__/legacyAddComponent.test.js +26 -28
  419. package/lib/projects/add/__tests__/v3AddComponent.test.js +25 -30
  420. package/lib/projects/add/legacyAddComponent.d.ts +1 -1
  421. package/lib/projects/add/legacyAddComponent.js +24 -30
  422. package/lib/projects/add/v3AddComponent.d.ts +1 -1
  423. package/lib/projects/add/v3AddComponent.js +37 -42
  424. package/lib/projects/buildAndDeploy.d.ts +1 -1
  425. package/lib/projects/buildAndDeploy.js +88 -97
  426. package/lib/projects/components.js +19 -25
  427. package/lib/projects/config.d.ts +1 -1
  428. package/lib/projects/config.js +32 -41
  429. package/lib/projects/create/__tests__/legacy.test.js +22 -57
  430. package/lib/projects/create/__tests__/v3.test.js +5 -7
  431. package/lib/projects/create/index.d.ts +3 -3
  432. package/lib/projects/create/index.js +19 -22
  433. package/lib/projects/create/legacy.d.ts +1 -1
  434. package/lib/projects/create/legacy.js +25 -31
  435. package/lib/projects/create/v3.d.ts +3 -5
  436. package/lib/projects/create/v3.js +47 -59
  437. package/lib/projects/ensureProjectExists.js +31 -37
  438. package/lib/projects/localDev/AppDevModeInterface.d.ts +3 -3
  439. package/lib/projects/localDev/AppDevModeInterface.js +58 -60
  440. package/lib/projects/localDev/DevServerManager.d.ts +1 -1
  441. package/lib/projects/localDev/DevServerManager.js +22 -24
  442. package/lib/projects/localDev/DevServerManagerV2.d.ts +2 -2
  443. package/lib/projects/localDev/DevServerManagerV2.js +15 -20
  444. package/lib/projects/localDev/LocalDevLogger.d.ts +1 -2
  445. package/lib/projects/localDev/LocalDevLogger.js +66 -66
  446. package/lib/projects/localDev/LocalDevManager.d.ts +1 -1
  447. package/lib/projects/localDev/LocalDevManager.js +106 -111
  448. package/lib/projects/localDev/LocalDevProcess.d.ts +6 -5
  449. package/lib/projects/localDev/LocalDevProcess.js +37 -50
  450. package/lib/projects/localDev/LocalDevState.d.ts +5 -7
  451. package/lib/projects/localDev/LocalDevState.js +9 -11
  452. package/lib/projects/localDev/LocalDevWatcher.d.ts +1 -1
  453. package/lib/projects/localDev/LocalDevWatcher.js +6 -11
  454. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +3 -3
  455. package/lib/projects/localDev/LocalDevWebsocketServer.js +63 -55
  456. package/lib/projects/localDev/helpers.d.ts +10 -3
  457. package/lib/projects/localDev/helpers.js +211 -174
  458. package/lib/projects/structure.d.ts +3 -3
  459. package/lib/projects/structure.js +32 -78
  460. package/lib/projects/ui.js +10 -13
  461. package/lib/projects/upload.d.ts +1 -1
  462. package/lib/projects/upload.js +57 -73
  463. package/lib/projects/urls.d.ts +1 -1
  464. package/lib/projects/urls.js +15 -25
  465. package/lib/projects/watch.d.ts +1 -1
  466. package/lib/projects/watch.js +48 -54
  467. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +9 -11
  468. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +11 -16
  469. package/lib/prompts/accountNamePrompt.d.ts +1 -1
  470. package/lib/prompts/accountNamePrompt.js +26 -31
  471. package/lib/prompts/accountsPrompt.js +12 -15
  472. package/lib/prompts/cmsFieldPrompt.js +13 -19
  473. package/lib/prompts/createApiSamplePrompt.d.ts +1 -1
  474. package/lib/prompts/createApiSamplePrompt.js +9 -12
  475. package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +1 -1
  476. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +23 -26
  477. package/lib/prompts/createFunctionPrompt.js +17 -20
  478. package/lib/prompts/createModulePrompt.js +12 -15
  479. package/lib/prompts/createTemplatePrompt.js +5 -8
  480. package/lib/prompts/downloadProjectPrompt.js +17 -20
  481. package/lib/prompts/installAppPrompt.js +19 -26
  482. package/lib/prompts/personalAccessKeyPrompt.d.ts +2 -2
  483. package/lib/prompts/personalAccessKeyPrompt.js +40 -47
  484. package/lib/prompts/previewPrompt.js +15 -22
  485. package/lib/prompts/projectAddPrompt.d.ts +1 -1
  486. package/lib/prompts/projectAddPrompt.js +14 -18
  487. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -1
  488. package/lib/prompts/projectDevTargetAccountPrompt.js +48 -54
  489. package/lib/prompts/projectNameAndDestPrompt.d.ts +1 -1
  490. package/lib/prompts/projectNameAndDestPrompt.js +22 -29
  491. package/lib/prompts/projectNamePrompt.js +11 -14
  492. package/lib/prompts/projectsLogsPrompt.js +5 -8
  493. package/lib/prompts/promptUtils.d.ts +1 -1
  494. package/lib/prompts/promptUtils.js +17 -24
  495. package/lib/prompts/sandboxesPrompt.d.ts +1 -1
  496. package/lib/prompts/sandboxesPrompt.js +26 -30
  497. package/lib/prompts/secretPrompt.js +10 -15
  498. package/lib/prompts/selectAppPrompt.js +11 -14
  499. package/lib/prompts/selectHubDBTablePrompt.js +24 -30
  500. package/lib/prompts/selectProjectTemplatePrompt.d.ts +1 -1
  501. package/lib/prompts/selectProjectTemplatePrompt.js +10 -13
  502. package/lib/prompts/selectPublicAppForMigrationPrompt.js +22 -25
  503. package/lib/prompts/setAsDefaultAccountPrompt.js +13 -16
  504. package/lib/prompts/uploadPrompt.js +11 -17
  505. package/lib/sandboxSync.d.ts +1 -1
  506. package/lib/sandboxSync.js +58 -65
  507. package/lib/sandboxes.d.ts +5 -1
  508. package/lib/sandboxes.js +72 -76
  509. package/lib/schema.js +13 -20
  510. package/lib/serverlessLogs.js +45 -52
  511. package/lib/testUtils.js +4 -8
  512. package/lib/ui/SpinniesManager.d.ts +1 -1
  513. package/lib/ui/SpinniesManager.js +29 -34
  514. package/lib/ui/boxen.js +11 -14
  515. package/lib/ui/git.js +14 -20
  516. package/lib/ui/index.d.ts +6 -0
  517. package/lib/ui/index.js +56 -76
  518. package/lib/ui/logger.js +10 -13
  519. package/lib/ui/serverlessFunctionLogs.js +14 -20
  520. package/lib/ui/spinniesUtils.js +24 -39
  521. package/lib/ui/supportHyperlinks.js +3 -6
  522. package/lib/ui/supportsColor.js +11 -17
  523. package/lib/ui/table.js +6 -13
  524. package/lib/upload.js +15 -21
  525. package/lib/usageTracking.js +35 -44
  526. package/lib/utils/__tests__/isDeepEqual.test.js +269 -0
  527. package/lib/utils/hasFlag.js +2 -8
  528. package/lib/utils/isDeepEqual.d.ts +1 -0
  529. package/lib/utils/isDeepEqual.js +31 -0
  530. package/lib/validation.js +48 -87
  531. package/lib/yargsUtils.d.ts +2 -1
  532. package/lib/yargsUtils.js +19 -16
  533. package/mcp-server/server.js +6 -8
  534. package/mcp-server/tools/index.js +15 -16
  535. package/mcp-server/tools/project/{AddFeatureToProject.d.ts → AddFeatureToProjectTool.d.ts} +5 -5
  536. package/mcp-server/tools/project/AddFeatureToProjectTool.js +76 -0
  537. package/mcp-server/tools/project/CreateProjectTool.d.ts +4 -4
  538. package/mcp-server/tools/project/CreateProjectTool.js +40 -54
  539. package/mcp-server/tools/project/{DeployProject.d.ts → DeployProjectTool.d.ts} +2 -2
  540. package/mcp-server/tools/project/DeployProjectTool.js +49 -0
  541. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +20 -0
  542. package/mcp-server/tools/project/GetConfigValuesTool.js +51 -0
  543. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +1 -1
  544. package/mcp-server/tools/project/GuidedWalkthroughTool.js +21 -25
  545. package/mcp-server/tools/project/UploadProjectTools.d.ts +1 -1
  546. package/mcp-server/tools/project/UploadProjectTools.js +12 -19
  547. package/mcp-server/tools/project/ValidateProjectTool.d.ts +1 -1
  548. package/mcp-server/tools/project/ValidateProjectTool.js +13 -17
  549. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +1 -0
  550. package/mcp-server/tools/project/__tests__/{AddFeatureToProject.test.js → AddFeatureToProjectTool.test.js} +15 -17
  551. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +12 -15
  552. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +1 -0
  553. package/mcp-server/tools/project/__tests__/{DeployProject.test.js → DeployProjectTool.test.js} +6 -8
  554. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +1 -0
  555. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +198 -0
  556. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +4 -6
  557. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +4 -6
  558. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +4 -6
  559. package/mcp-server/tools/project/constants.d.ts +1 -0
  560. package/mcp-server/tools/project/constants.js +14 -9
  561. package/mcp-server/types.js +1 -5
  562. package/mcp-server/utils/__tests__/command.test.js +9 -11
  563. package/mcp-server/utils/__tests__/project.test.js +12 -17
  564. package/mcp-server/utils/command.d.ts +1 -1
  565. package/mcp-server/utils/command.js +4 -11
  566. package/mcp-server/utils/content.d.ts +1 -1
  567. package/mcp-server/utils/content.js +2 -6
  568. package/mcp-server/utils/project.js +8 -14
  569. package/mcp-server/utils/toolUsageTracking.js +11 -14
  570. package/package.json +21 -14
  571. package/types/Cms.d.ts +1 -1
  572. package/types/Cms.js +1 -2
  573. package/types/LocalDev.d.ts +4 -6
  574. package/types/LocalDev.js +1 -2
  575. package/types/ProjectComponents.d.ts +2 -2
  576. package/types/ProjectComponents.js +1 -2
  577. package/types/Projects.d.ts +1 -1
  578. package/types/Projects.js +2 -5
  579. package/types/Prompts.js +1 -2
  580. package/types/Sandboxes.js +1 -2
  581. package/types/Yargs.js +1 -2
  582. package/ui/index.d.ts +1 -0
  583. package/ui/index.js +6 -0
  584. package/mcp-server/tools/project/AddFeatureToProject.js +0 -88
  585. package/mcp-server/tools/project/DeployProject.js +0 -53
  586. /package/{mcp-server/tools/project/__tests__/AddFeatureToProject.test.d.ts → lib/projects/__tests__/localDevHelpers.test.d.ts} +0 -0
  587. /package/{mcp-server/tools/project/__tests__/DeployProject.test.d.ts → lib/utils/__tests__/isDeepEqual.test.d.ts} +0 -0
@@ -1,36 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const parsing_1 = require("../parsing");
1
+ import { parseStringToNumber } from '../parsing.js';
4
2
  describe('lib/parsing', () => {
5
3
  describe('parseStringToNumber', () => {
6
4
  it('should parse valid integer strings', () => {
7
- expect((0, parsing_1.parseStringToNumber)('123')).toBe(123);
8
- expect((0, parsing_1.parseStringToNumber)('0')).toBe(0);
9
- expect((0, parsing_1.parseStringToNumber)('-456')).toBe(-456);
10
- expect((0, parsing_1.parseStringToNumber)('999')).toBe(999);
5
+ expect(parseStringToNumber('123')).toBe(123);
6
+ expect(parseStringToNumber('0')).toBe(0);
7
+ expect(parseStringToNumber('-456')).toBe(-456);
8
+ expect(parseStringToNumber('999')).toBe(999);
11
9
  });
12
10
  it('should parse strings with leading zeros', () => {
13
- expect((0, parsing_1.parseStringToNumber)('007')).toBe(7);
14
- expect((0, parsing_1.parseStringToNumber)('0123')).toBe(123);
11
+ expect(parseStringToNumber('007')).toBe(7);
12
+ expect(parseStringToNumber('0123')).toBe(123);
15
13
  });
16
14
  it('should throw error for strings with leading whitespace', () => {
17
- expect(() => (0, parsing_1.parseStringToNumber)(' 42')).toThrow('Unable to parse string to number');
18
- expect(() => (0, parsing_1.parseStringToNumber)('\t123')).toThrow('Unable to parse string to number');
15
+ expect(() => parseStringToNumber(' 42')).toThrow('Unable to parse string to number');
16
+ expect(() => parseStringToNumber('\t123')).toThrow('Unable to parse string to number');
19
17
  });
20
18
  it('should throw error for invalid number strings', () => {
21
- expect(() => (0, parsing_1.parseStringToNumber)('abc')).toThrow('Unable to parse string to number');
22
- expect(() => (0, parsing_1.parseStringToNumber)('')).toThrow('Unable to parse string to number');
23
- expect(() => (0, parsing_1.parseStringToNumber)('NaN')).toThrow('Unable to parse string to number');
19
+ expect(() => parseStringToNumber('abc')).toThrow('Unable to parse string to number');
20
+ expect(() => parseStringToNumber('')).toThrow('Unable to parse string to number');
21
+ expect(() => parseStringToNumber('NaN')).toThrow('Unable to parse string to number');
24
22
  });
25
23
  it('should throw error for strings with non-numeric characters', () => {
26
- expect(() => (0, parsing_1.parseStringToNumber)('123abc')).toThrow('Unable to parse string to number');
27
- expect(() => (0, parsing_1.parseStringToNumber)('456def')).toThrow('Unable to parse string to number');
28
- expect(() => (0, parsing_1.parseStringToNumber)('12.34')).toThrow('Unable to parse string to number');
24
+ expect(() => parseStringToNumber('123abc')).toThrow('Unable to parse string to number');
25
+ expect(() => parseStringToNumber('456def')).toThrow('Unable to parse string to number');
26
+ expect(() => parseStringToNumber('12.34')).toThrow('Unable to parse string to number');
29
27
  });
30
28
  it('should throw error for strings with mixed content', () => {
31
- expect(() => (0, parsing_1.parseStringToNumber)('123 456')).toThrow('Unable to parse string to number');
32
- expect(() => (0, parsing_1.parseStringToNumber)('1,234')).toThrow('Unable to parse string to number');
33
- expect(() => (0, parsing_1.parseStringToNumber)('1.23e4')).toThrow('Unable to parse string to number');
29
+ expect(() => parseStringToNumber('123 456')).toThrow('Unable to parse string to number');
30
+ expect(() => parseStringToNumber('1,234')).toThrow('Unable to parse string to number');
31
+ expect(() => parseStringToNumber('1.23e4')).toThrow('Unable to parse string to number');
34
32
  });
35
33
  });
36
34
  });
@@ -1,7 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const polling_1 = require("../polling");
4
- const constants_1 = require("../constants");
1
+ import { poll, DEFAULT_POLLING_STATES } from '../polling.js';
2
+ import { DEFAULT_POLLING_DELAY } from '../constants.js';
5
3
  // Helper to create a mock polling callback
6
4
  const createMockCallback = (responses) => {
7
5
  let callCount = 0;
@@ -21,56 +19,56 @@ describe('lib/polling', () => {
21
19
  describe('poll()', () => {
22
20
  it('should resolve when status is SUCCESS', async () => {
23
21
  const mockCallback = createMockCallback([
24
- { status: polling_1.DEFAULT_POLLING_STATES.STARTED },
25
- { status: polling_1.DEFAULT_POLLING_STATES.SUCCESS },
22
+ { status: DEFAULT_POLLING_STATES.STARTED },
23
+ { status: DEFAULT_POLLING_STATES.SUCCESS },
26
24
  ]);
27
- const pollPromise = (0, polling_1.poll)(mockCallback);
25
+ const pollPromise = poll(mockCallback);
28
26
  // Fast-forward through two polling intervals
29
- vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY * 2);
27
+ vi.advanceTimersByTime(DEFAULT_POLLING_DELAY * 2);
30
28
  const result = await pollPromise;
31
- expect(result.status).toBe(polling_1.DEFAULT_POLLING_STATES.SUCCESS);
29
+ expect(result.status).toBe(DEFAULT_POLLING_STATES.SUCCESS);
32
30
  expect(mockCallback).toHaveBeenCalledTimes(2);
33
31
  });
34
32
  it('should reject when status is ERROR', async () => {
35
33
  const mockCallback = createMockCallback([
36
- { status: polling_1.DEFAULT_POLLING_STATES.STARTED },
37
- { status: polling_1.DEFAULT_POLLING_STATES.ERROR },
34
+ { status: DEFAULT_POLLING_STATES.STARTED },
35
+ { status: DEFAULT_POLLING_STATES.ERROR },
38
36
  ]);
39
- const pollPromise = (0, polling_1.poll)(mockCallback);
40
- vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY * 2);
37
+ const pollPromise = poll(mockCallback);
38
+ vi.advanceTimersByTime(DEFAULT_POLLING_DELAY * 2);
41
39
  await expect(pollPromise).rejects.toEqual({
42
- status: polling_1.DEFAULT_POLLING_STATES.ERROR,
40
+ status: DEFAULT_POLLING_STATES.ERROR,
43
41
  });
44
42
  expect(mockCallback).toHaveBeenCalledTimes(2);
45
43
  });
46
44
  it('should reject when status is FAILURE', async () => {
47
45
  const mockCallback = createMockCallback([
48
- { status: polling_1.DEFAULT_POLLING_STATES.STARTED },
49
- { status: polling_1.DEFAULT_POLLING_STATES.FAILURE },
46
+ { status: DEFAULT_POLLING_STATES.STARTED },
47
+ { status: DEFAULT_POLLING_STATES.FAILURE },
50
48
  ]);
51
- const pollPromise = (0, polling_1.poll)(mockCallback);
52
- vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY * 2);
49
+ const pollPromise = poll(mockCallback);
50
+ vi.advanceTimersByTime(DEFAULT_POLLING_DELAY * 2);
53
51
  await expect(pollPromise).rejects.toEqual({
54
- status: polling_1.DEFAULT_POLLING_STATES.FAILURE,
52
+ status: DEFAULT_POLLING_STATES.FAILURE,
55
53
  });
56
54
  });
57
55
  it('should reject when status is REVERTED', async () => {
58
56
  const mockCallback = createMockCallback([
59
- { status: polling_1.DEFAULT_POLLING_STATES.STARTED },
60
- { status: polling_1.DEFAULT_POLLING_STATES.REVERTED },
57
+ { status: DEFAULT_POLLING_STATES.STARTED },
58
+ { status: DEFAULT_POLLING_STATES.REVERTED },
61
59
  ]);
62
- const pollPromise = (0, polling_1.poll)(mockCallback);
63
- vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY * 2);
60
+ const pollPromise = poll(mockCallback);
61
+ vi.advanceTimersByTime(DEFAULT_POLLING_DELAY * 2);
64
62
  await expect(pollPromise).rejects.toEqual({
65
- status: polling_1.DEFAULT_POLLING_STATES.REVERTED,
63
+ status: DEFAULT_POLLING_STATES.REVERTED,
66
64
  });
67
65
  });
68
66
  it('should reject when callback throws an error', async () => {
69
67
  const mockCallback = vi
70
68
  .fn()
71
69
  .mockRejectedValue(new Error('Network error'));
72
- const pollPromise = (0, polling_1.poll)(mockCallback);
73
- vi.advanceTimersByTime(constants_1.DEFAULT_POLLING_DELAY);
70
+ const pollPromise = poll(mockCallback);
71
+ vi.advanceTimersByTime(DEFAULT_POLLING_DELAY);
74
72
  await expect(pollPromise).rejects.toThrow('Network error');
75
73
  expect(mockCallback).toHaveBeenCalledTimes(1);
76
74
  });
@@ -1,40 +1,35 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const readline_1 = __importDefault(require("readline"));
7
- const logger_1 = require("@hubspot/local-dev-lib/logger");
8
- const process_1 = require("../process");
1
+ import readline from 'readline';
2
+ import { logger, setLogLevel, LOG_LEVEL } from '@hubspot/local-dev-lib/logger';
3
+ import { handleExit, handleKeypress, TERMINATION_SIGNALS } from '../process.js';
9
4
  vi.mock('readline');
10
5
  vi.mock('@hubspot/local-dev-lib/logger');
11
- const mockedReadline = readline_1.default;
12
- const mockedLogger = logger_1.logger;
13
- const mockedSetLogLevel = logger_1.setLogLevel;
6
+ const mockedReadline = readline;
7
+ const mockedLogger = logger;
8
+ const mockedSetLogLevel = setLogLevel;
14
9
  const processRemoveListenerSpy = vi.spyOn(process, 'removeAllListeners');
15
10
  const processOnSpy = vi.spyOn(process, 'on');
16
11
  describe('lib/process', () => {
17
12
  describe('handleExit()', () => {
18
13
  const mockCallback = vi.fn();
19
14
  it('should set up listeners for all termination signals', () => {
20
- (0, process_1.handleExit)(mockCallback);
21
- process_1.TERMINATION_SIGNALS.forEach(signal => {
15
+ handleExit(mockCallback);
16
+ TERMINATION_SIGNALS.forEach(signal => {
22
17
  expect(processRemoveListenerSpy).toHaveBeenCalledWith(signal);
23
18
  expect(processOnSpy).toHaveBeenCalledWith(signal, expect.any(Function));
24
19
  });
25
20
  });
26
21
  it('should handle SIGHUP signal correctly', async () => {
27
- (0, process_1.handleExit)(mockCallback);
22
+ handleExit(mockCallback);
28
23
  // Get the callback function passed to process.on for SIGHUP
29
24
  const sighupCallback = processOnSpy.mock.calls.find(call => call[0] === 'SIGHUP')?.[1];
30
25
  expect(sighupCallback).toBeDefined();
31
26
  sighupCallback();
32
- expect(mockedSetLogLevel).toHaveBeenCalledWith(logger_1.LOG_LEVEL.NONE);
27
+ expect(mockedSetLogLevel).toHaveBeenCalledWith(LOG_LEVEL.NONE);
33
28
  expect(mockCallback).toHaveBeenCalledWith({ isSIGHUP: true });
34
29
  expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('SIGHUP'));
35
30
  });
36
31
  it('should handle non-SIGHUP signals correctly', async () => {
37
- (0, process_1.handleExit)(mockCallback);
32
+ handleExit(mockCallback);
38
33
  // Get the callback function passed to process.on for SIGINT
39
34
  const sigintCallback = processOnSpy.mock.calls.find(call => call[0] === 'SIGINT')?.[1];
40
35
  expect(sigintCallback).toBeDefined();
@@ -44,7 +39,7 @@ describe('lib/process', () => {
44
39
  expect(mockedLogger.debug).toHaveBeenCalledWith(expect.stringContaining('SIGINT'));
45
40
  });
46
41
  it('should prevent duplicate exit handling', async () => {
47
- (0, process_1.handleExit)(mockCallback);
42
+ handleExit(mockCallback);
48
43
  // Get the callback function passed to process.on for SIGINT
49
44
  const sigintCallback = processOnSpy.mock.calls.find(call => call[0] === 'SIGINT')?.[1];
50
45
  expect(sigintCallback).toBeDefined();
@@ -67,7 +62,7 @@ describe('lib/process', () => {
67
62
  });
68
63
  mockedReadline.createInterface.mockReturnValue({});
69
64
  mockedReadline.emitKeypressEvents.mockImplementation(() => { });
70
- (0, process_1.handleKeypress)(mockCallback);
65
+ handleKeypress(mockCallback);
71
66
  expect(mockedReadline.createInterface).toHaveBeenCalledWith(process.stdin, process.stdout);
72
67
  expect(mockedReadline.emitKeypressEvents).toHaveBeenCalledWith(process.stdin);
73
68
  expect(process.stdin.setRawMode).toHaveBeenCalledWith(true);
@@ -83,7 +78,7 @@ describe('lib/process', () => {
83
78
  removeAllListeners: vi.fn(),
84
79
  },
85
80
  });
86
- (0, process_1.handleKeypress)(mockCallback);
81
+ handleKeypress(mockCallback);
87
82
  expect(process.stdin.setRawMode).toBeUndefined();
88
83
  });
89
84
  });
@@ -1,15 +1,10 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const path_1 = __importDefault(require("path"));
7
- const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
8
- const en_1 = require("../../lang/en");
9
- const ui_1 = require("../ui");
10
- const logger_1 = require("../ui/logger");
11
- const exitCodes_1 = require("../enums/exitCodes");
12
- const projectProfiles_1 = require("../projectProfiles");
1
+ import path from 'path';
2
+ import { loadHsProfileFile, getHsProfileFilename, getAllHsProfiles, } from '@hubspot/project-parsing-lib';
3
+ import { lib } from '../../lang/en.js';
4
+ import { uiBetaTag, uiLine } from '../ui/index.js';
5
+ import { uiLogger } from '../ui/logger.js';
6
+ import { EXIT_CODES } from '../enums/exitCodes.js';
7
+ import { logProfileHeader, logProfileFooter, loadProfile, exitIfUsingProfiles, } from '../projectProfiles.js';
13
8
  // Mock dependencies
14
9
  vi.mock('@hubspot/project-parsing-lib');
15
10
  vi.mock('../ui');
@@ -19,21 +14,21 @@ vi.mock('../../lang/en');
19
14
  const mockExit = vi.spyOn(process, 'exit').mockImplementation(code => {
20
15
  throw new Error(`Process.exit called with code ${code}`);
21
16
  });
22
- const mockedLoadHsProfileFile = project_parsing_lib_1.loadHsProfileFile;
23
- const mockedGetHsProfileFilename = project_parsing_lib_1.getHsProfileFilename;
24
- const mockedGetAllHsProfiles = project_parsing_lib_1.getAllHsProfiles;
25
- const mockedUiBetaTag = ui_1.uiBetaTag;
26
- const mockedUiLine = ui_1.uiLine;
27
- const mockedUiLogger = logger_1.uiLogger;
17
+ const mockedLoadHsProfileFile = loadHsProfileFile;
18
+ const mockedGetHsProfileFilename = getHsProfileFilename;
19
+ const mockedGetAllHsProfiles = getAllHsProfiles;
20
+ const mockedUiBetaTag = uiBetaTag;
21
+ const mockedUiLine = uiLine;
22
+ const mockedUiLogger = uiLogger;
28
23
  describe('lib/projectProfiles', () => {
29
24
  describe('logProfileHeader()', () => {
30
25
  it('should log profile header with correct format', () => {
31
26
  const profileName = 'test-profile';
32
27
  const filename = 'test-profile.hsprofile';
33
28
  mockedGetHsProfileFilename.mockReturnValue(filename);
34
- (0, projectProfiles_1.logProfileHeader)(profileName);
29
+ logProfileHeader(profileName);
35
30
  expect(mockedUiLine).toHaveBeenCalled();
36
- expect(mockedUiBetaTag).toHaveBeenCalledWith(en_1.lib.projectProfiles.logs.usingProfile(filename));
31
+ expect(mockedUiBetaTag).toHaveBeenCalledWith(lib.projectProfiles.logs.usingProfile(filename));
37
32
  expect(mockedUiLogger.log).toHaveBeenCalledWith('');
38
33
  });
39
34
  });
@@ -46,16 +41,16 @@ describe('lib/projectProfiles', () => {
46
41
  },
47
42
  };
48
43
  it('should log profile footer with account ID', () => {
49
- (0, projectProfiles_1.logProfileFooter)(mockProfile);
50
- expect(mockedUiLogger.log).toHaveBeenCalledWith(en_1.lib.projectProfiles.logs.profileTargetAccount(mockProfile.accountId));
44
+ logProfileFooter(mockProfile);
45
+ expect(mockedUiLogger.log).toHaveBeenCalledWith(lib.projectProfiles.logs.profileTargetAccount(mockProfile.accountId));
51
46
  expect(mockedUiLine).toHaveBeenCalled();
52
47
  expect(mockedUiLogger.log).toHaveBeenCalledWith('');
53
48
  });
54
49
  it('should log variables when includeVariables is true', () => {
55
- (0, projectProfiles_1.logProfileFooter)(mockProfile, true);
56
- expect(mockedUiLogger.log).toHaveBeenCalledWith(en_1.lib.projectProfiles.logs.profileTargetAccount(mockProfile.accountId));
50
+ logProfileFooter(mockProfile, true);
51
+ expect(mockedUiLogger.log).toHaveBeenCalledWith(lib.projectProfiles.logs.profileTargetAccount(mockProfile.accountId));
57
52
  expect(mockedUiLogger.log).toHaveBeenCalledWith('');
58
- expect(mockedUiLogger.log).toHaveBeenCalledWith(en_1.lib.projectProfiles.logs.profileVariables);
53
+ expect(mockedUiLogger.log).toHaveBeenCalledWith(lib.projectProfiles.logs.profileVariables);
59
54
  expect(mockedUiLogger.log).toHaveBeenCalledWith(' key1: value1');
60
55
  expect(mockedUiLogger.log).toHaveBeenCalledWith(' key2: value2');
61
56
  expect(mockedUiLine).toHaveBeenCalled();
@@ -74,25 +69,25 @@ describe('lib/projectProfiles', () => {
74
69
  accountId: 123,
75
70
  };
76
71
  it('should return undefined when project config is missing', () => {
77
- const result = (0, projectProfiles_1.loadProfile)(null, mockProjectDir, mockProfileName);
72
+ const result = loadProfile(null, mockProjectDir, mockProfileName);
78
73
  expect(result).toBeUndefined();
79
- expect(mockedUiLogger.error).toHaveBeenCalledWith(en_1.lib.projectProfiles.loadProfile.errors.noProjectConfig);
74
+ expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.loadProfile.errors.noProjectConfig);
80
75
  });
81
76
  it('should return undefined when profile is not found', () => {
82
77
  mockedLoadHsProfileFile.mockReturnValue(null);
83
78
  const filename = 'test-profile.hsprofile';
84
79
  mockedGetHsProfileFilename.mockReturnValue(filename);
85
- const result = (0, projectProfiles_1.loadProfile)(mockProjectConfig, mockProjectDir, mockProfileName);
80
+ const result = loadProfile(mockProjectConfig, mockProjectDir, mockProfileName);
86
81
  expect(result).toBeUndefined();
87
- expect(mockedUiLogger.error).toHaveBeenCalledWith(en_1.lib.projectProfiles.loadProfile.errors.profileNotFound(filename));
82
+ expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.loadProfile.errors.profileNotFound(filename));
88
83
  });
89
84
  it('should return undefined when profile has no account ID', () => {
90
85
  mockedLoadHsProfileFile.mockReturnValue({});
91
86
  const filename = 'test-profile.hsprofile';
92
87
  mockedGetHsProfileFilename.mockReturnValue(filename);
93
- const result = (0, projectProfiles_1.loadProfile)(mockProjectConfig, mockProjectDir, mockProfileName);
88
+ const result = loadProfile(mockProjectConfig, mockProjectDir, mockProfileName);
94
89
  expect(result).toBeUndefined();
95
- expect(mockedUiLogger.error).toHaveBeenCalledWith(en_1.lib.projectProfiles.loadProfile.errors.missingAccountId(filename));
90
+ expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.loadProfile.errors.missingAccountId(filename));
96
91
  });
97
92
  it('should return undefined when profile loading fails', () => {
98
93
  mockedLoadHsProfileFile.mockImplementation(() => {
@@ -100,15 +95,15 @@ describe('lib/projectProfiles', () => {
100
95
  });
101
96
  const filename = 'test-profile.hsprofile';
102
97
  mockedGetHsProfileFilename.mockReturnValue(filename);
103
- const result = (0, projectProfiles_1.loadProfile)(mockProjectConfig, mockProjectDir, mockProfileName);
98
+ const result = loadProfile(mockProjectConfig, mockProjectDir, mockProfileName);
104
99
  expect(result).toBeUndefined();
105
- expect(mockedUiLogger.error).toHaveBeenCalledWith(en_1.lib.projectProfiles.loadProfile.errors.failedToLoadProfile(filename));
100
+ expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.loadProfile.errors.failedToLoadProfile(filename));
106
101
  });
107
102
  it('should return profile when loading succeeds', () => {
108
103
  mockedLoadHsProfileFile.mockReturnValue(mockProfile);
109
- const result = (0, projectProfiles_1.loadProfile)(mockProjectConfig, mockProjectDir, mockProfileName);
104
+ const result = loadProfile(mockProjectConfig, mockProjectDir, mockProfileName);
110
105
  expect(result).toEqual(mockProfile);
111
- expect(mockedLoadHsProfileFile).toHaveBeenCalledWith(path_1.default.join(mockProjectDir, mockProjectConfig.srcDir), mockProfileName);
106
+ expect(mockedLoadHsProfileFile).toHaveBeenCalledWith(path.join(mockProjectDir, mockProjectConfig.srcDir), mockProfileName);
112
107
  });
113
108
  });
114
109
  describe('exitIfUsingProfiles()', () => {
@@ -120,15 +115,15 @@ describe('lib/projectProfiles', () => {
120
115
  const mockProjectDir = '/test/project';
121
116
  it('should not exit when no profiles exist', async () => {
122
117
  mockedGetAllHsProfiles.mockResolvedValue([]);
123
- await (0, projectProfiles_1.exitIfUsingProfiles)(mockProjectConfig, mockProjectDir);
118
+ await exitIfUsingProfiles(mockProjectConfig, mockProjectDir);
124
119
  expect(mockedUiLogger.error).not.toHaveBeenCalled();
125
120
  expect(mockExit).not.toHaveBeenCalled();
126
121
  });
127
122
  it('should exit with error when profiles exist', async () => {
128
123
  mockedGetAllHsProfiles.mockResolvedValue(['profile1', 'profile2']);
129
- await expect((0, projectProfiles_1.exitIfUsingProfiles)(mockProjectConfig, mockProjectDir)).rejects.toThrow(`Process.exit called with code ${exitCodes_1.EXIT_CODES.ERROR}`);
130
- expect(mockedUiLogger.error).toHaveBeenCalledWith(en_1.lib.projectProfiles.exitIfUsingProfiles.errors.noProfileSpecified);
131
- expect(mockExit).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
124
+ await expect(exitIfUsingProfiles(mockProjectConfig, mockProjectDir)).rejects.toThrow(`Process.exit called with code ${EXIT_CODES.ERROR}`);
125
+ expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.exitIfUsingProfiles.errors.noProfileSpecified);
126
+ expect(mockExit).toHaveBeenCalledWith(EXIT_CODES.ERROR);
132
127
  });
133
128
  });
134
129
  });
@@ -1,41 +1,36 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const logger_1 = require("@hubspot/local-dev-lib/logger");
7
- const sandboxSync_1 = require("@hubspot/local-dev-lib/api/sandboxSync");
8
- const config_1 = require("@hubspot/local-dev-lib/config");
9
- const config_2 = require("@hubspot/local-dev-lib/constants/config");
10
- const testUtils_1 = require("../testUtils");
11
- const sandboxes_1 = require("../sandboxes");
12
- const sandboxSync_2 = require("../sandboxSync");
13
- const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
1
+ import { logger } from '@hubspot/local-dev-lib/logger';
2
+ import { initiateSync } from '@hubspot/local-dev-lib/api/sandboxSync';
3
+ import { getAccountId } from '@hubspot/local-dev-lib/config';
4
+ import { HUBSPOT_ACCOUNT_TYPES } from '@hubspot/local-dev-lib/constants/config';
5
+ import { mockHubSpotHttpError } from '../testUtils.js';
6
+ import { getAvailableSyncTypes } from '../sandboxes.js';
7
+ import { syncSandbox } from '../sandboxSync.js';
8
+ import SpinniesManager from '../ui/SpinniesManager.js';
14
9
  vi.mock('@hubspot/local-dev-lib/logger');
15
10
  vi.mock('@hubspot/local-dev-lib/api/sandboxSync');
16
11
  vi.mock('@hubspot/local-dev-lib/config');
17
12
  vi.mock('../sandboxes');
18
13
  vi.mock('../ui/SpinniesManager');
19
- const mockedLogger = logger_1.logger;
20
- const mockedInitiateSync = sandboxSync_1.initiateSync;
21
- const mockedGetAccountId = config_1.getAccountId;
22
- const mockedGetAvailableSyncTypes = sandboxes_1.getAvailableSyncTypes;
23
- const mockedSpinniesInit = SpinniesManager_1.default.init;
24
- const mockedSpinniesAdd = SpinniesManager_1.default.add;
25
- const mockedSpinniesSucceed = SpinniesManager_1.default.succeed;
26
- const mockedSpinniesFail = SpinniesManager_1.default.fail;
14
+ const mockedLogger = logger;
15
+ const mockedInitiateSync = initiateSync;
16
+ const mockedGetAccountId = getAccountId;
17
+ const mockedGetAvailableSyncTypes = getAvailableSyncTypes;
18
+ const mockedSpinniesInit = SpinniesManager.init;
19
+ const mockedSpinniesAdd = SpinniesManager.add;
20
+ const mockedSpinniesSucceed = SpinniesManager.succeed;
21
+ const mockedSpinniesFail = SpinniesManager.fail;
27
22
  describe('lib/sandboxSync', () => {
28
23
  const mockEnv = 'qa';
29
24
  const mockParentAccount = {
30
25
  name: 'Parent Account',
31
26
  portalId: 123,
32
- accountType: config_2.HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX,
27
+ accountType: HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX,
33
28
  env: mockEnv,
34
29
  };
35
30
  const mockChildAccount = {
36
31
  name: 'Child Account',
37
32
  portalId: 456,
38
- accountType: config_2.HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
33
+ accountType: HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
39
34
  env: mockEnv,
40
35
  };
41
36
  const mockSyncTasks = [{ type: 'mock-sync-type' }];
@@ -48,7 +43,7 @@ describe('lib/sandboxSync', () => {
48
43
  describe('syncSandbox()', () => {
49
44
  it('successfully syncs a sandbox with provided sync tasks', async () => {
50
45
  mockedInitiateSync.mockResolvedValue({ status: 'SUCCESS' });
51
- await (0, sandboxSync_2.syncSandbox)(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks);
46
+ await syncSandbox(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks);
52
47
  expect(mockedSpinniesInit).toHaveBeenCalled();
53
48
  expect(mockedSpinniesAdd).toHaveBeenCalled();
54
49
  expect(mockedInitiateSync).toHaveBeenCalledWith(mockParentAccount.portalId, mockChildAccount.portalId, mockSyncTasks, mockChildAccount.portalId);
@@ -56,7 +51,7 @@ describe('lib/sandboxSync', () => {
56
51
  });
57
52
  it('fetches sync types when no tasks are provided', async () => {
58
53
  mockedInitiateSync.mockResolvedValue({ status: 'SUCCESS' });
59
- await (0, sandboxSync_2.syncSandbox)(mockChildAccount, mockParentAccount, mockEnv, []);
54
+ await syncSandbox(mockChildAccount, mockParentAccount, mockEnv, []);
60
55
  expect(mockedGetAvailableSyncTypes).toHaveBeenCalledWith(mockParentAccount, mockChildAccount);
61
56
  expect(mockedGetAvailableSyncTypes).toHaveBeenCalledWith(mockParentAccount, mockChildAccount);
62
57
  expect(mockedInitiateSync).toHaveBeenCalled();
@@ -65,10 +60,10 @@ describe('lib/sandboxSync', () => {
65
60
  mockedGetAccountId.mockReset();
66
61
  mockedGetAccountId.mockReturnValue(null);
67
62
  const errorRegex = new RegExp(`Couldn't sync ${mockChildAccount.portalId} because your account has been removed from`);
68
- await expect((0, sandboxSync_2.syncSandbox)(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toThrow(errorRegex);
63
+ await expect(syncSandbox(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toThrow(errorRegex);
69
64
  });
70
65
  it('handles sync in progress error', async () => {
71
- const error = (0, testUtils_1.mockHubSpotHttpError)('', {
66
+ const error = mockHubSpotHttpError('', {
72
67
  status: 429,
73
68
  data: {
74
69
  category: 'RATE_LIMITS',
@@ -76,12 +71,12 @@ describe('lib/sandboxSync', () => {
76
71
  },
77
72
  });
78
73
  mockedInitiateSync.mockRejectedValue(error);
79
- await expect((0, sandboxSync_2.syncSandbox)(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toEqual(error);
74
+ await expect(syncSandbox(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toEqual(error);
80
75
  expect(mockedSpinniesFail).toHaveBeenCalled();
81
76
  expect(mockedLogger.error).toHaveBeenCalledWith(expect.stringMatching(/Couldn't run the sync because there's another sync in progress/));
82
77
  });
83
78
  it('handles invalid user error', async () => {
84
- const error = (0, testUtils_1.mockHubSpotHttpError)('', {
79
+ const error = mockHubSpotHttpError('', {
85
80
  status: 403,
86
81
  data: {
87
82
  category: 'BANNED',
@@ -89,12 +84,12 @@ describe('lib/sandboxSync', () => {
89
84
  },
90
85
  });
91
86
  mockedInitiateSync.mockRejectedValue(error);
92
- await expect((0, sandboxSync_2.syncSandbox)(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toEqual(error);
87
+ await expect(syncSandbox(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toEqual(error);
93
88
  expect(mockedSpinniesFail).toHaveBeenCalled();
94
89
  expect(mockedLogger.error).toHaveBeenCalledWith(expect.stringMatching(/because your account has been removed from/));
95
90
  });
96
91
  it('handles not super admin error', async () => {
97
- const error = (0, testUtils_1.mockHubSpotHttpError)('', {
92
+ const error = mockHubSpotHttpError('', {
98
93
  status: 403,
99
94
  data: {
100
95
  category: 'BANNED',
@@ -102,12 +97,12 @@ describe('lib/sandboxSync', () => {
102
97
  },
103
98
  });
104
99
  mockedInitiateSync.mockRejectedValue(error);
105
- await expect((0, sandboxSync_2.syncSandbox)(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toEqual(error);
100
+ await expect(syncSandbox(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toEqual(error);
106
101
  expect(mockedSpinniesFail).toHaveBeenCalled();
107
102
  expect(mockedLogger.error).toHaveBeenCalledWith(expect.stringMatching(/Couldn't run the sync because you are not a super admin in/));
108
103
  });
109
104
  it('handles sandbox not found error', async () => {
110
- const error = (0, testUtils_1.mockHubSpotHttpError)('', {
105
+ const error = mockHubSpotHttpError('', {
111
106
  status: 404,
112
107
  data: {
113
108
  category: 'OBJECT_NOT_FOUND',
@@ -115,13 +110,13 @@ describe('lib/sandboxSync', () => {
115
110
  },
116
111
  });
117
112
  mockedInitiateSync.mockRejectedValue(error);
118
- await expect((0, sandboxSync_2.syncSandbox)(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toEqual(error);
113
+ await expect(syncSandbox(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks)).rejects.toEqual(error);
119
114
  expect(mockedSpinniesFail).toHaveBeenCalled();
120
115
  expect(mockedLogger.error).toHaveBeenCalledWith(expect.stringMatching(/may have been deleted through the UI/));
121
116
  });
122
117
  it('displays slim info message when specified', async () => {
123
118
  mockedInitiateSync.mockResolvedValue({ status: 'SUCCESS' });
124
- await (0, sandboxSync_2.syncSandbox)(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks, true);
119
+ await syncSandbox(mockChildAccount, mockParentAccount, mockEnv, mockSyncTasks, true);
125
120
  expect(mockedLogger.info).not.toHaveBeenCalled();
126
121
  expect(mockedSpinniesSucceed).toHaveBeenCalledWith('sandboxSync', expect.objectContaining({
127
122
  text: expect.stringMatching(/Initiated sync of object definitions from production to /),