@vercel/cli-support 65.11.0 → 65.12.0-snapshot-801db9d533c3

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 (369) hide show
  1. package/README.md +8 -120
  2. package/dist/chunks/add-BDJYCIBT.js +8 -0
  3. package/dist/chunks/add-LZR4CD7O.js +8 -0
  4. package/dist/chunks/add-MR6YZTRQ.js +8 -0
  5. package/dist/chunks/{alerts-JGRRCQA4.js → alerts-VOYMO6NJ.js} +1 -1
  6. package/dist/chunks/build-H2U56DYB.js +7 -0
  7. package/dist/chunks/{chunk-UF2E5BDE.js → chunk-23PO6JK6.js} +1 -1
  8. package/dist/chunks/{chunk-PUKYAALC.js → chunk-24SIHFEW.js} +1 -1
  9. package/dist/chunks/{chunk-EBIJ26IV.js → chunk-2C6TLXE5.js} +1 -1
  10. package/dist/chunks/{chunk-QROI2U32.js → chunk-2CQJKBKV.js} +2 -4
  11. package/dist/chunks/{chunk-7MZLV3KK.js → chunk-2CZL3GJU.js} +1 -1
  12. package/dist/chunks/{chunk-XH2R2EIK.js → chunk-2EV53VB5.js} +1 -1
  13. package/dist/chunks/{chunk-5B5CLOKM.js → chunk-2FNOYPRB.js} +1 -1
  14. package/dist/chunks/{chunk-4E6BGQWR.js → chunk-2LOA3LC6.js} +1 -1
  15. package/dist/chunks/{chunk-M3Z6NSC2.js → chunk-2V6UURUN.js} +1 -1
  16. package/dist/chunks/{chunk-B6QVH6IG.js → chunk-32EEQITR.js} +1 -1
  17. package/dist/chunks/{chunk-4VP57TOJ.js → chunk-33OMDQTW.js} +1 -1
  18. package/dist/chunks/{chunk-CFYLTZSV.js → chunk-3AGRCSWN.js} +1 -1
  19. package/dist/chunks/{chunk-42J2KCDF.js → chunk-3EFPSM6M.js} +1 -1
  20. package/dist/chunks/{chunk-DQASZDQT.js → chunk-3SNWIYU7.js} +1 -1
  21. package/dist/chunks/{chunk-EVBGFSK5.js → chunk-42Y46TZ3.js} +1 -1
  22. package/dist/chunks/{chunk-KV3QXTRZ.js → chunk-4OO6TXBM.js} +1 -1
  23. package/dist/chunks/{chunk-UUDE44NV.js → chunk-54FY6GJ5.js} +1 -1
  24. package/dist/chunks/{chunk-RIJ45N7C.js → chunk-5HQEYPDO.js} +1 -1
  25. package/dist/chunks/chunk-5KL6UFII.js +7 -0
  26. package/dist/chunks/{chunk-ECFLIVEE.js → chunk-5L566FZB.js} +1 -1
  27. package/dist/chunks/{chunk-NZW3RIQM.js → chunk-5MFGTXWC.js} +1 -1
  28. package/dist/chunks/{chunk-4ELZOAQH.js → chunk-5TMHRECT.js} +1 -1
  29. package/dist/chunks/{chunk-74VQ7PQV.js → chunk-5YLKPSZI.js} +1 -1
  30. package/dist/chunks/chunk-66TKNVRG.js +60 -0
  31. package/dist/chunks/{chunk-RDWLLSPU.js → chunk-6737KAJP.js} +1 -1
  32. package/dist/chunks/{chunk-V5TOMLK4.js → chunk-6Q2XEYCJ.js} +1 -1
  33. package/dist/chunks/{chunk-7VGBGUX7.js → chunk-6S6UZV3V.js} +1 -1
  34. package/dist/chunks/{chunk-EZLPMOHM.js → chunk-6WTGR7UP.js} +1 -1
  35. package/dist/chunks/chunk-7BDQUBSO.js +7 -0
  36. package/dist/chunks/chunk-7M6EHM5B.js +7 -0
  37. package/dist/chunks/{chunk-42FOKWGX.js → chunk-7PGDJTAH.js} +1 -1
  38. package/dist/chunks/{chunk-BZIC36KP.js → chunk-7TVNKTN2.js} +1 -1
  39. package/dist/chunks/{chunk-IIGNDMLO.js → chunk-ABSFPYM4.js} +1 -1
  40. package/dist/chunks/{chunk-MBXLL2HF.js → chunk-AGLOVMPC.js} +3 -3
  41. package/dist/chunks/{chunk-B56SRT5W.js → chunk-AIZIVXNX.js} +1 -1
  42. package/dist/chunks/{chunk-WBSFE6IE.js → chunk-AQBK55BT.js} +1 -1
  43. package/dist/chunks/chunk-AW33SRYY.js +7 -0
  44. package/dist/chunks/{chunk-UNPK7LVC.js → chunk-B3IBBNIR.js} +1 -1
  45. package/dist/chunks/{chunk-VRH7LWOC.js → chunk-B4KA3ZH2.js} +1 -1
  46. package/dist/chunks/{chunk-2J35YKA2.js → chunk-BC74BRVP.js} +12 -12
  47. package/dist/chunks/{chunk-PFZCGMJ7.js → chunk-BH5OASEJ.js} +1 -1
  48. package/dist/chunks/chunk-BIGJEDOA.js +11 -0
  49. package/dist/chunks/chunk-BOJDM3O7.js +7 -0
  50. package/dist/chunks/{chunk-375JVQYK.js → chunk-CJZE7647.js} +1 -1
  51. package/dist/chunks/{chunk-YZKARZ2B.js → chunk-CKJZSRAC.js} +1 -1
  52. package/dist/chunks/{chunk-TUAS3L5I.js → chunk-D5JRYYTT.js} +1 -1
  53. package/dist/chunks/{chunk-SF4E3AQ3.js → chunk-E3WP42P2.js} +1 -1
  54. package/dist/chunks/{chunk-6UMVJ7RL.js → chunk-E7CEQ2PO.js} +1 -1
  55. package/dist/chunks/chunk-E7IFYSQT.js +12 -0
  56. package/dist/chunks/chunk-EDO66J3L.js +7 -0
  57. package/dist/chunks/{chunk-C5QEQSEX.js → chunk-EIFBF3JQ.js} +1 -1
  58. package/dist/chunks/chunk-EM3U6PRB.js +7 -0
  59. package/dist/chunks/{chunk-AMPJ6RWT.js → chunk-EZVNGJN5.js} +1 -1
  60. package/dist/chunks/{chunk-ZPBGAZC2.js → chunk-F6KURUPQ.js} +1 -1
  61. package/dist/chunks/{chunk-5DXC4TE2.js → chunk-F7L5SXJM.js} +1 -1
  62. package/dist/chunks/{chunk-ZTHW5VNH.js → chunk-FFS3QJCU.js} +2 -2
  63. package/dist/chunks/{chunk-FNH3T3CF.js → chunk-FGZXIHGN.js} +1 -1
  64. package/dist/chunks/chunk-FXOKM2RM.js +7 -0
  65. package/dist/chunks/{chunk-NUSKXXZZ.js → chunk-FZLCDLWD.js} +1 -1
  66. package/dist/chunks/{chunk-CD6ZWCKT.js → chunk-G63MSB6N.js} +1 -1
  67. package/dist/chunks/{chunk-HNH3DPIZ.js → chunk-GAILIG45.js} +1 -1
  68. package/dist/chunks/{chunk-FVVOHGQE.js → chunk-GHNHUSVK.js} +1 -1
  69. package/dist/chunks/{chunk-4DMKP6AO.js → chunk-GOI2VVI7.js} +2 -2
  70. package/dist/chunks/chunk-GORL5DZC.js +11 -0
  71. package/dist/chunks/{chunk-WMWB7QKG.js → chunk-GP3KGUCK.js} +1 -1
  72. package/dist/chunks/{chunk-GL66K54F.js → chunk-GPDERS2D.js} +1 -1
  73. package/dist/chunks/{chunk-CU3LNJZV.js → chunk-GUSOYIW6.js} +1 -1
  74. package/dist/chunks/{chunk-AO6AMYBF.js → chunk-GY44CQXK.js} +1 -1
  75. package/dist/chunks/chunk-H64GR57G.js +7 -0
  76. package/dist/chunks/{chunk-VKCBEW6R.js → chunk-HBWRIR42.js} +1 -1
  77. package/dist/chunks/{chunk-4U6ACPA4.js → chunk-HR66URIC.js} +1 -1
  78. package/dist/chunks/chunk-HRGJO4HK.js +7 -0
  79. package/dist/chunks/chunk-HU5NUOWH.js +7 -0
  80. package/dist/chunks/{chunk-4KM733OB.js → chunk-HVJN2SSK.js} +1 -1
  81. package/dist/chunks/chunk-HXLOBW75.js +10 -0
  82. package/dist/chunks/{chunk-4T57TXQ3.js → chunk-IBBLLUXD.js} +1 -1
  83. package/dist/chunks/{chunk-MO2G2ND2.js → chunk-IJBRT2AD.js} +1 -1
  84. package/dist/chunks/{chunk-NT2N5UR4.js → chunk-IRIFXCZW.js} +1 -1
  85. package/dist/chunks/{chunk-ECGY67NB.js → chunk-J7RNU6AO.js} +1 -1
  86. package/dist/chunks/{chunk-SDYCW5JM.js → chunk-JONZUKWX.js} +1 -1
  87. package/dist/chunks/{chunk-P24YBQ6H.js → chunk-JVGENO2R.js} +1 -1
  88. package/dist/chunks/{chunk-PKNEWN4W.js → chunk-K46QQRUN.js} +1 -1
  89. package/dist/chunks/{chunk-BJXLR2RE.js → chunk-KKYNEEM7.js} +1 -1
  90. package/dist/chunks/{chunk-3TDFSO4X.js → chunk-KPSINH7T.js} +1 -1
  91. package/dist/chunks/chunk-KR4DMT3I.js +7 -0
  92. package/dist/chunks/{chunk-RCUDI7OF.js → chunk-M32HBBPK.js} +1 -1
  93. package/dist/chunks/{chunk-ZQXXESKG.js → chunk-MAA5GRIM.js} +1 -1
  94. package/dist/chunks/chunk-MCYG7CCE.js +7 -0
  95. package/dist/chunks/{chunk-VAZ7JG2Z.js → chunk-MNZYFYYH.js} +1 -1
  96. package/dist/chunks/{chunk-HDISAMDF.js → chunk-MQJ4MINN.js} +1 -1
  97. package/dist/chunks/{chunk-ITQPDXXA.js → chunk-MTZYPCZ7.js} +1 -1
  98. package/dist/chunks/{chunk-NE6PKR2J.js → chunk-MWWMY5R6.js} +1 -1
  99. package/dist/chunks/{chunk-UBJVL3NJ.js → chunk-MWXL6HYB.js} +3 -3
  100. package/dist/chunks/{chunk-UFXIPUNI.js → chunk-MXALPSIX.js} +1 -1
  101. package/dist/chunks/{chunk-7JMN657A.js → chunk-NBTFAXL4.js} +1 -1
  102. package/dist/chunks/{chunk-HYOWFNOP.js → chunk-NIZW6D6D.js} +1 -1
  103. package/dist/chunks/{chunk-KBVYN635.js → chunk-NREH4VSU.js} +1 -1
  104. package/dist/chunks/{chunk-TPJV5UNE.js → chunk-NTYBDY24.js} +1 -1
  105. package/dist/chunks/{chunk-NDMQVBTV.js → chunk-NYJTWSSD.js} +1 -1
  106. package/dist/chunks/{chunk-7ZJ7VUIR.js → chunk-O3DAPRJ3.js} +1 -1
  107. package/dist/chunks/chunk-O7TFWXLZ.js +13 -0
  108. package/dist/chunks/{chunk-K7ARJYAG.js → chunk-OFOZ5DBA.js} +1 -1
  109. package/dist/chunks/{chunk-FYE7ILRR.js → chunk-OFZUWHZW.js} +1 -1
  110. package/dist/chunks/{chunk-RI6DJAFI.js → chunk-OHEM2CSW.js} +1 -1
  111. package/dist/chunks/{chunk-6ORJPXDQ.js → chunk-OHK3Y5NS.js} +1 -1
  112. package/dist/chunks/{chunk-IHTWZEQW.js → chunk-OKKG2FUS.js} +1 -1
  113. package/dist/chunks/{chunk-7NMC4E66.js → chunk-OR3ZEVBW.js} +1 -1
  114. package/dist/chunks/{chunk-QDHTI5WK.js → chunk-POR6KNXT.js} +1 -1
  115. package/dist/chunks/{chunk-JUSNW3IF.js → chunk-PSFHYOLD.js} +1 -1
  116. package/dist/chunks/{chunk-TZE4CS4K.js → chunk-QBHTNUM5.js} +1 -1
  117. package/dist/chunks/chunk-QJDWNTYH.js +7 -0
  118. package/dist/chunks/{chunk-YUHKH4TK.js → chunk-QKOLFLLP.js} +1 -1
  119. package/dist/chunks/chunk-REJLEESP.js +10 -0
  120. package/dist/chunks/{chunk-EIMHC5UY.js → chunk-ROKZIMRO.js} +1 -1
  121. package/dist/chunks/{chunk-DR6OJB6P.js → chunk-RPIBJRIT.js} +1 -1
  122. package/dist/chunks/chunk-SEHERY6U.js +7 -0
  123. package/dist/chunks/{chunk-RR5SDYNN.js → chunk-SHMHL6W7.js} +1 -1
  124. package/dist/chunks/{chunk-5FIY443M.js → chunk-SMETSNPH.js} +1 -1
  125. package/dist/chunks/{chunk-NMIZSQDN.js → chunk-SP6E7PHW.js} +1 -1
  126. package/dist/chunks/chunk-SQBDW5FO.js +10 -0
  127. package/dist/chunks/chunk-SWFG73OS.js +8 -0
  128. package/dist/chunks/{chunk-CHIYT3V4.js → chunk-TA7KTIDV.js} +1 -1
  129. package/dist/chunks/{chunk-W24TLPO5.js → chunk-TJBVFVXK.js} +1 -1
  130. package/dist/chunks/{chunk-JTAUWH5V.js → chunk-TJUZVODP.js} +1 -1
  131. package/dist/chunks/{chunk-VWJXV5ZM.js → chunk-TKVUWTBK.js} +1 -1
  132. package/dist/chunks/chunk-U7ZEFVSQ.js +8 -0
  133. package/dist/chunks/{chunk-WTFD4MDT.js → chunk-UZQJQXGJ.js} +1 -1
  134. package/dist/chunks/{chunk-UIMJNASP.js → chunk-V7G4VDZI.js} +1 -1
  135. package/dist/chunks/{chunk-WNDR5HCU.js → chunk-VCJIB3FB.js} +1 -1
  136. package/dist/chunks/{chunk-EGTJTCCW.js → chunk-VFBELAGX.js} +1 -1
  137. package/dist/chunks/{chunk-AYZ52QDF.js → chunk-VM6X5BTK.js} +1 -1
  138. package/dist/chunks/{chunk-HZEKH3RO.js → chunk-VVTMF2AY.js} +1 -1
  139. package/dist/chunks/{chunk-N65H4JMJ.js → chunk-W25UARQV.js} +1 -1
  140. package/dist/chunks/chunk-WLMW7K7F.js +7 -0
  141. package/dist/chunks/{chunk-IHCYNUI2.js → chunk-XJYDISH3.js} +1 -1
  142. package/dist/chunks/chunk-XSQZ35V6.js +7 -0
  143. package/dist/chunks/{chunk-YODQLETL.js → chunk-XVDUP67R.js} +1 -1
  144. package/dist/chunks/{chunk-SLCPSRDR.js → chunk-Y2FVJ7YO.js} +1 -1
  145. package/dist/chunks/chunk-Y2SQC4GV.js +10 -0
  146. package/dist/chunks/{chunk-FVTRIRML.js → chunk-Y5S2OEJH.js} +1 -1
  147. package/dist/chunks/{chunk-EJN55YDV.js → chunk-YANOBY2G.js} +1 -1
  148. package/dist/chunks/{chunk-2RXUQ72I.js → chunk-YIOMTAUF.js} +1 -1
  149. package/dist/chunks/{chunk-BW25OFQG.js → chunk-YLCIOXSX.js} +1 -1
  150. package/dist/chunks/{chunk-GZLYNPNU.js → chunk-YNCWSPPJ.js} +1 -1
  151. package/dist/chunks/chunk-YQQ3A3YC.js +13 -0
  152. package/dist/chunks/{chunk-UI2H2EIM.js → chunk-YTRKHRL3.js} +1 -1
  153. package/dist/chunks/{chunk-MIIHBRKV.js → chunk-Z2K2JR7F.js} +1 -1
  154. package/dist/chunks/{chunk-F7AVGV4Y.js → chunk-Z73UJVGD.js} +1 -1
  155. package/dist/chunks/{chunk-6Y2ZL5XJ.js → chunk-ZKNEIE44.js} +2 -2
  156. package/dist/chunks/chunk-ZXEWWSTH.js +10 -0
  157. package/dist/chunks/chunk-ZZLCRSES.js +11 -0
  158. package/dist/chunks/clear-7QUM5KH7.js +8 -0
  159. package/dist/chunks/{cli-embedded-Y74S252S.js → cli-embedded-ABHGJLYX.js} +1 -1
  160. package/dist/chunks/compile-vercel-config-RDISBTDC.js +7 -0
  161. package/dist/chunks/config-2YNYR6YI.js +7 -0
  162. package/dist/chunks/config-4AOTKKGI.js +8 -0
  163. package/dist/chunks/config-validator.mjs +1 -1
  164. package/dist/chunks/{connect-git-provider-GFAJLQLU.js → connect-git-provider-BMUUC7ND.js} +1 -1
  165. package/dist/chunks/contract-3VSUIBEY.js +10 -0
  166. package/dist/chunks/delete-EJNR4UYC.js +10 -0
  167. package/dist/chunks/delete-OYOBFPEG.js +9 -0
  168. package/dist/chunks/describe-ORIEHT3R.js +25 -0
  169. package/dist/chunks/detect-projects-AKK2XI76.js +7 -0
  170. package/dist/chunks/detect-services-3LYPKUVL.js +7 -0
  171. package/dist/chunks/disable-U6JU546S.js +7 -0
  172. package/dist/chunks/discard-6SHAFQ2H.js +14 -0
  173. package/dist/chunks/edit-YMWKFN3H.js +8 -0
  174. package/dist/chunks/edit-YTTKJFTG.js +9 -0
  175. package/dist/chunks/enable-A6KBPFXJ.js +7 -0
  176. package/dist/chunks/{esm-4ZHGYTUV.js → esm-CF5UHWPM.js} +1 -1
  177. package/dist/chunks/{esm-LNIAU767.js → esm-EYOXGOVF.js} +1 -1
  178. package/dist/chunks/{esm-IBY43SSX.js → esm-FSME24KA.js} +1 -1
  179. package/dist/chunks/{esm-7FVTQHRH.js → esm-IUATPKKB.js} +1 -1
  180. package/dist/chunks/{esm-GTSUYLKG.js → esm-L6OKDFWP.js} +1 -1
  181. package/dist/chunks/{esm-TEM4KPXZ.js → esm-ORQC2ZSA.js} +1 -1
  182. package/dist/chunks/{esm-TLAM7FSK.js → esm-PYIZNQIK.js} +1 -1
  183. package/dist/chunks/{exec-H3X7U4P3.js → exec-RQ257MTR.js} +1 -1
  184. package/dist/chunks/{export-25TQ3YBT.js → export-MMU6VVFK.js} +1 -1
  185. package/dist/chunks/future-ANILGGFQ.js +7 -0
  186. package/dist/chunks/generate-cert-for-deploy-LKKZUKWF.js +7 -0
  187. package/dist/chunks/image-OWWKVBTU.js +7 -0
  188. package/dist/chunks/import-builders-VENL23EH.js +7 -0
  189. package/dist/chunks/{inspect-3W3TUJ6P.js → inspect-BPIJT4OX.js} +1 -1
  190. package/dist/chunks/inspect-GDZJZGHW.js +13 -0
  191. package/dist/chunks/{inspect-TN2QY3BP.js → inspect-H7JGEVL7.js} +1 -1
  192. package/dist/chunks/inspect-I6LQLOBG.js +8 -0
  193. package/dist/chunks/{inspect-BRYVSQBD.js → inspect-IGFAKTAX.js} +1 -1
  194. package/dist/chunks/inspect-U6V4UQXC.js +9 -0
  195. package/dist/chunks/list-763XVNFH.js +8 -0
  196. package/dist/chunks/{list-WA6Q7DUN.js → list-OX2N4JK7.js} +1 -1
  197. package/dist/chunks/list-WHZXMZJ5.js +12 -0
  198. package/dist/chunks/{list-6W4UQBY4.js → list-XLPMNNI7.js} +1 -1
  199. package/dist/chunks/login-2PGWWOKB.js +7 -0
  200. package/dist/chunks/login-T63WJL4S.js +9 -0
  201. package/dist/chunks/logs-S2KJGEIG.js +7 -0
  202. package/dist/chunks/ls-5HXYPIFR.js +11 -0
  203. package/dist/chunks/ls-M4GJOBZP.js +8 -0
  204. package/dist/chunks/ls-N56BWH2L.js +8 -0
  205. package/dist/chunks/{ls-L5LLKZBV.js → ls-O5B3LY4D.js} +1 -1
  206. package/dist/chunks/{ls-MAJ4QZTY.js → ls-PNGTHVUK.js} +1 -1
  207. package/dist/chunks/{ls-UXE5RSZN.js → ls-Q7FAOSVD.js} +1 -1
  208. package/dist/chunks/{ls-4WP6LHLL.js → ls-R4UDBWS3.js} +1 -1
  209. package/dist/chunks/migrate-experimental-services-HWJXO4AJ.js +7 -0
  210. package/dist/chunks/mutate-FM6BLE46.js +9 -0
  211. package/dist/chunks/{native-self-update-DEVBYOH2.js → native-self-update-7LL6RPJW.js} +1 -1
  212. package/dist/chunks/notifications-ZSZN35BQ.js +7 -0
  213. package/dist/chunks/open-4RXUUYQP.js +7 -0
  214. package/dist/chunks/openapi-457MABMI.js +7 -0
  215. package/dist/chunks/permissions-UJRTMOT7.js +7 -0
  216. package/dist/chunks/{plugin-offer-JUYWL4I7.js → plugin-offer-KJCRPUU5.js} +1 -1
  217. package/dist/chunks/prompt-missing-credentials-B5DGQFI7.js +7 -0
  218. package/dist/chunks/publish-I3APOD3N.js +15 -0
  219. package/dist/chunks/pull-2YUNTVPQ.js +7 -0
  220. package/dist/chunks/purchase-domain-if-available-3YOXUXII.js +7 -0
  221. package/dist/chunks/push-4QQJQRGZ.js +7 -0
  222. package/dist/chunks/query-2JO6HH5N.js +12 -0
  223. package/dist/chunks/reauthenticate-COYQMMAG.js +7 -0
  224. package/dist/chunks/remove-PWS5EJ7F.js +9 -0
  225. package/dist/chunks/reorder-COZQX64R.js +10 -0
  226. package/dist/chunks/reply-XDYZNHW2.js +9 -0
  227. package/dist/chunks/resolve-6KUFCZRX.js +12 -0
  228. package/dist/chunks/resolve-agent-team-NOT235ZN.js +7 -0
  229. package/dist/chunks/{resolve-deployment-framework-preset-AXXYBFCL.js → resolve-deployment-framework-preset-4TKUU6AH.js} +1 -1
  230. package/dist/chunks/restore-GSSD4ZWH.js +16 -0
  231. package/dist/chunks/rm-AUNVZPJ5.js +8 -0
  232. package/dist/chunks/rm-EIMUYBJT.js +8 -0
  233. package/dist/chunks/rm-EJH37HYN.js +8 -0
  234. package/dist/chunks/rm-O5NMCBC3.js +8 -0
  235. package/dist/chunks/rm-PHTOXG4E.js +8 -0
  236. package/dist/chunks/{routes-BP54NO3Z.js → routes-NEZJKMR5.js} +1 -1
  237. package/dist/chunks/rule-inspect-7HNYKQ6X.js +8 -0
  238. package/dist/chunks/{schema-753JMRZA.js → schema-5P7HROXE.js} +1 -1
  239. package/dist/chunks/schema-MZM5MN5V.js +14 -0
  240. package/dist/chunks/select-org-3BZWQD6R.js +7 -0
  241. package/dist/chunks/set-2RH74ZC3.js +7 -0
  242. package/dist/chunks/set-Q2EJ3V44.js +9 -0
  243. package/dist/chunks/setup-and-link-BT5TNY4J.js +7 -0
  244. package/dist/chunks/{skills-QZ4AMS2K.js → skills-DUOUHPBY.js} +1 -1
  245. package/dist/chunks/{statuspage-KHTMA4WL.js → statuspage-K5SC7KAQ.js} +1 -1
  246. package/dist/chunks/{detect-projects-K7SVMH5T.js → table-W6LOHWWF.js} +1 -1
  247. package/dist/chunks/tags-QOJEEMKS.js +7 -0
  248. package/dist/chunks/{types-NPUAHKSK.js → types-7L6HBXAU.js} +1 -1
  249. package/dist/chunks/{update-7XH7HM5F.js → update-HS6QFTQK.js} +1 -1
  250. package/dist/chunks/usage-3N6IA5SX.js +13 -0
  251. package/dist/chunks/validate-config-YLL6RPCP.js +7 -0
  252. package/dist/commands/build/index.js +1 -1
  253. package/dist/commands/deploy/index.js +19 -37
  254. package/dist/commands/dev/index.js +4 -4
  255. package/dist/commands/env/index.js +1 -1
  256. package/dist/commands/link/index.js +1 -1
  257. package/dist/commands/list/index.js +1 -1
  258. package/dist/commands/project/index.js +1 -1
  259. package/dist/commands-account.js +3 -3
  260. package/dist/commands-ai.js +6 -6
  261. package/dist/commands-blob.js +1 -1
  262. package/dist/commands-core.js +20 -20
  263. package/dist/commands-deployments.js +5 -5
  264. package/dist/commands-flags.js +1 -1
  265. package/dist/commands-integrations.js +1 -1
  266. package/dist/commands-observability.js +15 -8
  267. package/dist/commands-routing.js +5 -4
  268. package/dist/help.js +1 -1
  269. package/dist/index.js +5 -5
  270. package/dist/internal-build.js +1 -1
  271. package/dist/package.json +45 -245
  272. package/dist/vc.js +47 -695
  273. package/dist/version.mjs +1 -1
  274. package/package.json +51 -196
  275. package/dist/chunks/add-4R6FUHQT.js +0 -8
  276. package/dist/chunks/add-F3H4BFJZ.js +0 -8
  277. package/dist/chunks/add-TCOJ4SIQ.js +0 -8
  278. package/dist/chunks/build-GOLTZF6S.js +0 -7
  279. package/dist/chunks/chunk-3KJ6HWSX.js +0 -7
  280. package/dist/chunks/chunk-5X635INY.js +0 -11
  281. package/dist/chunks/chunk-7LPNDK2O.js +0 -7
  282. package/dist/chunks/chunk-A3M2BHWR.js +0 -13
  283. package/dist/chunks/chunk-BUFEV3T4.js +0 -11
  284. package/dist/chunks/chunk-BVR6OIU5.js +0 -7
  285. package/dist/chunks/chunk-D7BB5BPA.js +0 -10
  286. package/dist/chunks/chunk-DBT6PGEH.js +0 -7
  287. package/dist/chunks/chunk-DRZVM7CB.js +0 -12
  288. package/dist/chunks/chunk-EICEQXVS.js +0 -7
  289. package/dist/chunks/chunk-F2R7L3ZB.js +0 -7
  290. package/dist/chunks/chunk-FHMCTV5E.js +0 -7
  291. package/dist/chunks/chunk-FOE3MWES.js +0 -7
  292. package/dist/chunks/chunk-HKU6D7DU.js +0 -8
  293. package/dist/chunks/chunk-IOTKHTZH.js +0 -7
  294. package/dist/chunks/chunk-K4JTCVNW.js +0 -13
  295. package/dist/chunks/chunk-LALPOYIA.js +0 -8
  296. package/dist/chunks/chunk-M3R7F2N4.js +0 -7
  297. package/dist/chunks/chunk-MUKXOI2K.js +0 -8
  298. package/dist/chunks/chunk-NIS66BFX.js +0 -63
  299. package/dist/chunks/chunk-NSPW47RU.js +0 -7
  300. package/dist/chunks/chunk-NTDP6RTQ.js +0 -11
  301. package/dist/chunks/chunk-Q2QVK3TH.js +0 -7
  302. package/dist/chunks/chunk-RM3ZDRYE.js +0 -7
  303. package/dist/chunks/chunk-UCRMJMH6.js +0 -10
  304. package/dist/chunks/chunk-XQDHMFQY.js +0 -7
  305. package/dist/chunks/chunk-XRIM4BUF.js +0 -7
  306. package/dist/chunks/chunk-Z64MQIOE.js +0 -10
  307. package/dist/chunks/chunk-ZS2WS4AM.js +0 -7
  308. package/dist/chunks/clear-PECHXMV5.js +0 -8
  309. package/dist/chunks/compile-vercel-config-EM3HYOQC.js +0 -7
  310. package/dist/chunks/config-DA2NZUDH.js +0 -8
  311. package/dist/chunks/config-X6O3DT7V.js +0 -7
  312. package/dist/chunks/contract-RHMWRX4W.js +0 -10
  313. package/dist/chunks/delete-5RN5VW5L.js +0 -9
  314. package/dist/chunks/delete-MT6I7R7K.js +0 -10
  315. package/dist/chunks/detect-services-HSA4JHJX.js +0 -7
  316. package/dist/chunks/disable-LXPZDQMC.js +0 -7
  317. package/dist/chunks/discard-PW65T65S.js +0 -14
  318. package/dist/chunks/edit-WFSONASO.js +0 -8
  319. package/dist/chunks/edit-YID3FOJ3.js +0 -9
  320. package/dist/chunks/enable-X2EKQCIY.js +0 -7
  321. package/dist/chunks/future-DQBK457G.js +0 -7
  322. package/dist/chunks/generate-cert-for-deploy-OMEACY5G.js +0 -7
  323. package/dist/chunks/image-AO2OZG4W.js +0 -7
  324. package/dist/chunks/import-builders-GSDV4K4A.js +0 -7
  325. package/dist/chunks/inspect-4244CRHI.js +0 -13
  326. package/dist/chunks/inspect-C43IV7X4.js +0 -9
  327. package/dist/chunks/inspect-RP5KXOYQ.js +0 -8
  328. package/dist/chunks/list-2SY6PZLC.js +0 -12
  329. package/dist/chunks/list-WBKZGIMQ.js +0 -8
  330. package/dist/chunks/login-K6XBWOFD.js +0 -9
  331. package/dist/chunks/login-OGMXEW5N.js +0 -7
  332. package/dist/chunks/logs-R3ZERQ7M.js +0 -7
  333. package/dist/chunks/ls-EVAQD3LI.js +0 -8
  334. package/dist/chunks/ls-O5DKK3TY.js +0 -8
  335. package/dist/chunks/ls-PTHGXQLK.js +0 -11
  336. package/dist/chunks/mutate-EKZWPQQJ.js +0 -9
  337. package/dist/chunks/notifications-F5S3RKZF.js +0 -7
  338. package/dist/chunks/open-KGVG54NN.js +0 -7
  339. package/dist/chunks/openapi-7TPDTMCU.js +0 -7
  340. package/dist/chunks/permissions-5K7JZOMB.js +0 -7
  341. package/dist/chunks/prompt-missing-credentials-DX2KJB5X.js +0 -7
  342. package/dist/chunks/publish-KIRTO2ZO.js +0 -15
  343. package/dist/chunks/pull-3CRJK7BX.js +0 -7
  344. package/dist/chunks/purchase-domain-if-available-55IXEF43.js +0 -7
  345. package/dist/chunks/push-4YG5HKSD.js +0 -7
  346. package/dist/chunks/query-67KQVLTR.js +0 -12
  347. package/dist/chunks/reauthenticate-SWSBFGDU.js +0 -7
  348. package/dist/chunks/remove-SYTIFVWW.js +0 -9
  349. package/dist/chunks/reorder-TX5MXJEB.js +0 -10
  350. package/dist/chunks/reply-XVK33N5T.js +0 -9
  351. package/dist/chunks/resolve-JZ262ZF4.js +0 -12
  352. package/dist/chunks/resolve-agent-team-BG5YW55B.js +0 -7
  353. package/dist/chunks/restore-IPFL7TKT.js +0 -16
  354. package/dist/chunks/rm-2BCAZGQU.js +0 -8
  355. package/dist/chunks/rm-3CCU3CE6.js +0 -8
  356. package/dist/chunks/rm-5CQV5LYG.js +0 -8
  357. package/dist/chunks/rm-OV4OU6H2.js +0 -8
  358. package/dist/chunks/rm-WFGMOZ3G.js +0 -8
  359. package/dist/chunks/rule-inspect-RFJIIXZH.js +0 -8
  360. package/dist/chunks/schema-SUNFQGUL.js +0 -14
  361. package/dist/chunks/select-org-MPHPWWPU.js +0 -7
  362. package/dist/chunks/set-BR6EEOPB.js +0 -7
  363. package/dist/chunks/set-I3NWZRSI.js +0 -9
  364. package/dist/chunks/setup-and-link-MRTKVOWD.js +0 -7
  365. package/dist/chunks/tags-7DIZEAVE.js +0 -7
  366. package/dist/chunks/usage-3BS7JCCU.js +0 -13
  367. package/dist/chunks/validate-config-LAD7BU3B.js +0 -7
  368. package/dist/launcher-errors.js +0 -11
  369. package/dist/native-download.js +0 -8
package/dist/vc.js CHANGED
@@ -1,645 +1,67 @@
1
1
  #!/usr/bin/env node
2
2
  /* biome-ignore-all lint/suspicious/noConsole: CLI entry point */
3
+ // The JS CLI's entry point (dist/vc.js). @vercel/cli-support ships it, and the
4
+ // vercel launcher (src/launcher.js) imports it when the native binary can't
5
+ // run. The native binary's pkg.js enters it too, and a repository checkout
6
+ // runs it directly.
7
+ //
3
8
  // This shim defers loading the real module until the compile cache is enabled.
4
9
  // https://nodejs.org/api/module.html#moduleenablecompilecachecachedir
5
10
  // enableCompileCache was added in Node.js 22.8.0, so we need to handle older versions.
11
+ import { sep } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+
6
14
  const entryAt = performance.now();
7
- Reflect.set(globalThis, Symbol.for('vercel.cli.entry-at'), entryAt);
8
- const startupTimings = process.env.VERCEL_TELEMETRY_DISABLED
9
- ? undefined
10
- : {
11
- marks: [
12
- {
13
- phase: 'compile_cache',
14
- timestamp: Number(process.hrtime.bigint() / BigInt(1000)),
15
- },
16
- ],
17
- };
18
- Reflect.set(
19
- globalThis,
20
- Symbol.for('vercel.cli.startup-timings'),
21
- startupTimings
22
- );
15
+ // The launcher sets these when it imports this file, so its own startup time
16
+ // counts too.
17
+ const ENTRY_AT = Symbol.for('vercel.cli.entry-at');
18
+ const STARTUP_TIMINGS = Symbol.for('vercel.cli.startup-timings');
19
+ const launched = ENTRY_AT in globalThis;
20
+ if (!launched) Reflect.set(globalThis, ENTRY_AT, entryAt);
21
+ const startupTimings = launched
22
+ ? globalThis[STARTUP_TIMINGS]
23
+ : process.env.VERCEL_TELEMETRY_DISABLED
24
+ ? undefined
25
+ : {
26
+ marks: [
27
+ {
28
+ phase: 'compile_cache',
29
+ timestamp: Number(process.hrtime.bigint() / BigInt(1000)),
30
+ },
31
+ ],
32
+ };
33
+ if (!launched) Reflect.set(globalThis, STARTUP_TIMINGS, startupTimings);
23
34
  function markStartup(phase) {
24
35
  startupTimings?.marks.push({
25
36
  phase,
26
37
  timestamp: Number(process.hrtime.bigint() / BigInt(1000)),
27
38
  });
28
39
  }
29
- try {
30
- const { enableCompileCache } = await import('node:module');
31
- if (enableCompileCache) {
32
- enableCompileCache();
33
- }
34
- } catch {}
35
- markStartup('launcher');
36
-
37
- // Run the one package this platform maps to: the native binary on macOS, Linux
38
- // and Windows x64/arm64 (downloaded once into the CLI cache when the install
39
- // skipped it), @vercel/cli-support everywhere else. This package's own JS CLI
40
- // (./index.js) is only a fallback, recorded in telemetry.
41
- import { spawnSync } from 'node:child_process';
42
- import {
43
- accessSync,
44
- constants as fsConstants,
45
- existsSync,
46
- mkdirSync,
47
- readFileSync,
48
- statSync,
49
- writeFileSync,
50
- } from 'node:fs';
51
- import { dirname, join, resolve, sep } from 'node:path';
52
- import { fileURLToPath, pathToFileURL } from 'node:url';
53
-
54
- const __dirname = dirname(fileURLToPath(import.meta.url));
55
-
56
- // Whether this package still ships its own JS CLI (dist/index.js), the fallback
57
- // when the native binary can't run. Without it, every fallback below becomes an
58
- // error with a fix instead, so dropping dist/index.js from the package needs no
59
- // launcher change.
60
- const jsCliAvailable = existsSync(join(__dirname, 'index.js'));
61
- // At most one launcher warning per run.
62
- let warnedThisRun = false;
63
-
64
- // Keep in sync with packages/vc-native/scripts/platforms.mjs.
65
- const NATIVE_TARGETS = [
66
- 'darwin-arm64',
67
- 'darwin-x64',
68
- 'linux-arm64',
69
- 'linux-arm64-musl',
70
- 'linux-x64',
71
- 'linux-x64-musl',
72
- 'win32-arm64',
73
- 'win32-x64',
74
- ];
75
-
76
- function isWindowsTarget(target) {
77
- return target.startsWith('win32-');
78
- }
79
-
80
- function binaryName(target) {
81
- return isWindowsTarget(target) ? 'vercel.exe' : 'vercel';
82
- }
83
-
84
- // musl's `ldd` names itself. npm and pnpm skip the other libc's package via
85
- // its `libc` field, but Yarn classic installs both, so the launcher must pick
86
- // one.
87
- // Detected the way npm does (npm-install-checks), so the launcher picks the
88
- // package npm installed: the ldd script names its libc, and Node's report
89
- // covers systems without ldd, such as minimal container images.
90
- let musl;
91
- function isMusl() {
92
- if (musl !== undefined) return musl;
93
- try {
94
- const ldd = readFileSync('/usr/bin/ldd', 'utf8');
95
- if (ldd.includes('musl')) return (musl = true);
96
- if (ldd.includes('GNU C Library')) return (musl = false);
97
- } catch {}
40
+ if (!launched) {
98
41
  try {
99
- const excludeNetwork = process.report.excludeNetwork;
100
- process.report.excludeNetwork = true;
101
- const report = process.report.getReport();
102
- process.report.excludeNetwork = excludeNetwork;
103
- musl =
104
- !report.header?.glibcVersionRuntime &&
105
- Array.isArray(report.sharedObjects) &&
106
- report.sharedObjects.some(
107
- file => file.includes('libc.musl-') || file.includes('ld-musl-')
108
- );
109
- } catch {
110
- musl = false;
111
- }
112
- return musl;
113
- }
114
-
115
- function platformTarget() {
116
- const target = `${process.platform}-${process.arch}`;
117
- return process.platform === 'linux' && isMusl() ? `${target}-musl` : target;
118
- }
119
-
120
- // Walk up from this install's own tree. `require.resolve()` is not used
121
- // because it falls back to NODE_PATH and the global folders even when `paths`
122
- // is given.
123
- function findPackage(name) {
124
- let dir = __dirname;
125
- while (true) {
126
- const pkgDir = join(dir, 'node_modules', name);
127
- if (existsSync(join(pkgDir, 'package.json'))) return pkgDir;
128
- const parent = dirname(dir);
129
- if (parent === dir) return null;
130
- dir = parent;
131
- }
132
- }
133
-
134
- // The package this platform maps to: a native target or `cli-support`.
135
- function mappedTarget() {
136
- const target = platformTarget();
137
- return NATIVE_TARGETS.includes(target) ? target : 'cli-support';
138
- }
139
-
140
- function resolveTarget() {
141
- const target = mappedTarget();
142
- if (target === 'cli-support') {
143
- const pkgDir = findPackage('@vercel/cli-support');
144
- const entry = pkgDir && join(pkgDir, 'dist', 'index.js');
145
- return {
146
- target: 'cli-support',
147
- entry: entry && existsSync(entry) && entry,
148
- };
149
- }
150
- const pkgDir = findPackage(`@vercel/vc-native-${target}`);
151
- const name = binaryName(target);
152
- const bin =
153
- pkgDir &&
154
- isOwnVersion(pkgDir) &&
155
- [join(pkgDir, 'bin', name), join(pkgDir, name)].find(existsSync);
156
- return { target, bin };
157
- }
158
- // The lookup walks up through parent node_modules, so it can reach a package
159
- // hoisted for another `vercel` in the same tree. Treat a different version as
160
- // missing, so the launcher downloads this version instead of running another.
161
- // Unreadable versions don't block: the optional dependency pins it exactly.
162
- function isOwnVersion(pkgDir) {
163
- const own = readOwnPackage()?.version;
164
- try {
165
- const found = JSON.parse(
166
- readFileSync(join(pkgDir, 'package.json'), 'utf8')
167
- ).version;
168
- return (
169
- typeof own !== 'string' || typeof found !== 'string' || found === own
170
- );
171
- } catch {
172
- return true;
173
- }
174
- }
175
-
176
- // The package this launcher belongs to: `vercel` or `@vercel/cli-support`.
177
- let ownPackage;
178
- function readOwnPackage() {
179
- if (ownPackage === undefined) {
180
- try {
181
- ownPackage = JSON.parse(
182
- readFileSync(join(__dirname, '..', 'package.json'))
183
- );
184
- } catch {
185
- ownPackage = null;
42
+ const { enableCompileCache } = await import('node:module');
43
+ if (enableCompileCache) {
44
+ enableCompileCache();
186
45
  }
187
- }
188
- return ownPackage;
189
- }
190
-
191
- // This file also ships in @vercel/cli-support, which is its own JS CLI.
192
- function isCliSupport() {
193
- return readOwnPackage()?.name === '@vercel/cli-support';
194
- }
195
-
196
- // Flags that make stdout a JSON document, so stderr must stay quiet.
197
- function wantsJsonOutput(argv) {
198
- const formatIndex = argv.indexOf('--format');
199
- return (
200
- argv.some(arg => arg === '--json' || arg === '--format=json') ||
201
- (formatIndex !== -1 && argv[formatIndex + 1] === 'json')
202
- );
203
- }
204
-
205
- // When the native package is missing (an install that skipped optional
206
- // dependencies, or one made before npm had the package), download the binary
207
- // for this exact version into the CLI cache, once. Each version has its own
208
- // directory, so a binary is written once and never replaced.
209
- //
210
- // After a failed attempt, wait before trying again: 15 minutes after the
211
- // first failure, 2 hours after the second, then a day. The `download-failed`
212
- // marker holds the number of failures; its age is the time since the last.
213
- const DOWNLOAD_RETRY_AFTER = [
214
- { ms: 15 * 60 * 1000, label: '15 minutes' },
215
- { ms: 2 * 60 * 60 * 1000, label: '2 hours' },
216
- { ms: 24 * 60 * 60 * 1000, label: '24 hours' },
217
- ];
218
-
219
- function retryAfter(failures) {
220
- return DOWNLOAD_RETRY_AFTER[
221
- Math.min(Math.max(failures, 1), DOWNLOAD_RETRY_AFTER.length) - 1
222
- ];
223
- }
224
-
225
- /** The failures recorded in the marker, and when the last one happened. */
226
- function readFailedStamp(stamp) {
227
- try {
228
- const { mtimeMs } = statSync(stamp);
229
- // Earlier releases wrote an empty marker: one failure.
230
- const count = Number.parseInt(readFileSync(stamp, 'utf8'), 10);
231
- return { at: mtimeMs, count: count > 0 ? count : 1 };
232
- } catch {
233
- return undefined;
234
- }
235
- }
236
-
237
- async function nativeCacheDir(target) {
238
- const version = readOwnPackage()?.version;
239
- if (
240
- typeof version !== 'string' ||
241
- !/^\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?$/.test(version)
242
- ) {
243
- return null;
244
- }
245
- try {
246
- const config = await import('@vercel/cli-config/paths');
247
- return {
248
- version,
249
- dir: join(config.getCachePath(), 'native', version, target),
250
- };
251
- } catch {
252
- return null;
253
- }
254
- }
255
-
256
- async function fetchNativeBinary(target) {
257
- // Only an installed package uses the download. A repository checkout
258
- // (packages/cli/dist/vc.js) runs its own JS CLI, so local changes and tests
259
- // never run a published binary instead.
260
- // Yarn PnP and Deno installs have no node_modules either.
261
- if (!__dirname.split(sep).includes('node_modules')) {
262
- return { reason: 'not_in_node_modules' };
263
- }
264
- const cache = await nativeCacheDir(target);
265
- if (!cache) return { reason: 'target_missing' };
266
- const bin = join(cache.dir, binaryName(target));
267
- if (existsSync(bin)) return { bin, source: 'cache' };
268
-
269
- // Tests only: never reach the real registry.
270
- if (process.env.__VERCEL_NATIVE_DOWNLOAD === '0') {
271
- return { reason: 'target_missing' };
272
- }
273
- // Without a writable cache the binary has nowhere to go and a failure can't
274
- // be recorded, so don't try: the JS CLI runs with the once-a-day warning.
275
- // Reported apart from target_missing: a sandbox that blocks writes to the
276
- // cache directory looks like this.
277
- try {
278
- mkdirSync(cache.dir, { recursive: true });
279
- accessSync(cache.dir, fsConstants.W_OK);
280
- } catch {
281
- return { reason: 'cache_unwritable', cacheDir: cache.dir };
282
- }
283
- // The wait only makes sense while the JS CLI can run the command meanwhile.
284
- // Without it, every run tries again.
285
- const failedStamp = join(cache.dir, 'download-failed');
286
- const previous = readFailedStamp(failedStamp);
287
- if (
288
- jsCliAvailable &&
289
- previous &&
290
- Date.now() - previous.at < retryAfter(previous.count).ms
291
- ) {
292
- return { reason: 'download_failed' };
293
- }
294
-
295
- const quiet = wantsJsonOutput(process.argv.slice(2));
296
- // A failed attempt shows in the JS CLI's trace as its own startup span.
297
- markStartup('native_download');
298
- try {
299
- const { downloadNativeBinary } = await import('./native-download.js');
300
- const downloaded = await downloadNativeBinary({
301
- target,
302
- version: cache.version,
303
- directory: cache.dir,
304
- log: quiet ? undefined : line => console.error(line),
305
- retryTimeouts: jsCliAvailable,
306
- });
307
- return {
308
- bin: downloaded.bin,
309
- source: 'download',
310
- attempts: downloaded.attempts,
311
- };
312
- } catch (error) {
313
- markStartup('launcher');
314
- const failures = (previous?.count ?? 0) + 1;
315
- try {
316
- writeFileSync(failedStamp, String(failures));
317
- } catch {}
318
- const known = error?.name === 'NativeDownloadError';
319
- const detail = known ? error.detail : 'unexpected error';
320
- // Without the JS CLI, the launcher reports this as an error instead.
321
- if (!quiet && jsCliAvailable) {
322
- console.error(
323
- `! Couldn't download the Vercel CLI binary (${detail}), so Node.js is running this command. The CLI tries again in ${retryAfter(failures).label}.\n${feedbackHint()}`
324
- );
325
- warnedThisRun = true;
326
- }
327
- // Only a run that tried reports why, so telemetry can tell attempts from
328
- // the runs that skip downloading while they wait.
329
- return {
330
- reason: 'download_failed',
331
- detail,
332
- kind: known ? error.kind : 'other',
333
- timeout: known ? error.timeout : undefined,
334
- progress: known ? error.progress : undefined,
335
- downloadFailure: {
336
- downloadError: known ? error.kind : 'other',
337
- downloadAttempts: String(known ? error.attempts : 1),
338
- downloadFailures: failures >= 3 ? '3_or_more' : String(failures),
339
- ...(known && error.phase && { downloadPhase: error.phase }),
340
- ...(known && error.code && { downloadCode: error.code }),
341
- ...(known && error.timeout && { downloadTimeout: error.timeout }),
342
- ...(known && error.progress && { downloadProgress: error.progress }),
343
- ...(known &&
344
- error.environment && {
345
- downloadProxy: error.environment.proxy ? 'true' : 'false',
346
- npmRegistry: error.environment.npmRegistry,
347
- npmProxy: error.environment.npmProxy ? 'true' : 'false',
348
- npmTls: error.environment.npmTls ? 'true' : 'false',
349
- }),
350
- },
351
- };
352
- }
353
- }
354
-
355
- // The native binary is the default, but while this package ships its JS CLI
356
- // it still honors an explicit opt-out: VERCEL_CLI_USE_NATIVE_BINARY, then a
357
- // persisted `useNativeBinary` preference. Returns where the opt-out came from
358
- // (`env` or `config`), or false. Any failure to read config counts as no
359
- // preference.
360
- async function nativeBinaryOptOut() {
361
- const envOverride = process.env.VERCEL_CLI_USE_NATIVE_BINARY;
362
- if (envOverride === '0' || envOverride === 'false') return 'env';
363
- if (envOverride === '1' || envOverride === 'true') return false;
364
- try {
365
- // Zod-free subpath to avoid loading zod + schemas on this hot path.
366
- const config = await import('@vercel/cli-config/paths');
367
- const argDir = globalConfigDirFromArgv();
368
- const configDir = argDir
369
- ? resolve(process.cwd(), argDir)
370
- : config.getGlobalPathConfig();
371
- return config.readGlobalConfigFlag(
372
- config.getConfigFilePath(configDir),
373
- 'useNativeBinary'
374
- ) === false
375
- ? 'config'
376
- : false;
377
- } catch {
378
- return false;
379
- }
380
- }
381
-
382
- // Ctrl+C (and Ctrl+Break on Windows) also reach the binary, which handles
383
- // them. The launcher waits for it instead of exiting: on Windows, Node.js
384
- // exiting would also kill the binary before it could clean up.
385
- const CONSOLE_SIGNALS =
386
- process.platform === 'win32' ? ['SIGINT', 'SIGBREAK'] : ['SIGINT'];
387
- function waitForNative() {}
388
-
389
- function optOutSetting(source) {
390
- return source === 'env'
391
- ? `VERCEL_CLI_USE_NATIVE_BINARY=${process.env.VERCEL_CLI_USE_NATIVE_BINARY}`
392
- : '"useNativeBinary": false in the Vercel CLI config';
393
- }
394
-
395
- // Agents can be told to report what they run into, so every JS CLI fallback
396
- // warning ends with the vercel feedback command on its own line, like other
397
- // recovery commands. It doesn't prescribe a note: <DESCRIPTION> is for whoever
398
- // reads it to describe what they're seeing.
399
- const FALLBACK_FEEDBACK =
400
- "A future release of vercel removes this fallback. If this keeps happening, describe what you're seeing with:";
401
-
402
- function feedbackHint(lead = FALLBACK_FEEDBACK) {
403
- return ` ${lead}\n vercel feedback "<DESCRIPTION>"`;
404
- }
405
-
406
- // A warning about the JS CLI fallback, at most once a day. Agents often run
407
- // non-interactively and need to see it; only --json skips it.
408
- async function warnOncePerDay(stampName, message) {
409
- if (warnedThisRun) return;
410
- if (wantsJsonOutput(process.argv.slice(2))) return;
411
- const dir = await stampDirectory();
412
- const stamp = dir && join(dir, stampName);
413
- try {
414
- if (stamp && Date.now() - statSync(stamp).mtimeMs < DAY_MS) return;
415
46
  } catch {}
416
- console.error(message);
417
- warnedThisRun = true;
418
- if (stamp) {
419
- try {
420
- writeFileSync(stamp, '');
421
- } catch {}
422
- }
423
- }
424
-
425
- // Where once-a-day stamps go: the global config directory, created if it's
426
- // missing (as on a fresh CI machine), else the CLI's cache directory. Both are
427
- // under the user's home, never a shared directory such as the system temp
428
- // directory, where another user could plant a symlink for the stamp write to
429
- // follow. With neither writable (a sandbox blocking writes to home), there is
430
- // no stamp and the warning shows on every run.
431
- async function stampDirectory() {
432
- let config;
433
- try {
434
- config = await import('@vercel/cli-config/paths');
435
- } catch {
436
- return undefined;
437
- }
438
- const argDir = globalConfigDirFromArgv();
439
- const candidates = [
440
- () =>
441
- argDir ? resolve(process.cwd(), argDir) : config.getGlobalPathConfig(),
442
- () => config.getCachePath(),
443
- ];
444
- for (const candidate of candidates) {
445
- try {
446
- const dir = candidate();
447
- mkdirSync(dir, { recursive: true });
448
- accessSync(dir, fsConstants.W_OK);
449
- return dir;
450
- } catch {}
451
- }
452
- return undefined;
47
+ markStartup('launcher');
453
48
  }
454
49
 
455
- const DAY_MS = 24 * 60 * 60 * 1000;
456
-
457
- // Read by src/index.ts and reported in telemetry. Inside the native binary,
458
- // pkg.js sets it to `native` before re-entering this file with
459
- // VERCEL_VC_NATIVE=1.
50
+ // Read by src/index.ts and reported in telemetry. pkg.js (the native binary)
51
+ // and the vercel launcher set it before this file runs; otherwise this file
52
+ // was run directly: by a process the native binary spawned, or from a
53
+ // repository checkout.
460
54
  const LAUNCH = Symbol.for('vercel.cli.launch');
461
- let launch;
462
- let cliSupportEntry;
463
- // Why the JS CLI would run, for the warning or, without it, the error.
464
- let fallback;
465
- if (
466
- process.env.VERCEL_VC_NATIVE === '1' &&
467
- globalThis[LAUNCH]?.runtime === 'native'
468
- ) {
469
- // Inside the native binary: pkg.js set the marker and re-entered this file.
470
- } else if (process.env.VERCEL_VC_NATIVE === '1' && jsCliAvailable) {
471
- // Not the native binary: a process it spawned (a build script, a dev
472
- // command) inherited VERCEL_VC_NATIVE=1 and runs this package's JS CLI.
473
- // Without the JS CLI, it resolves and runs the binary like any launch.
474
- launch = {
475
- runtime: 'dist',
476
- target: mappedTarget(),
477
- reason: 'inherited_native_env',
478
- };
479
- globalThis[LAUNCH] = launch;
480
- } else {
481
- const resolved = resolveTarget();
482
- let optedOut = false;
483
- let missingReason = 'target_missing';
484
- let downloadFailure;
485
- // Never download for @vercel/cli-support (the build container runs it on
486
- // Linux).
487
- const nativeTarget = resolved.target !== 'cli-support' && !isCliSupport();
488
- if (resolved.bin || nativeTarget) {
489
- const optOut = await nativeBinaryOptOut();
490
- if (optOut && jsCliAvailable) {
491
- optedOut = true;
492
- await warnOncePerDay(
493
- '.native-opt-out-warned',
494
- `! ${optOutSetting(optOut)} will stop working in a future release, which removes the Node.js CLI from the vercel package.\n${feedbackHint(
495
- 'If you still need the Node.js CLI, tell us why with:'
496
- )}`
497
- );
498
- } else if (optOut) {
499
- await warnOncePerDay(
500
- '.native-opt-out-warned',
501
- `! ${optOutSetting(optOut)} no longer applies: this version of vercel only runs the native binary.`
502
- );
503
- }
504
- }
505
- if (!resolved.bin && nativeTarget && !optedOut) {
506
- const fetched = await fetchNativeBinary(resolved.target);
507
- resolved.bin = fetched.bin;
508
- resolved.source = fetched.source;
509
- resolved.attempts = fetched.attempts;
510
- missingReason = fetched.reason ?? missingReason;
511
- downloadFailure = fetched.downloadFailure;
512
- fallback = fetched;
513
- }
514
- if (optedOut) {
515
- launch = { runtime: 'dist', target: resolved.target, reason: 'opt_out' };
516
- } else if (resolved.bin) {
517
- // Internal worker arguments intentionally trampoline too. The packaged
518
- // native binary sets VERCEL_VC_NATIVE=1 in pkg.js and re-enters this file,
519
- // where the worker branch below handles the request.
520
- for (const signal of CONSOLE_SIGNALS) process.on(signal, waitForNative);
521
- const r = spawnSync(resolved.bin, process.argv.slice(2), {
522
- stdio: 'inherit',
523
- windowsHide: true,
524
- env: {
525
- ...process.env,
526
- VERCEL_VC_NATIVE: '1',
527
- // Upgrades belong to the vercel package, not its native runtime
528
- // dependency. Always replace an inherited value with this launcher's
529
- // own entrypoint.
530
- VERCEL_CLI_PACKAGE_ENTRYPOINT: fileURLToPath(import.meta.url),
531
- VERCEL_CLI_PACKAGE_EXECUTABLE: resolved.bin,
532
- // Reported in telemetry. pkg.js reads it and removes it, so the
533
- // binary's child processes don't inherit it.
534
- ...(resolved.source && {
535
- __VERCEL_CLI_NATIVE_SOURCE: resolved.source,
536
- }),
537
- ...(resolved.attempts && {
538
- __VERCEL_CLI_NATIVE_DOWNLOAD_ATTEMPTS: String(resolved.attempts),
539
- }),
540
- },
541
- });
542
- // Restores the default handling, so re-raising a signal below terminates
543
- // this process, and the JS CLI installs its own handlers if it runs.
544
- for (const signal of CONSOLE_SIGNALS) process.off(signal, waitForNative);
545
- // Fall back only when the binary never started, so no command code has
546
- // run. spawnSync sets no timeout or output buffer here, so any error means
547
- // that, such as ENOENT, EACCES or ENOEXEC, or EPERM, EFTYPE or UNKNOWN when
548
- // Windows blocks the binary (AppLocker, WDAC, Smart App Control,
549
- // antivirus). Never fall back on an exit status: a loader failure (e.g.
550
- // glibc mismatch) and a command's own failure are indistinguishable, and
551
- // retrying a command in Node.js could repeat remote mutations.
552
- if (!r.error) {
553
- if (r.signal) {
554
- try {
555
- process.kill(process.pid, r.signal);
556
- } catch {}
557
- }
558
- process.exit(r.status ?? 1);
559
- }
560
- launch = {
561
- runtime: 'dist',
562
- target: resolved.target,
563
- reason: r.error.code ?? 'UNKNOWN',
564
- };
565
- // `bin` marks a spawn failure, whatever its error code.
566
- fallback = { bin: resolved.bin };
567
- } else if (resolved.entry || isCliSupport()) {
568
- launch = { runtime: 'cli-support' };
569
- } else {
570
- launch = {
571
- runtime: 'dist',
572
- target: resolved.target,
573
- reason: missingReason,
574
- ...downloadFailure,
575
- };
576
- }
577
- globalThis[LAUNCH] = launch;
578
- cliSupportEntry = resolved.entry;
579
- }
580
-
581
- // Without its JS CLI, this package can't run the command: report why and how
582
- // to fix it, before loading anything else.
583
- if (launch?.runtime === 'dist' && !jsCliAvailable) {
584
- let reportLauncherFailure;
585
- try {
586
- ({ reportLauncherFailure } = await import('./launcher-errors.js'));
587
- } catch {
588
- // An incomplete package: still fail with the reason and the fix.
589
- console.error(
590
- `✗ Couldn't start Vercel CLI (${launch.reason}). Reinstall vercel without omitting optional dependencies.`
591
- );
592
- process.exit(1);
593
- }
594
- process.exit(
595
- reportLauncherFailure({
596
- reason: launch.reason,
597
- target: launch.target,
598
- platform: platformTarget(),
599
- version: readOwnPackage()?.version,
600
- detail: fallback?.detail,
601
- kind: fallback?.kind,
602
- timeout: fallback?.timeout,
603
- progress: fallback?.progress,
604
- cacheDir: fallback?.cacheDir,
605
- bin: fallback?.bin,
606
- json: wantsJsonOutput(process.argv.slice(2)),
607
- })
608
- );
609
- }
610
-
611
- // While it ships, the JS CLI fallback warns once a day that it's going away,
612
- // with the fix and the command to report it. A fresh download failure already
613
- // warned, and warnDeprecatedArch() covers Linux architectures without a
614
- // native binary.
615
- if (launch?.runtime === 'dist') {
616
- const reinstall = 'Reinstall vercel without omitting optional dependencies.';
617
- const deprecatedArch =
618
- process.platform === 'linux' && !['x64', 'arm64'].includes(process.arch);
619
- const platform = platformTarget();
620
- let message;
621
- if (launch.reason === 'target_missing' && launch.target !== 'cli-support') {
622
- const pkg = `@vercel/vc-native-${launch.target}`;
623
- message = `! ${pkg} isn't installed, so Node.js is running this command. ${reinstall}\n${feedbackHint()}`;
624
- } else if (
625
- launch.reason === 'target_missing' &&
626
- !['darwin', 'linux'].includes(process.platform)
627
- ) {
628
- // FreeBSD and every other OS without native binaries install
629
- // @vercel/cli-support, so it was skipped here, not unavailable.
630
- message = `! @vercel/cli-support isn't installed, so Node.js is running this command. ${reinstall}\n${feedbackHint()}`;
631
- } else if (launch.reason === 'target_missing' && !deprecatedArch) {
632
- message = `! Vercel CLI has no native binary for ${platform}, so Node.js is running this command.\n${feedbackHint(
633
- 'A future release of vercel removes this fallback. If you need Vercel CLI on this platform, tell us with:'
634
- )}`;
635
- } else if (launch.reason === 'download_failed') {
636
- message = `! The Vercel CLI binary for ${launch.target} couldn't be downloaded, so Node.js is running this command. Allow access to registry.npmjs.org, or ${reinstall.charAt(0).toLowerCase()}${reinstall.slice(1)}\n${feedbackHint()}`;
637
- } else if (launch.reason === 'cache_unwritable') {
638
- message = `! The Vercel CLI binary for ${launch.target} can't be downloaded because ${fallback?.cacheDir ?? 'the cache directory'} isn't writable, so Node.js is running this command. Make it writable, or set XDG_CACHE_HOME to a writable directory.\n${feedbackHint()}`;
639
- } else if (fallback?.bin) {
640
- message = `! The native Vercel CLI binary could not start (${launch.reason}), so Node.js is running this command. ${reinstall}\n${feedbackHint()}`;
641
- }
642
- if (message) await warnOncePerDay('.js-fallback-warned', message);
55
+ if (globalThis[LAUNCH] === undefined) {
56
+ const notInNodeModules = !fileURLToPath(import.meta.url)
57
+ .split(sep)
58
+ .includes('node_modules');
59
+ globalThis[LAUNCH] =
60
+ process.env.VERCEL_VC_NATIVE === '1'
61
+ ? { runtime: 'cli-support', reason: 'inherited_native_env' }
62
+ : notInNodeModules
63
+ ? { runtime: 'cli-support', reason: 'not_in_node_modules' }
64
+ : { runtime: 'cli-support' };
643
65
  }
644
66
 
645
67
  if (process.argv[2] === '--internal-build-worker') {
@@ -689,58 +111,6 @@ if (process.argv[2] === '--internal-build-worker') {
689
111
  process.exit(process.exitCode ?? 0);
690
112
  }
691
113
 
692
- // Read `--global-config`/`-Q` without loading the full CLI arg parser.
693
- function globalConfigDirFromArgv() {
694
- const argv = process.argv.slice(2);
695
- for (let i = 0; i < argv.length; i++) {
696
- const arg = argv[i];
697
- if (arg === '--global-config' || arg === '-Q') {
698
- return argv[i + 1];
699
- }
700
- if (arg.startsWith('--global-config=')) {
701
- return arg.slice('--global-config='.length);
702
- }
703
- }
704
- return undefined;
705
- }
706
-
707
- // Linux on anything but x64/arm64 has no native binary, and will lose the JS
708
- // CLI from `vercel` itself in a future release.
709
- async function warnDeprecatedArch() {
710
- if (
711
- process.platform !== 'linux' ||
712
- ['x64', 'arm64'].includes(process.arch) ||
713
- process.env.VERCEL_VC_NATIVE === '1'
714
- ) {
715
- return;
716
- }
717
- // Agents often run non-interactively and need to see it; only --json skips it.
718
- if (wantsJsonOutput(process.argv.slice(2))) return;
719
- let stamp;
720
- try {
721
- const config = await import('@vercel/cli-config/paths');
722
- const argDir = globalConfigDirFromArgv();
723
- const configDir = argDir
724
- ? resolve(process.cwd(), argDir)
725
- : config.getGlobalPathConfig();
726
- if (existsSync(configDir)) {
727
- stamp = join(configDir, '.arch-deprecation-warned');
728
- if (Date.now() - statSync(stamp).mtimeMs < 24 * 60 * 60 * 1000) return;
729
- }
730
- } catch {}
731
- const target = `${process.platform}-${process.arch}`;
732
- console.error(
733
- `! Support for ${target} will be removed from the vercel package in a future release.\n${feedbackHint('If you still need it, tell us with:')}`
734
- );
735
- if (stamp) {
736
- try {
737
- writeFileSync(stamp, '');
738
- } catch {}
739
- }
740
- }
741
-
742
- await warnDeprecatedArch();
743
-
744
114
  // Fast path for --version to avoid loading the entire CLI
745
115
  if (
746
116
  process.argv.length === 3 &&
@@ -785,26 +155,8 @@ if (
785
155
 
786
156
  markStartup('dependencies');
787
157
  try {
788
- await (cliSupportEntry
789
- ? import(pathToFileURL(cliSupportEntry).href)
790
- : import('./index.js'));
158
+ await import('./index.js');
791
159
  } catch (error) {
792
- // The mapped package is missing and this package's own JS CLI cannot load
793
- // either, so name the package to install.
794
- if (
795
- launch?.reason === 'target_missing' &&
796
- error?.code === 'ERR_MODULE_NOT_FOUND'
797
- ) {
798
- const pkg =
799
- launch.target === 'cli-support'
800
- ? '@vercel/cli-support'
801
- : `@vercel/vc-native-${launch.target}`;
802
- console.error(
803
- `Error: ${pkg} is not installed. Reinstall vercel without omitting optional dependencies (for example, npm i -g vercel@latest).`
804
- );
805
- console.error(error.message);
806
- process.exit(1);
807
- }
808
160
  // Global-config paths are resolved during module initialization, before the
809
161
  // command router and its client exist. Report local parser failures without
810
162
  // dumping a stack or loading configuration again to construct the error.