anl
Version:
FE command line tool
2 lines (1 loc) • 4.65 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("node:readline"),r=require("../../../../run-async/index.js"),t=require("mute-stream"),s=require("ansi-escapes"),o=require("../../../../rxjs/dist/esm5/internal/observable/empty.js"),n=require("../../../../rxjs/dist/esm5/internal/observable/from.js"),i=require("../../../../rxjs/dist/esm5/internal/util/isObservable.js"),a=require("../../../../rxjs/dist/esm5/internal/operators/concatMap.js"),l=require("../../../../rxjs/dist/esm5/internal/lastValueFrom.js"),u=require("../../../../rxjs/dist/esm5/internal/operators/reduce.js"),c=require("../../../../@inquirer/core/dist/esm/lib/errors.mjs.js"),p=require("../../../../rxjs/dist/esm5/internal/observable/of.js"),f=require("../../../../rxjs/dist/esm5/internal/operators/filter.js"),h=require("../../../../rxjs/dist/esm5/internal/observable/defer.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=m(e),b=m(t),y=m(s);const w={set:(e,r="",t)=>{let s=e;r.split(".").forEach((e,r,o)=>{"__proto__"!==e&&"constructor"!==e&&(r===o.length-1?s[e]=t:e in s&&"object"==typeof s[e]||(s[e]={}),s=s[e])})},get:(e,r="",t)=>{const s=t=>String.prototype.split.call(r,t).filter(Boolean).reduce((e,r)=>null!=e?e[r]:e,e),o=s(/[,[\]]+?/)||s(/[,.[\]]+?/);return void 0===o||o===e?t:o}};async function j(e,t,s){const o=e[t];return"function"==typeof o?r.default(o)(s):o}class v extends Error{name="TTYError";isTtyError=!0}exports._=w,exports.default=class{prompts;answers={};process=o.EMPTY;abortController=new AbortController;opt;rl;constructor(e,r={}){this.opt=r,this.prompts=e}async run(e,r){let t;return this.abortController=new AbortController,this.answers="object"==typeof r?{...r}:{},t=function(e){return Array.isArray(e)}(e)?n.from(e):i.isObservable(e)?e:function(e){return Object.values(e).every(e=>"object"==typeof e&&!Array.isArray(e)&&null!=e)}(e)?n.from(Object.entries(e).map(([e,r])=>Object.assign({},r,{name:e}))):n.from([e]),this.process=t.pipe(a.concatMap(e=>p.of(e).pipe(a.concatMap(e=>n.from(this.shouldRun(e).then(r=>{if(r)return e})).pipe(f.filter(e=>null!=e))),a.concatMap(e=>h.defer(()=>n.from(this.fetchAnswer(e))))))),l.lastValueFrom(this.process.pipe(u.reduce((e,r)=>(w.set(e,r.name,r.answer),e),this.answers))).then(()=>this.answers).finally(()=>this.close())}prepareQuestion=async e=>{const[r,t,s]=await Promise.all([j(e,"message",this.answers),j(e,"default",this.answers),j(e,"choices",this.answers)]);let o;return Array.isArray(s)&&(o=s.map(e=>"string"==typeof e||"number"==typeof e?{name:e,value:e}:"object"==typeof e&&null!=e&&!("value"in e)&&"name"in e?{...e,value:e.name}:e)),Object.assign({},e,{message:r,default:t,choices:o,type:e.type in this.prompts?e.type:"input"})};fetchAnswer=async e=>{const r=await this.prepareQuestion(e),t=this.prompts[r.type];if(null==t)throw new Error(`Prompt for type ${r.type} not found`);let s;const o=function(e){return Boolean(e.prototype&&"run"in e.prototype&&"function"==typeof e.prototype.run)}(t)?(e,{signal:r}={})=>new Promise((o,n)=>{const i=d.default.createInterface(function(e){e.skipTTYChecks=void 0===e.skipTTYChecks||e.skipTTYChecks;const r=e.input||process.stdin;if(!e.skipTTYChecks&&!r.isTTY)throw new v("Prompts can not be meaningfully rendered in non-TTY environments");const t=new b.default;t.pipe(e.output||process.stdout);const s=t;return{terminal:!0,...e,input:r,output:s}}(this.opt));i.resume();const a=()=>{process.removeListener("exit",this.onForceClose),i.removeListener("SIGINT",this.onForceClose),i.setPrompt(""),i.output.unmute(),i.output.write(y.default.cursorShow),i.output.end(),i.close()};this.rl=i,process.on("exit",this.onForceClose),i.on("SIGINT",this.onForceClose);const l=new t(e,i,this.answers),u=()=>{a(),this.rl=void 0,s?.()};if(r){const e=()=>{n(new c.AbortPromptError({cause:r.reason})),u()};if(r.aborted)return void e();r.addEventListener("abort",e),s=()=>{r.removeEventListener("abort",e),s=void 0}}l.run().then(o,n).finally(u)}):t,{signal:n}=this.opt;if(n?.aborted)this.abortController.abort(n.reason);else if(n){const e=e=>this.abortController?.abort(e);n.addEventListener("abort",e),s=()=>{n.removeEventListener("abort",e)}}const{filter:i=e=>e}=r,{signal:a}=this.abortController;return o(r,{...this.opt,signal:a}).then(e=>({name:r.name,answer:i(e,this.answers)})).finally(()=>{s?.()})};onForceClose=()=>{this.close(),process.kill(process.pid,"SIGINT"),console.log("")};close=()=>{this.abortController?.abort()};shouldRun=async e=>{if(!0!==e.askAnswered&&void 0!==w.get(this.answers,e.name))return!1;const{when:t}=e;if("function"==typeof t){return!1!==await r.default(t)(this.answers)}return!1!==t}};