@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.
- package/README.md +8 -120
- package/dist/chunks/add-BDJYCIBT.js +8 -0
- package/dist/chunks/add-LZR4CD7O.js +8 -0
- package/dist/chunks/add-MR6YZTRQ.js +8 -0
- package/dist/chunks/{alerts-JGRRCQA4.js → alerts-VOYMO6NJ.js} +1 -1
- package/dist/chunks/build-H2U56DYB.js +7 -0
- package/dist/chunks/{chunk-UF2E5BDE.js → chunk-23PO6JK6.js} +1 -1
- package/dist/chunks/{chunk-PUKYAALC.js → chunk-24SIHFEW.js} +1 -1
- package/dist/chunks/{chunk-EBIJ26IV.js → chunk-2C6TLXE5.js} +1 -1
- package/dist/chunks/{chunk-QROI2U32.js → chunk-2CQJKBKV.js} +2 -4
- package/dist/chunks/{chunk-7MZLV3KK.js → chunk-2CZL3GJU.js} +1 -1
- package/dist/chunks/{chunk-XH2R2EIK.js → chunk-2EV53VB5.js} +1 -1
- package/dist/chunks/{chunk-5B5CLOKM.js → chunk-2FNOYPRB.js} +1 -1
- package/dist/chunks/{chunk-4E6BGQWR.js → chunk-2LOA3LC6.js} +1 -1
- package/dist/chunks/{chunk-M3Z6NSC2.js → chunk-2V6UURUN.js} +1 -1
- package/dist/chunks/{chunk-B6QVH6IG.js → chunk-32EEQITR.js} +1 -1
- package/dist/chunks/{chunk-4VP57TOJ.js → chunk-33OMDQTW.js} +1 -1
- package/dist/chunks/{chunk-CFYLTZSV.js → chunk-3AGRCSWN.js} +1 -1
- package/dist/chunks/{chunk-42J2KCDF.js → chunk-3EFPSM6M.js} +1 -1
- package/dist/chunks/{chunk-DQASZDQT.js → chunk-3SNWIYU7.js} +1 -1
- package/dist/chunks/{chunk-EVBGFSK5.js → chunk-42Y46TZ3.js} +1 -1
- package/dist/chunks/{chunk-KV3QXTRZ.js → chunk-4OO6TXBM.js} +1 -1
- package/dist/chunks/{chunk-UUDE44NV.js → chunk-54FY6GJ5.js} +1 -1
- package/dist/chunks/{chunk-RIJ45N7C.js → chunk-5HQEYPDO.js} +1 -1
- package/dist/chunks/chunk-5KL6UFII.js +7 -0
- package/dist/chunks/{chunk-ECFLIVEE.js → chunk-5L566FZB.js} +1 -1
- package/dist/chunks/{chunk-NZW3RIQM.js → chunk-5MFGTXWC.js} +1 -1
- package/dist/chunks/{chunk-4ELZOAQH.js → chunk-5TMHRECT.js} +1 -1
- package/dist/chunks/{chunk-74VQ7PQV.js → chunk-5YLKPSZI.js} +1 -1
- package/dist/chunks/chunk-66TKNVRG.js +60 -0
- package/dist/chunks/{chunk-RDWLLSPU.js → chunk-6737KAJP.js} +1 -1
- package/dist/chunks/{chunk-V5TOMLK4.js → chunk-6Q2XEYCJ.js} +1 -1
- package/dist/chunks/{chunk-7VGBGUX7.js → chunk-6S6UZV3V.js} +1 -1
- package/dist/chunks/{chunk-EZLPMOHM.js → chunk-6WTGR7UP.js} +1 -1
- package/dist/chunks/chunk-7BDQUBSO.js +7 -0
- package/dist/chunks/chunk-7M6EHM5B.js +7 -0
- package/dist/chunks/{chunk-42FOKWGX.js → chunk-7PGDJTAH.js} +1 -1
- package/dist/chunks/{chunk-BZIC36KP.js → chunk-7TVNKTN2.js} +1 -1
- package/dist/chunks/{chunk-IIGNDMLO.js → chunk-ABSFPYM4.js} +1 -1
- package/dist/chunks/{chunk-MBXLL2HF.js → chunk-AGLOVMPC.js} +3 -3
- package/dist/chunks/{chunk-B56SRT5W.js → chunk-AIZIVXNX.js} +1 -1
- package/dist/chunks/{chunk-WBSFE6IE.js → chunk-AQBK55BT.js} +1 -1
- package/dist/chunks/chunk-AW33SRYY.js +7 -0
- package/dist/chunks/{chunk-UNPK7LVC.js → chunk-B3IBBNIR.js} +1 -1
- package/dist/chunks/{chunk-VRH7LWOC.js → chunk-B4KA3ZH2.js} +1 -1
- package/dist/chunks/{chunk-2J35YKA2.js → chunk-BC74BRVP.js} +12 -12
- package/dist/chunks/{chunk-PFZCGMJ7.js → chunk-BH5OASEJ.js} +1 -1
- package/dist/chunks/chunk-BIGJEDOA.js +11 -0
- package/dist/chunks/chunk-BOJDM3O7.js +7 -0
- package/dist/chunks/{chunk-375JVQYK.js → chunk-CJZE7647.js} +1 -1
- package/dist/chunks/{chunk-YZKARZ2B.js → chunk-CKJZSRAC.js} +1 -1
- package/dist/chunks/{chunk-TUAS3L5I.js → chunk-D5JRYYTT.js} +1 -1
- package/dist/chunks/{chunk-SF4E3AQ3.js → chunk-E3WP42P2.js} +1 -1
- package/dist/chunks/{chunk-6UMVJ7RL.js → chunk-E7CEQ2PO.js} +1 -1
- package/dist/chunks/chunk-E7IFYSQT.js +12 -0
- package/dist/chunks/chunk-EDO66J3L.js +7 -0
- package/dist/chunks/{chunk-C5QEQSEX.js → chunk-EIFBF3JQ.js} +1 -1
- package/dist/chunks/chunk-EM3U6PRB.js +7 -0
- package/dist/chunks/{chunk-AMPJ6RWT.js → chunk-EZVNGJN5.js} +1 -1
- package/dist/chunks/{chunk-ZPBGAZC2.js → chunk-F6KURUPQ.js} +1 -1
- package/dist/chunks/{chunk-5DXC4TE2.js → chunk-F7L5SXJM.js} +1 -1
- package/dist/chunks/{chunk-ZTHW5VNH.js → chunk-FFS3QJCU.js} +2 -2
- package/dist/chunks/{chunk-FNH3T3CF.js → chunk-FGZXIHGN.js} +1 -1
- package/dist/chunks/chunk-FXOKM2RM.js +7 -0
- package/dist/chunks/{chunk-NUSKXXZZ.js → chunk-FZLCDLWD.js} +1 -1
- package/dist/chunks/{chunk-CD6ZWCKT.js → chunk-G63MSB6N.js} +1 -1
- package/dist/chunks/{chunk-HNH3DPIZ.js → chunk-GAILIG45.js} +1 -1
- package/dist/chunks/{chunk-FVVOHGQE.js → chunk-GHNHUSVK.js} +1 -1
- package/dist/chunks/{chunk-4DMKP6AO.js → chunk-GOI2VVI7.js} +2 -2
- package/dist/chunks/chunk-GORL5DZC.js +11 -0
- package/dist/chunks/{chunk-WMWB7QKG.js → chunk-GP3KGUCK.js} +1 -1
- package/dist/chunks/{chunk-GL66K54F.js → chunk-GPDERS2D.js} +1 -1
- package/dist/chunks/{chunk-CU3LNJZV.js → chunk-GUSOYIW6.js} +1 -1
- package/dist/chunks/{chunk-AO6AMYBF.js → chunk-GY44CQXK.js} +1 -1
- package/dist/chunks/chunk-H64GR57G.js +7 -0
- package/dist/chunks/{chunk-VKCBEW6R.js → chunk-HBWRIR42.js} +1 -1
- package/dist/chunks/{chunk-4U6ACPA4.js → chunk-HR66URIC.js} +1 -1
- package/dist/chunks/chunk-HRGJO4HK.js +7 -0
- package/dist/chunks/chunk-HU5NUOWH.js +7 -0
- package/dist/chunks/{chunk-4KM733OB.js → chunk-HVJN2SSK.js} +1 -1
- package/dist/chunks/chunk-HXLOBW75.js +10 -0
- package/dist/chunks/{chunk-4T57TXQ3.js → chunk-IBBLLUXD.js} +1 -1
- package/dist/chunks/{chunk-MO2G2ND2.js → chunk-IJBRT2AD.js} +1 -1
- package/dist/chunks/{chunk-NT2N5UR4.js → chunk-IRIFXCZW.js} +1 -1
- package/dist/chunks/{chunk-ECGY67NB.js → chunk-J7RNU6AO.js} +1 -1
- package/dist/chunks/{chunk-SDYCW5JM.js → chunk-JONZUKWX.js} +1 -1
- package/dist/chunks/{chunk-P24YBQ6H.js → chunk-JVGENO2R.js} +1 -1
- package/dist/chunks/{chunk-PKNEWN4W.js → chunk-K46QQRUN.js} +1 -1
- package/dist/chunks/{chunk-BJXLR2RE.js → chunk-KKYNEEM7.js} +1 -1
- package/dist/chunks/{chunk-3TDFSO4X.js → chunk-KPSINH7T.js} +1 -1
- package/dist/chunks/chunk-KR4DMT3I.js +7 -0
- package/dist/chunks/{chunk-RCUDI7OF.js → chunk-M32HBBPK.js} +1 -1
- package/dist/chunks/{chunk-ZQXXESKG.js → chunk-MAA5GRIM.js} +1 -1
- package/dist/chunks/chunk-MCYG7CCE.js +7 -0
- package/dist/chunks/{chunk-VAZ7JG2Z.js → chunk-MNZYFYYH.js} +1 -1
- package/dist/chunks/{chunk-HDISAMDF.js → chunk-MQJ4MINN.js} +1 -1
- package/dist/chunks/{chunk-ITQPDXXA.js → chunk-MTZYPCZ7.js} +1 -1
- package/dist/chunks/{chunk-NE6PKR2J.js → chunk-MWWMY5R6.js} +1 -1
- package/dist/chunks/{chunk-UBJVL3NJ.js → chunk-MWXL6HYB.js} +3 -3
- package/dist/chunks/{chunk-UFXIPUNI.js → chunk-MXALPSIX.js} +1 -1
- package/dist/chunks/{chunk-7JMN657A.js → chunk-NBTFAXL4.js} +1 -1
- package/dist/chunks/{chunk-HYOWFNOP.js → chunk-NIZW6D6D.js} +1 -1
- package/dist/chunks/{chunk-KBVYN635.js → chunk-NREH4VSU.js} +1 -1
- package/dist/chunks/{chunk-TPJV5UNE.js → chunk-NTYBDY24.js} +1 -1
- package/dist/chunks/{chunk-NDMQVBTV.js → chunk-NYJTWSSD.js} +1 -1
- package/dist/chunks/{chunk-7ZJ7VUIR.js → chunk-O3DAPRJ3.js} +1 -1
- package/dist/chunks/chunk-O7TFWXLZ.js +13 -0
- package/dist/chunks/{chunk-K7ARJYAG.js → chunk-OFOZ5DBA.js} +1 -1
- package/dist/chunks/{chunk-FYE7ILRR.js → chunk-OFZUWHZW.js} +1 -1
- package/dist/chunks/{chunk-RI6DJAFI.js → chunk-OHEM2CSW.js} +1 -1
- package/dist/chunks/{chunk-6ORJPXDQ.js → chunk-OHK3Y5NS.js} +1 -1
- package/dist/chunks/{chunk-IHTWZEQW.js → chunk-OKKG2FUS.js} +1 -1
- package/dist/chunks/{chunk-7NMC4E66.js → chunk-OR3ZEVBW.js} +1 -1
- package/dist/chunks/{chunk-QDHTI5WK.js → chunk-POR6KNXT.js} +1 -1
- package/dist/chunks/{chunk-JUSNW3IF.js → chunk-PSFHYOLD.js} +1 -1
- package/dist/chunks/{chunk-TZE4CS4K.js → chunk-QBHTNUM5.js} +1 -1
- package/dist/chunks/chunk-QJDWNTYH.js +7 -0
- package/dist/chunks/{chunk-YUHKH4TK.js → chunk-QKOLFLLP.js} +1 -1
- package/dist/chunks/chunk-REJLEESP.js +10 -0
- package/dist/chunks/{chunk-EIMHC5UY.js → chunk-ROKZIMRO.js} +1 -1
- package/dist/chunks/{chunk-DR6OJB6P.js → chunk-RPIBJRIT.js} +1 -1
- package/dist/chunks/chunk-SEHERY6U.js +7 -0
- package/dist/chunks/{chunk-RR5SDYNN.js → chunk-SHMHL6W7.js} +1 -1
- package/dist/chunks/{chunk-5FIY443M.js → chunk-SMETSNPH.js} +1 -1
- package/dist/chunks/{chunk-NMIZSQDN.js → chunk-SP6E7PHW.js} +1 -1
- package/dist/chunks/chunk-SQBDW5FO.js +10 -0
- package/dist/chunks/chunk-SWFG73OS.js +8 -0
- package/dist/chunks/{chunk-CHIYT3V4.js → chunk-TA7KTIDV.js} +1 -1
- package/dist/chunks/{chunk-W24TLPO5.js → chunk-TJBVFVXK.js} +1 -1
- package/dist/chunks/{chunk-JTAUWH5V.js → chunk-TJUZVODP.js} +1 -1
- package/dist/chunks/{chunk-VWJXV5ZM.js → chunk-TKVUWTBK.js} +1 -1
- package/dist/chunks/chunk-U7ZEFVSQ.js +8 -0
- package/dist/chunks/{chunk-WTFD4MDT.js → chunk-UZQJQXGJ.js} +1 -1
- package/dist/chunks/{chunk-UIMJNASP.js → chunk-V7G4VDZI.js} +1 -1
- package/dist/chunks/{chunk-WNDR5HCU.js → chunk-VCJIB3FB.js} +1 -1
- package/dist/chunks/{chunk-EGTJTCCW.js → chunk-VFBELAGX.js} +1 -1
- package/dist/chunks/{chunk-AYZ52QDF.js → chunk-VM6X5BTK.js} +1 -1
- package/dist/chunks/{chunk-HZEKH3RO.js → chunk-VVTMF2AY.js} +1 -1
- package/dist/chunks/{chunk-N65H4JMJ.js → chunk-W25UARQV.js} +1 -1
- package/dist/chunks/chunk-WLMW7K7F.js +7 -0
- package/dist/chunks/{chunk-IHCYNUI2.js → chunk-XJYDISH3.js} +1 -1
- package/dist/chunks/chunk-XSQZ35V6.js +7 -0
- package/dist/chunks/{chunk-YODQLETL.js → chunk-XVDUP67R.js} +1 -1
- package/dist/chunks/{chunk-SLCPSRDR.js → chunk-Y2FVJ7YO.js} +1 -1
- package/dist/chunks/chunk-Y2SQC4GV.js +10 -0
- package/dist/chunks/{chunk-FVTRIRML.js → chunk-Y5S2OEJH.js} +1 -1
- package/dist/chunks/{chunk-EJN55YDV.js → chunk-YANOBY2G.js} +1 -1
- package/dist/chunks/{chunk-2RXUQ72I.js → chunk-YIOMTAUF.js} +1 -1
- package/dist/chunks/{chunk-BW25OFQG.js → chunk-YLCIOXSX.js} +1 -1
- package/dist/chunks/{chunk-GZLYNPNU.js → chunk-YNCWSPPJ.js} +1 -1
- package/dist/chunks/chunk-YQQ3A3YC.js +13 -0
- package/dist/chunks/{chunk-UI2H2EIM.js → chunk-YTRKHRL3.js} +1 -1
- package/dist/chunks/{chunk-MIIHBRKV.js → chunk-Z2K2JR7F.js} +1 -1
- package/dist/chunks/{chunk-F7AVGV4Y.js → chunk-Z73UJVGD.js} +1 -1
- package/dist/chunks/{chunk-6Y2ZL5XJ.js → chunk-ZKNEIE44.js} +2 -2
- package/dist/chunks/chunk-ZXEWWSTH.js +10 -0
- package/dist/chunks/chunk-ZZLCRSES.js +11 -0
- package/dist/chunks/clear-7QUM5KH7.js +8 -0
- package/dist/chunks/{cli-embedded-Y74S252S.js → cli-embedded-ABHGJLYX.js} +1 -1
- package/dist/chunks/compile-vercel-config-RDISBTDC.js +7 -0
- package/dist/chunks/config-2YNYR6YI.js +7 -0
- package/dist/chunks/config-4AOTKKGI.js +8 -0
- package/dist/chunks/config-validator.mjs +1 -1
- package/dist/chunks/{connect-git-provider-GFAJLQLU.js → connect-git-provider-BMUUC7ND.js} +1 -1
- package/dist/chunks/contract-3VSUIBEY.js +10 -0
- package/dist/chunks/delete-EJNR4UYC.js +10 -0
- package/dist/chunks/delete-OYOBFPEG.js +9 -0
- package/dist/chunks/describe-ORIEHT3R.js +25 -0
- package/dist/chunks/detect-projects-AKK2XI76.js +7 -0
- package/dist/chunks/detect-services-3LYPKUVL.js +7 -0
- package/dist/chunks/disable-U6JU546S.js +7 -0
- package/dist/chunks/discard-6SHAFQ2H.js +14 -0
- package/dist/chunks/edit-YMWKFN3H.js +8 -0
- package/dist/chunks/edit-YTTKJFTG.js +9 -0
- package/dist/chunks/enable-A6KBPFXJ.js +7 -0
- package/dist/chunks/{esm-4ZHGYTUV.js → esm-CF5UHWPM.js} +1 -1
- package/dist/chunks/{esm-LNIAU767.js → esm-EYOXGOVF.js} +1 -1
- package/dist/chunks/{esm-IBY43SSX.js → esm-FSME24KA.js} +1 -1
- package/dist/chunks/{esm-7FVTQHRH.js → esm-IUATPKKB.js} +1 -1
- package/dist/chunks/{esm-GTSUYLKG.js → esm-L6OKDFWP.js} +1 -1
- package/dist/chunks/{esm-TEM4KPXZ.js → esm-ORQC2ZSA.js} +1 -1
- package/dist/chunks/{esm-TLAM7FSK.js → esm-PYIZNQIK.js} +1 -1
- package/dist/chunks/{exec-H3X7U4P3.js → exec-RQ257MTR.js} +1 -1
- package/dist/chunks/{export-25TQ3YBT.js → export-MMU6VVFK.js} +1 -1
- package/dist/chunks/future-ANILGGFQ.js +7 -0
- package/dist/chunks/generate-cert-for-deploy-LKKZUKWF.js +7 -0
- package/dist/chunks/image-OWWKVBTU.js +7 -0
- package/dist/chunks/import-builders-VENL23EH.js +7 -0
- package/dist/chunks/{inspect-3W3TUJ6P.js → inspect-BPIJT4OX.js} +1 -1
- package/dist/chunks/inspect-GDZJZGHW.js +13 -0
- package/dist/chunks/{inspect-TN2QY3BP.js → inspect-H7JGEVL7.js} +1 -1
- package/dist/chunks/inspect-I6LQLOBG.js +8 -0
- package/dist/chunks/{inspect-BRYVSQBD.js → inspect-IGFAKTAX.js} +1 -1
- package/dist/chunks/inspect-U6V4UQXC.js +9 -0
- package/dist/chunks/list-763XVNFH.js +8 -0
- package/dist/chunks/{list-WA6Q7DUN.js → list-OX2N4JK7.js} +1 -1
- package/dist/chunks/list-WHZXMZJ5.js +12 -0
- package/dist/chunks/{list-6W4UQBY4.js → list-XLPMNNI7.js} +1 -1
- package/dist/chunks/login-2PGWWOKB.js +7 -0
- package/dist/chunks/login-T63WJL4S.js +9 -0
- package/dist/chunks/logs-S2KJGEIG.js +7 -0
- package/dist/chunks/ls-5HXYPIFR.js +11 -0
- package/dist/chunks/ls-M4GJOBZP.js +8 -0
- package/dist/chunks/ls-N56BWH2L.js +8 -0
- package/dist/chunks/{ls-L5LLKZBV.js → ls-O5B3LY4D.js} +1 -1
- package/dist/chunks/{ls-MAJ4QZTY.js → ls-PNGTHVUK.js} +1 -1
- package/dist/chunks/{ls-UXE5RSZN.js → ls-Q7FAOSVD.js} +1 -1
- package/dist/chunks/{ls-4WP6LHLL.js → ls-R4UDBWS3.js} +1 -1
- package/dist/chunks/migrate-experimental-services-HWJXO4AJ.js +7 -0
- package/dist/chunks/mutate-FM6BLE46.js +9 -0
- package/dist/chunks/{native-self-update-DEVBYOH2.js → native-self-update-7LL6RPJW.js} +1 -1
- package/dist/chunks/notifications-ZSZN35BQ.js +7 -0
- package/dist/chunks/open-4RXUUYQP.js +7 -0
- package/dist/chunks/openapi-457MABMI.js +7 -0
- package/dist/chunks/permissions-UJRTMOT7.js +7 -0
- package/dist/chunks/{plugin-offer-JUYWL4I7.js → plugin-offer-KJCRPUU5.js} +1 -1
- package/dist/chunks/prompt-missing-credentials-B5DGQFI7.js +7 -0
- package/dist/chunks/publish-I3APOD3N.js +15 -0
- package/dist/chunks/pull-2YUNTVPQ.js +7 -0
- package/dist/chunks/purchase-domain-if-available-3YOXUXII.js +7 -0
- package/dist/chunks/push-4QQJQRGZ.js +7 -0
- package/dist/chunks/query-2JO6HH5N.js +12 -0
- package/dist/chunks/reauthenticate-COYQMMAG.js +7 -0
- package/dist/chunks/remove-PWS5EJ7F.js +9 -0
- package/dist/chunks/reorder-COZQX64R.js +10 -0
- package/dist/chunks/reply-XDYZNHW2.js +9 -0
- package/dist/chunks/resolve-6KUFCZRX.js +12 -0
- package/dist/chunks/resolve-agent-team-NOT235ZN.js +7 -0
- package/dist/chunks/{resolve-deployment-framework-preset-AXXYBFCL.js → resolve-deployment-framework-preset-4TKUU6AH.js} +1 -1
- package/dist/chunks/restore-GSSD4ZWH.js +16 -0
- package/dist/chunks/rm-AUNVZPJ5.js +8 -0
- package/dist/chunks/rm-EIMUYBJT.js +8 -0
- package/dist/chunks/rm-EJH37HYN.js +8 -0
- package/dist/chunks/rm-O5NMCBC3.js +8 -0
- package/dist/chunks/rm-PHTOXG4E.js +8 -0
- package/dist/chunks/{routes-BP54NO3Z.js → routes-NEZJKMR5.js} +1 -1
- package/dist/chunks/rule-inspect-7HNYKQ6X.js +8 -0
- package/dist/chunks/{schema-753JMRZA.js → schema-5P7HROXE.js} +1 -1
- package/dist/chunks/schema-MZM5MN5V.js +14 -0
- package/dist/chunks/select-org-3BZWQD6R.js +7 -0
- package/dist/chunks/set-2RH74ZC3.js +7 -0
- package/dist/chunks/set-Q2EJ3V44.js +9 -0
- package/dist/chunks/setup-and-link-BT5TNY4J.js +7 -0
- package/dist/chunks/{skills-QZ4AMS2K.js → skills-DUOUHPBY.js} +1 -1
- package/dist/chunks/{statuspage-KHTMA4WL.js → statuspage-K5SC7KAQ.js} +1 -1
- package/dist/chunks/{detect-projects-K7SVMH5T.js → table-W6LOHWWF.js} +1 -1
- package/dist/chunks/tags-QOJEEMKS.js +7 -0
- package/dist/chunks/{types-NPUAHKSK.js → types-7L6HBXAU.js} +1 -1
- package/dist/chunks/{update-7XH7HM5F.js → update-HS6QFTQK.js} +1 -1
- package/dist/chunks/usage-3N6IA5SX.js +13 -0
- package/dist/chunks/validate-config-YLL6RPCP.js +7 -0
- package/dist/commands/build/index.js +1 -1
- package/dist/commands/deploy/index.js +19 -37
- package/dist/commands/dev/index.js +4 -4
- package/dist/commands/env/index.js +1 -1
- package/dist/commands/link/index.js +1 -1
- package/dist/commands/list/index.js +1 -1
- package/dist/commands/project/index.js +1 -1
- package/dist/commands-account.js +3 -3
- package/dist/commands-ai.js +6 -6
- package/dist/commands-blob.js +1 -1
- package/dist/commands-core.js +20 -20
- package/dist/commands-deployments.js +5 -5
- package/dist/commands-flags.js +1 -1
- package/dist/commands-integrations.js +1 -1
- package/dist/commands-observability.js +15 -8
- package/dist/commands-routing.js +5 -4
- package/dist/help.js +1 -1
- package/dist/index.js +5 -5
- package/dist/internal-build.js +1 -1
- package/dist/package.json +45 -245
- package/dist/vc.js +47 -695
- package/dist/version.mjs +1 -1
- package/package.json +51 -196
- package/dist/chunks/add-4R6FUHQT.js +0 -8
- package/dist/chunks/add-F3H4BFJZ.js +0 -8
- package/dist/chunks/add-TCOJ4SIQ.js +0 -8
- package/dist/chunks/build-GOLTZF6S.js +0 -7
- package/dist/chunks/chunk-3KJ6HWSX.js +0 -7
- package/dist/chunks/chunk-5X635INY.js +0 -11
- package/dist/chunks/chunk-7LPNDK2O.js +0 -7
- package/dist/chunks/chunk-A3M2BHWR.js +0 -13
- package/dist/chunks/chunk-BUFEV3T4.js +0 -11
- package/dist/chunks/chunk-BVR6OIU5.js +0 -7
- package/dist/chunks/chunk-D7BB5BPA.js +0 -10
- package/dist/chunks/chunk-DBT6PGEH.js +0 -7
- package/dist/chunks/chunk-DRZVM7CB.js +0 -12
- package/dist/chunks/chunk-EICEQXVS.js +0 -7
- package/dist/chunks/chunk-F2R7L3ZB.js +0 -7
- package/dist/chunks/chunk-FHMCTV5E.js +0 -7
- package/dist/chunks/chunk-FOE3MWES.js +0 -7
- package/dist/chunks/chunk-HKU6D7DU.js +0 -8
- package/dist/chunks/chunk-IOTKHTZH.js +0 -7
- package/dist/chunks/chunk-K4JTCVNW.js +0 -13
- package/dist/chunks/chunk-LALPOYIA.js +0 -8
- package/dist/chunks/chunk-M3R7F2N4.js +0 -7
- package/dist/chunks/chunk-MUKXOI2K.js +0 -8
- package/dist/chunks/chunk-NIS66BFX.js +0 -63
- package/dist/chunks/chunk-NSPW47RU.js +0 -7
- package/dist/chunks/chunk-NTDP6RTQ.js +0 -11
- package/dist/chunks/chunk-Q2QVK3TH.js +0 -7
- package/dist/chunks/chunk-RM3ZDRYE.js +0 -7
- package/dist/chunks/chunk-UCRMJMH6.js +0 -10
- package/dist/chunks/chunk-XQDHMFQY.js +0 -7
- package/dist/chunks/chunk-XRIM4BUF.js +0 -7
- package/dist/chunks/chunk-Z64MQIOE.js +0 -10
- package/dist/chunks/chunk-ZS2WS4AM.js +0 -7
- package/dist/chunks/clear-PECHXMV5.js +0 -8
- package/dist/chunks/compile-vercel-config-EM3HYOQC.js +0 -7
- package/dist/chunks/config-DA2NZUDH.js +0 -8
- package/dist/chunks/config-X6O3DT7V.js +0 -7
- package/dist/chunks/contract-RHMWRX4W.js +0 -10
- package/dist/chunks/delete-5RN5VW5L.js +0 -9
- package/dist/chunks/delete-MT6I7R7K.js +0 -10
- package/dist/chunks/detect-services-HSA4JHJX.js +0 -7
- package/dist/chunks/disable-LXPZDQMC.js +0 -7
- package/dist/chunks/discard-PW65T65S.js +0 -14
- package/dist/chunks/edit-WFSONASO.js +0 -8
- package/dist/chunks/edit-YID3FOJ3.js +0 -9
- package/dist/chunks/enable-X2EKQCIY.js +0 -7
- package/dist/chunks/future-DQBK457G.js +0 -7
- package/dist/chunks/generate-cert-for-deploy-OMEACY5G.js +0 -7
- package/dist/chunks/image-AO2OZG4W.js +0 -7
- package/dist/chunks/import-builders-GSDV4K4A.js +0 -7
- package/dist/chunks/inspect-4244CRHI.js +0 -13
- package/dist/chunks/inspect-C43IV7X4.js +0 -9
- package/dist/chunks/inspect-RP5KXOYQ.js +0 -8
- package/dist/chunks/list-2SY6PZLC.js +0 -12
- package/dist/chunks/list-WBKZGIMQ.js +0 -8
- package/dist/chunks/login-K6XBWOFD.js +0 -9
- package/dist/chunks/login-OGMXEW5N.js +0 -7
- package/dist/chunks/logs-R3ZERQ7M.js +0 -7
- package/dist/chunks/ls-EVAQD3LI.js +0 -8
- package/dist/chunks/ls-O5DKK3TY.js +0 -8
- package/dist/chunks/ls-PTHGXQLK.js +0 -11
- package/dist/chunks/mutate-EKZWPQQJ.js +0 -9
- package/dist/chunks/notifications-F5S3RKZF.js +0 -7
- package/dist/chunks/open-KGVG54NN.js +0 -7
- package/dist/chunks/openapi-7TPDTMCU.js +0 -7
- package/dist/chunks/permissions-5K7JZOMB.js +0 -7
- package/dist/chunks/prompt-missing-credentials-DX2KJB5X.js +0 -7
- package/dist/chunks/publish-KIRTO2ZO.js +0 -15
- package/dist/chunks/pull-3CRJK7BX.js +0 -7
- package/dist/chunks/purchase-domain-if-available-55IXEF43.js +0 -7
- package/dist/chunks/push-4YG5HKSD.js +0 -7
- package/dist/chunks/query-67KQVLTR.js +0 -12
- package/dist/chunks/reauthenticate-SWSBFGDU.js +0 -7
- package/dist/chunks/remove-SYTIFVWW.js +0 -9
- package/dist/chunks/reorder-TX5MXJEB.js +0 -10
- package/dist/chunks/reply-XVK33N5T.js +0 -9
- package/dist/chunks/resolve-JZ262ZF4.js +0 -12
- package/dist/chunks/resolve-agent-team-BG5YW55B.js +0 -7
- package/dist/chunks/restore-IPFL7TKT.js +0 -16
- package/dist/chunks/rm-2BCAZGQU.js +0 -8
- package/dist/chunks/rm-3CCU3CE6.js +0 -8
- package/dist/chunks/rm-5CQV5LYG.js +0 -8
- package/dist/chunks/rm-OV4OU6H2.js +0 -8
- package/dist/chunks/rm-WFGMOZ3G.js +0 -8
- package/dist/chunks/rule-inspect-RFJIIXZH.js +0 -8
- package/dist/chunks/schema-SUNFQGUL.js +0 -14
- package/dist/chunks/select-org-MPHPWWPU.js +0 -7
- package/dist/chunks/set-BR6EEOPB.js +0 -7
- package/dist/chunks/set-I3NWZRSI.js +0 -9
- package/dist/chunks/setup-and-link-MRTKVOWD.js +0 -7
- package/dist/chunks/tags-7DIZEAVE.js +0 -7
- package/dist/chunks/usage-3BS7JCCU.js +0 -13
- package/dist/chunks/validate-config-LAD7BU3B.js +0 -7
- package/dist/launcher-errors.js +0 -11
- 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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
|
|
456
|
-
|
|
457
|
-
//
|
|
458
|
-
//
|
|
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
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
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 (
|
|
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.
|