@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
@@ -0,0 +1,117 @@
1
+ import fs from 'fs-extra';
2
+ import os from 'os';
3
+ import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
4
+ import { downloadProject } from '@hubspot/local-dev-lib/api/projects';
5
+ import { extractZipArchive } from '@hubspot/local-dev-lib/archive';
6
+ import { translate } from '@hubspot/project-parsing-lib';
7
+ import { isDeployedProjectUpToDateWithLocal } from '../localDev/helpers.js';
8
+ import { isDeepEqual } from '../../utils/isDeepEqual.js';
9
+ // Mock all external dependencies
10
+ vi.mock('@hubspot/local-dev-lib/api/projects');
11
+ vi.mock('@hubspot/local-dev-lib/archive');
12
+ vi.mock('@hubspot/project-parsing-lib');
13
+ vi.mock('fs-extra');
14
+ vi.mock('os');
15
+ vi.mock('../../utils/isDeepEqual.js');
16
+ describe('isDeployedProjectUpToDateWithLocal', () => {
17
+ const mockProjectName = 'test-project';
18
+ const mockAccountId = 123456;
19
+ const mockBuildId = 789;
20
+ const mockProjectConfig = {
21
+ name: mockProjectName,
22
+ srcDir: 'src',
23
+ platformVersion: '1.0.0',
24
+ };
25
+ const mockLocalNode = {
26
+ uid: 'component1',
27
+ componentType: 'APP',
28
+ localDev: {
29
+ componentRoot: '/local/path',
30
+ componentConfigPath: '/local/path/config.json',
31
+ configUpdatedSinceLastUpload: false,
32
+ },
33
+ componentDeps: {},
34
+ metaFilePath: '/local/path',
35
+ config: { name: 'Component 1' },
36
+ files: [],
37
+ };
38
+ const mockLocalProjectNodes = {
39
+ component1: mockLocalNode,
40
+ };
41
+ const mockTempDir = '/tmp/test-temp-dir';
42
+ const mockZippedProject = Buffer.from('fake-zip-data');
43
+ beforeEach(() => {
44
+ vi.clearAllMocks();
45
+ // Mock fs.mkdtemp
46
+ fs.mkdtemp.mockResolvedValue(mockTempDir);
47
+ // Mock fs.pathExists
48
+ fs.pathExists.mockResolvedValue(true);
49
+ // Mock fs.remove
50
+ fs.remove.mockResolvedValue(undefined);
51
+ // Mock os.tmpdir
52
+ os.tmpdir.mockReturnValue('/tmp');
53
+ });
54
+ afterEach(() => {
55
+ vi.restoreAllMocks();
56
+ });
57
+ describe('when projects are identical', () => {
58
+ it('should return true for identical projects', async () => {
59
+ // Mock downloadProject
60
+ downloadProject.mockResolvedValue({
61
+ data: mockZippedProject,
62
+ });
63
+ // Mock extractZipArchive
64
+ extractZipArchive.mockResolvedValue(undefined);
65
+ // Mock translate to return identical nodes
66
+ translate.mockResolvedValue({
67
+ intermediateNodesIndexedByUid: mockLocalProjectNodes,
68
+ });
69
+ // Mock isDeepEqual to return true for identical projects
70
+ isDeepEqual.mockReturnValue(true);
71
+ const result = await isDeployedProjectUpToDateWithLocal(mockProjectConfig, mockAccountId, mockBuildId, mockLocalProjectNodes);
72
+ expect(result).toBe(true);
73
+ expect(isDeepEqual).toHaveBeenCalledWith(mockLocalProjectNodes, mockLocalProjectNodes, ['localDev']);
74
+ expect(fs.remove).toHaveBeenCalledWith(mockTempDir);
75
+ });
76
+ });
77
+ describe('when projects are different', () => {
78
+ it('should return false for different projects', async () => {
79
+ // Mock downloadProject
80
+ downloadProject.mockResolvedValue({
81
+ data: mockZippedProject,
82
+ });
83
+ // Mock extractZipArchive
84
+ extractZipArchive.mockResolvedValue(undefined);
85
+ // Mock translate to return different nodes
86
+ const differentDeployedNodes = {};
87
+ translate.mockResolvedValue({
88
+ intermediateNodesIndexedByUid: differentDeployedNodes,
89
+ });
90
+ // Mock isDeepEqual to return false for different projects
91
+ isDeepEqual.mockReturnValue(false);
92
+ const result = await isDeployedProjectUpToDateWithLocal(mockProjectConfig, mockAccountId, mockBuildId, mockLocalProjectNodes);
93
+ expect(result).toBe(false);
94
+ expect(isDeepEqual).toHaveBeenCalledWith(mockLocalProjectNodes, differentDeployedNodes, ['localDev']);
95
+ });
96
+ });
97
+ describe('error handling', () => {
98
+ it('should clean up temp directory even when errors occur', async () => {
99
+ // Mock downloadProject to throw an error after temp dir is created
100
+ downloadProject.mockRejectedValue(new Error('Download Error'));
101
+ await expect(isDeployedProjectUpToDateWithLocal(mockProjectConfig, mockAccountId, mockBuildId, mockLocalProjectNodes)).rejects.toThrow('Download Error');
102
+ expect(fs.remove).toHaveBeenCalledWith(mockTempDir);
103
+ });
104
+ it('should handle translateForLocalDev errors', async () => {
105
+ // Mock downloadProject
106
+ downloadProject.mockResolvedValue({
107
+ data: mockZippedProject,
108
+ });
109
+ // Mock extractZipArchive
110
+ extractZipArchive.mockResolvedValue(undefined);
111
+ // Mock translate to throw an error
112
+ translate.mockRejectedValue(new Error('Translation Error'));
113
+ await expect(isDeployedProjectUpToDateWithLocal(mockProjectConfig, mockAccountId, mockBuildId, mockLocalProjectNodes)).rejects.toThrow('Translation Error');
114
+ expect(fs.remove).toHaveBeenCalledWith(mockTempDir);
115
+ });
116
+ });
117
+ });
@@ -1,22 +1,17 @@
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 fs_1 = __importDefault(require("fs"));
7
- const os_1 = __importDefault(require("os"));
8
- const path_1 = __importDefault(require("path"));
9
- const exitCodes_1 = require("../../enums/exitCodes");
10
- const config_1 = require("../../projects/config");
11
- const logger_1 = require("@hubspot/local-dev-lib/logger");
1
+ import fs from 'fs';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ import { EXIT_CODES } from '../../enums/exitCodes.js';
5
+ import { validateProjectConfig } from '../../projects/config.js';
6
+ import { logger } from '@hubspot/local-dev-lib/logger';
12
7
  vi.mock('@hubspot/local-dev-lib/logger');
13
8
  describe('lib/projects', () => {
14
9
  describe('validateProjectConfig()', () => {
15
10
  let projectDir;
16
11
  let exitMock;
17
12
  beforeAll(() => {
18
- projectDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'projects-'));
19
- fs_1.default.mkdirSync(path_1.default.join(projectDir, 'src'));
13
+ projectDir = fs.mkdtempSync(path.join(os.tmpdir(), 'projects-'));
14
+ fs.mkdirSync(path.join(projectDir, 'src'));
20
15
  });
21
16
  beforeEach(() => {
22
17
  // @ts-expect-error - Mocking process.exit
@@ -29,60 +24,60 @@ describe('lib/projects', () => {
29
24
  });
30
25
  it('rejects undefined configuration', () => {
31
26
  // @ts-ignore Testing invalid input
32
- (0, config_1.validateProjectConfig)(null, projectDir);
33
- expect(exitMock).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
34
- expect(logger_1.logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*Unable to locate a project configuration file. Try running again from a project directory, or run*/));
27
+ validateProjectConfig(null, projectDir);
28
+ expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
29
+ expect(logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*Unable to locate a project configuration file. Try running again from a project directory, or run*/));
35
30
  });
36
31
  it('rejects configuration with missing name', () => {
37
32
  // @ts-ignore Testing invalid input
38
- (0, config_1.validateProjectConfig)({ srcDir: '.' }, projectDir);
39
- expect(exitMock).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
40
- expect(logger_1.logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*missing required fields*/));
33
+ validateProjectConfig({ srcDir: '.' }, projectDir);
34
+ expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
35
+ expect(logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*missing required fields*/));
41
36
  });
42
37
  it('rejects configuration with missing srcDir', () => {
43
38
  // @ts-ignore Testing invalid input
44
- (0, config_1.validateProjectConfig)({ name: 'hello' }, projectDir);
45
- expect(exitMock).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
46
- expect(logger_1.logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*missing required fields.*/));
39
+ validateProjectConfig({ name: 'hello' }, projectDir);
40
+ expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
41
+ expect(logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*missing required fields.*/));
47
42
  });
48
43
  describe('rejects configuration with srcDir outside project directory', () => {
49
44
  it('for parent directory', () => {
50
- (0, config_1.validateProjectConfig)({ name: 'hello', srcDir: '..', platformVersion: '' }, projectDir);
51
- expect(exitMock).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
52
- expect(logger_1.logger.error).toHaveBeenCalledWith(expect.stringContaining('srcDir: ".."'));
45
+ validateProjectConfig({ name: 'hello', srcDir: '..', platformVersion: '' }, projectDir);
46
+ expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
47
+ expect(logger.error).toHaveBeenCalledWith(expect.stringContaining('srcDir: ".."'));
53
48
  });
54
49
  it('for root directory', () => {
55
- (0, config_1.validateProjectConfig)({ name: 'hello', srcDir: '/', platformVersion: '' }, projectDir);
56
- expect(exitMock).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
57
- expect(logger_1.logger.error).toHaveBeenCalledWith(expect.stringContaining('srcDir: "/"'));
50
+ validateProjectConfig({ name: 'hello', srcDir: '/', platformVersion: '' }, projectDir);
51
+ expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
52
+ expect(logger.error).toHaveBeenCalledWith(expect.stringContaining('srcDir: "/"'));
58
53
  });
59
54
  it('for complicated directory', () => {
60
55
  const srcDir = './src/././../src/../../src';
61
- (0, config_1.validateProjectConfig)({ name: 'hello', srcDir, platformVersion: '' }, projectDir);
62
- expect(exitMock).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
63
- expect(logger_1.logger.error).toHaveBeenCalledWith(expect.stringContaining(`srcDir: "${srcDir}"`));
56
+ validateProjectConfig({ name: 'hello', srcDir, platformVersion: '' }, projectDir);
57
+ expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
58
+ expect(logger.error).toHaveBeenCalledWith(expect.stringContaining(`srcDir: "${srcDir}"`));
64
59
  });
65
60
  });
66
61
  it('rejects configuration with srcDir that does not exist', () => {
67
- (0, config_1.validateProjectConfig)({ name: 'hello', srcDir: 'foo', platformVersion: '' }, projectDir);
68
- expect(exitMock).toHaveBeenCalledWith(exitCodes_1.EXIT_CODES.ERROR);
69
- expect(logger_1.logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*could not be found in.*/));
62
+ validateProjectConfig({ name: 'hello', srcDir: 'foo', platformVersion: '' }, projectDir);
63
+ expect(exitMock).toHaveBeenCalledWith(EXIT_CODES.ERROR);
64
+ expect(logger.error).toHaveBeenCalledWith(expect.stringMatching(/.*could not be found in.*/));
70
65
  });
71
66
  describe('accepts configuration with valid srcDir', () => {
72
67
  it('for current directory', () => {
73
- (0, config_1.validateProjectConfig)({ name: 'hello', srcDir: '.', platformVersion: '' }, projectDir);
68
+ validateProjectConfig({ name: 'hello', srcDir: '.', platformVersion: '' }, projectDir);
74
69
  expect(exitMock).not.toHaveBeenCalled();
75
- expect(logger_1.logger.error).not.toHaveBeenCalled();
70
+ expect(logger.error).not.toHaveBeenCalled();
76
71
  });
77
72
  it('for relative directory', () => {
78
- (0, config_1.validateProjectConfig)({ name: 'hello', srcDir: './src', platformVersion: '' }, projectDir);
73
+ validateProjectConfig({ name: 'hello', srcDir: './src', platformVersion: '' }, projectDir);
79
74
  expect(exitMock).not.toHaveBeenCalled();
80
- expect(logger_1.logger.error).not.toHaveBeenCalled();
75
+ expect(logger.error).not.toHaveBeenCalled();
81
76
  });
82
77
  it('for implied relative directory', () => {
83
- (0, config_1.validateProjectConfig)({ name: 'hello', srcDir: 'src', platformVersion: '' }, projectDir);
78
+ validateProjectConfig({ name: 'hello', srcDir: 'src', platformVersion: '' }, projectDir);
84
79
  expect(exitMock).not.toHaveBeenCalled();
85
- expect(logger_1.logger.error).not.toHaveBeenCalled();
80
+ expect(logger.error).not.toHaveBeenCalled();
86
81
  });
87
82
  });
88
83
  });
@@ -1,50 +1,12 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const fs_1 = __importDefault(require("fs"));
40
- const HSfs = __importStar(require("@hubspot/local-dev-lib/fs"));
41
- const logger_1 = require("@hubspot/local-dev-lib/logger");
42
- const structure_1 = require("../structure");
43
- const Projects_1 = require("../../../types/Projects");
1
+ import fs from 'fs';
2
+ import * as HSfs from '@hubspot/local-dev-lib/fs';
3
+ import { logger } from '@hubspot/local-dev-lib/logger';
4
+ import { getComponentTypeFromConfigFile, loadConfigFile, getAppCardConfigs, getIsLegacyApp, componentIsApp, findProjectComponents, getProjectComponentTypes, getComponentUid, componentIsPublicApp, } from '../structure.js';
5
+ import { ComponentTypes } from '../../../types/Projects.js';
44
6
  vi.mock('fs');
45
7
  vi.mock('@hubspot/local-dev-lib/fs');
46
8
  vi.mock('@hubspot/local-dev-lib/logger');
47
- const mockedReadFileSync = fs_1.default.readFileSync;
9
+ const mockedReadFileSync = fs.readFileSync;
48
10
  const mockedWalk = HSfs.walk;
49
11
  const getMockPrivateAppConfig = (cards = []) => ({
50
12
  name: 'test-app',
@@ -61,43 +23,43 @@ const getMockPrivateAppConfig = (cards = []) => ({
61
23
  describe('lib/projects/structure', () => {
62
24
  describe('getComponentTypeFromConfigFile()', () => {
63
25
  it('returns correct type for public app config', () => {
64
- expect((0, structure_1.getComponentTypeFromConfigFile)('public-app.json')).toBe(Projects_1.ComponentTypes.PublicApp);
26
+ expect(getComponentTypeFromConfigFile('public-app.json')).toBe(ComponentTypes.PublicApp);
65
27
  });
66
28
  it('returns correct type for private app config', () => {
67
- expect((0, structure_1.getComponentTypeFromConfigFile)('app.json')).toBe(Projects_1.ComponentTypes.PrivateApp);
29
+ expect(getComponentTypeFromConfigFile('app.json')).toBe(ComponentTypes.PrivateApp);
68
30
  });
69
31
  it('returns correct type for theme config', () => {
70
- expect((0, structure_1.getComponentTypeFromConfigFile)('theme.json')).toBe(Projects_1.ComponentTypes.HublTheme);
32
+ expect(getComponentTypeFromConfigFile('theme.json')).toBe(ComponentTypes.HublTheme);
71
33
  });
72
34
  it('returns null for unknown config file', () => {
73
- expect((0, structure_1.getComponentTypeFromConfigFile)('unknown.json')).toBeNull();
35
+ expect(getComponentTypeFromConfigFile('unknown.json')).toBeNull();
74
36
  });
75
37
  });
76
38
  describe('loadConfigFile()', () => {
77
39
  it('returns parsed JSON when file exists', () => {
78
40
  const mockConfig = { name: 'test-app' };
79
41
  mockedReadFileSync.mockReturnValue(JSON.stringify(mockConfig));
80
- expect((0, structure_1.loadConfigFile)('test/path/app.json')).toEqual(mockConfig);
42
+ expect(loadConfigFile('test/path/app.json')).toEqual(mockConfig);
81
43
  });
82
44
  it('returns null when file read fails', () => {
83
45
  mockedReadFileSync.mockImplementation(() => {
84
46
  throw new Error('File not found');
85
47
  });
86
- expect((0, structure_1.loadConfigFile)('nonexistent/path/app.json')).toBeNull();
87
- expect(logger_1.logger.debug).toHaveBeenCalled();
48
+ expect(loadConfigFile('nonexistent/path/app.json')).toBeNull();
49
+ expect(logger.debug).toHaveBeenCalled();
88
50
  });
89
51
  });
90
52
  describe('getAppCardConfigs()', () => {
91
53
  const mockAppPath = '/test/path';
92
54
  it('returns empty array when no cards exist', () => {
93
55
  const appConfig = getMockPrivateAppConfig();
94
- expect((0, structure_1.getAppCardConfigs)(appConfig, mockAppPath)).toEqual([]);
56
+ expect(getAppCardConfigs(appConfig, mockAppPath)).toEqual([]);
95
57
  });
96
58
  it('returns array of card configs when valid cards exist', () => {
97
59
  const mockCardConfig = { type: 'crm-card' };
98
60
  mockedReadFileSync.mockReturnValue(JSON.stringify(mockCardConfig));
99
61
  const appConfig = getMockPrivateAppConfig([{ file: 'card.json' }]);
100
- expect((0, structure_1.getAppCardConfigs)(appConfig, mockAppPath)).toEqual([
62
+ expect(getAppCardConfigs(appConfig, mockAppPath)).toEqual([
101
63
  mockCardConfig,
102
64
  ]);
103
65
  });
@@ -108,11 +70,11 @@ describe('lib/projects/structure', () => {
108
70
  const cardConfig = { type: 'crm-card' };
109
71
  const appConfig = getMockPrivateAppConfig([{ file: 'card.json' }]);
110
72
  mockedReadFileSync.mockReturnValue(JSON.stringify(cardConfig));
111
- expect((0, structure_1.getIsLegacyApp)(appConfig, mockAppPath)).toBe(true);
73
+ expect(getIsLegacyApp(appConfig, mockAppPath)).toBe(true);
112
74
  });
113
75
  it('returns false when the app has no cards', () => {
114
76
  const appConfig = getMockPrivateAppConfig();
115
- expect((0, structure_1.getIsLegacyApp)(appConfig, mockAppPath)).toBe(false);
77
+ expect(getIsLegacyApp(appConfig, mockAppPath)).toBe(false);
116
78
  });
117
79
  it('returns false for non-legacy app', () => {
118
80
  const cardConfig = {
@@ -120,20 +82,20 @@ describe('lib/projects/structure', () => {
120
82
  };
121
83
  const appConfig = getMockPrivateAppConfig([{ file: 'card.json' }]);
122
84
  mockedReadFileSync.mockReturnValue(JSON.stringify(cardConfig));
123
- expect((0, structure_1.getIsLegacyApp)(appConfig, mockAppPath)).toBe(false);
85
+ expect(getIsLegacyApp(appConfig, mockAppPath)).toBe(false);
124
86
  });
125
87
  });
126
88
  describe('findProjectComponents()', () => {
127
89
  it('returns an empty array of components when no components are found', async () => {
128
90
  mockedWalk.mockReturnValue([]);
129
- const components = await (0, structure_1.findProjectComponents)('');
91
+ const components = await findProjectComponents('');
130
92
  expect(components).toEqual([]);
131
93
  });
132
94
  it('returns an array of components when components are found', async () => {
133
95
  const cardConfig = { type: 'crm-card' };
134
96
  const appConfig = getMockPrivateAppConfig();
135
97
  const component = {
136
- type: Projects_1.ComponentTypes.PrivateApp,
98
+ type: ComponentTypes.PrivateApp,
137
99
  config: appConfig,
138
100
  runnable: true,
139
101
  path: '',
@@ -142,108 +104,108 @@ describe('lib/projects/structure', () => {
142
104
  mockedReadFileSync
143
105
  .mockReturnValueOnce(JSON.stringify(appConfig))
144
106
  .mockReturnValueOnce(JSON.stringify(cardConfig));
145
- const components = await (0, structure_1.findProjectComponents)('');
107
+ const components = await findProjectComponents('');
146
108
  expect(components).toEqual([component]);
147
109
  });
148
110
  });
149
111
  describe('getProjectComponentTypes()', () => {
150
112
  it('returns the correct component types', () => {
151
113
  const component = {
152
- type: Projects_1.ComponentTypes.PrivateApp,
114
+ type: ComponentTypes.PrivateApp,
153
115
  config: getMockPrivateAppConfig(),
154
116
  runnable: true,
155
117
  path: 'test/path',
156
118
  };
157
119
  const components = [component];
158
- expect((0, structure_1.getProjectComponentTypes)(components)).toEqual({
159
- [Projects_1.ComponentTypes.PrivateApp]: true,
120
+ expect(getProjectComponentTypes(components)).toEqual({
121
+ [ComponentTypes.PrivateApp]: true,
160
122
  });
161
123
  });
162
124
  it('returns the correct component types for multiple components', () => {
163
125
  const component1 = {
164
- type: Projects_1.ComponentTypes.PrivateApp,
126
+ type: ComponentTypes.PrivateApp,
165
127
  config: getMockPrivateAppConfig(),
166
128
  runnable: true,
167
129
  path: 'test/path',
168
130
  };
169
131
  const component2 = {
170
- type: Projects_1.ComponentTypes.PublicApp,
132
+ type: ComponentTypes.PublicApp,
171
133
  // Config doesn't matter for this test so we can use a private app config
172
134
  config: getMockPrivateAppConfig(),
173
135
  runnable: true,
174
136
  path: 'test/path',
175
137
  };
176
138
  const components = [component1, component2];
177
- expect((0, structure_1.getProjectComponentTypes)(components)).toEqual({
178
- [Projects_1.ComponentTypes.PrivateApp]: true,
179
- [Projects_1.ComponentTypes.PublicApp]: true,
139
+ expect(getProjectComponentTypes(components)).toEqual({
140
+ [ComponentTypes.PrivateApp]: true,
141
+ [ComponentTypes.PublicApp]: true,
180
142
  });
181
143
  });
182
144
  it('returns an empty object when no components are provided', () => {
183
145
  const components = [];
184
- expect((0, structure_1.getProjectComponentTypes)(components)).toEqual({});
146
+ expect(getProjectComponentTypes(components)).toEqual({});
185
147
  });
186
148
  });
187
149
  describe('getComponentUid()', () => {
188
150
  it('returns uid from the component config', () => {
189
151
  const component = {
190
- type: Projects_1.ComponentTypes.PrivateApp,
152
+ type: ComponentTypes.PrivateApp,
191
153
  config: getMockPrivateAppConfig(),
192
154
  runnable: true,
193
155
  path: 'test/path',
194
156
  };
195
- expect((0, structure_1.getComponentUid)(component)).toBe(component.config.uid);
157
+ expect(getComponentUid(component)).toBe(component.config.uid);
196
158
  });
197
159
  it('returns null for null input', () => {
198
- expect((0, structure_1.getComponentUid)(null)).toBeNull();
160
+ expect(getComponentUid(null)).toBeNull();
199
161
  });
200
162
  });
201
163
  describe('componentIsApp()', () => {
202
164
  it('returns true for public app component', () => {
203
165
  const component = {
204
- type: Projects_1.ComponentTypes.PublicApp,
166
+ type: ComponentTypes.PublicApp,
205
167
  // Config doesn't matter for this test so we can use a private app config
206
168
  config: getMockPrivateAppConfig(),
207
169
  runnable: true,
208
170
  path: 'test/path',
209
171
  };
210
- expect((0, structure_1.componentIsApp)(component)).toBe(true);
172
+ expect(componentIsApp(component)).toBe(true);
211
173
  });
212
174
  it('returns true for private app component', () => {
213
175
  const component = {
214
- type: Projects_1.ComponentTypes.PrivateApp,
176
+ type: ComponentTypes.PrivateApp,
215
177
  config: getMockPrivateAppConfig(),
216
178
  runnable: true,
217
179
  path: 'test/path',
218
180
  };
219
- expect((0, structure_1.componentIsApp)(component)).toBe(true);
181
+ expect(componentIsApp(component)).toBe(true);
220
182
  });
221
183
  it('returns false for null input', () => {
222
- expect((0, structure_1.componentIsApp)(null)).toBe(false);
184
+ expect(componentIsApp(null)).toBe(false);
223
185
  });
224
186
  });
225
187
  describe('componentIsPublicApp()', () => {
226
188
  it('returns true for public app component', () => {
227
189
  const component = {
228
- type: Projects_1.ComponentTypes.PublicApp,
190
+ type: ComponentTypes.PublicApp,
229
191
  // Config doesn't matter for this test so we can use a private app config
230
192
  config: getMockPrivateAppConfig(),
231
193
  runnable: true,
232
194
  path: 'test/path',
233
195
  };
234
- expect((0, structure_1.componentIsPublicApp)(component)).toBe(true);
196
+ expect(componentIsPublicApp(component)).toBe(true);
235
197
  });
236
198
  it('returns false for private app component', () => {
237
199
  const component = {
238
- type: Projects_1.ComponentTypes.PrivateApp,
200
+ type: ComponentTypes.PrivateApp,
239
201
  config: getMockPrivateAppConfig(),
240
202
  runnable: true,
241
203
  path: 'test/path',
242
204
  };
243
- expect((0, structure_1.componentIsPublicApp)(component)).toBe(false);
205
+ expect(componentIsPublicApp(component)).toBe(false);
244
206
  });
245
207
  it('returns false for null input', () => {
246
- expect((0, structure_1.componentIsPublicApp)(null)).toBe(false);
208
+ expect(componentIsPublicApp(null)).toBe(false);
247
209
  });
248
210
  });
249
211
  });