UNPKG

eve

Version:

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

1 lines 2.98 kB
import{WizardCancelledError}from"#setup/step.js";import{createSelectOptionCodec}from"#setup/cli/select-option-codec.js";function setupSelectRequest(e,t,n){let r={message:e.message,options:t},withNotices=t=>(e.notices!==void 0&&(t.notices=e.notices),t);if(e.multiple===!0){if(e.hintLayout!==void 0)throw Error(`Multi-select setup questions do not support a hint layout.`);let t;return e.search===!0?(t={...r,kind:`searchable-multi`,required:e.required??!1},e.placeholder!==void 0&&(t.placeholder=e.placeholder)):t={...r,kind:`multi`,required:e.required??!1},e.initialValues!==void 0&&(t.initialValues=e.initialValues.map(n)),withNotices(t)}if(e.search===!0&&e.hintLayout!==void 0)throw Error(`Searchable setup questions do not support a hint layout.`);let i;if(e.search===!0)i={...r,kind:`search`},e.placeholder!==void 0&&(i.placeholder=e.placeholder);else{let t=e.hintLayout===`inline`?`task-list`:e.hintLayout??`single`;i={...r,kind:t}}return e.initialValue!==void 0&&(i.initialValue=n(e.initialValue)),withNotices(i)}function createTuiPrompter(n){function guardCancel(t){if(t===void 0)throw new WizardCancelledError;return t}async function select(e){let r=createSelectOptionCodec(e.options),i=setupSelectRequest(e,r.options,r.encode),a=guardCancel(await n.readSelect(i)).map(e=>r.decode(e));if(e.multiple===!0)return a;let o=a[0];if(o===void 0)throw Error(`Single-select returned no option.`);return o}function line(e){return t=>n.renderLine(t,e)}return{async text(e){let t={message:e.message};return e.placeholder!==void 0&&(t.placeholder=e.placeholder),e.defaultValue!==void 0&&(t.defaultValue=e.defaultValue),e.validate!==void 0&&(t.validate=e.validate),e.notices!==void 0&&(t.notices=e.notices),guardCancel(await n.readText(t))},async password(e){let t={message:e.message,mask:!0};return e.validate!==void 0&&(t.validate=e.validate),guardCancel(await n.readText(t))},select,async selectEditable(e){let r=createSelectOptionCodec(e.options),i={value:r.encode(e.editable.value),defaultValue:e.editable.defaultValue,formatHint:e.editable.formatHint};e.editable.validate!==void 0&&(i.validate=e.editable.validate);let a={message:e.message,options:r.options,editable:i};e.initialValue!==void 0&&(a.initialValue=r.encode(e.initialValue));let o=guardCancel(await n.readEditableSelect(a)),s=r.decode(o.value);return o.kind===`edited`?{kind:`edited`,value:s,text:o.text}:{kind:`selected`,value:s}},async acknowledge(e){await n.readAcknowledge({message:e.message,lines:e.lines??[]})},awaitChoice(e){return n.readChoice(e)},note(e,t,r){let i=r?.tone===`success`?`success`:`warning`;t&&n.renderLine(t,i),n.renderLine(e,i)},intro(){},outro(){},log:{message:line(`info`),info:line(`info`),success:line(`success`),warning:line(`warning`),error:line(`error`),commandOutput:e=>n.renderOutput(e),section(e,t){n.renderLine(e,`info`);for(let e of t)n.renderLine(` ${e}`,`info`)},spinner(e){n.setStatus(e);let t=!1;return{stop(){t||(t=!0,n.setStatus(void 0))}}}}}}export{createTuiPrompter};