@vercel/cli-support 65.10.0 → 65.11.0-snapshot-631b89501c86
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-4R6FUHQT.js +8 -0
- package/dist/chunks/add-F3H4BFJZ.js +8 -0
- package/dist/chunks/add-TCOJ4SIQ.js +8 -0
- package/dist/chunks/alerts-JGRRCQA4.js +8 -0
- package/dist/chunks/build-GOLTZF6S.js +7 -0
- package/dist/chunks/{chunk-6NUH6ZPE.js → chunk-2J35YKA2.js} +9 -9
- package/dist/chunks/{chunk-GQ4CQDIL.js → chunk-3KJ6HWSX.js} +1 -1
- package/dist/chunks/{chunk-STKZTUGE.js → chunk-3TDFSO4X.js} +1 -1
- package/dist/chunks/chunk-42FOKWGX.js +8 -0
- package/dist/chunks/{chunk-T2FCF46I.js → chunk-4DMKP6AO.js} +2 -2
- package/dist/chunks/chunk-4HR3I3ML.js +7 -0
- package/dist/chunks/{chunk-5MPZSRYG.js → chunk-4T57TXQ3.js} +1 -1
- package/dist/chunks/{chunk-SBEWZ65N.js → chunk-4VP57TOJ.js} +1 -1
- package/dist/chunks/{chunk-ZEUREQ4E.js → chunk-5B5CLOKM.js} +1 -1
- package/dist/chunks/chunk-5FIY443M.js +7 -0
- package/dist/chunks/{chunk-AUIV7YJO.js → chunk-5X635INY.js} +2 -2
- package/dist/chunks/{chunk-P6J22UJQ.js → chunk-6ORJPXDQ.js} +1 -1
- package/dist/chunks/chunk-74VQ7PQV.js +7 -0
- package/dist/chunks/{chunk-VU3RBRDH.js → chunk-7JMN657A.js} +1 -1
- package/dist/chunks/{chunk-Q46Q4Y4R.js → chunk-7LPNDK2O.js} +1 -1
- package/dist/chunks/{chunk-LIEWXPUC.js → chunk-7MZLV3KK.js} +1 -1
- package/dist/chunks/{chunk-YGYUPPAL.js → chunk-7NMC4E66.js} +1 -1
- package/dist/chunks/chunk-7ZJ7VUIR.js +7 -0
- package/dist/chunks/chunk-A3M2BHWR.js +13 -0
- package/dist/chunks/{chunk-US7YJ2RQ.js → chunk-AYZ52QDF.js} +1 -1
- package/dist/chunks/{chunk-5IZ33FNL.js → chunk-B56SRT5W.js} +1 -1
- package/dist/chunks/{chunk-3PKL2PTF.js → chunk-B6QVH6IG.js} +1 -1
- package/dist/chunks/{chunk-3QYXC4PH.js → chunk-BUFEV3T4.js} +1 -1
- package/dist/chunks/{chunk-ER7L7HYA.js → chunk-BVR6OIU5.js} +1 -1
- package/dist/chunks/{chunk-B4XGTAFO.js → chunk-BW25OFQG.js} +1 -1
- package/dist/chunks/{chunk-7LSH3MEB.js → chunk-C5QEQSEX.js} +1 -1
- package/dist/chunks/{chunk-VQSSVB6V.js → chunk-CD6ZWCKT.js} +1 -1
- package/dist/chunks/chunk-CFYLTZSV.js +7 -0
- package/dist/chunks/chunk-D3M2JG5C.js +7 -0
- package/dist/chunks/chunk-D7BB5BPA.js +10 -0
- package/dist/chunks/{chunk-RUBMVRT6.js → chunk-DR6OJB6P.js} +1 -1
- package/dist/chunks/chunk-DRZVM7CB.js +12 -0
- package/dist/chunks/{chunk-UQNBUXQA.js → chunk-EBIJ26IV.js} +1 -1
- package/dist/chunks/chunk-EGTJTCCW.js +7 -0
- package/dist/chunks/{chunk-OJWI6QJ3.js → chunk-EICEQXVS.js} +1 -1
- package/dist/chunks/{chunk-NAN5IE3B.js → chunk-EIMHC5UY.js} +1 -1
- package/dist/chunks/{chunk-CBMWPDOL.js → chunk-EVBGFSK5.js} +1 -1
- package/dist/chunks/{chunk-N5AN4JZL.js → chunk-EZLPMOHM.js} +1 -1
- package/dist/chunks/{chunk-JLNF2QTR.js → chunk-F2R7L3ZB.js} +1 -1
- package/dist/chunks/chunk-FHMCTV5E.js +7 -0
- package/dist/chunks/{chunk-DUCCC22H.js → chunk-FNH3T3CF.js} +1 -1
- package/dist/chunks/{chunk-RBIHS5QI.js → chunk-FOE3MWES.js} +1 -1
- package/dist/chunks/{chunk-KZLRIAAT.js → chunk-FVTRIRML.js} +1 -1
- package/dist/chunks/{chunk-PL6IOUKW.js → chunk-GL66K54F.js} +1 -1
- package/dist/chunks/{chunk-SXYA7JSX.js → chunk-HDISAMDF.js} +1 -1
- package/dist/chunks/chunk-HKU6D7DU.js +8 -0
- package/dist/chunks/{chunk-4WXVKR43.js → chunk-HNH3DPIZ.js} +1 -1
- package/dist/chunks/{chunk-U2TQFAO3.js → chunk-HYOWFNOP.js} +1 -1
- package/dist/chunks/{chunk-OYIDWI5Y.js → chunk-HZEKH3RO.js} +3 -3
- package/dist/chunks/{chunk-6RMW63GB.js → chunk-IHCYNUI2.js} +1 -1
- package/dist/chunks/chunk-IOTKHTZH.js +7 -0
- package/dist/chunks/{chunk-4VF5BZJP.js → chunk-JTAUWH5V.js} +1 -1
- package/dist/chunks/{chunk-S535FZTA.js → chunk-JUSNW3IF.js} +1 -1
- package/dist/chunks/{chunk-MKTZDEOJ.js → chunk-K4JTCVNW.js} +1 -1
- package/dist/chunks/{chunk-FPREO4VS.js → chunk-LALPOYIA.js} +1 -1
- package/dist/chunks/{chunk-YKLTNKQJ.js → chunk-MIIHBRKV.js} +1 -1
- package/dist/chunks/{chunk-BK3TNLWO.js → chunk-MO2G2ND2.js} +1 -1
- package/dist/chunks/{chunk-NLTZGQB2.js → chunk-MUKXOI2K.js} +1 -1
- package/dist/chunks/{chunk-PKZK23PR.js → chunk-NDMQVBTV.js} +1 -1
- package/dist/chunks/{chunk-DNLE3KPC.js → chunk-NSPW47RU.js} +1 -1
- package/dist/chunks/{chunk-K5KVSA2A.js → chunk-NT2N5UR4.js} +1 -1
- package/dist/chunks/{chunk-WYGOYE6C.js → chunk-NTDP6RTQ.js} +1 -1
- package/dist/chunks/chunk-NUSKXXZZ.js +20 -0
- package/dist/chunks/{chunk-Q2JNATRP.js → chunk-NZW3RIQM.js} +1 -1
- package/dist/chunks/chunk-Q2QVK3TH.js +7 -0
- package/dist/chunks/{chunk-HTPNGLPH.js → chunk-QDHTI5WK.js} +1 -1
- package/dist/chunks/chunk-QROI2U32.js +14 -0
- package/dist/chunks/chunk-RAQ6EUNL.js +7 -0
- package/dist/chunks/chunk-RDWLLSPU.js +7 -0
- package/dist/chunks/chunk-RR5SDYNN.js +8 -0
- package/dist/chunks/{chunk-BPRGAX62.js → chunk-SLCPSRDR.js} +1 -1
- package/dist/chunks/{chunk-5RYQH3XW.js → chunk-TPJV5UNE.js} +1 -1
- package/dist/chunks/{chunk-QXL353OB.js → chunk-TUAS3L5I.js} +1 -1
- package/dist/chunks/{chunk-7TR6H6NE.js → chunk-UBJVL3NJ.js} +2 -2
- package/dist/chunks/{chunk-6YAYCEDT.js → chunk-UCRMJMH6.js} +2 -2
- package/dist/chunks/{chunk-XS3MNHFR.js → chunk-UF2E5BDE.js} +1 -1
- package/dist/chunks/{chunk-E7WULWMX.js → chunk-UFXIPUNI.js} +1 -1
- package/dist/chunks/{chunk-SR7BZA6N.js → chunk-UNPK7LVC.js} +1 -1
- package/dist/chunks/{chunk-FXHB7TTL.js → chunk-VAZ7JG2Z.js} +1 -1
- package/dist/chunks/{chunk-52X4YVSG.js → chunk-VKCBEW6R.js} +1 -1
- package/dist/chunks/{chunk-FSJFWVUY.js → chunk-VWJXV5ZM.js} +1 -1
- package/dist/chunks/{chunk-VTITZEPW.js → chunk-W24TLPO5.js} +1 -1
- package/dist/chunks/chunk-WBSFE6IE.js +10 -0
- package/dist/chunks/{chunk-LE72YLCC.js → chunk-WMWB7QKG.js} +1 -1
- package/dist/chunks/{chunk-XFUUALZS.js → chunk-WNDR5HCU.js} +1 -1
- package/dist/chunks/{chunk-DQNP7OQ5.js → chunk-XH2R2EIK.js} +1 -1
- package/dist/chunks/{chunk-ZPJHONCZ.js → chunk-XQDHMFQY.js} +1 -1
- package/dist/chunks/{chunk-JA6IGJ67.js → chunk-YODQLETL.js} +1 -1
- package/dist/chunks/{chunk-36XHIIUT.js → chunk-Z64MQIOE.js} +1 -1
- package/dist/chunks/chunk-ZPBGAZC2.js +11 -0
- package/dist/chunks/{chunk-75DUL7VI.js → chunk-ZTHW5VNH.js} +1 -1
- package/dist/chunks/clear-PECHXMV5.js +8 -0
- package/dist/chunks/compile-vercel-config-EM3HYOQC.js +7 -0
- package/dist/chunks/config-DA2NZUDH.js +8 -0
- package/dist/chunks/config-X6O3DT7V.js +7 -0
- package/dist/chunks/config-validator.mjs +1 -1
- package/dist/chunks/{connect-git-provider-YIX5ZOU6.js → connect-git-provider-GFAJLQLU.js} +1 -1
- package/dist/chunks/contract-RHMWRX4W.js +10 -0
- package/dist/chunks/delete-5RN5VW5L.js +9 -0
- package/dist/chunks/delete-MT6I7R7K.js +10 -0
- package/dist/chunks/detect-services-HSA4JHJX.js +7 -0
- package/dist/chunks/disable-LXPZDQMC.js +7 -0
- package/dist/chunks/discard-PW65T65S.js +14 -0
- package/dist/chunks/edit-WFSONASO.js +8 -0
- package/dist/chunks/edit-YID3FOJ3.js +9 -0
- package/dist/chunks/enable-X2EKQCIY.js +7 -0
- package/dist/chunks/{export-YYQ2J5AT.js → export-25TQ3YBT.js} +1 -1
- package/dist/chunks/future-DQBK457G.js +7 -0
- package/dist/chunks/generate-cert-for-deploy-OMEACY5G.js +7 -0
- package/dist/chunks/image-AO2OZG4W.js +7 -0
- package/dist/chunks/import-builders-GSDV4K4A.js +7 -0
- package/dist/chunks/{inspect-AHHXHIIP.js → inspect-3W3TUJ6P.js} +1 -1
- package/dist/chunks/inspect-4244CRHI.js +13 -0
- package/dist/chunks/{inspect-SFM3NWDF.js → inspect-BRYVSQBD.js} +1 -1
- package/dist/chunks/inspect-C43IV7X4.js +9 -0
- package/dist/chunks/inspect-RP5KXOYQ.js +8 -0
- package/dist/chunks/{inspect-RPCDGIP3.js → inspect-TN2QY3BP.js} +1 -1
- package/dist/chunks/list-2SY6PZLC.js +12 -0
- package/dist/chunks/{list-7WWUYCE6.js → list-6W4UQBY4.js} +1 -1
- package/dist/chunks/{list-NXZXKKAR.js → list-WA6Q7DUN.js} +1 -1
- package/dist/chunks/list-WBKZGIMQ.js +8 -0
- package/dist/chunks/login-K6XBWOFD.js +9 -0
- package/dist/chunks/login-OGMXEW5N.js +7 -0
- package/dist/chunks/logs-R3ZERQ7M.js +7 -0
- package/dist/chunks/{ls-LCUOBWY2.js → ls-4WP6LHLL.js} +1 -1
- package/dist/chunks/{ls-ITWXAWSZ.js → ls-EVAQD3LI.js} +1 -1
- package/dist/chunks/{ls-5SKRXNSI.js → ls-L5LLKZBV.js} +1 -1
- package/dist/chunks/{ls-FOFJU2JJ.js → ls-MAJ4QZTY.js} +1 -1
- package/dist/chunks/ls-O5DKK3TY.js +8 -0
- package/dist/chunks/ls-PTHGXQLK.js +11 -0
- package/dist/chunks/{ls-OY5YTZGN.js → ls-UXE5RSZN.js} +1 -1
- package/dist/chunks/mutate-EKZWPQQJ.js +9 -0
- package/dist/chunks/{notifications-XAPB2F2T.js → notifications-F5S3RKZF.js} +1 -1
- package/dist/chunks/open-KGVG54NN.js +7 -0
- package/dist/chunks/{openapi-UUFKDKGC.js → openapi-7TPDTMCU.js} +1 -1
- package/dist/chunks/{permissions-FU5OET67.js → permissions-5K7JZOMB.js} +1 -1
- package/dist/chunks/{plugin-offer-E5JOW442.js → plugin-offer-JUYWL4I7.js} +1 -1
- package/dist/chunks/prompt-missing-credentials-DX2KJB5X.js +7 -0
- package/dist/chunks/publish-KIRTO2ZO.js +15 -0
- package/dist/chunks/pull-3CRJK7BX.js +7 -0
- package/dist/chunks/purchase-domain-if-available-55IXEF43.js +7 -0
- package/dist/chunks/push-4YG5HKSD.js +7 -0
- package/dist/chunks/{query-VMKIOI3W.js → query-67KQVLTR.js} +1 -1
- package/dist/chunks/reauthenticate-SWSBFGDU.js +7 -0
- package/dist/chunks/remove-SYTIFVWW.js +9 -0
- package/dist/chunks/reorder-TX5MXJEB.js +10 -0
- package/dist/chunks/reply-XVK33N5T.js +9 -0
- package/dist/chunks/resolve-JZ262ZF4.js +12 -0
- package/dist/chunks/resolve-agent-team-BG5YW55B.js +7 -0
- package/dist/chunks/restore-IPFL7TKT.js +16 -0
- package/dist/chunks/rm-2BCAZGQU.js +8 -0
- package/dist/chunks/rm-3CCU3CE6.js +8 -0
- package/dist/chunks/rm-5CQV5LYG.js +8 -0
- package/dist/chunks/rm-OV4OU6H2.js +8 -0
- package/dist/chunks/rm-WFGMOZ3G.js +8 -0
- package/dist/chunks/rule-inspect-RFJIIXZH.js +8 -0
- package/dist/chunks/{schema-AKVIKCFT.js → schema-753JMRZA.js} +1 -1
- package/dist/chunks/schema-SUNFQGUL.js +14 -0
- package/dist/chunks/select-org-MPHPWWPU.js +7 -0
- package/dist/chunks/set-BR6EEOPB.js +7 -0
- package/dist/chunks/set-I3NWZRSI.js +9 -0
- package/dist/chunks/setup-and-link-MRTKVOWD.js +7 -0
- package/dist/chunks/{skills-JG4MGVKX.js → skills-QZ4AMS2K.js} +28 -16
- package/dist/chunks/{tags-4Y4UBA5S.js → tags-7DIZEAVE.js} +1 -1
- package/dist/chunks/{types-DSN6Q6HW.js → types-NPUAHKSK.js} +1 -1
- package/dist/chunks/{update-R42CXSVE.js → update-7XH7HM5F.js} +1 -1
- package/dist/chunks/usage-3BS7JCCU.js +13 -0
- package/dist/chunks/{validate-config-XWZ7ZZ3G.js → validate-config-LAD7BU3B.js} +1 -1
- package/dist/commands/build/index.js +1 -1
- package/dist/commands/deploy/index.js +4 -4
- package/dist/commands/dev/index.js +2 -2
- package/dist/commands/env/index.js +1 -1
- package/dist/commands/link/index.js +1 -1
- package/dist/commands/list/index.js +1 -1
- package/dist/commands/project/index.js +1 -1
- package/dist/commands-account.js +82 -93
- package/dist/commands-ai.js +13 -12
- package/dist/commands-blob.js +1 -1
- package/dist/commands-core.js +56 -59
- package/dist/commands-deployments.js +1 -1
- package/dist/commands-flags.js +6 -6
- package/dist/commands-integrations.js +12 -18
- package/dist/commands-observability.js +7 -7
- package/dist/commands-routing.js +2 -2
- package/dist/help.js +1 -1
- package/dist/index.js +7 -7
- package/dist/internal-build.js +1 -1
- package/dist/launcher-errors.js +1 -1
- package/dist/package.json +25 -25
- package/dist/root-help-commands.mjs +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +16 -16
- package/dist/chunks/add-4MTUAI2X.js +0 -8
- package/dist/chunks/add-JYLWBVVQ.js +0 -8
- package/dist/chunks/add-T5ERJ62Z.js +0 -8
- package/dist/chunks/build-OGWTTFLG.js +0 -7
- package/dist/chunks/chunk-3QFBVAHL.js +0 -8
- package/dist/chunks/chunk-5RSSGN2Q.js +0 -8
- package/dist/chunks/chunk-BIRSJSAO.js +0 -7
- package/dist/chunks/chunk-FOWAVQOH.js +0 -8
- package/dist/chunks/chunk-JBU72NEQ.js +0 -7
- package/dist/chunks/chunk-NZRBJB6T.js +0 -7
- package/dist/chunks/chunk-OII46FDN.js +0 -12
- package/dist/chunks/chunk-SNNJRKD6.js +0 -10
- package/dist/chunks/chunk-TILI4QBL.js +0 -11
- package/dist/chunks/chunk-WKIDCYKL.js +0 -10
- package/dist/chunks/chunk-ZCUUCYID.js +0 -13
- package/dist/chunks/chunk-ZIC7VWFC.js +0 -14
- package/dist/chunks/clear-Z5OO6URI.js +0 -8
- package/dist/chunks/compile-vercel-config-ZKUTSDWV.js +0 -7
- package/dist/chunks/config-AUTTHXQO.js +0 -8
- package/dist/chunks/config-RJ7PLFQD.js +0 -7
- package/dist/chunks/delete-QQOC63HV.js +0 -9
- package/dist/chunks/delete-WIGSOZR3.js +0 -10
- package/dist/chunks/detect-services-J4LGLAHC.js +0 -7
- package/dist/chunks/disable-L54VGY5A.js +0 -7
- package/dist/chunks/discard-Q5UPTZR2.js +0 -14
- package/dist/chunks/edit-FRGMYBW3.js +0 -9
- package/dist/chunks/edit-QEDNQ33T.js +0 -8
- package/dist/chunks/enable-TGQZWSBG.js +0 -7
- package/dist/chunks/future-RYEYLPCG.js +0 -7
- package/dist/chunks/generate-cert-for-deploy-Y4KDIFF2.js +0 -7
- package/dist/chunks/image-PDPRURMH.js +0 -7
- package/dist/chunks/import-builders-H54QCMQ4.js +0 -7
- package/dist/chunks/inspect-6IBPIBIJ.js +0 -9
- package/dist/chunks/inspect-Q7FYDFL7.js +0 -13
- package/dist/chunks/list-GSVERG4S.js +0 -12
- package/dist/chunks/login-HEHHQO3F.js +0 -9
- package/dist/chunks/login-XKLPSZNN.js +0 -7
- package/dist/chunks/logs-NJ46ZSNZ.js +0 -7
- package/dist/chunks/ls-MWGIT2YH.js +0 -8
- package/dist/chunks/ls-TZN53EJL.js +0 -11
- package/dist/chunks/mutate-ZYXVL22A.js +0 -9
- package/dist/chunks/open-WPRHI6ND.js +0 -7
- package/dist/chunks/prompt-missing-credentials-ZZVTEQQB.js +0 -7
- package/dist/chunks/publish-R5IV2BH2.js +0 -15
- package/dist/chunks/pull-CQVHIIAN.js +0 -7
- package/dist/chunks/purchase-domain-if-available-VMWCMYC2.js +0 -7
- package/dist/chunks/push-Y5CUOISM.js +0 -7
- package/dist/chunks/reauthenticate-5K7LBTOW.js +0 -7
- package/dist/chunks/reorder-W3MXHSGZ.js +0 -10
- package/dist/chunks/reply-YH7HRIWQ.js +0 -9
- package/dist/chunks/resolve-FWVMWJTG.js +0 -12
- package/dist/chunks/resolve-agent-team-6L7AQUA2.js +0 -7
- package/dist/chunks/restore-I7L3EOS4.js +0 -16
- package/dist/chunks/rm-AWUMNWQU.js +0 -8
- package/dist/chunks/rm-HVGUK55W.js +0 -8
- package/dist/chunks/rm-M3EMCKSN.js +0 -8
- package/dist/chunks/rm-RFCTWU5R.js +0 -8
- package/dist/chunks/rm-VREBRM5D.js +0 -8
- package/dist/chunks/rule-inspect-SQUCRRGA.js +0 -8
- package/dist/chunks/schema-S36QQNJP.js +0 -14
- package/dist/chunks/select-org-PRWYXAWW.js +0 -7
- package/dist/chunks/set-ZJAC44LV.js +0 -7
- package/dist/chunks/setup-and-link-VD53JFQI.js +0 -7
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import{amountMatchesPrice,formatAmountArg,parseAmount}from"./chunk-NUSKXXZZ.js";import{formatUsd}from"./chunk-RAQ6EUNL.js";import{quoteShellArg}from"./chunk-TZE4CS4K.js";import{canPrompt}from"./chunk-IQ7FPAI4.js";import{getTeams}from"./chunk-SLCPSRDR.js";import{shouldEmitNonInteractiveCommandError,writeActionRequired,writeAgentError}from"./chunk-5X635INY.js";import{printAlignedLabel}from"./chunk-PKNEWN4W.js";import{parseArguments}from"./chunk-AYZ52QDF.js";import{wantsMachineReadableOutput}from"./chunk-SDYCW5JM.js";import{packageName}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{require_build_utils}from"./chunk-5MDNVAE6.js";import{stripSensitiveAuthArgs}from"./chunk-AMPJ6RWT.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS}from"./chunk-Q2QVK3TH.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_build_utils=__toESM(require_build_utils(),1);import{createHash,randomUUID}from"node:crypto";var APPROVAL_OPTIONS=new Set(["--confirm-name","--amount","--effects-digest"]),LEGACY_CONSENT_FLAGS=new Set(["--yes","-y","--confirm"]);async function requireApproval(client,consequence,details,flags,{legacy:commandLegacy}={}){let approval=describeApproval(consequence,details),agent=client.isAgent,noPrompts=isAgentRun(client),terminal=!noPrompts&&canPrompt(client),legacy=agent?void 0:commandLegacy,check=approval.check(flags);if(check.given&&"invalid"in check)return track(client,approval,"invalid"),refuse(client,approval,{reason:AGENT_REASON.INVALID_ARGUMENTS,message:check.invalid,exitCode:2,noPrompts});if(check.given&&!check.matches)return track(client,approval,"mismatch"),refuse(client,approval,{reason:check.reason,message:check.message,exitCode:check.reason===AGENT_REASON.PRICE_CHANGED?1:2,noPrompts,teamMissing:await isTeamMissing(client,approval)});let digest=flags["--effects-digest"];if(approval.digest!==void 0&&digest!==void 0&&digest!==approval.digest)return track(client,approval,"effects_changed"),refuse(client,approval,{reason:AGENT_REASON.EFFECTS_CHANGED,message:`Can't ${approval.action}. What it does changed since it was approved. Nothing was changed.`,exitCode:1,noPrompts,teamMissing:await isTeamMissing(client,approval)});let digestMissing=agent&&approval.digest!==void 0&&digest===void 0;if(check.given&&!digestMissing){if(!approval.teamForApproval||await isTeamExplicit(client))return track(client,approval,"approved"),{approved:!0,warnings:[]};if(!terminal)return refuseMissingTeam(client,approval,noPrompts)}else if(flags["--yes"]&&!agent){if(!legacy?.yesNeedsTeam||await isTeamExplicit(client))return track(client,approval,"yes"),{approved:!0,warnings:[await deprecateYes(client,approval)]};if(!terminal)return refuseMissingTeam(client,approval,noPrompts)}return terminal?promptForApproval(client,approval,legacy):legacy?.pipedAnswer&&!client.nonInteractive&&!client.stdin.isTTY?readPipedAnswer(client,approval):(track(client,approval,agent&&flags["--yes"]?"yes_ignored":"stopped"),refuse(client,approval,{reason:AGENT_REASON.CONFIRMATION_REQUIRED,message:`Can't ${approval.action} without approval.`,exitCode:legacy?.stopExitCode??2,status:legacy?legacy.stopStatus:AGENT_STATUS.ACTION_REQUIRED,noPrompts,teamMissing:await isTeamMissing(client,approval),yesIgnored:agent&&!!flags["--yes"]}))}function effectsDigest(value){return createHash("sha256").update(stableStringify(value)).digest("hex").slice(0,16)}function stableStringify(value){return Array.isArray(value)?`[${value.map(stableStringify).join(",")}]`:value!==null&&typeof value=="object"?`{${Object.entries(value).filter(([,item])=>item!==void 0).sort(([a],[b])=>a<b?-1:a>b?1:0).map(([key,item])=>`${JSON.stringify(key)}:${stableStringify(item)}`).join(",")}}`:JSON.stringify(value)??"null"}function describeApproval(consequence,details){return consequence==="purchase"?describePurchase(details):describeTarget(consequence,details)}function describeTarget(consequence,details){let{noun,target}=details,severe=consequence==="severe",action=details.kind==="delete"?`delete ${noun} ${target}`:`${details.action} for ${noun} ${target}`,effects=severe?[...details.effects,"This cannot be undone."]:details.effects;return{consequence,action,question:`${capitalize(action)}?`,typedName:severe?{prompt:`To confirm, type the ${noun} name "${target}":`,target}:void 0,rows:async agent=>[[capitalize(noun),await withTeam(details.team,target,agent)]],effects,approvalArgs:["--confirm-name",target],scopeHint:"<TEAM>",teamForApproval:severe,digest:details.digest,data:{consequence,kind:details.kind,noun,target,effects,...details.digest!==void 0&&{effectsDigest:details.digest}},check:flags=>checkName(flags,noun,target,action)}}function describePurchase(details){let{item,amountUsd,team,renews}=details,price=formatUsd(amountUsd),charge=`Charges ${price} to ${team} now${renews?`, then renews ${renews}`:", one time"}.`;return{consequence:"purchase",action:`buy ${item}`,question:`Buy ${item} for ${team}?`,rows:async()=>[["Team",team],["Charge",`${price} now`],["Renews",renews??"No, one-time charge"]],effects:[charge],approvalArgs:["--amount",formatAmountArg(amountUsd)],scopeHint:team,teamForApproval:!0,data:{consequence:"purchase",item,team,amount:amountUsd,currency:"USD",renews:renews??null,effects:[charge]},check:flags=>{let raw=flags["--amount"];if(raw===void 0)return{given:!1};let amount=parseAmount(raw);return amount instanceof Error?{given:!0,invalid:amount.message}:amount===void 0||amountMatchesPrice(amount,amountUsd)?{given:!0,matches:!0}:{given:!0,matches:!1,reason:AGENT_REASON.PRICE_CHANGED,message:`Can't buy ${item}. It costs ${price}, not ${formatUsd(amount)}. Nothing was charged.`}}}}function checkName(flags,noun,target,action){let name=flags["--confirm-name"];return name===void 0?{given:!1}:name===target?{given:!0,matches:!0}:{given:!0,matches:!1,reason:AGENT_REASON.INVALID_ARGUMENTS,message:`Can't ${action}. --confirm-name is "${name}", not the ${noun} name "${target}". Nothing was changed.`}}async function promptForApproval(client,approval,legacy){return await printPreview(approval,!1),(approval.typedName?await client.input.text({message:approval.typedName.prompt})===approval.typedName.target:await client.input.confirm(approval.question,!1))?(track(client,approval,"prompt"),{approved:!0,warnings:[]}):(track(client,approval,"declined"),output_manager_default.log("Canceled. Nothing was changed."),{approved:!1,exitCode:legacy?.declineExitCode??130})}async function readPipedAnswer(client,approval){let[option]=approval.approvalArgs;return output_manager_default.warning(`Without a terminal, this will need ${option}${approval.teamForApproval?" and --scope":""} in a future major version.`),await printPreview(approval,!1),await client.input.confirm(approval.question,!1)?(track(client,approval,"piped"),{approved:!0,warnings:[]}):(track(client,approval,"declined"),output_manager_default.log("Canceled. Nothing was changed."),{approved:!1,exitCode:0})}function refuseMissingTeam(client,approval,noPrompts){return track(client,approval,"missing_scope"),refuse(client,approval,{reason:AGENT_REASON.MISSING_SCOPE,message:`Can't ${approval.action} without a team in non-interactive mode.`,exitCode:2,noPrompts,teamMissing:!0})}async function refuse(client,approval,opts){let command=buildApprovalCommand(client.argv,approvalArgsFor(approval),opts.teamMissing?"<TEAM>":void 0),when=`Only after a human approves: ${approval.effects.join(" ")}${opts.teamMissing?" Replace <TEAM> with the team it belongs to.":""}`,status=opts.status??AGENT_STATUS.ACTION_REQUIRED;if(status!==!1&&shouldEmitNonInteractiveCommandError(client)){let document={reason:opts.reason,action:AGENT_ACTION.CONFIRMATION_REQUIRED,message:opts.message,userActionRequired:!0,hint:`Show the user what this does (data.effects) and run next[] only after they approve.${opts.yesIgnored?" --yes doesn't approve this command.":""}`,data:approval.data,next:[{command,when}]};return status===AGENT_STATUS.ACTION_REQUIRED?writeActionRequired(client,{status,...document}):writeAgentError(client,{status,...document}),{approved:!1,exitCode:opts.exitCode}}return output_manager_default.error(opts.message),await printPreview(approval,opts.noPrompts),output_manager_default.print(`
|
|
8
|
+
Once a person approves, run:
|
|
9
|
+
${command}
|
|
10
|
+
`),{approved:!1,exitCode:opts.exitCode}}function approvalArgsFor(approval){return approval.digest===void 0?approval.approvalArgs:[...approval.approvalArgs,"--effects-digest",approval.digest]}async function printPreview(approval,agent){for(let[label,value]of await approval.rows(agent))printAlignedLabel(label,value);output_manager_default.print(`
|
|
11
|
+
${approval.effects.map(line=>` ${line}
|
|
12
|
+
`).join("")}`)}async function deprecateYes(client,approval){let message=`--yes is deprecated for this command. Use ${buildApprovalArgs(approval.approvalArgs,await isTeamMissing(client,approval)?approval.scopeHint:void 0).join(" ")}.`;return wantsMachineReadableOutput(void 0,client.argv)||output_manager_default.warning(message),{reason:AGENT_REASON.DEPRECATED,message}}function buildApprovalCommand(argv,approvalArgs,scope){let args=stripSensitiveAuthArgs(argv.slice(2)),kept=[];for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--"){kept.push(...args.slice(i));break}if(LEGACY_CONSENT_FLAGS.has(arg))continue;let name=arg.split("=")[0];if(APPROVAL_OPTIONS.has(name)){arg.includes("=")||i++;continue}kept.push(arg)}let delimiter=kept.indexOf("--"),before=delimiter===-1?kept:kept.slice(0,delimiter),after=delimiter===-1?[]:kept.slice(delimiter);return[packageName,...before.map(quoteShellArg),...buildApprovalArgs(approvalArgs,scope),...after.map(quoteShellArg)].join(" ")}function buildApprovalArgs(approvalArgs,scope){let quoted=approvalArgs.map(quoteShellArg);return scope===void 0?quoted:[...quoted,"--scope",scope==="<TEAM>"?scope:quoteShellArg(scope)]}async function isTeamMissing(client,approval){return approval.teamForApproval&&!await isTeamExplicit(client)}async function isTeamExplicit(client){let{flags}=parseArguments(client.argv.slice(2),{},{permissive:!0});if(flags["--scope"]||flags["--team"])return!0;let team=await client.resolveCurrentTeam({ask:!1});if(!team)return!1;let orgId=(0,import_build_utils.getPlatformEnv)("ORG_ID");if(orgId)return orgId===team;try{let teams=await getTeams(client);return teams.length===1&&teams[0].id===team}catch(err){return output_manager_default.debug(`Couldn't list teams: ${err}`),!1}}function isAgentRun(client){if(!client.isAgent)return!1;let{argv}=client,index=argv.indexOf("--non-interactive");return!((argv.includes("--non-interactive=false")||argv.includes("--no-non-interactive")||index!==-1&&argv[index+1]==="false")&&client.stdin.isTTY)}async function withTeam(team,target,agent){return team===void 0||agent&&typeof team=="function"?target:`${typeof team=="function"?await team():team}/${target}`}function track(client,approval,outcome){client.telemetryEventStore?.add({id:randomUUID(),eventTime:Date.now(),key:"approval",value:`${approval.consequence}:${outcome}`})}function capitalize(text){return text.charAt(0).toUpperCase()+text.slice(1)}export{requireApproval,effectsDigest};
|
|
@@ -4,4 +4,4 @@ import { dirname as __dirname_ } from 'node:path';
|
|
|
4
4
|
const require = __createRequire(import.meta.url);
|
|
5
5
|
const __filename = __fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = __dirname_(__filename);
|
|
7
|
-
import{require_json_parse_better_errors}from"./chunk-25565AGS.js";import{require_lib}from"./chunk-
|
|
7
|
+
import{require_json_parse_better_errors}from"./chunk-25565AGS.js";import{require_lib}from"./chunk-2J35YKA2.js";import{CantParseJSONFile}from"./chunk-4DMKP6AO.js";import{require_dist}from"./chunk-RM3ZDRYE.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_fs_extra=__toESM(require_lib(),1);var import_json_parse_better_errors=__toESM(require_json_parse_better_errors(),1),import_error_utils=__toESM(require_dist(),1);async function readJSONFile(file){let content=await readFileSafe(file);if(content===null)return content;try{return(0,import_json_parse_better_errors.default)(content)}catch(error){return new CantParseJSONFile(file,(0,import_error_utils.errorToString)(error))}}async function readFileSafe(file){try{return await import_fs_extra.default.readFile(file,"utf8")}catch{return null}}export{readJSONFile};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __dirname_ } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = __dirname_(__filename);
|
|
7
|
+
import{collectContactInformation,getDomainPrice,getDomainStatus,purchaseDomain}from"./chunk-FHMCTV5E.js";import{stamp_default}from"./chunk-A2RZZQEP.js";import{param}from"./chunk-3G3FQYMW.js";import{buildCommandWithGlobalFlags}from"./chunk-5X635INY.js";import{require_pluralize}from"./chunk-4HR3I3ML.js";import{DomainNotAvailable,DomainNotFound,DomainOrderPending,UnsupportedTLD,UserAborted}from"./chunk-4DMKP6AO.js";import{eraseLines,output_manager_default}from"./chunk-GZLYNPNU.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1),import_pluralize=__toESM(require_pluralize(),1);var isTTY=process.stdout.isTTY;async function purchaseDomainIfAvailable(client,domain,contextName){output_manager_default.spinner(`Checking status of ${import_chalk.default.bold(domain)}`);let buyDomainStamp=stamp_default(),{available}=await getDomainStatus(client,domain);if(available){if(!isTTY)return new DomainNotFound(domain);output_manager_default.debug(`Domain ${domain} is available to be purchased`);let domainPrice=await getDomainPrice(client,domain).finally(()=>{output_manager_default.stopSpinner()});if(domainPrice instanceof UnsupportedTLD)return domainPrice;if(domainPrice instanceof Error)throw domainPrice;let{purchasePrice,years}=domainPrice;if(purchasePrice===null)return output_manager_default.error(`The domain ${param(domain)} is ${import_chalk.default.underline("unavailable")}! ${buyDomainStamp()}`),new DomainNotAvailable(domain);if(output_manager_default.log(`Domain not found, but you can buy it under ${import_chalk.default.bold(contextName)}! ${buyDomainStamp()}`),!await client.input.confirm(`Buy ${import_chalk.default.underline(domain)} for ${import_chalk.default.bold(`$${purchasePrice}`)} (${(0,import_pluralize.default)("yr",years,!0)})?`,!1))return output_manager_default.print(eraseLines(1)),new UserAborted;output_manager_default.print(eraseLines(1));let contactInformation=await collectContactInformation(client);output_manager_default.spinner("Purchasing");let result=await purchaseDomain(client,domain,purchasePrice,years,!0,contactInformation,{onOrderAccepted:orderId=>{output_manager_default.stopSpinner(),output_manager_default.log(`Order ${orderId} accepted.`),output_manager_default.spinner(`Waiting on the registrar to register ${domain}`)}}).finally(()=>output_manager_default.stopSpinner());return result instanceof Error?result:result.status==="pending"?new DomainOrderPending(domain,result.orderId,buildCommandWithGlobalFlags(client.argv,`api /v1/registrar/orders/${result.orderId}`)):result.status==="already_owned"?result:!0}return output_manager_default.debug(`Domain ${domain} is not available to be purchased`),!1}export{purchaseDomainIfAvailable};
|
|
@@ -4,4 +4,4 @@ import { dirname as __dirname_ } from 'node:path';
|
|
|
4
4
|
const require = __createRequire(import.meta.url);
|
|
5
5
|
const __filename = __fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = __dirname_(__filename);
|
|
7
|
-
import{outputError}from"./chunk-
|
|
7
|
+
import{outputError}from"./chunk-42FOKWGX.js";import{getScope}from"./chunk-NSPW47RU.js";import{buildCommandWithGlobalFlags,outputAgentError}from"./chunk-5X635INY.js";import{getLinkedProject,getProjectByNameOrId}from"./chunk-2J35YKA2.js";import{ProjectNotFound,isAPIError}from"./chunk-4DMKP6AO.js";import{AGENT_REASON}from"./chunk-Q2QVK3TH.js";function emitAlertsScopeError(client,jsonOutput,code,message,agent){return outputAgentError(client,{status:"error",reason:agent.reason,message,hint:agent.hint,next:agent.next},1),outputError(client,jsonOutput,code,message)}async function resolveAlertsScope(client,opts){let command=opts.command??"alerts",projectCommand=`${command} --project <name_or_id>`,allCommand=`${command} --all`;if(opts.all||opts.project){let{team}=await getScope(client);if(!team){let msg="No team context found. Run `vercel switch` to select a team, or use `vercel link` in a project directory.";return emitAlertsScopeError(client,opts.jsonOutput,"NO_TEAM",msg,{reason:AGENT_REASON.MISSING_SCOPE,hint:"Select a team scope before using --project or --all with alerts.",next:[{command:buildCommandWithGlobalFlags(client.argv,"whoami"),when:"See current user and team"},{command:buildCommandWithGlobalFlags(client.argv,"teams switch"),when:"Switch to a team that owns the project"}]})}if(opts.all)return{teamId:team.id};let projectResult;try{projectResult=await getProjectByNameOrId(client,opts.project,team.id)}catch(err){if(isAPIError(err)){let msg=err.serverMessage||(err.status===403?`You do not have permission to access project "${opts.project}" in team "${team.slug}".`:`API error (${err.status}).`),reason=err.status===401?"not_authorized":err.status===403?"forbidden":AGENT_REASON.API_ERROR;return emitAlertsScopeError(client,opts.jsonOutput,err.code||"API_ERROR",msg,{reason,next:[{command:buildCommandWithGlobalFlags(client.argv,projectCommand),when:"Retry with a project you can access (replace <name_or_id>)"}]})}throw err}if(projectResult instanceof ProjectNotFound){let msg=`Project "${opts.project}" was not found in team "${team.slug}".`;return emitAlertsScopeError(client,opts.jsonOutput,"PROJECT_NOT_FOUND",msg,{reason:AGENT_REASON.NOT_FOUND,next:[{command:buildCommandWithGlobalFlags(client.argv,projectCommand),when:"Retry with a valid project (replace <name_or_id>)"}]})}return{teamId:team.id,projectId:projectResult.id,projectName:projectResult.name}}let linkedProject=await getLinkedProject(client);if(linkedProject.status==="error")return linkedProject.exitCode;if(linkedProject.status==="not_linked"){let msg="No linked project found. Run `vercel link` to link a project, or use --project <name> or --all.";return emitAlertsScopeError(client,opts.jsonOutput,"NOT_LINKED",msg,{reason:AGENT_REASON.NOT_LINKED,hint:"Agents should pass --project or --all when no .vercel link exists in --cwd.",next:[{command:buildCommandWithGlobalFlags(client.argv,"link"),when:"Link this directory to a Vercel project"},{command:buildCommandWithGlobalFlags(client.argv,projectCommand),when:"Retry with an explicit project (replace <name_or_id>)"},{command:buildCommandWithGlobalFlags(client.argv,allCommand),when:"Use team-wide scope without a linked project"}]})}return scopeFromLinkedProject(linkedProject)}function scopeFromLinkedProject(linkedProject){return{teamId:linkedProject.org.id,projectId:linkedProject.project.id,projectName:linkedProject.project.name}}export{emitAlertsScopeError,resolveAlertsScope,scopeFromLinkedProject};
|
|
@@ -4,5 +4,5 @@ import { dirname as __dirname_ } from 'node:path';
|
|
|
4
4
|
const require = __createRequire(import.meta.url);
|
|
5
5
|
const __filename = __fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = __dirname_(__filename);
|
|
7
|
-
import{LoginTelemetryClient,login}from"./chunk-
|
|
7
|
+
import{LoginTelemetryClient,login}from"./chunk-4T57TXQ3.js";import{loginCommand}from"./chunk-5DXC4TE2.js";import{printError}from"./chunk-NDMQVBTV.js";import{help}from"./chunk-HZEKH3RO.js";import{parseArguments}from"./chunk-AYZ52QDF.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{getFlagsSpecification}from"./chunk-AMPJ6RWT.js";import{require_source}from"./chunk-NB2WLB3J.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1);async function login2(client,options){let parsedArgs=null,flagsSpecification=getFlagsSpecification(loginCommand.options),telemetry=new LoginTelemetryClient({opts:{store:client.telemetryEventStore}});try{options.shouldParseArgs&&(parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification))}catch(error){return printError(error),2}if(parsedArgs?.flags["--help"])return telemetry.trackCliFlagHelp("login"),output_manager_default.print(help(loginCommand,{stream:client.stderr,columns:client.stderr.columns})),0;if(parsedArgs?.flags["--token"])return output_manager_default.error('`--token` may not be used with the "login" command'),2;if(options.shouldParseArgs&&parsedArgs){let obsoleteFlags=Object.keys(parsedArgs.flags).filter(flag=>{let flagKey=flag.replace("--",""),option=loginCommand.options.find(o=>o.name===flagKey);if(!(!option||typeof option=="number"))return"deprecated"in option&&option.deprecated});if(obsoleteFlags.length){let flags=obsoleteFlags.map(f=>import_chalk.default.bold(f)).join(", ");output_manager_default.warn(`The following options are deprecated: ${flags}`)}let obsoleteArguments=parsedArgs.args.slice(1);if(obsoleteArguments.length){let args=obsoleteArguments.map(a=>import_chalk.default.bold(a)).join(", ");output_manager_default.warn(`The following arguments are deprecated: ${args}`)}(obsoleteArguments.length||obsoleteFlags.length)&&output_manager_default.print(`Read more in our ${output_manager_default.link("changelog","https://vercel.com/changelog/new-vercel-cli-login-flow")}.
|
|
8
8
|
`)}telemetry.trackState("started");let scope=parsedArgs?.flags["--scope"]||parsedArgs?.flags["--team"];return await login(client,telemetry,options.shouldParseArgs,scope)}export{login2 as login};
|
|
@@ -4,5 +4,5 @@ import { dirname as __dirname_ } from 'node:path';
|
|
|
4
4
|
const require = __createRequire(import.meta.url);
|
|
5
5
|
const __filename = __fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = __dirname_(__filename);
|
|
7
|
-
import{writeJsonError}from"./chunk-
|
|
7
|
+
import{writeJsonError}from"./chunk-UFXIPUNI.js";import{printError}from"./chunk-NDMQVBTV.js";import{packageName}from"./chunk-VRH7LWOC.js";import{output_manager_default}from"./chunk-GZLYNPNU.js";import{require_dist}from"./chunk-RM3ZDRYE.js";import{getGlobalFlagsFromArgs,quoteArg}from"./chunk-AMPJ6RWT.js";import{AGENT_REASON,AGENT_STATUS,getExitCodeForReason}from"./chunk-Q2QVK3TH.js";import{__toESM}from"./chunk-BZENIQ7N.js";var import_error_utils=__toESM(require_dist(),1);function startJsonOutput(client){client.nonInteractive=!0,client.jsonMode={errorWritten:!1},output_manager_default.initialize({quiet:!0})}function writeJsonResult(client,document){output_manager_default.stopSpinner();let indent=client.stdout.isTTY?2:void 0;return client.stdout.write(`${JSON.stringify(document,null,indent)}
|
|
8
8
|
`),0}function writeJsonFailure(client,payload,exitCode=getExitCodeForReason(payload.reason)){return client.jsonMode&&(client.jsonMode.errorWritten=!0),writeJsonError(client,payload,exitCode)}function writeJsonUsageError(client,err){return startJsonOutput(client),writeJsonFailure(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message:(0,import_error_utils.errorToString)(err)},2)}function jsonNextStep(client,args,when){let argv=[packageName,...args,...getGlobalFlagsFromArgs(client.argv.slice(2))];return{command:argv.map(quoteArg).join(" "),argv,...when?{when}:{}}}async function runWithJsonOutput(client,run){startJsonOutput(client);let exitCode;try{exitCode=await run()}catch(err){if(client.jsonMode?.errorWritten)throw err;if(printError(err,client),client.jsonMode?.errorWritten)return 1;let code=(0,import_error_utils.isErrnoException)(err)&&typeof err.code=="string"?err.code:"";return writeJsonFailure(client,{status:AGENT_STATUS.ERROR,reason:code?code.toLowerCase().replace(/^err_/,""):AGENT_REASON.INTERNAL_ERROR,message:(0,import_error_utils.errorToString)(err)},1)}return exitCode!==0&&!client.jsonMode?.errorWritten&&writeJsonFailure(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.COMMAND_FAILED,message:output_manager_default.quietError??"The command failed."},exitCode),exitCode}export{writeJsonResult,writeJsonFailure,writeJsonUsageError,jsonNextStep,runWithJsonOutput};
|