vercel 62.5.0 → 62.7.0

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 (169) hide show
  1. package/README.md +2 -0
  2. package/dist/chunks/{add-SUDX7R63.js → add-OXHI3PVM.js} +1 -1
  3. package/dist/chunks/{add-UNQJB3SM.js → add-P3FNSVMN.js} +1 -1
  4. package/dist/chunks/{add-HN4OXQLM.js → add-WUT6QU2J.js} +1 -1
  5. package/dist/chunks/{build-BRMOQZHW.js → build-J6VW3KHT.js} +1 -1
  6. package/dist/chunks/{chunk-B3MYIRFE.js → chunk-2KSNNB4B.js} +1 -1
  7. package/dist/chunks/{chunk-QMTPSHRV.js → chunk-3XLK5ZPD.js} +5 -5
  8. package/dist/chunks/{chunk-TEYG3UZQ.js → chunk-3ZMD36SU.js} +1 -1
  9. package/dist/chunks/{chunk-TG6SMD7D.js → chunk-46UCIIJN.js} +1 -1
  10. package/dist/chunks/{chunk-XMV7OSFJ.js → chunk-4H5LPD3T.js} +1 -1
  11. package/dist/chunks/{chunk-PQV3QNDG.js → chunk-4KQBTIMZ.js} +1 -1
  12. package/dist/chunks/{chunk-QCOPZAUC.js → chunk-4QSVBLAS.js} +1 -1
  13. package/dist/chunks/{chunk-WNG72BRT.js → chunk-5AXNGQJC.js} +1 -1
  14. package/dist/chunks/{chunk-DOWDSQPG.js → chunk-5JN3FWV2.js} +1 -1
  15. package/dist/chunks/{chunk-PY6YO4MR.js → chunk-5M45EBVX.js} +2 -2
  16. package/dist/chunks/{chunk-X7F3567X.js → chunk-5ZQF5WIO.js} +1 -1
  17. package/dist/chunks/{chunk-6LOW7CGD.js → chunk-6DJ6PMEK.js} +1 -1
  18. package/dist/chunks/{chunk-NDZOUAFO.js → chunk-6EW4BCMR.js} +1 -1
  19. package/dist/chunks/{chunk-RHUAFRZX.js → chunk-A73N3QKT.js} +1 -1
  20. package/dist/chunks/{chunk-CAAD55US.js → chunk-AEEEEOYS.js} +1 -1
  21. package/dist/chunks/chunk-APSIFBD4.js +7 -0
  22. package/dist/chunks/{chunk-MCOJUSDV.js → chunk-B2L2QTXT.js} +1 -1
  23. package/dist/chunks/{chunk-ZXDS7NJI.js → chunk-BHBNTQRT.js} +1 -1
  24. package/dist/chunks/{chunk-OYWYHFXV.js → chunk-CF2PIWRO.js} +1 -1
  25. package/dist/chunks/{chunk-733ZK37Y.js → chunk-CR2ZQBDU.js} +1 -1
  26. package/dist/chunks/{chunk-5CSWEE7J.js → chunk-CRITS7IX.js} +1 -1
  27. package/dist/chunks/{chunk-4BRFG5HP.js → chunk-DGH5CD6D.js} +1 -1
  28. package/dist/chunks/{chunk-PD3ZD52Q.js → chunk-ECMWDZTJ.js} +4 -4
  29. package/dist/chunks/{chunk-AMSFO2VK.js → chunk-EQ24OC5G.js} +1 -1
  30. package/dist/chunks/{chunk-D6JBONML.js → chunk-FAJB3JV5.js} +1 -1
  31. package/dist/chunks/chunk-FB3U3RAM.js +9 -0
  32. package/dist/chunks/{chunk-72YTT324.js → chunk-FEEG5UU2.js} +1 -1
  33. package/dist/chunks/{chunk-5NSYN7IO.js → chunk-FQJCWZ4C.js} +1 -1
  34. package/dist/chunks/{chunk-LGFCHU75.js → chunk-GMTLVRN7.js} +1 -1
  35. package/dist/chunks/{chunk-UXAYYF6I.js → chunk-GUTZ45DE.js} +1 -1
  36. package/dist/chunks/{chunk-5QVOIOPN.js → chunk-I5JR7PIO.js} +1 -1
  37. package/dist/chunks/{chunk-ST2X5QRA.js → chunk-IEKUTNKT.js} +1 -1
  38. package/dist/chunks/{chunk-L57FNGBV.js → chunk-K2RQEX7N.js} +1 -1
  39. package/dist/chunks/{chunk-O552UV4H.js → chunk-KXMVFT2K.js} +1 -1
  40. package/dist/chunks/{chunk-ZX2JOGOA.js → chunk-LCH3SUJ7.js} +1 -1
  41. package/dist/chunks/{chunk-HVJERSGE.js → chunk-LWQVT6YW.js} +1 -1
  42. package/dist/chunks/chunk-LXNMVWYO.js +9 -0
  43. package/dist/chunks/{chunk-MQW6DKD2.js → chunk-LYKPLTZ7.js} +1 -1
  44. package/dist/chunks/chunk-M3HO5CTQ.js +7 -0
  45. package/dist/chunks/{chunk-WJZV7BI4.js → chunk-M4IVLSNQ.js} +1 -1
  46. package/dist/chunks/{chunk-ILR6YA2A.js → chunk-M5NWE7EO.js} +1 -1
  47. package/dist/chunks/{chunk-3J2P52OU.js → chunk-MCBO6LL7.js} +2 -2
  48. package/dist/chunks/{chunk-2FQCZE6S.js → chunk-MIG67KZ2.js} +1 -1
  49. package/dist/chunks/{chunk-4WS3D23J.js → chunk-NM67DIPQ.js} +1 -1
  50. package/dist/chunks/{chunk-W6M24BQ4.js → chunk-NYFB3EYC.js} +1 -1
  51. package/dist/chunks/chunk-O3UY73UQ.js +7 -0
  52. package/dist/chunks/chunk-ONPJXQQ6.js +10 -0
  53. package/dist/chunks/chunk-ORJGSUQT.js +9 -0
  54. package/dist/chunks/{chunk-HRQQ2N5B.js → chunk-PE7QZUY7.js} +1 -1
  55. package/dist/chunks/{chunk-MR423MWE.js → chunk-Q2YQSMIB.js} +6 -6
  56. package/dist/chunks/{chunk-C7SLCL3Z.js → chunk-Q7AYTXUR.js} +1 -1
  57. package/dist/chunks/{chunk-EPBZNTIJ.js → chunk-QZ2G3AMY.js} +1 -1
  58. package/dist/chunks/{chunk-P3ZZVBZQ.js → chunk-RMZJP32R.js} +1 -1
  59. package/dist/chunks/{chunk-P3YADO62.js → chunk-RSLPLRVK.js} +1 -1
  60. package/dist/chunks/{chunk-AJT64XO2.js → chunk-RYMRVMGD.js} +2 -2
  61. package/dist/chunks/{chunk-MHKDLJEI.js → chunk-SMC4MGY5.js} +1 -1
  62. package/dist/chunks/{chunk-ZFYW4CEL.js → chunk-SR5XEF7L.js} +1 -1
  63. package/dist/chunks/{chunk-PTKSYVXM.js → chunk-TAT5WGDZ.js} +1 -1
  64. package/dist/chunks/{chunk-GXNSAACA.js → chunk-THB7KY2N.js} +1 -1
  65. package/dist/chunks/{chunk-TNGDWVMX.js → chunk-UKMRJIIZ.js} +1 -1
  66. package/dist/chunks/{chunk-MUJP4VPF.js → chunk-UKVEXM5O.js} +1 -1
  67. package/dist/chunks/{chunk-MJWC4W6J.js → chunk-ULHETT7U.js} +1 -1
  68. package/dist/chunks/{chunk-2E6XILZC.js → chunk-UOZHC2ZG.js} +1 -1
  69. package/dist/chunks/{chunk-RERUTI3O.js → chunk-V426AGVC.js} +2 -2
  70. package/dist/chunks/{chunk-6ALOD3OE.js → chunk-V6Y6UK6B.js} +2 -4
  71. package/dist/chunks/{chunk-DWPCZHDT.js → chunk-VWBJWUYQ.js} +1 -1
  72. package/dist/chunks/{chunk-TN4IR2LY.js → chunk-WNTA7DCC.js} +1 -1
  73. package/dist/chunks/{chunk-VMHUBZRU.js → chunk-XQQ7DTQG.js} +1 -1
  74. package/dist/chunks/{chunk-UKC3NSS6.js → chunk-YEWZFZ2O.js} +1 -1
  75. package/dist/chunks/{chunk-P4BGC5RL.js → chunk-YGMOJBSP.js} +2 -2
  76. package/dist/chunks/{chunk-65Z5UPUC.js → chunk-YKOIVWZI.js} +1 -1
  77. package/dist/chunks/{chunk-X7U35FBE.js → chunk-YTIANIL7.js} +1 -1
  78. package/dist/chunks/chunk-YUDKK2QJ.js +7 -0
  79. package/dist/chunks/{chunk-DQXGNNPB.js → chunk-YZBYL3SH.js} +1 -1
  80. package/dist/chunks/{chunk-4AY4YYKS.js → chunk-ZN37NQM4.js} +1 -1
  81. package/dist/chunks/{chunk-W45NZSSK.js → chunk-ZNQI6M3S.js} +1 -1
  82. package/dist/chunks/{clear-M6LODAMD.js → clear-VMJVLPVR.js} +1 -1
  83. package/dist/chunks/{compile-vercel-config-NBX5UWHW.js → compile-vercel-config-YCLXPL5H.js} +1 -1
  84. package/dist/chunks/{config-Q3TRA4NK.js → config-JPX6NJMJ.js} +1 -1
  85. package/dist/chunks/{config-YQ7FIAFK.js → config-YMUUPO3R.js} +1 -1
  86. package/dist/chunks/config-validator.mjs +1 -1
  87. package/dist/chunks/{connect-git-provider-67DJOI6X.js → connect-git-provider-KLSBCSD2.js} +1 -1
  88. package/dist/chunks/{delete-KSZ7R5V6.js → delete-E7J4B5E5.js} +1 -1
  89. package/dist/chunks/{delete-NRWKSTCN.js → delete-EEY7M6XT.js} +1 -1
  90. package/dist/chunks/{detect-services-MWYUJZJZ.js → detect-services-E2TWAKQS.js} +1 -1
  91. package/dist/chunks/{disable-BUGWQUS7.js → disable-5TKY6JK2.js} +1 -1
  92. package/dist/chunks/{discard-J5O3C753.js → discard-ALSOF66H.js} +1 -1
  93. package/dist/chunks/{edit-DMOIBVEP.js → edit-2M3KEE3H.js} +1 -1
  94. package/dist/chunks/{edit-YRWAXGEI.js → edit-ISUCMYNW.js} +1 -1
  95. package/dist/chunks/{enable-IL27VHSU.js → enable-2QTTTYQD.js} +1 -1
  96. package/dist/chunks/{exec-GYSSNCNK.js → exec-XIQJ2A3J.js} +1 -1
  97. package/dist/chunks/{export-HBUUGMGE.js → export-PV2NDS7C.js} +1 -1
  98. package/dist/chunks/{future-BXETJ6CT.js → future-SQS5POAL.js} +1 -1
  99. package/dist/chunks/{generate-cert-for-deploy-K5QDHEEQ.js → generate-cert-for-deploy-4EJRA7MS.js} +1 -1
  100. package/dist/chunks/{image-M2XIQYXT.js → image-6GL2UOA2.js} +1 -1
  101. package/dist/chunks/{import-builders-UGIWTKRS.js → import-builders-KAZMYQCR.js} +1 -1
  102. package/dist/chunks/{inspect-SUEMHSB6.js → inspect-3HGROSZO.js} +1 -1
  103. package/dist/chunks/{inspect-XANEFWYN.js → inspect-FK6GC5JZ.js} +1 -1
  104. package/dist/chunks/{inspect-TDHISMRV.js → inspect-LZMU7RIU.js} +1 -1
  105. package/dist/chunks/{inspect-HASOG2PB.js → inspect-ORVORGUM.js} +1 -1
  106. package/dist/chunks/{inspect-OGUGKPVK.js → inspect-UNL54246.js} +1 -1
  107. package/dist/chunks/{list-32NXD7OW.js → list-EWJI2WSQ.js} +1 -1
  108. package/dist/chunks/{list-Q566PTT4.js → list-FVUIZPC7.js} +1 -1
  109. package/dist/chunks/{list-Z6DRFZ7F.js → list-WOUJM4WR.js} +1 -1
  110. package/dist/chunks/{login-GPCBSMHV.js → login-IJLY5XTT.js} +1 -1
  111. package/dist/chunks/{login-A6R3RQIW.js → login-JREQ7SLY.js} +1 -1
  112. package/dist/chunks/{logs-L33R4G67.js → logs-Z7IMGFO2.js} +1 -1
  113. package/dist/chunks/{ls-VSK2ZFSY.js → ls-4COX4SMJ.js} +1 -1
  114. package/dist/chunks/{ls-6CYMQBX3.js → ls-6CD2OQGA.js} +1 -1
  115. package/dist/chunks/{ls-CTIACPC5.js → ls-6DOYSBQM.js} +1 -1
  116. package/dist/chunks/{ls-DUCIK4E6.js → ls-AHT2FRGM.js} +1 -1
  117. package/dist/chunks/{ls-R442RADW.js → ls-LXBUE4LZ.js} +1 -1
  118. package/dist/chunks/{ls-JPL3AFIM.js → ls-RBWPVJ5G.js} +1 -1
  119. package/dist/chunks/{ls-GDR45ANC.js → ls-W5SJUIHD.js} +1 -1
  120. package/dist/chunks/{mutate-MUWQVZKM.js → mutate-TVUHBRBK.js} +1 -1
  121. package/dist/chunks/{notifications-YKGIFXKO.js → notifications-OXOSD6UK.js} +1 -1
  122. package/dist/chunks/{open-OJAIEDS5.js → open-SWPHB54M.js} +1 -1
  123. package/dist/chunks/{openapi-Y4NWAKUM.js → openapi-32XHDVJL.js} +1 -1
  124. package/dist/chunks/{permissions-LWKZBBU7.js → permissions-A4WMGETJ.js} +1 -1
  125. package/dist/chunks/{prompt-missing-credentials-O3GGMOZH.js → prompt-missing-credentials-6IXO6VND.js} +1 -1
  126. package/dist/chunks/{publish-JHNLZT6K.js → publish-2CS4RYJW.js} +1 -1
  127. package/dist/chunks/pull-WWUH4M5V.js +7 -0
  128. package/dist/chunks/{purchase-domain-if-available-CJK3G4DT.js → purchase-domain-if-available-TAXCYIV7.js} +1 -1
  129. package/dist/chunks/{push-MUMGVOSY.js → push-OPRW7M4I.js} +1 -1
  130. package/dist/chunks/{query-2TTSDOFF.js → query-22PGP7BC.js} +1 -1
  131. package/dist/chunks/{reauthenticate-S47X66LM.js → reauthenticate-LMR25CIE.js} +1 -1
  132. package/dist/chunks/{reorder-NGBZWNZH.js → reorder-Y3NMEA2S.js} +1 -1
  133. package/dist/chunks/{reply-5WF5YHOM.js → reply-YEZHST2Q.js} +1 -1
  134. package/dist/chunks/{resolve-MPZBUK5V.js → resolve-QC37E2EB.js} +1 -1
  135. package/dist/chunks/{restore-NVY4A3T3.js → restore-RMQVGYQB.js} +1 -1
  136. package/dist/chunks/{rm-ZO5JP3GF.js → rm-42U6SPVV.js} +1 -1
  137. package/dist/chunks/{rm-HFJCOK2D.js → rm-43MPIHP3.js} +1 -1
  138. package/dist/chunks/{rm-QXQ2AD4R.js → rm-4MSUYUEP.js} +1 -1
  139. package/dist/chunks/{rm-DB5K2RI7.js → rm-DPHE34CD.js} +1 -1
  140. package/dist/chunks/{rm-SMKVHN75.js → rm-JHWXYHJY.js} +1 -1
  141. package/dist/chunks/{routes-KO5NFCCJ.js → routes-2GTCE542.js} +1 -1
  142. package/dist/chunks/{rule-inspect-VZARLRS3.js → rule-inspect-7LIPL5YY.js} +1 -1
  143. package/dist/chunks/{rules-G2WFYCPB.js → rules-6KWBVUF2.js} +1 -1
  144. package/dist/chunks/{schema-SVYU72YU.js → schema-OUFU5V7Z.js} +1 -1
  145. package/dist/chunks/{schema-G6BOZBNB.js → schema-S2DE7S5N.js} +1 -1
  146. package/dist/chunks/{select-org-2W67WKBG.js → select-org-EL66MG67.js} +1 -1
  147. package/dist/chunks/{set-ILVKMTUD.js → set-VXSNREF4.js} +1 -1
  148. package/dist/chunks/setup-and-link-I7SGZNGO.js +7 -0
  149. package/dist/chunks/{tags-C34XXMYO.js → tags-AGLQDT3Z.js} +1 -1
  150. package/dist/chunks/{types-MATC4UQL.js → types-GQNKYZJH.js} +1 -1
  151. package/dist/chunks/{update-IVWOZO4P.js → update-TI3YRVQT.js} +1 -1
  152. package/dist/commands/build/index.js +7 -7
  153. package/dist/commands/deploy/index.js +44 -28
  154. package/dist/commands/dev/index.js +8 -8
  155. package/dist/commands/env/index.js +1 -1
  156. package/dist/commands/link/index.js +1 -1
  157. package/dist/commands/list/index.js +1 -1
  158. package/dist/commands-bulk.js +35 -39
  159. package/dist/index.js +6 -5
  160. package/dist/internal-build.js +1 -1
  161. package/dist/version.mjs +1 -1
  162. package/package.json +54 -53
  163. package/dist/chunks/chunk-2Z47VG5H.js +0 -9
  164. package/dist/chunks/chunk-EA3BJUUK.js +0 -7
  165. package/dist/chunks/chunk-EJNFKH6Y.js +0 -10
  166. package/dist/chunks/chunk-NTRM6VO6.js +0 -9
  167. package/dist/chunks/chunk-SX64OM5A.js +0 -7
  168. package/dist/chunks/pull-E4K6BVQW.js +0 -7
  169. package/dist/chunks/setup-and-link-VFCYLLB5.js +0 -7
@@ -4,49 +4,65 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
- import{isIgnoredFile,singleFileConfig,singleFileProjectSettings,validatePaths,validateRootDirectory}from"../../chunks/chunk-ZFYW4CEL.js";import{promptExperimentalServicesMigration}from"../../chunks/chunk-4BRFG5HP.js";import"../../chunks/chunk-SX64OM5A.js";import{DeployTelemetryClient,Now,UploadErrorMissingArchive,getBuildMachineResourceConfig,getProductionUrl,printDeploymentStatus,printPrebuiltFilePathMapIgnoreWarning}from"../../chunks/chunk-P4BGC5RL.js";import"../../chunks/chunk-NDZOUAFO.js";import{parseRepoUrl}from"../../chunks/chunk-TNGDWVMX.js";import"../../chunks/chunk-2H77IRPI.js";import{pickOverrides}from"../../chunks/chunk-X7F3567X.js";import{require_dist as require_dist2}from"../../chunks/chunk-AJT64XO2.js";import"../../chunks/chunk-G3NHWIPJ.js";import{compileVercelConfig}from"../../chunks/chunk-D6JBONML.js";import"../../chunks/chunk-OHDEHZLX.js";import"../../chunks/chunk-M2W3HKV3.js";import"../../chunks/chunk-PHW54NU5.js";import"../../chunks/chunk-U56NHYAH.js";import{require_ci_info}from"../../chunks/chunk-T52FMXWC.js";import"../../chunks/chunk-NNP5NITU.js";import"../../chunks/chunk-L3JDEHCQ.js";import"../../chunks/chunk-PD3ZD52Q.js";import"../../chunks/chunk-TRTEXGVN.js";import"../../chunks/chunk-T3GQAMBJ.js";import"../../chunks/chunk-P2O5DOYE.js";import{isGuidanceEnabled}from"../../chunks/chunk-72YTT324.js";import{stamp_default}from"../../chunks/chunk-XPXOV5UO.js";import{getSubcommand}from"../../chunks/chunk-ETV3C2CV.js";import"../../chunks/chunk-OI263FBO.js";import{ensureLink,parseEnv}from"../../chunks/chunk-EA3BJUUK.js";import"../../chunks/chunk-O552UV4H.js";import"../../chunks/chunk-23NBYS6R.js";import{continueSubcommand,deployCommand,deprecatedArchiveSplitTgz,getCommandAliases,initSubcommand}from"../../chunks/chunk-RERUTI3O.js";import"../../chunks/chunk-O5A7CNRV.js";import"../../chunks/chunk-774D3BGN.js";import"../../chunks/chunk-MOLEXKVC.js";import"../../chunks/chunk-EDDOQXEI.js";import"../../chunks/chunk-35QK5NDD.js";import"../../chunks/chunk-M4IWOZEG.js";import"../../chunks/chunk-OQVE2WXX.js";import"../../chunks/chunk-7SNMU7U7.js";import"../../chunks/chunk-6C4RPAG7.js";import"../../chunks/chunk-DZZFEAM6.js";import"../../chunks/chunk-S54ISKGR.js";import"../../chunks/chunk-WOTPEBSH.js";import"../../chunks/chunk-YW5R6XQI.js";import"../../chunks/chunk-ZTUQEA2X.js";import"../../chunks/chunk-JKTQV2QJ.js";import"../../chunks/chunk-P3YADO62.js";import"../../chunks/chunk-H3QRCTIJ.js";import"../../chunks/chunk-FAW6NBLQ.js";import"../../chunks/chunk-2I64AYHG.js";import"../../chunks/chunk-HVJERSGE.js";import"../../chunks/chunk-SOJCELXH.js";import{param}from"../../chunks/chunk-SXUEGVWB.js";import{parseMeta}from"../../chunks/chunk-CZSOZKHX.js";import"../../chunks/chunk-JZRMH5UA.js";import{parseTarget}from"../../chunks/chunk-MCOJUSDV.js";import{getDeployment}from"../../chunks/chunk-UKC3NSS6.js";import{mapCertError}from"../../chunks/chunk-DQXGNNPB.js";import"../../chunks/chunk-JNLWD6DK.js";import{help}from"../../chunks/chunk-W6M24BQ4.js";import{table}from"../../chunks/chunk-6TAQ6OWD.js";import{printError}from"../../chunks/chunk-2Z47VG5H.js";import{AGENT_REASON,AGENT_STATUS,buildCommandWithYes,outputAgentError,withGlobalFlags}from"../../chunks/chunk-EJNFKH6Y.js";import"../../chunks/chunk-WPS6JZF6.js";import"../../chunks/chunk-OSCCYU74.js";import{validateJsonOutput}from"../../chunks/chunk-D4MW3RDW.js";import{highlight,readLocalConfig}from"../../chunks/chunk-GXNSAACA.js";import"../../chunks/chunk-CAAD55US.js";import{require_ms}from"../../chunks/chunk-QTKJC2O5.js";import"../../chunks/chunk-3J2P52OU.js";import"../../chunks/chunk-RCTYVKM5.js";import"../../chunks/chunk-7T6TL3GQ.js";import"../../chunks/chunk-BRK4OB4B.js";import{require_types}from"../../chunks/chunk-GHM7V3GG.js";import"../../chunks/chunk-5XJNPXQK.js";import"../../chunks/chunk-MY4MONOH.js";import{parseArguments}from"../../chunks/chunk-MQW6DKD2.js";import{quoteArg}from"../../chunks/chunk-BKV35LVB.js";import{getFlagsSpecification}from"../../chunks/chunk-5IPBCD7K.js";import{VERCEL_DIR,VERCEL_DIR_PROJECT,addToGitIgnore,createGitMeta,getGitConfigPath,getGitExecutable,getLinkFromDir,getRepoLink,getVercelDirectory,isOwnerLookupUnavailableLink,isRemoteLookupSkippedLink,linkFolderToProject,parseGitConfig,pluckRemoteUrls,require_lib}from"../../chunks/chunk-QMTPSHRV.js";import"../../chunks/chunk-B4ATVYZW.js";import"../../chunks/chunk-F2ZWW2IO.js";import"../../chunks/chunk-PPCFQQSU.js";import{printAlignedLabel}from"../../chunks/chunk-QCOPZAUC.js";import"../../chunks/chunk-HRQQ2N5B.js";import"../../chunks/chunk-VOZEB6PD.js";import{AliasDomainConfigured,BuildError,BuildsRateLimited,ConflictingConfigFiles,ConflictingFilePath,ConflictingPathSegment,DeploymentNotFound,DeploymentsRateLimited,DeprecatedNowJson,DomainNotFound,DomainNotVerified,DomainPermissionDenied,DomainVerificationFailed,InvalidDomain,MissingBuildScript,NotDomainOwner,NowError,SchemaValidationFailed,TooManyRequests,UserAborted,code,isAPIError,require_bytes}from"../../chunks/chunk-4WS3D23J.js";import{getCommandName,packageName}from"../../chunks/chunk-FI772UVH.js";import{emoji,link_default,output_manager_default,prependEmoji,require_build_utils}from"../../chunks/chunk-MR423MWE.js";import{require_dist}from"../../chunks/chunk-QGIQK47P.js";import"../../chunks/chunk-AVSPFBLM.js";import"../../chunks/chunk-XCJDGQO7.js";import"../../chunks/chunk-YPTLSODC.js";import"../../chunks/chunk-7HL2RPUO.js";import{require_source}from"../../chunks/chunk-U7KCDTCH.js";import"../../chunks/chunk-N3ZZ7FHQ.js";import"../../chunks/chunk-GU6VIFR5.js";import{__toESM}from"../../chunks/chunk-6L236MNA.js";var import_build_utils2=__toESM(require_build_utils(),1),import_client=__toESM(require_dist2(),1),import_error_utils2=__toESM(require_dist(),1),import_bytes=__toESM(require_bytes(),1),import_chalk=__toESM(require_source(),1),import_fs_extra4=__toESM(require_lib(),1),import_ms=__toESM(require_ms(),1);import{tmpdir}from"os";import{basename,dirname,extname,join as join4,resolve as resolve2}from"path";async function createDeploy(client,now,contextName,path,createArgs,org,isSettingUpProject,archive){try{return await now.create(path,createArgs,org,isSettingUpProject,archive)}catch(err){if(isAPIError(err)){if(err.code==="rate_limited")throw new DeploymentsRateLimited(err.message);if(err.code==="domain_missing")throw new DomainNotFound(err.value);if(err.code==="domain_not_found"&&err.domain)throw new DomainNotFound(err.domain);if(err.code==="domain_not_verified"&&err.domain)throw new DomainNotVerified(err.domain);if(err.code==="domain_not_verified"&&err.value)throw new DomainVerificationFailed(err.value);if(err.code==="not_domain_owner")throw new NotDomainOwner(err.message);if(err.code==="builds_rate_limited")throw new BuildsRateLimited(err.message,{ctaLabel:err.ctaLabel,ctaUrl:err.ctaUrl,action:err.action,link:err.link});if(err.code==="forbidden")throw new DomainPermissionDenied(err.value,contextName);if(err.code==="bad_request"&&err.keyword)throw new SchemaValidationFailed(err.message,err.keyword,err.dataPath,err.params);if(err.code==="domain_configured")throw new AliasDomainConfigured(err);if(err.code==="missing_build_script")throw new MissingBuildScript(err);if(err.code==="conflicting_file_path")throw new ConflictingFilePath(err);if(err.code==="conflicting_path_segment")throw new ConflictingPathSegment(err);if(err.code==="cert_missing"){let{default:generateCertForDeploy}=await import("../../chunks/generate-cert-for-deploy-K5QDHEEQ.js"),result=await generateCertForDeploy(client,contextName,err.value);return result instanceof NowError?result:createDeploy(client,now,contextName,path,createArgs,org,isSettingUpProject)}if(err.code==="not_found")throw new DeploymentNotFound({context:contextName});let certError=mapCertError(err);if(certError)return certError}throw err}}async function getDeploymentChecks(client,deploymentId){return await client.fetch(`/v1/deployments/${encodeURIComponent(deploymentId)}/checks`)}async function getDeploymentCheckRuns(client,deploymentId){return await client.fetch(`/v2/deployments/${encodeURIComponent(deploymentId)}/check-runs`)}function parseNdjson(text){let entries=[];for(let line of text.split(`
8
- `))if(line.trim())try{entries.push(JSON.parse(line))}catch{}return entries}async function getDeploymentCheckRunLogs(client,deploymentId,checkRunId){let url=`/v2/deployments/${encodeURIComponent(deploymentId)}/check-runs/${encodeURIComponent(checkRunId)}/logs`;await new Promise(resolve3=>setTimeout(resolve3,1e3));for(let attempt=0;attempt<5;attempt++){attempt>0&&await new Promise(resolve3=>setTimeout(resolve3,2e3));let res=await client.fetch(url,{json:!1}),text=typeof res=="string"?res:await res.text(),entries=parseNdjson(text);if(entries.some(e=>e.level==="eof"))return entries.filter(e=>e.level!=="eof"&&e.level!=="debug").map(({level,timestamp,message})=>({level,timestamp,message}))}return[]}var import_fs_extra=__toESM(require_lib(),1);import{join}from"path";async function getPrebuiltJson(directory){try{return await import_fs_extra.default.readJSON(join(directory,"builds.json"))}catch{}return null}var PROTECTION_METHODS=[{setting:"ssoProtection",id:"vercel_authentication",name:"Vercel Authentication"},{setting:"passwordProtection",id:"password",name:"Password Protection"}];async function getEnabledProtection(client,project){try{let settings=await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId});return PROTECTION_METHODS.filter(method=>settings[method.setting])}catch(err){return output_manager_default.debug(`Could not read Deployment Protection settings: ${err}`),null}}import{resolve}from"path";var SUPPORTED_PROVIDERS=new Set(["github","gitlab","bitbucket"]),defaultDeps={getGitConfigPath,parseGitConfig,fetchProject:(client,project)=>client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId}),buildCommand:(client,command)=>withGlobalFlags(client,command,{preserveProject:!0})};async function getGitConnectRecommendation(client,cwd,project,options={}){let{alreadyOffered=!1,deps=defaultDeps}=options;try{if(project.link||alreadyOffered)return;let gitConfigPath=deps.getGitConfigPath({cwd});if(!gitConfigPath)return;let gitConfig=await deps.parseGitConfig(gitConfigPath),remoteUrls=gitConfig&&pluckRemoteUrls(gitConfig);if(!remoteUrls)return;let remotes=Object.values(remoteUrls);if(!remotes.some(remoteUrl=>{let repo=parseRepoUrl(remoteUrl);return repo&&SUPPORTED_PROVIDERS.has(repo.provider)})||client.nonInteractive&&remotes.length!==1||(await deps.fetchProject(client,project)).link)return;let cwdFlag=resolve(cwd)===resolve(client.cwd)?"":` --cwd ${quoteArg(cwd)}`;return deps.buildCommand(client,`git connect${cwdFlag}`)}catch(error){output_manager_default.debug(`Failed to resolve Git connection guidance: ${error}`);return}}var import_types=__toESM(require_types(),1),validArchiveFormats=new Set(import_types.VALID_ARCHIVE_FORMATS);function isValidArchive(archive){return validArchiveFormats.has(archive)}function getErrorCta(source){if(typeof source.ctaLabel=="string"&&typeof source.ctaUrl=="string")return{label:source.ctaLabel,url:source.ctaUrl};if(typeof source.action=="string"&&typeof source.link=="string")return{label:source.action,url:source.link}}var import_fs_extra3=__toESM(require_lib(),1);import{join as join3}from"path";var import_fs_extra2=__toESM(require_lib(),1),import_ci_info=__toESM(require_ci_info(),1),import_build_utils=__toESM(require_build_utils(),1),import_error_utils=__toESM(require_dist(),1);import{join as join2}from"path";var VERCEL_DIR_ANONYMOUS="anonymous.json";function anonymousStatePath(cwd){return join2(cwd,VERCEL_DIR,VERCEL_DIR_ANONYMOUS)}async function readAnonymousState(cwd){try{let state=await(0,import_fs_extra2.readJSON)(anonymousStatePath(cwd));if(typeof state?.projectId=="string"&&typeof state.token=="string"&&typeof state.claimUrl=="string"&&typeof state.expiresAt=="number")return state}catch{}return null}async function writeAnonymousState(cwd,state){let path=anonymousStatePath(cwd);await(0,import_fs_extra2.outputJSON)(path,state,{spaces:2,mode:384}),await(0,import_fs_extra2.chmod)(path,384),await addToGitIgnore(cwd)}async function clearAnonymousState(cwd){await(0,import_fs_extra2.remove)(anonymousStatePath(cwd))}async function bootstrapAnonymousProject(client){let{projectId,token,claimUrl,expiresAt}=await client.fetch("/v1/anonymous/projects?surface=cli",{method:"POST",body:{},useCurrentTeam:!1,retry:{retries:0}});return{projectId,token,claimUrl,expiresAt}}async function ensureAnonymousLink(client,cwd,{requireExistingState=!1,confirmed=!0}={}){if(import_ci_info.default.isCI||!!((0,import_build_utils.getPlatformEnv)("ORG_ID")&&(0,import_build_utils.getPlatformEnv)("PROJECT_ID"))||!!await getLinkFromDir(getVercelDirectory(cwd))||!!(await getRepoLink(client,cwd))?.repoConfig)return"refused";let state=await readAnonymousState(cwd);if(state&&state.expiresAt<=Date.now())return output_manager_default.prettyError({message:`Your temporary deployment has expired. Run ${getCommandName("login")} to create an account and keep deploying this app.`}),"failed";if(!state&&requireExistingState)return"refused";if(!confirmed&&!state)return"confirmation-required";if(!state){try{state=await bootstrapAnonymousProject(client)}catch(err){return output_manager_default.debug(`Anonymous bootstrap failed: ${(0,import_error_utils.errorToString)(err)}`),"refused"}await writeAnonymousState(cwd,state),output_manager_default.log("Not authenticated. Deploying anonymously.")}return client.authConfig={token:state.token,skipWrite:!0},delete process.env.VERCEL_TEAM_ID,{status:"linked",anonymous:!0,expiresAt:state.expiresAt,claimUrl:state.claimUrl,org:{type:"user",id:"",slug:"anonymous"},project:{id:state.projectId,name:state.projectId}}}function validateAnonymousTarget(isAnonymous,target){return isAnonymous&&target&&target!=="production"?(output_manager_default.error(`Anonymous deployments always target production, so "${target}" is not available. Remove the ${param("--target")} option, or run ${getCommandName("login")} to deploy to other environments.`),!1):!0}async function setupAnonymousDeployment(client,cwd,{isAnonymous,dryRun}){isAnonymous||await clearAnonymousState(cwd);let anonymousLink;if(isAnonymous){let anonymous=await ensureAnonymousLink(client,cwd,{requireExistingState:dryRun});if(anonymous==="refused"){output_manager_default.log("Temporary deployments aren't available for this attempt. Log in to continue.");let{default:promptMissingCredentials}=await import("../../chunks/prompt-missing-credentials-O3GGMOZH.js"),loginExitCode=await promptMissingCredentials(client);if(loginExitCode!==0)return loginExitCode;isAnonymous=!1}else{if(anonymous==="failed")return 1;if(anonymous==="confirmation-required")return 1;anonymousLink=anonymous}}return{isAnonymous,anonymousLink}}async function handleAnonymousDeploymentError({client,cwd,error,link,isV0,retry}){if(!(!link||!isAPIError(error))){if(error.code==="anonymous_project_claimed"){if(client.nonInteractive||!client.stdin.isTTY)return output_manager_default.prettyError({message:`This project was claimed successfully. Run ${getCommandName("login")} to continue deploying it.`}),1;output_manager_default.log("This project was claimed successfully. Log in to continue deploying it.");let loginExitCode;try{let{default:login}=await import("../../chunks/login-GPCBSMHV.js");loginExitCode=await login(client,{shouldParseArgs:!1})}catch(loginError){return printError(loginError),1}if(loginExitCode!==0)return loginExitCode;let claimedProjectLink=await ensureLink("deploy",client,cwd,{autoConfirm:!0,projectName:link.project.id,failIfNotFound:!0,allowOwnerLookupFallback:!0,v0:isV0});return typeof claimedProjectLink=="number"?claimedProjectLink:(await linkFolderToProject(client,cwd,{projectId:claimedProjectLink.project.id,orgId:claimedProjectLink.org.id},claimedProjectLink.project.name,claimedProjectLink.org.slug,"link",!0,!1),await clearAnonymousState(cwd),retry())}if(error.status===401||error.status===410)return await clearAnonymousState(cwd),output_manager_default.prettyError({message:`Your temporary deployment has expired. Run ${getCommandName("login")} to create an account and keep deploying this app.`}),1}}async function runImplicitBuild(client,cwd){let projectJsonPath=join3(cwd,VERCEL_DIR,VERCEL_DIR_PROJECT),projectJsonExists=await import_fs_extra3.default.pathExists(projectJsonPath);projectJsonExists||await import_fs_extra3.default.outputJSON(projectJsonPath,{settings:{}},{spaces:2}),await import_fs_extra3.default.pathExists(join3(cwd,"package.json"))&&output_manager_default.log("Building your project locally\u2026");let originalArgv=client.argv,originalCwd=client.cwd,originalStdout=client.stdout,previousVercelFirstDeployment=process.env.VERCEL_FIRST_DEPLOYMENT;client.cwd=cwd,client.setArgv([...originalArgv.slice(0,2),"build","--prod","--yes"]),process.env.VERCEL_FIRST_DEPLOYMENT="1",client.stdout=createSinkStream();try{let build=(await import("../build/index.js")).default;return await build(client)}finally{client.setArgv(originalArgv),client.cwd=originalCwd,client.stdout=originalStdout,previousVercelFirstDeployment===void 0?delete process.env.VERCEL_FIRST_DEPLOYMENT:process.env.VERCEL_FIRST_DEPLOYMENT=previousVercelFirstDeployment,projectJsonExists||await import_fs_extra3.default.remove(projectJsonPath)}}function createSinkStream(){return{isTTY:!1,write:()=>!0}}var COMMAND_CONFIG={init:getCommandAliases(initSubcommand),continue:getCommandAliases(continueSubcommand)},deploy_default=async client=>{let telemetryClient=new DeployTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(deployCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let subArgs=parsedArguments.args[0]===deployCommand.name?parsedArguments.args.slice(1):parsedArguments.args,{subcommand,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG);function printSubcommandHelp(command){output_manager_default.print(help(command,{parent:deployCommand,columns:client.stderr.columns}))}switch(subcommand){case"init":return parsedArguments.flags["--help"]?(telemetryClient.trackCliFlagHelp("deploy",subcommandOriginal),printSubcommandHelp(initSubcommand),0):(telemetryClient.trackCliSubcommandInit(subcommandOriginal),handleInitDeployment(client,telemetryClient));case"continue":return parsedArguments.flags["--help"]?(telemetryClient.trackCliFlagHelp("deploy",subcommandOriginal),printSubcommandHelp(continueSubcommand),0):(telemetryClient.trackCliSubcommandContinue(subcommandOriginal),handleContinueSubcommand(client,telemetryClient));default:return parsedArguments.flags["--help"]?(telemetryClient.trackCliFlagHelp("deploy"),output_manager_default.print(help(deployCommand,{columns:client.stderr.columns})),0):handleDefaultDeploy(client,telemetryClient)}};async function handleInitDeployment(client,telemetryClient){let flagsSpecification=getFlagsSpecification(initSubcommand.options),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error2){return printError(error2),2}telemetryClient.trackCliFlagJson(parsedArguments.flags["--json"]),telemetryClient.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetryClient.trackCliOptionProject(parsedArguments.flags["--project"]);let projectNameOrId=parsedArguments.flags["--project"],formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,args=parsedArguments.args;args[0]==="deploy"&&(args=args.slice(1)),args[0]==="init"&&(args=args.slice(1));let paths;args.length>0?(paths=args.map(item=>resolve2(client.cwd,item)),telemetryClient.trackCliArgumentProjectPath(paths[0])):paths=[client.cwd];let pathValidation=await validatePaths(client,paths);if(!pathValidation.valid)return pathValidation.exitCode;await compileVercelConfig(paths[0]);let localConfig=paths[0]===client.cwd?client.localConfig||readLocalConfig(paths[0]):readLocalConfig(paths[0]);if(localConfig){client.localConfig=localConfig;let{version}=localConfig,file=highlight(localConfig[import_client.fileNameSymbol]),prop=code("version");if(version)if(typeof version=="number"){if(version!==2){let two=code(String(2));return output_manager_default.error(`The value of the ${prop} property within ${file} can only be ${two}.`),1}}else return output_manager_default.error(`The ${prop} property inside your ${file} file must be a number.`),1}let{log,debug,error}=output_manager_default,quiet=!client.stdout.isTTY,{path:cwd}=pathValidation,autoConfirm=parsedArguments.flags["--yes"],target=parseTarget({flagName:"target",flags:parsedArguments.flags});telemetryClient.trackTargetEnvironment(target);let parsedArchive=parsedArguments.flags["--archive"];if(typeof parsedArchive=="string"&&!(isValidArchive(parsedArchive)||parsedArchive===deprecatedArchiveSplitTgz))return output_manager_default.error(`Format must be one of: ${import_client.VALID_ARCHIVE_FORMATS.join(", ")}`),2;parsedArchive===deprecatedArchiveSplitTgz&&output_manager_default.print(`${prependEmoji(`${param("--archive=tgz")} now has the same behavior as ${param("--archive=split-tgz")}. Please use ${param("--archive=tgz")} instead.`,emoji("warning"))}
9
- `);let cliMeta=parseMeta(parsedArguments.flags["--meta"]),isV0=cliMeta.v0==="true";getGitExecutable(cwd);let link=await ensureLink("deploy",client,cwd,{autoConfirm,projectName:projectNameOrId??localConfig?.name,failIfNotFound:!!projectNameOrId,v0:isV0});if(typeof link=="number")return link;let{org,project}=link,rootDirectory=project.rootDirectory,sourceFilesOutsideRootDirectory=project.sourceFilesOutsideRootDirectory??!0;link.repoRoot&&(cwd=link.repoRoot);let contextName=org.slug;if(client.config.currentTeam=org.type==="team"?org.id:void 0,rootDirectory&&await validateRootDirectory(cwd,join4(cwd,rootDirectory),project?`To change your Project Settings, go to https://vercel.com/${org?.slug}/${project.name}/settings`:"")===!1)return 1;if(await promptExperimentalServicesMigration({client,cwd:join4(cwd,rootDirectory||""),autoConfirm:!!parsedArguments.flags["--yes"],nonInteractive:client.nonInteractive})&&(localConfig=readLocalConfig(join4(cwd,rootDirectory||""))),rootDirectory){let rootDirectoryPath=join4(cwd,rootDirectory);await compileVercelConfig(rootDirectoryPath);let rootDirectoryConfig=readLocalConfig(rootDirectoryPath);rootDirectoryConfig?(debug(`Read local config from root directory (${rootDirectory})`),localConfig=rootDirectoryConfig):localConfig&&output_manager_default.print(`${prependEmoji(`The ${highlight(localConfig[import_client.fileNameSymbol])} file should be inside of the provided root directory.`,emoji("warning"))}
7
+ import{fetchDeploymentBuildEnv,resolvePerDirectoryLinkRoot}from"../../chunks/chunk-YUDKK2QJ.js";import{isIgnoredFile,singleFileConfig,singleFileProjectSettings,validatePaths,validateRootDirectory}from"../../chunks/chunk-SR5XEF7L.js";import{promptExperimentalServicesMigration}from"../../chunks/chunk-DGH5CD6D.js";import"../../chunks/chunk-APSIFBD4.js";import{DeployTelemetryClient,Now,UploadErrorMissingArchive,getBuildMachineResourceConfig,getProductionUrl,printDeploymentStatus,printPrebuiltFilePathMapIgnoreWarning}from"../../chunks/chunk-YGMOJBSP.js";import"../../chunks/chunk-6EW4BCMR.js";import"../../chunks/chunk-V6Y6UK6B.js";import{parseRepoUrl}from"../../chunks/chunk-UKMRJIIZ.js";import"../../chunks/chunk-2H77IRPI.js";import{pickOverrides}from"../../chunks/chunk-5ZQF5WIO.js";import{require_dist as require_dist2,require_ignore}from"../../chunks/chunk-RYMRVMGD.js";import"../../chunks/chunk-G3NHWIPJ.js";import{compileVercelConfig}from"../../chunks/chunk-FAJB3JV5.js";import"../../chunks/chunk-OHDEHZLX.js";import"../../chunks/chunk-M2W3HKV3.js";import"../../chunks/chunk-PHW54NU5.js";import"../../chunks/chunk-U56NHYAH.js";import{require_ci_info}from"../../chunks/chunk-T52FMXWC.js";import{require_semver}from"../../chunks/chunk-KKS7XWEX.js";import"../../chunks/chunk-NNP5NITU.js";import"../../chunks/chunk-L3JDEHCQ.js";import"../../chunks/chunk-ECMWDZTJ.js";import"../../chunks/chunk-TRTEXGVN.js";import"../../chunks/chunk-T3GQAMBJ.js";import"../../chunks/chunk-P2O5DOYE.js";import{isGuidanceEnabled}from"../../chunks/chunk-FEEG5UU2.js";import{stamp_default}from"../../chunks/chunk-XPXOV5UO.js";import{getSubcommand}from"../../chunks/chunk-ETV3C2CV.js";import"../../chunks/chunk-OI263FBO.js";import{ensureLink,parseEnv}from"../../chunks/chunk-M3HO5CTQ.js";import"../../chunks/chunk-KXMVFT2K.js";import"../../chunks/chunk-FQJCWZ4C.js";import"../../chunks/chunk-ULLWCOYC.js";import"../../chunks/chunk-23NBYS6R.js";import{continueSubcommand,deployCommand,deprecatedArchiveSplitTgz,describeSubcommand,getCommandAliases,initSubcommand}from"../../chunks/chunk-V426AGVC.js";import"../../chunks/chunk-O5A7CNRV.js";import"../../chunks/chunk-774D3BGN.js";import"../../chunks/chunk-MOLEXKVC.js";import"../../chunks/chunk-EDDOQXEI.js";import"../../chunks/chunk-35QK5NDD.js";import"../../chunks/chunk-M4IWOZEG.js";import"../../chunks/chunk-OQVE2WXX.js";import"../../chunks/chunk-7SNMU7U7.js";import"../../chunks/chunk-6C4RPAG7.js";import"../../chunks/chunk-DZZFEAM6.js";import"../../chunks/chunk-S54ISKGR.js";import"../../chunks/chunk-WOTPEBSH.js";import"../../chunks/chunk-YW5R6XQI.js";import"../../chunks/chunk-ZTUQEA2X.js";import"../../chunks/chunk-JKTQV2QJ.js";import"../../chunks/chunk-RSLPLRVK.js";import"../../chunks/chunk-H3QRCTIJ.js";import"../../chunks/chunk-FAW6NBLQ.js";import"../../chunks/chunk-2I64AYHG.js";import"../../chunks/chunk-LWQVT6YW.js";import"../../chunks/chunk-MIG67KZ2.js";import"../../chunks/chunk-SOJCELXH.js";import{param}from"../../chunks/chunk-SXUEGVWB.js";import{parseMeta}from"../../chunks/chunk-CZSOZKHX.js";import"../../chunks/chunk-JZRMH5UA.js";import{parseTarget}from"../../chunks/chunk-B2L2QTXT.js";import{getDeployment}from"../../chunks/chunk-YEWZFZ2O.js";import{mapCertError}from"../../chunks/chunk-YZBYL3SH.js";import"../../chunks/chunk-JNLWD6DK.js";import{help}from"../../chunks/chunk-NYFB3EYC.js";import{table}from"../../chunks/chunk-6TAQ6OWD.js";import{printError}from"../../chunks/chunk-LXNMVWYO.js";import{AGENT_REASON,AGENT_STATUS,buildCommandWithYes,outputAgentError,withGlobalFlags}from"../../chunks/chunk-ONPJXQQ6.js";import"../../chunks/chunk-WPS6JZF6.js";import"../../chunks/chunk-OSCCYU74.js";import{validateJsonOutput,wantsMachineReadableOutput}from"../../chunks/chunk-D4MW3RDW.js";import{highlight,readLocalConfig}from"../../chunks/chunk-THB7KY2N.js";import"../../chunks/chunk-AEEEEOYS.js";import{require_ms}from"../../chunks/chunk-QTKJC2O5.js";import{TelemetryClient}from"../../chunks/chunk-MCBO6LL7.js";import"../../chunks/chunk-RCTYVKM5.js";import"../../chunks/chunk-7T6TL3GQ.js";import"../../chunks/chunk-BRK4OB4B.js";import{require_types}from"../../chunks/chunk-GHM7V3GG.js";import"../../chunks/chunk-5XJNPXQK.js";import"../../chunks/chunk-MY4MONOH.js";import{isArgumentError,parseArguments}from"../../chunks/chunk-LYKPLTZ7.js";import{quoteArg}from"../../chunks/chunk-BKV35LVB.js";import{getFlagsSpecification}from"../../chunks/chunk-5IPBCD7K.js";import{VERCEL_DIR,VERCEL_DIR_PROJECT,addToGitIgnore,createGitMeta,findProjectsFromPath,getGitConfigPath,getGitExecutable,getLinkFromDir,getProjectLink,getRepoLink,getVercelDirectory,isOwnerLookupUnavailableLink,isRemoteLookupSkippedLink,linkFolderToProject,parseGitConfig,pluckRemoteUrls,require_lib}from"../../chunks/chunk-3XLK5ZPD.js";import"../../chunks/chunk-B4ATVYZW.js";import"../../chunks/chunk-F2ZWW2IO.js";import"../../chunks/chunk-PPCFQQSU.js";import{printAlignedLabel}from"../../chunks/chunk-4QSVBLAS.js";import"../../chunks/chunk-PE7QZUY7.js";import"../../chunks/chunk-VOZEB6PD.js";import{AliasDomainConfigured,BuildError,BuildsRateLimited,ConflictingConfigFiles,ConflictingFilePath,ConflictingPathSegment,DeploymentNotFound,DeploymentsRateLimited,DeprecatedNowJson,DomainNotFound,DomainNotVerified,DomainPermissionDenied,DomainVerificationFailed,InvalidDomain,InvalidToken,MissingBuildScript,NotDomainOwner,NowError,SchemaValidationFailed,TooManyRequests,UserAborted,code,isAPIError,require_bytes}from"../../chunks/chunk-NM67DIPQ.js";import{getCommandName,packageName}from"../../chunks/chunk-FI772UVH.js";import{cliErrorFromUnknown,emoji,link_default,output_manager_default,prependEmoji,recordCliError,require_build_utils}from"../../chunks/chunk-Q2YQSMIB.js";import{require_dist}from"../../chunks/chunk-QGIQK47P.js";import"../../chunks/chunk-AVSPFBLM.js";import"../../chunks/chunk-XCJDGQO7.js";import"../../chunks/chunk-YPTLSODC.js";import"../../chunks/chunk-7HL2RPUO.js";import{require_source}from"../../chunks/chunk-U7KCDTCH.js";import"../../chunks/chunk-N3ZZ7FHQ.js";import"../../chunks/chunk-GU6VIFR5.js";import{__toESM}from"../../chunks/chunk-6L236MNA.js";var import_build_utils9=__toESM(require_build_utils(),1),import_client=__toESM(require_dist2(),1),import_error_utils2=__toESM(require_dist(),1),import_bytes=__toESM(require_bytes(),1),import_chalk=__toESM(require_source(),1),import_fs_extra4=__toESM(require_lib(),1),import_ms=__toESM(require_ms(),1);import{tmpdir}from"os";import{basename as basename3,dirname as dirname2,extname,join as join13,resolve as resolve3}from"path";async function createDeploy(client,now,contextName,path2,createArgs,org,isSettingUpProject,archive){try{return await now.create(path2,createArgs,org,isSettingUpProject,archive)}catch(err){if(isAPIError(err)){if(err.code==="rate_limited")throw new DeploymentsRateLimited(err.message);if(err.code==="domain_missing")throw new DomainNotFound(err.value);if(err.code==="domain_not_found"&&err.domain)throw new DomainNotFound(err.domain);if(err.code==="domain_not_verified"&&err.domain)throw new DomainNotVerified(err.domain);if(err.code==="domain_not_verified"&&err.value)throw new DomainVerificationFailed(err.value);if(err.code==="not_domain_owner")throw new NotDomainOwner(err.message);if(err.code==="builds_rate_limited")throw new BuildsRateLimited(err.message,{ctaLabel:err.ctaLabel,ctaUrl:err.ctaUrl,action:err.action,link:err.link});if(err.code==="forbidden")throw new DomainPermissionDenied(err.value,contextName);if(err.code==="bad_request"&&err.keyword)throw new SchemaValidationFailed(err.message,err.keyword,err.dataPath,err.params);if(err.code==="domain_configured")throw new AliasDomainConfigured(err);if(err.code==="missing_build_script")throw new MissingBuildScript(err);if(err.code==="conflicting_file_path")throw new ConflictingFilePath(err);if(err.code==="conflicting_path_segment")throw new ConflictingPathSegment(err);if(err.code==="cert_missing"){let{default:generateCertForDeploy}=await import("../../chunks/generate-cert-for-deploy-4EJRA7MS.js"),result=await generateCertForDeploy(client,contextName,err.value);return result instanceof NowError?result:createDeploy(client,now,contextName,path2,createArgs,org,isSettingUpProject)}if(err.code==="not_found")throw new DeploymentNotFound({context:contextName});let certError=mapCertError(err);if(certError)return certError}throw err}}async function getDeploymentChecks(client,deploymentId){return await client.fetch(`/v1/deployments/${encodeURIComponent(deploymentId)}/checks`)}async function getDeploymentCheckRuns(client,deploymentId){return await client.fetch(`/v2/deployments/${encodeURIComponent(deploymentId)}/check-runs`)}function parseNdjson(text){let entries=[];for(let line of text.split(`
8
+ `))if(line.trim())try{entries.push(JSON.parse(line))}catch{}return entries}async function getDeploymentCheckRunLogs(client,deploymentId,checkRunId){let url=`/v2/deployments/${encodeURIComponent(deploymentId)}/check-runs/${encodeURIComponent(checkRunId)}/logs`;await new Promise(resolve4=>setTimeout(resolve4,1e3));for(let attempt=0;attempt<5;attempt++){attempt>0&&await new Promise(resolve4=>setTimeout(resolve4,2e3));let res=await client.fetch(url,{json:!1}),text=typeof res=="string"?res:await res.text(),entries=parseNdjson(text);if(entries.some(e=>e.level==="eof"))return entries.filter(e=>e.level!=="eof"&&e.level!=="debug").map(({level,timestamp,message})=>({level,timestamp,message}))}return[]}var import_fs_extra=__toESM(require_lib(),1);import{join}from"path";async function getPrebuiltJson(directory){try{return await import_fs_extra.default.readJSON(join(directory,"builds.json"))}catch{}return null}var PROTECTION_METHODS=[{setting:"ssoProtection",id:"vercel_authentication",name:"Vercel Authentication"},{setting:"passwordProtection",id:"password",name:"Password Protection"}];async function getEnabledProtection(client,project){try{let settings=await client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId});return PROTECTION_METHODS.filter(method=>settings[method.setting])}catch(err){return output_manager_default.debug(`Could not read Deployment Protection settings: ${err}`),null}}import{resolve}from"path";var SUPPORTED_PROVIDERS=new Set(["github","gitlab","bitbucket"]),defaultDeps={getGitConfigPath,parseGitConfig,fetchProject:(client,project)=>client.fetch(`/v9/projects/${encodeURIComponent(project.id)}`,{accountId:project.accountId}),buildCommand:(client,command)=>withGlobalFlags(client,command,{preserveProject:!0})};async function getGitConnectRecommendation(client,cwd,project,options={}){let{alreadyOffered=!1,deps=defaultDeps}=options;try{if(project.link||alreadyOffered)return;let gitConfigPath=deps.getGitConfigPath({cwd});if(!gitConfigPath)return;let gitConfig=await deps.parseGitConfig(gitConfigPath),remoteUrls=gitConfig&&pluckRemoteUrls(gitConfig);if(!remoteUrls)return;let remotes=Object.values(remoteUrls);if(!remotes.some(remoteUrl=>{let repo=parseRepoUrl(remoteUrl);return repo&&SUPPORTED_PROVIDERS.has(repo.provider)})||client.nonInteractive&&remotes.length!==1||(await deps.fetchProject(client,project)).link)return;let cwdFlag=resolve(cwd)===resolve(client.cwd)?"":` --cwd ${quoteArg(cwd)}`;return deps.buildCommand(client,`git connect${cwdFlag}`)}catch(error){output_manager_default.debug(`Failed to resolve Git connection guidance: ${error}`);return}}var import_types=__toESM(require_types(),1),validArchiveFormats=new Set(import_types.VALID_ARCHIVE_FORMATS);function isValidArchive(archive){return validArchiveFormats.has(archive)}function getErrorCta(source){if(typeof source.ctaLabel=="string"&&typeof source.ctaUrl=="string")return{label:source.ctaLabel,url:source.ctaUrl};if(typeof source.action=="string"&&typeof source.link=="string")return{label:source.action,url:source.link}}var DescribeError=class extends Error{constructor(reason,message){super(message);this.reason=reason}};var DescribeTelemetryClient=class extends TelemetryClient{trackCliOptionId(value){value&&this.trackCliOption({option:"id",value:this.redactedValue})}trackCliOptionAwsAccountId(value){value&&this.trackCliOption({option:"aws-account-id",value:this.redactedValue})}trackCliFlagJson(value){value&&this.trackCliFlag("json")}};import{createHash as createHash3}from"node:crypto";import{createHash as createHash2}from"node:crypto";function getFunctionConfig(lambda){return{runtime:lambda.runtime,handler:lambda.handler,architecture:lambda.architecture,environment:Object.fromEntries(Object.entries(lambda.environment).filter(entry=>typeof entry[1]=="string")),..."launcherType"in lambda&&lambda.launcherType==="Nodejs"?{launcherType:lambda.launcherType,awsLambdaHandler:lambda.awsLambdaHandler,shouldAddHelpers:lambda.shouldAddHelpers,shouldAddSourcemapSupport:lambda.shouldAddSourcemapSupport,shouldDisableAutomaticFetchInstrumentation:lambda.shouldDisableAutomaticFetchInstrumentation,useWebApi:lambda.useWebApi}:{},memory:lambda.memory,affinity:lambda.affinity,maxConcurrency:lambda.maxConcurrency,maxDuration:lambda.maxDuration,regions:lambda.regions,functionFailoverRegions:lambda.functionFailoverRegions,supportsResponseStreaming:lambda.supportsResponseStreaming,framework:lambda.framework&&{...lambda.framework}}}var import_build_utils=__toESM(require_build_utils(),1),ROOT_BOOTSTRAP_PATH="bootstrap",USER_BOOTSTRAP_PATH="___vc_bootstrap",NATIVELY_WRAPPER_SUPPORTED_FAMILIES=["nodejs","python","ruby","java","dotnetcore","bun","executable"],BOOTSTRAP_SHIM=`#!/bin/sh
9
+ USER_BOOTSTRAP="/var/task/${USER_BOOTSTRAP_PATH}"
10
+
11
+ if [ -n "\${AWS_LAMBDA_EXEC_WRAPPER:-}" ]; then
12
+ __VC_WRAPPER="$AWS_LAMBDA_EXEC_WRAPPER"
13
+ AWS_LAMBDA_EXEC_WRAPPER=""
14
+ export AWS_LAMBDA_EXEC_WRAPPER
15
+ exec "$__VC_WRAPPER" "$USER_BOOTSTRAP" "$@"
16
+ fi
17
+
18
+ exec "$USER_BOOTSTRAP" "$@"
19
+ `;function hydrateLambdaFiles(lambda,encryptedEnv){let files=lambda.files??{};if(lambda.runtime==="container"||!encryptedEnv.filename||!encryptedEnv.contentBase64)return files;if(files[encryptedEnv.filename]=new import_build_utils.FileBlob({data:Buffer.from(encryptedEnv.contentBase64,"base64")}),lambda.supportsWrapper!==!0&&!NATIVELY_WRAPPER_SUPPORTED_FAMILIES.some(family=>lambda.runtime.startsWith(family))){if(!lambda.runtime.startsWith("provided"))throw new Error(`Serverless Function runtime ${lambda.runtime} does not support more than 4KB for environment variables`);let userBootstrap=files[ROOT_BOOTSTRAP_PATH];if(!userBootstrap)throw new Error(`Serverless Function runtime ${lambda.runtime} does not support more than 4KB for environment variables`);if(files[USER_BOOTSTRAP_PATH])throw new Error(`Cannot wrap "provided.*" lambda: reserved file path ${USER_BOOTSTRAP_PATH} is already in use. Please rename your file.`);files[USER_BOOTSTRAP_PATH]=userBootstrap,delete files[ROOT_BOOTSTRAP_PATH],files[ROOT_BOOTSTRAP_PATH]=new import_build_utils.FileBlob({data:BOOTSTRAP_SHIM,mode:33261})}return files}import{join as join6}from"node:path";var import_build_utils2=__toESM(require_build_utils(),1);import{join as join2}from"path";import{readFile}from"node:fs/promises";async function maybeReadJSON(path2){let contents;try{contents=await readFile(path2,"utf8")}catch(err){if(err.code!=="ENOENT")throw err;return}try{return JSON.parse(contents.charCodeAt(0)===65279?contents.slice(1):contents)}catch(err){throw err.message=`${path2}: ${err.message}`,err}}async function getBuildOutputConfig(outputDir){let configPath=getBuildOutputConfigPath(outputDir),config=await maybeReadJSON(configPath);if(!config)return;if(config.version!==3)throw new Error(`Expected \`version: 3\` in "${configPath}" file (received \`${config.version}\`)`);validateDeploymentId(config.deploymentId),validateExperimentalServicesV2(config.experimentalServicesV2);let framework=validateFrameworkVersion(config.framework);return{...config,framework}}function getBuildOutputConfigPath(outputDir){return join2(outputDir,"config.json")}var MAX_DEPLOYMENT_ID_LENGTH=32,MAX_FRAMEWORK_SLUG_LENGTH=50,MAX_FRAMEWORK_VERSION_LENGTH=50,VALID_DEPLOYMENT_ID_PATTERN=/^[a-zA-Z0-9_-]+$/;function validateDeploymentId(deploymentId){if(deploymentId&&deploymentId.length>MAX_DEPLOYMENT_ID_LENGTH)throw new import_build_utils2.NowBuildError({message:`The configured deploymentId "${deploymentId}" exceeds the maximum length of ${MAX_DEPLOYMENT_ID_LENGTH} characters. Please use a shorter deploymentId.`,code:"VC_BUILD_INVALID_DEPLOYMENT_ID_LENGTH"});if(deploymentId&&!VALID_DEPLOYMENT_ID_PATTERN.test(deploymentId))throw new import_build_utils2.NowBuildError({message:`The configured deploymentId "${deploymentId}" contains invalid characters. Only alphanumeric characters (a-z, A-Z, 0-9), hyphens (-), and underscores (_) are allowed.`,code:"VC_BUILD_INVALID_DEPLOYMENT_ID_CHARACTERS"})}function validateFrameworkVersion(framework){if(!framework)return;let{slug,version}=framework;if(typeof slug=="string"){if(typeof version!="string")throw new import_build_utils2.NowBuildError({message:`Invalid config.json: "version" type "${typeof version}" should be "string"`,code:"VC_BUILD_INVALID_CONFIG_JSON_FRAMEWORK_VERSION_TYPE"});if(slug.length>MAX_FRAMEWORK_SLUG_LENGTH){let trimmedSlug=slug.slice(0,MAX_FRAMEWORK_SLUG_LENGTH);throw new import_build_utils2.NowBuildError({message:`Invalid config.json: "framework.slug" length ${slug.length} > ${MAX_FRAMEWORK_SLUG_LENGTH}. "${trimmedSlug}..."`,code:"VC_BUILD_INVALID_CONFIG_JSON_FRAMEWORK_SLUG_LENGTH"})}if(version.length>MAX_FRAMEWORK_VERSION_LENGTH){let trimmedVersion=version.slice(0,MAX_FRAMEWORK_VERSION_LENGTH);throw new import_build_utils2.NowBuildError({message:`Invalid config.json: "framework.version" length ${version.length} > ${MAX_FRAMEWORK_VERSION_LENGTH}. "${trimmedVersion}..."`,code:"VC_BUILD_INVALID_CONFIG_JSON_FRAMEWORK_VERSION_LENGTH"})}return framework}}function validateExperimentalServicesV2(experimentalServicesV2){if(experimentalServicesV2!==void 0&&(!experimentalServicesV2||typeof experimentalServicesV2!="object"||Array.isArray(experimentalServicesV2)))throw new import_build_utils2.NowBuildError({code:"INVALID_BUILD_OUTPUT_CONFIG",message:'Invalid config.json: "experimentalServicesV2" must be an object.'})}async function getBuildOutputConfigOrThrow(outputDir){let config=await getBuildOutputConfig(outputDir);if(config)return config;throw new Error(`Config file was not found at "${getBuildOutputConfigPath(outputDir)}"`)}var import_build_utils3=__toESM(require_build_utils(),1);function isRouteMiddleware(route){return"middlewarePath"in route&&typeof route.middlewarePath=="string"}var cache=new WeakMap;function getMiddlewareRouting(buildResult){let cached=cache.get(buildResult.functions);if(cached&&cached.routes===buildResult.routes)return cached.routing;let routing=new Map,{lambdas,edgeFunctions}=buildResult.functions;for(let route of buildResult.routes){if(!isRouteMiddleware(route))continue;let outputPath=route.middlewarePath;!lambdas.has(outputPath)&&!edgeFunctions.has(outputPath)&&(outputPath=outputPath.replace(/^\//,""));let output=lambdas.get(outputPath)??edgeFunctions.get(outputPath);if(!outputPath||!output)throw new import_build_utils3.NowBuildError({message:`Mapping ${route.middlewarePath} not found. Maybe you provided a wrong middlewarePath?`,code:"middleware_path_not_found"});let index=routing.get(outputPath)?.index??routing.size;routing.set(outputPath,output.type==="EdgeFunction"?{type:"middleware",middlewarePath:route.middlewarePath,outputPath,edgeFunction:output,index}:{type:"middleware-lambda",middlewarePath:route.middlewarePath,outputPath,index})}return cache.set(buildResult.functions,{routes:buildResult.routes,routing}),routing}var import_semver=__toESM(require_semver(),1),import_build_utils4=__toESM(require_build_utils(),1);import{createHash}from"crypto";import fs2 from"fs";var fileSizeCache=new Map,getFileSize=path2=>{if(!path2)return Promise.resolve(0);let cached=fileSizeCache.get(path2);if(cached)return cached;let promise=fs2.promises.lstat(path2).then(stats=>stats.size);return fileSizeCache.set(path2,promise),promise},collectUncompressedSize=async(files,ignoreFn)=>{let size=0;return await Promise.all(Object.keys(files).map(async fileKey=>{if(!ignoreFn?.(fileKey)){if(files[fileKey].type==="FileBlob")size+=files[fileKey].data.length;else if(files[fileKey].type==="FileFsRef"){let curSize=files[fileKey].size??await getFileSize(files[fileKey].fsPath);size+=curSize}}})),size};var MIB=1024*1024,MAX_UNCOMPRESSED_FUNCTION_SIZE_BYTES=250*MIB,LAMBDA_RESERVED_UNCOMPRESSED_SIZE_BYTES=25*MIB,LARGE_FUNCTION_THRESHOLD_BYTES=MAX_UNCOMPRESSED_FUNCTION_SIZE_BYTES-LAMBDA_RESERVED_UNCOMPRESSED_SIZE_BYTES,MANIFEST_FILE_NAMES=["routes-manifest.json","server/pages-manifest.json","server/app-paths-manifest.json","app-path-routes-manifest.json"],TEST_DYNAMIC_ROUTE=/\/\[[^\/]+?\](?=\/|$)/;function isNextjsDynamicRoute(route){return route=route.startsWith("/")?route:`/${route}`,TEST_DYNAMIC_ROUTE.test(route)}function computeLambdaFieldsSignature(lambda,lambdaFields){let parts=[];for(let field of lambdaFields)parts.push(JSON.stringify(lambda[field]));return parts.join("|")}async function getLambdaFileSizeMetadata(lambdaFiles){let fileKeys=Object.keys(lambdaFiles),fileSizes=new Map,uncompressedSize=0;for(let fileKey of fileKeys){let file=lambdaFiles[fileKey];if(file===void 0)throw new Error("Expected lambdaFiles[fileKey] to be defined");let fileSize=0;file.type==="FileBlob"?fileSize=file.data.length:file.type==="FileFsRef"&&(fileSize=await collectUncompressedSize({[fileKey]:file},void 0)),fileSizes.set(fileKey,fileSize),uncompressedSize+=fileSize}return{fileKeys,fileSizes,uncompressedSize}}async function groupLambdas(lambdas,options){let{force}=options,lambdaFields=["allowQuery","affinity","architecture","awsLambdaHandler","environment","experimentalResponseStreaming","experimentalTriggers","framework","handler","maxConcurrency","maxDuration","memory","operationType","regions","runtime","runtimeLanguage","shouldAddHelpers","shouldAddSourcemapSupport","shouldDisableAutomaticFetchInstrumentation","supportsCancellation","supportsMultiPayloads","supportsResponseStreaming","supportsWrapper","useWebApi","functionFailoverRegions"],_typeCheck=lambdaFields,fieldsToCompare=force==="all"?["runtime","maxConcurrency"]:lambdaFields,maxUncompressedFunctionSize=LARGE_FUNCTION_THRESHOLD_BYTES,maxBundleSizeMb=options.maxBundleSizeMb;if(maxBundleSizeMb!==void 0&&Number.isFinite(maxBundleSizeMb)){let customMaxUncompressedFunctionSize=Math.floor(maxBundleSizeMb*MIB);output_manager_default.warn(`Warn: custom max uncompressed function size of ${customMaxUncompressedFunctionSize/MIB}MiB configured`),maxUncompressedFunctionSize=Math.min(customMaxUncompressedFunctionSize,MAX_UNCOMPRESSED_FUNCTION_SIZE_BYTES)}let seenLambdas=new Map;for(let[name,lambda]of Object.entries(lambdas)){if(!lambda.experimentalAllowBundling||!lambda.files)continue;let existingNames=seenLambdas.get(lambda);existingNames?existingNames.push(name):seenLambdas.set(lambda,[name])}let handlerDigestPromiseCache=new Map,getHandlerDigest=handlerFile=>{if(!handlerFile)return Promise.resolve(void 0);let cached=handlerDigestPromiseCache.get(handlerFile);if(cached)return cached;let promise=(async()=>{try{let handlerStream=handlerFile.toStream(),handlerBuffer=await(0,import_build_utils4.streamToBuffer)(handlerStream),handlerBytes=new Uint8Array(handlerBuffer.buffer,handlerBuffer.byteOffset,handlerBuffer.byteLength);return createHash("sha1").update(handlerBytes).digest("hex")}catch{return}})();return handlerDigestPromiseCache.set(handlerFile,promise),promise},bundlesBySignature=new Map,allBundledLambdas=[];for(let[lambda,lambdaNames]of seenLambdas){let lambdaFiles=lambda.files;if(!lambdaFiles)continue;let signature=computeLambdaFieldsSignature(lambda,fieldsToCompare),{fileKeys,fileSizes,uncompressedSize}=await getLambdaFileSizeMetadata(lambdaFiles),handlerDigest=await getHandlerDigest(lambdaFiles[lambda.handler]),compatibleBundles=bundlesBySignature.get(signature),isLarge=uncompressedSize>=LARGE_FUNCTION_THRESHOLD_BYTES,foundMatchingBundle=!1;if(compatibleBundles&&!isLarge)for(let bundleMeta of compatibleBundles){if(bundleMeta.isLarge||!(handlerDigest===bundleMeta.handlerDigest)&&force!=="all")continue;let uncompressedBytesIncrease=0;for(let fileKey of fileKeys){let incomingFileSize=fileSizes.get(fileKey)??0,existingFileSize=bundleMeta.fileSizesByKey.get(fileKey);existingFileSize===void 0?uncompressedBytesIncrease+=incomingFileSize:uncompressedBytesIncrease+=incomingFileSize-existingFileSize}let newTotalSize=bundleMeta.uncompressedBytes+uncompressedBytesIncrease;if(newTotalSize<=maxUncompressedFunctionSize){foundMatchingBundle=!0,bundleMeta.uncompressedBytes=newTotalSize,bundleMeta.lambdaNames.push(...lambdaNames);for(let fileKey of fileKeys)bundleMeta.fileSizesByKey.set(fileKey,fileSizes.get(fileKey)??0);let potentialLambdaFiles=bundleMeta.lambda.files;potentialLambdaFiles&&(bundleMeta.lambda.files=Object.assign(potentialLambdaFiles,lambdaFiles));break}}if(!foundMatchingBundle){let newBundleMeta={lambda,signature,handlerDigest,isLarge,uncompressedBytes:uncompressedSize,fileSizesByKey:new Map(fileSizes),lambdaNames:[...lambdaNames]},signatureBundles=bundlesBySignature.get(signature);signatureBundles||(signatureBundles=[],bundlesBySignature.set(signature,signatureBundles)),signatureBundles.push(newBundleMeta),allBundledLambdas.push(newBundleMeta)}}let finalLambdas=Object.assign({},lambdas);options.debug&&(output_manager_default.debug("GROUP_LAMBDAS: "+JSON.stringify(allBundledLambdas.map(bundleMeta=>({lambdaNames:bundleMeta.lambdaNames,signature:bundleMeta.signature,uncompressedBytes:bundleMeta.uncompressedBytes})),null,2)),output_manager_default.debug(`total grouped lambdas: ${allBundledLambdas.length}`));for(let bundleMeta of allBundledLambdas){let lambda=bundleMeta.lambda;for(let lambdaName of bundleMeta.lambdaNames)finalLambdas[lambdaName]=lambda;if(lambda.framework?.slug==="nextjs"&&lambda.framework.version){let CORRECTED_MANIFESTS_VERSION="v12.2.0";if(import_semver.default.gte(lambda.framework.version,CORRECTED_MANIFESTS_VERSION)){let pageFiles=[],manifestFileKeys={},manifestFileNames=MANIFEST_FILE_NAMES;for(let fileKey of Object.keys(lambda.files||{})){let isPageFile=fileKey.includes("server/pages/"),isAppFile=fileKey.includes("server/app/");if(isPageFile||isAppFile){let relativePageFile=fileKey.split(`server/${isPageFile?"pages":"app"}/`).pop();relativePageFile&&pageFiles.push(relativePageFile)}for(let manifestFileName of manifestFileNames)fileKey.endsWith(`/${manifestFileName}`)&&(manifestFileKeys[manifestFileName]=fileKey)}let appPathRoutesManifestFilesKey=manifestFileKeys["app-path-routes-manifest.json"],appPathRoutesManifestFile=appPathRoutesManifestFilesKey&&lambda.files?.[appPathRoutesManifestFilesKey],appPathRoutesManifest=appPathRoutesManifestFile?await(0,import_build_utils4.streamToBuffer)(appPathRoutesManifestFile.toStream()).then(res=>JSON.parse(res.toString("utf8"))).catch(()=>({})):{};for(let manifestFileName of manifestFileNames){let manifestFilesKey=manifestFileKeys[manifestFileName],manifestFile=manifestFilesKey&&lambda.files?.[manifestFilesKey];if(!manifestFile)continue;let manifestData=JSON.parse((await(0,import_build_utils4.streamToBuffer)(manifestFile.toStream())).toString("utf8")),normalizedPages=new Set(pageFiles.map(page=>(page=`/${page.replace(/\.js$/,"")}`,page==="/index"&&(page="/"),appPathRoutesManifest[page]||page)));switch(manifestFileName){case"routes-manifest.json":{let filterItem=item=>normalizedPages.has(item.page);manifestData.dynamicRoutes=manifestData.dynamicRoutes?.filter(filterItem),manifestData.staticRoutes=manifestData.staticRoutes?.filter(filterItem);break}case"server/pages-manifest.json":{for(let key of Object.keys(manifestData))isNextjsDynamicRoute(key)&&!normalizedPages.has(key)&&delete manifestData[key];break}case"server/app-paths-manifest.json":{if(appPathRoutesManifest)for(let key of Object.keys(manifestData)){let normalizedKey=appPathRoutesManifest[key]||key.replace(/(^|\/)(page|route)$/,"");isNextjsDynamicRoute(normalizedKey)&&!normalizedPages.has(normalizedKey)&&delete manifestData[key]}break}}lambda.files&&(lambda.files[manifestFilesKey]=new import_build_utils4.FileBlob({contentType:"application/json",data:JSON.stringify(manifestData)}))}}}}return finalLambdas}async function groupBundleableLambdas(params){let lambdas={};for(let[path2,lambda]of params.functions.lambdas)lambda.experimentalAllowBundling&&(lambdas[path2]=lambda);for(let[path2,prerender]of params.functions.prerenders)prerender.lambda.experimentalAllowBundling&&(lambdas[path2]=prerender.lambda);if(Object.keys(lambdas).length===0)return;let grouped=await groupLambdas(lambdas,{force:void 0,maxBundleSizeMb:params.options.maxBundleSizeMb,debug:params.options.debugGroupLambdas});for(let[path2,lambda]of Object.entries(grouped))if(params.functions.lambdas.has(path2))params.functions.lambdas.set(path2,lambda);else{let prerender=params.functions.prerenders.get(path2);if(prerender)prerender.lambda=lambda;else throw new Error(`Grouped lambda "${path2}" does not match any build output`)}}var import_build_utils6=__toESM(require_build_utils(),1);import{join as join3,relative}from"path";import{readdir,stat}from"fs/promises";var SUFFIX=".func";async function*createFunctionEntriesIterator(dir,root=dir){let entries;try{entries=await readdir(dir,{withFileTypes:!0})}catch(error){if(!(typeof error=="object"&&error!==null&&"code"in error)||error.code!=="ENOENT"&&error.code!=="ENOTDIR")throw error;entries=[]}let names;for(let entry of entries){let absolutePath=join3(dir,entry.name),isSymbolicLink=entry.isSymbolicLink();if(entry.isDirectory()||isSymbolicLink&&(await stat(absolutePath)).isDirectory())if(entry.name.endsWith(SUFFIX)){names??=new Set(entries.map(e=>e.name));let baseName=entry.name.slice(0,-SUFFIX.length);yield{hasPrerenderConfig:names.has(`${baseName}.prerender-config.json`),isSymbolicLink,path:relative(root,absolutePath.substring(0,absolutePath.length-SUFFIX.length))}}else yield*createFunctionEntriesIterator(absolutePath,root)}}import{dirname,isAbsolute,join as join4,relative as relative2,resolve as resolve2,sep}from"node:path";var import_build_utils5=__toESM(require_build_utils(),1);import{lstat,readlink,realpath,readdir as readdir2,stat as stat2}from"node:fs/promises";import assert from"assert";import path from"path";async function glob(options){if(!path.isAbsolute(options.cwd))throw new Error(`basePath/cwd must be an absolute path (${options.cwd})`);let results={},statCache={},symlinks={},files=await walkAll(options.cwd,!!options.follow,statCache,symlinks),dirs=new Set,dirsWithEntries=new Set;for(let relativePath of files){let fsPath=path.join(options.cwd,relativePath),stats=statCache[fsPath];assert(stats,`statCache does not contain value for ${relativePath}`);let isSymlink=symlinks[fsPath];if(options.follow&&(isSymlink||(await lstat(fsPath)).isSymbolicLink())){let target=await readlink(fsPath),absoluteTarget=path.resolve(path.dirname(fsPath),target);if(path.relative(options.cwd,absoluteTarget).startsWith(`..${path.sep}`))continue}if(isSymlink||stats.isFile()||stats.isDirectory()){isSymlink&&(stats=await lstat(fsPath));let dirname3=path.dirname(relativePath);if(dirsWithEntries.add(dirname3),stats.isDirectory()){dirs.add(relativePath);continue}results[relativePath]=new import_build_utils5.FileFsRef({mode:stats.mode,fsPath,size:stats.size})}}if(options.includeDirectories)for(let relativePath of dirs){if(dirsWithEntries.has(relativePath))continue;let fsPath=path.join(options.cwd,relativePath),stats=statCache[fsPath];results[relativePath]=new import_build_utils5.FileFsRef({mode:stats.mode,fsPath,size:stats.size})}return results}async function walkAll(cwd,follow,statCache,symlinks){let files=[];async function walk(dirAbs,realDir,ancestors){let entries;try{entries=await readdir2(dirAbs,{withFileTypes:!0})}catch(err){let code2=err.code;if(code2==="ENOENT"||code2==="ENOTDIR")return;throw err}await Promise.all(entries.map(async entry=>{let abs=path.join(dirAbs,entry.name);if(entry.isSymbolicLink())if(follow){let stats=await stat2(abs).catch(()=>lstat(abs).catch(()=>null));if(stats===null)return;if(statCache[abs]=stats,files.push(abs),stats.isDirectory()){let real=await realpath(abs).catch(()=>null);real!==null&&!ancestors.has(real)&&await walk(abs,real,new Set(ancestors).add(real))}}else{let stats=await lstat(abs).catch(()=>null);if(stats===null)return;statCache[abs]=stats,symlinks[abs]=!0,files.push(abs)}else if(entry.isDirectory()){let stats=await lstat(abs).catch(()=>null);if(stats===null)return;statCache[abs]=stats,files.push(abs);let real=path.join(realDir,entry.name);await walk(abs,real,new Set(ancestors).add(real))}else{let stats=await lstat(abs).catch(()=>null);if(stats===null)return;statCache[abs]=stats,files.push(abs)}}))}let cwdReal=follow?await realpath(cwd).catch(()=>null):cwd;return cwdReal!==null&&await walk(cwd,cwdReal,new Set([cwdReal])),files.map(abs=>path.relative(cwd,abs)).sort((a,b)=>a.localeCompare(b,"en"))}import{isNativeError}from"node:util/types";import{readlink as readlink2,realpath as realpath2}from"node:fs/promises";async function readFunctions(params){let fileFsRefsCache=new Map,entries=[],functionsDir=join4(params.outputDir,"functions"),iterator=enumerate(createFunctionEntriesIterator(functionsDir));await Promise.all(Array.from({length:params.concurrency??32},async()=>{for await(let[index,entry]of iterator)entries[index]=await deserializeFunctionEntry({prebuilt:params.prebuilt,entry,fileFsRefsCache,functionsDir,repoRootPath:params.repoRootPath})}));let serverActionsManifestPaths=new Set,edgeFunctions=new Map,unsortedPrerenders=new Map,functionSymlinks=new Map,lambdas=new Map;for(let functionEntry of entries)functionEntry.symlinkTarget!==void 0&&functionSymlinks.set(functionEntry.path,functionEntry.symlinkTarget),functionEntry.serverActionsManifestPath&&serverActionsManifestPaths.add(functionEntry.serverActionsManifestPath),functionEntry.output?.type==="Prerender"?unsortedPrerenders.set(functionEntry.path,functionEntry.output):functionEntry.output?.type==="Lambda"?lambdas.set(functionEntry.path,functionEntry.output):functionEntry.output?.type==="EdgeFunction"&&edgeFunctions.set(functionEntry.path,functionEntry.output);for(let[path2,target]of functionSymlinks){let destFunction=unsortedPrerenders.get(target)?.lambda??edgeFunctions.get(target)??lambdas.get(target);if(!destFunction)throw new Error(`Could not find target "${target}" Lambda or EdgeFunction for path "${path2}"`);let srcPrerender=unsortedPrerenders.get(path2);if(!srcPrerender)destFunction.type==="Lambda"?lambdas.set(path2,destFunction):destFunction.type==="EdgeFunction"&&edgeFunctions.set(path2,destFunction);else{if(destFunction.type!=="Lambda")throw new Error(`Unexpected function type "${destFunction.type}" at path "${path2}"`);srcPrerender.lambda=destFunction}}let prerenders=new Map;for(let[path2,prerender]of[...unsortedPrerenders].sort((a,b)=>(a[1].group??0)-(b[1].group??0)))validatePrerender(prerender),prerenders.set(path2,prerender);return{edgeFunctions,lambdas,prerenders,serverActionsManifestPaths}}async function*enumerate(iterable){let index=0;for await(let item of iterable)yield[index++,item]}async function deserializeFunctionEntry(params){let functionDir=join4(params.functionsDir,`${params.entry.path}.func`),prerenderConfigPath=join4(params.functionsDir,`${params.entry.path}.prerender-config.json`),configPromise=params.entry.hasPrerenderConfig?maybeReadJSON(prerenderConfigPath):void 0;configPromise?.catch(()=>{});let lambda,serverActionsManifestPath,symlinkTarget;if(params.entry.isSymbolicLink)symlinkTarget=await readlink2(functionDir).then(link=>join4(dirname(params.entry.path),link).slice(0,-5));else{let functionConfigPath=join4(functionDir,".vc-config.json"),[functionConfig,files]=await Promise.all([maybeReadJSON(functionConfigPath),glob({cwd:functionDir,includeDirectories:!0})]);if(!functionConfig)throw new Error(`Could not load function config: "${functionConfigPath}"`);if(delete files[".vc-config.json"],functionConfig.filePathMap&&await hydrateFilesMap(files,functionConfig.filePathMap,params.repoRootPath,params.fileFsRefsCache,params.prebuilt),"type"in functionConfig&&functionConfig.type==="EdgeFunction"||functionConfig.runtime==="edge")return{path:params.entry.path,output:new import_build_utils6.EdgeFunction({deploymentTarget:"v8-worker",...functionConfig,files})};let supportsResponseStreaming=functionConfig.supportsResponseStreaming??functionConfig.experimentalResponseStreaming;lambda="launcherType"in functionConfig&&functionConfig.launcherType==="Nodejs"?new import_build_utils6.NodejsLambda({...functionConfig,files,supportsResponseStreaming:functionConfig.awsLambdaHandler===void 0||functionConfig.awsLambdaHandler===""||supportsResponseStreaming}):new import_build_utils6.Lambda({...functionConfig,files,supportsResponseStreaming}),serverActionsManifestPath=functionConfig.filePathMap?.[".next/server/server-reference-manifest.json"]}if(configPromise){let prerenderConfig=await configPromise;if(prerenderConfig)return{path:params.entry.path,symlinkTarget,serverActionsManifestPath,output:new import_build_utils6.Prerender({...prerenderConfig,fallback:await deserializePrerenderFallback(prerenderConfigPath,prerenderConfig.fallback,params),initialMetadata:sanitizeInitialMetadata(prerenderConfig.initialMetadata),lambda})}}return{path:params.entry.path,symlinkTarget,output:lambda,serverActionsManifestPath}}function validatePrerender(prerender){if(prerender.lambda===void 0)throw new Error('Prerender "buildResult" is missing "lambda" property')}async function hydrateFilesMap(files,filesMap,repoRootPath,fileFsRefsCache,prebuilt){let rootPath=prebuilt?await realpath2(repoRootPath):void 0;async function hydrateFile(projectPath){let fsPath=join4(repoRootPath,projectPath);rootPath!==void 0&&await validatePrebuiltFilePath(fsPath,rootPath,`file map source "${projectPath}"`,!0);let file=await import_build_utils6.FileFsRef.fromFsPath({fsPath});return fileFsRefsCache.set(projectPath,file),file}let pending;for(let functionPath in filesMap){let projectPath=filesMap[functionPath],cached=fileFsRefsCache.get(projectPath);if(cached&&!(cached instanceof Promise)){files[functionPath]=cached;continue}let filePromise=cached;if(!filePromise){let promise=hydrateFile(projectPath);fileFsRefsCache.set(projectPath,promise),filePromise=promise}(pending??=[]).push(filePromise.then(file=>{files[functionPath]=file}))}pending&&await Promise.all(pending)}async function validatePrebuiltFilePath(fsPath,rootPath,source,enableDanglingSymlinks=!1){let resolvedPath;try{resolvedPath=await realpath2(fsPath)}catch(error){if(!enableDanglingSymlinks||!isNativeError(error)||!("code"in error)||error.code!=="ENOENT")throw error;let target=await readlink2(fsPath),parentPath=await validatePrebuiltFilePath(dirname(fsPath),rootPath,source);resolvedPath=resolve2(parentPath,target)}let sourcePath=relative2(rootPath,resolvedPath);if(sourcePath===".."||sourcePath.startsWith(`..${sep}`)||isAbsolute(sourcePath))throw new import_build_utils6.NowBuildError({code:"INVALID_PREBUILT_FILE_PATH",message:`Prebuilt ${source} must be inside the uploaded project.`});return resolvedPath}function sanitizeInitialMetadata(initialMetadata){try{if(typeof initialMetadata!="object"||initialMetadata===null||Array.isArray(initialMetadata))return;let{compute,htmlSize}=initialMetadata;return compute!=="blocking"&&compute!=="resuming"&&compute!=="static"||htmlSize!==void 0&&(!Number.isSafeInteger(htmlSize)||htmlSize<0)?void 0:{compute,...htmlSize!==void 0&&{htmlSize}}}catch{return}}async function deserializePrerenderFallback(prerenderConfigPath,fallback,options){if(fallback==null)return null;let path2=typeof fallback=="string"?fallback:fallback.fsPath,fsPath=join4(dirname(prerenderConfigPath),path2);return options.prebuilt&&await validatePrebuiltFilePath(fsPath,await realpath2(options.repoRootPath),`prerender fallback "${path2}"`),typeof fallback=="string"?import_build_utils6.FileFsRef.fromFsPath({fsPath}):fallback.mode!==void 0?new import_build_utils6.FileFsRef({mode:fallback.mode,size:fallback.size,contentType:fallback.contentType,fsPath}):import_build_utils6.FileFsRef.fromFsPath({mode:fallback.mode,size:fallback.size,contentType:fallback.contentType,fsPath})}var import_ignore=__toESM(require_ignore(),1);import{basename,isAbsolute as isAbsolute2,join as join5,relative as relative3,sep as sep2}from"node:path";import{readFile as readFile2,readdir as readdir3,realpath as realpath3,stat as stat3}from"node:fs/promises";function contains(root,path2){let rel=relative3(root,path2);return rel!==".."&&!rel.startsWith(`..${sep2}`)&&!isAbsolute2(rel)}function invalidSource(){throw new DescribeError("invalid_build_output","Build output references files outside the authorized output or includes excluded source files. Remove unsafe links and excluded file mappings, then rebuild.")}var vcs=(0,import_ignore.default)().add([".hg",".git",".gitmodules",".svn","CVS"]),dependencies=(0,import_ignore.default)().add(["node_modules",".next",".yarn/cache",".pnp*",".venv","venv","__pycache__","/target"]);async function readIgnore(root){let read=name=>readFile2(join5(root,name),"utf8").catch(error=>{if(error.code==="ENOENT")return"";throw error}),[vercelignore,nowignore]=await Promise.all([read(".vercelignore"),read(".nowignore")]);if(vercelignore&&nowignore)throw new DescribeError("invalid_build_output","Cannot use both .vercelignore and .nowignore. Remove the deprecated .nowignore file and retry.");return(0,import_ignore.default)().add((vercelignore||nowignore).replace(/(\n|^)\.\//g,"$1"))}async function validateBuildOutput(options){let root=await realpath3(options.repoRootPath),output=await realpath3(options.outputDir),expectedOutput=join5(root,relative3(options.repoRootPath,options.outputDir));(!contains(root,output)||relative3(expectedOutput,output)!=="")&&invalidSource();let project=options.directory?await realpath3(options.directory):root,bases=[root];if(project!==root&&contains(root,project))for(let segment of relative3(root,project).split(sep2))bases.push(join5(bases[bases.length-1],segment));let ignores=await Promise.all(bases.map(async base=>({base,rules:await readIgnore(base)}))),validateSource=async path2=>{let resolved=await realpath3(path2);for(let source of[join5(root,relative3(options.repoRootPath,path2)),resolved]){contains(root,source)||invalidSource();let rel=relative3(root,source).split(sep2).join("/");if(rel&&(vcs.ignores(rel)&&invalidSource(),!contains(output,source)))for(let{base,rules}of ignores){if(!contains(base,source))continue;let relToBase=relative3(base,source).split(sep2).join("/");relToBase&&rules.ignores(relToBase)&&!dependencies.ignores(relToBase)&&invalidSource()}}return resolved},configs=[],visited=new Set;async function walk(path2,ancestors){let resolved=await realpath3(path2);if((!contains(output,resolved)||ancestors.has(resolved))&&invalidSource(),(await stat3(resolved)).isDirectory()){if(visited.has(resolved))return;visited.add(resolved);let next=new Set(ancestors).add(resolved);for(let name of await readdir3(resolved))await walk(join5(resolved,name),next)}else basename(path2)===".vc-config.json"&&configs.push(resolved)}await walk(output,new Set);for(let path2 of configs){let config=JSON.parse(await readFile2(path2,"utf8"));for(let source of Object.values(config.filePathMap??{}))typeof source!="string"&&invalidSource(),await validateSource(join5(options.repoRootPath,source))}return validateSource}async function prepareFunctions(options){await validateBuildOutput(options);let config=await getBuildOutputConfigOrThrow(options.outputDir);if(config.experimentalServicesV2!==void 0)throw new DescribeError("unsupported_output","This build contains service outputs, which describe does not support.");let functions=await readFunctions({outputDir:options.outputDir,repoRootPath:options.repoRootPath,prebuilt:!0});if(functions.edgeFunctions.size)throw new DescribeError("unsupported_output","This build contains Edge Functions, which cannot be provisioned as AWS Lambda functions.");await groupBundleableLambdas({functions,options:{}});let allFunctions=[...functions.lambdas,...functions.prerenders],groups=new Map,middlewarePaths=getMiddlewareRouting({routes:config.routes??[],functions});for(let[path2,output]of allFunctions){let lambda=output.type==="Prerender"?output.lambda:output;if(lambda.runtime==="container")throw new DescribeError("unsupported_output","This build contains container functions. Describe supports native AWS Lambda functions only.");let outputs=groups.get(lambda)??[];groups.set(lambda,outputs),outputs.push({sourceKind:output.type==="Prerender"?"prerender":"lambda",middleware:output.type==="Lambda"&&middlewarePaths.has(path2)?{}:void 0,path:path2})}return[...groups].map(([lambda,outputs])=>({lambda,outputs}))}import{writeFile}from"node:fs/promises";import{z}from"zod/v3";var descriptorSchema=z.object({Architectures:z.array(z.string()).optional(),Environment:z.object({Variables:z.record(z.string())}),EphemeralStorage:z.object({Size:z.number()}).optional(),FunctionName:z.string().min(1),Handler:z.string(),Layers:z.array(z.string()),MemorySize:z.number(),Region:z.string().min(1),ResolvableLayers:z.record(z.object({url:z.string()})),Runtime:z.string(),Tags:z.record(z.string()),Timeout:z.number().optional()});async function describeFunctions(client,params){let functions=await prepareFunctions({directory:params.directory,repoRootPath:params.repoRootPath,outputDir:params.outputDir}),buildEnv=z.object({VERCEL_ENCRYPTED_ENV_FILENAME:z.string().min(1),VERCEL_ENCRYPTED_ENV_CONTENT:z.string().min(1)}).parse((await fetchDeploymentBuildEnv(client,params.deploymentId,{quiet:params.quiet})).buildEnv),lambdas=(await Promise.all(functions.map(async({lambda,outputs})=>{lambda.files=hydrateLambdaFiles(lambda,{filename:buildEnv.VERCEL_ENCRYPTED_ENV_FILENAME,contentBase64:buildEnv.VERCEL_ENCRYPTED_ENV_CONTENT});let zip=await lambda.createZip(),bytes2=new Uint8Array(zip.buffer,zip.byteOffset,zip.byteLength),digest=createHash2("sha256").update(bytes2).digest("hex");await writeFile(join6(params.zipDirectory,`${digest}.zip`),bytes2,{mode:384});let config=getFunctionConfig(lambda),input={...config,framework:config.framework&&{slug:config.framework.slug},digest,size:bytes2.length};return outputs.map(output=>({...output,lambda:input}))}))).flat(),{descriptors}=z.object({descriptors:z.array(z.array(descriptorSchema).min(1))}).parse(await client.fetch(`/v2/deployments/${params.deploymentId}/builds/function-descriptors`,{method:"POST",body:JSON.stringify({lambdas}),headers:{"content-type":"application/json"},accountId:params.teamId,retry:{retries:0}}));if(descriptors.length!==lambdas.length)throw new Error("Descriptor count does not match function outputs");return lambdas.map(({path:path2,lambda},index)=>{let regional=descriptors[index];if(new Set(regional.map(d=>d.FunctionName)).size!==1)throw new Error("Inconsistent regional function name");return{path:path2,digest:lambda.digest,size:lambda.size,regional}})}import{isDeepStrictEqual}from"node:util";import{join as join8}from"node:path";import{mkdir as mkdir2,mkdtemp,rename,rm,stat as stat5,writeFile as writeFile3}from"node:fs/promises";var import_build_utils7=__toESM(require_build_utils(),1);import{basename as basename2,join as join7,relative as relative4,sep as sep3}from"node:path";import{copyFile,cp,mkdir,readFile as readFile3,readdir as readdir4,stat as stat4,writeFile as writeFile2}from"node:fs/promises";async function prepareContinuation(params){let{directory,outputDir,destination,manifest,repoRootPath=directory}=params,validateSource=await validateBuildOutput({directory,outputDir,repoRootPath});await cp(outputDir,destination,{recursive:!0,dereference:!0,filter:path2=>basename2(path2)===".vc-config.json"||!relative4(outputDir,path2).split(sep3).slice(0,-1).some(segment=>segment.endsWith(".func"))}),await writeFile2(join7(destination,"provision.json"),JSON.stringify(manifest));let manifests=new Set(await packageManifests(directory));if(repoRootPath!==directory)for(let path2 of await packageManifests(repoRootPath))manifests.add(path2);for(let path2 of Object.keys(manifest)){let configPath=join7(destination,"functions",`${path2}.func`,".vc-config.json"),config=JSON.parse(await readFile3(configPath,"utf8"));for(let[file,source]of Object.entries(config.filePathMap??{}))basename2(file)==="package.json"&&manifests.add(join7(repoRootPath,source));delete config.filePathMap,await writeFile2(configPath,JSON.stringify({...config,architecture:new import_build_utils7.Lambda({...config,files:{}}).architecture}))}let[firstFunction]=Object.keys(manifest);if(firstFunction!==void 0)for(let[i,path2]of[...manifests].entries()){let target=join7(destination,"functions",`${firstFunction}.func`,"__byoc_security__",String(i));await mkdir(target,{recursive:!0}),await copyFile(await validateSource(path2),join7(target,"package.json"))}}async function packageManifests(root){let modules=join7(root,"node_modules"),names=await readdir4(modules).catch(()=>[]),packages=await Promise.all(names.map(async name=>name.startsWith(".")?[]:name.startsWith("@")?(await readdir4(join7(modules,name)).catch(()=>[])).map(entry=>join7(modules,name,entry)):[join7(modules,name)]));return(await Promise.all([root,...packages.flat()].map(dir=>{let path2=join7(dir,"package.json");return stat4(path2).then(()=>path2,()=>{})}))).filter(p=>p!==void 0)}async function describeDeployment(client,params){let output=join8(params.directory,".vercel",params.deploymentId),buildOutput=join8(params.directory,".vercel/output"),build=join8(output,"build"),repoRootPath=params.repoRootPath??params.directory,source=await exists(buildOutput)&&!await exists(join8(buildOutput,"provision.json"))?buildOutput:build;if(!await exists(join8(source,"config.json")))throw new DescribeError("prebuilt_not_found",`No local build output found. Run \`vercel build --id ${params.deploymentId}\` before \`vercel deploy describe\`.`);await mkdir2(join8(params.directory,".vercel"),{recursive:!0});let staging=await mkdtemp(join8(params.directory,".vercel",`.describe-${params.deploymentId}-`)),removeStaging=!0,functions=new Map,layers={},manifest={};try{await mkdir2(join8(staging,"zips")),await mkdir2(join8(staging,"layers"));let described=await describeFunctions(client,{deploymentId:params.deploymentId,directory:params.directory,repoRootPath,outputDir:source,quiet:params.quiet,teamId:params.teamId,zipDirectory:join8(staging,"zips")});for(let{path:path2,digest,size,regional}of described){for(let descriptor of regional){let layerNames=[];for(let arn of descriptor.Layers){let layer=descriptor.ResolvableLayers[arn];if(!layer)throw new DescribeError("invalid_response","The deployment API did not provide a download URL for a required runtime layer.");let name=createHash3("sha256").update(arn).digest("hex");if(layerNames.push(name),layers[name])continue;let response=await fetch(layer.url,{signal:AbortSignal.timeout(6e4)});if(!response.ok)throw new DescribeError("layer_download_failed","Could not download a required runtime layer. Retry this describe command.");let bytes2=new Uint8Array(await response.arrayBuffer()),file=`layers/${createHash3("sha256").update(bytes2).digest("hex")}.zip`;await writeFile3(join8(staging,file),bytes2,{mode:384}),layers[name]=file}let{Region,Layers,ResolvableLayers,...configuration}=descriptor,fn={code:`zips/${digest}.zip`,region:Region,layers:layerNames,configuration},key=`${descriptor.Region}:${descriptor.FunctionName}`,previous=functions.get(key);if(previous&&!isDeepStrictEqual(previous,fn))throw new DescribeError("invalid_response","Conflicting descriptors for the same regional function");functions.set(key,fn)}manifest[path2]={awsAccountId:params.awsAccountId,digest,functionName:regional[0].FunctionName,regions:[...new Set(regional.map(d=>d.Region))],size}}await writeFile3(join8(staging,"descriptor.json"),JSON.stringify({awsAccountId:params.awsAccountId,deploymentId:params.deploymentId,functions:[...functions.values()],layers,version:1},null,2),{mode:384}),await prepareContinuation({directory:params.directory,repoRootPath,outputDir:source,destination:join8(staging,"output"),manifest}),await mkdir2(output,{recursive:!0,mode:448});let backup=join8(staging,"backup");await mkdir2(backup);let moves=[],move=async(from,to)=>{await rename(from,to),moves.push([from,to])},preserve=async(path2,name)=>{await exists(path2)&&await move(path2,join8(backup,name))};try{for(let name of["zips","layers","descriptor.json"])await preserve(join8(output,name),name),await move(join8(staging,name),join8(output,name));source===buildOutput?(await preserve(build,"build"),await move(buildOutput,build)):await preserve(buildOutput,"output"),await move(join8(staging,"output"),buildOutput)}catch(error){removeStaging=!1;for(let[from,to]of moves.reverse())await rename(to,from);throw removeStaging=!0,error}return output}finally{removeStaging&&await rm(staging,{recursive:!0,force:!0})}}var exists=path2=>stat5(path2).then(()=>!0,error=>{if(error.code==="ENOENT")return!1;throw error});import{join as join10}from"node:path";import{join as join9,relative as relative5}from"node:path";async function resolveDescribeProject(client){try{let link=await getLinkFromDir(join9(client.cwd,".vercel"));if(link){let{repoRoot,resolvedRootDirectory}=resolvePerDirectoryLinkRoot(client.cwd,link.settings?.rootDirectory);return{...link,directory:join9(repoRoot,resolvedRootDirectory),repoRootPath:repoRoot}}let repo=await getRepoLink(client,client.cwd);if(!repo?.repoConfig?.projects.length)throw new DescribeError("not_linked","No linked project found. Run `vercel link`, or restore CI project settings with `vercel pull --yes`.");let matches=findProjectsFromPath(repo.repoConfig.projects,relative5(repo.rootPath,client.cwd)),candidates=matches.length?matches:repo.repoConfig.projects;if(candidates.length!==1)throw new DescribeError("ambiguous_project","Multiple projects are linked here. Run this command from the intended project directory, or pass --cwd <PROJECT_DIRECTORY>.");let project=await getProjectLink(client,client.cwd,candidates[0].id,!0);if(!project?.repoRoot)throw new Error("Project link changed");return{...project,directory:join9(project.repoRoot,project.projectRootDirectory||""),repoRootPath:project.repoRoot}}catch(error){throw error instanceof DescribeError?error:new DescribeError("invalid_project_link","Could not read the local project link. Check that .vercel/project.json or .vercel/repo.json is readable and contains valid project settings.")}}async function describe(client){let asJson=wantsMachineReadableOutput("deploy",client.argv),fail=(reason,message,code2=1)=>(asJson?client.stderr.write(`${JSON.stringify({status:"error",reason,message})}
20
+ `):output_manager_default.error(message),code2),parsed;try{parsed=parseArguments(client.argv.slice(2),getFlagsSpecification(describeSubcommand.options))}catch(error){return fail("invalid_arguments",`${isArgumentError(error)?error.message:"Invalid describe options"}. Run \`vercel deploy describe --help\` for usage.`,2)}asJson=parsed.flags["--json"]===!0;let deploymentId=parsed.flags["--id"],awsAccountId=parsed.flags["--aws-account-id"];if((parsed.args[0]==="deploy"?parsed.args.slice(1):parsed.args).length>1)return fail("invalid_arguments","Unexpected positional arguments. Run `vercel deploy describe --help` for usage.",2);if(!deploymentId||!/^dpl_[a-zA-Z0-9]+$/.test(deploymentId))return fail("invalid_arguments","Provide a deployment ID with --id, such as --id dpl_xxx.",2);if(!awsAccountId||!/^\d{12}$/.test(awsAccountId))return fail("invalid_arguments","Provide a 12-digit AWS account ID with --aws-account-id.",2);if(process.platform==="win32")return fail("unsupported_platform","vercel deploy describe is not supported on Windows yet. Run it on macOS or Linux.");let telemetry=new DescribeTelemetryClient({opts:{store:client.telemetryEventStore}});telemetry.trackCliOptionId(deploymentId),telemetry.trackCliOptionAwsAccountId(awsAccountId),telemetry.trackCliFlagJson(parsed.flags["--json"]);try{let project=await resolveDescribeProject(client),explicitTeam=parsed.flags["--scope"]?client.config.currentTeam:process.env.VERCEL_ORG_ID;if(explicitTeam&&explicitTeam!==project.orgId)return fail("scope_mismatch","The selected team does not match the local project link. Use the linked team, or run `vercel pull --yes` with the intended VERCEL_ORG_ID and VERCEL_PROJECT_ID.");if(process.env.VERCEL_PROJECT_ID&&process.env.VERCEL_PROJECT_ID!==project.projectId)return fail("project_mismatch","VERCEL_PROJECT_ID differs from the linked project. Run `vercel pull --yes` to restore settings for the intended project.");client.config.currentTeam=project.orgId.startsWith("team_")?project.orgId:void 0,asJson||output_manager_default.log(`Preparing ${deploymentId} in team ${project.orgId} for AWS account ${awsAccountId}`);let directory=await describeDeployment(client,{directory:project.directory,repoRootPath:project.repoRootPath,deploymentId,awsAccountId,teamId:project.orgId,quiet:asJson}),descriptor=join10(directory,"descriptor.json");if(asJson)client.stdout.write(`${JSON.stringify({deployment:{id:deploymentId},awsAccountId,directory,descriptor})}
21
+ `);else{client.stdout.write(`${descriptor}
22
+ `),output_manager_default.log(`Prepared function packages in ${directory}`);let cwd=project.directory===client.cwd?"":` --cwd ${quoteArg(project.directory)}`;output_manager_default.log(`Provision the functions in descriptor.json, then run:
23
+ vercel deploy continue --id ${deploymentId}${cwd}`)}return 0}catch(error){return output_manager_default.debug(error instanceof Error?error.stack??error.message:String(error)),error instanceof DescribeError?fail(error.reason,error.message):error instanceof InvalidToken||isAPIError(error)&&error.status===401?fail("not_authorized","Could not authenticate with Vercel. Check VERCEL_TOKEN in CI, or run `vercel login`."):isAPIError(error)&&error.status===403?fail("not_authorized","Vercel denied access to this deployment. Check that your token has access to the linked project and team."):isAPIError(error)&&error.status===404?fail("not_found",`Deployment ${deploymentId} was not found, or manual provisioning is not enabled for this team.`):isAPIError(error)&&error.status<500&&error.serverMessage?fail("api_error",error.serverMessage):fail("describe_failed","Could not prepare deployment functions. Check the local build and deployment access, then rerun this command.")}}var import_fs_extra3=__toESM(require_lib(),1);import{join as join12}from"path";var import_fs_extra2=__toESM(require_lib(),1),import_ci_info=__toESM(require_ci_info(),1),import_build_utils8=__toESM(require_build_utils(),1),import_error_utils=__toESM(require_dist(),1);import{join as join11}from"path";var VERCEL_DIR_ANONYMOUS="anonymous.json";function anonymousStatePath(cwd){return join11(cwd,VERCEL_DIR,VERCEL_DIR_ANONYMOUS)}async function readAnonymousState(cwd){try{let state=await(0,import_fs_extra2.readJSON)(anonymousStatePath(cwd));if(typeof state?.projectId=="string"&&typeof state.token=="string"&&typeof state.claimUrl=="string"&&typeof state.expiresAt=="number")return state}catch{}return null}async function writeAnonymousState(cwd,state){let path2=anonymousStatePath(cwd);await(0,import_fs_extra2.outputJSON)(path2,state,{spaces:2,mode:384}),await(0,import_fs_extra2.chmod)(path2,384),await addToGitIgnore(cwd)}async function clearAnonymousState(cwd){await(0,import_fs_extra2.remove)(anonymousStatePath(cwd))}async function bootstrapAnonymousProject(client){let{projectId,token,claimUrl,expiresAt}=await client.fetch("/v1/anonymous/projects?surface=cli",{method:"POST",body:{},useCurrentTeam:!1,retry:{retries:0}});return{projectId,token,claimUrl,expiresAt}}async function ensureAnonymousLink(client,cwd,{requireExistingState=!1,confirmed=!0}={}){if(import_ci_info.default.isCI||!!((0,import_build_utils8.getPlatformEnv)("ORG_ID")&&(0,import_build_utils8.getPlatformEnv)("PROJECT_ID"))||!!await getLinkFromDir(getVercelDirectory(cwd))||!!(await getRepoLink(client,cwd))?.repoConfig)return"refused";let state=await readAnonymousState(cwd);if(state&&state.expiresAt<=Date.now())return output_manager_default.prettyError({message:`Your temporary deployment has expired. Run ${getCommandName("login")} to create an account and keep deploying this app.`}),"failed";if(!state&&requireExistingState)return"refused";if(!confirmed&&!state)return"confirmation-required";if(!state){try{state=await bootstrapAnonymousProject(client)}catch(err){return output_manager_default.debug(`Anonymous bootstrap failed: ${(0,import_error_utils.errorToString)(err)}`),"refused"}await writeAnonymousState(cwd,state),output_manager_default.log("Not authenticated. Deploying anonymously.")}return client.authConfig={token:state.token,skipWrite:!0},delete process.env.VERCEL_TEAM_ID,{status:"linked",anonymous:!0,expiresAt:state.expiresAt,claimUrl:state.claimUrl,org:{type:"user",id:"",slug:"anonymous"},project:{id:state.projectId,name:state.projectId}}}function validateAnonymousTarget(isAnonymous,target){return isAnonymous&&target&&target!=="production"?(output_manager_default.error(`Anonymous deployments always target production, so "${target}" is not available. Remove the ${param("--target")} option, or run ${getCommandName("login")} to deploy to other environments.`),!1):!0}async function setupAnonymousDeployment(client,cwd,{isAnonymous,dryRun}){isAnonymous||await clearAnonymousState(cwd);let anonymousLink;if(isAnonymous){let anonymous=await ensureAnonymousLink(client,cwd,{requireExistingState:dryRun});if(anonymous==="refused"){output_manager_default.log("Temporary deployments aren't available for this attempt. Log in to continue.");let{default:promptMissingCredentials}=await import("../../chunks/prompt-missing-credentials-6IXO6VND.js"),loginExitCode=await promptMissingCredentials(client);if(loginExitCode!==0)return loginExitCode;isAnonymous=!1}else{if(anonymous==="failed")return 1;if(anonymous==="confirmation-required")return 1;anonymousLink=anonymous}}return{isAnonymous,anonymousLink}}async function handleAnonymousDeploymentError({client,cwd,error,link,isV0,retry}){if(!(!link||!isAPIError(error))){if(error.code==="anonymous_project_claimed"){if(client.nonInteractive||!client.stdin.isTTY)return output_manager_default.prettyError({message:`This project was claimed successfully. Run ${getCommandName("login")} to continue deploying it.`}),1;output_manager_default.log("This project was claimed successfully. Log in to continue deploying it.");let loginExitCode;try{let{default:login}=await import("../../chunks/login-IJLY5XTT.js");loginExitCode=await login(client,{shouldParseArgs:!1})}catch(loginError){return printError(loginError),1}if(loginExitCode!==0)return loginExitCode;let claimedProjectLink=await ensureLink("deploy",client,cwd,{autoConfirm:!0,projectName:link.project.id,failIfNotFound:!0,allowOwnerLookupFallback:!0,v0:isV0});return typeof claimedProjectLink=="number"?claimedProjectLink:(await linkFolderToProject(client,cwd,{projectId:claimedProjectLink.project.id,orgId:claimedProjectLink.org.id},claimedProjectLink.project.name,claimedProjectLink.org.slug,"link",!0,!1),await clearAnonymousState(cwd),retry())}if(error.status===401||error.status===410)return await clearAnonymousState(cwd),output_manager_default.prettyError({message:`Your temporary deployment has expired. Run ${getCommandName("login")} to create an account and keep deploying this app.`}),1}}async function runImplicitBuild(client,cwd){let projectJsonPath=join12(cwd,VERCEL_DIR,VERCEL_DIR_PROJECT),projectJsonExists=await import_fs_extra3.default.pathExists(projectJsonPath);projectJsonExists||await import_fs_extra3.default.outputJSON(projectJsonPath,{settings:{}},{spaces:2}),await import_fs_extra3.default.pathExists(join12(cwd,"package.json"))&&output_manager_default.log("Building your project locally\u2026");let originalArgv=client.argv,originalCwd=client.cwd,originalStdout=client.stdout,previousVercelFirstDeployment=process.env.VERCEL_FIRST_DEPLOYMENT;client.cwd=cwd,client.setArgv([...originalArgv.slice(0,2),"build","--prod","--yes"]),process.env.VERCEL_FIRST_DEPLOYMENT="1",client.stdout=createSinkStream();try{let build=(await import("../build/index.js")).default;return await build(client)}finally{client.setArgv(originalArgv),client.cwd=originalCwd,client.stdout=originalStdout,previousVercelFirstDeployment===void 0?delete process.env.VERCEL_FIRST_DEPLOYMENT:process.env.VERCEL_FIRST_DEPLOYMENT=previousVercelFirstDeployment,projectJsonExists||await import_fs_extra3.default.remove(projectJsonPath)}}function createSinkStream(){return{isTTY:!1,write:()=>!0}}var COMMAND_CONFIG={init:getCommandAliases(initSubcommand),continue:getCommandAliases(continueSubcommand),describe:getCommandAliases(describeSubcommand)},deploy_default=async client=>{let telemetryClient=new DeployTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArguments=null,flagsSpecification=getFlagsSpecification(deployCommand.options);try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let subArgs=parsedArguments.args[0]===deployCommand.name?parsedArguments.args.slice(1):parsedArguments.args,{subcommand,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG);function printSubcommandHelp(command){output_manager_default.print(help(command,{parent:deployCommand,columns:client.stderr.columns}))}switch(subcommand){case"init":return parsedArguments.flags["--help"]?(telemetryClient.trackCliFlagHelp("deploy",subcommandOriginal),printSubcommandHelp(initSubcommand),0):(telemetryClient.trackCliSubcommandInit(subcommandOriginal),handleInitDeployment(client,telemetryClient));case"continue":return parsedArguments.flags["--help"]?(telemetryClient.trackCliFlagHelp("deploy",subcommandOriginal),printSubcommandHelp(continueSubcommand),0):(telemetryClient.trackCliSubcommandContinue(subcommandOriginal),handleContinueSubcommand(client,telemetryClient));case"describe":return parsedArguments.flags["--help"]?(telemetryClient.trackCliFlagHelp("deploy",subcommandOriginal),printSubcommandHelp(describeSubcommand),0):(telemetryClient.trackCliSubcommandDescribe(subcommandOriginal),describe(client));default:return parsedArguments.flags["--help"]?(telemetryClient.trackCliFlagHelp("deploy"),output_manager_default.print(help(deployCommand,{columns:client.stderr.columns})),0):handleDefaultDeploy(client,telemetryClient)}};async function handleInitDeployment(client,telemetryClient){let flagsSpecification=getFlagsSpecification(initSubcommand.options),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error2){return printError(error2),2}telemetryClient.trackCliFlagJson(parsedArguments.flags["--json"]),telemetryClient.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetryClient.trackCliOptionProject(parsedArguments.flags["--project"]);let projectNameOrId=parsedArguments.flags["--project"],formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,args=parsedArguments.args;args[0]==="deploy"&&(args=args.slice(1)),args[0]==="init"&&(args=args.slice(1));let paths;args.length>0?(paths=args.map(item=>resolve3(client.cwd,item)),telemetryClient.trackCliArgumentProjectPath(paths[0])):paths=[client.cwd];let pathValidation=await validatePaths(client,paths);if(!pathValidation.valid)return pathValidation.exitCode;await compileVercelConfig(paths[0]);let localConfig=paths[0]===client.cwd?client.localConfig||readLocalConfig(paths[0]):readLocalConfig(paths[0]);if(localConfig){client.localConfig=localConfig;let{version}=localConfig,file=highlight(localConfig[import_client.fileNameSymbol]),prop=code("version");if(version)if(typeof version=="number"){if(version!==2){let two=code(String(2));return output_manager_default.error(`The value of the ${prop} property within ${file} can only be ${two}.`),1}}else return output_manager_default.error(`The ${prop} property inside your ${file} file must be a number.`),1}let{log,debug,error}=output_manager_default,quiet=!client.stdout.isTTY,{path:cwd}=pathValidation,autoConfirm=parsedArguments.flags["--yes"],target=parseTarget({flagName:"target",flags:parsedArguments.flags});telemetryClient.trackTargetEnvironment(target);let parsedArchive=parsedArguments.flags["--archive"];if(typeof parsedArchive=="string"&&!(isValidArchive(parsedArchive)||parsedArchive===deprecatedArchiveSplitTgz))return output_manager_default.error(`Format must be one of: ${import_client.VALID_ARCHIVE_FORMATS.join(", ")}`),2;parsedArchive===deprecatedArchiveSplitTgz&&output_manager_default.print(`${prependEmoji(`${param("--archive=tgz")} now has the same behavior as ${param("--archive=split-tgz")}. Please use ${param("--archive=tgz")} instead.`,emoji("warning"))}
24
+ `);let cliMeta=parseMeta(parsedArguments.flags["--meta"]),isV0=cliMeta.v0==="true";getGitExecutable(cwd);let link=await ensureLink("deploy",client,cwd,{autoConfirm,projectName:projectNameOrId??localConfig?.name,failIfNotFound:!!projectNameOrId,v0:isV0});if(typeof link=="number")return link;let{org,project}=link,rootDirectory=project.rootDirectory,sourceFilesOutsideRootDirectory=project.sourceFilesOutsideRootDirectory??!0;link.repoRoot&&(cwd=link.repoRoot);let contextName=org.slug;if(client.config.currentTeam=org.type==="team"?org.id:void 0,rootDirectory&&await validateRootDirectory(cwd,join13(cwd,rootDirectory),project?`To change your Project Settings, go to https://vercel.com/${org?.slug}/${project.name}/settings`:"")===!1)return 1;if(await promptExperimentalServicesMigration({client,cwd:join13(cwd,rootDirectory||""),autoConfirm:!!parsedArguments.flags["--yes"],nonInteractive:client.nonInteractive})&&(localConfig=readLocalConfig(join13(cwd,rootDirectory||""))),rootDirectory){let rootDirectoryPath=join13(cwd,rootDirectory);await compileVercelConfig(rootDirectoryPath);let rootDirectoryConfig=readLocalConfig(rootDirectoryPath);rootDirectoryConfig?(debug(`Read local config from root directory (${rootDirectory})`),localConfig=rootDirectoryConfig):localConfig&&output_manager_default.print(`${prependEmoji(`The ${highlight(localConfig[import_client.fileNameSymbol])} file should be inside of the provided root directory.`,emoji("warning"))}
10
25
  `)}localConfig=localConfig||{},localConfig.name&&output_manager_default.print(`${prependEmoji(`The ${code("name")} property in ${highlight(localConfig[import_client.fileNameSymbol])} is deprecated (https://vercel.link/name-prop)`,emoji("warning"))}
11
- `);let isObject=item=>Object.prototype.toString.call(item)==="[object Object]";if(typeof localConfig.env<"u"&&!isObject(localConfig.env))return error(`The ${code("env")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1;if(typeof localConfig.build<"u"){if(!isObject(localConfig.build))return error(`The ${code("build")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1;if(typeof localConfig.build.env<"u"&&!isObject(localConfig.build.env))return error(`The ${code("build.env")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1}let meta=Object.assign({},parseMeta(localConfig.meta),cliMeta),gitMetadata=createGitMeta(join4(cwd,project.rootDirectory||""),project);gitMetadata.catch(()=>{});let deploymentEnv=Object.assign({},parseEnv(localConfig.env),parseEnv(parsedArguments.flags["--env"])),deploymentBuildEnv=Object.assign({},parseEnv(localConfig.build&&localConfig.build.env),parseEnv(parsedArguments.flags["--build-env"]));try{await addProcessEnv(log,deploymentEnv),await addProcessEnv(log,deploymentBuildEnv)}catch(err){return error((0,import_error_utils2.errorToString)(err)),1}let regionFlag=(parsedArguments.flags["--regions"]||"").split(",").map(s=>s.trim()).filter(Boolean),regions=regionFlag.length>0?regionFlag:localConfig.regions,currentTeam=org.type==="team"?org.id:void 0,now=new Now({client,currentTeam}),deployStamp=stamp_default(),localConfigurationOverrides=pickOverrides(localConfig),name=project.name;if(!name)throw new Error("`name` not found on project or provided by existing project");let noWait=!0;try{let autoAssignCustomDomains=parsedArguments.flags["--skip-domain"]?!1:void 0,createArgs={name,env:deploymentEnv,build:{env:deploymentBuildEnv},forceNew:parsedArguments.flags["--force"],withCache:parsedArguments.flags["--with-cache"],prebuilt:!0,vercelOutputDir:void 0,rootDirectory,quiet,nowConfig:{...localConfig,images:void 0},regions,meta,gitMetadata,deployStamp,target,skipAutoDetectionConfirmation:autoConfirm,noWait,withFullLogs:!1,autoAssignCustomDomains,manual:!0,jsonOutput:asJson,linkedProject:project};(!localConfig.builds||localConfig.builds.length===0)&&(createArgs.projectSettings={sourceFilesOutsideRootDirectory,rootDirectory,...localConfigurationOverrides});let{packageJson}=await(0,import_build_utils2.findPackageJson)(join4(cwd,project?.rootDirectory??""),!0,cwd),nodeVersion;if(packageJson?.engines?.node)try{let{range}=await(0,import_build_utils2.getSupportedNodeVersion)(packageJson.engines.node);nodeVersion=range}catch(error2){error2 instanceof Error&&output_manager_default.warn(error2.message)}createArgs.projectSettings||(createArgs.projectSettings={}),createArgs.projectSettings.nodeVersion=nodeVersion;let deployment=await createDeploy(client,now,contextName,cwd,createArgs,org,!project,parsedArchive?"tgz":void 0);if(deployment instanceof NotDomainOwner)return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"not_domain_owner",message:deployment.message,next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]},null,2)}
12
- `),1):(output_manager_default.error(deployment.message),1);if(deployment instanceof Error){let msg=deployment.message||"An unexpected error occurred while deploying your project";return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"deploy_failed",message:msg,next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]},null,2)}
13
- `),1):(output_manager_default.error(msg,void 0,"https://vercel.link/help","Contact Support"),1)}if(deployment.readyState==="CANCELED"){if(asJson){output_manager_default.stopSpinner();let deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"DEPLOYMENT_CANCELED",message:"The deployment has been canceled."}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"deployment_canceled",message:"The deployment has been canceled.",deployment:deploymentJson,next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
26
+ `);let isObject=item=>Object.prototype.toString.call(item)==="[object Object]";if(typeof localConfig.env<"u"&&!isObject(localConfig.env))return error(`The ${code("env")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1;if(typeof localConfig.build<"u"){if(!isObject(localConfig.build))return error(`The ${code("build")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1;if(typeof localConfig.build.env<"u"&&!isObject(localConfig.build.env))return error(`The ${code("build.env")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1}let meta=Object.assign({},parseMeta(localConfig.meta),cliMeta),gitMetadata=createGitMeta(join13(cwd,project.rootDirectory||""),project);gitMetadata.catch(()=>{});let deploymentEnv=Object.assign({},parseEnv(localConfig.env),parseEnv(parsedArguments.flags["--env"])),deploymentBuildEnv=Object.assign({},parseEnv(localConfig.build&&localConfig.build.env),parseEnv(parsedArguments.flags["--build-env"]));try{await addProcessEnv(log,deploymentEnv),await addProcessEnv(log,deploymentBuildEnv)}catch(err){return error((0,import_error_utils2.errorToString)(err)),1}let regionFlag=(parsedArguments.flags["--regions"]||"").split(",").map(s=>s.trim()).filter(Boolean),regions=regionFlag.length>0?regionFlag:localConfig.regions,currentTeam=org.type==="team"?org.id:void 0,now=new Now({client,currentTeam}),deployStamp=stamp_default(),localConfigurationOverrides=pickOverrides(localConfig),name=project.name;if(!name)throw new Error("`name` not found on project or provided by existing project");let noWait=!0;try{let autoAssignCustomDomains=parsedArguments.flags["--skip-domain"]?!1:void 0,createArgs={name,env:deploymentEnv,build:{env:deploymentBuildEnv},forceNew:parsedArguments.flags["--force"],withCache:parsedArguments.flags["--with-cache"],prebuilt:!0,vercelOutputDir:void 0,rootDirectory,quiet,nowConfig:{...localConfig,images:void 0},regions,meta,gitMetadata,deployStamp,target,skipAutoDetectionConfirmation:autoConfirm,noWait,withFullLogs:!1,autoAssignCustomDomains,manual:!0,jsonOutput:asJson,linkedProject:project};(!localConfig.builds||localConfig.builds.length===0)&&(createArgs.projectSettings={sourceFilesOutsideRootDirectory,rootDirectory,...localConfigurationOverrides});let{packageJson}=await(0,import_build_utils9.findPackageJson)(join13(cwd,project?.rootDirectory??""),!0,cwd),nodeVersion;if(packageJson?.engines?.node)try{let{range}=await(0,import_build_utils9.getSupportedNodeVersion)(packageJson.engines.node);nodeVersion=range}catch(error2){error2 instanceof Error&&output_manager_default.warn(error2.message)}createArgs.projectSettings||(createArgs.projectSettings={}),createArgs.projectSettings.nodeVersion=nodeVersion;let deployment=await createDeploy(client,now,contextName,cwd,createArgs,org,!project,parsedArchive?"tgz":void 0);if(deployment instanceof NotDomainOwner)return recordCliError({code:"not_domain_owner"}),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"not_domain_owner",message:deployment.message,next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]},null,2)}
27
+ `),1):(output_manager_default.error(deployment.message),1);if(deployment instanceof Error){let deployError=cliErrorFromUnknown(deployment);recordCliError({...deployError,code:deployError.code??"deploy_failed"});let msg=deployment.message||"An unexpected error occurred while deploying your project";return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"deploy_failed",message:msg,next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]},null,2)}
28
+ `),1):(output_manager_default.error(msg,void 0,"https://vercel.link/help","Contact Support"),1)}if(deployment.readyState==="CANCELED"){if(recordCliError({code:"deployment_canceled"}),asJson){output_manager_default.stopSpinner();let deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"DEPLOYMENT_CANCELED",message:"The deployment has been canceled."}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"deployment_canceled",message:"The deployment has been canceled.",deployment:deploymentJson,next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
14
29
  `)}else output_manager_default.print(`The deployment has been canceled.
15
- `);return 1}if(deployment.checks?.["deployment-alias"]?.state==="failed")return handleFailedCheckRuns(client,deployment,asJson);if(deployment.checksConclusion==="failed"){let{checks}=await getDeploymentChecks(client,deployment.id),counters=new Map;checks.forEach(c=>{counters.set(c.conclusion,(counters.get(c.conclusion)??0)+1)});let counterList=Array.from(counters).map(([name2,no])=>`${no} ${name2}`).join(", ");if(asJson){output_manager_default.stopSpinner();let message=`Running Checks: ${counterList}`,deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"CHECKS_FAILED",message}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"checks_failed",message,deployment:deploymentJson,next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
16
- `)}else output_manager_default.error(`Running Checks: ${counterList}`);return 1}if(deployment===null)return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"upload_failed",message:"Uploading failed. Please try again.",next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]},null,2)}
30
+ `);return 1}if(deployment.checks?.["deployment-alias"]?.state==="failed")return handleFailedCheckRuns(client,deployment,asJson);if(deployment.checksConclusion==="failed"){recordCliError({code:"checks_failed"});let{checks}=await getDeploymentChecks(client,deployment.id),counters=new Map;checks.forEach(c=>{counters.set(c.conclusion,(counters.get(c.conclusion)??0)+1)});let counterList=Array.from(counters).map(([name2,no])=>`${no} ${name2}`).join(", ");if(asJson){output_manager_default.stopSpinner();let message=`Running Checks: ${counterList}`,deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"CHECKS_FAILED",message}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"checks_failed",message,deployment:deploymentJson,next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
31
+ `)}else output_manager_default.error(`Running Checks: ${counterList}`);return 1}if(deployment===null)return recordCliError({code:"upload_failed"}),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"upload_failed",message:"Uploading failed. Please try again.",next:[{command:withGlobalFlags(client,"deploy"),when:"retry deploy"}]},null,2)}
17
32
  `),1):(error("Uploading failed. Please try again."),1);if(asJson){output_manager_default.stopSpinner();let deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl),isImplicitProduction=deployment.target==="production"&&!target,payload=client.nonInteractive?{status:AGENT_STATUS.OK,deployment:deploymentJson,message:formatReadyMessage(deployment.url,deploymentJson.productionUrl),...isImplicitProduction?{hint:"This is the project\u2019s first deployment, so it was assigned to production. Future deployments will be preview deployments unless you use --prod."}:{},next:[{command:withGlobalFlags(client,`inspect ${deployment.url}`),when:"Inspect deployment"},...isImplicitProduction?[]:[{command:withGlobalFlags(client,"deploy --prod"),when:"Promote to production"}]]}:deploymentJson;return client.stdout.write(`${JSON.stringify(payload,null,2)}
18
- `),0}return printDeploymentStatus(client,deployment,deployStamp,noWait,!1,!0)}catch(err){if((0,import_error_utils2.isError)(err)&&debug(`Error: ${err}
19
- ${err.stack}`),err instanceof UploadErrorMissingArchive)return output_manager_default.prettyError(err),1;if(err instanceof NotDomainOwner)return output_manager_default.error(err.message),1;if(err instanceof DomainNotFound||err instanceof DomainNotVerified||err instanceof NotDomainOwner||err instanceof DomainPermissionDenied||err instanceof DomainVerificationFailed||err instanceof SchemaValidationFailed||err instanceof InvalidDomain||err instanceof DeploymentNotFound||err instanceof BuildsRateLimited||err instanceof DeploymentsRateLimited||err instanceof AliasDomainConfigured||err instanceof MissingBuildScript||err instanceof ConflictingFilePath||err instanceof ConflictingPathSegment||err instanceof ConflictingConfigFiles||err instanceof DeprecatedNowJson)return handleCreateDeployError(err,localConfig),1;if(isAPIError(err)&&err.code==="size_limit_exceeded"){let{sizeLimit=0}=err,message=`File size limit exceeded (${(0,import_bytes.default)(sizeLimit)})`;return error(message),1}return printError(err),1}}async function handleContinueSubcommand(client,telemetryClient){let flagsSpecification=getFlagsSpecification(continueSubcommand.options),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let idFlag=parsedArguments.flags["--id"],parsedArchive=parsedArguments.flags["--archive"],errorMessage=parsedArguments.flags["--error"];if(typeof parsedArchive=="string"&&!isValidArchive(parsedArchive))return output_manager_default.error(`Format must be one of: ${import_client.VALID_ARCHIVE_FORMATS.join(", ")}`),2;if(telemetryClient.trackCliOptionArchive(parsedArchive),parsedArchive&&errorMessage!==void 0)return output_manager_default.error(`Cannot use ${param("--archive")} with ${param("--error")}`),2;if(errorMessage!==void 0&&errorMessage.trim()==="")return output_manager_default.error(`${param("--error")} requires an error message`),1;if(!idFlag)return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:"missing_id",message:"Missing required --id flag. Provide the deployment ID to continue.",next:[{command:withGlobalFlags(client,"deploy continue --id <deployment-id>"),when:"provide deployment ID"}]},2),2):(output_manager_default.error(`Missing required ${param("--id")} flag. Usage: ${getCommandName("deploy continue --id <deployment-id>")}`),2);let paths=[client.cwd],pathValidation=await validatePaths(client,paths);if(!pathValidation.valid)return pathValidation.exitCode;await compileVercelConfig(paths[0]);let localConfig=client.localConfig||readLocalConfig(paths[0]);localConfig&&(client.localConfig=localConfig);let{path:cwd}=pathValidation,link=await ensureLink("deploy",client,cwd,{autoConfirm:!0,projectName:localConfig?.name});if(typeof link=="number")return link;let{org}=link;if(link.repoRoot&&(cwd=link.repoRoot),client.config.currentTeam=org.type==="team"?org.id:void 0,errorMessage!==void 0)try{return await client.fetch(`/deployments/${idFlag}/continue`,{method:"POST",body:{errorMessage}}),output_manager_default.success(`Marked deployment ${idFlag} as errored`),0}catch(error){return printError(error),1}let vercelOutputDir=join4(cwd,".vercel/output");if(link.repoRoot&&link.project.rootDirectory&&(vercelOutputDir=join4(cwd,link.project.rootDirectory,".vercel/output")),!await import_fs_extra4.default.pathExists(vercelOutputDir))return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:"prebuilt_not_found",message:'No prebuilt output found in ".vercel/output". Run build first.',next:[{command:withGlobalFlags(client,"build"),when:"generate prebuilt output"},{command:withGlobalFlags(client,`deploy continue --id ${idFlag}`),when:"deploy prebuilt output"}]},1),1):(output_manager_default.error(`No prebuilt output found in ".vercel/output". Run ${getCommandName("build")} to generate a local build.`),1);let deployStamp=stamp_default();return handleContinueDeployment({client,telemetryClient,deploymentId:idFlag,cwd,deployStamp,noWait:!1,org,vercelOutputDir,archive:parsedArchive?"tgz":void 0})}async function handleDefaultDeploy(client,telemetryClient){let tempDirs=[];try{return await runDefaultDeploy(client,telemetryClient,tempDirs)}finally{await Promise.all(tempDirs.map(dir=>import_fs_extra4.default.remove(dir)))}}async function runDefaultDeploy(client,telemetryClient,tempDirs){let flagsSpecification=getFlagsSpecification(deployCommand.options),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error2){return printError(error2),2}let buildMachine=parsedArguments.flags["--turbo"]?"turbo":void 0;telemetryClient.trackCliOptionArchive(parsedArguments.flags["--archive"]),telemetryClient.trackCliFlagTurbo(parsedArguments.flags["--turbo"]),telemetryClient.trackCliOptionEnv(parsedArguments.flags["--env"]),telemetryClient.trackCliOptionBuildEnv(parsedArguments.flags["--build-env"]),telemetryClient.trackCliOptionMeta(parsedArguments.flags["--meta"]),telemetryClient.trackCliFlagPrebuilt(parsedArguments.flags["--prebuilt"]),telemetryClient.trackCliOptionRegions(parsedArguments.flags["--regions"]),telemetryClient.trackCliFlagNoWait(parsedArguments.flags["--no-wait"]),telemetryClient.trackCliFlagDry(parsedArguments.flags["--dry"]),telemetryClient.trackCliFlagYes(parsedArguments.flags["--yes"]),telemetryClient.trackCliOptionTarget(parsedArguments.flags["--target"]),telemetryClient.trackCliFlagProd(parsedArguments.flags["--prod"]),telemetryClient.trackCliFlagTemporary(parsedArguments.flags["--temporary"]),telemetryClient.trackCliFlagSkipDomain(parsedArguments.flags["--skip-domain"]),telemetryClient.trackCliFlagLogs(parsedArguments.flags["--logs"]),telemetryClient.trackCliFlagNoLogs(parsedArguments.flags["--no-logs"]),telemetryClient.trackCliFlagGuidance(parsedArguments.flags["--guidance"]),telemetryClient.trackCliFlagForce(parsedArguments.flags["--force"]),telemetryClient.trackCliFlagWithCache(parsedArguments.flags["--with-cache"]),telemetryClient.trackCliFlagJson(parsedArguments.flags["--json"]),telemetryClient.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetryClient.trackCliOptionProject(parsedArguments.flags["--project"]);let projectNameOrId=parsedArguments.flags["--project"],formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive;"--confirm"in parsedArguments.flags&&(telemetryClient.trackCliFlagConfirm(parsedArguments.flags["--confirm"]),output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),parsedArguments.flags["--yes"]=parsedArguments.flags["--confirm"]),"--no-logs"in parsedArguments.flags&&output_manager_default.warn("`--no-logs` is deprecated and now the default behavior."),parsedArguments.args[0]===deployCommand.name&&parsedArguments.args.shift();let paths;parsedArguments.args.length>0?(paths=parsedArguments.args.map(item=>resolve2(client.cwd,item)),telemetryClient.trackCliArgumentProjectPath(paths[0])):paths=[client.cwd];let pathValidation=await validatePaths(client,paths,{allowFiles:!0});if(!pathValidation.valid)return pathValidation.exitCode;let singleFile=pathValidation.isFile?pathValidation.path:void 0;if(singleFile){let incompatibleFlag=["--prebuilt","--archive","--local-config"].find(flag=>parsedArguments.flags[flag]),message=incompatibleFlag?`Single-file deployments don't support ${incompatibleFlag}. Deploy a directory to use this option.`:!client.authConfig.token&&parsedArguments.flags["--temporary"]&&extname(singleFile).toLowerCase()!==".html"?"Temporary single-file deployments support only `.html` files. Log in or deploy a directory to deploy other files.":await isIgnoredFile(singleFile,client.cwd)?`${basename(singleFile)} matches \`.vercelignore\` or the default ignore list, so it can't be deployed.`:void 0;if(message)return asJson?client.stdout.write(`${JSON.stringify({status:"error",reason:"invalid_file_deployment_option",message})}
20
- `):output_manager_default.fatal(message),1;if(basename(singleFile).startsWith(".")&&!parsedArguments.flags["--yes"]&&!parsedArguments.flags["--dry"]){let warning=`${basename(singleFile)} is a hidden file and will be publicly accessible once deployed.`;if(client.nonInteractive||!client.stdin.isTTY)return asJson?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`${warning} Use option --yes to deploy it.`,next:[{command:buildCommandWithYes(client.argv),when:"Deploy the hidden file"}]},null,2)}
33
+ `),0}return printDeploymentStatus(client,deployment,deployStamp,noWait,!1,!0)}catch(err){if(recordCliError(cliErrorFromUnknown(err)),(0,import_error_utils2.isError)(err)&&debug(`Error: ${err}
34
+ ${err.stack}`),err instanceof UploadErrorMissingArchive)return output_manager_default.prettyError(err),1;if(err instanceof NotDomainOwner)return recordCliError({code:"not_domain_owner"},{override:!0}),output_manager_default.error(err.message),1;if(err instanceof DomainNotFound||err instanceof DomainNotVerified||err instanceof NotDomainOwner||err instanceof DomainPermissionDenied||err instanceof DomainVerificationFailed||err instanceof SchemaValidationFailed||err instanceof InvalidDomain||err instanceof DeploymentNotFound||err instanceof BuildsRateLimited||err instanceof DeploymentsRateLimited||err instanceof AliasDomainConfigured||err instanceof MissingBuildScript||err instanceof ConflictingFilePath||err instanceof ConflictingPathSegment||err instanceof ConflictingConfigFiles||err instanceof DeprecatedNowJson)return handleCreateDeployError(err,localConfig),1;if(isAPIError(err)&&err.code==="size_limit_exceeded"){let{sizeLimit=0}=err,message=`File size limit exceeded (${(0,import_bytes.default)(sizeLimit)})`;return error(message),1}return printError(err),1}}async function handleContinueSubcommand(client,telemetryClient){let flagsSpecification=getFlagsSpecification(continueSubcommand.options),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}let idFlag=parsedArguments.flags["--id"],parsedArchive=parsedArguments.flags["--archive"],errorMessage=parsedArguments.flags["--error"];if(typeof parsedArchive=="string"&&!isValidArchive(parsedArchive))return output_manager_default.error(`Format must be one of: ${import_client.VALID_ARCHIVE_FORMATS.join(", ")}`),2;if(telemetryClient.trackCliOptionArchive(parsedArchive),parsedArchive&&errorMessage!==void 0)return output_manager_default.error(`Cannot use ${param("--archive")} with ${param("--error")}`),2;if(errorMessage!==void 0&&errorMessage.trim()==="")return output_manager_default.error(`${param("--error")} requires an error message`),1;if(!idFlag)return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:"missing_id",message:"Missing required --id flag. Provide the deployment ID to continue.",next:[{command:withGlobalFlags(client,"deploy continue --id <deployment-id>"),when:"provide deployment ID"}]},2),2):(output_manager_default.error(`Missing required ${param("--id")} flag. Usage: ${getCommandName("deploy continue --id <deployment-id>")}`),2);let paths=[client.cwd],pathValidation=await validatePaths(client,paths);if(!pathValidation.valid)return pathValidation.exitCode;await compileVercelConfig(paths[0]);let localConfig=client.localConfig||readLocalConfig(paths[0]);localConfig&&(client.localConfig=localConfig);let{path:cwd}=pathValidation,link=await ensureLink("deploy",client,cwd,{autoConfirm:!0,projectName:localConfig?.name});if(typeof link=="number")return link;let{org}=link;if(link.repoRoot&&(cwd=link.repoRoot),client.config.currentTeam=org.type==="team"?org.id:void 0,errorMessage!==void 0)try{return await client.fetch(`/deployments/${idFlag}/continue`,{method:"POST",body:{errorMessage}}),output_manager_default.success(`Marked deployment ${idFlag} as errored`),0}catch(error){return printError(error),1}let vercelOutputDir=join13(cwd,".vercel/output");if(link.repoRoot&&link.project.rootDirectory&&(vercelOutputDir=join13(cwd,link.project.rootDirectory,".vercel/output")),!await import_fs_extra4.default.pathExists(vercelOutputDir))return client.nonInteractive?(outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:"prebuilt_not_found",message:'No prebuilt output found in ".vercel/output". Run build first.',next:[{command:withGlobalFlags(client,"build"),when:"generate prebuilt output"},{command:withGlobalFlags(client,`deploy continue --id ${idFlag}`),when:"deploy prebuilt output"}]},1),1):(output_manager_default.error(`No prebuilt output found in ".vercel/output". Run ${getCommandName("build")} to generate a local build.`),1);let deployStamp=stamp_default();return handleContinueDeployment({client,telemetryClient,deploymentId:idFlag,cwd,deployStamp,noWait:!1,org,vercelOutputDir,archive:parsedArchive?"tgz":void 0})}async function handleDefaultDeploy(client,telemetryClient){let tempDirs=[];try{return await runDefaultDeploy(client,telemetryClient,tempDirs)}finally{await Promise.all(tempDirs.map(dir=>import_fs_extra4.default.remove(dir)))}}async function runDefaultDeploy(client,telemetryClient,tempDirs){let flagsSpecification=getFlagsSpecification(deployCommand.options),parsedArguments;try{parsedArguments=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error2){return printError(error2),2}let buildMachine=parsedArguments.flags["--turbo"]?"turbo":void 0;telemetryClient.trackCliOptionArchive(parsedArguments.flags["--archive"]),telemetryClient.trackCliFlagTurbo(parsedArguments.flags["--turbo"]),telemetryClient.trackCliOptionEnv(parsedArguments.flags["--env"]),telemetryClient.trackCliOptionBuildEnv(parsedArguments.flags["--build-env"]),telemetryClient.trackCliOptionMeta(parsedArguments.flags["--meta"]),telemetryClient.trackCliFlagPrebuilt(parsedArguments.flags["--prebuilt"]),telemetryClient.trackCliOptionRegions(parsedArguments.flags["--regions"]),telemetryClient.trackCliFlagNoWait(parsedArguments.flags["--no-wait"]),telemetryClient.trackCliFlagDry(parsedArguments.flags["--dry"]),telemetryClient.trackCliFlagYes(parsedArguments.flags["--yes"]),telemetryClient.trackCliOptionTarget(parsedArguments.flags["--target"]),telemetryClient.trackCliFlagProd(parsedArguments.flags["--prod"]),telemetryClient.trackCliFlagTemporary(parsedArguments.flags["--temporary"]),telemetryClient.trackCliFlagSkipDomain(parsedArguments.flags["--skip-domain"]),telemetryClient.trackCliFlagLogs(parsedArguments.flags["--logs"]),telemetryClient.trackCliFlagNoLogs(parsedArguments.flags["--no-logs"]),telemetryClient.trackCliFlagGuidance(parsedArguments.flags["--guidance"]),telemetryClient.trackCliFlagForce(parsedArguments.flags["--force"]),telemetryClient.trackCliFlagWithCache(parsedArguments.flags["--with-cache"]),telemetryClient.trackCliFlagJson(parsedArguments.flags["--json"]),telemetryClient.trackCliOptionFormat(parsedArguments.flags["--format"]),telemetryClient.trackCliOptionProject(parsedArguments.flags["--project"]);let projectNameOrId=parsedArguments.flags["--project"],formatResult=validateJsonOutput(parsedArguments.flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive;"--confirm"in parsedArguments.flags&&(telemetryClient.trackCliFlagConfirm(parsedArguments.flags["--confirm"]),output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),parsedArguments.flags["--yes"]=parsedArguments.flags["--confirm"]),"--no-logs"in parsedArguments.flags&&output_manager_default.warn("`--no-logs` is deprecated and now the default behavior."),parsedArguments.args[0]===deployCommand.name&&parsedArguments.args.shift();let paths;parsedArguments.args.length>0?(paths=parsedArguments.args.map(item=>resolve3(client.cwd,item)),telemetryClient.trackCliArgumentProjectPath(paths[0])):paths=[client.cwd];let pathValidation=await validatePaths(client,paths,{allowFiles:!0});if(!pathValidation.valid)return pathValidation.exitCode;let singleFile=pathValidation.isFile?pathValidation.path:void 0;if(singleFile){let incompatibleFlag=["--prebuilt","--archive","--local-config"].find(flag=>parsedArguments.flags[flag]),message=incompatibleFlag?`Single-file deployments don't support ${incompatibleFlag}. Deploy a directory to use this option.`:!client.authConfig.token&&parsedArguments.flags["--temporary"]&&extname(singleFile).toLowerCase()!==".html"?"Temporary single-file deployments support only `.html` files. Log in or deploy a directory to deploy other files.":await isIgnoredFile(singleFile,client.cwd)?`${basename3(singleFile)} matches \`.vercelignore\` or the default ignore list, so it can't be deployed.`:void 0;if(message)return asJson?client.stdout.write(`${JSON.stringify({status:"error",reason:"invalid_file_deployment_option",message})}
35
+ `):output_manager_default.fatal(message),1;if(basename3(singleFile).startsWith(".")&&!parsedArguments.flags["--yes"]&&!parsedArguments.flags["--dry"]){let warning=`${basename3(singleFile)} is a hidden file and will be publicly accessible once deployed.`;if(client.nonInteractive||!client.stdin.isTTY)return asJson?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ACTION_REQUIRED,reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`${warning} Use option --yes to deploy it.`,next:[{command:buildCommandWithYes(client.argv),when:"Deploy the hidden file"}]},null,2)}
21
36
  `):output_manager_default.error(`${warning} Use option ${param("--yes")} to deploy it.`),1;if(!await client.input.confirm(`${warning} Continue?`,!1))return output_manager_default.print(`Canceled
22
- `),0}}try{singleFile||await compileVercelConfig(paths[0])}catch(err){if(err instanceof ConflictingConfigFiles||err instanceof DeprecatedNowJson)return output_manager_default.prettyError(err),1;throw err}let shouldUseEarlyLocalConfig=paths[0]===client.cwd,localConfig=singleFile?{...singleFileConfig}:shouldUseEarlyLocalConfig?client.localConfig||readLocalConfig(paths[0]):readLocalConfig(paths[0]);if(localConfig){client.localConfig=localConfig;let{version}=localConfig,file=highlight(localConfig[import_client.fileNameSymbol]),prop=code("version");if(version)if(typeof version=="number"){if(version!==2){let two=code(String(2));return output_manager_default.error(`The value of the ${prop} property within ${file} can only be ${two}.`),1}}else return output_manager_default.error(`The ${prop} property inside your ${file} file must be a number.`),1}let{log,debug,error,prettyError}=output_manager_default,quiet=!client.stdout.isTTY,cwd=singleFile?dirname(singleFile):pathValidation.path,autoConfirm=parsedArguments.flags["--yes"]||client.nonInteractive;parsedArguments.flags["--name"]&&(output_manager_default.print(`${prependEmoji(`The ${param("--name")} option is deprecated (https://vercel.link/name-flag)`,emoji("warning"))}
37
+ `),0}}try{singleFile||await compileVercelConfig(paths[0])}catch(err){if(err instanceof ConflictingConfigFiles||err instanceof DeprecatedNowJson)return output_manager_default.prettyError(err),1;throw err}let shouldUseEarlyLocalConfig=paths[0]===client.cwd,localConfig=singleFile?{...singleFileConfig}:shouldUseEarlyLocalConfig?client.localConfig||readLocalConfig(paths[0]):readLocalConfig(paths[0]);if(localConfig){client.localConfig=localConfig;let{version}=localConfig,file=highlight(localConfig[import_client.fileNameSymbol]),prop=code("version");if(version)if(typeof version=="number"){if(version!==2){let two=code(String(2));return output_manager_default.error(`The value of the ${prop} property within ${file} can only be ${two}.`),1}}else return output_manager_default.error(`The ${prop} property inside your ${file} file must be a number.`),1}let{log,debug,error,prettyError}=output_manager_default,quiet=!client.stdout.isTTY,cwd=singleFile?dirname2(singleFile):pathValidation.path,autoConfirm=parsedArguments.flags["--yes"]||client.nonInteractive;parsedArguments.flags["--name"]&&(output_manager_default.print(`${prependEmoji(`The ${param("--name")} option is deprecated (https://vercel.link/name-flag)`,emoji("warning"))}
23
38
  `),telemetryClient.trackCliOptionName(parsedArguments.flags["--name"])),parsedArguments.flags["--no-clipboard"]&&(output_manager_default.print(`${prependEmoji(`The ${param("--no-clipboard")} option was ignored because it is the default behavior. Please remove it.`,emoji("warning"))}
24
39
  `),telemetryClient.trackCliFlagNoClipboard(!0));let isAnonymous=!client.authConfig.token&&!!parsedArguments.flags["--temporary"];if(!client.authConfig.token&&!isAnonymous)return output_manager_default.prettyError({message:`No existing credentials found. Run ${getCommandName("deploy --temporary")} to create a temporary deployment you can claim later, or ${getCommandName("login")} to log in.`,link:"https://err.sh/vercel/no-credentials-found"}),1;let target=parseTarget({flagName:"target",flags:parsedArguments.flags});if(telemetryClient.trackTargetEnvironment(target),!validateAnonymousTarget(isAnonymous,target))return 1;if(parsedArguments.flags["--skip-domain"]&&target!=="production")return output_manager_default.error("The `--skip-domain` option can only be used with production deployments. Use `--prod` or `--target=production`."),1;let parsedArchive=parsedArguments.flags["--archive"];if(typeof parsedArchive=="string"&&!(isValidArchive(parsedArchive)||parsedArchive===deprecatedArchiveSplitTgz))return output_manager_default.error(`Format must be one of: ${import_client.VALID_ARCHIVE_FORMATS.join(", ")}`),2;parsedArchive===deprecatedArchiveSplitTgz&&output_manager_default.print(`${prependEmoji(`${param("--archive=tgz")} now has the same behavior as ${param("--archive=split-tgz")}. Please use ${param("--archive=tgz")} instead.`,emoji("warning"))}
25
- `);let cliMeta=parseMeta(parsedArguments.flags["--meta"]),isV0=cliMeta.v0==="true";!singleFile&&!parsedArguments.flags["--dry"]&&getGitExecutable(cwd);let anonymousSetup=singleFile&&!isAnonymous?{isAnonymous:!1,anonymousLink:void 0}:await setupAnonymousDeployment(client,cwd,{isAnonymous,dryRun:!!parsedArguments.flags["--dry"]});if(typeof anonymousSetup=="number")return anonymousSetup;isAnonymous=anonymousSetup.isAnonymous;let anonymousLink=anonymousSetup.anonymousLink;anonymousLink&&(target="production");let link=anonymousLink??await ensureLink("deploy",client,cwd,{autoConfirm,singleFile,pullEnv:singleFile?!1:void 0,projectName:projectNameOrId??parsedArguments.flags["--name"]??localConfig?.name,failIfNotFound:!!projectNameOrId,requireExistingLink:parsedArguments.flags["--dry"],allowOwnerLookupFallback:!0,skipRemoteLookup:!parsedArguments.flags["--dry"],v0:isV0});if(typeof link=="number")return link;let redeployCommand=withGlobalFlags(client,singleFile?`deploy ${quoteArg(singleFile)}${isAnonymous?" --temporary":""}`:isAnonymous?"deploy --temporary":"deploy",{preserveProject:!!singleFile}),{org,project}=link,rootDirectory=singleFile?null:project.rootDirectory,sourceFilesOutsideRootDirectory=project.sourceFilesOutsideRootDirectory??!0,projectCwd=cwd;!singleFile&&link.repoRoot&&(cwd=link.repoRoot);let postDeployGuidanceEnabled=!singleFile&&!anonymousLink&&(client.nonInteractive||!asJson)&&isGuidanceEnabled(client,parsedArguments.flags["--guidance"],!0),prebuilt=isAnonymous||!!parsedArguments.flags["--prebuilt"],vercelOutputDir,prebuiltBuild=null,singleFileOutputRoot;if(prebuilt){vercelOutputDir=join4(cwd,".vercel/output"),link.repoRoot&&link.project.rootDirectory&&(vercelOutputDir=join4(cwd,link.project.rootDirectory,".vercel/output"));let prebuiltExists=await import_fs_extra4.default.pathExists(vercelOutputDir);if(singleFile)singleFileOutputRoot=await import_fs_extra4.default.mkdtemp(join4(tmpdir(),"vercel-file-")),tempDirs.push(singleFileOutputRoot),vercelOutputDir=join4(singleFileOutputRoot,".vercel/output"),await import_fs_extra4.default.copy(singleFile,join4(vercelOutputDir,"static",basename(singleFile))),await import_fs_extra4.default.outputJSON(join4(vercelOutputDir,"config.json"),{version:3}),prebuiltExists=!0;else if(isAnonymous&&!parsedArguments.flags["--prebuilt"]&&!parsedArguments.flags["--dry"]){let buildExitCode=await runImplicitBuild(client,cwd);if(buildExitCode!==0)return buildExitCode;prebuiltExists=await import_fs_extra4.default.pathExists(vercelOutputDir)}if(!prebuiltExists)return error(`The ${param("--prebuilt")} option was used, but no prebuilt output found in ".vercel/output". Run ${getCommandName("build")} to generate a local build.`),1;prebuiltBuild=await getPrebuiltJson(vercelOutputDir);let prebuiltError=prebuiltBuild?.error||prebuiltBuild?.builds?.find(build=>"error"in build)?.error;if(prebuiltError)return output_manager_default.log(`Prebuilt deployment cannot be created because ${getCommandName("build")} failed with error:
26
- `),prettyError(prebuiltError),1;let assumedTarget=target||"preview";if(prebuiltBuild?.target&&prebuiltBuild.target!==assumedTarget){let specifyTarget="";return prebuiltBuild.target==="production"&&(specifyTarget=" --prod"),prettyError({message:`The ${param("--prebuilt")} option was used with the target environment "${assumedTarget}", but the prebuilt output found in ".vercel/output" was built with target environment "${prebuiltBuild.target}". Please run ${getCommandName(`--prebuilt${specifyTarget}`)}.`,link:"https://vercel.link/prebuilt-environment-mismatch"}),1}}let orgSlug=isRemoteLookupSkippedLink(link)?void 0:org.slug,contextName=orgSlug??"the linked account",currentTeam=isOwnerLookupUnavailableLink(link)||org.type!=="team"?void 0:org.id;if(client.config.currentTeam=currentTeam,rootDirectory&&await validateRootDirectory(cwd,join4(cwd,rootDirectory),project&&orgSlug?`To change your Project Settings, go to https://vercel.com/${orgSlug}/${project.name}/settings`:"")===!1)return 1;if(!singleFile&&!parsedArguments.flags["--dry"]&&!prebuilt&&await promptExperimentalServicesMigration({client,cwd:join4(cwd,rootDirectory||""),autoConfirm:!!parsedArguments.flags["--yes"],nonInteractive:client.nonInteractive})&&(localConfig=readLocalConfig(join4(cwd,rootDirectory||""))),rootDirectory){let rootDirectoryPath=join4(cwd,rootDirectory);await compileVercelConfig(rootDirectoryPath);let rootDirectoryConfig=readLocalConfig(rootDirectoryPath);rootDirectoryConfig?(debug(`Read local config from root directory (${rootDirectory})`),localConfig=rootDirectoryConfig):localConfig&&output_manager_default.print(`${prependEmoji(`The ${highlight(localConfig[import_client.fileNameSymbol])} file should be inside of the provided root directory.`,emoji("warning"))}
40
+ `);let cliMeta=parseMeta(parsedArguments.flags["--meta"]),isV0=cliMeta.v0==="true";!singleFile&&!parsedArguments.flags["--dry"]&&getGitExecutable(cwd);let anonymousSetup=singleFile&&!isAnonymous?{isAnonymous:!1,anonymousLink:void 0}:await setupAnonymousDeployment(client,cwd,{isAnonymous,dryRun:!!parsedArguments.flags["--dry"]});if(typeof anonymousSetup=="number")return anonymousSetup;isAnonymous=anonymousSetup.isAnonymous;let anonymousLink=anonymousSetup.anonymousLink;anonymousLink&&(target="production");let link=anonymousLink??await ensureLink("deploy",client,cwd,{autoConfirm,singleFile,pullEnv:singleFile?!1:void 0,projectName:projectNameOrId??parsedArguments.flags["--name"]??localConfig?.name,failIfNotFound:!!projectNameOrId,requireExistingLink:parsedArguments.flags["--dry"],allowOwnerLookupFallback:!0,skipRemoteLookup:!parsedArguments.flags["--dry"],v0:isV0});if(typeof link=="number")return link;let redeployCommand=withGlobalFlags(client,singleFile?`deploy ${quoteArg(singleFile)}${isAnonymous?" --temporary":""}`:isAnonymous?"deploy --temporary":"deploy",{preserveProject:!!singleFile}),{org,project}=link,rootDirectory=singleFile?null:project.rootDirectory,sourceFilesOutsideRootDirectory=project.sourceFilesOutsideRootDirectory??!0,projectCwd=cwd;!singleFile&&link.repoRoot&&(cwd=link.repoRoot);let postDeployGuidanceEnabled=!singleFile&&!anonymousLink&&(client.nonInteractive||!asJson)&&isGuidanceEnabled(client,parsedArguments.flags["--guidance"],!0),prebuilt=isAnonymous||!!parsedArguments.flags["--prebuilt"],vercelOutputDir,prebuiltBuild=null,singleFileOutputRoot;if(prebuilt){vercelOutputDir=join13(cwd,".vercel/output"),link.repoRoot&&link.project.rootDirectory&&(vercelOutputDir=join13(cwd,link.project.rootDirectory,".vercel/output"));let prebuiltExists=await import_fs_extra4.default.pathExists(vercelOutputDir);if(singleFile)singleFileOutputRoot=await import_fs_extra4.default.mkdtemp(join13(tmpdir(),"vercel-file-")),tempDirs.push(singleFileOutputRoot),vercelOutputDir=join13(singleFileOutputRoot,".vercel/output"),await import_fs_extra4.default.copy(singleFile,join13(vercelOutputDir,"static",basename3(singleFile))),await import_fs_extra4.default.outputJSON(join13(vercelOutputDir,"config.json"),{version:3}),prebuiltExists=!0;else if(isAnonymous&&!parsedArguments.flags["--prebuilt"]&&!parsedArguments.flags["--dry"]){let buildExitCode=await runImplicitBuild(client,cwd);if(buildExitCode!==0)return buildExitCode;prebuiltExists=await import_fs_extra4.default.pathExists(vercelOutputDir)}if(!prebuiltExists)return error(`The ${param("--prebuilt")} option was used, but no prebuilt output found in ".vercel/output". Run ${getCommandName("build")} to generate a local build.`),1;prebuiltBuild=await getPrebuiltJson(vercelOutputDir);let prebuiltError=prebuiltBuild?.error||prebuiltBuild?.builds?.find(build=>"error"in build)?.error;if(prebuiltError)return output_manager_default.log(`Prebuilt deployment cannot be created because ${getCommandName("build")} failed with error:
41
+ `),prettyError(prebuiltError),1;let assumedTarget=target||"preview";if(prebuiltBuild?.target&&prebuiltBuild.target!==assumedTarget){let specifyTarget="";return prebuiltBuild.target==="production"&&(specifyTarget=" --prod"),prettyError({message:`The ${param("--prebuilt")} option was used with the target environment "${assumedTarget}", but the prebuilt output found in ".vercel/output" was built with target environment "${prebuiltBuild.target}". Please run ${getCommandName(`--prebuilt${specifyTarget}`)}.`,link:"https://vercel.link/prebuilt-environment-mismatch"}),1}}let orgSlug=isRemoteLookupSkippedLink(link)?void 0:org.slug,contextName=orgSlug??"the linked account",currentTeam=isOwnerLookupUnavailableLink(link)||org.type!=="team"?void 0:org.id;if(client.config.currentTeam=currentTeam,rootDirectory&&await validateRootDirectory(cwd,join13(cwd,rootDirectory),project&&orgSlug?`To change your Project Settings, go to https://vercel.com/${orgSlug}/${project.name}/settings`:"")===!1)return 1;if(!singleFile&&!parsedArguments.flags["--dry"]&&!prebuilt&&await promptExperimentalServicesMigration({client,cwd:join13(cwd,rootDirectory||""),autoConfirm:!!parsedArguments.flags["--yes"],nonInteractive:client.nonInteractive})&&(localConfig=readLocalConfig(join13(cwd,rootDirectory||""))),rootDirectory){let rootDirectoryPath=join13(cwd,rootDirectory);await compileVercelConfig(rootDirectoryPath);let rootDirectoryConfig=readLocalConfig(rootDirectoryPath);rootDirectoryConfig?(debug(`Read local config from root directory (${rootDirectory})`),localConfig=rootDirectoryConfig):localConfig&&output_manager_default.print(`${prependEmoji(`The ${highlight(localConfig[import_client.fileNameSymbol])} file should be inside of the provided root directory.`,emoji("warning"))}
27
42
  `)}if(localConfig=localConfig||{},parsedArguments.flags["--dry"])try{let summary=await(0,import_client.inspectDeploymentFiles)({path:singleFileOutputRoot??singleFile??cwd,archive:parsedArchive?"tgz":void 0,debug:output_manager_default.isDebugEnabled(),prebuilt,vercelOutputDir,projectName:project.name,rootDirectory,bulkRedirectsPath:localConfig.bulkRedirectsPath}),{resolveDeploymentFrameworkPreset}=await import("../../chunks/resolve-deployment-framework-preset-QEPJNWVF.js"),framework=resolveDeploymentFrameworkPreset({localFramework:localConfig.framework,projectFramework:project.framework});return summary.warning&&printPrebuiltFilePathMapIgnoreWarning(summary.warning,telemetryClient),printDeploymentDryRun(client,summary,framework,asJson||!client.stdout.isTTY),0}catch(err){return printError(err),1}localConfig.name&&output_manager_default.print(`${prependEmoji(`The ${code("name")} property in ${highlight(localConfig[import_client.fileNameSymbol])} is deprecated (https://vercel.link/name-prop)`,emoji("warning"))}
28
- `);let isObject=item=>Object.prototype.toString.call(item)==="[object Object]";if(typeof localConfig.env<"u"&&!isObject(localConfig.env))return error(`The ${code("env")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1;if(typeof localConfig.build<"u"){if(!isObject(localConfig.build))return error(`The ${code("build")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1;if(typeof localConfig.build.env<"u"&&!isObject(localConfig.build.env))return error(`The ${code("build.env")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1}let meta=Object.assign({},parseMeta(localConfig.meta),cliMeta),gitMetadata=singleFile?Promise.resolve(void 0):createGitMeta(join4(cwd,project.rootDirectory||""),project);gitMetadata.catch(()=>{});let deploymentEnv=Object.assign({},parseEnv(localConfig.env),parseEnv(parsedArguments.flags["--env"])),deploymentBuildEnv=Object.assign({},parseEnv(localConfig.build&&localConfig.build.env),parseEnv(parsedArguments.flags["--build-env"]));try{await addProcessEnv(log,deploymentEnv),await addProcessEnv(log,deploymentBuildEnv)}catch(err){return error((0,import_error_utils2.errorToString)(err)),1}let regionFlag=(parsedArguments.flags["--regions"]||"").split(",").map(s=>s.trim()).filter(Boolean),regions=regionFlag.length>0?regionFlag:localConfig.regions,now=new Now({client,currentTeam}),deployStamp=stamp_default(),deployment=null,noWait=!!parsedArguments.flags["--no-wait"],withFullLogs=!!parsedArguments.flags["--logs"],localConfigurationOverrides=pickOverrides(localConfig),name=project.name;if(!name)throw new Error("`name` not found on project or provided by existing project");try{let autoAssignCustomDomains=parsedArguments.flags["--skip-domain"]?!1:void 0,createArgs={name,project:project.id,env:deploymentEnv,build:{env:deploymentBuildEnv},buildMachine,forceNew:parsedArguments.flags["--force"],withCache:parsedArguments.flags["--with-cache"],prebuilt,anonymous:isAnonymous,vercelOutputDir,rootDirectory,quiet,nowConfig:{...localConfig,images:void 0},regions,meta,gitMetadata,deployStamp,target,skipAutoDetectionConfirmation:autoConfirm||isAnonymous,noWait,withFullLogs,autoAssignCustomDomains,agentName:client.agentName,jsonOutput:asJson,linkedProject:project,linkedProjectIsPartial:isRemoteLookupSkippedLink(link)};(!localConfig.builds||localConfig.builds.length===0)&&(createArgs.projectSettings={sourceFilesOutsideRootDirectory,rootDirectory,...localConfigurationOverrides,...singleFile&&singleFileProjectSettings});let{packageJson}=singleFile?{packageJson:null}:await(0,import_build_utils2.findPackageJson)(join4(cwd,project?.rootDirectory??""),!0,cwd),nodeVersion;if(packageJson?.engines?.node)try{let{range}=await(0,import_build_utils2.getSupportedNodeVersion)(packageJson.engines.node);nodeVersion=range}catch(error2){error2 instanceof Error&&output_manager_default.warn(error2.message)}if(createArgs.projectSettings||(createArgs.projectSettings={}),isAnonymous&&!Object.hasOwn(localConfig,"framework")&&createArgs.projectSettings.framework===void 0&&prebuiltBuild?.detectedFramework?.status==="detected"&&prebuiltBuild.detectedFramework.slug&&(createArgs.projectSettings.framework=prebuiltBuild.detectedFramework.slug),createArgs.projectSettings.nodeVersion=nodeVersion,deployment=await createDeploy(client,now,contextName,singleFileOutputRoot??singleFile??cwd,createArgs,org,!project,parsedArchive?"tgz":void 0),deployment&&!(deployment instanceof Error)&&telemetryClient.trackDeploymentId(deployment.id),deployment instanceof NotDomainOwner)return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"not_domain_owner",message:deployment.message,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
29
- `),1):(output_manager_default.error(deployment.message),1);if(deployment instanceof Error){let msg=deployment.message||"An unexpected error occurred while deploying your project";return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"deploy_failed",message:msg,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
30
- `),1):(output_manager_default.error(msg,void 0,"https://vercel.link/help","Contact Support"),1)}if(deployment.readyState==="CANCELED"){if(asJson){output_manager_default.stopSpinner();let deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"DEPLOYMENT_CANCELED",message:"The deployment has been canceled."}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"deployment_canceled",message:"The deployment has been canceled.",deployment:deploymentJson,next:[{command:redeployCommand,when:"retry deploy"}]}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
43
+ `);let isObject=item=>Object.prototype.toString.call(item)==="[object Object]";if(typeof localConfig.env<"u"&&!isObject(localConfig.env))return error(`The ${code("env")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1;if(typeof localConfig.build<"u"){if(!isObject(localConfig.build))return error(`The ${code("build")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1;if(typeof localConfig.build.env<"u"&&!isObject(localConfig.build.env))return error(`The ${code("build.env")} property in ${highlight(localConfig[import_client.fileNameSymbol])} needs to be an object`),1}let meta=Object.assign({},parseMeta(localConfig.meta),cliMeta),gitMetadata=singleFile?Promise.resolve(void 0):createGitMeta(join13(cwd,project.rootDirectory||""),project);gitMetadata.catch(()=>{});let deploymentEnv=Object.assign({},parseEnv(localConfig.env),parseEnv(parsedArguments.flags["--env"])),deploymentBuildEnv=Object.assign({},parseEnv(localConfig.build&&localConfig.build.env),parseEnv(parsedArguments.flags["--build-env"]));try{await addProcessEnv(log,deploymentEnv),await addProcessEnv(log,deploymentBuildEnv)}catch(err){return error((0,import_error_utils2.errorToString)(err)),1}let regionFlag=(parsedArguments.flags["--regions"]||"").split(",").map(s=>s.trim()).filter(Boolean),regions=regionFlag.length>0?regionFlag:localConfig.regions,now=new Now({client,currentTeam}),deployStamp=stamp_default(),deployment=null,noWait=!!parsedArguments.flags["--no-wait"],withFullLogs=!!parsedArguments.flags["--logs"],localConfigurationOverrides=pickOverrides(localConfig),name=project.name;if(!name)throw new Error("`name` not found on project or provided by existing project");try{let autoAssignCustomDomains=parsedArguments.flags["--skip-domain"]?!1:void 0,createArgs={name,project:project.id,env:deploymentEnv,build:{env:deploymentBuildEnv},buildMachine,forceNew:parsedArguments.flags["--force"],withCache:parsedArguments.flags["--with-cache"],prebuilt,anonymous:isAnonymous,vercelOutputDir,rootDirectory,quiet,nowConfig:{...localConfig,images:void 0},regions,meta,gitMetadata,deployStamp,target,skipAutoDetectionConfirmation:autoConfirm||isAnonymous,noWait,withFullLogs,autoAssignCustomDomains,agentName:client.agentName,jsonOutput:asJson,linkedProject:project,linkedProjectIsPartial:isRemoteLookupSkippedLink(link)};(!localConfig.builds||localConfig.builds.length===0)&&(createArgs.projectSettings={sourceFilesOutsideRootDirectory,rootDirectory,...localConfigurationOverrides,...singleFile&&singleFileProjectSettings});let{packageJson}=singleFile?{packageJson:null}:await(0,import_build_utils9.findPackageJson)(join13(cwd,project?.rootDirectory??""),!0,cwd),nodeVersion;if(packageJson?.engines?.node)try{let{range}=await(0,import_build_utils9.getSupportedNodeVersion)(packageJson.engines.node);nodeVersion=range}catch(error2){error2 instanceof Error&&output_manager_default.warn(error2.message)}if(createArgs.projectSettings||(createArgs.projectSettings={}),isAnonymous&&!Object.hasOwn(localConfig,"framework")&&createArgs.projectSettings.framework===void 0&&prebuiltBuild?.detectedFramework?.status==="detected"&&prebuiltBuild.detectedFramework.slug&&(createArgs.projectSettings.framework=prebuiltBuild.detectedFramework.slug),createArgs.projectSettings.nodeVersion=nodeVersion,deployment=await createDeploy(client,now,contextName,singleFileOutputRoot??singleFile??cwd,createArgs,org,!project,parsedArchive?"tgz":void 0),deployment&&!(deployment instanceof Error)&&telemetryClient.trackDeploymentId(deployment.id),deployment instanceof NotDomainOwner)return recordCliError({code:"not_domain_owner"}),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"not_domain_owner",message:deployment.message,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
44
+ `),1):(output_manager_default.error(deployment.message),1);if(deployment instanceof Error){let deployError=cliErrorFromUnknown(deployment);recordCliError({...deployError,code:deployError.code??"deploy_failed"});let msg=deployment.message||"An unexpected error occurred while deploying your project";return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"deploy_failed",message:msg,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
45
+ `),1):(output_manager_default.error(msg,void 0,"https://vercel.link/help","Contact Support"),1)}if(deployment.readyState==="CANCELED"){if(recordCliError({code:"deployment_canceled"}),asJson){output_manager_default.stopSpinner();let deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"DEPLOYMENT_CANCELED",message:"The deployment has been canceled."}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"deployment_canceled",message:"The deployment has been canceled.",deployment:deploymentJson,next:[{command:redeployCommand,when:"retry deploy"}]}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
31
46
  `)}else output_manager_default.print(`The deployment has been canceled.
32
- `);return 1}if(deployment.checks?.["deployment-alias"]?.state==="failed")return handleFailedCheckRuns(client,deployment,asJson,redeployCommand);if(deployment.checksConclusion==="failed"){let{checks}=await getDeploymentChecks(client,deployment.id),counters=new Map;checks.forEach(c=>{counters.set(c.conclusion,(counters.get(c.conclusion)??0)+1)});let counterList=Array.from(counters).map(([name2,no])=>`${no} ${name2}`).join(", ");if(asJson){output_manager_default.stopSpinner();let message=`Running Checks: ${counterList}`,deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"CHECKS_FAILED",message}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"checks_failed",message,deployment:deploymentJson,next:[{command:redeployCommand,when:"retry deploy"}]}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
33
- `)}else output_manager_default.error(`Running Checks: ${counterList}`);return 1}if(!noWait&&shouldReconcileFinalDeployment(deployment)&&await getDeployment(client,contextName,deployment.id),deployment===null)return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"upload_failed",message:"Uploading failed. Please try again.",next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
34
- `),1):(error("Uploading failed. Please try again."),1)}catch(err){(0,import_error_utils2.isError)(err)&&debug(`Error: ${err}
47
+ `);return 1}if(deployment.checks?.["deployment-alias"]?.state==="failed")return handleFailedCheckRuns(client,deployment,asJson,redeployCommand);if(deployment.checksConclusion==="failed"){recordCliError({code:"checks_failed"});let{checks}=await getDeploymentChecks(client,deployment.id),counters=new Map;checks.forEach(c=>{counters.set(c.conclusion,(counters.get(c.conclusion)??0)+1)});let counterList=Array.from(counters).map(([name2,no])=>`${no} ${name2}`).join(", ");if(asJson){output_manager_default.stopSpinner();let message=`Running Checks: ${counterList}`,deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"CHECKS_FAILED",message}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"checks_failed",message,deployment:deploymentJson,next:[{command:redeployCommand,when:"retry deploy"}]}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
48
+ `)}else output_manager_default.error(`Running Checks: ${counterList}`);return 1}if(!noWait&&shouldReconcileFinalDeployment(deployment)&&await getDeployment(client,contextName,deployment.id),deployment===null)return recordCliError({code:"upload_failed"}),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"upload_failed",message:"Uploading failed. Please try again.",next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
49
+ `),1):(error("Uploading failed. Please try again."),1)}catch(err){recordCliError(cliErrorFromUnknown(err)),(0,import_error_utils2.isError)(err)&&debug(`Error: ${err}
35
50
  ${err.stack}`);let anonymousExitCode=await handleAnonymousDeploymentError({client,cwd,error:err,link:anonymousLink,isV0,retry:()=>handleDefaultDeploy(client,telemetryClient)});if(anonymousExitCode!==void 0)return anonymousExitCode;if(err instanceof UploadErrorMissingArchive)return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"missing_archive",message:err.message,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
36
- `),1):(output_manager_default.prettyError(err),1);if(err instanceof NotDomainOwner)return client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"not_domain_owner",message:err.message,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
37
- `),1):(output_manager_default.error(err.message),1);if(err instanceof DomainNotFound&&err.meta&&err.meta.domain){output_manager_default.debug(`The domain ${err.meta.domain} was not found, trying to purchase it`);let{default:purchaseDomainIfAvailable}=await import("../../chunks/purchase-domain-if-available-CJK3G4DT.js"),purchase=await purchaseDomainIfAvailable(client,err.meta.domain,contextName);return purchase===!0?(output_manager_default.success(`Successfully purchased the domain ${err.meta.domain}!`),0):purchase===!1||purchase instanceof UserAborted?(handleCreateDeployError(deployment,localConfig),1):(handleCreateDeployError(purchase,localConfig),1)}if(err instanceof DomainNotFound||err instanceof DomainNotVerified||err instanceof NotDomainOwner||err instanceof DomainPermissionDenied||err instanceof DomainVerificationFailed||err instanceof SchemaValidationFailed||err instanceof InvalidDomain||err instanceof DeploymentNotFound||err instanceof BuildsRateLimited||err instanceof DeploymentsRateLimited||err instanceof AliasDomainConfigured||err instanceof MissingBuildScript||err instanceof ConflictingFilePath||err instanceof ConflictingPathSegment||err instanceof ConflictingConfigFiles)return client.nonInteractive&&client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"deploy_failed",message:err instanceof Error?err.message:String(err),next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
38
- `),handleCreateDeployError(err,localConfig),1;if(err instanceof BuildError){if(now.url)try{let failedDeployment=await getDeployment(client,contextName,now.url);if(asJson)output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify(getDeploymentOutputJson(failedDeployment,client.apiUrl,{name:"BUILD_ERROR",message:err.message}),null,2)}
39
- `);else if(withFullLogs===!1){let{displayBuildLogsUntilFinalError}=await import("../../chunks/logs-L33R4G67.js");await displayBuildLogsUntilFinalError(client,failedDeployment,err.message)}}catch{asJson?(output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({error:{name:"BUILD_ERROR",message:err.message},url:`https://${now.url}`},null,2)}
40
- `)):(output_manager_default.log(`To check build logs run: ${getCommandName(`inspect ${now.url} --logs`)}`),output_manager_default.log(`Or inspect them in your browser at https://${now.url}/_logs`))}return 1}if(isAPIError(err)&&err.code==="size_limit_exceeded"){let{sizeLimit=0}=err,message=`File size limit exceeded (${(0,import_bytes.default)(sizeLimit)})`;return client.nonInteractive&&client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"size_limit_exceeded",message,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
51
+ `),1):(output_manager_default.prettyError(err),1);if(err instanceof NotDomainOwner)return recordCliError({code:"not_domain_owner"},{override:!0}),client.nonInteractive?(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"not_domain_owner",message:err.message,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
52
+ `),1):(output_manager_default.error(err.message),1);if(err instanceof DomainNotFound&&err.meta&&err.meta.domain){output_manager_default.debug(`The domain ${err.meta.domain} was not found, trying to purchase it`);let{default:purchaseDomainIfAvailable}=await import("../../chunks/purchase-domain-if-available-TAXCYIV7.js"),purchase=await purchaseDomainIfAvailable(client,err.meta.domain,contextName);return purchase===!0?(output_manager_default.success(`Successfully purchased the domain ${err.meta.domain}!`),0):purchase===!1||purchase instanceof UserAborted?(handleCreateDeployError(deployment,localConfig),1):(handleCreateDeployError(purchase,localConfig),1)}if(err instanceof DomainNotFound||err instanceof DomainNotVerified||err instanceof NotDomainOwner||err instanceof DomainPermissionDenied||err instanceof DomainVerificationFailed||err instanceof SchemaValidationFailed||err instanceof InvalidDomain||err instanceof DeploymentNotFound||err instanceof BuildsRateLimited||err instanceof DeploymentsRateLimited||err instanceof AliasDomainConfigured||err instanceof MissingBuildScript||err instanceof ConflictingFilePath||err instanceof ConflictingPathSegment||err instanceof ConflictingConfigFiles)return client.nonInteractive&&client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"deploy_failed",message:err instanceof Error?err.message:String(err),next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
53
+ `),handleCreateDeployError(err,localConfig),1;if(err instanceof BuildError){let buildFailedNext=[...now.url?[{command:withGlobalFlags(client,`inspect ${now.url} --logs`),when:"read build logs"}]:[],{command:redeployCommand,when:"retry deploy"}];if(now.url)try{let failedDeployment=await getDeployment(client,contextName,now.url);if(asJson){output_manager_default.stopSpinner();let deploymentJson=getDeploymentOutputJson(failedDeployment,client.apiUrl,{name:"BUILD_ERROR",message:err.message}),payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"build_failed",message:err.message,deployment:deploymentJson,next:buildFailedNext}:deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
54
+ `)}else if(withFullLogs===!1){let{displayBuildLogsUntilFinalError}=await import("../../chunks/logs-Z7IMGFO2.js");await displayBuildLogsUntilFinalError(client,failedDeployment,err.message)}}catch{if(asJson){output_manager_default.stopSpinner();let payload=client.nonInteractive?{status:AGENT_STATUS.ERROR,reason:"build_failed",message:err.message,url:`https://${now.url}`,next:buildFailedNext}:{error:{name:"BUILD_ERROR",message:err.message},url:`https://${now.url}`};client.stdout.write(`${JSON.stringify(payload,null,2)}
55
+ `)}else output_manager_default.log(`To check build logs run: ${getCommandName(`inspect ${now.url} --logs`)}`),output_manager_default.log(`Or inspect them in your browser at https://${now.url}/_logs`)}else client.nonInteractive&&(output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"build_failed",message:err.message,next:buildFailedNext},null,2)}
56
+ `));return 1}if(isAPIError(err)&&err.code==="size_limit_exceeded"){let{sizeLimit=0}=err,message=`File size limit exceeded (${(0,import_bytes.default)(sizeLimit)})`;return client.nonInteractive&&client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"size_limit_exceeded",message,next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
41
57
  `),error(message),1}return client.nonInteractive&&client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"deploy_failed",message:err instanceof Error?err.message:String(err),next:[{command:redeployCommand,when:"retry deploy"}]},null,2)}
42
58
  `),printError(err),1}let[gitConnectCommand,protection]=await Promise.all([postDeployGuidanceEnabled?getGitConnectRecommendation(client,projectCwd,project,{alreadyOffered:"gitConnectOffered"in link?link.gitConnectOffered:!1}):void 0,anonymousLink?null:getEnabledProtection(client,project)]);if(asJson){output_manager_default.stopSpinner();let anonymousUrl=anonymousLink?deployment.alias?.[0]:void 0,deploymentJson={...getDeploymentOutputJson(deployment,client.apiUrl),...anonymousLink?{expiresAt:anonymousLink.expiresAt,claimUrl:anonymousLink.claimUrl}:{},...anonymousUrl?{url:`https://${anonymousUrl}`,inspectorUrl:null,productionUrl:null}:{},...anonymousLink?{}:{deploymentProtection:protection?.map(method=>method.id)??null}},isImplicitProduction=deployment.target==="production"&&!target,payload=client.nonInteractive?{status:AGENT_STATUS.OK,deployment:deploymentJson,message:anonymousLink?`Anonymous deployment ${anonymousUrl??deployment.url} ready. It expires in ${(0,import_ms.default)(anonymousLink.expiresAt-Date.now(),{long:!0})}. Claim it at ${anonymousLink.claimUrl} to keep it.`:formatReadyMessage(deployment.url,deploymentJson.productionUrl),...isImplicitProduction?{hint:"This is the project\u2019s first deployment, so it was assigned to production. Future deployments will be preview deployments unless you use --prod."}:{},next:anonymousLink?[{command:redeployCommand,when:"Redeploy changes to the same anonymous deployment"},{command:withGlobalFlags(client,"login"),when:"Create an account to keep deploying"}]:[...gitConnectCommand?[{command:gitConnectCommand,when:"Automatically deploy changes on every push"}]:[],{command:`${packageName} curl ${deploymentJson.productionUrl??`https://${deployment.url}`}`,when:"Verify deployment, including when Deployment Protection is enabled"},{command:withGlobalFlags(client,`inspect ${deployment.url}`),when:"Inspect deployment"},...isImplicitProduction?[]:[{command:withGlobalFlags(client,"deploy --prod"),when:"Promote to production"}]]}:deploymentJson;return client.stdout.write(`${JSON.stringify(payload,null,2)}
43
59
  `),0}return anonymousLink&&(output_manager_default.print(`
44
- `),log(`This deployment expires in ${(0,import_ms.default)(anonymousLink.expiresAt-Date.now(),{long:!0})}. Claim it to keep it live (don't share this link): ${import_chalk.default.cyan(anonymousLink.claimUrl)}`)),await printDeploymentStatus(client,deployment,deployStamp,noWait,postDeployGuidanceEnabled,void 0,gitConnectCommand,protection?.map(method=>method.name))}function handleCreateDeployError(error,localConfig){if(error instanceof InvalidDomain)return output_manager_default.error(`The domain ${error.meta.domain} is not valid`),1;if(error instanceof DomainVerificationFailed)return output_manager_default.error(`The domain used as a suffix ${import_chalk.default.underline(error.meta.domain)} is not verified and can't be used as custom suffix.`),1;if(error instanceof DomainPermissionDenied)return output_manager_default.error(`You don't have permissions to access the domain used as a suffix ${import_chalk.default.underline(error.meta.domain)}.`),1;if(error instanceof SchemaValidationFailed){let niceError=(0,import_build_utils2.getPrettyError)(error.meta),fileName=localConfig[import_client.fileNameSymbol]||"vercel.json";return niceError.message=`Invalid ${fileName} - ${niceError.message}`,output_manager_default.prettyError(niceError),1}if(error instanceof TooManyRequests)return output_manager_default.error(`Too many requests detected for ${error.meta.api} API. Try again in ${(0,import_ms.default)(error.meta.retryAfterMs,{long:!0})}.`),1;if(error instanceof DomainNotVerified)return output_manager_default.error(`The domain used as an alias ${import_chalk.default.underline(error.meta.domain)} is not verified yet. Please verify it.`),1;if(error instanceof BuildsRateLimited){output_manager_default.error(error.message);let cta=getErrorCta(error.meta);return output_manager_default.note(cta?`${cta.label}: ${link_default(cta.url)}`:"Upgrade your plan to increase your builds limit."),1}return error instanceof DeploymentNotFound||error instanceof NotDomainOwner||error instanceof DeploymentsRateLimited||error instanceof AliasDomainConfigured||error instanceof MissingBuildScript||error instanceof ConflictingFilePath||error instanceof ConflictingPathSegment||error instanceof ConflictingConfigFiles||error instanceof DeprecatedNowJson?(output_manager_default.error(error.message),1):error}function printDeploymentDryRun(client,summary,framework,asJson){let directories=getDirectoryDistribution(summary.files),largestFiles=[...summary.files].sort((a,b)=>b.size-a.size||a.path.localeCompare(b.path)).slice(0,10);if(asJson){client.stdout.write(`${JSON.stringify({framework,basePath:summary.basePath,fileCount:summary.fileCount,totalSize:summary.totalSize,ignoredCount:summary.ignoredCount,ignored:summary.ignored,...summary.warning?{warning:{code:"PREBUILT_FILEPATHMAP_IGNORED",message:summary.warning}}:{},directories,largestFiles,files:summary.files},null,2)}
60
+ `),log(`This deployment expires in ${(0,import_ms.default)(anonymousLink.expiresAt-Date.now(),{long:!0})}. Claim it to keep it live (don't share this link): ${import_chalk.default.cyan(anonymousLink.claimUrl)}`)),await printDeploymentStatus(client,deployment,deployStamp,noWait,postDeployGuidanceEnabled,void 0,gitConnectCommand,protection?.map(method=>method.name))}function handleCreateDeployError(error,localConfig){if(error instanceof InvalidDomain)return output_manager_default.error(`The domain ${error.meta.domain} is not valid`),1;if(error instanceof DomainVerificationFailed)return output_manager_default.error(`The domain used as a suffix ${import_chalk.default.underline(error.meta.domain)} is not verified and can't be used as custom suffix.`),1;if(error instanceof DomainPermissionDenied)return output_manager_default.error(`You don't have permissions to access the domain used as a suffix ${import_chalk.default.underline(error.meta.domain)}.`),1;if(error instanceof SchemaValidationFailed){let niceError=(0,import_build_utils9.getPrettyError)(error.meta),fileName=localConfig[import_client.fileNameSymbol]||"vercel.json";return niceError.message=`Invalid ${fileName} - ${niceError.message}`,output_manager_default.prettyError(niceError),1}if(error instanceof TooManyRequests)return output_manager_default.error(`Too many requests detected for ${error.meta.api} API. Try again in ${(0,import_ms.default)(error.meta.retryAfterMs,{long:!0})}.`),1;if(error instanceof DomainNotVerified)return output_manager_default.error(`The domain used as an alias ${import_chalk.default.underline(error.meta.domain)} is not verified yet. Please verify it.`),1;if(error instanceof BuildsRateLimited){output_manager_default.error(error.message);let cta=getErrorCta(error.meta);return output_manager_default.note(cta?`${cta.label}: ${link_default(cta.url)}`:"Upgrade your plan to increase your builds limit."),1}return error instanceof DeploymentNotFound||error instanceof NotDomainOwner||error instanceof DeploymentsRateLimited||error instanceof AliasDomainConfigured||error instanceof MissingBuildScript||error instanceof ConflictingFilePath||error instanceof ConflictingPathSegment||error instanceof ConflictingConfigFiles||error instanceof DeprecatedNowJson?(output_manager_default.error(error.message),1):error}function printDeploymentDryRun(client,summary,framework,asJson){let directories=getDirectoryDistribution(summary.files),largestFiles=[...summary.files].sort((a,b)=>b.size-a.size||a.path.localeCompare(b.path)).slice(0,10);if(asJson){client.stdout.write(`${JSON.stringify({framework,basePath:summary.basePath,fileCount:summary.fileCount,totalSize:summary.totalSize,ignoredCount:summary.ignoredCount,ignored:summary.ignored,...summary.warning?{warning:{code:"PREBUILT_FILEPATHMAP_IGNORED",message:summary.warning}}:{},directories,largestFiles,files:summary.files},null,2)}
45
61
  `);return}let lines=[`${import_chalk.default.bold("Deployment Dry Run")}
46
62
  `,`${import_chalk.default.bold("Detected Framework Preset")}: ${framework.name}${framework.slug?` (${framework.slug})`:""}`,`Included: ${summary.fileCount} ${pluralize("file",summary.fileCount)}, ${formatBytes(summary.totalSize)}`,`Ignored: ${summary.ignoredCount} ${pluralize("path",summary.ignoredCount)}
47
63
  `];directories.length>0&&lines.push(table([["Path","Files","Size"],...directories.map(item=>[item.path,String(item.fileCount),formatBytes(item.size)])],{align:["l","r","r"],hsep:4}),""),largestFiles.length>0&&lines.push(import_chalk.default.bold("Largest Files"),table(largestFiles.map(file=>[file.path,formatBytes(file.size)]),{align:["l","r"],hsep:4}),""),output_manager_default.print(`${lines.join(`
48
64
  `)}
49
- `)}function getDirectoryDistribution(files){let directories=new Map;for(let file of files){let[segment]=file.path.split("/"),key=file.path.includes("/")?segment:file.path,current=directories.get(key)??{path:key,fileCount:0,size:0};current.fileCount+=1,current.size+=file.size,directories.set(key,current)}return Array.from(directories.values()).sort((a,b)=>b.size-a.size||a.path.localeCompare(b.path))}function formatBytes(size){return import_bytes.default.format(size,{decimalPlaces:1})}function pluralize(word,count){return count===1?word:`${word}s`}var addProcessEnv=async(log,env)=>{let val;for(let key of Object.keys(env))if(!(typeof env[key]<"u"))if(val=process.env[key],typeof val=="string")log(`Reading ${import_chalk.default.bold(`"${import_chalk.default.bold(key)}"`)} from your env (as no value was specified)`),env[key]=val.replace(/^@/,"\\@");else throw new Error(`No value specified for env variable ${import_chalk.default.bold(`"${import_chalk.default.bold(key)}"`)} and it was not found in your env. If you meant to specify an environment to deploy to, use ${param("--target")}`)};async function handleContinueDeployment({client,telemetryClient,deploymentId,cwd,deployStamp,noWait,org,vercelOutputDir,archive}){let{debug,error}=output_manager_default;if(debug(`Continuing deployment: ${deploymentId}`),!vercelOutputDir)return error("Could not determine vercel output directory"),1;let token=client.authConfig.token;if(!token)return error("Missing authentication token"),1;output_manager_default.spinner("Continuing deployment\u2026",0);try{let finalDeployment=null,prebuiltFilePathMapWarning;for await(let event of(0,import_client.continueDeployment)({apiUrl:client.apiUrl,debug:output_manager_default.isDebugEnabled(),deploymentId,archive,path:cwd,teamId:org.type==="team"?org.id:void 0,token,vercelOutputDir})){if(debug(`Event: ${event.type}`),event.type==="warning"&&"code"in event&&event.code==="PREBUILT_FILEPATHMAP_IGNORED"){let message=String(event.payload);prebuiltFilePathMapWarning={code:"PREBUILT_FILEPATHMAP_IGNORED",message},printPrebuiltFilePathMapIgnoreWarning(message,telemetryClient),client.stderr.isTTY&&output_manager_default.spinner("Continuing deployment\u2026",0);continue}if(event.type==="hashes-calculated"){let hashCount=Object.keys(event.payload).length;debug(`Calculated ${hashCount} hashes`)}if(event.type==="file-count"){let{total,missing}=event.payload;output_manager_default.spinner(`Uploading ${missing.length} of ${total.size} files\u2026`,0)}if(event.type==="file-uploaded"&&debug(`Uploaded: ${event.payload.file.names.join(" ")}`),event.type==="all-files-uploaded"&&output_manager_default.spinner("Continuing deployment\u2026",0),event.type==="created"){finalDeployment=event.payload,output_manager_default.stopSpinner(),finalDeployment.inspectorUrl&&printAlignedLabel("Inspect",import_chalk.default.cyan(finalDeployment.inspectorUrl));let isProdDeployment=finalDeployment.target==="production",previewUrl=`https://${finalDeployment.url}`;if(printAlignedLabel(isProdDeployment?"Production":"Preview",import_chalk.default.cyan(previewUrl),isProdDeployment&&noWait?{gutter:"\u25B2"}:{}),noWait)return prebuiltFilePathMapWarning&&(finalDeployment.warning=prebuiltFilePathMapWarning),printDeploymentStatus(client,finalDeployment,deployStamp,noWait,!1);output_manager_default.spinner("Building\u2026",0)}if(event.type==="building"&&output_manager_default.spinner("Building\u2026",0),event.type==="ready"&&(finalDeployment=event.payload,output_manager_default.stopSpinner()),event.type==="alias-assigned"&&(finalDeployment=event.payload,output_manager_default.stopSpinner(),finalDeployment.target==="production"&&finalDeployment.alias&&finalDeployment.alias.length>0)){let prodUrl=`https://${finalDeployment.alias[0]}`;printAlignedLabel("Aliased",import_chalk.default.cyan(prodUrl),{gutter:"\u25B2"})}if(event.type==="checks-v2-failed")return output_manager_default.stopSpinner(),handleFailedCheckRuns(client,event.payload,!1);if(event.type==="error"){output_manager_default.stopSpinner();let payload=event.payload;return error(payload.message||"An error occurred during deployment"),1}}return finalDeployment?(prebuiltFilePathMapWarning&&(finalDeployment.warning=prebuiltFilePathMapWarning),printDeploymentStatus(client,finalDeployment,deployStamp,noWait,!1)):(error("Deployment failed: no deployment returned"),1)}catch(err){return output_manager_default.stopSpinner(),(0,import_error_utils2.isError)(err)?(debug(`Error: ${err}
50
- ${err.stack}`),error(err.message)):error("An unexpected error occurred"),1}}function formatReadyMessage(url,productionUrl){return productionUrl?`Deployment ${url} ready. Production URL: ${productionUrl}`:`Deployment ${url} ready.`}function getDeploymentOutputJson(deployment,apiUrl,error){let buildMachine=getBuildMachineResourceConfig(deployment);return{id:deployment.id,url:`https://${deployment.url}`,productionUrl:getProductionUrl(deployment),inspectorUrl:deployment.inspectorUrl??null,readyState:deployment.readyState,target:deployment.target??null,deploymentApiUrl:`${apiUrl}/v13/deployments/${deployment.id}`,...buildMachine?{buildMachine}:{},...deployment.warning?{warning:deployment.warning}:{},...deployment.aliasWarning?{aliasWarning:deployment.aliasWarning}:{},...deployment.aliasError?{aliasError:deployment.aliasError}:{},...error?{error}:{}}}function shouldReconcileFinalDeployment(deployment){return deployment?!!(deployment.readyState!=="READY"||deployment.aliasError||!deployment.aliasAssigned||deployment.checksConclusion==="failed"||deployment.checks?.["deployment-alias"]?.state==="failed"):!1}async function handleFailedCheckRuns(client,deployment,asJson,retryCommand=withGlobalFlags(client,"deploy")){let{runs}=await getDeploymentCheckRuns(client,deployment.id),failedRuns=(runs??[]).filter(run=>run.conclusion==="failed"),counters=new Map;(runs??[]).forEach(r=>{counters.set(r.conclusion,(counters.get(r.conclusion)??0)+1)});let message=`Running Checks: ${Array.from(counters).map(([name,no])=>`${no} ${name}`).join(", ")}`,getCheckRunUrl=run=>run.externalUrl?run.externalUrl:run.detailsUrl?run.detailsUrl:deployment.inspectorUrl?`${deployment.inspectorUrl}?checkRunLog=${encodeURIComponent(run.id)}`:null;if(asJson){output_manager_default.stopSpinner();let deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"CHECKS_FAILED",message}),payload;if(client.nonInteractive){let failedCheckRunsWithLogs=await Promise.all(failedRuns.map(async run=>{let logs=[];try{logs=await getDeploymentCheckRunLogs(client,deployment.id,run.id)}catch{}return{id:run.id,name:run.name,conclusion:run.conclusion,source:run.source,url:getCheckRunUrl(run),logs}}));payload={status:AGENT_STATUS.ERROR,reason:"checks_failed",message,deployment:deploymentJson,failedCheckRuns:failedCheckRunsWithLogs,next:[{command:retryCommand,when:"retry deploy after fixing check failures"}]}}else payload=deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
65
+ `)}function getDirectoryDistribution(files){let directories=new Map;for(let file of files){let[segment]=file.path.split("/"),key=file.path.includes("/")?segment:file.path,current=directories.get(key)??{path:key,fileCount:0,size:0};current.fileCount+=1,current.size+=file.size,directories.set(key,current)}return Array.from(directories.values()).sort((a,b)=>b.size-a.size||a.path.localeCompare(b.path))}function formatBytes(size){return import_bytes.default.format(size,{decimalPlaces:1})}function pluralize(word,count){return count===1?word:`${word}s`}var addProcessEnv=async(log,env)=>{let val;for(let key of Object.keys(env))if(!(typeof env[key]<"u"))if(val=process.env[key],typeof val=="string")log(`Reading ${import_chalk.default.bold(`"${import_chalk.default.bold(key)}"`)} from your env (as no value was specified)`),env[key]=val.replace(/^@/,"\\@");else throw new Error(`No value specified for env variable ${import_chalk.default.bold(`"${import_chalk.default.bold(key)}"`)} and it was not found in your env. If you meant to specify an environment to deploy to, use ${param("--target")}`)};async function handleContinueDeployment({client,telemetryClient,deploymentId,cwd,deployStamp,noWait,org,vercelOutputDir,archive}){let{debug,error}=output_manager_default;if(debug(`Continuing deployment: ${deploymentId}`),!vercelOutputDir)return error("Could not determine vercel output directory"),1;let token=client.authConfig.token;if(!token)return error("Missing authentication token"),1;output_manager_default.spinner("Continuing deployment\u2026",0);try{let finalDeployment=null,prebuiltFilePathMapWarning;for await(let event of(0,import_client.continueDeployment)({apiUrl:client.apiUrl,debug:output_manager_default.isDebugEnabled(),deploymentId,archive,path:cwd,teamId:org.type==="team"?org.id:void 0,token,vercelOutputDir})){if(debug(`Event: ${event.type}`),event.type==="warning"&&"code"in event&&event.code==="PREBUILT_FILEPATHMAP_IGNORED"){let message=String(event.payload);prebuiltFilePathMapWarning={code:"PREBUILT_FILEPATHMAP_IGNORED",message},printPrebuiltFilePathMapIgnoreWarning(message,telemetryClient),client.stderr.isTTY&&output_manager_default.spinner("Continuing deployment\u2026",0);continue}if(event.type==="hashes-calculated"){let hashCount=Object.keys(event.payload).length;debug(`Calculated ${hashCount} hashes`)}if(event.type==="file-count"){let{total,missing}=event.payload;output_manager_default.spinner(`Uploading ${missing.length} of ${total.size} files\u2026`,0)}if(event.type==="file-uploaded"&&debug(`Uploaded: ${event.payload.file.names.join(" ")}`),event.type==="all-files-uploaded"&&output_manager_default.spinner("Continuing deployment\u2026",0),event.type==="created"){finalDeployment=event.payload,output_manager_default.stopSpinner(),finalDeployment.inspectorUrl&&printAlignedLabel("Inspect",import_chalk.default.cyan(finalDeployment.inspectorUrl));let isProdDeployment=finalDeployment.target==="production",previewUrl=`https://${finalDeployment.url}`;if(printAlignedLabel(isProdDeployment?"Production":"Preview",import_chalk.default.cyan(previewUrl),isProdDeployment&&noWait?{gutter:"\u25B2"}:{}),noWait)return prebuiltFilePathMapWarning&&(finalDeployment.warning=prebuiltFilePathMapWarning),printDeploymentStatus(client,finalDeployment,deployStamp,noWait,!1);output_manager_default.spinner("Building\u2026",0)}if(event.type==="building"&&output_manager_default.spinner("Building\u2026",0),event.type==="ready"&&(finalDeployment=event.payload,output_manager_default.stopSpinner()),event.type==="alias-assigned"&&(finalDeployment=event.payload,output_manager_default.stopSpinner(),finalDeployment.target==="production"&&finalDeployment.alias&&finalDeployment.alias.length>0)){let prodUrl=`https://${finalDeployment.alias[0]}`;printAlignedLabel("Aliased",import_chalk.default.cyan(prodUrl),{gutter:"\u25B2"})}if(event.type==="checks-v2-failed")return output_manager_default.stopSpinner(),handleFailedCheckRuns(client,event.payload,!1);if(event.type==="error"){output_manager_default.stopSpinner();let payload=event.payload;return recordCliError(cliErrorFromUnknown(payload)),error(payload.message||"An error occurred during deployment"),1}}return finalDeployment?(prebuiltFilePathMapWarning&&(finalDeployment.warning=prebuiltFilePathMapWarning),printDeploymentStatus(client,finalDeployment,deployStamp,noWait,!1)):(error("Deployment failed: no deployment returned"),1)}catch(err){return recordCliError(cliErrorFromUnknown(err)),output_manager_default.stopSpinner(),(0,import_error_utils2.isError)(err)?(debug(`Error: ${err}
66
+ ${err.stack}`),error(err.message)):error("An unexpected error occurred"),1}}function formatReadyMessage(url,productionUrl){return productionUrl?`Deployment ${url} ready. Production URL: ${productionUrl}`:`Deployment ${url} ready.`}function getDeploymentOutputJson(deployment,apiUrl,error){let buildMachine=getBuildMachineResourceConfig(deployment);return{id:deployment.id,url:`https://${deployment.url}`,productionUrl:getProductionUrl(deployment),inspectorUrl:deployment.inspectorUrl??null,readyState:deployment.readyState,target:deployment.target??null,deploymentApiUrl:`${apiUrl}/v13/deployments/${deployment.id}`,...buildMachine?{buildMachine}:{},...deployment.warning?{warning:deployment.warning}:{},...deployment.aliasWarning?{aliasWarning:deployment.aliasWarning}:{},...deployment.aliasError?{aliasError:deployment.aliasError}:{},...error?{error}:{}}}function shouldReconcileFinalDeployment(deployment){return deployment?!!(deployment.readyState!=="READY"||deployment.aliasError||!deployment.aliasAssigned||deployment.checksConclusion==="failed"||deployment.checks?.["deployment-alias"]?.state==="failed"):!1}async function handleFailedCheckRuns(client,deployment,asJson,retryCommand=withGlobalFlags(client,"deploy")){recordCliError({code:"checks_failed"});let{runs}=await getDeploymentCheckRuns(client,deployment.id),failedRuns=(runs??[]).filter(run=>run.conclusion==="failed"),counters=new Map;(runs??[]).forEach(r=>{counters.set(r.conclusion,(counters.get(r.conclusion)??0)+1)});let message=`Running Checks: ${Array.from(counters).map(([name,no])=>`${no} ${name}`).join(", ")}`,getCheckRunUrl=run=>run.externalUrl?run.externalUrl:run.detailsUrl?run.detailsUrl:deployment.inspectorUrl?`${deployment.inspectorUrl}?checkRunLog=${encodeURIComponent(run.id)}`:null;if(asJson){output_manager_default.stopSpinner();let deploymentJson=getDeploymentOutputJson(deployment,client.apiUrl,{name:"CHECKS_FAILED",message}),payload;if(client.nonInteractive){let failedCheckRunsWithLogs=await Promise.all(failedRuns.map(async run=>{let logs=[];try{logs=await getDeploymentCheckRunLogs(client,deployment.id,run.id)}catch{}return{id:run.id,name:run.name,conclusion:run.conclusion,source:run.source,url:getCheckRunUrl(run),logs}}));payload={status:AGENT_STATUS.ERROR,reason:"checks_failed",message,deployment:deploymentJson,failedCheckRuns:failedCheckRunsWithLogs,next:[{command:retryCommand,when:"retry deploy after fixing check failures"}]}}else payload=deploymentJson;client.stdout.write(`${JSON.stringify(payload,null,2)}
51
67
  `)}else{output_manager_default.error(message);for(let run of failedRuns){let dashboardUrl=getCheckRunUrl(run),label=dashboardUrl?output_manager_default.link(run.name,dashboardUrl):run.name;output_manager_default.print(` ${import_chalk.default.red("\u2717")} ${label}
52
68
  `)}}return 1}export{deploy_default as default};