eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.85 kB
JavaScript
import{hasInteractiveTerminal}from"./preconditions.js";import{headlessSetupContinuation,serializeHeadlessSetupEvent}from"./setup-headless.js";import{prepareDeclaredPnpmBuildPolicy}from"./registry-pnpm-build-policy-flow.js";import{z}from"#compiled/zod/index.js";import{createPrompter}from"#setup/prompter.js";import{headlessAsker,interactiveAsker,withAnswers,withPolicy}from"#setup/ask.js";import{mergeRegistrySetupCompletions}from"#setup/registry-setup-completion.js";import{addRegistryItems,getRegistryItems}from"#compiled/shadcn-registry/index.js";const RegistryPackageComponentSchema=z.object({item:z.string().min(1),label:z.string().min(1),description:z.string().optional(),default:z.boolean().default(!1)});async function selectComponents(e,t,n,r,i,a){if(r.prompter===void 0&&!r.nonInteractive&&(r.yes===!0||!i))return n.filter(e=>e.default);let o={key:`components`,message:`Add ${t}`,required:!0,recommended:n.filter(e=>e.default),options:n.map(e=>({id:e.item,value:e,label:e.label,hint:e.description}))},s=r.nonInteractive?withAnswers(r.answers??{})(r.yes?withPolicy(`assume`)(headlessAsker()):headlessAsker()):interactiveAsker(a());try{return await s.askMany(o)}catch(n){if(!r.nonInteractive||!(n instanceof Error)||n.name!==`InteractionRequired`)throw n;let i=n.question,{setupQuestionToWire:a}=await import(`#setup/setup-question-wire.js`),o=a(i);e.error(serializeHeadlessSetupEvent({version:1,type:`blocked`,status:`input_required`,item:t,installed:!1,completedItems:[],question:o,next:headlessSetupContinuation({item:t,installed:!1,answers:r.answers,question:o})})),process.exitCode=2;return}}async function runRegistryPackage(e){let{logger:t,appRoot:n,item:r,components:i,config:a,options:o,dependencies:s,operations:c}=e,l=s.hasInteractiveTerminal?.()??hasInteractiveTerminal(),u=o.prompter,getPrompter=()=>u??=s.createPrompter?.()??createPrompter(),d=await selectComponents(t,r,i,o,l,getPrompter);if(d===void 0)return!1;let f=d.map(e=>c.itemAddress(e.item)),p=await getRegistryItems(f,{config:a});if(p.length!==d.length)throw Error(`Registry package "${r}" could not resolve all selected components.`);let m=p.map(e=>{let t=c.metadata(e);return c.assertCompatibleVersion(t?.requires),t});if(o.skipInstall!==!0&&!await prepareDeclaredPnpmBuildPolicy({logger:t,appRoot:n,item:r,policies:m.flatMap(e=>e?.install?.pnpm?.buildScripts??[]),options:o}))return!1;o.skipInstall!==!0&&await addRegistryItems(f,{config:a,cwd:n,overwrite:o.overwrite,silent:o.silent});let h={facts:[]};if(o.skipSetup===!0)return h;if(!o.nonInteractive&&o.yes!==!0&&o.prompter===void 0&&!l)return t.log(c.setupReminder(r)),h;for(let e of m){if(e?.setup===void 0)continue;let t=await c.runSetups({item:r,setups:e.setup,prompter:getPrompter()});if(t===!1)return!1;h=mergeRegistrySetupCompletions(h,t)}return h}export{RegistryPackageComponentSchema,runRegistryPackage};