@hubspot/cli 7.6.0-beta.4 → 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 -60
  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 +125 -146
  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 +99 -141
  216. package/commands/project/__tests__/devUnifiedFlow.test.js +151 -155
  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 +2 -2
  234. package/commands/project/deploy.js +83 -90
  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 +69 -76
  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 -84
  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 +52 -25
  320. package/lang/en.js +421 -397
  321. package/lang/en.lyaml +4 -28
  322. package/lib/__tests__/accountTypes.test.js +20 -22
  323. package/lib/__tests__/buildAccount.test.js +115 -64
  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 +12 -3
  349. package/lib/buildAccount.js +165 -69
  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 -52
  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 -26
  442. package/lib/projects/localDev/DevServerManagerV2.d.ts +2 -2
  443. package/lib/projects/localDev/DevServerManagerV2.js +15 -22
  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 +11 -4
  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 +2 -2
  476. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +27 -31
  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 +80 -77
  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 +22 -15
  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,32 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EventClass = void 0;
4
- exports.getNodeVersionData = getNodeVersionData;
5
- exports.getPlatform = getPlatform;
6
- exports.trackCommandUsage = trackCommandUsage;
7
- exports.trackHelpUsage = trackHelpUsage;
8
- exports.trackConvertFieldsUsage = trackConvertFieldsUsage;
9
- exports.trackAuthAction = trackAuthAction;
10
- exports.trackCommandMetadataUsage = trackCommandMetadataUsage;
11
- const trackUsage_1 = require("@hubspot/local-dev-lib/trackUsage");
12
- const config_1 = require("@hubspot/local-dev-lib/config");
13
- const auth_1 = require("@hubspot/local-dev-lib/constants/auth");
14
- const logger_1 = require("@hubspot/local-dev-lib/logger");
15
- const package_json_1 = require("../package.json");
16
- const errorHandlers_1 = require("./errorHandlers");
17
- exports.EventClass = {
1
+ import { trackUsage } from '@hubspot/local-dev-lib/trackUsage';
2
+ import { isTrackingAllowed, getAccountConfig, } from '@hubspot/local-dev-lib/config';
3
+ import { API_KEY_AUTH_METHOD } from '@hubspot/local-dev-lib/constants/auth';
4
+ import { logger } from '@hubspot/local-dev-lib/logger';
5
+ import packageJson from '../package.json' with { type: 'json' };
6
+ const version = packageJson.version;
7
+ import { debugError } from './errorHandlers/index.js';
8
+ export const EventClass = {
18
9
  USAGE: 'USAGE',
19
10
  INTERACTION: 'INTERACTION',
20
11
  VIEW: 'VIEW',
21
12
  ACTIVATION: 'ACTIVATION',
22
13
  };
23
- function getNodeVersionData() {
14
+ export function getNodeVersionData() {
24
15
  return {
25
16
  nodeVersion: process.version,
26
17
  nodeMajorVersion: (process.version || '').split('.')[0],
27
18
  };
28
19
  }
29
- function getPlatform() {
20
+ export function getPlatform() {
30
21
  switch (process.platform) {
31
22
  case 'darwin':
32
23
  return 'macos';
@@ -36,18 +27,18 @@ function getPlatform() {
36
27
  return process.platform;
37
28
  }
38
29
  }
39
- async function trackCommandUsage(command, meta = {}, accountId) {
40
- if (!(0, config_1.isTrackingAllowed)()) {
30
+ export async function trackCommandUsage(command, meta = {}, accountId) {
31
+ if (!isTrackingAllowed()) {
41
32
  return;
42
33
  }
43
- logger_1.logger.debug('Attempting to track usage of "%s" command', command);
34
+ logger.debug('Attempting to track usage of "%s" command', command);
44
35
  let authType = 'unknown';
45
36
  if (accountId) {
46
- const accountConfig = (0, config_1.getAccountConfig)(accountId);
37
+ const accountConfig = getAccountConfig(accountId);
47
38
  authType =
48
39
  accountConfig && accountConfig.authType
49
40
  ? accountConfig.authType
50
- : auth_1.API_KEY_AUTH_METHOD.value;
41
+ : API_KEY_AUTH_METHOD.value;
51
42
  }
52
43
  return trackCliInteraction({
53
44
  action: 'cli-command',
@@ -57,28 +48,28 @@ async function trackCommandUsage(command, meta = {}, accountId) {
57
48
  accountId,
58
49
  });
59
50
  }
60
- async function trackHelpUsage(command) {
61
- if (!(0, config_1.isTrackingAllowed)()) {
51
+ export async function trackHelpUsage(command) {
52
+ if (!isTrackingAllowed()) {
62
53
  return;
63
54
  }
64
55
  if (command) {
65
- logger_1.logger.debug('Tracking help usage of "%s" sub-command', command);
56
+ logger.debug('Tracking help usage of "%s" sub-command', command);
66
57
  }
67
58
  else {
68
- logger_1.logger.debug('Tracking help usage of main command');
59
+ logger.debug('Tracking help usage of main command');
69
60
  }
70
61
  return trackCliInteraction({
71
62
  action: 'cli-help',
72
63
  command,
73
64
  });
74
65
  }
75
- async function trackConvertFieldsUsage(command) {
66
+ export async function trackConvertFieldsUsage(command) {
76
67
  return trackCliInteraction({
77
68
  action: 'cli-process-fields',
78
69
  command,
79
70
  });
80
71
  }
81
- async function trackAuthAction(command, authType, step, accountId) {
72
+ export async function trackAuthAction(command, authType, step, accountId) {
82
73
  return trackCliInteraction({
83
74
  action: 'cli-auth',
84
75
  command,
@@ -89,18 +80,18 @@ async function trackAuthAction(command, authType, step, accountId) {
89
80
  },
90
81
  });
91
82
  }
92
- async function trackCommandMetadataUsage(command, meta = {}, accountId) {
93
- if (!(0, config_1.isTrackingAllowed)()) {
83
+ export async function trackCommandMetadataUsage(command, meta = {}, accountId) {
84
+ if (!isTrackingAllowed()) {
94
85
  return;
95
86
  }
96
- logger_1.logger.debug('Attempting to track metadata usage of "%s" command', command);
87
+ logger.debug('Attempting to track metadata usage of "%s" command', command);
97
88
  let authType = 'unknown';
98
89
  if (accountId) {
99
- const accountConfig = (0, config_1.getAccountConfig)(accountId);
90
+ const accountConfig = getAccountConfig(accountId);
100
91
  authType =
101
92
  accountConfig && accountConfig.authType
102
93
  ? accountConfig.authType
103
- : auth_1.API_KEY_AUTH_METHOD.value;
94
+ : API_KEY_AUTH_METHOD.value;
104
95
  }
105
96
  return trackCliInteraction({
106
97
  action: 'cli-command-metadata',
@@ -112,44 +103,44 @@ async function trackCommandMetadataUsage(command, meta = {}, accountId) {
112
103
  }
113
104
  async function trackCliInteraction({ action, accountId, command, authType, meta = {}, }) {
114
105
  try {
115
- if (!(0, config_1.isTrackingAllowed)()) {
106
+ if (!isTrackingAllowed()) {
116
107
  return;
117
108
  }
118
109
  const usageTrackingEvent = {
119
110
  action,
120
111
  os: getPlatform(),
121
112
  ...getNodeVersionData(),
122
- version: package_json_1.version,
113
+ version,
123
114
  command,
124
115
  authType,
125
116
  ...meta,
126
117
  };
127
118
  if (process.env.HUBSPOT_MCP_AI_AGENT) {
128
119
  try {
129
- await (0, trackUsage_1.trackUsage)('cli-interaction', exports.EventClass.INTERACTION, {
120
+ await trackUsage('cli-interaction', EventClass.INTERACTION, {
130
121
  ...usageTrackingEvent,
131
122
  action: 'cli-mcp-server',
132
123
  type: process.env.HUBSPOT_MCP_AI_AGENT,
133
124
  }, accountId);
134
- logger_1.logger.debug('Sent AI usage tracking command event: %o', {
125
+ logger.debug('Sent AI usage tracking command event: %o', {
135
126
  ...usageTrackingEvent,
136
127
  action: 'cli-mcp-server',
137
128
  type: process.env.HUBSPOT_MCP_AI_AGENT,
138
129
  });
139
130
  }
140
131
  catch (error) {
141
- (0, errorHandlers_1.debugError)(error);
132
+ debugError(error);
142
133
  }
143
134
  }
144
135
  try {
145
- return (0, trackUsage_1.trackUsage)('cli-interaction', exports.EventClass.INTERACTION, usageTrackingEvent, accountId);
136
+ return trackUsage('cli-interaction', EventClass.INTERACTION, usageTrackingEvent, accountId);
146
137
  }
147
138
  catch (error) {
148
- (0, errorHandlers_1.debugError)(error);
139
+ debugError(error);
149
140
  }
150
- logger_1.logger.debug('Sent usage tracking command event: %o', usageTrackingEvent);
141
+ logger.debug('Sent usage tracking command event: %o', usageTrackingEvent);
151
142
  }
152
143
  catch (e) {
153
- (0, errorHandlers_1.debugError)(e);
144
+ debugError(e);
154
145
  }
155
146
  }
@@ -0,0 +1,269 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isDeepEqual } from '../isDeepEqual.js';
3
+ describe('isDeepEqual', () => {
4
+ describe('primitive values', () => {
5
+ it('should return true for identical primitives', () => {
6
+ expect(isDeepEqual(1, 1)).toBe(true);
7
+ expect(isDeepEqual('hello', 'hello')).toBe(true);
8
+ expect(isDeepEqual(true, true)).toBe(true);
9
+ expect(isDeepEqual(false, false)).toBe(true);
10
+ });
11
+ it('should return false for different primitives', () => {
12
+ expect(isDeepEqual(1, 2)).toBe(false);
13
+ expect(isDeepEqual('hello', 'world')).toBe(false);
14
+ expect(isDeepEqual(true, false)).toBe(false);
15
+ expect(isDeepEqual(1, '1')).toBe(false);
16
+ });
17
+ it('should handle zero and negative numbers correctly', () => {
18
+ expect(isDeepEqual(0, 0)).toBe(true);
19
+ expect(isDeepEqual(-1, -1)).toBe(true);
20
+ expect(isDeepEqual(0, -0)).toBe(true);
21
+ expect(isDeepEqual(0, 1)).toBe(false);
22
+ expect(isDeepEqual(-1, 1)).toBe(false);
23
+ });
24
+ it('should handle empty strings', () => {
25
+ expect(isDeepEqual('', '')).toBe(true);
26
+ expect(isDeepEqual('', 'a')).toBe(false);
27
+ });
28
+ });
29
+ describe('null and undefined', () => {
30
+ it('should return true for null === null and undefined === undefined', () => {
31
+ expect(isDeepEqual(null, null)).toBe(true);
32
+ expect(isDeepEqual(undefined, undefined)).toBe(true);
33
+ });
34
+ it('should return false for null vs undefined', () => {
35
+ expect(isDeepEqual(null, undefined)).toBe(false);
36
+ expect(isDeepEqual(undefined, null)).toBe(false);
37
+ });
38
+ it('should return false for null/undefined vs other values', () => {
39
+ expect(isDeepEqual(null, 0)).toBe(false);
40
+ expect(isDeepEqual(undefined, 0)).toBe(false);
41
+ expect(isDeepEqual(null, '')).toBe(false);
42
+ expect(isDeepEqual(null, false)).toBe(false);
43
+ expect(isDeepEqual(null, {})).toBe(false);
44
+ });
45
+ });
46
+ describe('objects', () => {
47
+ it('should return true for identical empty objects', () => {
48
+ expect(isDeepEqual({}, {})).toBe(true);
49
+ });
50
+ it('should return true for objects with same properties', () => {
51
+ const obj1 = { a: 1, b: 'hello' };
52
+ const obj2 = { a: 1, b: 'hello' };
53
+ expect(isDeepEqual(obj1, obj2)).toBe(true);
54
+ });
55
+ it('should return true for objects with same properties in different order', () => {
56
+ const obj1 = { a: 1, b: 'hello' };
57
+ const obj2 = { b: 'hello', a: 1 };
58
+ expect(isDeepEqual(obj1, obj2)).toBe(true);
59
+ });
60
+ it('should return false for objects with different property values', () => {
61
+ const obj1 = { a: 1, b: 'hello' };
62
+ const obj2 = { a: 1, b: 'world' };
63
+ expect(isDeepEqual(obj1, obj2)).toBe(false);
64
+ });
65
+ it('should return false for objects with different number of properties', () => {
66
+ const obj1 = { a: 1 };
67
+ const obj2 = { a: 1, b: 2 };
68
+ expect(isDeepEqual(obj1, obj2)).toBe(false);
69
+ });
70
+ it('should return false for objects with different property keys', () => {
71
+ const obj1 = { a: 1 };
72
+ const obj2 = { b: 1 };
73
+ expect(isDeepEqual(obj1, obj2)).toBe(false);
74
+ });
75
+ it('should return true for same object reference', () => {
76
+ const obj = { a: 1, b: 'hello' };
77
+ expect(isDeepEqual(obj, obj)).toBe(true);
78
+ });
79
+ });
80
+ describe('nested objects', () => {
81
+ it('should return true for deeply nested identical objects', () => {
82
+ const obj1 = {
83
+ a: 1,
84
+ b: {
85
+ c: 2,
86
+ d: {
87
+ e: 'nested',
88
+ f: true,
89
+ },
90
+ },
91
+ };
92
+ const obj2 = {
93
+ a: 1,
94
+ b: {
95
+ c: 2,
96
+ d: {
97
+ e: 'nested',
98
+ f: true,
99
+ },
100
+ },
101
+ };
102
+ expect(isDeepEqual(obj1, obj2)).toBe(true);
103
+ });
104
+ it('should return false for deeply nested objects with differences', () => {
105
+ const obj1 = {
106
+ a: 1,
107
+ b: {
108
+ c: 2,
109
+ d: {
110
+ e: 'nested',
111
+ f: true,
112
+ },
113
+ },
114
+ };
115
+ const obj2 = {
116
+ a: 1,
117
+ b: {
118
+ c: 2,
119
+ d: {
120
+ e: 'nested',
121
+ f: false, // Different value
122
+ },
123
+ },
124
+ };
125
+ expect(isDeepEqual(obj1, obj2)).toBe(false);
126
+ });
127
+ it('should handle objects with nested null/undefined values', () => {
128
+ const obj1 = { a: null, b: { c: undefined } };
129
+ const obj2 = { a: null, b: { c: undefined } };
130
+ expect(isDeepEqual(obj1, obj2)).toBe(true);
131
+ const obj3 = { a: null, b: { c: null } };
132
+ expect(isDeepEqual(obj1, obj3)).toBe(false);
133
+ });
134
+ });
135
+ describe('arrays', () => {
136
+ it('should return true for identical empty arrays', () => {
137
+ expect(isDeepEqual([], [])).toBe(true);
138
+ });
139
+ it('should return true for arrays with same elements', () => {
140
+ expect(isDeepEqual([1, 2, 3], [1, 2, 3])).toBe(true);
141
+ expect(isDeepEqual(['a', 'b'], ['a', 'b'])).toBe(true);
142
+ });
143
+ it('should return false for arrays with different elements', () => {
144
+ expect(isDeepEqual([1, 2, 3], [1, 2, 4])).toBe(false);
145
+ expect(isDeepEqual(['a', 'b'], ['a', 'c'])).toBe(false);
146
+ });
147
+ it('should return false for arrays with different lengths', () => {
148
+ expect(isDeepEqual([1, 2], [1, 2, 3])).toBe(false);
149
+ expect(isDeepEqual([1, 2, 3], [1, 2])).toBe(false);
150
+ });
151
+ it('should return false for arrays with same elements in different order', () => {
152
+ expect(isDeepEqual([1, 2, 3], [3, 2, 1])).toBe(false);
153
+ expect(isDeepEqual(['a', 'b'], ['b', 'a'])).toBe(false);
154
+ });
155
+ it('should handle nested arrays', () => {
156
+ const arr1 = [1, [2, 3], [4, [5, 6]]];
157
+ const arr2 = [1, [2, 3], [4, [5, 6]]];
158
+ expect(isDeepEqual(arr1, arr2)).toBe(true);
159
+ const arr3 = [1, [2, 3], [4, [5, 7]]];
160
+ expect(isDeepEqual(arr1, arr3)).toBe(false);
161
+ });
162
+ it('should handle arrays with objects', () => {
163
+ const arr1 = [{ a: 1 }, { b: 2 }];
164
+ const arr2 = [{ a: 1 }, { b: 2 }];
165
+ expect(isDeepEqual(arr1, arr2)).toBe(true);
166
+ const arr3 = [{ a: 1 }, { b: 3 }];
167
+ expect(isDeepEqual(arr1, arr3)).toBe(false);
168
+ });
169
+ });
170
+ describe('mixed types', () => {
171
+ it('should return false for object vs array', () => {
172
+ expect(isDeepEqual({}, [])).toBe(false);
173
+ expect(isDeepEqual({ 0: 'a', 1: 'b' }, ['a', 'b'])).toBe(false);
174
+ });
175
+ it('should return false for object vs primitive', () => {
176
+ expect(isDeepEqual({}, null)).toBe(false);
177
+ expect(isDeepEqual({ a: 1 }, 1)).toBe(false);
178
+ expect(isDeepEqual({}, '')).toBe(false);
179
+ });
180
+ it('should return false for array vs primitive', () => {
181
+ expect(isDeepEqual([], null)).toBe(false);
182
+ expect(isDeepEqual([1], 1)).toBe(false);
183
+ expect(isDeepEqual([], '')).toBe(false);
184
+ });
185
+ it('should handle complex mixed structures', () => {
186
+ const obj1 = {
187
+ number: 42,
188
+ string: 'hello',
189
+ boolean: true,
190
+ null_value: null,
191
+ array: [1, 'two', { three: 3 }],
192
+ nested: {
193
+ deep: {
194
+ value: 'found',
195
+ },
196
+ },
197
+ };
198
+ const obj2 = {
199
+ number: 42,
200
+ string: 'hello',
201
+ boolean: true,
202
+ null_value: null,
203
+ array: [1, 'two', { three: 3 }],
204
+ nested: {
205
+ deep: {
206
+ value: 'found',
207
+ },
208
+ },
209
+ };
210
+ expect(isDeepEqual(obj1, obj2)).toBe(true);
211
+ const obj3 = { ...obj2, number: 43 };
212
+ expect(isDeepEqual(obj1, obj3)).toBe(false);
213
+ });
214
+ });
215
+ describe('ignoreKeys functionality', () => {
216
+ it('should ignore specified keys in comparison', () => {
217
+ const obj1 = { a: 1, b: 2, c: 3 };
218
+ const obj2 = { a: 1, b: 999, c: 3 }; // b is different
219
+ expect(isDeepEqual(obj1, obj2)).toBe(false);
220
+ expect(isDeepEqual(obj1, obj2, ['b'])).toBe(true);
221
+ });
222
+ it('should ignore multiple keys', () => {
223
+ const obj1 = { a: 1, b: 2, c: 3, d: 4 };
224
+ const obj2 = { a: 1, b: 999, c: 888, d: 4 }; // b and c are different
225
+ expect(isDeepEqual(obj1, obj2, ['b', 'c'])).toBe(true);
226
+ });
227
+ it('should ignore keys in nested objects', () => {
228
+ const obj1 = {
229
+ top: 'same',
230
+ nested: {
231
+ keep: 'this',
232
+ ignore: 'different1',
233
+ deep: {
234
+ keep: 'this',
235
+ ignore: 'different2',
236
+ },
237
+ },
238
+ };
239
+ const obj2 = {
240
+ top: 'same',
241
+ nested: {
242
+ keep: 'this',
243
+ ignore: 'DIFFERENT1',
244
+ deep: {
245
+ keep: 'this',
246
+ ignore: 'DIFFERENT2',
247
+ },
248
+ },
249
+ };
250
+ expect(isDeepEqual(obj1, obj2)).toBe(false);
251
+ expect(isDeepEqual(obj1, obj2, ['ignore'])).toBe(true);
252
+ });
253
+ it('should handle ignoreKeys when one object has extra properties', () => {
254
+ const obj1 = { a: 1, b: 2 };
255
+ const obj2 = { a: 1, b: 2, c: 3 };
256
+ expect(isDeepEqual(obj1, obj2, ['c'])).toBe(true);
257
+ expect(isDeepEqual(obj2, obj1, ['c'])).toBe(true);
258
+ });
259
+ it('should ignore keys in arrays (array indices as keys)', () => {
260
+ const arr1 = ['keep', 'ignore', 'keep'];
261
+ const arr2 = ['keep', 'DIFFERENT', 'keep'];
262
+ expect(isDeepEqual(arr1, arr2, ['1'])).toBe(true);
263
+ });
264
+ it('should not affect primitive comparisons', () => {
265
+ expect(isDeepEqual(1, 2, ['any', 'keys'])).toBe(false);
266
+ expect(isDeepEqual('hello', 'hello', ['any', 'keys'])).toBe(true);
267
+ });
268
+ });
269
+ });
@@ -1,12 +1,6 @@
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
- exports.hasFlag = hasFlag;
7
- const process_1 = __importDefault(require("process"));
1
+ import process from 'process';
8
2
  // See https://github.com/sindresorhus/has-flag/blob/main/index.js (License: https://github.com/sindresorhus/has-flag/blob/main/license)
9
- function hasFlag(flag, argv = process_1.default.argv) {
3
+ export function hasFlag(flag, argv = process.argv) {
10
4
  const prefix = flag.startsWith('-') ? '' : flag.length === 1 ? '-' : '--';
11
5
  const position = argv.indexOf(prefix + flag);
12
6
  const terminatorPosition = argv.indexOf('--');
@@ -0,0 +1 @@
1
+ export declare function isDeepEqual(object1: unknown, object2: unknown, ignoreKeys?: string[]): boolean;
@@ -0,0 +1,31 @@
1
+ export function isDeepEqual(object1, object2, ignoreKeys) {
2
+ if (object1 === object2) {
3
+ return true;
4
+ }
5
+ if (object1 === null ||
6
+ object2 === null ||
7
+ typeof object1 !== 'object' ||
8
+ typeof object2 !== 'object') {
9
+ return object1 === object2;
10
+ }
11
+ if (typeof object1 !== typeof object2) {
12
+ return false;
13
+ }
14
+ const isArray1 = Array.isArray(object1);
15
+ const isArray2 = Array.isArray(object2);
16
+ if (isArray1 !== isArray2) {
17
+ return false;
18
+ }
19
+ const objKeys1 = Object.keys(object1).filter(key => !ignoreKeys?.includes(key));
20
+ const objKeys2 = Object.keys(object2).filter(key => !ignoreKeys?.includes(key));
21
+ if (objKeys1.length !== objKeys2.length)
22
+ return false;
23
+ for (const key of objKeys1) {
24
+ const value1 = object1[key];
25
+ const value2 = object2[key];
26
+ if (!isDeepEqual(value1, value2, ignoreKeys)) {
27
+ return false;
28
+ }
29
+ }
30
+ return true;
31
+ }