@arkenv/cli 0.0.7 → 0.0.9

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/README.md CHANGED
@@ -21,6 +21,14 @@ npx @arkenv/cli@latest init
21
21
  - [ArkEnv](https://arkenv.js.org) - Core library and docs
22
22
  - [ArkType](https://arktype.io/) - Underlying validator / type system
23
23
 
24
+ ## Architecture
25
+
26
+ This CLI is built with a port-and-adapter architecture to remain flexible and testable.
27
+
28
+ ### Local Environment Adapters (`Node*`)
29
+
30
+ Implementations prefixed with `Node` (e.g., `NodeWorkspace`, `NodeProjectScanner`) represent the standard local development environment. They utilize standard `node:*` APIs (like `node:fs` and `node:child_process`) which are universally supported across modern runtimes including Node.js, Bun, and Deno. This naming reflects the API standard used rather than a runtime restriction.
31
+
24
32
  ## License
25
33
 
26
34
  MIT
@@ -0,0 +1 @@
1
+ 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,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(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},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
package/dist/index.cjs CHANGED
@@ -1,131 +1,152 @@
1
1
  #!/usr/bin/env node
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(`
2
+ const e=require(`./chunk-i8uDWG73.cjs`);let t=require(`node:fs/promises`);t=e.r(t,1);let n=require(`node:path`);n=e.r(n,1);let r=require(`dedent`);r=e.r(r,1);let i=require(`node:util`),a=require(`node:process`);a=e.r(a,1);let o=require(`node:readline`);o=e.r(o,1);let s=require(`node:tty`),c=require(`node:fs`);c=e.r(c,1);let l=require(`node:module`),u=require(`jsonc-parser`),d=require(`node:child_process`),f=require(`magicast`),p=require(`radashi`);var m=e.n({safeAppend:()=>g});const h=`// @arkenv-types`;async function g(e,r,i){try{let a=await t.default.readFile(e,`utf-8`),o=i===`vite`?`ImportMetaEnvAugmented`:`ProcessEnvAugmented`;if(a.includes(h)||a.includes(o))return!1;let s=n.default.dirname(e),c=n.default.relative(s,r).replace(/\.(ts|js|tsx|jsx)$/,``).split(n.default.sep).join(`/`),l=c.startsWith(`.`)?c:`./${c}`,u=i===`vite`?_(l):v(l),d=a.endsWith(`
3
+ `)?``:`
4
+ `;return await t.default.appendFile(e,`${d}\n${h}\n${u}\n`,`utf-8`),!0}catch(t){return console.error(`Failed to append to ${e}:`,t),!1}}function _(e){return r.default`
5
+ type ImportMetaEnvAugmented = import("@arkenv/vite-plugin").ImportMetaEnvAugmented<
6
+ typeof import("${e}").Env
7
+ >;
8
+
9
+ interface ImportMetaEnv extends ImportMetaEnvAugmented {}
10
+
11
+ interface ImportMeta {
12
+ readonly env: ImportMetaEnv;
13
+ }
14
+ `}function v(e){return r.default`
15
+ type ProcessEnvAugmented = import("@arkenv/bun-plugin").ProcessEnvAugmented<
16
+ typeof import("${e}").Env
17
+ >;
18
+
19
+ declare namespace NodeJS {
20
+ interface ProcessEnv extends ProcessEnvAugmented {}
21
+ }
22
+ `}var y=e.t(((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})),b=e.r(y(),1),x=class{info(e){process.stderr.write(`${b.default.blue(`ℹ ${e}`)}\n`)}warn(e){process.stderr.write(`${b.default.yellow(`⚠ ${e}`)}\n`)}error(e){process.stderr.write(`${b.default.red(`✘ ${e}`)}\n`)}success(e){process.stderr.write(`${b.default.green(`✔ ${e}`)}\n`)}step(e){process.stderr.write(`○ ${e}\n`)}note(e,t){process.stderr.write(`${b.default.dim(`○ ${t?`${t}: `:``}${e}`)}\n`)}log(e){process.stderr.write(`${e}\n`)}spinner(){return{start:e=>process.stderr.write(`${b.default.dim(`○ ${e}...`)}\n`),stop:e=>process.stderr.write(`${b.default.green(`✔ ${e}`)}\n`),message:e=>process.stderr.write(`${b.default.dim(`○ ${e}...`)}\n`)}}json(e){process.stdout.write(`${JSON.stringify(e,null,2)}\n`)}cancel(e){this.json({status:`cancelled`,message:e})}fatal(e,t){throw this.json({status:`error`,details:{message:e,error:t instanceof Error?t.message:t?String(t):void 0}}),t instanceof Error?t:Error(e)}finish(e,t){this.json({status:`success`,message:e,details:t})}async flush(){return new Promise(e=>{process.stdout.write(``,()=>e())})}},S=class{stripAnsi(e){return e.replace(/\x1B\[[0-9;]*[JKmsu]/g,``)}info(e){}warn(e){}error(e){}success(e){}step(e){}note(e,t){}log(e){process.stdout.write(`${this.stripAnsi(e)}\n`)}spinner(){return{start:e=>{},stop:e=>{},message:e=>{}}}json(e){process.stdout.write(`${JSON.stringify(e,null,2)}\n`)}cancel(e){process.stderr.write(`✘ Cancelled: ${e}\n`)}fatal(e,t){throw process.stderr.write(`✘ Fatal: ${e}\n`),t&&process.stderr.write(`${t instanceof Error?t.stack??t.message:String(t)}\n`),t instanceof Error?t:Error(e)}finish(e,t){}async flush(){return new Promise(e=>{process.stderr.write(``,()=>e())})}};const ee=(()=>{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}})(),te=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,ne=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,re=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,C=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,w=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy,ie=/\t{1,1000}/y,T=/[\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,ae=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,oe=/\p{M}+/gu,se={limit:1/0,ellipsis:``},ce=(e,t={},n={})=>{let r=t.limit??1/0,i=t.ellipsis??``,a=t?.ellipsisWidth??(i?ce(i,se,n).width:0),o=n.controlWidth??0,s=n.tabWidth??8,c=n.emojiWidth??2,l=n.regularWidth??1,u=n.wideWidth??2,d=[[ae,l],[re,0],[C,o],[ie,s],[T,c],[w,u]],f=0,p=0,m=e.length,h=0,g=!1,_=m,v=Math.max(0,r-a),y=0,b=0,x=0,S=0;outer:for(;;){if(b>y||p>=m&&p>f){let t=e.slice(y,b)||e.slice(f,p);h=0;for(let e of t.replaceAll(oe,``)){let t=e.codePointAt(0)||0;if(S=te(t)?2:ne(t)?u:l,x+S>v&&(_=Math.min(_,Math.max(y,f)+h)),x+S>r){g=!0;break outer}h+=e.length,x+=S}y=b=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===w?ee(e.slice(p,n.lastIndex)):n===T?1:n.lastIndex-p,S=h*i,x+S>v&&(_=Math.min(_,p+Math.floor((v-x)/i))),x+S>r){g=!0;break outer}x+=S,y=f,b=p,p=f=n.lastIndex;continue outer}}p+=1}return{width:g?v:x,index:g?_:m,truncated:g,ellipsed:g&&r>=a}},le={limit:1/0,ellipsis:``,ellipsisWidth:0},E=(e,t={})=>ce(e,le,t).width,ue=`]8;;`,de=RegExp(`(?:\\[(?<code>\\d+)m|\\${ue}(?<uri>.*))`,`y`),fe=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},pe=e=>`[${e}m`,me=e=>`${ue}${e}`,D=(e,t,n)=>{let r=t[Symbol.iterator](),i=!1,a=!1,o=e.at(-1),s=o===void 0?0:E(o),c=r.next(),l=r.next(),u=0;for(;!c.done;){let o=c.value,d=E(o);s+d<=n?e[e.length-1]+=o:(e.push(o),s=0),(o===`\x1B`||o===`›`)&&(i=!0,a=t.startsWith(ue,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())},he=e=>{let t=e.split(` `),n=t.length;for(;n&&!E(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(` `)+t.slice(n).join(``)},ge=(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=E(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=E(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(``),D(s,r,t),c=E(s.at(-1)??``);continue}if(c+i>t&&c&&i){if(n.wordWrap===!1&&c<t){D(s,r,t),c=E(s.at(-1)??``);continue}s.push(``),c=0}if(c+i>t&&n.wordWrap===!1){D(s,r,t),c=E(s.at(-1)??``);continue}s[s.length-1]+=r,c+=i}n.trim!==!1&&(s=s.map(e=>he(e)));let l=s.join(`
23
+ `),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===`›`){de.lastIndex=e+1;let t=de.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]===`
24
+ `){a&&(r+=me(``));let e=i?fe(i):void 0;i&&e&&(r+=pe(e))}else t===`
25
+ `&&(i&&fe(i)&&(r+=pe(i)),a&&(r+=me(a)))}return r},_e=/\r?\n/;function O(e,t,n){return String(e).normalize().split(_e).map(e=>ge(e,t,n)).join(`
26
+ `)}var k=e.t(((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 A(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?A(a,t<0?-1:1,n):a}const j={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 ve(e,t){if(typeof e==`string`)return j.aliases.get(e)===t;for(let n of e)if(n!==void 0&&ve(n,t))return!0;return!1}function ye(e,t){if(e===t)return;let n=e.split(`
7
27
  `),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 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(`
28
+ `),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 be=globalThis.process.platform.startsWith(`win`),xe=Symbol(`clack:cancel`);function M(e){return e===xe}function N(e,t){let n=e;n.isTTY&&n.setRawMode(t)}function Se({input:e=a.stdin,output:t=a.stdout,overwrite:n=!0,hideCursor:r=!0}={}){let i=o.createInterface({input:e,output:t,prompt:``,tabSize:1});o.emitKeypressEvents(e,i),e instanceof s.ReadStream&&e.isTTY&&e.setRawMode(!0);let c=(i,{name:a,sequence:s})=>{if(ve([String(i),a,s],`cancel`)){r&&t.write(k.cursor.show),process.exit(0);return}if(!n)return;let l=a===`return`?0:-1,u=a===`return`?-1:0;o.moveCursor(t,l,u,()=>{o.clearLine(t,1,()=>{e.once(`keypress`,c)})})};return r&&t.write(k.cursor.hide),e.once(`keypress`,c),()=>{e.off(`keypress`,c),r&&t.write(k.cursor.show),e instanceof s.ReadStream&&e.isTTY&&!be&&e.setRawMode(!1),i.terminal=!1,i.close()}}const P=e=>`columns`in e&&typeof e.columns==`number`?e.columns:80,Ce=e=>`rows`in e&&typeof e.rows==`number`?e.rows:20;function F(e,t,n,r=n,i){return O(t,P(e??a.stdout)-n.length,{hard:!0,trim:!1}).split(`
9
29
  `).map((e,t)=>{let a=i?i(e,t):e;return`${t===0?r:n}${a}`}).join(`
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(`
30
+ `)}let I=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=a.stdin,output:r=a.stdout,render:i,signal:o,...s}=e;this.opts=s,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=o,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(xe);this._abortSignal.addEventListener(`abort`,()=>{this.state=`cancel`,this.close()},{once:!0})}this.rl=o.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),N(this.input,!0),this.output.on(`resize`,this.render),this.render(),this.once(`submit`,()=>{this.output.write(k.cursor.show),this.output.off(`resize`,this.render),N(this.input,!1),e(this.value)}),this.once(`cancel`,()=>{this.output.write(k.cursor.show),this.output.off(`resize`,this.render),N(this.input,!1),e(xe)})})}_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&&j.aliases.has(t.name)&&this.emit(`cursor`,j.aliases.get(t.name)),j.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`)}ve([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(`
31
+ `),N(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=O(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
32
+ `).length-1;this.output.write(k.cursor.move(-999,e*-1))}render(){let e=O(this._render(this)??``,process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state===`initial`)this.output.write(k.cursor.hide);else{let t=ye(this._prevFrame,e),n=Ce(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(k.cursor.move(0,a-i)),this.output.write(k.erase.lines(1));let t=e.split(`
33
+ `);this.output.write(t[a]),this._prevFrame=e,this.output.write(k.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(k.cursor.move(0,e))}this.output.write(k.erase.down());let t=e.split(`
14
34
  `).slice(a);this.output.write(t.join(`
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
- `:``}${o}
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
- ${a}
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(`
35
+ `)),this._prevFrame=e;return}}this.output.write(k.erase.down())}this.output.write(e),this.state===`initial`&&(this.state=`active`),this._prevFrame=e}}};var we=class extends I{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(k.cursor.move(0,-1)),this.value=e,this.state=`submit`,this.close()}),this.on(`cursor`,()=>{this.value=!this.value})}},Te=class extends I{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?A(n,1,this.options):n,this.changeValue(),this.on(`cursor`,e=>{switch(e){case`left`:case`up`:this.cursor=A(this.cursor,-1,this.options);break;case`down`:case`right`:this.cursor=A(this.cursor,1,this.options);break}this.changeValue()})}},Ee=class extends I{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,i.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 De(){return a.default.platform===`win32`?!!a.default.env.CI||!!a.default.env.WT_SESSION||!!a.default.env.TERMINUS_SUBLIME||a.default.env.ConEmuTask===`{cmd::Cmder}`||a.default.env.TERM_PROGRAM===`Terminus-Sublime`||a.default.env.TERM_PROGRAM===`vscode`||a.default.env.TERM===`xterm-256color`||a.default.env.TERM===`alacritty`||a.default.env.TERMINAL_EMULATOR===`JetBrains-JediTerm`:a.default.env.TERM!==`linux`}const L=De(),Oe=()=>process.env.CI===`true`,R=(e,t)=>L?e:t,ke=R(`◆`,`*`),Ae=R(`■`,`x`),je=R(`▲`,`x`),z=R(`◇`,`o`),B=R(`│`,`|`),V=R(`└`,`—`),Me=R(`●`,`>`),H=R(`○`,` `),Ne=R(`─`,`-`),Pe=R(`╮`,`+`),Fe=R(`├`,`+`),Ie=R(`╯`,`+`),Le=R(`╰`,`+`),Re=R(`●`,`•`),ze=R(`◆`,`*`),Be=R(`▲`,`!`),Ve=R(`■`,`x`),U=e=>{switch(e){case`initial`:case`active`:return(0,i.styleText)(`cyan`,ke);case`cancel`:return(0,i.styleText)(`red`,Ae);case`error`:return(0,i.styleText)(`yellow`,je);case`submit`:return(0,i.styleText)(`green`,z)}},He=e=>{switch(e){case`initial`:case`active`:return(0,i.styleText)(`cyan`,B);case`cancel`:return(0,i.styleText)(`red`,B);case`error`:return(0,i.styleText)(`yellow`,B);case`submit`:return(0,i.styleText)(`green`,B)}},Ue=(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}},We=({cursor:e,options:t,style:n,output:r=process.stdout,maxItems:a=1/0,columnPadding:o=0,rowPadding:s=4})=>{let c=P(r)-o,l=Ce(r),u=(0,i.styleText)(`dim`,`...`),d=Math.max(l-s,0),f=Math.max(Math.min(a,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=O(n(t[r],r===e),c,{hard:!0,trim:!1}).split(`
36
+ `);_.push(i),v+=i.length}if(v>d){let t=0,n=0,r=v,i=e-y,a=(e,t)=>Ue(_,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},W=e=>{let t=e.active??`Yes`,n=e.inactive??`No`;return new we({active:t,inactive:n,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let r=e.withGuide??j.withGuide,a=`${U(this.state)} `,o=r?`${(0,i.styleText)(`gray`,B)} `:``,s=F(e.output,e.message,o,a),c=`${r?`${(0,i.styleText)(`gray`,B)}
37
+ `:``}${s}
38
+ `,l=this.value?t:n;switch(this.state){case`submit`:return`${c}${r?`${(0,i.styleText)(`gray`,B)} `:``}${(0,i.styleText)(`dim`,l)}`;case`cancel`:return`${c}${r?`${(0,i.styleText)(`gray`,B)} `:``}${(0,i.styleText)([`strikethrough`,`dim`],l)}${r?`
39
+ ${(0,i.styleText)(`gray`,B)}`:``}`;default:{let a=r?`${(0,i.styleText)(`cyan`,B)} `:``,o=r?(0,i.styleText)(`cyan`,V):``;return`${c}${a}${this.value?`${(0,i.styleText)(`green`,Me)} ${t}`:`${(0,i.styleText)(`dim`,H)} ${(0,i.styleText)(`dim`,t)}`}${e.vertical?r?`
40
+ ${(0,i.styleText)(`cyan`,B)} `:`
41
+ `:` ${(0,i.styleText)(`dim`,`/`)} `}${this.value?`${(0,i.styleText)(`dim`,H)} ${(0,i.styleText)(`dim`,n)}`:`${(0,i.styleText)(`green`,Me)} ${n}`}
42
+ ${o}
43
+ `}}}}).prompt()},Ge=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`&&M(a)){n[i]=`canceled`,t.onCancel({results:n});continue}n[i]=a}return n},G={message:(e=[],{symbol:t=(0,i.styleText)(`gray`,B),secondarySymbol:n=(0,i.styleText)(`gray`,B),output:r=process.stdout,spacing:a=1,withGuide:o}={})=>{let s=[],c=o??j.withGuide,l=c?n:``,u=c?`${t} `:``,d=c?`${n} `:``;for(let e=0;e<a;e++)s.push(l);let f=Array.isArray(e)?e:e.split(`
44
+ `);if(f.length>0){let[e,...r]=f;e.length>0?s.push(`${u}${e}`):s.push(c?t:``);for(let e of r)e.length>0?s.push(`${d}${e}`):s.push(c?n:``)}r.write(`${s.join(`
25
45
  `)}
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
-
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
-
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)}
46
+ `)},info:(e,t)=>{G.message(e,{...t,symbol:(0,i.styleText)(`blue`,Re)})},success:(e,t)=>{G.message(e,{...t,symbol:(0,i.styleText)(`green`,ze)})},step:(e,t)=>{G.message(e,{...t,symbol:(0,i.styleText)(`green`,z)})},warn:(e,t)=>{G.message(e,{...t,symbol:(0,i.styleText)(`yellow`,Be)})},warning:(e,t)=>{G.warn(e,t)},error:(e,t)=>{G.message(e,{...t,symbol:(0,i.styleText)(`red`,Ve)})}},Ke=(e=``,t)=>{let n=t?.output??process.stdout,r=t?.withGuide??j.withGuide?`${(0,i.styleText)(`gray`,B)}
47
+ ${(0,i.styleText)(`gray`,V)} `:``;n.write(`${r}${e}
48
+
49
+ `)},qe=e=>(0,i.styleText)(`dim`,e),Je=(e,t,n)=>{let r={hard:!0,trim:!1},i=O(e,t,r).split(`
50
+ `),a=i.reduce((e,t)=>Math.max(E(t),e),0);return O(e,t-(i.map(n).reduce((e,t)=>Math.max(E(t),e),0)-a),r)},Ye=(e=``,t=``,n)=>{let r=n?.output??a.default.stdout,o=n?.withGuide??j.withGuide,s=n?.format??qe,c=[``,...Je(e,P(r)-6,s).split(`
51
+ `).map(s),``],l=E(t),u=Math.max(c.reduce((e,t)=>{let n=E(t);return n>e?n:e},0),l)+2,d=c.map(e=>`${(0,i.styleText)(`gray`,B)} ${e}${` `.repeat(u-E(e))}${(0,i.styleText)(`gray`,B)}`).join(`
52
+ `),f=o?`${(0,i.styleText)(`gray`,B)}
53
+ `:``,p=o?Fe:Le;r.write(`${f}${(0,i.styleText)(`green`,z)} ${(0,i.styleText)(`reset`,t)} ${(0,i.styleText)(`gray`,Ne.repeat(Math.max(u-l-1,1))+Pe)}
36
54
  ${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(_)}
42
- `):n.write(`${a} ${h}
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(`
55
+ ${(0,i.styleText)(`gray`,p+Ne.repeat(u+2)+Ie)}
56
+ `)},Xe=e=>(0,i.styleText)(`magenta`,e),Ze=({indicator:e=`dots`,onCancel:t,output:n=process.stdout,cancelMessage:r,errorMessage:a,frames:o=L?[`◒`,`◐`,`◓`,`◑`]:[`•`,`o`,`O`,`0`],delay:s=L?80:120,signal:c,...l}={})=>{let u=Oe(),d,f,p=!1,m=!1,h=``,g,_=performance.now(),v=P(n),y=l?.styleFrame??Xe,b=e=>{let n=e>1?a??j.messages.error:r??j.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),c&&c.addEventListener(`abort`,S)},te=()=>{process.removeListener(`uncaughtExceptionMonitor`,x),process.removeListener(`unhandledRejection`,x),process.removeListener(`SIGINT`,S),process.removeListener(`SIGTERM`,S),process.removeListener(`exit`,b),c&&c.removeEventListener(`abort`,S)},ne=()=>{if(g===void 0)return;u&&n.write(`
57
+ `);let e=O(g,v,{hard:!0,trim:!1}).split(`
58
+ `);e.length>1&&n.write(k.cursor.up(e.length-1)),n.write(k.cursor.to(0)),n.write(k.erase.down())},re=e=>e.replace(/\.+$/,``),C=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]`},w=l.withGuide??j.withGuide,ie=(t=``)=>{p=!0,d=Se({output:n}),h=re(t),_=performance.now(),w&&n.write(`${(0,i.styleText)(`gray`,B)}
59
+ `);let r=0,a=0;ee(),f=setInterval(()=>{if(u&&h===g)return;ne(),g=h;let t=y(o[r]),i;if(u)i=`${t} ${h}...`;else if(e===`timer`)i=`${t} ${h} ${C(_)}`;else{let e=`.`.repeat(Math.floor(a)).slice(0,3);i=`${t} ${h}${e}`}let s=O(i,v,{hard:!0,trim:!1});n.write(s),r=r+1<o.length?r+1:0,a=a<4?a+.125:0},s)},T=(t=``,r=0,a=!1)=>{if(!p)return;p=!1,clearInterval(f),ne();let o=r===0?(0,i.styleText)(`green`,z):r===1?(0,i.styleText)(`red`,Ae):(0,i.styleText)(`red`,je);h=t??h,a||(e===`timer`?n.write(`${o} ${h} ${C(_)}
60
+ `):n.write(`${o} ${h}
61
+ `)),te(),d()};return{start:ie,stop:(e=``)=>T(e,0),message:(e=``)=>{h=re(e??h)},cancel:(e=``)=>T(e,1),error:(e=``)=>T(e,2),clear:()=>T(``,0,!0),get isCancelled(){return m}}},K=(e,t)=>e.includes(`
44
62
  `)?e.split(`
45
63
  `).map(e=>t(e)).join(`
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)}
47
- `:``}${a}
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(`
64
+ `):t(e),q=e=>{let t=(e,t)=>{let n=e.label??String(e.value);switch(t){case`disabled`:return`${(0,i.styleText)(`gray`,H)} ${K(n,e=>(0,i.styleText)(`gray`,e))}${e.hint?` ${(0,i.styleText)(`dim`,`(${e.hint??`disabled`})`)}`:``}`;case`selected`:return`${K(n,e=>(0,i.styleText)(`dim`,e))}`;case`active`:return`${(0,i.styleText)(`green`,Me)} ${n}${e.hint?` ${(0,i.styleText)(`dim`,`(${e.hint})`)}`:``}`;case`cancelled`:return`${K(n,e=>(0,i.styleText)([`strikethrough`,`dim`],e))}`;default:return`${(0,i.styleText)(`dim`,H)} ${K(n,e=>(0,i.styleText)(`dim`,e))}`}};return new Te({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let n=e.withGuide??j.withGuide,r=`${U(this.state)} `,a=`${He(this.state)} `,o=F(e.output,e.message,a,r),s=`${n?`${(0,i.styleText)(`gray`,B)}
65
+ `:``}${o}
66
+ `;switch(this.state){case`submit`:{let r=n?`${(0,i.styleText)(`gray`,B)} `:``;return`${s}${F(e.output,t(this.options[this.cursor],`selected`),r)}`}case`cancel`:{let r=n?`${(0,i.styleText)(`gray`,B)} `:``;return`${s}${F(e.output,t(this.options[this.cursor],`cancelled`),r)}${n?`
67
+ ${(0,i.styleText)(`gray`,B)}`:``}`}default:{let r=n?`${(0,i.styleText)(`cyan`,B)} `:``,a=n?(0,i.styleText)(`cyan`,V):``,o=s.split(`
68
+ `).length,c=n?2:1;return`${s}${r}${We({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:r.length,rowPadding:o+c,style:(e,n)=>t(e,e.disabled?`disabled`:n?`active`:`inactive`)}).join(`
51
69
  ${r}`)}
52
- ${i}
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)}
70
+ ${a}
71
+ `}}}}).prompt()},Qe=`${(0,i.styleText)(`gray`,B)} `,J={message:async(e,{symbol:t=(0,i.styleText)(`gray`,B)}={})=>{process.stdout.write(`${(0,i.styleText)(`gray`,B)}
54
72
  ${t} `);let n=3;for await(let t of e){t=t.replace(/\n/g,`
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()}
62
- ${r}${i}
63
- ${a}${e}
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.7`,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,updated:!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,updated:!1};else return{success:!1,updated:!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,updated:!0}}catch(t){let n=t instanceof Error?t.message:String(t);return{success:!1,updated:!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],
85
- });
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 (if needed)`,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(`
73
+ ${Qe}`),t.includes(`
74
+ `)&&(n=3+(0,i.stripVTControlCharacters)(t.slice(t.lastIndexOf(`
75
+ `))).length);let e=(0,i.stripVTControlCharacters)(t).length;n+e<process.stdout.columns?(n+=e,process.stdout.write(t)):(process.stdout.write(`
76
+ ${Qe}${t.trimStart()}`),n=3+(0,i.stripVTControlCharacters)(t.trimStart()).length)}process.stdout.write(`
77
+ `)},info:e=>J.message(e,{symbol:(0,i.styleText)(`blue`,Re)}),success:e=>J.message(e,{symbol:(0,i.styleText)(`green`,ze)}),step:e=>J.message(e,{symbol:(0,i.styleText)(`green`,z)}),warn:e=>J.message(e,{symbol:(0,i.styleText)(`yellow`,Be)}),warning:e=>J.warn(e),error:e=>J.message(e,{symbol:(0,i.styleText)(`red`,Ve)})},$e=e=>new Ee({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??j.withGuide,n=`${`${t?`${(0,i.styleText)(`gray`,B)}
78
+ `:``}${U(this.state)} `}${e.message}
79
+ `,r=e.placeholder?(0,i.styleText)(`inverse`,e.placeholder[0])+(0,i.styleText)(`dim`,e.placeholder.slice(1)):(0,i.styleText)([`inverse`,`hidden`],`_`),a=this.userInput?this.userInputWithCursor:r,o=this.value??``;switch(this.state){case`error`:{let e=this.error?` ${(0,i.styleText)(`yellow`,this.error)}`:``,r=t?`${(0,i.styleText)(`yellow`,B)} `:``,o=t?(0,i.styleText)(`yellow`,V):``;return`${n.trim()}
80
+ ${r}${a}
81
+ ${o}${e}
82
+ `}case`submit`:{let e=o?` ${(0,i.styleText)(`dim`,o)}`:``;return`${n}${t?(0,i.styleText)(`gray`,B):``}${e}`}case`cancel`:{let e=o?` ${(0,i.styleText)([`strikethrough`,`dim`],o)}`:``,r=t?(0,i.styleText)(`gray`,B):``;return`${n}${r}${e}${o.trim()?`
83
+ ${r}`:``}`}default:return`${n}${t?`${(0,i.styleText)(`cyan`,B)} `:``}${a}
84
+ ${t?(0,i.styleText)(`cyan`,V):``}
85
+ `}}}).prompt();var et=class{info(e){process.stdout.write(`${b.default.blue(`ℹ ${e}`)}\n`)}warn(e){process.stderr.write(`${b.default.yellow(`⚠ ${e}`)}\n`)}error(e){process.stderr.write(`${b.default.red(`✘ ${e}`)}\n`)}success(e){process.stdout.write(`${b.default.green(`✔ ${e}`)}\n`)}step(e){process.stdout.write(`○ ${e}\n`)}note(e,t){Ye(e,t)}log(e){process.stdout.write(`${e}\n`)}spinner(){return Ze()}json(e){process.stdout.write(`${JSON.stringify(e,null,2)}\n`)}cancel(e){process.stderr.write(`${b.default.red(`✘ ${e}`)}\n`)}fatal(e,t){if(process.stderr.write(`${b.default.red(`✘ ${e}`)}\n`),t){let e=`${b.default.red(t instanceof Error?t.stack??String(t):String(t))}\n`;process.stderr.write(e)}throw t instanceof Error?t:Error(e)}finish(e,t){Ke(e)}async flush(){return new Promise(e=>{process.stderr.write(``,()=>e())})}},tt=class{constructor(e){this.options=e,this.originalStdoutWrite=process.stdout.write,e.isJson?this.reporter=new x:e.isQuiet?this.reporter=new S:this.reporter=new et}info(e){this.reporter.info(e)}warn(e){this.reporter.warn(e)}error(e){this.reporter.error(e)}success(e){this.reporter.success(e)}step(e){this.reporter.step(e)}note(e,t){this.reporter.note(e,t)}log(e){this.reporter.log(e)}spinner(){return this.reporter.spinner()}json(e){this.reporter.json(e)}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.reporter.cancel(e)}fatal(e,t){this.reporter.fatal(e,t)}finish(e,t){this.reporter.finish(e,t)}async flush(){await this.reporter.flush()}};async function nt(e=process.cwd(),r){if(r?.compilerOptions?.types){let e=r.compilerOptions.types;if(e.includes(`vite`)||e.includes(`vite/client`))return`vite`}try{let r=n.default.join(e,`package.json`),i=await t.default.readFile(r,`utf-8`),a=JSON.parse(i);if({...a.dependencies,...a.devDependencies}.vite)return`vite`}catch{}try{return await t.default.access(n.default.join(e,`vite.config.ts`)),`vite`}catch{}try{return await t.default.access(n.default.join(e,`vite.config.js`)),`vite`}catch{}return(await rt(e,r)).length>0?`bun-fullstack`:`vanilla`}async function rt(e=process.cwd(),r){let i=[];try{let r=n.default.join(e,`bunfig.toml`),a=await t.default.readFile(r,`utf-8`);(a.includes(`[serve]`)||a.includes(`[serve.static]`))&&i.push(`serve`),a.includes(`[build]`)&&i.push(`build`)}catch{}if(i.includes(`serve`)&&i.includes(`build`))return i;let{walk:a}=await Promise.resolve().then(()=>ot),o=await a(e),s=i.includes(`serve`),c=i.includes(`build`);for(let e of o)try{let n=await t.default.readFile(e,`utf-8`);if(!s&&(n.includes(`Bun.serve`)||n.includes(`serve(`))&&(/from\s+['"]bun['"]/.test(n)||n.includes(`Bun.serve`))&&(s=!0,i.push(`serve`)),!c&&(n.includes(`Bun.build`)||n.includes(`build(`))&&(/from\s+['"]bun['"]/.test(n)||n.includes(`Bun.build`))&&(c=!0,i.push(`build`)),s&&c)break}catch{}return i}async function it(e=process.cwd(),r){let i=process.env.npm_config_user_agent?.toString()||``;if(i.includes(`pnpm`))return`pnpm`;if(i.includes(`yarn`))return`yarn`;if(i.includes(`bun`))return`bun`;if(i.includes(`npm`))return`npm`;let a=r?.path?n.default.dirname(r.path):e;for(;a!==n.default.parse(a).root;){try{let e=n.default.join(a,`package.json`),r=await t.default.readFile(e,`utf-8`),i=JSON.parse(r);if(i.packageManager){if(i.packageManager.startsWith(`pnpm`))return`pnpm`;if(i.packageManager.startsWith(`yarn`))return`yarn`;if(i.packageManager.startsWith(`bun`))return`bun`}}catch{}let e=[];try{e=await t.default.readdir(a)}catch{}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`;a=n.default.dirname(a)}return`npm`}async function at(e=process.cwd(),r){let i=r;if(!i){let{findTsConfig:t,loadTsConfig:n}=await Promise.resolve().then(()=>ft),r=await t(e);r&&(i=await n(r))}if(i?.compilerOptions?.rootDir){let t=i.compilerOptions.rootDir,r=n.default.relative(e,t);return r&&r!==`.`&&!r.startsWith(`..`)&&!n.default.isAbsolute(r)?`./${r}/env.ts`:`./env.ts`}try{return await t.default.access(n.default.join(e,`src`)),`./src/env.ts`}catch{return`./env.ts`}}var ot=e.n({getEnvExampleKeys:()=>dt,parseEnvExample:()=>ct,resolveImportPaths:()=>lt,scanProjectEnvKeys:()=>ut,walk:()=>st});async function st(e,r=[]){try{let i=await t.default.readdir(e,{withFileTypes:!0});for(let t of i)if(t.isDirectory()){let i=t.name;if(i===`node_modules`||i===`dist`||i===`build`||i===`.git`||i===`.turbo`||i===`scratch`)continue;await st(n.default.join(e,i),r)}else t.isFile()&&/\.(ts|tsx|js|jsx)$/.test(t.name)&&!t.name.endsWith(`.d.ts`)&&r.push(n.default.join(e,t.name))}catch{}return r}function ct(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))}function lt(e,t,r){if(e.startsWith(`.`))return[n.default.resolve(n.default.dirname(r),e)];if(n.default.isAbsolute(e))return[e];let i=t.compilerOptions||{},a=i.baseUrl||n.default.dirname(t.path),o=i.paths||{},s=[];for(let[e,t]of Object.entries(o)){let n=e.endsWith(`*`),r=e.replace(/\*$/,``);s.push({cleanPattern:r,targets:Array.isArray(t)?t:[t],hadStar:n})}s.sort((e,t)=>t.cleanPattern.length-e.cleanPattern.length);for(let{cleanPattern:t,targets:r,hadStar:i}of s)if(i&&e.startsWith(t)||!i&&e===t){let i=e.slice(t.length);return r.map(e=>{let t=`${e.replace(/\*$/,``)}${i}`;return n.default.resolve(a,t)})}return i.baseUrl?[n.default.resolve(a,e)]:[]}async function ut(e,r,i){let a=[],o=await st(e),s=i?i.replace(/\.(ts|js|tsx|jsx)$/,``):null;for(let e of o)try{let i=await t.default.readFile(e,`utf-8`),o=i.matchAll(/process\.env\.([A-Z_][A-Z0-9_]*)/g);for(let e of o)e[1]&&a.push(e[1]);let c=i.matchAll(/import\.meta\.env\.([A-Z_][A-Z0-9_]*)/g);for(let e of c)e[1]&&a.push(e[1]);if(s){let t=i.matchAll(/import\s+[^;]*from\s+['"]([^'"]+)['"]/g);for(let o of t){let t=o[1],c=[];if(r?c=lt(t,r,e):t.startsWith(`.`)&&(c=[n.default.resolve(n.default.dirname(e),t)]),c.some(e=>e.replace(/\.(ts|js|tsx|jsx)$/,``)===s)){let e=i.matchAll(/\benv\.([A-Z_][A-Z0-9_]*)/g);for(let t of e)t[1]&&a.push(t[1])}}}}catch{}return Array.from(new Set(a))}async function dt(e=process.cwd(),r,i){let a=n.default.join(e,`.env.example`);try{let e=ct(await t.default.readFile(a,`utf-8`));if(e.length>0)return{keys:e,source:`.env.example`}}catch{}let o=await ut(e,r,i);return o.length>0?{keys:o,source:`project`}:null}var ft=e.n({checkTsConfig:()=>mt,findTsConfig:()=>Y,loadTsConfig:()=>X});const pt=(0,l.createRequire)(require(`url`).pathToFileURL(__filename).href).resolve;async function Y(e=process.cwd()){let r=[`tsconfig.app.json`,`tsconfig.json`,`tsconfig.base.json`,`tsconfig.node.json`],i=e;for(;i!==n.default.parse(i).root;){for(let e of r){let r=n.default.join(i,e);try{return await t.default.access(r),r}catch{}}i=n.default.dirname(i)}return null}async function X(e,r=new Set){let i=n.default.resolve(e);if(r.has(i))throw Error(`Circular extends dependency detected in tsconfig.json: ${i}`);r.add(i);let a=``;try{a=await t.default.readFile(e,`utf-8`)}catch{return{path:e,compilerOptions:{}}}let o=(0,u.parse)(a)||{},s=o.compilerOptions||{},c={};if(o.extends){let t=Array.isArray(o.extends)?o.extends:[o.extends];for(let i of t){let t;if(i.startsWith(`.`)||n.default.isAbsolute(i))t=n.default.resolve(n.default.dirname(e),i);else try{t=pt(i,{paths:[n.default.dirname(e)]})}catch{t=n.default.resolve(n.default.dirname(e),`node_modules`,i)}let a={...(await X(t,r)).compilerOptions};a.baseUrl&&=n.default.resolve(n.default.dirname(t),a.baseUrl),a.rootDir&&=n.default.resolve(n.default.dirname(t),a.rootDir),c={...c,...a}}}let l={...s};return l.baseUrl&&=n.default.resolve(n.default.dirname(e),l.baseUrl),l.rootDir&&=n.default.resolve(n.default.dirname(e),l.rootDir),c={...c,...l},{...o,path:e,compilerOptions:c}}async function mt(e=process.cwd()){let t=await Y(e);if(!t)return{status:`not_found`};let r=n.default.basename(t);try{let e=await X(t);return e?.compilerOptions?.strict===!0?{status:`strict`,file:r,parsed:e}:{status:`not_strict`,file:r,parsed:e}}catch{return{status:`not_found`}}}var ht=class{async findTsConfig(e=process.cwd()){return Y(e)}async loadTsConfig(e,t=new Set){return X(e,t)}async getEnvExampleKeys(e=process.cwd(),t,n){return dt(e,t,n)}async suggestDefaultEnvPath(e=process.cwd(),t){return at(e,t)}async checkTsConfig(e=process.cwd()){return mt(e)}async detectFramework(e=process.cwd(),t){return nt(e,t)}async detectBunFeatures(e=process.cwd(),t){return rt(e,t)}async detectPackageManager(e=process.cwd(),t){return it(e,t)}};const Z=e=>b.default.cyan(e),gt=b.default.blue(`⛯`);function _t(e){try{let t=(0,f.parseModule)(e.code),n=e.code,r=t.exports.default;if(r&&typeof r==`object`&&`$type`in r&&r.$type===`function-call`){let e=r;if((e.$callee||JSON.stringify(r))===`defineConfig`&&e.$args){let t=e.$args[0];if(t&&typeof t==`object`&&`$type`in t&&(t.$type===`arrow-function-expression`||t.$type===`function-expression`))return{success:!1,updated:!1,error:`The 'defineConfig' callback form is currently not supported for automatic mutation. Please add the plugin manually.`};r=t}}if(!r||typeof r!=`object`||typeof r==`object`&&`$type`in r)return{success:!1,updated:!1,error:`Could not find default export object in Vite config`};if(r.plugins||=[],Array.isArray(r.plugins))if(!/\barkenv(?:Vite)?Plugin\b/.test(n))t.imports.$add({from:`@arkenv/vite-plugin`,local:`arkenvVitePlugin`,imported:`default`}),e.envImportPath&&t.imports.$add({from:e.envImportPath,imported:`Env`}),r.plugins.push(`__ARK_PLUGIN_PLACEHOLDER__`);else return{success:!0,updated:!1};else return{success:!1,updated:!1,error:`The 'plugins' property in your Vite config is not an array.`};let i=(0,f.generateCode)(t,{format:(0,f.detectCodeFormat)(n)}).code,a=e.envImportPath?`arkenvVitePlugin(Env)`:`arkenvVitePlugin()`;return i=i.replace(/['"]__ARK_PLUGIN_PLACEHOLDER__['"]/g,a),{success:!0,updated:!0,code:i}}catch(e){return{success:!1,updated:!1,error:`Failed to parse Vite config: ${e instanceof Error?e.message:String(e)}`}}}async function vt(){for(let e of[`vite.config.ts`,`vite.config.js`,`vite.config.mts`,`vite.config.mjs`]){let r=n.default.resolve(process.cwd(),e);try{return await t.default.access(r),r}catch{}}return null}async function yt(){for(let e of[`bunfig.toml`,`bun.setup.ts`,`bun.setup.js`]){let r=n.default.resolve(process.cwd(),e);try{return await t.default.access(r),r}catch{}}return null}async function bt(e,t,n){try{let r=_t({code:await e.readFile(t),envImportPath:n});return r.success&&r.updated&&r.code&&await e.writeFile(t,r.code),r.success?r.updated===void 0?{success:!0}:{success:!0,updated:r.updated}:{success:!1,error:r.error}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}async function xt(e,t){if(!t||t.length===0)return{success:!0,instructions:r.default`
86
+ ${b.default.green(`✔`)} Use ${b.default.bold(`Vanilla`)} Bun runtime integration.
87
+ Access validated variables via your ${Z(`env`)} object for typesafety.
88
+ Primarily used for ${b.default.cyan(`server-side`)} or runtime-only validation.
89
+ No plugins are required.
90
+ `};let n=t.includes(`serve`),i=t.includes(`build`),a=``;return n&&(a+=r.default`
91
+ ${b.default.bold(`Bun Fullstack (Bun.serve) Integration:`)}
92
+ To inline environment variables (e.g. ${Z(`PUBLIC_*`)}) in your ${b.default.cyan(`client-side`)} code, add the plugin to ${Z(`bunfig.toml`)}:
93
+
94
+ [serve.static]
95
+ plugins = ["@arkenv/bun-plugin"]
96
+
97
+ `),i&&(a&&(a+=`
98
+ `),a+=r.default`
99
+ ${b.default.bold(`Bun Fullstack programmatic bundling (Bun.build):`)}
100
+ To inline environment variables (e.g. ${Z(`PUBLIC_*`)}) in your custom ${b.default.cyan(`client-side`)} build script, add the plugin to your ${Z(`Bun.build`)} call:
101
+
102
+ ${Z(`import arkenv from "@arkenv/bun-plugin";`)}
103
+
104
+ await Bun.build({
105
+ entrypoints: ["./index.ts"],
106
+ outdir: "./dist",
107
+ ${b.default.green(`plugins: [arkenv]`)}
108
+ });
109
+ `),{success:!0,instructions:a.trim()}}async function St(e,t){let r=t||await Y();if(!r)return{status:`not_found`};let i=n.default.basename(r);try{let t=await e.readFile(r);if((0,u.parse)(t)?.compilerOptions?.strict===!0)return{status:`already_strict`,file:i};let n=(0,u.applyEdits)(t,(0,u.modify)(t,[`compilerOptions`,`strict`],!0,{formattingOptions:{insertSpaces:!0,tabSize:2}}));return await e.writeFile(r,n),{status:`updated`,file:i}}catch{return{status:`error`,file:i}}}var Ct=class{constructor(e,t){this.isQuiet=e,this.stdio=t}async exists(e){try{return await t.default.access(e),!0}catch{return!1}}async readFile(e){return t.default.readFile(e,`utf-8`)}async writeFile(e,n){await t.default.writeFile(e,n,`utf-8`)}async mkdir(e,n){await t.default.mkdir(e,{recursive:n})}async execute(e,t=[]){return new Promise((n,r)=>{let i=(0,d.spawn)(e,t,{stdio:this.isQuiet?`pipe`:this.stdio,shell:!1}),a=``,o=``,s=1e4;this.isQuiet&&(i.stdout?.on(`data`,e=>{a=(a+e.toString()).slice(-s)}),i.stderr?.on(`data`,e=>{o=(o+e.toString()).slice(-s)})),i.on(`close`,(e,t)=>{if(e===0)n();else{let n=e===null?`Command terminated by signal ${t}`:`Command failed with code ${e}`;this.isQuiet&&(a&&(n+=`\n${b.default.dim(`STDOUT:`)}\n${a}`),o&&(n+=`\n${b.default.red(`STDERR:`)}\n${o}`)),r(Error(n))}}),i.on(`error`,r)})}async updateTsConfigToStrict(e){return St(this,e)}async findViteConfig(){return vt()}async findBunConfig(){return yt()}async bootstrapViteConfig(e,t){return bt(this,e,t)}async bootstrapBunConfig(e,t){return xt(e,t)}async safeAppend(e,t,n){let{safeAppend:r}=await Promise.resolve().then(()=>m);return r(e,t,n)}};function wt(e){return!M(e)&&Object.values(e).every(e=>e!==null)}const Q={overwriteEnvSchemaFile:(e=`./src/env.ts`)=>async()=>{if(c.default.existsSync(n.default.resolve(process.cwd(),e))){let t=await W({message:b.default.yellow(`An existing ArkEnv configuration was found at ${Z(e)}. Do you want to overwrite it?`),initialValue:!1,active:`Yes (override my configuration)`,inactive:`No (abort)`});return M(t)||!t?null:t}return!0},framework:e=>async()=>{let t=await q({message:`Select your framework or build tool:`,initialValue:e?.framework,options:[{value:`vanilla`,label:`Vanilla${e?.framework===`vanilla`?` (Detected)`:``}`,hint:`Node.js, Bun, server-side or runtime-only validation`},{value:`vite`,label:`Vite${e?.framework===`vite`?` (Detected)`:``}`,hint:`Client-side and static inlining validation`},{value:`bun-fullstack`,label:`Bun fullstack dev server${e?.framework===`bun-fullstack`?` (Detected)`:``}`,hint:`Client-side bundling and Bun.serve integration`}]});return M(t)?null:t},bunBuild:(e=!1)=>async()=>{let t=await W({message:`Optional: Would you also like to bootstrap a custom Bun.build script for programmatic bundling?`,initialValue:e});return M(t)?null:t},useDefaultPath:(e=`./src/env.ts`)=>async()=>{let t=await W({message:`Use default config path (${Z(e)})?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No, let me customize it`});return M(t)?null:t},path:(e=`./src/env.ts`)=>async({results:t})=>{if(t.useDefaultPath===null)return null;if(!t.useDefaultPath){let t=await $e({message:`Where should we create the ArkEnv config?`,placeholder:e,initialValue:e});if(M(t))return null;let n=typeof t==`string`?t.trim():``;return n===``?e:n}return e},installTypeDefinitions:async({results:e})=>{if(e.framework===null)return null;if(e.framework===`vite`||e.framework===`bun`){let t=e.framework===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,r=n.default.dirname(n.default.resolve(process.cwd(),e.path||`./src/env.ts`)),i=n.default.join(r,t);if(c.default.existsSync(i))return!0;let a=await W({message:`Establish ${Z(t)} for typesafe environment variables?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No`});return M(a)?null:a}return!0},envDtsHandling:async({results:e})=>{if(e.installTypeDefinitions===null)return null;if(!e.installTypeDefinitions||e.framework!==`vite`&&e.framework!==`bun`)return`skip`;let t=e.framework===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,r=n.default.dirname(n.default.resolve(process.cwd(),e.path||`./src/env.ts`)),i=n.default.join(r,t);if(c.default.existsSync(i)){let e=await q({message:`Found existing ${Z(t)}. How should we handle ArkEnv types?`,options:[{value:`append`,label:`Append types safely (if needed)`,hint:`Recommended`},{value:`overwrite`,label:`Overwrite entirely`,hint:`Destructive`},{value:`skip`,label:`Skip`}]});return M(e)?null:e}return`overwrite`},validator:async()=>{let e=await q({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`}]});return M(e)?null:e},useEnvExample:(e,t=`.env.example`)=>async()=>{if(e&&e.length>0){let n=await W({message:t===`.env.example`?`Detected ${Z(`.env.example`)} with ${e.length} keys. Use them for your schema?`:`Detected ${e.length} environment variables used in your project. Use them for your schema?`,active:`Yes (Recommended)`,initialValue:!0});return M(n)?null:n}return!1}};async function Tt(e,t=!1){let n=e?.defaultEnvPath||`./src/env.ts`,r=e?.envKeys||null,i=e?.envKeysSource||`.env.example`;if(t){let t=e?.framework||`vanilla`,i;return(t===`vite`||t===`bun-fullstack`)&&(i=e?.hasTypeFile?`append`:`overwrite`),(0,p.shake)({path:n,validator:`arktype`,framework:t,bunFeatures:t===`bun-fullstack`?e?.bunFeatures??[`serve`]:void 0,language:`ts`,overwriteEnvSchemaFile:!0,installTypeDefinitions:t!==`vanilla`,installSkill:!1,envDtsHandling:i,envKeys:r??void 0})}let a=await Ge({overwriteEnvSchemaFile:Q.overwriteEnvSchemaFile(n),framework:Q.framework(e),bunBuild:({results:t})=>t.framework===`bun-fullstack`?Q.bunBuild(e?.bunFeatures?.includes(`build`)||t.framework===`bun-fullstack`&&e?.framework===`bun-fullstack`&&e?.bunFeatures?.includes(`build`))():Promise.resolve(void 0),useDefaultPath:Q.useDefaultPath(n),path:Q.path(n),installTypeDefinitions:Q.installTypeDefinitions,envDtsHandling:Q.envDtsHandling,validator:Q.validator,useEnvExample:Q.useEnvExample(r,i)},{onCancel:()=>{}});if(!wt(a))return null;let o=a.framework===`bun-fullstack`?a.bunBuild?[`serve`,`build`]:[`serve`]:void 0;return(0,p.shake)({...a,bunFeatures:o,language:`ts`,installSkill:!1,envKeys:a.useEnvExample?r??void 0:void 0})}var Et=class{async confirm(e,t=!0){let n=await W({message:e,initialValue:t});return M(n)?null:n}async runWizard(e,t=!1){return Tt(e,t)}},Dt=class{constructor(e,t={}){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=t.logger||new tt({isQuiet:this.isQuiet,isJson:this.isJson,isYes:this.isYes})}},Ot=`0.0.9`,kt=class{constructor(e){this.logger=e}async execute(){this.logger.log(`ArkEnv CLI v${Ot}`),this.logger.log(`\n${b.default.bold(`Usage:`)}`),this.logger.log(` arkenv init Set up ArkEnv in your project`),this.logger.log(`\n${b.default.bold(`Options:`)}`),this.logger.log(` --yes, -y Skip prompts and use defaults (also passed to skill processes)`),this.logger.log(` --agent, -a Agent mode: --yes --quiet --json`),this.logger.log(` --quiet, -q Quiet mode: Suppress output, capture logs on failure`),this.logger.log(` --json, -j Output structured JSON to stdout`),this.logger.log(` --help, -h Show this help message`)}};const At=(e,t)=>{let n=e?.length?e.map(e=>`\t\t${e}: "string = ''",`).join(`
92
110
  `):` NODE_ENV: "'development' | 'production' | 'test' = 'development'",
93
- PORT: "number.port = 3000",`;return t===`vite`?g.default`
111
+ PORT: "number.port = 3000",`;return t===`vite`?r.default`
94
112
  import { type } from "arkenv";
95
113
 
96
114
  /**
97
115
  * Environment variable schema.
98
116
  * In Vite, use \`@arkenv/vite-plugin\` to validate these at build-time
99
- * and provide typesafety for \`import.meta.env\`.
117
+ * and provide typesafety for \`import.meta.env\` on the client-side.
100
118
  */
101
119
  export const Env = type({
102
120
  ${n}
103
121
  });
104
- `:t===`bun`?g.default`
122
+ `:t===`bun-fullstack`?r.default`
105
123
  import { type } from "arkenv";
106
124
 
107
125
  /**
108
126
  * Environment variable schema.
109
- * In Bun, use \`@arkenv/bun-plugin\` to validate these at build-time
110
- * and provide typesafety for \`process.env\`.
127
+ * In Bun Fullstack, use \`@arkenv/bun-plugin\` to validate these at build-time
128
+ * and provide typesafety for \`process.env\` on the client-side.
111
129
  */
112
130
  export const Env = type({
113
131
  ${n}
114
132
  });
115
- `:g.default`
133
+ `:r.default`
116
134
  import arkenv, { type } from "arkenv";
117
135
 
136
+ /**
137
+ * Environment variable schema for server-side or runtime-only validation.
138
+ */
118
139
  export const Env = type({
119
140
  ${n}
120
141
  });
121
142
 
122
143
  export const env = arkenv(Env);
123
- `},lt=e=>g.default`
144
+ `},jt=e=>r.default`
124
145
  /// <reference types="vite/client" />
125
146
 
126
147
  type ImportMetaEnvAugmented =
127
148
  import("@arkenv/vite-plugin").ImportMetaEnvAugmented<
128
- typeof import("./${m.default.basename(e).replace(/\.(ts|js|tsx|jsx)$/,``)}").Env
149
+ typeof import("./${n.default.basename(e).replace(/\.(ts|js|tsx|jsx)$/,``)}").Env
129
150
  >;
130
151
 
131
152
  interface ImportMetaEnv extends ImportMetaEnvAugmented {}
@@ -133,88 +154,94 @@ ${n}
133
154
  interface ImportMeta {
134
155
  readonly env: ImportMetaEnv;
135
156
  }
136
- `,ut=e=>g.default`
157
+ `,Mt=e=>r.default`
137
158
  /// <reference types="bun-types" />
138
159
 
139
160
  type ProcessEnvAugmented = import("@arkenv/bun-plugin").ProcessEnvAugmented<
140
- typeof import("./${m.default.basename(e).replace(/\.(ts|js|tsx|jsx)$/,``)}").Env
161
+ typeof import("./${n.default.basename(e).replace(/\.(ts|js|tsx|jsx)$/,``)}").Env
141
162
  >;
142
163
 
143
164
  declare namespace NodeJS {
144
165
  interface ProcessEnv extends ProcessEnvAugmented {}
145
166
  }
146
- `,dt=(e,t)=>{let n=e?.length?e.map(e=>`\t\t${e}: v.optional(v.string(), ""),`).join(`
167
+ `,Nt=(e,t)=>{let n=e?.length?e.map(e=>`\t\t${e}: v.optional(v.string(), ""),`).join(`
147
168
  `):` 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`
169
+ PORT: v.optional(v.pipe(v.string(), v.transform(Number), v.number(), v.integer(), v.minValue(1), v.maxValue(65535)), 3000),`;return t===`vite`?r.default`
149
170
  import * as v from "valibot";
150
171
 
151
172
  /**
152
173
  * Environment variable schema.
153
174
  * In Vite, use \`@arkenv/vite-plugin\` to validate these at build-time
154
- * and provide typesafety for \`import.meta.env\`.
175
+ * and provide typesafety for \`import.meta.env\` on the client-side.
155
176
  */
156
177
  export const Env = v.object({
157
178
  ${n}
158
179
  });
159
- `:t===`bun`?g.default`
180
+ `:t===`bun-fullstack`?r.default`
160
181
  import * as v from "valibot";
161
182
 
162
183
  /**
163
184
  * Environment variable schema.
164
- * In Bun, use \`@arkenv/bun-plugin\` to validate these at build-time
165
- * and provide typesafety for \`process.env\`.
185
+ * In Bun Fullstack, use \`@arkenv/bun-plugin\` to validate these at build-time
186
+ * and provide typesafety for \`process.env\` on the client-side.
166
187
  */
167
188
  export const Env = v.object({
168
189
  ${n}
169
190
  });
170
- `:g.default`
191
+ `:r.default`
171
192
  import arkenv from "arkenv/standard";
172
193
  import * as v from "valibot";
173
194
 
195
+ /**
196
+ * Environment variable schema for server-side or runtime-only validation.
197
+ */
174
198
  export const Env = v.object({
175
199
  ${n}
176
200
  });
177
201
 
178
202
  export const env = arkenv(Env);
179
- `},ft=(e,t)=>{let n=e?.length?e.map(e=>`\t\t${e}: z.string().default(""),`).join(`
203
+ `},Pt=(e,t)=>{let n=e?.length?e.map(e=>`\t\t${e}: z.string().default(""),`).join(`
180
204
  `):` 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`
205
+ PORT: z.coerce.number().int().min(1).max(65535).default(3000),`;return t===`vite`?r.default`
182
206
  import { z } from "zod";
183
207
 
184
208
  /**
185
209
  * Environment variable schema.
186
210
  * In Vite, use \`@arkenv/vite-plugin\` to validate these at build-time
187
- * and provide typesafety for \`import.meta.env\`.
211
+ * and provide typesafety for \`import.meta.env\` on the client-side.
188
212
  */
189
213
  export const Env = z.object({
190
214
  ${n}
191
215
  });
192
- `:t===`bun`?g.default`
216
+ `:t===`bun-fullstack`?r.default`
193
217
  import { z } from "zod";
194
218
 
195
219
  /**
196
220
  * Environment variable schema.
197
- * In Bun, use \`@arkenv/bun-plugin\` to validate these at build-time
198
- * and provide typesafety for \`process.env\`.
221
+ * In Bun Fullstack, use \`@arkenv/bun-plugin\` to validate these at build-time
222
+ * and provide typesafety for \`process.env\` on the client-side.
199
223
  */
200
224
  export const Env = z.object({
201
225
  ${n}
202
226
  });
203
- `:g.default`
227
+ `:r.default`
204
228
  import arkenv from "arkenv/standard";
205
229
  import { z } from "zod";
206
230
 
231
+ /**
232
+ * Environment variable schema for server-side or runtime-only validation.
233
+ */
207
234
  export const Env = z.object({
208
235
  ${n}
209
236
  });
210
237
 
211
238
  export const env = arkenv(Env);
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-DY0QfjVh.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)}.`):s.status===`skipped`&&r.envDtsHandling===`append`&&e.info(`${$(s.file)} already contains ArkEnv types.`);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?n.updated&&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;
239
+ `};function Ft(e){let{validator:t,envKeys:n,framework:r}=e;switch(t){case`arktype`:return`${At(n,r)}\n`;case`zod`:return`${Pt(n,r)}\n`;case`valibot`:return`${Nt(n,r)}\n`;default:throw Error(`Unsupported validator: ${t}`)}}function It(e,t){switch(e){case`pnpm`:return[`pnpm`,[`add`,...t]];case`yarn`:return[`yarn`,[`add`,...t]];case`bun`:return[`bun`,[`add`,...t]];default:return[`npm`,[`install`,...t]]}}function Lt(e){return e.metadata.framework===`vite`?`2. Access via ${Z(`import.meta.env.YOUR_VAR`)}`:e.metadata.framework===`bun`?`2. Access via ${Z(`process.env.YOUR_VAR`)}`:`2. Import and use: import { env } from "${Z(e.metadata.importPath)}"`}function Rt(e,t){if(t)return{message:r.default`
240
+ Inside your AI assistant (e.g. Claude Code), use:
241
+ ${Z(`/arkenv`)} - automatically refine your schema and configure integrations.
242
+ `,title:`Next steps`};let n=e.skill?.dlxCommand.join(` `)||`npx`,i=e.skill?.packageName||`yamcodes/arkenv`,a=Lt(e);return{message:r.default`
243
+ 1. Check ${Z(e.metadata.displayPath)} and refine your environment schema.
244
+ ${a}
245
+ 3. (Recommended) Install the AI skill: ${Z(`${n} skills add ${i}`)}
246
+ Then run ${Z(`/arkenv`)} inside your AI assistant to finish.
247
+ `,title:`Next steps`}}var zt=class{constructor(e,t){this.workspace=e,this.reporter=t}async execute(e){let t=this.reporter.spinner();t.start(`Scaffolding ArkEnv configuration...`);try{for(let t of e.files){if(t.action===`append`){if(!e.bootstrap||e.bootstrap.framework!==`vite`&&e.bootstrap.framework!==`bun-fullstack`){this.reporter.warn(`Skipping safe-append for ${Z(n.default.basename(t.path))}: unsupported framework.`);continue}await this.workspace.safeAppend(t.path,t.content,e.bootstrap.framework)?this.reporter.info(`Appended ArkEnv types to ${Z(n.default.basename(t.path))}.`):this.reporter.info(`${Z(n.default.basename(t.path))} already contains ArkEnv types.`);continue}if(await this.workspace.mkdir(n.default.dirname(t.path),!0),await this.workspace.writeFile(t.path,t.content),t.label!==`environment schema`&&t.label?.includes(`types`)){let e=t.action===`overwrite`?`Updated`:`Created`;this.reporter.info(`${e} ${Z(n.default.basename(t.path))} for typesafe environment variables.`)}}if(t.stop(`Configuration scaffolded!`),e.install&&process.env.SKIP_INSTALL!==`true`){this.reporter.step(`Installing dependencies with ${Z(e.install.packageManager)}...`);let[t,n]=It(e.install.packageManager,e.install.dependencies);await this.workspace.execute(t,n)}let r=!1;if(e.tsConfig){let t=await this.workspace.updateTsConfigToStrict(e.tsConfig.path);t.status===`updated`?(this.reporter.info(`Enforced strict: true in your ${Z(t.file)}`),r=!0):t.status===`error`&&this.reporter.warn(`Could not automatically update ${Z(t.file||`tsconfig.json`)}. Please ensure 'strict: true' is set manually.`)}if(e.bootstrap){if(e.bootstrap.framework===`vite`){let t=await this.workspace.findViteConfig();if(t){this.reporter.step(`Bootstrapping Vite plugin...`);let r=await this.workspace.bootstrapViteConfig(t,e.bootstrap.importPath||`./src/env`);r.success?r.updated&&this.reporter.info(`Updated ${Z(n.default.basename(t))}`):(this.reporter.warn(`Could not automatically update ${Z(n.default.basename(t))}: ${r.error}`),this.reporter.info(`Please add ${Z(`@arkenv/vite-plugin`)} manually.`))}else this.reporter.info(`No Vite config found — please add ${Z(`@arkenv/vite-plugin`)} to your Vite config manually.`)}else if(e.bootstrap.framework===`bun-fullstack`){let t=await this.workspace.findBunConfig(),n=await this.workspace.bootstrapBunConfig(t,e.bootstrap.bunFeatures);n.success&&n.instructions?this.reporter.info(n.instructions):n.success||this.reporter.error(n.error||`Bun bootstrap failed`)}}let i=!1;if(e.skill&&process.env.SKIP_INSTALL!==`true`){this.reporter.step(`Installing ArkEnv agent skill...`);try{let[t,...n]=e.skill.dlxCommand,r=[...n,`skills`,`add`,e.skill.packageName];e.skill.isYes&&r.push(`--yes`),await this.workspace.execute(t,r),i=!0}catch(e){let t=e instanceof Error?e.message:String(e);this.reporter.warn(`Failed to install ArkEnv AI skill: ${t}`)}}let a=Rt(e,i);this.reporter.note(a.message,a.title),this.reporter.finish(`${gt} ArkEnv scaffolding complete. Happy coding!`,{path:e.metadata.displayPath,framework:e.metadata.framework,validator:e.metadata.validator,packageManager:e.metadata.packageManager,tsConfigUpdated:r,skillInstalled:i})}catch(e){throw t.stop(`Scaffolding failed.`),e}}};function Bt(e){switch(e){case`pnpm`:return[`pnpm`,`dlx`];case`yarn`:return[`yarn`,`dlx`];case`bun`:return[`bunx`];default:return[`npx`]}}function Vt(e){let{options:t,packageManager:r,tsConfig:i,shouldUpdateTsConfig:a,cwd:o,existingFiles:s}=e,c=n.default.resolve(o,t.path),l=n.default.dirname(c),u={files:[],metadata:{displayPath:``,framework:t.framework,validator:t.validator,packageManager:r,importPath:``}},d=Ft(t),f=s.includes(c);(!f||t.overwriteEnvSchemaFile!==!1)&&u.files.push({path:c,content:d,action:f?`overwrite`:`create`,label:`environment schema`});let m=[`arkenv`,t.validator];if(t.framework===`vite`&&m.push(`@arkenv/vite-plugin`),t.framework===`bun-fullstack`&&t.bunFeatures?.length&&m.push(`@arkenv/bun-plugin`),u.install={packageManager:r,dependencies:m},a&&i.file&&(u.tsConfig={path:n.default.resolve(o,i.file),action:`strict`}),(t.framework===`vite`||t.framework===`bun-fullstack`&&t.bunFeatures?.length)&&t.installTypeDefinitions!==!1){let e=t.framework===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,r=n.default.join(l,e),i=s.includes(r);if(t.envDtsHandling!==`skip`)if(t.envDtsHandling===`append`||!t.envDtsHandling&&i)u.files.push({path:r,content:c,action:`append`,label:`${t.framework} types`});else{let e=t.framework===`vite`?jt(t.path):Mt(t.path);u.files.push({path:r,content:e,action:i?`overwrite`:`create`,label:`${t.framework} types`})}}(t.framework===`vite`||t.framework===`bun-fullstack`)&&(u.bootstrap=(0,p.shake)({framework:t.framework,bunFeatures:t.framework===`bun-fullstack`?t.bunFeatures:void 0})),t.installSkill&&(u.skill={dlxCommand:Bt(r),packageName:`yamcodes/arkenv`,isYes:e.isYes});let h=n.default.relative(o,c).replace(/\\/g,`/`),g=h.startsWith(`.`)?h:`./${h}`,_=g.replace(/\.(ts|js|tsx|jsx)$/,``);return u.metadata.displayPath=g,u.metadata.importPath=_,u.bootstrap&&(u.bootstrap.importPath=_),u}var Ht=class{constructor(e,t,n,r){this.logger=e,this.workspace=t,this.prompt=n,this.scanner=r}async execute(e){let t=await this.collect(e);if(!t)return;let n=Vt(t),r=new zt(this.workspace,this.logger);try{await r.execute(n)}catch(e){this.logger.fatal(`Scaffolding failed.`,e)}}async collect(e){let{isYes:t,isAgent:r}=e;this.logger.interactiveStdout(!0);try{let e=!1,i=await this.scanner.checkTsConfig();if(i.status===`not_strict`)if(t)e=!0;else{this.logger.warn(`TypeScript strict mode is not enabled in your ${Z(i.file)}.`);let t=await this.prompt.confirm(`ArkEnv requires ${b.default.dim(`strict`)} mode in your ${Z(i.file)}. Would you like to enable it now?`,!0);if(t===null)return null;if(!t)return this.logger.cancel(`Operation cancelled.`),null;e=!0}let a=await this.scanner.detectFramework(process.cwd(),i.parsed),o=a===`bun-fullstack`?await this.scanner.detectBunFeatures(process.cwd(),i.parsed):void 0,s=await this.scanner.suggestDefaultEnvPath(process.cwd(),i.parsed),c=n.default.resolve(process.cwd(),s),l=await this.scanner.getEnvExampleKeys(process.cwd(),i.parsed,c),u=!1;if(a===`vite`||a===`bun-fullstack`){let e=a===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,t=n.default.dirname(c),r=n.default.join(t,e);u=await this.workspace.exists(r)}let d=await this.prompt.runWizard((0,p.shake)({framework:a,bunFeatures:o,defaultEnvPath:s,tsConfig:i.parsed??null,envKeys:l?.keys,envKeysSource:l?.source,hasTypeFile:u}),t);if(d===null)return null;if(r)d.installSkill=!1;else if(t)d.installSkill=!0;else{let e=await this.prompt.confirm(`Would you like to install the ArkEnv agent skill?`,!0);if(e===null)return null;d.installSkill=e}let f=n.default.resolve(process.cwd(),d.path);if(await this.workspace.exists(f)&&d.overwriteEnvSchemaFile===void 0){let e=await this.prompt.confirm(`File ${Z(n.default.basename(f))} already exists. Overwrite?`,!1);if(e===null)return null;if(!e)return this.logger.cancel(`Operation cancelled.`),null;d.overwriteEnvSchemaFile=e}let m=await this.scanner.detectPackageManager(process.cwd(),i.parsed),h=[];await this.workspace.exists(f)&&h.push(f);let g;if(d.framework===`vite`?g=`vite-env.d.ts`:d.framework===`bun-fullstack`&&(g=`bun-env.d.ts`),g){let e=n.default.dirname(f),t=n.default.join(e,g);await this.workspace.exists(t)&&h.push(t)}return(0,p.shake)({cwd:process.cwd(),options:d,detectedFramework:a,detectedBunFeatures:o,packageManager:m,tsConfig:i,shouldUpdateTsConfig:e,existingFiles:h,isYes:t})}finally{this.logger.interactiveStdout(!1)}}};function Ut(e){let t=new Dt(e),n=t.logger,r=new Ct(t.isQuiet,n.stdio),i=new Et;return{cli:t,logger:n,workspace:r,prompt:i,initUseCase:new Ht(n,r,i,new ht),helpUseCase:new kt(n)}}let $,Wt=!1;async function Gt(){let{cli:e,logger:t,initUseCase:n,helpUseCase:r}=Ut(process.argv);$=t,Kt(t),e.helpRequested&&(await r.execute(),await t.flush(),process.exit(0)),e.command!==`init`&&(e.command?t.error(`Unknown command: ${e.command}`):t.error(`Missing command.`),await r.execute(),await t.flush(),process.exit(1));try{await n.execute({isYes:e.isYes,isQuiet:e.isQuiet,isAgent:e.isAgent})}catch(e){try{t.fatal(`An unexpected error occurred`,e)}catch{}await t.flush(),process.exit(1)}}function Kt(e){let t=async t=>{Wt&&process.exit(t),Wt=!0,setTimeout(()=>{process.exit(t)},2e3).unref(),e.interactiveStdout&&e.interactiveStdout(!1);try{e.cancel(`Operation cancelled.`),await e.flush()}catch(t){e.error&&e.error(`Logger failed during shutdown`,t)}finally{process.exit(t)}};process.on(`SIGINT`,()=>t(130)),process.on(`SIGTERM`,()=>t(143))}Gt(),process.on(`unhandledRejection`,async e=>{if($){try{$.fatal(`Unhandled rejection`,e)}catch{}await $.flush()}else console.error(`Unhandled rejection`,e);process.exit(1)}),process.on(`uncaughtException`,async e=>{if($){try{$.fatal(`Uncaught exception`,e)}catch{}await $.flush()}else console.error(`Uncaught exception`,e);process.exit(1)});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@arkenv/cli",
3
3
  "type": "module",
4
- "version": "0.0.7",
4
+ "version": "0.0.9",
5
5
  "description": "Interactive CLI for scaffolding ArkEnv projects",
6
6
  "bin": {
7
7
  "arkenv": "./dist/index.cjs"
@@ -38,7 +38,8 @@
38
38
  "dedent": "^1.7.2",
39
39
  "jsonc-parser": "^3.3.1",
40
40
  "magicast": "^0.5.2",
41
- "picocolors": "^1.1.1"
41
+ "picocolors": "^1.1.1",
42
+ "radashi": "^12.9.1"
42
43
  },
43
44
  "devDependencies": {
44
45
  "@types/node": "24.12.2",
@@ -1,21 +0,0 @@
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`),l=a===`vite`?`ImportMetaEnvAugmented`:`ProcessEnvAugmented`;if(c.includes(i)||c.includes(l))return!1;let u=t.default.dirname(e),d=t.default.relative(u,n).replace(/\.(ts|js|tsx|jsx)$/,``).split(t.default.sep).join(`/`),f=d.startsWith(`.`)?d:`./${d}`,p=a===`vite`?o(f):s(f),m=c.endsWith(`
2
- `)?``:`
3
- `;return await r.default.appendFile(e,`${m}\n${i}\n${p}\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;