@vercel/cli-support 0.0.0 → 65.3.1

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 (355) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +100 -3
  3. package/dist/chunks/add-5YZQTIQM.js +8 -0
  4. package/dist/chunks/add-A524QQ2H.js +8 -0
  5. package/dist/chunks/add-V4JMUHKO.js +8 -0
  6. package/dist/chunks/build-K2PVDJZ4.js +7 -0
  7. package/dist/chunks/chunk-22FDWPWY.js +7 -0
  8. package/dist/chunks/chunk-25565AGS.js +7 -0
  9. package/dist/chunks/chunk-2ACMWVTB.js +12 -0
  10. package/dist/chunks/chunk-2EYYB6YN.js +7 -0
  11. package/dist/chunks/chunk-2GHZGOWT.js +7 -0
  12. package/dist/chunks/chunk-2H3SB5RP.js +9 -0
  13. package/dist/chunks/chunk-2NABMKFV.js +29 -0
  14. package/dist/chunks/chunk-2PKEEQ5W.js +25 -0
  15. package/dist/chunks/chunk-2S6PE6GB.js +7 -0
  16. package/dist/chunks/chunk-2U7DJZSQ.js +21 -0
  17. package/dist/chunks/chunk-2WYYGGEO.js +7 -0
  18. package/dist/chunks/chunk-3ADDGPEN.js +7 -0
  19. package/dist/chunks/chunk-3AYYFYZG.js +7 -0
  20. package/dist/chunks/chunk-3G3FQYMW.js +7 -0
  21. package/dist/chunks/chunk-3JGBBS6V.js +7 -0
  22. package/dist/chunks/chunk-3KKFLKQG.js +7 -0
  23. package/dist/chunks/chunk-3LIKVGFT.js +8 -0
  24. package/dist/chunks/chunk-3XW7N4W3.js +9 -0
  25. package/dist/chunks/chunk-43GBAKL2.js +86 -0
  26. package/dist/chunks/chunk-4CACOKMS.js +7 -0
  27. package/dist/chunks/chunk-4NTBYNFR.js +17 -0
  28. package/dist/chunks/chunk-4SAVH3H7.js +7 -0
  29. package/dist/chunks/chunk-4UGHFESV.js +8 -0
  30. package/dist/chunks/chunk-4VFYJU37.js +7 -0
  31. package/dist/chunks/chunk-5IASAERQ.js +7 -0
  32. package/dist/chunks/chunk-5RMIM4S2.js +7 -0
  33. package/dist/chunks/chunk-67GZ5REA.js +7 -0
  34. package/dist/chunks/chunk-6IDNVZZR.js +7 -0
  35. package/dist/chunks/chunk-6ISAISGD.js +16 -0
  36. package/dist/chunks/chunk-6KVHNQW4.js +17 -0
  37. package/dist/chunks/chunk-6OVX3PWM.js +7 -0
  38. package/dist/chunks/chunk-6QKS6QK7.js +7 -0
  39. package/dist/chunks/chunk-6VH56CX2.js +19 -0
  40. package/dist/chunks/chunk-6Y2ZL5XJ.js +98 -0
  41. package/dist/chunks/chunk-76KGQU2G.js +7 -0
  42. package/dist/chunks/chunk-76SVVWPH.js +7 -0
  43. package/dist/chunks/chunk-773GOZIR.js +13 -0
  44. package/dist/chunks/chunk-7BGKE3JW.js +10 -0
  45. package/dist/chunks/chunk-7EJQLVWX.js +7 -0
  46. package/dist/chunks/chunk-7HV7O6DM.js +7 -0
  47. package/dist/chunks/chunk-7L2K4OKM.js +63 -0
  48. package/dist/chunks/chunk-7Y46LB43.js +14 -0
  49. package/dist/chunks/chunk-7YKFF6CE.js +7 -0
  50. package/dist/chunks/chunk-7Z3WUAO5.js +10 -0
  51. package/dist/chunks/chunk-A2RZZQEP.js +7 -0
  52. package/dist/chunks/chunk-ABZEMNDR.js +7 -0
  53. package/dist/chunks/chunk-ADLBLGT3.js +8 -0
  54. package/dist/chunks/chunk-AM46JVVN.js +7 -0
  55. package/dist/chunks/chunk-ANMDN3EG.js +9 -0
  56. package/dist/chunks/chunk-APZULWJC.js +8 -0
  57. package/dist/chunks/chunk-AWMQGOS2.js +7 -0
  58. package/dist/chunks/chunk-B4UE4LVE.js +7 -0
  59. package/dist/chunks/chunk-B4YYOSPY.js +7 -0
  60. package/dist/chunks/chunk-BBKEP7RO.js +7 -0
  61. package/dist/chunks/chunk-BL3HBRF6.js +12 -0
  62. package/dist/chunks/chunk-BLUPZPAS.js +7 -0
  63. package/dist/chunks/chunk-BPUANOGW.js +7 -0
  64. package/dist/chunks/chunk-BRQUZ5NC.js +7 -0
  65. package/dist/chunks/chunk-BS32OUOC.js +7 -0
  66. package/dist/chunks/chunk-BTI5TG6Q.js +7 -0
  67. package/dist/chunks/chunk-BUJITHGZ.js +8 -0
  68. package/dist/chunks/chunk-BVH2AEFE.js +7 -0
  69. package/dist/chunks/chunk-BZENIQ7N.js +7 -0
  70. package/dist/chunks/chunk-C6GY2G73.js +7 -0
  71. package/dist/chunks/chunk-CEMPU323.js +7 -0
  72. package/dist/chunks/chunk-COD3WAUI.js +7 -0
  73. package/dist/chunks/chunk-COM5YCHF.js +9 -0
  74. package/dist/chunks/chunk-CZSOZKHX.js +7 -0
  75. package/dist/chunks/chunk-D2BZMGHP.js +7 -0
  76. package/dist/chunks/chunk-D3AHZ5LI.js +7 -0
  77. package/dist/chunks/chunk-D6REP5QQ.js +15 -0
  78. package/dist/chunks/chunk-DFVNL5ML.js +7 -0
  79. package/dist/chunks/chunk-DGYHWXD2.js +10 -0
  80. package/dist/chunks/chunk-DUT4U5YY.js +7 -0
  81. package/dist/chunks/chunk-DWZBL4NK.js +7 -0
  82. package/dist/chunks/chunk-E2SADN6I.js +7 -0
  83. package/dist/chunks/chunk-E6CO6TUM.js +7 -0
  84. package/dist/chunks/chunk-EAUDC24V.js +9 -0
  85. package/dist/chunks/chunk-ECQIO5K3.js +7 -0
  86. package/dist/chunks/chunk-ETV3C2CV.js +7 -0
  87. package/dist/chunks/chunk-F2SWJEYV.js +8 -0
  88. package/dist/chunks/chunk-F4KY2TOK.js +7 -0
  89. package/dist/chunks/chunk-F53OKXYI.js +7 -0
  90. package/dist/chunks/chunk-F7AVGV4Y.js +7 -0
  91. package/dist/chunks/chunk-FBYA6LLM.js +7 -0
  92. package/dist/chunks/chunk-FDNYYENK.js +11 -0
  93. package/dist/chunks/chunk-FGFLTLEA.js +7 -0
  94. package/dist/chunks/chunk-FUX6LKNP.js +7 -0
  95. package/dist/chunks/chunk-G4T7VBGN.js +9 -0
  96. package/dist/chunks/chunk-GA277JFB.js +20 -0
  97. package/dist/chunks/chunk-GD7AV7BO.js +9 -0
  98. package/dist/chunks/chunk-GG5RME4X.js +7 -0
  99. package/dist/chunks/chunk-GHAY4PSD.js +7 -0
  100. package/dist/chunks/chunk-GVTXA6HG.js +7 -0
  101. package/dist/chunks/chunk-GYVJIIYL.js +7 -0
  102. package/dist/chunks/chunk-GZNDA6SV.js +8 -0
  103. package/dist/chunks/chunk-HCRD3JFL.js +7 -0
  104. package/dist/chunks/chunk-HEGJZJO7.js +7 -0
  105. package/dist/chunks/chunk-HRR57QNP.js +7 -0
  106. package/dist/chunks/chunk-IA3MXJRC.js +8 -0
  107. package/dist/chunks/chunk-ID663OJ7.js +7 -0
  108. package/dist/chunks/chunk-IEPW2YRH.js +7 -0
  109. package/dist/chunks/chunk-IGDG5CWT.js +7 -0
  110. package/dist/chunks/chunk-IKQTP764.js +7 -0
  111. package/dist/chunks/chunk-IQ7FPAI4.js +7 -0
  112. package/dist/chunks/chunk-IQKGQ2Y2.js +15 -0
  113. package/dist/chunks/chunk-ISWW3DKF.js +7 -0
  114. package/dist/chunks/chunk-IUXSJWL3.js +7 -0
  115. package/dist/chunks/chunk-IVSC7ZFJ.js +7 -0
  116. package/dist/chunks/chunk-IVSSTHB6.js +7 -0
  117. package/dist/chunks/chunk-J24BABG4.js +21 -0
  118. package/dist/chunks/chunk-JALVF3C2.js +7 -0
  119. package/dist/chunks/chunk-JELLVPCM.js +8 -0
  120. package/dist/chunks/chunk-JESNVRVR.js +7 -0
  121. package/dist/chunks/chunk-JLEJB6KM.js +7 -0
  122. package/dist/chunks/chunk-KH6565YH.js +8 -0
  123. package/dist/chunks/chunk-KNLGWGUE.js +57 -0
  124. package/dist/chunks/chunk-KRPY5FHJ.js +7 -0
  125. package/dist/chunks/chunk-KW6GSQXV.js +7 -0
  126. package/dist/chunks/chunk-L4NSF346.js +22 -0
  127. package/dist/chunks/chunk-LCHECISY.js +7 -0
  128. package/dist/chunks/chunk-LJBUJ23M.js +7 -0
  129. package/dist/chunks/chunk-LKLH6DZP.js +9 -0
  130. package/dist/chunks/chunk-LRYGNQ6C.js +8 -0
  131. package/dist/chunks/chunk-LSF7FY6X.js +7 -0
  132. package/dist/chunks/chunk-LSQREJXO.js +11 -0
  133. package/dist/chunks/chunk-LT3UK4K6.js +10 -0
  134. package/dist/chunks/chunk-LUBUI5GF.js +7 -0
  135. package/dist/chunks/chunk-MCRKBVZA.js +7 -0
  136. package/dist/chunks/chunk-MVGTMPMI.js +23 -0
  137. package/dist/chunks/chunk-MXTC4ZAQ.js +7 -0
  138. package/dist/chunks/chunk-NB2WLB3J.js +12 -0
  139. package/dist/chunks/chunk-NEFDNROD.js +7 -0
  140. package/dist/chunks/chunk-NQWGRKF4.js +7 -0
  141. package/dist/chunks/chunk-NTZ5WWYV.js +7 -0
  142. package/dist/chunks/chunk-NWGBDBZI.js +7 -0
  143. package/dist/chunks/chunk-NZ2TFADV.js +7 -0
  144. package/dist/chunks/chunk-OAM5NJCU.js +9 -0
  145. package/dist/chunks/chunk-OCQPXOTX.js +11 -0
  146. package/dist/chunks/chunk-OCR5CRTH.js +10 -0
  147. package/dist/chunks/chunk-OFDTADPQ.js +7 -0
  148. package/dist/chunks/chunk-OGPENBY2.js +7 -0
  149. package/dist/chunks/chunk-OKEBIUKZ.js +7 -0
  150. package/dist/chunks/chunk-OMCGXRSA.js +21 -0
  151. package/dist/chunks/chunk-OO572JUC.js +7 -0
  152. package/dist/chunks/chunk-OPORM35X.js +7 -0
  153. package/dist/chunks/chunk-OQCMRU3J.js +10 -0
  154. package/dist/chunks/chunk-OQPXJCMK.js +32 -0
  155. package/dist/chunks/chunk-OWOWPOIE.js +23 -0
  156. package/dist/chunks/chunk-PADL3C6Z.js +7 -0
  157. package/dist/chunks/chunk-PFD7LETF.js +7 -0
  158. package/dist/chunks/chunk-PFNYWWLI.js +7 -0
  159. package/dist/chunks/chunk-PFPJLIFF.js +33 -0
  160. package/dist/chunks/chunk-PSOVLGHP.js +7 -0
  161. package/dist/chunks/chunk-PUKYAALC.js +7 -0
  162. package/dist/chunks/chunk-PVASGBEF.js +7 -0
  163. package/dist/chunks/chunk-Q5ODLDCU.js +7 -0
  164. package/dist/chunks/chunk-Q7D7RGXM.js +7 -0
  165. package/dist/chunks/chunk-QB7F3UAP.js +7 -0
  166. package/dist/chunks/chunk-QHJLRTVY.js +7 -0
  167. package/dist/chunks/chunk-QMCHGGDX.js +10 -0
  168. package/dist/chunks/chunk-QZX7VG2V.js +9 -0
  169. package/dist/chunks/chunk-R6BEOVTU.js +7 -0
  170. package/dist/chunks/chunk-RLKS5G6C.js +12 -0
  171. package/dist/chunks/chunk-RM3ZDRYE.js +7 -0
  172. package/dist/chunks/chunk-RRDNKB2X.js +7 -0
  173. package/dist/chunks/chunk-RRREFECI.js +7 -0
  174. package/dist/chunks/chunk-RUXO73ON.js +7 -0
  175. package/dist/chunks/chunk-RW3X523R.js +8 -0
  176. package/dist/chunks/chunk-S3L2OHPO.js +7 -0
  177. package/dist/chunks/chunk-S4SJ7GIZ.js +7 -0
  178. package/dist/chunks/chunk-S5IWVPYT.js +32 -0
  179. package/dist/chunks/chunk-SACGQMVQ.js +13 -0
  180. package/dist/chunks/chunk-SCV7XEEO.js +7 -0
  181. package/dist/chunks/chunk-SF4E3AQ3.js +7 -0
  182. package/dist/chunks/chunk-SKYDLHEZ.js +7 -0
  183. package/dist/chunks/chunk-SLI2O5X7.js +63 -0
  184. package/dist/chunks/chunk-SXOSF4O6.js +39 -0
  185. package/dist/chunks/chunk-TAAWMNNL.js +7 -0
  186. package/dist/chunks/chunk-TG2RCYTH.js +7 -0
  187. package/dist/chunks/chunk-TKBORMUF.js +7 -0
  188. package/dist/chunks/chunk-TO5PJDEN.js +7 -0
  189. package/dist/chunks/chunk-TPNOSQZ3.js +15 -0
  190. package/dist/chunks/chunk-TZFDVQ72.js +27 -0
  191. package/dist/chunks/chunk-U4Z2MMOF.js +301 -0
  192. package/dist/chunks/chunk-U56NHYAH.js +7 -0
  193. package/dist/chunks/chunk-UJSW56GS.js +9 -0
  194. package/dist/chunks/chunk-UKQMYTWW.js +9 -0
  195. package/dist/chunks/chunk-ULHNMQ7C.js +7 -0
  196. package/dist/chunks/chunk-UNEGQPD3.js +7 -0
  197. package/dist/chunks/chunk-URPEIX6M.js +7 -0
  198. package/dist/chunks/chunk-UVHKXCR5.js +11 -0
  199. package/dist/chunks/chunk-V6Y6UK6B.js +43 -0
  200. package/dist/chunks/chunk-V7BEC3E4.js +10 -0
  201. package/dist/chunks/chunk-VMMMBWD3.js +7 -0
  202. package/dist/chunks/chunk-VOCZ34ON.js +7 -0
  203. package/dist/chunks/chunk-VQSLPYAF.js +7 -0
  204. package/dist/chunks/chunk-VT6RIZJH.js +7 -0
  205. package/dist/chunks/chunk-WBF36MYT.js +16 -0
  206. package/dist/chunks/chunk-WCWP4GBR.js +7 -0
  207. package/dist/chunks/chunk-WGXKX24Q.js +7 -0
  208. package/dist/chunks/chunk-X4762EE4.js +7 -0
  209. package/dist/chunks/chunk-XB4SKARZ.js +29 -0
  210. package/dist/chunks/chunk-XGTKHQTT.js +7 -0
  211. package/dist/chunks/chunk-XOETL6DB.js +96 -0
  212. package/dist/chunks/chunk-XP3FT56R.js +27 -0
  213. package/dist/chunks/chunk-XR6QY7RR.js +7 -0
  214. package/dist/chunks/chunk-XXXRTHTP.js +8 -0
  215. package/dist/chunks/chunk-XZV4BFM5.js +7 -0
  216. package/dist/chunks/chunk-Y6AGOERS.js +8 -0
  217. package/dist/chunks/chunk-YHPPP3SF.js +7 -0
  218. package/dist/chunks/chunk-YHQ7PPXP.js +7 -0
  219. package/dist/chunks/chunk-YK7XLFU2.js +24 -0
  220. package/dist/chunks/chunk-YN3C5BL5.js +7 -0
  221. package/dist/chunks/chunk-ZF27J6FQ.js +7 -0
  222. package/dist/chunks/chunk-ZFRNVIHI.js +7 -0
  223. package/dist/chunks/chunk-ZH6KHD55.js +20 -0
  224. package/dist/chunks/cjs-2SMN43VH.js +54 -0
  225. package/dist/chunks/clear-ZS4KQ7OT.js +8 -0
  226. package/dist/chunks/compile-vercel-config-3IYM2CHC.js +7 -0
  227. package/dist/chunks/config-N2SBVW4T.js +8 -0
  228. package/dist/chunks/config-ZFIC7N4D.js +7 -0
  229. package/dist/chunks/config-validator.mjs +1 -0
  230. package/dist/chunks/connect-git-provider-FS5Q2HO4.js +7 -0
  231. package/dist/chunks/constants-ICJL2EO5.js +7 -0
  232. package/dist/chunks/create-project-IKCB6MB2.js +7 -0
  233. package/dist/chunks/delete-2ZE2NVHI.js +10 -0
  234. package/dist/chunks/delete-AL57HZDQ.js +9 -0
  235. package/dist/chunks/detect-projects-OD4JEAW2.js +7 -0
  236. package/dist/chunks/detect-services-MOXTX5XG.js +7 -0
  237. package/dist/chunks/disable-MKI3BKNH.js +7 -0
  238. package/dist/chunks/discard-SI4H7ST3.js +14 -0
  239. package/dist/chunks/dist-33WTJLVQ.js +7 -0
  240. package/dist/chunks/dist-RXYNZPEA.js +7 -0
  241. package/dist/chunks/edit-DNWH6SPE.js +8 -0
  242. package/dist/chunks/edit-WYNWDFUJ.js +9 -0
  243. package/dist/chunks/enable-J6MMYPYF.js +7 -0
  244. package/dist/chunks/esm-33752ISR.js +7 -0
  245. package/dist/chunks/esm-4JKEE7PC.js +7 -0
  246. package/dist/chunks/esm-BYG5BWYH.js +9 -0
  247. package/dist/chunks/esm-DFFBNKNU.js +20 -0
  248. package/dist/chunks/esm-IF453UWS.js +7 -0
  249. package/dist/chunks/esm-LABWDJ72.js +7 -0
  250. package/dist/chunks/esm-TG37FXTU.js +9 -0
  251. package/dist/chunks/exec-OZSY46V6.js +16372 -0
  252. package/dist/chunks/export-MHSH7QCX.js +19 -0
  253. package/dist/chunks/fetch-proxy-45DGILKR.js +67 -0
  254. package/dist/chunks/future-FFOGTKMF.js +7 -0
  255. package/dist/chunks/generate-cert-for-deploy-YZKNGAEQ.js +7 -0
  256. package/dist/chunks/image-7METSS6F.js +7 -0
  257. package/dist/chunks/import-builders-GM2SERWV.js +7 -0
  258. package/dist/chunks/inspect-A7WJQQZO.js +15 -0
  259. package/dist/chunks/inspect-DI434TAM.js +19 -0
  260. package/dist/chunks/inspect-H2Q7XOWN.js +13 -0
  261. package/dist/chunks/inspect-H5JC2XKI.js +9 -0
  262. package/dist/chunks/inspect-IAWVHJXQ.js +20 -0
  263. package/dist/chunks/list-ELEUTZWJ.js +12 -0
  264. package/dist/chunks/list-INRPH25K.js +10 -0
  265. package/dist/chunks/list-WWU734RK.js +16 -0
  266. package/dist/chunks/login-R5NQRPQC.js +7 -0
  267. package/dist/chunks/login-ZF2TLCQB.js +9 -0
  268. package/dist/chunks/logs-UD7FEXZ7.js +7 -0
  269. package/dist/chunks/ls-5ZEAKKPQ.js +8 -0
  270. package/dist/chunks/ls-IXRLAJ4L.js +11 -0
  271. package/dist/chunks/ls-LIGIBVAT.js +12 -0
  272. package/dist/chunks/ls-MCQ2NS65.js +8 -0
  273. package/dist/chunks/ls-S5E2NQMI.js +12 -0
  274. package/dist/chunks/ls-V2ZSIVO3.js +12 -0
  275. package/dist/chunks/ls-VXH4QYF5.js +12 -0
  276. package/dist/chunks/mutate-OQWOKLIW.js +9 -0
  277. package/dist/chunks/notifications-KFZ333V5.js +7 -0
  278. package/dist/chunks/open-HH6K7ZRC.js +7 -0
  279. package/dist/chunks/openapi-JGYEFJJV.js +7 -0
  280. package/dist/chunks/permissions-ZSHKMXBZ.js +7 -0
  281. package/dist/chunks/pkg-EDJQLCNP.js +7 -0
  282. package/dist/chunks/plugin-offer-Z6FCPQFD.js +9 -0
  283. package/dist/chunks/prompt-missing-credentials-KOA7C4QC.js +7 -0
  284. package/dist/chunks/publish-FPNQ2US4.js +15 -0
  285. package/dist/chunks/pull-7OGOIKB3.js +7 -0
  286. package/dist/chunks/purchase-domain-if-available-F4LKHVBD.js +7 -0
  287. package/dist/chunks/push-NY3SIK2C.js +7 -0
  288. package/dist/chunks/query-JGPO7TNY.js +12 -0
  289. package/dist/chunks/reauthenticate-OZRQFR66.js +7 -0
  290. package/dist/chunks/reorder-4J2STFUS.js +10 -0
  291. package/dist/chunks/reply-EO4NTTPW.js +9 -0
  292. package/dist/chunks/repo-info-to-url-XQSULSEO.js +7 -0
  293. package/dist/chunks/resolve-RPHHRPNM.js +12 -0
  294. package/dist/chunks/resolve-agent-team-KX77HEAF.js +7 -0
  295. package/dist/chunks/resolve-deployment-framework-preset-AXXYBFCL.js +7 -0
  296. package/dist/chunks/restore-TEA6TSVK.js +16 -0
  297. package/dist/chunks/rm-BPILSPUI.js +8 -0
  298. package/dist/chunks/rm-F6XVUDBM.js +8 -0
  299. package/dist/chunks/rm-JCPXV2FN.js +8 -0
  300. package/dist/chunks/rm-LPQRGX7N.js +8 -0
  301. package/dist/chunks/rm-WHUGT6TE.js +8 -0
  302. package/dist/chunks/routes-P6LKQCWH.js +7 -0
  303. package/dist/chunks/rule-inspect-BOETGPFO.js +8 -0
  304. package/dist/chunks/schema-BEUO7G52.js +44 -0
  305. package/dist/chunks/schema-YOEAK4VX.js +14 -0
  306. package/dist/chunks/select-org-OMLGQEKK.js +7 -0
  307. package/dist/chunks/set-5XY27S7R.js +7 -0
  308. package/dist/chunks/setup-and-link-A7M3QT52.js +7 -0
  309. package/dist/chunks/skills-4J2NC2QI.js +590 -0
  310. package/dist/chunks/slugify-NMMUASYK.js +7 -0
  311. package/dist/chunks/stamp-TKONNIJ5.js +7 -0
  312. package/dist/chunks/tags-ZXZQEXOV.js +7 -0
  313. package/dist/chunks/token-W6P2KNI5.js +7 -0
  314. package/dist/chunks/token-util-JDQI37VN.js +7 -0
  315. package/dist/chunks/types-SK6J2HFE.js +14 -0
  316. package/dist/chunks/update-25CKNOY5.js +8 -0
  317. package/dist/chunks/update-route-version-KWK5S4UW.js +7 -0
  318. package/dist/chunks/utils-IQZEE4DT.js +86 -0
  319. package/dist/chunks/vlt-builder-graph-XL2XRO4V.js +7 -0
  320. package/dist/chunks/vlt-builder-importer-RBUPAB6J.js +11 -0
  321. package/dist/chunks/zod-2C2SXNIK.js +7 -0
  322. package/dist/commands/build/builder-worker.cjs +281 -0
  323. package/dist/commands/build/index.js +34 -0
  324. package/dist/commands/deploy/index.js +72 -0
  325. package/dist/commands/dev/builder-worker.cjs +110 -0
  326. package/dist/commands/dev/index.js +157 -0
  327. package/dist/commands/env/index.js +40 -0
  328. package/dist/commands/link/index.js +10 -0
  329. package/dist/commands/list/index.js +14 -0
  330. package/dist/commands/project/index.js +113 -0
  331. package/dist/commands-account.js +209 -0
  332. package/dist/commands-ai.js +200 -0
  333. package/dist/commands-blob.js +107 -0
  334. package/dist/commands-core.js +222 -0
  335. package/dist/commands-deployments.js +84 -0
  336. package/dist/commands-flags.js +377 -0
  337. package/dist/commands-integrations.js +143 -0
  338. package/dist/commands-observability.js +122 -0
  339. package/dist/commands-routing.js +273 -0
  340. package/dist/fetch-dist-tags.cjs +60 -0
  341. package/dist/get-latest-worker.cjs +222 -0
  342. package/dist/help.js +7 -0
  343. package/dist/index.js +25 -0
  344. package/dist/internal-build-worker.js +10 -0
  345. package/dist/internal-build.js +11 -0
  346. package/dist/package.json +265 -0
  347. package/dist/root-help-commands.mjs +1 -0
  348. package/dist/runtime-assets/dev-tunnel/api/tunnel.ts +443 -0
  349. package/dist/runtime-assets/dev-tunnel/lib/env.ts +25 -0
  350. package/dist/runtime-assets/dev-tunnel/lib/tunnel_pb.ts +505 -0
  351. package/dist/runtime-assets/node-preloads/next-dev-websocket.cjs +220 -0
  352. package/dist/vc.js +393 -0
  353. package/dist/version.mjs +2 -0
  354. package/package.json +224 -14
  355. package/index.js +0 -1
@@ -0,0 +1,443 @@
1
+ /**
2
+ * The function behind `vc dev --tunnel`'s deployment. Every request it gets is
3
+ * sent to the developer's dev server over a Dial to api-dev-tunnel, which
4
+ * relays the bytes to the CLI; the CLI connects them to the dev server.
5
+ *
6
+ * Uploaded as source with ../lib and built by @vercel/node, so it imports only
7
+ * what the deployment's package.json lists.
8
+ */
9
+ import {
10
+ request,
11
+ type IncomingHttpHeaders,
12
+ type IncomingMessage,
13
+ type OutgoingHttpHeaders,
14
+ type ServerResponse,
15
+ } from 'node:http';
16
+ import type { Socket } from 'node:net';
17
+ import { Duplex } from 'node:stream';
18
+ import { pipeline } from 'node:stream/promises';
19
+ import { create } from '@bufbuild/protobuf';
20
+ import { Code, ConnectError, createClient } from '@connectrpc/connect';
21
+ import { createGrpcTransport } from '@connectrpc/connect-node';
22
+ import { experimental_upgradeWebSocket } from '@vercel/functions';
23
+ import WebSocket from 'ws';
24
+ import {
25
+ PORT_ENV,
26
+ RELAY_URL_ENV,
27
+ ROUTED_HEADER,
28
+ ROUTED_PATH_PARAM,
29
+ SERVER_TOKEN_ENV,
30
+ } from '../lib/env';
31
+ import {
32
+ DialRequestSchema,
33
+ Protocol,
34
+ TunnelService,
35
+ type DialRequest,
36
+ } from '../lib/tunnel_pb';
37
+
38
+ const PORT = Number(process.env[PORT_ENV]);
39
+ const SERVER_TOKEN = process.env[SERVER_TOKEN_ENV] ?? '';
40
+ // The dev server as the developer's own browser sees it.
41
+ const LOCAL_ORIGIN = `http://localhost:${PORT}`;
42
+ // Per Dial message; the service cuts payload to the conn's window anyway.
43
+ const MAX_PAYLOAD_BYTES = 64 * 1024;
44
+ // ws's own default rather than @vercel/functions' 256 KiB, so the app's
45
+ // WebSockets take what they would locally.
46
+ const MAX_MESSAGE_BYTES = 100 * 1024 * 1024;
47
+
48
+ // Module scope: Fluid reuses an instance across invocations, and with it the
49
+ // HTTP/2 connection to api-dev-tunnel.
50
+ const relay = createClient(
51
+ TunnelService,
52
+ createGrpcTransport({ baseUrl: process.env[RELAY_URL_ENV] ?? '' })
53
+ );
54
+
55
+ /** Headers that describe a hop, not the request. */
56
+ const HOP_BY_HOP = new Set([
57
+ 'connection',
58
+ 'keep-alive',
59
+ 'transfer-encoding',
60
+ 'upgrade',
61
+ 'host',
62
+ ]);
63
+
64
+ /** Headers the dev server's end of a WebSocket handshake sets itself. */
65
+ const WS_HANDSHAKE = new Set([
66
+ 'sec-websocket-key',
67
+ 'sec-websocket-version',
68
+ 'sec-websocket-extensions',
69
+ 'sec-websocket-protocol',
70
+ ]);
71
+
72
+ /**
73
+ * A TCP connection to the dev server, over one Dial. Writes go to the dev
74
+ * server and its replies are read. end() half-closes; destroy() abandons the
75
+ * conn, which resets it on the developer's side.
76
+ */
77
+ class DialSocket extends Duplex {
78
+ private readonly call = new AbortController();
79
+ // The write waiting for the Dial to take it.
80
+ private waiting?: { chunk: Buffer; done: () => void };
81
+ private writesEnded = false;
82
+ private wakeWriter = () => {};
83
+ private wakeReader = () => {};
84
+
85
+ constructor() {
86
+ super({ allowHalfOpen: true });
87
+ void this.pump();
88
+ }
89
+
90
+ // The http and ws clients treat this as a net.Socket.
91
+ setNoDelay() {
92
+ return this;
93
+ }
94
+
95
+ setKeepAlive() {
96
+ return this;
97
+ }
98
+
99
+ setTimeout() {
100
+ return this;
101
+ }
102
+
103
+ _write(chunk: Buffer, _encoding: BufferEncoding, done: () => void) {
104
+ this.waiting = { chunk, done };
105
+ this.wakeWriter();
106
+ }
107
+
108
+ _final(done: () => void) {
109
+ this.writesEnded = true;
110
+ this.wakeWriter();
111
+ done();
112
+ }
113
+
114
+ _read() {
115
+ this.wakeReader();
116
+ }
117
+
118
+ _destroy(err: Error | null, done: (err: Error | null) => void) {
119
+ this.writesEnded = true;
120
+ this.waiting = undefined;
121
+ this.wakeWriter();
122
+ this.call.abort();
123
+ done(err);
124
+ }
125
+
126
+ // A write is done once the Dial has taken all of it, which is as fast as
127
+ // the developer's side reads.
128
+ private async *requests(): AsyncGenerator<DialRequest> {
129
+ yield create(DialRequestSchema, {
130
+ frame: { case: 'target', value: { protocol: Protocol.TCP, port: PORT } },
131
+ });
132
+ for (;;) {
133
+ while (!this.waiting && !this.writesEnded) {
134
+ await new Promise<void>(resolve => {
135
+ this.wakeWriter = resolve;
136
+ });
137
+ }
138
+ const write = this.waiting;
139
+ if (!write) return;
140
+ this.waiting = undefined;
141
+ const { buffer, byteOffset, length } = write.chunk;
142
+ for (let i = 0; i < length; i += MAX_PAYLOAD_BYTES) {
143
+ yield create(DialRequestSchema, {
144
+ frame: {
145
+ case: 'payload',
146
+ value: new Uint8Array(
147
+ buffer,
148
+ byteOffset + i,
149
+ Math.min(MAX_PAYLOAD_BYTES, length - i)
150
+ ),
151
+ },
152
+ });
153
+ }
154
+ write.done();
155
+ }
156
+ }
157
+
158
+ private async pump() {
159
+ try {
160
+ const responses = relay.dial(this.requests(), {
161
+ headers: { authorization: `Bearer ${SERVER_TOKEN}` },
162
+ signal: this.call.signal,
163
+ });
164
+ for await (const { frame } of responses) {
165
+ if (frame.case === 'end') {
166
+ this.push(null);
167
+ } else if (frame.case === 'payload' && !this.push(frame.value)) {
168
+ await new Promise<void>(resolve => {
169
+ this.wakeReader = resolve;
170
+ });
171
+ }
172
+ }
173
+ this.push(null);
174
+ } catch (err) {
175
+ this.destroy(ConnectError.from(err));
176
+ }
177
+ }
178
+ }
179
+
180
+ const dial = () => new DialSocket() as unknown as Socket;
181
+
182
+ /**
183
+ * The Host the browser used, which is what the app should see.
184
+ *
185
+ * Apps build absolute URLs from it — redirects, cookie domains, calls to their
186
+ * own API routes — so the dev server's own address would send those off the
187
+ * tunnel. ngrok and cloudflared pass it through for the same reason.
188
+ */
189
+ function publicHost(headers: IncomingHttpHeaders): string | undefined {
190
+ const forwarded = headers['x-forwarded-host'];
191
+ return typeof forwarded === 'string' ? forwarded : headers.host;
192
+ }
193
+
194
+ /**
195
+ * The Origin to show the dev server.
196
+ *
197
+ * Next.js refuses cross-origin requests to its dev resources (`/_next/*` and
198
+ * `/__nextjs*`, HMR included), and the tunnel's host is not an origin it
199
+ * allows. Those paths get the local origin instead, but only when the browser
200
+ * was on the tunnel itself, so a third-party page gains nothing. Other paths
201
+ * keep the browser's Origin: Server Actions compare it against
202
+ * x-forwarded-host, which still names the tunnel.
203
+ */
204
+ function devOrigin(req: IncomingMessage): string | undefined {
205
+ const { origin } = req.headers;
206
+ const url = req.url ?? '/';
207
+ if (!origin || (!url.includes('/_next') && !url.includes('/__nextjs'))) {
208
+ return origin;
209
+ }
210
+ let from: string;
211
+ try {
212
+ from = new URL(origin).host;
213
+ } catch {
214
+ return origin;
215
+ }
216
+ return from === req.headers.host || from === publicHost(req.headers)
217
+ ? LOCAL_ORIGIN
218
+ : origin;
219
+ }
220
+
221
+ function localHeaders(req: IncomingMessage): OutgoingHttpHeaders {
222
+ const headers: OutgoingHttpHeaders = {};
223
+ for (const [name, value] of Object.entries(req.headers)) {
224
+ if (value !== undefined && !HOP_BY_HOP.has(name)) headers[name] = value;
225
+ }
226
+ headers.host = publicHost(req.headers) ?? `localhost:${PORT}`;
227
+ const origin = devOrigin(req);
228
+ if (origin) headers.origin = origin;
229
+ return headers;
230
+ }
231
+
232
+ function fail(req: IncomingMessage, res: ServerResponse, err: unknown) {
233
+ const reason = ConnectError.from(err);
234
+ // biome-ignore lint/suspicious/noConsole: the deployment's runtime logs
235
+ console.error(`${req.method} ${req.url}: ${reason.message}`);
236
+ if (res.headersSent) {
237
+ // Mid-response, an incomplete one is the only signal left.
238
+ res.destroy();
239
+ return;
240
+ }
241
+ // Unavailable is no `vc dev` connected; anything else, the dev server's end.
242
+ res.statusCode = reason.code === Code.Unavailable ? 503 : 502;
243
+ res.setHeader('content-type', 'application/json');
244
+ res.end(JSON.stringify({ error: reason.rawMessage }));
245
+ }
246
+
247
+ /**
248
+ * Send a request to the dev server and relay its response as sent, encoding
249
+ * included.
250
+ */
251
+ async function forward(req: IncomingMessage, res: ServerResponse) {
252
+ // No agent, so one request per Dial and `Connection: close`.
253
+ const local = request({
254
+ createConnection: dial,
255
+ method: req.method,
256
+ path: req.url,
257
+ headers: localHeaders(req),
258
+ });
259
+ // The browser went away: abandon the conn rather than let it run on.
260
+ res.once('close', () => {
261
+ if (!res.writableFinished) local.destroy();
262
+ });
263
+ // `on`: the socket can fail again after the response has started.
264
+ const answered = new Promise<IncomingMessage>((resolve, reject) => {
265
+ local.once('response', resolve);
266
+ local.on('error', reject);
267
+ });
268
+ // pipe, not pipeline: a failed conn must not take the browser's request,
269
+ // and with it the chance to answer, down too.
270
+ req.on('error', () => local.destroy());
271
+ req.pipe(local);
272
+
273
+ try {
274
+ const upstream = await answered;
275
+ res.statusCode = upstream.statusCode ?? 502;
276
+ for (const [name, value] of Object.entries(upstream.headers)) {
277
+ // Repeated Set-Cookie stays an array, and so separate headers.
278
+ if (value !== undefined && !HOP_BY_HOP.has(name)) {
279
+ res.setHeader(name, value);
280
+ }
281
+ }
282
+ // Streamed, so server-sent events and other long responses arrive as the
283
+ // dev server produces them.
284
+ await pipeline(upstream, res);
285
+ } catch (err) {
286
+ fail(req, res, err);
287
+ }
288
+ }
289
+
290
+ // 1005 and 1006 report a close rather than being sent in one.
291
+ function sendable(code: number): number {
292
+ if (
293
+ (code >= 1000 && code <= 1003) ||
294
+ (code >= 1007 && code <= 1014) ||
295
+ (code >= 3000 && code <= 4999)
296
+ ) {
297
+ return code;
298
+ }
299
+ // A side lost rather than closed: the browser should come back.
300
+ return code === 1005 ? 1000 : 1012;
301
+ }
302
+
303
+ /**
304
+ * Relay a WebSocket, HMR included.
305
+ *
306
+ * Connects to the dev server before accepting the browser, so a refused
307
+ * connection is a refused handshake, which the browser retries, rather than a
308
+ * socket that opens and says nothing.
309
+ */
310
+ async function relayWebSocket(req: IncomingMessage, res: ServerResponse) {
311
+ const headers: Record<string, string> = {};
312
+ for (const [name, value] of Object.entries(localHeaders(req))) {
313
+ if (value === undefined || WS_HANDSHAKE.has(name)) continue;
314
+ headers[name] = Array.isArray(value) ? value.join(', ') : String(value);
315
+ }
316
+ const protocols = req.headers['sec-websocket-protocol']
317
+ ?.split(',')
318
+ .map(p => p.trim());
319
+ const local = new WebSocket(
320
+ `ws://localhost:${PORT}${req.url ?? '/'}`,
321
+ protocols,
322
+ { createConnection: dial, headers, maxPayload: MAX_MESSAGE_BYTES }
323
+ );
324
+
325
+ // The dev server may speak first (Next sends its manifest on connect), so
326
+ // hold what arrives before the browser is accepted.
327
+ let browser: WebSocket | undefined;
328
+ const early: [WebSocket.RawData, boolean][] = [];
329
+ local.on('message', (data, isBinary) => {
330
+ if (browser) browser.send(data, { binary: isBinary });
331
+ else early.push([data, isBinary]);
332
+ });
333
+ // Also before the browser is accepted, so it isn't left open on a dev
334
+ // server that's gone.
335
+ let localClosed: { code: number; reason: Buffer } | undefined;
336
+ local.on('close', (code, reason) => {
337
+ if (browser) browser.close(sendable(code), reason);
338
+ else localClosed = { code, reason };
339
+ });
340
+
341
+ const outcome = await new Promise<{ status?: number; error?: unknown }>(
342
+ resolve => {
343
+ local.once('open', () => resolve({}));
344
+ local.once('unexpected-response', (_req, upstream) => {
345
+ upstream.resume();
346
+ resolve({ status: upstream.statusCode ?? 502 });
347
+ });
348
+ local.once('error', error => resolve({ error }));
349
+ }
350
+ );
351
+ if (outcome.error !== undefined || outcome.status !== undefined) {
352
+ local.terminate();
353
+ if (outcome.status === undefined) {
354
+ fail(req, res, outcome.error);
355
+ return;
356
+ }
357
+ res.statusCode = outcome.status;
358
+ res.end();
359
+ return;
360
+ }
361
+
362
+ // upgradeWebSocket() answers with the first subprotocol the browser offered,
363
+ // so offer it only the one the dev server chose. Choosing none of them
364
+ // already failed the dev server's side above.
365
+ if (local.protocol) req.headers['sec-websocket-protocol'] = local.protocol;
366
+
367
+ try {
368
+ await experimental_upgradeWebSocket(
369
+ (accepted: WebSocket) => {
370
+ browser = accepted;
371
+ if (localClosed) {
372
+ accepted.close(sendable(localClosed.code), localClosed.reason);
373
+ return;
374
+ }
375
+ for (const [data, isBinary] of early.splice(0)) {
376
+ accepted.send(data, { binary: isBinary });
377
+ }
378
+ accepted.on('message', (data, isBinary) =>
379
+ local.send(data, { binary: isBinary })
380
+ );
381
+ accepted.on('close', (code, reason) =>
382
+ local.close(sendable(code), reason)
383
+ );
384
+ accepted.on('error', () => local.terminate());
385
+ local.on('error', () => accepted.terminate());
386
+ },
387
+ { maxPayload: MAX_MESSAGE_BYTES }
388
+ );
389
+ } catch (err) {
390
+ // The browser was never accepted, so nothing else ends the dev server's
391
+ // side, and its conn would count against the tunnel's cap.
392
+ local.terminate();
393
+ throw err;
394
+ }
395
+ }
396
+
397
+ /**
398
+ * The URL as the project's routes left it: the routed path, from the
399
+ * deployment's last route, and the query without it. The query's other pairs
400
+ * stay as the browser and the project's rewrites sent them. A request that
401
+ * reached the function by its own path has no routed path.
402
+ */
403
+ export function routedUrl(url: string): string {
404
+ const query = url.indexOf('?');
405
+ if (query === -1) return url;
406
+ const pairs = url.slice(query + 1).split('&');
407
+ const name = (pair: string) => pair.split('=', 1)[0];
408
+ // The deployment appends its own last, after anything the browser sent.
409
+ let ours = -1;
410
+ pairs.forEach((pair, i) => {
411
+ if (name(pair) === ROUTED_PATH_PARAM) ours = i;
412
+ });
413
+ if (ours === -1) return url;
414
+ const path = decodeURIComponent(
415
+ pairs[ours].slice(ROUTED_PATH_PARAM.length + 1).replace(/\+/g, ' ')
416
+ );
417
+ const rest = pairs.filter(pair => name(pair) !== ROUTED_PATH_PARAM);
418
+ return rest.length ? `${path}?${rest.join('&')}` : path;
419
+ }
420
+
421
+ export default async function handler(
422
+ req: IncomingMessage,
423
+ res: ServerResponse
424
+ ) {
425
+ // Every conn reaches the dev server's port whatever the path says, so a
426
+ // `//host` path stays a path there. An absolute-form target doesn't belong
427
+ // here at all.
428
+ if (!req.url?.startsWith('/')) {
429
+ res.statusCode = 400;
430
+ res.end();
431
+ return;
432
+ }
433
+ // A request that reached the function directly keeps its own path: its
434
+ // ROUTED_PATH_PARAM is the visitor's, which would skip the project's routes.
435
+ const routed = req.headers[ROUTED_HEADER] === '1';
436
+ delete req.headers[ROUTED_HEADER];
437
+ if (routed) req.url = routedUrl(req.url);
438
+ if (req.headers.upgrade?.toLowerCase() === 'websocket') {
439
+ await relayWebSocket(req, res);
440
+ } else {
441
+ await forward(req, res);
442
+ }
443
+ }
@@ -0,0 +1,25 @@
1
+ // Names shared by the CLI and the deployment's function, which is uploaded with
2
+ // it: the env `vc dev --tunnel` sets on the deployment, and its routing.
3
+
4
+ /** api-dev-tunnel's URL, from create-session. */
5
+ export const RELAY_URL_ENV = 'DEV_TUNNEL_RELAY_URL';
6
+
7
+ /** The tunnel's server token, which authenticates the deployment's Dials. */
8
+ export const SERVER_TOKEN_ENV = 'DEV_TUNNEL_SERVER_TOKEN';
9
+
10
+ /** The dev server's port on the developer's machine. */
11
+ export const PORT_ENV = 'DEV_TUNNEL_PORT';
12
+
13
+ /**
14
+ * The query parameter the deployment's last route passes the path in, as the
15
+ * project's own routes left it. The function's URL keeps the browser's path,
16
+ * with every rewrite's query merged in.
17
+ */
18
+ export const ROUTED_PATH_PARAM = '__vc_tunnel_path';
19
+
20
+ /**
21
+ * Set by the route that passes ROUTED_PATH_PARAM, and stripped from every
22
+ * request first, so it marks a request the deployment routed. One that
23
+ * reached the function directly could carry any ROUTED_PATH_PARAM.
24
+ */
25
+ export const ROUTED_HEADER = 'x-vc-tunnel-routed';