vercel 62.2.0 → 62.5.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-7HJR3HK7.js → add-HN4OXQLM.js} +1 -1
- package/dist/chunks/add-SUDX7R63.js +8 -0
- package/dist/chunks/add-UNQJB3SM.js +8 -0
- package/dist/chunks/build-BRMOQZHW.js +7 -0
- package/dist/chunks/{chunk-C6ITILVT.js → chunk-2E6XILZC.js} +1 -1
- package/dist/chunks/{chunk-I46LFJJG.js → chunk-2FQCZE6S.js} +1 -1
- package/dist/chunks/{chunk-7T4CJ6MJ.js → chunk-2Z47VG5H.js} +1 -1
- package/dist/chunks/{chunk-2RQFMCPJ.js → chunk-35QK5NDD.js} +1 -1
- package/dist/chunks/{chunk-MCCL762Q.js → chunk-3J2P52OU.js} +1 -1
- package/dist/chunks/{chunk-GASSNHZG.js → chunk-4AY4YYKS.js} +1 -1
- package/dist/chunks/{chunk-743NGLUN.js → chunk-4BRFG5HP.js} +1 -1
- package/dist/chunks/chunk-4CACOKMS.js +7 -0
- package/dist/chunks/{chunk-RINZXCDJ.js → chunk-4WS3D23J.js} +1 -1
- package/dist/chunks/chunk-5CSWEE7J.js +7 -0
- package/dist/chunks/{chunk-PV5YI2ZZ.js → chunk-5IPBCD7K.js} +1 -1
- package/dist/chunks/{chunk-6JU3QZ3O.js → chunk-5NSYN7IO.js} +1 -1
- package/dist/chunks/{chunk-HYW4A5B3.js → chunk-5QVOIOPN.js} +5 -5
- package/dist/chunks/{chunk-3GUBYJN6.js → chunk-65Z5UPUC.js} +1 -1
- package/dist/chunks/{chunk-WOKSTB3F.js → chunk-6ALOD3OE.js} +1 -1
- package/dist/chunks/{chunk-7JFK53D4.js → chunk-6C4RPAG7.js} +1 -1
- package/dist/chunks/{chunk-KREBNPHL.js → chunk-6LOW7CGD.js} +9 -5
- package/dist/chunks/{chunk-DQ2KI6FO.js → chunk-72YTT324.js} +1 -1
- package/dist/chunks/chunk-733ZK37Y.js +7 -0
- package/dist/chunks/chunk-774D3BGN.js +7 -0
- package/dist/chunks/chunk-7SNMU7U7.js +7 -0
- package/dist/chunks/chunk-AJT64XO2.js +21 -0
- package/dist/chunks/{chunk-MK3CTSDV.js → chunk-AMSFO2VK.js} +1 -1
- package/dist/chunks/{chunk-N7XPPYQQ.js → chunk-B3MYIRFE.js} +1 -1
- package/dist/chunks/{chunk-FA6O7FPC.js → chunk-C7SLCL3Z.js} +2 -2
- package/dist/chunks/{chunk-CQ3RAERR.js → chunk-CAAD55US.js} +1 -1
- package/dist/chunks/{chunk-UWO3M2L2.js → chunk-D6JBONML.js} +1 -1
- package/dist/chunks/{chunk-VDOJERIW.js → chunk-DOWDSQPG.js} +1 -1
- package/dist/chunks/{chunk-6NPXWN5F.js → chunk-DQXGNNPB.js} +1 -1
- package/dist/chunks/{chunk-EQHNA4BW.js → chunk-DWPCZHDT.js} +1 -1
- package/dist/chunks/chunk-DZZFEAM6.js +7 -0
- package/dist/chunks/chunk-EA3BJUUK.js +7 -0
- package/dist/chunks/{chunk-NESZV33T.js → chunk-EDDOQXEI.js} +1 -1
- package/dist/chunks/chunk-EJNFKH6Y.js +10 -0
- package/dist/chunks/chunk-EPBZNTIJ.js +9 -0
- package/dist/chunks/{chunk-N4PVXHAJ.js → chunk-G3NHWIPJ.js} +1 -1
- package/dist/chunks/chunk-GXNSAACA.js +7 -0
- package/dist/chunks/{chunk-C3XFIO5L.js → chunk-H3QRCTIJ.js} +1 -1
- package/dist/chunks/{chunk-SM5JI6QM.js → chunk-HRQQ2N5B.js} +1 -1
- package/dist/chunks/{chunk-B5PFD6Q3.js → chunk-HVJERSGE.js} +1 -1
- package/dist/chunks/{chunk-6BZCSVH6.js → chunk-ILR6YA2A.js} +1 -1
- package/dist/chunks/{chunk-S2LBGLRE.js → chunk-JNLWD6DK.js} +1 -1
- package/dist/chunks/{chunk-VGXFOQ4P.js → chunk-L57FNGBV.js} +1 -1
- package/dist/chunks/{chunk-S5CEIACD.js → chunk-LG4JQAY7.js} +1 -1
- package/dist/chunks/chunk-LGFCHU75.js +8 -0
- package/dist/chunks/chunk-LSF7FY6X.js +7 -0
- package/dist/chunks/{chunk-NT67T6DL.js → chunk-M4IWOZEG.js} +1 -1
- package/dist/chunks/{chunk-R3B67TKQ.js → chunk-MCOJUSDV.js} +1 -1
- package/dist/chunks/{chunk-KG5BMLOI.js → chunk-MHKDLJEI.js} +1 -1
- package/dist/chunks/chunk-MJWC4W6J.js +10 -0
- package/dist/chunks/{chunk-D5VTBRWF.js → chunk-MOLEXKVC.js} +1 -1
- package/dist/chunks/{chunk-LCWCTL6L.js → chunk-MQW6DKD2.js} +1 -1
- package/dist/chunks/{chunk-EWWFNMPZ.js → chunk-MR423MWE.js} +3 -1
- package/dist/chunks/{chunk-MKY5IBKK.js → chunk-MUJP4VPF.js} +1 -1
- package/dist/chunks/chunk-NDZOUAFO.js +9 -0
- package/dist/chunks/{chunk-V6MR45PD.js → chunk-NNP5NITU.js} +1 -1
- package/dist/chunks/chunk-NTRM6VO6.js +9 -0
- package/dist/chunks/{chunk-LCY4SULE.js → chunk-O552UV4H.js} +1 -1
- package/dist/chunks/chunk-O5A7CNRV.js +7 -0
- package/dist/chunks/{chunk-KOSM3DYE.js → chunk-OQVE2WXX.js} +1 -1
- package/dist/chunks/{chunk-X47XV2WG.js → chunk-OYWYHFXV.js} +1 -1
- package/dist/chunks/{chunk-WN6OXK2F.js → chunk-P3YADO62.js} +1 -1
- package/dist/chunks/{chunk-K5WTLFS6.js → chunk-P3ZZVBZQ.js} +1 -1
- package/dist/chunks/{chunk-7POWBJDF.js → chunk-P4BGC5RL.js} +3 -3
- package/dist/chunks/{chunk-DECIQZZQ.js → chunk-PD3ZD52Q.js} +3 -3
- package/dist/chunks/{chunk-SDGWKUST.js → chunk-PQV3QNDG.js} +1 -1
- package/dist/chunks/{chunk-LQBC5QPO.js → chunk-PTKSYVXM.js} +1 -1
- package/dist/chunks/{chunk-4HXRTNAK.js → chunk-PY6YO4MR.js} +2 -2
- package/dist/chunks/{chunk-YMM3VY3J.js → chunk-QCOPZAUC.js} +1 -1
- package/dist/chunks/{chunk-7IRKF3ZG.js → chunk-QMTPSHRV.js} +4 -4
- package/dist/chunks/chunk-RERUTI3O.js +9 -0
- package/dist/chunks/{chunk-HWWHR7H3.js → chunk-RHUAFRZX.js} +1 -1
- package/dist/chunks/chunk-S54ISKGR.js +9 -0
- package/dist/chunks/{chunk-HLVUEYOZ.js → chunk-ST2X5QRA.js} +1 -1
- package/dist/chunks/chunk-SX64OM5A.js +7 -0
- package/dist/chunks/{chunk-L46BHPRD.js → chunk-TEYG3UZQ.js} +1 -1
- package/dist/chunks/{chunk-ZUYWATU5.js → chunk-TG6SMD7D.js} +1 -1
- package/dist/chunks/{chunk-U6N2RNDI.js → chunk-TN4IR2LY.js} +1 -1
- package/dist/chunks/{chunk-XQQGQ55A.js → chunk-TNGDWVMX.js} +1 -1
- package/dist/chunks/{chunk-7ANQHBBE.js → chunk-U4C2LU7H.js} +1 -1
- package/dist/chunks/{chunk-C5KVTG2O.js → chunk-UKC3NSS6.js} +1 -1
- package/dist/chunks/{chunk-A752WDCH.js → chunk-UXAYYF6I.js} +1 -1
- package/dist/chunks/{chunk-JO3XBFR3.js → chunk-VMHUBZRU.js} +1 -1
- package/dist/chunks/{chunk-JSKSNCK2.js → chunk-W45NZSSK.js} +1 -1
- package/dist/chunks/{chunk-UOHVKN6N.js → chunk-W6M24BQ4.js} +2 -2
- package/dist/chunks/{chunk-E4RLHRDF.js → chunk-WJZV7BI4.js} +1 -1
- package/dist/chunks/{vlt-builder-graph-B4DFIUS6.js → chunk-WKZ6JSGZ.js} +1 -1
- package/dist/chunks/{chunk-Z4VR6CQ2.js → chunk-WNG72BRT.js} +1 -1
- package/dist/chunks/chunk-WOTPEBSH.js +11 -0
- package/dist/chunks/chunk-X7F3567X.js +7 -0
- package/dist/chunks/{chunk-ACCZWEKL.js → chunk-X7U35FBE.js} +1 -1
- package/dist/chunks/chunk-XMV7OSFJ.js +9 -0
- package/dist/chunks/chunk-YW5R6XQI.js +7 -0
- package/dist/chunks/chunk-ZFYW4CEL.js +8 -0
- package/dist/chunks/{chunk-7I23VXBQ.js → chunk-ZTUQEA2X.js} +1 -1
- package/dist/chunks/{chunk-VTMLKJVQ.js → chunk-ZX2JOGOA.js} +1 -1
- package/dist/chunks/{chunk-N5MNZPPJ.js → chunk-ZXDS7NJI.js} +1 -1
- package/dist/chunks/clear-M6LODAMD.js +8 -0
- package/dist/chunks/{compile-vercel-config-2IC23CNT.js → compile-vercel-config-NBX5UWHW.js} +1 -1
- package/dist/chunks/{config-T3WHONFJ.js → config-Q3TRA4NK.js} +1 -1
- package/dist/chunks/config-YQ7FIAFK.js +8 -0
- package/dist/chunks/config-validator.mjs +1 -1
- package/dist/chunks/{connect-git-provider-VYU65KTS.js → connect-git-provider-67DJOI6X.js} +1 -1
- package/dist/chunks/{constants-NCE2LWSS.js → constants-G4UYVLOF.js} +1 -1
- package/dist/chunks/delete-KSZ7R5V6.js +10 -0
- package/dist/chunks/delete-NRWKSTCN.js +9 -0
- package/dist/chunks/{detect-projects-GJF4VXQI.js → detect-projects-AWDCPVLE.js} +1 -1
- package/dist/chunks/{detect-services-K3363KB7.js → detect-services-MWYUJZJZ.js} +1 -1
- package/dist/chunks/disable-BUGWQUS7.js +7 -0
- package/dist/chunks/discard-J5O3C753.js +14 -0
- package/dist/chunks/edit-DMOIBVEP.js +8 -0
- package/dist/chunks/edit-YRWAXGEI.js +9 -0
- package/dist/chunks/enable-IL27VHSU.js +7 -0
- package/dist/chunks/{exec-3RMS2X6B.js → exec-GYSSNCNK.js} +1 -1
- package/dist/chunks/{export-CMP3APAJ.js → export-HBUUGMGE.js} +2 -2
- package/dist/chunks/{future-GS7ZLJ3N.js → future-BXETJ6CT.js} +1 -1
- package/dist/chunks/{generate-cert-for-deploy-2HHUYGHU.js → generate-cert-for-deploy-K5QDHEEQ.js} +1 -1
- package/dist/chunks/image-M2XIQYXT.js +7 -0
- package/dist/chunks/import-builders-UGIWTKRS.js +7 -0
- package/dist/chunks/inspect-HASOG2PB.js +13 -0
- package/dist/chunks/inspect-OGUGKPVK.js +9 -0
- package/dist/chunks/{inspect-KYFVYFWX.js → inspect-SUEMHSB6.js} +2 -2
- package/dist/chunks/{inspect-V7HA2GZ5.js → inspect-TDHISMRV.js} +2 -2
- package/dist/chunks/{inspect-DYNTJMTQ.js → inspect-XANEFWYN.js} +2 -2
- package/dist/chunks/list-32NXD7OW.js +11 -0
- package/dist/chunks/{list-X4MKKDJX.js → list-Q566PTT4.js} +2 -2
- package/dist/chunks/{list-TSDBEAVF.js → list-Z6DRFZ7F.js} +2 -2
- package/dist/chunks/login-A6R3RQIW.js +9 -0
- package/dist/chunks/login-GPCBSMHV.js +7 -0
- package/dist/chunks/logs-L33R4G67.js +7 -0
- package/dist/chunks/ls-6CYMQBX3.js +12 -0
- package/dist/chunks/ls-CTIACPC5.js +8 -0
- package/dist/chunks/ls-DUCIK4E6.js +11 -0
- package/dist/chunks/{ls-4W4KTJ6T.js → ls-GDR45ANC.js} +2 -2
- package/dist/chunks/{ls-BMAVUMXU.js → ls-JPL3AFIM.js} +2 -2
- package/dist/chunks/{ls-HK45UWBD.js → ls-R442RADW.js} +2 -2
- package/dist/chunks/ls-VSK2ZFSY.js +8 -0
- package/dist/chunks/mutate-MUWQVZKM.js +9 -0
- package/dist/chunks/notifications-YKGIFXKO.js +7 -0
- package/dist/chunks/open-OJAIEDS5.js +7 -0
- package/dist/chunks/{openapi-W365UPH2.js → openapi-Y4NWAKUM.js} +1 -1
- package/dist/chunks/permissions-LWKZBBU7.js +7 -0
- package/dist/chunks/{prompt-missing-credentials-VDR5HVA2.js → prompt-missing-credentials-O3GGMOZH.js} +1 -1
- package/dist/chunks/publish-JHNLZT6K.js +15 -0
- package/dist/chunks/pull-E4K6BVQW.js +7 -0
- package/dist/chunks/purchase-domain-if-available-CJK3G4DT.js +7 -0
- package/dist/chunks/push-MUMGVOSY.js +7 -0
- package/dist/chunks/{query-ABPO2REN.js → query-2TTSDOFF.js} +2 -2
- package/dist/chunks/{reauthenticate-3H5Q2ZWD.js → reauthenticate-S47X66LM.js} +1 -1
- package/dist/chunks/reorder-NGBZWNZH.js +10 -0
- package/dist/chunks/reply-5WF5YHOM.js +9 -0
- package/dist/chunks/resolve-MPZBUK5V.js +12 -0
- package/dist/chunks/restore-NVY4A3T3.js +16 -0
- package/dist/chunks/rm-DB5K2RI7.js +8 -0
- package/dist/chunks/rm-HFJCOK2D.js +8 -0
- package/dist/chunks/{rm-KHO6RV55.js → rm-QXQ2AD4R.js} +1 -1
- package/dist/chunks/rm-SMKVHN75.js +8 -0
- package/dist/chunks/rm-ZO5JP3GF.js +8 -0
- package/dist/chunks/{routes-FOCZWOGO.js → routes-KO5NFCCJ.js} +1 -1
- package/dist/chunks/rule-inspect-VZARLRS3.js +8 -0
- package/dist/chunks/rules-G2WFYCPB.js +7 -0
- package/dist/chunks/{schema-EKWTCBNR.js → schema-G6BOZBNB.js} +1 -1
- package/dist/chunks/{schema-FZVKQRNB.js → schema-SVYU72YU.js} +1 -1
- package/dist/chunks/{select-org-37C26F7T.js → select-org-2W67WKBG.js} +1 -1
- package/dist/chunks/set-ILVKMTUD.js +7 -0
- package/dist/chunks/setup-and-link-VFCYLLB5.js +7 -0
- package/dist/chunks/tags-C34XXMYO.js +7 -0
- package/dist/chunks/{types-UN5J66MI.js → types-MATC4UQL.js} +2 -2
- package/dist/chunks/{update-QY3ZME4T.js → update-IVWOZO4P.js} +2 -2
- package/dist/chunks/{chunk-TKBORMUF.js → vlt-builder-graph-S4YJ5UTQ.js} +1 -1
- package/dist/chunks/vlt-builder-importer-2ITR3DMQ.js +11 -0
- package/dist/commands/build/index.js +3 -3
- package/dist/commands/deploy/index.js +13 -10
- package/dist/commands/dev/index.js +6 -6
- package/dist/commands/env/index.js +12 -12
- package/dist/commands/link/index.js +2 -2
- package/dist/commands/list/index.js +1 -1
- package/dist/commands-bulk.js +552 -535
- package/dist/index.js +8 -7
- package/dist/internal-build-worker.js +4 -4
- package/dist/internal-build.js +11 -0
- package/dist/root-help-commands.mjs +1 -1
- package/dist/vc.js +26 -10
- package/dist/version.mjs +1 -1
- package/package.json +53 -53
- package/dist/chunks/add-Q5OZFIRM.js +0 -8
- package/dist/chunks/add-VLVURKGS.js +0 -8
- package/dist/chunks/build-MR7MUWBQ.js +0 -7
- package/dist/chunks/chunk-3R66O72V.js +0 -7
- package/dist/chunks/chunk-5VWK73R6.js +0 -10
- package/dist/chunks/chunk-ADDXKC3J.js +0 -9
- package/dist/chunks/chunk-AKPQWZIP.js +0 -21
- package/dist/chunks/chunk-ALXWJ7XN.js +0 -7
- package/dist/chunks/chunk-CJPM2DXZ.js +0 -7
- package/dist/chunks/chunk-CVX5X5RI.js +0 -7
- package/dist/chunks/chunk-HVROAV4B.js +0 -9
- package/dist/chunks/chunk-ILXXXXVQ.js +0 -8
- package/dist/chunks/chunk-JRU6AGXG.js +0 -11
- package/dist/chunks/chunk-LHQUNL52.js +0 -7
- package/dist/chunks/chunk-M7ZGWERO.js +0 -9
- package/dist/chunks/chunk-NRN65VUM.js +0 -8
- package/dist/chunks/chunk-NXTK7VKL.js +0 -7
- package/dist/chunks/chunk-PADCVJ7G.js +0 -7
- package/dist/chunks/chunk-PAI3WRPA.js +0 -9
- package/dist/chunks/chunk-PTFKU33G.js +0 -10
- package/dist/chunks/chunk-RFWCEREA.js +0 -7
- package/dist/chunks/chunk-RVKOPGOI.js +0 -7
- package/dist/chunks/chunk-VZDY57PJ.js +0 -7
- package/dist/chunks/chunk-W7PVS44H.js +0 -7
- package/dist/chunks/chunk-WW3VUXRV.js +0 -9
- package/dist/chunks/chunk-ZQIUMXCI.js +0 -7
- package/dist/chunks/clear-PPE55RPM.js +0 -8
- package/dist/chunks/config-G2A6KPPM.js +0 -8
- package/dist/chunks/delete-75SYJKNE.js +0 -10
- package/dist/chunks/delete-MHXN5KTO.js +0 -9
- package/dist/chunks/disable-OUYOHEWN.js +0 -7
- package/dist/chunks/discard-RXSHOY3J.js +0 -14
- package/dist/chunks/edit-Y7OL72ZK.js +0 -9
- package/dist/chunks/edit-Z5RCWPOX.js +0 -8
- package/dist/chunks/enable-HI2UH2NM.js +0 -7
- package/dist/chunks/image-SQIUEBFK.js +0 -7
- package/dist/chunks/import-builders-EUOOFPHW.js +0 -7
- package/dist/chunks/inspect-2SXPXNYH.js +0 -13
- package/dist/chunks/inspect-J3F3U3YF.js +0 -9
- package/dist/chunks/list-ZQSOWXRI.js +0 -11
- package/dist/chunks/login-5FMKHZVG.js +0 -7
- package/dist/chunks/login-YEDMPXUF.js +0 -9
- package/dist/chunks/logs-X2OIQXGW.js +0 -7
- package/dist/chunks/ls-6EDJUUDW.js +0 -12
- package/dist/chunks/ls-LAYBQVU2.js +0 -8
- package/dist/chunks/ls-SQ42O6O5.js +0 -11
- package/dist/chunks/ls-XIJ4CY2N.js +0 -8
- package/dist/chunks/mutate-6FCOCHSA.js +0 -9
- package/dist/chunks/notifications-JTK7ZOLC.js +0 -7
- package/dist/chunks/open-3G4R3VIN.js +0 -7
- package/dist/chunks/permissions-IWUBXZBZ.js +0 -7
- package/dist/chunks/publish-5QKVU6YV.js +0 -15
- package/dist/chunks/pull-K4JQEP7N.js +0 -7
- package/dist/chunks/purchase-domain-if-available-Q7H2TGKR.js +0 -7
- package/dist/chunks/push-COILRLCW.js +0 -7
- package/dist/chunks/reorder-FBUQ5ET7.js +0 -10
- package/dist/chunks/reply-FR5VO7DA.js +0 -9
- package/dist/chunks/resolve-JI2ENFS6.js +0 -12
- package/dist/chunks/restore-LYY4BSYJ.js +0 -16
- package/dist/chunks/rm-C2RWWMO3.js +0 -8
- package/dist/chunks/rm-CYYVIF2U.js +0 -8
- package/dist/chunks/rm-ETLZ75RJ.js +0 -8
- package/dist/chunks/rm-GHSQEFRG.js +0 -8
- package/dist/chunks/rule-inspect-MISYALLU.js +0 -8
- package/dist/chunks/rules-KAGL6MH3.js +0 -7
- package/dist/chunks/set-5D7C6HMZ.js +0 -7
- package/dist/chunks/setup-and-link-H4P3FZB3.js +0 -7
- package/dist/chunks/tags-DVGQQZNC.js +0 -7
- package/dist/chunks/vlt-builder-importer-W63QEXYX.js +0 -11
|
@@ -4,37 +4,37 @@ 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{CHECKBOX_INSTRUCTIONS,getCustomEnvironments,readStandardInput,require_dist as require_dist3}from"../../chunks/chunk-COQGD2EI.js";import{getInvalidSubcommand}from"../../chunks/chunk-TG2RCYTH.js";import{ellipsis}from"../../chunks/chunk-ZDX75YNZ.js";import{formatTable}from"../../chunks/chunk-UED2PPFP.js";import"../../chunks/chunk-MBL6TXEJ.js";import{autoInstallVercelPlugin}from"../../chunks/chunk-MKY5IBKK.js";import{require_execa}from"../../chunks/chunk-HWWHR7H3.js";import{isGuidanceEnabled,suggestNextCommands}from"../../chunks/chunk-DQ2KI6FO.js";import{stamp_default}from"../../chunks/chunk-XPXOV5UO.js";import"../../chunks/chunk-2I64AYHG.js";import{formatEnvironment}from"../../chunks/chunk-LQBC5QPO.js";import{validateLsArgs}from"../../chunks/chunk-Z4VR6CQ2.js";import"../../chunks/chunk-JZRMH5UA.js";import{validateJsonOutput}from"../../chunks/chunk-D4MW3RDW.js";import{ENV_VISIBILITY_DEPRECATION_MESSAGE,SENSITIVE_ENV_VALUE_PLACEHOLDER,formatVisibilityLabel,getApiPublicPrefix,getEnvKeyWarnings,getEnvRecords,getFrameworkPublicPrefix,getLocalSecretFallbackMessage,getLocalSvelteKitPublicPrefixes,getPublicPrefix,getPublicPrefixSecretVisibilityError,getUnavailableSecretValuesMessage,isFlagsSecretNeedingSplit,isSecretEnvVar,looksLikeSecret,looksLikeSecretValue,normalizeStdinEnvValue,pull,pullEnvRecords,removePublicPrefix,resolveEnvVarTypeOption,resolveEnvVarVisibility,shouldConfirmRotationBeforeDelete,validateEnvValue}from"../../chunks/chunk-4HXRTNAK.js";import{resolveProjectContext}from"../../chunks/chunk-EQHNA4BW.js";import"../../chunks/chunk-6JU3QZ3O.js";import"../../chunks/chunk-ULLWCOYC.js";import"../../chunks/chunk-N6CNMMSZ.js";import"../../chunks/chunk-I46LFJJG.js";import{getSubcommand}from"../../chunks/chunk-ETV3C2CV.js";import"../../chunks/chunk-OI263FBO.js";import"../../chunks/chunk-ZQIUMXCI.js";import"../../chunks/chunk-LCY4SULE.js";import"../../chunks/chunk-CVX5X5RI.js";import"../../chunks/chunk-23NBYS6R.js";import{getCommandAliases}from"../../chunks/chunk-ADDXKC3J.js";import"../../chunks/chunk-LHQUNL52.js";import"../../chunks/chunk-3R66O72V.js";import"../../chunks/chunk-D5VTBRWF.js";import"../../chunks/chunk-2RQFMCPJ.js";import"../../chunks/chunk-NT67T6DL.js";import"../../chunks/chunk-NESZV33T.js";import"../../chunks/chunk-RFWCEREA.js";import"../../chunks/chunk-KOSM3DYE.js";import"../../chunks/chunk-7JFK53D4.js";import"../../chunks/chunk-RVKOPGOI.js";import"../../chunks/chunk-HVROAV4B.js";import"../../chunks/chunk-JRU6AGXG.js";import"../../chunks/chunk-W7PVS44H.js";import"../../chunks/chunk-7I23VXBQ.js";import"../../chunks/chunk-JKTQV2QJ.js";import"../../chunks/chunk-WN6OXK2F.js";import"../../chunks/chunk-C3XFIO5L.js";import"../../chunks/chunk-FAW6NBLQ.js";import{addSubcommand,envCommand,envTargetChoices,getEnvTargetPlaceholder,isValidEnvTarget,listSubcommand,parseEnvTargetArg,pullSubcommand,removeSubcommand,runSubcommand,updateSubcommand}from"../../chunks/chunk-B5PFD6Q3.js";import"../../chunks/chunk-SOJCELXH.js";import{param}from"../../chunks/chunk-SXUEGVWB.js";import{STANDARD_ENVIRONMENTS,formatProject}from"../../chunks/chunk-6BZCSVH6.js";import{parseTarget}from"../../chunks/chunk-R3B67TKQ.js";import"../../chunks/chunk-C5KVTG2O.js";import"../../chunks/chunk-6NPXWN5F.js";import"../../chunks/chunk-S2LBGLRE.js";import{help}from"../../chunks/chunk-UOHVKN6N.js";import"../../chunks/chunk-6TAQ6OWD.js";import"../../chunks/chunk-ALXWJ7XN.js";import{require_ms}from"../../chunks/chunk-QTKJC2O5.js";import"../../chunks/chunk-CQ3RAERR.js";import{TelemetryClient,require_dist as require_dist2}from"../../chunks/chunk-MCCL762Q.js";import"../../chunks/chunk-RCTYVKM5.js";import"../../chunks/chunk-7T6TL3GQ.js";import"../../chunks/chunk-GHM7V3GG.js";import"../../chunks/chunk-5XJNPXQK.js";import{printError}from"../../chunks/chunk-7T4CJ6MJ.js";import{parseArguments}from"../../chunks/chunk-LCWCTL6L.js";import"../../chunks/chunk-MY4MONOH.js";import"../../chunks/chunk-7IRKF3ZG.js";import"../../chunks/chunk-F2ZWW2IO.js";import"../../chunks/chunk-B4ATVYZW.js";import"../../chunks/chunk-PPCFQQSU.js";import"../../chunks/chunk-BRK4OB4B.js";import"../../chunks/chunk-WPS6JZF6.js";import"../../chunks/chunk-OSCCYU74.js";import{buildCommandWithYes,buildEnvAddCommandWithPreservedArgs,buildEnvRmCommandWithPreservedArgs,buildEnvUpdateCommandWithPreservedArgs,getPreservedArgsForEnvAdd,getPreservedArgsForEnvRm,getPreservedArgsForEnvUpdate,outputActionRequired,outputAgentError,redactEnvValueArgs,withGlobalFlags}from"../../chunks/chunk-5VWK73R6.js";import{quoteArg}from"../../chunks/chunk-BKV35LVB.js";import{getFlagsSpecification,getGlobalFlagsFromArgs}from"../../chunks/chunk-PV5YI2ZZ.js";import{printAlignedLabel}from"../../chunks/chunk-YMM3VY3J.js";import"../../chunks/chunk-SM5JI6QM.js";import{getTeamByIdOrSlug}from"../../chunks/chunk-VOZEB6PD.js";import{isAPIError}from"../../chunks/chunk-RINZXCDJ.js";import{getCommandName,getCommandNamePlain,require_lib}from"../../chunks/chunk-FI772UVH.js";import{emoji,output_manager_default,prependEmoji}from"../../chunks/chunk-EWWFNMPZ.js";import{require_dist}from"../../chunks/chunk-QGIQK47P.js";import"../../chunks/chunk-AVSPFBLM.js";import"../../chunks/chunk-XCJDGQO7.js";import"../../chunks/chunk-YPTLSODC.js";import"../../chunks/chunk-7HL2RPUO.js";import{require_source}from"../../chunks/chunk-U7KCDTCH.js";import"../../chunks/chunk-N3ZZ7FHQ.js";import"../../chunks/chunk-GU6VIFR5.js";import{__toESM}from"../../chunks/chunk-6L236MNA.js";var import_chalk=__toESM(require_source(),1);var import_constants=__toESM(require_dist2(),1);async function addEnvRecord(client,projectId,upsert,type,key,value,targets,gitBranch,visibility){let actionWord=upsert?"Overriding":"Adding";output_manager_default.debug(`${actionWord} ${type} Environment Variable ${key} to ${targets.length} targets`);let target=[],customEnvironmentIds=[];for(let t of targets)(import_constants.PROJECT_ENV_TARGET.includes(t)?target:customEnvironmentIds).push(t);let body={type,key,value,target,customEnvironmentIds:customEnvironmentIds.length>0?customEnvironmentIds:void 0,gitBranch:gitBranch||void 0,...visibility!==void 0?{visibility}:{}},args=upsert?`?upsert=${upsert}`:"",url=`/v10/projects/${projectId}/env${args}`;await client.fetch(url,{method:"POST",body})}var import_error_utils=__toESM(require_dist(),1),knownErrorsCodes=new Set(["BAD_REQUEST","ENV_ALREADY_EXISTS","ENV_CONFLICT","EXISTING_KEY_AND_TARGET","FORBIDDEN","ID_NOT_FOUND","INVALID_KEY","INVALID_VALUE","KEY_INVALID_CHARACTERS","KEY_INVALID_LENGTH","KEY_RESERVED","RESERVED_ENV_VARIABLE","MAX_ENVS_EXCEEDED","MISSING_ID","MISSING_KEY","MISSING_TARGET","MISSING_VALUE","NOT_AUTHORIZED","NOT_DECRYPTABLE","SYSTEM_ENV_WITH_VALUE","TEAM_NOT_FOUND","TOO_MANY_IDS","TOO_MANY_KEYS","UNKNOWN_ERROR","VALUE_INVALID_LENGTH","VALUE_INVALID_TYPE"]);function isKnownError(error){let code=(0,import_error_utils.isErrnoException)(error)?error.code:null;return code?knownErrorsCodes.has(code.toUpperCase()):!1}var EnvAddTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentEnvironment(environment){if(environment){let allStandard=environment.split(",").map(t=>t.trim()).every(t=>STANDARD_ENVIRONMENTS.includes(t));this.trackCliArgument({arg:"environment",value:allStandard?environment:this.redactedValue})}}trackCliArgumentGitBranch(gitBranch){gitBranch&&this.trackCliArgument({arg:"git-branch",value:this.redactedValue})}trackCliOptionGitBranch(gitBranch){gitBranch&&this.trackCliOption({option:"git-branch",value:this.redactedValue})}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionVisibility(visibility){if(visibility){let validVisibilities=["config","secret"];this.trackCliOption({option:"visibility",value:validVisibilities.includes(visibility)?visibility:this.redactedValue})}}trackCliOptionType(type){if(type){let validTypes=["config","secret"];this.trackCliOption({option:"type",value:validTypes.includes(type)?type:this.redactedValue})}}trackCliFlagSensitive(sensitive){sensitive&&this.trackCliFlag("sensitive")}trackCliFlagNoSensitive(noSensitive){noSensitive&&this.trackCliFlag("no-sensitive")}trackCliFlagForce(force){force&&this.trackCliFlag("force")}trackCliFlagGuidance(guidance){guidance&&this.trackCliFlag("guidance")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};import{determineAgent}from"@vercel/detect-agent";function includesDevelopment(targets){return targets.length===0||targets.includes("development")}function getProductionSecretPolicyErrorKind(message){return/production secrets?.*different value|different value.*production secrets?/i.test(message)?"different-values":/production secrets?.*(?:own environment group|separat)|(?:own environment group|separat).*production secrets?/i.test(message)?"separate-environments":null}function getProductionSecretPolicyRecovery(kind){return kind==="different-values"?"Use different Secret values for Production and non-Production.":"Create separate Production and non-Production variables with different values."}function getSecretStorageChoice(targets,recommendedReason){let availability=includesDevelopment(targets)?"hidden in the dashboard; Development values can be pulled":"hidden in the dashboard and unavailable to pulls",recommendation=recommendedReason?`; recommended ${recommendedReason}`:"";return`Secret (${availability}${recommendation})`}function getDefaultSecretStorageGuidance(targets){return includesDevelopment(targets)?"Stored as Secret by default. This value is hidden in the dashboard; Development values can be pulled. Use `--type config` for other values you need to read later.":"Stored as Secret by default. This value is hidden in the dashboard and unavailable to pulls; use `--type config` for values you need to read later."}function looksLikeCredentialName(key,publicPrefix=getPublicPrefix(key)){return looksLikeSecret(publicPrefix?key.slice(publicPrefix.length):key)}function filterEnvChoicesForSensitivity(choices,opts){return opts.policyOn?choices.filter(c=>c.value==="development"):choices}function getTargetCompatibilityError(envTargets,isSensitive,policyOn){let hasSensitiveCapable=envTargets.some(t=>t!=="development");return!isSensitive&&policyOn&&hasSensitiveCapable?`Your team requires sensitive Environment Variables for Production and Preview. To add a non-sensitive value, target the Development Environment only. Run ${getCommandName("env add")} with the development target instead.`:null}function resolveFinalType(envTargets,isSensitive,opts){return envTargets.includes("development")&&!isSensitive||opts.forceEncrypted&&!opts.policyOn?"encrypted":isSensitive||opts.forceSensitive||opts.policyOn?"sensitive":"encrypted"}function fillEnvAddTemplate(template,opts){let targetPlaceholder=getEnvTargetPlaceholder();return template.replace(/<name>/g,opts.envName?quoteArg(opts.envName):"<name>").split(targetPlaceholder).join(opts.envTargetArg?quoteArg(opts.envTargetArg):targetPlaceholder).replace(/<git-branch>/g,opts.envGitBranch?quoteArg(opts.envGitBranch):"<git-branch>").replace(/<gitbranch>/g,opts.envGitBranch?quoteArg(opts.envGitBranch):"<gitbranch>").replace(/<value>/g,"<value>")}function multiTargetSuggestion(argv,envName,targets,addNoSensitive){let flag=addNoSensitive?" --no-sensitive":"";return{command:buildEnvAddCommandWithPreservedArgs(argv,`env add ${envName} ${targets.join(",")} --value "<value>"${flag} --yes`),when:addNoSensitive?"Add one non-sensitive variable to all listed environments":"Add one variable to multiple environments"}}function filterSensitiveMultiTargetSuggestionTargets(targets,_opts){return targets}function projectLabel(link){return`${link.org.slug}/${link.project.name}`}function formatEnvironmentTarget(target,customEnvironments){let standardTarget=envTargetChoices.find(choice=>choice.value===target);return standardTarget?standardTarget.name:customEnvironments.find(env=>env.id===target||env.slug===target)?.slug??target}function formatEnvironmentTargets(envTargets,customEnvironments){return envTargets.map(target=>formatEnvironmentTarget(target,customEnvironments)).join(", ")}function printEnvAddResult(link,envName,envTargets,envGitBranch,customEnvironments,finalType,force,visibility){output_manager_default.print(`
|
|
7
|
+
import{CHECKBOX_INSTRUCTIONS,getCustomEnvironments,readStandardInput,require_dist as require_dist3}from"../../chunks/chunk-COQGD2EI.js";import{getInvalidSubcommand}from"../../chunks/chunk-TG2RCYTH.js";import{ellipsis}from"../../chunks/chunk-ZDX75YNZ.js";import{formatTable}from"../../chunks/chunk-UED2PPFP.js";import"../../chunks/chunk-MBL6TXEJ.js";import{autoInstallVercelPlugin}from"../../chunks/chunk-MUJP4VPF.js";import{require_execa}from"../../chunks/chunk-RHUAFRZX.js";import{ENV_VISIBILITY_DEPRECATION_MESSAGE,SENSITIVE_ENV_VALUE_PLACEHOLDER,formatVisibilityLabel,getApiPublicPrefix,getEnvKeyWarnings,getEnvRecords,getFrameworkPublicPrefix,getLocalSecretFallbackMessage,getLocalSvelteKitPublicPrefixes,getPublicPrefix,getPublicPrefixSecretVisibilityError,getUnavailableSecretValuesMessage,isFlagsSecretNeedingSplit,isSecretEnvVar,looksLikeSecret,looksLikeSecretValue,normalizeStdinEnvValue,pull,pullEnvRecords,removePublicPrefix,resolveEnvVarTypeOption,resolveEnvVarVisibility,shouldConfirmRotationBeforeDelete,validateEnvValue}from"../../chunks/chunk-PY6YO4MR.js";import{resolveProjectContext}from"../../chunks/chunk-DWPCZHDT.js";import"../../chunks/chunk-5NSYN7IO.js";import"../../chunks/chunk-ULLWCOYC.js";import"../../chunks/chunk-2FQCZE6S.js";import"../../chunks/chunk-N6CNMMSZ.js";import{isGuidanceEnabled,suggestNextCommands}from"../../chunks/chunk-72YTT324.js";import{stamp_default}from"../../chunks/chunk-XPXOV5UO.js";import{getSubcommand}from"../../chunks/chunk-ETV3C2CV.js";import"../../chunks/chunk-OI263FBO.js";import"../../chunks/chunk-EA3BJUUK.js";import"../../chunks/chunk-O552UV4H.js";import"../../chunks/chunk-23NBYS6R.js";import{getCommandAliases}from"../../chunks/chunk-RERUTI3O.js";import"../../chunks/chunk-O5A7CNRV.js";import"../../chunks/chunk-774D3BGN.js";import"../../chunks/chunk-MOLEXKVC.js";import"../../chunks/chunk-EDDOQXEI.js";import"../../chunks/chunk-35QK5NDD.js";import"../../chunks/chunk-M4IWOZEG.js";import"../../chunks/chunk-OQVE2WXX.js";import"../../chunks/chunk-7SNMU7U7.js";import"../../chunks/chunk-6C4RPAG7.js";import"../../chunks/chunk-DZZFEAM6.js";import"../../chunks/chunk-S54ISKGR.js";import"../../chunks/chunk-WOTPEBSH.js";import"../../chunks/chunk-YW5R6XQI.js";import"../../chunks/chunk-ZTUQEA2X.js";import"../../chunks/chunk-JKTQV2QJ.js";import"../../chunks/chunk-P3YADO62.js";import"../../chunks/chunk-H3QRCTIJ.js";import"../../chunks/chunk-FAW6NBLQ.js";import"../../chunks/chunk-2I64AYHG.js";import{addSubcommand,envCommand,envTargetChoices,getEnvTargetPlaceholder,isValidEnvTarget,listSubcommand,parseEnvTargetArg,pullSubcommand,removeSubcommand,runSubcommand,updateSubcommand}from"../../chunks/chunk-HVJERSGE.js";import"../../chunks/chunk-SOJCELXH.js";import{param}from"../../chunks/chunk-SXUEGVWB.js";import{formatEnvironment}from"../../chunks/chunk-PTKSYVXM.js";import{validateLsArgs}from"../../chunks/chunk-WNG72BRT.js";import{STANDARD_ENVIRONMENTS,formatProject}from"../../chunks/chunk-ILR6YA2A.js";import"../../chunks/chunk-JZRMH5UA.js";import{parseTarget}from"../../chunks/chunk-MCOJUSDV.js";import"../../chunks/chunk-UKC3NSS6.js";import"../../chunks/chunk-DQXGNNPB.js";import"../../chunks/chunk-JNLWD6DK.js";import{help}from"../../chunks/chunk-W6M24BQ4.js";import"../../chunks/chunk-6TAQ6OWD.js";import{printError}from"../../chunks/chunk-2Z47VG5H.js";import{buildCommandWithYes,buildEnvAddCommandWithPreservedArgs,buildEnvRmCommandWithPreservedArgs,buildEnvUpdateCommandWithPreservedArgs,getPreservedArgsForEnvAdd,getPreservedArgsForEnvRm,getPreservedArgsForEnvUpdate,outputActionRequired,outputAgentError,redactEnvValueArgs,withGlobalFlags}from"../../chunks/chunk-EJNFKH6Y.js";import"../../chunks/chunk-WPS6JZF6.js";import"../../chunks/chunk-OSCCYU74.js";import{validateJsonOutput}from"../../chunks/chunk-D4MW3RDW.js";import"../../chunks/chunk-GXNSAACA.js";import"../../chunks/chunk-CAAD55US.js";import{require_ms}from"../../chunks/chunk-QTKJC2O5.js";import{TelemetryClient,require_dist as require_dist2}from"../../chunks/chunk-3J2P52OU.js";import"../../chunks/chunk-RCTYVKM5.js";import"../../chunks/chunk-7T6TL3GQ.js";import"../../chunks/chunk-BRK4OB4B.js";import"../../chunks/chunk-GHM7V3GG.js";import"../../chunks/chunk-5XJNPXQK.js";import"../../chunks/chunk-MY4MONOH.js";import{parseArguments}from"../../chunks/chunk-MQW6DKD2.js";import{quoteArg}from"../../chunks/chunk-BKV35LVB.js";import{getFlagsSpecification,getGlobalFlagsFromArgs}from"../../chunks/chunk-5IPBCD7K.js";import"../../chunks/chunk-QMTPSHRV.js";import"../../chunks/chunk-B4ATVYZW.js";import"../../chunks/chunk-F2ZWW2IO.js";import"../../chunks/chunk-PPCFQQSU.js";import{printAlignedLabel}from"../../chunks/chunk-QCOPZAUC.js";import"../../chunks/chunk-HRQQ2N5B.js";import{getTeamByIdOrSlug}from"../../chunks/chunk-VOZEB6PD.js";import{isAPIError}from"../../chunks/chunk-4WS3D23J.js";import{getCommandName,getCommandNamePlain,require_lib}from"../../chunks/chunk-FI772UVH.js";import{emoji,output_manager_default,prependEmoji}from"../../chunks/chunk-MR423MWE.js";import{require_dist}from"../../chunks/chunk-QGIQK47P.js";import"../../chunks/chunk-AVSPFBLM.js";import"../../chunks/chunk-XCJDGQO7.js";import"../../chunks/chunk-YPTLSODC.js";import"../../chunks/chunk-7HL2RPUO.js";import{require_source}from"../../chunks/chunk-U7KCDTCH.js";import"../../chunks/chunk-N3ZZ7FHQ.js";import"../../chunks/chunk-GU6VIFR5.js";import{__toESM}from"../../chunks/chunk-6L236MNA.js";var import_chalk=__toESM(require_source(),1);var import_constants=__toESM(require_dist2(),1);async function addEnvRecord(client,projectId,upsert,type,key,value,targets,gitBranch,visibility){let actionWord=upsert?"Overriding":"Adding";output_manager_default.debug(`${actionWord} ${type} Environment Variable ${key} to ${targets.length} targets`);let target=[],customEnvironmentIds=[];for(let t of targets)(import_constants.PROJECT_ENV_TARGET.includes(t)?target:customEnvironmentIds).push(t);let body={type,key,value,target,customEnvironmentIds:customEnvironmentIds.length>0?customEnvironmentIds:void 0,gitBranch:gitBranch||void 0,...visibility!==void 0?{visibility}:{}},args=upsert?`?upsert=${upsert}`:"",url=`/v10/projects/${projectId}/env${args}`;await client.fetch(url,{method:"POST",body})}var import_error_utils=__toESM(require_dist(),1),knownErrorsCodes=new Set(["BAD_REQUEST","ENV_ALREADY_EXISTS","ENV_CONFLICT","EXISTING_KEY_AND_TARGET","FORBIDDEN","ID_NOT_FOUND","INVALID_KEY","INVALID_VALUE","KEY_INVALID_CHARACTERS","KEY_INVALID_LENGTH","KEY_RESERVED","RESERVED_ENV_VARIABLE","MAX_ENVS_EXCEEDED","MISSING_ID","MISSING_KEY","MISSING_TARGET","MISSING_VALUE","NOT_AUTHORIZED","NOT_DECRYPTABLE","SYSTEM_ENV_WITH_VALUE","TEAM_NOT_FOUND","TOO_MANY_IDS","TOO_MANY_KEYS","UNKNOWN_ERROR","VALUE_INVALID_LENGTH","VALUE_INVALID_TYPE"]);function isKnownError(error){let code=(0,import_error_utils.isErrnoException)(error)?error.code:null;return code?knownErrorsCodes.has(code.toUpperCase()):!1}var EnvAddTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentEnvironment(environment){if(environment){let allStandard=environment.split(",").map(t=>t.trim()).every(t=>STANDARD_ENVIRONMENTS.includes(t));this.trackCliArgument({arg:"environment",value:allStandard?environment:this.redactedValue})}}trackCliArgumentGitBranch(gitBranch){gitBranch&&this.trackCliArgument({arg:"git-branch",value:this.redactedValue})}trackCliOptionGitBranch(gitBranch){gitBranch&&this.trackCliOption({option:"git-branch",value:this.redactedValue})}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionVisibility(visibility){if(visibility){let validVisibilities=["config","secret"];this.trackCliOption({option:"visibility",value:validVisibilities.includes(visibility)?visibility:this.redactedValue})}}trackCliOptionType(type){if(type){let validTypes=["config","secret"];this.trackCliOption({option:"type",value:validTypes.includes(type)?type:this.redactedValue})}}trackCliFlagSensitive(sensitive){sensitive&&this.trackCliFlag("sensitive")}trackCliFlagNoSensitive(noSensitive){noSensitive&&this.trackCliFlag("no-sensitive")}trackCliFlagForce(force){force&&this.trackCliFlag("force")}trackCliFlagGuidance(guidance){guidance&&this.trackCliFlag("guidance")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};import{determineAgent}from"@vercel/detect-agent";function includesDevelopment(targets){return targets.length===0||targets.includes("development")}function getProductionSecretPolicyErrorKind(message){return/production secrets?.*different value|different value.*production secrets?/i.test(message)?"different-values":/production secrets?.*(?:own environment group|separat)|(?:own environment group|separat).*production secrets?/i.test(message)?"separate-environments":null}function getProductionSecretPolicyRecovery(kind){return kind==="different-values"?"Use different Secret values for Production and non-Production.":"Create separate Production and non-Production variables with different values."}function getSecretStorageChoice(targets,recommendedReason){let availability=includesDevelopment(targets)?"hidden in the dashboard; Development values can be pulled":"hidden in the dashboard and unavailable to pulls",recommendation=recommendedReason?`; recommended ${recommendedReason}`:"";return`Secret (${availability}${recommendation})`}function getDefaultSecretStorageGuidance(targets){return includesDevelopment(targets)?"Stored as Secret by default. This value is hidden in the dashboard; Development values can be pulled. Use `--type config` for other values you need to read later.":"Stored as Secret by default. This value is hidden in the dashboard and unavailable to pulls; use `--type config` for values you need to read later."}function looksLikeCredentialName(key,publicPrefix=getPublicPrefix(key)){return looksLikeSecret(publicPrefix?key.slice(publicPrefix.length):key)}function filterEnvChoicesForSensitivity(choices,opts){return opts.policyOn?choices.filter(c=>c.value==="development"):choices}function getTargetCompatibilityError(envTargets,isSensitive,policyOn){let hasSensitiveCapable=envTargets.some(t=>t!=="development");return!isSensitive&&policyOn&&hasSensitiveCapable?`Your team requires sensitive Environment Variables for Production and Preview. To add a non-sensitive value, target the Development Environment only. Run ${getCommandName("env add")} with the development target instead.`:null}function resolveFinalType(envTargets,isSensitive,opts){return envTargets.includes("development")&&!isSensitive||opts.forceEncrypted&&!opts.policyOn?"encrypted":isSensitive||opts.forceSensitive||opts.policyOn?"sensitive":"encrypted"}function fillEnvAddTemplate(template,opts){let targetPlaceholder=getEnvTargetPlaceholder();return template.replace(/<name>/g,opts.envName?quoteArg(opts.envName):"<name>").split(targetPlaceholder).join(opts.envTargetArg?quoteArg(opts.envTargetArg):targetPlaceholder).replace(/<git-branch>/g,opts.envGitBranch?quoteArg(opts.envGitBranch):"<git-branch>").replace(/<gitbranch>/g,opts.envGitBranch?quoteArg(opts.envGitBranch):"<gitbranch>").replace(/<value>/g,"<value>")}function multiTargetSuggestion(argv,envName,targets,addNoSensitive){let flag=addNoSensitive?" --no-sensitive":"";return{command:buildEnvAddCommandWithPreservedArgs(argv,`env add ${envName} ${targets.join(",")} --value "<value>"${flag} --yes`),when:addNoSensitive?"Add one non-sensitive variable to all listed environments":"Add one variable to multiple environments"}}function filterSensitiveMultiTargetSuggestionTargets(targets,_opts){return targets}function projectLabel(link){return`${link.org.slug}/${link.project.name}`}function formatEnvironmentTarget(target,customEnvironments){let standardTarget=envTargetChoices.find(choice=>choice.value===target);return standardTarget?standardTarget.name:customEnvironments.find(env=>env.id===target||env.slug===target)?.slug??target}function formatEnvironmentTargets(envTargets,customEnvironments){return envTargets.map(target=>formatEnvironmentTarget(target,customEnvironments)).join(", ")}function printEnvAddResult(link,envName,envTargets,envGitBranch,customEnvironments,finalType,force,visibility){output_manager_default.print(`
|
|
8
8
|
`),printAlignedLabel(force?"Overrode":"Added",envName,{gutter:"\u2713"}),printAlignedLabel("Project",projectLabel(link)),printAlignedLabel("Environments",formatEnvironmentTargets(envTargets,customEnvironments)),envGitBranch&&printAlignedLabel("Branch",envGitBranch);let visibilityLabel=formatVisibilityLabel(visibility,finalType);visibilityLabel&&printAlignedLabel("Type",visibilityLabel)}function printEnvAddWarning(message){output_manager_default.print(`${import_chalk.default.yellow("!")} ${message}
|
|
9
|
-
`)}function promptEnvValue(client,opts){return client.input.text({message:"Value?",...opts.isSensitive?{transformer:value=>"*".repeat(value.length)}:{}})}function buildHumanEnvAddCommand(argv,commandTemplate){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2),{preserveProject:!0}).filter(flag=>!flag.startsWith("--non-interactive")),suffix=globalFlags.length>0?` ${globalFlags.map(quoteArg).join(" ")}`:"";return getCommandNamePlain(`${commandTemplate}${suffix}`)}async function add(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:err instanceof Error?err.message:String(err)},1),printError(err),1}let{args,flags:opts}=parsedArgs,stdInput=await readStandardInput(client.stdin),valueFromFlag=typeof opts["--value"]=="string"?opts["--value"]:void 0,[envName,envTargetArg]=args,positionalGitBranch=args[2],optionGitBranch=typeof opts["--git-branch"]=="string"?opts["--git-branch"]:void 0,envGitBranch=optionGitBranch??positionalGitBranch,forceSensitive=!!opts["--sensitive"],forceEncrypted=!!opts["--no-sensitive"],typeOption=resolveEnvVarTypeOption({type:typeof opts["--type"]=="string"?opts["--type"]:void 0,visibility:typeof opts["--visibility"]=="string"?opts["--visibility"]:void 0}),explicitType=typeOption.explicitVisibility,typeSource=explicitType||forceSensitive||forceEncrypted?"argv":void 0,telemetryClient=new EnvAddTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetryClient.trackCliArgumentName(envName),telemetryClient.trackCliArgumentEnvironment(envTargetArg),telemetryClient.trackCliArgumentGitBranch(positionalGitBranch),telemetryClient.trackCliOptionGitBranch(optionGitBranch),telemetryClient.trackCliOptionValue(valueFromFlag===void 0?void 0:"<redacted>"),telemetryClient.trackCliFlagSensitive(opts["--sensitive"]),telemetryClient.trackCliFlagNoSensitive(opts["--no-sensitive"]),telemetryClient.trackCliFlagForce(opts["--force"]),telemetryClient.trackCliFlagGuidance(opts["--guidance"]),telemetryClient.trackCliFlagYes(opts["--yes"]),telemetryClient.trackCliOptionType(typeof opts["--type"]=="string"?opts["--type"]:void 0),telemetryClient.trackCliOptionVisibility(typeof opts["--visibility"]=="string"?opts["--visibility"]:void 0),telemetryClient.trackCliOptionProject(opts["--project"]),typeOption.error)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:typeOption.errorReason??"invalid_type",message:typeOption.error},1),output_manager_default.fatal(typeOption.error),1;typeOption.usedDeprecatedVisibility&&printEnvAddWarning(ENV_VISIBILITY_DEPRECATION_MESSAGE);let typeConflictMessage=forceSensitive?forceEncrypted?"`--sensitive` and `--no-sensitive` cannot be used together. Pick one.":explicitType==="config"?"`--type config` cannot be used with `--sensitive`. Pick one.":null:forceEncrypted&&explicitType==="secret"?"`--type secret` cannot be used with `--no-sensitive`. Pick one.":null;if(typeConflictMessage)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"conflicting_type_flags",message:typeConflictMessage},1),output_manager_default.fatal(typeConflictMessage),1;if(positionalGitBranch&&optionGitBranch)return output_manager_default.error("Git branch was provided twice. Use either `--git-branch <git-branch>` or the legacy third argument."),1;if(args.length>3)return output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName(`env add <name> ${getEnvTargetPlaceholder()} --git-branch <git-branch>`)}`),1;if(stdInput&&(!envName||!envTargetArg))return output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName("env add <name> <target> --git-branch <git-branch> < <file>")}`),1;let envTargets=envTargetArg?parseEnvTargetArg(envTargetArg):[],resolvedLink;if(client.nonInteractive){let link2=await resolveProjectContext({client,projectNameOrId:opts["--project"]});if(link2.status==="error")return link2.exitCode;if(link2.status==="not_linked"){let preserved=getPreservedArgsForEnvAdd(client.argv),linkPreserved=preserved.filter((a,i)=>!(a==="--value"||a.startsWith("--value=")||i>0&&preserved[i-1]==="--value")),linkArgv=[...client.argv.slice(0,2),"link","--scope","<scope>",...linkPreserved],envAddRetryArgv=redactEnvValueArgs(client.argv);if(envTargetArg==="preview"&&envGitBranch===void 0){let argvArgs=client.argv.slice(2),addIdx=argvArgs.indexOf("add");if(addIdx!==-1){let pos=addIdx+1,positionals=0;for(;pos<argvArgs.length&&positionals<3&&!argvArgs[pos].startsWith("-");)positionals++,pos++;let insertAt=2+pos;envAddRetryArgv=redactEnvValueArgs([...client.argv.slice(0,insertAt),"<gitbranch>",...client.argv.slice(insertAt)])}}outputAgentError(client,{status:"error",reason:"not_linked",message:`Your codebase isn't linked to a project on Vercel. Run \`${getCommandNamePlain("link")}\` to begin. Use \`--yes\` for non-interactive mode; use \`--scope\` or \`--project\` to specify a team or project. Then run your \`env add\` command.`,next:[{command:buildCommandWithYes(linkArgv)},{command:buildCommandWithYes(envAddRetryArgv)}]},1)}if(link2.status!=="linked")return 1;resolvedLink=link2;let{project:project2}=link2,org=link2.org;client.config.currentTeam=org.type==="team"?org.id:void 0;let[{envs:envs2},customEnvironments2]=await Promise.all([getEnvRecords(client,project2.id,"vercel-cli:env:add"),getCustomEnvironments(client,project2.id)]),matchingEnvs2=envs2.filter(r=>r.key===envName),existingTargets2=new Set,existingCustomEnvs2=new Set;for(let env of matchingEnvs2){if(typeof env.target=="string")existingTargets2.add(env.target);else if(Array.isArray(env.target))for(let target of env.target)existingTargets2.add(target);if(env.customEnvironmentIds)for(let customEnvId of env.customEnvironmentIds)existingCustomEnvs2.add(customEnvId)}let choices2=[...envTargetChoices.filter(c=>!existingTargets2.has(c.value)),...customEnvironments2.filter(c=>!existingCustomEnvs2.has(c.id)).map(c=>({name:c.slug,value:c.id}))],missing=[];if(envName||missing.push("missing_name"),valueFromFlag===void 0&&!stdInput&&missing.push("missing_value"),!envTargetArg&&choices2.length>0&&missing.push("missing_environment"),envTargetArg==="preview"&&envGitBranch===void 0&&!(client.nonInteractive&&args.length===2)&&missing.push("git_branch_required"),missing.length>0){let parts=missing.map(m=>m==="missing_name"?"variable name":m==="missing_value"?"--value or stdin":m==="missing_environment"?"environment (production, preview, development, or a comma-separated list)":m==="git_branch_required"?"`--git-branch <git-branch>` for Preview, or omit for all Preview branches":m),fullTemplate=`env add <name> ${getEnvTargetPlaceholder()} --value "<value>" --yes`,filledTemplate=fillEnvAddTemplate(fullTemplate,{envName,envTargetArg,envGitBranch}),next=[];if(missing.length===1&&missing[0]==="git_branch_required"||next.push({command:buildEnvAddCommandWithPreservedArgs(client.argv,filledTemplate)}),missing.includes("git_branch_required")&&envName&&(valueFromFlag!==void 0||stdInput)){let branchSpecific=fillEnvAddTemplate('env add <name> preview --git-branch <git-branch> --value "<value>" --yes',{envName,envTargetArg:"preview"}),branchAll=fillEnvAddTemplate('env add <name> preview --value "<value>" --yes',{envName,envTargetArg:"preview"});next.push({command:buildEnvAddCommandWithPreservedArgs(client.argv,branchSpecific),when:"Add to a specific Git branch"},{command:buildEnvAddCommandWithPreservedArgs(client.argv,branchAll),when:"Add to all Preview branches"})}if(missing.includes("missing_environment")){let standardAvailable=choices2.map(c=>c.value).filter(v=>isValidEnvTarget(v)),multiTargets=filterSensitiveMultiTargetSuggestionTargets(standardAvailable,{forceSensitive:!!opts["--sensitive"],policyOn:!1});multiTargets.length>1&&next.push(multiTargetSuggestion(client.argv,envName||"<name>",multiTargets,multiTargets.includes("development")&&!opts["--no-sensitive"]))}outputActionRequired(client,{status:"action_required",reason:"missing_requirements",missing,message:`Provide all required inputs for non-interactive mode: ${parts.join("; ")}. Example: \`${filledTemplate}\``,next},1)}}if(envName||(envName=await client.input.text({message:"Name?",validate:val=>val?!0:"Name cannot be empty"})),!resolvedLink){let link2=await resolveProjectContext({client,projectNameOrId:opts["--project"]});if(link2.status==="error")return link2.exitCode;if(link2.status==="not_linked"){if(client.nonInteractive){let preserved=getPreservedArgsForEnvAdd(client.argv),linkPreserved=preserved.filter((a,i)=>!(a==="--value"||a.startsWith("--value=")||i>0&&preserved[i-1]==="--value")),linkArgv=[...client.argv.slice(0,2),"link","--scope","<scope>",...linkPreserved];outputAgentError(client,{status:"error",reason:"not_linked",message:`Your codebase isn't linked to a project on Vercel. Run ${getCommandNamePlain("link")} to begin. Use --yes for non-interactive; use --scope or --project to specify team or project. Then run your env add command.`,next:[{command:buildCommandWithYes(linkArgv)},{command:buildCommandWithYes(redactEnvValueArgs(client.argv))}]},1)}else output_manager_default.error(`Your codebase isn\u2019t linked to a project on Vercel. Run ${getCommandName("link")} to begin.`);return 1}resolvedLink=link2}let link=resolvedLink;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;if(explicitType==="secret"||forceSensitive){let publicPrefixError=getPublicPrefixSecretVisibilityError(envName,{visibility:explicitType==="secret"?"secret":void 0,type:"sensitive",context:"add"});if(publicPrefixError)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message:publicPrefixError},1),output_manager_default.fatal(publicPrefixError),1}let keyAccepted=!1;for(;!keyAccepted;){let apiPublicPrefix2=getApiPublicPrefix(envName),frameworkPublicPrefix=getFrameworkPublicPrefix(project.framework,envName),globallyKnownPrefix=getPublicPrefix(envName),keyWarnings=frameworkPublicPrefix!==null&&(explicitType==="secret"||forceSensitive)||globallyKnownPrefix!==null&&apiPublicPrefix2===null&&frameworkPublicPrefix===null?[]:getEnvKeyWarnings(envName);if(!keyWarnings.find(w=>w.requiresConfirmation)){for(let warning of keyWarnings)printEnvAddWarning(warning.message);keyAccepted=!0;break}let nameWithoutPrefix=removePublicPrefix(envName),publicPrefix=getPublicPrefix(envName);if(typeSource==="argv"){for(let warning of keyWarnings)printEnvAddWarning(warning.message);keyAccepted=!0;break}let privateCommand=buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${nameWithoutPrefix} ${envTargetArg??getEnvTargetPlaceholder()} --type secret --value "<value>" --yes`),publicCommand=buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} ${envTargetArg??getEnvTargetPlaceholder()} --type config --value "<value>" --yes`),humanTargetArg=envTargetArg?` ${envTargetArg}`:"",privateHumanCommand=buildHumanEnvAddCommand(client.argv,`env add ${nameWithoutPrefix}${humanTargetArg} --type secret`),publicHumanCommand=buildHumanEnvAddCommand(client.argv,`env add ${envName}${humanTargetArg} --type config`),message=`\`${envName}\` looks like a credential, and \`${publicPrefix}\` exposes its value to anyone visiting your site. Choose explicitly: rename to \`${nameWithoutPrefix}\` with \`--type secret\` to keep it private, or keep the name with \`--type config\` to expose it.`;if(client.nonInteractive||opts["--yes"]||stdInput)return client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"public_prefix_requires_type",message,choices:[{id:"private",name:`Keep private: rename to ${nameWithoutPrefix} and use Secret`},{id:"public",name:`Expose publicly: keep ${envName} as Config`}],next:[{command:privateCommand,when:"Keep it private; replace <value> before running"},{command:publicCommand,when:"Expose it publicly; replace <value> before running"}]}),output_manager_default.fatal(message),output_manager_default.print(` Keep it private:
|
|
9
|
+
`)}function promptEnvValue(client,opts){return client.input.text({message:"Value?",...opts.isSensitive?{transformer:value=>"*".repeat(value.length)}:{}})}function buildHumanEnvAddCommand(argv,commandTemplate){let globalFlags=getGlobalFlagsFromArgs(argv.slice(2),{preserveProject:!0}).filter(flag=>!flag.startsWith("--non-interactive")),suffix=globalFlags.length>0?` ${globalFlags.map(quoteArg).join(" ")}`:"";return getCommandNamePlain(`${commandTemplate}${suffix}`)}async function add(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags:opts}=parsedArgs,stdInput=await readStandardInput(client.stdin),valueFromFlag=typeof opts["--value"]=="string"?opts["--value"]:void 0,[envName,envTargetArg]=args,positionalGitBranch=args[2],optionGitBranch=typeof opts["--git-branch"]=="string"?opts["--git-branch"]:void 0,envGitBranch=optionGitBranch??positionalGitBranch,forceSensitive=!!opts["--sensitive"],forceEncrypted=!!opts["--no-sensitive"],typeOption=resolveEnvVarTypeOption({type:typeof opts["--type"]=="string"?opts["--type"]:void 0,visibility:typeof opts["--visibility"]=="string"?opts["--visibility"]:void 0}),explicitType=typeOption.explicitVisibility,typeSource=explicitType||forceSensitive||forceEncrypted?"argv":void 0,telemetryClient=new EnvAddTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetryClient.trackCliArgumentName(envName),telemetryClient.trackCliArgumentEnvironment(envTargetArg),telemetryClient.trackCliArgumentGitBranch(positionalGitBranch),telemetryClient.trackCliOptionGitBranch(optionGitBranch),telemetryClient.trackCliOptionValue(valueFromFlag===void 0?void 0:"<redacted>"),telemetryClient.trackCliFlagSensitive(opts["--sensitive"]),telemetryClient.trackCliFlagNoSensitive(opts["--no-sensitive"]),telemetryClient.trackCliFlagForce(opts["--force"]),telemetryClient.trackCliFlagGuidance(opts["--guidance"]),telemetryClient.trackCliFlagYes(opts["--yes"]),telemetryClient.trackCliOptionType(typeof opts["--type"]=="string"?opts["--type"]:void 0),telemetryClient.trackCliOptionVisibility(typeof opts["--visibility"]=="string"?opts["--visibility"]:void 0),telemetryClient.trackCliOptionProject(opts["--project"]),typeOption.error)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:typeOption.errorReason??"invalid_type",message:typeOption.error},1),output_manager_default.fatal(typeOption.error),1;typeOption.usedDeprecatedVisibility&&printEnvAddWarning(ENV_VISIBILITY_DEPRECATION_MESSAGE);let typeConflictMessage=forceSensitive?forceEncrypted?"`--sensitive` and `--no-sensitive` cannot be used together. Pick one.":explicitType==="config"?"`--type config` cannot be used with `--sensitive`. Pick one.":null:forceEncrypted&&explicitType==="secret"?"`--type secret` cannot be used with `--no-sensitive`. Pick one.":null;if(typeConflictMessage)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"conflicting_type_flags",message:typeConflictMessage},2),output_manager_default.fatal(typeConflictMessage),2;if(positionalGitBranch&&optionGitBranch)return output_manager_default.error("Git branch was provided twice. Use either `--git-branch <git-branch>` or the legacy third argument."),2;if(args.length>3)return output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName(`env add <name> ${getEnvTargetPlaceholder()} --git-branch <git-branch>`)}`),2;if(stdInput&&(!envName||!envTargetArg))return output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName("env add <name> <target> --git-branch <git-branch> < <file>")}`),2;let envTargets=envTargetArg?parseEnvTargetArg(envTargetArg):[],resolvedLink;if(client.nonInteractive){let link2=await resolveProjectContext({client,projectNameOrId:opts["--project"]});if(link2.status==="error")return link2.exitCode;if(link2.status==="not_linked"){let preserved=getPreservedArgsForEnvAdd(client.argv),linkPreserved=preserved.filter((a,i)=>!(a==="--value"||a.startsWith("--value=")||i>0&&preserved[i-1]==="--value")),linkArgv=[...client.argv.slice(0,2),"link","--scope","<scope>",...linkPreserved],envAddRetryArgv=redactEnvValueArgs(client.argv);if(envTargetArg==="preview"&&envGitBranch===void 0){let argvArgs=client.argv.slice(2),addIdx=argvArgs.indexOf("add");if(addIdx!==-1){let pos=addIdx+1,positionals=0;for(;pos<argvArgs.length&&positionals<3&&!argvArgs[pos].startsWith("-");)positionals++,pos++;let insertAt=2+pos;envAddRetryArgv=redactEnvValueArgs([...client.argv.slice(0,insertAt),"<gitbranch>",...client.argv.slice(insertAt)])}}outputAgentError(client,{status:"error",reason:"not_linked",message:`Your codebase isn't linked to a project on Vercel. Run \`${getCommandNamePlain("link")}\` to begin. Use \`--yes\` for non-interactive mode; use \`--scope\` or \`--project\` to specify a team or project. Then run your \`env add\` command.`,next:[{command:buildCommandWithYes(linkArgv)},{command:buildCommandWithYes(envAddRetryArgv)}]},1)}if(link2.status!=="linked")return 1;resolvedLink=link2;let{project:project2}=link2,org=link2.org;client.config.currentTeam=org.type==="team"?org.id:void 0;let[{envs:envs2},customEnvironments2]=await Promise.all([getEnvRecords(client,project2.id,"vercel-cli:env:add"),getCustomEnvironments(client,project2.id)]),matchingEnvs2=envs2.filter(r=>r.key===envName),existingTargets2=new Set,existingCustomEnvs2=new Set;for(let env of matchingEnvs2){if(typeof env.target=="string")existingTargets2.add(env.target);else if(Array.isArray(env.target))for(let target of env.target)existingTargets2.add(target);if(env.customEnvironmentIds)for(let customEnvId of env.customEnvironmentIds)existingCustomEnvs2.add(customEnvId)}let choices2=[...envTargetChoices.filter(c=>!existingTargets2.has(c.value)),...customEnvironments2.filter(c=>!existingCustomEnvs2.has(c.id)).map(c=>({name:c.slug,value:c.id}))],missing=[];if(envName||missing.push("missing_name"),valueFromFlag===void 0&&!stdInput&&missing.push("missing_value"),!envTargetArg&&choices2.length>0&&missing.push("missing_environment"),envTargetArg==="preview"&&envGitBranch===void 0&&!(client.nonInteractive&&args.length===2)&&missing.push("git_branch_required"),missing.length>0){let parts=missing.map(m=>m==="missing_name"?"variable name":m==="missing_value"?"--value or stdin":m==="missing_environment"?"environment (production, preview, development, or a comma-separated list)":m==="git_branch_required"?"`--git-branch <git-branch>` for Preview, or omit for all Preview branches":m),fullTemplate=`env add <name> ${getEnvTargetPlaceholder()} --value "<value>" --yes`,filledTemplate=fillEnvAddTemplate(fullTemplate,{envName,envTargetArg,envGitBranch}),next=[];if(missing.length===1&&missing[0]==="git_branch_required"||next.push({command:buildEnvAddCommandWithPreservedArgs(client.argv,filledTemplate)}),missing.includes("git_branch_required")&&envName&&(valueFromFlag!==void 0||stdInput)){let branchSpecific=fillEnvAddTemplate('env add <name> preview --git-branch <git-branch> --value "<value>" --yes',{envName,envTargetArg:"preview"}),branchAll=fillEnvAddTemplate('env add <name> preview --value "<value>" --yes',{envName,envTargetArg:"preview"});next.push({command:buildEnvAddCommandWithPreservedArgs(client.argv,branchSpecific),when:"Add to a specific Git branch"},{command:buildEnvAddCommandWithPreservedArgs(client.argv,branchAll),when:"Add to all Preview branches"})}if(missing.includes("missing_environment")){let standardAvailable=choices2.map(c=>c.value).filter(v=>isValidEnvTarget(v)),multiTargets=filterSensitiveMultiTargetSuggestionTargets(standardAvailable,{forceSensitive:!!opts["--sensitive"],policyOn:!1});multiTargets.length>1&&next.push(multiTargetSuggestion(client.argv,envName||"<name>",multiTargets,multiTargets.includes("development")&&!opts["--no-sensitive"]))}outputActionRequired(client,{status:"action_required",reason:"missing_requirements",missing,message:`Provide all required inputs for non-interactive mode: ${parts.join("; ")}. Example: \`${filledTemplate}\``,next},1)}}if(envName||(envName=await client.input.text({message:"Name?",validate:val=>val?!0:"Name cannot be empty"})),!resolvedLink){let link2=await resolveProjectContext({client,projectNameOrId:opts["--project"]});if(link2.status==="error")return link2.exitCode;if(link2.status==="not_linked"){if(client.nonInteractive){let preserved=getPreservedArgsForEnvAdd(client.argv),linkPreserved=preserved.filter((a,i)=>!(a==="--value"||a.startsWith("--value=")||i>0&&preserved[i-1]==="--value")),linkArgv=[...client.argv.slice(0,2),"link","--scope","<scope>",...linkPreserved];outputAgentError(client,{status:"error",reason:"not_linked",message:`Your codebase isn't linked to a project on Vercel. Run ${getCommandNamePlain("link")} to begin. Use --yes for non-interactive; use --scope or --project to specify team or project. Then run your env add command.`,next:[{command:buildCommandWithYes(linkArgv)},{command:buildCommandWithYes(redactEnvValueArgs(client.argv))}]},1)}else output_manager_default.error(`Your codebase isn\u2019t linked to a project on Vercel. Run ${getCommandName("link")} to begin.`);return 1}resolvedLink=link2}let link=resolvedLink;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;if(explicitType==="secret"||forceSensitive){let publicPrefixError=getPublicPrefixSecretVisibilityError(envName,{visibility:explicitType==="secret"?"secret":void 0,type:"sensitive",context:"add"});if(publicPrefixError)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message:publicPrefixError},2),output_manager_default.fatal(publicPrefixError),2}let keyAccepted=!1;for(;!keyAccepted;){let apiPublicPrefix2=getApiPublicPrefix(envName),frameworkPublicPrefix=getFrameworkPublicPrefix(project.framework,envName),globallyKnownPrefix=getPublicPrefix(envName),keyWarnings=frameworkPublicPrefix!==null&&(explicitType==="secret"||forceSensitive)||globallyKnownPrefix!==null&&apiPublicPrefix2===null&&frameworkPublicPrefix===null?[]:getEnvKeyWarnings(envName);if(!keyWarnings.find(w=>w.requiresConfirmation)){for(let warning of keyWarnings)printEnvAddWarning(warning.message);keyAccepted=!0;break}let nameWithoutPrefix=removePublicPrefix(envName),publicPrefix=getPublicPrefix(envName);if(typeSource==="argv"){for(let warning of keyWarnings)printEnvAddWarning(warning.message);keyAccepted=!0;break}let privateCommand=buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${nameWithoutPrefix} ${envTargetArg??getEnvTargetPlaceholder()} --type secret --value "<value>" --yes`),publicCommand=buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} ${envTargetArg??getEnvTargetPlaceholder()} --type config --value "<value>" --yes`),humanTargetArg=envTargetArg?` ${envTargetArg}`:"",privateHumanCommand=buildHumanEnvAddCommand(client.argv,`env add ${nameWithoutPrefix}${humanTargetArg} --type secret`),publicHumanCommand=buildHumanEnvAddCommand(client.argv,`env add ${envName}${humanTargetArg} --type config`),message=`\`${envName}\` looks like a credential, and \`${publicPrefix}\` exposes its value to anyone visiting your site. Choose explicitly: rename to \`${nameWithoutPrefix}\` with \`--type secret\` to keep it private, or keep the name with \`--type config\` to expose it.`;if(client.nonInteractive||opts["--yes"]||stdInput)return client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"public_prefix_requires_type",message,choices:[{id:"private",name:`Keep private: rename to ${nameWithoutPrefix} and use Secret`},{id:"public",name:`Expose publicly: keep ${envName} as Config`}],next:[{command:privateCommand,when:"Keep it private; replace <value> before running"},{command:publicCommand,when:"Expose it publicly; replace <value> before running"}]}),output_manager_default.fatal(message),output_manager_default.print(` Keep it private:
|
|
10
10
|
${privateHumanCommand}
|
|
11
11
|
`),output_manager_default.print(` Expose it publicly:
|
|
12
12
|
${publicHumanCommand}
|
|
13
|
-
`),1;for(let warning of keyWarnings)printEnvAddWarning(warning.message);let action=await client.input.select({message:"How should this variable be stored?",choices:[{name:`Keep private: rename to ${nameWithoutPrefix} and use Secret`,value:"p"},{name:`Expose to anyone visiting your site: keep ${envName} as Config`,value:"c"},{name:"Enter a different name",value:"r"}]});action==="p"?(envName=nameWithoutPrefix,explicitType="secret",typeSource="prompt",output_manager_default.log(`Renamed to ${envName}`)):action==="c"?(explicitType="config",typeSource="prompt",keyAccepted=!0):envName=await client.input.text({message:"Name?",validate:val=>val?!0:"Name cannot be empty"})}let customSveltePublicPrefix,apiPublicPrefix=getApiPublicPrefix(envName),matchingFrameworkPublicPrefix=getFrameworkPublicPrefix(project.framework,envName);if(matchingFrameworkPublicPrefix!==null&&(explicitType==="secret"||forceSensitive)){let message=`\`${matchingFrameworkPublicPrefix}\` exposes this value to anyone visiting your site, so \`${envName}\` cannot be kept private as a Secret. Rename the variable without the framework's public prefix to keep it private, or use \`--type config\` only if the value is safe to expose.`;return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message},1),output_manager_default.fatal(message),1}if(project.framework==="sveltekit"||project.framework==="sveltekit-1"||project.framework==="sveltekit-2"){let matchingLocalPrefix=(await getLocalSvelteKitPublicPrefixes(link.repoRoot??client.cwd,project.rootDirectory))?.find(prefix=>envName.startsWith(prefix));matchingLocalPrefix!==void 0&&apiPublicPrefix===null&&matchingFrameworkPublicPrefix===null&&(customSveltePublicPrefix=matchingLocalPrefix)}if(customSveltePublicPrefix!==void 0&&(explicitType==="secret"||forceSensitive)){let message=customSveltePublicPrefix===""?"This SvelteKit project uses an empty `publicPrefix`, so every Environment Variable is exposed to the browser and cannot be kept private as a Secret. Change the SvelteKit `publicPrefix`, or use `--type config` only if the value is safe to expose.":`\`${customSveltePublicPrefix}\` exposes this value to anyone visiting your site, so \`${envName}\` cannot be kept private as a Secret. Rename the variable without the configured public prefix, or use \`--type config\` only if the value is safe to expose.`;return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message},1),output_manager_default.fatal(message),1}customSveltePublicPrefix!==void 0&&printEnvAddWarning(customSveltePublicPrefix===""?"This SvelteKit project uses an empty `publicPrefix`, so every Environment Variable is exposed to the browser.":`\`${customSveltePublicPrefix}\` variables are exposed to the browser by this SvelteKit project.`);let skipConfirm=opts["--yes"]||!!stdInput||valueFromFlag!==void 0,[{envs},customEnvironments]=await Promise.all([getEnvRecords(client,project.id,"vercel-cli:env:add"),getCustomEnvironments(client,project.id)]);if(envTargets.length>0){let resolved=[],invalid=[];for(let target of envTargets){if(isValidEnvTarget(target)){resolved.push(target);continue}let custom=customEnvironments.find(c=>c.id===target||c.slug===target);custom?resolved.push(custom.id):invalid.push(target)}if(invalid.length>0){let valid=[...envTargetChoices.map(c=>c.value),...customEnvironments.map(c=>c.slug)],message=`Invalid environment: ${invalid.join(", ")}. Valid environments: ${valid.join(", ")}. Separate multiple environments with commas.`;return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_environment",message},1),output_manager_default.error(message),1}envTargets=resolved}if(envGitBranch&&envTargets.length>1){let message="A Git branch can only be set when Preview is the only selected environment.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"branch_requires_preview_only",message},1),output_manager_default.error(message),1}let matchingEnvs=envs.filter(r=>r.key===envName),existingTargets=new Set,existingCustomEnvs=new Set;for(let env of matchingEnvs){if(typeof env.target=="string")existingTargets.add(env.target);else if(Array.isArray(env.target))for(let target of env.target)existingTargets.add(target);if(env.customEnvironmentIds)for(let customEnvId of env.customEnvironmentIds)existingCustomEnvs.add(customEnvId)}let choices=[...envTargetChoices.filter(c=>!existingTargets.has(c.value)).map(c=>({name:c.name,value:c.value})),...customEnvironments.filter(c=>!existingCustomEnvs.has(c.id)).map(c=>({name:c.slug,value:c.id}))];if(!envGitBranch&&choices.length===0&&!opts["--force"]){let projectFlag=opts["--project"]?` --project ${opts["--project"]}`:"";return output_manager_default.error(`The variable ${param(envName)} has already been added to all Environments. To remove, run ${getCommandName(`env rm ${envName}${projectFlag}`)}.`),1}let policyOn=!1,teamSensitivePolicyOn=!1,disjunctiveProductionSecretPolicyOn=!1;if(link.org.type==="team")try{let team=await getTeamByIdOrSlug(client,link.org.id);teamSensitivePolicyOn=team?.sensitiveEnvironmentVariablePolicy==="on",disjunctiveProductionSecretPolicyOn=team?.disjunctiveProductionSecretPolicy==="on"}catch{}let skipSensitivePrompt=forceSensitive||forceEncrypted||!!explicitType||client.nonInteractive||skipConfirm,isDevelopmentOnlyTarget=envTargets.length===1&&envTargets[0]==="development",isSensitive;if(forceSensitive)isSensitive=!0;else if(forceEncrypted)isSensitive=!1;else if(explicitType)isSensitive=explicitType==="secret";else if(apiPublicPrefix||matchingFrameworkPublicPrefix||customSveltePublicPrefix!==void 0)isSensitive=!1,explicitType="config",typeSource="inferred";else if(isDevelopmentOnlyTarget)isSensitive=!1,typeSource="inferred";else if(skipSensitivePrompt)isSensitive=!0,typeSource="default";else{let selectedType=await client.input.select({message:"Environment Variable type?",choices:[{name:getSecretStorageChoice(envTargets,looksLikeCredentialName(envName)?"because this name looks like a credential":void 0),value:"secret"},{name:"Config (can be revealed after saving)",value:"config"}]});isSensitive=selectedType==="secret",explicitType=selectedType,typeSource="prompt"}if(envTargets.length>0){let compatibilityError=getTargetCompatibilityError(envTargets,isSensitive,policyOn);if(compatibilityError){if(client.nonInteractive){let next=[{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} development --value "<value>" --yes`),when:"Add as non-sensitive to Development only"}];outputAgentError(client,{status:"error",reason:"non_sensitive_not_allowed_on_production_preview",message:compatibilityError,next},1)}return output_manager_default.error(compatibilityError),1}}let envChoices=filterEnvChoicesForSensitivity(choices,{isSensitive,policyOn});if(policyOn&&isSensitive)for(let choice of envChoices)(choice.value==="production"||choice.value==="preview")&&(choice.checked=!0);else envChoices.length===1&&(envChoices[0].checked=!0);if(!envGitBranch&&envChoices.length===0&&envTargets.length===0&&!opts["--force"])return output_manager_default.error("No Environments are available for this variable with the selected sensitivity. Your team requires sensitive Environment Variables for Production and Preview."),1;let envValue;if(stdInput){let normalizedStdinValue=normalizeStdinEnvValue(stdInput);envValue=normalizedStdinValue.value,normalizedStdinValue.strippedTrailingNewline&&output_manager_default.log("Removed trailing newline from stdin input")}else valueFromFlag!==void 0?envValue=valueFromFlag:(client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"missing_value",message:'In non-interactive mode provide the value via --value or stdin. Example: vercel env add <name> <environment> --value "<value>" --yes',next:[{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add <name> ${getEnvTargetPlaceholder()} --value "<value>" --yes`)}]}),envValue=await promptEnvValue(client,{isSensitive}));let{finalValue}=await validateEnvValue({envName,initialValue:envValue,skipConfirm,promptForValue:()=>promptEnvValue(client,{isSensitive}),selectAction:choices2=>client.input.select({message:"Value?",choices:choices2}),showWarning:msg=>printEnvAddWarning(msg),showLog:msg=>output_manager_default.log(msg)});for(;envTargets.length===0;){if(client.nonInteractive&&envChoices.length>0){let standardAvailable=choices.map(c=>c.value).filter(v=>isValidEnvTarget(v)),multiTargets=filterSensitiveMultiTargetSuggestionTargets(standardAvailable,{forceSensitive,policyOn}),next=[];multiTargets.length>1&&next.push(multiTargetSuggestion(client.argv,envName,multiTargets,multiTargets.includes("development")&&!forceEncrypted)),next.push(...envChoices.slice(0,5).map(c=>({command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} ${c.value} --value "<value>" --yes`)}))),outputActionRequired(client,{status:"action_required",reason:"missing_environment",message:`Specify one or more environments (comma-separated). Add as argument or use: ${buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} <environment>[,<environment>] --value "<value>" --yes`)}`,choices:envChoices.map(c=>({id:c.value,name:typeof c.name=="string"?c.name:c.value})),next})}envTargets=await client.input.checkbox({message:"Environments?",instructions:CHECKBOX_INSTRUCTIONS,choices:envChoices}),envTargets.length===0&&output_manager_default.error("Please select at least one Environment")}let postSelectionError=getTargetCompatibilityError(envTargets,isSensitive,policyOn);if(postSelectionError)return output_manager_default.error(postSelectionError),1;envGitBranch===void 0&&envTargets.length===1&&envTargets[0]==="preview"&&!opts["--yes"]&&!(client.nonInteractive&&args.length===2)&&(client.nonInteractive?outputActionRequired(client,{status:"action_required",reason:"git_branch_required",message:`Add ${envName} to which Git branch for Preview? Pass branch as third argument, or omit for all Preview branches.`,next:[{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} preview --git-branch <git-branch> --value "<value>" --yes`),when:"Add to a specific Git branch"},{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} preview --value "<value>" --yes`),when:"Add to all Preview branches"}]},1):(output_manager_default.print(` ${import_chalk.default.dim("Leave empty to apply to all Preview branches.")}
|
|
13
|
+
`),1;for(let warning of keyWarnings)printEnvAddWarning(warning.message);let action=await client.input.select({message:"How should this variable be stored?",choices:[{name:`Keep private: rename to ${nameWithoutPrefix} and use Secret`,value:"p"},{name:`Expose to anyone visiting your site: keep ${envName} as Config`,value:"c"},{name:"Enter a different name",value:"r"}]});action==="p"?(envName=nameWithoutPrefix,explicitType="secret",typeSource="prompt",output_manager_default.log(`Renamed to ${envName}`)):action==="c"?(explicitType="config",typeSource="prompt",keyAccepted=!0):envName=await client.input.text({message:"Name?",validate:val=>val?!0:"Name cannot be empty"})}let customSveltePublicPrefix,apiPublicPrefix=getApiPublicPrefix(envName),matchingFrameworkPublicPrefix=getFrameworkPublicPrefix(project.framework,envName);if(matchingFrameworkPublicPrefix!==null&&(explicitType==="secret"||forceSensitive)){let message=`\`${matchingFrameworkPublicPrefix}\` exposes this value to anyone visiting your site, so \`${envName}\` cannot be kept private as a Secret. Rename the variable without the framework's public prefix to keep it private, or use \`--type config\` only if the value is safe to expose.`;return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message},2),output_manager_default.fatal(message),2}if(project.framework==="sveltekit"||project.framework==="sveltekit-1"||project.framework==="sveltekit-2"){let matchingLocalPrefix=(await getLocalSvelteKitPublicPrefixes(link.repoRoot??client.cwd,project.rootDirectory))?.find(prefix=>envName.startsWith(prefix));matchingLocalPrefix!==void 0&&apiPublicPrefix===null&&matchingFrameworkPublicPrefix===null&&(customSveltePublicPrefix=matchingLocalPrefix)}if(customSveltePublicPrefix!==void 0&&(explicitType==="secret"||forceSensitive)){let message=customSveltePublicPrefix===""?"This SvelteKit project uses an empty `publicPrefix`, so every Environment Variable is exposed to the browser and cannot be kept private as a Secret. Change the SvelteKit `publicPrefix`, or use `--type config` only if the value is safe to expose.":`\`${customSveltePublicPrefix}\` exposes this value to anyone visiting your site, so \`${envName}\` cannot be kept private as a Secret. Rename the variable without the configured public prefix, or use \`--type config\` only if the value is safe to expose.`;return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message},2),output_manager_default.fatal(message),2}customSveltePublicPrefix!==void 0&&printEnvAddWarning(customSveltePublicPrefix===""?"This SvelteKit project uses an empty `publicPrefix`, so every Environment Variable is exposed to the browser.":`\`${customSveltePublicPrefix}\` variables are exposed to the browser by this SvelteKit project.`);let skipConfirm=opts["--yes"]||!!stdInput||valueFromFlag!==void 0,[{envs},customEnvironments]=await Promise.all([getEnvRecords(client,project.id,"vercel-cli:env:add"),getCustomEnvironments(client,project.id)]);if(envTargets.length>0){let resolved=[],invalid=[];for(let target of envTargets){if(isValidEnvTarget(target)){resolved.push(target);continue}let custom=customEnvironments.find(c=>c.id===target||c.slug===target);custom?resolved.push(custom.id):invalid.push(target)}if(invalid.length>0){let valid=[...envTargetChoices.map(c=>c.value),...customEnvironments.map(c=>c.slug)],message=`Invalid environment: ${invalid.join(", ")}. Valid environments: ${valid.join(", ")}. Separate multiple environments with commas.`;return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_environment",message},2),output_manager_default.error(message),2}envTargets=resolved}if(envGitBranch&&envTargets.length>1){let message="A Git branch can only be set when Preview is the only selected environment.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"branch_requires_preview_only",message},1),output_manager_default.error(message),1}let matchingEnvs=envs.filter(r=>r.key===envName),existingTargets=new Set,existingCustomEnvs=new Set;for(let env of matchingEnvs){if(typeof env.target=="string")existingTargets.add(env.target);else if(Array.isArray(env.target))for(let target of env.target)existingTargets.add(target);if(env.customEnvironmentIds)for(let customEnvId of env.customEnvironmentIds)existingCustomEnvs.add(customEnvId)}let choices=[...envTargetChoices.filter(c=>!existingTargets.has(c.value)).map(c=>({name:c.name,value:c.value})),...customEnvironments.filter(c=>!existingCustomEnvs.has(c.id)).map(c=>({name:c.slug,value:c.id}))];if(!envGitBranch&&choices.length===0&&!opts["--force"]){let projectFlag=opts["--project"]?` --project ${opts["--project"]}`:"";return output_manager_default.error(`The variable ${param(envName)} has already been added to all Environments. To remove, run ${getCommandName(`env rm ${envName}${projectFlag}`)}.`),1}let policyOn=!1,teamSensitivePolicyOn=!1,disjunctiveProductionSecretPolicyOn=!1;if(link.org.type==="team")try{let team=await getTeamByIdOrSlug(client,link.org.id);teamSensitivePolicyOn=team?.sensitiveEnvironmentVariablePolicy==="on",disjunctiveProductionSecretPolicyOn=team?.disjunctiveProductionSecretPolicy==="on"}catch{}let skipSensitivePrompt=forceSensitive||forceEncrypted||!!explicitType||client.nonInteractive||skipConfirm,isDevelopmentOnlyTarget=envTargets.length===1&&envTargets[0]==="development",isSensitive;if(forceSensitive)isSensitive=!0;else if(forceEncrypted)isSensitive=!1;else if(explicitType)isSensitive=explicitType==="secret";else if(apiPublicPrefix||matchingFrameworkPublicPrefix||customSveltePublicPrefix!==void 0)isSensitive=!1,explicitType="config",typeSource="inferred";else if(isDevelopmentOnlyTarget)isSensitive=!1,typeSource="inferred";else if(skipSensitivePrompt)isSensitive=!0,typeSource="default";else{let selectedType=await client.input.select({message:"Environment Variable type?",choices:[{name:getSecretStorageChoice(envTargets,looksLikeCredentialName(envName)?"because this name looks like a credential":void 0),value:"secret"},{name:"Config (can be revealed after saving)",value:"config"}]});isSensitive=selectedType==="secret",explicitType=selectedType,typeSource="prompt"}if(envTargets.length>0){let compatibilityError=getTargetCompatibilityError(envTargets,isSensitive,policyOn);if(compatibilityError){if(client.nonInteractive){let next=[{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} development --value "<value>" --yes`),when:"Add as non-sensitive to Development only"}];outputAgentError(client,{status:"error",reason:"non_sensitive_not_allowed_on_production_preview",message:compatibilityError,next},1)}return output_manager_default.error(compatibilityError),1}}let envChoices=filterEnvChoicesForSensitivity(choices,{isSensitive,policyOn});if(policyOn&&isSensitive)for(let choice of envChoices)(choice.value==="production"||choice.value==="preview")&&(choice.checked=!0);else envChoices.length===1&&(envChoices[0].checked=!0);if(!envGitBranch&&envChoices.length===0&&envTargets.length===0&&!opts["--force"])return output_manager_default.error("No Environments are available for this variable with the selected sensitivity. Your team requires sensitive Environment Variables for Production and Preview."),1;let envValue;if(stdInput){let normalizedStdinValue=normalizeStdinEnvValue(stdInput);envValue=normalizedStdinValue.value,normalizedStdinValue.strippedTrailingNewline&&output_manager_default.log("Removed trailing newline from stdin input")}else valueFromFlag!==void 0?envValue=valueFromFlag:(client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"missing_value",message:'In non-interactive mode provide the value via --value or stdin. Example: vercel env add <name> <environment> --value "<value>" --yes',next:[{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add <name> ${getEnvTargetPlaceholder()} --value "<value>" --yes`)}]}),envValue=await promptEnvValue(client,{isSensitive}));let{finalValue}=await validateEnvValue({envName,initialValue:envValue,skipConfirm,promptForValue:()=>promptEnvValue(client,{isSensitive}),selectAction:choices2=>client.input.select({message:"Value?",choices:choices2}),showWarning:msg=>printEnvAddWarning(msg),showLog:msg=>output_manager_default.log(msg)});for(;envTargets.length===0;){if(client.nonInteractive&&envChoices.length>0){let standardAvailable=choices.map(c=>c.value).filter(v=>isValidEnvTarget(v)),multiTargets=filterSensitiveMultiTargetSuggestionTargets(standardAvailable,{forceSensitive,policyOn}),next=[];multiTargets.length>1&&next.push(multiTargetSuggestion(client.argv,envName,multiTargets,multiTargets.includes("development")&&!forceEncrypted)),next.push(...envChoices.slice(0,5).map(c=>({command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} ${c.value} --value "<value>" --yes`)}))),outputActionRequired(client,{status:"action_required",reason:"missing_environment",message:`Specify one or more environments (comma-separated). Add as argument or use: ${buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} <environment>[,<environment>] --value "<value>" --yes`)}`,choices:envChoices.map(c=>({id:c.value,name:typeof c.name=="string"?c.name:c.value})),next})}envTargets=await client.input.checkbox({message:"Environments?",instructions:CHECKBOX_INSTRUCTIONS,choices:envChoices}),envTargets.length===0&&output_manager_default.error("Please select at least one Environment")}let postSelectionError=getTargetCompatibilityError(envTargets,isSensitive,policyOn);if(postSelectionError)return output_manager_default.error(postSelectionError),1;envGitBranch===void 0&&envTargets.length===1&&envTargets[0]==="preview"&&!opts["--yes"]&&!(client.nonInteractive&&args.length===2)&&(client.nonInteractive?outputActionRequired(client,{status:"action_required",reason:"git_branch_required",message:`Add ${envName} to which Git branch for Preview? Pass branch as third argument, or omit for all Preview branches.`,next:[{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} preview --git-branch <git-branch> --value "<value>" --yes`),when:"Add to a specific Git branch"},{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} preview --value "<value>" --yes`),when:"Add to all Preview branches"}]},1):(output_manager_default.print(` ${import_chalk.default.dim("Leave empty to apply to all Preview branches.")}
|
|
14
14
|
`),envGitBranch=await client.input.text({message:"Git branch?"})));let hasDevelopment=envTargets.includes("development"),finalType=resolveFinalType(envTargets,isSensitive,{forceSensitive,forceEncrypted,policyOn});for(policyOn&&!hasDevelopment&&forceEncrypted&&(printEnvAddWarning("--no-sensitive is ignored: your team enforces sensitive Environment Variables for Production and Preview."),finalType="sensitive");finalType==="encrypted"&&(looksLikeCredentialName(envName,customSveltePublicPrefix)||looksLikeSecretValue(finalValue));){printEnvAddWarning("This name or value looks like a credential. Config values can be revealed after saving.");let publicPrefix=getApiPublicPrefix(envName)??getFrameworkPublicPrefix(project.framework,envName)??customSveltePublicPrefix;if(publicPrefix!==void 0&&typeSource==="inferred"){let privateName=envName.slice(publicPrefix.length),privateCommand=buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${privateName} ${envTargets.join(",")} --type secret --value "<value>" --yes`),publicCommand=buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} ${envTargets.join(",")} --type config --value "<value>" --yes`),privateHumanCommand=buildHumanEnvAddCommand(client.argv,`env add ${privateName} ${envTargets.join(",")} --type secret`),publicHumanCommand=buildHumanEnvAddCommand(client.argv,`env add ${envName} ${envTargets.join(",")} --type config`),message=publicPrefix===""?`\`${envName}\` looks like a credential, and this SvelteKit project exposes every Environment Variable to the browser. Change the SvelteKit \`publicPrefix\` to keep it private, or use \`--type config\` only if the value is safe to expose.`:`\`${envName}\` looks like a credential, and \`${publicPrefix}\` exposes its value to anyone visiting your site. Choose explicitly: rename to \`${privateName}\` with \`--type secret\` to keep it private, or keep the name with \`--type config\` to expose it.`;if(client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"public_prefix_requires_type",message,next:[...publicPrefix===""?[]:[{command:privateCommand,when:"Keep it private; replace <value> before running"}],{command:publicCommand,when:"Expose it publicly; replace <value> before running"}]}),opts["--yes"])return output_manager_default.fatal(message),publicPrefix!==""&&output_manager_default.print(` Keep it private:
|
|
15
15
|
${privateHumanCommand}
|
|
16
16
|
`),output_manager_default.print(` Expose it publicly:
|
|
17
17
|
${publicHumanCommand}
|
|
18
|
-
`),1;let selectedAction=await client.input.select({message:"How should this variable be stored?",choices:[...publicPrefix===""?[]:[{name:`Keep private: rename to ${privateName} and use Secret`,value:"private"}],{name:`Expose to anyone visiting your site: keep ${envName} as Config`,value:"public"},{name:"Enter a different value",value:"reenter"}]});if(selectedAction==="private"){envName=privateName,finalType="sensitive",explicitType="secret",typeSource="prompt",output_manager_default.log(`Renamed to ${envName}`);break}if(selectedAction==="reenter"){let reenteredValue=await promptEnvValue(client,{isSensitive:!1});finalValue=(await validateEnvValue({envName,initialValue:reenteredValue,skipConfirm:!1,promptForValue:()=>promptEnvValue(client,{isSensitive:!1}),selectAction:choices2=>client.input.select({message:"Value?",choices:choices2}),showWarning:msg=>printEnvAddWarning(msg),showLog:msg=>output_manager_default.log(msg)})).finalValue;continue}}else typeSource!=="argv"&&typeSource!=="prompt"&&!opts["--yes"]&&!client.nonInteractive&&await client.input.select({message:"Store this value as?",choices:[{name:getSecretStorageChoice(envTargets,"for this value"),value:"secret"},{name:"Config (can be revealed after saving)",value:"config"}]})==="secret"&&(finalType="sensitive",explicitType="secret",typeSource="prompt");break}finalType==="sensitive"&&customSveltePublicPrefix!==void 0&&envName.startsWith(customSveltePublicPrefix)&&printEnvAddWarning("This SvelteKit project exposes this variable to the browser; the Secret type does not prevent that. Rename the variable without the configured public prefix to keep it private."),isFlagsSecretNeedingSplit({key:envName,type:finalType,targets:envTargets.filter(isValidEnvTarget),customEnvironmentIds:envTargets.filter(target=>!isValidEnvTarget(target))})&&printEnvAddWarning("FLAGS_SECRET should use a separate value for each environment so Development overrides cannot affect Preview or Production.");let hasProduction=envTargets.includes("production"),hasNonProduction=envTargets.some(target=>target!=="production");if(finalType==="sensitive"&&disjunctiveProductionSecretPolicyOn&&hasProduction&&hasNonProduction){let message="Your team requires Production and non-Production Secrets to be stored separately with different values. Run one command for Production and another for the remaining environments.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"production_secret_must_be_separate",message,next:[{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} production --type secret --value "<production-value>" --yes`),when:"Set the Production Secret"},{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} ${envTargets.filter(target=>target!=="production").join(",")} --type secret --value "<non-production-value>" --yes`),when:"Set the non-Production Secret"}]},1),output_manager_default.fatal(message),1}let upsert=opts["--force"]?"true":"",{visibility,error:visibilityError}=resolveEnvVarVisibility({explicitVisibility:explicitType,explicitOptionSource:typeOption.source,type:finalType,key:envName,envTargets,teamSensitivePolicyOn,context:"add"});if(visibilityError)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message:visibilityError},
|
|
19
|
-
`);let{isAgent}=await determineAgent();return isGuidanceEnabled(client,parsedArgs.flags["--guidance"],isAgent)&&suggestNextCommands([{description:"List Environment Variables",command:withGlobalFlags(client,"env ls",{preserveProject:!0})},{description:"Pull Development Environment Variables into .env.local",command:withGlobalFlags(client,"env pull",{preserveProject:!0})}]),0}var import_chalk2=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1);var import_title=__toESM(require_lib(),1);function formatEnvironments(link,env,customEnvironments){let defaultTargets=(Array.isArray(env.target)?env.target:[env.target||""]).map(t=>formatEnvironment(link.org.slug,link.project.name,{id:t,slug:(0,import_title.default)(t)})),customTargets=env.customEnvironmentIds?env.customEnvironmentIds.map(id=>customEnvironments.find(e=>e.id===id)).filter(Boolean).map(e=>formatEnvironment(link.org.slug,link.project.name,e)):[],targetsString=[...defaultTargets,...customTargets].join(", ");return env.gitBranch?`${targetsString} (${env.gitBranch})`:targetsString}var EnvLsTelemetryClient=class extends TelemetryClient{trackCliArgumentEnvironment(environment){environment&&this.trackCliArgument({arg:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliArgumentGitBranch(gitBranch){gitBranch&&this.trackCliArgument({arg:"git-branch",value:this.redactedValue})}trackCliFlagGuidance(guidance){guidance&&this.trackCliFlag("guidance")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};import{determineAgent as determineAgent2}from"@vercel/detect-agent";async function ls(client,argv){let telemetryClient=new EnvLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),
|
|
18
|
+
`),1;let selectedAction=await client.input.select({message:"How should this variable be stored?",choices:[...publicPrefix===""?[]:[{name:`Keep private: rename to ${privateName} and use Secret`,value:"private"}],{name:`Expose to anyone visiting your site: keep ${envName} as Config`,value:"public"},{name:"Enter a different value",value:"reenter"}]});if(selectedAction==="private"){envName=privateName,finalType="sensitive",explicitType="secret",typeSource="prompt",output_manager_default.log(`Renamed to ${envName}`);break}if(selectedAction==="reenter"){let reenteredValue=await promptEnvValue(client,{isSensitive:!1});finalValue=(await validateEnvValue({envName,initialValue:reenteredValue,skipConfirm:!1,promptForValue:()=>promptEnvValue(client,{isSensitive:!1}),selectAction:choices2=>client.input.select({message:"Value?",choices:choices2}),showWarning:msg=>printEnvAddWarning(msg),showLog:msg=>output_manager_default.log(msg)})).finalValue;continue}}else typeSource!=="argv"&&typeSource!=="prompt"&&!opts["--yes"]&&!client.nonInteractive&&await client.input.select({message:"Store this value as?",choices:[{name:getSecretStorageChoice(envTargets,"for this value"),value:"secret"},{name:"Config (can be revealed after saving)",value:"config"}]})==="secret"&&(finalType="sensitive",explicitType="secret",typeSource="prompt");break}finalType==="sensitive"&&customSveltePublicPrefix!==void 0&&envName.startsWith(customSveltePublicPrefix)&&printEnvAddWarning("This SvelteKit project exposes this variable to the browser; the Secret type does not prevent that. Rename the variable without the configured public prefix to keep it private."),isFlagsSecretNeedingSplit({key:envName,type:finalType,targets:envTargets.filter(isValidEnvTarget),customEnvironmentIds:envTargets.filter(target=>!isValidEnvTarget(target))})&&printEnvAddWarning("FLAGS_SECRET should use a separate value for each environment so Development overrides cannot affect Preview or Production.");let hasProduction=envTargets.includes("production"),hasNonProduction=envTargets.some(target=>target!=="production");if(finalType==="sensitive"&&disjunctiveProductionSecretPolicyOn&&hasProduction&&hasNonProduction){let message="Your team requires Production and non-Production Secrets to be stored separately with different values. Run one command for Production and another for the remaining environments.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"production_secret_must_be_separate",message,next:[{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} production --type secret --value "<production-value>" --yes`),when:"Set the Production Secret"},{command:buildEnvAddCommandWithPreservedArgs(client.argv,`env add ${envName} ${envTargets.filter(target=>target!=="production").join(",")} --type secret --value "<non-production-value>" --yes`),when:"Set the non-Production Secret"}]},1),output_manager_default.fatal(message),1}let upsert=opts["--force"]?"true":"",{visibility,error:visibilityError}=resolveEnvVarVisibility({explicitVisibility:explicitType,explicitOptionSource:typeOption.source,type:finalType,key:envName,envTargets,teamSensitivePolicyOn,context:"add"});if(visibilityError)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message:visibilityError},2),output_manager_default.fatal(visibilityError),2;try{output_manager_default.spinner("Saving\u2026"),await addEnvRecord(client,project.id,upsert,finalType,envName,finalValue,envTargets,envGitBranch,visibility)}catch(err){if(client.nonInteractive&&isAPIError(err)){let productionSecretPolicyError=getProductionSecretPolicyErrorKind(err.serverMessage),reason=productionSecretPolicyError?productionSecretPolicyError==="different-values"?"production_secret_requires_different_value":"production_secret_must_be_separate":err.slug||(err.serverMessage?.toLowerCase().includes("branch")?"branch_not_found":"api_error");outputAgentError(client,{status:"error",reason,message:productionSecretPolicyError?`${err.serverMessage} ${getProductionSecretPolicyRecovery(productionSecretPolicyError)}`:err.serverMessage},1)}if(isAPIError(err)&&isKnownError(err))return output_manager_default.error(err.serverMessage),1;throw err}printEnvAddResult(link,envName,envTargets,envGitBranch,customEnvironments,finalType,!!opts["--force"],visibility),typeSource==="default"&&output_manager_default.print(` ${import_chalk.default.dim(getDefaultSecretStorageGuidance(envTargets))}
|
|
19
|
+
`);let{isAgent}=await determineAgent();return isGuidanceEnabled(client,parsedArgs.flags["--guidance"],isAgent)&&suggestNextCommands([{description:"List Environment Variables",command:withGlobalFlags(client,"env ls",{preserveProject:!0})},{description:"Pull Development Environment Variables into .env.local",command:withGlobalFlags(client,"env pull",{preserveProject:!0})}]),0}var import_chalk2=__toESM(require_source(),1),import_ms=__toESM(require_ms(),1);var import_title=__toESM(require_lib(),1);function formatEnvironments(link,env,customEnvironments){let defaultTargets=(Array.isArray(env.target)?env.target:[env.target||""]).map(t=>formatEnvironment(link.org.slug,link.project.name,{id:t,slug:(0,import_title.default)(t)})),customTargets=env.customEnvironmentIds?env.customEnvironmentIds.map(id=>customEnvironments.find(e=>e.id===id)).filter(Boolean).map(e=>formatEnvironment(link.org.slug,link.project.name,e)):[],targetsString=[...defaultTargets,...customTargets].join(", ");return env.gitBranch?`${targetsString} (${env.gitBranch})`:targetsString}var EnvLsTelemetryClient=class extends TelemetryClient{trackCliArgumentEnvironment(environment){environment&&this.trackCliArgument({arg:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliArgumentGitBranch(gitBranch){gitBranch&&this.trackCliArgument({arg:"git-branch",value:this.redactedValue})}trackCliFlagGuidance(guidance){guidance&&this.trackCliFlag("guidance")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};import{determineAgent as determineAgent2}from"@vercel/detect-agent";async function ls(client,argv){let telemetryClient=new EnvLsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return printError(err),2}let{args,flags}=parsedArgs,validationResult=validateLsArgs({commandName:"env ls",args,maxArgs:2,exitCode:1,usageString:getCommandName(`env ls ${getEnvTargetPlaceholder()} <gitbranch>`)});if(validationResult!==0)return validationResult;let[envTarget,envGitBranch]=args,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;telemetryClient.trackCliArgumentEnvironment(envTarget),telemetryClient.trackCliArgumentGitBranch(envGitBranch),telemetryClient.trackCliFlagGuidance(flags["--guidance"]),telemetryClient.trackCliOptionFormat(flags["--format"]);let projectName=flags["--project"];telemetryClient.trackCliOptionProject(projectName);let link=await resolveProjectContext({client,projectNameOrId:projectName,commandName:"env ls"});if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return output_manager_default.error(`Your codebase isn\u2019t linked to a project on Vercel. Pass --project <name>, or ${client.nonInteractive?`run ${getCommandName("link --yes --team <team-id> --project <project-id>")} to link non-interactively.`:`run ${getCommandName("link")} to begin.`}`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project,org}=link,lsStamp=stamp_default(),[envsResult,customEnvs]=await Promise.all([getEnvRecords(client,project.id,"vercel-cli:env:ls",{target:envTarget,gitBranch:envGitBranch}),getCustomEnvironments(client,project.id)]),{envs}=envsResult,projectSlugLink=formatProject(org.slug,project.name);if(asJson){output_manager_default.stopSpinner();let jsonOutput={envs:envs.map(env=>({key:env.key,value:isSecretEnvVar(env)?void 0:env.value,type:env.type,visibility:env.visibility,target:env.target,gitBranch:env.gitBranch,configurationId:env.configurationId,createdAt:env.createdAt,updatedAt:env.updatedAt}))};client.stdout.write(`${JSON.stringify(jsonOutput,null,2)}
|
|
20
20
|
`)}else envs.length===0?output_manager_default.log(`No Environment Variables found for ${projectSlugLink} ${import_chalk2.default.gray(lsStamp())}`):(output_manager_default.log(`Environment Variables found for ${projectSlugLink} ${import_chalk2.default.gray(lsStamp())}`),client.stdout.write(`${getTable(link,envs,customEnvs)}
|
|
21
21
|
`));if(!asJson){let{isAgent}=await determineAgent2();isGuidanceEnabled(client,parsedArgs.flags["--guidance"],isAgent)&&suggestNextCommands([{description:"Add an Environment Variable",command:withGlobalFlags(client,"env add",{preserveProject:!0})},{description:"Remove an Environment Variable",command:withGlobalFlags(client,"env rm",{preserveProject:!0})},{description:"Pull Development Environment Variables into .env.local",command:withGlobalFlags(client,"env pull",{preserveProject:!0})}])}return 0}function getTable(link,records,customEnvironments){let label=records.some(env=>env.gitBranch)?"environments (git branch)":"environments";return formatTable(["name","value","type",label,"created"],["l","l","l","l","l"],[{name:"",rows:records.map(row=>getRow(link,row,customEnvironments))}])}function getRow(link,env,customEnvironments){let value;if(isSecretEnvVar(env))value=import_chalk2.default.gray.italic("Hidden");else if(env.type==="system")value=import_chalk2.default.gray.italic(env.value);else{let singleLineValue=env.value.replace(/\s/g," ");value=import_chalk2.default.gray(ellipsis(singleLineValue,19))}let now=Date.now();return[import_chalk2.default.bold(env.key),value,getEnvironmentVariableTypeLabel(env),formatEnvironments(link,env,customEnvironments),env.createdAt?`${(0,import_ms.default)(now-env.createdAt)} ago`:""]}function getEnvironmentVariableTypeLabel(env){return isSecretEnvVar(env)?"Secret":env.type==="system"?"System":"Config"}var import_chalk3=__toESM(require_source(),1);async function removeEnvRecord(client,projectId,env){output_manager_default.debug(`Removing Environment Variable ${env.key}`);let url=`/v10/projects/${projectId}/env/${env.id}`;await client.fetch(url,{method:"DELETE"})}var EnvRmTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentEnvironment(environment){environment&&this.trackCliArgument({arg:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliArgumentGitBranch(gitBranch){gitBranch&&this.trackCliArgument({arg:"git-branch",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};function printEnvRmWarning(message){output_manager_default.print(`${import_chalk3.default.yellow("!")} ${message}
|
|
22
|
-
`)}async function rm(client,argv){let telemetryClient=new EnvRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:err instanceof Error?err.message:String(err)},
|
|
22
|
+
`)}async function rm(client,argv){let telemetryClient=new EnvRmTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags:opts}=parsedArgs;if(args.length>3)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:`Invalid number of arguments. Usage: \`${getCommandNamePlain(`env rm <name> ${getEnvTargetPlaceholder()} <gitbranch>`)}\``},2),output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName(`env rm <name> ${getEnvTargetPlaceholder()} <gitbranch>`)}`),2;let[envName,envTarget,envGitBranch]=args;telemetryClient.trackCliArgumentName(envName),telemetryClient.trackCliArgumentEnvironment(envTarget),telemetryClient.trackCliArgumentGitBranch(envGitBranch),telemetryClient.trackCliFlagYes(opts["--yes"]),telemetryClient.trackCliOptionProject(opts["--project"]);let link=await resolveProjectContext({client,projectNameOrId:opts["--project"]});if(link.status==="error")return link.exitCode;if(link.status==="not_linked"){if(client.nonInteractive){let preserved=getPreservedArgsForEnvRm(client.argv).filter(a=>a!=="--yes"&&a!=="-y"),linkArgv=[...client.argv.slice(0,2),"link","--scope","<scope>",...preserved];outputAgentError(client,{status:"error",reason:"not_linked",message:`Your codebase isn't linked to a project on Vercel. Run \`${getCommandNamePlain("link")}\` to begin. Use \`--yes\` for non-interactive; use \`--scope\` or \`--project\` to specify team or project.`,next:[{command:buildCommandWithYes(linkArgv)},{command:buildCommandWithYes(client.argv)}]},1)}else output_manager_default.error(`Your codebase isn\u2019t linked to a project on Vercel. Run ${getCommandName("link")} to begin.`);return 1}client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link;envName||(client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"missing_name",message:"Provide the variable name as an argument. Example: `vercel env rm <name> --yes`",next:[{command:buildEnvRmCommandWithPreservedArgs(client.argv,`env rm <name> ${getEnvTargetPlaceholder()} --yes`)}]},2),envName=await client.input.text({message:"What's the name of the variable?",validate:val=>val?!0:"Name cannot be empty"}));let[result,customEnvironments]=await Promise.all([getEnvRecords(client,project.id,"vercel-cli:env:rm",{target:envTarget,gitBranch:envGitBranch}),getCustomEnvironments(client,project.id)]),envs=result.envs.filter(env2=>env2.key===envName);if(envs.length===0)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"env_not_found",message:`Environment Variable ${envName} was not found.`},1),output_manager_default.error(`Environment Variable was not found.
|
|
23
23
|
`),1;for(;envs.length>1;){client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"multiple_envs",message:`Multiple Environment Variables match ${envName}. Specify target and/or branch to remove one.`,next:[{command:buildEnvRmCommandWithPreservedArgs(client.argv,`env rm ${envName} ${getEnvTargetPlaceholder()} --yes`)}]},1);let id=await client.input.select({message:`Remove ${envName} from which Environments?`,choices:envs.map(env2=>({value:env2.id,name:formatEnvironments(link,env2,customEnvironments)}))});id||output_manager_default.error("Please select at least one Environment Variable to remove"),envs=envs.filter(env2=>env2.id===id)}let env=envs[0],targets=Array.isArray(env.target)?env.target:env.target?[env.target]:[],customEnvironmentIds=env.customEnvironmentIds??[],selectedTarget=customEnvironments.find(environment=>environment.id===envTarget||environment.slug===envTarget)?.id??envTarget;if(envTarget&&!targets.includes(selectedTarget)&&!customEnvironmentIds.includes(selectedTarget))return output_manager_default.error("The selected environment does not match this variable. No changes were made."),1;let removesTargetOnly=!!envTarget&&targets.length+customEnvironmentIds.length>1,confirmationEnv=envTarget?{...env,target:targets.filter(target=>target===selectedTarget),customEnvironmentIds:customEnvironmentIds.filter(id=>id===selectedTarget)}:env,shouldWarnAboutRotation=shouldConfirmRotationBeforeDelete({key:env.key,type:env.type,hasPublicPrefix:getPublicPrefix(env.key)!==null}),rotationWarning="Removing this variable from Vercel does not revoke the credential. Rotate or disable it at its provider.";if(shouldWarnAboutRotation&&printEnvRmWarning(rotationWarning),!opts["--yes"]&&(client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"confirmation_required",message:`Removing Environment Variable ${env.key}. ${shouldWarnAboutRotation?`${rotationWarning} `:""}Use --yes to confirm.`,next:[{command:buildCommandWithYes(client.argv)}]},1),!await client.input.confirm(`Remove ${param(env.key)} from ${formatEnvironments(link,confirmationEnv,customEnvironments)} in Project ${import_chalk3.default.bold(project.name)}?`,!1)))return output_manager_default.log("Canceled"),0;let rmStamp=stamp_default();try{output_manager_default.spinner("Removing"),removesTargetOnly?await client.fetch(`/v10/projects/${project.id}/env/${env.id}`,{method:"PATCH",body:{target:targets.filter(target=>target!==selectedTarget),customEnvironmentIds:customEnvironmentIds.filter(id=>id!==selectedTarget)}}):await removeEnvRecord(client,project.id,env)}catch(err){if(client.nonInteractive&&isAPIError(err)){let reason=err.slug||(err.serverMessage?.toLowerCase().includes("branch")?"branch_not_found":"api_error");outputAgentError(client,{status:"error",reason,message:err.serverMessage},1)}if(isAPIError(err)&&isKnownError(err))return output_manager_default.error(err.serverMessage),1;throw err}return output_manager_default.print(`${prependEmoji(`${removesTargetOnly?`Removed ${envTarget} target from Environment Variable`:"Removed Environment Variable"} ${import_chalk3.default.gray(rmStamp())}`,emoji("success"))}
|
|
24
24
|
`),0}var import_env=__toESM(require_dist3(),1),import_chalk4=__toESM(require_source(),1),import_execa=__toESM(require_execa(),1);function printEnvRunWarning(message){output_manager_default.print(`${import_chalk4.default.yellow("!")} ${message}
|
|
25
|
-
`)}function omitUnavailableSecretPlaceholders(localEnv,secretKeys){let safeLocalEnv={...localEnv};for(let key of secretKeys)safeLocalEnv[key]===SENSITIVE_ENV_VALUE_PLACEHOLDER&&delete safeLocalEnv[key];return safeLocalEnv}function parseRunArgs(argv){let argvIndex=argv.indexOf("--"),hasDoubleDash=argvIndex!==-1,vercelArgs=hasDoubleDash?argv.slice(2,argvIndex):argv.slice(2),userCommand=hasDoubleDash?argv.slice(argvIndex+1):[];return{vercelArgs,userCommand}}function needsHelpForRun(client){let{vercelArgs}=parseRunArgs(client.argv),flagsSpecification=getFlagsSpecification(runSubcommand.options);try{return!!parseArguments(vercelArgs,flagsSpecification).flags["--help"]}catch{return!1}}async function run(client,telemetry){let{vercelArgs,userCommand}=parseRunArgs(client.argv),parsedArgs,flagsSpecification=getFlagsSpecification(runSubcommand.options);try{parsedArgs=parseArguments(vercelArgs,flagsSpecification)}catch(error){return printError(error),
|
|
26
|
-
`)}function omitEnvValueArgs(argv){let out=[];for(let i=0;i<argv.length;i++){if(argv[i]==="--value"){i++;continue}argv[i].startsWith("--value=")||out.push(argv[i])}return out}function formatTargetArg(targets,customEnvironments){return targets.map(target=>customEnvironments.find(environment=>environment.id===target||environment.slug===target)?.slug??target).join(",")}function promptEnvUpdateValue(client,envName,isSecret){return client.input.text({message:`What's the new value of ${envName}?`,...isSecret?{transformer:value=>"*".repeat(value.length)}:{}})}async function update(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:err instanceof Error?err.message:String(err)},1),printError(err),1}let{args,flags:opts}=parsedArgs,valueFromFlag=typeof opts["--value"]=="string"?opts["--value"]:void 0,stdInput=await readStandardInput(client.stdin),[envName,envTargetArg,envGitBranch]=args,typeOption=resolveEnvVarTypeOption({type:typeof opts["--type"]=="string"?opts["--type"]:void 0,visibility:typeof opts["--visibility"]=="string"?opts["--visibility"]:void 0}),explicitType=typeOption.explicitVisibility,typeWasExplicit=explicitType!==void 0||!!opts["--sensitive"],telemetryClient=new EnvUpdateTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetryClient.trackCliArgumentName(envName),telemetryClient.trackCliArgumentEnvironment(envTargetArg),telemetryClient.trackCliArgumentGitBranch(envGitBranch),telemetryClient.trackCliFlagSensitive(opts["--sensitive"]),telemetryClient.trackCliFlagYes(opts["--yes"]),telemetryClient.trackCliOptionValue(valueFromFlag===void 0?void 0:"<redacted>"),telemetryClient.trackCliOptionType(typeof opts["--type"]=="string"?opts["--type"]:void 0),telemetryClient.trackCliOptionVisibility(typeof opts["--visibility"]=="string"?opts["--visibility"]:void 0),typeOption.error)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:typeOption.errorReason??"invalid_type",message:typeOption.error},1),output_manager_default.fatal(typeOption.error),1;if(typeOption.usedDeprecatedVisibility&&printEnvUpdateWarning(ENV_VISIBILITY_DEPRECATION_MESSAGE),explicitType==="config"&&opts["--sensitive"]){let message="`--type config` cannot be used with `--sensitive`. Pick one.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"conflicting_type_flags",message},1),output_manager_default.fatal(message),1}if(args.length>3)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:`Invalid number of arguments. Usage: \`${getCommandNamePlain(`env update <name> ${getEnvTargetPlaceholder()} <gitbranch>`)}\``},1),output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName(`env update <name> ${getEnvTargetPlaceholder()} <gitbranch>`)}`),1;if(stdInput&&(!envName||!envTargetArg))return output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName("env update <name> <target> <gitbranch> < <file>")}`),1;if(client.nonInteractive){let missing=[];if(envName||missing.push("missing_name"),!stdInput&&valueFromFlag===void 0&&missing.push("missing_value"),missing.length>0){let parts=missing.map(m=>m==="missing_name"?"name":"--value or stdin"),targetPart=envTargetArg||getEnvTargetPlaceholder(),template=`env update ${envName||"<name>"} ${targetPart}${envTargetArg==="preview"||envTargetArg==="development"?" <gitbranch>":""} --value <value> --yes`;outputActionRequired(client,{status:"action_required",reason:"missing_requirements",missing,message:`Provide all required inputs for non-interactive mode: ${parts.join("; ")}. Example: ${getCommandNamePlain(template)}`,next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,template)}]},1)}}envTargetArg&&[].push(envTargetArg),envName||(client.nonInteractive?outputActionRequired(client,{status:"action_required",reason:"missing_name",message:"Provide the variable name as an argument. Example: vercel env update <name>",next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,`env update <name> ${getEnvTargetPlaceholder()} --value <value> --yes`)}]},1):envName=await client.input.text({message:"What's the name of the variable to update?",validate:val=>val?!0:"Name cannot be empty"})),telemetryClient.trackCliOptionProject(opts["--project"]);let link=await resolveProjectContext({client,projectNameOrId:opts["--project"]});if(link.status==="error")return link.exitCode;if(link.status==="not_linked"){if(client.nonInteractive){let preserved=omitEnvValueArgs(getPreservedArgsForEnvUpdate(client.argv)).filter(a=>a!=="--yes"&&a!=="-y"),linkArgv=[...client.argv.slice(0,2),"link","--scope","<scope>",...preserved];outputAgentError(client,{status:"error",reason:"not_linked",message:`Your codebase isn't linked to a project on Vercel. Run ${getCommandNamePlain("link")} to begin. Use --yes for non-interactive; use --scope or --project to specify team or project.`,next:[{command:buildCommandWithYes(linkArgv)},{command:buildCommandWithYes(redactEnvValueArgs(client.argv))}]},1)}return output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Run ${getCommandName("link")} to begin.`),1}client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link,[{envs},customEnvironments]=await Promise.all([getEnvRecords(client,project.id,"vercel-cli:env:update"),getCustomEnvironments(client,project.id)]),normalizedEnvTargetArg=customEnvironments.find(({slug,id})=>slug===envTargetArg||id===envTargetArg)?.id||envTargetArg,matchingEnvs=envs.filter(r=>r.key===envName);if(matchingEnvs.length===0){let listArgs=`env ls ${getGlobalFlagsFromArgs(client.argv.slice(2),{preserveProject:!0}).join(" ")}`.trim();return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"env_not_found",message:`The variable ${envName} was not found. Run ${getCommandNamePlain(listArgs)} to see all available Environment Variables.`},1),output_manager_default.error(`The variable ${param(envName)} was not found. Run ${getCommandName(listArgs)} to see all available Environment Variables.`),1}let selectedEnv;if(envTargetArg||envGitBranch){let filteredEnvs=matchingEnvs.filter(env=>{let matchesTarget=!normalizedEnvTargetArg||(Array.isArray(env.target)?env.target.includes(normalizedEnvTargetArg):env.target===normalizedEnvTargetArg)||env.customEnvironmentIds&&env.customEnvironmentIds.includes(normalizedEnvTargetArg),matchesGitBranch=!envGitBranch||env.gitBranch===envGitBranch;return matchesTarget&&matchesGitBranch});if(filteredEnvs.length===0)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"env_not_found",message:`No Environment Variable ${envName} found matching the specified target/branch.`},1),output_manager_default.error(`No Environment Variable ${param(envName)} found matching the specified criteria.`),1;if(filteredEnvs.length===1)selectedEnv=filteredEnvs[0];else{client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"multiple_envs",message:`Multiple Environment Variables match ${envName}. Specify target and/or branch to update one.`,next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,`env update ${envName} ${getEnvTargetPlaceholder()} <gitbranch> --value "<value>" --yes`)}]},1);let choices=filteredEnvs.map((env,index)=>({name:formatEnvironments(link,env,customEnvironments),value:index})),selectedIndex=await client.input.select({message:`Multiple Environment Variables found for ${param(envName)}. Which one do you want to update?`,choices});selectedEnv=filteredEnvs[selectedIndex]}}else if(matchingEnvs.length===1)selectedEnv=matchingEnvs[0];else{client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"multiple_envs",message:`Multiple Environment Variables match ${envName}. Specify target and/or branch to update one.`,next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,`env update ${envName} ${getEnvTargetPlaceholder()} <gitbranch> --value "<value>" --yes`)}]},1);let choices=matchingEnvs.map((env,index)=>({name:formatEnvironments(link,env,customEnvironments),value:index})),selectedIndex=await client.input.select({message:`Multiple Environment Variables found for ${param(envName)}. Which one do you want to update?`,choices});selectedEnv=matchingEnvs[selectedIndex]}let customSveltePublicPrefix,apiPublicPrefix=getApiPublicPrefix(envName),frameworkPublicPrefix=getFrameworkPublicPrefix(project.framework,envName);if(project.framework==="sveltekit"||project.framework==="sveltekit-1"||project.framework==="sveltekit-2"){let matchingLocalPrefix=(await getLocalSvelteKitPublicPrefixes(link.repoRoot??client.cwd,project.rootDirectory))?.find(prefix=>envName.startsWith(prefix));matchingLocalPrefix!==void 0&&apiPublicPrefix===null&&frameworkPublicPrefix===null&&(customSveltePublicPrefix=matchingLocalPrefix)}let targets=Array.isArray(selectedEnv.target)?selectedEnv.target:[selectedEnv.target].filter(r=>!!r),allTargets=[...targets,...selectedEnv.customEnvironmentIds||[]],selectedEnvIsSecret=isSecretEnvVar(selectedEnv);if(explicitType==="config"&&selectedEnvIsSecret){let removeTargetArg=envTargetArg||targets[0]||allTargets[0]||getEnvTargetPlaceholder(),addTargetArg=formatTargetArg(allTargets,customEnvironments)||removeTargetArg,removeBranchArg=selectedEnv.gitBranch?` ${quoteArg(selectedEnv.gitBranch)}`:"",addBranchArg=selectedEnv.gitBranch?` --git-branch ${quoteArg(selectedEnv.gitBranch)}`:"",globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2),{preserveProject:!0}),humanGlobalFlags=globalFlags.filter(flag=>!flag.startsWith("--non-interactive")),globalSuffix=globalFlags.length>0?` ${globalFlags.map(quoteArg).join(" ")}`:"",humanGlobalSuffix=humanGlobalFlags.length>0?` ${humanGlobalFlags.map(quoteArg).join(" ")}`:"",removeCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg} --yes${globalSuffix}`),addCommand=getCommandNamePlain(`env add ${envName} ${addTargetArg}${addBranchArg} --type config --value "<value>" --yes${globalSuffix}`),removeHumanCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg}${humanGlobalSuffix}`),addHumanCommand=getCommandNamePlain(`env add ${envName} ${addTargetArg}${addBranchArg} --type config${humanGlobalSuffix}`),message="A Secret cannot be changed to Config. To store this value as Config, remove the variable and add it again with `--type config`.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"secret_cannot_become_config",message,next:[{command:removeCommand,when:"Remove the Secret from all of its environments"},{command:addCommand,when:"Add it again as Config; replace <value> before running"}]},1),output_manager_default.fatal(`A Secret cannot be changed to Config. Remove the variable, then add it again as Config. ${param(envName)} will be unavailable to new builds between these commands.`),output_manager_default.print(` Remove:
|
|
25
|
+
`)}function omitUnavailableSecretPlaceholders(localEnv,secretKeys){let safeLocalEnv={...localEnv};for(let key of secretKeys)safeLocalEnv[key]===SENSITIVE_ENV_VALUE_PLACEHOLDER&&delete safeLocalEnv[key];return safeLocalEnv}function parseRunArgs(argv){let argvIndex=argv.indexOf("--"),hasDoubleDash=argvIndex!==-1,vercelArgs=hasDoubleDash?argv.slice(2,argvIndex):argv.slice(2),userCommand=hasDoubleDash?argv.slice(argvIndex+1):[];return{vercelArgs,userCommand}}function needsHelpForRun(client){let{vercelArgs}=parseRunArgs(client.argv),flagsSpecification=getFlagsSpecification(runSubcommand.options);try{return!!parseArguments(vercelArgs,flagsSpecification).flags["--help"]}catch{return!1}}async function run(client,telemetry){let{vercelArgs,userCommand}=parseRunArgs(client.argv),parsedArgs,flagsSpecification=getFlagsSpecification(runSubcommand.options);try{parsedArgs=parseArguments(vercelArgs,flagsSpecification)}catch(error){return printError(error),2}if(userCommand.length===0)return outputActionRequired(client,{status:"action_required",reason:"missing_command",message:"No command provided. Use `--` to separate Vercel flags from your command.",next:[{command:getCommandNamePlain("env run -- <command>")}]},2),output_manager_default.error("No command provided. Use `--` to separate vercel flags from your command."),2;let projectName=parsedArgs.flags["--project"];telemetry.trackCliOptionProject(projectName);let link=await resolveProjectContext({client,projectNameOrId:projectName});if(link.status==="error")return link.exitCode;if(link.status==="not_linked")return outputActionRequired(client,{status:"action_required",reason:"not_linked",message:"Your codebase isn't linked to a project on Vercel. Run `vercel link`, then retry this command.",next:[{command:getCommandNamePlain("link")}]},1),output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Run ${getCommandName("link")} to begin.`),1;client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let environment=parseTarget({flagName:"environment",flags:parsedArgs.flags})||"development",gitBranch=parsedArgs.flags["--git-branch"];output_manager_default.spinner(`Downloading \`${environment}\` environment variables`);let records=await pullEnvRecords(client,link.project.id,"vercel-cli:env:run",{target:environment,gitBranch});output_manager_default.stopSpinner(),output_manager_default.debug(`Running command with ${Object.keys(records.env).length} environment variables`);let localEnv={};try{localEnv=(0,import_env.loadEnvConfig)(client.cwd,!0).combinedEnv}catch(err){output_manager_default.debug(`Failed to load local env files: ${err}`)}let localPlaceholderKeys=Object.entries(localEnv).filter(([,value])=>value===SENSITIVE_ENV_VALUE_PLACEHOLDER).map(([key])=>key),safeLocalEnv=omitUnavailableSecretPlaceholders(localEnv,localPlaceholderKeys),processPlaceholderKeys=Object.keys(records.env).filter(key=>process.env[key]===SENSITIVE_ENV_VALUE_PLACEHOLDER),safeProcessEnv=omitUnavailableSecretPlaceholders(process.env,processPlaceholderKeys),unavailableCandidateKeys=new Set(Object.entries(records.env).filter(([key,value])=>!value&&!safeLocalEnv[key]&&!safeProcessEnv[key]).map(([key])=>key));if(unavailableCandidateKeys.size>0)try{let{envs}=await getEnvRecords(client,link.project.id,"vercel-cli:env:run",{target:environment,gitBranch}),unavailableSecretKeys=envs.filter(env=>isSecretEnvVar(env)&&unavailableCandidateKeys.has(env.key));unavailableSecretKeys.length>0&&printEnvRunWarning(`${getUnavailableSecretValuesMessage(environment,unavailableSecretKeys.length)}${getLocalSecretFallbackMessage(unavailableSecretKeys.length)}`)}catch{}try{let result=await(0,import_execa.default)(userCommand[0],userCommand.slice(1),{cwd:client.cwd,stdio:"inherit",reject:!1,env:{...records.env,...safeLocalEnv,...safeProcessEnv}});return result instanceof Error&&typeof result.exitCode!="number"?(output_manager_default.prettyError(result),1):result.exitCode}catch(err){return output_manager_default.prettyError(err),1}}var import_chalk5=__toESM(require_source(),1);var import_constants3=__toESM(require_dist2(),1);async function updateEnvRecord(client,projectId,envId,type,key,value,targets,gitBranch,visibility){output_manager_default.debug(`Updating ${type} Environment Variable ${key} in ${targets.length} targets`);let target=[],customEnvironmentIds=[];for(let t of targets)(import_constants3.PROJECT_ENV_TARGET.includes(t)?target:customEnvironmentIds).push(t);let body={type,value,target,customEnvironmentIds:customEnvironmentIds.length>0?customEnvironmentIds:void 0,gitBranch:gitBranch||void 0,...visibility!==void 0?{visibility}:{}};key&&(body.key=key);let url=`/v10/projects/${projectId}/env/${envId}`;await client.fetch(url,{method:"PATCH",body})}var EnvUpdateTelemetryClient=class extends TelemetryClient{trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliArgumentEnvironment(environment){environment&&this.trackCliArgument({arg:"environment",value:STANDARD_ENVIRONMENTS.includes(environment)?environment:this.redactedValue})}trackCliArgumentGitBranch(gitBranch){gitBranch&&this.trackCliArgument({arg:"git-branch",value:this.redactedValue})}trackCliFlagSensitive(sensitive){sensitive&&this.trackCliFlag("sensitive")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionValue(value){value&&this.trackCliOption({option:"value",value:this.redactedValue})}trackCliOptionVisibility(visibility){if(visibility){let validVisibilities=["config","secret"];this.trackCliOption({option:"visibility",value:validVisibilities.includes(visibility)?visibility:this.redactedValue})}}trackCliOptionType(type){if(type){let validTypes=["config","secret"];this.trackCliOption({option:"type",value:validTypes.includes(type)?type:this.redactedValue})}}};function looksLikeCredentialName2(key,publicPrefix=getPublicPrefix(key)){return looksLikeSecret(publicPrefix?key.slice(publicPrefix.length):key)}function printEnvUpdateWarning(message){output_manager_default.print(`${import_chalk5.default.yellow("!")} ${message}
|
|
26
|
+
`)}function omitEnvValueArgs(argv){let out=[];for(let i=0;i<argv.length;i++){if(argv[i]==="--value"){i++;continue}argv[i].startsWith("--value=")||out.push(argv[i])}return out}function formatTargetArg(targets,customEnvironments){return targets.map(target=>customEnvironments.find(environment=>environment.id===target||environment.slug===target)?.slug??target).join(",")}function promptEnvUpdateValue(client,envName,isSecret){return client.input.text({message:`What's the new value of ${envName}?`,...isSecret?{transformer:value=>"*".repeat(value.length)}:{}})}async function update(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(updateSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(err){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:err instanceof Error?err.message:String(err)},2),printError(err),2}let{args,flags:opts}=parsedArgs,valueFromFlag=typeof opts["--value"]=="string"?opts["--value"]:void 0,stdInput=await readStandardInput(client.stdin),[envName,envTargetArg,envGitBranch]=args,typeOption=resolveEnvVarTypeOption({type:typeof opts["--type"]=="string"?opts["--type"]:void 0,visibility:typeof opts["--visibility"]=="string"?opts["--visibility"]:void 0}),explicitType=typeOption.explicitVisibility,typeWasExplicit=explicitType!==void 0||!!opts["--sensitive"],telemetryClient=new EnvUpdateTelemetryClient({opts:{store:client.telemetryEventStore}});if(telemetryClient.trackCliArgumentName(envName),telemetryClient.trackCliArgumentEnvironment(envTargetArg),telemetryClient.trackCliArgumentGitBranch(envGitBranch),telemetryClient.trackCliFlagSensitive(opts["--sensitive"]),telemetryClient.trackCliFlagYes(opts["--yes"]),telemetryClient.trackCliOptionValue(valueFromFlag===void 0?void 0:"<redacted>"),telemetryClient.trackCliOptionType(typeof opts["--type"]=="string"?opts["--type"]:void 0),telemetryClient.trackCliOptionVisibility(typeof opts["--visibility"]=="string"?opts["--visibility"]:void 0),typeOption.error)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:typeOption.errorReason??"invalid_type",message:typeOption.error},1),output_manager_default.fatal(typeOption.error),1;if(typeOption.usedDeprecatedVisibility&&printEnvUpdateWarning(ENV_VISIBILITY_DEPRECATION_MESSAGE),explicitType==="config"&&opts["--sensitive"]){let message="`--type config` cannot be used with `--sensitive`. Pick one.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"conflicting_type_flags",message},2),output_manager_default.fatal(message),2}if(args.length>3)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:`Invalid number of arguments. Usage: \`${getCommandNamePlain(`env update <name> ${getEnvTargetPlaceholder()} <gitbranch>`)}\``},2),output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName(`env update <name> ${getEnvTargetPlaceholder()} <gitbranch>`)}`),2;if(stdInput&&(!envName||!envTargetArg))return output_manager_default.error(`Invalid number of arguments. Usage: ${getCommandName("env update <name> <target> <gitbranch> < <file>")}`),2;if(client.nonInteractive){let missing=[];if(envName||missing.push("missing_name"),!stdInput&&valueFromFlag===void 0&&missing.push("missing_value"),missing.length>0){let parts=missing.map(m=>m==="missing_name"?"name":"--value or stdin"),targetPart=envTargetArg||getEnvTargetPlaceholder(),template=`env update ${envName||"<name>"} ${targetPart}${envTargetArg==="preview"||envTargetArg==="development"?" <gitbranch>":""} --value <value> --yes`;outputActionRequired(client,{status:"action_required",reason:"missing_requirements",missing,message:`Provide all required inputs for non-interactive mode: ${parts.join("; ")}. Example: ${getCommandNamePlain(template)}`,next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,template)}]},1)}}envTargetArg&&[].push(envTargetArg),envName||(client.nonInteractive?outputActionRequired(client,{status:"action_required",reason:"missing_name",message:"Provide the variable name as an argument. Example: vercel env update <name>",next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,`env update <name> ${getEnvTargetPlaceholder()} --value <value> --yes`)}]},2):envName=await client.input.text({message:"What's the name of the variable to update?",validate:val=>val?!0:"Name cannot be empty"})),telemetryClient.trackCliOptionProject(opts["--project"]);let link=await resolveProjectContext({client,projectNameOrId:opts["--project"]});if(link.status==="error")return link.exitCode;if(link.status==="not_linked"){if(client.nonInteractive){let preserved=omitEnvValueArgs(getPreservedArgsForEnvUpdate(client.argv)).filter(a=>a!=="--yes"&&a!=="-y"),linkArgv=[...client.argv.slice(0,2),"link","--scope","<scope>",...preserved];outputAgentError(client,{status:"error",reason:"not_linked",message:`Your codebase isn't linked to a project on Vercel. Run ${getCommandNamePlain("link")} to begin. Use --yes for non-interactive; use --scope or --project to specify team or project.`,next:[{command:buildCommandWithYes(linkArgv)},{command:buildCommandWithYes(redactEnvValueArgs(client.argv))}]},1)}return output_manager_default.error(`Your codebase isn't linked to a project on Vercel. Run ${getCommandName("link")} to begin.`),1}client.config.currentTeam=link.org.type==="team"?link.org.id:void 0;let{project}=link,[{envs},customEnvironments]=await Promise.all([getEnvRecords(client,project.id,"vercel-cli:env:update"),getCustomEnvironments(client,project.id)]),normalizedEnvTargetArg=customEnvironments.find(({slug,id})=>slug===envTargetArg||id===envTargetArg)?.id||envTargetArg,matchingEnvs=envs.filter(r=>r.key===envName);if(matchingEnvs.length===0){let listArgs=`env ls ${getGlobalFlagsFromArgs(client.argv.slice(2),{preserveProject:!0}).join(" ")}`.trim();return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"env_not_found",message:`The variable ${envName} was not found. Run ${getCommandNamePlain(listArgs)} to see all available Environment Variables.`},1),output_manager_default.error(`The variable ${param(envName)} was not found. Run ${getCommandName(listArgs)} to see all available Environment Variables.`),1}let selectedEnv;if(envTargetArg||envGitBranch){let filteredEnvs=matchingEnvs.filter(env=>{let matchesTarget=!normalizedEnvTargetArg||(Array.isArray(env.target)?env.target.includes(normalizedEnvTargetArg):env.target===normalizedEnvTargetArg)||env.customEnvironmentIds&&env.customEnvironmentIds.includes(normalizedEnvTargetArg),matchesGitBranch=!envGitBranch||env.gitBranch===envGitBranch;return matchesTarget&&matchesGitBranch});if(filteredEnvs.length===0)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"env_not_found",message:`No Environment Variable ${envName} found matching the specified target/branch.`},1),output_manager_default.error(`No Environment Variable ${param(envName)} found matching the specified criteria.`),1;if(filteredEnvs.length===1)selectedEnv=filteredEnvs[0];else{client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"multiple_envs",message:`Multiple Environment Variables match ${envName}. Specify target and/or branch to update one.`,next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,`env update ${envName} ${getEnvTargetPlaceholder()} <gitbranch> --value "<value>" --yes`)}]},1);let choices=filteredEnvs.map((env,index)=>({name:formatEnvironments(link,env,customEnvironments),value:index})),selectedIndex=await client.input.select({message:`Multiple Environment Variables found for ${param(envName)}. Which one do you want to update?`,choices});selectedEnv=filteredEnvs[selectedIndex]}}else if(matchingEnvs.length===1)selectedEnv=matchingEnvs[0];else{client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"multiple_envs",message:`Multiple Environment Variables match ${envName}. Specify target and/or branch to update one.`,next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,`env update ${envName} ${getEnvTargetPlaceholder()} <gitbranch> --value "<value>" --yes`)}]},1);let choices=matchingEnvs.map((env,index)=>({name:formatEnvironments(link,env,customEnvironments),value:index})),selectedIndex=await client.input.select({message:`Multiple Environment Variables found for ${param(envName)}. Which one do you want to update?`,choices});selectedEnv=matchingEnvs[selectedIndex]}let customSveltePublicPrefix,apiPublicPrefix=getApiPublicPrefix(envName),frameworkPublicPrefix=getFrameworkPublicPrefix(project.framework,envName);if(project.framework==="sveltekit"||project.framework==="sveltekit-1"||project.framework==="sveltekit-2"){let matchingLocalPrefix=(await getLocalSvelteKitPublicPrefixes(link.repoRoot??client.cwd,project.rootDirectory))?.find(prefix=>envName.startsWith(prefix));matchingLocalPrefix!==void 0&&apiPublicPrefix===null&&frameworkPublicPrefix===null&&(customSveltePublicPrefix=matchingLocalPrefix)}let targets=Array.isArray(selectedEnv.target)?selectedEnv.target:[selectedEnv.target].filter(r=>!!r),allTargets=[...targets,...selectedEnv.customEnvironmentIds||[]],selectedEnvIsSecret=isSecretEnvVar(selectedEnv);if(explicitType==="config"&&selectedEnvIsSecret){let removeTargetArg=envTargetArg||targets[0]||allTargets[0]||getEnvTargetPlaceholder(),addTargetArg=formatTargetArg(allTargets,customEnvironments)||removeTargetArg,removeBranchArg=selectedEnv.gitBranch?` ${quoteArg(selectedEnv.gitBranch)}`:"",addBranchArg=selectedEnv.gitBranch?` --git-branch ${quoteArg(selectedEnv.gitBranch)}`:"",globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2),{preserveProject:!0}),humanGlobalFlags=globalFlags.filter(flag=>!flag.startsWith("--non-interactive")),globalSuffix=globalFlags.length>0?` ${globalFlags.map(quoteArg).join(" ")}`:"",humanGlobalSuffix=humanGlobalFlags.length>0?` ${humanGlobalFlags.map(quoteArg).join(" ")}`:"",removeCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg} --yes${globalSuffix}`),addCommand=getCommandNamePlain(`env add ${envName} ${addTargetArg}${addBranchArg} --type config --value "<value>" --yes${globalSuffix}`),removeHumanCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg}${humanGlobalSuffix}`),addHumanCommand=getCommandNamePlain(`env add ${envName} ${addTargetArg}${addBranchArg} --type config${humanGlobalSuffix}`),message="A Secret cannot be changed to Config. To store this value as Config, remove the variable and add it again with `--type config`.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"secret_cannot_become_config",message,next:[{command:removeCommand,when:"Remove the Secret from all of its environments"},{command:addCommand,when:"Add it again as Config; replace <value> before running"}]},1),output_manager_default.fatal(`A Secret cannot be changed to Config. Remove the variable, then add it again as Config. ${param(envName)} will be unavailable to new builds between these commands.`),output_manager_default.print(` Remove:
|
|
27
27
|
${removeHumanCommand}
|
|
28
28
|
`),output_manager_default.print(` Add as Config (prompts for the value):
|
|
29
29
|
${addHumanCommand}
|
|
30
|
-
`),1}if(explicitType==="secret"||opts["--sensitive"]){let knownPublicPrefix=apiPublicPrefix??frameworkPublicPrefix,publicPrefix=knownPublicPrefix??customSveltePublicPrefix,apiPublicPrefixError=apiPublicPrefix?getPublicPrefixSecretVisibilityError(envName,{visibility:explicitType==="secret"?"secret":void 0,type:"sensitive",context:"update"}):null,publicPrefixError=apiPublicPrefixError||(knownPublicPrefix?`\`${knownPublicPrefix}\` exposes this value to anyone visiting your site, so \`${envName}\` cannot be kept private as a Secret. Add a new Secret without the public prefix, then remove this Config.`:customSveltePublicPrefix===""?"This SvelteKit project uses an empty `publicPrefix`, so every Environment Variable is exposed to the browser and cannot be kept private as a Secret. Change the SvelteKit `publicPrefix`, or keep this variable as Config only if the value is safe to expose.":customSveltePublicPrefix!==void 0?`\`${customSveltePublicPrefix}\` exposes this value to anyone visiting your site, so \`${envName}\` cannot be kept private as a Secret. Add a new Secret without the configured public prefix, then remove this Config.`:null);if(publicPrefixError){let privateName=publicPrefix===void 0?envName:envName.slice(publicPrefix.length),removeTargetArg=envTargetArg||targets[0]||allTargets[0]||getEnvTargetPlaceholder(),addTargetArg=formatTargetArg(allTargets,customEnvironments)||removeTargetArg,removeBranchArg=selectedEnv.gitBranch?` ${quoteArg(selectedEnv.gitBranch)}`:"",addBranchArg=selectedEnv.gitBranch?` --git-branch ${quoteArg(selectedEnv.gitBranch)}`:"",globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2),{preserveProject:!0}),humanGlobalFlags=globalFlags.filter(flag=>!flag.startsWith("--non-interactive")),globalSuffix=globalFlags.length>0?` ${globalFlags.map(quoteArg).join(" ")}`:"",humanGlobalSuffix=humanGlobalFlags.length>0?` ${humanGlobalFlags.map(quoteArg).join(" ")}`:"",addCommand=publicPrefix===""?void 0:getCommandNamePlain(`env add ${privateName} ${addTargetArg}${addBranchArg} --type secret --value "<value>" --yes${globalSuffix}`),removeCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg} --yes${globalSuffix}`),addHumanCommand=publicPrefix===""?void 0:getCommandNamePlain(`env add ${privateName} ${addTargetArg}${addBranchArg} --type secret${humanGlobalSuffix}`),removeHumanCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg}${humanGlobalSuffix}`);return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message:publicPrefixError,next:addCommand?[{command:addCommand,when:"Add the private Secret; replace <value> before running"},{command:removeCommand,when:"Remove the public Config after the Secret is available"}]:[]},
|
|
30
|
+
`),1}if(explicitType==="secret"||opts["--sensitive"]){let knownPublicPrefix=apiPublicPrefix??frameworkPublicPrefix,publicPrefix=knownPublicPrefix??customSveltePublicPrefix,apiPublicPrefixError=apiPublicPrefix?getPublicPrefixSecretVisibilityError(envName,{visibility:explicitType==="secret"?"secret":void 0,type:"sensitive",context:"update"}):null,publicPrefixError=apiPublicPrefixError||(knownPublicPrefix?`\`${knownPublicPrefix}\` exposes this value to anyone visiting your site, so \`${envName}\` cannot be kept private as a Secret. Add a new Secret without the public prefix, then remove this Config.`:customSveltePublicPrefix===""?"This SvelteKit project uses an empty `publicPrefix`, so every Environment Variable is exposed to the browser and cannot be kept private as a Secret. Change the SvelteKit `publicPrefix`, or keep this variable as Config only if the value is safe to expose.":customSveltePublicPrefix!==void 0?`\`${customSveltePublicPrefix}\` exposes this value to anyone visiting your site, so \`${envName}\` cannot be kept private as a Secret. Add a new Secret without the configured public prefix, then remove this Config.`:null);if(publicPrefixError){let privateName=publicPrefix===void 0?envName:envName.slice(publicPrefix.length),removeTargetArg=envTargetArg||targets[0]||allTargets[0]||getEnvTargetPlaceholder(),addTargetArg=formatTargetArg(allTargets,customEnvironments)||removeTargetArg,removeBranchArg=selectedEnv.gitBranch?` ${quoteArg(selectedEnv.gitBranch)}`:"",addBranchArg=selectedEnv.gitBranch?` --git-branch ${quoteArg(selectedEnv.gitBranch)}`:"",globalFlags=getGlobalFlagsFromArgs(client.argv.slice(2),{preserveProject:!0}),humanGlobalFlags=globalFlags.filter(flag=>!flag.startsWith("--non-interactive")),globalSuffix=globalFlags.length>0?` ${globalFlags.map(quoteArg).join(" ")}`:"",humanGlobalSuffix=humanGlobalFlags.length>0?` ${humanGlobalFlags.map(quoteArg).join(" ")}`:"",addCommand=publicPrefix===""?void 0:getCommandNamePlain(`env add ${privateName} ${addTargetArg}${addBranchArg} --type secret --value "<value>" --yes${globalSuffix}`),removeCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg} --yes${globalSuffix}`),addHumanCommand=publicPrefix===""?void 0:getCommandNamePlain(`env add ${privateName} ${addTargetArg}${addBranchArg} --type secret${humanGlobalSuffix}`),removeHumanCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg}${humanGlobalSuffix}`);return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message:publicPrefixError,next:addCommand?[{command:addCommand,when:"Add the private Secret; replace <value> before running"},{command:removeCommand,when:"Remove the public Config after the Secret is available"}]:[]},2),output_manager_default.fatal(publicPrefixError),addHumanCommand&&(output_manager_default.print(` Add the private Secret (prompts for the value):
|
|
31
31
|
${addHumanCommand}
|
|
32
32
|
`),output_manager_default.print(` Remove the public Config:
|
|
33
33
|
${removeHumanCommand}
|
|
34
|
-
`)),
|
|
34
|
+
`)),2}}customSveltePublicPrefix!==void 0&&printEnvUpdateWarning(customSveltePublicPrefix===""?"This SvelteKit project uses an empty `publicPrefix`, so every Environment Variable is exposed to the browser.":`\`${customSveltePublicPrefix}\` variables are exposed to the browser by this SvelteKit project.`);let teamSensitivePolicyOn=!1,disjunctiveProductionSecretPolicyOn=!1;if(link.org.type==="team")try{let team=await getTeamByIdOrSlug(client,link.org.id);teamSensitivePolicyOn=team?.sensitiveEnvironmentVariablePolicy==="on",disjunctiveProductionSecretPolicyOn=team?.disjunctiveProductionSecretPolicy==="on"}catch{}let envValue,shouldMaskValue=!!opts["--sensitive"]||explicitType==="secret"||explicitType===void 0&&selectedEnvIsSecret;if(stdInput){let normalizedStdinValue=normalizeStdinEnvValue(stdInput);envValue=normalizedStdinValue.value,normalizedStdinValue.strippedTrailingNewline&&output_manager_default.log("Removed trailing newline from stdin input")}else if(valueFromFlag!==void 0)envValue=valueFromFlag;else{if(client.nonInteractive){let branchPart=envTargetArg==="preview"||envTargetArg==="development"?" <gitbranch>":"",targetPart=envTargetArg||getEnvTargetPlaceholder();outputActionRequired(client,{status:"action_required",reason:"missing_value",message:'In non-interactive mode, provide the new value with `--value` or stdin. Example: `vercel env update <name> <environment> --value "<value>" --yes`',next:[{command:buildEnvUpdateCommandWithPreservedArgs(client.argv,`env update ${envName} ${targetPart}${branchPart} --value <value> --yes`)}]},2)}envValue=await promptEnvUpdateValue(client,envName,shouldMaskValue)}let skipConfirm=opts["--yes"]||!!stdInput||valueFromFlag!==void 0,{finalValue}=await validateEnvValue({envName,initialValue:envValue,skipConfirm,promptForValue:()=>promptEnvUpdateValue(client,envName,shouldMaskValue),selectAction:choices=>client.input.select({message:"How to proceed?",choices}),showWarning:printEnvUpdateWarning,showLog:msg=>output_manager_default.log(msg)}),type=opts["--sensitive"]||explicitType==="secret"?"sensitive":explicitType==="config"?"encrypted":selectedEnv.type,isFinalSecret=()=>type==="sensitive"||explicitType===void 0&&selectedEnvIsSecret;if(!isFinalSecret()&&(type==="plain"||type==="encrypted")&&(looksLikeCredentialName2(envName,customSveltePublicPrefix)||looksLikeSecretValue(finalValue))){printEnvUpdateWarning("This name or value looks like a credential. Config values can be revealed after saving.");let publicPrefix=apiPublicPrefix??frameworkPublicPrefix??customSveltePublicPrefix;if(publicPrefix!=null){if(printEnvUpdateWarning(publicPrefix===""?"This SvelteKit project exposes every Environment Variable to the browser. Keep Config only if the value is safe to expose.":`\`${publicPrefix}\` exposes this value to anyone visiting your site. Keep Config only if the value is safe to expose.`),!typeWasExplicit&&(opts["--yes"]||client.nonInteractive)){let message=publicPrefix===""?"This SvelteKit project exposes every Environment Variable to the browser. To keep this value private, change the configured public prefix before storing it as Secret. If the value is safe to expose, rerun with `--type config`.":`\`${publicPrefix}\` exposes \`${envName}\` to anyone visiting your site. To keep this value private, add \`${envName.slice(publicPrefix.length)}\` as Secret, then remove \`${envName}\`. If the value is safe to expose, rerun with \`--type config\`.`;return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"unsafe_public_config",message},1),output_manager_default.fatal(message),1}if(publicPrefix!==""&&!typeWasExplicit&&!opts["--yes"]&&!client.nonInteractive){let privateName=envName.slice(publicPrefix.length),removeTargetArg=envTargetArg||targets[0]||allTargets[0]||getEnvTargetPlaceholder(),addTargetArg=formatTargetArg(allTargets,customEnvironments)||removeTargetArg,removeBranchArg=selectedEnv.gitBranch?` ${quoteArg(selectedEnv.gitBranch)}`:"",addBranchArg=selectedEnv.gitBranch?` --git-branch ${quoteArg(selectedEnv.gitBranch)}`:"",humanGlobalFlags=getGlobalFlagsFromArgs(client.argv.slice(2),{preserveProject:!0}).filter(flag=>!flag.startsWith("--non-interactive")),humanGlobalSuffix=humanGlobalFlags.length>0?` ${humanGlobalFlags.map(quoteArg).join(" ")}`:"",addPrivateCommand=getCommandNamePlain(`env add ${privateName} ${addTargetArg}${addBranchArg} --type secret${humanGlobalSuffix}`),removePublicCommand=getCommandNamePlain(`env rm ${envName} ${removeTargetArg}${removeBranchArg}${humanGlobalSuffix}`);if(await client.input.select({message:"How should this variable be stored?",choices:[{name:`Keep private: add ${privateName} as Secret, then remove ${envName}`,value:"private"},{name:`Expose to anyone visiting your site: keep ${envName} as Config`,value:"config"}]})==="private")return output_manager_default.print(` Add the private Secret (prompts for the value):
|
|
35
35
|
`),output_manager_default.print(` ${addPrivateCommand}
|
|
36
36
|
`),output_manager_default.print(` Remove the public Config:
|
|
37
37
|
`),output_manager_default.print(` ${removePublicCommand}
|
|
38
|
-
`),1}}else!typeWasExplicit&&!opts["--yes"]&&!client.nonInteractive?await client.input.select({message:"Store this value as?",choices:[{name:getSecretStorageChoice(targets,"for this value"),value:"secret"},{name:"Config (can be revealed after saving)",value:"config"}]})==="secret"&&(type="sensitive",explicitType="secret"):typeWasExplicit||printEnvUpdateWarning("Re-run with `--type secret` to protect it.")}isFinalSecret()&&!selectedEnvIsSecret&&printEnvUpdateWarning("The previous value was readable as Config and may have been exposed. If this variable still holds the same credential, rotate it at its provider and update this variable again.");let finalPublicPrefix=apiPublicPrefix??frameworkPublicPrefix??customSveltePublicPrefix;if(isFinalSecret()&&finalPublicPrefix!==null&&finalPublicPrefix!==void 0&&printEnvUpdateWarning(finalPublicPrefix===""?"This SvelteKit project exposes every Environment Variable to the browser; the Secret type does not prevent that. Change the configured public prefix to keep values private.":`\`${finalPublicPrefix}\` exposes this variable to the browser; the Secret type does not prevent that. Rename the variable without the public prefix to keep it private.`),isFinalSecret()&&disjunctiveProductionSecretPolicyOn&&targets.includes("production")&&allTargets.some(target=>target!=="production")){let message="Your team requires Production and non-Production Secrets to be stored separately with different values. Create separate variables with different values before converting this one.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"production_secret_must_be_separate",message},1),output_manager_default.fatal(message),1}let preserveExistingVisibility=explicitType===void 0&&selectedEnv.visibility==="secret"&&type!=="sensitive",{visibility:resolvedVisibility,error:visibilityError}=resolveEnvVarVisibility({explicitVisibility:typeOption.source?explicitType:void 0,explicitOptionSource:typeOption.source,type,key:envName,envTargets:allTargets,teamSensitivePolicyOn,context:"update"}),visibility=preserveExistingVisibility?void 0:resolvedVisibility,displayVisibility=preserveExistingVisibility?selectedEnv.visibility:visibility;if(visibilityError)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message:visibilityError},
|
|
38
|
+
`),1}}else!typeWasExplicit&&!opts["--yes"]&&!client.nonInteractive?await client.input.select({message:"Store this value as?",choices:[{name:getSecretStorageChoice(targets,"for this value"),value:"secret"},{name:"Config (can be revealed after saving)",value:"config"}]})==="secret"&&(type="sensitive",explicitType="secret"):typeWasExplicit||printEnvUpdateWarning("Re-run with `--type secret` to protect it.")}isFinalSecret()&&!selectedEnvIsSecret&&printEnvUpdateWarning("The previous value was readable as Config and may have been exposed. If this variable still holds the same credential, rotate it at its provider and update this variable again.");let finalPublicPrefix=apiPublicPrefix??frameworkPublicPrefix??customSveltePublicPrefix;if(isFinalSecret()&&finalPublicPrefix!==null&&finalPublicPrefix!==void 0&&printEnvUpdateWarning(finalPublicPrefix===""?"This SvelteKit project exposes every Environment Variable to the browser; the Secret type does not prevent that. Change the configured public prefix to keep values private.":`\`${finalPublicPrefix}\` exposes this variable to the browser; the Secret type does not prevent that. Rename the variable without the public prefix to keep it private.`),isFinalSecret()&&disjunctiveProductionSecretPolicyOn&&targets.includes("production")&&allTargets.some(target=>target!=="production")){let message="Your team requires Production and non-Production Secrets to be stored separately with different values. Create separate variables with different values before converting this one.";return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"production_secret_must_be_separate",message},1),output_manager_default.fatal(message),1}let preserveExistingVisibility=explicitType===void 0&&selectedEnv.visibility==="secret"&&type!=="sensitive",{visibility:resolvedVisibility,error:visibilityError}=resolveEnvVarVisibility({explicitVisibility:typeOption.source?explicitType:void 0,explicitOptionSource:typeOption.source,type,key:envName,envTargets:allTargets,teamSensitivePolicyOn,context:"update"}),visibility=preserveExistingVisibility?void 0:resolvedVisibility,displayVisibility=preserveExistingVisibility?selectedEnv.visibility:visibility;if(visibilityError)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_type",message:visibilityError},2),output_manager_default.fatal(visibilityError),2;if(!opts["--yes"]){let visibilityLabel2=formatVisibilityLabel(displayVisibility,type);if(client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"confirmation_required",message:`Update ${envName} as ${visibilityLabel2} in ${formatEnvironments(link,selectedEnv,customEnvironments)}? Use --yes to confirm.`,next:[{command:buildCommandWithYes(redactEnvValueArgs(client.argv))}]},1),output_manager_default.print(`
|
|
39
39
|
`),printAlignedLabel("Project",`${link.org.slug}/${project.name}`),printAlignedLabel("Environments",formatEnvironments(link,selectedEnv,customEnvironments)),visibilityLabel2&&printAlignedLabel("Type",visibilityLabel2),!await client.input.confirm("Update this Environment Variable?",!1))return output_manager_default.log("Canceled"),0}try{output_manager_default.spinner("Updating");let keyToUpdate=isFinalSecret()?void 0:envName;await updateEnvRecord(client,project.id,selectedEnv.id,type,keyToUpdate,finalValue,allTargets,selectedEnv.gitBranch||"",visibility)}catch(err){if(client.nonInteractive&&isAPIError(err)){let productionSecretPolicyError=getProductionSecretPolicyErrorKind(err.serverMessage),reason=productionSecretPolicyError?productionSecretPolicyError==="different-values"?"production_secret_requires_different_value":"production_secret_must_be_separate":err.slug||(err.serverMessage?.toLowerCase().includes("branch")?"branch_not_found":"api_error");outputAgentError(client,{status:"error",reason,message:productionSecretPolicyError?`${err.serverMessage} ${getProductionSecretPolicyRecovery(productionSecretPolicyError)}`:err.serverMessage},1)}if(isAPIError(err)&&isKnownError(err))return output_manager_default.error(err.serverMessage),1;throw err}output_manager_default.print(`
|
|
40
|
-
`),printAlignedLabel("Updated",envName,{gutter:"\u2713"}),printAlignedLabel("Project",`${link.org.slug}/${project.name}`),printAlignedLabel("Environments",formatEnvironments(link,selectedEnv,customEnvironments));let visibilityLabel=formatVisibilityLabel(displayVisibility,type);return visibilityLabel&&printAlignedLabel("Type",visibilityLabel),0}var EnvTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}trackCliSubcommandPull(actual){this.trackCliSubcommand({subcommand:"pull",value:actual})}trackCliSubcommandRun(actual){this.trackCliSubcommand({subcommand:"run",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}};var COMMAND_CONFIG={ls:getCommandAliases(listSubcommand),add:getCommandAliases(addSubcommand),rm:getCommandAliases(removeSubcommand),pull:getCommandAliases(pullSubcommand),run:getCommandAliases(runSubcommand),update:getCommandAliases(updateSubcommand)};async function main(client){let telemetry=new EnvTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(envCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),
|
|
40
|
+
`),printAlignedLabel("Updated",envName,{gutter:"\u2713"}),printAlignedLabel("Project",`${link.org.slug}/${project.name}`),printAlignedLabel("Environments",formatEnvironments(link,selectedEnv,customEnvironments));let visibilityLabel=formatVisibilityLabel(displayVisibility,type);return visibilityLabel&&printAlignedLabel("Type",visibilityLabel),0}var EnvTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"ls",value:actual})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"rm",value:actual})}trackCliSubcommandPull(actual){this.trackCliSubcommand({subcommand:"pull",value:actual})}trackCliSubcommandRun(actual){this.trackCliSubcommand({subcommand:"run",value:actual})}trackCliSubcommandUpdate(actual){this.trackCliSubcommand({subcommand:"update",value:actual})}};var COMMAND_CONFIG={ls:getCommandAliases(listSubcommand),add:getCommandAliases(addSubcommand),rm:getCommandAliases(removeSubcommand),pull:getCommandAliases(pullSubcommand),run:getCommandAliases(runSubcommand),update:getCommandAliases(updateSubcommand)};async function main(client){let telemetry=new EnvTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(envCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(1),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("env",subcommand),output_manager_default.print(help(envCommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:envCommand,columns:client.stderr.columns}))}let exitCode;switch(subcommand){case"ls":if(needHelp)return telemetry.trackCliFlagHelp("env",subcommandOriginal),printHelp(listSubcommand),0;telemetry.trackCliSubcommandList(subcommandOriginal),exitCode=await ls(client,args);break;case"add":if(needHelp)return telemetry.trackCliFlagHelp("env",subcommandOriginal),printHelp(addSubcommand),0;telemetry.trackCliSubcommandAdd(subcommandOriginal),exitCode=await add(client,args);break;case"rm":if(needHelp)return telemetry.trackCliFlagHelp("env",subcommandOriginal),printHelp(removeSubcommand),0;telemetry.trackCliSubcommandRemove(subcommandOriginal),exitCode=await rm(client,args);break;case"pull":if(needHelp)return telemetry.trackCliFlagHelp("env",subcommandOriginal),printHelp(pullSubcommand),0;telemetry.trackCliSubcommandPull(subcommandOriginal),exitCode=await pull(client,args);break;case"run":if(needsHelpForRun(client))return telemetry.trackCliFlagHelp("env",subcommandOriginal),printHelp(runSubcommand),0;telemetry.trackCliSubcommandRun(subcommandOriginal),exitCode=await run(client,telemetry);break;case"update":if(needHelp)return telemetry.trackCliFlagHelp("env",subcommandOriginal),printHelp(updateSubcommand),0;telemetry.trackCliSubcommandUpdate(subcommandOriginal),exitCode=await update(client,args);break;default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG)),output_manager_default.print(help(envCommand,{columns:client.stderr.columns})),2}return exitCode===0&&await autoInstallVercelPlugin(client),exitCode}export{main 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{promptExperimentalServicesMigration}from"../../chunks/chunk-
|
|
7
|
+
import{promptExperimentalServicesMigration}from"../../chunks/chunk-4BRFG5HP.js";import"../../chunks/chunk-SX64OM5A.js";import"../../chunks/chunk-G3NHWIPJ.js";import"../../chunks/chunk-D6JBONML.js";import"../../chunks/chunk-L3JDEHCQ.js";import{isPromptCanceledError}from"../../chunks/chunk-P2O5DOYE.js";import{pull}from"../../chunks/chunk-PY6YO4MR.js";import"../../chunks/chunk-DWPCZHDT.js";import"../../chunks/chunk-5NSYN7IO.js";import"../../chunks/chunk-ULLWCOYC.js";import"../../chunks/chunk-2FQCZE6S.js";import"../../chunks/chunk-N6CNMMSZ.js";import{getSubcommand}from"../../chunks/chunk-ETV3C2CV.js";import"../../chunks/chunk-OI263FBO.js";import{ensureLink}from"../../chunks/chunk-EA3BJUUK.js";import"../../chunks/chunk-O552UV4H.js";import"../../chunks/chunk-23NBYS6R.js";import{addSubcommand8 as addSubcommand,getCommandAliases,linkCommand}from"../../chunks/chunk-RERUTI3O.js";import"../../chunks/chunk-O5A7CNRV.js";import"../../chunks/chunk-774D3BGN.js";import"../../chunks/chunk-MOLEXKVC.js";import"../../chunks/chunk-EDDOQXEI.js";import"../../chunks/chunk-35QK5NDD.js";import"../../chunks/chunk-M4IWOZEG.js";import"../../chunks/chunk-OQVE2WXX.js";import"../../chunks/chunk-7SNMU7U7.js";import"../../chunks/chunk-6C4RPAG7.js";import"../../chunks/chunk-DZZFEAM6.js";import"../../chunks/chunk-S54ISKGR.js";import"../../chunks/chunk-WOTPEBSH.js";import"../../chunks/chunk-YW5R6XQI.js";import"../../chunks/chunk-ZTUQEA2X.js";import"../../chunks/chunk-JKTQV2QJ.js";import"../../chunks/chunk-P3YADO62.js";import"../../chunks/chunk-H3QRCTIJ.js";import"../../chunks/chunk-FAW6NBLQ.js";import"../../chunks/chunk-HVJERSGE.js";import"../../chunks/chunk-SOJCELXH.js";import"../../chunks/chunk-SXUEGVWB.js";import"../../chunks/chunk-ILR6YA2A.js";import"../../chunks/chunk-MCOJUSDV.js";import"../../chunks/chunk-UKC3NSS6.js";import"../../chunks/chunk-DQXGNNPB.js";import"../../chunks/chunk-JNLWD6DK.js";import{help}from"../../chunks/chunk-W6M24BQ4.js";import"../../chunks/chunk-6TAQ6OWD.js";import{printError}from"../../chunks/chunk-2Z47VG5H.js";import"../../chunks/chunk-EJNFKH6Y.js";import"../../chunks/chunk-WPS6JZF6.js";import"../../chunks/chunk-OSCCYU74.js";import{detectExplicitScope,getScope}from"../../chunks/chunk-GXNSAACA.js";import"../../chunks/chunk-CAAD55US.js";import"../../chunks/chunk-QTKJC2O5.js";import{TelemetryClient}from"../../chunks/chunk-3J2P52OU.js";import"../../chunks/chunk-RCTYVKM5.js";import"../../chunks/chunk-7T6TL3GQ.js";import"../../chunks/chunk-BRK4OB4B.js";import"../../chunks/chunk-GHM7V3GG.js";import"../../chunks/chunk-5XJNPXQK.js";import"../../chunks/chunk-MY4MONOH.js";import{parseArguments}from"../../chunks/chunk-MQW6DKD2.js";import"../../chunks/chunk-BKV35LVB.js";import{getFlagsSpecification}from"../../chunks/chunk-5IPBCD7K.js";import{addRepoLink,ensureRepoLink,findRepoRoot,resolveProjectCwd}from"../../chunks/chunk-QMTPSHRV.js";import"../../chunks/chunk-B4ATVYZW.js";import"../../chunks/chunk-F2ZWW2IO.js";import"../../chunks/chunk-PPCFQQSU.js";import"../../chunks/chunk-QCOPZAUC.js";import"../../chunks/chunk-HRQQ2N5B.js";import"../../chunks/chunk-VOZEB6PD.js";import"../../chunks/chunk-4WS3D23J.js";import{cmd}from"../../chunks/chunk-FI772UVH.js";import{output_manager_default}from"../../chunks/chunk-MR423MWE.js";import"../../chunks/chunk-QGIQK47P.js";import"../../chunks/chunk-AVSPFBLM.js";import"../../chunks/chunk-XCJDGQO7.js";import"../../chunks/chunk-YPTLSODC.js";import"../../chunks/chunk-7HL2RPUO.js";import{require_source}from"../../chunks/chunk-U7KCDTCH.js";import"../../chunks/chunk-N3ZZ7FHQ.js";import"../../chunks/chunk-GU6VIFR5.js";import{__toESM}from"../../chunks/chunk-6L236MNA.js";var import_chalk=__toESM(require_source(),1);import{join}from"path";var LinkTelemetryClient=class extends TelemetryClient{trackCliArgumentCwd(){this.trackCliArgument({arg:"cwd",value:this.redactedValue})}trackCliFlagRepo(flag){flag&&this.trackCliFlag("repo")}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliFlagConfirm(flag){flag&&this.trackCliFlag("confirm")}trackCliOptionTeam(value){value&&this.trackCliOption({option:"team",value:this.redactedValue})}trackCliOptionProjectId(value){value&&this.trackCliOption({option:"project-id",value:this.redactedValue})}trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}};var COMMAND_CONFIG={add:getCommandAliases(addSubcommand)};function warnOidcRefreshFailed(){output_manager_default.print(`${import_chalk.default.yellow("!")} Linked project, but failed to refresh VERCEL_OIDC_TOKEN in .env.local. Rerun the link command to retry.
|
|
8
8
|
`)}async function refreshOidcTokenAfterLink(client,cwd){let originalCwd=client.cwd;try{client.cwd=await resolveProjectCwd(cwd),output_manager_default.print(`
|
|
9
9
|
`),await pull(client,["--yes"],"vercel-cli:link",{oidcTokenOnly:!0})!==0&&warnOidcRefreshFailed()}catch{warnOidcRefreshFailed()}finally{client.cwd=originalCwd}}async function link(client){try{return await client.withEscapePromptCancellation(()=>linkProject(client))}catch(error){if(isPromptCanceledError(error))return output_manager_default.print(` Canceled.
|
|
10
|
-
`),0;throw error}}async function linkProject(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(linkCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),
|
|
10
|
+
`),0;throw error}}async function linkProject(client){let parsedArgs=null,flagsSpecification=getFlagsSpecification(linkCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let{subcommand,subcommandOriginal}=getSubcommand(parsedArgs.args.slice(1),COMMAND_CONFIG),telemetry=new LinkTelemetryClient({opts:{store:client.telemetryEventStore}});function printHelp(command){output_manager_default.print(help(command,{parent:linkCommand,columns:client.stderr.columns}))}if(subcommand==="add"){if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("link",subcommandOriginal),printHelp(addSubcommand),0;telemetry.trackCliSubcommandAdd(subcommandOriginal);let yes2=!!parsedArgs.flags["--yes"];try{await addRepoLink(client,client.cwd,{yes:yes2})}catch(err){if(isPromptCanceledError(err))throw err;return output_manager_default.prettyError(err),1}return 0}try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification)}catch(error){return printError(error),2}if(parsedArgs.flags["--help"])return telemetry.trackCliFlagHelp("link"),output_manager_default.print(help(linkCommand,{columns:client.stderr.columns})),0;telemetry.trackCliFlagRepo(parsedArgs.flags["--repo"]),telemetry.trackCliFlagYes(parsedArgs.flags["--yes"]),telemetry.trackCliOptionProject(parsedArgs.flags["--project"]),"--confirm"in parsedArgs.flags&&(telemetry.trackCliFlagConfirm(parsedArgs.flags["--confirm"]),output_manager_default.warn("`--confirm` is deprecated, please use `--yes` instead"),parsedArgs.flags["--yes"]=parsedArgs.flags["--confirm"]);let yes=!!parsedArgs.flags["--yes"],cwd=parsedArgs.args[1];if(cwd?(telemetry.trackCliArgumentCwd(),output_manager_default.warn(`The ${cmd("vc link <directory>")} syntax is deprecated, please use ${cmd(`vc link --cwd ${cwd}`)} instead`)):cwd=client.cwd,parsedArgs.flags["--repo"]){output_manager_default.warn(`The ${cmd("--repo")} flag is in alpha, please report issues`);try{await ensureRepoLink(client,cwd,{yes,overwrite:!0})}catch(err){if(isPromptCanceledError(err))throw err;return output_manager_default.prettyError(err),1}}else{let selectedOrg=detectExplicitScope(client)?(await getScope(client,{resolveLocalScope:!0})).org:void 0,linkNonInteractive=client.nonInteractive||client.argv.includes("--non-interactive"),link2=await ensureLink("link",client,cwd,{autoConfirm:yes,forceDelete:!0,selectedOrg,projectName:parsedArgs.flags["--project"],successEmoji:"success",nonInteractive:linkNonInteractive,pullEnv:!1});if(typeof link2=="number")return link2;let projectCwd=await resolveProjectCwd(cwd),rootDirectory=link2.project.rootDirectory,repoRoot=link2.repoRoot??(rootDirectory?await findRepoRoot(projectCwd):void 0);await promptExperimentalServicesMigration({client,cwd:rootDirectory?join(repoRoot??projectCwd,rootDirectory):link2.repoRoot??projectCwd,autoConfirm:yes,nonInteractive:linkNonInteractive,allowConfigExecution:!1}),await refreshOidcTokenAfterLink(client,cwd)}return 0}export{link as default};
|