vercel 63.0.1 → 63.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{add-ZLY3DE35.js → add-QBGY56BR.js} +1 -1
- package/dist/chunks/{permissions-JMFKPIO4.js → permissions-2WMWMXFP.js} +1 -1
- package/dist/chunks/{rm-ARMNSPGQ.js → rm-LL2AWOZT.js} +1 -1
- package/dist/commands/deploy/index.js +2 -2
- package/dist/commands-bulk.js +2 -2
- package/dist/version.mjs +1 -1
- package/package.json +14 -14
|
@@ -4,5 +4,5 @@ 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{parseTeamRefs,teamRefBody}from"./chunk-LSF7FY6X.js";import{repositoryPermissionsPath}from"./chunk-DFVNL5ML.js";import{emitVcrArgParseError,resolveVcrScope,validateVcrJsonOutput}from"./chunk-B3PZ3I4Z.js";import{
|
|
7
|
+
import{parseTeamRefs,teamRefBody}from"./chunk-LSF7FY6X.js";import{repositoryPermissionsPath}from"./chunk-DFVNL5ML.js";import{emitVcrArgParseError,resolveVcrScope,validateVcrJsonOutput}from"./chunk-B3PZ3I4Z.js";import{outputError}from"./chunk-WH3SHWVK.js";import{require_async_sema}from"./chunk-NZ2TFADV.js";import"./chunk-GSOPJJO5.js";import{permissionsAddSubcommand}from"./chunk-AU42HSQ3.js";import"./chunk-FBYA6LLM.js";import"./chunk-SCV7XEEO.js";import{printError}from"./chunk-V336CYEI.js";import{AGENT_REASON,buildCommandWithGlobalFlags,outputAgentError}from"./chunk-5RR3435W.js";import"./chunk-D4MW3RDW.js";import"./chunk-DZ6GORJ7.js";import"./chunk-HMS3UIQ2.js";import"./chunk-MXTC4ZAQ.js";import"./chunk-VKXEOL4K.js";import"./chunk-4SAVH3H7.js";import"./chunk-ZS2WS4AM.js";import"./chunk-AOWWC6WZ.js";import"./chunk-MY4MONOH.js";import{parseArguments}from"./chunk-R4VVQRLX.js";import"./chunk-BKV35LVB.js";import{getFlagsSpecification}from"./chunk-5IPBCD7K.js";import"./chunk-MYMM34ZH.js";import"./chunk-ROPQIBWJ.js";import"./chunk-VKPZP4LC.js";import"./chunk-PPCFQQSU.js";import"./chunk-N7Q2IESO.js";import"./chunk-VSE5BAPP.js";import"./chunk-VOZEB6PD.js";import{isAPIError}from"./chunk-AZULOP7M.js";import{packageName}from"./chunk-JESNVRVR.js";import{output_manager_default}from"./chunk-75IAMKGV.js";import"./chunk-RM3ZDRYE.js";import"./chunk-OO572JUC.js";import"./chunk-D3AHZ5LI.js";import"./chunk-2GHZGOWT.js";import"./chunk-YHPPP3SF.js";import"./chunk-NB2WLB3J.js";import"./chunk-ISWW3DKF.js";import"./chunk-BRQUZ5NC.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_async_sema=__toESM(require_async_sema(),1);var USAGE="vcr permissions <repository> add <team>[,<team>...]";async function add(client,argv,telemetry){let parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(permissionsAddSubcommand.options))}catch(err){return emitVcrArgParseError(client,err,USAGE),printError(err),2}let fr=validateVcrJsonOutput(client,parsedArgs.flags);if(typeof fr=="number")return fr;let repository=parsedArgs.args[0],teamRefs=parseTeamRefs(parsedArgs.args.slice(2)),project=parsedArgs.flags["--project"];if(telemetry.trackCliOptionProject(project),telemetry.trackCliOptionFormat(parsedArgs.flags["--format"]),teamRefs.length===0)return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:`Missing team. Example: ${packageName} vcr permissions ${repository} add team_1a2b3c4d`,next:[{command:buildCommandWithGlobalFlags(client.argv,USAGE),when:"Replace <team> with a team id or slug (comma-separate multiple teams)"}]},2),outputError(client,fr.jsonOutput,"MISSING_ARGUMENTS",`Usage: \`vercel ${USAGE}\``);let scope=await resolveVcrScope(client,{project,jsonOutput:fr.jsonOutput});if(typeof scope=="number")return scope;let path=repositoryPermissionsPath(scope,repository),added=[],failed=[];output_manager_default.spinner(`Sharing ${repository} with ${teamRefs.length===1?teamRefs[0]:`${teamRefs.length} teams`}...`);let sema=new import_async_sema.default(10),results;try{results=await Promise.all(teamRefs.map(async team=>{await sema.acquire();try{let result=await client.fetch(path,{method:"POST",body:teamRefBody(team)});return{ok:!0,team,permission:result.permission}}catch(err){if(!isAPIError(err))throw err;let message=err.serverMessage||`API error (${err.status}).`;return{ok:!1,team,failure:{team,code:err.code||"API_ERROR",message}}}finally{sema.release()}}))}finally{output_manager_default.stopSpinner()}for(let result of results)result.ok?(added.push(result.permission),fr.jsonOutput||output_manager_default.success(`Shared ${repository} with ${result.permission?.teamSlug??result.team}`)):(failed.push(result.failure),fr.jsonOutput||output_manager_default.error(`Failed to share ${repository} with ${result.team}: ${result.failure.message}`));return failed.length>0&&outputAgentError(client,{status:"error",reason:AGENT_REASON.API_ERROR,message:`Failed to share ${repository} with ${failed.map(f=>`${f.team} (${f.message})`).join(", ")}`},1),fr.jsonOutput&&client.stdout.write(`${JSON.stringify({permissions:added,failed},null,2)}
|
|
8
8
|
`),failed.length>0?1:0}export{add as default};
|
|
@@ -4,4 +4,4 @@ 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{getSubcommand}from"./chunk-ETV3C2CV.js";import{PERMISSIONS_ACTIONS,permissionsClearSubcommand,permissionsLsSubcommand}from"./chunk-AU42HSQ3.js";import{AGENT_REASON,buildCommandWithGlobalFlags,outputAgentError}from"./chunk-5RR3435W.js";import{parseArguments}from"./chunk-R4VVQRLX.js";import"./chunk-BKV35LVB.js";import{getFlagsSpecification}from"./chunk-5IPBCD7K.js";import"./chunk-VOZEB6PD.js";import"./chunk-AZULOP7M.js";import"./chunk-JESNVRVR.js";import{output_manager_default}from"./chunk-75IAMKGV.js";import"./chunk-RM3ZDRYE.js";import"./chunk-OO572JUC.js";import"./chunk-D3AHZ5LI.js";import"./chunk-2GHZGOWT.js";import"./chunk-YHPPP3SF.js";import"./chunk-NB2WLB3J.js";import"./chunk-ISWW3DKF.js";import"./chunk-BRQUZ5NC.js";import"./chunk-BZENIQ7N.js";var USAGE="vcr permissions <repository> <ls|add|rm|clear>",ROUTING_OPTIONS=[...permissionsLsSubcommand.options,...permissionsClearSubcommand.options];async function permissions(client,argv,telemetry){let positionals;try{positionals=parseArguments(argv,getFlagsSpecification(ROUTING_OPTIONS),{permissive:!0}).args}catch{positionals=argv.filter(arg=>!arg.startsWith("-"))}let repository=positionals[0],{subcommand}=getSubcommand(positionals.slice(1),PERMISSIONS_ACTIONS);if(!repository||subcommand==null){let message=repository?positionals.length<2?`Please specify an action. Usage: \`vercel ${USAGE}\`.`:`Unknown "vcr permissions" action "${positionals[1]}". Usage: \`vercel ${USAGE}\`.`:`Missing repository. Usage: \`vercel ${USAGE}\`.`;return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"vcr permissions --help"),when:"Show valid permissions actions"}]},2),output_manager_default.error(`${message} Run \`vercel vcr permissions --help\`.`),2}switch(subcommand){case"ls":return(await import("./ls-G5NTVYUB.js")).default(client,argv,telemetry);case"add":return(await import("./add-
|
|
7
|
+
import{getSubcommand}from"./chunk-ETV3C2CV.js";import{PERMISSIONS_ACTIONS,permissionsClearSubcommand,permissionsLsSubcommand}from"./chunk-AU42HSQ3.js";import{AGENT_REASON,buildCommandWithGlobalFlags,outputAgentError}from"./chunk-5RR3435W.js";import{parseArguments}from"./chunk-R4VVQRLX.js";import"./chunk-BKV35LVB.js";import{getFlagsSpecification}from"./chunk-5IPBCD7K.js";import"./chunk-VOZEB6PD.js";import"./chunk-AZULOP7M.js";import"./chunk-JESNVRVR.js";import{output_manager_default}from"./chunk-75IAMKGV.js";import"./chunk-RM3ZDRYE.js";import"./chunk-OO572JUC.js";import"./chunk-D3AHZ5LI.js";import"./chunk-2GHZGOWT.js";import"./chunk-YHPPP3SF.js";import"./chunk-NB2WLB3J.js";import"./chunk-ISWW3DKF.js";import"./chunk-BRQUZ5NC.js";import"./chunk-BZENIQ7N.js";var USAGE="vcr permissions <repository> <ls|add|rm|clear>",ROUTING_OPTIONS=[...permissionsLsSubcommand.options,...permissionsClearSubcommand.options];async function permissions(client,argv,telemetry){let positionals;try{positionals=parseArguments(argv,getFlagsSpecification(ROUTING_OPTIONS),{permissive:!0}).args}catch{positionals=argv.filter(arg=>!arg.startsWith("-"))}let repository=positionals[0],{subcommand}=getSubcommand(positionals.slice(1),PERMISSIONS_ACTIONS);if(!repository||subcommand==null){let message=repository?positionals.length<2?`Please specify an action. Usage: \`vercel ${USAGE}\`.`:`Unknown "vcr permissions" action "${positionals[1]}". Usage: \`vercel ${USAGE}\`.`:`Missing repository. Usage: \`vercel ${USAGE}\`.`;return outputAgentError(client,{status:"error",reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:buildCommandWithGlobalFlags(client.argv,"vcr permissions --help"),when:"Show valid permissions actions"}]},2),output_manager_default.error(`${message} Run \`vercel vcr permissions --help\`.`),2}switch(subcommand){case"ls":return(await import("./ls-G5NTVYUB.js")).default(client,argv,telemetry);case"add":return(await import("./add-QBGY56BR.js")).default(client,argv,telemetry);case"rm":return(await import("./rm-LL2AWOZT.js")).default(client,argv,telemetry);case"clear":return(await import("./clear-PYDGQBSS.js")).default(client,argv,telemetry);default:return output_manager_default.error(`Unhandled permissions action: ${subcommand}`),1}}export{permissions as default};
|
|
@@ -4,5 +4,5 @@ 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{parseTeamRefs,teamRefBody}from"./chunk-LSF7FY6X.js";import{repositoryPermissionsPath}from"./chunk-DFVNL5ML.js";import{emitVcrArgParseError,resolveVcrScope,validateVcrJsonOutput}from"./chunk-B3PZ3I4Z.js";import{
|
|
7
|
+
import{parseTeamRefs,teamRefBody}from"./chunk-LSF7FY6X.js";import{repositoryPermissionsPath}from"./chunk-DFVNL5ML.js";import{emitVcrArgParseError,resolveVcrScope,validateVcrJsonOutput}from"./chunk-B3PZ3I4Z.js";import{outputError}from"./chunk-WH3SHWVK.js";import{require_async_sema}from"./chunk-NZ2TFADV.js";import"./chunk-GSOPJJO5.js";import{permissionsRmSubcommand}from"./chunk-AU42HSQ3.js";import"./chunk-FBYA6LLM.js";import"./chunk-SCV7XEEO.js";import{printError}from"./chunk-V336CYEI.js";import{AGENT_REASON,buildCommandWithGlobalFlags,outputAgentError}from"./chunk-5RR3435W.js";import"./chunk-D4MW3RDW.js";import"./chunk-DZ6GORJ7.js";import"./chunk-HMS3UIQ2.js";import"./chunk-MXTC4ZAQ.js";import"./chunk-VKXEOL4K.js";import"./chunk-4SAVH3H7.js";import"./chunk-ZS2WS4AM.js";import"./chunk-AOWWC6WZ.js";import"./chunk-MY4MONOH.js";import{parseArguments}from"./chunk-R4VVQRLX.js";import"./chunk-BKV35LVB.js";import{getFlagsSpecification}from"./chunk-5IPBCD7K.js";import"./chunk-MYMM34ZH.js";import"./chunk-ROPQIBWJ.js";import"./chunk-VKPZP4LC.js";import"./chunk-PPCFQQSU.js";import"./chunk-N7Q2IESO.js";import"./chunk-VSE5BAPP.js";import"./chunk-VOZEB6PD.js";import{isAPIError}from"./chunk-AZULOP7M.js";import{packageName}from"./chunk-JESNVRVR.js";import{output_manager_default}from"./chunk-75IAMKGV.js";import"./chunk-RM3ZDRYE.js";import"./chunk-OO572JUC.js";import"./chunk-D3AHZ5LI.js";import"./chunk-2GHZGOWT.js";import"./chunk-YHPPP3SF.js";import"./chunk-NB2WLB3J.js";import"./chunk-ISWW3DKF.js";import"./chunk-BRQUZ5NC.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_async_sema=__toESM(require_async_sema(),1);var USAGE="vcr permissions <repository> rm <team>[,<team>...]";async function rm(client,argv,telemetry){let parsedArgs;try{parsedArgs=parseArguments(argv,getFlagsSpecification(permissionsRmSubcommand.options))}catch(err){return emitVcrArgParseError(client,err,USAGE),printError(err),2}let fr=validateVcrJsonOutput(client,parsedArgs.flags);if(typeof fr=="number")return fr;let repository=parsedArgs.args[0],teamRefs=parseTeamRefs(parsedArgs.args.slice(2)),project=parsedArgs.flags["--project"];if(telemetry.trackCliOptionProject(project),telemetry.trackCliOptionFormat(parsedArgs.flags["--format"]),teamRefs.length===0)return outputAgentError(client,{status:"error",reason:AGENT_REASON.MISSING_ARGUMENTS,message:`Missing team. Example: ${packageName} vcr permissions ${repository} rm team_1a2b3c4d`,next:[{command:buildCommandWithGlobalFlags(client.argv,`vcr permissions ${repository} ls`),when:"List teams with access to pick one to remove"}]},2),outputError(client,fr.jsonOutput,"MISSING_ARGUMENTS",`Usage: \`vercel ${USAGE}\``);let scope=await resolveVcrScope(client,{project,jsonOutput:fr.jsonOutput});if(typeof scope=="number")return scope;let path=repositoryPermissionsPath(scope,repository),removed=[],failed=[];output_manager_default.spinner(`Removing access to ${repository} for ${teamRefs.length===1?teamRefs[0]:`${teamRefs.length} teams`}...`);let sema=new import_async_sema.default(10),results;try{results=await Promise.all(teamRefs.map(async team=>{await sema.acquire();try{return await client.fetch(path,{method:"DELETE",body:teamRefBody(team)}),{ok:!0,team}}catch(err){if(!isAPIError(err))throw err;let message=err.serverMessage||`API error (${err.status}).`;return{ok:!1,team,failure:{team,code:err.code||"API_ERROR",message}}}finally{sema.release()}}))}finally{output_manager_default.stopSpinner()}for(let result of results)result.ok?(removed.push(result.team),fr.jsonOutput||output_manager_default.success(`Removed access to ${repository} for ${result.team}`)):(failed.push(result.failure),fr.jsonOutput||output_manager_default.error(`Failed to remove access to ${repository} for ${result.team}: ${result.failure.message}`));return failed.length>0&&outputAgentError(client,{status:"error",reason:AGENT_REASON.API_ERROR,message:`Failed to remove access to ${repository} for ${failed.map(f=>`${f.team} (${f.message})`).join(", ")}`},1),fr.jsonOutput&&client.stdout.write(`${JSON.stringify({removed,failed},null,2)}
|
|
8
8
|
`),failed.length>0?1:0}export{rm as default};
|
|
@@ -4,7 +4,7 @@ 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{fetchDeploymentBuildEnv,resolvePerDirectoryLinkRoot}from"../../chunks/chunk-2LGNEOKV.js";import{isIgnoredFile,singleFileConfig,singleFileProjectSettings,validatePaths,validateRootDirectory}from"../../chunks/chunk-YLTCVZOL.js";import{promptExperimentalServicesMigration}from"../../chunks/chunk-H7LHZZKU.js";import"../../chunks/chunk-MZ6DNAVL.js";import{DeployTelemetryClient,Now,UploadErrorMissingArchive,getBuildMachineResourceConfig,getProductionUrl,printDeploymentStatus,printPrebuiltFilePathMapIgnoreWarning}from"../../chunks/chunk-T76ITV65.js";import"../../chunks/chunk-3DMY3OJR.js";import"../../chunks/chunk-V6Y6UK6B.js";import{parseRepoUrl}from"../../chunks/chunk-BZYQ6RFV.js";import"../../chunks/chunk-EAUDC24V.js";import{pickOverrides}from"../../chunks/chunk-WF5YVWWY.js";import{require_dist as require_dist2,require_ignore}from"../../chunks/chunk-YAPHSZJ7.js";import"../../chunks/chunk-WJ4VNTE3.js";import{compileVercelConfig}from"../../chunks/chunk-VOB4W7DO.js";import"../../chunks/chunk-RRDNKB2X.js";import"../../chunks/chunk-MVGTMPMI.js";import"../../chunks/chunk-SACGQMVQ.js";import"../../chunks/chunk-U56NHYAH.js";import{require_ci_info}from"../../chunks/chunk-2EYYB6YN.js";import{require_semver}from"../../chunks/chunk-BPUANOGW.js";import"../../chunks/chunk-3E364MJE.js";import"../../chunks/chunk-7EJQLVWX.js";import"../../chunks/chunk-SY4EANZH.js";import"../../chunks/chunk-O4FDRZ22.js";import"../../chunks/chunk-T3GQAMBJ.js";import"../../chunks/chunk-P2O5DOYE.js";import{isGuidanceEnabled}from"../../chunks/chunk-A5R2HHNK.js";import{stamp_default}from"../../chunks/chunk-A2RZZQEP.js";import{getSubcommand}from"../../chunks/chunk-ETV3C2CV.js";import"../../chunks/chunk-J24BABG4.js";import{ensureLink,parseEnv}from"../../chunks/chunk-3AF3TTCR.js";import"../../chunks/chunk-QW2UP4W4.js";import"../../chunks/chunk-KTNRWBHM.js";import"../../chunks/chunk-PVASGBEF.js";import"../../chunks/chunk-MVCAUS4F.js";import{continueSubcommand,deployCommand,deprecatedArchiveSplitTgz,describeSubcommand,getCommandAliases,initSubcommand}from"../../chunks/chunk-U5C6XOLA.js";import"../../chunks/chunk-OH2RT2GN.js";import"../../chunks/chunk-UFXKCETS.js";import"../../chunks/chunk-RZGWCQP7.js";import"../../chunks/chunk-AG5QQNJ3.js";import"../../chunks/chunk-AU42HSQ3.js";import"../../chunks/chunk-L5FUUGYX.js";import"../../chunks/chunk-QC47UKDR.js";import"../../chunks/chunk-QJKJBD2M.js";import"../../chunks/chunk-MYCQIZU6.js";import"../../chunks/chunk-CNU4T7FO.js";import"../../chunks/chunk-LU5O3NH7.js";import"../../chunks/chunk-AMDHTZDV.js";import"../../chunks/chunk-2JBVMF2Y.js";import"../../chunks/chunk-JLXG2XWW.js";import"../../chunks/chunk-B4YYOSPY.js";import"../../chunks/chunk-UTW2FDSC.js";import"../../chunks/chunk-S7XZC23O.js";import"../../chunks/chunk-JALVF3C2.js";import"../../chunks/chunk-FBYA6LLM.js";import"../../chunks/chunk-HJ3NY4UA.js";import"../../chunks/chunk-2H243SJV.js";import"../../chunks/chunk-SCV7XEEO.js";import{param}from"../../chunks/chunk-3G3FQYMW.js";import{parseMeta}from"../../chunks/chunk-CZSOZKHX.js";import"../../chunks/chunk-Q7D7RGXM.js";import{parseTarget}from"../../chunks/chunk-XEQT373M.js";import{getDeployment}from"../../chunks/chunk-VIBUYIZ3.js";import{mapCertError}from"../../chunks/chunk-6LRVRPYO.js";import"../../chunks/chunk-GRTIWUV2.js";import{help}from"../../chunks/chunk-7D2HVBVP.js";import{table}from"../../chunks/chunk-773GOZIR.js";import{printError}from"../../chunks/chunk-V336CYEI.js";import{AGENT_REASON,AGENT_STATUS,buildCommandWithYes,outputAgentError,withGlobalFlags}from"../../chunks/chunk-5RR3435W.js";import"../../chunks/chunk-67GZ5REA.js";import"../../chunks/chunk-BS32OUOC.js";import{validateJsonOutput,wantsMachineReadableOutput}from"../../chunks/chunk-D4MW3RDW.js";import{highlight,readLocalConfig}from"../../chunks/chunk-DZ6GORJ7.js";import"../../chunks/chunk-HMS3UIQ2.js";import{require_ms}from"../../chunks/chunk-MXTC4ZAQ.js";import{TelemetryClient}from"../../chunks/chunk-HUJPGK7W.js";import"../../chunks/chunk-VKXEOL4K.js";import"../../chunks/chunk-YYPNUQDI.js";import"../../chunks/chunk-4SAVH3H7.js";import{require_types}from"../../chunks/chunk-ZS2WS4AM.js";import"../../chunks/chunk-AOWWC6WZ.js";import{getFetchDispatcher}from"../../chunks/chunk-MY4MONOH.js";import{isArgumentError,parseArguments}from"../../chunks/chunk-R4VVQRLX.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-MYMM34ZH.js";import"../../chunks/chunk-ROPQIBWJ.js";import"../../chunks/chunk-VKPZP4LC.js";import"../../chunks/chunk-PPCFQQSU.js";import{printAlignedLabel}from"../../chunks/chunk-N7Q2IESO.js";import"../../chunks/chunk-VSE5BAPP.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-AZULOP7M.js";import{getCommandName,packageName}from"../../chunks/chunk-JESNVRVR.js";import{cliErrorFromUnknown,emoji,link_default,output_manager_default,prependEmoji,recordCliError,require_build_utils}from"../../chunks/chunk-75IAMKGV.js";import{require_dist}from"../../chunks/chunk-RM3ZDRYE.js";import"../../chunks/chunk-OO572JUC.js";import"../../chunks/chunk-D3AHZ5LI.js";import"../../chunks/chunk-2GHZGOWT.js";import"../../chunks/chunk-YHPPP3SF.js";import{require_source}from"../../chunks/chunk-NB2WLB3J.js";import"../../chunks/chunk-ISWW3DKF.js";import"../../chunks/chunk-BRQUZ5NC.js";import{__toESM}from"../../chunks/chunk-BZENIQ7N.js";var import_build_utils9=__toESM(require_build_utils(),1),import_client=__toESM(require_dist2(),1),import_error_utils2=__toESM(require_dist(),1);var 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-WLYVWTBG.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(`
|
|
7
|
+
import{fetchDeploymentBuildEnv,resolvePerDirectoryLinkRoot}from"../../chunks/chunk-2LGNEOKV.js";import{isIgnoredFile,singleFileConfig,singleFileProjectSettings,validatePaths,validateRootDirectory}from"../../chunks/chunk-YLTCVZOL.js";import{promptExperimentalServicesMigration}from"../../chunks/chunk-H7LHZZKU.js";import"../../chunks/chunk-MZ6DNAVL.js";import{DeployTelemetryClient,Now,UploadErrorMissingArchive,getBuildMachineResourceConfig,getProductionUrl,printDeploymentStatus,printPrebuiltFilePathMapIgnoreWarning}from"../../chunks/chunk-T76ITV65.js";import{require_async_sema}from"../../chunks/chunk-NZ2TFADV.js";import"../../chunks/chunk-3DMY3OJR.js";import"../../chunks/chunk-V6Y6UK6B.js";import{parseRepoUrl}from"../../chunks/chunk-BZYQ6RFV.js";import"../../chunks/chunk-EAUDC24V.js";import{pickOverrides}from"../../chunks/chunk-WF5YVWWY.js";import{require_dist as require_dist2,require_ignore}from"../../chunks/chunk-YAPHSZJ7.js";import"../../chunks/chunk-WJ4VNTE3.js";import{compileVercelConfig}from"../../chunks/chunk-VOB4W7DO.js";import"../../chunks/chunk-RRDNKB2X.js";import"../../chunks/chunk-MVGTMPMI.js";import"../../chunks/chunk-SACGQMVQ.js";import"../../chunks/chunk-U56NHYAH.js";import{require_ci_info}from"../../chunks/chunk-2EYYB6YN.js";import{require_semver}from"../../chunks/chunk-BPUANOGW.js";import"../../chunks/chunk-3E364MJE.js";import"../../chunks/chunk-7EJQLVWX.js";import"../../chunks/chunk-SY4EANZH.js";import"../../chunks/chunk-O4FDRZ22.js";import"../../chunks/chunk-T3GQAMBJ.js";import"../../chunks/chunk-P2O5DOYE.js";import{isGuidanceEnabled}from"../../chunks/chunk-A5R2HHNK.js";import{stamp_default}from"../../chunks/chunk-A2RZZQEP.js";import{getSubcommand}from"../../chunks/chunk-ETV3C2CV.js";import"../../chunks/chunk-J24BABG4.js";import{ensureLink,parseEnv}from"../../chunks/chunk-3AF3TTCR.js";import"../../chunks/chunk-QW2UP4W4.js";import"../../chunks/chunk-KTNRWBHM.js";import"../../chunks/chunk-PVASGBEF.js";import"../../chunks/chunk-MVCAUS4F.js";import{continueSubcommand,deployCommand,deprecatedArchiveSplitTgz,describeSubcommand,getCommandAliases,initSubcommand}from"../../chunks/chunk-U5C6XOLA.js";import"../../chunks/chunk-OH2RT2GN.js";import"../../chunks/chunk-UFXKCETS.js";import"../../chunks/chunk-RZGWCQP7.js";import"../../chunks/chunk-AG5QQNJ3.js";import"../../chunks/chunk-AU42HSQ3.js";import"../../chunks/chunk-L5FUUGYX.js";import"../../chunks/chunk-QC47UKDR.js";import"../../chunks/chunk-QJKJBD2M.js";import"../../chunks/chunk-MYCQIZU6.js";import"../../chunks/chunk-CNU4T7FO.js";import"../../chunks/chunk-LU5O3NH7.js";import"../../chunks/chunk-AMDHTZDV.js";import"../../chunks/chunk-2JBVMF2Y.js";import"../../chunks/chunk-JLXG2XWW.js";import"../../chunks/chunk-B4YYOSPY.js";import"../../chunks/chunk-UTW2FDSC.js";import"../../chunks/chunk-S7XZC23O.js";import"../../chunks/chunk-JALVF3C2.js";import"../../chunks/chunk-FBYA6LLM.js";import"../../chunks/chunk-HJ3NY4UA.js";import"../../chunks/chunk-2H243SJV.js";import"../../chunks/chunk-SCV7XEEO.js";import{param}from"../../chunks/chunk-3G3FQYMW.js";import{parseMeta}from"../../chunks/chunk-CZSOZKHX.js";import"../../chunks/chunk-Q7D7RGXM.js";import{parseTarget}from"../../chunks/chunk-XEQT373M.js";import{getDeployment}from"../../chunks/chunk-VIBUYIZ3.js";import{mapCertError}from"../../chunks/chunk-6LRVRPYO.js";import"../../chunks/chunk-GRTIWUV2.js";import{help}from"../../chunks/chunk-7D2HVBVP.js";import{table}from"../../chunks/chunk-773GOZIR.js";import{printError}from"../../chunks/chunk-V336CYEI.js";import{AGENT_REASON,AGENT_STATUS,buildCommandWithYes,outputAgentError,withGlobalFlags}from"../../chunks/chunk-5RR3435W.js";import"../../chunks/chunk-67GZ5REA.js";import"../../chunks/chunk-BS32OUOC.js";import{validateJsonOutput,wantsMachineReadableOutput}from"../../chunks/chunk-D4MW3RDW.js";import{highlight,readLocalConfig}from"../../chunks/chunk-DZ6GORJ7.js";import"../../chunks/chunk-HMS3UIQ2.js";import{require_ms}from"../../chunks/chunk-MXTC4ZAQ.js";import{TelemetryClient}from"../../chunks/chunk-HUJPGK7W.js";import"../../chunks/chunk-VKXEOL4K.js";import"../../chunks/chunk-YYPNUQDI.js";import"../../chunks/chunk-4SAVH3H7.js";import{require_types}from"../../chunks/chunk-ZS2WS4AM.js";import"../../chunks/chunk-AOWWC6WZ.js";import{getFetchDispatcher}from"../../chunks/chunk-MY4MONOH.js";import{isArgumentError,parseArguments}from"../../chunks/chunk-R4VVQRLX.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-MYMM34ZH.js";import"../../chunks/chunk-ROPQIBWJ.js";import"../../chunks/chunk-VKPZP4LC.js";import"../../chunks/chunk-PPCFQQSU.js";import{printAlignedLabel}from"../../chunks/chunk-N7Q2IESO.js";import"../../chunks/chunk-VSE5BAPP.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-AZULOP7M.js";import{getCommandName,packageName}from"../../chunks/chunk-JESNVRVR.js";import{cliErrorFromUnknown,emoji,link_default,output_manager_default,prependEmoji,recordCliError,require_build_utils}from"../../chunks/chunk-75IAMKGV.js";import{require_dist}from"../../chunks/chunk-RM3ZDRYE.js";import"../../chunks/chunk-OO572JUC.js";import"../../chunks/chunk-D3AHZ5LI.js";import"../../chunks/chunk-2GHZGOWT.js";import"../../chunks/chunk-YHPPP3SF.js";import{require_source}from"../../chunks/chunk-NB2WLB3J.js";import"../../chunks/chunk-ISWW3DKF.js";import"../../chunks/chunk-BRQUZ5NC.js";import{__toESM}from"../../chunks/chunk-BZENIQ7N.js";var import_build_utils9=__toESM(require_build_utils(),1),import_client=__toESM(require_dist2(),1),import_error_utils2=__toESM(require_dist(),1);var 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-WLYVWTBG.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
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
9
|
USER_BOOTSTRAP="/var/task/${USER_BOOTSTRAP_PATH}"
|
|
10
10
|
|
|
@@ -16,7 +16,7 @@ if [ -n "\${AWS_LAMBDA_EXEC_WRAPPER:-}" ]; then
|
|
|
16
16
|
fi
|
|
17
17
|
|
|
18
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})}
|
|
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_async_sema=__toESM(require_async_sema(),1),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)}))),sema=new import_async_sema.default(32),limit=async fn=>{await sema.acquire();try{return await fn()}finally{sema.release()}},checkSource=async path2=>{let resolved=await limit(()=>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},checked=new Map,validateSource=path2=>{let result=checked.get(path2);return result||(result=checkSource(path2),checked.set(path2,result)),result},configs=[],visited=new Set;async function walk(dir,ancestors){visited.add(dir);let next=new Set(ancestors).add(dir),entries=await Promise.all((await limit(()=>readdir3(dir))).map(async name=>{let path2=join5(dir,name),resolved=await limit(()=>realpath3(path2));return(!contains(output,resolved)||next.has(resolved))&&invalidSource(),{path:path2,resolved,stats:await limit(()=>stat3(resolved))}}));for(let{path:path2,resolved,stats}of entries)stats.isDirectory()?visited.has(resolved)||await walk(resolved,next):basename(path2)===".vc-config.json"&&configs.push(resolved)}return await walk(output,new Set),await Promise.all(configs.map(async path2=>{let config=JSON.parse(await limit(()=>readFile2(path2,"utf8")));await Promise.all(Object.values(config.filePathMap??{}).map(source=>(typeof source!="string"&&invalidSource(),validateSource(join5(options.repoRootPath,source)))))})),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
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
21
|
`);else{client.stdout.write(`${descriptor}
|
|
22
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:
|
package/dist/commands-bulk.js
CHANGED
|
@@ -4,7 +4,7 @@ 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{require_async_sema}from"./chunks/chunk-NZ2TFADV.js";import{handleTracingApiError,invalidArguments,resolveConfigScope,resolveScope}from"./chunks/chunk-64U5W6GU.js";import{ALL_ACTION_CHOICES,MAX_CONDITIONS,MAX_DESCRIPTION_LENGTH,MAX_NAME_LENGTH,REDIRECT_STATUS_CODES,VALID_SYNTAXES,collectActionDetails,collectHeadersAndTransforms,collectInteractiveConditions,convertRouteToCurrentRoute,extractTransformFlags,generateRoute,generatedRouteToAddInput,parseConditions,populateRouteEnv,printGeneratedRoutePreview,runInteractiveEditLoop,stripQuotes,validateActionFlags}from"./chunks/chunk-KNBEUC4P.js";import{getRouteVersions}from"./chunks/chunk-BVH2AEFE.js";import{TRANSFORM_TYPE_LABELS,findVersionById,formatCondition,formatTransform,getRouteTypeLabel,getRoutes,getSrcSyntaxLabel,isTargetTransform,offerAutoPromote,parsePosition,parseSubcommandArgs,parseSubcommandArguments,requireProjectContext,validateRequiredArguments,withGlobalFlags as withGlobalFlags2}from"./chunks/chunk-MA4K5IWW.js";import{FILTER_DEPRECATION_WARNING,computeGranularity,formatText,generateSparkline,toGranularityMsFromDuration,usesODataSyntax}from"./chunks/chunk-MEJTHWZB.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-VNSQCAVT.js";import{RoutesAddTelemetryClient,RoutesTelemetryClient}from"./chunks/chunk-T6SFC3IH.js";import{canPrompt}from"./chunks/chunk-XD2LZRBS.js";import"./chunks/chunk-IVSSTHB6.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-HRR57QNP.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import{handleValidationError,normalizeRepeatableStringFilters,outputError,parseTimeFlag,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-WH3SHWVK.js";import{collectBuildLogs,displayBuildLogs,displayRuntimeLogs,require_split2}from"./chunks/chunk-25S4PQNK.js";import{require_format}from"./chunks/chunk-PFD7LETF.js";import{addDomain,createCertForCns,extractDomain,getDomainByName,isWildcardAlias,require_cjs,setupDomain}from"./chunks/chunk-4A5SGLIH.js";import{collectContactInformation,getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain}from"./chunks/chunk-W6LNIG5O.js";import{api,tryOpenApiFallback}from"./chunks/chunk-V2BKSCXI.js";import"./chunks/chunk-GHAY4PSD.js";import{login}from"./chunks/chunk-X3JK3SQ2.js";import{main}from"./chunks/chunk-AUZEOUZU.js";import{LOCAL_SCHEDULES_SESSION_HEADER,isLocalSchedulesOrigin,readLocalSchedulesSessions}from"./chunks/chunk-SF4E3AQ3.js";import{selectOrg}from"./chunks/chunk-NZBUIMZG.js";import{createProject}from"./chunks/chunk-QHJLRTVY.js";import{require_fast_deep_equal}from"./chunks/chunk-MCRKBVZA.js";import{CURL_INSTALL_COMMAND,NATIVE_UPDATE_SELECT_PRODUCTION_ENV,NATIVE_UPDATE_VERSION_ENV,box,cacheNativeUpdateDiscoveryAttempt,cacheNativeUpdateVersion,did_you_mean_default,executeUpgrade,handleCommandTypo,installAndActivatePrBinary,installAndActivateProductionVersion,isAutoUpdateEnabled,isCurlInstall,isNativeAutoUpdateEnabled,isNativeUpdateChild,listAvailableVersions,listNativeTrackSlots,markNativeUpdateStaged,parsePrTarget,pinPackageVersion,readActivePointer,readNativeInstallState,require_tar_fs,resolveLatestNativeVersion,restoreNativeUpdateAfterDiscoveryFailure,setAutoUpdate,setMinReleaseAgeBypass,spawnNativeUpdateChild,stageProductionUpdate,withDirectoryLock}from"./chunks/chunk-IYL5CKZ4.js";import{OpenApiCache,resolveOpenApiTagForProjectsCli,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-B3K6GM2W.js";import{getUpdateCommand,getUpdateCommandInfo,isGlobal}from"./chunks/chunk-JUSQYKFF.js";import{readJSONFile}from"./chunks/chunk-BRUTDRAQ.js";import{Now,getBuildMachineResourceConfig,isDeploying,printDeploymentStatus}from"./chunks/chunk-T76ITV65.js";import"./chunks/chunk-3DMY3OJR.js";import{dump,load}from"./chunks/chunk-V6Y6UK6B.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-BZYQ6RFV.js";import"./chunks/chunk-EAUDC24V.js";import"./chunks/chunk-WF5YVWWY.js";import{require_dist as require_dist3}from"./chunks/chunk-YAPHSZJ7.js";import{require_dist2}from"./chunks/chunk-WJ4VNTE3.js";import"./chunks/chunk-VOB4W7DO.js";import"./chunks/chunk-RRDNKB2X.js";import"./chunks/chunk-MVGTMPMI.js";import"./chunks/chunk-SACGQMVQ.js";import"./chunks/chunk-U56NHYAH.js";import"./chunks/chunk-2EYYB6YN.js";import{require_semver}from"./chunks/chunk-BPUANOGW.js";import"./chunks/chunk-3E364MJE.js";import"./chunks/chunk-7EJQLVWX.js";import{responseError}from"./chunks/chunk-SY4EANZH.js";import"./chunks/chunk-O4FDRZ22.js";import{sleep}from"./chunks/chunk-T3GQAMBJ.js";import"./chunks/chunk-P2O5DOYE.js";import{CHECKBOX_INSTRUCTIONS,getCustomEnvironments,pickCustomEnvironment,readStandardInput,require_dist as require_dist4}from"./chunks/chunk-6JGC4YDH.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{ellipsis}from"./chunks/chunk-F4KY2TOK.js";import{formatTable,strlen}from"./chunks/chunk-LSQREJXO.js";import{ellipsizeMiddle,truncateEnd}from"./chunks/chunk-ID663OJ7.js";import{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODEX_BASE_URL,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,MANAGED_BLOCK_END,MANAGED_BLOCK_START,autoInstallVercelPlugin,backupFile,claudeCode,ensureMode,isFile,isSymlink,maskSecret,mergeJson,mergeJsonc,mergeToml,parseJsonObjectOrNull,pathExists,publishNoClobber,readFileOrNull,resolveGatewayBaseUrl,setupVercelPlugin,upsertManagedBlock,writeConfigFile}from"./chunks/chunk-N7L3XLWC.js";import{require_execa}from"./chunks/chunk-GSOPJJO5.js";import{createEnvObject,envPullCommandLogic,pull}from"./chunks/chunk-BWY67LI6.js";import{resolveProjectContext}from"./chunks/chunk-IAUAFUO2.js";import"./chunks/chunk-25565AGS.js";import{isGuidanceEnabled}from"./chunks/chunk-A5R2HHNK.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{getSubcommand as getSubcommand7}from"./chunks/chunk-ETV3C2CV.js";import{init_main,parse}from"./chunks/chunk-J24BABG4.js";import{ensureLink}from"./chunks/chunk-3AF3TTCR.js";import"./chunks/chunk-QW2UP4W4.js";import{performDeviceCodeFlow,saveDeviceCodeTokens}from"./chunks/chunk-KTNRWBHM.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import{require_frameworks}from"./chunks/chunk-MVCAUS4F.js";import{CI_LOG_LEVELS,CREDIT_TYPE_LABELS,FLAG_ATTRIBUTE_TYPES,FLAG_CONDITION_LIST_COMPARATORS,FLAG_CONDITION_RHS_OPTIONAL_COMPARATORS,FLAG_EVALUATIONS_DIMENSIONS,FLAG_EVALUATIONS_DIMENSION_NAMES,FLAG_EVALUATIONS_GRANULARITIES,KMS_ALGORITHMS,PROJECT_GRANT_POLICY_KIND,PROJECT_MEMBER_ROLES,STORAGE_PROVIDERS,SUPPORTED_ADDON_NAMES,SUPPORTED_CREDIT_TYPES,abortSubcommand,acceptTermsSubcommand,accessGroupsSubcommand,accessSummarySubcommand,activateKeySubcommand,addGrantSubcommand,addKeySubcommand,addSubcommand,addSubcommand10 as addSubcommand9,addSubcommand11,addSubcommand12,addSubcommand2,addSubcommand3,addSubcommand4,addSubcommand5,addSubcommand6,addSubcommand7,addSubcommand9 as addSubcommand8,addToGroupSubcommand,addonSubcommand,agentCommand,agentRunsCommand,aiGatewayCommand,alertsInspectSubcommand,alertsListSubcommand,alertsSubcommand,aliasCommand,analyzeSubcommand,apiKeysSubcommand,approveSubcommand,archiveSubcommand,attachSubcommand,attackModeDisableSubcommand,attackModeEnableSubcommand,attackModeSubcommand,autoRenewSubcommand,autoupdateSubcommand,backupsSubcommand,balanceSubcommand,bisectCommand,blobCommand,botManagementSubcommand,budgetCommand,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buildersCommand,buyCommand,buySubcommand,cacheCommand,categoriesSubcommand,certsCommand,changelogCommand,checkSubcommand,checkSubcommand2,checkSubcommand3,checksAddFlags,checksRemoveFlags,checksSubcommand,ciCommand,claimSubcommand,codingAgentsSubcommand,completeSubcommand,configureSubcommand,connectSubcommand,connectSubcommand2,connectSubcommand3,connectionsAddSubcommand,connectionsListSubcommand,connectionsRemoveSubcommand,connectionsSubcommand,connexCommand,contactsAddSubcommand,contactsSubcommand,contractCommand,copySubcommand,createGroupSubcommand,createStoreSubcommand,createSubcommand,createSubcommand2,createSubcommand3,createSubcommand4,createSubcommand5,createSubcommand6,createSubcommand7,createSubcommand8 as createSubcommand9,createThresholdSubcommand,creditsSubcommand,cronsCommand,curlCommand,dangerouslyDeleteImmutableStaticAssetSubcommand,dangerouslyDeleteSubcommand,decideSubcommand,delSubcommand,deleteGroupSubcommand,deleteStoreSubcommand,deleteSubcommand as deleteSubcommand2,deleteSubcommand2 as deleteSubcommand4,deleteSubcommand3 as deleteSubcommand5,deployHooksCommand,detachSubcommand,diagnoseSubcommand,diffSubcommand,disableSubcommand,disableSubcommand2,disableSubcommand3 as disableSubcommand4,disableSubcommand4 as disableSubcommand5,discardSubcommand,disconnectSubcommand,disconnectSubcommand2,disconnectSubcommand3,discoverSubcommand,dnsCommand,domainSubcommand,domainsCommand,emptyStoreSubcommand,enableSubcommand,enableSubcommand2,enableSubcommand3 as enableSubcommand4,enableSubcommand4 as enableSubcommand5,entitiesCreateSubcommand,entitiesListSubcommand,entitiesRemoveSubcommand,entitiesSubcommand,entitiesUpdateSubcommand,evaluationsSubcommand,executionsListSubcommand,executionsSubcommand,experimentsCommand,fetchSubcommand,findForeignCreateFlags,findOverlappingConnections,firewallCommand,flagsCommand,flushSubcommand,formatFlagAttributeTypeList,formatFlagConditionComparator,formatFlagConditionComparatorList,getCommandAliases,getConnections,getFlagAttributeType,getStorageProvider,getStorageStore,getStorageStores,getStoreInfoSubcommand,getSubcommand,getSubcommand2,getSubcommand3,getSubcommand4 as getSubcommand5,getSubcommand5 as getSubcommand6,gitCommand,globalConfigCommand,grepSubcommand,guidanceCommand,guideSubcommand,httpstatCommand,importKeySubcommand,importSubcommand,importSubcommand2,initCommand,inspectCommand,inspectGroupSubcommand,inspectSubcommand,inspectSubcommand10 as inspectSubcommand12,inspectSubcommand11 as inspectSubcommand15,inspectSubcommand2,inspectSubcommand3 as inspectSubcommand4,inspectSubcommand4 as inspectSubcommand6,inspectSubcommand5 as inspectSubcommand7,inspectSubcommand6 as inspectSubcommand8,inspectSubcommand7 as inspectSubcommand9,inspectSubcommand8 as inspectSubcommand10,inspectSubcommand9 as inspectSubcommand11,installCommand,installationsSubcommand,installedSubcommand,integrationCommand,integrationResourceCommand,invalidateSubcommand,inviteSubcommand,invokeSubcommand,ipBlocksBlockSubcommand,ipBlocksListSubcommand,ipBlocksSubcommand,ipBlocksUnblockSubcommand,isBucketingAttribute,isCustomEnvironmentAddonAlias,isFlagAttributeType,isFlagEvaluationsDimension,isFlagEvaluationsGranularity,isProjectGrant,isTimestampAttributeType,issueSubcommand,issuerJwksUrl,issuerUrl,itemsSubcommand,kmsCommand,labelsListSubcommand,labelsSubcommand,leaderboardAppsSubcommand,leaderboardLabsSubcommand,leaderboardModelsSubcommand,leaderboardProvidersSubcommand,leaderboardSubcommand,listStorageProviderTypes,listStoresSubcommand,listSubcommand,listSubcommand10 as listSubcommand12,listSubcommand11 as listSubcommand13,listSubcommand12 as listSubcommand14,listSubcommand13 as listSubcommand15,listSubcommand14 as listSubcommand16,listSubcommand15 as listSubcommand17,listSubcommand16 as listSubcommand18,listSubcommand17 as listSubcommand19,listSubcommand18 as listSubcommand21,listSubcommand19 as listSubcommand22,listSubcommand2,listSubcommand20 as listSubcommand23,listSubcommand21 as listSubcommand24,listSubcommand22 as listSubcommand25,listSubcommand23 as listSubcommand27,listSubcommand24 as listSubcommand28,listSubcommand25 as listSubcommand29,listSubcommand26 as listSubcommand30,listSubcommand3 as listSubcommand4,listSubcommand4 as listSubcommand5,listSubcommand5 as listSubcommand6,listSubcommand6 as listSubcommand8,listSubcommand7 as listSubcommand9,listSubcommand8 as listSubcommand10,listSubcommand9 as listSubcommand11,listVersionsSubcommand,loadStoreDetails,logoutCommand,logsSubcommand,mcpCommand,membersAddFlags,membersInviteSubcommand,membersRemoveFlags,membersRemoveSubcommand,membersSubcommand,membersSubcommand2,microfrontendsCommand,modelsEndpointsSubcommand,modelsListSubcommand,modelsSubcommand,moveSubcommand,observabilitySubcommand,openCommand,openSubcommand as openSubcommand2,openSubcommand2 as openSubcommand3,openSubcommand3 as openSubcommand4,openSubcommand4 as openSubcommand5,overrideSubcommand,overviewSubcommand,pauseSubcommand,persistentActionsInspectSubcommand,persistentActionsListSubcommand,persistentActionsSubcommand,preinstallSubcommand,prepareSubcommand,presignSubcommand,priceSubcommand,pricingCommand,prioritySubcommand,proSubcommand,projectCommand,projectsSubcommand,promoteCommand,promoteSubcommand,protectionSubcommand,publishSubcommand,pullSubcommand,purgeSubcommand,putImageSubcommand,putSubcommand,redeployCommand,redirectsCommand,removeCommand,removeFromGroupSubcommand,removeGrantSubcommand,removeSubcommand,removeSubcommand10,removeSubcommand11,removeSubcommand12,removeSubcommand13,removeSubcommand14,removeSubcommand15,removeSubcommand16 as removeSubcommand17,removeSubcommand17 as removeSubcommand18,removeSubcommand2,removeSubcommand3,removeSubcommand4,removeSubcommand5,removeSubcommand6,removeSubcommand7,removeSubcommand8,removeSubcommand9,renameSubcommand,renewSubcommand,requestSubcommand,rerunSubcommand,reseedEnrollmentSubcommand,resolveProjectConnection,resolveStore,resourceSubcommand,restartAnalysisSubcommand,restoreSubcommand,resumeSubcommand,returnToDraftSubcommand,revokeKeySubcommand,revokeTokensSubcommand,rollbackCommand,rollingReleaseCommand,rolloutSubcommand,rulesAddSubcommand,rulesAddSubcommand2 as rulesAddSubcommand3,rulesAddSubcommand3 as rulesAddSubcommand4,rulesDisableSubcommand,rulesEditSubcommand,rulesEditSubcommand2,rulesEnableSubcommand,rulesInspectSubcommand as rulesInspectSubcommand2,rulesListSubcommand,rulesListSubcommand2,rulesListSubcommand3,rulesMoveSubcommand,rulesRemoveSubcommand,rulesRemoveSubcommand2,rulesRemoveSubcommand3,rulesReorderSubcommand,rulesSubcommand,rulesSubcommand2,rulesSubcommand3,rulesUpdateSubcommand as rulesUpdateSubcommand2,runSubcommand,schedulesCommand,sdkKeysAddSubcommand,sdkKeysListSubcommand,sdkKeysRemoveSubcommand,sdkKeysSubcommand,searchSubcommand,searchSubcommand2,securityCommand,segmentsCreateSubcommand,segmentsInspectSubcommand,segmentsListSubcommand,segmentsRemoveSubcommand,segmentsSubcommand,segmentsUpdateSubcommand,setRampSubcommand,setSubcommand,setSubcommand2,setSubcommand3,setupCommand,setupSubcommand,signedTokenSubcommand,signupCommand,skillsCommand,speedInsightsSubcommand,splitSubcommand,ssoSubcommand,staleSubcommand,startSubcommand,startSubcommand2,statusSubcommand,statusSubcommand2,statusSubcommand3,statusSubcommand4,statusSubcommand5,statusSubcommand6,storageCommand,storeMatchesType,storeProductLabel,storeSupportsOidc,storeTypeName,switchSubcommand,systemBypassAddSubcommand,systemBypassListSubcommand,systemBypassRemoveSubcommand,systemBypassSubcommand,systemMitigationsPauseSubcommand,systemMitigationsResumeSubcommand,systemMitigationsSubcommand,targetCommand,targetsAddSubcommand,targetsListSubcommand,targetsRemoveSubcommand,targetsSubcommand,teamsCommand,telemetryCommand,tokenSubcommand,tokenSubcommand2,tokensCommand,tokensSubcommand,traceSubcommand,trafficInspectSubcommand,trafficListSubcommand,trafficSubcommand,transferInSubcommand,unarchiveSubcommand,updateGrantSubcommand,updateSubcommand,updateSubcommand10,updateSubcommand11,updateSubcommand2,updateSubcommand3,updateSubcommand4,updateSubcommand5,updateSubcommand6,updateSubcommand7,updateSubcommand8,updateSubcommand9,upgradeCommand,uploadSubcommand,usageCommand,useSubcommand,useTargetingSubcommand,verifySubcommand,versionCommand,versionsDiffSubcommand,versionsListSubcommand,versionsSubcommand,virtualModelsCreateSubcommand,virtualModelsEditSubcommand,virtualModelsInspectSubcommand,virtualModelsListSubcommand,virtualModelsRemoveSubcommand,virtualModelsRestoreSubcommand,virtualModelsSubcommand,webAnalyticsSubcommand,webhooksCommand,whoamiCommand}from"./chunks/chunk-U5C6XOLA.js";import{createSubcommand as createSubcommand8,getSubcommand as getSubcommand4,searchSubcommand as searchSubcommand3,tracesCommand}from"./chunks/chunk-OH2RT2GN.js";import{tracesConfigCommand}from"./chunks/chunk-UFXKCETS.js";import{addSubcommand as addSubcommand13,buildSubcommand,configSubcommand,inspectSubcommand as inspectSubcommand14,listSubcommand as listSubcommand26,loginSubcommand,pushSubcommand,removeSubcommand as removeSubcommand16,vcrCommand}from"./chunks/chunk-RZGWCQP7.js";import{imageAggregateCommand,imageInspectSubcommand,imageLsSubcommand,imageRmSubcommand}from"./chunks/chunk-AG5QQNJ3.js";import{PERMISSIONS_ACTIONS,permissionsAddSubcommand,permissionsAggregateCommand,permissionsClearSubcommand,permissionsLsSubcommand,permissionsRmSubcommand}from"./chunks/chunk-AU42HSQ3.js";import{tagsAggregateCommand,tagsInspectSubcommand,tagsLsSubcommand}from"./chunks/chunk-L5FUUGYX.js";import{addSubcommand as addSubcommand10,deleteSubcommand as deleteSubcommand3,disableSubcommand as disableSubcommand3,discardSubcommand as discardSubcommand2,editSubcommand as editSubcommand2,enableSubcommand as enableSubcommand3,exportSubcommand,inspectSubcommand as inspectSubcommand13,listSubcommand as listSubcommand20,listVersionsSubcommand as listVersionsSubcommand2,publishSubcommand as publishSubcommand2,reorderSubcommand,restoreSubcommand as restoreSubcommand2,routesCommand}from"./chunks/chunk-QC47UKDR.js";import{metricsCommand,schemaSubcommand}from"./chunks/chunk-QJKJBD2M.js";import{commentsCommand,deleteSubcommand,editSubcommand,inspectSubcommand as inspectSubcommand5,listSubcommand as listSubcommand7,openSubcommand,reopenSubcommand,replySubcommand,resolveSubcommand}from"./chunks/chunk-MYCQIZU6.js";import{alertsCommand,inspectSubcommand as inspectSubcommand3,listSubcommand as listSubcommand3}from"./chunks/chunk-CNU4T7FO.js";import{rulesAddSubcommand as rulesAddSubcommand2,rulesAggregateCommand,rulesInspectSubcommand,rulesLsSubcommand,rulesNotificationsAggregateCommand,rulesNotificationsLinkSubcommand,rulesNotificationsLsSubcommand,rulesNotificationsUnlinkSubcommand,rulesNotificationsUpdateSubcommand,rulesRmSubcommand,rulesSchemaSubcommand,rulesUpdateSubcommand}from"./chunks/chunk-LU5O3NH7.js";import{logsCommand}from"./chunks/chunk-AMDHTZDV.js";import{activityCommand,typesSubcommand}from"./chunks/chunk-2JBVMF2Y.js";import"./chunks/chunk-JLXG2XWW.js";import"./chunks/chunk-B4YYOSPY.js";import"./chunks/chunk-UTW2FDSC.js";import{DEV_RESOURCE_TOKEN}from"./chunks/chunk-S7XZC23O.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-FBYA6LLM.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-HJ3NY4UA.js";import{getTeams}from"./chunks/chunk-2H243SJV.js";import"./chunks/chunk-SCV7XEEO.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{getPaginationOpts,isValidName}from"./chunks/chunk-ILFUNCJZ.js";import{getCommandFlags}from"./chunks/chunk-OUHPDA7Q.js";import{formatEnvironment}from"./chunks/chunk-JSBEAHKA.js";import{validateLsArgs}from"./chunks/chunk-EO7GUARB.js";import{STANDARD_ENVIRONMENTS,formatProject}from"./chunks/chunk-3EYOQC4R.js";import{elapsed}from"./chunks/chunk-Q7D7RGXM.js";import"./chunks/chunk-XEQT373M.js";import{getDeployment,toHost}from"./chunks/chunk-VIBUYIZ3.js";import{mapCertError}from"./chunks/chunk-6LRVRPYO.js";import"./chunks/chunk-GRTIWUV2.js";import{buildCommandDocumentationLines,help}from"./chunks/chunk-7D2HVBVP.js";import{table}from"./chunks/chunk-773GOZIR.js";import{printError}from"./chunks/chunk-V336CYEI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,BUY_PRO_COMMAND,PRIORITY_PROJECT_ENABLE_COMMAND,argvHasNonInteractive,buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,buyProFix,clientObservabilityPlanRecovery,exitWithNonInteractiveError,getExitCodeForReason,getGlobalFlagsFromArgv,isProOrEnterprisePlan,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,targetRecovery,withGlobalFlags,writeAgentError}from"./chunks/chunk-5RR3435W.js";import"./chunks/chunk-67GZ5REA.js";import{require_strip_ansi}from"./chunks/chunk-BS32OUOC.js";import{validateJsonOutput,wantsMachineReadableOutput}from"./chunks/chunk-D4MW3RDW.js";import{detectExplicitScope,getContextName,getScope,introspectToken,isAppPrincipalEnabled,persistAuthConfig,readLocalConfig,resolveAppFromToken,writeToConfigFile}from"./chunks/chunk-DZ6GORJ7.js";import{getGlobalPathConfig}from"./chunks/chunk-HMS3UIQ2.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import{TelemetryClient}from"./chunks/chunk-HUJPGK7W.js";import"./chunks/chunk-VKXEOL4K.js";import{getInstallRoot,isNativeBinaryInstall}from"./chunks/chunk-YYPNUQDI.js";import"./chunks/chunk-4SAVH3H7.js";import"./chunks/chunk-ZS2WS4AM.js";import{processRevocationResponse,revocationRequest,ua_default}from"./chunks/chunk-AOWWC6WZ.js";import{directFetch,fetch as fetch2,getFetchDispatcher,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import{isArgumentError,parseArguments,require_arg}from"./chunks/chunk-R4VVQRLX.js";import{quoteArg}from"./chunks/chunk-BKV35LVB.js";import{GLOBAL_CLI_FLAG_NAMES,arg_common_default,formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs,getSameSubcommandSuggestionFlags,globalCommandOptions,jsonOption,normalizeFlagName,stripSensitiveAuthArgs}from"./chunks/chunk-5IPBCD7K.js";import{VERCEL_CONFIG_EXTENSIONS,execFileAsync,getGitConfigPath,getGitExecutable,getLinkFromDir,getLinkedProject,getProjectByNameOrId,getProjectLink,getVercelDirectory,parseGitConfig,pluckRemoteUrls,require_lib,require_pluralize,resolveProjectCwd}from"./chunks/chunk-MYMM34ZH.js";import"./chunks/chunk-ROPQIBWJ.js";import"./chunks/chunk-VKPZP4LC.js";import{humanizePath}from"./chunks/chunk-PPCFQQSU.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-N7Q2IESO.js";import{getUser}from"./chunks/chunk-VSE5BAPP.js";import{getTeamByIdOrSlug,teamCache}from"./chunks/chunk-VOZEB6PD.js";import{APIError,AliasInUse,CertConfigurationError,CertError,CertMissing,CertNotFound,CertOrderNotFound,CertsPermissionDenied,DNSConflictingRecord,DNSInvalidPort,DNSInvalidType,DNSPermissionDenied,DeploymentFailedAliasImpossible,DeploymentNotFound,DeploymentNotReady,DeploymentPermissionDenied,DomainAlreadyExists,DomainExternal,DomainMoveConflict,DomainNotAvailable,DomainNotFound,DomainNotVerified,DomainPaymentError,DomainPermissionDenied,DomainPurchasePending,DomainRemovalConflict,InvalidAlias,InvalidAliasInConfig,InvalidDeploymentId,InvalidDomain,InvalidMoveDestination,InvalidToken,LinkRequiredError,NoAliasInConfig,NowError,ProjectNotFound,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnexpectedDomainTransferError,UnsupportedTLD,UserAborted,code,isAPIError,require_bytes}from"./chunks/chunk-AZULOP7M.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib as require_lib2}from"./chunks/chunk-JESNVRVR.js";import{chars_default,emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-75IAMKGV.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import{pkg_default}from"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-D3AHZ5LI.js";import"./chunks/chunk-2GHZGOWT.js";import"./chunks/chunk-YHPPP3SF.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BRQUZ5NC.js";import{__require,__toESM}from"./chunks/chunk-BZENIQ7N.js";var AgentTelemetryClient=class extends TelemetryClient{trackCliArgumentInit(value){value&&this.trackCliArgument({arg:"init",value})}trackCliFlagYes(value){value&&this.trackCliFlag("yes")}};var import_chalk=__toESM(require_source(),1);import{readFile,writeFile}from"node:fs/promises";import{join}from"node:path";import{KNOWN_AGENTS}from"@vercel/detect-agent";var BEST_PRACTICES_START="<!-- VERCEL BEST PRACTICES START -->",BEST_PRACTICES_END="<!-- VERCEL BEST PRACTICES END -->",BEST_PRACTICES_BODY=`## Best practices for developing on Vercel
|
|
7
|
+
import{handleTracingApiError,invalidArguments,resolveConfigScope,resolveScope}from"./chunks/chunk-64U5W6GU.js";import{ALL_ACTION_CHOICES,MAX_CONDITIONS,MAX_DESCRIPTION_LENGTH,MAX_NAME_LENGTH,REDIRECT_STATUS_CODES,VALID_SYNTAXES,collectActionDetails,collectHeadersAndTransforms,collectInteractiveConditions,convertRouteToCurrentRoute,extractTransformFlags,generateRoute,generatedRouteToAddInput,parseConditions,populateRouteEnv,printGeneratedRoutePreview,runInteractiveEditLoop,stripQuotes,validateActionFlags}from"./chunks/chunk-KNBEUC4P.js";import{getRouteVersions}from"./chunks/chunk-BVH2AEFE.js";import{TRANSFORM_TYPE_LABELS,findVersionById,formatCondition,formatTransform,getRouteTypeLabel,getRoutes,getSrcSyntaxLabel,isTargetTransform,offerAutoPromote,parsePosition,parseSubcommandArgs,parseSubcommandArguments,requireProjectContext,validateRequiredArguments,withGlobalFlags as withGlobalFlags2}from"./chunks/chunk-MA4K5IWW.js";import{FILTER_DEPRECATION_WARNING,computeGranularity,formatText,generateSparkline,toGranularityMsFromDuration,usesODataSyntax}from"./chunks/chunk-MEJTHWZB.js";import{OBSERVABILITY_METRICS_PATH,getRollupColumnName,handleApiError}from"./chunks/chunk-VNSQCAVT.js";import{RoutesAddTelemetryClient,RoutesTelemetryClient}from"./chunks/chunk-T6SFC3IH.js";import{canPrompt}from"./chunks/chunk-XD2LZRBS.js";import"./chunks/chunk-IVSSTHB6.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-HRR57QNP.js";import{indent_default}from"./chunks/chunk-GZNDA6SV.js";import{handleValidationError,normalizeRepeatableStringFilters,outputError,parseTimeFlag,resolveTimeRange,validateIntegerRangeWithDefault,validateTimeBound,validateTimeOrder}from"./chunks/chunk-WH3SHWVK.js";import{collectBuildLogs,displayBuildLogs,displayRuntimeLogs,require_split2}from"./chunks/chunk-25S4PQNK.js";import{require_format}from"./chunks/chunk-PFD7LETF.js";import{addDomain,createCertForCns,extractDomain,getDomainByName,isWildcardAlias,require_cjs,setupDomain}from"./chunks/chunk-4A5SGLIH.js";import{collectContactInformation,getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain}from"./chunks/chunk-W6LNIG5O.js";import{api,tryOpenApiFallback}from"./chunks/chunk-V2BKSCXI.js";import"./chunks/chunk-GHAY4PSD.js";import{login}from"./chunks/chunk-X3JK3SQ2.js";import{main}from"./chunks/chunk-AUZEOUZU.js";import{LOCAL_SCHEDULES_SESSION_HEADER,isLocalSchedulesOrigin,readLocalSchedulesSessions}from"./chunks/chunk-SF4E3AQ3.js";import{selectOrg}from"./chunks/chunk-NZBUIMZG.js";import{createProject}from"./chunks/chunk-QHJLRTVY.js";import{require_fast_deep_equal}from"./chunks/chunk-MCRKBVZA.js";import{CURL_INSTALL_COMMAND,NATIVE_UPDATE_SELECT_PRODUCTION_ENV,NATIVE_UPDATE_VERSION_ENV,box,cacheNativeUpdateDiscoveryAttempt,cacheNativeUpdateVersion,did_you_mean_default,executeUpgrade,handleCommandTypo,installAndActivatePrBinary,installAndActivateProductionVersion,isAutoUpdateEnabled,isCurlInstall,isNativeAutoUpdateEnabled,isNativeUpdateChild,listAvailableVersions,listNativeTrackSlots,markNativeUpdateStaged,parsePrTarget,pinPackageVersion,readActivePointer,readNativeInstallState,require_tar_fs,resolveLatestNativeVersion,restoreNativeUpdateAfterDiscoveryFailure,setAutoUpdate,setMinReleaseAgeBypass,spawnNativeUpdateChild,stageProductionUpdate,withDirectoryLock}from"./chunks/chunk-IYL5CKZ4.js";import{OpenApiCache,resolveOpenApiTagForProjectsCli,resolveOpenApiTagForTeamsCli}from"./chunks/chunk-B3K6GM2W.js";import{getUpdateCommand,getUpdateCommandInfo,isGlobal}from"./chunks/chunk-JUSQYKFF.js";import{readJSONFile}from"./chunks/chunk-BRUTDRAQ.js";import{Now,getBuildMachineResourceConfig,isDeploying,printDeploymentStatus}from"./chunks/chunk-T76ITV65.js";import{require_async_sema}from"./chunks/chunk-NZ2TFADV.js";import"./chunks/chunk-3DMY3OJR.js";import{dump,load}from"./chunks/chunk-V6Y6UK6B.js";import{checkExistsAndConnect,disconnectGitProvider,list,parseRepoUrl,printRemoteUrls,selectAndParseRemoteUrl}from"./chunks/chunk-BZYQ6RFV.js";import"./chunks/chunk-EAUDC24V.js";import"./chunks/chunk-WF5YVWWY.js";import{require_dist as require_dist3}from"./chunks/chunk-YAPHSZJ7.js";import{require_dist2}from"./chunks/chunk-WJ4VNTE3.js";import"./chunks/chunk-VOB4W7DO.js";import"./chunks/chunk-RRDNKB2X.js";import"./chunks/chunk-MVGTMPMI.js";import"./chunks/chunk-SACGQMVQ.js";import"./chunks/chunk-U56NHYAH.js";import"./chunks/chunk-2EYYB6YN.js";import{require_semver}from"./chunks/chunk-BPUANOGW.js";import"./chunks/chunk-3E364MJE.js";import"./chunks/chunk-7EJQLVWX.js";import{responseError}from"./chunks/chunk-SY4EANZH.js";import"./chunks/chunk-O4FDRZ22.js";import{sleep}from"./chunks/chunk-T3GQAMBJ.js";import"./chunks/chunk-P2O5DOYE.js";import{CHECKBOX_INSTRUCTIONS,getCustomEnvironments,pickCustomEnvironment,readStandardInput,require_dist as require_dist4}from"./chunks/chunk-6JGC4YDH.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{ellipsis}from"./chunks/chunk-F4KY2TOK.js";import{formatTable,strlen}from"./chunks/chunk-LSQREJXO.js";import{ellipsizeMiddle,truncateEnd}from"./chunks/chunk-ID663OJ7.js";import{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODEX_BASE_URL,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,MANAGED_BLOCK_END,MANAGED_BLOCK_START,autoInstallVercelPlugin,backupFile,claudeCode,ensureMode,isFile,isSymlink,maskSecret,mergeJson,mergeJsonc,mergeToml,parseJsonObjectOrNull,pathExists,publishNoClobber,readFileOrNull,resolveGatewayBaseUrl,setupVercelPlugin,upsertManagedBlock,writeConfigFile}from"./chunks/chunk-N7L3XLWC.js";import{require_execa}from"./chunks/chunk-GSOPJJO5.js";import{createEnvObject,envPullCommandLogic,pull}from"./chunks/chunk-BWY67LI6.js";import{resolveProjectContext}from"./chunks/chunk-IAUAFUO2.js";import"./chunks/chunk-25565AGS.js";import{isGuidanceEnabled}from"./chunks/chunk-A5R2HHNK.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import{getSubcommand as getSubcommand7}from"./chunks/chunk-ETV3C2CV.js";import{init_main,parse}from"./chunks/chunk-J24BABG4.js";import{ensureLink}from"./chunks/chunk-3AF3TTCR.js";import"./chunks/chunk-QW2UP4W4.js";import{performDeviceCodeFlow,saveDeviceCodeTokens}from"./chunks/chunk-KTNRWBHM.js";import{require_open}from"./chunks/chunk-PVASGBEF.js";import{require_frameworks}from"./chunks/chunk-MVCAUS4F.js";import{CI_LOG_LEVELS,CREDIT_TYPE_LABELS,FLAG_ATTRIBUTE_TYPES,FLAG_CONDITION_LIST_COMPARATORS,FLAG_CONDITION_RHS_OPTIONAL_COMPARATORS,FLAG_EVALUATIONS_DIMENSIONS,FLAG_EVALUATIONS_DIMENSION_NAMES,FLAG_EVALUATIONS_GRANULARITIES,KMS_ALGORITHMS,PROJECT_GRANT_POLICY_KIND,PROJECT_MEMBER_ROLES,STORAGE_PROVIDERS,SUPPORTED_ADDON_NAMES,SUPPORTED_CREDIT_TYPES,abortSubcommand,acceptTermsSubcommand,accessGroupsSubcommand,accessSummarySubcommand,activateKeySubcommand,addGrantSubcommand,addKeySubcommand,addSubcommand,addSubcommand10 as addSubcommand9,addSubcommand11,addSubcommand12,addSubcommand2,addSubcommand3,addSubcommand4,addSubcommand5,addSubcommand6,addSubcommand7,addSubcommand9 as addSubcommand8,addToGroupSubcommand,addonSubcommand,agentCommand,agentRunsCommand,aiGatewayCommand,alertsInspectSubcommand,alertsListSubcommand,alertsSubcommand,aliasCommand,analyzeSubcommand,apiKeysSubcommand,approveSubcommand,archiveSubcommand,attachSubcommand,attackModeDisableSubcommand,attackModeEnableSubcommand,attackModeSubcommand,autoRenewSubcommand,autoupdateSubcommand,backupsSubcommand,balanceSubcommand,bisectCommand,blobCommand,botManagementSubcommand,budgetCommand,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buildersCommand,buyCommand,buySubcommand,cacheCommand,categoriesSubcommand,certsCommand,changelogCommand,checkSubcommand,checkSubcommand2,checkSubcommand3,checksAddFlags,checksRemoveFlags,checksSubcommand,ciCommand,claimSubcommand,codingAgentsSubcommand,completeSubcommand,configureSubcommand,connectSubcommand,connectSubcommand2,connectSubcommand3,connectionsAddSubcommand,connectionsListSubcommand,connectionsRemoveSubcommand,connectionsSubcommand,connexCommand,contactsAddSubcommand,contactsSubcommand,contractCommand,copySubcommand,createGroupSubcommand,createStoreSubcommand,createSubcommand,createSubcommand2,createSubcommand3,createSubcommand4,createSubcommand5,createSubcommand6,createSubcommand7,createSubcommand8 as createSubcommand9,createThresholdSubcommand,creditsSubcommand,cronsCommand,curlCommand,dangerouslyDeleteImmutableStaticAssetSubcommand,dangerouslyDeleteSubcommand,decideSubcommand,delSubcommand,deleteGroupSubcommand,deleteStoreSubcommand,deleteSubcommand as deleteSubcommand2,deleteSubcommand2 as deleteSubcommand4,deleteSubcommand3 as deleteSubcommand5,deployHooksCommand,detachSubcommand,diagnoseSubcommand,diffSubcommand,disableSubcommand,disableSubcommand2,disableSubcommand3 as disableSubcommand4,disableSubcommand4 as disableSubcommand5,discardSubcommand,disconnectSubcommand,disconnectSubcommand2,disconnectSubcommand3,discoverSubcommand,dnsCommand,domainSubcommand,domainsCommand,emptyStoreSubcommand,enableSubcommand,enableSubcommand2,enableSubcommand3 as enableSubcommand4,enableSubcommand4 as enableSubcommand5,entitiesCreateSubcommand,entitiesListSubcommand,entitiesRemoveSubcommand,entitiesSubcommand,entitiesUpdateSubcommand,evaluationsSubcommand,executionsListSubcommand,executionsSubcommand,experimentsCommand,fetchSubcommand,findForeignCreateFlags,findOverlappingConnections,firewallCommand,flagsCommand,flushSubcommand,formatFlagAttributeTypeList,formatFlagConditionComparator,formatFlagConditionComparatorList,getCommandAliases,getConnections,getFlagAttributeType,getStorageProvider,getStorageStore,getStorageStores,getStoreInfoSubcommand,getSubcommand,getSubcommand2,getSubcommand3,getSubcommand4 as getSubcommand5,getSubcommand5 as getSubcommand6,gitCommand,globalConfigCommand,grepSubcommand,guidanceCommand,guideSubcommand,httpstatCommand,importKeySubcommand,importSubcommand,importSubcommand2,initCommand,inspectCommand,inspectGroupSubcommand,inspectSubcommand,inspectSubcommand10 as inspectSubcommand12,inspectSubcommand11 as inspectSubcommand15,inspectSubcommand2,inspectSubcommand3 as inspectSubcommand4,inspectSubcommand4 as inspectSubcommand6,inspectSubcommand5 as inspectSubcommand7,inspectSubcommand6 as inspectSubcommand8,inspectSubcommand7 as inspectSubcommand9,inspectSubcommand8 as inspectSubcommand10,inspectSubcommand9 as inspectSubcommand11,installCommand,installationsSubcommand,installedSubcommand,integrationCommand,integrationResourceCommand,invalidateSubcommand,inviteSubcommand,invokeSubcommand,ipBlocksBlockSubcommand,ipBlocksListSubcommand,ipBlocksSubcommand,ipBlocksUnblockSubcommand,isBucketingAttribute,isCustomEnvironmentAddonAlias,isFlagAttributeType,isFlagEvaluationsDimension,isFlagEvaluationsGranularity,isProjectGrant,isTimestampAttributeType,issueSubcommand,issuerJwksUrl,issuerUrl,itemsSubcommand,kmsCommand,labelsListSubcommand,labelsSubcommand,leaderboardAppsSubcommand,leaderboardLabsSubcommand,leaderboardModelsSubcommand,leaderboardProvidersSubcommand,leaderboardSubcommand,listStorageProviderTypes,listStoresSubcommand,listSubcommand,listSubcommand10 as listSubcommand12,listSubcommand11 as listSubcommand13,listSubcommand12 as listSubcommand14,listSubcommand13 as listSubcommand15,listSubcommand14 as listSubcommand16,listSubcommand15 as listSubcommand17,listSubcommand16 as listSubcommand18,listSubcommand17 as listSubcommand19,listSubcommand18 as listSubcommand21,listSubcommand19 as listSubcommand22,listSubcommand2,listSubcommand20 as listSubcommand23,listSubcommand21 as listSubcommand24,listSubcommand22 as listSubcommand25,listSubcommand23 as listSubcommand27,listSubcommand24 as listSubcommand28,listSubcommand25 as listSubcommand29,listSubcommand26 as listSubcommand30,listSubcommand3 as listSubcommand4,listSubcommand4 as listSubcommand5,listSubcommand5 as listSubcommand6,listSubcommand6 as listSubcommand8,listSubcommand7 as listSubcommand9,listSubcommand8 as listSubcommand10,listSubcommand9 as listSubcommand11,listVersionsSubcommand,loadStoreDetails,logoutCommand,logsSubcommand,mcpCommand,membersAddFlags,membersInviteSubcommand,membersRemoveFlags,membersRemoveSubcommand,membersSubcommand,membersSubcommand2,microfrontendsCommand,modelsEndpointsSubcommand,modelsListSubcommand,modelsSubcommand,moveSubcommand,observabilitySubcommand,openCommand,openSubcommand as openSubcommand2,openSubcommand2 as openSubcommand3,openSubcommand3 as openSubcommand4,openSubcommand4 as openSubcommand5,overrideSubcommand,overviewSubcommand,pauseSubcommand,persistentActionsInspectSubcommand,persistentActionsListSubcommand,persistentActionsSubcommand,preinstallSubcommand,prepareSubcommand,presignSubcommand,priceSubcommand,pricingCommand,prioritySubcommand,proSubcommand,projectCommand,projectsSubcommand,promoteCommand,promoteSubcommand,protectionSubcommand,publishSubcommand,pullSubcommand,purgeSubcommand,putImageSubcommand,putSubcommand,redeployCommand,redirectsCommand,removeCommand,removeFromGroupSubcommand,removeGrantSubcommand,removeSubcommand,removeSubcommand10,removeSubcommand11,removeSubcommand12,removeSubcommand13,removeSubcommand14,removeSubcommand15,removeSubcommand16 as removeSubcommand17,removeSubcommand17 as removeSubcommand18,removeSubcommand2,removeSubcommand3,removeSubcommand4,removeSubcommand5,removeSubcommand6,removeSubcommand7,removeSubcommand8,removeSubcommand9,renameSubcommand,renewSubcommand,requestSubcommand,rerunSubcommand,reseedEnrollmentSubcommand,resolveProjectConnection,resolveStore,resourceSubcommand,restartAnalysisSubcommand,restoreSubcommand,resumeSubcommand,returnToDraftSubcommand,revokeKeySubcommand,revokeTokensSubcommand,rollbackCommand,rollingReleaseCommand,rolloutSubcommand,rulesAddSubcommand,rulesAddSubcommand2 as rulesAddSubcommand3,rulesAddSubcommand3 as rulesAddSubcommand4,rulesDisableSubcommand,rulesEditSubcommand,rulesEditSubcommand2,rulesEnableSubcommand,rulesInspectSubcommand as rulesInspectSubcommand2,rulesListSubcommand,rulesListSubcommand2,rulesListSubcommand3,rulesMoveSubcommand,rulesRemoveSubcommand,rulesRemoveSubcommand2,rulesRemoveSubcommand3,rulesReorderSubcommand,rulesSubcommand,rulesSubcommand2,rulesSubcommand3,rulesUpdateSubcommand as rulesUpdateSubcommand2,runSubcommand,schedulesCommand,sdkKeysAddSubcommand,sdkKeysListSubcommand,sdkKeysRemoveSubcommand,sdkKeysSubcommand,searchSubcommand,searchSubcommand2,securityCommand,segmentsCreateSubcommand,segmentsInspectSubcommand,segmentsListSubcommand,segmentsRemoveSubcommand,segmentsSubcommand,segmentsUpdateSubcommand,setRampSubcommand,setSubcommand,setSubcommand2,setSubcommand3,setupCommand,setupSubcommand,signedTokenSubcommand,signupCommand,skillsCommand,speedInsightsSubcommand,splitSubcommand,ssoSubcommand,staleSubcommand,startSubcommand,startSubcommand2,statusSubcommand,statusSubcommand2,statusSubcommand3,statusSubcommand4,statusSubcommand5,statusSubcommand6,storageCommand,storeMatchesType,storeProductLabel,storeSupportsOidc,storeTypeName,switchSubcommand,systemBypassAddSubcommand,systemBypassListSubcommand,systemBypassRemoveSubcommand,systemBypassSubcommand,systemMitigationsPauseSubcommand,systemMitigationsResumeSubcommand,systemMitigationsSubcommand,targetCommand,targetsAddSubcommand,targetsListSubcommand,targetsRemoveSubcommand,targetsSubcommand,teamsCommand,telemetryCommand,tokenSubcommand,tokenSubcommand2,tokensCommand,tokensSubcommand,traceSubcommand,trafficInspectSubcommand,trafficListSubcommand,trafficSubcommand,transferInSubcommand,unarchiveSubcommand,updateGrantSubcommand,updateSubcommand,updateSubcommand10,updateSubcommand11,updateSubcommand2,updateSubcommand3,updateSubcommand4,updateSubcommand5,updateSubcommand6,updateSubcommand7,updateSubcommand8,updateSubcommand9,upgradeCommand,uploadSubcommand,usageCommand,useSubcommand,useTargetingSubcommand,verifySubcommand,versionCommand,versionsDiffSubcommand,versionsListSubcommand,versionsSubcommand,virtualModelsCreateSubcommand,virtualModelsEditSubcommand,virtualModelsInspectSubcommand,virtualModelsListSubcommand,virtualModelsRemoveSubcommand,virtualModelsRestoreSubcommand,virtualModelsSubcommand,webAnalyticsSubcommand,webhooksCommand,whoamiCommand}from"./chunks/chunk-U5C6XOLA.js";import{createSubcommand as createSubcommand8,getSubcommand as getSubcommand4,searchSubcommand as searchSubcommand3,tracesCommand}from"./chunks/chunk-OH2RT2GN.js";import{tracesConfigCommand}from"./chunks/chunk-UFXKCETS.js";import{addSubcommand as addSubcommand13,buildSubcommand,configSubcommand,inspectSubcommand as inspectSubcommand14,listSubcommand as listSubcommand26,loginSubcommand,pushSubcommand,removeSubcommand as removeSubcommand16,vcrCommand}from"./chunks/chunk-RZGWCQP7.js";import{imageAggregateCommand,imageInspectSubcommand,imageLsSubcommand,imageRmSubcommand}from"./chunks/chunk-AG5QQNJ3.js";import{PERMISSIONS_ACTIONS,permissionsAddSubcommand,permissionsAggregateCommand,permissionsClearSubcommand,permissionsLsSubcommand,permissionsRmSubcommand}from"./chunks/chunk-AU42HSQ3.js";import{tagsAggregateCommand,tagsInspectSubcommand,tagsLsSubcommand}from"./chunks/chunk-L5FUUGYX.js";import{addSubcommand as addSubcommand10,deleteSubcommand as deleteSubcommand3,disableSubcommand as disableSubcommand3,discardSubcommand as discardSubcommand2,editSubcommand as editSubcommand2,enableSubcommand as enableSubcommand3,exportSubcommand,inspectSubcommand as inspectSubcommand13,listSubcommand as listSubcommand20,listVersionsSubcommand as listVersionsSubcommand2,publishSubcommand as publishSubcommand2,reorderSubcommand,restoreSubcommand as restoreSubcommand2,routesCommand}from"./chunks/chunk-QC47UKDR.js";import{metricsCommand,schemaSubcommand}from"./chunks/chunk-QJKJBD2M.js";import{commentsCommand,deleteSubcommand,editSubcommand,inspectSubcommand as inspectSubcommand5,listSubcommand as listSubcommand7,openSubcommand,reopenSubcommand,replySubcommand,resolveSubcommand}from"./chunks/chunk-MYCQIZU6.js";import{alertsCommand,inspectSubcommand as inspectSubcommand3,listSubcommand as listSubcommand3}from"./chunks/chunk-CNU4T7FO.js";import{rulesAddSubcommand as rulesAddSubcommand2,rulesAggregateCommand,rulesInspectSubcommand,rulesLsSubcommand,rulesNotificationsAggregateCommand,rulesNotificationsLinkSubcommand,rulesNotificationsLsSubcommand,rulesNotificationsUnlinkSubcommand,rulesNotificationsUpdateSubcommand,rulesRmSubcommand,rulesSchemaSubcommand,rulesUpdateSubcommand}from"./chunks/chunk-LU5O3NH7.js";import{logsCommand}from"./chunks/chunk-AMDHTZDV.js";import{activityCommand,typesSubcommand}from"./chunks/chunk-2JBVMF2Y.js";import"./chunks/chunk-JLXG2XWW.js";import"./chunks/chunk-B4YYOSPY.js";import"./chunks/chunk-UTW2FDSC.js";import{DEV_RESOURCE_TOKEN}from"./chunks/chunk-S7XZC23O.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-FBYA6LLM.js";import{envTargetChoices,isValidEnvTarget}from"./chunks/chunk-HJ3NY4UA.js";import{getTeams}from"./chunks/chunk-2H243SJV.js";import"./chunks/chunk-SCV7XEEO.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{getPaginationOpts,isValidName}from"./chunks/chunk-ILFUNCJZ.js";import{getCommandFlags}from"./chunks/chunk-OUHPDA7Q.js";import{formatEnvironment}from"./chunks/chunk-JSBEAHKA.js";import{validateLsArgs}from"./chunks/chunk-EO7GUARB.js";import{STANDARD_ENVIRONMENTS,formatProject}from"./chunks/chunk-3EYOQC4R.js";import{elapsed}from"./chunks/chunk-Q7D7RGXM.js";import"./chunks/chunk-XEQT373M.js";import{getDeployment,toHost}from"./chunks/chunk-VIBUYIZ3.js";import{mapCertError}from"./chunks/chunk-6LRVRPYO.js";import"./chunks/chunk-GRTIWUV2.js";import{buildCommandDocumentationLines,help}from"./chunks/chunk-7D2HVBVP.js";import{table}from"./chunks/chunk-773GOZIR.js";import{printError}from"./chunks/chunk-V336CYEI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,BUY_PRO_COMMAND,PRIORITY_PROJECT_ENABLE_COMMAND,argvHasNonInteractive,buildCommandWithGlobalFlags,buildCommandWithYes,buildIntegrationCommandTailFromArgv,buyProFix,clientObservabilityPlanRecovery,exitWithNonInteractiveError,getExitCodeForReason,getGlobalFlagsFromArgv,isProOrEnterprisePlan,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,targetRecovery,withGlobalFlags,writeAgentError}from"./chunks/chunk-5RR3435W.js";import"./chunks/chunk-67GZ5REA.js";import{require_strip_ansi}from"./chunks/chunk-BS32OUOC.js";import{validateJsonOutput,wantsMachineReadableOutput}from"./chunks/chunk-D4MW3RDW.js";import{detectExplicitScope,getContextName,getScope,introspectToken,isAppPrincipalEnabled,persistAuthConfig,readLocalConfig,resolveAppFromToken,writeToConfigFile}from"./chunks/chunk-DZ6GORJ7.js";import{getGlobalPathConfig}from"./chunks/chunk-HMS3UIQ2.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import{TelemetryClient}from"./chunks/chunk-HUJPGK7W.js";import"./chunks/chunk-VKXEOL4K.js";import{getInstallRoot,isNativeBinaryInstall}from"./chunks/chunk-YYPNUQDI.js";import"./chunks/chunk-4SAVH3H7.js";import"./chunks/chunk-ZS2WS4AM.js";import{processRevocationResponse,revocationRequest,ua_default}from"./chunks/chunk-AOWWC6WZ.js";import{directFetch,fetch as fetch2,getFetchDispatcher,toNodeReadable}from"./chunks/chunk-MY4MONOH.js";import{isArgumentError,parseArguments,require_arg}from"./chunks/chunk-R4VVQRLX.js";import{quoteArg}from"./chunks/chunk-BKV35LVB.js";import{GLOBAL_CLI_FLAG_NAMES,arg_common_default,formatOption,getFlagsSpecification,getGlobalFlagsFromArgs,getProjectOptionFromArgs,getSameSubcommandSuggestionFlags,globalCommandOptions,jsonOption,normalizeFlagName,stripSensitiveAuthArgs}from"./chunks/chunk-5IPBCD7K.js";import{VERCEL_CONFIG_EXTENSIONS,execFileAsync,getGitConfigPath,getGitExecutable,getLinkFromDir,getLinkedProject,getProjectByNameOrId,getProjectLink,getVercelDirectory,parseGitConfig,pluckRemoteUrls,require_lib,require_pluralize,resolveProjectCwd}from"./chunks/chunk-MYMM34ZH.js";import"./chunks/chunk-ROPQIBWJ.js";import"./chunks/chunk-VKPZP4LC.js";import{humanizePath}from"./chunks/chunk-PPCFQQSU.js";import{ALIGNED_LABEL_WIDTH,formatAlignedLabel,printAlignedLabel}from"./chunks/chunk-N7Q2IESO.js";import{getUser}from"./chunks/chunk-VSE5BAPP.js";import{getTeamByIdOrSlug,teamCache}from"./chunks/chunk-VOZEB6PD.js";import{APIError,AliasInUse,CertConfigurationError,CertError,CertMissing,CertNotFound,CertOrderNotFound,CertsPermissionDenied,DNSConflictingRecord,DNSInvalidPort,DNSInvalidType,DNSPermissionDenied,DeploymentFailedAliasImpossible,DeploymentNotFound,DeploymentNotReady,DeploymentPermissionDenied,DomainAlreadyExists,DomainExternal,DomainMoveConflict,DomainNotAvailable,DomainNotFound,DomainNotVerified,DomainPaymentError,DomainPermissionDenied,DomainPurchasePending,DomainRemovalConflict,InvalidAlias,InvalidAliasInConfig,InvalidDeploymentId,InvalidDomain,InvalidMoveDestination,InvalidToken,LinkRequiredError,NoAliasInConfig,NowError,ProjectNotFound,SourceNotFound,TLDNotSupportedViaCLI,TooManyRequests,UnexpectedDomainPurchaseError,UnexpectedDomainTransferError,UnsupportedTLD,UserAborted,code,isAPIError,require_bytes}from"./chunks/chunk-AZULOP7M.js";import{cmd,getCommandName,getCommandNamePlain,packageName,require_lib as require_lib2}from"./chunks/chunk-JESNVRVR.js";import{chars_default,emoji,eraseLines,link_default,output_manager_default,prependEmoji}from"./chunks/chunk-75IAMKGV.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import{pkg_default}from"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-D3AHZ5LI.js";import"./chunks/chunk-2GHZGOWT.js";import"./chunks/chunk-YHPPP3SF.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BRQUZ5NC.js";import{__require,__toESM}from"./chunks/chunk-BZENIQ7N.js";var AgentTelemetryClient=class extends TelemetryClient{trackCliArgumentInit(value){value&&this.trackCliArgument({arg:"init",value})}trackCliFlagYes(value){value&&this.trackCliFlag("yes")}};var import_chalk=__toESM(require_source(),1);import{readFile,writeFile}from"node:fs/promises";import{join}from"node:path";import{KNOWN_AGENTS}from"@vercel/detect-agent";var BEST_PRACTICES_START="<!-- VERCEL BEST PRACTICES START -->",BEST_PRACTICES_END="<!-- VERCEL BEST PRACTICES END -->",BEST_PRACTICES_BODY=`## Best practices for developing on Vercel
|
|
8
8
|
|
|
9
9
|
These defaults are optimized for AI coding agents (and humans) working on apps that deploy to Vercel.
|
|
10
10
|
|
|
@@ -1495,7 +1495,7 @@ ${tablePrint}
|
|
|
1495
1495
|
`)}var import_chalk330=__toESM(require_source(),1);function getPeriodLabel(period){switch(period){case"daily":return"Daily";case"weekly":return"Weekly";case"monthly":return"Monthly"}}function outputBreakdown({data,breakdownPeriod,startTime}){let{print,log}=output_manager_default,periodLabel=getPeriodLabel(breakdownPeriod);outputUsageHeader(data,`${periodLabel} usage`,elapsed(Date.now()-startTime));let sortedPeriods=[...data.periodUsage.keys()].sort();if(sortedPeriods.length===0){log("No usage data found for this period.");return}let hiddenCount=0;for(let periodKey of sortedPeriods){let periodData=data.periodUsage.get(periodKey),allServices=[...periodData.services.entries()],sortedServices=visibleServices(periodData.services).sort((a,b)=>b[1].cost-a[1].cost);if(hiddenCount+=allServices.length-sortedServices.length,sortedServices.length===0)continue;log(`${import_chalk330.default.bold(import_chalk330.default.cyan(periodKey))} (${formatUsageAmount(periodData.totalCost,data.costUnit)})`);let rows=sortedServices.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:!0,singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,data.costUnit)]),tablePrint=table([["Service","Usage","Cost"].map(header=>import_chalk330.default.bold(import_chalk330.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
|
|
1496
1496
|
`)}outputHiddenServicesHint(hiddenCount)}var import_chalk331=__toESM(require_source(),1);function getDimensionLabel(dimension){return dimension==="project"?"Project":"Region"}function outputGroupBy({data,groupByDimension,startTime}){let{print,log}=output_manager_default,dimensionLabel=getDimensionLabel(groupByDimension);outputUsageHeader(data,`Usage by ${dimensionLabel}`,elapsed(Date.now()-startTime));let sortedGroups=[...data.groupByUsage.entries()].sort((a,b)=>b[1].totalCost-a[1].totalCost);if(sortedGroups.length===0){log("No usage data found for this period.");return}let hiddenCount=0;for(let[groupName,groupData]of sortedGroups){let allServices=[...groupData.services.entries()],services=visibleServices(groupData.services).sort((a,b)=>b[1].cost-a[1].cost);if(hiddenCount+=allServices.length-services.length,services.length===0)continue;log(`${import_chalk331.default.bold(import_chalk331.default.cyan(groupName))} (${formatUsageAmount(groupData.totalCost,data.costUnit)})`);let rows=services.map(([name,service])=>[formatServiceName(name,service),formatUsageQuantity(service.quantity,service.unit,{compact:!0,showSmallValues:!0,singularUnit:service.singularUnit,unitKind:service.unitKind}),formatServiceCost(service,data.costUnit)]),tablePrint=table([["Service","Usage","Cost"].map(header=>import_chalk331.default.bold(import_chalk331.default.gray(header))),...rows],{hsep:4,align:["l","l","r"]}).replace(/^/gm," ");print(`${tablePrint}
|
|
1497
1497
|
`)}log(""),log(`${import_chalk331.default.gray("Estimated total:")} ${import_chalk331.default.bold(formatUsageAmount(data.totalCost,data.costUnit))}`),outputHiddenServicesHint(hiddenCount)}function serializeService(service){return{name:service.name,product:service.product,quantity:service.quantity,unit:service.unit,cost:service.cost,included:service.included,category:service.category}}function outputJson9(client,{data,fromDate,toDate,breakdownPeriod,groupByDimension}){let sortedServices=[...data.services.entries()].sort((a,b)=>b[1].cost-a[1].cost),jsonOutput={period:{from:fromDate,to:toDate},context:data.contextName,costUnit:data.costUnit};data.creditBalance&&(jsonOutput.creditBalance=data.creditBalance),breakdownPeriod&&(jsonOutput.breakdown={period:breakdownPeriod,data:[...data.periodUsage.keys()].sort().map(periodKey=>{let period=data.periodUsage.get(periodKey);return{periodKey,services:[...period.services.entries()].sort((a,b)=>b[1].cost-a[1].cost).map(([,service])=>serializeService(service)),totals:{cost:period.totalCost}}})}),groupByDimension&&(jsonOutput.groupBy={dimension:groupByDimension,data:[...data.groupByUsage.entries()].sort((a,b)=>b[1].totalCost-a[1].totalCost).map(([name,group])=>({name,services:[...group.services.entries()].sort((a,b)=>b[1].cost-a[1].cost).map(([,service])=>serializeService(service)),totals:{cost:group.totalCost}}))}),jsonOutput.services=sortedServices.map(([,service])=>serializeService(service)),jsonOutput.totals={cost:data.totalCost},client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
1498
|
-
`)}var GROSS_COST_METRIC="gross_cost",SUMMARY_VIEW="byProduct",DETAIL_VIEW="byProductRegionProject";function getCostViews(groupByDimension){let views={};return groupByDimension&&(views[DETAIL_VIEW]={groupBy:["product","region","project"]}),views[SUMMARY_VIEW]={groupBy:["product"]},{views,summaryViewName:SUMMARY_VIEW,detailViewName:groupByDimension?DETAIL_VIEW:void 0}}async function usage(client){let{print,error,debug,spinner,warn}=output_manager_default,flagsSpecification=getFlagsSpecification(usageCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let telemetry2=new UsageTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("usage"),print(help(usageCommand,{columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput,fromFlag=parsedArgs.flags["--from"],toFlag=parsedArgs.flags["--to"];if(fromFlag!==void 0&&parsedArgs.flags["--since"]!==void 0)return error("Pass only one of --since or --from. (--from is deprecated.)"),2;if(toFlag!==void 0&&parsedArgs.flags["--until"]!==void 0)return error("Pass only one of --until or --to. (--to is deprecated.)"),2;fromFlag!==void 0&&warn("`--from` is deprecated, please use `--since` instead"),toFlag!==void 0&&warn("`--to` is deprecated, please use `--until` instead");let sinceFlag=parsedArgs.flags["--since"]??fromFlag,untilFlag=parsedArgs.flags["--until"]??toFlag;if(untilFlag&&!sinceFlag)return error("--until requires --since. Omit both to show the current billing cycle."),2;let breakdownFlag=parsedArgs.flags["--breakdown"];if(breakdownFlag&&!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),2;let breakdownPeriod=breakdownFlag,groupByFlag=parsedArgs.flags["--group-by"];if(groupByFlag&&!isValidGroupByDimension(groupByFlag))return error(`Invalid group-by dimension: "${groupByFlag}". Valid options are: ${VALID_GROUP_BY_DIMENSIONS.join(", ")}`),2;let groupByDimension=groupByFlag;if(breakdownPeriod&&groupByDimension)return error("--breakdown and --group-by cannot be used together. Use one or the other."),2;let sinceDate,untilDate;try{sinceDate=sinceFlag?parseBillingDate(sinceFlag,!1):void 0,untilDate=untilFlag?parseBillingDate(untilFlag,!0):void 0}catch(err){return error(err.message),2}telemetry2.trackCliOptionSince(parsedArgs.flags["--since"]),telemetry2.trackCliOptionUntil(parsedArgs.flags["--until"]),telemetry2.trackCliOptionFrom(fromFlag),telemetry2.trackCliOptionTo(toFlag),telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]),telemetry2.trackCliOptionBreakdown(breakdownFlag),telemetry2.trackCliOptionGroupBy(groupByFlag);let contextName,contextType,teamId,billingPeriod,hasPrecommitment=!1;try{let scope=await getScope(client),owner=scope.team??scope.user;contextName=scope.contextName,contextType=scope.team?"team":"personal account",teamId=scope.team?.id;let billing=owner?.billing;billingPeriod=billing?.subscriptions?.find(subscription=>subscription.frequency.interval==="month"&&subscription.frequency.intervalCount===1)?.period??billing?.period,hasPrecommitment=billing?.plan==="enterprise"||billing?.planIteration==="plus"||billing?.plan==="pro"&&billing?.planIteration==="flex"}catch(err){if((0,import_error_utils26.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let usingDefaults=!sinceFlag,fromDate=sinceDate??(billingPeriod?new Date(billingPeriod.start).toISOString():getDefaultFromDate()),toDate=untilDate??(sinceFlag?new Date().toISOString():billingPeriod?new Date(billingPeriod.end).toISOString():getDefaultToDate()),fromDisplay=sinceFlag&&!isRelativeTime(sinceFlag)?sinceFlag:extractDatePortion(fromDate),toDisplay=untilFlag&&!isRelativeTime(untilFlag)?untilFlag:extractDatePortion(toDate);debug(`Fetching dashboard usage from ${fromDate} to ${toDate}`);let start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk332.default.bold(contextName)}`);try{let query=new URLSearchParams;teamId&&query.set("teamId",teamId);let viewPlan=getCostViews(groupByDimension),queryString=query.toString(),costsRequest=client.fetch(`/v2/billing/costs${queryString?`?${queryString}`:""}`,{method:"POST",body:{from:fromDate,to:toDate,metrics:[GROSS_COST_METRIC,"quantity"],format:"timeseries",views:viewPlan.views,userAgent:"vercel-cli.usage"},useCurrentTeam:!1}),commitmentRequest=usingDefaults&&teamId&&hasPrecommitment?client.fetch(`/v1/invoices/pre-commitment-usage?teamId=${encodeURIComponent(teamId)}`,{useCurrentTeam:!1}).catch(err=>(debug(`Unable to fetch infrastructure credit: ${String(err)}`),null)):Promise.resolve(null),[response,commitmentUsage]=await Promise.all([costsRequest,commitmentRequest]),usageData=processCosts(response,{summaryView:response.results.views[viewPlan.summaryViewName],detailView:viewPlan.detailViewName?response.results.views[viewPlan.detailViewName]:void 0,contextName,contextType,scope:parsedArgs.flags["--scope"],fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension});return attachCredit(usageData,commitmentUsage),asJson?(outputJson9(client,{data:usageData,fromDate,toDate,breakdownPeriod,groupByDimension}),0):(groupByDimension?outputGroupBy({data:usageData,groupByDimension,startTime:start}):breakdownPeriod?outputBreakdown({data:usageData,breakdownPeriod,startTime:start}):outputAggregated({data:usageData,startTime:start}),0)}catch(err){return isAPIError(err)&&err.status===404&&err.code==="costs_not_found"?error(`Billing cost data is unavailable for ${fromDisplay} through ${toDisplay}. This does not mean usage was zero. It usually means the team has no active subscription for that range, or the range is before the team's billing data starts. Check that the selected team and date range are correct.`):output_manager_default.prettyError(err),1}}function roundToHundredths(value){return Math.round((value+Number.EPSILON)*100)/100}function getUsageThrough(queriedAt,toDisplay){let queriedDate=extractDatePortion(queriedAt);return queriedDate<toDisplay?queriedDate:toDisplay}function attachCredit(usageData,commitmentUsage){if(!commitmentUsage)return;let creditLedger=commitmentUsage.creditLedgers.find(ledger=>ledger.currency===usageData.costUnit);if(!creditLedger)return;let used=roundToHundredths(creditLedger.total-creditLedger.remaining);usageData.creditBalance={cadence:commitmentUsage.cadence,currency:creditLedger.currency,allocated:creditLedger.total,used,remaining:creditLedger.remaining}}function processCosts(response,options){let{summaryView,detailView,contextName,contextType,scope,fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension}=options;if(!summaryView)throw new Error("The billing API did not return the requested usage summary.");let costUnit=getCostUnit(response);if(response.availableCurrencies?.some(currency=>currency!==costUnit))throw new Error("Can't show complete costs for this date range because some costs use a different billing currency. Choose a date range within the current billing currency or view usage in the dashboard.");let products=response.results.dimensionsMeta.product?.values??{},projects2=response.results.dimensionsMeta.project?.values??{},regions=response.results.dimensionsMeta.region?.values??{};if(groupByDimension&&(!detailView||!detailView.groupBy.includes(groupByDimension)))throw new Error(`Usage cannot be grouped by ${groupByDimension} for this team.`);let services=new Map,periodUsage=new Map,groupByUsage=new Map,totalCost=0;for(let result of summaryView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses");if(addService(services,serviceName,aggregation),totalCost+=aggregation.cost,breakdownPeriod)for(let index=0;index<response.results.times.length;index++){let periodKey=getPeriodKey(response.results.times[index],breakdownPeriod),period=periodUsage.get(periodKey)??emptyAggregation(),sample=aggregateResult(result,product,serviceName,response.metrics,index,productMetadata?.category==="Subscription Licenses");addService(period.services,serviceName,sample),period.totalCost+=sample.cost,periodUsage.set(periodKey,period)}}if(groupByDimension)for(let result of detailView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses"),id2=result.dimensionValues[groupByDimension],groupName=id2?(groupByDimension==="project"?projects2:regions)[id2]?.title??id2:groupByDimension==="project"?"(unattributed)":"(global)",group=groupByUsage.get(groupName)??emptyAggregation();addService(group.services,serviceName,aggregation),group.totalCost+=aggregation.cost,groupByUsage.set(groupName,group)}return{contextName,contextType,scope,fromDisplay,toDisplay,usageThrough:getUsageThrough(response.queriedAt,toDisplay),usingDefaults,costUnit,services,periodUsage,groupByUsage,totalCost}}function getCostUnit(response){let unit=response.metrics.find(metric=>metric.slug===GROSS_COST_METRIC)?.unit;return unit?.singular==="MIU"||unit?.plural==="MIUs"?"managed_infrastructure_units":"USD"}function aggregateResult(result,product,name,metrics2,sampleIndex,isSubscription=!1){let grossCostIndex=result.metrics.indexOf(GROSS_COST_METRIC),quantityIndex=result.metrics.findIndex(metric=>metric!==GROSS_COST_METRIC),quantityMetric=metrics2.find(metric=>metric.slug===result.metrics[quantityIndex]),values=sampleIndex===void 0?result.totalValue:result.values[sampleIndex]??[],cost=grossCostIndex===-1?0:values[grossCostIndex]??0,included=result.flatRate===!0,rawQuantity=quantityIndex===-1?0:values[quantityIndex]??0,quantity=isSubscription&&sampleIndex===void 0&&quantityIndex!==-1?result.values.reduce((maximum,sample)=>Math.max(maximum,sample[quantityIndex]??0),0):rawQuantity,units=getQuantityUnits(quantityMetric,product,isSubscription);return{name,product,quantity,...units,cost,included,category:isSubscription?"subscription":"usage"}}function getQuantityUnits(metric,product,isSubscription){if(isSubscription)return{unit:"licenses",singularUnit:"license"};if(!metric?.unit)return{};if(metric.unit.kind==="custom"){let singularUnit=metric.unit.singular,unit2=metric.unit.plural??singularUnit;return!unit2||singularUnit===metric.title||unit2===metric.title?{}:{unit:unit2,singularUnit}}if(metric.unit.kind==="digitalStorage"&&metric.unit.name)return{unit:metric.unit.name,unitKind:metric.unit.kind};let unit=metric.unit.name;return!unit||unit===metric.title||unit===product?{}:{unit,unitKind:metric.unit.kind}}function addService(services,name,value){let key=JSON.stringify([value.product,value.included]),existing=services.get(key);if(!existing){services.set(key,{...value,name});return}let previousQuantity=existing.quantity;existing.quantity=existing.category==="subscription"?Math.max(previousQuantity,value.quantity):previousQuantity+value.quantity,existing.cost+=value.cost}function emptyAggregation(){return{services:new Map,totalCost:0}}var VcrTelemetryClient=class extends TelemetryClient{trackCliSubcommandLs(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandConfig(actual){this.trackCliSubcommand({subcommand:"config",value:actual})}trackCliSubcommandRm(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}trackCliSubcommandLogin(actual){this.trackCliSubcommand({subcommand:"login",value:actual})}trackCliSubcommandBuild(actual){this.trackCliSubcommand({subcommand:"build",value:actual})}trackCliSubcommandPush(actual){this.trackCliSubcommand({subcommand:"push",value:actual})}trackCliArgumentEngine(value){value&&this.trackCliArgument({arg:"engine",value})}trackCliArgumentPath(value){value&&this.trackCliArgument({arg:"path",value:this.redactedValue})}trackCliArgumentName(value){value&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionPlatform(value){if(value){let known=value==="linux/amd64"||value==="linux/arm64";this.trackCliOption({option:"platform",value:known?value:this.redactedValue})}}trackCliSubcommandTag(actual){this.trackCliSubcommand({subcommand:"tag",value:actual})}trackCliSubcommandImage(actual){this.trackCliSubcommand({subcommand:"image",value:actual})}trackCliSubcommandPermissions(actual){this.trackCliSubcommand({subcommand:"permissions",value:actual})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(value){value&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionCursor(value){value&&this.trackCliOption({option:"cursor",value:this.redactedValue})}trackCliOptionSortBy(value){value&&this.trackCliOption({option:"sort-by",value})}trackCliOptionSortOrder(value){value&&this.trackCliOption({option:"sort-order",value})}trackCliOptionPublic(value){(value==="true"||value==="false")&&this.trackCliOption({option:"public",value})}trackCliFlagUntagged(value){value&&this.trackCliFlag("untagged")}trackCliFlagYes(value){value&&this.trackCliFlag("yes")}trackCliFlagPush(value){value&&this.trackCliFlag("push")}};var COMMAND_CONFIG69={ls:getCommandAliases(listSubcommand26),inspect:getCommandAliases(inspectSubcommand14),add:getCommandAliases(addSubcommand13),config:getCommandAliases(configSubcommand),rm:getCommandAliases(removeSubcommand16),login:getCommandAliases(loginSubcommand),build:getCommandAliases(buildSubcommand),push:getCommandAliases(pushSubcommand),tag:getCommandAliases(tagsAggregateCommand),image:getCommandAliases(imageAggregateCommand),permissions:getCommandAliases(permissionsAggregateCommand)};async function vcr(client){let telemetry2=new VcrTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(vcrCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG69),needHelp=parsedArgs.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{parent:vcrCommand,columns:client.stderr.columns}))}if(needHelp)switch(subcommand){case"ls":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(listSubcommand26),0;case"inspect":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(inspectSubcommand14),0;case"add":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(addSubcommand13),0;case"config":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(configSubcommand),0;case"rm":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(removeSubcommand16),0;case"login":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(loginSubcommand),0;case"build":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(buildSubcommand),0;case"push":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(pushSubcommand),0;case"tag":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(tagsLsSubcommand),0):nested==="inspect"||nested==="get"?(printHelp(tagsInspectSubcommand),0):(printHelp(tagsAggregateCommand),0)}case"image":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(imageLsSubcommand),0):nested==="inspect"||nested==="get"?(printHelp(imageInspectSubcommand),0):nested==="rm"||nested==="remove"||nested==="delete"?(printHelp(imageRmSubcommand),0):(printHelp(imageAggregateCommand),0)}case"permissions":{let printPermissionsActionHelp2=function(command2){output_manager_default.print(help(command2,{parent:{...vcrCommand,name:"vcr permissions repository"},columns:client.stderr.columns}))};var printPermissionsActionHelp=printPermissionsActionHelp2;telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args.slice(0,2),hasAction=aliases2=>nested.some(arg2=>arg2!==void 0&&aliases2.includes(arg2));return hasAction(PERMISSIONS_ACTIONS.ls)?(printPermissionsActionHelp2(permissionsLsSubcommand),0):hasAction(PERMISSIONS_ACTIONS.add)?(printPermissionsActionHelp2(permissionsAddSubcommand),0):hasAction(PERMISSIONS_ACTIONS.rm)?(printPermissionsActionHelp2(permissionsRmSubcommand),0):hasAction(PERMISSIONS_ACTIONS.clear)?(printPermissionsActionHelp2(permissionsClearSubcommand),0):(printHelp(permissionsAggregateCommand),0)}default:return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),0}switch(subcommand){case"ls":return telemetry2.trackCliSubcommandLs(subcommandOriginal),(await import("./chunks/ls-TE7BAMHR.js")).default(client,args,telemetry2);case"inspect":return telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-SEGNEPGI.js")).default(client,args,telemetry2);case"add":return telemetry2.trackCliSubcommandCreate(subcommandOriginal),(await import("./chunks/add-QKGWNVQS.js")).default(client,args,telemetry2);case"config":return telemetry2.trackCliSubcommandConfig(subcommandOriginal),(await import("./chunks/config-Y3JEZPVK.js")).default(client,args,telemetry2);case"rm":return telemetry2.trackCliSubcommandRm(subcommandOriginal),(await import("./chunks/rm-BYOBKSWY.js")).default(client,args,telemetry2);case"login":return telemetry2.trackCliSubcommandLogin(subcommandOriginal),(await import("./chunks/login-K6VYVJPS.js")).default(client,args,telemetry2);case"build":return telemetry2.trackCliSubcommandBuild(subcommandOriginal),(await import("./chunks/build-SD6SLRK7.js")).default(client,telemetry2);case"push":return telemetry2.trackCliSubcommandPush(subcommandOriginal),(await import("./chunks/push-PBKUSKXQ.js")).default(client,telemetry2);case"tag":return telemetry2.trackCliSubcommandTag(subcommandOriginal),(await import("./chunks/tags-P5GB7HTF.js")).default(client,args,telemetry2);case"image":return telemetry2.trackCliSubcommandImage(subcommandOriginal),(await import("./chunks/image-6KIQRC65.js")).default(client,args,telemetry2);case"permissions":return telemetry2.trackCliSubcommandPermissions(subcommandOriginal),(await import("./chunks/permissions-JMFKPIO4.js")).default(client,args,telemetry2);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG69)),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}}var import_ms44=__toESM(require_ms(),1),import_chalk333=__toESM(require_source(),1),import_pluralize28=__toESM(require_pluralize(),1);async function getWebhooks(client){let response=await client.fetch("/v1/webhooks");return Array.isArray(response)?{webhooks:response}:response}var WebhooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls11(client,argv){let telemetry2=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand30.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"webhooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk333.default.bold(contextName)}`);let{webhooks}=await getWebhooks(client);if(asJson){output_manager_default.stopSpinner();let webhooksList=webhooks.map(webhook=>({id:webhook.id,url:webhook.url,events:webhook.events,projectIds:webhook.projectIds,createdAt:webhook.createdAt,updatedAt:webhook.updatedAt})),jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,webhooks:webhooksList,message:`${webhooks.length} webhook(s) found.`,next:[{command:getCommandNamePlain("webhooks inspect <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
1498
|
+
`)}var GROSS_COST_METRIC="gross_cost",SUMMARY_VIEW="byProduct",DETAIL_VIEW="byProductRegionProject";function getCostViews(groupByDimension){let views={};return groupByDimension&&(views[DETAIL_VIEW]={groupBy:["product","region","project"]}),views[SUMMARY_VIEW]={groupBy:["product"]},{views,summaryViewName:SUMMARY_VIEW,detailViewName:groupByDimension?DETAIL_VIEW:void 0}}async function usage(client){let{print,error,debug,spinner,warn}=output_manager_default,flagsSpecification=getFlagsSpecification(usageCommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(err){return printError(err),2}let telemetry2=new UsageTelemetryClient({opts:{store:client.telemetryEventStore}});if(parsedArgs.flags["--help"])return telemetry2.trackCliFlagHelp("usage"),print(help(usageCommand,{columns:client.stderr.columns})),0;let formatResult=validateJsonOutput(parsedArgs.flags);if(!formatResult.valid)return error(formatResult.error),2;let asJson=formatResult.jsonOutput,fromFlag=parsedArgs.flags["--from"],toFlag=parsedArgs.flags["--to"];if(fromFlag!==void 0&&parsedArgs.flags["--since"]!==void 0)return error("Pass only one of --since or --from. (--from is deprecated.)"),2;if(toFlag!==void 0&&parsedArgs.flags["--until"]!==void 0)return error("Pass only one of --until or --to. (--to is deprecated.)"),2;fromFlag!==void 0&&warn("`--from` is deprecated, please use `--since` instead"),toFlag!==void 0&&warn("`--to` is deprecated, please use `--until` instead");let sinceFlag=parsedArgs.flags["--since"]??fromFlag,untilFlag=parsedArgs.flags["--until"]??toFlag;if(untilFlag&&!sinceFlag)return error("--until requires --since. Omit both to show the current billing cycle."),2;let breakdownFlag=parsedArgs.flags["--breakdown"];if(breakdownFlag&&!isValidBreakdownPeriod(breakdownFlag))return error(`Invalid breakdown period: "${breakdownFlag}". Valid options are: ${VALID_BREAKDOWN_PERIODS.join(", ")}`),2;let breakdownPeriod=breakdownFlag,groupByFlag=parsedArgs.flags["--group-by"];if(groupByFlag&&!isValidGroupByDimension(groupByFlag))return error(`Invalid group-by dimension: "${groupByFlag}". Valid options are: ${VALID_GROUP_BY_DIMENSIONS.join(", ")}`),2;let groupByDimension=groupByFlag;if(breakdownPeriod&&groupByDimension)return error("--breakdown and --group-by cannot be used together. Use one or the other."),2;let sinceDate,untilDate;try{sinceDate=sinceFlag?parseBillingDate(sinceFlag,!1):void 0,untilDate=untilFlag?parseBillingDate(untilFlag,!0):void 0}catch(err){return error(err.message),2}telemetry2.trackCliOptionSince(parsedArgs.flags["--since"]),telemetry2.trackCliOptionUntil(parsedArgs.flags["--until"]),telemetry2.trackCliOptionFrom(fromFlag),telemetry2.trackCliOptionTo(toFlag),telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]),telemetry2.trackCliFlagJson(parsedArgs.flags["--json"]),telemetry2.trackCliOptionBreakdown(breakdownFlag),telemetry2.trackCliOptionGroupBy(groupByFlag);let contextName,contextType,teamId,billingPeriod,hasPrecommitment=!1;try{let scope=await getScope(client),owner=scope.team??scope.user;contextName=scope.contextName,contextType=scope.team?"team":"personal account",teamId=scope.team?.id;let billing=owner?.billing;billingPeriod=billing?.subscriptions?.find(subscription=>subscription.frequency.interval==="month"&&subscription.frequency.intervalCount===1)?.period??billing?.period,hasPrecommitment=billing?.plan==="enterprise"||billing?.planIteration==="plus"||billing?.plan==="pro"&&billing?.planIteration==="flex"}catch(err){if((0,import_error_utils26.isErrnoException)(err)&&(err.code==="NOT_AUTHORIZED"||err.code==="TEAM_DELETED"))return error(err.message),1;throw err}let usingDefaults=!sinceFlag,fromDate=sinceDate??(billingPeriod?new Date(billingPeriod.start).toISOString():getDefaultFromDate()),toDate=untilDate??(sinceFlag?new Date().toISOString():billingPeriod?new Date(billingPeriod.end).toISOString():getDefaultToDate()),fromDisplay=sinceFlag&&!isRelativeTime(sinceFlag)?sinceFlag:extractDatePortion(fromDate),toDisplay=untilFlag&&!isRelativeTime(untilFlag)?untilFlag:extractDatePortion(toDate);debug(`Fetching dashboard usage from ${fromDate} to ${toDate}`);let start=Date.now();asJson||spinner(`Fetching usage data for ${import_chalk332.default.bold(contextName)}`);try{let query=new URLSearchParams;teamId&&query.set("teamId",teamId);let viewPlan=getCostViews(groupByDimension),queryString=query.toString(),costsRequest=client.fetch(`/v2/billing/costs${queryString?`?${queryString}`:""}`,{method:"POST",body:{from:fromDate,to:toDate,metrics:[GROSS_COST_METRIC,"quantity"],format:"timeseries",views:viewPlan.views,userAgent:"vercel-cli.usage"},useCurrentTeam:!1}),commitmentRequest=usingDefaults&&teamId&&hasPrecommitment?client.fetch(`/v1/invoices/pre-commitment-usage?teamId=${encodeURIComponent(teamId)}`,{useCurrentTeam:!1}).catch(err=>(debug(`Unable to fetch infrastructure credit: ${String(err)}`),null)):Promise.resolve(null),[response,commitmentUsage]=await Promise.all([costsRequest,commitmentRequest]),usageData=processCosts(response,{summaryView:response.results.views[viewPlan.summaryViewName],detailView:viewPlan.detailViewName?response.results.views[viewPlan.detailViewName]:void 0,contextName,contextType,scope:parsedArgs.flags["--scope"],fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension});return attachCredit(usageData,commitmentUsage),asJson?(outputJson9(client,{data:usageData,fromDate,toDate,breakdownPeriod,groupByDimension}),0):(groupByDimension?outputGroupBy({data:usageData,groupByDimension,startTime:start}):breakdownPeriod?outputBreakdown({data:usageData,breakdownPeriod,startTime:start}):outputAggregated({data:usageData,startTime:start}),0)}catch(err){return isAPIError(err)&&err.status===404&&err.code==="costs_not_found"?error(`Billing cost data is unavailable for ${fromDisplay} through ${toDisplay}. This does not mean usage was zero. It usually means the team has no active subscription for that range, or the range is before the team's billing data starts. Check that the selected team and date range are correct.`):output_manager_default.prettyError(err),1}}function roundToHundredths(value){return Math.round((value+Number.EPSILON)*100)/100}function getUsageThrough(queriedAt,toDisplay){let queriedDate=extractDatePortion(queriedAt);return queriedDate<toDisplay?queriedDate:toDisplay}function attachCredit(usageData,commitmentUsage){if(!commitmentUsage)return;let creditLedger=commitmentUsage.creditLedgers.find(ledger=>ledger.currency===usageData.costUnit);if(!creditLedger)return;let used=roundToHundredths(creditLedger.total-creditLedger.remaining);usageData.creditBalance={cadence:commitmentUsage.cadence,currency:creditLedger.currency,allocated:creditLedger.total,used,remaining:creditLedger.remaining}}function processCosts(response,options){let{summaryView,detailView,contextName,contextType,scope,fromDisplay,toDisplay,usingDefaults,breakdownPeriod,groupByDimension}=options;if(!summaryView)throw new Error("The billing API did not return the requested usage summary.");let costUnit=getCostUnit(response);if(response.availableCurrencies?.some(currency=>currency!==costUnit))throw new Error("Can't show complete costs for this date range because some costs use a different billing currency. Choose a date range within the current billing currency or view usage in the dashboard.");let products=response.results.dimensionsMeta.product?.values??{},projects2=response.results.dimensionsMeta.project?.values??{},regions=response.results.dimensionsMeta.region?.values??{};if(groupByDimension&&(!detailView||!detailView.groupBy.includes(groupByDimension)))throw new Error(`Usage cannot be grouped by ${groupByDimension} for this team.`);let services=new Map,periodUsage=new Map,groupByUsage=new Map,totalCost=0;for(let result of summaryView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses");if(addService(services,serviceName,aggregation),totalCost+=aggregation.cost,breakdownPeriod)for(let index=0;index<response.results.times.length;index++){let periodKey=getPeriodKey(response.results.times[index],breakdownPeriod),period=periodUsage.get(periodKey)??emptyAggregation(),sample=aggregateResult(result,product,serviceName,response.metrics,index,productMetadata?.category==="Subscription Licenses");addService(period.services,serviceName,sample),period.totalCost+=sample.cost,periodUsage.set(periodKey,period)}}if(groupByDimension)for(let result of detailView?.results??[]){let product=result.dimensionValues.product;if(!product)continue;let productMetadata=products[product],serviceName=productMetadata?.title??product,aggregation=aggregateResult(result,product,serviceName,response.metrics,void 0,productMetadata?.category==="Subscription Licenses"),id2=result.dimensionValues[groupByDimension],groupName=id2?(groupByDimension==="project"?projects2:regions)[id2]?.title??id2:groupByDimension==="project"?"(unattributed)":"(global)",group=groupByUsage.get(groupName)??emptyAggregation();addService(group.services,serviceName,aggregation),group.totalCost+=aggregation.cost,groupByUsage.set(groupName,group)}return{contextName,contextType,scope,fromDisplay,toDisplay,usageThrough:getUsageThrough(response.queriedAt,toDisplay),usingDefaults,costUnit,services,periodUsage,groupByUsage,totalCost}}function getCostUnit(response){let unit=response.metrics.find(metric=>metric.slug===GROSS_COST_METRIC)?.unit;return unit?.singular==="MIU"||unit?.plural==="MIUs"?"managed_infrastructure_units":"USD"}function aggregateResult(result,product,name,metrics2,sampleIndex,isSubscription=!1){let grossCostIndex=result.metrics.indexOf(GROSS_COST_METRIC),quantityIndex=result.metrics.findIndex(metric=>metric!==GROSS_COST_METRIC),quantityMetric=metrics2.find(metric=>metric.slug===result.metrics[quantityIndex]),values=sampleIndex===void 0?result.totalValue:result.values[sampleIndex]??[],cost=grossCostIndex===-1?0:values[grossCostIndex]??0,included=result.flatRate===!0,rawQuantity=quantityIndex===-1?0:values[quantityIndex]??0,quantity=isSubscription&&sampleIndex===void 0&&quantityIndex!==-1?result.values.reduce((maximum,sample)=>Math.max(maximum,sample[quantityIndex]??0),0):rawQuantity,units=getQuantityUnits(quantityMetric,product,isSubscription);return{name,product,quantity,...units,cost,included,category:isSubscription?"subscription":"usage"}}function getQuantityUnits(metric,product,isSubscription){if(isSubscription)return{unit:"licenses",singularUnit:"license"};if(!metric?.unit)return{};if(metric.unit.kind==="custom"){let singularUnit=metric.unit.singular,unit2=metric.unit.plural??singularUnit;return!unit2||singularUnit===metric.title||unit2===metric.title?{}:{unit:unit2,singularUnit}}if(metric.unit.kind==="digitalStorage"&&metric.unit.name)return{unit:metric.unit.name,unitKind:metric.unit.kind};let unit=metric.unit.name;return!unit||unit===metric.title||unit===product?{}:{unit,unitKind:metric.unit.kind}}function addService(services,name,value){let key=JSON.stringify([value.product,value.included]),existing=services.get(key);if(!existing){services.set(key,{...value,name});return}let previousQuantity=existing.quantity;existing.quantity=existing.category==="subscription"?Math.max(previousQuantity,value.quantity):previousQuantity+value.quantity,existing.cost+=value.cost}function emptyAggregation(){return{services:new Map,totalCost:0}}var VcrTelemetryClient=class extends TelemetryClient{trackCliSubcommandLs(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandConfig(actual){this.trackCliSubcommand({subcommand:"config",value:actual})}trackCliSubcommandRm(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}trackCliSubcommandLogin(actual){this.trackCliSubcommand({subcommand:"login",value:actual})}trackCliSubcommandBuild(actual){this.trackCliSubcommand({subcommand:"build",value:actual})}trackCliSubcommandPush(actual){this.trackCliSubcommand({subcommand:"push",value:actual})}trackCliArgumentEngine(value){value&&this.trackCliArgument({arg:"engine",value})}trackCliArgumentPath(value){value&&this.trackCliArgument({arg:"path",value:this.redactedValue})}trackCliArgumentName(value){value&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionPlatform(value){if(value){let known=value==="linux/amd64"||value==="linux/arm64";this.trackCliOption({option:"platform",value:known?value:this.redactedValue})}}trackCliSubcommandTag(actual){this.trackCliSubcommand({subcommand:"tag",value:actual})}trackCliSubcommandImage(actual){this.trackCliSubcommand({subcommand:"image",value:actual})}trackCliSubcommandPermissions(actual){this.trackCliSubcommand({subcommand:"permissions",value:actual})}trackCliOptionLimit(value){typeof value=="number"&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionNext(value){value&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionCursor(value){value&&this.trackCliOption({option:"cursor",value:this.redactedValue})}trackCliOptionSortBy(value){value&&this.trackCliOption({option:"sort-by",value})}trackCliOptionSortOrder(value){value&&this.trackCliOption({option:"sort-order",value})}trackCliOptionPublic(value){(value==="true"||value==="false")&&this.trackCliOption({option:"public",value})}trackCliFlagUntagged(value){value&&this.trackCliFlag("untagged")}trackCliFlagYes(value){value&&this.trackCliFlag("yes")}trackCliFlagPush(value){value&&this.trackCliFlag("push")}};var COMMAND_CONFIG69={ls:getCommandAliases(listSubcommand26),inspect:getCommandAliases(inspectSubcommand14),add:getCommandAliases(addSubcommand13),config:getCommandAliases(configSubcommand),rm:getCommandAliases(removeSubcommand16),login:getCommandAliases(loginSubcommand),build:getCommandAliases(buildSubcommand),push:getCommandAliases(pushSubcommand),tag:getCommandAliases(tagsAggregateCommand),image:getCommandAliases(imageAggregateCommand),permissions:getCommandAliases(permissionsAggregateCommand)};async function vcr(client){let telemetry2=new VcrTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(vcrCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let{subcommand,args,subcommandOriginal}=getSubcommand7(parsedArgs.args.slice(1),COMMAND_CONFIG69),needHelp=parsedArgs.flags["--help"];function printHelp(command2){output_manager_default.print(help(command2,{parent:vcrCommand,columns:client.stderr.columns}))}if(needHelp)switch(subcommand){case"ls":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(listSubcommand26),0;case"inspect":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(inspectSubcommand14),0;case"add":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(addSubcommand13),0;case"config":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(configSubcommand),0;case"rm":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(removeSubcommand16),0;case"login":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(loginSubcommand),0;case"build":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(buildSubcommand),0;case"push":return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),printHelp(pushSubcommand),0;case"tag":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(tagsLsSubcommand),0):nested==="inspect"||nested==="get"?(printHelp(tagsInspectSubcommand),0):(printHelp(tagsAggregateCommand),0)}case"image":{telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args[0];return nested==="ls"||nested==="list"?(printHelp(imageLsSubcommand),0):nested==="inspect"||nested==="get"?(printHelp(imageInspectSubcommand),0):nested==="rm"||nested==="remove"||nested==="delete"?(printHelp(imageRmSubcommand),0):(printHelp(imageAggregateCommand),0)}case"permissions":{let printPermissionsActionHelp2=function(command2){output_manager_default.print(help(command2,{parent:{...vcrCommand,name:"vcr permissions repository"},columns:client.stderr.columns}))};var printPermissionsActionHelp=printPermissionsActionHelp2;telemetry2.trackCliFlagHelp("vcr",subcommandOriginal);let nested=args.slice(0,2),hasAction=aliases2=>nested.some(arg2=>arg2!==void 0&&aliases2.includes(arg2));return hasAction(PERMISSIONS_ACTIONS.ls)?(printPermissionsActionHelp2(permissionsLsSubcommand),0):hasAction(PERMISSIONS_ACTIONS.add)?(printPermissionsActionHelp2(permissionsAddSubcommand),0):hasAction(PERMISSIONS_ACTIONS.rm)?(printPermissionsActionHelp2(permissionsRmSubcommand),0):hasAction(PERMISSIONS_ACTIONS.clear)?(printPermissionsActionHelp2(permissionsClearSubcommand),0):(printHelp(permissionsAggregateCommand),0)}default:return telemetry2.trackCliFlagHelp("vcr",subcommandOriginal),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),0}switch(subcommand){case"ls":return telemetry2.trackCliSubcommandLs(subcommandOriginal),(await import("./chunks/ls-TE7BAMHR.js")).default(client,args,telemetry2);case"inspect":return telemetry2.trackCliSubcommandInspect(subcommandOriginal),(await import("./chunks/inspect-SEGNEPGI.js")).default(client,args,telemetry2);case"add":return telemetry2.trackCliSubcommandCreate(subcommandOriginal),(await import("./chunks/add-QKGWNVQS.js")).default(client,args,telemetry2);case"config":return telemetry2.trackCliSubcommandConfig(subcommandOriginal),(await import("./chunks/config-Y3JEZPVK.js")).default(client,args,telemetry2);case"rm":return telemetry2.trackCliSubcommandRm(subcommandOriginal),(await import("./chunks/rm-BYOBKSWY.js")).default(client,args,telemetry2);case"login":return telemetry2.trackCliSubcommandLogin(subcommandOriginal),(await import("./chunks/login-K6VYVJPS.js")).default(client,args,telemetry2);case"build":return telemetry2.trackCliSubcommandBuild(subcommandOriginal),(await import("./chunks/build-SD6SLRK7.js")).default(client,telemetry2);case"push":return telemetry2.trackCliSubcommandPush(subcommandOriginal),(await import("./chunks/push-PBKUSKXQ.js")).default(client,telemetry2);case"tag":return telemetry2.trackCliSubcommandTag(subcommandOriginal),(await import("./chunks/tags-P5GB7HTF.js")).default(client,args,telemetry2);case"image":return telemetry2.trackCliSubcommandImage(subcommandOriginal),(await import("./chunks/image-6KIQRC65.js")).default(client,args,telemetry2);case"permissions":return telemetry2.trackCliSubcommandPermissions(subcommandOriginal),(await import("./chunks/permissions-2WMWMXFP.js")).default(client,args,telemetry2);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG69)),output_manager_default.print(help(vcrCommand,{columns:client.stderr.columns})),2}}var import_ms44=__toESM(require_ms(),1),import_chalk333=__toESM(require_source(),1),import_pluralize28=__toESM(require_pluralize(),1);async function getWebhooks(client){let response=await client.fetch("/v1/webhooks");return Array.isArray(response)?{webhooks:response}:response}var WebhooksLsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function ls11(client,argv){let telemetry2=new WebhooksLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand30.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,validationResult=validateLsArgs({commandName:"webhooks ls",args,maxArgs:0,exitCode:2});if(validationResult!==0)return validationResult;telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive,contextName=await getContextName(client),lsStamp=stamp_default();client.nonInteractive||output_manager_default.spinner(`Fetching Webhooks under ${import_chalk333.default.bold(contextName)}`);let{webhooks}=await getWebhooks(client);if(asJson){output_manager_default.stopSpinner();let webhooksList=webhooks.map(webhook=>({id:webhook.id,url:webhook.url,events:webhook.events,projectIds:webhook.projectIds,createdAt:webhook.createdAt,updatedAt:webhook.updatedAt})),jsonOutput=client.nonInteractive?{status:AGENT_STATUS.OK,webhooks:webhooksList,message:`${webhooks.length} webhook(s) found.`,next:[{command:getCommandNamePlain("webhooks inspect <id>"),when:"Inspect a webhook"}]}:{webhooks:webhooksList};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
1499
1499
|
`)}else output_manager_default.log(`${(0,import_pluralize28.default)("Webhook",webhooks.length,!0)} found under ${import_chalk333.default.bold(contextName)} ${import_chalk333.default.gray(lsStamp())}`),webhooks.length>0&&(output_manager_default.print(formatWebhooksTable(webhooks).replace(/^(.*)/gm,`${" ".repeat(1)}$1`)),output_manager_default.print(`
|
|
1500
1500
|
|
|
1501
1501
|
`));return 0}function formatWebhooksTable(webhooks){let current=Date.now(),rows=webhooks.map(webhook=>{let age=webhook.createdAt?(0,import_ms44.default)(current-webhook.createdAt):"-",eventsDisplay=webhook.events.length>2?`${webhook.events.slice(0,2).join(", ")} +${webhook.events.length-2}`:webhook.events.join(", ");return[webhook.id,webhook.url,eventsDisplay,import_chalk333.default.gray(age)]});return formatTable(["ID","URL","Events","Age"],["l","l","l","l"],[{rows}])}var import_chalk334=__toESM(require_source(),1);var WebhooksGetTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id2){id2&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionFormat(format3){format3&&this.trackCliOption({option:"format",value:format3})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function get6(client,argv){let telemetry2=new WebhooksGetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(getSubcommand6.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[webhookId]=args,getStamp=stamp_default();if(!webhookId)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"missing_id",message:"Webhook ID is required. Provide ID as the first argument.",next:[{command:getCommandNamePlain("webhooks ls")},{command:getCommandNamePlain("webhooks inspect <id>")}]},2),output_manager_default.error(`${getCommandName("webhooks inspect <id>")} expects one argument`),2;telemetry2.trackCliArgumentId(webhookId),telemetry2.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput||client.nonInteractive;if(args.length!==1)return output_manager_default.error(`Invalid number of arguments. Usage: ${import_chalk334.default.cyan(`${getCommandName("webhooks inspect <id>")}`)}`),2;output_manager_default.debug("Fetching webhook info");let contextName=await getContextName(client);client.nonInteractive||output_manager_default.spinner(`Fetching Webhook ${webhookId} under ${import_chalk334.default.bold(contextName)}`);let webhook;try{webhook=await getWebhook(client,webhookId)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"webhook_not_found",message:`Webhook not found: ${webhookId}.`,next:[{command:getCommandNamePlain("webhooks ls")}]},1),output_manager_default.error(`Webhook not found: ${webhookId}`),output_manager_default.log(`Run ${getCommandName("webhooks ls")} to see your webhooks.`),1;throw err}if(asJson){output_manager_default.stopSpinner();let jsonOutput=client.nonInteractive?{status:"ok",webhook,message:`Webhook ${webhookId} found.`,next:[{command:getCommandNamePlain(`webhooks rm ${webhookId} --yes`),when:"Remove this webhook"}]}:webhook;client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
package/dist/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = "63.0.
|
|
1
|
+
export const version = "63.0.2";
|
|
2
2
|
export const buildLabel = "";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vercel",
|
|
3
|
-
"version": "63.0.
|
|
3
|
+
"version": "63.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"preferGlobal": true,
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -36,12 +36,12 @@
|
|
|
36
36
|
"uuid": "14.0.1",
|
|
37
37
|
"zod": "4.1.11",
|
|
38
38
|
"@vercel/backends": "18.0.0",
|
|
39
|
-
"@vercel/build-utils": "14.20.0",
|
|
40
|
-
"@vercel/cli-config": "0.3.1",
|
|
41
39
|
"@vercel/cli-auth": "0.3.10",
|
|
42
|
-
"@vercel/
|
|
40
|
+
"@vercel/cli-config": "0.3.1",
|
|
43
41
|
"@vercel/detect-agent": "1.2.5",
|
|
42
|
+
"@vercel/container": "18.0.0",
|
|
44
43
|
"@vercel/elysia": "18.0.0",
|
|
44
|
+
"@vercel/build-utils": "14.20.0",
|
|
45
45
|
"@vercel/express": "18.0.0",
|
|
46
46
|
"@vercel/fastify": "18.0.0",
|
|
47
47
|
"@vercel/go": "21.0.0",
|
|
@@ -209,25 +209,25 @@
|
|
|
209
209
|
"yauzl-promise": "2.1.3",
|
|
210
210
|
"@vercel-internals/builder-orchestration": "1.0.17",
|
|
211
211
|
"@vercel-internals/cli-builder-integration": "1.0.20",
|
|
212
|
-
"@vercel-internals/constants": "1.0.4",
|
|
213
|
-
"@vercel-internals/local-schedules": "0.0.4",
|
|
214
212
|
"@vercel-internals/get-package-json": "1.0.0",
|
|
213
|
+
"@vercel-internals/local-schedules": "0.0.4",
|
|
215
214
|
"@vercel-internals/runtimes": "1.1.13",
|
|
216
215
|
"@vercel-internals/service-topology": "1.0.16",
|
|
217
216
|
"@vercel-internals/types": "3.0.21",
|
|
217
|
+
"@vercel/error-utils": "2.2.1",
|
|
218
218
|
"@vercel/client": "18.8.1",
|
|
219
219
|
"@vercel/frameworks": "3.35.0",
|
|
220
|
-
"@vercel/
|
|
220
|
+
"@vercel/fs-detectors": "7.9.5",
|
|
221
221
|
"@vercel/routing-utils": "6.6.0",
|
|
222
|
-
"@vercel/
|
|
222
|
+
"@vercel-internals/constants": "1.0.4"
|
|
223
223
|
},
|
|
224
224
|
"optionalDependencies": {
|
|
225
|
-
"@vercel/vc-native-darwin-arm64": "63.0.
|
|
226
|
-
"@vercel/vc-native-darwin-x64": "63.0.
|
|
227
|
-
"@vercel/vc-native-linux-arm64": "63.0.
|
|
228
|
-
"@vercel/vc-native-linux-x64": "63.0.
|
|
229
|
-
"@vercel/vc-native-win32-arm64": "63.0.
|
|
230
|
-
"@vercel/vc-native-win32-x64": "63.0.
|
|
225
|
+
"@vercel/vc-native-darwin-arm64": "63.0.2",
|
|
226
|
+
"@vercel/vc-native-darwin-x64": "63.0.2",
|
|
227
|
+
"@vercel/vc-native-linux-arm64": "63.0.2",
|
|
228
|
+
"@vercel/vc-native-linux-x64": "63.0.2",
|
|
229
|
+
"@vercel/vc-native-win32-arm64": "63.0.2",
|
|
230
|
+
"@vercel/vc-native-win32-x64": "63.0.2"
|
|
231
231
|
},
|
|
232
232
|
"scripts": {
|
|
233
233
|
"test": "node scripts/test.mjs --run",
|