@hubspot/cli 8.0.11-experimental.0 → 8.0.11-experimental.2

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 (595) hide show
  1. package/api/migrate.js +3 -3
  2. package/bin/cli.js +5 -0
  3. package/commands/account/auth.js +12 -22
  4. package/commands/account/clean.js +5 -6
  5. package/commands/account/createOverride.js +7 -7
  6. package/commands/account/info.js +2 -1
  7. package/commands/account/list.js +3 -5
  8. package/commands/account/remove.js +2 -3
  9. package/commands/account/removeOverride.js +8 -10
  10. package/commands/account/rename.js +5 -6
  11. package/commands/account/use.js +8 -19
  12. package/commands/api.d.ts +10 -0
  13. package/commands/api.js +164 -0
  14. package/commands/app/migrate.js +12 -12
  15. package/commands/app/secret/add.js +6 -7
  16. package/commands/app/secret/delete.js +9 -10
  17. package/commands/app/secret/list.js +6 -7
  18. package/commands/app/secret/update.js +8 -9
  19. package/commands/auth.js +12 -12
  20. package/commands/cms/app/create.js +9 -5
  21. package/commands/cms/convertFields.js +8 -8
  22. package/commands/cms/delete.js +2 -3
  23. package/commands/cms/fetch.js +7 -7
  24. package/commands/cms/function/create.js +9 -5
  25. package/commands/cms/function/deploy.js +2 -3
  26. package/commands/cms/function/list.js +11 -7
  27. package/commands/cms/function/logs.js +17 -23
  28. package/commands/cms/function/server.js +2 -3
  29. package/commands/cms/getReactModule.js +7 -8
  30. package/commands/cms/lighthouseScore.js +25 -24
  31. package/commands/cms/lint.js +4 -5
  32. package/commands/cms/list.js +5 -6
  33. package/commands/cms/module/create.js +9 -5
  34. package/commands/cms/module/marketplace-validate.js +7 -8
  35. package/commands/cms/mv.js +2 -3
  36. package/commands/cms/template/create.js +10 -6
  37. package/commands/cms/theme/create.js +5 -5
  38. package/commands/cms/theme/generate-selectors.js +5 -4
  39. package/commands/cms/theme/marketplace-validate.js +8 -9
  40. package/commands/cms/theme/preview.js +16 -8
  41. package/commands/cms/upload.js +15 -12
  42. package/commands/cms/watch.js +5 -5
  43. package/commands/cms/webpack/create.js +5 -5
  44. package/commands/completion.js +3 -5
  45. package/commands/config/migrate.js +6 -7
  46. package/commands/config/set.js +5 -6
  47. package/commands/customObject/create.js +4 -5
  48. package/commands/customObject/createSchema.js +4 -5
  49. package/commands/customObject/deleteSchema.js +4 -5
  50. package/commands/customObject/fetchAllSchemas.js +2 -3
  51. package/commands/customObject/fetchSchema.js +2 -3
  52. package/commands/customObject/listSchemas.js +2 -3
  53. package/commands/customObject/updateSchema.js +4 -5
  54. package/commands/doctor.js +8 -8
  55. package/commands/feedback.js +6 -4
  56. package/commands/filemanager/fetch.js +5 -6
  57. package/commands/filemanager/upload.js +5 -5
  58. package/commands/getStarted.js +16 -18
  59. package/commands/hubdb/clear.js +5 -6
  60. package/commands/hubdb/create.js +4 -5
  61. package/commands/hubdb/delete.js +8 -9
  62. package/commands/hubdb/fetch.js +5 -6
  63. package/commands/hubdb/list.js +16 -14
  64. package/commands/init.js +14 -17
  65. package/commands/mcp/setup.js +5 -6
  66. package/commands/mcp/start.js +2 -3
  67. package/commands/open.js +4 -5
  68. package/commands/project/add.js +13 -8
  69. package/commands/project/create.js +20 -17
  70. package/commands/project/delete.d.ts +7 -0
  71. package/commands/project/delete.js +74 -0
  72. package/commands/project/deploy.js +39 -36
  73. package/commands/project/dev/deprecatedFlow.js +42 -15
  74. package/commands/project/dev/index.d.ts +3 -3
  75. package/commands/project/dev/index.js +29 -34
  76. package/commands/project/dev/unifiedFlow.js +37 -14
  77. package/commands/project/download.js +10 -11
  78. package/commands/project/info.js +19 -19
  79. package/commands/project/installDeps.js +9 -6
  80. package/commands/project/lint.js +11 -8
  81. package/commands/project/list.js +14 -14
  82. package/commands/project/listBuilds.js +8 -6
  83. package/commands/project/logs.js +5 -6
  84. package/commands/project/migrate.js +13 -13
  85. package/commands/project/open.js +5 -6
  86. package/commands/project/profile/add.js +12 -8
  87. package/commands/project/profile/delete.js +15 -11
  88. package/commands/project/updateDeps.js +9 -6
  89. package/commands/project/upload.js +33 -19
  90. package/commands/project/validate.js +12 -12
  91. package/commands/project/watch.js +22 -22
  92. package/commands/project.js +8 -3
  93. package/commands/sandbox/create.js +15 -15
  94. package/commands/sandbox/delete.js +13 -14
  95. package/commands/secret/addSecret.js +6 -7
  96. package/commands/secret/deleteSecret.js +5 -6
  97. package/commands/secret/listSecret.js +2 -3
  98. package/commands/secret/updateSecret.js +4 -5
  99. package/commands/testAccount/create.d.ts +1 -1
  100. package/commands/testAccount/create.js +24 -20
  101. package/commands/testAccount/createConfig.js +7 -8
  102. package/commands/testAccount/delete.js +27 -18
  103. package/commands/testAccount/importData.js +6 -7
  104. package/commands/upgrade.js +9 -10
  105. package/lang/en.d.ts +95 -7
  106. package/lang/en.js +98 -13
  107. package/lib/accountAuth.js +2 -2
  108. package/lib/app/migrate.js +7 -0
  109. package/lib/buildAccount.js +3 -3
  110. package/lib/constants.d.ts +0 -1
  111. package/lib/constants.js +0 -1
  112. package/lib/doctor/Diagnosis.js +5 -5
  113. package/lib/doctor/Doctor.js +2 -2
  114. package/lib/errorHandlers/index.js +4 -3
  115. package/lib/errorHandlers/suppressError.js +4 -0
  116. package/lib/errors/PromptExitError.d.ts +4 -2
  117. package/lib/errors/PromptExitError.js +3 -0
  118. package/lib/getStartedV2Actions.js +2 -2
  119. package/lib/hasFeature.js +1 -2
  120. package/lib/middleware/autoUpdateMiddleware.js +6 -3
  121. package/lib/process.d.ts +1 -1
  122. package/lib/process.js +10 -3
  123. package/lib/projects/ProjectLogsManager.js +2 -2
  124. package/lib/projects/create/index.js +2 -2
  125. package/lib/projects/create/legacy.js +2 -2
  126. package/lib/projects/create/v2.js +3 -4
  127. package/lib/projects/delete.d.ts +13 -0
  128. package/lib/projects/delete.js +193 -0
  129. package/lib/projects/deploy.d.ts +1 -1
  130. package/lib/projects/deploy.js +2 -2
  131. package/lib/projects/localDev/AppDevModeInterface.js +11 -11
  132. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +3 -1
  133. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
  134. package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
  135. package/lib/projects/localDev/DevSessionManager.js +31 -19
  136. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +3 -0
  137. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +16 -12
  138. package/lib/projects/localDev/LocalDevProcess.js +6 -5
  139. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  140. package/lib/projects/localDev/LocalDevState.js +3 -1
  141. package/lib/projects/localDev/helpers/account.d.ts +4 -3
  142. package/lib/projects/localDev/helpers/account.js +16 -19
  143. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  144. package/lib/projects/localDev/helpers/process.js +4 -10
  145. package/lib/projects/localDev/helpers/project.d.ts +4 -3
  146. package/lib/projects/localDev/helpers/project.js +31 -15
  147. package/lib/projects/projectInfo.d.ts +3 -20
  148. package/lib/projects/projectInfo.js +32 -54
  149. package/lib/projects/projectProfiles.d.ts +1 -2
  150. package/lib/projects/projectProfiles.js +5 -17
  151. package/lib/projects/upload.js +22 -3
  152. package/lib/projects/workspaces.d.ts +42 -0
  153. package/lib/projects/workspaces.js +350 -0
  154. package/lib/prompts/createApiSamplePrompt.js +4 -0
  155. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  156. package/lib/prompts/projectProfilePrompt.js +46 -0
  157. package/lib/prompts/promptUtils.js +3 -2
  158. package/lib/prompts/selectHubDBTablePrompt.js +2 -2
  159. package/lib/prompts/selectPublicAppForMigrationPrompt.js +2 -2
  160. package/lib/theme/cmsDevServerProcess.d.ts +2 -0
  161. package/lib/theme/cmsDevServerProcess.js +8 -7
  162. package/lib/ui/SpinniesManager.d.ts +1 -0
  163. package/lib/ui/SpinniesManager.js +20 -6
  164. package/lib/ui/spinniesUtils.d.ts +0 -1
  165. package/lib/ui/spinniesUtils.js +6 -16
  166. package/lib/usageTracking.d.ts +3 -4
  167. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  168. package/lib/yargs/makeYargsBuilder.js +33 -0
  169. package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
  170. package/lib/yargs/makeYargsHandlerWithUsageTracking.js +95 -0
  171. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  172. package/lib/yargs/strictEnforceBoolean.js +13 -0
  173. package/lib/yargsUtils.d.ts +3 -16
  174. package/lib/yargsUtils.js +3 -48
  175. package/mcp-server/Tool.d.ts +15 -0
  176. package/mcp-server/Tool.js +53 -0
  177. package/mcp-server/server.js +5 -3
  178. package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +4 -2
  179. package/mcp-server/tools/cms/HsCreateFunctionTool.js +8 -6
  180. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +4 -2
  181. package/mcp-server/tools/cms/HsCreateModuleTool.js +8 -6
  182. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +5 -3
  183. package/mcp-server/tools/cms/HsCreateTemplateTool.js +8 -6
  184. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +4 -2
  185. package/mcp-server/tools/cms/HsFunctionLogsTool.js +8 -6
  186. package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +4 -2
  187. package/mcp-server/tools/cms/HsListFunctionsTool.js +8 -6
  188. package/mcp-server/tools/cms/HsListTool.d.ts +4 -2
  189. package/mcp-server/tools/cms/HsListTool.js +8 -6
  190. package/mcp-server/tools/index.d.ts +3 -2
  191. package/mcp-server/tools/index.js +22 -22
  192. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +6 -4
  193. package/mcp-server/tools/project/AddFeatureToProjectTool.js +8 -6
  194. package/mcp-server/tools/project/CreateProjectTool.d.ts +6 -4
  195. package/mcp-server/tools/project/CreateProjectTool.js +9 -7
  196. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +4 -2
  197. package/mcp-server/tools/project/CreateTestAccountTool.js +20 -8
  198. package/mcp-server/tools/project/DeployProjectTool.d.ts +4 -2
  199. package/mcp-server/tools/project/DeployProjectTool.js +4 -6
  200. package/mcp-server/tools/project/DocFetchTool.d.ts +4 -2
  201. package/mcp-server/tools/project/DocFetchTool.js +8 -6
  202. package/mcp-server/tools/project/DocsSearchTool.d.ts +9 -3
  203. package/mcp-server/tools/project/DocsSearchTool.js +32 -9
  204. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +4 -2
  205. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +8 -6
  206. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +4 -2
  207. package/mcp-server/tools/project/GetApplicationInfoTool.js +8 -6
  208. package/mcp-server/tools/project/GetBuildLogsTool.d.ts +4 -2
  209. package/mcp-server/tools/project/GetBuildLogsTool.js +8 -6
  210. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +4 -2
  211. package/mcp-server/tools/project/GetBuildStatusTool.js +8 -6
  212. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +4 -2
  213. package/mcp-server/tools/project/GetConfigValuesTool.js +12 -7
  214. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +4 -2
  215. package/mcp-server/tools/project/GuidedWalkthroughTool.js +4 -6
  216. package/mcp-server/tools/project/UploadProjectTools.d.ts +4 -2
  217. package/mcp-server/tools/project/UploadProjectTools.js +9 -7
  218. package/mcp-server/tools/project/ValidateProjectTool.d.ts +4 -2
  219. package/mcp-server/tools/project/ValidateProjectTool.js +8 -6
  220. package/mcp-server/tools/project/constants.d.ts +2 -2
  221. package/mcp-server/types.d.ts +0 -7
  222. package/mcp-server/types.js +1 -13
  223. package/mcp-server/utils/logger.d.ts +10 -0
  224. package/mcp-server/utils/logger.js +29 -0
  225. package/mcp-server/utils/toolUsageTracking.js +0 -2
  226. package/package.json +12 -7
  227. package/types/LocalDev.d.ts +5 -0
  228. package/types/Projects.d.ts +19 -0
  229. package/types/Yargs.d.ts +18 -1
  230. package/api/__tests__/migrate.test.d.ts +0 -1
  231. package/api/__tests__/migrate.test.js +0 -199
  232. package/commands/__tests__/account.test.d.ts +0 -1
  233. package/commands/__tests__/account.test.js +0 -69
  234. package/commands/__tests__/auth.test.d.ts +0 -1
  235. package/commands/__tests__/auth.test.js +0 -43
  236. package/commands/__tests__/cms.test.d.ts +0 -1
  237. package/commands/__tests__/cms.test.js +0 -87
  238. package/commands/__tests__/config.test.d.ts +0 -1
  239. package/commands/__tests__/config.test.js +0 -44
  240. package/commands/__tests__/customObject.test.d.ts +0 -1
  241. package/commands/__tests__/customObject.test.js +0 -68
  242. package/commands/__tests__/doctor.test.d.ts +0 -1
  243. package/commands/__tests__/doctor.test.js +0 -132
  244. package/commands/__tests__/feedback.test.d.ts +0 -1
  245. package/commands/__tests__/feedback.test.js +0 -24
  246. package/commands/__tests__/filemanager.test.d.ts +0 -1
  247. package/commands/__tests__/filemanager.test.js +0 -45
  248. package/commands/__tests__/getStarted.test.d.ts +0 -1
  249. package/commands/__tests__/getStarted.test.js +0 -173
  250. package/commands/__tests__/hubdb.test.d.ts +0 -1
  251. package/commands/__tests__/hubdb.test.js +0 -50
  252. package/commands/__tests__/init.test.d.ts +0 -1
  253. package/commands/__tests__/init.test.js +0 -42
  254. package/commands/__tests__/mcp.test.d.ts +0 -1
  255. package/commands/__tests__/mcp.test.js +0 -46
  256. package/commands/__tests__/open.test.d.ts +0 -1
  257. package/commands/__tests__/open.test.js +0 -58
  258. package/commands/__tests__/project.test.d.ts +0 -1
  259. package/commands/__tests__/project.test.js +0 -125
  260. package/commands/__tests__/sandbox.test.d.ts +0 -1
  261. package/commands/__tests__/sandbox.test.js +0 -44
  262. package/commands/__tests__/secret.test.d.ts +0 -1
  263. package/commands/__tests__/secret.test.js +0 -49
  264. package/commands/__tests__/testAccount.test.d.ts +0 -1
  265. package/commands/__tests__/testAccount.test.js +0 -57
  266. package/commands/__tests__/upgrade.test.d.ts +0 -1
  267. package/commands/__tests__/upgrade.test.js +0 -309
  268. package/commands/account/__tests__/auth.test.d.ts +0 -1
  269. package/commands/account/__tests__/auth.test.js +0 -206
  270. package/commands/account/__tests__/clean.test.d.ts +0 -1
  271. package/commands/account/__tests__/clean.test.js +0 -28
  272. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  273. package/commands/account/__tests__/createOverride.test.js +0 -32
  274. package/commands/account/__tests__/info.test.d.ts +0 -1
  275. package/commands/account/__tests__/info.test.js +0 -28
  276. package/commands/account/__tests__/list.test.d.ts +0 -1
  277. package/commands/account/__tests__/list.test.js +0 -153
  278. package/commands/account/__tests__/remove.test.d.ts +0 -1
  279. package/commands/account/__tests__/remove.test.js +0 -36
  280. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  281. package/commands/account/__tests__/removeOverride.js +0 -25
  282. package/commands/account/__tests__/rename.test.d.ts +0 -1
  283. package/commands/account/__tests__/rename.test.js +0 -82
  284. package/commands/account/__tests__/use.test.d.ts +0 -1
  285. package/commands/account/__tests__/use.test.js +0 -170
  286. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  287. package/commands/app/__tests__/migrate.test.js +0 -111
  288. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  289. package/commands/app/secret/__tests__/add.test.js +0 -140
  290. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  291. package/commands/app/secret/__tests__/delete.test.js +0 -28
  292. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  293. package/commands/app/secret/__tests__/list.test.js +0 -25
  294. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  295. package/commands/app/secret/__tests__/update.test.js +0 -28
  296. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  297. package/commands/cms/__tests__/delete.test.js +0 -39
  298. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  299. package/commands/cms/__tests__/fetch.test.js +0 -156
  300. package/commands/cms/__tests__/function.test.d.ts +0 -1
  301. package/commands/cms/__tests__/function.test.js +0 -50
  302. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  303. package/commands/cms/__tests__/lint.test.js +0 -33
  304. package/commands/cms/__tests__/list.test.d.ts +0 -1
  305. package/commands/cms/__tests__/list.test.js +0 -42
  306. package/commands/cms/__tests__/module.test.d.ts +0 -1
  307. package/commands/cms/__tests__/module.test.js +0 -45
  308. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  309. package/commands/cms/__tests__/mv.test.js +0 -46
  310. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  311. package/commands/cms/__tests__/theme.test.js +0 -54
  312. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  313. package/commands/cms/__tests__/upload.test.js +0 -312
  314. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  315. package/commands/cms/__tests__/watch.test.js +0 -204
  316. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  317. package/commands/cms/function/__tests__/logs.test.js +0 -70
  318. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  319. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  320. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  321. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  322. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  323. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  324. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  325. package/commands/customObject/__tests__/create.test.js +0 -40
  326. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  327. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  328. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  329. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  330. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  331. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  332. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  333. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  334. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  335. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  336. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  337. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  338. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  339. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  340. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  341. package/commands/filemanager/__tests__/upload.test.js +0 -191
  342. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  343. package/commands/hubdb/__tests__/clear.test.js +0 -28
  344. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  345. package/commands/hubdb/__tests__/create.test.js +0 -28
  346. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  347. package/commands/hubdb/__tests__/delete.test.js +0 -28
  348. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  349. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  350. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  351. package/commands/hubdb/__tests__/list.test.js +0 -88
  352. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  353. package/commands/mcp/__tests__/setup.test.js +0 -26
  354. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  355. package/commands/mcp/__tests__/start.test.js +0 -144
  356. package/commands/project/__tests__/add.test.d.ts +0 -1
  357. package/commands/project/__tests__/add.test.js +0 -107
  358. package/commands/project/__tests__/create.test.d.ts +0 -1
  359. package/commands/project/__tests__/create.test.js +0 -97
  360. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  361. package/commands/project/__tests__/deploy.test.js +0 -307
  362. package/commands/project/__tests__/dev.test.d.ts +0 -1
  363. package/commands/project/__tests__/dev.test.js +0 -273
  364. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  365. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  366. package/commands/project/__tests__/download.test.d.ts +0 -1
  367. package/commands/project/__tests__/download.test.js +0 -39
  368. package/commands/project/__tests__/info.test.d.ts +0 -1
  369. package/commands/project/__tests__/info.test.js +0 -145
  370. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  371. package/commands/project/__tests__/installDeps.test.js +0 -140
  372. package/commands/project/__tests__/lint.test.d.ts +0 -1
  373. package/commands/project/__tests__/lint.test.js +0 -704
  374. package/commands/project/__tests__/list.test.d.ts +0 -1
  375. package/commands/project/__tests__/list.test.js +0 -31
  376. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  377. package/commands/project/__tests__/listBuilds.test.js +0 -38
  378. package/commands/project/__tests__/logs.test.d.ts +0 -1
  379. package/commands/project/__tests__/logs.test.js +0 -202
  380. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  381. package/commands/project/__tests__/migrate.test.js +0 -106
  382. package/commands/project/__tests__/open.test.d.ts +0 -1
  383. package/commands/project/__tests__/open.test.js +0 -39
  384. package/commands/project/__tests__/profile.test.d.ts +0 -1
  385. package/commands/project/__tests__/profile.test.js +0 -42
  386. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  387. package/commands/project/__tests__/updateDeps.test.js +0 -140
  388. package/commands/project/__tests__/upload.test.d.ts +0 -1
  389. package/commands/project/__tests__/upload.test.js +0 -234
  390. package/commands/project/__tests__/validate.test.d.ts +0 -1
  391. package/commands/project/__tests__/validate.test.js +0 -381
  392. package/commands/project/__tests__/watch.test.d.ts +0 -1
  393. package/commands/project/__tests__/watch.test.js +0 -35
  394. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  395. package/commands/sandbox/__tests__/create.test.js +0 -198
  396. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  397. package/commands/sandbox/__tests__/delete.test.js +0 -31
  398. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  399. package/commands/secret/__tests__/addSecret.test.js +0 -162
  400. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  401. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  402. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  403. package/commands/secret/__tests__/listSecret.test.js +0 -29
  404. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  405. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  406. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  407. package/commands/testAccount/__tests__/create.test.js +0 -106
  408. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  409. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  410. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  411. package/commands/testAccount/__tests__/delete.test.js +0 -29
  412. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  413. package/commands/testAccount/__tests__/importData.test.js +0 -92
  414. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  415. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  416. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  417. package/lib/__tests__/accountAuth.test.js +0 -258
  418. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  419. package/lib/__tests__/accountTypes.test.js +0 -98
  420. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  421. package/lib/__tests__/buildAccount.test.js +0 -211
  422. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  423. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  424. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  425. package/lib/__tests__/commandSuggestion.test.js +0 -121
  426. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  427. package/lib/__tests__/commonOpts.test.js +0 -80
  428. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  429. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  430. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  431. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  432. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  433. package/lib/__tests__/hasFeature.test.js +0 -167
  434. package/lib/__tests__/http.test.d.ts +0 -1
  435. package/lib/__tests__/http.test.js +0 -40
  436. package/lib/__tests__/importData.test.d.ts +0 -1
  437. package/lib/__tests__/importData.test.js +0 -98
  438. package/lib/__tests__/npmCli.test.d.ts +0 -1
  439. package/lib/__tests__/npmCli.test.js +0 -84
  440. package/lib/__tests__/oauth.test.d.ts +0 -1
  441. package/lib/__tests__/oauth.test.js +0 -109
  442. package/lib/__tests__/parsing.test.d.ts +0 -1
  443. package/lib/__tests__/parsing.test.js +0 -34
  444. package/lib/__tests__/polling.test.d.ts +0 -1
  445. package/lib/__tests__/polling.test.js +0 -76
  446. package/lib/__tests__/process.test.d.ts +0 -1
  447. package/lib/__tests__/process.test.js +0 -89
  448. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  449. package/lib/__tests__/sandboxes.test.js +0 -128
  450. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  451. package/lib/__tests__/serverlessLogs.test.js +0 -163
  452. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  453. package/lib/__tests__/usageTracking.test.js +0 -197
  454. package/lib/__tests__/validation.test.d.ts +0 -1
  455. package/lib/__tests__/validation.test.js +0 -143
  456. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  457. package/lib/__tests__/yargsUtils.test.js +0 -124
  458. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  459. package/lib/app/__tests__/migrate.test.js +0 -638
  460. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  461. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  462. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  463. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  464. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  465. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  466. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  467. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  468. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  469. package/lib/mcp/__tests__/setup.test.js +0 -523
  470. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  471. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  472. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  473. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  474. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  475. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  476. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  477. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  478. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  479. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  480. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  481. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  482. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  483. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  484. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  485. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  486. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  487. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  488. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  489. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  490. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  491. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  492. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  493. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  494. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  495. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  496. package/lib/projects/__tests__/components.test.d.ts +0 -1
  497. package/lib/projects/__tests__/components.test.js +0 -440
  498. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  499. package/lib/projects/__tests__/deploy.test.js +0 -231
  500. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  501. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  502. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  503. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  504. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  505. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  506. package/lib/projects/__tests__/projectInfo.test.d.ts +0 -1
  507. package/lib/projects/__tests__/projectInfo.test.js +0 -114
  508. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  509. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  510. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  511. package/lib/projects/__tests__/projects.test.js +0 -58
  512. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  513. package/lib/projects/__tests__/structure.test.js +0 -210
  514. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  515. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  516. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  517. package/lib/projects/__tests__/upload.test.js +0 -183
  518. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  519. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  520. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  521. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  522. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  523. package/lib/projects/create/__tests__/legacy.test.js +0 -72
  524. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  525. package/lib/projects/create/__tests__/v2.test.js +0 -257
  526. package/lib/projects/platformVersion.d.ts +0 -9
  527. package/lib/projects/platformVersion.js +0 -39
  528. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  529. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  530. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  531. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  532. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  533. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  534. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  535. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  536. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  537. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  538. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  539. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  540. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  541. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  542. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  543. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  544. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  545. package/lib/theme/__tests__/migrate.test.js +0 -247
  546. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  547. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  548. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  549. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  550. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  551. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
  552. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  553. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
  554. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  555. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
  556. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  557. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
  558. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  559. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
  560. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  561. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
  562. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  563. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
  564. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  565. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -131
  566. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  567. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
  568. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  569. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
  570. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  571. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  572. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  573. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  574. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  575. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
  576. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  577. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  578. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  579. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  580. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  581. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  582. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  583. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  584. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  585. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  586. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  587. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
  588. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  589. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  590. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  591. package/mcp-server/utils/__tests__/command.test.js +0 -275
  592. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  593. package/mcp-server/utils/__tests__/content.test.js +0 -164
  594. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  595. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
@@ -1,15 +1,11 @@
1
- import React from 'react';
1
+ import chalk from 'chalk';
2
2
  import { fetchAppMetadataBySourceId } from '@hubspot/local-dev-lib/api/appsDev';
3
+ import { APP_KEY, USER_FACING_TO_INTERNAL_TYPE, } from '@hubspot/project-parsing-lib/constants';
3
4
  import { debugError } from '../errorHandlers/index.js';
4
5
  import { getProjectDetailUrl } from './urls.js';
5
6
  import { commands } from '../../lang/en.js';
6
- import { uiLink } from '../ui/index.js';
7
- import { renderInline } from '../../ui/render.js';
8
- import { getBoxWithTitle } from '../../ui/components/BoxWithTitle.js';
9
- import { getTable } from '../../ui/components/Table.js';
10
- import { mapTableDataToObjects } from '../../ui/lib/table.js';
11
- import { INK_COLORS } from '../../ui/styles.js';
12
- const APPLICATION_BUILD_TYPE = 'APPLICATION';
7
+ import { uiLine, uiLink } from '../ui/index.js';
8
+ import { uiLogger } from '../ui/logger.js';
13
9
  export async function getProjectInfo(project, platformVersion, accountId) {
14
10
  const deployedBuild = project.deployedBuild;
15
11
  const projectInfo = {
@@ -24,7 +20,7 @@ export async function getProjectInfo(project, platformVersion, accountId) {
24
20
  if (projectUrl) {
25
21
  projectInfo.projectUrl = projectUrl;
26
22
  }
27
- const appSubbuild = deployedBuild.subbuildStatuses.find(s => s.buildType === APPLICATION_BUILD_TYPE);
23
+ const appSubbuild = deployedBuild.subbuildStatuses.find(s => s.buildType === USER_FACING_TO_INTERNAL_TYPE[APP_KEY]);
28
24
  if (appSubbuild) {
29
25
  try {
30
26
  const { data: appMetadata } = await fetchAppMetadataBySourceId(project.id, appSubbuild.buildName, accountId);
@@ -41,64 +37,46 @@ export async function getProjectInfo(project, platformVersion, accountId) {
41
37
  }
42
38
  }
43
39
  projectInfo.components = deployedBuild.subbuildStatuses
44
- .filter(s => s.buildType !== APPLICATION_BUILD_TYPE)
40
+ .filter(s => s.buildType !== USER_FACING_TO_INTERNAL_TYPE[APP_KEY])
45
41
  .map(s => ({
46
- uid: s.userDefinedId ||
47
- s.buildName,
42
+ uid: s.buildName,
48
43
  type: s.buildType,
49
44
  }));
50
45
  return projectInfo;
51
46
  }
52
- export async function renderProjectInfo(projectInfo) {
53
- const projectInfoLines = [
54
- commands.project.info.project.name(projectInfo.projectName),
55
- commands.project.info.project.platformVersion(projectInfo.platformVersion),
56
- commands.project.info.project.id(projectInfo.projectId),
57
- commands.project.info.project.deployedBuild(projectInfo.deployedBuildId),
58
- commands.project.info.project.autoDeploy(projectInfo.autoDeployEnabled),
59
- ];
47
+ export function logProjectInfo(projectInfo) {
48
+ uiLogger.log(chalk.bold(commands.project.info.project.title(projectInfo.projectName)));
49
+ uiLine();
50
+ uiLogger.log(commands.project.info.project.platformVersion(projectInfo.platformVersion));
51
+ uiLogger.log(commands.project.info.project.id(projectInfo.projectId));
52
+ uiLogger.log(commands.project.info.project.deployedBuild(projectInfo.deployedBuildId));
53
+ uiLogger.log(commands.project.info.project.autoDeploy(projectInfo.autoDeployEnabled));
60
54
  if (projectInfo.projectUrl) {
61
- projectInfoLines.push(uiLink(commands.project.info.viewProjectLink, projectInfo.projectUrl));
55
+ uiLogger.log('');
56
+ uiLogger.log(uiLink(commands.project.info.viewProjectLink, projectInfo.projectUrl));
62
57
  }
63
- const childBoxes = [];
64
58
  if (projectInfo.app) {
65
- const appInfoLines = [
66
- commands.project.info.app.name(projectInfo.app.name),
67
- commands.project.info.app.id(projectInfo.app.id),
68
- commands.project.info.app.uid(projectInfo.app.uid),
69
- ];
59
+ uiLogger.log('');
60
+ uiLogger.log(chalk.bold(commands.project.info.app.title));
61
+ uiLine();
62
+ uiLogger.log(commands.project.info.app.name(projectInfo.app.name));
63
+ uiLogger.log(commands.project.info.app.id(projectInfo.app.id));
64
+ uiLogger.log(commands.project.info.app.uid(projectInfo.app.uid));
70
65
  if (projectInfo.app.authType) {
71
- appInfoLines.push(commands.project.info.app.authType(projectInfo.app.authType));
66
+ uiLogger.log(commands.project.info.app.authType(projectInfo.app.authType));
72
67
  }
73
68
  if (projectInfo.app.distributionType) {
74
- appInfoLines.push(commands.project.info.app.distributionType(projectInfo.app.distributionType));
69
+ uiLogger.log(commands.project.info.app.distributionType(projectInfo.app.distributionType));
75
70
  }
76
- childBoxes.push(getBoxWithTitle({
77
- title: commands.project.info.app.title,
78
- message: appInfoLines.join('\n'),
79
- titleBackgroundColor: INK_COLORS.WHITE,
80
- borderColor: INK_COLORS.WHITE,
81
- }));
82
71
  }
83
72
  if (projectInfo.components.length > 0) {
84
- const tableHeader = [
85
- commands.project.info.labels.uid,
86
- commands.project.info.labels.type,
87
- ];
88
- const tableData = projectInfo.components.map(c => [c.uid, c.type]);
89
- const tableObjects = mapTableDataToObjects(tableHeader, tableData);
90
- childBoxes.push(getBoxWithTitle({
91
- title: commands.project.info.componentsHeader,
92
- titleBackgroundColor: INK_COLORS.WHITE,
93
- borderColor: INK_COLORS.WHITE,
94
- children: getTable({ data: tableObjects, borderless: true }),
95
- }));
73
+ uiLogger.log('');
74
+ uiLogger.log(chalk.bold(commands.project.info.componentsHeader));
75
+ uiLine();
76
+ const typeColWidth = Math.max(commands.project.info.labels.type.length, ...projectInfo.components.map(c => c.type.length));
77
+ uiLogger.log(`${commands.project.info.labels.type.padEnd(typeColWidth)} ${commands.project.info.labels.uid}`);
78
+ for (const component of projectInfo.components) {
79
+ uiLogger.log(`${component.type.padEnd(typeColWidth)} ${component.uid}`);
80
+ }
96
81
  }
97
- await renderInline(getBoxWithTitle({
98
- title: commands.project.info.project.title,
99
- message: projectInfoLines.join('\n'),
100
- titleBackgroundColor: INK_COLORS.INFO_BLUE,
101
- borderColor: INK_COLORS.INFO_BLUE,
102
- children: React.createElement(React.Fragment, null, ...childBoxes),
103
- }));
104
82
  }
@@ -3,8 +3,7 @@ import { ProjectConfig } from '../../types/Projects.js';
3
3
  export declare function logProfileHeader(profileName: string): void;
4
4
  export declare function logProfileFooter(profile: HsProfileFile, includeVariables?: boolean): void;
5
5
  export declare function loadProfile(projectConfig: ProjectConfig | null, projectDir: string | null, profileName: string): HsProfileFile | never;
6
- export declare function enforceProfileUsage(projectConfig: ProjectConfig | null, projectDir: string | null): Promise<void>;
7
- export declare function loadAndValidateProfile(projectConfig: ProjectConfig | null, projectDir: string | null, profileName: string | undefined, silent?: boolean): Promise<number | undefined>;
6
+ export declare function loadAndValidateProfile(projectConfig: ProjectConfig | null, projectDir: string | null, profileName: string, silent?: boolean): Promise<HsProfileFile | never>;
8
7
  type ValidateProjectForProfileOptions = {
9
8
  projectConfig: ProjectConfig;
10
9
  projectDir: string;
@@ -1,7 +1,7 @@
1
1
  import path from 'path';
2
- import { loadHsProfileFile, getHsProfileFilename, getAllHsProfiles, validateProfileVariables, } from '@hubspot/project-parsing-lib/profiles';
2
+ import { loadHsProfileFile, getHsProfileFilename, validateProfileVariables, } from '@hubspot/project-parsing-lib/profiles';
3
3
  import { commands, lib } from '../../lang/en.js';
4
- import { indent, uiBetaTag, uiLine } from '../ui/index.js';
4
+ import { indent, uiLine } from '../ui/index.js';
5
5
  import { uiLogger } from '../ui/logger.js';
6
6
  import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
7
7
  import SpinniesManager from '../ui/SpinniesManager.js';
@@ -9,7 +9,7 @@ import { handleTranslate } from './upload.js';
9
9
  import { getErrorMessage } from '../errorHandlers/index.js';
10
10
  export function logProfileHeader(profileName) {
11
11
  uiLine();
12
- uiBetaTag(lib.projectProfiles.logs.usingProfile(getHsProfileFilename(profileName)));
12
+ uiLogger.log(lib.projectProfiles.logs.usingProfile(getHsProfileFilename(profileName)));
13
13
  uiLogger.log('');
14
14
  }
15
15
  export function logProfileFooter(profile, includeVariables = false) {
@@ -51,19 +51,7 @@ export function loadProfile(projectConfig, projectDir, profileName) {
51
51
  }
52
52
  return profile;
53
53
  }
54
- export async function enforceProfileUsage(projectConfig, projectDir) {
55
- if (projectConfig && projectDir) {
56
- const existingProfiles = await getAllHsProfiles(path.join(projectDir, projectConfig.srcDir));
57
- if (existingProfiles.length > 0) {
58
- throw new Error(lib.projectProfiles.exitIfUsingProfiles.errors.noProfileSpecified);
59
- }
60
- }
61
- }
62
54
  export async function loadAndValidateProfile(projectConfig, projectDir, profileName, silent = false) {
63
- if (!profileName) {
64
- await enforceProfileUsage(projectConfig, projectDir);
65
- return;
66
- }
67
55
  if (!silent) {
68
56
  logProfileHeader(profileName);
69
57
  }
@@ -77,7 +65,7 @@ export async function loadAndValidateProfile(projectConfig, projectDir, profileN
77
65
  throw new Error(lib.projectProfiles.loadProfile.errors.profileNotValid(profileName, validationResult.errors));
78
66
  }
79
67
  }
80
- return profile.accountId;
68
+ return profile;
81
69
  }
82
70
  function formatProfileValidationError(error, leadingIndentationLevel = 0) {
83
71
  // Trim leading whitespace and replace tabs with spaces to reducing indentations
@@ -97,7 +85,7 @@ export async function validateProjectForProfile({ projectConfig, projectDir, pro
97
85
  });
98
86
  }
99
87
  try {
100
- const accountId = await loadAndValidateProfile(projectConfig, projectDir, profileName, true);
88
+ const { accountId } = await loadAndValidateProfile(projectConfig, projectDir, profileName, true);
101
89
  targetAccountId = accountId || derivedAccountId;
102
90
  }
103
91
  catch (error) {
@@ -6,16 +6,18 @@ import { uploadProject } from '@hubspot/local-dev-lib/api/projects';
6
6
  import { shouldIgnoreFile } from '@hubspot/local-dev-lib/ignoreRules';
7
7
  import { isTranslationError, translate, } from '@hubspot/project-parsing-lib/translate';
8
8
  import { projectContainsHsMetaFiles } from '@hubspot/project-parsing-lib/projects';
9
+ import { findAndParsePackageJsonFiles, collectWorkspaceDirectories, collectFileDependencies, } from '@hubspot/project-parsing-lib/workspaces';
9
10
  import SpinniesManager from '../ui/SpinniesManager.js';
10
11
  import { uiAccountDescription } from '../ui/index.js';
11
12
  import util from 'node:util';
12
13
  import { lib } from '../../lang/en.js';
13
14
  import { ensureProjectExists } from './ensureProjectExists.js';
14
15
  import { uiLogger } from '../ui/logger.js';
15
- import { isV2Project } from './platformVersion.js';
16
16
  import ProjectValidationError from '../errors/ProjectValidationError.js';
17
17
  import { walk } from '@hubspot/local-dev-lib/fs';
18
18
  import { LEGACY_CONFIG_FILES } from '../constants.js';
19
+ import { archiveWorkspacesAndDependencies, getPackageJsonPathsToUpdate, getLockfilePathsToUpdate, } from './workspaces.js';
20
+ import { isLegacyProject } from '@hubspot/project-parsing-lib/projects';
19
21
  async function uploadProjectFiles(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation) {
20
22
  const accountIdentifier = uiAccountDescription(accountId) || `${accountId}`;
21
23
  SpinniesManager.add('upload', {
@@ -48,6 +50,15 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
48
50
  await validateNoHSMetaMismatch(srcDir, projectConfig);
49
51
  const tempFile = tmp.fileSync({ postfix: '.zip' });
50
52
  uiLogger.debug(lib.projectUpload.handleProjectUpload.compressing(tempFile.name));
53
+ // Collect workspace directories and file: dependencies for v2+ projects only.
54
+ // Versions <= 2025.1 do not support the new npm workspaces bundling behavior.
55
+ let workspaceMappings = [];
56
+ let fileDependencyMappings = [];
57
+ if (!isLegacyProject(projectConfig.platformVersion)) {
58
+ const parsedPackageJsons = await findAndParsePackageJsonFiles(srcDir);
59
+ workspaceMappings = await collectWorkspaceDirectories(parsedPackageJsons);
60
+ fileDependencyMappings = await collectFileDependencies(parsedPackageJsons);
61
+ }
51
62
  const output = fs.createWriteStream(tempFile.name);
52
63
  const archive = archiver('zip');
53
64
  const result = new Promise((resolve, reject) => output.on('close', async function () {
@@ -91,8 +102,14 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
91
102
  }
92
103
  }));
93
104
  archive.pipe(output);
105
+ const modifiedPackageJsonPaths = getPackageJsonPathsToUpdate(srcDir, workspaceMappings, fileDependencyMappings);
106
+ const lockfilePathsToUpdate = getLockfilePathsToUpdate(srcDir, workspaceMappings, fileDependencyMappings);
94
107
  let loggedIgnoredNodeModule = false;
95
108
  archive.directory(srcDir, false, file => {
109
+ if (modifiedPackageJsonPaths.has(file.name) ||
110
+ lockfilePathsToUpdate.has(file.name)) {
111
+ return false;
112
+ }
96
113
  const ignored = shouldIgnoreFile(file.name, true);
97
114
  if (ignored) {
98
115
  const isNodeModule = file.name.includes('node_modules');
@@ -105,6 +122,8 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
105
122
  }
106
123
  return ignored ? false : file;
107
124
  });
125
+ // Archive workspaces and file: dependencies
126
+ await archiveWorkspacesAndDependencies(archive, srcDir, projectDir, workspaceMappings, fileDependencyMappings);
108
127
  archive.finalize();
109
128
  return result;
110
129
  }
@@ -113,7 +132,7 @@ export async function validateSourceDirectory(srcDir, projectConfig, projectDir)
113
132
  if (!projectFilePaths || projectFilePaths.length === 0) {
114
133
  throw new ProjectValidationError(lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir));
115
134
  }
116
- if (isV2Project(projectConfig.platformVersion)) {
135
+ if (!isLegacyProject(projectConfig.platformVersion)) {
117
136
  projectFilePaths.forEach(filePath => {
118
137
  const filename = path.basename(filePath);
119
138
  if (LEGACY_CONFIG_FILES.includes(filename)) {
@@ -124,7 +143,7 @@ export async function validateSourceDirectory(srcDir, projectConfig, projectDir)
124
143
  }
125
144
  export async function validateNoHSMetaMismatch(srcDir, projectConfig) {
126
145
  const hasHsMetaFiles = await projectContainsHsMetaFiles(srcDir);
127
- if (!isV2Project(projectConfig.platformVersion) && hasHsMetaFiles) {
146
+ if (isLegacyProject(projectConfig.platformVersion) && hasHsMetaFiles) {
128
147
  throw new ProjectValidationError(lib.projectUpload.wrongPlatformVersionMetaFiles);
129
148
  }
130
149
  }
@@ -0,0 +1,42 @@
1
+ import archiver from 'archiver';
2
+ import { WorkspaceMapping, FileDependencyMapping } from '@hubspot/project-parsing-lib/workspaces';
3
+ /**
4
+ * Result of archiving workspaces and file dependencies
5
+ */
6
+ export type WorkspaceArchiveResult = {
7
+ packageWorkspaces: Map<string, string[]>;
8
+ packageFileDeps: Map<string, Map<string, string>>;
9
+ };
10
+ /**
11
+ * Generates a short hash of the input string for use in workspace paths.
12
+ * Uses SHA256 truncated to 8 hex characters (4 billion possibilities).
13
+ */
14
+ export declare function shortHash(input: string): string;
15
+ /**
16
+ * Determines the archive path for an external workspace or file: dependency.
17
+ * Produces `_workspaces/<basename>-<hash>` with no subdirectory.
18
+ * The hash prevents collisions between different directories with the same basename.
19
+ */
20
+ export declare function computeExternalArchivePath(absolutePath: string): string;
21
+ /**
22
+ * Updates package.json files in the archive to reflect new workspace and file: dependency paths.
23
+ *
24
+ * Workspace entries in packageWorkspaces are already in final form:
25
+ * - Internal workspaces: relative paths (e.g. "../packages/utils")
26
+ * - External workspaces: relative paths (e.g. "../_workspaces/logger-abc")
27
+ *
28
+ * Only external file: dependencies appear in packageFileDeps; internal ones
29
+ * keep their original file: references and are left untouched.
30
+ */
31
+ export declare function updatePackageJsonInArchive(archive: archiver.Archiver, srcDir: string, packageWorkspaces: Map<string, string[]>, packageFileDeps: Map<string, Map<string, string>>): Promise<void>;
32
+ export declare function rewriteLockfileForExternalDeps(lockfileContent: Record<string, unknown>, pathMappings: Array<{
33
+ oldPath: string;
34
+ newPath: string;
35
+ }>): Record<string, unknown>;
36
+ export declare function getPackageJsonPathsToUpdate(srcDir: string, workspaceMappings: WorkspaceMapping[], fileDependencyMappings: FileDependencyMapping[]): Set<string>;
37
+ export declare function getLockfilePathsToUpdate(srcDir: string, workspaceMappings: WorkspaceMapping[], fileDependencyMappings: FileDependencyMapping[]): Set<string>;
38
+ /**
39
+ * Main orchestration function that handles archiving of workspaces and file dependencies.
40
+ * This is the clean integration point for upload.ts.
41
+ */
42
+ export declare function archiveWorkspacesAndDependencies(archive: archiver.Archiver, srcDir: string, projectDir: string, workspaceMappings: WorkspaceMapping[], fileDependencyMappings: FileDependencyMapping[]): Promise<WorkspaceArchiveResult>;
@@ -0,0 +1,350 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ import { shouldIgnoreFile } from '@hubspot/local-dev-lib/ignoreRules';
5
+ import { getPackableFiles, } from '@hubspot/project-parsing-lib/workspaces';
6
+ import { uiLogger } from '../ui/logger.js';
7
+ import { lib } from '../../lang/en.js';
8
+ /**
9
+ * Generates a short hash of the input string for use in workspace paths.
10
+ * Uses SHA256 truncated to 8 hex characters (4 billion possibilities).
11
+ */
12
+ export function shortHash(input) {
13
+ return crypto.createHash('sha256').update(input).digest('hex').slice(0, 8);
14
+ }
15
+ /**
16
+ * Determines the archive path for an external workspace or file: dependency.
17
+ * Produces `_workspaces/<basename>-<hash>` with no subdirectory.
18
+ * The hash prevents collisions between different directories with the same basename.
19
+ */
20
+ export function computeExternalArchivePath(absolutePath) {
21
+ const resolved = path.resolve(absolutePath);
22
+ const name = path.basename(resolved);
23
+ return path.join('_workspaces', `${name}-${shortHash(resolved)}`);
24
+ }
25
+ /**
26
+ * Returns true if dir is inside srcDir (i.e. it will already be included
27
+ * in the archive from the srcDir walk and must not be copied again).
28
+ */
29
+ function isInsideSrcDir(dir, srcDir) {
30
+ const rel = path.relative(path.resolve(srcDir), path.resolve(dir));
31
+ return !rel.startsWith('..') && !path.isAbsolute(rel);
32
+ }
33
+ /**
34
+ * Creates a file filter function for workspace archiving.
35
+ * Filters files based on packable files list and ignore rules.
36
+ */
37
+ function createWorkspaceFileFilter(packableFiles) {
38
+ return (file) => {
39
+ if (packableFiles.size > 0 && !packableFiles.has(file.name)) {
40
+ uiLogger.debug(lib.projectUpload.handleProjectUpload.fileFiltered(file.name));
41
+ return false;
42
+ }
43
+ const ignored = shouldIgnoreFile(file.name, true);
44
+ if (ignored) {
45
+ uiLogger.debug(lib.projectUpload.handleProjectUpload.fileFiltered(file.name));
46
+ return false;
47
+ }
48
+ return file;
49
+ };
50
+ }
51
+ /**
52
+ * Archives workspace directories and returns mapping information.
53
+ *
54
+ * Internal workspaces (inside srcDir) are not archived — they are already
55
+ * included via the srcDir walk. Their relative paths (from the package.json
56
+ * directory to the workspace directory) are stored directly in the entries.
57
+ *
58
+ * External workspaces (outside srcDir) are copied to `_workspaces/<name>-<hash>`
59
+ * and their relative archive paths (e.g. `../_workspaces/<name>-<hash>`) are stored.
60
+ */
61
+ async function archiveWorkspaceDirectories(archive, srcDir, workspaceMappings) {
62
+ const externalArchivePaths = new Map(); // resolvedDir -> archivePath
63
+ const archivePathToDir = new Map(); // archivePath -> resolvedDir (collision detection)
64
+ const packageWorkspaceEntries = new Map();
65
+ const externalsToArchive = [];
66
+ for (const mapping of workspaceMappings) {
67
+ const { workspaceDir, sourcePackageJsonPath } = mapping;
68
+ if (!packageWorkspaceEntries.has(sourcePackageJsonPath)) {
69
+ packageWorkspaceEntries.set(sourcePackageJsonPath, []);
70
+ }
71
+ if (isInsideSrcDir(workspaceDir, srcDir)) {
72
+ // Internal: already in archive from srcDir walk.
73
+ // Store the relative path from the package.json directory so npm can resolve it.
74
+ const relPath = path.relative(path.dirname(sourcePackageJsonPath), path.resolve(workspaceDir));
75
+ packageWorkspaceEntries.get(sourcePackageJsonPath).push(relPath);
76
+ }
77
+ else {
78
+ // External: archive to _workspaces/<name>-<hash>.
79
+ const archivePath = computeExternalArchivePath(workspaceDir);
80
+ const resolvedDir = path.resolve(workspaceDir);
81
+ // Detect hash collisions (different dirs mapping to the same archive path)
82
+ const existing = archivePathToDir.get(archivePath);
83
+ if (existing && existing !== resolvedDir) {
84
+ throw new Error(lib.projectUpload.handleProjectUpload.workspaceCollision(archivePath, workspaceDir, existing));
85
+ }
86
+ if (!externalArchivePaths.has(resolvedDir)) {
87
+ externalArchivePaths.set(resolvedDir, archivePath);
88
+ archivePathToDir.set(archivePath, resolvedDir);
89
+ externalsToArchive.push({ dir: workspaceDir, archivePath });
90
+ }
91
+ const relPkgJsonDir = path.relative(srcDir, path.dirname(sourcePackageJsonPath));
92
+ const relativeEntry = path.relative(relPkgJsonDir, archivePath);
93
+ packageWorkspaceEntries.get(sourcePackageJsonPath).push(relativeEntry);
94
+ }
95
+ }
96
+ // Fetch packable files in parallel (I/O optimization)
97
+ const withPackableFiles = await Promise.all(externalsToArchive.map(async (item) => ({
98
+ ...item,
99
+ packableFiles: await getPackableFiles(item.dir),
100
+ })));
101
+ // Archive directories sequentially (archiver requires sequential operations)
102
+ for (const { dir, archivePath, packableFiles } of withPackableFiles) {
103
+ uiLogger.log(lib.projectUpload.handleProjectUpload.workspaceIncluded(dir, archivePath));
104
+ archive.directory(dir, archivePath, createWorkspaceFileFilter(packableFiles));
105
+ }
106
+ return { externalArchivePaths, packageWorkspaceEntries };
107
+ }
108
+ /**
109
+ * Archives file: dependencies and returns mapping information.
110
+ *
111
+ * Internal file: dependencies (inside srcDir) are skipped — their original
112
+ * `file:` references in package.json remain valid after upload.
113
+ *
114
+ * External file: dependencies are archived to `_workspaces/<name>-<hash>`
115
+ * and tracked in the returned map so package.json can be rewritten.
116
+ */
117
+ async function archiveFileDependencies(archive, srcDir, fileDependencyMappings, externalArchivePaths) {
118
+ const packageFileDeps = new Map();
119
+ const toArchive = [];
120
+ for (const mapping of fileDependencyMappings) {
121
+ const { packageName, localPath, sourcePackageJsonPath } = mapping;
122
+ if (isInsideSrcDir(localPath, srcDir)) {
123
+ // Internal: original file: reference stays unchanged, nothing to do
124
+ continue;
125
+ }
126
+ // External: archive to _workspaces/<name>-<hash>
127
+ const archivePath = computeExternalArchivePath(localPath);
128
+ const resolvedPath = path.resolve(localPath);
129
+ if (!packageFileDeps.has(sourcePackageJsonPath)) {
130
+ packageFileDeps.set(sourcePackageJsonPath, new Map());
131
+ }
132
+ const relPkgJsonDir = path.relative(srcDir, path.dirname(sourcePackageJsonPath));
133
+ const relativeArchivePath = path.relative(relPkgJsonDir, archivePath);
134
+ packageFileDeps
135
+ .get(sourcePackageJsonPath)
136
+ .set(packageName, relativeArchivePath);
137
+ // Only archive each unique path once
138
+ if (!externalArchivePaths.has(resolvedPath)) {
139
+ externalArchivePaths.set(resolvedPath, archivePath);
140
+ toArchive.push({ localPath, archivePath, packageName });
141
+ }
142
+ }
143
+ // Fetch packable files in parallel (I/O optimization)
144
+ const withPackableFiles = await Promise.all(toArchive.map(async (item) => ({
145
+ ...item,
146
+ packableFiles: await getPackableFiles(item.localPath),
147
+ })));
148
+ // Archive directories sequentially (archiver requires sequential operations)
149
+ for (const { localPath, archivePath, packageName, packableFiles, } of withPackableFiles) {
150
+ uiLogger.log(lib.projectUpload.handleProjectUpload.fileDependencyIncluded(packageName, localPath, archivePath));
151
+ archive.directory(localPath, archivePath, createWorkspaceFileFilter(packableFiles));
152
+ }
153
+ return packageFileDeps;
154
+ }
155
+ /**
156
+ * Updates package.json files in the archive to reflect new workspace and file: dependency paths.
157
+ *
158
+ * Workspace entries in packageWorkspaces are already in final form:
159
+ * - Internal workspaces: relative paths (e.g. "../packages/utils")
160
+ * - External workspaces: relative paths (e.g. "../_workspaces/logger-abc")
161
+ *
162
+ * Only external file: dependencies appear in packageFileDeps; internal ones
163
+ * keep their original file: references and are left untouched.
164
+ */
165
+ export async function updatePackageJsonInArchive(archive, srcDir, packageWorkspaces, packageFileDeps) {
166
+ // Collect all package.json paths that need updating
167
+ const allPackageJsonPaths = new Set([
168
+ ...packageWorkspaces.keys(),
169
+ ...packageFileDeps.keys(),
170
+ ]);
171
+ for (const packageJsonPath of allPackageJsonPaths) {
172
+ if (!fs.existsSync(packageJsonPath)) {
173
+ continue;
174
+ }
175
+ const relativePackageJsonPath = path.relative(srcDir, packageJsonPath);
176
+ let rawContent;
177
+ try {
178
+ rawContent = fs.readFileSync(packageJsonPath, 'utf8');
179
+ }
180
+ catch {
181
+ continue;
182
+ }
183
+ let packageJson;
184
+ try {
185
+ packageJson = JSON.parse(rawContent);
186
+ }
187
+ catch (e) {
188
+ uiLogger.warn(lib.projectUpload.handleProjectUpload.malformedPackageJson(packageJsonPath, e instanceof Error ? e.message : String(e)));
189
+ archive.append(rawContent, { name: relativePackageJsonPath });
190
+ continue;
191
+ }
192
+ let modified = false;
193
+ // Update workspaces field — entries are already in their final form
194
+ const workspaceEntries = packageWorkspaces.get(packageJsonPath);
195
+ if (workspaceEntries && packageJson.workspaces) {
196
+ packageJson.workspaces = workspaceEntries;
197
+ modified = true;
198
+ uiLogger.debug(lib.projectUpload.handleProjectUpload.updatingPackageJsonWorkspaces(relativePackageJsonPath));
199
+ uiLogger.debug(lib.projectUpload.handleProjectUpload.updatedWorkspaces(workspaceEntries.join(', ')));
200
+ }
201
+ // Update external file: dependencies; internal ones are left untouched
202
+ const fileDeps = packageFileDeps.get(packageJsonPath);
203
+ if (fileDeps && fileDeps.size > 0 && packageJson.dependencies) {
204
+ for (const [packageName, archivePath] of fileDeps.entries()) {
205
+ if (packageJson.dependencies[packageName]?.startsWith('file:')) {
206
+ packageJson.dependencies[packageName] = `file:${archivePath}`;
207
+ modified = true;
208
+ uiLogger.debug(lib.projectUpload.handleProjectUpload.updatedFileDependency(packageName, archivePath));
209
+ }
210
+ }
211
+ }
212
+ archive.append(modified ? JSON.stringify(packageJson, null, 2) : rawContent, { name: relativePackageJsonPath });
213
+ }
214
+ // Ensure all append operations are queued before finalize is called
215
+ // Use setImmediate to yield control and let archiver process the queue
216
+ await new Promise(resolve => setImmediate(resolve));
217
+ }
218
+ export function rewriteLockfileForExternalDeps(lockfileContent, pathMappings) {
219
+ if (pathMappings.length === 0) {
220
+ return lockfileContent;
221
+ }
222
+ const packages = lockfileContent.packages;
223
+ if (!packages) {
224
+ return lockfileContent;
225
+ }
226
+ const newPackages = {};
227
+ for (const [key, value] of Object.entries(packages)) {
228
+ const mapping = pathMappings.find(m => m.oldPath === key);
229
+ newPackages[mapping ? mapping.newPath : key] = value;
230
+ }
231
+ for (const [key, value] of Object.entries(newPackages)) {
232
+ if (key.startsWith('node_modules/') &&
233
+ typeof value === 'object' &&
234
+ value !== null) {
235
+ const entry = value;
236
+ if (entry.link === true && typeof entry.resolved === 'string') {
237
+ const mapping = pathMappings.find(m => m.oldPath === entry.resolved);
238
+ if (mapping) {
239
+ newPackages[key] = { ...entry, resolved: mapping.newPath };
240
+ }
241
+ }
242
+ }
243
+ }
244
+ const rootEntry = newPackages[''];
245
+ if (rootEntry && typeof rootEntry === 'object' && rootEntry !== null) {
246
+ const root = rootEntry;
247
+ if (Array.isArray(root.workspaces)) {
248
+ newPackages[''] = {
249
+ ...root,
250
+ workspaces: root.workspaces.map((ws) => {
251
+ if (typeof ws !== 'string')
252
+ return ws;
253
+ const mapping = pathMappings.find(m => m.oldPath === ws);
254
+ return mapping ? mapping.newPath : ws;
255
+ }),
256
+ };
257
+ }
258
+ }
259
+ return { ...lockfileContent, packages: newPackages };
260
+ }
261
+ export function getPackageJsonPathsToUpdate(srcDir, workspaceMappings, fileDependencyMappings) {
262
+ const paths = new Set();
263
+ for (const { sourcePackageJsonPath } of workspaceMappings) {
264
+ paths.add(path.relative(srcDir, sourcePackageJsonPath));
265
+ }
266
+ for (const { localPath, sourcePackageJsonPath } of fileDependencyMappings) {
267
+ if (!isInsideSrcDir(localPath, srcDir)) {
268
+ paths.add(path.relative(srcDir, sourcePackageJsonPath));
269
+ }
270
+ }
271
+ return paths;
272
+ }
273
+ function getDirsWithExternalDeps(srcDir, workspaceMappings, fileDependencyMappings) {
274
+ const dirs = new Set();
275
+ for (const { workspaceDir, sourcePackageJsonPath } of workspaceMappings) {
276
+ if (!isInsideSrcDir(workspaceDir, srcDir)) {
277
+ dirs.add(path.dirname(sourcePackageJsonPath));
278
+ }
279
+ }
280
+ for (const { localPath, sourcePackageJsonPath } of fileDependencyMappings) {
281
+ if (!isInsideSrcDir(localPath, srcDir)) {
282
+ dirs.add(path.dirname(sourcePackageJsonPath));
283
+ }
284
+ }
285
+ return dirs;
286
+ }
287
+ export function getLockfilePathsToUpdate(srcDir, workspaceMappings, fileDependencyMappings) {
288
+ const dirsWithExternalDeps = getDirsWithExternalDeps(srcDir, workspaceMappings, fileDependencyMappings);
289
+ const paths = new Set();
290
+ for (const dir of dirsWithExternalDeps) {
291
+ const lockfilePath = path.join(dir, 'package-lock.json');
292
+ if (fs.existsSync(lockfilePath)) {
293
+ paths.add(path.relative(srcDir, lockfilePath));
294
+ }
295
+ }
296
+ return paths;
297
+ }
298
+ async function rewriteLockfilesInArchive(archive, srcDir, externalArchivePaths, dirsWithExternalDeps) {
299
+ if (externalArchivePaths.size === 0)
300
+ return;
301
+ for (const dir of dirsWithExternalDeps) {
302
+ const lockfilePath = path.join(dir, 'package-lock.json');
303
+ if (!fs.existsSync(lockfilePath))
304
+ continue;
305
+ let rawContent;
306
+ try {
307
+ rawContent = fs.readFileSync(lockfilePath, 'utf8');
308
+ }
309
+ catch {
310
+ continue;
311
+ }
312
+ let lockfileContent;
313
+ try {
314
+ lockfileContent = JSON.parse(rawContent);
315
+ }
316
+ catch {
317
+ continue;
318
+ }
319
+ const pathMappings = [];
320
+ for (const [absoluteExternalPath, archivePath] of externalArchivePaths) {
321
+ pathMappings.push({
322
+ oldPath: path.relative(dir, absoluteExternalPath),
323
+ newPath: path.relative(dir, path.join(srcDir, archivePath)),
324
+ });
325
+ }
326
+ const rewritten = rewriteLockfileForExternalDeps(lockfileContent, pathMappings);
327
+ const relativeLockfilePath = path.relative(srcDir, lockfilePath);
328
+ uiLogger.debug(lib.projectUpload.handleProjectUpload.updatingLockfile(relativeLockfilePath));
329
+ archive.append(JSON.stringify(rewritten, null, 2), {
330
+ name: relativeLockfilePath,
331
+ });
332
+ }
333
+ await new Promise(resolve => setImmediate(resolve));
334
+ }
335
+ /**
336
+ * Main orchestration function that handles archiving of workspaces and file dependencies.
337
+ * This is the clean integration point for upload.ts.
338
+ */
339
+ export async function archiveWorkspacesAndDependencies(archive, srcDir, projectDir, workspaceMappings, fileDependencyMappings) {
340
+ // Archive workspace directories (internal ones are skipped, externals are copied)
341
+ const { externalArchivePaths, packageWorkspaceEntries } = await archiveWorkspaceDirectories(archive, srcDir, workspaceMappings);
342
+ // Archive external file: dependencies (internals are skipped)
343
+ const packageFileDeps = await archiveFileDependencies(archive, srcDir, fileDependencyMappings, externalArchivePaths);
344
+ // Update package.json files with new paths
345
+ await updatePackageJsonInArchive(archive, srcDir, packageWorkspaceEntries, packageFileDeps);
346
+ // Rewrite lock files to point to archive paths for external deps
347
+ const dirsWithExternalDeps = getDirsWithExternalDeps(srcDir, workspaceMappings, fileDependencyMappings);
348
+ await rewriteLockfilesInArchive(archive, srcDir, externalArchivePaths, dirsWithExternalDeps);
349
+ return { packageWorkspaces: packageWorkspaceEntries, packageFileDeps };
350
+ }