UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 2.98 kB
import{headlessSetupContinuation,serializeHeadlessSetupEvent}from"./setup-headless.js";import{applyPnpmBuildPolicy,inspectPnpmBuildPolicy}from"./registry-pnpm-build-policy.js";import{createPrompter}from"#setup/prompter.js";import{detectPackageManager}from"#setup/package-manager.js";import{WizardCancelledError}from"#setup/step.js";const PNPM_BUILD_POLICY_ANSWER_KEY=`install.pnpm.buildScripts`;function pnpmBuildPolicyChoice(e){return e===`ignore-optional`||e===`allow-builds`||e===`abort`?e:void 0}async function prepareDeclaredPnpmBuildPolicy(e,t={}){if(e.policies===void 0||e.policies.length===0)return!0;let n={detectPackageManager:t.detectPackageManager??detectPackageManager,inspectPnpmBuildPolicy:t.inspectPnpmBuildPolicy??inspectPnpmBuildPolicy,applyPnpmBuildPolicy:t.applyPnpmBuildPolicy??applyPnpmBuildPolicy,createPrompter:t.createPrompter??createPrompter};if((await n.detectPackageManager(e.appRoot)).kind!==`pnpm`)return!0;for(let t of e.policies){let r=await n.inspectPnpmBuildPolicy(e.appRoot,t.packages);if(r.satisfied)continue;let i=e.options.answers?.[PNPM_BUILD_POLICY_ANSWER_KEY],a=pnpmBuildPolicyChoice(i);if(i!==void 0&&a===void 0)throw Error(`${PNPM_BUILD_POLICY_ANSWER_KEY} must be "ignore-optional", "allow-builds", or "abort".`);if(e.options.nonInteractive&&a===void 0&&e.options.yes!==!0){let n={key:PNPM_BUILD_POLICY_ANSWER_KEY,kind:`select`,message:`How should pnpm handle these optional packages?`,required:!0,recommended:t.recommendedAction,options:[{id:`ignore-optional`,label:`Ignore optional packages`},{id:`allow-builds`,label:`Allow build scripts`},{id:`abort`,label:`Abort add`}]};return e.logger.error(serializeHeadlessSetupEvent({version:1,type:`blocked`,item:e.item,installed:!1,completedItems:[],status:`input_required`,question:n,next:headlessSetupContinuation({item:e.item,installed:!1,question:n})})),process.exitCode=2,!1}if(a===void 0&&e.options.yes===!0&&(a=t.recommendedAction),a===void 0){let i=e.options.prompter??n.createPrompter();try{a=await i.select({message:`How should pnpm handle these optional packages?`,description:t.reason,metadata:[{label:`Packages`,value:t.packages.join(`, `)},{label:`Policy file`,value:r.filePath}],hintLayout:`inline`,initialValue:t.recommendedAction,options:[{value:`ignore-optional`,label:`Ignore optional packages (recommended)`,hint:`Add the item without installing these packages or running their build scripts.`},{value:`allow-builds`,label:`Allow build scripts`,hint:`Install these packages and allow their third-party build scripts to run.`},{value:`abort`,label:`Abort add`,hint:`Do not add this registry item.`}]})}catch(e){if(!(e instanceof WizardCancelledError))throw e;return!1}}if(a===`abort`)return e.options.nonInteractive&&e.logger.log(serializeHeadlessSetupEvent({version:1,type:`cancelled`,item:e.item,completedItems:[]})),!1;if(a===void 0)throw Error(`pnpm build policy selection is required.`);await n.applyPnpmBuildPolicy(r,a)}return!0}export{prepareDeclaredPnpmBuildPolicy};