vercel 60.1.3 → 61.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{add-QJSYPE26.js → add-I5N2DAIP.js} +1 -1
- package/dist/chunks/{add-5INBQVKB.js → add-KKZS2KRG.js} +1 -1
- package/dist/chunks/{add-IEQXYKXU.js → add-NLTAYU5Z.js} +1 -1
- package/dist/chunks/{build-Z7KM3GMP.js → build-V6DQKDOO.js} +1 -1
- package/dist/chunks/chunk-23NBYS6R.js +36 -0
- package/dist/chunks/{chunk-TAG2AZXS.js → chunk-2JRC4QJO.js} +1 -1
- package/dist/chunks/{chunk-YXBDDHPL.js → chunk-2VAKGA3F.js} +1 -1
- package/dist/chunks/{chunk-E3EJLJFQ.js → chunk-2XUWYQ5P.js} +1 -1
- package/dist/chunks/{chunk-QLS2XUFL.js → chunk-4GA73K74.js} +1 -1
- package/dist/chunks/{chunk-3MVT26LH.js → chunk-4KJZA5JH.js} +1 -1
- package/dist/chunks/{chunk-IS43O66T.js → chunk-57DOAKMY.js} +1 -1
- package/dist/chunks/{chunk-DV4Z4WSD.js → chunk-5BQ25PMQ.js} +1 -1
- package/dist/chunks/{chunk-KOOED3TJ.js → chunk-6FHZ2IVO.js} +2 -2
- package/dist/chunks/{chunk-CN4SCEIP.js → chunk-BFHLAM7O.js} +1 -1
- package/dist/chunks/{chunk-UO2ECTIU.js → chunk-BN3XAVPG.js} +1 -1
- package/dist/chunks/{chunk-OCWSKPV4.js → chunk-DT3EUC6S.js} +2 -2
- package/dist/chunks/{chunk-FZKWLGRG.js → chunk-EMDAZAWN.js} +1 -1
- package/dist/chunks/{chunk-M5Y335WI.js → chunk-FYRK4GX7.js} +1 -1
- package/dist/chunks/{chunk-GL7HB5ZK.js → chunk-GBWSLOL5.js} +1 -1
- package/dist/chunks/{chunk-LAYFSD5A.js → chunk-GIIG5KNF.js} +1 -1
- package/dist/chunks/{chunk-BHVHQKUZ.js → chunk-HQZXUIZY.js} +1 -1
- package/dist/chunks/chunk-IMN3Z3VV.js +9 -0
- package/dist/chunks/{chunk-V54UKUGF.js → chunk-JS5WLQ6E.js} +1 -1
- package/dist/chunks/{chunk-B6PMTBCU.js → chunk-KEVHEKQZ.js} +1 -1
- package/dist/chunks/{chunk-QVAZWF3J.js → chunk-KRQNSFGI.js} +1 -1
- package/dist/chunks/{chunk-7CTHRXTG.js → chunk-OEICO6OI.js} +1 -1
- package/dist/chunks/{chunk-NR367IWV.js → chunk-OTP26MC7.js} +1 -1
- package/dist/chunks/{chunk-D2ZPYXZ6.js → chunk-OVOQNHSJ.js} +1 -1
- package/dist/chunks/{chunk-HJ3E752K.js → chunk-P33CQ5CD.js} +1 -1
- package/dist/chunks/{chunk-TTMLSKF7.js → chunk-Q5CKKVCX.js} +1 -1
- package/dist/chunks/{chunk-YXTE2H6I.js → chunk-QFXHS36S.js} +1 -1
- package/dist/chunks/{chunk-UFZ4W2PA.js → chunk-RAQCLWCR.js} +1 -1
- package/dist/chunks/{chunk-BEGUGOL7.js → chunk-RBJ4IMRF.js} +1 -1
- package/dist/chunks/{chunk-LFQTA3CF.js → chunk-ROQLVSZT.js} +1 -1
- package/dist/chunks/{chunk-VCB6KNW3.js → chunk-S3ZJ6ZBN.js} +1 -1
- package/dist/chunks/{chunk-JM3BFUXX.js → chunk-SCNNUBUE.js} +1 -1
- package/dist/chunks/{chunk-25LSRUTF.js → chunk-SIRSBEOT.js} +1 -1
- package/dist/chunks/{chunk-JZUVWAOK.js → chunk-SZJLH6TE.js} +2 -2
- package/dist/chunks/{chunk-U6AYMUHX.js → chunk-TB4CAJ7K.js} +2 -2
- package/dist/chunks/{chunk-MDZ2JJP3.js → chunk-TDR4D3EL.js} +3 -3
- package/dist/chunks/{chunk-TTKDYUJD.js → chunk-TKNV5ONT.js} +3 -3
- package/dist/chunks/{chunk-H4FTGLWV.js → chunk-USSZAG2L.js} +1 -1
- package/dist/chunks/{chunk-WH6M54KF.js → chunk-WOFE2X43.js} +3 -3
- package/dist/chunks/{chunk-RMYQX7NP.js → chunk-XF4GWZT2.js} +1 -1
- package/dist/chunks/{chunk-3HLNS2I4.js → chunk-Y7TY3VO2.js} +3 -3
- package/dist/chunks/{chunk-CVKB54WW.js → chunk-YBXO6YRZ.js} +1 -1
- package/dist/chunks/{chunk-R7ZRVA7E.js → chunk-YTUFUBDL.js} +7 -5
- package/dist/chunks/{clear-AZWSIGIF.js → clear-FP53TC7K.js} +1 -1
- package/dist/chunks/{compile-vercel-config-56X2X4Z3.js → compile-vercel-config-EVBLB7VS.js} +1 -1
- package/dist/chunks/{config-A53AXEGB.js → config-5Q37O5JW.js} +1 -1
- package/dist/chunks/{config-NGVEJABO.js → config-L2HMQKZN.js} +1 -1
- package/dist/chunks/{delete-TA6UVDSJ.js → delete-F75LDVGB.js} +1 -1
- package/dist/chunks/{delete-LX44AJYC.js → delete-UAJRL4OB.js} +1 -1
- package/dist/chunks/{detect-projects-LEVGWMQE.js → detect-projects-325QE23N.js} +1 -1
- package/dist/chunks/{detect-services-KO3GQ2ZK.js → detect-services-XZEOFBIS.js} +1 -1
- package/dist/chunks/{disable-E7TU3QIX.js → disable-F22ULQBR.js} +1 -1
- package/dist/chunks/{discard-SVF5HBYG.js → discard-RTIHE562.js} +1 -1
- package/dist/chunks/{edit-VCOF42GW.js → edit-A2YLMFJY.js} +1 -1
- package/dist/chunks/{edit-2RLFRAOJ.js → edit-OQYEMSTW.js} +1 -1
- package/dist/chunks/{enable-H6RL2XIW.js → enable-PQE7IYLJ.js} +1 -1
- package/dist/chunks/{export-JW3FFP7N.js → export-MXCHIXRP.js} +1 -1
- package/dist/chunks/{future-IGDV62BF.js → future-EJDVAUMH.js} +1 -1
- package/dist/chunks/{generate-cert-for-deploy-25UQ2477.js → generate-cert-for-deploy-CORREIMU.js} +1 -1
- package/dist/chunks/{image-MHAVMOJB.js → image-IWWMC6OL.js} +1 -1
- package/dist/chunks/{import-builders-5UODCCVF.js → import-builders-ZBNF3EDI.js} +1 -1
- package/dist/chunks/{inspect-KBJ7F64J.js → inspect-BRSK7FWE.js} +1 -1
- package/dist/chunks/{inspect-LIGFVYDM.js → inspect-CQAFY6OA.js} +1 -1
- package/dist/chunks/{inspect-HJF2XFBX.js → inspect-L6XPIN4I.js} +1 -1
- package/dist/chunks/{inspect-43UJHR4K.js → inspect-PCDAOGYE.js} +1 -1
- package/dist/chunks/{inspect-VETXDYUD.js → inspect-QPEB2PYJ.js} +1 -1
- package/dist/chunks/{list-EGYYRTG5.js → list-HBPNOZ36.js} +1 -1
- package/dist/chunks/{list-KAGIR3PD.js → list-MHFZCZLT.js} +1 -1
- package/dist/chunks/{list-NAABRL7N.js → list-UNOHMSYJ.js} +1 -1
- package/dist/chunks/{login-MZ67I5ZB.js → login-4RTE52M4.js} +1 -1
- package/dist/chunks/{login-X3KPMMEP.js → login-GZEBYAAZ.js} +1 -1
- package/dist/chunks/{logs-GHHH2DZA.js → logs-OCIAVVYS.js} +1 -1
- package/dist/chunks/{ls-7JFKEA5P.js → ls-4IBSWNBN.js} +1 -1
- package/dist/chunks/{ls-MMA5XS6S.js → ls-CDMZQWTZ.js} +1 -1
- package/dist/chunks/{ls-GOLB26ER.js → ls-CR7MEDCH.js} +1 -1
- package/dist/chunks/{ls-YA4OQL3F.js → ls-GCIPXWXQ.js} +1 -1
- package/dist/chunks/{ls-JHJPWFMF.js → ls-KYR3NKYY.js} +1 -1
- package/dist/chunks/{ls-UAQ2QDGG.js → ls-MZV54WLV.js} +1 -1
- package/dist/chunks/{ls-QXEB3MBD.js → ls-XI2PIZR4.js} +1 -1
- package/dist/chunks/{mutate-AJYMI5UB.js → mutate-KROV5RBJ.js} +1 -1
- package/dist/chunks/{notifications-DKZMDRHS.js → notifications-5CF5744G.js} +1 -1
- package/dist/chunks/{open-L5DJKOV4.js → open-JSSJIIAC.js} +1 -1
- package/dist/chunks/{openapi-7JUPKBWV.js → openapi-SEMT6PBJ.js} +1 -1
- package/dist/chunks/{permissions-BRSVLT6O.js → permissions-OIMJWVL6.js} +1 -1
- package/dist/chunks/{prompt-missing-credentials-PPUSNDNC.js → prompt-missing-credentials-QCUYKCHH.js} +1 -1
- package/dist/chunks/{publish-PXKC5GXE.js → publish-LY3THAIP.js} +1 -1
- package/dist/chunks/{pull-ZBELCNJJ.js → pull-CULSXHFY.js} +1 -1
- package/dist/chunks/{purchase-domain-if-available-BI7AHJMX.js → purchase-domain-if-available-FFNNBECE.js} +1 -1
- package/dist/chunks/{push-G4JYPC5S.js → push-YEQRRX7B.js} +1 -1
- package/dist/chunks/{query-JGUDFRPJ.js → query-IRNHCI3O.js} +1 -1
- package/dist/chunks/{reauthenticate-DIFJZWC5.js → reauthenticate-7HYVS7DU.js} +1 -1
- package/dist/chunks/{reorder-VTFBS2DW.js → reorder-DSBV4PC7.js} +1 -1
- package/dist/chunks/{reply-HXGAMNR6.js → reply-WEUR5QKT.js} +1 -1
- package/dist/chunks/{resolve-IGQSKGRI.js → resolve-KEPX7J5A.js} +1 -1
- package/dist/chunks/{resolve-deployment-framework-preset-XF3NJIDS.js → resolve-deployment-framework-preset-QEPJNWVF.js} +1 -1
- package/dist/chunks/{restore-XKLJMOKB.js → restore-YW2G6UVL.js} +1 -1
- package/dist/chunks/{rm-DTF2JN5L.js → rm-6TV3ABUA.js} +1 -1
- package/dist/chunks/{rm-DL7NRDLF.js → rm-CYZTYWOW.js} +1 -1
- package/dist/chunks/{rm-SQM4TQOV.js → rm-NUUHW6XI.js} +1 -1
- package/dist/chunks/{rm-C2OYOAJY.js → rm-RJ7FOO54.js} +1 -1
- package/dist/chunks/{rm-3REOGKTJ.js → rm-TP5O3DFW.js} +1 -1
- package/dist/chunks/{rule-inspect-PQUJOWHR.js → rule-inspect-OVUBNDW6.js} +1 -1
- package/dist/chunks/{rules-IX7WN6XW.js → rules-B2XF44SN.js} +1 -1
- package/dist/chunks/{schema-WFKR7ULE.js → schema-5XTHUY2F.js} +1 -1
- package/dist/chunks/{schema-R2J4TS6Q.js → schema-O7WKXTFS.js} +1 -1
- package/dist/chunks/{set-763MJP2G.js → set-JQ5LDT2W.js} +1 -1
- package/dist/chunks/{setup-and-link-57NI3GOM.js → setup-and-link-NEEWO4NE.js} +1 -1
- package/dist/chunks/{tags-FE4GVQQO.js → tags-M6DJBEV4.js} +1 -1
- package/dist/chunks/{types-UYIFBCCL.js → types-F6SLL27E.js} +1 -1
- package/dist/chunks/{update-27EMACWZ.js → update-YP44NRTW.js} +1 -1
- package/dist/chunks/{vlt-builder-importer-QEWS6M2P.js → vlt-builder-importer-W63QEXYX.js} +2 -2
- package/dist/commands/build/index.js +1 -1
- package/dist/commands/deploy/index.js +9 -9
- package/dist/commands/dev/index.js +2 -2
- package/dist/commands/env/index.js +1 -1
- package/dist/commands/link/index.js +1 -1
- package/dist/commands/list/index.js +1 -1
- package/dist/commands-bulk.js +30 -24
- package/dist/index.js +2 -2
- package/dist/version.mjs +1 -1
- package/package.json +60 -60
- package/dist/chunks/chunk-KK4AJES5.js +0 -36
- package/dist/chunks/chunk-N5AIKGEO.js +0 -9
|
@@ -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{sleep}from"./chunk-T3GQAMBJ.js";import{stamp_default}from"./chunk-XPXOV5UO.js";import{param}from"./chunk-SXUEGVWB.js";import{getScope}from"./chunk-
|
|
7
|
+
import{sleep}from"./chunk-T3GQAMBJ.js";import{stamp_default}from"./chunk-XPXOV5UO.js";import{param}from"./chunk-SXUEGVWB.js";import{getScope}from"./chunk-ROQLVSZT.js";import{require_pluralize}from"./chunk-TKNV5ONT.js";import{APIError,DomainNotAvailable,DomainNotFound,DomainPaymentError,InvalidDomain,TLDNotSupportedViaCLI,UnexpectedDomainPurchaseError,UnsupportedTLD,UserAborted,isAPIError}from"./chunk-RINZXCDJ.js";import{eraseLines,output_manager_default}from"./chunk-EWWFNMPZ.js";import{require_source}from"./chunk-U7KCDTCH.js";import{__toESM}from"./chunk-6L236MNA.js";var import_chalk2=__toESM(require_source(),1),import_pluralize=__toESM(require_pluralize(),1);async function getDomainPrice(client,name){try{return await client.fetch(`/v1/registrar/domains/${name}/price`)}catch(err){if(isAPIError(err)){if(err.code==="tld_not_supported")return new UnsupportedTLD(name);if(err.status<500)return err}throw err}}async function getDomainStatus(client,domain){return client.fetch(`/v1/registrar/domains/${encodeURIComponent(domain)}/availability`)}async function getOrder(client,orderId){let{team}=await getScope(client),teamParam=team?`?teamId=${team.slug}`:"";try{return await client.fetch(`/v1/registrar/orders/${orderId}${teamParam}`)}catch(err){if(isAPIError(err)){if(err.code==="not_found")return null;if(err.status<500)return err}throw err}}var pollForOrder=async(client,orderId,timeoutMs=1e4)=>{let startTime=Date.now();for(;Date.now()-startTime<timeoutMs;){let order=await getOrder(client,orderId);if(order!==null&&(order.status==="completed"||order.status==="failed"))return order;await sleep(500)}return null};var import_chalk=__toESM(require_source(),1);async function getDomain(client,contextName,domainName){output_manager_default.spinner(`Fetching domain ${domainName} under ${import_chalk.default.bold(contextName)}`);try{let{domain}=await client.fetch(`/v5/domains/${domainName}`);return domain}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}async function purchaseDomain(client,name,expectedPrice,years,autoRenew=!0,contactInformation){let{team,contextName}=await getScope(client),teamParam=team?`?teamId=${team.slug}`:"";try{let{orderId}=await client.fetch(`/v1/registrar/domains/${name}/buy${teamParam}`,{body:{expectedPrice,autoRenew,years,contactInformation},method:"POST"}),order=await pollForOrder(client,orderId);if(order===null)return new UnexpectedDomainPurchaseError(name);if(order.status==="completed"&&order.domains.find(domain2=>domain2.domainName===name)?.status==="completed"){let domain2=await getDomain(client,contextName,name);if(domain2 instanceof APIError)throw domain2;return domain2}return order.error?.code==="payment-failed"?new DomainPaymentError:new UnexpectedDomainPurchaseError(name)}catch(err){if(isAPIError(err)){if(err.code==="invalid_domain")return new InvalidDomain(name);if(err.code==="domain_not_available")return new DomainNotAvailable(name);if(err.code==="internal_server_error")return new UnexpectedDomainPurchaseError(name);if(err.code==="tld_not_supported")return new UnsupportedTLD(name);if(err.code==="additional_contact_info_required")return new TLDNotSupportedViaCLI(name)}throw err}}async function collectContactInformation(client){output_manager_default.log(""),output_manager_default.log("Please provide contact information for domain registration:");let firstName=await client.input.text({message:"First name:",validate:val=>val.length>0||"First name is required"}),lastName=await client.input.text({message:"Last name:",validate:val=>val.length>0||"Last name is required"}),email=await client.input.text({message:"Email:",validate:val=>val.length===0?"Email is required":/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val)?!0:"Invalid email format"}),phone=await client.input.text({message:"Phone (include country code, e.g., +15551234567):",validate:val=>val.length===0?"Phone is required":/^\+\d{10,15}$/.test(val)?!0:"Phone must start with + and contain 10-15 digits"}),address1=await client.input.text({message:"Address:",validate:val=>val.length>0||"Address is required"}),city=await client.input.text({message:"City:",validate:val=>val.length>0||"City is required"}),state=await client.input.text({message:"State/Province:",validate:val=>val.length>0||"State/Province is required"}),zip=await client.input.text({message:"Postal/ZIP code:",validate:val=>val.length>0||"Postal/ZIP code is required"}),country=await client.input.text({message:"Country code (2 letters, e.g., US):",validate:val=>val.length===0?"Country code is required":/^[A-Z]{2}$/i.test(val)?!0:"Country code must be 2 letters"}),companyName=await client.input.text({message:"Company name (optional):"});return{firstName,lastName,email,phone,address1,city,state,zip,country:country.toUpperCase(),companyName:companyName||void 0}}var isTTY=process.stdout.isTTY;async function purchaseDomainIfAvailable(client,domain,contextName){output_manager_default.spinner(`Checking status of ${import_chalk2.default.bold(domain)}`);let buyDomainStamp=stamp_default(),{available}=await getDomainStatus(client,domain);if(available){if(!isTTY)return new DomainNotFound(domain);output_manager_default.debug(`Domain ${domain} is available to be purchased`);let domainPrice=await getDomainPrice(client,domain).finally(()=>{output_manager_default.stopSpinner()});if(domainPrice instanceof UnsupportedTLD)return domainPrice;if(domainPrice instanceof Error)throw domainPrice;let{purchasePrice,years}=domainPrice;if(purchasePrice===null)return output_manager_default.error(`The domain ${param(domain)} is ${import_chalk2.default.underline("unavailable")}! ${buyDomainStamp()}`),new DomainNotAvailable(domain);if(output_manager_default.log(`Domain not found, but you can buy it under ${import_chalk2.default.bold(contextName)}! ${buyDomainStamp()}`),!await client.input.confirm(`Buy ${import_chalk2.default.underline(domain)} for ${import_chalk2.default.bold(`$${purchasePrice}`)} (${(0,import_pluralize.default)("yr",years,!0)})?`,!1))return output_manager_default.print(eraseLines(1)),new UserAborted;output_manager_default.print(eraseLines(1));let contactInformation=await collectContactInformation(client),result=await purchaseDomain(client,domain,purchasePrice,years,!0,contactInformation);return result instanceof Error?result:!0}return output_manager_default.debug(`Domain ${domain} is not available to be purchased`),!1}export{getDomainPrice,getDomainStatus,pollForOrder,purchaseDomain,collectContactInformation,purchaseDomainIfAvailable};
|
|
@@ -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{require_lib}from"./chunk-
|
|
7
|
+
import{require_lib}from"./chunk-TKNV5ONT.js";import{humanizePath}from"./chunk-PPCFQQSU.js";import{output_manager_default}from"./chunk-EWWFNMPZ.js";import{require_source}from"./chunk-U7KCDTCH.js";import{__toESM}from"./chunk-6L236MNA.js";var import_fs_extra=__toESM(require_lib(),1),import_chalk=__toESM(require_source(),1);import{homedir}from"os";import{resolve,sep}from"path";async function validateRootDirectory(cwd,path,errorSuffix=""){let pathStat=await(0,import_fs_extra.lstat)(path).catch(()=>null),suffix=errorSuffix?` ${errorSuffix}`:"";if(!pathStat)return output_manager_default.error(`The provided path ${import_chalk.default.cyan(`\u201C${humanizePath(path)}\u201D`)} does not exist.${suffix}`),!1;if(!pathStat.isDirectory())return output_manager_default.error(`The provided path ${import_chalk.default.cyan(`\u201C${humanizePath(path)}\u201D`)} is a file, but expected a directory.${suffix}`),!1;let base=resolve(cwd),target=resolve(path);return target!==base&&!target.startsWith(base+sep)?(output_manager_default.error(`The provided path ${import_chalk.default.cyan(`\u201C${humanizePath(path)}\u201D`)} is outside of the project.${suffix}`),!1):!0}async function validatePaths(client,paths){if(paths.length>1)return output_manager_default.error("Can't deploy more than one path."),{valid:!1,exitCode:1};let path=paths[0],pathStat=await(0,import_fs_extra.lstat)(path).catch(()=>null);return pathStat?pathStat.isDirectory()?path===homedir()&&!await client.input.confirm("You are deploying your home directory. Do you want to continue?",!1)?(output_manager_default.print(`Canceled
|
|
8
8
|
`),{valid:!1,exitCode:0}):{valid:!0,path}:(output_manager_default.prettyError({message:"Support for single file deployments has been removed.",link:"https://vercel.link/no-single-file-deployments"}),{valid:!1,exitCode:1}):(output_manager_default.error(`Could not find ${import_chalk.default.cyan(`\u201C${humanizePath(path)}\u201D`)}`),{valid:!1,exitCode:1})}export{validateRootDirectory,validatePaths};
|
|
@@ -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{VERCEL_CONFIG_EXTENSIONS,VERCEL_DIR}from"./chunk-
|
|
7
|
+
import{VERCEL_CONFIG_EXTENSIONS,VERCEL_DIR}from"./chunk-TKNV5ONT.js";import{ConflictingConfigFiles,DeprecatedNowJson}from"./chunk-RINZXCDJ.js";import{output_manager_default,require_build_utils}from"./chunk-EWWFNMPZ.js";import{__commonJS,__require,__toESM}from"./chunk-6L236MNA.js";var require_main=__commonJS({"../../node_modules/.pnpm/dotenv@4.0.0/node_modules/dotenv/lib/main.js"(exports,module){"use strict";var fs=__require("fs");function parse(src){var obj={};return src.toString().split(`
|
|
8
8
|
`).forEach(function(line){var keyValueArr=line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/);if(keyValueArr!=null){var key=keyValueArr[1],value=keyValueArr[2]?keyValueArr[2]:"",len=value?value.length:0;len>0&&value.charAt(0)==='"'&&value.charAt(len-1)==='"'&&(value=value.replace(/\\n/gm,`
|
|
9
9
|
`)),value=value.replace(/(^['"]|['"]$)/g,"").trim(),obj[key]=value}}),obj}function config(options){var path=".env",encoding="utf8";options&&(options.path&&(path=options.path),options.encoding&&(encoding=options.encoding));try{var parsedObj=parse(fs.readFileSync(path,{encoding}));return Object.keys(parsedObj).forEach(function(key){process.env[key]=process.env[key]||parsedObj[key]}),{parsed:parsedObj}}catch(e){return{error:e}}}module.exports.config=config;module.exports.load=config;module.exports.parse=parse}});var import_dotenv=__toESM(require_main(),1);import{mkdir,readFile,writeFile,unlink,access}from"fs/promises";import{join,basename}from"path";import{fork}from"child_process";async function loadEsbuild(){let nativeLoader=Reflect.get(globalThis,Symbol.for("vercel.cli.loadEsbuild"));return typeof nativeLoader=="function"?nativeLoader():import("esbuild")}var import_build_utils=__toESM(require_build_utils(),1);function toRouteFormat(item){if("src"in item)return item;let{source,destination,headers,statusCode,permanent,...rest}=item,route={src:source,...rest};return destination&&(route.dest=destination),headers&&(route.headers=Object.fromEntries(headers.map(h=>[h.key,h.value]))),statusCode!==void 0?route.status=statusCode:permanent!==void 0&&(route.status=permanent?308:307),route}function normalizeConfig(config){let normalized={...config},{rewrites,redirects,headers}=normalized,allRoutes=normalized.routes||[],hasRoutes=allRoutes.length>0,hasRewrites=(rewrites?.length??0)>0,hasRedirects=(redirects?.length??0)>0,hasHeaders=(headers?.length??0)>0;function hasRouteFormat(items){return items?.some(item=>"src"in item)??!1}if(hasRoutes&&(hasRewrites||hasRedirects||hasHeaders))return normalized;let shouldConvertRewrites=hasRewrites&&hasRouteFormat(rewrites),shouldConvertRedirects=hasRedirects&&hasRouteFormat(redirects),shouldConvertHeaders=hasHeaders&&hasRouteFormat(headers);if((shouldConvertRewrites||shouldConvertRedirects||shouldConvertHeaders)&&(hasRewrites&&!shouldConvertRewrites||hasRedirects&&!shouldConvertRedirects||hasHeaders&&!shouldConvertHeaders))throw new import_build_utils.NowBuildError({code:"INVALID_VERCEL_CONFIG",message:"Transforms (e.g., requestHeaders) require the `routes` format, which cannot be used alongside `rewrites`, `redirects`, or `headers`. Move everything into the `routes` array instead.",link:"https://vercel.com/docs/projects/project-configuration#routes"});return rewrites&&shouldConvertRewrites&&(allRoutes=[...allRoutes,...rewrites.map(toRouteFormat)],delete normalized.rewrites),redirects&&shouldConvertRedirects&&(allRoutes=[...allRoutes,...redirects.map(toRouteFormat)],delete normalized.redirects),headers&&shouldConvertHeaders&&(allRoutes=[...allRoutes,...headers.map(toRouteFormat)],delete normalized.headers),allRoutes.length>0&&(normalized.routes=allRoutes.map(toRouteFormat)),normalized}async function fileExists(filePath){try{return await access(filePath),!0}catch{return!1}}async function findAllVercelConfigFiles(workPath){let foundFiles=[];for(let ext of VERCEL_CONFIG_EXTENSIONS){let configPath=join(workPath,`vercel.${ext}`);await fileExists(configPath)&&foundFiles.push(configPath)}return foundFiles}async function findSourceVercelConfigFile(workPath){for(let ext of VERCEL_CONFIG_EXTENSIONS){let configPath=join(workPath,`vercel.${ext}`);if(await fileExists(configPath))return basename(configPath)}let tomlPath=join(workPath,"vercel.toml");return await fileExists(tomlPath)?"vercel.toml":null}async function findVercelConfigFile(workPath){let foundFiles=await findAllVercelConfigFiles(workPath);if(foundFiles.length>1)throw new ConflictingConfigFiles(foundFiles,"Multiple vercel config files found. Please use only one configuration file.","https://vercel.com/docs/projects/project-configuration");return foundFiles[0]||null}function parseConfigLoaderError(stderr){if(!stderr.trim())return"";let moduleNotFoundMatch=stderr.match(/Error \[ERR_MODULE_NOT_FOUND\]: Cannot find package '([^']+)'/);if(moduleNotFoundMatch)return`Cannot find package '${moduleNotFoundMatch[1]}'. Make sure it's installed in your project dependencies.`;let syntaxErrorMatch=stderr.match(/SyntaxError: (.+?)(?:\n|$)/);if(syntaxErrorMatch)return`Syntax error: ${syntaxErrorMatch[1]}`;let errorMatch=stderr.match(/^(?:Error|TypeError|ReferenceError): (.+?)(?:\n|$)/m);return errorMatch?errorMatch[1]:stderr.trim()}async function compileVercelConfig(workPath){let vercelJsonPath=join(workPath,"vercel.json"),nowJsonPath=join(workPath,"now.json"),vercelTomlPath=join(workPath,"vercel.toml"),hasVercelJson=await fileExists(vercelJsonPath),hasNowJson=await fileExists(nowJsonPath),hasVercelToml=await fileExists(vercelTomlPath),vercelConfigPath=await findVercelConfigFile(workPath),vercelDir=join(workPath,VERCEL_DIR),compiledConfigPath=join(vercelDir,"vercel.json");if(hasNowJson)throw new DeprecatedNowJson(nowJsonPath);let foundConfigs=[];if(hasVercelJson&&foundConfigs.push(vercelJsonPath),hasVercelToml&&foundConfigs.push(vercelTomlPath),vercelConfigPath&&foundConfigs.push(vercelConfigPath),foundConfigs.length>1)throw new ConflictingConfigFiles(foundConfigs,`Multiple config files found: ${foundConfigs.map(f=>basename(f)).join(", ")}. Please use only one configuration method.`,"https://vercel.com/docs/projects/project-configuration");if(!vercelConfigPath&&!hasVercelToml)return hasVercelJson?{configPath:vercelJsonPath,wasCompiled:!1}:await fileExists(compiledConfigPath)?{configPath:compiledConfigPath,wasCompiled:!0,sourceFile:await findSourceVercelConfigFile(workPath)??void 0}:{configPath:null,wasCompiled:!1};if(hasVercelToml)try{let{parse:tomlParse}=await import("smol-toml"),tomlContent=await readFile(vercelTomlPath,"utf8"),config=tomlParse(tomlContent),normalizedConfig=normalizeConfig(config);return await mkdir(vercelDir,{recursive:!0}),await writeFile(compiledConfigPath,JSON.stringify(normalizedConfig,null,2),"utf-8"),output_manager_default.debug(`Compiled ${vercelTomlPath} -> ${compiledConfigPath}`),{configPath:compiledConfigPath,wasCompiled:!0,sourceFile:"vercel.toml"}}catch(error){throw new import_build_utils.NowBuildError({code:error.code??"vercel_toml_parse_failed",message:`Failed to parse vercel.toml: ${error.message}`,link:error.link??"https://vercel.com/docs/projects/project-configuration"})}let sourceConfigPath=vercelConfigPath;(0,import_dotenv.config)({path:join(workPath,".env")}),(0,import_dotenv.config)({path:join(workPath,".env.local")});let tempOutPath=join(vercelDir,"vercel-temp.mjs"),loaderPath=join(vercelDir,"vercel-loader.mjs");try{let{build}=await loadEsbuild();await mkdir(vercelDir,{recursive:!0}),await build({entryPoints:[sourceConfigPath],bundle:!0,platform:"node",format:"esm",outfile:tempOutPath,packages:"external",target:"node20",sourcemap:"inline"}),await writeFile(loaderPath,`
|
|
10
10
|
import { pathToFileURL } from 'url';
|
|
@@ -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{require_json_parse_better_errors}from"./chunk-N6CNMMSZ.js";import{require_lib}from"./chunk-
|
|
7
|
+
import{require_json_parse_better_errors}from"./chunk-N6CNMMSZ.js";import{require_lib}from"./chunk-TKNV5ONT.js";import{CantParseJSONFile}from"./chunk-RINZXCDJ.js";import{require_dist}from"./chunk-QGIQK47P.js";import{__toESM}from"./chunk-6L236MNA.js";var import_fs_extra=__toESM(require_lib(),1);var import_json_parse_better_errors=__toESM(require_json_parse_better_errors(),1),import_error_utils=__toESM(require_dist(),1);async function readJSONFile(file){let content=await readFileSafe(file);if(content===null)return content;try{return(0,import_json_parse_better_errors.default)(content)}catch(error){return new CantParseJSONFile(file,(0,import_error_utils.errorToString)(error))}}async function readFileSafe(file){try{return await import_fs_extra.default.readFile(file,"utf8")}catch{return null}}export{readJSONFile};
|
|
@@ -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{formatCondition,formatTransform,isTargetTransform}from"./chunk-
|
|
7
|
+
import{formatCondition,formatTransform,isTargetTransform}from"./chunk-HQZXUIZY.js";import{output_manager_default}from"./chunk-EWWFNMPZ.js";import{require_source}from"./chunk-U7KCDTCH.js";import{__toESM}from"./chunk-6L236MNA.js";function extractEnvVarNames(value){let names=new Set;for(let m of value.matchAll(/\$\{?([A-Z_][A-Z0-9_]*)\}?/g))names.add(m[1]);return Array.from(names)}function escapeRegex(value){return value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function referencesEnvVar(value,name){let escapedName=escapeRegex(name);return new RegExp(`\\$(?:\\{${escapedName}\\}|${escapedName}(?![A-Za-z0-9_]))`).test(value)}function referencesBracedEnvVar(value,name){return new RegExp(`\\$\\{${escapeRegex(name)}\\}`).test(value)}function collectReferencedEnvVars(values,explicitEnv=[],excludedNames=new Set){let names=new Set(explicitEnv.filter(name=>values.some(value=>referencesEnvVar(value,name))));for(let value of values)for(let name of extractEnvVarNames(value))(!excludedNames.has(name)||names.has(name)||referencesBracedEnvVar(value,name))&&names.add(name);return Array.from(names)}function collectNamedRegexCaptures(source){return new Set(Array.from(source.matchAll(/\(\?<([a-zA-Z][a-zA-Z0-9_]*)>/g),match=>match[1]))}function populateRouteEnv(route,srcSyntax="regex"){let excludedNames=srcSyntax==="regex"&&route.src?collectNamedRegexCaptures(route.src):new Set,routeValues=[...route.dest?[route.dest]:[],...Object.values(route.headers||{})],routeEnv=collectReferencedEnvVars(routeValues,route.env,excludedNames);if(route.env=routeEnv.length>0?routeEnv:void 0,route.transforms)for(let transform of route.transforms){let args=transform.args?Array.isArray(transform.args)?transform.args:[transform.args]:[],names=collectReferencedEnvVars(args,transform.env,excludedNames);transform.env=names.length>0?names:void 0}}async function generateRoute(client,projectId,input,options={}){let{teamId}=options,query=new URLSearchParams;teamId&&query.set("teamId",teamId);let queryString=query.toString(),url=`/v1/projects/${projectId}/routes/generate${queryString?`?${queryString}`:""}`;return await client.fetch(url,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(input)})}function parseTransforms(values,type,op){return values.map(value=>parseTransform(value,type,op))}function parseTransform(input,type,op){if(op==="delete"){let key2=input.trim();if(!key2)throw new Error("Delete operation requires a key");return{type,op,target:{key:key2}}}let eqIndex=input.indexOf("=");if(eqIndex===-1)throw new Error(`Invalid format: "${input}". Expected format: key=value`);let key=input.slice(0,eqIndex).trim(),args=input.slice(eqIndex+1);if(!key)throw new Error("Transform key cannot be empty");return{type,op,target:{key},args}}function collectTransforms(flags){let transforms=[];return flags.setResponseHeader&&transforms.push(...parseTransforms(flags.setResponseHeader,"response.headers","set")),flags.appendResponseHeader&&transforms.push(...parseTransforms(flags.appendResponseHeader,"response.headers","append")),flags.deleteResponseHeader&&transforms.push(...parseTransforms(flags.deleteResponseHeader,"response.headers","delete")),flags.setRequestHeader&&transforms.push(...parseTransforms(flags.setRequestHeader,"request.headers","set")),flags.appendRequestHeader&&transforms.push(...parseTransforms(flags.appendRequestHeader,"request.headers","append")),flags.deleteRequestHeader&&transforms.push(...parseTransforms(flags.deleteRequestHeader,"request.headers","delete")),flags.setRequestQuery&&transforms.push(...parseTransforms(flags.setRequestQuery,"request.query","set")),flags.appendRequestQuery&&transforms.push(...parseTransforms(flags.appendRequestQuery,"request.query","append")),flags.deleteRequestQuery&&transforms.push(...parseTransforms(flags.deleteRequestQuery,"request.query","delete")),transforms}function collectResponseHeaders(setHeaders){let headers={};for(let input of setHeaders){let eqIndex=input.indexOf("=");if(eqIndex===-1)throw new Error(`Invalid header format: "${input}". Expected format: key=value`);let key=input.slice(0,eqIndex).trim(),value=input.slice(eqIndex+1);if(!key)throw new Error("Header key cannot be empty");headers[key]=value}return headers}var MAX_NAME_LENGTH=256,MAX_DESCRIPTION_LENGTH=1024,MAX_CONDITIONS=16,VALID_SYNTAXES=["regex","path-to-regexp","equals"],REDIRECT_STATUS_CODES=[301,302,303,307,308],VALID_ACTION_TYPES=["rewrite","redirect","set-status"],ALL_ACTION_CHOICES=[{name:"Rewrite",value:"rewrite",exclusive:!0},{name:"Redirect",value:"redirect",exclusive:!0},{name:"Set Status Code",value:"set-status",exclusive:!0},{name:"Response Headers",value:"response-headers"},{name:"Request Headers",value:"request-headers"},{name:"Request Query",value:"request-query"}];function stripQuotes(str){return str.startsWith('"')&&str.endsWith('"')&&str.length>=2||str.startsWith("'")&&str.endsWith("'")&&str.length>=2?str.slice(1,-1):str}function extractTransformFlags(flags){return{setResponseHeader:flags["--set-response-header"],appendResponseHeader:flags["--append-response-header"],deleteResponseHeader:flags["--delete-response-header"],setRequestHeader:flags["--set-request-header"],appendRequestHeader:flags["--append-request-header"],deleteRequestHeader:flags["--delete-request-header"],setRequestQuery:flags["--set-request-query"],appendRequestQuery:flags["--append-request-query"],deleteRequestQuery:flags["--delete-request-query"]}}function collectHeadersAndTransforms(transformFlags){let headers=transformFlags.setResponseHeader?collectResponseHeaders(transformFlags.setResponseHeader):{},transforms=collectTransforms({...transformFlags,setResponseHeader:void 0});return{headers,transforms}}function hasAnyTransformFlags(flags){let tf=extractTransformFlags(flags);return!!(tf.setResponseHeader||tf.appendResponseHeader||tf.deleteResponseHeader||tf.setRequestHeader||tf.appendRequestHeader||tf.deleteRequestHeader||tf.setRequestQuery||tf.appendRequestQuery||tf.deleteRequestQuery)}function validateActionFlags(action,dest,status){if(!action)return dest||status!==void 0?"--action is required when using --dest or --status. Use --action rewrite, --action redirect, or --action set-status.":null;if(!VALID_ACTION_TYPES.includes(action))return`Invalid action type: "${action}". Valid types: ${VALID_ACTION_TYPES.join(", ")}`;switch(action){case"rewrite":if(!dest)return"--action rewrite requires --dest.";if(status!==void 0)return"--action rewrite does not accept --status.";break;case"redirect":if(!dest)return"--action redirect requires --dest.";if(status===void 0)return`--action redirect requires --status (${REDIRECT_STATUS_CODES.join(", ")}).`;if(!REDIRECT_STATUS_CODES.includes(status))return`Invalid redirect status: ${status}. Must be one of: ${REDIRECT_STATUS_CODES.join(", ")}`;break;case"set-status":if(dest)return"--action set-status does not accept --dest.";if(status===void 0)return"--action set-status requires --status.";if(status<100||status>599)return"Status code must be between 100 and 599.";break}return null}async function collectActionDetails(client,actionType,flags){switch(actionType){case"rewrite":{let dest=await client.input.text({message:"Destination URL:",validate:val=>val?!0:"Destination is required"});Object.assign(flags,{"--dest":dest});break}case"redirect":{let dest=await client.input.text({message:"Destination URL:",validate:val=>val?!0:"Destination is required"}),status=await client.input.select({message:"Status code:",choices:[{name:"307 - Temporary Redirect",value:307},{name:"308 - Permanent Redirect",value:308},{name:"301 - Moved Permanently",value:301},{name:"302 - Found",value:302},{name:"303 - See Other",value:303}]});Object.assign(flags,{"--dest":dest,"--status":status});break}case"set-status":{let statusCode=await client.input.text({message:"HTTP status code:",validate:val=>{let num=parseInt(val,10);return isNaN(num)||num<100||num>599?"Status code must be between 100 and 599":!0}});Object.assign(flags,{"--status":parseInt(statusCode,10)});break}case"response-headers":{await collectInteractiveHeaders(client,"response",flags);break}case"request-headers":{await collectInteractiveHeaders(client,"request-header",flags);break}case"request-query":{await collectInteractiveHeaders(client,"request-query",flags);break}}}async function collectInteractiveConditions(client,flags){let addMore=!0;for(;addMore;){let currentHas=flags["--has"]||[],currentMissing=flags["--missing"]||[];if(currentHas.length>0||currentMissing.length>0){output_manager_default.log(`
|
|
8
8
|
Current conditions:`);for(let c of currentHas)output_manager_default.print(` has: ${c}
|
|
9
9
|
`);for(let c of currentMissing)output_manager_default.print(` does not have: ${c}
|
|
10
10
|
`);output_manager_default.print(`
|