eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.16 kB
JavaScript
import{withSpinner}from"../with-spinner.js";import{resultSucceeded,runVercel,spawnPackageManager}from"#setup/primitives/index.js";import{detectPackageManager}from"#setup/package-manager.js";import{getVercelAuthStatus}from"#setup/vercel-project.js";import{createPromptCommandOutput}from"#setup/cli/index.js";const defaultDeps={getVercelAuthStatus,detectPackageManager,runVercel,spawnPackageManager};function globalInstallArguments(e){switch(e){case`npm`:return[`install`,`-g`,`vercel@latest`];case`yarn`:return[`global`,`add`,`vercel@latest`];case`pnpm`:case`bun`:return[`add`,`-g`,`vercel@latest`]}}function summarizeUpgradeFailure(e){let t=e.map(e=>e.trim().replace(/\s+/gu,` `)).filter(e=>e!==``&&e!==`}`&&!e.startsWith(`at `)&&!/^vercel upgrade exited with code \d+\.$/u.test(e)),n=t.find(e=>/^(?:error\b|err_|.*\b(?:cannot|failed|could not)\b)/iu.test(e))??t.at(-1);if(n!==void 0)return n.length<=240?n:`${n.slice(0,239)}…`}async function runInstallVercelCliFlow(e){let{appRoot:t,prompter:n,signal:r}=e,i={...defaultDeps,...e.deps},a=createPromptCommandOutput(n.log),probe=async()=>await i.getVercelAuthStatus(t,{signal:r})!==`cli-missing`;if(!e.upgrade&&await withSpinner(n,`Checking for the Vercel CLI…`,probe))return r?.throwIfAborted(),{kind:`already`};r?.throwIfAborted();let o,s;if(e.upgrade){let e=[];o=await withSpinner(n,`Upgrading the Vercel CLI…`,async()=>{let n=await i.runVercel([`upgrade`],{cwd:t,onOutput:t=>{a(t),t.stream===`stderr`&&e.push(t.text)},signal:r,nonInteractive:!0});return n||(s=summarizeUpgradeFailure(e)),n})}else{let e=await i.detectPackageManager(t);o=await withSpinner(n,`Installing the Vercel CLI with ${e.kind}…`,async()=>resultSucceeded(await i.spawnPackageManager(e.kind,t,globalInstallArguments(e.kind),{onOutput:a,signal:r,nonInteractive:!0})))}if(r?.aborted===!0)return{kind:`cancelled`};if(!o)return s===void 0?{kind:`failed`}:{kind:`failed`,reason:s};let c=await withSpinner(n,`Verifying the Vercel CLI…`,probe);return r?.throwIfAborted(),c?{kind:`installed`}:e.upgrade?{kind:`failed`,reason:`The Vercel CLI could not be found after the upgrade completed.`}:{kind:`failed`}}export{runInstallVercelCliFlow};