@arkenv/cli 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +173 -116
- package/dist/injection-IfQN68XB.cjs +21 -0
- package/package.json +4 -2
package/dist/index.cjs
CHANGED
|
@@ -1,87 +1,118 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require(`node:
|
|
3
|
-
`),u=!1;for(let e=0;e<l.length;e++){let t=l[e];if(r+=t,u)u=!1;else if(u=t>=`\ud800`&&t<=`\udbff`,u)continue;if(t===`\x1B`||t===``){
|
|
4
|
-
`){a&&(r+=
|
|
5
|
-
`&&(i&&
|
|
6
|
-
`)}var
|
|
2
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require(`node:util`),u=require(`node:process`);u=c(u,1);let d=require(`node:readline`);d=c(d,1);let f=require(`node:tty`),p=require(`node:fs`);p=c(p,1);let m=require(`node:path`);m=c(m,1);let h=require(`node:child_process`),g=require(`dedent`);g=c(g,1);let _=require(`node:fs/promises`);_=c(_,1);let v=require(`magicast`),y=require(`jsonc-parser`);const b=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let n=0;for(e.lastIndex=0;e.test(t);)n+=1;return t.length-n}})(),x=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,S=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141,ee=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,te=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,C=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy,ne=/\t{1,1000}/y,w=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/uy,re=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,ie=/\p{M}+/gu,T={limit:1/0,ellipsis:``},ae=(e,t={},n={})=>{let r=t.limit??1/0,i=t.ellipsis??``,a=t?.ellipsisWidth??(i?ae(i,T,n).width:0),o=n.controlWidth??0,s=n.tabWidth??8,c=n.emojiWidth??2,l=n.regularWidth??1,u=n.wideWidth??2,d=[[re,l],[ee,0],[te,o],[ne,s],[w,c],[C,u]],f=0,p=0,m=e.length,h=0,g=!1,_=m,v=Math.max(0,r-a),y=0,E=0,D=0,O=0;outer:for(;;){if(E>y||p>=m&&p>f){let t=e.slice(y,E)||e.slice(f,p);h=0;for(let e of t.replaceAll(ie,``)){let t=e.codePointAt(0)||0;if(O=x(t)?2:S(t)?u:l,D+O>v&&(_=Math.min(_,Math.max(y,f)+h)),D+O>r){g=!0;break outer}h+=e.length,D+=O}y=E=0}if(p>=m)break outer;for(let t=0,n=d.length;t<n;t++){let[n,i]=d[t];if(n.lastIndex=p,n.test(e)){if(h=n===C?b(e.slice(p,n.lastIndex)):n===w?1:n.lastIndex-p,O=h*i,D+O>v&&(_=Math.min(_,p+Math.floor((v-D)/i))),D+O>r){g=!0;break outer}D+=O,y=f,E=p,p=f=n.lastIndex;continue outer}}p+=1}return{width:g?v:D,index:g?_:m,truncated:g,ellipsed:g&&r>=a}},E={limit:1/0,ellipsis:``,ellipsisWidth:0},D=(e,t={})=>ae(e,E,t).width,O=`]8;;`,oe=RegExp(`(?:\\[(?<code>\\d+)m|\\${O}(?<uri>.*))`,`y`),se=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},ce=e=>`[${e}m`,le=e=>`${O}${e}`,k=(e,t,n)=>{let r=t[Symbol.iterator](),i=!1,a=!1,o=e.at(-1),s=o===void 0?0:D(o),c=r.next(),l=r.next(),u=0;for(;!c.done;){let o=c.value,d=D(o);s+d<=n?e[e.length-1]+=o:(e.push(o),s=0),(o===`\x1B`||o===``)&&(i=!0,a=t.startsWith(O,u+1)),i?a?o===`\x07`&&(i=!1,a=!1):o===`m`&&(i=!1):(s+=d,s===n&&!l.done&&(e.push(``),s=0)),c=l,l=r.next(),u+=o.length}o=e.at(-1),!s&&o!==void 0&&o.length&&e.length>1&&(e[e.length-2]+=e.pop())},ue=e=>{let t=e.split(` `),n=t.length;for(;n&&!D(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(` `)+t.slice(n).join(``)},de=(e,t,n={})=>{if(n.trim!==!1&&e.trim()===``)return``;let r=``,i,a,o=e.split(` `),s=[``],c=0;for(let e=0;e<o.length;e++){let r=o[e];if(n.trim!==!1){let e=s.at(-1)??``,t=e.trimStart();e.length!==t.length&&(s[s.length-1]=t,c=D(t))}e!==0&&(c>=t&&(n.wordWrap===!1||n.trim===!1)&&(s.push(``),c=0),(c||n.trim===!1)&&(s[s.length-1]+=` `,c++));let i=D(r);if(n.hard&&i>t){let e=t-c,n=1+Math.floor((i-e-1)/t);Math.floor((i-1)/t)<n&&s.push(``),k(s,r,t),c=D(s.at(-1)??``);continue}if(c+i>t&&c&&i){if(n.wordWrap===!1&&c<t){k(s,r,t),c=D(s.at(-1)??``);continue}s.push(``),c=0}if(c+i>t&&n.wordWrap===!1){k(s,r,t),c=D(s.at(-1)??``);continue}s[s.length-1]+=r,c+=i}n.trim!==!1&&(s=s.map(e=>ue(e)));let l=s.join(`
|
|
3
|
+
`),u=!1;for(let e=0;e<l.length;e++){let t=l[e];if(r+=t,u)u=!1;else if(u=t>=`\ud800`&&t<=`\udbff`,u)continue;if(t===`\x1B`||t===``){oe.lastIndex=e+1;let t=oe.exec(l)?.groups;if(t?.code!==void 0){let e=Number.parseFloat(t.code);i=e===39?void 0:e}else t?.uri!==void 0&&(a=t.uri.length===0?void 0:t.uri)}if(l[e+1]===`
|
|
4
|
+
`){a&&(r+=le(``));let e=i?se(i):void 0;i&&e&&(r+=ce(e))}else t===`
|
|
5
|
+
`&&(i&&se(i)&&(r+=ce(i)),a&&(r+=le(a)))}return r},fe=/\r?\n/;function A(e,t,n){return String(e).normalize().split(fe).map(e=>de(e,t,n)).join(`
|
|
6
|
+
`)}var j=o(((e,t)=>{let n={to(e,t){return t?`[${t+1};${e+1}H`:`[${e+1}G`},move(e,t){let n=``;return e<0?n+=`[${-e}D`:e>0&&(n+=`[${e}C`),t<0?n+=`[${-t}A`:t>0&&(n+=`[${t}B`),n},up:(e=1)=>`[${e}A`,down:(e=1)=>`[${e}B`,forward:(e=1)=>`[${e}C`,backward:(e=1)=>`[${e}D`,nextLine:(e=1)=>`\x1B[E`.repeat(e),prevLine:(e=1)=>`\x1B[F`.repeat(e),left:`\x1B[G`,hide:`\x1B[?25l`,show:`\x1B[?25h`,save:`\x1B7`,restore:`\x1B8`};t.exports={cursor:n,scroll:{up:(e=1)=>`\x1B[S`.repeat(e),down:(e=1)=>`\x1B[T`.repeat(e)},erase:{screen:`\x1B[2J`,up:(e=1)=>`\x1B[1J`.repeat(e),down:(e=1)=>`\x1B[J`.repeat(e),line:`\x1B[2K`,lineEnd:`\x1B[K`,lineStart:`\x1B[1K`,lines(e){let t=``;for(let r=0;r<e;r++)t+=this.line+(r<e-1?n.up():``);return e&&(t+=n.left),t}},beep:`\x07`}}))();function M(e,t,n){if(!n.some(e=>!e.disabled))return e;let r=e+t,i=Math.max(n.length-1,0),a=r<0?i:r>i?0:r;return n[a].disabled?M(a,t<0?-1:1,n):a}const N={actions:new Set([`up`,`down`,`left`,`right`,`space`,`enter`,`cancel`]),aliases:new Map([[`k`,`up`],[`j`,`down`],[`h`,`left`],[`l`,`right`],[``,`cancel`],[`escape`,`cancel`]]),messages:{cancel:`Canceled`,error:`Something went wrong`},withGuide:!0,date:{monthNames:[...[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`]],messages:{required:`Please enter a valid date`,invalidMonth:`There are only 12 months in a year`,invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};function P(e,t){if(typeof e==`string`)return N.aliases.get(e)===t;for(let n of e)if(n!==void 0&&P(n,t))return!0;return!1}function pe(e,t){if(e===t)return;let n=e.split(`
|
|
7
7
|
`),r=t.split(`
|
|
8
|
-
`),i=Math.max(n.length,r.length),a=[];for(let e=0;e<i;e++)n[e]!==r[e]&&a.push(e);return{lines:a,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}const
|
|
8
|
+
`),i=Math.max(n.length,r.length),a=[];for(let e=0;e<i;e++)n[e]!==r[e]&&a.push(e);return{lines:a,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}const me=globalThis.process.platform.startsWith(`win`),F=Symbol(`clack:cancel`);function I(e){return e===F}function L(e,t){let n=e;n.isTTY&&n.setRawMode(t)}function he({input:e=u.stdin,output:t=u.stdout,overwrite:n=!0,hideCursor:r=!0}={}){let i=d.createInterface({input:e,output:t,prompt:``,tabSize:1});d.emitKeypressEvents(e,i),e instanceof f.ReadStream&&e.isTTY&&e.setRawMode(!0);let a=(i,{name:o,sequence:s})=>{if(P([String(i),o,s],`cancel`)){r&&t.write(j.cursor.show),process.exit(0);return}if(!n)return;let c=o===`return`?0:-1,l=o===`return`?-1:0;d.moveCursor(t,c,l,()=>{d.clearLine(t,1,()=>{e.once(`keypress`,a)})})};return r&&t.write(j.cursor.hide),e.once(`keypress`,a),()=>{e.off(`keypress`,a),r&&t.write(j.cursor.show),e instanceof f.ReadStream&&e.isTTY&&!me&&e.setRawMode(!1),i.terminal=!1,i.close()}}const R=e=>`columns`in e&&typeof e.columns==`number`?e.columns:80,ge=e=>`rows`in e&&typeof e.rows==`number`?e.rows:20;function z(e,t,n,r=n,i){return A(t,R(e??u.stdout)-n.length,{hard:!0,trim:!1}).split(`
|
|
9
9
|
`).map((e,t)=>{let a=i?i(e,t):e;return`${t===0?r:n}${a}`}).join(`
|
|
10
|
-
`)}let
|
|
11
|
-
`),
|
|
12
|
-
`).length-1;this.output.write(
|
|
13
|
-
`);this.output.write(t[a]),this._prevFrame=e,this.output.write(
|
|
10
|
+
`)}let B=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame=``;_subscribers=new Map;_cursor=0;state=`initial`;error=``;value;userInput=``;constructor(e,t=!0){let{input:n=u.stdin,output:r=u.stdout,render:i,signal:a,...o}=e;this.opts=o,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=a,this.input=n,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let n=this._subscribers.get(e)??[];n.push(t),this._subscribers.set(e,n)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let n=this._subscribers.get(e)??[],r=[];for(let e of n)e.cb(...t),e.once&&r.push(()=>n.splice(n.indexOf(e),1));for(let e of r)e()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state=`cancel`,this.close(),e(F);this._abortSignal.addEventListener(`abort`,()=>{this.state=`cancel`,this.close()},{once:!0})}this.rl=d.default.createInterface({input:this.input,tabSize:2,prompt:``,escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on(`keypress`,this.onKeypress),L(this.input,!0),this.output.on(`resize`,this.render),this.render(),this.once(`submit`,()=>{this.output.write(j.cursor.show),this.output.off(`resize`,this.render),L(this.input,!1),e(this.value)}),this.once(`cancel`,()=>{this.output.write(j.cursor.show),this.output.off(`resize`,this.render),L(this.input,!1),e(F)})})}_isActionKey(e,t){return e===` `}_shouldSubmit(e,t){return!0}_setValue(e){this.value=e,this.emit(`value`,this.value)}_setUserInput(e,t){this.userInput=e??``,this.emit(`userInput`,this.userInput),t&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:`u`}),this._setUserInput(``)}onKeypress(e,t){if(this._track&&t.name!==`return`&&(t.name&&this._isActionKey(e,t)&&this.rl?.write(null,{ctrl:!0,name:`h`}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state===`error`&&(this.state=`active`),t?.name&&(!this._track&&N.aliases.has(t.name)&&this.emit(`cursor`,N.aliases.get(t.name)),N.actions.has(t.name)&&this.emit(`cursor`,t.name)),e&&(e.toLowerCase()===`y`||e.toLowerCase()===`n`)&&this.emit(`confirm`,e.toLowerCase()===`y`),this.emit(`key`,e?.toLowerCase(),t),t?.name===`return`&&this._shouldSubmit(e,t)){if(this.opts.validate){let e=this.opts.validate(this.value);e&&(this.error=e instanceof Error?e.message:e,this.state=`error`,this.rl?.write(this.userInput))}this.state!==`error`&&(this.state=`submit`)}P([e,t?.name,t?.sequence],`cancel`)&&(this.state=`cancel`),(this.state===`submit`||this.state===`cancel`)&&this.emit(`finalize`),this.render(),(this.state===`submit`||this.state===`cancel`)&&this.close()}close(){this.input.unpipe(),this.input.removeListener(`keypress`,this.onKeypress),this.output.write(`
|
|
11
|
+
`),L(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=A(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
12
|
+
`).length-1;this.output.write(j.cursor.move(-999,e*-1))}render(){let e=A(this._render(this)??``,process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state===`initial`)this.output.write(j.cursor.hide);else{let t=pe(this._prevFrame,e),n=ge(this.output);if(this.restoreCursor(),t){let r=Math.max(0,t.numLinesAfter-n),i=Math.max(0,t.numLinesBefore-n),a=t.lines.find(e=>e>=r);if(a===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(j.cursor.move(0,a-i)),this.output.write(j.erase.lines(1));let t=e.split(`
|
|
13
|
+
`);this.output.write(t[a]),this._prevFrame=e,this.output.write(j.cursor.move(0,t.length-a-1));return}else if(t.lines.length>1){if(r<i)a=r;else{let e=a-i;e>0&&this.output.write(j.cursor.move(0,e))}this.output.write(j.erase.down());let t=e.split(`
|
|
14
14
|
`).slice(a);this.output.write(t.join(`
|
|
15
|
-
`)),this._prevFrame=e;return}}this.output.write(
|
|
16
|
-
`);_.push(i),v+=i.length}if(v>
|
|
15
|
+
`)),this._prevFrame=e;return}}this.output.write(j.erase.down())}this.output.write(e),this.state===`initial`&&(this.state=`active`),this._prevFrame=e}}};var _e=class extends B{get cursor(){return+!this.value}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on(`userInput`,()=>{this.value=this._value}),this.on(`confirm`,e=>{this.output.write(j.cursor.move(0,-1)),this.value=e,this.state=`submit`,this.close()}),this.on(`cursor`,()=>{this.value=!this.value})}},ve=class extends B{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(e){super(e,!1),this.options=e.options;let t=this.options.findIndex(({value:t})=>t===e.initialValue),n=t===-1?0:t;this.cursor=this.options[n].disabled?M(n,1,this.options):n,this.changeValue(),this.on(`cursor`,e=>{switch(e){case`left`:case`up`:this.cursor=M(this.cursor,-1,this.options);break;case`down`:case`right`:this.cursor=M(this.cursor,1,this.options);break}this.changeValue()})}},ye=class extends B{get userInputWithCursor(){if(this.state===`submit`)return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${this.userInput}\u2588`;let t=e.slice(0,this.cursor),[n,...r]=e.slice(this.cursor);return`${t}${(0,l.styleText)(`inverse`,n)}${r.join(``)}`}get cursor(){return this._cursor}constructor(e){super({...e,initialUserInput:e.initialUserInput??e.initialValue}),this.on(`userInput`,e=>{this._setValue(e)}),this.on(`finalize`,()=>{this.value||=e.defaultValue,this.value===void 0&&(this.value=``)})}};function be(){return u.default.platform===`win32`?!!u.default.env.CI||!!u.default.env.WT_SESSION||!!u.default.env.TERMINUS_SUBLIME||u.default.env.ConEmuTask===`{cmd::Cmder}`||u.default.env.TERM_PROGRAM===`Terminus-Sublime`||u.default.env.TERM_PROGRAM===`vscode`||u.default.env.TERM===`xterm-256color`||u.default.env.TERM===`alacritty`||u.default.env.TERMINAL_EMULATOR===`JetBrains-JediTerm`:u.default.env.TERM!==`linux`}const V=be(),xe=()=>process.env.CI===`true`,H=(e,t)=>V?e:t,Se=H(`◆`,`*`),Ce=H(`■`,`x`),we=H(`▲`,`x`),U=H(`◇`,`o`),W=H(`│`,`|`),G=H(`└`,`—`),Te=H(`●`,`>`),K=H(`○`,` `),Ee=H(`─`,`-`),De=H(`╮`,`+`),Oe=H(`├`,`+`),ke=H(`╯`,`+`),Ae=H(`╰`,`+`),je=H(`●`,`•`),Me=H(`◆`,`*`),Ne=H(`▲`,`!`),Pe=H(`■`,`x`),Fe=e=>{switch(e){case`initial`:case`active`:return(0,l.styleText)(`cyan`,Se);case`cancel`:return(0,l.styleText)(`red`,Ce);case`error`:return(0,l.styleText)(`yellow`,we);case`submit`:return(0,l.styleText)(`green`,U)}},Ie=e=>{switch(e){case`initial`:case`active`:return(0,l.styleText)(`cyan`,W);case`cancel`:return(0,l.styleText)(`red`,W);case`error`:return(0,l.styleText)(`yellow`,W);case`submit`:return(0,l.styleText)(`green`,W)}},Le=(e,t,n,r,i)=>{let a=t,o=0;for(let t=n;t<r;t++){let n=e[t];if(a-=n.length,o++,a<=i)break}return{lineCount:a,removals:o}},Re=({cursor:e,options:t,style:n,output:r=process.stdout,maxItems:i=1/0,columnPadding:a=0,rowPadding:o=4})=>{let s=R(r)-a,c=ge(r),u=(0,l.styleText)(`dim`,`...`),d=Math.max(c-o,0),f=Math.max(Math.min(i,d),5),p=0;e>=f-3&&(p=Math.max(Math.min(e-f+3,t.length-f),0));let m=f<t.length&&p>0,h=f<t.length&&p+f<t.length,g=Math.min(p+f,t.length),_=[],v=0;m&&v++,h&&v++;let y=p+ +!!m,b=g-+!!h;for(let r=y;r<b;r++){let i=A(n(t[r],r===e),s,{hard:!0,trim:!1}).split(`
|
|
16
|
+
`);_.push(i),v+=i.length}if(v>d){let t=0,n=0,r=v,i=e-y,a=(e,t)=>Le(_,r,e,t,d);m?({lineCount:r,removals:t}=a(0,i),r>d&&({lineCount:r,removals:n}=a(i+1,_.length))):({lineCount:r,removals:n}=a(i+1,_.length),r>d&&({lineCount:r,removals:t}=a(0,i))),t>0&&(m=!0,_.splice(0,t)),n>0&&(h=!0,_.splice(_.length-n,n))}let x=[];m&&x.push(u);for(let e of _)for(let t of e)x.push(t);return h&&x.push(u),x},q=e=>{let t=e.active??`Yes`,n=e.inactive??`No`;return new _e({active:t,inactive:n,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let r=e.withGuide??N.withGuide,i=`${Fe(this.state)} `,a=r?`${(0,l.styleText)(`gray`,W)} `:``,o=z(e.output,e.message,a,i),s=`${r?`${(0,l.styleText)(`gray`,W)}
|
|
17
17
|
`:``}${o}
|
|
18
|
-
`,c=this.value?t:n;switch(this.state){case`submit`:return`${s}${r?`${(0,
|
|
19
|
-
${(0,
|
|
20
|
-
${(0,
|
|
21
|
-
`:` ${(0,
|
|
18
|
+
`,c=this.value?t:n;switch(this.state){case`submit`:return`${s}${r?`${(0,l.styleText)(`gray`,W)} `:``}${(0,l.styleText)(`dim`,c)}`;case`cancel`:return`${s}${r?`${(0,l.styleText)(`gray`,W)} `:``}${(0,l.styleText)([`strikethrough`,`dim`],c)}${r?`
|
|
19
|
+
${(0,l.styleText)(`gray`,W)}`:``}`;default:{let i=r?`${(0,l.styleText)(`cyan`,W)} `:``,a=r?(0,l.styleText)(`cyan`,G):``;return`${s}${i}${this.value?`${(0,l.styleText)(`green`,Te)} ${t}`:`${(0,l.styleText)(`dim`,K)} ${(0,l.styleText)(`dim`,t)}`}${e.vertical?r?`
|
|
20
|
+
${(0,l.styleText)(`cyan`,W)} `:`
|
|
21
|
+
`:` ${(0,l.styleText)(`dim`,`/`)} `}${this.value?`${(0,l.styleText)(`dim`,K)} ${(0,l.styleText)(`dim`,n)}`:`${(0,l.styleText)(`green`,Te)} ${n}`}
|
|
22
22
|
${a}
|
|
23
|
-
`}}}}).prompt()},
|
|
24
|
-
`);if(f.length>0){let[e,...r]=f;e.length>0?o.push(`${
|
|
23
|
+
`}}}}).prompt()},ze=async(e,t)=>{let n={},r=Object.keys(e);for(let i of r){let r=e[i],a=await r({results:n})?.catch(e=>{throw e});if(typeof t?.onCancel==`function`&&I(a)){n[i]=`canceled`,t.onCancel({results:n});continue}n[i]=a}return n},J={message:(e=[],{symbol:t=(0,l.styleText)(`gray`,W),secondarySymbol:n=(0,l.styleText)(`gray`,W),output:r=process.stdout,spacing:i=1,withGuide:a}={})=>{let o=[],s=a??N.withGuide,c=s?n:``,u=s?`${t} `:``,d=s?`${n} `:``;for(let e=0;e<i;e++)o.push(c);let f=Array.isArray(e)?e:e.split(`
|
|
24
|
+
`);if(f.length>0){let[e,...r]=f;e.length>0?o.push(`${u}${e}`):o.push(s?t:``);for(let e of r)e.length>0?o.push(`${d}${e}`):o.push(s?n:``)}r.write(`${o.join(`
|
|
25
25
|
`)}
|
|
26
|
-
`)},info:(e,t)=>{J.message(e,{...t,symbol:(0,
|
|
26
|
+
`)},info:(e,t)=>{J.message(e,{...t,symbol:(0,l.styleText)(`blue`,je)})},success:(e,t)=>{J.message(e,{...t,symbol:(0,l.styleText)(`green`,Me)})},step:(e,t)=>{J.message(e,{...t,symbol:(0,l.styleText)(`green`,U)})},warn:(e,t)=>{J.message(e,{...t,symbol:(0,l.styleText)(`yellow`,Ne)})},warning:(e,t)=>{J.warn(e,t)},error:(e,t)=>{J.message(e,{...t,symbol:(0,l.styleText)(`red`,Pe)})}},Y=(e=``,t)=>{let n=t?.output??process.stdout,r=t?.withGuide??N.withGuide?`${(0,l.styleText)(`gray`,G)} `:``;n.write(`${r}${(0,l.styleText)(`red`,e)}
|
|
27
27
|
|
|
28
|
-
`)},
|
|
29
|
-
${(0,
|
|
28
|
+
`)},Be=(e=``,t)=>{let n=t?.output??process.stdout,r=t?.withGuide??N.withGuide?`${(0,l.styleText)(`gray`,W)}
|
|
29
|
+
${(0,l.styleText)(`gray`,G)} `:``;n.write(`${r}${e}
|
|
30
30
|
|
|
31
|
-
`)},
|
|
32
|
-
`);
|
|
33
|
-
`)
|
|
34
|
-
`)
|
|
31
|
+
`)},Ve=e=>(0,l.styleText)(`dim`,e),He=(e,t,n)=>{let r={hard:!0,trim:!1},i=A(e,t,r).split(`
|
|
32
|
+
`),a=i.reduce((e,t)=>Math.max(D(t),e),0);return A(e,t-(i.map(n).reduce((e,t)=>Math.max(D(t),e),0)-a),r)},Ue=(e=``,t=``,n)=>{let r=n?.output??u.default.stdout,i=n?.withGuide??N.withGuide,a=n?.format??Ve,o=[``,...He(e,R(r)-6,a).split(`
|
|
33
|
+
`).map(a),``],s=D(t),c=Math.max(o.reduce((e,t)=>{let n=D(t);return n>e?n:e},0),s)+2,d=o.map(e=>`${(0,l.styleText)(`gray`,W)} ${e}${` `.repeat(c-D(e))}${(0,l.styleText)(`gray`,W)}`).join(`
|
|
34
|
+
`),f=i?`${(0,l.styleText)(`gray`,W)}
|
|
35
|
+
`:``,p=i?Oe:Ae;r.write(`${f}${(0,l.styleText)(`green`,U)} ${(0,l.styleText)(`reset`,t)} ${(0,l.styleText)(`gray`,Ee.repeat(Math.max(c-s-1,1))+De)}
|
|
36
|
+
${d}
|
|
37
|
+
${(0,l.styleText)(`gray`,p+Ee.repeat(c+2)+ke)}
|
|
38
|
+
`)},We=e=>(0,l.styleText)(`magenta`,e),Ge=({indicator:e=`dots`,onCancel:t,output:n=process.stdout,cancelMessage:r,errorMessage:i,frames:a=V?[`◒`,`◐`,`◓`,`◑`]:[`•`,`o`,`O`,`0`],delay:o=V?80:120,signal:s,...c}={})=>{let u=xe(),d,f,p=!1,m=!1,h=``,g,_=performance.now(),v=R(n),y=c?.styleFrame??We,b=e=>{let n=e>1?i??N.messages.error:r??N.messages.cancel;m=e===1,p&&(T(n,e),m&&typeof t==`function`&&t())},x=()=>b(2),S=()=>b(1),ee=()=>{process.on(`uncaughtExceptionMonitor`,x),process.on(`unhandledRejection`,x),process.on(`SIGINT`,S),process.on(`SIGTERM`,S),process.on(`exit`,b),s&&s.addEventListener(`abort`,S)},te=()=>{process.removeListener(`uncaughtExceptionMonitor`,x),process.removeListener(`unhandledRejection`,x),process.removeListener(`SIGINT`,S),process.removeListener(`SIGTERM`,S),process.removeListener(`exit`,b),s&&s.removeEventListener(`abort`,S)},C=()=>{if(g===void 0)return;u&&n.write(`
|
|
39
|
+
`);let e=A(g,v,{hard:!0,trim:!1}).split(`
|
|
40
|
+
`);e.length>1&&n.write(j.cursor.up(e.length-1)),n.write(j.cursor.to(0)),n.write(j.erase.down())},ne=e=>e.replace(/\.+$/,``),w=e=>{let t=(performance.now()-e)/1e3,n=Math.floor(t/60),r=Math.floor(t%60);return n>0?`[${n}m ${r}s]`:`[${r}s]`},re=c.withGuide??N.withGuide,ie=(t=``)=>{p=!0,d=he({output:n}),h=ne(t),_=performance.now(),re&&n.write(`${(0,l.styleText)(`gray`,W)}
|
|
41
|
+
`);let r=0,i=0;ee(),f=setInterval(()=>{if(u&&h===g)return;C(),g=h;let t=y(a[r]),o;if(u)o=`${t} ${h}...`;else if(e===`timer`)o=`${t} ${h} ${w(_)}`;else{let e=`.`.repeat(Math.floor(i)).slice(0,3);o=`${t} ${h}${e}`}let s=A(o,v,{hard:!0,trim:!1});n.write(s),r=r+1<a.length?r+1:0,i=i<4?i+.125:0},o)},T=(t=``,r=0,i=!1)=>{if(!p)return;p=!1,clearInterval(f),C();let a=r===0?(0,l.styleText)(`green`,U):r===1?(0,l.styleText)(`red`,Ce):(0,l.styleText)(`red`,we);h=t??h,i||(e===`timer`?n.write(`${a} ${h} ${w(_)}
|
|
35
42
|
`):n.write(`${a} ${h}
|
|
36
|
-
`)),te(),
|
|
43
|
+
`)),te(),d()};return{start:ie,stop:(e=``)=>T(e,0),message:(e=``)=>{h=ne(e??h)},cancel:(e=``)=>T(e,1),error:(e=``)=>T(e,2),clear:()=>T(``,0,!0),get isCancelled(){return m}}},X=(e,t)=>e.includes(`
|
|
37
44
|
`)?e.split(`
|
|
38
45
|
`).map(e=>t(e)).join(`
|
|
39
|
-
`):t(e),
|
|
46
|
+
`):t(e),Ke=e=>{let t=(e,t)=>{let n=e.label??String(e.value);switch(t){case`disabled`:return`${(0,l.styleText)(`gray`,K)} ${X(n,e=>(0,l.styleText)(`gray`,e))}${e.hint?` ${(0,l.styleText)(`dim`,`(${e.hint??`disabled`})`)}`:``}`;case`selected`:return`${X(n,e=>(0,l.styleText)(`dim`,e))}`;case`active`:return`${(0,l.styleText)(`green`,Te)} ${n}${e.hint?` ${(0,l.styleText)(`dim`,`(${e.hint})`)}`:``}`;case`cancelled`:return`${X(n,e=>(0,l.styleText)([`strikethrough`,`dim`],e))}`;default:return`${(0,l.styleText)(`dim`,K)} ${X(n,e=>(0,l.styleText)(`dim`,e))}`}};return new ve({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let n=e.withGuide??N.withGuide,r=`${Fe(this.state)} `,i=`${Ie(this.state)} `,a=z(e.output,e.message,i,r),o=`${n?`${(0,l.styleText)(`gray`,W)}
|
|
40
47
|
`:``}${a}
|
|
41
|
-
`;switch(this.state){case`submit`:{let r=n?`${(0,
|
|
42
|
-
${(0,
|
|
43
|
-
`).length,s=n?2:1;return`${o}${r}${
|
|
48
|
+
`;switch(this.state){case`submit`:{let r=n?`${(0,l.styleText)(`gray`,W)} `:``;return`${o}${z(e.output,t(this.options[this.cursor],`selected`),r)}`}case`cancel`:{let r=n?`${(0,l.styleText)(`gray`,W)} `:``;return`${o}${z(e.output,t(this.options[this.cursor],`cancelled`),r)}${n?`
|
|
49
|
+
${(0,l.styleText)(`gray`,W)}`:``}`}default:{let r=n?`${(0,l.styleText)(`cyan`,W)} `:``,i=n?(0,l.styleText)(`cyan`,G):``,a=o.split(`
|
|
50
|
+
`).length,s=n?2:1;return`${o}${r}${Re({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:r.length,rowPadding:a+s,style:(e,n)=>t(e,e.disabled?`disabled`:n?`active`:`inactive`)}).join(`
|
|
44
51
|
${r}`)}
|
|
45
52
|
${i}
|
|
46
|
-
`}}}}).prompt()},
|
|
53
|
+
`}}}}).prompt()},qe=`${(0,l.styleText)(`gray`,W)} `,Z={message:async(e,{symbol:t=(0,l.styleText)(`gray`,W)}={})=>{process.stdout.write(`${(0,l.styleText)(`gray`,W)}
|
|
47
54
|
${t} `);let n=3;for await(let t of e){t=t.replace(/\n/g,`
|
|
48
|
-
${
|
|
49
|
-
`)&&(n=3+(0,
|
|
50
|
-
`))).length);let e=(0,
|
|
51
|
-
${
|
|
52
|
-
`)},info:e=>Z.message(e,{symbol:(0,
|
|
53
|
-
`:``}${
|
|
54
|
-
`,r=e.placeholder?(0,
|
|
55
|
+
${qe}`),t.includes(`
|
|
56
|
+
`)&&(n=3+(0,l.stripVTControlCharacters)(t.slice(t.lastIndexOf(`
|
|
57
|
+
`))).length);let e=(0,l.stripVTControlCharacters)(t).length;n+e<process.stdout.columns?(n+=e,process.stdout.write(t)):(process.stdout.write(`
|
|
58
|
+
${qe}${t.trimStart()}`),n=3+(0,l.stripVTControlCharacters)(t.trimStart()).length)}process.stdout.write(`
|
|
59
|
+
`)},info:e=>Z.message(e,{symbol:(0,l.styleText)(`blue`,je)}),success:e=>Z.message(e,{symbol:(0,l.styleText)(`green`,Me)}),step:e=>Z.message(e,{symbol:(0,l.styleText)(`green`,U)}),warn:e=>Z.message(e,{symbol:(0,l.styleText)(`yellow`,Ne)}),warning:e=>Z.warn(e),error:e=>Z.message(e,{symbol:(0,l.styleText)(`red`,Pe)})},Je=e=>new ye({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??N.withGuide,n=`${`${t?`${(0,l.styleText)(`gray`,W)}
|
|
60
|
+
`:``}${Fe(this.state)} `}${e.message}
|
|
61
|
+
`,r=e.placeholder?(0,l.styleText)(`inverse`,e.placeholder[0])+(0,l.styleText)(`dim`,e.placeholder.slice(1)):(0,l.styleText)([`inverse`,`hidden`],`_`),i=this.userInput?this.userInputWithCursor:r,a=this.value??``;switch(this.state){case`error`:{let e=this.error?` ${(0,l.styleText)(`yellow`,this.error)}`:``,r=t?`${(0,l.styleText)(`yellow`,W)} `:``,a=t?(0,l.styleText)(`yellow`,G):``;return`${n.trim()}
|
|
55
62
|
${r}${i}
|
|
56
63
|
${a}${e}
|
|
57
|
-
`}case`submit`:{let e=a?` ${(0,
|
|
58
|
-
${r}`:``}`}default:return`${n}${t?`${(0,
|
|
59
|
-
${t?(0,
|
|
60
|
-
`}}}).prompt();var Q=c(o(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c}))(),1),
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
64
|
+
`}case`submit`:{let e=a?` ${(0,l.styleText)(`dim`,a)}`:``;return`${n}${t?(0,l.styleText)(`gray`,W):``}${e}`}case`cancel`:{let e=a?` ${(0,l.styleText)([`strikethrough`,`dim`],a)}`:``,r=t?(0,l.styleText)(`gray`,W):``;return`${n}${r}${e}${a.trim()?`
|
|
65
|
+
${r}`:``}`}default:return`${n}${t?`${(0,l.styleText)(`cyan`,W)} `:``}${i}
|
|
66
|
+
${t?(0,l.styleText)(`cyan`,G):``}
|
|
67
|
+
`}}}).prompt();var Q=c(o(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c}))(),1),Ye=class{constructor(e){this.options=e,this.originalStdoutWrite=process.stdout.write}format(e){return this.options.isQuiet?e.replace(/\x1B\[[0-9;]*[JKmsu]/g,``):e}write(e,t=`stdout`){let n=this.format(e);this.options.isJson||t===`stderr`?process.stderr.write(`${n}\n`):process.stdout.write(`${n}\n`)}info(e){this.write(Q.default.blue(`ℹ ${e}`))}warn(e){this.write(Q.default.yellow(`⚠ ${e}`),`stderr`)}error(e){this.write(Q.default.red(`✘ ${e}`),`stderr`)}success(e){this.write(Q.default.green(`✔ ${e}`))}step(e){this.write(`○ ${e}`)}note(e,t){this.options.isQuiet||this.options.isJson?this.write(Q.default.dim(`○ ${t?`${t}: `:``}${e}`)):Ue(e,t)}log(e){this.write(e)}spinner(){return this.options.isQuiet||this.options.isJson?{start:e=>this.write(Q.default.dim(`○ ${e}...`)),stop:e=>this.write(Q.default.green(`✔ ${e}`)),message:e=>this.write(Q.default.dim(`○ ${e}...`))}:Ge()}json(e){process.stdout.write(`${JSON.stringify(e,null,2)}\n`)}get stdio(){return this.options.isJson?[process.stdin,process.stderr,process.stderr]:`inherit`}interactiveStdout(e){!this.options.isJson||this.options.isYes||(e?process.stdout.write=process.stderr.write.bind(process.stderr):process.stdout.write=this.originalStdoutWrite)}cancel(e){this.options.isJson?this.json({status:`error`,message:e}):Y(e),process.exit(0)}fatal(e,t){this.options.isJson?this.json({status:`error`,details:{message:e,error:t instanceof Error?t.message:t?String(t):void 0}}):(this.error(e),t&&this.log(Q.default.red(t instanceof Error?t.stack:String(t)))),process.exit(1)}finish(e,t){this.options.isJson?this.json({status:`success`,message:e,details:t}):Be(e)}},Xe=class{constructor(e){this.args=e.slice(2),this.command=this.args[0],this.isYes=this.args.includes(`--yes`)||this.args.includes(`-y`),this.isQuiet=this.args.includes(`--quiet`)||this.args.includes(`-q`),this.isJson=this.args.includes(`--json`)||this.args.includes(`-j`),this.isAgent=this.args.includes(`--agent`)||this.args.includes(`-a`),this.helpRequested=this.args.includes(`--help`)||this.args.includes(`-h`),this.isAgent&&(this.isYes=!0,this.isQuiet=!0,this.isJson=!0),this.logger=new Ye({isQuiet:this.isQuiet,isJson:this.isJson,isYes:this.isYes})}},Ze=`0.0.6`,Qe=class{constructor(e){this.cli=e}async run(){let{logger:e}=this.cli;e.log(`ArkEnv CLI v${Ze}`),e.log(`\n${Q.default.bold(`Usage:`)}`),e.log(` arkenv init Set up ArkEnv in your project`),e.log(`\n${Q.default.bold(`Options:`)}`),e.log(` --yes, -y Skip prompts and use defaults (also passed to skill processes)`),e.log(` --agent, -a Agent mode: --yes --quiet --json`),e.log(` --quiet, -q Quiet mode: Suppress output, capture logs on failure`),e.log(` --json, -j Output structured JSON to stdout`),e.log(` --help, -h Show this help message`)}};async function $e(e){let t=process.cwd();for(let n of e){let e=m.default.join(t,n);try{return await _.default.access(e),e}catch{}}return null}async function et(){return $e([`vite.config.ts`,`vite.config.js`,`vite.config.mts`,`vite.config.mjs`])}async function tt(){return $e([`bunfig.toml`,`bun.setup.ts`,`bun.setup.js`])}async function nt(e,t){try{let n=await(0,v.loadFile)(e),r=(0,v.generateCode)(n).code,i=n.exports.default;if(i&&typeof i==`object`&&`$type`in i&&i.$type===`function-call`&&(i.$callee||i.$name||JSON.stringify(i))===`defineConfig`&&(i=i.$args[0]),!i||typeof i!=`object`)return{success:!1,error:`Could not find default export in Vite config`};if(i.plugins||=[],Array.isArray(i.plugins))if(!(r.includes(`arkenvVitePlugin`)||r.includes(`arkenvPlugin`)))n.imports.$add({from:`@arkenv/vite-plugin`,local:`arkenvVitePlugin`,imported:`default`}),t&&n.imports.$add({from:t,imported:`Env`}),i.plugins.push(`__ARK_PLUGIN_PLACEHOLDER__`);else return{success:!0};else return{success:!1,error:`The 'plugins' property in ${m.default.basename(e)} is not an array.`};let a=(0,v.generateCode)(n,{format:(0,v.detectCodeFormat)(r)}).code,o=t?`arkenvVitePlugin(Env)`:`arkenvVitePlugin()`;return a=a.replace(/['"]__ARK_PLUGIN_PLACEHOLDER__['"]/g,o),await _.default.writeFile(e,a,`utf-8`),{success:!0}}catch(t){let n=t instanceof Error?t.message:String(t);return{success:!1,error:`Failed to parse ${m.default.basename(e)}: ${n}`}}}async function rt(e){return e?.endsWith(`bunfig.toml`)?{success:!0,instructions:g.default`
|
|
68
|
+
[preload]
|
|
69
|
+
preload = ["./bun.setup.ts"]
|
|
70
|
+
`}:e?.endsWith(`bun.setup.ts`)||e?.endsWith(`bun.setup.js`)?{success:!0,instructions:g.default`
|
|
71
|
+
import arkenv from "@arkenv/bun-plugin";
|
|
72
|
+
|
|
73
|
+
Bun.build({
|
|
74
|
+
// ... other config
|
|
75
|
+
plugins: [arkenv],
|
|
76
|
+
});
|
|
77
|
+
`}:{success:!0,instructions:g.default`
|
|
78
|
+
To complete Bun integration, add the following to your setup/preload file:
|
|
79
|
+
|
|
80
|
+
import arkenv from "@arkenv/bun-plugin";
|
|
81
|
+
|
|
82
|
+
Bun.build({
|
|
83
|
+
// ... other config
|
|
84
|
+
plugins: [arkenv],
|
|
72
85
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
|
|
87
|
+
If you don't have a setup file, create one (e.g., bun.setup.ts) and add it to your bunfig.toml:
|
|
88
|
+
|
|
89
|
+
[preload]
|
|
90
|
+
preload = ["./bun.setup.ts"]
|
|
91
|
+
`}}function it(e){let t=[],n=e.split(/\r?\n/);for(let e of n){let n=e.trim();if(!n||n.startsWith(`#`))continue;let r=n.match(/^([A-Z_][A-Z0-9_]*)\s*=/i);r?.[1]&&t.push(r[1])}return Array.from(new Set(t))}async function at(){let e=m.default.join(process.cwd(),`.env.example`);try{let t=it(await _.default.readFile(e,`utf-8`));return t.length>0?t:null}catch{return null}}const $=e=>Q.default.cyan(e),ot=Q.default.blue(`⛯`);async function st(e,t=!1,n=!1){let r=await at();if(t){let t=e?.framework||`node`,n;if(t===`vite`||t===`bun`){let e=t===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,r=m.default.dirname(m.default.resolve(process.cwd(),`./src/env.ts`)),i=m.default.join(r,e);n=p.default.existsSync(i)?`append`:`overwrite`}return{path:`./src/env.ts`,validator:`arktype`,framework:t,language:`ts`,overwriteEnvSchemaFile:!0,envDtsHandling:n,installTypeDefinitions:t!==`node`,envKeys:r||void 0,installSkill:!1}}let i=await ze({overwriteEnvSchemaFile:async()=>{let e=`./src/env.ts`;if(p.default.existsSync(m.default.resolve(process.cwd(),e))){let t=await q({message:Q.default.yellow(`An existing ArkEnv configuration was found at ${$(e)}. Do you want to overwrite it?`),initialValue:!1,active:`Yes (override my configuration)`,inactive:`No (abort)`});return I(t)&&(Y(`Operation cancelled.`),process.exit(0)),t||(Y(`Operation cancelled.`),process.exit(0)),t}return!0},framework:()=>Ke({message:`Select your framework or runtime:`,initialValue:e?.framework,options:[{value:`vite`,label:`Vite${e?.framework===`vite`?` (Detected)`:``}`},{value:`bun`,label:`Bun${e?.framework===`bun`?` (Detected)`:``}`},{value:`node`,label:`Node.js${e?.framework===`node`?` (Detected)`:``}`}]}),useDefaultPath:()=>q({message:`Use default config path (./src/env.ts)?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No, let me customize it`}),path:async({results:e})=>e.useDefaultPath?`./src/env.ts`:Je({message:`Where should we create the ArkEnv config?`,placeholder:`./src/env.ts`,initialValue:`./src/env.ts`}),installTypeDefinitions:async({results:e})=>{if(e.framework===`vite`||e.framework===`bun`){let t=e.framework===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,n=m.default.dirname(m.default.resolve(process.cwd(),e.path||`./src/env.ts`)),r=m.default.join(n,t);return p.default.existsSync(r)?!0:q({message:`Establish ${$(t)} for typesafe environment variables?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No`})}return!0},envDtsHandling:async({results:e})=>{if(!e.installTypeDefinitions||e.framework!==`vite`&&e.framework!==`bun`)return`skip`;let t=e.framework===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,n=m.default.dirname(m.default.resolve(process.cwd(),e.path||`./src/env.ts`)),r=m.default.join(n,t);if(p.default.existsSync(r)){let e=await Ke({message:`Found existing ${$(t)}. How should we handle ArkEnv types?`,options:[{value:`append`,label:`Append types safely`,hint:`Recommended`},{value:`overwrite`,label:`Overwrite entirely`,hint:`Destructive`},{value:`skip`,label:`Skip`}]});return I(e)&&(Y(`Operation cancelled.`),process.exit(0)),e}return`overwrite`},validator:()=>Ke({message:`Select your preferred validator library:`,options:[{value:`arktype`,label:`ArkType (Recommended)`,hint:`TypeScript's 1:1 validator, optimized from editor to runtime`},{value:`zod`,label:`Zod`,hint:`TypeScript-first schema validation with static type inference`},{value:`valibot`,label:`Valibot`,hint:`The modular and type safe schema library`}]}),useEnvExample:async()=>r?q({message:`Detected ${Q.default.cyan(`.env.example`)} with ${r.length} keys. Use them for your schema?`,active:`Yes (Recommended)`,initialValue:!0}):!1,installSkill:()=>{if(!n)return q({message:`Would you like to install the ArkEnv agent skill?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No`})}},{onCancel:()=>{Y(`Operation cancelled.`),process.exit(0)}});return I(i)&&(Y(`Operation cancelled.`),process.exit(0)),{path:i.path||`./src/env.ts`,validator:i.validator,framework:i.framework,language:`ts`,overwriteEnvSchemaFile:i.overwriteEnvSchemaFile,envDtsHandling:i.envDtsHandling,installTypeDefinitions:i.installTypeDefinitions,envKeys:i.useEnvExample?r:void 0,installSkill:i.installSkill}}const ct=(e,t)=>{let n=e?.length?e.map(e=>`\t\t${e}: "string = ''",`).join(`
|
|
92
|
+
`):` NODE_ENV: "'development' | 'production' | 'test' = 'development'",
|
|
93
|
+
PORT: "number.port = 3000",`;return t===`vite`?g.default`
|
|
94
|
+
import { type } from "arkenv";
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Environment variable schema.
|
|
98
|
+
* In Vite, use \`@arkenv/vite-plugin\` to validate these at build-time
|
|
99
|
+
* and provide typesafety for \`import.meta.env\`.
|
|
100
|
+
*/
|
|
101
|
+
export const Env = type({
|
|
82
102
|
${n}
|
|
83
|
-
|
|
84
|
-
|
|
103
|
+
});
|
|
104
|
+
`:t===`bun`?g.default`
|
|
105
|
+
import { type } from "arkenv";
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Environment variable schema.
|
|
109
|
+
* In Bun, use \`@arkenv/bun-plugin\` to validate these at build-time
|
|
110
|
+
* and provide typesafety for \`process.env\`.
|
|
111
|
+
*/
|
|
112
|
+
export const Env = type({
|
|
113
|
+
${n}
|
|
114
|
+
});
|
|
115
|
+
`:g.default`
|
|
85
116
|
import arkenv, { type } from "arkenv";
|
|
86
117
|
|
|
87
118
|
export const Env = type({
|
|
@@ -89,31 +120,54 @@ ${n}
|
|
|
89
120
|
});
|
|
90
121
|
|
|
91
122
|
export const env = arkenv(Env);
|
|
92
|
-
`},
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
123
|
+
`},lt=e=>g.default`
|
|
124
|
+
/// <reference types="vite/client" />
|
|
125
|
+
|
|
126
|
+
type ImportMetaEnvAugmented =
|
|
127
|
+
import("@arkenv/vite-plugin").ImportMetaEnvAugmented<
|
|
128
|
+
typeof import("./${m.default.basename(e).replace(/\.(ts|js|tsx|jsx)$/,``)}").Env
|
|
129
|
+
>;
|
|
130
|
+
|
|
131
|
+
interface ImportMetaEnv extends ImportMetaEnvAugmented {}
|
|
132
|
+
|
|
133
|
+
interface ImportMeta {
|
|
134
|
+
readonly env: ImportMetaEnv;
|
|
135
|
+
}
|
|
136
|
+
`,ut=e=>g.default`
|
|
137
|
+
/// <reference types="bun-types" />
|
|
138
|
+
|
|
139
|
+
type ProcessEnvAugmented = import("@arkenv/bun-plugin").ProcessEnvAugmented<
|
|
140
|
+
typeof import("./${m.default.basename(e).replace(/\.(ts|js|tsx|jsx)$/,``)}").Env
|
|
141
|
+
>;
|
|
142
|
+
|
|
143
|
+
declare namespace NodeJS {
|
|
144
|
+
interface ProcessEnv extends ProcessEnvAugmented {}
|
|
145
|
+
}
|
|
146
|
+
`,dt=(e,t)=>{let n=e?.length?e.map(e=>`\t\t${e}: v.optional(v.string(), ""),`).join(`
|
|
147
|
+
`):` NODE_ENV: v.optional(v.picklist(["development", "production", "test"]), "development"),
|
|
148
|
+
PORT: v.optional(v.pipe(v.string(), v.transform(Number), v.number(), v.integer(), v.minValue(1), v.maxValue(65535)), 3000),`;return t===`vite`?g.default`
|
|
149
|
+
import * as v from "valibot";
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Environment variable schema.
|
|
153
|
+
* In Vite, use \`@arkenv/vite-plugin\` to validate these at build-time
|
|
154
|
+
* and provide typesafety for \`import.meta.env\`.
|
|
155
|
+
*/
|
|
156
|
+
export const Env = v.object({
|
|
103
157
|
${n}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
158
|
+
});
|
|
159
|
+
`:t===`bun`?g.default`
|
|
160
|
+
import * as v from "valibot";
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Environment variable schema.
|
|
164
|
+
* In Bun, use \`@arkenv/bun-plugin\` to validate these at build-time
|
|
165
|
+
* and provide typesafety for \`process.env\`.
|
|
166
|
+
*/
|
|
167
|
+
export const Env = v.object({
|
|
114
168
|
${n}
|
|
115
|
-
|
|
116
|
-
|
|
169
|
+
});
|
|
170
|
+
`:g.default`
|
|
117
171
|
import arkenv from "arkenv/standard";
|
|
118
172
|
import * as v from "valibot";
|
|
119
173
|
|
|
@@ -122,31 +176,31 @@ ${n}
|
|
|
122
176
|
});
|
|
123
177
|
|
|
124
178
|
export const env = arkenv(Env);
|
|
125
|
-
`},
|
|
126
|
-
`):` NODE_ENV: z.enum(["development", "production", "test"]),
|
|
127
|
-
PORT: z.coerce.number().
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
179
|
+
`},ft=(e,t)=>{let n=e?.length?e.map(e=>`\t\t${e}: z.string().default(""),`).join(`
|
|
180
|
+
`):` NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
|
|
181
|
+
PORT: z.coerce.number().int().min(1).max(65535).default(3000),`;return t===`vite`?g.default`
|
|
182
|
+
import { z } from "zod";
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Environment variable schema.
|
|
186
|
+
* In Vite, use \`@arkenv/vite-plugin\` to validate these at build-time
|
|
187
|
+
* and provide typesafety for \`import.meta.env\`.
|
|
188
|
+
*/
|
|
189
|
+
export const Env = z.object({
|
|
136
190
|
${n}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
191
|
+
});
|
|
192
|
+
`:t===`bun`?g.default`
|
|
193
|
+
import { z } from "zod";
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Environment variable schema.
|
|
197
|
+
* In Bun, use \`@arkenv/bun-plugin\` to validate these at build-time
|
|
198
|
+
* and provide typesafety for \`process.env\`.
|
|
199
|
+
*/
|
|
200
|
+
export const Env = z.object({
|
|
147
201
|
${n}
|
|
148
|
-
|
|
149
|
-
|
|
202
|
+
});
|
|
203
|
+
`:g.default`
|
|
150
204
|
import arkenv from "arkenv/standard";
|
|
151
205
|
import { z } from "zod";
|
|
152
206
|
|
|
@@ -155,9 +209,12 @@ ${n}
|
|
|
155
209
|
});
|
|
156
210
|
|
|
157
211
|
export const env = arkenv(Env);
|
|
158
|
-
`};function
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
212
|
+
`};function pt(e){let{validator:t,envKeys:n,framework:r}=e;switch(t){case`arktype`:return`${ct(n,r)}\n`;case`zod`:return`${ft(n,r)}\n`;case`valibot`:return`${dt(n,r)}\n`;default:throw Error(`Unsupported validator: ${t}`)}}async function mt(e){let t=m.default.resolve(process.cwd(),e.path),n=m.default.dirname(t);await _.default.mkdir(n,{recursive:!0});let r=await xt(),i=[`arkenv`,e.validator];e.framework===`vite`&&i.push(`@arkenv/vite-plugin`),e.framework===`bun`&&i.push(`@arkenv/bun-plugin`);let a=St(r,i),o=pt(e);if((0,p.existsSync)(t)){if(e.overwriteEnvSchemaFile===!1)return{tsConfigResult:{status:`already_strict`},packageManager:r,installCmd:void 0,typeDefinitionResult:{status:`none`}};if(e.overwriteEnvSchemaFile===void 0){let e=await q({message:`File ${m.default.basename(t)} already exists. Overwrite?`,initialValue:!1});if(I(e)&&(Y(`Operation cancelled.`),process.exit(0)),!e)return{tsConfigResult:{status:`already_strict`},packageManager:r,installCmd:void 0,typeDefinitionResult:{status:`none`}}}await _.default.writeFile(t,o,`utf-8`)}else await _.default.writeFile(t,o,`utf-8`);let s={status:`already_strict`};e.shouldUpdateTsConfig&&(s=await yt());let c={status:`none`};return(e.framework===`vite`||e.framework===`bun`)&&e.installTypeDefinitions!==!1&&(c=await ht(e,n)),{tsConfigResult:s,installCmd:a,packageManager:r,typeDefinitionResult:c}}async function ht(e,t){let n=e.framework===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,r=m.default.join(t,n),i=m.default.resolve(process.cwd(),e.path);if(e.envDtsHandling===`skip`)return{status:`skipped`,file:n};if(e.envDtsHandling===`append`||!e.envDtsHandling&&(0,p.existsSync)(r)){let{safeAppend:t}=await Promise.resolve().then(()=>require(`./injection-IfQN68XB.cjs`));return{status:await t(r,i,e.framework)?`appended`:`skipped`,file:n}}let a=e.framework===`vite`?lt(e.path):ut(e.path),o=(0,p.existsSync)(r);return await _.default.writeFile(r,a,`utf-8`),{status:o?`overwritten`:`created`,file:n}}function gt(e){switch(e){case`pnpm`:return`pnpm dlx`;case`yarn`:return`yarn dlx`;case`bun`:return`bunx`;default:return`npx`}}async function _t(){let e=[`tsconfig.app.json`,`tsconfig.json`,`tsconfig.base.json`,`tsconfig.node.json`],t=process.cwd();for(;t!==m.default.parse(t).root;){for(let n of e){let e=m.default.join(t,n);try{return await _.default.access(e),e}catch{}}t=m.default.dirname(t)}return null}async function vt(){let e=await _t();if(!e)return{status:`not_found`};let t=m.default.basename(e);try{return(0,y.parse)(await _.default.readFile(e,`utf-8`))?.compilerOptions?.strict===!0?{status:`strict`,file:t}:{status:`not_strict`,file:t}}catch{return{status:`not_found`}}}async function yt(){let e=await _t();if(!e)return{status:`not_found`};let t=m.default.basename(e);try{let n=await _.default.readFile(e,`utf-8`);if((0,y.parse)(n)?.compilerOptions?.strict===!0)return{status:`already_strict`,file:t};let r=(0,y.applyEdits)(n,(0,y.modify)(n,[`compilerOptions`,`strict`],!0,{formattingOptions:{insertSpaces:!0,tabSize:2}}));return await _.default.writeFile(e,r,`utf-8`),{status:`updated`,file:t}}catch{return{status:`error`,file:t}}}async function bt(){try{let e=m.default.join(process.cwd(),`package.json`),t=await _.default.readFile(e,`utf-8`),n=JSON.parse(t),r={...n.dependencies,...n.devDependencies};if(r.vite)return`vite`;if(r[`@types/bun`]||r.bun)return`bun`}catch{}try{return await _.default.access(m.default.join(process.cwd(),`vite.config.ts`)),`vite`}catch{}try{return await _.default.access(m.default.join(process.cwd(),`vite.config.js`)),`vite`}catch{}return`bun`in process.versions?`bun`:`node`}async function xt(){let e=process.env.npm_config_user_agent?.toString()||``;if(e.includes(`pnpm`))return`pnpm`;if(e.includes(`yarn`))return`yarn`;if(e.includes(`bun`))return`bun`;if(e.includes(`npm`))return`npm`;let t=process.cwd();for(;t!==m.default.parse(t).root;){try{let e=m.default.join(t,`package.json`),n=await _.default.readFile(e,`utf-8`),r=JSON.parse(n);if(r.packageManager){if(r.packageManager.startsWith(`pnpm`))return`pnpm`;if(r.packageManager.startsWith(`yarn`))return`yarn`;if(r.packageManager.startsWith(`bun`))return`bun`}}catch{}let e=await _.default.readdir(t);if(e.includes(`pnpm-lock.yaml`))return`pnpm`;if(e.includes(`yarn.lock`))return`yarn`;if(e.includes(`bun.lockb`))return`bun`;if(e.includes(`package-lock.json`))return`npm`;t=m.default.dirname(t)}return`npm`}function St(e,t){switch(e){case`pnpm`:return`pnpm add ${t.join(` `)}`;case`yarn`:return`yarn add ${t.join(` `)}`;case`bun`:return`bun add ${t.join(` `)}`;default:return`npm install ${t.join(` `)}`}}var Ct=class{constructor(e){this.cli=e}async run(){let{logger:e,isYes:t}=this.cli;e.interactiveStdout(!0);let n=!1,r=null;try{let i=await vt();if(i.status===`not_strict`)if(t)n=!0;else{e.warn(`TypeScript strict mode is not enabled in your ${$(i.file)}.`);let t=await q({message:`ArkEnv requires ${Q.default.dim(`strict`)} mode in your ${$(i.file)}. Would you like to enable it now?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No`});I(t)&&e.cancel(`Operation cancelled.`),t&&(n=!0)}r=await st({framework:await bt()},t,this.cli.isAgent)}finally{e.interactiveStdout(!1)}if(!r){e.cancel(`Operation cancelled.`);return}let i=e.spinner();i.start(`Scaffolding ArkEnv configuration...`);try{let{tsConfigResult:t,installCmd:a,packageManager:o,typeDefinitionResult:s}=await mt({...r,shouldUpdateTsConfig:n});i.stop(`Configuration scaffolded!`),a&&process.env.SKIP_INSTALL!==`true`&&(e.step(`Installing dependencies with ${o}...`),await this.execute(a)),t.status===`updated`?e.info(`Enforced strict: true in your ${$(t.file)}`):t.status===`error`&&e.warn(`Could not automatically update ${$(t.file||`tsconfig.json`)}. Please ensure 'strict: true' is set manually.`),s.status===`created`?e.info(`Created ${$(s.file)} for typesafe environment variables.`):s.status===`overwritten`?e.info(`Updated ${$(s.file)} for typesafe environment variables.`):s.status===`appended`&&e.info(`Appended ArkEnv types to ${$(s.file)}.`);let c=m.default.relative(process.cwd(),m.default.resolve(r.path)),l=c.startsWith(`.`)?c:`./${c}`,u=l.replace(/\.(ts|js|tsx|jsx)$/,``);if(r.framework===`vite`){let t=await et();if(t){e.step(`Bootstrapping Vite plugin...`);let n=await nt(t,u);n.success?e.info(`Updated ${$(m.default.basename(t))}`):(e.warn(`Could not automatically update ${$(m.default.basename(t))}: ${n.error}`),e.info(`Please add '@arkenv/vite-plugin' manually.`))}else e.info(`No Vite config found — please add '@arkenv/vite-plugin' to your Vite config manually.`)}else if(r.framework===`bun`){let t=await rt(await tt());t.success&&t.instructions?e.info(t.instructions):t.success||e.error(t.error||`Bun bootstrap failed`)}let d=gt(o),f=this.cli.isYes?` --yes`:``,p=!1;if(r.installSkill&&process.env.SKIP_INSTALL!==`true`){e.step(`Installing ArkEnv agent skill...`);try{await this.execute(`${d} skills add yamcodes/arkenv${f}`),p=!0}catch(t){e.warn(`Failed to install ArkEnv AI skill: ${t.message}`)}}let h=`2. Import and use: ${$(`import { env } from "${u}"`)}`;r.framework===`vite`?h=`2. Access via ${$(`import.meta.env.YOUR_VAR`)}`:r.framework===`bun`&&(h=`2. Access via ${$(`process.env.YOUR_VAR`)}`),p?e.note(g.default`
|
|
213
|
+
Inside your AI assistant (e.g. Claude Code), use:
|
|
214
|
+
${Q.default.cyan(`/arkenv`)} - automatically refine your schema and configure integrations.
|
|
215
|
+
`,`Next steps`):e.note(g.default`
|
|
216
|
+
1. Check ${$(l)} and refine your environment schema.
|
|
217
|
+
${h}
|
|
218
|
+
3. (Recommended) Install the AI skill: ${$(`${d} skills add yamcodes/arkenv`)}
|
|
219
|
+
Then run ${Q.default.cyan(`/arkenv`)} inside your AI assistant to finish.
|
|
220
|
+
`,`Next steps`),e.finish(`${ot} ArkEnv scaffolding complete. ${Q.default.dim(`Happy coding!`)}`,{path:l,framework:r.framework,validator:r.validator,packageManager:o,tsConfigUpdated:t.status===`updated`,skillInstalled:p})}catch(t){i.stop(`Scaffolding failed.`),e.fatal(`Scaffolding failed.`,t)}}async execute(e){let{logger:t,isQuiet:n}=this.cli,r=n?`pipe`:t.stdio;return new Promise((t,i)=>{let a=(0,h.spawn)(e,[],{stdio:r,shell:!0}),o=``,s=``,c=1e4;n&&(a.stdout?.on(`data`,e=>{o=(o+e.toString()).slice(-c)}),a.stderr?.on(`data`,e=>{s=(s+e.toString()).slice(-c)})),a.on(`close`,(e,r)=>{if(e===0)t();else{let t=e===null?`Command terminated by signal ${r}`:`Command failed with code ${e}`;n&&(o&&(t+=`\n${Q.default.dim(`STDOUT:`)}\n${o}`),s&&(t+=`\n${Q.default.red(`STDERR:`)}\n${s}`)),i(Error(t))}}),a.on(`error`,i)})}};async function wt(){let e=new Xe(process.argv);e.helpRequested&&(await new Qe(e).run(),process.exit(0)),e.command!==`init`&&(e.command?e.logger.error(`Unknown command: ${e.command}`):e.logger.error(`Missing command.`),await new Qe(e).run(),process.exit(1));try{await new Ct(e).run()}catch(t){e.logger.fatal(`An unexpected error occurred`,t)}}wt(),process.on(`unhandledRejection`,e=>{new Xe(process.argv).logger.fatal(`Unhandled rejection`,e)}),exports.t=c;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const e=require(`./index.cjs`);let t=require(`node:path`);t=e.t(t,1);let n=require(`dedent`);n=e.t(n,1);let r=require(`node:fs/promises`);r=e.t(r,1);const i=`// @arkenv-types`;async function a(e,n,a){try{let c=await r.default.readFile(e,`utf-8`);if(c.includes(i))return!1;let l=t.default.dirname(e),u=t.default.relative(l,n).replace(/\.(ts|js|tsx|jsx)$/,``).split(t.default.sep).join(`/`),d=u.startsWith(`.`)?u:`./${u}`,f=a===`vite`?o(d):s(d),p=c.endsWith(`
|
|
2
|
+
`)?``:`
|
|
3
|
+
`;return await r.default.appendFile(e,`${p}\n${i}\n${f}\n`,`utf-8`),!0}catch(t){return console.error(`Failed to append to ${e}:`,t),!1}}function o(e){return n.default`
|
|
4
|
+
type ImportMetaEnvAugmented = import("@arkenv/vite-plugin").ImportMetaEnvAugmented<
|
|
5
|
+
typeof import("${e}").Env
|
|
6
|
+
>;
|
|
7
|
+
|
|
8
|
+
interface ImportMetaEnv extends ImportMetaEnvAugmented {}
|
|
9
|
+
|
|
10
|
+
interface ImportMeta {
|
|
11
|
+
readonly env: ImportMetaEnv;
|
|
12
|
+
}
|
|
13
|
+
`}function s(e){return n.default`
|
|
14
|
+
type ProcessEnvAugmented = import("@arkenv/bun-plugin").ProcessEnvAugmented<
|
|
15
|
+
typeof import("${e}").Env
|
|
16
|
+
>;
|
|
17
|
+
|
|
18
|
+
declare namespace NodeJS {
|
|
19
|
+
interface ProcessEnv extends ProcessEnvAugmented {}
|
|
20
|
+
}
|
|
21
|
+
`}exports.safeAppend=a;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arkenv/cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.6",
|
|
5
5
|
"description": "Interactive CLI for scaffolding ArkEnv projects",
|
|
6
6
|
"bin": {
|
|
7
7
|
"arkenv": "./dist/index.cjs"
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"@clack/prompts": "^1.3.0",
|
|
38
38
|
"dedent": "^1.7.2",
|
|
39
39
|
"jsonc-parser": "^3.3.1",
|
|
40
|
+
"magicast": "^0.5.2",
|
|
40
41
|
"picocolors": "^1.1.1"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
"start": "node ./dist/index.cjs init",
|
|
50
51
|
"dev": "tsdown --watch",
|
|
51
52
|
"test": "vitest",
|
|
52
|
-
"test:run": "vitest run"
|
|
53
|
+
"test:run": "vitest run",
|
|
54
|
+
"typecheck": "tsc --noEmit"
|
|
53
55
|
}
|
|
54
56
|
}
|