@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,113 @@
1
+ import { createRequire as __createRequire } from 'node:module';
2
+ import { fileURLToPath as __fileURLToPath } from 'node:url';
3
+ import { dirname as __dirname_ } from 'node:path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __dirname_(__filename);
7
+ import{createProject}from"../../chunks/chunk-QHJLRTVY.js";import{handleCommandTypo}from"../../chunks/chunk-IA3MXJRC.js";import{getProjectByCwdOrLink}from"../../chunks/chunk-VMMMBWD3.js";import{joinWords}from"../../chunks/chunk-4VFYJU37.js";import{tryOpenApiFallback}from"../../chunks/chunk-S5IWVPYT.js";import"../../chunks/chunk-GHAY4PSD.js";import{did_you_mean_default}from"../../chunks/chunk-DWZBL4NK.js";import{resolveOpenApiTagForProjectsCli}from"../../chunks/chunk-22FDWPWY.js";import{email}from"../../chunks/chunk-6IDNVZZR.js";import{require_async_sema}from"../../chunks/chunk-NZ2TFADV.js";import{INVALID_NEXT_MESSAGE,InvalidNextError,getPaginationOpts,parseNumericCursor}from"../../chunks/chunk-C6GY2G73.js";import{formatDate}from"../../chunks/chunk-HRR57QNP.js";import{stamp_default}from"../../chunks/chunk-A2RZZQEP.js";import"../../chunks/chunk-Q7D7RGXM.js";import{require_frameworks}from"../../chunks/chunk-6Y2ZL5XJ.js";import{resolveProjectContext}from"../../chunks/chunk-3JGBBS6V.js";import{formatProject}from"../../chunks/chunk-6OVX3PWM.js";import"../../chunks/chunk-OQCMRU3J.js";import"../../chunks/chunk-BL3HBRF6.js";import{readOnOffOption,rewriteLegacyOnOffValues}from"../../chunks/chunk-IKQTP764.js";import{canPrompt}from"../../chunks/chunk-IQ7FPAI4.js";import{getCommandFlags}from"../../chunks/chunk-XGTKHQTT.js";import{getNextPageCommand,printNextPageCommand}from"../../chunks/chunk-QMCHGGDX.js";import"../../chunks/chunk-PFD7LETF.js";import{getInvalidSubcommand}from"../../chunks/chunk-TG2RCYTH.js";import{getSubcommand}from"../../chunks/chunk-ETV3C2CV.js";import{PROJECT_MEMBER_ROLES,accessGroupsSubcommand,accessSummarySubcommand,addSubcommand8 as addSubcommand,checksAddFlags,checksRemoveFlags,checksSubcommand,dangerouslyDeleteImmutableStaticAssetSubcommand,getCommandAliases,inspectSubcommand13 as inspectSubcommand,listSubcommand19 as listSubcommand,membersAddFlags,membersRemoveFlags,membersSubcommand,observabilityDisableSubcommand,observabilitySubcommand,pauseSubcommand2 as pauseSubcommand,prioritySubcommand,projectCommand,protectionEnableSubcommand,protectionSubcommand,removeSubcommand13 as removeSubcommand,renameSubcommand,resumeSubcommand2 as resumeSubcommand,speedInsightsSubcommand,tokenSubcommand2 as tokenSubcommand,updateSubcommand10 as updateSubcommand,webAnalyticsDisableSubcommand,webAnalyticsSubcommand}from"../../chunks/chunk-TPNOSQZ3.js";import"../../chunks/chunk-LUBUI5GF.js";import"../../chunks/chunk-GVTXA6HG.js";import"../../chunks/chunk-5IASAERQ.js";import"../../chunks/chunk-WGXKX24Q.js";import"../../chunks/chunk-E2SADN6I.js";import"../../chunks/chunk-ABZEMNDR.js";import"../../chunks/chunk-3AYYFYZG.js";import"../../chunks/chunk-76KGQU2G.js";import"../../chunks/chunk-UNEGQPD3.js";import"../../chunks/chunk-YHQ7PPXP.js";import"../../chunks/chunk-NQWGRKF4.js";import"../../chunks/chunk-IGDG5CWT.js";import"../../chunks/chunk-QZX7VG2V.js";import"../../chunks/chunk-3ADDGPEN.js";import"../../chunks/chunk-B4YYOSPY.js";import"../../chunks/chunk-PFNYWWLI.js";import"../../chunks/chunk-NTZ5WWYV.js";import"../../chunks/chunk-JALVF3C2.js";import"../../chunks/chunk-LJBUJ23M.js";import"../../chunks/chunk-OKEBIUKZ.js";import{help}from"../../chunks/chunk-KH6565YH.js";import{table}from"../../chunks/chunk-773GOZIR.js";import{printError}from"../../chunks/chunk-G4T7VBGN.js";import"../../chunks/chunk-67GZ5REA.js";import"../../chunks/chunk-BS32OUOC.js";import"../../chunks/chunk-3G3FQYMW.js";import{TelemetryClient}from"../../chunks/chunk-2PKEEQ5W.js";import"../../chunks/chunk-PUKYAALC.js";import{getContextName,getScope,scopeFlagPassed}from"../../chunks/chunk-B4UE4LVE.js";import{require_ms}from"../../chunks/chunk-MXTC4ZAQ.js";import"../../chunks/chunk-NWGBDBZI.js";import{getTeams}from"../../chunks/chunk-FGFLTLEA.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,BUY_PRO_COMMAND,PRIORITY_PROJECT_ENABLE_COMMAND,buildCommandWithGlobalFlags,buildCommandWithYes,buyProFix,exitWithNonInteractiveError,getExitCodeForReason,isProOrEnterprisePlan,outputActionRequired,outputAgentError,shouldEmitNonInteractiveCommandError,targetRecovery,writeAgentError}from"../../chunks/chunk-DGYHWXD2.js";import"../../chunks/chunk-IUXSJWL3.js";import{getProjectByNameOrId,getUser,require_pluralize,sleep}from"../../chunks/chunk-KNLGWGUE.js";import{printAlignedLabel}from"../../chunks/chunk-ADLBLGT3.js";import"../../chunks/chunk-BBKEP7RO.js";import"../../chunks/chunk-4NTBYNFR.js";import{parseArguments}from"../../chunks/chunk-VOCZ34ON.js";import{getTeamByIdOrSlug,quoteArg}from"../../chunks/chunk-F53OKXYI.js";import{getFlagsSpecification,getGlobalFlagsFromArgs,stripSensitiveAuthArgs,validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedSubcommand}from"../../chunks/chunk-AWMQGOS2.js";import"../../chunks/chunk-FUX6LKNP.js";import"../../chunks/chunk-OPORM35X.js";import"../../chunks/chunk-4SAVH3H7.js";import{LinkRequiredError,ProjectNotFound,isAPIError}from"../../chunks/chunk-6VH56CX2.js";import{getCommandName,getCommandNamePlain,packageName}from"../../chunks/chunk-JESNVRVR.js";import{emoji,output_manager_default,prependEmoji,require_build_utils}from"../../chunks/chunk-XP3FT56R.js";import"../../chunks/chunk-BLUPZPAS.js";import"../../chunks/chunk-RM3ZDRYE.js";import"../../chunks/chunk-OO572JUC.js";import"../../chunks/chunk-D3AHZ5LI.js";import"../../chunks/chunk-2GHZGOWT.js";import"../../chunks/chunk-YHPPP3SF.js";import{require_source}from"../../chunks/chunk-NB2WLB3J.js";import"../../chunks/chunk-ISWW3DKF.js";import"../../chunks/chunk-BRQUZ5NC.js";import{__toESM}from"../../chunks/chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1);var ProjectAddTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}};async function add(client,argv){let telemetryClient=new ProjectAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args}=parsedArgs;if(args.length!==1){if(output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk.default.cyan(`${getCommandName("project create <name>")}`)}`),args.length>1){let example=import_chalk.default.cyan(`${getCommandName(`project create "${args.join(" ")}"`)}`);output_manager_default.log(`If your project name has spaces, make sure to wrap it in quotes. Example:
8
+ ${example} `)}return 2}let start=Date.now(),[name]=args;telemetryClient.trackCliArgumentName(name);try{await createProject(client,{name})}catch(err){if(isAPIError(err)&&err.code==="too_many_projects")return output_manager_default.prettyError(err),1;if(!(isAPIError(err)&&err.status===409))throw err}let elapsed=(0,import_ms.default)(Date.now()-start),contextName=await getContextName(client);return output_manager_default.log(`${import_chalk.default.cyan("Success!")} Project ${import_chalk.default.bold(name.toLowerCase())} added (${import_chalk.default.bold(contextName)}) ${import_chalk.default.gray(`[${elapsed}]`)}`),0}var import_chalk2=__toESM(require_source(),1);async function accessSummary(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(accessSummarySubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1)return output_manager_default.error("Invalid number of arguments. Usage: `vercel project access-summary [name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,summary;try{let project=await getProjectByCwdOrLink({client,commandName:"project access-summary",projectNameOrId:parsedArgs.args[0],forReadOnlyCommand:!0});summary=await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/members/summary`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"access-summary"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(summary,null,2)}
9
+ `),0;let entries=Object.entries(summary).sort(([a],[b])=>a.localeCompare(b));if(entries.length===0)return output_manager_default.log("No summary data returned."),0;let rows=[["Role","Count"].map(h=>(0,import_chalk2.gray)(h)),...entries.map(([role,count])=>[role,String(count)])];return client.stderr.write(`${table(rows,{hsep:3})}
10
+ `),0}var import_chalk3=__toESM(require_source(),1);import{readFileSync}from"fs";import{resolve}from"path";var REQUIRES=["build-ready","deployment-url","none"],BLOCKING_STAGES=["build-start","deployment-start","deployment-alias","deployment-promotion","none"];function emitValidationError(client,message,exitCode,extra){outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,...extra},exitCode)}async function checksAdd(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification([...checksAddFlags]);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1)return emitValidationError(client,"Invalid number of arguments. Usage: `vercel project checks add [name]`",2),output_manager_default.error("Invalid number of arguments. Usage: `vercel project checks add [name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&emitValidationError(client,formatResult.error,1),output_manager_default.error(formatResult.error),1;let asJson=formatResult.jsonOutput||!!client.nonInteractive,filePath=parsedArgs.flags["--file"],checkName=parsedArgs.flags["--check-name"],requires=parsedArgs.flags["--requires"],blocksFlag=parsedArgs.flags["--blocks"],timeout=parsedArgs.flags["--timeout"],targetsRaw=parsedArgs.flags["--targets"],sourceRaw=parsedArgs.flags["--source"],body;if(typeof filePath=="string"&&filePath.length>0)try{let raw=readFileSync(resolve(client.cwd,filePath),"utf8"),parsed=JSON.parse(raw);if(!parsed||typeof parsed!="object"||Array.isArray(parsed))return emitValidationError(client,"`--file` must contain a JSON object.",1),output_manager_default.error("`--file` must contain a JSON object."),1;body=parsed}catch(err){let msg=err instanceof Error?err.message:String(err);return emitValidationError(client,`Failed to read \`--file\`: ${msg}`,1),output_manager_default.error(`Failed to read \`--file\`: ${msg}`),1}else{if(typeof checkName!="string"||!checkName.trim())return emitValidationError(client,"Provide `--check-name` and `--requires`, or a `--file` with the full JSON body.",1,{hint:'See `vercel project checks --help` and the REST API "Create a check" documentation.',next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks add <name> --file <path>"),when:"Create from a JSON file (replace paths)"}]}),output_manager_default.error("Provide `--check-name` and `--requires`, or a `--file` with the full JSON body. See `vercel project checks add --help`."),1;if(typeof requires!="string"||!requires.trim())return emitValidationError(client,"`--requires` is required when using `--check-name` (build-ready, deployment-url, or none).",1),output_manager_default.error("`--requires` is required when using `--check-name` (build-ready, deployment-url, or none)."),2;if(!REQUIRES.includes(requires))return emitValidationError(client,`\`--requires\` must be one of: ${REQUIRES.join(", ")}`,1),output_manager_default.error(`\`--requires\` must be one of: ${REQUIRES.join(", ")}`),2;if(body={name:checkName.trim(),requires:requires.trim()},typeof blocksFlag=="string"&&blocksFlag.length>0){if(!BLOCKING_STAGES.includes(blocksFlag))return emitValidationError(client,`\`--blocks\` must be one of: ${BLOCKING_STAGES.join(", ")}`,1),output_manager_default.error(`\`--blocks\` must be one of: ${BLOCKING_STAGES.join(", ")}`),2;body.blocks=blocksFlag}if(typeof timeout=="number"&&(body.timeout=timeout),typeof targetsRaw=="string"&&targetsRaw.trim()&&(body.targets=targetsRaw.split(",").map(s=>s.trim()).filter(Boolean)),typeof sourceRaw=="string"&&sourceRaw.trim())try{body.source=JSON.parse(sourceRaw)}catch{return emitValidationError(client,"`--source` must be valid JSON.",1),output_manager_default.error("`--source` must be valid JSON."),1}}try{let project=await getProjectByCwdOrLink({client,commandName:"project checks add",projectNameOrId:parsedArgs.args[0],forReadOnlyCommand:!0}),result=await client.fetch(`/v2/projects/${encodeURIComponent(project.id)}/checks`,{method:"POST",body});if(asJson){let id2=String(result.id??"");return client.nonInteractive?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,check:result,projectId:project.id,projectName:project.name,message:id2?`Created deployment check ${id2} on ${project.name}.`:`Created deployment check on ${project.name}.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks"),when:"List checks for this project"},{command:buildCommandWithGlobalFlags(client.argv,"project checks remove <check_id>"),when:"Remove a check by id if needed"}]},null,2)}
11
+ `):client.stdout.write(`${JSON.stringify(result,null,2)}
12
+ `),0}let id=String(result.id??"");return output_manager_default.log(id?`Created deployment check ${id} on ${project.name}.`:`Created deployment check on ${project.name}.`),0}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"checks"}),printError(err),1}}async function checksRemove(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification([...checksRemoveFlags]);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length<1||parsedArgs.args.length>2)return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Check id is required. Example: `vercel project checks remove chk_abc123`",hint:"Run `project checks` to list check ids, then pass the id to `project checks remove` (optional project name as second argument).",next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks"),when:"List deployment checks and their ids"},{command:buildCommandWithGlobalFlags(client.argv,"project checks remove <check_id>"),when:"Remove a check after replacing <check_id> with an id from the list"}]},2),output_manager_default.error("Invalid number of arguments. Usage: `vercel project checks remove <checkId> [project-name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error},2),output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||!!client.nonInteractive,checkId=parsedArgs.args[0]?.trim();if(!checkId)return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:"Check id is required (from `vercel project checks`). Example: `vercel project checks remove chk_abc123`",next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks"),when:"List deployment checks and their ids"},{command:buildCommandWithGlobalFlags(client.argv,"project checks remove <check_id>"),when:"Remove a check after replacing <check_id>"}]},2),output_manager_default.error("A check id is required (from `vercel project checks`)."),2;let projectNameOrId=parsedArgs.args[1];try{let project=await getProjectByCwdOrLink({client,commandName:"project checks remove",projectNameOrId,forReadOnlyCommand:!0}),result=await client.fetch(`/v2/projects/${encodeURIComponent(project.id)}/checks/${encodeURIComponent(checkId)}`,{method:"DELETE"});return asJson?(client.nonInteractive?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,checkId,projectId:project.id,projectName:project.name,result,message:`Removed check ${checkId} from ${project.name}.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks"),when:"List remaining checks"}]},null,2)}
13
+ `):client.stdout.write(`${JSON.stringify(result,null,2)}
14
+ `),0):(output_manager_default.log(`Removed check ${checkId} from ${project.name}.`),0)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"checks"}),printError(err),1}}var BLOCKING_STAGES2=["build-start","deployment-start","deployment-alias","deployment-promotion","none"];async function checks(client,argv){if(argv[0]==="add")return checksAdd(client,argv.slice(1));if(argv[0]==="remove"||argv[0]==="rm")return checksRemove(client,argv.slice(1));let parsedArgs,flagsSpecification=getFlagsSpecification(checksSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(typeof parsedArgs.flags["--file"]=="string"||typeof parsedArgs.flags["--check-name"]=="string"||typeof parsedArgs.flags["--requires"]=="string")return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:"To create a check, run `vercel project checks add [name]` with `--file` or `--check-name` / `--requires`.",hint:"Use `project checks add`, not `project checks`, when passing create flags.",next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks add <name>"),when:"Create a check (replace <name> or omit if linked)"}]},2),output_manager_default.error("To create a check, run `vercel project checks add [name]` with `--file` or `--check-name` / `--requires`. See `vercel project checks --help`."),2;if(parsedArgs.args.length>1)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:"Invalid number of arguments. Usage: `vercel project checks [name]`"},2),output_manager_default.error("Invalid number of arguments. Usage: `vercel project checks [name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error},2),output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||!!client.nonInteractive,blocksFlag=parsedArgs.flags["--blocks"];if(typeof blocksFlag=="string"&&!BLOCKING_STAGES2.includes(blocksFlag))return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:`\`--blocks\` must be one of: ${BLOCKING_STAGES2.join(", ")}`},2),output_manager_default.error(`\`--blocks\` must be one of: ${BLOCKING_STAGES2.join(", ")}`),2;let result;try{let project=await getProjectByCwdOrLink({client,commandName:"project checks",projectNameOrId:parsedArgs.args[0],forReadOnlyCommand:!0}),query=new URLSearchParams;typeof blocksFlag=="string"&&query.set("blocks",blocksFlag);let qs=query.toString();result=await client.fetch(`/v2/projects/${encodeURIComponent(project.id)}/checks${qs?`?${qs}`:""}`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"checks"}),printError(err),1}let list2=result.checks??[];if(asJson){if(client.nonInteractive){let payload={status:AGENT_STATUS.OK,checks:list2,pagination:result.pagination,message:list2.length===0?"No checks configured for this project.":`${list2.length} deployment check(s) configured.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project checks add <name>"),when:"Add a deployment check (replace <name> or omit if linked)"},{command:buildCommandWithGlobalFlags(client.argv,"project checks remove <check_id>"),when:"Remove a check after replacing <check_id> with an id from checks"}]};client.stdout.write(`${JSON.stringify(payload,null,2)}
15
+ `)}else client.stdout.write(`${JSON.stringify(result,null,2)}
16
+ `);return 0}if(list2.length===0)return output_manager_default.log("No checks configured for this project."),0;let rows=[["ID","Name","Blocking","Target"].map(h=>(0,import_chalk3.gray)(h)),...list2.map(c=>[String(c.id??c.checkId??""),String(c.name??""),String(c.blocks??""),String(Array.isArray(c.environments)?c.environments.join(","):c.target??"")])];return client.stderr.write(`${table(rows,{hsep:3})}
17
+ `),0}var import_chalk4=__toESM(require_source(),1),import_frameworks=__toESM(require_frameworks(),1);var ProjectInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentName(value){value&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};function parseSandboxRegionList(input){let regions=input.split(",").map(region=>region.trim().toLowerCase()).filter(region=>region.length>0);return Array.from(new Set(regions))}function formatSandboxRegionList(regions){return regions.length>0?regions.join(", "):"None"}function validateSandboxConfig(config){if(config.failoverRegions?.length){if(!config.region)return"Sandbox region is required when failover regions are specified. Set one with --sandbox-region.";if(config.failoverRegions.includes(config.region))return"Sandbox failover regions must not include the primary region."}}function toProjectInspectJson(project,owner){return{id:project.id,name:project.name,owner:{name:owner.name,slug:owner.slug},createdAt:project.createdAt,rootDirectory:project.rootDirectory??null,nodeVersion:project.nodeVersion??null,framework:project.framework??null,buildCommand:project.buildCommand??null,outputDirectory:project.outputDirectory??null,installCommand:project.installCommand??null,sandbox:project.sandbox?{region:project.sandbox.region??null,failoverRegions:project.sandbox.failoverRegions??[]}:null}}var getProjectForInspect=async(client,projectNameOrId,autoConfirm)=>{try{return await getProjectByCwdOrLink({autoConfirm,client,commandName:"project inspect",projectNameOrId,forReadOnlyCommand:!0})}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"inspect"}),printError(error,client),null}};async function inspect(client,argv){let telemetry=new ProjectInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error,client),2}let{args,flags}=parsedArgs,name=args[0];if(telemetry.trackCliArgumentName(name),telemetry.trackCliFlagYes(flags["--yes"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),args.length!==0&&args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk4.default.cyan(`${getCommandName("project inspect <name>")}`)}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let inspectStamp=stamp_default(),project=await getProjectForInspect(client,name,flags["--yes"]);if(!project)return 1;let org=await getTeamByIdOrSlug(client,project.accountId);if(formatResult.jsonOutput)return client.stdout.write(`${JSON.stringify(toProjectInspectJson(project,org),null,2)}
18
+ `),0;let projectSlugLink=formatProject(org.slug,project.name);output_manager_default.log(`Found Project ${projectSlugLink} ${import_chalk4.default.gray(inspectStamp())}`),output_manager_default.print(`
19
+ `),output_manager_default.print(import_chalk4.default.bold(` General
20
+
21
+ `)),output_manager_default.print(` ${import_chalk4.default.cyan("ID")} ${project.id}
22
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Name")} ${project.name}
23
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Owner")} ${org.name}
24
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Created At")} ${formatDate(project.createdAt)}
25
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Root Directory")} ${project.rootDirectory??"."}
26
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Node.js Version")} ${project.nodeVersion}
27
+ `);let framework=import_frameworks.frameworkList.find(f=>f.slug===project.framework);output_manager_default.print(`
28
+ `),output_manager_default.print(import_chalk4.default.bold(` Framework Settings
29
+
30
+ `)),output_manager_default.print(` ${import_chalk4.default.cyan("Framework Preset")} ${framework?.name}
31
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Build Command")} ${project.buildCommand??import_chalk4.default.dim(framework?.settings?.buildCommand.placeholder??"None")}
32
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Output Directory")} ${project.outputDirectory??import_chalk4.default.dim(framework?.settings?.outputDirectory.placeholder??"None")}
33
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Install Command")} ${project.installCommand??import_chalk4.default.dim(framework?.settings?.installCommand.placeholder??"None")}
34
+ `);let failoverRegions=project.sandbox?.failoverRegions??[];return(project.sandbox?.region||failoverRegions.length>0)&&(output_manager_default.print(`
35
+ `),output_manager_default.print(import_chalk4.default.bold(` Sandbox
36
+
37
+ `)),output_manager_default.print(` ${import_chalk4.default.cyan("Region")} ${project.sandbox?.region??import_chalk4.default.dim("Auto")}
38
+ `),output_manager_default.print(` ${import_chalk4.default.cyan("Failover Regions")} ${failoverRegions.length>0?formatSandboxRegionList(failoverRegions):import_chalk4.default.dim("None")}
39
+ `)),output_manager_default.print(`
40
+ `),0}var import_ms2=__toESM(require_ms(),1),import_chalk5=__toESM(require_source(),1);var ProjectListTelemetryClient=class extends TelemetryClient{trackCliFlagUpdateRequired(updateRequired){updateRequired&&this.trackCliFlag("update-required")}trackCliFlagPaused(paused){paused&&this.trackCliFlag("paused")}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionLimit(limit){limit&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliOptionFilter(filter){filter&&this.trackCliOption({option:"filter",value:this.redactedValue})}};var PAUSED_PROJECTS_INCOMPLETE="Some paused projects may be missing. More than 100 projects were updated at the same moment, and the API can't list past the first 100 of them.";async function listPausedProjects(client,opts={}){let limit=opts.limit??1/0,query=new URLSearchParams({limit:"100"});opts.search&&query.set("search",opts.search),opts.deprecated&&query.set("deprecated","true");let projects=[],seen=new Set,until=opts.until,incomplete=!1;for(;;){until&&query.set("until",String(until));let page=await client.fetch(`/v9/projects?${query}`),unseen=0;for(let project of page.projects)if(!seen.has(project.id)&&(seen.add(project.id),unseen++,!!project.paused)){if(projects.length>=limit){let last=projects[projects.length-1];if(project.updatedAt!==last.updatedAt)return{projects,next:last.updatedAt,incomplete};let first=projects.findIndex(p=>p.updatedAt===last.updatedAt);if(first>0)return{projects:projects.slice(0,first),next:last.updatedAt+1,incomplete}}projects.push(project)}let next=page.pagination?.next;if(!next)return{projects,next:null,incomplete};unseen>0?until=next+1:(until=next,incomplete=!0),await sleep(100)}}var TABLE_HEADERS=["Project Name","Latest Production URL","Updated","Node Version","Status"],PAGINATION_FLAGS_TO_EXCLUDE=["_","--next","-N","-d","-y","--json","--format"],DEFAULT_PROJECTS_LIMIT=20;async function list(client,argv){let telemetryClient=new ProjectListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs;if(args.length!==0)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk5.default.cyan(`${getCommandName("project ls")}`)}`),2;let start=Date.now(),contextName=await getContextName(client,{resolveLocalScope:!0});output_manager_default.spinner(`Fetching projects in ${import_chalk5.default.bold(contextName)}`);let flags=processFlags(opts,telemetryClient);if("error"in flags)return output_manager_default.stopSpinner(),output_manager_default.error(flags.error),flags.exitCode;let{projects:projectList,pagination,incomplete}=await fetchProjects(client,flags);output_manager_default.stopSpinner();let elapsed=(0,import_ms2.default)(Date.now()-start);return flags.json?outputJson(client,projectList,{pagination,contextName,elapsed,deprecated:flags.deprecated,incomplete}):(outputTable(projectList,{contextName,elapsed,deprecated:flags.deprecated,paused:flags.paused,opts,pagination}),incomplete&&output_manager_default.warning(PAUSED_PROJECTS_INCOMPLETE),flags.paused&&projectList.length>0&&!flags.filter&&!flags.deprecated&&output_manager_default.print(`
41
+ Resume them all:
42
+ ${buildCommandWithGlobalFlags(client.argv,"project resume --all")}
43
+ `)),0}function processFlags(opts,telemetryClient){let deprecated=opts["--update-required"]||!1,paused=opts["--paused"]||!1,filter=opts["--filter"],limit=opts["--limit"],formatResult=validateJsonOutput(opts);if(!formatResult.valid)return{error:formatResult.error,exitCode:1};let json=formatResult.jsonOutput;telemetryClient.trackCliFlagUpdateRequired(deprecated),telemetryClient.trackCliFlagPaused(paused),telemetryClient.trackCliOptionNext(opts["--next"]),telemetryClient.trackCliOptionLimit(limit),telemetryClient.trackCliOptionFormat(opts["--format"]),telemetryClient.trackCliFlagJson(opts["--json"]),telemetryClient.trackCliOptionFilter(filter);let next;try{[next]=getPaginationOpts(opts)}catch(error){return{error:error instanceof Error?error.message:String(error),exitCode:error instanceof InvalidNextError?2:1}}return{deprecated,paused,next,json,filter,limit}}async function fetchProjects(client,flags){if(flags.paused){let{projects,next,incomplete}=await listPausedProjects(client,{limit:flags.limit??DEFAULT_PROJECTS_LIMIT,until:flags.next,search:flags.filter,deprecated:flags.deprecated});return{projects,pagination:{count:projects.length,next},incomplete}}return client.fetch(buildProjectsUrl(flags),{method:"GET"})}function buildProjectsUrl(flags){let query=new URLSearchParams({limit:String(flags.limit??DEFAULT_PROJECTS_LIMIT),latestDeployments:"0"});return flags.deprecated&&query.set("deprecated",String(flags.deprecated)),flags.next&&query.set("until",String(flags.next)),flags.filter&&query.set("search",flags.filter),`/v9/projects?${query}`}function createProjectJson(project,deprecated){return{name:project.name,id:project.id,latestProductionUrl:getLatestProdUrl(project),updatedAt:project.updatedAt,nodeVersion:project.nodeVersion??null,deprecated,paused:project.paused??!1}}function outputJson(client,projectList,metadata){let jsonOutput={projects:projectList.map(project=>createProjectJson(project,metadata.deprecated)),pagination:metadata.pagination,contextName:metadata.contextName,elapsed:metadata.elapsed,...metadata.incomplete&&{warnings:[{reason:AGENT_REASON.INCOMPLETE_RESULTS,message:PAUSED_PROJECTS_INCOMPLETE}]}};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
44
+ `)}function outputTable(projectList,options){let{contextName,elapsed,deprecated,paused,opts,pagination}=options,qualifiers=[paused&&"paused",deprecated&&"using a deprecated Node.js version"].filter(Boolean);output_manager_default.log(`${projectList.length>0?"Projects":"No projects"} found under ${import_chalk5.default.bold(contextName)} ${qualifiers.length>0?`that are ${qualifiers.join(" and ")}`:"\b"} ${import_chalk5.default.gray(`[${elapsed}]`)}`),projectList.length>0&&(printProjectsTable(projectList),printPaginationInstructions(opts,pagination))}function printProjectsTable(projectList){let tablePrint=table([TABLE_HEADERS.map(header=>import_chalk5.default.bold(import_chalk5.default.cyan(header))),...projectList.flatMap(project=>[[import_chalk5.default.bold(project.name),getLatestProdUrl(project),import_chalk5.default.gray((0,import_ms2.default)(Date.now()-project.updatedAt)),project.nodeVersion??"",project.paused?"Paused":""]])],{hsep:3}).replace(/^/gm," ");output_manager_default.print(`
45
+ ${tablePrint}
46
+
47
+ `)}function printPaginationInstructions(opts,pagination){if(pagination?.next){let flags=getCommandFlags(opts,PAGINATION_FLAGS_TO_EXCLUDE);printNextPageCommand(getCommandNamePlain(`project ls${flags} --next ${pagination.next}`))}}function getLatestProdUrl(project){let alias=project.targets?.production?.alias?.[0];return alias?`https://${alias}`:"--"}var import_chalk7=__toESM(require_source(),1);var import_chalk6=__toESM(require_source(),1);var ProjectTelemetryClient=class extends TelemetryClient{trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandAccessSummary(actual){this.trackCliSubcommand({subcommand:"access-summary",value:actual})}trackCliSubcommandChecks(actual){this.trackCliSubcommand({subcommand:"checks",value:actual})}trackCliSubcommandDelete(actual){this.trackCliSubcommand({subcommand:"delete",value:actual})}trackCliSubcommandRename(actual){this.trackCliSubcommand({subcommand:"rename",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}trackCliSubcommandToken(actual){this.trackCliSubcommand({subcommand:"token",value:actual})}trackCliSubcommandMembers(actual){this.trackCliSubcommand({subcommand:"members",value:actual})}trackCliArgumentProject(project){project&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliArgumentMember(member){member&&this.trackCliArgument({arg:"member",value:this.redactedValue})}trackCliOptionRole(role){role&&this.trackCliOption({option:"role",value:PROJECT_MEMBER_ROLES.includes(role)?role:this.redactedValue})}trackCliSubcommandAccessGroups(actual){this.trackCliSubcommand({subcommand:"access-groups",value:actual})}trackCliSubcommandProtection(actual){this.trackCliSubcommand({subcommand:"protection",value:actual})}trackCliSubcommandWebAnalytics(actual){this.trackCliSubcommand({subcommand:"web-analytics",value:actual})}trackCliSubcommandSpeedInsights(actual){this.trackCliSubcommand({subcommand:"speed-insights",value:actual})}trackCliSubcommandPause(actual){this.trackCliSubcommand({subcommand:"pause",value:actual})}trackCliSubcommandDangerouslyDeleteImmutableStaticAsset(actual){this.trackCliSubcommand({subcommand:"dangerously-delete-immutable-static-asset",value:actual})}trackCliSubcommandObservability(actual){this.trackCliSubcommand({subcommand:"observability",value:actual})}trackCliSubcommandPriority(actual){this.trackCliSubcommand({subcommand:"priority",value:actual})}trackCliSubcommandResume(actual){this.trackCliSubcommand({subcommand:"resume",value:actual})}};function findMember(members2,identifier){let needle=identifier.toLowerCase();return members2.find(m=>m.uid===identifier||m.username?.toLowerCase()===needle||m.email?.toLowerCase()===needle)}async function findProjectMember(client,projectId,identifier){let until;for(let page=0;page<100;page++){let query=new URLSearchParams({limit:"100"});until&&query.set("until",String(until));let{members:members2,pagination}=await client.fetch(`/v1/projects/${encodeURIComponent(projectId)}/members?${query.toString()}`),match=findMember(members2??[],identifier);if(match)return match;let next=pagination?.next;if(!members2||members2.length===0||!next)return;until=next}}async function membersRemove(client,argv){let telemetry=new ProjectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification([...membersRemoveFlags]);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),2}let[projectNameOrId,member]=parsedArgs.args;telemetry.trackCliArgumentProject(projectNameOrId),telemetry.trackCliArgumentMember(member);let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error}),output_manager_default.error(formatResult.error),2;let{jsonOutput}=formatResult,asJson=jsonOutput||!canPrompt(client);function fail(reason,message,humanMessage=message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),getExitCodeForReason(reason)):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
48
+ `),getExitCodeForReason(reason)):(output_manager_default.error(humanMessage),getExitCodeForReason(reason))}if(parsedArgs.args.length!==2){let cmd=buildCommandWithGlobalFlags(client.argv,"project members remove <project> <member>");return fail(AGENT_REASON.INVALID_ARGUMENTS,"Invalid number of arguments. Usage: `vercel project members remove <project> <member>`","Invalid number of arguments. Usage: `vercel project members remove <project> <member>`",{next:[{command:cmd,when:"Remove a member from a project (replace <project> and <member>)"}]})}let project,target;try{project=await getProjectByCwdOrLink({client,commandName:"project members remove",projectNameOrId,forReadOnlyCommand:!0}),target=await findProjectMember(client,project.id,member)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"members"}),jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"unexpected_error",message:err instanceof Error?err.message:String(err)},null,2)}
49
+ `),1):(printError(err),1)}if(!target){let message=`${member} is not a member of ${project.name}.`;return fail(AGENT_REASON.NOT_FOUND,message,message,{next:[{command:buildCommandWithGlobalFlags(client.argv,`project members ${project.name}`),when:"List current members to find the right identifier"}]})}let memberLabel=target.username||target.email||target.uid;if(!canPrompt(client)){let actionRequired={status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,userActionRequired:!0,message:`Removing ${memberLabel} from ${project.name} requires interactive confirmation and cannot be done non-interactively.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project members remove <project> <member>"),when:"user runs this command in an interactive terminal"}]};return outputActionRequired(client,actionRequired,1),client.stdout.write(`${JSON.stringify(actionRequired,null,2)}
50
+ `),1}if(!await client.input.confirm(`Remove ${import_chalk6.default.bold(memberLabel)} from ${import_chalk6.default.bold(project.name)}?`,!1))return output_manager_default.log("Canceled."),0;try{let result=await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/members/${encodeURIComponent(target.uid)}`,{method:"DELETE"});return asJson?(shouldEmitNonInteractiveCommandError(client)?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,projectId:project.id,projectName:project.name,uid:target.uid,result,message:`Removed ${memberLabel} from ${project.name}.`,next:[{command:buildCommandWithGlobalFlags(client.argv,`project members ${project.name}`),when:"List remaining members"}]},null,2)}
51
+ `):client.stdout.write(`${JSON.stringify(result,null,2)}
52
+ `),0):(output_manager_default.log(`Removed ${memberLabel} from ${project.name}.`),0)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"members"}),jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"unexpected_error",message:err instanceof Error?err.message:String(err)},null,2)}
53
+ `),1):(printError(err),1)}}function memberToBodyField(member){return email.test(member)?{email:member}:/^[A-Za-z0-9]{24,}$/.test(member)?{uid:member}:{username:member}}var PROJECT_ROLES_BY_TEAM_ROLE={CONTRIBUTOR:["PROJECT_VIEWER","PROJECT_DEVELOPER","ADMIN","PROJECT_GUEST"],DEVELOPER:["ADMIN"],SECURITY:["ADMIN","PROJECT_DEVELOPER"]};async function membersAdd(client,argv){let telemetry=new ProjectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification([...membersAddFlags]);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error}),output_manager_default.error(formatResult.error),2;let{jsonOutput}=formatResult,asJson=jsonOutput;function fail(reason,message,humanMessage=message,extra){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message,...extra}),getExitCodeForReason(reason)):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
54
+ `),getExitCodeForReason(reason)):(output_manager_default.error(humanMessage),getExitCodeForReason(reason))}if(parsedArgs.args.length!==2)return fail(AGENT_REASON.INVALID_ARGUMENTS,"Invalid number of arguments. Usage: `vercel project members add <project> <member> --role <role>`","Invalid number of arguments. Usage: `vercel project members add <project> <member> --role <role>`",{hint:`Valid roles: ${PROJECT_MEMBER_ROLES.join(", ")}`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project members add <project> <member> --role PROJECT_VIEWER"),when:"Add a member to a project (replace <project> and <member>)"}]});let[projectNameOrId,member]=parsedArgs.args;telemetry.trackCliArgumentProject(projectNameOrId),telemetry.trackCliArgumentMember(member);let roleRaw=parsedArgs.flags["--role"];if(telemetry.trackCliOptionRole(typeof roleRaw=="string"?roleRaw.trim().toUpperCase():void 0),typeof roleRaw!="string"||!roleRaw.trim())return fail(AGENT_REASON.MISSING_ARGUMENTS,`\`--role\` is required. Valid roles: ${PROJECT_MEMBER_ROLES.join(", ")}`);let role=roleRaw.trim().toUpperCase();if(!PROJECT_MEMBER_ROLES.includes(role))return fail(AGENT_REASON.INVALID_ARGUMENTS,`\`--role\` must be one of: ${PROJECT_MEMBER_ROLES.join(", ")}`);let teamPlan;try{let{team}=await getScope(client);teamPlan=team?.billing?.plan}catch{teamPlan=void 0}if(teamPlan==="hobby"||teamPlan==="oss"){let message=`Adding project members requires a Pro or Enterprise team (this team is on the ${teamPlan} plan).`;return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,message,hint:`Upgrade the team with \`${getCommandNamePlain("buy pro")}\`.`}),1):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,message},null,2)}
55
+ `),1):(output_manager_default.error(message),output_manager_default.log(`Upgrade the team with ${getCommandName("buy pro")}.`),1)}if(!canPrompt(client)){let globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2)).filter(flag=>flag!=="--non-interactive"),interactiveCommand=getCommandNamePlain(`project members add ${projectNameOrId} ${member} --role ${role} ${globalFlags.join(" ")}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:`Adding ${member} grants them the ${role} role on ${projectNameOrId}. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.`,userActionRequired:!0,hint:"Surface this to the user; the confirmation cannot be automated.",next:[{command:interactiveCommand,when:"user runs this command in an interactive terminal"}]},1),output_manager_default.error("This command must be run interactively because it grants a project role."),1}let body={...memberToBodyField(member),role};try{let project=await getProjectByCwdOrLink({client,commandName:"project members add",projectNameOrId,forReadOnlyCommand:!0});if(!await client.input.confirm(`Grant ${member} the ${role} role on ${project.name}?`,!1))return output_manager_default.log("Canceled"),0;let result=await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/members`,{method:"POST",body});return asJson?(client.stdout.write(`${JSON.stringify(result,null,2)}
56
+ `),0):(output_manager_default.log(`Added ${member} to ${project.name} as ${role}.`),0)}catch(err){if(isAPIError(err)&&err.status===400&&/not a confirmed member of the team/i.test(err.serverMessage)){let humanIntro=`${member} must be a confirmed member of the team before you can assign a project role.`,message=`${humanIntro} Invite them to the team first with \`${getCommandNamePlain("teams invite")}\`.`;return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_TEAM_MEMBER,message}),1):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_TEAM_MEMBER,message},null,2)}
57
+ `),1):(output_manager_default.error(humanIntro),output_manager_default.log(`Invite them to the team first with ${getCommandName("teams invite")}.`),1)}if(isAPIError(err)&&err.status===400&&/invalid role combination/i.test(err.serverMessage)){let humanIntro=`${member} can't be assigned the ${role} role because their team role does not permit it.`,pairs=Object.entries(PROJECT_ROLES_BY_TEAM_ROLE),footer="Team Members and Owners already have access to every project, so they cannot be given a project role.",message=`${humanIntro} Project roles map to team roles as: ${pairs.map(([teamRole,roles])=>`${teamRole} \u2192 ${roles.join("/")}`).join("; ")}. ${footer}`;if(shouldEmitNonInteractiveCommandError(client))return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ROLE_COMBINATION,message}),2;if(jsonOutput||!canPrompt(client))return client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ROLE_COMBINATION,message},null,2)}
58
+ `),2;output_manager_default.error(humanIntro),output_manager_default.log("Project roles can only be assigned to these team roles:");for(let[teamRole,roles]of pairs)output_manager_default.log(` ${teamRole} \u2192 ${roles.join(", ")}`);return output_manager_default.log(footer),1}return exitWithNonInteractiveError(client,err,1,{variant:"members"}),jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:AGENT_REASON.API_ERROR,message:err instanceof Error?err.message:String(err)},null,2)}
59
+ `),1):(printError(err),1)}}async function members(client,argv){if(argv[0]==="add")return membersAdd(client,argv.slice(1));if(argv[0]==="remove"||argv[0]==="rm")return membersRemove(client,argv.slice(1));let parsedArgs,flagsSpecification=getFlagsSpecification(membersSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1)return output_manager_default.error("Invalid number of arguments. Usage: `vercel project members [name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be a number between 1 and 100."),2;let next=parseNumericCursor(parsedArgs.flags["--next"]);if(typeof next<"u"&&!Number.isInteger(next))return output_manager_default.error(INVALID_NEXT_MESSAGE),2;let result;try{let project=await getProjectByCwdOrLink({client,commandName:"project members",projectNameOrId:parsedArgs.args[0],forReadOnlyCommand:!0}),query=new URLSearchParams;parsedArgs.flags["--search"]&&query.set("search",String(parsedArgs.flags["--search"])),typeof limit=="number"&&query.set("limit",String(limit)),typeof next=="number"&&query.set("until",String(next));let qs=query.toString(),path=`/v1/projects/${encodeURIComponent(project.id)}/members${qs?`?${qs}`:""}`;result=await client.fetch(path)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"members"}),printError(err),1}let projectMembers=result.members||[];if(asJson)return client.stdout.write(`${JSON.stringify({members:projectMembers,pagination:result.pagination},null,2)}
60
+ `),0;let rows=[["uid","Identity","Role","Team Role"].map(str=>(0,import_chalk7.gray)(str)),...projectMembers.map(member=>[member.uid,member.username||member.email||"",member.computedProjectRole||member.role||"",member.teamRole||""])];if(client.stderr.write(`${table(rows,{hsep:3})}
61
+ `),result.pagination?.next){let flags=getCommandFlags(parsedArgs.flags,["_","--next","-N","--search"]),projectName=parsedArgs.args[0]?` ${quoteArg(parsedArgs.args[0])}`:"",search=parsedArgs.flags["--search"],searchFlag=search?` --search ${quoteArg(String(search))}`:"",nextCmd=`${packageName} project members${projectName}${flags}${searchFlag} --next ${result.pagination.next}`;output_manager_default.print(`
62
+ `),printNextPageCommand(nextCmd)}return 0}var import_chalk8=__toESM(require_source(),1);async function accessGroups(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(accessGroupsSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}if(parsedArgs.args.length>1)return output_manager_default.error("Invalid number of arguments. Usage: `vercel project access-groups [name]`"),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,limit=parsedArgs.flags["--limit"];if(typeof limit=="number"&&(limit<1||limit>100))return output_manager_default.error("`--limit` must be a number between 1 and 100."),2;let result;try{let project=await getProjectByCwdOrLink({client,commandName:"project access-groups",projectNameOrId:parsedArgs.args[0],forReadOnlyCommand:!0}),query=new URLSearchParams;query.set("projectId",project.id),parsedArgs.flags["--search"]&&query.set("search",String(parsedArgs.flags["--search"])),typeof limit=="number"&&query.set("limit",String(limit)),parsedArgs.flags["--next"]!==void 0&&query.set("next",parsedArgs.flags["--next"]),result=await client.fetch(`/v1/access-groups?${query.toString()}`)}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"access-groups"}),printError(err),1}if(asJson)return client.stdout.write(`${JSON.stringify(result,null,2)}
63
+ `),0;let rows=[["id","Name","Role"].map(str=>(0,import_chalk8.gray)(str)),...(result.accessGroups||[]).map(group=>[group.id,group.name,group.role||""])];return client.stderr.write(`${table(rows,{hsep:3})}
64
+ `),result.pagination?.next&&(output_manager_default.print(`
65
+ `),printNextPageCommand(getNextPageCommand(client.argv,result.pagination.next))),0}var import_chalk9=__toESM(require_source(),1),import_ms3=__toESM(require_ms(),1);var ProjectRenameTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentNewName(newName){newName&&this.trackCliArgument({arg:"new-name",value:this.redactedValue})}};async function rename(client,argv){let telemetryClient=new ProjectRenameTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(renameSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args}=parsedArgs;if(args.length!==2)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk9.default.cyan(`${getCommandName("project rename <name> <new-name>")}`)}`),2;let[projectNameOrId,newName]=args;telemetryClient.trackCliArgumentName(projectNameOrId),telemetryClient.trackCliArgumentNewName(newName);let project=await getProjectByNameOrId(client,projectNameOrId);if(project instanceof ProjectNotFound)return output_manager_default.error("No such project exists"),1;let start=Date.now(),renamedProject;try{renamedProject=await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{method:"PATCH",body:{name:newName}})}catch(err){if(isAPIError(err)&&err.status===409)return output_manager_default.error(`A project named "${newName}" already exists`),1;if(isAPIError(err)&&err.status===403)return output_manager_default.error(err.message),1;throw err}let elapsed=(0,import_ms3.default)(Date.now()-start);return output_manager_default.log(`${import_chalk9.default.cyan("Success!")} Project ${import_chalk9.default.bold(project.name)} renamed to ${import_chalk9.default.bold(renamedProject.name)} ${import_chalk9.default.gray(`[${elapsed}]`)}`),0}var import_chalk10=__toESM(require_source(),1);var ProjectUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionFramework(framework){framework&&this.trackCliOption({option:"framework",value:this.redactedValue})}trackCliOptionBuildCommand(value){this.trackSettingOption("build-command",value)}trackCliOptionDevCommand(value){this.trackSettingOption("dev-command",value)}trackCliOptionInstallCommand(value){this.trackSettingOption("install-command",value)}trackCliOptionOutputDirectory(value){this.trackSettingOption("output-directory",value)}trackCliOptionRootDirectory(value){this.trackSettingOption("root-directory",value)}trackCliOptionAutoDetect(value){value?.length&&this.trackCliOption({option:"auto-detect",value:this.redactedValue})}trackCliOptionSandboxRegion(value){this.trackSandboxRegionOption("sandbox-region",value)}trackCliOptionSandboxFailoverRegions(value){this.trackSandboxRegionOption("sandbox-failover-regions",value)}trackSandboxRegionOption(option,value){value!==void 0&&this.trackCliOption({option,value:this.redactedValue})}trackSettingOption(option,value){value!==void 0&&this.trackCliOption({option,value:this.redactedValue})}trackCliOptionFluidCompute(value){this.trackChoiceOption("fluid-compute",value,["on","off"])}trackCliFlagFluidCompute(value){value&&this.trackCliFlag("fluid-compute")}trackCliFlagNoFluidCompute(value){value&&this.trackCliFlag("no-fluid-compute")}trackCliOptionFunctionCpu(value){this.trackChoiceOption("function-cpu",value,["standard_legacy","standard","performance","performance_xl"])}trackCliOptionBuildMachine(value){this.trackChoiceOption("build-machine",value,["basic","standard","enhanced","turbo","elastic"])}trackCliOptionElasticConcurrency(value){this.trackChoiceOption("elastic-concurrency",value,["on","off"])}trackCliFlagElasticConcurrency(value){value&&this.trackCliFlag("elastic-concurrency")}trackCliFlagNoElasticConcurrency(value){value&&this.trackCliFlag("no-elastic-concurrency")}trackCliOptionNodeVersion(value){this.trackChoiceOption("node-version",value,["24.x","22.x","20.x","18.x","16.x","14.x","12.x","10.x"])}trackChoiceOption(option,value,allowed){value!==void 0&&this.trackCliOption({option,value:allowed.includes(value)?value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var import_frameworks2=__toESM(require_frameworks(),1);var OTHER_FRAMEWORK_SLUG="other",MAX_SETTING_LENGTH=256,CONTROL_CHARACTERS=/[\u0000-\u001f\u007f]/,frameworkSlugs=import_frameworks2.frameworkList.map(framework=>framework.slug??OTHER_FRAMEWORK_SLUG),buildSettingDefinitions=[{key:"buildCommand",flag:"--build-command",autoDetect:"build-command",label:"Build Command"},{key:"devCommand",flag:"--dev-command",autoDetect:"dev-command",label:"Dev Command"},{key:"installCommand",flag:"--install-command",autoDetect:"install-command",label:"Install Command"},{key:"outputDirectory",flag:"--output-directory",autoDetect:"output-directory",label:"Output Directory"},{key:"rootDirectory",flag:"--root-directory",autoDetect:"root-directory",label:"Root Directory"}],settingOrder=["framework",...buildSettingDefinitions.map(setting=>setting.key),"sandboxRegion","sandboxFailoverRegions"],autoDetectSettings=buildSettingDefinitions.map(setting=>setting.autoDetect),settingLabels={framework:"Framework",...Object.fromEntries(buildSettingDefinitions.map(setting=>[setting.key,setting.label])),sandboxRegion:"Sandbox Region",sandboxFailoverRegions:"Failover"};function isSandboxSettingKey(key){return key==="sandboxRegion"||key==="sandboxFailoverRegions"}function resolveFramework(input){let slug=input.trim().toLowerCase();return import_frameworks2.frameworkList.find(framework=>(framework.slug??OTHER_FRAMEWORK_SLUG)===slug)}function formatFramework(slug){let framework=import_frameworks2.frameworkList.find(item=>item.slug===slug);return framework?`${framework.name} (${framework.slug??OTHER_FRAMEWORK_SLUG})`:slug??OTHER_FRAMEWORK_SLUG}function formatSettingValue(key,value){return key==="sandboxRegion"?typeof value=="string"?value:"Auto":key==="sandboxFailoverRegions"?formatSandboxRegionList(Array.isArray(value)?value:[]):key==="framework"?formatFramework(typeof value=="string"?value:null):value===null?"Auto":value===""?'""':String(value)}function getCurrentSetting(project,key){return key==="sandboxRegion"?project.sandbox?.region??null:key==="sandboxFailoverRegions"?project.sandbox?.failoverRegions??null:project[key]??null}function isSameSettingValue(a,b){if(Array.isArray(a)||Array.isArray(b)){let left=Array.isArray(a)?a:[],right=Array.isArray(b)?b:[];return left.length===right.length&&left.every((value,index)=>value===right[index])}return a===b}function hasSetting(settings,key){return Object.prototype.hasOwnProperty.call(settings,key)}function validateSettingValue(definition,value){if(value.length>MAX_SETTING_LENGTH)return`${definition.label} must be ${MAX_SETTING_LENGTH} characters or fewer.`;if(CONTROL_CHARACTERS.test(value))return`${definition.label} can't contain control characters.`}function parseAutoDetectSettings(inputs){return inputs.flatMap(input=>input.split(",")).map(input=>input.trim())}var NODE_VERSIONS=["24.x","22.x","20.x","18.x","16.x","14.x","12.x","10.x"],FUNCTION_CPU_TIERS=["standard_legacy","standard","performance","performance_xl"],BUILD_MACHINE_TYPES=["basic","standard","enhanced","turbo","elastic"];function parseEnumValue(label,raw,allowed){return allowed.includes(raw)?{ok:!0,value:raw}:{ok:!1,message:`${label} must be one of: ${allowed.join(", ")}.`}}function displayOnOff(value){return value===!0?"on":value===!1?"off":"Auto"}function displayValue(value){return value==null?"Auto":String(value)}function parseAdvanced(definition,raw){return parseEnumValue(definition.label,raw,definition.values)}function readAdvanced(definition,project){let fields=project;switch(definition.target){case"resourceConfig":return definition.field==="buildMachineType"&&fields.resourceConfig?.buildMachineSelection==="elastic"?"elastic":fields.resourceConfig?.[definition.field];case"project":return project[definition.field]}}function displayAdvanced(definition,value){return definition.kind==="toggle"?displayOnOff(value):displayValue(value)}var advancedSettingDefinitions=[{key:"fluid",flag:"--fluid-compute",label:"Fluid Compute",kind:"toggle",target:"resourceConfig",field:"fluid"},{key:"functionDefaultMemoryType",flag:"--function-cpu",label:"Function CPU",kind:"enum",values:FUNCTION_CPU_TIERS,target:"resourceConfig",field:"functionDefaultMemoryType",requiresPaidPlan:()=>!0,hasCostImpact:()=>!0},{key:"buildMachineType",flag:"--build-machine",label:"Build Machine",kind:"enum",values:BUILD_MACHINE_TYPES,target:"resourceConfig",field:"buildMachineType",requiresPaidPlan:()=>!0,hasCostImpact:()=>!0},{key:"elasticConcurrencyEnabled",flag:"--elastic-concurrency",label:"Elastic Concurrency",kind:"toggle",target:"resourceConfig",field:"elasticConcurrencyEnabled",requiresPaidPlan:value=>value===!0,hasCostImpact:value=>value===!0},{key:"nodeVersion",flag:"--node-version",label:"Node.js Version",kind:"enum",values:NODE_VERSIONS,target:"project",field:"nodeVersion"}];function ensureResourceConfig(body){return body.resourceConfig??={},body.resourceConfig}function applyAdvanced(definition,body,value){switch(definition.target){case"resourceConfig":ensureResourceConfig(body)[definition.field]=value;break;case"project":body[definition.field]=value;break}}function computeSettingsChanges(project,requestedSettings,providedAdvanced){let previousSettings={},changedSettings=[],body={},mergedSandbox;if(hasSetting(requestedSettings,"sandboxRegion")||hasSetting(requestedSettings,"sandboxFailoverRegions")){if(mergedSandbox={...project.sandbox},hasSetting(requestedSettings,"sandboxRegion")){let region=requestedSettings.sandboxRegion;region==null?delete mergedSandbox.region:mergedSandbox.region=region}hasSetting(requestedSettings,"sandboxFailoverRegions")&&(mergedSandbox.failoverRegions=requestedSettings.sandboxFailoverRegions??[])}for(let key of settingOrder){if(!hasSetting(requestedSettings,key))continue;let previous=getCurrentSetting(project,key),next=requestedSettings[key]??null;Object.assign(previousSettings,{[key]:previous}),isSameSettingValue(previous,next)||(changedSettings.push(key),isSandboxSettingKey(key)||(body[key]=next))}mergedSandbox&&(changedSettings.includes("sandboxRegion")||changedSettings.includes("sandboxFailoverRegions"))&&(body.sandbox=mergedSandbox);let advancedRows=[];for(let{definition,value}of providedAdvanced){let previous=readAdvanced(definition,project),changed=previous!==value;advancedRows.push({key:definition.key,label:definition.label,previous:displayAdvanced(definition,previous),next:displayAdvanced(definition,value),changed}),changed&&(changedSettings.push(definition.key),applyAdvanced(definition,body,value))}return{previousSettings,changedSettings,body,advancedRows}}async function patchProjectSettings(client,project,body){return client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{method:"PATCH",accountId:project.accountId,body})}function getAdvancedResultValue(project,row){let definition=advancedSettingDefinitions.find(candidate=>candidate.key===row.key);return definition?displayAdvanced(definition,readAdvanced(definition,project)):row.next}function printChangePreview({project,previousSettings,requestedSettings,changedSettings,advancedRows}){printAlignedLabel("Project",project.name);for(let key of settingOrder){if(!hasSetting(requestedSettings,key)||!changedSettings.includes(key))continue;let previous=formatSettingValue(key,previousSettings[key]??null),next=formatSettingValue(key,requestedSettings[key]??null);printAlignedLabel(settingLabels[key],`${previous} \u2192 ${next}`)}for(let row of advancedRows)row.changed&&printAlignedLabel(row.label,`${row.previous} \u2192 ${row.next}`)}function writeUpdateResult({changedSettings,project,previousSettings,requestedSettings,advancedRows,asJson,client}){let changed=changedSettings.length>0;if(asJson){let settings={};for(let key of settingOrder)hasSetting(requestedSettings,key)&&(settings[key]=getCurrentSetting(project,key));for(let row of advancedRows){let definition=advancedSettingDefinitions.find(candidate=>candidate.key===row.key);definition&&(settings[row.key]=readAdvanced(definition,project)??null)}client.stdout.write(`${JSON.stringify({changed,changedSettings,projectId:project.id,projectName:project.name,settings},null,2)}
66
+ `);return}printAlignedLabel(changed?"Updated":"Unchanged","Project Settings",{gutter:"\u2713"}),printAlignedLabel("Project",project.name);for(let key of settingOrder){if(!hasSetting(requestedSettings,key))continue;let previous=previousSettings[key]??null,next=getCurrentSetting(project,key),value=changedSettings.includes(key)?`${formatSettingValue(key,previous)} \u2192 ${formatSettingValue(key,next)}`:formatSettingValue(key,next);printAlignedLabel(settingLabels[key],value)}for(let row of advancedRows){let result=getAdvancedResultValue(project,row),value=row.changed?`${row.previous} \u2192 ${result}`:result;printAlignedLabel(row.label,value)}}function getUpdateCommand(framework="<slug>"){return`project update <name> --framework ${framework}`}function buildUpdateRetryCommand(client,{interactive,withYes}){let typedArgs=stripSensitiveAuthArgs(client.argv.slice(2)),rewritten=rewriteLegacyOnOffValues(typedArgs,updateSubcommand.options),args="error"in rewritten?typedArgs:rewritten.args,nextArgs=[];for(let index=0;index<args.length;index++){let arg=args[index];if(!(arg==="--yes"||arg==="-y")){if(interactive&&(arg==="--non-interactive"||arg.startsWith("--non-interactive="))){arg==="--non-interactive"&&(args[index+1]==="true"||args[index+1]==="false")&&index++;continue}nextArgs.push(arg)}}return withYes&&nextArgs.push("--yes"),getCommandNamePlain(nextArgs.map(quoteArg).join(" "))}function printUsageError(client,message,exitCode,reason,suggestedCommand=getUpdateCommand()){return outputAgentError(client,{status:"error",reason,message,next:[{command:buildCommandWithGlobalFlags(client.argv,suggestedCommand),when:"Update project settings"}]},exitCode),output_manager_default.error(message),exitCode}function printPlanError(client,message,teamOwned){let nextCommand=teamOwned?"buy pro":"teams switch";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PLAN_UPGRADE_REQUIRED,message,userActionRequired:!0,next:[{command:buildCommandWithGlobalFlags(client.argv,nextCommand,void 0,{excludeFlags:["--non-interactive","--yes"]}),when:teamOwned?"Upgrade this team interactively":"Switch to a Pro or Enterprise team"}]},1),output_manager_default.error(message),output_manager_default.log(teamOwned?`Upgrade with ${getCommandName("buy pro")}.`:`Switch teams with ${getCommandName("teams switch")}.`),1}function printConfirmationRequiredError(client,hasCostImpact){let nextCommand=buildUpdateRetryCommand(client,{interactive:hasCostImpact,withYes:!hasCostImpact});return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:hasCostImpact?AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:hasCostImpact?"These project settings may affect charges and require interactive confirmation.":"Updating project settings requires confirmation. Re-run with --yes to apply the changes.",userActionRequired:hasCostImpact,next:[{command:nextCommand,when:hasCostImpact?"Review and confirm the charge-sensitive settings in a terminal":"Apply the requested settings without prompting"}]},1),output_manager_default.error(hasCostImpact?"Confirmation required. These settings may affect charges and must be confirmed in an interactive terminal.":"Confirmation required. Re-run with --yes or in an interactive terminal."),1}function getSandboxValidationError(project,requestedSettings){if(!hasSetting(requestedSettings,"sandboxRegion")&&!hasSetting(requestedSettings,"sandboxFailoverRegions"))return;let mergedSandbox={...project.sandbox};if(hasSetting(requestedSettings,"sandboxRegion")){let region=requestedSettings.sandboxRegion;region==null?delete mergedSandbox.region:mergedSandbox.region=region}return hasSetting(requestedSettings,"sandboxFailoverRegions")&&(mergedSandbox.failoverRegions=requestedSettings.sandboxFailoverRegions??[]),validateSandboxConfig(mergedSandbox)}async function refreshProjectForNestedUpdate(client,project,body){return body.resourceConfig===void 0&&body.sandbox===void 0?project:client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId})}async function update(client,argv){let telemetry=new ProjectUpdateTelemetryClient({opts:{store:client.telemetryEventStore}}),rewritten=rewriteLegacyOnOffValues(argv,updateSubcommand.options,client);if("error"in rewritten)return printUsageError(client,rewritten.error,2,"invalid_arguments");let parsedArgs;try{parsedArgs=parseArguments(rewritten.args,getFlagsSpecification(updateSubcommand.options))}catch(error){return outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args,flags}=parsedArgs,[projectNameOrId]=args,frameworkInput=flags["--framework"],autoDetectInputs=flags["--auto-detect"]??[];if(telemetry.trackCliArgumentName(projectNameOrId),telemetry.trackCliOptionFramework(frameworkInput),telemetry.trackCliOptionBuildCommand(flags["--build-command"]),telemetry.trackCliOptionDevCommand(flags["--dev-command"]),telemetry.trackCliOptionInstallCommand(flags["--install-command"]),telemetry.trackCliOptionOutputDirectory(flags["--output-directory"]),telemetry.trackCliOptionRootDirectory(flags["--root-directory"]),telemetry.trackCliOptionAutoDetect(flags["--auto-detect"]),telemetry.trackCliOptionSandboxRegion(flags["--sandbox-region"]),telemetry.trackCliOptionSandboxFailoverRegions(flags["--sandbox-failover-regions"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),telemetry.trackCliFlagYes(flags["--yes"]),telemetry.trackCliOptionFluidCompute(rewritten.legacy.get("--fluid-compute")),rewritten.legacy.has("--fluid-compute")||(telemetry.trackCliFlagFluidCompute(flags["--fluid-compute"]),telemetry.trackCliFlagNoFluidCompute(flags["--no-fluid-compute"])),telemetry.trackCliOptionFunctionCpu(flags["--function-cpu"]),telemetry.trackCliOptionBuildMachine(flags["--build-machine"]),telemetry.trackCliOptionElasticConcurrency(rewritten.legacy.get("--elastic-concurrency")),rewritten.legacy.has("--elastic-concurrency")||(telemetry.trackCliFlagElasticConcurrency(flags["--elastic-concurrency"]),telemetry.trackCliFlagNoElasticConcurrency(flags["--no-elastic-concurrency"])),telemetry.trackCliOptionNodeVersion(flags["--node-version"]),args.length>1)return printUsageError(client,`Invalid number of arguments. Usage: ${getCommandNamePlain("project update [name] [options]")}`,2,"invalid_arguments");let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return printUsageError(client,formatResult.error,2,"invalid_arguments");let requestedSettings={};if(frameworkInput!==void 0){let framework=resolveFramework(frameworkInput);if(!framework){let normalizedInput=frameworkInput.trim().toLowerCase(),suggestion=normalizedInput?did_you_mean_default(normalizedInput,frameworkSlugs,.7):void 0,message=suggestion?`Unsupported framework preset ${JSON.stringify(frameworkInput)}. Did you mean ${JSON.stringify(suggestion)}?`:`Unsupported framework preset ${JSON.stringify(frameworkInput)}. Use a framework slug such as "nextjs", or "other" to clear the preset.`;return printUsageError(client,message,2,"invalid_arguments",getUpdateCommand(suggestion))}requestedSettings.framework=framework.slug}let requestedAutoDetect=parseAutoDetectSettings(autoDetectInputs),autoDetectSet=new Set;for(let setting of requestedAutoDetect){if(!autoDetectSettings.includes(setting)){let suggestion=setting?did_you_mean_default(setting,autoDetectSettings,.7):void 0,message=suggestion?`Unknown auto-detect setting ${JSON.stringify(setting)}. Did you mean ${JSON.stringify(suggestion)}?`:`Unknown auto-detect setting ${JSON.stringify(setting)}. Accepted settings: ${autoDetectSettings.join(", ")}.`;return printUsageError(client,message,2,"invalid_arguments",`project update <name> --auto-detect ${suggestion??"<setting>"}`)}autoDetectSet.add(setting)}for(let definition of buildSettingDefinitions){let value=flags[definition.flag];if(value!==void 0&&autoDetectSet.has(definition.autoDetect))return printUsageError(client,`Can't use "${definition.flag}" and "--auto-detect ${definition.autoDetect}" together. Choose one.`,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);if(value!==void 0){let validationError=validateSettingValue(definition,value);if(validationError)return printUsageError(client,validationError,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);requestedSettings[definition.key]=value}else autoDetectSet.has(definition.autoDetect)&&(requestedSettings[definition.key]=null)}let sandboxRegionInput=flags["--sandbox-region"];if(sandboxRegionInput!==void 0){let normalizedRegion=sandboxRegionInput.trim().toLowerCase();requestedSettings.sandboxRegion=normalizedRegion===""?null:normalizedRegion}let sandboxFailoverInput=flags["--sandbox-failover-regions"];sandboxFailoverInput!==void 0&&(requestedSettings.sandboxFailoverRegions=parseSandboxRegionList(sandboxFailoverInput));let providedAdvanced=[];for(let definition of advancedSettingDefinitions){if(definition.kind==="toggle"){let toggle=readOnOffOption(client,flags,{on:definition.flag,off:`--no-${definition.flag.slice(2)}`});if("error"in toggle)return printUsageError(client,toggle.error,2,"invalid_arguments",`project update <name> ${definition.flag}`);toggle.value!==void 0&&providedAdvanced.push({definition,value:toggle.value});continue}let raw=flags[definition.flag];if(raw===void 0)continue;let result=parseAdvanced(definition,raw);if(!result.ok)return printUsageError(client,result.message,2,"invalid_arguments",`project update <name> ${definition.flag} <value>`);providedAdvanced.push({definition,value:result.value})}if(settingOrder.every(key=>!hasSetting(requestedSettings,key))&&providedAdvanced.length===0)return printUsageError(client,'Provide at least one setting option. Run "vercel project update --help" to see every available option.',2,"missing_arguments");let project;try{project=await getProjectByCwdOrLink({client,commandName:"project update",projectNameOrId,forReadOnlyCommand:!0})}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let sandboxError=getSandboxValidationError(project,requestedSettings);if(sandboxError)return printUsageError(client,sandboxError,1,"invalid_arguments");let changes=computeSettingsChanges(project,requestedSettings,providedAdvanced),changeCount=changes.changedSettings.length,gatedProvided=providedAdvanced.filter(({definition,value})=>changes.changedSettings.includes(definition.key)&&definition.requiresPaidPlan?.(value));if(gatedProvided.length>0){let team,user,teamOwned=project.accountId.startsWith("team_");try{projectNameOrId?{team,user}=await getScope(client):{team,user}=await getScope(client,{resolveLocalScope:!0}),teamOwned&&team?.id!==project.accountId&&(team=await getTeamByIdOrSlug(client,project.accountId))}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let plan=(teamOwned?team?.billing:user?.billing)?.plan;if(!(plan==="pro"||plan==="enterprise")){let phrases=gatedProvided.map(({definition,value})=>`${definition.label} "${displayAdvanced(definition,value)}"`),list2=phrases.length===1?phrases[0]:`${phrases.slice(0,-1).join(", ")} and ${phrases[phrases.length-1]}`,verb=phrases.length>1?"require":"requires";return printPlanError(client,`${list2} ${verb} a Pro or Enterprise plan.`,teamOwned)}}let hasCostImpact=providedAdvanced.some(({definition,value})=>changes.changedSettings.includes(definition.key)&&definition.hasCostImpact?.(value));if(changeCount>0&&!(!!flags["--yes"]&&!hasCostImpact)){if(!canPrompt(client))return printConfirmationRequiredError(client,hasCostImpact);if(printChangePreview({project,previousSettings:changes.previousSettings,requestedSettings,changedSettings:changes.changedSettings,advancedRows:changes.advancedRows}),hasCostImpact&&printAlignedLabel("Charges","These settings may affect your Vercel charges.",{gutter:"!"}),!await client.input.confirm(`Update ${changeCount} ${changeCount===1?"setting":"settings"} for ${import_chalk10.default.bold(project.name)}?`,!1))return output_manager_default.log("Canceled"),0}if(changeCount>0){try{project=await refreshProjectForNestedUpdate(client,project,changes.body)}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}let refreshedSandboxError=getSandboxValidationError(project,requestedSettings);if(refreshedSandboxError)return printUsageError(client,refreshedSandboxError,1,"invalid_arguments");changes=computeSettingsChanges(project,requestedSettings,providedAdvanced)}let updatedProject=project;if(changes.changedSettings.length>0)try{updatedProject=await patchProjectSettings(client,project,changes.body)}catch(error){return exitWithNonInteractiveError(client,error,1,{variant:"update"}),printError(error),1}return writeUpdateResult({changedSettings:changes.changedSettings,project:updatedProject,previousSettings:changes.previousSettings,requestedSettings,advancedRows:changes.advancedRows,asJson:formatResult.jsonOutput||shouldEmitNonInteractiveCommandError(client),client}),0}var import_chalk11=__toESM(require_source(),1),import_build_utils=__toESM(require_build_utils(),1);var ProjectRmTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};var e=encodeURIComponent;async function rm(client,argv){let telemetryClient=new ProjectRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk11.default.cyan(`${getCommandName("project delete <name>")}`)}`),2;let name=args[0],yes=flags["--yes"]??!1;if(telemetryClient.trackCliArgumentName(name),telemetryClient.trackCliFlagYes(yes),!(yes&&await isTeamExplicit(client)))if(canPrompt(client)){if(await printDeletionPreview(client,name),await client.input.text({message:`To confirm, type the project name "${name}":`})!==name)return output_manager_default.log("Canceled. Nothing was changed."),130}else{if(yes)return refuse(client,{reason:AGENT_REASON.MISSING_SCOPE,message:`Can't delete project ${name} without a team in non-interactive mode.`,recovery:"Pass the team with --scope:",command:`${buildCommandWithYes(client.argv)} --scope <TEAM>`,when:`Replace <TEAM> with the team that owns ${name}`});if(client.stdin.isTTY||client.isAgent||client.nonInteractive){let teamNamed2=await isTeamExplicit(client);return refuse(client,{reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Can't delete project ${name} without --yes in non-interactive mode.`,recovery:"Delete it after a person approves:",command:`${buildCommandWithYes(client.argv)}${teamNamed2?"":" --scope <TEAM>"}`,when:`Only after a human approves deleting ${name} and its deployments${teamNamed2?"":`. Replace <TEAM> with the team that owns ${name}`}`,userActionRequired:!0})}else if(output_manager_default.warning("Deleting a project without a terminal will need --yes and --scope in a future major version."),await printDeletionPreview(client,name),!await client.input.confirm(`${import_chalk11.default.bold.red("Are you sure?")}`,!1))return output_manager_default.log("User abort"),0}try{await client.fetch(`/v2/projects/${e(name)}`,{method:"DELETE"})}catch(err){return isAPIError(err)&&err.status===404?(output_manager_default.error("No such project exists"),1):isAPIError(err)&&err.status===403?(output_manager_default.error(err.message),1):(printError(err),1)}return output_manager_default.print(`
67
+ `),printAlignedLabel("Deleted",name,{gutter:"\u2713"}),0}async function printDeletionPreview(client,projectName){printAlignedLabel("Project",`${await getContextName(client)}/${projectName}`),output_manager_default.print(`
68
+ Deletes the project and all of its deployments.
69
+ This cannot be undone.
70
+ `)}async function isTeamExplicit(client){let{flags}=parseArguments(client.argv.slice(2),{},{permissive:!0});if(flags["--scope"]||flags["--team"])return!0;let team=await client.resolveCurrentTeam({ask:!1});if(!team)return!1;let orgId=(0,import_build_utils.getPlatformEnv)("ORG_ID");if(orgId)return orgId===team;try{let teams=await getTeams(client);return teams.length===1&&teams[0].id===team}catch(err){return output_manager_default.debug(`Couldn't list teams: ${err}`),!1}}function refuse(client,opts){return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:opts.reason,message:opts.message,userActionRequired:opts.userActionRequired,next:[{command:opts.command,when:opts.when}]},2),output_manager_default.error(opts.message),output_manager_default.print(`
71
+ ${opts.recovery}
72
+ ${opts.command}
73
+ `),2}var ProjectDangerouslyDeleteImmutableStaticAssetTelemetryClient=class extends TelemetryClient{trackCliArgumentPath(path){path&&this.trackCliArgument({arg:"path",value:this.redactedValue})}};async function dangerouslyDeleteImmutableStaticAsset(client,argv){let telemetry=new ProjectDangerouslyDeleteImmutableStaticAssetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(dangerouslyDeleteImmutableStaticAssetSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let[path]=parsedArgs.args;if(!path)return output_manager_default.error(`Missing required argument. Usage: ${getCommandName("project dangerously-delete-immutable-static-asset <path>")}`),2;telemetry.trackCliArgumentPath(path);let projectName=parsedArgs.flags["--project"];telemetry.trackCliOptionProject(projectName);let link=await resolveProjectContext({client,projectNameOrId:projectName});if(link.status==="not_linked")return output_manager_default.error("No project linked. Run `vercel link` to link a project to this directory."),1;if(link.status==="error")return link.exitCode;let{project,org}=link;if(client.config.currentTeam=org.type==="team"?org.id:void 0,!canPrompt(client)){let globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2)).filter(flag=>!flag.startsWith("--non-interactive")),interactiveCommand=getCommandNamePlain(`project dangerously-delete-immutable-static-asset ${quoteArg(path)} --project ${quoteArg(project.id)} ${globalFlags.map(quoteArg).join(" ")}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:"Deleting an immutable static asset permanently removes it from storage and cannot be undone. This cannot be confirmed non-interactively. The user must run this command in a terminal and type the asset path to confirm.",userActionRequired:!0,hint:"This action can not be automated so it should be surfaced to the user.",next:[{command:interactiveCommand,when:"user runs this command in an interactive terminal"}]},1),output_manager_default.error("This command must be run interactively because it permanently deletes the asset from storage."),1}if(output_manager_default.print(prependEmoji(`Deleting immutable static asset ${path} for project ${project.name} permanently removes it from storage for the production and preview environments. This cannot be undone. Requests to this URL will serve 410 for 7 days and then 404.
74
+ `,emoji("warning"))),await client.input.text({message:`Type ${path} to confirm the permanent deletion:`})!==path)return output_manager_default.log("Canceled"),0;try{await client.fetch(`/v1/edge-cache/dangerously-delete-immutable-static?projectIdOrName=${project.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path}),retry:{retries:0}})}catch(err){if(isAPIError(err)){if(err.code==="challenge_required")return output_manager_default.error(`This action requires a recent authentication. Run ${getCommandName("login")} and retry.`),1;if(err.status===404)return output_manager_default.error(err.code==="asset_not_found"&&err.serverMessage?err.serverMessage:"Project or asset not found."),1;if(err.status===400)return output_manager_default.error(err.serverMessage||"Invalid request."),1;if(err.status===403)return output_manager_default.error(err.serverMessage||"You do not have permission to delete this asset."),1}return printError(err),output_manager_default.log("The deletion outcome is unknown. Re-run to verify: a not-found response on re-run means this attempt succeeded and the URL now serves 410."),1}return output_manager_default.print(prependEmoji(`Successfully deleted immutable static asset ${path}; its URL now serves 410`,emoji("success"))+`
75
+ `),0}var import_chalk12=__toESM(require_source(),1);var ProjectPauseTelemetryClient=class extends TelemetryClient{trackCliArgumentProject(value){value&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function pause(client,argv){let telemetry=new ProjectPauseTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(pauseSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs;if(args.length>1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk12.default.cyan(getCommandName("project pause [project]"))}`),2;let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(telemetry.trackCliArgumentProject(args[0]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]),!canPrompt(client)){let globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2)).filter(flag=>flag!=="--non-interactive"),interactiveCommand=getCommandNamePlain(`project pause ${args[0]?`${args[0]} `:""}${globalFlags.join(" ")}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:"Pausing a project stops serving production traffic and visitors will see an error page. This cannot be confirmed non-interactively: the user must run this command in a terminal and type the project name to confirm.",userActionRequired:!0,hint:"Surface this to the user; the confirmation cannot be automated.",next:[{command:interactiveCommand,when:"user runs this command in an interactive terminal"}]},1),output_manager_default.error("This command must be run interactively because it pauses production traffic."),1}let project;try{project=await getProjectByCwdOrLink({client,commandName:"project pause",projectNameOrId:args[0],forReadOnlyCommand:!0})}catch(error){return printError(error),1}if(output_manager_default.print(prependEmoji(`Pausing ${import_chalk12.default.bold(project.name)} will stop serving production traffic and visitors will see an error page.
76
+ `,emoji("warning"))),await client.input.text({message:`Type ${project.name} to confirm pausing production traffic:`})!==project.name)return output_manager_default.log("Canceled"),0;let pauseStamp=stamp_default();try{await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/pause`,{method:"POST"})}catch(err){if(isAPIError(err)){if(err.status===404)return output_manager_default.error("Project not found."),1;if(err.status===403)return output_manager_default.error(err.serverMessage||"You do not have permission to pause this project."),1}return printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify({id:project.id,name:project.name,paused:!0},null,2)}
77
+ `),0):(output_manager_default.success(`Production traffic for ${import_chalk12.default.bold(project.name)} paused ${import_chalk12.default.gray(pauseStamp())}`),0)}var import_chalk13=__toESM(require_source(),1),import_pluralize=__toESM(require_pluralize(),1),import_async_sema=__toESM(require_async_sema(),1);var import_build_utils2=__toESM(require_build_utils(),1);async function isTeamExplicit2(client){if(scopeFlagPassed(client.argv)){let{flags}=parseArguments(client.argv.slice(2),{},{permissive:!0});if(flags["--scope"]||flags["--team"])return!0}let team=await client.resolveCurrentTeam({ask:!1});if(!team&&client.isTeamUnchosen())return!1;let orgId=(0,import_build_utils2.getPlatformEnv)("ORG_ID");try{if(!team)return orgId?orgId===(await getUser(client)).id:(await getTeams(client)).length===0;if(orgId)return orgId===team;let teams=await getTeams(client);return teams.length===1&&teams[0].id===team}catch(err){return output_manager_default.debug(`Couldn't check the scope: ${err}`),!1}}var ProjectResumeTelemetryClient=class extends TelemetryClient{trackCliArgumentProject(value){value.length>0&&this.trackCliArgument({arg:"project",value:this.redactedValue})}trackCliFlagAll(all){all&&this.trackCliFlag("all")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function resume(client,argv){let telemetry=new ProjectResumeTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(resumeSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)}),printError(error),2}let{args,flags}=parsedArgs,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error}),output_manager_default.error(formatResult.error),2;let{jsonOutput}=formatResult,asJson=jsonOutput||!canPrompt(client);function fail(reason,message,humanMessage=message,exitCode=1){return shouldEmitNonInteractiveCommandError(client)?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message},exitCode),exitCode):jsonOutput||!canPrompt(client)?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason,message},null,2)}
78
+ `),exitCode):(output_manager_default.error(humanMessage),exitCode)}let all=flags["--all"]??!1,yes=flags["--yes"]??!1;if(all&&args.length>0)return fail(AGENT_REASON.INVALID_ARGUMENTS,`Use either project names or --all, not both. Usage: ${getCommandName("project resume [project ...] | --all")}`,`Use either project names or --all, not both. Usage: ${import_chalk13.default.cyan(getCommandName("project resume [project ...] | --all"))}`,2);telemetry.trackCliArgumentProject(args),telemetry.trackCliFlagAll(all),telemetry.trackCliFlagYes(yes),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliFlagJson(flags["--json"]);let names=[...new Set(args)];if(all||names.length>1)return resumeMany(client,{all,names,yes,jsonOutput,fail});let project;try{project=await getProjectByCwdOrLink({client,commandName:"project resume",projectNameOrId:names[0],forReadOnlyCommand:!0})}catch(error){return fail(error instanceof ProjectNotFound?AGENT_REASON.PROJECT_NOT_FOUND:error instanceof LinkRequiredError?AGENT_REASON.NOT_LINKED:AGENT_REASON.API_ERROR,error instanceof Error?error.message:String(error))}let resumeStamp=stamp_default();try{await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/unpause`,{method:"POST"})}catch(err){if(isAPIError(err)){if(err.status===404)return fail(AGENT_REASON.NOT_FOUND,"Project not found.");if(err.status===403)return fail("forbidden",err.serverMessage||"You do not have permission to resume this project.")}return fail(AGENT_REASON.API_ERROR,err instanceof Error?err.message:String(err))}return asJson?(client.stdout.write(`${JSON.stringify({id:project.id,name:project.name,paused:!1},null,2)}
79
+ `),0):(output_manager_default.success(`Production traffic for ${import_chalk13.default.bold(project.name)} resumed ${import_chalk13.default.gray(resumeStamp())}`),0)}var LISTED_PROJECTS=5,TEAM_SLUG=/^[a-z0-9][a-z0-9-]*$/,UNPAUSE_CONCURRENCY=5,GATEWAY_STATUSES=new Set([502,503,504]);async function resumeMany(client,opts){let{all,names,yes,jsonOutput,fail}=opts,asJson=jsonOutput||!canPrompt(client),interactive=canPrompt(client)&&!jsonOutput,contextName,teamNamed2;try{contextName=await getContextName(client,{resolveLocalScope:all}),teamNamed2=!all||await isTeamExplicit2(client)}catch(err){return fail(AGENT_REASON.API_ERROR,err instanceof Error?err.message:String(err))}if(all&&yes&&!teamNamed2&&!interactive)return refuse2(client,{reason:AGENT_REASON.MISSING_SCOPE,message:"Can't resume every paused project without a team in non-interactive mode.",command:`${buildCommandWithYes(client.argv)} --scope <TEAM>`,when:"Replace <TEAM> with the team whose paused projects to resume",hint:"Ask the user which team to resume, then run the command in next[]. Do not choose a team yourself."});let projects,incomplete=!1;try{if(all)asJson||output_manager_default.spinner(`Finding paused projects in ${import_chalk13.default.bold(contextName)}`),{projects,incomplete}=await listPausedProjects(client);else{let found=await Promise.all(names.map(name=>getProjectByNameOrId(client,name))),missing=names.filter((_,i)=>found[i]instanceof ProjectNotFound);if(missing.length>0)return fail(AGENT_REASON.PROJECT_NOT_FOUND,missing.length===1?new ProjectNotFound(missing[0]).message:`There are no projects for ${joinWords(missing.map(name=>`"${name}"`))}`);projects=[...new Map(found.map(project=>[project.id,project])).values()]}}catch(err){return fail(AGENT_REASON.API_ERROR,err instanceof Error?err.message:String(err))}finally{output_manager_default.stopSpinner()}let paused=projects.filter(project=>project.paused),unchanged=projects.filter(project=>!project.paused),team=TEAM_SLUG.test(contextName)?contextName:"<TEAM>",scope=team==="<TEAM>"?"":` --scope ${team}`,suggest=command=>buildCommandWithGlobalFlags(client.argv,`${command}${scope}`,void 0,{excludeFlags:scope?["--team"]:[]}),rerun=incomplete?suggest("project resume --all"):void 0;if(paused.length===0)return asJson?(writeResults(client,projects.map(toUnchangedResult),incomplete,rerun?{command:rerun,when:RERUN_WHEN}:void 0),incomplete?1:0):(output_manager_default.print(all?` No paused projects in ${import_chalk13.default.bold(contextName)}.
80
+ `:` Nothing to resume. ${formatNames(unchanged)} ${unchanged.length===1?"isn't":"aren't"} paused.
81
+ `),incomplete?(output_manager_default.warning(PAUSED_PROJECTS_INCOMPLETE),1):0);let count=(0,import_pluralize.default)("project",paused.length,!0);if((all||paused.length>1)&&!(yes&&teamNamed2))if(interactive){if(printAlignedLabel("Team",contextName),all&&printAlignedLabel("Projects",formatNames(paused)),unchanged.length>0&&printAlignedLabel("Not paused",formatNames(unchanged)),output_manager_default.print(`
82
+ `),!await client.input.confirm(`Resume production traffic for ${count}?`,!1))return output_manager_default.print(` Canceled. Nothing was changed.
83
+ `),130}else return refuse2(client,{reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Can't resume ${count} without --yes in non-interactive mode.`,command:`${buildCommandWithYes(client.argv)}${teamNamed2?"":` --scope ${team}`}`,when:`Only after a human approves resuming production traffic for ${count}${team==="<TEAM>"?". Replace <TEAM> with the team":` in ${team}`}`,userActionRequired:!0,hint:"Show the user the projects in data.projects and run the command in next[] only after they approve.",data:{team:contextName,effects:[`Resumes production traffic for ${count}.`],projects:paused.map(({id,name})=>({id,name}))}});let resumeStamp=stamp_default(),sema=new import_async_sema.default(UNPAUSE_CONCURRENCY),done=0;asJson||output_manager_default.spinner(`Resuming ${count}`);let results=await Promise.all(projects.map(async project=>{if(!project.paused)return toUnchangedResult(project);await sema.acquire();try{return await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/unpause`,{method:"POST"}),{id:project.id,name:project.name,outcome:"resumed"}}catch(err){return{id:project.id,name:project.name,...toFailure(err)}}finally{sema.release(),asJson||output_manager_default.spinner(`Resuming ${count} (${++done} done)`)}}));output_manager_default.stopSpinner();let notResumed=results.filter(result=>result.outcome==="failed"||result.outcome==="unknown"),retry=notResumed.length>0?suggest(`project resume ${notResumed.map(result=>result.id).join(" ")}${notResumed.length>1?" --yes":""}`):void 0;if(asJson){let next;return rerun?next={command:rerun,when:RERUN_WHEN}:retry&&(next={command:retry,when:RETRY_WHEN}),writeResults(client,results,incomplete,next),notResumed.length>0||incomplete?1:0}if(notResumed.length===0)printAlignedLabel("Resumed",`${count} ${import_chalk13.default.gray(resumeStamp())}`,{gutter:incomplete?void 0:"\u2713"}),unchanged.length>0&&printAlignedLabel("Not paused",formatNames(unchanged));else{let failed=notResumed.filter(result=>result.outcome==="failed"),unknown=notResumed.length-failed.length;output_manager_default.fatal([`Resumed ${paused.length-notResumed.length} of ${count}.`,failed.length>0&&`${failed.length} failed.`,unknown>0&&`${unknown} unknown.`].filter(Boolean).join(" "));for(let result of notResumed)printAlignedLabel(result.name,result.error.message)}return rerun?(output_manager_default.warning(PAUSED_PROJECTS_INCOMPLETE),output_manager_default.print(`
84
+ Run this again to resume the rest:
85
+ ${rerun}
86
+ `),1):retry?(output_manager_default.print(`
87
+ Resuming again is safe. Retry the ones that didn't resume:
88
+ ${retry}
89
+ `),1):0}function toUnchangedResult(project){return{id:project.id,name:project.name,outcome:"unchanged"}}function toFailure(err){return isAPIError(err)&&!GATEWAY_STATUSES.has(err.status)?err.status===404?{outcome:"failed",error:{code:AGENT_REASON.NOT_FOUND,message:"Project not found."}}:err.status===403?{outcome:"failed",error:{code:"forbidden",message:err.serverMessage||"You do not have permission to resume this project."}}:{outcome:"failed",error:{code:err.code||AGENT_REASON.API_ERROR,message:err.message}}:{outcome:"unknown",error:{code:AGENT_REASON.UNKNOWN_OUTCOME,message:`Couldn't confirm it resumed: ${err instanceof Error?err.message:String(err)}`}}}var RERUN_WHEN="To resume paused projects this run may have missed",RETRY_WHEN="To retry the projects that didn't resume. Resuming again is safe.";function writeResults(client,results,incomplete,next){let count=outcome=>results.filter(result=>result.outcome===outcome).length;client.stdout.write(`${JSON.stringify({results,summary:{succeeded:count("resumed"),failed:count("failed"),skipped:count("unchanged"),unknown:count("unknown")},...incomplete&&{warnings:[{reason:AGENT_REASON.INCOMPLETE_RESULTS,message:PAUSED_PROJECTS_INCOMPLETE}]},...next&&{next:[next]}},null,2)}
90
+ `)}function formatNames(projects){let names=projects.slice(0,LISTED_PROJECTS).map(project=>project.name),more=projects.length-names.length;return more>0?`${names.join(", ")} and ${more} more`:joinWords(names)}function refuse2(client,opts){let payload={status:AGENT_STATUS.ACTION_REQUIRED,reason:opts.reason,message:opts.message,userActionRequired:opts.userActionRequired,hint:opts.hint,next:[{command:opts.command,when:opts.when}],data:opts.data};return shouldEmitNonInteractiveCommandError(client)?(outputActionRequired(client,payload,2),2):(client.stdout.write(`${JSON.stringify(payload,null,2)}
91
+ `),2)}var import_chalk14=__toESM(require_source(),1);async function getOidcToken(client,argv){let flagsSpecification=getFlagsSpecification(tokenSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(client.nonInteractive=!0,args.length>1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk14.default.cyan(`${getCommandName("project token <name>")}`)}`),2;let[name]=args,project=await getProjectByCwdOrLink({autoConfirm:!!flags["--yes"],nonInteractive:!0,client,commandName:"project token",projectNameOrId:name});try{let res=await client.fetch(`/projects/${project.id}/token`,{method:"POST",accountId:project.accountId,body:JSON.stringify({source:"vercel-cli"}),headers:{"Content-Type":"application/json"}});return asJson?client.stdout.write(`${JSON.stringify({token:res.token},null,2)}
92
+ `):client.stdout.write(`${res.token}
93
+ `),0}catch(err){return isAPIError(err)&&err.status===404?(output_manager_default.error("No such project exists"),1):isAPIError(err)?(output_manager_default.error(err.message),1):(output_manager_default.error(`An unexpected error occurred!
94
+ ${err}`),1)}}var import_chalk15=__toESM(require_source(),1);async function setSpeedInsights(client,project,enabled,asJson){let result;try{let query=new URLSearchParams({projectId:project.id});result=await client.fetch(`/speed-insights/toggle?${query.toString()}`,{method:"POST",json:!0,body:{value:enabled}})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"speed-insights"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify({enabled:result.value,projectId:project.id,projectName:project.name},null,2)}
95
+ `),0):(output_manager_default.log(`Speed Insights is ${result.value?"enabled":"disabled"} for ${project.name}.`),0)}async function speedInsights(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(speedInsightsSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},2),printError(error),2}let firstArg=parsedArgs.args[0],hasActionWord=firstArg==="enable"||firstArg==="disable",action=firstArg==="disable"?"disable":"enable",projectNameOrId=hasActionWord?parsedArgs.args[1]:firstArg;if((hasActionWord?parsedArgs.args.slice(2):parsedArgs.args.slice(1)).length>0)return output_manager_default.error(`Invalid number of arguments. Usage: \`vercel project speed-insights ${hasActionWord?`${action} `:""}[name]\``),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(!canPrompt(client)){let globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2)).filter(flag=>flag!=="--non-interactive"),interactiveCommand=getCommandNamePlain(`project speed-insights ${action}${projectNameOrId?` ${projectNameOrId}`:""}${globalFlags.length?` ${globalFlags.join(" ")}`:""}`.trim());return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:action==="enable"?"Enabling Speed Insights adds a paid feature to this project and will incur charges on your account. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.":"Disabling Speed Insights stops performance data collection for this project. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.",userActionRequired:!0,hint:action==="enable"?"Surface this to the user; enabling a paid feature cannot be automated.":"Surface this to the user; disabling Speed Insights requires interactive confirmation.",next:[{command:interactiveCommand,when:"user runs this command in an interactive terminal"}]},1),output_manager_default.error(action==="enable"?"This command must be run interactively because enabling Speed Insights incurs charges.":"This command must be run interactively to disable Speed Insights."),1}let project;try{project=await getProjectByCwdOrLink({client,commandName:"project speed-insights",projectNameOrId,forReadOnlyCommand:!0})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"speed-insights"}),printError(err),1}if(action==="disable")return output_manager_default.print(prependEmoji(`Disabling Speed Insights for ${import_chalk15.default.bold(project.name)} will stop performance data collection for this project.
96
+ `,emoji("warning"))),await client.input.confirm(`Disable Speed Insights for ${project.name}?`,!1)?setSpeedInsights(client,project,!1,asJson):(output_manager_default.log("Canceled"),0);let isHobby=!1;try{let{team,user}=await getScope(client);isHobby=(team?.billing?.plan??user?.billing?.plan)==="hobby"}catch{isHobby=!1}return output_manager_default.print(prependEmoji(isHobby?`On the Hobby plan, Speed Insights is only available for one project.
97
+ `:`Enabling Speed Insights for ${import_chalk15.default.bold(project.name)} will incur charges on your account.
98
+ `,emoji("warning"))),await client.input.confirm(`Enable Speed Insights for ${project.name}?`,!1)?setSpeedInsights(client,project,!0,asJson):(output_manager_default.log("Canceled"),0)}var import_chalk16=__toESM(require_source(),1);var import_build_utils3=__toESM(require_build_utils(),1);var TEAM_SLUG_PATTERN=/^[a-z0-9][a-z0-9-]*$/;function projectTeamId(project){return project.accountId?.startsWith("team_")?project.accountId:void 0}async function isHobbyProject(client,project){try{let teamId=projectTeamId(project);return(teamId?(await getTeamByIdOrSlug(client,teamId,{useCurrentTeam:!1})).billing?.plan:(await getUser(client)).billing?.plan)==="hobby"}catch(err){return output_manager_default.debug(`Failed to resolve the project's billing plan: ${err instanceof Error?err.message:String(err)}`),!1}}function explicitAccountConflict(client,project){let orgId=(0,import_build_utils3.getPlatformEnv)("ORG_ID");return orgId&&orgId!==project.accountId?!0:scopeFlagPassed(client.argv)&&client.config.currentTeam!==projectTeamId(project)}function teamNamed(client,teamId){return scopeFlagPassed(client.argv)||(0,import_build_utils3.getPlatformEnv)("ORG_ID")===teamId}async function scopeValue(client,teamId){try{let team=await getTeamByIdOrSlug(client,teamId,{useCurrentTeam:!1});if(team.slug&&TEAM_SLUG_PATTERN.test(team.slug))return team.slug}catch(err){output_manager_default.debug(`Failed to resolve team ${teamId}: ${err instanceof Error?err.message:String(err)}`)}return teamId}async function projectLabel(client,project){let teamId=projectTeamId(project);return teamId?`${project.name} on team ${await scopeValue(client,teamId)}`:project.name}async function warnIfOutsideCurrentTeam(client,project){let currentTeam=client.config.currentTeam;if(!currentTeam||currentTeam===project.accountId)return;let teamId=projectTeamId(project),owner=teamId?`team ${await scopeValue(client,teamId)}`:"your personal account";output_manager_default.warn(`${project.name} belongs to ${owner}, not your current team. Using ${owner}.`)}async function refuseExplicitAccountConflict(client,opts){if(!explicitAccountConflict(client,opts.project))return;let teamId=projectTeamId(opts.project),ownerScope=teamId?await scopeValue(client,teamId):void 0,owner=ownerScope?`team ${ownerScope}`:"a personal account",message=`${opts.consequence} --scope or VERCEL_ORG_ID names a different account than the project's owner, ${owner}. Nothing was changed.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.CONFLICT,message,userActionRequired:!0,hint:ownerScope?`Check that the project link is correct. To act on ${owner}, pass --scope ${ownerScope} or set VERCEL_ORG_ID to that team's ID, once the user approves.`:"Check that the project link is correct, then run the command without --scope or VERCEL_ORG_ID."},1),output_manager_default.error(message),{kind:"refused",exitCode:1}}async function resolveProjectFeatureConsent(client,opts){let teamId=projectTeamId(opts.project),conflict=await refuseExplicitAccountConflict(client,opts);if(conflict)return conflict;let needsTeam=opts.billable&&teamId!==void 0&&!teamNamed(client,teamId);if(opts.yes&&!needsTeam)return{kind:"granted"};if(canPrompt(client))return{kind:"prompt",team:teamId?await scopeValue(client,teamId):void 0};let scope=needsTeam&&teamId?await scopeValue(client,teamId):void 0,missing=[...opts.yes?[]:["--yes"],...scope?["--scope"]:[]],nextCommand=buildCommandWithGlobalFlags(client.argv,`${opts.command} ${opts.action}${opts.projectArg?` ${quoteArg(opts.projectArg)}`:""} --yes${scope?` --scope ${scope}`:""}`),confirmWith=missing.join(" and "),message=`${opts.consequence} Confirm with ${confirmWith} to continue. Nothing was changed.`,reason=opts.yes?AGENT_REASON.MISSING_SCOPE:AGENT_REASON.CONFIRMATION_REQUIRED;return outputActionRequired(client,{status:AGENT_STATUS.ACTION_REQUIRED,reason,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message,userActionRequired:!0,missing,hint:"Ask the user to approve this change before running the next command. Do not add --yes without their approval.",next:[{command:nextCommand,when:`Only after the user approves the change${scope?` to team ${scope}`:""}`}]},1),output_manager_default.error(`${message}
99
+
100
+ Once approved, run:
101
+ ${nextCommand}`),{kind:"refused",exitCode:1}}async function setWebAnalytics(client,project,enabled,asJson){let result;try{let query=new URLSearchParams({projectId:project.id});result=await client.fetch(`/web/insights/toggle?${query.toString()}`,{method:"POST",json:!0,body:{value:enabled},accountId:project.accountId})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"web-analytics"}),printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify({enabled:result.value,projectId:project.id,projectName:project.name},null,2)}
102
+ `),0):(output_manager_default.log(`Web Analytics is ${result.value?"enabled":"disabled"} for ${await projectLabel(client,project)}.`),0)}async function webAnalytics(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(webAnalyticsDisableSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},2),printError(error),2}let firstArg=parsedArgs.args[0],hasActionWord=firstArg==="enable"||firstArg==="disable",action=firstArg==="disable"?"disable":"enable",projectNameOrId=hasActionWord?parsedArgs.args[1]:firstArg;if((hasActionWord?parsedArgs.args.slice(2):parsedArgs.args.slice(1)).length>0)return output_manager_default.error(`Invalid number of arguments. Usage: \`vercel project web-analytics ${hasActionWord?`${action} `:""}[name]\``),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,project;try{project=await getProjectByCwdOrLink({client,commandName:"project web-analytics",projectNameOrId,forReadOnlyCommand:!0})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"web-analytics"}),printError(err),1}if(action==="enable"){let conflict=await refuseExplicitAccountConflict(client,{project,consequence:`Can't enable Web Analytics for ${project.name}.`});return conflict?conflict.exitCode:(asJson||await warnIfOutsideCurrentTeam(client,project),setWebAnalytics(client,project,!0,asJson))}let isHobby=await isHobbyProject(client,project),consequence=`Disabling Web Analytics for ${project.name} will stop data collection for this project.`,consent=await resolveProjectFeatureConsent(client,{command:"project web-analytics",action,projectArg:projectNameOrId,project,billable:!isHobby,yes:!!parsedArgs.flags["--yes"],consequence});if(consent.kind==="refused")return consent.exitCode;if((consent.kind==="prompt"||!asJson)&&output_manager_default.print(prependEmoji(`Disabling Web Analytics for ${import_chalk16.default.bold(project.name)} will stop data collection for this project.
103
+ `,emoji("warning"))),consent.kind==="prompt"){let target=`${project.name}${consent.team?` on team ${consent.team}`:""}`;if(!await client.input.confirm(`Disable Web Analytics for ${target}?`,!1))return output_manager_default.log("Canceled"),0}return setWebAnalytics(client,project,!1,asJson)}var import_chalk17=__toESM(require_source(),1);async function setObservability(client,project,enabled,asJson){try{await client.fetch(`/v1/observability/manage/configuration/projects/${encodeURIComponent(project.id)}`,{method:"PUT",json:!0,body:{disabled:!enabled},accountId:project.accountId})}catch(err){if(isAPIError(err)){if(err.status===403)return output_manager_default.error(err.serverMessage||`You do not have permission to ${enabled?"enable":"disable"} Observability Plus for this project.`),1;if(err.status===404||err.status===402)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PLAN_LIMIT,message:`Couldn't ${enabled?"enable":"disable"} Observability Plus for ${await projectLabel(client,project)}. It may not be available on the current plan.`,userActionRequired:!0,hint:"Observability Plus needs a Pro or Enterprise team with the Observability Plus add-on. Ask a team owner to check the team's plan, then retry.",...err.serverMessage&&{data:{apiMessage:err.serverMessage}}},1),output_manager_default.error(err.serverMessage||`Observability Plus could not be ${enabled?"enabled":"disabled"} for ${project.name}. It may not be available on your current plan.`),err.link&&output_manager_default.log(`Learn more: ${err.link}`),1}return printError(err),1}return asJson?(client.stdout.write(`${JSON.stringify({enabled,projectId:project.id,projectName:project.name},null,2)}
104
+ `),0):(output_manager_default.log(`Observability Plus is ${enabled?"enabled":"disabled"} for ${await projectLabel(client,project)}.`),0)}async function observability(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(observabilityDisableSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},2),printError(error),2}let action=parsedArgs.args[0];if(action!=="enable"&&action!=="disable")return output_manager_default.error("Invalid arguments. Usage: `vercel project observability enable|disable [name]`"),2;if(parsedArgs.args.length>2)return output_manager_default.error(`Invalid number of arguments. Usage: \`vercel project observability ${action} [name]\``),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,nameArg=parsedArgs.args[1],project;try{project=await getProjectByCwdOrLink({client,commandName:"project observability",projectNameOrId:nameArg,forReadOnlyCommand:!0})}catch(error){return printError(error),1}if(action==="enable"){let conflict=await refuseExplicitAccountConflict(client,{project,consequence:`Can't enable Observability Plus for ${project.name}.`});return conflict?conflict.exitCode:(asJson||await warnIfOutsideCurrentTeam(client,project),setObservability(client,project,!0,asJson))}let consent=await resolveProjectFeatureConsent(client,{command:"project observability",action,projectArg:nameArg,project,billable:!0,yes:!!parsedArgs.flags["--yes"],consequence:`Disabling Observability Plus for ${project.name} will turn off enhanced observability for this project.`});if(consent.kind==="refused")return consent.exitCode;if((consent.kind==="prompt"||!asJson)&&output_manager_default.print(prependEmoji(`Disabling Observability Plus for ${import_chalk17.default.bold(project.name)} will turn off enhanced observability for this project.
105
+ `,emoji("warning"))),consent.kind==="prompt"){let target=`${project.name}${consent.team?` on team ${consent.team}`:""}`;if(!await client.input.confirm(`Disable Observability Plus for ${target}?`,!1))return output_manager_default.log("Canceled"),0}return setObservability(client,project,!1,asJson)}var import_chalk18=__toESM(require_source(),1);var PRODUCT="Priority project";function teamLabel(team){return team.name&&team.name!==team.slug?`${team.slug} (${team.name})`:team.slug}function emitJsonError(client,asJson,payload,exitCode){return asJson?(shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,payload,exitCode),writeAgentError(client,payload),!0):!1}function apiErrorReason(err){return err.code==="plan_not_supported"?AGENT_REASON.PLAN_UPGRADE_REQUIRED:err.status===403?"forbidden":err.status===402?"payment_required":err.status===401?"not_authorized":err.status===429?AGENT_REASON.RATE_LIMITED:AGENT_REASON.API_ERROR}function thrownErrorPayload(error){if(isAPIError(error))return{status:AGENT_STATUS.ERROR,reason:apiErrorReason(error),message:error.serverMessage||error.message};let message=error instanceof Error?error.message:String(error);return error instanceof ProjectNotFound?{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.PROJECT_NOT_FOUND,message}:error instanceof LinkRequiredError?{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.NOT_LINKED,message}:{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.API_ERROR,message}}function failUsage(client,asJson,message){return emitJsonError(client,asJson,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message},2)||output_manager_default.error(message),2}async function setPriority(client,project,enabled,asJson){try{await client.fetch(`/v1/security/priority?projectId=${encodeURIComponent(project.id)}`,{method:"POST",body:{enabled},accountId:project.accountId})}catch(err){if(isAPIError(err)){let message=err.serverMessage||`${PRODUCT} could not be ${enabled?"enabled":"disabled"} for ${project.name}.`,upgradeHint=err.code==="plan_not_supported"&&enabled?`Upgrade with ${getCommandName(`${BUY_PRO_COMMAND} --scope ${quoteArg(project.accountId)}`)}.`:void 0;return emitJsonError(client,asJson,{status:AGENT_STATUS.ERROR,reason:apiErrorReason(err),message,...upgradeHint?{hint:upgradeHint}:{}},1)||(output_manager_default.error(message),upgradeHint&&output_manager_default.log(upgradeHint)),1}return emitJsonError(client,asJson,thrownErrorPayload(err),1)||printError(err,client),1}return asJson?(client.stdout.write(`${JSON.stringify({enabled,projectId:project.id,projectName:project.name},null,2)}
106
+ `),0):(output_manager_default.log(`${PRODUCT} is ${enabled?"enabled":"disabled"} for ${project.name}.`),0)}function refuseEnablePlan(client,asJson,message,fix,reason=AGENT_REASON.PLAN_UPGRADE_REQUIRED){let payload={status:AGENT_STATUS.ERROR,reason,message,userActionRequired:!0,hint:fix?.hint,...fix?.command?{next:[{command:buildCommandWithGlobalFlags(client.argv,fix.command,void 0,{excludeFlags:["--non-interactive","--project","--yes",...fix.excludeFlags??[]]}),...fix.when?{when:fix.when}:{}}]}:{next:void 0}};return shouldEmitNonInteractiveCommandError(client)&&outputAgentError(client,payload,1),asJson?(writeAgentError(client,payload),1):(output_manager_default.error(message),fix?.hint&&output_manager_default.log(fix.hint),1)}async function enableableTeam(client,project,asJson){let accountId=project.accountId;if(!accountId?.startsWith("team_"))return refuseEnablePlan(client,asJson,`${PRODUCT} is only available on team accounts. Use --scope to specify one.`,void 0,AGENT_REASON.MISSING_SCOPE);let team;try{team=await getTeamByIdOrSlug(client,accountId,{useCurrentTeam:!1})}catch(error){return emitJsonError(client,asJson,thrownErrorPayload(error),1)||printError(error,client),1}return isProOrEnterprisePlan(team.billing?.plan)?team.billing?.status==="trialing"?refuseEnablePlan(client,asJson,`${PRODUCT} is not available during the Pro trial period.`):team:refuseEnablePlan(client,asJson,"Priority Projects are only available on Pro or Enterprise team plans.",targetRecovery(buyProFix(`Upgrade with ${getCommandName(BUY_PRO_COMMAND)}, then run ${getCommandName(PRIORITY_PROJECT_ENABLE_COMMAND)}.`),{projectName:project.name,scope:team.slug}))}async function priority(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(prioritySubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){let message=error instanceof Error?error.message:String(error);return client.nonInteractive&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message},2),emitJsonError(client,wantsMachineReadableOutput(void 0,argv),{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message},2)||printError(error,client),2}let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return failUsage(client,!1,formatResult.error);let asJson=formatResult.jsonOutput,action=parsedArgs.args[0];if(action!=="enable"&&action!=="disable")return failUsage(client,asJson,"Invalid arguments. Usage: `vercel project priority enable|disable [name]`");if(parsedArgs.args.length>2)return failUsage(client,asJson,`Invalid number of arguments. Usage: \`vercel project priority ${action} [name]\``);let nameArg=parsedArgs.args[1],project;try{project=await getProjectByCwdOrLink({client,commandName:"project priority",projectNameOrId:nameArg,forReadOnlyCommand:!0})}catch(error){return emitJsonError(client,asJson,thrownErrorPayload(error),1)||printError(error,client),1}let team;if(action==="enable"){let checked=await enableableTeam(client,project,asJson);if(typeof checked=="number")return checked;team=checked}else if(project.accountId?.startsWith("team_"))try{team=await getTeamByIdOrSlug(client,project.accountId,{useCurrentTeam:!1})}catch(error){return emitJsonError(client,asJson,thrownErrorPayload(error),1)||printError(error,client),1}if(!canPrompt(client)){let globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2)).filter(flag=>flag!=="--non-interactive"),interactiveCommand=getCommandNamePlain(`project priority ${action}${nameArg?` ${nameArg}`:""}${globalFlags.length?` ${globalFlags.join(" ")}`:""}`.trim()),target=team?`${project.name} on team ${team.slug}`:project.name,required={status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:action==="enable"?`Upgrading ${target} to Priority adds a paid feature and will incur charges on your account. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.`:`Removing Priority from ${target} turns off additional bot signals for this project. This cannot be confirmed non-interactively: the user must run this command in a terminal and confirm.`,userActionRequired:!0,hint:action==="enable"?"Surface this to the user; enabling a paid feature cannot be automated.":"Surface this to the user; removing Priority requires interactive confirmation.",next:[{command:interactiveCommand,when:"user runs this command in an interactive terminal"}]};return shouldEmitNonInteractiveCommandError(client)&&outputActionRequired(client,required,1),asJson?(client.stdout.write(`${JSON.stringify(required,null,2)}
107
+ `),1):(output_manager_default.error(action==="enable"?"This command must be run interactively because upgrading to Priority incurs charges.":"This command must be run interactively to remove Priority."),1)}return action==="disable"?(output_manager_default.print(prependEmoji(`Removing Priority from ${import_chalk18.default.bold(project.name)}${team?` on team ${import_chalk18.default.bold(teamLabel(team))}`:""} turns off its additional bot signals.
108
+ `,emoji("warning"))),await client.input.confirm(`Remove Priority from ${project.name}${team?` on ${team.slug}`:""}?`,!1)?setPriority(client,project,!1,asJson):(output_manager_default.log("Canceled"),0)):team?(output_manager_default.print(prependEmoji(`Upgrading ${import_chalk18.default.bold(project.name)} on team ${import_chalk18.default.bold(teamLabel(team))} to Priority will incur charges on your account.
109
+ `,emoji("warning"))),await client.input.confirm(`Upgrade ${project.name} on ${team.slug} to Priority?`,!1)?setPriority(client,project,!0,asJson):(output_manager_default.log("Canceled"),0)):refuseEnablePlan(client,asJson,`${PRODUCT} is only available on team accounts. Use --scope to specify one.`,void 0,AGENT_REASON.MISSING_SCOPE)}var import_chalk19=__toESM(require_source(),1),PROTECTION_ACTIONS=["enable","disable"],DEFAULT_SKEW_PROTECTION_MAX_AGE=2592e3,ENABLED_DEPLOYMENT_TYPE="prod_deployment_urls_and_all_previews",MAX_PROTECTION_PASSWORD_LENGTH=72;function validateProtectionPassword(value){let password=value.trim();return password===""?{ok:!1,message:"Invalid --protection-password: expected a non-empty password string."}:password.length>MAX_PROTECTION_PASSWORD_LENGTH?{ok:!1,message:`Invalid --protection-password: password must be at most ${MAX_PROTECTION_PASSWORD_LENGTH} characters.`}:{ok:!0,password}}function parseSkewMaxAgeSeconds(value){let trimmed=value.trim();if(trimmed===""||!/^\d+$/.test(trimmed))return{ok:!1,message:"Invalid --skew-max-age: expected a positive integer (seconds), e.g. 604800."};let n=Number(trimmed);return!Number.isSafeInteger(n)||n<=0?{ok:!1,message:"Invalid --skew-max-age: value must be a positive integer within safe range."}:{ok:!0,seconds:n}}var PROTECTION_KEYS=["passwordProtection","ssoProtection","skewProtectionMaxAge","customerSupportCodeVisibility","gitForkProtection","protectionBypass"];function isProtectionAction(v){return!!v&&PROTECTION_ACTIONS.includes(v)}async function protection(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(protectionEnableSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:error instanceof Error?error.message:String(error)},2),printError(error),2}let actionArg=parsedArgs.args[0],action=isProtectionAction(actionArg)?actionArg:void 0;if(!action&&parsedArgs.args.length>1)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:"Invalid arguments. Usage: `vercel project protection [name]`",next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection"),when:"Show deployment protection for the linked project"}]},2),output_manager_default.error("Invalid arguments. Usage: `vercel project protection [name]`"),2;if(action&&parsedArgs.args.length>2)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Invalid arguments. Usage: \`vercel project protection ${action} [name]\``,next:[{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action}`),when:"Retry with at most one project name"}]},2),output_manager_default.error(`Invalid arguments. Usage: \`vercel project protection ${action} [name]\``),2;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:formatResult.error},2),output_manager_default.error(formatResult.error),2;let preferJson=formatResult.jsonOutput||!!client.nonInteractive,skewMaxAgeFlag=parsedArgs.flags["--skew-max-age"];if(action==="disable"&&skewMaxAgeFlag!==void 0){let msg="`--skew-max-age` can only be used with `project protection enable`.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg,hint:"Use `project protection disable ... --skew` to turn skew protection off."},2),output_manager_default.error(msg),2}let enableSkewMaxAgeSeconds;if(action==="enable"&&skewMaxAgeFlag!==void 0){let parsed=parseSkewMaxAgeSeconds(skewMaxAgeFlag);if(!parsed.ok)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:parsed.message,hint:"Pass a positive integer number of seconds (e.g. 604800 for 7 days).",next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection enable --skew --skew-max-age 604800"),when:"Example with a valid max age in seconds"}]},2),output_manager_default.error(parsed.message),2;enableSkewMaxAgeSeconds=parsed.seconds}let ssoSelected=!!parsedArgs.flags["--sso"],passwordSelected=!!parsedArgs.flags["--password"],protectionPasswordFlag=parsedArgs.flags["--protection-password"],customerSupportCodeVisibilitySelected=!!parsedArgs.flags["--customer-support-code-visibility"],skewSelected=!!parsedArgs.flags["--skew"],bypassSelected=!!parsedArgs.flags["--protection-bypass"],protectionBypassSecret=parsedArgs.flags["--protection-bypass-secret"],gitForkProtectionSelected=!!parsedArgs.flags["--git-fork-protection"];if(protectionPasswordFlag!==void 0&&!passwordSelected){let msg="`--protection-password` requires `--password`. Usage: `vercel project protection enable [name] --password --protection-password <password>`";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg,hint:"Pass --password together with --protection-password when enabling password protection.",next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection enable --password --protection-password <password>"),when:"Replace <password> with the deployment protection password"}]},2),output_manager_default.error(msg),2}if(action==="disable"&&protectionPasswordFlag!==void 0){let msg="`--protection-password` can only be used with `project protection enable`.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:msg,hint:"Use `project protection disable ... --password` to turn password protection off."},2),output_manager_default.error(msg),2}let protectionPassword;if(action==="enable"&&protectionPasswordFlag!==void 0){let parsed=validateProtectionPassword(protectionPasswordFlag);if(!parsed.ok)return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message:parsed.message,hint:`Pass a password string up to ${MAX_PROTECTION_PASSWORD_LENGTH} characters.`,next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection enable --password --protection-password <password>"),when:"Replace <password> with a valid deployment protection password"}]},2),output_manager_default.error(parsed.message),2;protectionPassword=parsed.password}if(action&&!ssoSelected&&!passwordSelected&&!customerSupportCodeVisibilitySelected&&!skewSelected&&!bypassSelected&&!gitForkProtectionSelected){let msg="No protection selected. Pass --sso, --password, --customer-support-code-visibility, --skew, --protection-bypass, or --git-fork-protection. Usage: `vercel project protection enable|disable [name] --sso|--password|--customer-support-code-visibility|--skew|--protection-bypass|--git-fork-protection`";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:msg,hint:"Use `project protection enable|disable` with a protection flag (e.g. --sso, --password, --customer-support-code-visibility, --skew, --protection-bypass, or --git-fork-protection).",next:[{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --sso`),when:"Example: same action with SSO protection selected"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --password`),when:"Example: same action with password protection selected"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --customer-support-code-visibility`),when:"Example: same action with customer support code visibility selected"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --skew`),when:"Example: same action with skew protection selected"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --protection-bypass`),when:"Example: same action with automation protection bypass"},{command:buildCommandWithGlobalFlags(client.argv,`project protection ${action} --git-fork-protection`),when:"Example: same action with Git fork protection selected"}]},2),output_manager_default.error(msg),2}let project;try{project=await getProjectByCwdOrLink({client,commandName:"project protection",projectNameOrId:action?parsedArgs.args[1]:parsedArgs.args[0],forReadOnlyCommand:!action})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"protection"}),printError(err),1}let passwordProtection=project.passwordProtection;if(action==="enable"&&passwordSelected&&!passwordProtection){if(!canPrompt(client)){let message="Enabling Password Protection can incur charges. This cannot be confirmed non-interactively: run this command in an interactive terminal and type the project name to confirm, or enable it in the Vercel dashboard.",globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2)).filter(flag=>!flag.startsWith("--non-interactive")),interactiveCommand=getCommandNamePlain(`project protection enable ${project.id} --password${protectionPassword?" --protection-password <password>":""}${globalFlags.length?` ${globalFlags.join(" ")}`:""} --non-interactive=false`),payload={status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.INTERACTIVE_CONFIRMATION_REQUIRED,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message,userActionRequired:!0,hint:"Surface this to the user; activating a paid feature requires interactive confirmation.",next:[{command:interactiveCommand,when:protectionPassword?"User runs this in an interactive terminal; replace <password> with the desired protection password.":"User runs this command in an interactive terminal."}]};return preferJson?client.stdout.write(`${JSON.stringify(payload,null,2)}
110
+ `):output_manager_default.error(message),1}if(output_manager_default.print(`Enabling Password Protection for ${import_chalk19.default.bold(project.name)} can incur charges.
111
+ `),await client.input.text({message:`Type ${project.name} to confirm enabling Password Protection:`})!==project.name)return output_manager_default.log("Canceled"),0}if(action){let skewProtectionMaxAge=action==="enable"?enableSkewMaxAgeSeconds??DEFAULT_SKEW_PROTECTION_MAX_AGE:0;if(bypassSelected){if(action==="disable"&&!protectionBypassSecret){let secretMsg="Disabling protection bypass requires --protection-bypass-secret <secret>.";return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:secretMsg,hint:"Pass the existing automation bypass secret to revoke it.",next:[{command:buildCommandWithGlobalFlags(client.argv,"project protection disable --protection-bypass --protection-bypass-secret <secret>"),when:"Replace <secret> with the bypass secret to revoke"}]},2),output_manager_default.error(secretMsg),2}try{let bypassBody=action==="enable"?{generate:protectionBypassSecret?{secret:protectionBypassSecret}:{}}:{revoke:{secret:protectionBypassSecret,regenerate:!1}};await client.fetch(`/v1/projects/${encodeURIComponent(project.id)}/protection-bypass`,{method:"PATCH",body:bypassBody})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"protection"}),printError(err),1}}let patchBody={};if(ssoSelected&&(patchBody.ssoProtection=action==="enable"?{deploymentType:ENABLED_DEPLOYMENT_TYPE}:null),passwordSelected&&(patchBody.passwordProtection=action==="enable"?{deploymentType:ENABLED_DEPLOYMENT_TYPE,...protectionPassword?{password:protectionPassword}:{}}:null),customerSupportCodeVisibilitySelected&&(patchBody.customerSupportCodeVisibility=action==="enable"),skewSelected&&(patchBody.skewProtectionMaxAge=skewProtectionMaxAge),gitForkProtectionSelected&&(patchBody.gitForkProtection=action==="enable"),Object.keys(patchBody).length>0)try{await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{method:"PATCH",body:patchBody})}catch(err){return exitWithNonInteractiveError(client,err,1,{variant:"protection"}),printError(err),1}return preferJson?(client.stdout.write(`${JSON.stringify({action,projectId:project.id,projectName:project.name,ssoProtection:ssoSelected?action==="enable":void 0,passwordProtection:passwordSelected?action==="enable":void 0,customerSupportCodeVisibility:customerSupportCodeVisibilitySelected?action==="enable":void 0,skewProtection:skewSelected?action==="enable":void 0,...skewSelected?action==="enable"?{skewProtectionMaxAge}:{skewProtectionMaxAge:0}:{},protectionBypass:bypassSelected?action==="enable":void 0,gitForkProtection:gitForkProtectionSelected?action==="enable":void 0},null,2)}
112
+ `),0):(output_manager_default.log(`${import_chalk19.default.bold("Deployment protection")} ${action==="enable"?"enabled":"disabled"} for ${import_chalk19.default.cyan(project.name)}`),0)}let raw=project,slice={};for(let key of PROTECTION_KEYS)key in raw&&(slice[key]=raw[key]);if(preferJson)return client.stdout.write(`${JSON.stringify({projectId:project.id,name:project.name,...slice},null,2)}
113
+ `),0;if(output_manager_default.log(`${import_chalk19.default.bold("Protection settings")} for ${import_chalk19.default.cyan(project.name)} (${project.id})`),Object.keys(slice).length===0)return output_manager_default.log("No deployment protection fields returned for this project."),0;for(let[k,v]of Object.entries(slice))output_manager_default.log(`${import_chalk19.default.cyan(`${k}:`)} ${JSON.stringify(v)}`);return 0}var COMMAND_CONFIG={inspect:getCommandAliases(inspectSubcommand),list:getCommandAliases(listSubcommand),members:getCommandAliases(membersSubcommand),accessGroups:getCommandAliases(accessGroupsSubcommand),add:getCommandAliases(addSubcommand),"access-summary":getCommandAliases(accessSummarySubcommand),checks:getCommandAliases(checksSubcommand),protection:getCommandAliases(protectionSubcommand),update:getCommandAliases(updateSubcommand),rename:getCommandAliases(renameSubcommand),delete:getCommandAliases(removeSubcommand),token:getCommandAliases(tokenSubcommand),speedInsights:getCommandAliases(speedInsightsSubcommand),webAnalytics:getCommandAliases(webAnalyticsSubcommand),pause:getCommandAliases(pauseSubcommand),"dangerously-delete-immutable-static-asset":getCommandAliases(dangerouslyDeleteImmutableStaticAssetSubcommand),observability:getCommandAliases(observabilitySubcommand),priority:getCommandAliases(prioritySubcommand),resume:getCommandAliases(resumeSubcommand)};async function main(client){let telemetry=new ProjectTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(projectCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error,client),2}let{subcommand,args,subcommandOriginal}=getSubcommand(parsedArgs.args.slice(1),COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("project"),output_manager_default.print(help(projectCommand,{columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{parent:projectCommand,columns:client.stderr.columns})),0}parsedArgs.args[1]||(subcommand="list");let exitCode;switch(subcommand){case"inspect":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(inspectSubcommand);telemetry.trackCliSubcommandInspect(subcommandOriginal),exitCode=await inspect(client,args);break;case"list":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(listSubcommand);telemetry.trackCliSubcommandList(subcommandOriginal),exitCode=await list(client,args);break;case"add":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(addSubcommand);telemetry.trackCliSubcommandCreate(subcommandOriginal),subcommandOriginal==="add"&&warnDeprecatedSubcommand(client,"project add","project create"),exitCode=await add(client,args);break;case"access-summary":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(accessSummarySubcommand);telemetry.trackCliSubcommandAccessSummary(subcommandOriginal),subcommandOriginal==="summary"&&warnDeprecatedSubcommand(client,"project summary","project access-summary"),exitCode=await accessSummary(client,args);break;case"checks":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(checksSubcommand);telemetry.trackCliSubcommandChecks(args[0]==="add"?"checks add":args[0]==="remove"||args[0]==="rm"?"checks remove":subcommandOriginal),exitCode=await checks(client,args);break;case"members":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(membersSubcommand);telemetry.trackCliSubcommandMembers(args[0]==="add"?"members add":args[0]==="remove"||args[0]==="rm"?"members remove":subcommandOriginal),exitCode=await members(client,args);break;case"accessGroups":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(accessGroupsSubcommand);telemetry.trackCliSubcommandAccessGroups(subcommandOriginal),subcommandOriginal==="accessgroups"&&warnDeprecatedSubcommand(client,"project accessgroups","project access-groups"),exitCode=await accessGroups(client,args);break;case"protection":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(protectionSubcommand);telemetry.trackCliSubcommandProtection(args[0]==="enable"?"protection enable":args[0]==="disable"?"protection disable":subcommandOriginal),exitCode=await protection(client,args);break;case"webAnalytics":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(webAnalyticsSubcommand);telemetry.trackCliSubcommandWebAnalytics(args[0]==="enable"?"web-analytics enable":args[0]==="disable"?"web-analytics disable":subcommandOriginal),exitCode=await webAnalytics(client,args);break;case"speedInsights":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(speedInsightsSubcommand);telemetry.trackCliSubcommandSpeedInsights(args[0]==="enable"?"speed-insights enable":args[0]==="disable"?"speed-insights disable":subcommandOriginal),exitCode=await speedInsights(client,args);break;case"pause":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(pauseSubcommand);telemetry.trackCliSubcommandPause(subcommandOriginal),exitCode=await pause(client,args);break;case"dangerously-delete-immutable-static-asset":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(dangerouslyDeleteImmutableStaticAssetSubcommand);telemetry.trackCliSubcommandDangerouslyDeleteImmutableStaticAsset(subcommandOriginal),exitCode=await dangerouslyDeleteImmutableStaticAsset(client,args);break;case"observability":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(observabilitySubcommand);telemetry.trackCliSubcommandObservability(args[0]==="enable"?"observability enable":args[0]==="disable"?"observability disable":subcommandOriginal),exitCode=await observability(client,args);break;case"priority":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(prioritySubcommand);telemetry.trackCliSubcommandPriority(args[0]==="enable"?"priority enable":args[0]==="disable"?"priority disable":subcommandOriginal),subcommandOriginal==="priority-project"&&warnDeprecatedSubcommand(client,"project priority-project","project priority"),exitCode=await priority(client,args);break;case"resume":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(resumeSubcommand);telemetry.trackCliSubcommandResume(subcommandOriginal),subcommandOriginal==="unpause"&&warnDeprecatedSubcommand(client,"project unpause","project resume"),exitCode=await resume(client,args);break;case"token":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(tokenSubcommand);telemetry.trackCliSubcommandToken(subcommandOriginal),exitCode=await getOidcToken(client,args);break;case"rename":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(renameSubcommand);telemetry.trackCliSubcommandRename(subcommandOriginal),exitCode=await rename(client,args);break;case"update":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(updateSubcommand);telemetry.trackCliSubcommandUpdate(subcommandOriginal),subcommandOriginal==="set"&&warnDeprecatedSubcommand(client,"project set","project update"),exitCode=await update(client,args);break;case"delete":if(needHelp)return telemetry.trackCliFlagHelp("project",subcommandOriginal),printHelp(removeSubcommand);telemetry.trackCliSubcommandDelete(subcommandOriginal),subcommandOriginal==="remove"&&warnDeprecatedSubcommand(client,"project remove","project delete"),exitCode=await rm(client,args);break;default:{if(handleCommandTypo({client,command:parsedArgs.args[1],availableCommands:projectCommand.subcommands}))return 2;let fallback=await tryOpenApiFallback(client,parsedArgs.args.slice(1),resolveOpenApiTagForProjectsCli);if(fallback!==null){exitCode=fallback;break}return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG)),output_manager_default.print(help(projectCommand,{columns:client.stderr.columns})),2}}return exitCode}export{main as default};