arkenv 1.0.0-alpha.12 → 1.0.0-alpha.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.cjs CHANGED
@@ -1,72 +1,72 @@
1
1
  #!/usr/bin/env node
2
- const e=require(`./chunk-i8uDWG73.cjs`);let t=require(`radashi`),n=require(`node:util`),r=require(`node:process`);r=e.r(r,1);let i=require(`node:readline`);i=e.r(i,1);let a=require(`node:tty`);require(`node:fs`);let o=require(`node:path`);o=e.r(o,1);let s=require(`node:fs/promises`);s=e.r(s,1);let c=require(`dedent`);c=e.r(c,1);let l=require(`node:child_process`),u=require(`node:module`),d=require(`jsonc-parser`),f=require(`magicast`),p=require(`yaml`);var m=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})),h=e.r(m(),1);const g={REQUIREMENTS_NOT_MET:`REQUIREMENTS_NOT_MET`,GIT_TREE_DIRTY:`GIT_TREE_DIRTY`,NON_EMPTY_DIR:`NON_EMPTY_DIR`,INTERNAL:`INTERNAL`};var _=class{info(e){process.stderr.write(`${h.default.blue(`ℹ ${e}`)}\n`)}warn(e){process.stderr.write(`${h.default.yellow(`⚠ ${e}`)}\n`)}error(e){process.stderr.write(`${h.default.red(`✘ ${e}`)}\n`)}success(e){process.stderr.write(`${h.default.green(`✔ ${e}`)}\n`)}step(e){process.stderr.write(`○ ${e}\n`)}note(e,t){process.stderr.write(`${h.default.dim(`○ ${t?`${t}: `:``}${e}`)}\n`)}log(e){process.stderr.write(`${e}\n`)}spinner(){return{start:e=>process.stderr.write(`${h.default.dim(`○ ${e}...`)}\n`),stop:e=>process.stderr.write(`${h.default.green(`✔ ${e}`)}\n`),message:e=>process.stderr.write(`${h.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){let n=t instanceof Error?t.message:t?String(t):void 0;throw this.json({status:`error`,code:g.INTERNAL,message:e,retryWith:[],...n===void 0?{}:{details:{error:n}}}),t instanceof Error?t:Error(e)}refuse(e){this.json({status:`error`,code:e.code,message:e.message,retryWith:e.retryWith,...e.details===void 0?{}:{details:e.details}})}finish(e,t){this.json({status:`success`,message:e,details:t})}async flush(){return new Promise(e=>{process.stdout.write(``,()=>e())})}},v=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)}refuse(e){}finish(e,t){}async flush(){return new Promise(e=>{process.stderr.write(``,()=>e())})}};const y=(()=>{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}})(),b=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,x=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,S=/[\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,ee=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy,w=/\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,E=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,D=/\p{M}+/gu,te={limit:1/0,ellipsis:``},O=(e,t={},n={})=>{let r=t.limit??1/0,i=t.ellipsis??``,a=t?.ellipsisWidth??(i?O(i,te,n).width:0),o=n.controlWidth??0,s=n.tabWidth??8,c=n.emojiWidth??2,l=n.regularWidth??1,u=n.wideWidth??2,d=[[E,l],[S,0],[C,o],[w,s],[T,c],[ee,u]],f=0,p=0,m=e.length,h=0,g=!1,_=m,v=Math.max(0,r-a),k=0,A=0,j=0,M=0;outer:for(;;){if(A>k||p>=m&&p>f){let t=e.slice(k,A)||e.slice(f,p);h=0;for(let e of t.replaceAll(D,``)){let t=e.codePointAt(0)||0;if(M=b(t)?2:x(t)?u:l,j+M>v&&(_=Math.min(_,Math.max(k,f)+h)),j+M>r){g=!0;break outer}h+=e.length,j+=M}k=A=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===ee?y(e.slice(p,n.lastIndex)):n===T?1:n.lastIndex-p,M=h*i,j+M>v&&(_=Math.min(_,p+Math.floor((v-j)/i))),j+M>r){g=!0;break outer}j+=M,k=f,A=p,p=f=n.lastIndex;continue outer}}p+=1}return{width:g?v:j,index:g?_:m,truncated:g,ellipsed:g&&r>=a}},k={limit:1/0,ellipsis:``,ellipsisWidth:0},A=(e,t={})=>O(e,k,t).width,j=`]8;;`,M=RegExp(`(?:\\[(?<code>\\d+)m|\\${j}(?<uri>.*))`,`y`),ne=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},re=e=>`[${e}m`,ie=e=>`${j}${e}`,ae=(e,t,n)=>{let r=t[Symbol.iterator](),i=!1,a=!1,o=e.at(-1),s=o===void 0?0:A(o),c=r.next(),l=r.next(),u=0;for(;!c.done;){let o=c.value,d=A(o);s+d<=n?e[e.length-1]+=o:(e.push(o),s=0),(o===`\x1B`||o===`›`)&&(i=!0,a=t.startsWith(j,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())},oe=e=>{let t=e.split(` `),n=t.length;for(;n&&!A(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(` `)+t.slice(n).join(``)},se=(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=A(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=A(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(``),ae(s,r,t),c=A(s.at(-1)??``);continue}if(c+i>t&&c&&i){if(n.wordWrap===!1&&c<t){ae(s,r,t),c=A(s.at(-1)??``);continue}s.push(``),c=0}if(c+i>t&&n.wordWrap===!1){ae(s,r,t),c=A(s.at(-1)??``);continue}s[s.length-1]+=r,c+=i}n.trim!==!1&&(s=s.map(e=>oe(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===`›`){M.lastIndex=e+1;let t=M.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+=ie(``));let e=i?ne(i):void 0;i&&e&&(r+=re(e))}else t===`
5
- `&&(i&&ne(i)&&(r+=re(i)),a&&(r+=ie(a)))}return r},ce=/\r?\n/;function N(e,t,n){return String(e).normalize().split(ce).map(e=>se(e,t,n)).join(`
6
- `)}var P=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 le(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?le(a,t<0?-1:1,n):a}const F={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 ue(e,t){if(typeof e==`string`)return F.aliases.get(e)===t;for(let n of e)if(n!==void 0&&ue(n,t))return!0;return!1}function de(e,t){if(e===t)return;let n=e.split(`
2
+ const e=require(`./chunk-i8uDWG73.cjs`),t=require(`./dist-DFKLi0w0.cjs`);let n=require(`radashi`),r=require(`node:util`),i=require(`node:process`);i=e.r(i,1);let a=require(`node:readline`);a=e.r(a,1);let o=require(`node:tty`);require(`node:fs`);let s=require(`node:path`);s=e.r(s,1);let c=require(`node:fs/promises`);c=e.r(c,1);let l=require(`dedent`);l=e.r(l,1);let u=require(`jiti`),d=require(`node:child_process`),f=require(`node:module`),p=require(`jsonc-parser`),m=require(`magicast`),h=require(`yaml`);var g=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})),_=e.r(g(),1);const v={REQUIREMENTS_NOT_MET:`REQUIREMENTS_NOT_MET`,GIT_TREE_DIRTY:`GIT_TREE_DIRTY`,NON_EMPTY_DIR:`NON_EMPTY_DIR`,INTERNAL:`INTERNAL`};var y=class{info(e){process.stderr.write(`${_.default.blue(`ℹ ${e}`)}\n`)}warn(e){process.stderr.write(`${_.default.yellow(`⚠ ${e}`)}\n`)}error(e){process.stderr.write(`${_.default.red(`✘ ${e}`)}\n`)}success(e){process.stderr.write(`${_.default.green(`✔ ${e}`)}\n`)}step(e){process.stderr.write(`○ ${e}\n`)}note(e,t){process.stderr.write(`${_.default.dim(`○ ${t?`${t}: `:``}${e}`)}\n`)}log(e){process.stderr.write(`${e}\n`)}spinner(){return{start:e=>process.stderr.write(`${_.default.dim(`○ ${e}...`)}\n`),stop:e=>process.stderr.write(`${_.default.green(`✔ ${e}`)}\n`),message:e=>process.stderr.write(`${_.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){let n=t instanceof Error?t.message:t?String(t):void 0;throw this.json({status:`error`,code:v.INTERNAL,message:e,retryWith:[],...n===void 0?{}:{details:{error:n}}}),t instanceof Error?t:Error(e)}refuse(e){this.json({status:`error`,code:e.code,message:e.message,retryWith:e.retryWith,...e.details===void 0?{}:{details:e.details}})}finish(e,t){this.json({status:`success`,message:e,details:t})}async flush(){return new Promise(e=>{process.stdout.write(``,()=>e())})}},b=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)}refuse(e){}finish(e,t){}async flush(){return new Promise(e=>{process.stderr.write(``,()=>e())})}};const x=(()=>{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}})(),S=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,C=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,w=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,T=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/uy,te=/\t{1,1000}/y,E=/[\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,ne=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,D=/\p{M}+/gu,re={limit:1/0,ellipsis:``},ie=(e,t={},n={})=>{let r=t.limit??1/0,i=t.ellipsis??``,a=t?.ellipsisWidth??(i?ie(i,re,n).width:0),o=n.controlWidth??0,s=n.tabWidth??8,c=n.emojiWidth??2,l=n.regularWidth??1,u=n.wideWidth??2,d=[[ne,l],[ee,0],[w,o],[te,s],[E,c],[T,u]],f=0,p=0,m=e.length,h=0,g=!1,_=m,v=Math.max(0,r-a),y=0,b=0,O=0,k=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(D,``)){let t=e.codePointAt(0)||0;if(k=S(t)?2:C(t)?u:l,O+k>v&&(_=Math.min(_,Math.max(y,f)+h)),O+k>r){g=!0;break outer}h+=e.length,O+=k}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===T?x(e.slice(p,n.lastIndex)):n===E?1:n.lastIndex-p,k=h*i,O+k>v&&(_=Math.min(_,p+Math.floor((v-O)/i))),O+k>r){g=!0;break outer}O+=k,y=f,b=p,p=f=n.lastIndex;continue outer}}p+=1}return{width:g?v:O,index:g?_:m,truncated:g,ellipsed:g&&r>=a}},O={limit:1/0,ellipsis:``,ellipsisWidth:0},k=(e,t={})=>ie(e,O,t).width,ae=`]8;;`,oe=RegExp(`(?:\\[(?<code>\\d+)m|\\${ae}(?<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=>`${ae}${e}`,ue=(e,t,n)=>{let r=t[Symbol.iterator](),i=!1,a=!1,o=e.at(-1),s=o===void 0?0:k(o),c=r.next(),l=r.next(),u=0;for(;!c.done;){let o=c.value,d=k(o);s+d<=n?e[e.length-1]+=o:(e.push(o),s=0),(o===`\x1B`||o===`›`)&&(i=!0,a=t.startsWith(ae,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())},de=e=>{let t=e.split(` `),n=t.length;for(;n&&!k(t[n-1]);)n--;return n===t.length?e:t.slice(0,n).join(` `)+t.slice(n).join(``)},fe=(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=k(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=k(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(``),ue(s,r,t),c=k(s.at(-1)??``);continue}if(c+i>t&&c&&i){if(n.wordWrap===!1&&c<t){ue(s,r,t),c=k(s.at(-1)??``);continue}s.push(``),c=0}if(c+i>t&&n.wordWrap===!1){ue(s,r,t),c=k(s.at(-1)??``);continue}s[s.length-1]+=r,c+=i}n.trim!==!1&&(s=s.map(e=>de(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},pe=/\r?\n/;function A(e,t,n){return String(e).normalize().split(pe).map(e=>fe(e,t,n)).join(`
6
+ `)}var j=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 me(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?me(a,t<0?-1:1,n):a}const M={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 he(e,t){if(typeof e==`string`)return M.aliases.get(e)===t;for(let n of e)if(n!==void 0&&he(n,t))return!0;return!1}function ge(e,t){if(e===t)return;let n=e.split(`
7
7
  `),r=t.split(`
8
- `),i=Math.max(n.length,r.length),a=[];for(let e=0;e<i;e++)n[e]!==r[e]&&a.push(e);return{lines:a,numLinesBefore:n.length,numLinesAfter:r.length,numLines:i}}const fe=globalThis.process.platform.startsWith(`win`),pe=Symbol(`clack:cancel`);function I(e){return e===pe}function me(e,t){let n=e;n.isTTY&&n.setRawMode(t)}function he({input:e=r.stdin,output:t=r.stdout,overwrite:n=!0,hideCursor:o=!0}={}){let s=i.createInterface({input:e,output:t,prompt:``,tabSize:1});i.emitKeypressEvents(e,s),e instanceof a.ReadStream&&e.isTTY&&e.setRawMode(!0);let c=(r,{name:a,sequence:s})=>{if(ue([String(r),a,s],`cancel`)){o&&t.write(P.cursor.show),process.exit(0);return}if(!n)return;let l=a===`return`?0:-1,u=a===`return`?-1:0;i.moveCursor(t,l,u,()=>{i.clearLine(t,1,()=>{e.once(`keypress`,c)})})};return o&&t.write(P.cursor.hide),e.once(`keypress`,c),()=>{e.off(`keypress`,c),o&&t.write(P.cursor.show),e instanceof a.ReadStream&&e.isTTY&&!fe&&e.setRawMode(!1),s.terminal=!1,s.close()}}const ge=e=>`columns`in e&&typeof e.columns==`number`?e.columns:80,_e=e=>`rows`in e&&typeof e.rows==`number`?e.rows:20;function ve(e,t,n,i=n,a){return N(t,ge(e??r.stdout)-n.length,{hard:!0,trim:!1}).split(`
9
- `).map((e,t)=>{let r=a?a(e,t):e;return`${t===0?i:n}${r}`}).join(`
10
- `)}let ye=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=r.stdin,output:i=r.stdout,render:a,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=a.bind(this),this._track=t,this._abortSignal=o,this.input=n,this.output=i}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(pe);this._abortSignal.addEventListener(`abort`,()=>{this.state=`cancel`,this.close()},{once:!0})}this.rl=i.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),me(this.input,!0),this.output.on(`resize`,this.render),this.render(),this.once(`submit`,()=>{this.output.write(P.cursor.show),this.output.off(`resize`,this.render),me(this.input,!1),e(this.value)}),this.once(`cancel`,()=>{this.output.write(P.cursor.show),this.output.off(`resize`,this.render),me(this.input,!1),e(pe)})})}_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&&F.aliases.has(t.name)&&this.emit(`cursor`,F.aliases.get(t.name)),F.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`)}ue([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
- `),me(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=N(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
12
- `).length-1;this.output.write(P.cursor.move(-999,e*-1))}render(){let e=N(this._render(this)??``,process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state===`initial`)this.output.write(P.cursor.hide);else{let t=de(this._prevFrame,e),n=_e(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(P.cursor.move(0,a-i)),this.output.write(P.erase.lines(1));let t=e.split(`
13
- `);this.output.write(t[a]),this._prevFrame=e,this.output.write(P.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(P.cursor.move(0,e))}this.output.write(P.erase.down());let t=e.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 _e=globalThis.process.platform.startsWith(`win`),ve=Symbol(`clack:cancel`);function N(e){return e===ve}function ye(e,t){let n=e;n.isTTY&&n.setRawMode(t)}function be({input:e=i.stdin,output:t=i.stdout,overwrite:n=!0,hideCursor:r=!0}={}){let s=a.createInterface({input:e,output:t,prompt:``,tabSize:1});a.emitKeypressEvents(e,s),e instanceof o.ReadStream&&e.isTTY&&e.setRawMode(!0);let c=(i,{name:o,sequence:s})=>{if(he([String(i),o,s],`cancel`)){r&&t.write(j.cursor.show),process.exit(0);return}if(!n)return;let l=o===`return`?0:-1,u=o===`return`?-1:0;a.moveCursor(t,l,u,()=>{a.clearLine(t,1,()=>{e.once(`keypress`,c)})})};return r&&t.write(j.cursor.hide),e.once(`keypress`,c),()=>{e.off(`keypress`,c),r&&t.write(j.cursor.show),e instanceof o.ReadStream&&e.isTTY&&!_e&&e.setRawMode(!1),s.terminal=!1,s.close()}}const xe=e=>`columns`in e&&typeof e.columns==`number`?e.columns:80,Se=e=>`rows`in e&&typeof e.rows==`number`?e.rows:20;function Ce(e,t,n,r=n,a){return A(t,xe(e??i.stdout)-n.length,{hard:!0,trim:!1}).split(`
9
+ `).map((e,t)=>{let i=a?a(e,t):e;return`${t===0?r:n}${i}`}).join(`
10
+ `)}let we=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=i.stdin,output:r=i.stdout,render:a,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=a.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(ve);this._abortSignal.addEventListener(`abort`,()=>{this.state=`cancel`,this.close()},{once:!0})}this.rl=a.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),ye(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),ye(this.input,!1),e(this.value)}),this.once(`cancel`,()=>{this.output.write(j.cursor.show),this.output.off(`resize`,this.render),ye(this.input,!1),e(ve)})})}_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&&M.aliases.has(t.name)&&this.emit(`cursor`,M.aliases.get(t.name)),M.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`)}he([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
+ `),ye(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=ge(this._prevFrame,e),n=Se(this.output);if(this.restoreCursor(),t){let r=Math.max(0,t.numLinesAfter-n),i=Math.max(0,t.numLinesBefore-n),a=t.lines.find(e=>e>=r);if(a===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(j.cursor.move(0,a-i)),this.output.write(j.erase.lines(1));let t=e.split(`
13
+ `);this.output.write(t[a]),this._prevFrame=e,this.output.write(j.cursor.move(0,t.length-a-1));return}else if(t.lines.length>1){if(r<i)a=r;else{let e=a-i;e>0&&this.output.write(j.cursor.move(0,e))}this.output.write(j.erase.down());let t=e.split(`
14
14
  `).slice(a);this.output.write(t.join(`
15
- `)),this._prevFrame=e;return}}this.output.write(P.erase.down())}this.output.write(e),this.state===`initial`&&(this.state=`active`),this._prevFrame=e}}};var be=class extends ye{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(P.cursor.move(0,-1)),this.value=e,this.state=`submit`,this.close()}),this.on(`cursor`,()=>{this.value=!this.value})}},xe=class extends ye{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?le(n,1,this.options):n,this.changeValue(),this.on(`cursor`,e=>{switch(e){case`left`:case`up`:this.cursor=le(this.cursor,-1,this.options);break;case`down`:case`right`:this.cursor=le(this.cursor,1,this.options);break}this.changeValue()})}},Se=class extends ye{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),[r,...i]=e.slice(this.cursor);return`${t}${(0,n.styleText)(`inverse`,r)}${i.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 Ce(){return r.default.platform===`win32`?!!r.default.env.CI||!!r.default.env.WT_SESSION||!!r.default.env.TERMINUS_SUBLIME||r.default.env.ConEmuTask===`{cmd::Cmder}`||r.default.env.TERM_PROGRAM===`Terminus-Sublime`||r.default.env.TERM_PROGRAM===`vscode`||r.default.env.TERM===`xterm-256color`||r.default.env.TERM===`alacritty`||r.default.env.TERMINAL_EMULATOR===`JetBrains-JediTerm`:r.default.env.TERM!==`linux`}const we=Ce(),Te=()=>process.env.CI===`true`,L=(e,t)=>we?e:t,Ee=L(`◆`,`*`),De=L(`■`,`x`),Oe=L(`▲`,`x`),R=L(`◇`,`o`),z=L(`│`,`|`),B=L(`└`,`—`),ke=L(`●`,`>`),Ae=L(`○`,` `),je=L(`─`,`-`),Me=L(`╮`,`+`),Ne=L(`├`,`+`),Pe=L(`╯`,`+`),Fe=L(`╰`,`+`),Ie=L(`●`,`•`),Le=L(`◆`,`*`),Re=L(`▲`,`!`),ze=L(`■`,`x`),Be=e=>{switch(e){case`initial`:case`active`:return(0,n.styleText)(`cyan`,Ee);case`cancel`:return(0,n.styleText)(`red`,De);case`error`:return(0,n.styleText)(`yellow`,Oe);case`submit`:return(0,n.styleText)(`green`,R)}},Ve=e=>{switch(e){case`initial`:case`active`:return(0,n.styleText)(`cyan`,z);case`cancel`:return(0,n.styleText)(`red`,z);case`error`:return(0,n.styleText)(`yellow`,z);case`submit`:return(0,n.styleText)(`green`,z)}},He=(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}},Ue=({cursor:e,options:t,style:r,output:i=process.stdout,maxItems:a=1/0,columnPadding:o=0,rowPadding:s=4})=>{let c=ge(i)-o,l=_e(i),u=(0,n.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 n=y;n<b;n++){let i=N(r(t[n],n===e),c,{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)=>He(_,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},V=e=>{let t=e.active??`Yes`,r=e.inactive??`No`;return new be({active:t,inactive:r,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let i=e.withGuide??F.withGuide,a=`${Be(this.state)} `,o=i?`${(0,n.styleText)(`gray`,z)} `:``,s=ve(e.output,e.message,o,a),c=`${i?`${(0,n.styleText)(`gray`,z)}
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 Te=class extends we{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})}},Ee=class extends we{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?me(n,1,this.options):n,this.changeValue(),this.on(`cursor`,e=>{switch(e){case`left`:case`up`:this.cursor=me(this.cursor,-1,this.options);break;case`down`:case`right`:this.cursor=me(this.cursor,1,this.options);break}this.changeValue()})}},De=class extends we{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,...i]=e.slice(this.cursor);return`${t}${(0,r.styleText)(`inverse`,n)}${i.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 Oe(){return i.default.platform===`win32`?!!i.default.env.CI||!!i.default.env.WT_SESSION||!!i.default.env.TERMINUS_SUBLIME||i.default.env.ConEmuTask===`{cmd::Cmder}`||i.default.env.TERM_PROGRAM===`Terminus-Sublime`||i.default.env.TERM_PROGRAM===`vscode`||i.default.env.TERM===`xterm-256color`||i.default.env.TERM===`alacritty`||i.default.env.TERMINAL_EMULATOR===`JetBrains-JediTerm`:i.default.env.TERM!==`linux`}const ke=Oe(),Ae=()=>process.env.CI===`true`,P=(e,t)=>ke?e:t,je=P(`◆`,`*`),Me=P(`■`,`x`),Ne=P(`▲`,`x`),F=P(`◇`,`o`),I=P(`│`,`|`),L=P(`└`,`—`),Pe=P(`●`,`>`),Fe=P(`○`,` `),Ie=P(`─`,`-`),Le=P(`╮`,`+`),Re=P(`├`,`+`),ze=P(`╯`,`+`),Be=P(`╰`,`+`),Ve=P(`●`,`•`),He=P(`◆`,`*`),Ue=P(`▲`,`!`),We=P(`■`,`x`),Ge=e=>{switch(e){case`initial`:case`active`:return(0,r.styleText)(`cyan`,je);case`cancel`:return(0,r.styleText)(`red`,Me);case`error`:return(0,r.styleText)(`yellow`,Ne);case`submit`:return(0,r.styleText)(`green`,F)}},Ke=e=>{switch(e){case`initial`:case`active`:return(0,r.styleText)(`cyan`,I);case`cancel`:return(0,r.styleText)(`red`,I);case`error`:return(0,r.styleText)(`yellow`,I);case`submit`:return(0,r.styleText)(`green`,I)}},qe=(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}},Je=({cursor:e,options:t,style:n,output:i=process.stdout,maxItems:a=1/0,columnPadding:o=0,rowPadding:s=4})=>{let c=xe(i)-o,l=Se(i),u=(0,r.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=A(n(t[r],r===e),c,{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)=>qe(_,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},R=e=>{let t=e.active??`Yes`,n=e.inactive??`No`;return new Te({active:t,inactive:n,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let i=e.withGuide??M.withGuide,a=`${Ge(this.state)} `,o=i?`${(0,r.styleText)(`gray`,I)} `:``,s=Ce(e.output,e.message,o,a),c=`${i?`${(0,r.styleText)(`gray`,I)}
17
17
  `:``}${s}
18
- `,l=this.value?t:r;switch(this.state){case`submit`:return`${c}${i?`${(0,n.styleText)(`gray`,z)} `:``}${(0,n.styleText)(`dim`,l)}`;case`cancel`:return`${c}${i?`${(0,n.styleText)(`gray`,z)} `:``}${(0,n.styleText)([`strikethrough`,`dim`],l)}${i?`
19
- ${(0,n.styleText)(`gray`,z)}`:``}`;default:{let a=i?`${(0,n.styleText)(`cyan`,z)} `:``,o=i?(0,n.styleText)(`cyan`,B):``;return`${c}${a}${this.value?`${(0,n.styleText)(`green`,ke)} ${t}`:`${(0,n.styleText)(`dim`,Ae)} ${(0,n.styleText)(`dim`,t)}`}${e.vertical?i?`
20
- ${(0,n.styleText)(`cyan`,z)} `:`
21
- `:` ${(0,n.styleText)(`dim`,`/`)} `}${this.value?`${(0,n.styleText)(`dim`,Ae)} ${(0,n.styleText)(`dim`,r)}`:`${(0,n.styleText)(`green`,ke)} ${r}`}
18
+ `,l=this.value?t:n;switch(this.state){case`submit`:return`${c}${i?`${(0,r.styleText)(`gray`,I)} `:``}${(0,r.styleText)(`dim`,l)}`;case`cancel`:return`${c}${i?`${(0,r.styleText)(`gray`,I)} `:``}${(0,r.styleText)([`strikethrough`,`dim`],l)}${i?`
19
+ ${(0,r.styleText)(`gray`,I)}`:``}`;default:{let a=i?`${(0,r.styleText)(`cyan`,I)} `:``,o=i?(0,r.styleText)(`cyan`,L):``;return`${c}${a}${this.value?`${(0,r.styleText)(`green`,Pe)} ${t}`:`${(0,r.styleText)(`dim`,Fe)} ${(0,r.styleText)(`dim`,t)}`}${e.vertical?i?`
20
+ ${(0,r.styleText)(`cyan`,I)} `:`
21
+ `:` ${(0,r.styleText)(`dim`,`/`)} `}${this.value?`${(0,r.styleText)(`dim`,Fe)} ${(0,r.styleText)(`dim`,n)}`:`${(0,r.styleText)(`green`,Pe)} ${n}`}
22
22
  ${o}
23
- `}}}}).prompt()},H={message:(e=[],{symbol:t=(0,n.styleText)(`gray`,z),secondarySymbol:r=(0,n.styleText)(`gray`,z),output:i=process.stdout,spacing:a=1,withGuide:o}={})=>{let s=[],c=o??F.withGuide,l=c?r:``,u=c?`${t} `:``,d=c?`${r} `:``;for(let e=0;e<a;e++)s.push(l);let f=Array.isArray(e)?e:e.split(`
24
- `);if(f.length>0){let[e,...n]=f;e.length>0?s.push(`${u}${e}`):s.push(c?t:``);for(let e of n)e.length>0?s.push(`${d}${e}`):s.push(c?r:``)}i.write(`${s.join(`
23
+ `}}}}).prompt()},z={message:(e=[],{symbol:t=(0,r.styleText)(`gray`,I),secondarySymbol:n=(0,r.styleText)(`gray`,I),output:i=process.stdout,spacing:a=1,withGuide:o}={})=>{let s=[],c=o??M.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(`
24
+ `);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:``)}i.write(`${s.join(`
25
25
  `)}
26
- `)},info:(e,t)=>{H.message(e,{...t,symbol:(0,n.styleText)(`blue`,Ie)})},success:(e,t)=>{H.message(e,{...t,symbol:(0,n.styleText)(`green`,Le)})},step:(e,t)=>{H.message(e,{...t,symbol:(0,n.styleText)(`green`,R)})},warn:(e,t)=>{H.message(e,{...t,symbol:(0,n.styleText)(`yellow`,Re)})},warning:(e,t)=>{H.warn(e,t)},error:(e,t)=>{H.message(e,{...t,symbol:(0,n.styleText)(`red`,ze)})}},We=(e=``,t)=>{let r=t?.output??process.stdout,i=t?.withGuide??F.withGuide?`${(0,n.styleText)(`gray`,B)} `:``;r.write(`${i}${(0,n.styleText)(`red`,e)}
26
+ `)},info:(e,t)=>{z.message(e,{...t,symbol:(0,r.styleText)(`blue`,Ve)})},success:(e,t)=>{z.message(e,{...t,symbol:(0,r.styleText)(`green`,He)})},step:(e,t)=>{z.message(e,{...t,symbol:(0,r.styleText)(`green`,F)})},warn:(e,t)=>{z.message(e,{...t,symbol:(0,r.styleText)(`yellow`,Ue)})},warning:(e,t)=>{z.warn(e,t)},error:(e,t)=>{z.message(e,{...t,symbol:(0,r.styleText)(`red`,We)})}},Ye=(e=``,t)=>{let n=t?.output??process.stdout,i=t?.withGuide??M.withGuide?`${(0,r.styleText)(`gray`,L)} `:``;n.write(`${i}${(0,r.styleText)(`red`,e)}
27
27
 
28
- `)},Ge=(e=``,t)=>{let r=t?.output??process.stdout,i=t?.withGuide??F.withGuide?`${(0,n.styleText)(`gray`,z)}
29
- ${(0,n.styleText)(`gray`,B)} `:``;r.write(`${i}${e}
28
+ `)},Xe=(e=``,t)=>{let n=t?.output??process.stdout,i=t?.withGuide??M.withGuide?`${(0,r.styleText)(`gray`,I)}
29
+ ${(0,r.styleText)(`gray`,L)} `:``;n.write(`${i}${e}
30
30
 
31
- `)},Ke=e=>(0,n.styleText)(`dim`,e),qe=(e,t,n)=>{let r={hard:!0,trim:!1},i=N(e,t,r).split(`
32
- `),a=i.reduce((e,t)=>Math.max(A(t),e),0);return N(e,t-(i.map(n).reduce((e,t)=>Math.max(A(t),e),0)-a),r)},Je=(e=``,t=``,i)=>{let a=i?.output??r.default.stdout,o=i?.withGuide??F.withGuide,s=i?.format??Ke,c=[``,...qe(e,ge(a)-6,s).split(`
33
- `).map(s),``],l=A(t),u=Math.max(c.reduce((e,t)=>{let n=A(t);return n>e?n:e},0),l)+2,d=c.map(e=>`${(0,n.styleText)(`gray`,z)} ${e}${` `.repeat(u-A(e))}${(0,n.styleText)(`gray`,z)}`).join(`
34
- `),f=o?`${(0,n.styleText)(`gray`,z)}
35
- `:``,p=o?Ne:Fe;a.write(`${f}${(0,n.styleText)(`green`,R)} ${(0,n.styleText)(`reset`,t)} ${(0,n.styleText)(`gray`,je.repeat(Math.max(u-l-1,1))+Me)}
31
+ `)},Ze=e=>(0,r.styleText)(`dim`,e),Qe=(e,t,n)=>{let r={hard:!0,trim:!1},i=A(e,t,r).split(`
32
+ `),a=i.reduce((e,t)=>Math.max(k(t),e),0);return A(e,t-(i.map(n).reduce((e,t)=>Math.max(k(t),e),0)-a),r)},$e=(e=``,t=``,n)=>{let a=n?.output??i.default.stdout,o=n?.withGuide??M.withGuide,s=n?.format??Ze,c=[``,...Qe(e,xe(a)-6,s).split(`
33
+ `).map(s),``],l=k(t),u=Math.max(c.reduce((e,t)=>{let n=k(t);return n>e?n:e},0),l)+2,d=c.map(e=>`${(0,r.styleText)(`gray`,I)} ${e}${` `.repeat(u-k(e))}${(0,r.styleText)(`gray`,I)}`).join(`
34
+ `),f=o?`${(0,r.styleText)(`gray`,I)}
35
+ `:``,p=o?Re:Be;a.write(`${f}${(0,r.styleText)(`green`,F)} ${(0,r.styleText)(`reset`,t)} ${(0,r.styleText)(`gray`,Ie.repeat(Math.max(u-l-1,1))+Le)}
36
36
  ${d}
37
- ${(0,n.styleText)(`gray`,p+je.repeat(u+2)+Pe)}
38
- `)},Ye=e=>(0,n.styleText)(`magenta`,e),Xe=({indicator:e=`dots`,onCancel:t,output:r=process.stdout,cancelMessage:i,errorMessage:a,frames:o=we?[`◒`,`◐`,`◓`,`◑`]:[`•`,`o`,`O`,`0`],delay:s=we?80:120,signal:c,...l}={})=>{let u=Te(),d,f,p=!1,m=!1,h=``,g,_=performance.now(),v=ge(r),y=l?.styleFrame??Ye,b=e=>{let n=e>1?a??F.messages.error:i??F.messages.cancel;m=e===1,p&&(O(n,e),m&&typeof t==`function`&&t())},x=()=>b(2),S=()=>b(1),C=()=>{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)},ee=()=>{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)},w=()=>{if(g===void 0)return;u&&r.write(`
39
- `);let e=N(g,v,{hard:!0,trim:!1}).split(`
40
- `);e.length>1&&r.write(P.cursor.up(e.length-1)),r.write(P.cursor.to(0)),r.write(P.erase.down())},T=e=>e.replace(/\.+$/,``),E=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]`},D=l.withGuide??F.withGuide,te=(t=``)=>{p=!0,d=he({output:r}),h=T(t),_=performance.now(),D&&r.write(`${(0,n.styleText)(`gray`,z)}
41
- `);let i=0,a=0;C(),f=setInterval(()=>{if(u&&h===g)return;w(),g=h;let t=y(o[i]),n;if(u)n=`${t} ${h}...`;else if(e===`timer`)n=`${t} ${h} ${E(_)}`;else{let e=`.`.repeat(Math.floor(a)).slice(0,3);n=`${t} ${h}${e}`}let s=N(n,v,{hard:!0,trim:!1});r.write(s),i=i+1<o.length?i+1:0,a=a<4?a+.125:0},s)},O=(t=``,i=0,a=!1)=>{if(!p)return;p=!1,clearInterval(f),w();let o=i===0?(0,n.styleText)(`green`,R):i===1?(0,n.styleText)(`red`,De):(0,n.styleText)(`red`,Oe);h=t??h,a||(e===`timer`?r.write(`${o} ${h} ${E(_)}
42
- `):r.write(`${o} ${h}
43
- `)),ee(),d()};return{start:te,stop:(e=``)=>O(e,0),message:(e=``)=>{h=T(e??h)},cancel:(e=``)=>O(e,1),error:(e=``)=>O(e,2),clear:()=>O(``,0,!0),get isCancelled(){return m}}},Ze=(e,t)=>e.includes(`
37
+ ${(0,r.styleText)(`gray`,p+Ie.repeat(u+2)+ze)}
38
+ `)},et=e=>(0,r.styleText)(`magenta`,e),tt=({indicator:e=`dots`,onCancel:t,output:n=process.stdout,cancelMessage:i,errorMessage:a,frames:o=ke?[`◒`,`◐`,`◓`,`◑`]:[`•`,`o`,`O`,`0`],delay:s=ke?80:120,signal:c,...l}={})=>{let u=Ae(),d,f,p=!1,m=!1,h=``,g,_=performance.now(),v=xe(n),y=l?.styleFrame??et,b=e=>{let n=e>1?a??M.messages.error:i??M.messages.cancel;m=e===1,p&&(D(n,e),m&&typeof t==`function`&&t())},x=()=>b(2),S=()=>b(1),C=()=>{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)},ee=()=>{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)},w=()=>{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())},T=e=>e.replace(/\.+$/,``),te=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]`},E=l.withGuide??M.withGuide,ne=(t=``)=>{p=!0,d=be({output:n}),h=T(t),_=performance.now(),E&&n.write(`${(0,r.styleText)(`gray`,I)}
41
+ `);let i=0,a=0;C(),f=setInterval(()=>{if(u&&h===g)return;w(),g=h;let t=y(o[i]),r;if(u)r=`${t} ${h}...`;else if(e===`timer`)r=`${t} ${h} ${te(_)}`;else{let e=`.`.repeat(Math.floor(a)).slice(0,3);r=`${t} ${h}${e}`}let s=A(r,v,{hard:!0,trim:!1});n.write(s),i=i+1<o.length?i+1:0,a=a<4?a+.125:0},s)},D=(t=``,i=0,a=!1)=>{if(!p)return;p=!1,clearInterval(f),w();let o=i===0?(0,r.styleText)(`green`,F):i===1?(0,r.styleText)(`red`,Me):(0,r.styleText)(`red`,Ne);h=t??h,a||(e===`timer`?n.write(`${o} ${h} ${te(_)}
42
+ `):n.write(`${o} ${h}
43
+ `)),ee(),d()};return{start:ne,stop:(e=``)=>D(e,0),message:(e=``)=>{h=T(e??h)},cancel:(e=``)=>D(e,1),error:(e=``)=>D(e,2),clear:()=>D(``,0,!0),get isCancelled(){return m}}},nt=(e,t)=>e.includes(`
44
44
  `)?e.split(`
45
45
  `).map(e=>t(e)).join(`
46
- `):t(e),U=e=>{let t=(e,t)=>{let r=e.label??String(e.value);switch(t){case`disabled`:return`${(0,n.styleText)(`gray`,Ae)} ${Ze(r,e=>(0,n.styleText)(`gray`,e))}${e.hint?` ${(0,n.styleText)(`dim`,`(${e.hint??`disabled`})`)}`:``}`;case`selected`:return`${Ze(r,e=>(0,n.styleText)(`dim`,e))}`;case`active`:return`${(0,n.styleText)(`green`,ke)} ${r}${e.hint?` ${(0,n.styleText)(`dim`,`(${e.hint})`)}`:``}`;case`cancelled`:return`${Ze(r,e=>(0,n.styleText)([`strikethrough`,`dim`],e))}`;default:return`${(0,n.styleText)(`dim`,Ae)} ${Ze(r,e=>(0,n.styleText)(`dim`,e))}`}};return new xe({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let r=e.withGuide??F.withGuide,i=`${Be(this.state)} `,a=`${Ve(this.state)} `,o=ve(e.output,e.message,a,i),s=`${r?`${(0,n.styleText)(`gray`,z)}
46
+ `):t(e),B=e=>{let t=(e,t)=>{let n=e.label??String(e.value);switch(t){case`disabled`:return`${(0,r.styleText)(`gray`,Fe)} ${nt(n,e=>(0,r.styleText)(`gray`,e))}${e.hint?` ${(0,r.styleText)(`dim`,`(${e.hint??`disabled`})`)}`:``}`;case`selected`:return`${nt(n,e=>(0,r.styleText)(`dim`,e))}`;case`active`:return`${(0,r.styleText)(`green`,Pe)} ${n}${e.hint?` ${(0,r.styleText)(`dim`,`(${e.hint})`)}`:``}`;case`cancelled`:return`${nt(n,e=>(0,r.styleText)([`strikethrough`,`dim`],e))}`;default:return`${(0,r.styleText)(`dim`,Fe)} ${nt(n,e=>(0,r.styleText)(`dim`,e))}`}};return new Ee({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let n=e.withGuide??M.withGuide,i=`${Ge(this.state)} `,a=`${Ke(this.state)} `,o=Ce(e.output,e.message,a,i),s=`${n?`${(0,r.styleText)(`gray`,I)}
47
47
  `:``}${o}
48
- `;switch(this.state){case`submit`:{let i=r?`${(0,n.styleText)(`gray`,z)} `:``;return`${s}${ve(e.output,t(this.options[this.cursor],`selected`),i)}`}case`cancel`:{let i=r?`${(0,n.styleText)(`gray`,z)} `:``;return`${s}${ve(e.output,t(this.options[this.cursor],`cancelled`),i)}${r?`
49
- ${(0,n.styleText)(`gray`,z)}`:``}`}default:{let i=r?`${(0,n.styleText)(`cyan`,z)} `:``,a=r?(0,n.styleText)(`cyan`,B):``,o=s.split(`
50
- `).length,c=r?2:1;return`${s}${i}${Ue({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:i.length,rowPadding:o+c,style:(e,n)=>t(e,e.disabled?`disabled`:n?`active`:`inactive`)}).join(`
48
+ `;switch(this.state){case`submit`:{let i=n?`${(0,r.styleText)(`gray`,I)} `:``;return`${s}${Ce(e.output,t(this.options[this.cursor],`selected`),i)}`}case`cancel`:{let i=n?`${(0,r.styleText)(`gray`,I)} `:``;return`${s}${Ce(e.output,t(this.options[this.cursor],`cancelled`),i)}${n?`
49
+ ${(0,r.styleText)(`gray`,I)}`:``}`}default:{let i=n?`${(0,r.styleText)(`cyan`,I)} `:``,a=n?(0,r.styleText)(`cyan`,L):``,o=s.split(`
50
+ `).length,c=n?2:1;return`${s}${i}${Je({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:i.length,rowPadding:o+c,style:(e,n)=>t(e,e.disabled?`disabled`:n?`active`:`inactive`)}).join(`
51
51
  ${i}`)}
52
52
  ${a}
53
- `}}}}).prompt()},Qe=`${(0,n.styleText)(`gray`,z)} `,W={message:async(e,{symbol:t=(0,n.styleText)(`gray`,z)}={})=>{process.stdout.write(`${(0,n.styleText)(`gray`,z)}
54
- ${t} `);let r=3;for await(let t of e){t=t.replace(/\n/g,`
55
- ${Qe}`),t.includes(`
56
- `)&&(r=3+(0,n.stripVTControlCharacters)(t.slice(t.lastIndexOf(`
57
- `))).length);let e=(0,n.stripVTControlCharacters)(t).length;r+e<process.stdout.columns?(r+=e,process.stdout.write(t)):(process.stdout.write(`
58
- ${Qe}${t.trimStart()}`),r=3+(0,n.stripVTControlCharacters)(t.trimStart()).length)}process.stdout.write(`
59
- `)},info:e=>W.message(e,{symbol:(0,n.styleText)(`blue`,Ie)}),success:e=>W.message(e,{symbol:(0,n.styleText)(`green`,Le)}),step:e=>W.message(e,{symbol:(0,n.styleText)(`green`,R)}),warn:e=>W.message(e,{symbol:(0,n.styleText)(`yellow`,Re)}),warning:e=>W.warn(e),error:e=>W.message(e,{symbol:(0,n.styleText)(`red`,ze)})},$e=e=>new Se({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??F.withGuide,r=`${`${t?`${(0,n.styleText)(`gray`,z)}
60
- `:``}${Be(this.state)} `}${e.message}
61
- `,i=e.placeholder?(0,n.styleText)(`inverse`,e.placeholder[0])+(0,n.styleText)(`dim`,e.placeholder.slice(1)):(0,n.styleText)([`inverse`,`hidden`],`_`),a=this.userInput?this.userInputWithCursor:i,o=this.value??``;switch(this.state){case`error`:{let e=this.error?` ${(0,n.styleText)(`yellow`,this.error)}`:``,i=t?`${(0,n.styleText)(`yellow`,z)} `:``,o=t?(0,n.styleText)(`yellow`,B):``;return`${r.trim()}
53
+ `}}}}).prompt()},rt=`${(0,r.styleText)(`gray`,I)} `,V={message:async(e,{symbol:t=(0,r.styleText)(`gray`,I)}={})=>{process.stdout.write(`${(0,r.styleText)(`gray`,I)}
54
+ ${t} `);let n=3;for await(let t of e){t=t.replace(/\n/g,`
55
+ ${rt}`),t.includes(`
56
+ `)&&(n=3+(0,r.stripVTControlCharacters)(t.slice(t.lastIndexOf(`
57
+ `))).length);let e=(0,r.stripVTControlCharacters)(t).length;n+e<process.stdout.columns?(n+=e,process.stdout.write(t)):(process.stdout.write(`
58
+ ${rt}${t.trimStart()}`),n=3+(0,r.stripVTControlCharacters)(t.trimStart()).length)}process.stdout.write(`
59
+ `)},info:e=>V.message(e,{symbol:(0,r.styleText)(`blue`,Ve)}),success:e=>V.message(e,{symbol:(0,r.styleText)(`green`,He)}),step:e=>V.message(e,{symbol:(0,r.styleText)(`green`,F)}),warn:e=>V.message(e,{symbol:(0,r.styleText)(`yellow`,Ue)}),warning:e=>V.warn(e),error:e=>V.message(e,{symbol:(0,r.styleText)(`red`,We)})},it=e=>new De({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??M.withGuide,n=`${`${t?`${(0,r.styleText)(`gray`,I)}
60
+ `:``}${Ge(this.state)} `}${e.message}
61
+ `,i=e.placeholder?(0,r.styleText)(`inverse`,e.placeholder[0])+(0,r.styleText)(`dim`,e.placeholder.slice(1)):(0,r.styleText)([`inverse`,`hidden`],`_`),a=this.userInput?this.userInputWithCursor:i,o=this.value??``;switch(this.state){case`error`:{let e=this.error?` ${(0,r.styleText)(`yellow`,this.error)}`:``,i=t?`${(0,r.styleText)(`yellow`,I)} `:``,o=t?(0,r.styleText)(`yellow`,L):``;return`${n.trim()}
62
62
  ${i}${a}
63
63
  ${o}${e}
64
- `}case`submit`:{let e=o?` ${(0,n.styleText)(`dim`,o)}`:``;return`${r}${t?(0,n.styleText)(`gray`,z):``}${e}`}case`cancel`:{let e=o?` ${(0,n.styleText)([`strikethrough`,`dim`],o)}`:``,i=t?(0,n.styleText)(`gray`,z):``;return`${r}${i}${e}${o.trim()?`
65
- ${i}`:``}`}default:return`${r}${t?`${(0,n.styleText)(`cyan`,z)} `:``}${a}
66
- ${t?(0,n.styleText)(`cyan`,B):``}
67
- `}}}).prompt();var et=class{info(e){process.stdout.write(`${h.default.blue(`ℹ ${e}`)}\n`)}warn(e){process.stderr.write(`${h.default.yellow(`⚠ ${e}`)}\n`)}error(e){process.stderr.write(`${h.default.red(`✘ ${e}`)}\n`)}success(e){process.stdout.write(`${h.default.green(`✔ ${e}`)}\n`)}step(e){process.stdout.write(`○ ${e}\n`)}note(e,t){Je(e,t)}log(e){process.stdout.write(`${e}\n`)}spinner(){return Xe()}json(e){process.stdout.write(`${JSON.stringify(e,null,2)}\n`)}cancel(e){process.stderr.write(`${h.default.red(`✘ ${e}`)}\n`)}fatal(e,t){if(process.stderr.write(`${h.default.red(`✘ ${e}`)}\n`),t){let e=`${h.default.red(t instanceof Error?t.stack??String(t):String(t))}\n`;process.stderr.write(e)}throw t instanceof Error?t:Error(e)}refuse(e){}finish(e,t){Ge(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 _:e.isQuiet?this.reporter=new v:this.reporter=new et}debug(e){this.reporter.log(e)}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)}refuse(e){this.reporter.refuse(e)}finish(e,t){this.reporter.finish(e,t)}async flush(){await this.reporter.flush()}};function nt(e){return e instanceof Error?e.stack??e.message:String(e)}function rt(e,t,n){e(`${t}: ${n instanceof Error?n.message:String(n)}`),n instanceof Error&&n.stack&&e(n.stack)}const it={debug:0,info:1,warn:2,error:3},at=new Set([`debug`,`info`,`warn`,`error`,`silent`]);function ot(e){if(!e)return;let t=e.trim().toLowerCase();if(at.has(t))return t}function st(){if(!(typeof process>`u`))return ot(process.env?.ARKENV_LOG_LEVEL)}function ct(e){return e?.level??st()??`info`}function lt(e,t){return e===`silent`?!1:it[t]>=it[e]}function ut(e,t,n){return(r,...i)=>{lt(e,t)&&console[n](r,...i)}}function dt(e){let t=ct(e);return{debug:ut(t,`debug`,`debug`),info:ut(t,`info`,`info`),warn:ut(t,`warn`,`warn`),error:ut(t,`error`,`error`)}}let ft=dt();const pt=`[ArkEnv]`,mt=`[ArkEnv Watcher]`;function ht(e){return{logBuildWarning(t){e.warn(`⚠️ ${pt} ${t}`)},logBuildError(t){e.error(`❌ ${pt} ${t}`)},logBuildErrorDetail(t){e.error(t)},logBuildErrorBlankLine(){e.error(``)},logBuildErrorWithCause(t,n){e.error(`❌ ${pt} ${t}`),e.error(nt(n))},logWatcherError(t){e.error(`${mt} ${t}`)},logWatcherErrorWithCause(t,n){e.error(`${mt} ${t}`),e.error(nt(n))}}}let gt=ht(ft);function _t(e,t){gt.logBuildErrorWithCause(e,t)}var vt=e.n({safeAppend:()=>bt});const yt=`// @arkenv-types`;async function bt(e,t,n,r){try{let r=await s.default.readFile(e,`utf-8`),i=n===`vite`?`ImportMetaEnvAugmented`:`ProcessEnvAugmented`;if(r.includes(yt)||r.includes(i))return!1;let a=o.default.dirname(e),c=o.default.relative(a,t).replace(/\.(ts|js|tsx|jsx)$/,``).split(o.default.sep).join(`/`),l=c.startsWith(`.`)?c:`./${c}`,u=n===`vite`?xt(l):St(l),d=r.endsWith(`
64
+ `}case`submit`:{let e=o?` ${(0,r.styleText)(`dim`,o)}`:``;return`${n}${t?(0,r.styleText)(`gray`,I):``}${e}`}case`cancel`:{let e=o?` ${(0,r.styleText)([`strikethrough`,`dim`],o)}`:``,i=t?(0,r.styleText)(`gray`,I):``;return`${n}${i}${e}${o.trim()?`
65
+ ${i}`:``}`}default:return`${n}${t?`${(0,r.styleText)(`cyan`,I)} `:``}${a}
66
+ ${t?(0,r.styleText)(`cyan`,L):``}
67
+ `}}}).prompt();var at=class{info(e){process.stdout.write(`${_.default.blue(`ℹ ${e}`)}\n`)}warn(e){process.stderr.write(`${_.default.yellow(`⚠ ${e}`)}\n`)}error(e){process.stderr.write(`${_.default.red(`✘ ${e}`)}\n`)}success(e){process.stdout.write(`${_.default.green(`✔ ${e}`)}\n`)}step(e){process.stdout.write(`○ ${e}\n`)}note(e,t){$e(e,t)}log(e){process.stdout.write(`${e}\n`)}spinner(){return tt()}json(e){process.stdout.write(`${JSON.stringify(e,null,2)}\n`)}cancel(e){process.stderr.write(`${_.default.red(`✘ ${e}`)}\n`)}fatal(e,t){if(process.stderr.write(`${_.default.red(`✘ ${e}`)}\n`),t){let e=`${_.default.red(t instanceof Error?t.stack??String(t):String(t))}\n`;process.stderr.write(e)}throw t instanceof Error?t:Error(e)}refuse(e){}finish(e,t){Xe(e)}async flush(){return new Promise(e=>{process.stderr.write(``,()=>e())})}},ot=class{constructor(e){this.options=e,this.originalStdoutWrite=process.stdout.write,e.isJson?this.reporter=new y:e.isQuiet?this.reporter=new b:this.reporter=new at}debug(e){this.reporter.log(e)}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)}refuse(e){this.reporter.refuse(e)}finish(e,t){this.reporter.finish(e,t)}async flush(){await this.reporter.flush()}};function st(e){return e instanceof Error?e.stack??e.message:String(e)}function ct(e,t,n){e(`${t}: ${n instanceof Error?n.message:String(n)}`),n instanceof Error&&n.stack&&e(n.stack)}const lt={debug:0,info:1,warn:2,error:3},ut=new Set([`debug`,`info`,`warn`,`error`,`silent`]);function dt(e){if(!e)return;let t=e.trim().toLowerCase();if(ut.has(t))return t}function ft(){if(!(typeof process>`u`))return dt(process.env?.ARKENV_LOG_LEVEL)}function pt(e){return e?.level??ft()??`info`}function mt(e,t){return e===`silent`?!1:lt[t]>=lt[e]}function ht(e,t,n){return(r,...i)=>{mt(e,t)&&console[n](r,...i)}}function gt(e){let t=pt(e);return{debug:ht(t,`debug`,`debug`),info:ht(t,`info`,`info`),warn:ht(t,`warn`,`warn`),error:ht(t,`error`,`error`)}}let _t=gt();const vt=`[ArkEnv]`,yt=`[ArkEnv Watcher]`;function bt(e){return{logBuildWarning(t){e.warn(`⚠️ ${vt} ${t}`)},logBuildError(t){e.error(`❌ ${vt} ${t}`)},logBuildErrorDetail(t){e.error(t)},logBuildErrorBlankLine(){e.error(``)},logBuildErrorWithCause(t,n){e.error(`❌ ${vt} ${t}`),e.error(st(n))},logWatcherError(t){e.error(`${yt} ${t}`)},logWatcherErrorWithCause(t,n){e.error(`${yt} ${t}`),e.error(st(n))}}}let xt=bt(_t);function St(e,t){xt.logBuildErrorWithCause(e,t)}var Ct=e.n({safeAppend:()=>Tt});const wt=`// @arkenv-types`;async function Tt(e,t,n,r){try{let r=await c.default.readFile(e,`utf-8`),i=n===`vite`?`ImportMetaEnvAugmented`:`ProcessEnvAugmented`;if(r.includes(wt)||r.includes(i))return!1;let a=s.default.dirname(e),o=s.default.relative(a,t).replace(/\.(ts|js|tsx|jsx)$/,``).split(s.default.sep).join(`/`),l=o.startsWith(`.`)?o:`./${o}`,u=n===`vite`?Et(l):Dt(l),d=r.endsWith(`
68
68
  `)?``:`
69
- `;return await s.default.appendFile(e,`${d}\n${yt}\n${u}\n`,`utf-8`),!0}catch(t){let n=`Failed to append to ${e}`;return r?rt(r.error.bind(r),n,t):_t(n,t),!1}}function xt(e){return c.default`
69
+ `;return await c.default.appendFile(e,`${d}\n${wt}\n${u}\n`,`utf-8`),!0}catch(t){let n=`Failed to append to ${e}`;return r?ct(r.error.bind(r),n,t):St(n,t),!1}}function Et(e){return l.default`
70
70
  type ImportMetaEnvAugmented = import("@arkenv/vite-plugin").ImportMetaEnvAugmented<
71
71
  typeof import("${e}").Env
72
72
  >;
@@ -76,7 +76,7 @@ ${t?(0,n.styleText)(`cyan`,B):``}
76
76
  interface ImportMeta {
77
77
  readonly env: ImportMetaEnv;
78
78
  }
79
- `}function St(e){return c.default`
79
+ `}function Dt(e){return l.default`
80
80
  type ProcessEnvAugmented = import("@arkenv/bun-plugin").ProcessEnvAugmented<
81
81
  typeof import("${e}").Env
82
82
  >;
@@ -84,47 +84,22 @@ ${t?(0,n.styleText)(`cyan`,B):``}
84
84
  declare namespace NodeJS {
85
85
  interface ProcessEnv extends ProcessEnvAugmented {}
86
86
  }
87
- `}async function Ct(e,t){for(let n of t)try{return await s.default.access(o.default.join(e,n)),!0}catch{}return!1}async function wt(e=process.cwd(),t){if(t?.compilerOptions?.types){let e=t.compilerOptions.types;if(e.includes(`vite`)||e.includes(`vite/client`))return`vite`}try{let t=o.default.join(e,`package.json`),n=await s.default.readFile(t,`utf-8`),r=JSON.parse(n),i={...r.dependencies,...r.devDependencies};if(i.vite)return`vite`;if(i.next)return`nextjs`;if(i.nuxt)return`nuxt`}catch{}return await Ct(e,[`vite.config.ts`,`vite.config.js`])?`vite`:await Ct(e,[`next.config.ts`,`next.config.js`,`next.config.mjs`,`next.config.cjs`])?`nextjs`:await Ct(e,[`nuxt.config.ts`,`nuxt.config.js`,`nuxt.config.mts`,`nuxt.config.mjs`,`nuxt.config.cjs`])?`nuxt`:(await Tt(e,t)).length>0?`bun-fullstack`:`vanilla`}async function Tt(e=process.cwd(),t){let n=[];try{let t=o.default.join(e,`bunfig.toml`),r=await s.default.readFile(t,`utf-8`);(r.includes(`[serve]`)||r.includes(`[serve.static]`))&&n.push(`serve`),r.includes(`[build]`)&&n.push(`build`)}catch{}if(n.includes(`serve`)&&n.includes(`build`))return n;let{walk:r}=await Promise.resolve().then(()=>Ot),i=await r(e),a=n.includes(`serve`),c=n.includes(`build`);for(let e of i)try{let t=await s.default.readFile(e,`utf-8`);if(!a&&(t.includes(`Bun.serve`)||t.includes(`serve(`))&&(/from\s+['"]bun['"]/.test(t)||t.includes(`Bun.serve`))&&(a=!0,n.push(`serve`)),!c&&(t.includes(`Bun.build`)||t.includes(`build(`))&&(/from\s+['"]bun['"]/.test(t)||t.includes(`Bun.build`))&&(c=!0,n.push(`build`)),a&&c)break}catch{}return n}async function Et(e=process.cwd(),t){let n=process.env.npm_config_user_agent?.toString()||``;if(n.includes(`pnpm`))return`pnpm`;if(n.includes(`yarn`))return`yarn`;if(n.includes(`bun`))return`bun`;if(n.includes(`npm`))return`npm`;let r=t?.path?o.default.dirname(t.path):e;for(;r!==o.default.parse(r).root;){try{let e=o.default.join(r,`package.json`),t=await s.default.readFile(e,`utf-8`),n=JSON.parse(t);if(n.packageManager){if(n.packageManager.startsWith(`pnpm`))return`pnpm`;if(n.packageManager.startsWith(`yarn`))return`yarn`;if(n.packageManager.startsWith(`bun`))return`bun`}}catch{}let e=[];try{e=await s.default.readdir(r)}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`;r=o.default.dirname(r)}return`npm`}async function Dt(e=process.cwd(),t){let n=t;if(!n){let{findTsConfig:t,loadTsConfig:r}=await Promise.resolve().then(()=>Pt),i=await t(e);i&&(n=await r(i))}if(n?.compilerOptions?.rootDir){let t=n.compilerOptions.rootDir,r=o.default.relative(e,t);return r&&r!==`.`&&!r.startsWith(`..`)&&!o.default.isAbsolute(r)?`./${r}/env.ts`:`./env.ts`}try{return await s.default.access(o.default.join(e,`src`)),`./src/env.ts`}catch{return`./env.ts`}}var Ot=e.n({getEnvExampleKeys:()=>Nt,parseEnvExample:()=>At,resolveImportPaths:()=>jt,scanProjectEnvKeys:()=>Mt,walk:()=>kt});async function kt(e,t=[]){try{let n=await s.default.readdir(e,{withFileTypes:!0});for(let r of n)if(r.isDirectory()){let n=r.name;if(n===`node_modules`||n===`dist`||n===`build`||n===`.git`||n===`.turbo`||n===`scratch`)continue;await kt(o.default.join(e,n),t)}else r.isFile()&&/\.(ts|tsx|js|jsx)$/.test(r.name)&&!r.name.endsWith(`.d.ts`)&&t.push(o.default.join(e,r.name))}catch{}return t}function At(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 jt(e,t,n){if(e.startsWith(`.`))return[o.default.resolve(o.default.dirname(n),e)];if(o.default.isAbsolute(e))return[e];let r=t.compilerOptions||{},i=r.baseUrl||o.default.dirname(t.path),a=r.paths||{},s=[];for(let[e,t]of Object.entries(a)){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:n,hadStar:r}of s)if(r&&e.startsWith(t)||!r&&e===t){let r=e.slice(t.length);return n.map(e=>{let t=`${e.replace(/\*$/,``)}${r}`;return o.default.resolve(i,t)})}return r.baseUrl?[o.default.resolve(i,e)]:[]}async function Mt(e,t,n){let r=[],i=await kt(e),a=n?n.replace(/\.(ts|js|tsx|jsx)$/,``):null;for(let e of i)try{let n=await s.default.readFile(e,`utf-8`),i=n.matchAll(/process\.env\.([A-Z_][A-Z0-9_]*)/g);for(let e of i)e[1]&&r.push(e[1]);let c=n.matchAll(/import\.meta\.env\.([A-Z_][A-Z0-9_]*)/g);for(let e of c)e[1]&&r.push(e[1]);if(a){let i=n.matchAll(/import\s+[^;]*from\s+['"]([^'"]+)['"]/g);for(let s of i){let i=s[1],c=[];if(t?c=jt(i,t,e):i.startsWith(`.`)&&(c=[o.default.resolve(o.default.dirname(e),i)]),c.some(e=>e.replace(/\.(ts|js|tsx|jsx)$/,``)===a)){let e=n.matchAll(/\benv\.([A-Z_][A-Z0-9_]*)/g);for(let t of e)t[1]&&r.push(t[1])}}}}catch{}return Array.from(new Set(r))}async function Nt(e=process.cwd(),t,n){let r=o.default.join(e,`.env.example`);try{let e=At(await s.default.readFile(r,`utf-8`));if(e.length>0)return{keys:e,source:`.env.example`}}catch{}let i=await Mt(e,t,n);return i.length>0?{keys:i,source:`project`}:null}var Pt=e.n({checkTsConfig:()=>Rt,findTsConfig:()=>It,loadTsConfig:()=>Lt});const Ft=(0,u.createRequire)(require(`url`).pathToFileURL(__filename).href).resolve;async function It(e=process.cwd()){let t=[`tsconfig.app.json`,`tsconfig.json`,`tsconfig.base.json`,`tsconfig.node.json`],n=e;for(;n!==o.default.parse(n).root;){for(let e of t){let t=o.default.join(n,e);try{return await s.default.access(t),t}catch{}}n=o.default.dirname(n)}return null}async function Lt(e,t=new Set){let n=o.default.resolve(e);if(t.has(n))throw Error(`Circular extends dependency detected in tsconfig.json: ${n}`);t.add(n);let r=``;try{r=await s.default.readFile(e,`utf-8`)}catch{return{path:e,compilerOptions:{}}}let i=(0,d.parse)(r)||{},a=i.compilerOptions||{},c={};if(i.extends){let n=Array.isArray(i.extends)?i.extends:[i.extends];for(let r of n){let n;if(r.startsWith(`.`)||o.default.isAbsolute(r))n=o.default.resolve(o.default.dirname(e),r);else try{n=Ft(r,{paths:[o.default.dirname(e)]})}catch{n=o.default.resolve(o.default.dirname(e),`node_modules`,r)}let i={...(await Lt(n,t)).compilerOptions};i.baseUrl&&=o.default.resolve(o.default.dirname(n),i.baseUrl),i.rootDir&&=o.default.resolve(o.default.dirname(n),i.rootDir),c={...c,...i}}}let l={...a};return l.baseUrl&&=o.default.resolve(o.default.dirname(e),l.baseUrl),l.rootDir&&=o.default.resolve(o.default.dirname(e),l.rootDir),c={...c,...l},{...i,path:e,compilerOptions:c}}async function Rt(e=process.cwd()){let t=await It(e);if(!t)return{status:`not_found`};let n=o.default.basename(t);try{let e=await Lt(t);return e?.compilerOptions?.strict===!0?{status:`strict`,file:n,parsed:e}:{status:`not_strict`,file:n,parsed:e}}catch{return{status:`not_found`}}}function zt(e,t){let n=e.replace(/^v/,``).split(`.`).map(Number),r=t.replace(/^v/,``).split(`.`).map(Number);for(let e=0;e<3;e++){let t=n[e]||0,i=r[e]||0;if(t>i)return 1;if(t<i)return-1}return 0}function Bt(e){let t=e.trim().match(/^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?/);return t?[t[1],t[2]??`0`,t[3]??`0`].join(`.`):null}function Vt(e,t){let n=e.trim(),r=n.match(/^[\^~]?\s*(v?\d+(?:\.\d+){0,2})$/);if(r){let e=Bt(r[1]);return e!==null&&zt(e,t)>=0}let i=n.match(/(?:>=|>|<=|<|=)\s*v?\d+(?:\.\d+){0,2}/g);return!i||i.join(` `)!==n.replace(/\s+/g,` `)?!1:i.some(e=>{let n=e.match(/^(>=|>|<=|<|=)\s*(v?\d+(?:\.\d+){0,2})$/);if(!n)return!1;let[,r,i]=n,a=Bt(i);return a&&(r===`>=`||r===`>`||r===`=`)?zt(a,t)>=0:!1})}async function Ht(e=process.cwd()){let t=[],n=process.version,r=`22.0.0`;zt(n,r)===-1?t.push({status:`fail`,requirement:`Node.js Version`,message:`Node.js version must be >= ${r}.`,current:n,expected:`>= ${r}`}):t.push({status:`pass`,requirement:`Node.js Version`,message:`Node.js version is compatible.`});let i=null;try{let n=o.default.join(e,`package.json`),r=await s.default.readFile(n,`utf-8`);i=JSON.parse(r),t.push({status:`pass`,requirement:`package.json`,message:`package.json found.`})}catch{t.push({status:`warn`,requirement:`package.json`,message:`package.json not found in the current directory.`})}if(i){let e={...i.dependencies,...i.devDependencies}.typescript,n=`5.1.0`;e?Vt(e,n)?t.push({status:`pass`,requirement:`TypeScript Version`,message:`TypeScript version is compatible.`}):t.push({status:`fail`,requirement:`TypeScript Version`,message:`TypeScript version should be >= ${n}.`,current:e,expected:`>= ${n}`}):t.push({status:`warn`,requirement:`TypeScript Version`,message:`TypeScript not found in package.json dependencies.`})}let a=await Rt(e);if(a.status===`not_found`)t.push({status:`warn`,requirement:`tsconfig.json`,message:`tsconfig.json not found.`});else{let e=a.parsed.compilerOptions||{};e.strict===!0?t.push({status:`pass`,requirement:`TypeScript Strict Mode`,message:`Strict mode is enabled.`}):t.push({status:`fail`,requirement:`TypeScript Strict Mode`,message:`Strict mode must be enabled.`,current:`false`,expected:`true`});let n=e.moduleResolution?.toLowerCase(),r=e.module?.toLowerCase();[`bundler`,`node16`,`nodenext`].includes(n||``)||!n&&(r===`node16`||r===`nodenext`)?t.push({status:`pass`,requirement:`TypeScript moduleResolution`,message:`moduleResolution is set to ${n||`implicit`}.`}):t.push({status:`fail`,requirement:`TypeScript moduleResolution`,message:`moduleResolution must be set to 'bundler', 'node16', or 'nodenext'.`,current:n||`default`,expected:`bundler, node16, or nodenext`})}return t}var Ut=class{constructor(e){this.logger=e}async isEmptyDirectory(e=process.cwd()){try{return(await s.default.readdir(e)).length===0}catch{return!1}}async hasPackageJson(e=process.cwd()){try{return await s.default.access(o.default.join(e,`package.json`)),!0}catch{return!1}}async findTsConfig(e=process.cwd()){return It(e)}async loadTsConfig(e,t=new Set){return Lt(e,t)}async getEnvExampleKeys(e=process.cwd(),t,n){return Nt(e,t,n)}async suggestDefaultEnvPath(e=process.cwd(),t){return Dt(e,t)}async checkTsConfig(e=process.cwd()){return Rt(e)}async checkRequirements(e=process.cwd()){return Ht(e)}async detectFramework(e=process.cwd(),t){return wt(e,t)}async detectBunFeatures(e=process.cwd(),t){return Tt(e,t)}async detectPackageManager(e=process.cwd(),t){return Et(e,t)}async hasSkill(e=process.cwd()){try{let t=o.default.join(e,`skills-lock.json`),n=await s.default.readFile(t,`utf-8`),r=JSON.parse(n);if(r&&typeof r==`object`&&r.skills&&typeof r.skills==`object`&&`arkenv`in r.skills)return!0}catch{}for(let t of[`skills/arkenv/SKILL.md`,`.agent/skills/arkenv/SKILL.md`,`.agents/skills/arkenv/SKILL.md`])try{return await s.default.access(o.default.join(e,t)),!0}catch{}return!1}async checkGitStatus(e=process.cwd()){try{return(0,l.execSync)(`git status --porcelain`,{cwd:e,encoding:`utf-8`}).trim().length===0?{status:`clean`}:{status:`dirty`}}catch(e){let t=e;return t.code===`ENOENT`?(this.logger?.log(`Git is not installed on this system. Skipping git status check.`),{status:`not_a_repo`}):typeof t.stderr==`string`&&t.stderr.includes(`not a git repository`)?{status:`not_a_repo`}:{status:`unknown`}}}};const G=e=>h.default.cyan(e),Wt=h.default.blue(`⛯`),Gt=e=>c.default`
88
- /// <reference types="vite/client" />
89
-
90
- type ImportMetaEnvAugmented =
91
- import("@arkenv/vite-plugin").ImportMetaEnvAugmented<
92
- typeof import("./${o.default.basename(e).replace(/\.(ts|js|tsx|jsx)$/,``)}").Env
93
- >;
94
-
95
- interface ImportMetaEnv extends ImportMetaEnvAugmented {}
96
-
97
- interface ImportMeta {
98
- readonly env: ImportMetaEnv;
99
- }
100
- `,Kt=e=>c.default`
101
- /// <reference types="bun-types" />
102
-
103
- type ProcessEnvAugmented = import("@arkenv/bun-plugin").ProcessEnvAugmented<
104
- typeof import("./${o.default.basename(e).replace(/\.(ts|js|tsx|jsx)$/,``)}").Env
105
- >;
106
-
107
- declare namespace NodeJS {
108
- interface ProcessEnv extends ProcessEnvAugmented {}
109
- }
110
- `,K={nextjs:{id:`nextjs`,packageName:`@arkenv/nextjs`,clientPrefix:`NEXT_PUBLIC_`,displayName:`Next.js`,supportsWrapNextjsConfig:!0},nuxt:{id:`nuxt`,packageName:`@arkenv/nuxt`,clientPrefix:`NUXT_PUBLIC_`,displayName:`Nuxt`,supportsWrapNextjsConfig:!1}};function qt(e){if(e===`nextjs`||e===`nuxt`)return K[e]}function Jt(e){return e===`nextjs`||e===`nuxt`}const q={nextjs:K.nextjs.clientPrefix,nuxt:K.nuxt.clientPrefix,vite:`VITE_`,"bun-fullstack":`BUN_PUBLIC_`,vanilla:``};function Yt(e){let{typeFilePath:t,typeFileExists:n,envDtsHandling:r,templateContent:i,appendContent:a,overwriteLabel:o,appendLabel:s}=e;return r===`skip`?[]:r===`append`||!r&&n?[{path:t,content:a,action:`append`,label:s}]:[{path:t,content:i,action:n?`overwrite`:`create`,label:o}]}function Xt(e,t){let n=qt(e.framework);return{framework:e.framework,clientPrefix:q[e.framework],...n?.packageName!==void 0&&{packageName:n.packageName},disableCodegen:e.disableCodegen===!0,...e.layout!==void 0&&{layout:e.layout},...t!==void 0&&{nextjsImportPath:t},...e.hostPreset!==void 0&&{hostPreset:e.hostPreset}}}const Zt={NODE_ENV:`development`,PORT:`3000`,DATABASE_URL:`postgres://localhost:5432/mydb`},Qt=`generated`;function $t(e){let t={};for(let n of e)t[n]=Zt[n]??``;return t}function en(e,t,n){if(!n)return;let r=((n.compilerOptions||{}).paths||{})[`@/*`];if(!r)return;let i=n.path?o.default.dirname(n.path):e,a=o.default.relative(i,t).replace(/\\/g,`/`);for(let e of r){let t=e.replace(/^\.\//,``).replace(/\*$/,``);if(t===``||a.startsWith(t)){let e=a;return t!==``&&a.startsWith(t)&&(e=a.substring(t.length)),e=e.replace(/^\/+/,``).replace(/\/+$/,``),`@/${e}/env.gen`.replace(/\/+/g,`/`)}}}function tn(e,t,n){if(!(!Jt(n.framework)||n.disableCodegen||!e.tsConfig?.parsed))return en(e.cwd,t,e.tsConfig.parsed)}function nn(e,t){return tn(e,o.default.join(e.targetDir,Qt),t)}function rn(e,t,n){return tn(e,o.default.join(t,Qt),n)}function an(e,t,n,r){let i=Xt(t,r),a=e.getSimpleTemplate(t.envKeys??[],i),o=n.existingFiles.includes(n.targetPath);return!o||t.overwriteEnvSchemaFile!==!1?[{path:n.targetPath,content:a,action:o?`overwrite`:`create`,label:`environment schema`}]:[]}function on(e,t,n,r){let i=o.default.extname(n.targetPath),a=n.targetPath.slice(0,-i.length),s=o.default.join(a,`internal`,`shared${i}`),c=o.default.join(a,`client${i}`),l=o.default.join(a,`server${i}`),u=Xt(t,r),d=e.getStrictTemplates(t.envKeys??[],u),f=n.existingFiles.includes(s),p=n.existingFiles.includes(c),m=n.existingFiles.includes(l),h=[];return(!f||t.overwriteEnvSchemaFile!==!1)&&h.push({path:s,content:d.shared,action:f?`overwrite`:`create`,label:`shared environment schema`}),(!p||t.overwriteEnvSchemaFile!==!1)&&h.push({path:c,content:d.client,action:p?`overwrite`:`create`,label:`client environment schema`}),(!m||t.overwriteEnvSchemaFile!==!1)&&h.push({path:l,content:d.server,action:m?`overwrite`:`create`,label:`server environment schema`}),h}const sn={clientPrefix:q[`bun-fullstack`],getEnvDefaults(e){return e&&e.length>0?$t(e):{BUN_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`}},getDependencies(e){return e.bunFeatures?.length?[`@arkenv/bun-plugin`]:[]},requiresArktypePeer(e){return!!e.bunFeatures?.length},bootstrap(e){return(0,t.shake)({framework:`bun-fullstack`,bunFeatures:e.bunFeatures})},getSchemaFiles(e,t,n){return an(e,t,n)},getTypeDefinitionFiles(e,t){if(!e.bunFeatures?.length||e.installTypeDefinitions===!1)return[];let n=o.default.join(t.targetDir,`bun-env.d.ts`);return Yt({typeFilePath:n,typeFileExists:t.existingFiles.includes(n),envDtsHandling:e.envDtsHandling,templateContent:Kt(e.path),appendContent:t.targetPath,overwriteLabel:`bun-fullstack types`,appendLabel:`${e.framework} types`})}};function cn(e){let{id:n,packageName:r,clientPrefix:i,supportsWrapNextjsConfig:a}=e,s=`${i}API_URL`;return{clientPrefix:i,getEnvDefaults(e){return e&&e.length>0?$t(e):{DATABASE_URL:`postgres://localhost:5432/mydb`,[s]:`https://api.example.com`,NODE_ENV:`development`}},getDependencies(){return[r]},requiresArktypePeer(){return!0},bootstrap(e){return(0,t.shake)({framework:n,...a&&{wrapNextjsConfig:e.wrapNextjsConfig!==!1},disableCodegen:e.disableCodegen})},getSchemaFiles(e,t,n){if(t.layout===`strict`){let r=o.default.extname(n.targetPath);return on(e,t,n,rn(n,n.targetPath.slice(0,-r.length),t))}return an(e,t,n,nn(n,t))},getTypeDefinitionFiles(){return[]}}}const ln=cn(K.nextjs),un=cn(K.nuxt),dn={clientPrefix:q.vanilla,getEnvDefaults(e){return e&&e.length>0?$t(e):{PORT:`3000`,NODE_ENV:`development`}},getDependencies(){return[]},requiresArktypePeer(){return!1},bootstrap(){},getSchemaFiles(e,t,n){return an(e,t,n)},getTypeDefinitionFiles(){return[]}},fn={vite:{clientPrefix:q.vite,getEnvDefaults(e){return e&&e.length>0?$t(e):{PORT:`3000`,VITE_API_URL:`https://api.example.com`}},getDependencies(){return[`@arkenv/vite-plugin`]},requiresArktypePeer(){return!0},bootstrap(e){return(0,t.shake)({framework:`vite`})},getSchemaFiles(e,t,n){return an(e,t,n)},getTypeDefinitionFiles(e,t){return e.installTypeDefinitions===!1?[]:Yt({typeFilePath:o.default.join(t.targetDir,`vite-env.d.ts`),typeFileExists:t.existingFiles.includes(o.default.join(t.targetDir,`vite-env.d.ts`)),envDtsHandling:e.envDtsHandling,templateContent:Gt(e.path),appendContent:t.targetPath,overwriteLabel:`vite types`,appendLabel:`${e.framework} types`})}},"bun-fullstack":sn,nextjs:ln,nuxt:un,vanilla:dn},J={vercel:{label:`Vercel`,hint:`Add VERCEL, VERCEL_ENV, VERCEL_URL, etc.`,serverOnlyKeys:[`VERCEL`],clientExposedKeys:[`VERCEL_ENV`,`VERCEL_URL`],fields:{VERCEL:{type:`string`},VERCEL_ENV:{type:`enum`,values:[`production`,`preview`,`development`]},VERCEL_URL:{type:`string`}}},netlify:{label:`Netlify`,hint:`Add NETLIFY, CONTEXT, URL, DEPLOY_URL, etc.`,serverOnlyKeys:[`NETLIFY`,`DEPLOY_URL`],clientExposedKeys:[`CONTEXT`,`URL`],fields:{NETLIFY:{type:`string`},DEPLOY_URL:{type:`string`},CONTEXT:{type:`enum`,values:[`production`,`deploy-preview`,`branch-deploy`]},URL:{type:`string`}}},cloudflare:{label:`Cloudflare Pages/Workers`,hint:`Add CF_PAGES, CF_PAGES_COMMIT_SHA, CF_PAGES_BRANCH, CF_PAGES_URL, etc.`,serverOnlyKeys:[`CF_PAGES`,`CF_PAGES_COMMIT_SHA`],clientExposedKeys:[`CF_PAGES_BRANCH`,`CF_PAGES_URL`],fields:{CF_PAGES:{type:`string`},CF_PAGES_COMMIT_SHA:{type:`string`},CF_PAGES_BRANCH:{type:`string`},CF_PAGES_URL:{type:`string`}}},railway:{label:`Railway`,hint:`Add RAILWAY_ENVIRONMENT_NAME, RAILWAY_PUBLIC_DOMAIN, RAILWAY_GIT_COMMIT_SHA, etc.`,serverOnlyKeys:[`RAILWAY_ENVIRONMENT_NAME`,`RAILWAY_PUBLIC_DOMAIN`,`RAILWAY_SERVICE_NAME`,`RAILWAY_GIT_COMMIT_SHA`],clientExposedKeys:[],fields:{RAILWAY_ENVIRONMENT_NAME:{type:`string`},RAILWAY_PUBLIC_DOMAIN:{type:`string`},RAILWAY_SERVICE_NAME:{type:`string`},RAILWAY_GIT_COMMIT_SHA:{type:`string`}}},render:{label:`Render`,hint:`Add RENDER, RENDER_SERVICE_ID, RENDER_SERVICE_TYPE, RENDER_EXTERNAL_URL, etc.`,serverOnlyKeys:[`RENDER`,`RENDER_SERVICE_ID`,`RENDER_SERVICE_TYPE`,`RENDER_EXTERNAL_URL`],clientExposedKeys:[],fields:{RENDER:{type:`string`},RENDER_SERVICE_ID:{type:`string`},RENDER_SERVICE_TYPE:{type:`string`},RENDER_EXTERNAL_URL:{type:`string`}}},fly:{label:`Fly.io`,hint:`Add FLY_APP_NAME, FLY_REGION, FLY_ALLOC_ID, etc.`,serverOnlyKeys:[`FLY_APP_NAME`,`FLY_REGION`,`FLY_ALLOC_ID`],clientExposedKeys:[],fields:{FLY_APP_NAME:{type:`string`},FLY_REGION:{type:`string`},FLY_ALLOC_ID:{type:`string`}}}};function pn(e){return e===`none`||Object.keys(J).includes(e)}function mn(e){return Object.keys(J).includes(e)}function Y(e,t){if(e===`none`)return[];let n=J[e],r=[...n.serverOnlyKeys,...n.clientExposedKeys];if(t)for(let e of n.clientExposedKeys)r.push(`${t}${e}`);return r}function hn(e,t){if(e===`none`)return{clientKeys:[],serverKeys:[]};let n=J[e],r=[...n.serverOnlyKeys,...n.clientExposedKeys],i=[];if(t)for(let e of n.clientExposedKeys)i.push(`${t}${e}`);return{clientKeys:i,serverKeys:r}}function gn(e,t,n){if(!n||n===`none`)return;let r=t&&e.startsWith(t)?e.slice(t.length):e,i=J[n].fields;return r in i?i[r]:void 0}function _n(e,t,n){let r=Y(t??`none`,n);if(!(!e?.length&&r.length===0))return Array.from(new Set([...e??[],...r]))}function vn(e,t){return t.type===`string`?e.formatOptionalString():e.formatOptionalEnum(t.values)}function X(e,t,n,r){let i=gn(t,n,r);if(i)return vn(e,i)}const yn={formatOptionalString(){return`"string?"`},formatOptionalEnum(e){return`"'${e.join(`' | '`)}'?"`},formatStrictField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: "'development' | 'production' | 'test' = 'development'",`;if(t===`server`&&e===`PORT`)return`PORT: "number.port = 3000",`;let i=X(yn,e,n,r);return i?`${e}: ${i},`:`${e}: "string?",`},formatCodegenField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: "'development' | 'production' | 'test' = 'development'",`;let i=X(yn,e,n,r);return i?`${e}: ${i},`:`${e}: "string?",`},defaultSimpleSchemaFields:` NODE_ENV: "'development' | 'production' | 'test' = 'development'",
111
- PORT: "number.port = 3000",`,formatSimpleSchemaFields(e,t=``,n=void 0){return e.map(e=>`\t\t${e}: ${X(yn,e,t,n)??`"string?"`},`).join(`
112
- `)},getDefaultStrictFields(e){let t=`${e}API_URL`;return{serverFields:[`DATABASE_URL: "string = 'postgres://localhost:5432/mydb'",`],clientFields:[`${t}: "string = 'https://api.example.com'",`],sharedFields:[`NODE_ENV: "'development' | 'production' | 'test' = 'development'",`],runtimeEnvFields:[`${t}: process.env.${t},`,`NODE_ENV: process.env.NODE_ENV,`]}},getDefaultCodegenFields(e){return{serverFields:[` DATABASE_URL: "string = 'postgres://localhost:5432/mydb'",`],clientFields:[`\t\t${e}API_URL: "string = 'https://api.example.com'",`],sharedFields:[` NODE_ENV: "'development' | 'production' | 'test' = 'development'",`]}},sharedImports:`import { type } from "@arkenv/core";`,wrapSharedSchema(e){return`type(${e})`},strictExtraImports:``,assembleVanilla(e){return c.default`
87
+ `}function H(e,t){return Object.keys(e).includes(t)}function Ot(e){if(typeof e==`string`)return/=\s*\S/.test(e);if(!e||typeof e!=`object`)return!1;let t=e;if(H(t,`default`)||H(t,`fallback`))return!0;let n=t._def;if(n&&typeof n==`object`){let e=n;if(`defaultValue`in e||e.typeName===`ZodDefault`||e.type===`default`)return!0;if(`innerType`in e)return Ot(e.innerType)}return!1}function kt(e){return e.endsWith(`?`)?e.slice(0,-1):e}function At(e,t,n){if(e){if(Array.isArray(e)){for(let r of e){if(Array.isArray(r)&&typeof r[0]==`string`){t.push({name:r[0],schema:r[1],hasDefault:!1}),n[r[0]]=r[1];continue}if(r&&typeof r==`object`){let e=r,i=e.key;if(typeof i!=`string`)continue;let a=`value`in e?e.value:void 0;t.push({name:i,schema:a,hasDefault:H(e,`default`)}),n[i]=a}}return}if(typeof e==`object`)for(let[r,i]of Object.entries(e)){let e=i&&typeof i==`object`?i:void 0,a=e&&`value`in e?e.value:i;t.push({name:r,schema:a,hasDefault:!!(e&&H(e,`default`))}),n[r]=a}}}function jt(e){let n=[],r={};for(let i of e){if(!i||typeof i!=`object`&&typeof i!=`function`)continue;let e=i,a=e.json,o=typeof a==`function`?a():a,s=n.length;if(o&&typeof o==`object`){let e=o;if((e.domain===`object`||e.required!==void 0||e.optional!==void 0)&&(At(e.required,n,r),At(e.optional,n,r),n.length>s))continue}let c=o?t.i(i):[];if(n.length===s&&c.length>0){for(let e of c)n.push({name:e,schema:void 0,hasDefault:!1}),r[e]=void 0;continue}if(!(n.length>s)&&typeof i!=`function`)for(let[t,i]of Object.entries(e)){let e=kt(t);n.push({name:e,schema:i,hasDefault:Ot(i)}),r[e]=i}}return{keys:n,schema:r}}const Mt={MODULE_LOAD_FAILED:`MODULE_LOAD_FAILED`,NO_SCHEMA:`NO_SCHEMA`},Nt=`If this file calls arkenv(), upgrade @arkenv/core or @arkenv/standard so the CLI can inspect the schema without validating the environment.`;function Pt(e){if(e&&typeof e==`object`&&`name`in e&&e.name===`ArkEnvError`)return!0;let t=e instanceof Error?e.message:String(e);return/validating environment variables/i.test(t)}function Ft(e){if(!(e instanceof Error)&&typeof e!=`object`)return/cannot read propert/i.test(String(e));let t=e instanceof Error?e.message:String(e);return/cannot read propert/i.test(t)||e instanceof TypeError||/is not a function/i.test(t)}function It(e){return`No arkenv() schema definition was found in "${e}". ${Nt}`}function Lt(e,t){let n=t instanceof Error?t.message:String(t),r=`Failed to load schema module at "${e}": ${n}`;return Pt(t)?`${r} ${Nt}`:Ft(t)||/missing [A-Z_][A-Z0-9_]*/.test(n)?`${r} Capture mode does not populate env values. Keep the schema module declarative (\`export const env = arkenv({...})\`) and do not read \`env\` at module scope.`:r}var Rt=class{constructor(e={}){this.options=e}async load(e){t.t();try{this.evaluateModule(e.schemaPath);let n=t.n();if(n.length===0)return{ok:!1,code:Mt.NO_SCHEMA,message:It(e.schemaPath)};let r=jt(n);return{ok:!0,keys:r.keys,schema:r.schema}}catch(n){return t.n(),{ok:!1,code:Mt.MODULE_LOAD_FAILED,message:Lt(e.schemaPath,n),cause:n}}}evaluateModule(e){let t={moduleCache:!1,fsCache:!1,tsconfigPaths:!0,...this.options.jitiAliases?{alias:this.options.jitiAliases}:{}};try{(0,u.createJiti)(e,t)(e)}catch(n){let r=n instanceof Error?n.message:String(n);if(!(n instanceof Error&&/tsconfig/i.test(r)&&(/not found/i.test(r)||n.code===`ENOENT`)))throw n;(0,u.createJiti)(e,{...t,tsconfigPaths:!1})(e)}}};async function zt(e,t){for(let n of t)try{return await c.default.access(s.default.join(e,n)),!0}catch{}return!1}async function Bt(e=process.cwd(),t){if(t?.compilerOptions?.types){let e=t.compilerOptions.types;if(e.includes(`vite`)||e.includes(`vite/client`))return`vite`}try{let t=s.default.join(e,`package.json`),n=await c.default.readFile(t,`utf-8`),r=JSON.parse(n),i={...r.dependencies,...r.devDependencies};if(i.vite)return`vite`;if(i.next)return`nextjs`;if(i.nuxt)return`nuxt`}catch{}return await zt(e,[`vite.config.ts`,`vite.config.js`])?`vite`:await zt(e,[`next.config.ts`,`next.config.js`,`next.config.mjs`,`next.config.cjs`])?`nextjs`:await zt(e,[`nuxt.config.ts`,`nuxt.config.js`,`nuxt.config.mts`,`nuxt.config.mjs`,`nuxt.config.cjs`])?`nuxt`:(await Vt(e,t)).length>0?`bun-fullstack`:`vanilla`}async function Vt(e=process.cwd(),t){let n=[];try{let t=s.default.join(e,`bunfig.toml`),r=await c.default.readFile(t,`utf-8`);(r.includes(`[serve]`)||r.includes(`[serve.static]`))&&n.push(`serve`),r.includes(`[build]`)&&n.push(`build`)}catch{}if(n.includes(`serve`)&&n.includes(`build`))return n;let{walk:r}=await Promise.resolve().then(()=>Wt),i=await r(e),a=n.includes(`serve`),o=n.includes(`build`);for(let e of i)try{let t=await c.default.readFile(e,`utf-8`);if(!a&&(t.includes(`Bun.serve`)||t.includes(`serve(`))&&(/from\s+['"]bun['"]/.test(t)||t.includes(`Bun.serve`))&&(a=!0,n.push(`serve`)),!o&&(t.includes(`Bun.build`)||t.includes(`build(`))&&(/from\s+['"]bun['"]/.test(t)||t.includes(`Bun.build`))&&(o=!0,n.push(`build`)),a&&o)break}catch{}return n}async function Ht(e=process.cwd(),t){let n=process.env.npm_config_user_agent?.toString()||``;if(n.includes(`pnpm`))return`pnpm`;if(n.includes(`yarn`))return`yarn`;if(n.includes(`bun`))return`bun`;if(n.includes(`npm`))return`npm`;let r=t?.path?s.default.dirname(t.path):e;for(;r!==s.default.parse(r).root;){try{let e=s.default.join(r,`package.json`),t=await c.default.readFile(e,`utf-8`),n=JSON.parse(t);if(n.packageManager){if(n.packageManager.startsWith(`pnpm`))return`pnpm`;if(n.packageManager.startsWith(`yarn`))return`yarn`;if(n.packageManager.startsWith(`bun`))return`bun`}}catch{}let e=[];try{e=await c.default.readdir(r)}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`;r=s.default.dirname(r)}return`npm`}async function Ut(e=process.cwd(),t){let n=t;if(!n){let{findTsConfig:t,loadTsConfig:r}=await Promise.resolve().then(()=>Xt),i=await t(e);i&&(n=await r(i))}if(n?.compilerOptions?.rootDir){let t=n.compilerOptions.rootDir,r=s.default.relative(e,t);return r&&r!==`.`&&!r.startsWith(`..`)&&!s.default.isAbsolute(r)?`./${r}/env.ts`:`./env.ts`}try{return await c.default.access(s.default.join(e,`src`)),`./src/env.ts`}catch{return`./env.ts`}}var Wt=e.n({getEnvExampleKeys:()=>Yt,parseEnvExample:()=>Kt,resolveImportPaths:()=>qt,scanProjectEnvKeys:()=>Jt,walk:()=>Gt});async function Gt(e,t=[]){try{let n=await c.default.readdir(e,{withFileTypes:!0});for(let r of n)if(r.isDirectory()){let n=r.name;if(n===`node_modules`||n===`dist`||n===`build`||n===`.git`||n===`.turbo`||n===`scratch`)continue;await Gt(s.default.join(e,n),t)}else r.isFile()&&/\.(ts|tsx|js|jsx)$/.test(r.name)&&!r.name.endsWith(`.d.ts`)&&t.push(s.default.join(e,r.name))}catch{}return t}function Kt(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 qt(e,t,n){if(e.startsWith(`.`))return[s.default.resolve(s.default.dirname(n),e)];if(s.default.isAbsolute(e))return[e];let r=t.compilerOptions||{},i=r.baseUrl||s.default.dirname(t.path),a=r.paths||{},o=[];for(let[e,t]of Object.entries(a)){let n=e.endsWith(`*`),r=e.replace(/\*$/,``);o.push({cleanPattern:r,targets:Array.isArray(t)?t:[t],hadStar:n})}o.sort((e,t)=>t.cleanPattern.length-e.cleanPattern.length);for(let{cleanPattern:t,targets:n,hadStar:r}of o)if(r&&e.startsWith(t)||!r&&e===t){let r=e.slice(t.length);return n.map(e=>{let t=`${e.replace(/\*$/,``)}${r}`;return s.default.resolve(i,t)})}return r.baseUrl?[s.default.resolve(i,e)]:[]}async function Jt(e,t,n){let r=[],i=await Gt(e),a=n?n.replace(/\.(ts|js|tsx|jsx)$/,``):null;for(let e of i)try{let n=await c.default.readFile(e,`utf-8`),i=n.matchAll(/process\.env\.([A-Z_][A-Z0-9_]*)/g);for(let e of i)e[1]&&r.push(e[1]);let o=n.matchAll(/import\.meta\.env\.([A-Z_][A-Z0-9_]*)/g);for(let e of o)e[1]&&r.push(e[1]);if(a){let i=n.matchAll(/import\s+[^;]*from\s+['"]([^'"]+)['"]/g);for(let o of i){let i=o[1],c=[];if(t?c=qt(i,t,e):i.startsWith(`.`)&&(c=[s.default.resolve(s.default.dirname(e),i)]),c.some(e=>e.replace(/\.(ts|js|tsx|jsx)$/,``)===a)){let e=n.matchAll(/\benv\.([A-Z_][A-Z0-9_]*)/g);for(let t of e)t[1]&&r.push(t[1])}}}}catch{}return Array.from(new Set(r))}async function Yt(e=process.cwd(),t,n){let r=s.default.join(e,`.env.example`);try{let e=Kt(await c.default.readFile(r,`utf-8`));if(e.length>0)return{keys:e,source:`.env.example`}}catch{}let i=await Jt(e,t,n);return i.length>0?{keys:i,source:`project`}:null}var Xt=e.n({checkTsConfig:()=>$t,findTsConfig:()=>Qt,loadTsConfig:()=>U});const Zt=(0,f.createRequire)(require(`url`).pathToFileURL(__filename).href).resolve;async function Qt(e=process.cwd()){let t=[`tsconfig.app.json`,`tsconfig.json`,`tsconfig.base.json`,`tsconfig.node.json`],n=e;for(;n!==s.default.parse(n).root;){for(let e of t){let t=s.default.join(n,e);try{return await c.default.access(t),t}catch{}}n=s.default.dirname(n)}return null}async function U(e,t=new Set){let n=s.default.resolve(e);if(t.has(n))throw Error(`Circular extends dependency detected in tsconfig.json: ${n}`);t.add(n);let r=``;try{r=await c.default.readFile(e,`utf-8`)}catch{return{path:e,compilerOptions:{}}}let i=(0,p.parse)(r)||{},a=i.compilerOptions||{},o={};if(i.extends){let n=Array.isArray(i.extends)?i.extends:[i.extends];for(let r of n){let n;if(r.startsWith(`.`)||s.default.isAbsolute(r))n=s.default.resolve(s.default.dirname(e),r);else try{n=Zt(r,{paths:[s.default.dirname(e)]})}catch{n=s.default.resolve(s.default.dirname(e),`node_modules`,r)}let i={...(await U(n,t)).compilerOptions};i.baseUrl&&=s.default.resolve(s.default.dirname(n),i.baseUrl),i.rootDir&&=s.default.resolve(s.default.dirname(n),i.rootDir),o={...o,...i}}}let l={...a};return l.baseUrl&&=s.default.resolve(s.default.dirname(e),l.baseUrl),l.rootDir&&=s.default.resolve(s.default.dirname(e),l.rootDir),o={...o,...l},{...i,path:e,compilerOptions:o}}async function $t(e=process.cwd()){let t=await Qt(e);if(!t)return{status:`not_found`};let n=s.default.basename(t);try{let e=await U(t);return e?.compilerOptions?.strict===!0?{status:`strict`,file:n,parsed:e}:{status:`not_strict`,file:n,parsed:e}}catch{return{status:`not_found`}}}function en(e,t){let n=e.replace(/^v/,``).split(`.`).map(Number),r=t.replace(/^v/,``).split(`.`).map(Number);for(let e=0;e<3;e++){let t=n[e]||0,i=r[e]||0;if(t>i)return 1;if(t<i)return-1}return 0}function tn(e){let t=e.trim().match(/^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?/);return t?[t[1],t[2]??`0`,t[3]??`0`].join(`.`):null}function nn(e,t){let n=e.trim(),r=n.match(/^[\^~]?\s*(v?\d+(?:\.\d+){0,2})$/);if(r){let e=tn(r[1]);return e!==null&&en(e,t)>=0}let i=n.match(/(?:>=|>|<=|<|=)\s*v?\d+(?:\.\d+){0,2}/g);return!i||i.join(` `)!==n.replace(/\s+/g,` `)?!1:i.some(e=>{let n=e.match(/^(>=|>|<=|<|=)\s*(v?\d+(?:\.\d+){0,2})$/);if(!n)return!1;let[,r,i]=n,a=tn(i);return a&&(r===`>=`||r===`>`||r===`=`)?en(a,t)>=0:!1})}async function rn(e=process.cwd()){let t=[],n=process.version,r=`22.0.0`;en(n,r)===-1?t.push({status:`fail`,requirement:`Node.js Version`,message:`Node.js version must be >= ${r}.`,current:n,expected:`>= ${r}`}):t.push({status:`pass`,requirement:`Node.js Version`,message:`Node.js version is compatible.`});let i=null;try{let n=s.default.join(e,`package.json`),r=await c.default.readFile(n,`utf-8`);i=JSON.parse(r),t.push({status:`pass`,requirement:`package.json`,message:`package.json found.`})}catch{t.push({status:`warn`,requirement:`package.json`,message:`package.json not found in the current directory.`})}if(i){let e={...i.dependencies,...i.devDependencies}.typescript,n=`5.1.0`;e?nn(e,n)?t.push({status:`pass`,requirement:`TypeScript Version`,message:`TypeScript version is compatible.`}):t.push({status:`fail`,requirement:`TypeScript Version`,message:`TypeScript version should be >= ${n}.`,current:e,expected:`>= ${n}`}):t.push({status:`warn`,requirement:`TypeScript Version`,message:`TypeScript not found in package.json dependencies.`})}let a=await $t(e);if(a.status===`not_found`)t.push({status:`warn`,requirement:`tsconfig.json`,message:`tsconfig.json not found.`});else{let e=a.parsed.compilerOptions||{};e.strict===!0?t.push({status:`pass`,requirement:`TypeScript Strict Mode`,message:`Strict mode is enabled.`}):t.push({status:`fail`,requirement:`TypeScript Strict Mode`,message:`Strict mode must be enabled.`,current:`false`,expected:`true`});let n=e.moduleResolution?.toLowerCase(),r=e.module?.toLowerCase();[`bundler`,`node16`,`nodenext`].includes(n||``)||!n&&(r===`node16`||r===`nodenext`)?t.push({status:`pass`,requirement:`TypeScript moduleResolution`,message:`moduleResolution is set to ${n||`implicit`}.`}):t.push({status:`fail`,requirement:`TypeScript moduleResolution`,message:`moduleResolution must be set to 'bundler', 'node16', or 'nodenext'.`,current:n||`default`,expected:`bundler, node16, or nodenext`})}return t}var an=class{constructor(e){this.logger=e}async isEmptyDirectory(e=process.cwd()){try{return(await c.default.readdir(e)).length===0}catch{return!1}}async hasPackageJson(e=process.cwd()){try{return await c.default.access(s.default.join(e,`package.json`)),!0}catch{return!1}}async findTsConfig(e=process.cwd()){return Qt(e)}async loadTsConfig(e,t=new Set){return U(e,t)}async getEnvExampleKeys(e=process.cwd(),t,n){return Yt(e,t,n)}async suggestDefaultEnvPath(e=process.cwd(),t){return Ut(e,t)}async checkTsConfig(e=process.cwd()){return $t(e)}async checkRequirements(e=process.cwd()){return rn(e)}async detectFramework(e=process.cwd(),t){return Bt(e,t)}async detectBunFeatures(e=process.cwd(),t){return Vt(e,t)}async detectPackageManager(e=process.cwd(),t){return Ht(e,t)}async hasSkill(e=process.cwd()){try{let t=s.default.join(e,`skills-lock.json`),n=await c.default.readFile(t,`utf-8`),r=JSON.parse(n);if(r&&typeof r==`object`&&r.skills&&typeof r.skills==`object`&&`arkenv`in r.skills)return!0}catch{}for(let t of[`skills/arkenv/SKILL.md`,`.agent/skills/arkenv/SKILL.md`,`.agents/skills/arkenv/SKILL.md`])try{return await c.default.access(s.default.join(e,t)),!0}catch{}return!1}async checkGitStatus(e=process.cwd()){try{return(0,d.execSync)(`git status --porcelain`,{cwd:e,encoding:`utf-8`}).trim().length===0?{status:`clean`}:{status:`dirty`}}catch(e){let t=e;return t.code===`ENOENT`?(this.logger?.log(`Git is not installed on this system. Skipping git status check.`),{status:`not_a_repo`}):typeof t.stderr==`string`&&t.stderr.includes(`not a git repository`)?{status:`not_a_repo`}:{status:`unknown`}}}async findPackageJson(e=process.cwd()){let t=s.default.resolve(e);for(;;){let e=s.default.join(t,`package.json`);try{return await c.default.access(e),e}catch{let e=s.default.dirname(t);if(e===t)return null;t=e}}}async readArkenvConfig(e=process.cwd()){let t=await this.findPackageJson(e);if(!t)return null;try{let e=await c.default.readFile(t,`utf-8`),n=JSON.parse(e);return n.arkenv?typeof n.arkenv==`string`?{schema:n.arkenv,layout:`flat`}:typeof n.arkenv==`object`&&typeof n.arkenv.schema==`string`?{schema:n.arkenv.schema,layout:n.arkenv.layout===`strict`?`strict`:`flat`}:null:null}catch{return null}}};const W=e=>_.default.cyan(e),on=_.default.blue(`⛯`),G={nextjs:{id:`nextjs`,packageName:`@arkenv/nextjs`,clientPrefix:`NEXT_PUBLIC_`,displayName:`Next.js`,supportsWrapNextjsConfig:!0},nuxt:{id:`nuxt`,packageName:`@arkenv/nuxt`,clientPrefix:`NUXT_PUBLIC_`,displayName:`Nuxt`,supportsWrapNextjsConfig:!1}};function sn(e){if(e===`nextjs`||e===`nuxt`)return G[e]}function cn(e){return e===`nextjs`||e===`nuxt`}const K={nextjs:G.nextjs.clientPrefix,nuxt:G.nuxt.clientPrefix,vite:`VITE_`,"bun-fullstack":`BUN_PUBLIC_`,vanilla:``};function ln(e,t){let n=sn(e.framework);return{framework:e.framework,clientPrefix:K[e.framework],...n?.packageName!==void 0&&{packageName:n.packageName},disableCodegen:e.disableCodegen===!0,...e.layout!==void 0&&{layout:e.layout},...t!==void 0&&{nextjsImportPath:t},...e.hostPreset!==void 0&&{hostPreset:e.hostPreset}}}const un={NODE_ENV:`development`,PORT:`3000`,DATABASE_URL:`postgres://localhost:5432/mydb`},dn=`generated`;function fn(e){let t={};for(let n of e)t[n]=un[n]??``;return t}function pn(e,t,n){if(!n)return;let r=((n.compilerOptions||{}).paths||{})[`@/*`];if(!r)return;let i=n.path?s.default.dirname(n.path):e,a=s.default.relative(i,t).replace(/\\/g,`/`);for(let e of r){let t=e.replace(/^\.\//,``).replace(/\*$/,``);if(t===``||a.startsWith(t)){let e=a;return t!==``&&a.startsWith(t)&&(e=a.substring(t.length)),e=e.replace(/^\/+/,``).replace(/\/+$/,``),`@/${e}/env.gen`.replace(/\/+/g,`/`)}}}function mn(e,t,n){if(!(!cn(n.framework)||n.disableCodegen||!e.tsConfig?.parsed))return pn(e.cwd,t,e.tsConfig.parsed)}function hn(e,t){return mn(e,s.default.join(e.targetDir,dn),t)}function gn(e,t,n){return mn(e,s.default.join(t,dn),n)}function _n(e,t,n,r){let i=ln(t,r),a=e.getSimpleTemplate(t.envKeys??[],i),o=n.existingFiles.includes(n.targetPath);return!o||t.overwriteEnvSchemaFile!==!1?[{path:n.targetPath,content:a,action:o?`overwrite`:`create`,label:`environment schema`}]:[]}function vn(e,t,n,r){let i=s.default.extname(n.targetPath),a=n.targetPath.slice(0,-i.length),o=s.default.join(a,`internal`,`shared${i}`),c=s.default.join(a,`client${i}`),l=s.default.join(a,`server${i}`),u=ln(t,r),d=e.getStrictTemplates(t.envKeys??[],u),f=n.existingFiles.includes(o),p=n.existingFiles.includes(c),m=n.existingFiles.includes(l),h=[];return(!f||t.overwriteEnvSchemaFile!==!1)&&h.push({path:o,content:d.shared,action:f?`overwrite`:`create`,label:`shared environment schema`}),(!p||t.overwriteEnvSchemaFile!==!1)&&h.push({path:c,content:d.client,action:p?`overwrite`:`create`,label:`client environment schema`}),(!m||t.overwriteEnvSchemaFile!==!1)&&h.push({path:l,content:d.server,action:m?`overwrite`:`create`,label:`server environment schema`}),h}const yn={clientPrefix:K[`bun-fullstack`],getEnvDefaults(e){return e&&e.length>0?fn(e):{DATABASE_URL:`postgres://localhost:5432/mydb`,BUN_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`}},getDependencies(e){return e.bunFeatures?.length?[`@arkenv/bun-plugin`]:[]},requiresArktypePeer(e){return!!e.bunFeatures?.length},bootstrap(e){return(0,n.shake)({framework:`bun-fullstack`,bunFeatures:e.bunFeatures})},getSchemaFiles(e,t,n){return t.layout===`strict`?vn(e,t,n):_n(e,t,n)},getTypeDefinitionFiles(){return[]}};function bn(e){let{id:t,packageName:r,clientPrefix:i,supportsWrapNextjsConfig:a}=e,o=`${i}API_URL`;return{clientPrefix:i,getEnvDefaults(e){return e&&e.length>0?fn(e):{DATABASE_URL:`postgres://localhost:5432/mydb`,[o]:`https://api.example.com`,NODE_ENV:`development`}},getDependencies(){return[r]},requiresArktypePeer(){return!0},bootstrap(e){return(0,n.shake)({framework:t,...a&&{wrapNextjsConfig:e.wrapNextjsConfig!==!1},disableCodegen:e.disableCodegen})},getSchemaFiles(e,t,n){if(t.layout===`strict`){let r=s.default.extname(n.targetPath);return vn(e,t,n,gn(n,n.targetPath.slice(0,-r.length),t))}return _n(e,t,n,hn(n,t))},getTypeDefinitionFiles(){return[]}}}const xn=bn(G.nextjs),Sn=bn(G.nuxt),Cn={clientPrefix:K.vanilla,getEnvDefaults(e){return e&&e.length>0?fn(e):{PORT:`3000`,NODE_ENV:`development`}},getDependencies(){return[]},requiresArktypePeer(){return!1},bootstrap(){},getSchemaFiles(e,t,n){return t.layout===`strict`?vn(e,t,n):_n(e,t,n)},getTypeDefinitionFiles(){return[]}},wn={vite:{clientPrefix:K.vite,getEnvDefaults(e){return e&&e.length>0?fn(e):{DATABASE_URL:`postgres://localhost:5432/mydb`,VITE_API_URL:`https://api.example.com`,NODE_ENV:`development`}},getDependencies(){return[`@arkenv/vite-plugin`]},requiresArktypePeer(){return!0},bootstrap(){return(0,n.shake)({framework:`vite`})},getSchemaFiles(e,t,n){return t.layout===`strict`?vn(e,t,n):_n(e,t,n)},getTypeDefinitionFiles(){return[]}},"bun-fullstack":yn,nextjs:xn,nuxt:Sn,vanilla:Cn},q={vercel:{label:`Vercel`,hint:`Add VERCEL, VERCEL_ENV, VERCEL_URL, etc.`,serverOnlyKeys:[`VERCEL`],clientExposedKeys:[`VERCEL_ENV`,`VERCEL_URL`],fields:{VERCEL:{type:`string`},VERCEL_ENV:{type:`enum`,values:[`production`,`preview`,`development`]},VERCEL_URL:{type:`string`}}},netlify:{label:`Netlify`,hint:`Add NETLIFY, CONTEXT, URL, DEPLOY_URL, etc.`,serverOnlyKeys:[`NETLIFY`,`DEPLOY_URL`],clientExposedKeys:[`CONTEXT`,`URL`],fields:{NETLIFY:{type:`string`},DEPLOY_URL:{type:`string`},CONTEXT:{type:`enum`,values:[`production`,`deploy-preview`,`branch-deploy`]},URL:{type:`string`}}},cloudflare:{label:`Cloudflare Pages/Workers`,hint:`Add CF_PAGES, CF_PAGES_COMMIT_SHA, CF_PAGES_BRANCH, CF_PAGES_URL, etc.`,serverOnlyKeys:[`CF_PAGES`,`CF_PAGES_COMMIT_SHA`],clientExposedKeys:[`CF_PAGES_BRANCH`,`CF_PAGES_URL`],fields:{CF_PAGES:{type:`string`},CF_PAGES_COMMIT_SHA:{type:`string`},CF_PAGES_BRANCH:{type:`string`},CF_PAGES_URL:{type:`string`}}},railway:{label:`Railway`,hint:`Add RAILWAY_ENVIRONMENT_NAME, RAILWAY_PUBLIC_DOMAIN, RAILWAY_GIT_COMMIT_SHA, etc.`,serverOnlyKeys:[`RAILWAY_ENVIRONMENT_NAME`,`RAILWAY_PUBLIC_DOMAIN`,`RAILWAY_SERVICE_NAME`,`RAILWAY_GIT_COMMIT_SHA`],clientExposedKeys:[],fields:{RAILWAY_ENVIRONMENT_NAME:{type:`string`},RAILWAY_PUBLIC_DOMAIN:{type:`string`},RAILWAY_SERVICE_NAME:{type:`string`},RAILWAY_GIT_COMMIT_SHA:{type:`string`}}},render:{label:`Render`,hint:`Add RENDER, RENDER_SERVICE_ID, RENDER_SERVICE_TYPE, RENDER_EXTERNAL_URL, etc.`,serverOnlyKeys:[`RENDER`,`RENDER_SERVICE_ID`,`RENDER_SERVICE_TYPE`,`RENDER_EXTERNAL_URL`],clientExposedKeys:[],fields:{RENDER:{type:`string`},RENDER_SERVICE_ID:{type:`string`},RENDER_SERVICE_TYPE:{type:`string`},RENDER_EXTERNAL_URL:{type:`string`}}},fly:{label:`Fly.io`,hint:`Add FLY_APP_NAME, FLY_REGION, FLY_ALLOC_ID, etc.`,serverOnlyKeys:[`FLY_APP_NAME`,`FLY_REGION`,`FLY_ALLOC_ID`],clientExposedKeys:[],fields:{FLY_APP_NAME:{type:`string`},FLY_REGION:{type:`string`},FLY_ALLOC_ID:{type:`string`}}}};function Tn(e){return e===`none`||Object.keys(q).includes(e)}function En(e){return Object.keys(q).includes(e)}function J(e,t){if(e===`none`)return[];let n=q[e],r=[...n.serverOnlyKeys,...n.clientExposedKeys];if(t)for(let e of n.clientExposedKeys)r.push(`${t}${e}`);return r}function Dn(e,t){if(e===`none`)return{clientKeys:[],serverKeys:[]};let n=q[e],r=[...n.serverOnlyKeys,...n.clientExposedKeys],i=[];if(t)for(let e of n.clientExposedKeys)i.push(`${t}${e}`);return{clientKeys:i,serverKeys:r}}function On(e,t,n){if(!n||n===`none`)return;let r=t&&e.startsWith(t)?e.slice(t.length):e,i=q[n].fields;return r in i?i[r]:void 0}function kn(e,t,n){let r=J(t??`none`,n);if(!(!e?.length&&r.length===0))return Array.from(new Set([...e??[],...r]))}function An(e){return`// @arkenv-preset-start ${e}`}function jn(e){return`// @arkenv-preset-end ${e}`}function Mn(e,t){return t.type===`string`?e.formatOptionalString():e.formatOptionalEnum(t.values)}function Y(e,t,n,r){let i=On(t,n,r);if(i)return Mn(e,i)}const Nn={formatOptionalString(){return`"string?"`},formatOptionalEnum(e){return`"'${e.join(`' | '`)}'?"`},formatStrictField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: "'development' | 'production' | 'test' = 'development'",`;if(t===`server`&&e===`PORT`)return`PORT: "number.port = 3000",`;let i=Y(Nn,e,n,r);return i?`${e}: ${i},`:`${e}: "string?",`},formatCodegenField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: "'development' | 'production' | 'test' = 'development'",`;let i=Y(Nn,e,n,r);return i?`${e}: ${i},`:`${e}: "string?",`},defaultSimpleSchemaFields:` NODE_ENV: "'development' | 'production' | 'test' = 'development'",
88
+ PORT: "number.port = 3000",`,formatSimpleSchemaFields(e,t=``,n=void 0){return e.map(e=>`\t\t${e}: ${Y(Nn,e,t,n)??`"string?"`},`).join(`
89
+ `)},getDefaultStrictFields(e){let t=`${e}API_URL`;return{serverFields:[`DATABASE_URL: "string = 'postgres://localhost:5432/mydb'",`],clientFields:[`${t}: "string = 'https://api.example.com'",`],sharedFields:[`NODE_ENV: "'development' | 'production' | 'test' = 'development'",`],runtimeEnvFields:[`${t}: process.env.${t},`,`NODE_ENV: process.env.NODE_ENV,`]}},getDefaultCodegenFields(e){return{serverFields:[` DATABASE_URL: "string = 'postgres://localhost:5432/mydb'",`],clientFields:[`\t\t${e}API_URL: "string = 'https://api.example.com'",`],sharedFields:[` NODE_ENV: "'development' | 'production' | 'test' = 'development'",`]}},sharedImports:`import { type } from "@arkenv/core";`,wrapSharedSchema(e){return`type(${e})`},strictExtraImports:``,assembleVanilla(e){return l.default`
113
90
  import arkenv, { type } from "@arkenv/core";
114
91
 
115
92
  /**
116
93
  * Environment variable schema for server-side or runtime-only validation.
117
94
  */
118
- export const Env = type({
95
+ export const env = arkenv({
119
96
  ${e}
120
97
  });
121
-
122
- export const env = arkenv(Env);
123
- `},pluginEnvImports:`import { type } from "@arkenv/core";`},bn={extraImport:`import * as v from "valibot";`,formatOptionalString(){return`v.optional(v.string())`},formatOptionalEnum(e){return`v.optional(v.picklist([${e.map(e=>`"${e}"`).join(`, `)}]))`},formatStrictField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: v.optional(v.picklist(["development", "production", "test"]), "development"),`;if(t===`server`&&e===`PORT`)return`PORT: v.optional(v.pipe(v.string(), v.transform(Number), v.number(), v.integer(), v.minValue(1), v.maxValue(65535)), 3000),`;let i=X(bn,e,n,r);return i?`${e}: ${i},`:`${e}: v.optional(v.string()),`},formatCodegenField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: v.optional(v.picklist(["development", "production", "test"]), "development"),`;let i=X(bn,e,n,r);return i?`${e}: ${i},`:`${e}: v.optional(v.string()),`},defaultSimpleSchemaFields:` NODE_ENV: v.optional(v.picklist(["development", "production", "test"]), "development"),
124
- PORT: v.optional(v.pipe(v.string(), v.transform(Number), v.number(), v.integer(), v.minValue(1), v.maxValue(65535)), 3000),`,formatSimpleSchemaFields(e,t=``,n=void 0){return e.map(e=>`\t\t${e}: ${X(bn,e,t,n)??`v.optional(v.string())`},`).join(`
98
+ `}},Pn={extraImport:`import * as v from "valibot";`,formatOptionalString(){return`v.optional(v.string())`},formatOptionalEnum(e){return`v.optional(v.picklist([${e.map(e=>`"${e}"`).join(`, `)}]))`},formatStrictField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: v.optional(v.picklist(["development", "production", "test"]), "development"),`;if(t===`server`&&e===`PORT`)return`PORT: v.optional(v.pipe(v.string(), v.transform(Number), v.number(), v.integer(), v.minValue(1), v.maxValue(65535)), 3000),`;let i=Y(Pn,e,n,r);return i?`${e}: ${i},`:`${e}: v.optional(v.string()),`},formatCodegenField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: v.optional(v.picklist(["development", "production", "test"]), "development"),`;let i=Y(Pn,e,n,r);return i?`${e}: ${i},`:`${e}: v.optional(v.string()),`},defaultSimpleSchemaFields:` NODE_ENV: v.optional(v.picklist(["development", "production", "test"]), "development"),
99
+ PORT: v.optional(v.pipe(v.string(), v.transform(Number), v.number(), v.integer(), v.minValue(1), v.maxValue(65535)), 3000),`,formatSimpleSchemaFields(e,t=``,n=void 0){return e.map(e=>`\t\t${e}: ${Y(Pn,e,t,n)??`v.optional(v.string())`},`).join(`
125
100
  `)},getDefaultStrictFields(e){let t=`${e}API_URL`;return{serverFields:[`DATABASE_URL: v.optional(v.pipe(v.string(), v.url()), "postgres://localhost:5432/mydb"),`],clientFields:[`${t}: v.optional(v.pipe(v.string(), v.url()), "https://api.example.com"),`],sharedFields:[`NODE_ENV: v.optional(v.picklist(["development", "production", "test"]), "development"),`],runtimeEnvFields:[`${t}: process.env.${t},`,`NODE_ENV: process.env.NODE_ENV,`]}},getDefaultCodegenFields(e){return{serverFields:[` DATABASE_URL: v.optional(v.pipe(v.string(), v.url()), "postgres://localhost:5432/mydb"),`],clientFields:[`\t\t${e}API_URL: v.optional(v.pipe(v.string(), v.url()), "https://api.example.com"),`],sharedFields:[` NODE_ENV: v.optional(v.picklist(["development", "production", "test"]), "development"),`]}},sharedImports:`import * as v from "valibot";`,wrapSharedSchema(e){return`v.object(${e})`},strictExtraImports:`import * as v from "valibot";
126
- `,assembleVanilla(e){return c.default`
127
- import arkenv from "@arkenv/standard";
101
+ `,assembleVanilla(e){return l.default`
102
+ import { arkenv } from "@arkenv/standard/valibot";
128
103
  import * as v from "valibot";
129
104
 
130
105
  /**
@@ -133,11 +108,10 @@ ${e}
133
108
  export const env = arkenv({
134
109
  ${e}
135
110
  });
136
- `},pluginEnvImports:`import { type } from "@arkenv/core";
137
- import * as v from "valibot";`},xn={extraImport:`import { z } from "zod";`,formatOptionalString(){return`z.string().optional()`},formatOptionalEnum(e){return`z.enum([${e.map(e=>`"${e}"`).join(`, `)}]).optional()`},formatStrictField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: z.enum(["development", "production", "test"]).default("development"),`;if(t===`server`&&e===`PORT`)return`PORT: z.coerce.number().int().min(1).max(65535).default(3000),`;let i=X(xn,e,n,r);return i?`${e}: ${i},`:`${e}: z.string().optional(),`},formatCodegenField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: z.enum(["development", "production", "test"]).default("development"),`;let i=X(xn,e,n,r);return i?`${e}: ${i},`:`${e}: z.string().optional(),`},defaultSimpleSchemaFields:` NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
138
- PORT: z.coerce.number().int().min(1).max(65535).default(3000),`,formatSimpleSchemaFields(e,t=``,n=void 0){return e.map(e=>`\t\t${e}: ${X(xn,e,t,n)??`z.string().optional()`},`).join(`
111
+ `}},Fn={extraImport:`import { z } from "zod";`,formatOptionalString(){return`z.string().optional()`},formatOptionalEnum(e){return`z.enum([${e.map(e=>`"${e}"`).join(`, `)}]).optional()`},formatStrictField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: z.enum(["development", "production", "test"]).default("development"),`;if(t===`server`&&e===`PORT`)return`PORT: z.coerce.number().int().min(1).max(65535).default(3000),`;let i=Y(Fn,e,n,r);return i?`${e}: ${i},`:`${e}: z.string().optional(),`},formatCodegenField(e,t,n=``,r=void 0){if(t===`shared`)return`${e}: z.enum(["development", "production", "test"]).default("development"),`;let i=Y(Fn,e,n,r);return i?`${e}: ${i},`:`${e}: z.string().optional(),`},defaultSimpleSchemaFields:` NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
112
+ PORT: z.coerce.number().int().min(1).max(65535).default(3000),`,formatSimpleSchemaFields(e,t=``,n=void 0){return e.map(e=>`\t\t${e}: ${Y(Fn,e,t,n)??`z.string().optional()`},`).join(`
139
113
  `)},getDefaultStrictFields(e){let t=`${e}API_URL`;return{serverFields:[`DATABASE_URL: z.string().url().default("postgres://localhost:5432/mydb"),`],clientFields:[`${t}: z.string().url().default("https://api.example.com"),`],sharedFields:[`NODE_ENV: z.enum(["development", "production", "test"]).default("development"),`],runtimeEnvFields:[`${t}: process.env.${t},`,`NODE_ENV: process.env.NODE_ENV,`]}},getDefaultCodegenFields(e){return{serverFields:[` DATABASE_URL: z.string().url().default("postgres://localhost:5432/mydb"),`],clientFields:[`\t\t${e}API_URL: z.string().url().default("https://api.example.com"),`],sharedFields:[` NODE_ENV: z.enum(["development", "production", "test"]).default("development"),`]}},sharedImports:`import { z } from "zod";`,wrapSharedSchema(e){return`z.object(${e})`},strictExtraImports:`import { z } from "zod";
140
- `,assembleVanilla(e){return c.default`
114
+ `,assembleVanilla(e){return l.default`
141
115
  import arkenv from "@arkenv/standard";
142
116
  import { z } from "zod";
143
117
 
@@ -147,68 +121,74 @@ import * as v from "valibot";`},xn={extraImport:`import { z } from "zod";`,forma
147
121
  export const env = arkenv({
148
122
  ${e}
149
123
  });
150
- `},pluginEnvImports:`import { type } from "@arkenv/core";
151
- import { z } from "zod";`},Sn={arktype:yn,zod:xn,valibot:bn};function Cn(e){return e.replace(/import\s*\{([^\n}]*)\}\s*from/g,(e,t)=>`import { ${t.trim()} } from`)}function wn(e,t){return t.endsWith(`
124
+ `}},In={arktype:Nn,zod:Fn,valibot:Pn};function Ln(e){return e.replace(/import\s*\{([^\n}]*)\}\s*from/g,(e,t)=>`import { ${t.trim()} } from`)}function Rn(e,t){return t.endsWith(`
152
125
  `)&&!e.endsWith(`
153
- `)?`${e}\n`:e}function Tn(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),i=Cn(i),i=wn(i,n),{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)}`}}}function En(e){try{let t=e.code;if(/module\.exports\b/.test(t))return{success:!1,updated:!1,error:"CommonJS is not supported for automatic mutation. Please wrap your config with `withArkEnv` manually."};let n=(0,f.parseModule)(t);if(!n.exports.default)return{success:!1,updated:!1,error:`Could not find default export in Next.js config`};if(typeof n.exports.default==`object`&&`$type`in n.exports.default&&n.exports.default.$type===`function-call`&&n.exports.default.$callee===`withArkEnv`||/\bwithArkEnv\b/.test(t))return{success:!0,updated:!1};n.imports.$add({from:`@arkenv/nextjs/config`,imported:`withArkEnv`}),e.disableCodegen?n.exports.default=f.builders.functionCall(`withArkEnv`,n.exports.default,{codegen:!1}):n.exports.default=f.builders.functionCall(`withArkEnv`,n.exports.default);let r=(0,f.generateCode)(n,{format:(0,f.detectCodeFormat)(t)}).code;return r=Cn(r),r=wn(r,t),{success:!0,updated:!0,code:r}}catch(e){return{success:!1,updated:!1,error:`Failed to parse Next.js config: ${e instanceof Error?e.message:String(e)}`}}}function Dn(e){try{let t=e.code,n=(0,f.parseModule)(t),r=n.exports.default;if(r&&typeof r==`object`&&`$type`in r&&r.$type===`function-call`){let e=r;(e.$callee||JSON.stringify(r))===`defineNuxtConfig`&&e.$args&&(r=e.$args[0])}if(!r||typeof r!=`object`||typeof r==`object`&&`$type`in r)return{success:!1,updated:!1,error:`Could not find default export object in Nuxt config`};if(r.modules||=[],Array.isArray(r.modules))if(!r.modules.includes(`@arkenv/nuxt/module`))r.modules.push(`@arkenv/nuxt/module`);else return{success:!0,updated:!1};else return{success:!1,updated:!1,error:`The 'modules' property in your Nuxt config is not an array.`};let i=(0,f.generateCode)(n,{format:(0,f.detectCodeFormat)(t)}).code;return i=Cn(i),i=wn(i,t),{success:!0,updated:!0,code:i}}catch(e){return{success:!1,updated:!1,error:`Failed to parse Nuxt config: ${e instanceof Error?e.message:String(e)}`}}}function On(e,t,n,r){let i=Sn[t];return X(i,e,n,r)??i.formatOptionalString()}function kn(e,t,n,r,i){let a=q[n],o=i??Y(t,a),s={};for(let e of o)s[e]=On(e,r,a,t);try{let t=(0,f.parseModule)(e),n=t.exports.env||t.exports.Env||t.exports.SharedSchema;if(!n||n.$type!==`function-call`||n.$callee!==`arkenv`&&n.$callee!==`type`&&n.$callee!==`z.object`&&n.$callee!==`v.object`)return{success:!1,updated:!1,error:`Could not find arkenv or type schema call in env.ts`,proposedFields:s};let r=n.$args[0];if(!r||typeof r!=`object`||`$type`in r)return{success:!1,updated:!1,error:`Could not find schema object literal inside arkenv/type call`,proposedFields:s};let i=!1,a={};for(let e of o)if(!(e in r)){let t=`__ARK_PRESET_PLACEHOLDER_${e}__`;r[e]=t,a[t]=s[e],i=!0}if(!i)return{success:!0,updated:!1,code:e,proposedFields:s};let c=(0,f.generateCode)(t,{format:(0,f.detectCodeFormat)(e)}).code;for(let[e,t]of Object.entries(a))c=c.replace(RegExp(`['"]${e}['"]`,`g`),t);return c=Cn(c),c=wn(c,e),{success:!0,updated:!0,code:c,proposedFields:s}}catch(e){return{success:!1,updated:!1,error:`Failed to parse env.ts: ${e instanceof Error?e.message:String(e)}`,proposedFields:s}}}async function An(e=process.cwd()){for(let t of[`vite.config.ts`,`vite.config.js`,`vite.config.mts`,`vite.config.mjs`]){let n=o.default.resolve(e,t);try{return await s.default.access(n),n}catch{}}return null}async function jn(e=process.cwd()){for(let t of[`bunfig.toml`,`bun.setup.ts`,`bun.setup.js`]){let n=o.default.resolve(e,t);try{return await s.default.access(n),n}catch{}}return null}async function Mn(e=process.cwd()){for(let t of[`next.config.ts`,`next.config.js`,`next.config.mts`,`next.config.mjs`]){let n=o.default.resolve(e,t);try{return await s.default.access(n),n}catch{}}return null}async function Nn(e,t,n){try{let r=En({code:await e.readFile(t),disableCodegen: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 Pn(e=process.cwd()){for(let t of[`nuxt.config.ts`,`nuxt.config.js`,`nuxt.config.mts`,`nuxt.config.mjs`,`nuxt.config.cjs`]){let n=o.default.resolve(e,t);try{return await s.default.access(n),n}catch{}}return null}async function Fn(e,t){try{let n=Dn({code:await e.readFile(t)});return n.success&&n.updated&&n.code&&await e.writeFile(t,n.code),n.success?n.updated===void 0?{success:!0}:{success:!0,updated:n.updated}:{success:!1,error:n.error}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}async function In(e,t,n){try{let r=Tn({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 Ln(e,t){if(!t||t.length===0)return{success:!0,instructions:c.default`
154
- ${h.default.green(`✔`)} Use ${h.default.bold(`Vanilla`)} Bun runtime integration.
155
- Access validated variables via your ${G(`env`)} object for typesafety.
156
- Primarily used for ${h.default.cyan(`server-side`)} or runtime-only validation.
126
+ `)?`${e}\n`:e}function zn(e){try{let t=(0,m.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`}),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,m.generateCode)(t,{format:(0,m.detectCodeFormat)(n)}).code;return i=i.replace(/['"]__ARK_PLUGIN_PLACEHOLDER__['"]/g,`arkenvVitePlugin()`),i=Ln(i),i=Rn(i,n),{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)}`}}}function Bn(e){try{let t=e.code;if(/module\.exports\b/.test(t))return{success:!1,updated:!1,error:"CommonJS is not supported for automatic mutation. Please wrap your config with `withArkEnv` manually."};let n=(0,m.parseModule)(t);if(!n.exports.default)return{success:!1,updated:!1,error:`Could not find default export in Next.js config`};if(typeof n.exports.default==`object`&&`$type`in n.exports.default&&n.exports.default.$type===`function-call`&&n.exports.default.$callee===`withArkEnv`||/\bwithArkEnv\b/.test(t))return{success:!0,updated:!1};n.imports.$add({from:`@arkenv/nextjs/config`,imported:`withArkEnv`}),e.disableCodegen?n.exports.default=m.builders.functionCall(`withArkEnv`,n.exports.default,{codegen:!1}):n.exports.default=m.builders.functionCall(`withArkEnv`,n.exports.default);let r=(0,m.generateCode)(n,{format:(0,m.detectCodeFormat)(t)}).code;return r=Ln(r),r=Rn(r,t),{success:!0,updated:!0,code:r}}catch(e){return{success:!1,updated:!1,error:`Failed to parse Next.js config: ${e instanceof Error?e.message:String(e)}`}}}function Vn(e){try{let t=e.code,n=(0,m.parseModule)(t),r=n.exports.default;if(r&&typeof r==`object`&&`$type`in r&&r.$type===`function-call`){let e=r;(e.$callee||JSON.stringify(r))===`defineNuxtConfig`&&e.$args&&(r=e.$args[0])}if(!r||typeof r!=`object`||typeof r==`object`&&`$type`in r)return{success:!1,updated:!1,error:`Could not find default export object in Nuxt config`};if(r.modules||=[],Array.isArray(r.modules))if(!r.modules.includes(`@arkenv/nuxt/module`))r.modules.push(`@arkenv/nuxt/module`);else return{success:!0,updated:!1};else return{success:!1,updated:!1,error:`The 'modules' property in your Nuxt config is not an array.`};let i=(0,m.generateCode)(n,{format:(0,m.detectCodeFormat)(t)}).code;return i=Ln(i),i=Rn(i,t),{success:!0,updated:!0,code:i}}catch(e){return{success:!1,updated:!1,error:`Failed to parse Nuxt config: ${e instanceof Error?e.message:String(e)}`}}}function Hn(e,t,n,r){let i=In[t];return Y(i,e,n,r)??i.formatOptionalString()}function X(e){let t=e.split(/\r?\n/),n=[],r=null,i=/^\s*\/\/\s*@arkenv-preset-start(?:\s+(.*))?$/,a=/^\s*\/\/\s*@arkenv-preset-end(?:\s+(.*))?$/,o=/^[a-zA-Z0-9_:-]+$/,s=/(?:^|[,{\s])([A-Za-z_][A-Za-z0-9_]*|'[^']+'|"[^"]+")\s*:/g;for(let e=0;e<t.length;e++){let c=t[e],l=c.match(i);if(l){let t=l[1]?.trim();if(!t||!o.test(t))return{success:!1,error:`Malformed preset markers: missing or invalid preset id in "@arkenv-preset-start" at line ${e+1}.`};if(r)return{success:!1,error:`Malformed preset markers: nested or unclosed "@arkenv-preset-start ${r.markerId}" before line ${e+1}.`};r={markerId:t,startLineIndex:e};continue}let u=c.match(a);if(u){let i=u[1]?.trim();if(!i||!o.test(i))return{success:!1,error:`Malformed preset markers: missing or invalid preset id in "@arkenv-preset-end" at line ${e+1}.`};if(!r)return{success:!1,error:`Malformed preset markers: unexpected "@arkenv-preset-end ${i}" without matching start marker at line ${e+1}.`};if(r.markerId!==i)return{success:!1,error:`Malformed preset markers: mismatched start "${r.markerId}" (line ${r.startLineIndex+1}) and end "${i}" (line ${e+1}).`};let a=t.slice(r.startLineIndex,e+1),c=t.slice(r.startLineIndex+1,e),l=[];for(let e of c)for(let t of e.matchAll(s)){let e=t[1],n=e.startsWith(`'`)||e.startsWith(`"`)?e.slice(1,-1):e;l.push(n)}let d=Un(r.markerId);n.push({markerId:r.markerId,baseId:d.baseId,...d.role===void 0?{}:{role:d.role},startLineIndex:r.startLineIndex,endLineIndex:e,rawContent:a.join(`
127
+ `),innerContent:c.join(`
128
+ `),keys:l}),r=null}}return r?{success:!1,error:`Malformed preset markers: unclosed "@arkenv-preset-start ${r.markerId}" starting at line ${r.startLineIndex+1}.`}:{success:!0,blocks:n}}function Un(e){let t=e.indexOf(`:`);return t===-1?{baseId:e}:{baseId:e.slice(0,t),role:e.slice(t+1)}}function Wn(e,t,n){let r=0,i=!1,a=!1,o=!1,s=[],c=!1;for(let l=t;l<e.length;l++){let u=e[l],d=l===t?n:0,f=!1;for(let e=d;e<u.length;e++){let t=u[e],n=e+1<u.length?u[e+1]:``,d=e>0?u[e-1]:``;if(f)break;if(c){t===`*`&&n===`/`&&(c=!1,e++);continue}if(i){t===`'`&&d!==`\\`&&(i=!1);continue}if(a){t===`"`&&d!==`\\`&&(a=!1);continue}if(o){t==="`"&&d!==`\\`?o=!1:t===`$`&&n===`{`&&d!==`\\`&&(s.push(r),o=!1,r++,e++);continue}if(t===`/`&&n===`/`){f=!0,e++;continue}if(t===`/`&&n===`*`){c=!0,e++;continue}if(t===`'`){i=!0;continue}if(t===`"`){a=!0;continue}if(t==="`"){o=!0;continue}if(t===`{`)r++;else if(t===`}`){if(r--,r===0)return{endLine:l,endChar:e};s.length>0&&r===s[s.length-1]&&(s.pop(),o=!0)}}}return null}function Gn(e){let t=/\b(?:arkenv|type|z\.object|v\.object)\s*\(/;for(let n=0;n<e.length;n++){let r=e[n].match(t);if(r&&r.index!==void 0){let t=!1,i=!1,a=!1,o=!1;for(let s=n;s<e.length;s++){let c=e[s],l=s===n?r.index+r[0].length:0,u=!1;for(let e=l;e<c.length;e++){let r=c[e],l=e+1<c.length?c[e+1]:``,d=e>0?c[e-1]:``;if(u)break;if(o){r===`*`&&l===`/`&&(o=!1,e++);continue}if(t){r===`'`&&d!==`\\`&&(t=!1);continue}if(i){r===`"`&&d!==`\\`&&(i=!1);continue}if(a){r==="`"&&d!==`\\`&&(a=!1);continue}if(r===`/`&&l===`/`){u=!0,e++;continue}if(r===`/`&&l===`*`){o=!0,e++;continue}if(r===`'`){t=!0;continue}if(r===`"`){i=!0;continue}if(r==="`"){a=!0;continue}if(r===`{`)return{line:s,char:e};if(r===`;`&&s>n)break}}}}let n=/\bexport\s+const\s+[\w$]+\s*=\s*/;for(let t=0;t<e.length;t++){let r=e[t].match(n);if(r&&r.index!==void 0){let n=!1,i=!1,a=!1,o=!1;for(let s=t;s<e.length;s++){let c=e[s],l=s===t?r.index+r[0].length:0,u=!1;for(let e=l;e<c.length;e++){let r=c[e],l=e+1<c.length?c[e+1]:``,d=e>0?c[e-1]:``;if(u)break;if(o){r===`*`&&l===`/`&&(o=!1,e++);continue}if(n){r===`'`&&d!==`\\`&&(n=!1);continue}if(i){r===`"`&&d!==`\\`&&(i=!1);continue}if(a){r==="`"&&d!==`\\`&&(a=!1);continue}if(r===`/`&&l===`/`){u=!0,e++;continue}if(r===`/`&&l===`*`){o=!0,e++;continue}if(r===`'`){n=!0;continue}if(r===`"`){i=!0;continue}if(r==="`"){a=!0;continue}if(r===`{`)return{line:s,char:e};if(r===`;`&&s>t)break}}}}return null}function Kn(e){let t=Gn(e);if(!t)return null;let n=Wn(e,t.line,t.char);if(!n)return null;let r=t.line,i=n.endLine,a=t.char,o=n.endChar,s=r===i,c=` `;if(s){let t=e[r].match(/^(\s*)/)?.[1]||``;c=t.includes(` `)?`${t} `:`${t}\t`,!c.trim().length&&!t&&(c=` `)}else{for(let t=r+1;t<i;t++){let n=e[t].match(/^(\s+)\S/);if(n){c=n[1];break}}if(c===` `&&e[r].match(/^\s+/)){let t=e[r].match(/^(\s+)/)?.[1]||``;c=t.includes(` `)?`${t} `:`${t}\t`}}return{startLineIndex:r,endLineIndex:i,startCharIndex:a,endCharIndex:o,isSingleLine:s,indent:c}}function qn(e,t){let{preset:n,framework:r,validator:i,targetKeys:a}=t,o=K[r]||``,s=a??J(n,o),c={};for(let e of s)c[e]=Hn(e,i,o,n);let l=X(e);if(!l.success)return{success:!1,updated:!1,error:l.error,proposedFields:c};let u=l.blocks,d=e.split(/\r?\n/),f=Kn(d);if(!f)return{success:!1,updated:!1,error:`Could not find schema object literal in schema file.`,proposedFields:c};let p=t.markerId||n,m=new Set,h=new Map,g=/(?:^|[,{\s])([A-Za-z_][A-Za-z0-9_]*|'[^']+'|"[^"]+")\s*:/g;if(f.isSingleLine){let e=d[f.startLineIndex].slice(f.startCharIndex+1,f.endCharIndex);for(let t of e.matchAll(g)){let e=t[1],n=e.startsWith(`'`)||e.startsWith(`"`)?e.slice(1,-1):e;m.add(n)}}else for(let e=f.startLineIndex;e<=f.endLineIndex;e++){let t=u.find(t=>e>=t.startLineIndex&&e<=t.endLineIndex),r=d[e];if(e===f.startLineIndex?r=r.slice(f.startCharIndex+1):e===f.endLineIndex&&(r=r.slice(0,f.endCharIndex)),r.trim()){if(!t)for(let e of r.matchAll(g)){let t=e[1],n=t.startsWith(`'`)||t.startsWith(`"`)?t.slice(1,-1):t;m.add(n)}else if(t.baseId!==n)for(let e of r.matchAll(g)){let n=e[1],r=n.startsWith(`'`)||n.startsWith(`"`)?n.slice(1,-1):n;h.set(r,t.baseId)}}}for(let e of s){if(m.has(e))return{success:!1,updated:!1,error:`Collision detected: Key "${e}" already exists outside managed preset blocks (user-owned or legacy unmarked). Remove or migrate it before applying preset "${n}".`,proposedFields:c};if(h.has(e))return{success:!1,updated:!1,error:`Collision detected: Key "${e}" conflicts with existing managed preset "${h.get(e)}".`,proposedFields:c}}let _=f.indent,v=[`${_}// @arkenv-preset-start ${p}`,...s.map(e=>`${_}${e}: ${c[e]},`),`${_}// @arkenv-preset-end ${p}`],y=u.find(e=>e.markerId===p);if(y)return d.slice(y.startLineIndex,y.endLineIndex+1).join(`
129
+ `)===v.join(`
130
+ `)?{success:!0,updated:!1,code:e,proposedFields:c}:(d.splice(y.startLineIndex,y.endLineIndex-y.startLineIndex+1,...v),{success:!0,updated:!0,code:d.join(`
131
+ `),proposedFields:c});if(f.isSingleLine){let e=d[f.startLineIndex],t=e.slice(0,f.startCharIndex+1),n=e.slice(f.startCharIndex+1,f.endCharIndex).trim(),r=e.slice(f.endCharIndex),i=e.match(/^(\s*)/)?.[1]||``;if(n){let e=Jn(n),a=n;if(e!==-1){let t=n.slice(0,e),r=n.slice(e);if(t.trim()&&!t.trimEnd().endsWith(`,`)){let e=t.trimEnd();a=`${e},${t.slice(e.length)}${r}`}}else n.endsWith(`,`)||(a=`${n},`);d.splice(f.startLineIndex,1,t,`${_}${a}`,...v,`${i}${r.trimStart()}`)}else d.splice(f.startLineIndex,1,t,...v,`${i}${r.trimStart()}`);return{success:!0,updated:!0,code:d.join(`
132
+ `),proposedFields:c}}return Yn(d,f.startLineIndex,f.endLineIndex,f.startCharIndex),d.splice(f.endLineIndex,0,...v),{success:!0,updated:!0,code:d.join(`
133
+ `),proposedFields:c}}function Jn(e){let t=!1,n=!1,r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a];if(i){i=!1;continue}if(o===`\\`){i=!0;continue}if(o===`'`&&!n&&!r){t=!t;continue}if(o===`"`&&!t&&!r){n=!n;continue}if(o==="`"&&!t&&!n){r=!r;continue}if(!t&&!n&&!r&&o===`/`&&a+1<e.length&&(e[a+1]===`/`||e[a+1]===`*`))return a}return-1}function Yn(e,t,n,r){for(let i=n-1;i>=t;i--){let n=e[i],a=n;i===t&&(a=a.slice(r+1));let o=a.trim();if(!o||o.startsWith(`//`)||o.startsWith(`/*`)||o.startsWith(`*`))continue;let s=Jn(n),c=s===-1?n:n.slice(0,s),l=s===-1?``:n.slice(s);if(c.trim().length>0){if(!c.trimEnd().endsWith(`,`)){let t=c.trimEnd();e[i]=`${t},${c.slice(t.length)}${l}`}return}}}function Xn(e,t){let{preset:n}=t,r=X(e);if(!r.success)return{success:!1,updated:!1,error:r.error};let i=r.blocks.filter(e=>e.baseId===n);if(i.length===0)return{success:!0,updated:!1,code:e,removedKeys:[]};let a=i.flatMap(e=>e.keys),o=e.split(/\r?\n/),s=[...i].sort((e,t)=>t.startLineIndex-e.startLineIndex);for(let e of s)o.splice(e.startLineIndex,e.endLineIndex-e.startLineIndex+1);return{success:!0,updated:!0,code:o.join(`
134
+ `),removedKeys:a}}async function Zn(e=process.cwd()){for(let t of[`vite.config.ts`,`vite.config.js`,`vite.config.mts`,`vite.config.mjs`]){let n=s.default.resolve(e,t);try{return await c.default.access(n),n}catch{}}return null}async function Qn(e=process.cwd()){for(let t of[`bunfig.toml`,`bun.setup.ts`,`bun.setup.js`]){let n=s.default.resolve(e,t);try{return await c.default.access(n),n}catch{}}return null}async function $n(e=process.cwd()){for(let t of[`next.config.ts`,`next.config.js`,`next.config.mts`,`next.config.mjs`]){let n=s.default.resolve(e,t);try{return await c.default.access(n),n}catch{}}return null}async function er(e,t,n){try{let r=Bn({code:await e.readFile(t),disableCodegen: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 tr(e=process.cwd()){for(let t of[`nuxt.config.ts`,`nuxt.config.js`,`nuxt.config.mts`,`nuxt.config.mjs`,`nuxt.config.cjs`]){let n=s.default.resolve(e,t);try{return await c.default.access(n),n}catch{}}return null}async function nr(e,t){try{let n=Vn({code:await e.readFile(t)});return n.success&&n.updated&&n.code&&await e.writeFile(t,n.code),n.success?n.updated===void 0?{success:!0}:{success:!0,updated:n.updated}:{success:!1,error:n.error}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}async function rr(e,t,n){try{let r=zn({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 ir(e,t){if(!t||t.length===0)return{success:!0,instructions:l.default`
135
+ ${_.default.green(`✔`)} Use ${_.default.bold(`Vanilla`)} Bun runtime integration.
136
+ Access validated variables via your ${W(`env`)} object for typesafety.
137
+ Primarily used for ${_.default.cyan(`server-side`)} or runtime-only validation.
157
138
  No plugins are required.
158
- `};let n=t.includes(`serve`),r=t.includes(`build`),i=``;return n&&(i+=c.default`
159
- ${h.default.bold(`Bun Fullstack (Bun.serve) Integration:`)}
160
- To inline environment variables (e.g. ${G(`PUBLIC_*`)}) in your ${h.default.cyan(`client-side`)} code, add the plugin to ${G(`bunfig.toml`)}:
139
+ `};let n=t.includes(`serve`),r=t.includes(`build`),i=``;return n&&(i+=l.default`
140
+ ${_.default.bold(`Bun Fullstack (Bun.serve) Integration:`)}
141
+ To inline environment variables (e.g. ${W(`PUBLIC_*`)}) in your ${_.default.cyan(`client-side`)} code, add the plugin to ${W(`bunfig.toml`)}:
161
142
 
162
143
  [serve.static]
163
144
  plugins = ["@arkenv/bun-plugin"]
164
145
 
165
146
  `),r&&(i&&(i+=`
166
- `),i+=c.default`
167
- ${h.default.bold(`Bun Fullstack programmatic bundling (Bun.build):`)}
168
- To inline environment variables (e.g. ${G(`PUBLIC_*`)}) in your custom ${h.default.cyan(`client-side`)} build script, add the plugin to your ${G(`Bun.build`)} call:
147
+ `),i+=l.default`
148
+ ${_.default.bold(`Bun Fullstack programmatic bundling (Bun.build):`)}
149
+ To inline environment variables (e.g. ${W(`PUBLIC_*`)}) in your custom ${_.default.cyan(`client-side`)} build script, add the plugin to your ${W(`Bun.build`)} call:
169
150
 
170
- ${G(`import arkenv from "@arkenv/bun-plugin";`)}
151
+ ${W(`import arkenvPlugin from "@arkenv/bun-plugin";`)}
171
152
 
172
153
  await Bun.build({
173
154
  entrypoints: ["./index.ts"],
174
155
  outdir: "./dist",
175
- ${h.default.green(`plugins: [arkenv]`)}
156
+ ${_.default.green(`plugins: [arkenvPlugin]`)}
176
157
  });
177
- `),{success:!0,instructions:i.trim()}}async function Rn(e,t){let n=t||await It();if(!n)return{status:`not_found`};let r=o.default.basename(n);try{let t=await e.readFile(n);if((0,d.parse)(t)?.compilerOptions?.strict===!0)return{status:`already_strict`,file:r};let i=(0,d.applyEdits)(t,(0,d.modify)(t,[`compilerOptions`,`strict`],!0,{formattingOptions:{insertSpaces:!0,tabSize:2}}));return await e.writeFile(n,i),{status:`updated`,file:r}}catch{return{status:`error`,file:r}}}var zn=class{constructor(e,t,n){this.isQuiet=e,this.stdio=t,this.logger=n}async exists(e){try{return await s.default.access(e),!0}catch{return!1}}async readFile(e){return s.default.readFile(e,`utf-8`)}async writeFile(e,t){await s.default.writeFile(e,t,`utf-8`)}async mkdir(e,t){await s.default.mkdir(e,{recursive:t})}async execute(e,t=[],n){return new Promise((r,i)=>{let a=(0,l.spawn)(e,t,{cwd:n,stdio:this.isQuiet?`pipe`:this.stdio,shell:!1}),o=``,s=``,c=1e4;this.isQuiet&&(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,t)=>{if(e===0)r();else{let n=e===null?`Command terminated by signal ${t}`:`Command failed with code ${e}`;this.isQuiet&&(o&&(n+=`\n${h.default.dim(`STDOUT:`)}\n${o}`),s&&(n+=`\n${h.default.red(`STDERR:`)}\n${s}`)),i(Error(n))}}),a.on(`error`,i)})}async updateTsConfigToStrict(e){return Rn(this,e)}async findViteConfig(e){return An(e)}async findBunConfig(e){return jn(e)}async findNextjsConfig(e){return Mn(e)}async findNuxtConfig(e){return Pn(e)}async bootstrapViteConfig(e,t){return In(this,e,t)}async bootstrapBunConfig(e,t){return Ln(e,t)}async bootstrapNextjsConfig(e,t){return Nn(this,e,t)}async bootstrapNuxtConfig(e){return Fn(this,e)}async safeAppend(e,t,n){let{safeAppend:r}=await Promise.resolve().then(()=>vt);return r(e,t,n,this.logger)}};async function Bn(e){let t=e.defaultPath||`./src/env.ts`;if(e.hasEnvSchemaFile){let e=await V({message:h.default.yellow(`An existing ArkEnv configuration was found at ${G(t)}. Do you want to overwrite it?`),initialValue:!1,active:`Yes (override my configuration)`,inactive:`No (abort)`});return I(e)||!e?null:e}return!0}async function Vn(e){let t=e.detectedKeys,n=e.keysSource||`.env.example`;if(t&&t.length>0){let e=t.length,r=e===1,i=await V({message:n===`.env.example`?`Detected ${G(`.env.example`)} with ${e} ${r?`key`:`keys`}. Use ${r?`it`:`them`} for your schema?`:`Detected ${e} environment variable${r?``:`s`} used in your project. Use ${r?`it`:`them`} for your schema?`,active:`Yes (Recommended)`,initialValue:!0});return I(i)?null:i}return!1}async function Hn(e){if(e.framework===`vite`||e.framework===`bun-fullstack`){let t=e.framework===`vite`?`vite-env.d.ts`:`bun-env.d.ts`;if(e.hasTypeFile)return!0;let n=await V({message:`Establish ${G(t)} for typesafe environment variables?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No`});return I(n)?null:n}return!0}async function Un(e){if(!e.installTypeDefinitions||e.framework!==`vite`&&e.framework!==`bun-fullstack`)return`skip`;let t=e.framework===`vite`?`vite-env.d.ts`:`bun-env.d.ts`;if(e.hasTypeFile){let e=await U({message:`Found existing ${G(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)?null:e}return`overwrite`}async function Wn(e){let t=await U({message:`Select an example:`,options:e.examples.map(e=>({value:e.id,label:e.name,...e.description?{hint:e.description}:{}}))});return I(t)?null:t}async function Gn(e){let t=await U({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`},{value:`nextjs`,label:`Next.js${e.framework===`nextjs`?` (Detected)`:``}`,hint:`Next.js App or Pages Router with build and runtime validation`},{value:`nuxt`,label:`Nuxt${e.framework===`nuxt`?` (Detected)`:``}`,hint:`Nuxt with build and runtime validation`}]});return I(t)?null:t}async function Kn(e){let t=await V({message:`Optional: Would you also like to bootstrap a custom Bun.build script for programmatic bundling?`,initialValue:e.initialValue??!1});return I(t)?null:t}async function qn(){let e=await U({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 I(e)?null:e}async function Jn(e){let t=await U({message:`How would you like to structure your environment variables?`,options:(e?.framework,[{value:`flat`,label:`Flat (Recommended)`,hint:`A single flat env.ts file for the best DX`},{value:`strict`,label:`Strict`,hint:`Separate shared, client, and server files for hard bundle boundaries.`}])});return I(t)?null:t}async function Yn(e){let t=await V({message:`Enable automated ${e.framework===`nuxt`?`Nuxt`:`Next.js`} code generation for environment variables?`,initialValue:e.initialValue??!0,active:`Yes (Recommended)`,inactive:`No`});return I(t)?null:t}async function Xn(e){let t=[{value:`none`,label:`None`,hint:`Do not add any hosting-specific environment variables`},...Object.entries(J).map(([e,t])=>({value:e,label:t.label,hint:t.hint}))],n=await U({message:`Select a hosting provider preset (optional):`,initialValue:e?.initialValue??`none`,options:t});return I(n)?null:n}async function Zn(e){let t=await V({message:`Use default config path (${G(e.defaultEnvPath||`./src/env.ts`)})?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No, let me customize it`});return I(t)?null:t}async function Qn(e){let t=e.defaultEnvPath||`./src/env.ts`;if(!e.useDefaultPath){let e=await $e({message:`Where should we create the ArkEnv config?`,placeholder:t,initialValue:t,defaultValue:t});if(I(e))return null;let n=typeof e==`string`?e.trim():``;return n===``?t:n}return t}const Z={example:Wn,overwriteEnvSchemaFile:Bn,framework:Gn,bunBuild:Kn,layout:Jn,nextjsCodegen:Yn,useDefaultPath:Zn,path:Qn,installTypeDefinitions:Hn,envDtsHandling:Un,validator:qn,hostPreset:Xn,useEnvExample:Vn};async function $n(e,t=!1){return(e?.mode||`existing`)===`new`?er(e,t):tr(e,t)}async function er(e,t=!1){let n=e?.examples||[],r=`arkenv-project`;try{let i;if(e?.name){let t=e.name.trim();i=t===`.`||t===`./`||o.default.resolve(process.cwd(),t)===process.cwd()?`.`:t}else if(t)i=r;else{let e=(Q(await $e({message:`Project name:`,placeholder:r,defaultValue:r}))||r).trim();i=e===`.`||e===`./`||o.default.resolve(process.cwd(),e)===process.cwd()?`.`:e}let a=e?.example;!a&&!t?a=Q(await Z.example({examples:n})):!a&&t&&(a=`basic`);let s=n.find(e=>e.id===a);if(!s){let e=n.map(e=>e.id).join(`, `);throw Error(`Unknown example ${a}. Available examples: ${e}`)}return{mode:`new`,example:s.id,name:i,path:`./src/env.ts`,validator:`arktype`,framework:s.framework,language:`ts`,installSkill:!1}}catch(e){if(e instanceof rr)return null;throw e}}async function tr(e,n=!1){let r=e?.defaultEnvPath||`./src/env.ts`,i=e?.envKeys||null,a=e?.envKeysSource||`.env.example`;if(n){let n=e?.framework||`vanilla`,a;(n===`nextjs`||n===`nuxt`)&&(a=e?.isStrict?`strict`:e?.isSimple?`simple`:(e?.isFlat,`flat`));let o=await nr(e,n,r),s;return(n===`vite`||n===`bun-fullstack`)&&(s=o?`append`:`overwrite`),(0,t.shake)({mode:`existing`,path:r,validator:`arktype`,framework:n,layout:a,bunFeatures:n===`bun-fullstack`?e?.bunFeatures??[`serve`]:void 0,language:`ts`,overwriteEnvSchemaFile:!0,installTypeDefinitions:n===`vite`||n===`bun-fullstack`,installSkill:!1,envDtsHandling:s,envKeys:i??void 0,disableCodegen:e?.disableCodegen??!1,wrapNextjsConfig:n===`nextjs`?!0:void 0,hostPreset:e?.hostPreset||`none`})}try{let n=Q(await Z.overwriteEnvSchemaFile({hasEnvSchemaFile:e?.hasEnvSchemaFile??!1,defaultPath:r})),o=Q(await Z.framework({framework:e?.framework})),s;(o===`nextjs`||o===`nuxt`)&&(s=e?.isStrict?`strict`:e?.isSimple?`simple`:e?.isFlat?`flat`:Q(await Z.layout({framework:o})));let c;if(o===`bun-fullstack`){let t=!!e?.bunFeatures?.includes(`build`);c=Q(await Z.bunBuild({initialValue:t}))}let l=e?.disableCodegen;o===`nuxt`?l=!0:o===`nextjs`&&l===void 0&&(l=!Q(await Z.nextjsCodegen({initialValue:!0,framework:o})));let u;if(o===`nextjs`&&!l){let e=await V({message:`Would you like to wrap your Next.js config with ${G(`withArkEnv`)}?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No`});if(I(e))throw We(`Operation cancelled`),new rr;u=e}let d=Q(await Z.useDefaultPath({defaultEnvPath:r})),f=Q(await Z.path({useDefaultPath:d,defaultEnvPath:r})),p=await nr(e,o,f),m=Q(await Z.installTypeDefinitions({framework:o,hasTypeFile:p})),h=Q(await Z.envDtsHandling({framework:o,installTypeDefinitions:m,hasTypeFile:p})),g=Q(await Z.validator()),_=e?.hostPreset===void 0?Q(await Z.hostPreset({initialValue:e?.hostPreset})):e.hostPreset,v=Q(await Z.useEnvExample({detectedKeys:i,keysSource:a}));return(0,t.shake)({mode:`existing`,overwriteEnvSchemaFile:n,framework:o,layout:s,path:f,installTypeDefinitions:m,envDtsHandling:h,validator:g,hostPreset:_,bunFeatures:o===`bun-fullstack`?c?[`serve`,`build`]:[`serve`]:void 0,language:`ts`,installSkill:!1,envKeys:v?i??void 0:void 0,disableCodegen:l,wrapNextjsConfig:u})}catch(e){if(e instanceof rr)return null;throw e}}async function nr(e,t,n){return await e?.hasTypeFileAtPath?.({framework:t,envPath:n})??e?.hasTypeFile??!1}var rr=class extends Error{constructor(){super(`Operation cancelled`)}};function Q(e){if(e===null||I(e))throw We(`Operation cancelled`),new rr;return e}var ir=class{async confirm(e,n=!0,r,i){let a=await V((0,t.shake)({message:e,initialValue:n,active:r,inactive:i}));return I(a)?null:a}async runWizard(e,t=!1){return $n(e,t)}async select(e,t,n){let r=await U({message:e,options:t,initialValue:n});return I(r)?null:r}};const $={isYes:{long:`--yes`,short:`-y`,kind:`boolean`},isForce:{long:`--force`,short:`-f`,kind:`boolean`},isQuiet:{long:`--quiet`,short:`-q`,kind:`boolean`},isJson:{long:`--json`,short:`-j`,kind:`boolean`},isAgent:{long:`--agent`,short:``,kind:`boolean`},helpRequested:{long:`--help`,short:`-h`,kind:`boolean`},example:{long:`--example`,short:``,kind:`value`},isStrict:{long:`--strict`,short:``,kind:`boolean`},isSimple:{long:`--simple`,short:``,kind:`boolean`},isFlat:{long:`--flat`,short:``,kind:`boolean`},noCodegen:{long:`--no-codegen`,short:``,kind:`boolean`},hostPreset:{long:`--host-preset`,short:`-H`,kind:`value`}},ar=new Set(Object.values($).flatMap(e=>[e.long,e.short].filter(Boolean))),or=new Set(Object.values($).filter(e=>e.kind===`value`).flatMap(e=>[e.long,e.short].filter(Boolean)));var sr=class{constructor(e,t={}){let n=e.slice(2),r=[],i=!1;for(let e of n){if(i){r.push(e),i=!1;continue}if(or.has(e)){r.push(e),i=!0;continue}if(/^-[a-zA-Z]{2,}$/.test(e)){let t=e.slice(1).split(``);for(let e of t)r.push(`-${e}`);or.has(`-${t[t.length-1]}`)&&(i=!0)}else r.push(e)}this.args=r,this.command=this.args[0];let a=1,o=[];for(this.validationError=void 0;a<this.args.length;){let e=this.args[a];if(e.startsWith(`-`)){if(!ar.has(e)){this.validationError=`Unknown argument: ${e}`;break}if(or.has(e))if(a+1<this.args.length&&!this.args[a+1].startsWith(`-`))a+=2;else{this.validationError=`Missing value for option: ${e}`;break}else a+=1}else o.push(e),a+=1}if(!this.validationError){let e=$.hostPreset,t=this.getFlagValue(e.long,e.short);t!==void 0&&!pn(t)&&(this.validationError=`Invalid host preset: ${t}`)}if(this.positionalArgs=o,!this.validationError)if(this.command===`add`)if(!o[0])this.validationError=`Missing subcommand`;else if(o[0]!==`host`)this.validationError=`Unknown argument: ${o[0]}`;else if(o.length>2)this.validationError=`Unknown argument: ${o[2]}`;else{let e=o[1];e!==void 0&&!mn(e)&&(this.validationError=`Invalid host preset: ${e}`)}else o.length>1?this.validationError=`Unknown argument: ${o[1]}`:this.name=o[0];this.logger=t.logger||new tt({isQuiet:this.isQuiet,isJson:this.isJson,isYes:this.isYes})}get isAgent(){return this.hasFlag(`isAgent`)}get isYes(){return this.isAgent||this.hasFlag(`isYes`)}get isQuiet(){return this.isAgent||this.hasFlag(`isQuiet`)}get isJson(){return this.isAgent||this.hasFlag(`isJson`)}get isForce(){return this.hasFlag(`isForce`)}get helpRequested(){return this.hasFlag(`helpRequested`)}get example(){let e=$.example;return this.getFlagValue(e.long,e.short)}get isStrict(){return this.hasFlag(`isStrict`)}get isSimple(){return this.hasFlag(`isSimple`)}get isFlat(){return this.hasFlag(`isFlat`)}get noCodegen(){return this.hasFlag(`noCodegen`)}get hostPreset(){let e=$.hostPreset,t=this.getFlagValue(e.long,e.short);if(t!==void 0&&pn(t))return t}hasFlag(e){let t=$[e];return this.args.includes(t.long)||!!t.short&&this.args.includes(t.short)}get initInput(){let e={isYes:this.isYes,isForce:this.isForce,isQuiet:this.isQuiet,isAgent:this.isAgent,isStrict:this.isStrict,isSimple:this.isSimple,isFlat:this.isFlat};return this.example!==void 0&&(e.example=this.example),this.name!==void 0&&(e.name=this.name),this.noCodegen&&(e.noCodegen=!0),this.hostPreset!==void 0&&(e.hostPreset=this.hostPreset),e}get addInput(){let e=this.positionalArgs[1],t=this.isYes;return e!==void 0&&mn(e)?{provider:e,isYes:t}:{isYes:t}}getFlagValue(e,t){let n=this.args.findIndex(n=>n===e||n===t);if(n!==-1&&this.args[n+1]&&!this.args[n+1].startsWith(`-`))return this.args[n+1]}},cr=class{constructor(e,t,n,r){this.logger=e,this.workspace=t,this.prompt=n,this.scanner=r}async execute(e){this.logger.interactiveStdout(!0);try{let t=e.provider;if(!t)if(e.isYes)t=`vercel`;else{let e=await this.prompt.select(`Select a hosting provider preset:`,Object.entries(J).map(([e,t])=>({value:e,label:t.label,hint:t.hint})),`vercel`);if(e&&e!==`none`)t=e;else return!1}let n=process.cwd(),r=(await this.scanner.checkTsConfig(n)).parsed||null,i=await this.scanner.detectFramework(n,r),a=await this.scanner.suggestDefaultEnvPath(n,r),s=q[i],c=o.default.resolve(n,o.default.dirname(a),`env`),l=[...new Set([c,o.default.resolve(n,`env`),o.default.resolve(n,`src/env`)])],u=null;for(let e of l){let t=o.default.join(e,`client.ts`),n=o.default.join(e,`server.ts`);if(await this.workspace.exists(t)&&await this.workspace.exists(n)){u=e;break}}if(u){let e=o.default.join(u,`client.ts`),r=o.default.join(u,`server.ts`),a=o.default.relative(n,e),c=o.default.relative(n,r),{clientKeys:l,serverKeys:d}=hn(t,s),f=await this.workspace.readFile(e),p=await this.workspace.readFile(r),m=lr(f),h=lr(p),g=kn(f,t,i,m,l),_=kn(p,t,i,h,d),v=()=>`// ${a}\n{\n${l.map(e=>`\t${e}: ${On(e,m,s,t)},`).join(`
178
- `)}\n}\n\n// ${c}\n{\n${d.map(e=>`\t${e}: ${On(e,h,s,t)},`).join(`
179
- `)}\n}`;if(!g.success||!g.code||!_.success||!_.code)return this.logger.error(`Failed to mutate strict layout schema files.`),this.logger.log(`
180
- Please add the following environment variables to your schemas manually:
181
- `),this.logger.log(v()),!0;let y=!1;g.updated&&(await this.workspace.writeFile(e,g.code),y=!0),_.updated&&(await this.workspace.writeFile(r,_.code),y=!0);let b=J[t].label;return y?this.logger.success(`Added ${b} environment variables to ${a} and ${c}`):this.logger.info(`All ${b} environment variables are already present in ${a} and ${c}`),!0}let d=[o.default.resolve(n,`env.ts`),o.default.resolve(n,`src/env.ts`),o.default.resolve(n,a)],f=null;for(let e of d)if(await this.workspace.exists(e)){f=e;break}let p=Y(t,s),m=e=>p.map(n=>`\t${n}: ${On(n,e,s,t)},`).join(`
182
- `);if(!f)return this.logger.error(`Could not locate your env.ts file.`),this.logger.log(`
183
- Please add the following environment variables to your schema manually:
184
- `),this.logger.log(`{\n${m(`arktype`)}\n}`),!0;let h=await this.workspace.readFile(f),g=lr(h),_=kn(h,t,i,g),v=o.default.relative(n,f);return!_.success||!_.code?(this.logger.error(_.error||`Failed to mutate ${v}.`),this.logger.log(`
185
- Please add the following environment variables to your schema manually:
186
- `),this.logger.log(`{\n${m(g)}\n}`),!0):(_.updated?(await this.workspace.writeFile(f,_.code),this.logger.success(`Added ${J[t].label} environment variables to ${v}`)):this.logger.info(`All ${J[t].label} environment variables are already present in ${v}`),!0)}finally{this.logger.interactiveStdout(!1)}}};function lr(e){let t=e.replace(/\/\/.*/g,``).replace(/\/\*[\s\S]*?\*\//g,``);return/(?:^|\n)\s*import\s+[\s\S]*?from\s+['"]zod['"]/.test(t)?`zod`:/(?:^|\n)\s*import\s+[\s\S]*?from\s+['"]valibot['"]/.test(t)?`valibot`:`arktype`}var ur=`1.0.0-alpha.12`;function dr(e,t=2,n=4){let r=Math.max(...e.map(e=>e.left.length),0),i=` `.repeat(t);return e.map(e=>{let t=` `.repeat(r-e.left.length+n);return`${i}${e.left}${t}${e.right}`})}var fr=class{constructor(e){this.logger=e}async execute(){let e=[{left:`arkenv init [project-name]`,right:`Set up ArkEnv in your project`},{left:`arkenv add host [provider]`,right:`Add hosting provider preset (vercel, netlify, cloudflare, railway, render, fly) to schema`}],t=[{left:`--yes, -y`,right:`Skip prompts and use defaults (also passed to subprocesses)`},{left:`--quiet, -q`,right:`Quiet mode: Suppress output, capture logs on failure`},{left:`--json, -j`,right:`Output structured JSON to stdout`},{left:`--agent`,right:`Enable non-interactive, machine-readable mode for AI agents. Bypasses all prompts and outputs structured JSON. Macro for --yes --quiet --json`},{left:`--help, -h`,right:`Show this help message`}],n=[{left:`--example`,right:`Specify an example name when creating a new project`},{left:`--force, -f`,right:`Bypass technical requirement checks and dirty git working tree check, then force scaffolding`},{left:`--no-codegen`,right:`Disable automatic env.gen.ts code generation for Next.js`},{left:`--host-preset, -H <preset>`,right:`Specify a hosting provider preset (none, vercel, netlify, cloudflare, railway, render, fly)`}];this.logger.log(`ArkEnv CLI v${ur}`),this.logger.log(`\n${h.default.bold(`Usage:`)}`);for(let t of dr(e))this.logger.log(t);this.logger.log(`\n${h.default.bold(`Global options:`)}`);for(let e of dr(t))this.logger.log(e);this.logger.log(`\n${h.default.bold(`init options:`)}`);for(let e of dr(n))this.logger.log(e)}};async function pr(e,t){let n=t.targetDir??process.cwd(),r=o.default.join(process.cwd(),`.arkenv-temp`);await e.mkdir(r,!0),t.targetDir&&await e.mkdir(n,!0);try{await e.execute(`git`,[`clone`,`--filter=blob:none`,`--sparse`,t.repository,r]);let i=`examples/${t.example}`;await e.execute(`git`,[`-C`,r,`sparse-checkout`,`set`,i]);let a=o.default.join(r,i),c=await s.default.readdir(a),l=[];for(let t of c){let r=o.default.join(n,t);await e.exists(r)&&l.push(t)}if(l.length>0)throw Error(`Scaffolding into a non-empty directory failed. The following paths already exist: ${l.join(`, `)}`);await mr(a,n);for(let e of[`package-lock.json`,`pnpm-lock.yaml`,`yarn.lock`,`bun.lockb`,`bun.lock`])await s.default.rm(o.default.join(n,e),{force:!0});let u=o.default.join(n,`package.json`);if(await e.exists(u)){let n=await e.readFile(u),r=JSON.parse(n);r.name=t.targetName,delete r.packageManager,await e.writeFile(u,JSON.stringify(r,null,2))}}finally{await s.default.rm(r,{recursive:!0,force:!0})}}async function mr(e,t){let n=await s.default.readdir(e);await Promise.all(n.map(n=>s.default.cp(o.default.join(e,n),o.default.join(t,n),{recursive:!0,force:!1})))}function hr(e,t){let n=t.length>0;switch(e){case`pnpm`:return[`pnpm`,[n?`add`:`install`,...t]];case`yarn`:return[`yarn`,[n?`add`:`install`,...t]];case`bun`:return[`bun`,[n?`add`:`install`,...t]];default:return[`npm`,[`install`,...t]]}}function gr(e,t,n){if(t||e.metadata.skillDetected){let t=e.metadata.framework===`nextjs`&&!e.metadata.disableCodegen,r=e.metadata.framework===`nuxt`&&!e.metadata.disableCodegen,i=t&&!n,a=c.default`
158
+ `),{success:!0,instructions:i.trim()}}async function ar(e,t){let n=t||await Qt();if(!n)return{status:`not_found`};let r=s.default.basename(n);try{let t=await e.readFile(n);if((0,p.parse)(t)?.compilerOptions?.strict===!0)return{status:`already_strict`,file:r};let i=(0,p.applyEdits)(t,(0,p.modify)(t,[`compilerOptions`,`strict`],!0,{formattingOptions:{insertSpaces:!0,tabSize:2}}));return await e.writeFile(n,i),{status:`updated`,file:r}}catch{return{status:`error`,file:r}}}var or=class{constructor(e,t,n){this.isQuiet=e,this.stdio=t,this.logger=n}async exists(e){try{return await c.default.access(e),!0}catch{return!1}}async readFile(e){return c.default.readFile(e,`utf-8`)}async writeFile(e,t){await c.default.writeFile(e,t,`utf-8`)}async mkdir(e,t){await c.default.mkdir(e,{recursive:t})}async execute(e,t=[],n){return new Promise((r,i)=>{let a=(0,d.spawn)(e,t,{cwd:n,stdio:this.isQuiet?`pipe`:this.stdio,shell:!1}),o=``,s=``,c=1e4;this.isQuiet&&(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,t)=>{if(e===0)r();else{let n=e===null?`Command terminated by signal ${t}`:`Command failed with code ${e}`;this.isQuiet&&(o&&(n+=`\n${_.default.dim(`STDOUT:`)}\n${o}`),s&&(n+=`\n${_.default.red(`STDERR:`)}\n${s}`)),i(Error(n))}}),a.on(`error`,i)})}async updateTsConfigToStrict(e){return ar(this,e)}async findViteConfig(e){return Zn(e)}async findBunConfig(e){return Qn(e)}async findNextjsConfig(e){return $n(e)}async findNuxtConfig(e){return tr(e)}async bootstrapViteConfig(e,t){return rr(this,e,t)}async bootstrapBunConfig(e,t){return ir(e,t)}async bootstrapNextjsConfig(e,t){return er(this,e,t)}async bootstrapNuxtConfig(e){return nr(this,e)}async safeAppend(e,t,n){let{safeAppend:r}=await Promise.resolve().then(()=>Ct);return r(e,t,n,this.logger)}async appendMissingEnvExampleKeys(e,t){let n=s.default.join(e,`.env.example`);if(!await this.exists(n))return!1;let r=await this.readFile(n),i=new Set;for(let e of r.split(/\r?\n/)){let t=e.match(/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/);t&&i.add(t[1])}let a=t.filter(e=>!i.has(e));if(a.length===0)return!1;let o=a.map(e=>`${e}=`).join(`
159
+ `)+`
160
+ `,c=r.endsWith(`
161
+ `)||r.length===0?`${r}${o}`:`${r}\n${o}`;return await this.writeFile(n,c),!0}async removeEnvExampleKeys(e,t,n=[]){let r=s.default.join(e,`.env.example`);if(!await this.exists(r))return!1;let i=new Set(t.filter(e=>!n.includes(e)));if(i.size===0)return!1;let a=await this.readFile(r),o=a.split(/\r?\n/).filter(e=>{let t=e.match(/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/);return!(t&&i.has(t[1]))}).join(`
162
+ `);return a.endsWith(`
163
+ `)&&!o.endsWith(`
164
+ `)&&(o+=`
165
+ `),o===a?!1:(await this.writeFile(r,o),!0)}};async function sr(e){let t=e.defaultPath||`./src/env.ts`;if(e.hasEnvSchemaFile){let e=await R({message:_.default.yellow(`An existing ArkEnv configuration was found at ${W(t)}. Do you want to overwrite it?`),initialValue:!1,active:`Yes (override my configuration)`,inactive:`No (abort)`});return N(e)||!e?null:e}return!0}async function cr(e){let t=e.detectedKeys,n=e.keysSource||`.env.example`;if(t&&t.length>0){let e=t.length,r=e===1,i=await R({message:n===`.env.example`?`Detected ${W(`.env.example`)} with ${e} ${r?`key`:`keys`}. Use ${r?`it`:`them`} for your schema?`:`Detected ${e} environment variable${r?``:`s`} used in your project. Use ${r?`it`:`them`} for your schema?`,active:`Yes (Recommended)`,initialValue:!0});return N(i)?null:i}return!1}async function lr(e){let t=await B({message:`Select an example:`,options:e.examples.map(e=>({value:e.id,label:e.name,...e.description?{hint:e.description}:{}}))});return N(t)?null:t}async function ur(e){let t=await B({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`},{value:`nextjs`,label:`Next.js${e.framework===`nextjs`?` (Detected)`:``}`,hint:`Next.js App or Pages Router with build and runtime validation`},{value:`nuxt`,label:`Nuxt${e.framework===`nuxt`?` (Detected)`:``}`,hint:`Nuxt with build and runtime validation`}]});return N(t)?null:t}async function dr(e){let t=await R({message:`Optional: Would you also like to bootstrap a custom Bun.build script for programmatic bundling?`,initialValue:e.initialValue??!1});return N(t)?null:t}async function fr(){let e=await B({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 N(e)?null:e}async function pr(e){let t=await B({message:`How would you like to structure your environment variables?`,options:(e?.framework,[{value:`flat`,label:`Flat (Recommended)`,hint:`A single flat env.ts file for the best DX`},{value:`strict`,label:`Strict`,hint:`Separate shared, client, and server files for hard bundle boundaries.`}])});return N(t)?null:t}async function mr(e){let t=await R({message:`Enable automated ${e.framework===`nuxt`?`Nuxt`:`Next.js`} code generation for environment variables?`,initialValue:e.initialValue??!0,active:`Yes (Recommended)`,inactive:`No`});return N(t)?null:t}async function hr(e){let t=[{value:`none`,label:`None`,hint:`Do not add any hosting-specific environment variables`},...Object.entries(q).map(([e,t])=>({value:e,label:t.label,hint:t.hint}))],n=await B({message:`Select a hosting provider preset (optional):`,initialValue:e?.initialValue??`none`,options:t});return N(n)?null:n}async function gr(e){let t=await R({message:`Use default config path (${W(e.defaultEnvPath||`./src/env.ts`)})?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No, let me customize it`});return N(t)?null:t}async function _r(e){let t=e.defaultEnvPath||`./src/env.ts`;if(!e.useDefaultPath){let e=await it({message:`Where should we create the ArkEnv config?`,placeholder:t,initialValue:t,defaultValue:t});if(N(e))return null;let n=typeof e==`string`?e.trim():``;return n===``?t:n}return t}const Z={example:lr,overwriteEnvSchemaFile:sr,framework:ur,bunBuild:dr,layout:pr,nextjsCodegen:mr,useDefaultPath:gr,path:_r,validator:fr,hostPreset:hr,useEnvExample:cr};async function vr(e,t=!1){return(e?.mode||`existing`)===`new`?yr(e,t):br(e,t)}async function yr(e,t=!1){let n=e?.examples||[],r=`arkenv-project`;try{let i;if(e?.name){let t=e.name.trim();i=t===`.`||t===`./`||s.default.resolve(process.cwd(),t)===process.cwd()?`.`:t}else if(t)i=r;else{let e=(Q(await it({message:`Project name:`,placeholder:r,defaultValue:r}))||r).trim();i=e===`.`||e===`./`||s.default.resolve(process.cwd(),e)===process.cwd()?`.`:e}let a=e?.example;!a&&!t?a=Q(await Z.example({examples:n})):!a&&t&&(a=`basic`);let o=n.find(e=>e.id===a);if(!o){let e=n.map(e=>e.id).join(`, `);throw Error(`Unknown example ${a}. Available examples: ${e}`)}return{mode:`new`,example:o.id,name:i,path:`./src/env.ts`,validator:`arktype`,framework:o.framework,language:`ts`,installSkill:!1}}catch(e){if(e instanceof xr)return null;throw e}}async function br(e,t=!1){let r=e?.defaultEnvPath||`./src/env.ts`,i=e?.envKeys||null,a=e?.envKeysSource||`.env.example`;if(t){let t=e?.framework||`vanilla`,a;return(t===`nextjs`||t===`nuxt`)&&(a=e?.isStrict?`strict`:e?.isSimple?`simple`:(e?.isFlat,`flat`)),(0,n.shake)({mode:`existing`,path:r,validator:`arktype`,framework:t,layout:a,bunFeatures:t===`bun-fullstack`?e?.bunFeatures??[`serve`]:void 0,language:`ts`,overwriteEnvSchemaFile:!0,installSkill:!1,envKeys:i??void 0,disableCodegen:e?.disableCodegen??!1,wrapNextjsConfig:t===`nextjs`?!0:void 0,hostPreset:e?.hostPreset||`none`})}try{let t=Q(await Z.overwriteEnvSchemaFile({hasEnvSchemaFile:e?.hasEnvSchemaFile??!1,defaultPath:r})),o=Q(await Z.framework({framework:e?.framework})),s;(o===`nextjs`||o===`nuxt`)&&(s=e?.isStrict?`strict`:e?.isSimple?`simple`:e?.isFlat?`flat`:Q(await Z.layout({framework:o})));let c;if(o===`bun-fullstack`){let t=!!e?.bunFeatures?.includes(`build`);c=Q(await Z.bunBuild({initialValue:t}))}let l=e?.disableCodegen;o===`nuxt`?l=!0:o===`nextjs`&&l===void 0&&(l=!Q(await Z.nextjsCodegen({initialValue:!0,framework:o})));let u;if(o===`nextjs`&&!l){let e=await R({message:`Would you like to wrap your Next.js config with ${W(`withArkEnv`)}?`,initialValue:!0,active:`Yes (Recommended)`,inactive:`No`});if(N(e))throw Ye(`Operation cancelled`),new xr;u=e}let d=Q(await Z.useDefaultPath({defaultEnvPath:r})),f=Q(await Z.path({useDefaultPath:d,defaultEnvPath:r})),p=Q(await Z.validator()),m=e?.hostPreset===void 0?Q(await Z.hostPreset({initialValue:e?.hostPreset})):e.hostPreset,h=Q(await Z.useEnvExample({detectedKeys:i,keysSource:a}));return(0,n.shake)({mode:`existing`,overwriteEnvSchemaFile:t,framework:o,layout:s,path:f,validator:p,hostPreset:m,bunFeatures:o===`bun-fullstack`?c?[`serve`,`build`]:[`serve`]:void 0,language:`ts`,installSkill:!1,envKeys:h?i??void 0:void 0,disableCodegen:l,wrapNextjsConfig:u})}catch(e){if(e instanceof xr)return null;throw e}}var xr=class extends Error{constructor(){super(`Operation cancelled`)}};function Q(e){if(e===null||N(e))throw Ye(`Operation cancelled`),new xr;return e}var Sr=class{async confirm(e,t=!0,r,i){let a=await R((0,n.shake)({message:e,initialValue:t,active:r,inactive:i}));return N(a)?null:a}async runWizard(e,t=!1){return vr(e,t)}async select(e,t,n){let r=await B({message:e,options:t,initialValue:n});return N(r)?null:r}};const $={isYes:{long:`--yes`,short:`-y`,kind:`boolean`},isForce:{long:`--force`,short:`-f`,kind:`boolean`},isQuiet:{long:`--quiet`,short:`-q`,kind:`boolean`},isJson:{long:`--json`,short:`-j`,kind:`boolean`},isAgent:{long:`--agent`,short:``,kind:`boolean`},helpRequested:{long:`--help`,short:`-h`,kind:`boolean`},example:{long:`--example`,short:``,kind:`value`},isStrict:{long:`--strict`,short:``,kind:`boolean`},isSimple:{long:`--simple`,short:``,kind:`boolean`},isFlat:{long:`--flat`,short:``,kind:`boolean`},noCodegen:{long:`--no-codegen`,short:``,kind:`boolean`},preset:{long:`--preset`,short:`-P`,kind:`value`},hostPreset:{long:`--host-preset`,short:`-H`,kind:`value`},file:{long:`--file`,short:``,kind:`value`}},Cr=new Set(Object.values($).flatMap(e=>[e.long,e.short].filter(Boolean))),wr=new Set(Object.values($).filter(e=>e.kind===`value`).flatMap(e=>[e.long,e.short].filter(Boolean)));var Tr=class{constructor(e,t={}){let n=e.slice(2),r=[],i=!1;for(let e of n){if(i){r.push(e),i=!1;continue}if(wr.has(e)){r.push(e),i=!0;continue}if(/^-[a-zA-Z]{2,}$/.test(e)){let t=e.slice(1).split(``);for(let e of t)r.push(`-${e}`);wr.has(`-${t[t.length-1]}`)&&(i=!0)}else r.push(e)}this.args=r,this.command=this.args[0];let a=1,o=[];for(this.validationError=void 0;a<this.args.length;){let e=this.args[a];if(e.startsWith(`-`)){if(!Cr.has(e)){this.validationError=`Unknown argument: ${e}`;break}if(wr.has(e))if(a+1<this.args.length&&!this.args[a+1].startsWith(`-`))a+=2;else{this.validationError=`Missing value for option: ${e}`;break}else a+=1}else o.push(e),a+=1}if(!this.validationError){let e=this.getFlagValue($.preset.long,$.preset.short)??this.getFlagValue($.hostPreset.long,$.hostPreset.short);e!==void 0&&!Tn(e)&&(this.validationError=`Invalid host preset: ${e}`)}if(this.positionalArgs=o,!this.validationError)if(this.command===`preset`)if(o.length===0)this.validationError=`Missing subcommand`;else{let e=o[0];if(e!==`apply`&&e!==`remove`&&e!==`rm`&&e!==`add`)this.validationError=`Unknown preset action: ${e}`;else if(o.length>2)this.validationError=`Unknown argument: ${o[2]}`;else{let e=o[1];e!==void 0&&!En(e)&&(this.validationError=`Invalid host preset: ${e}`)}}else o.length>1?this.validationError=`Unknown argument: ${o[1]}`:this.name=o[0];this.logger=t.logger||new ot({isQuiet:this.isQuiet,isJson:this.isJson,isYes:this.isYes})}get isAgent(){return this.hasFlag(`isAgent`)}get isYes(){return this.isAgent||this.hasFlag(`isYes`)}get isQuiet(){return this.isAgent||this.hasFlag(`isQuiet`)}get isJson(){return this.isAgent||this.hasFlag(`isJson`)}get isForce(){return this.hasFlag(`isForce`)}get helpRequested(){return this.hasFlag(`helpRequested`)}get example(){let e=$.example;return this.getFlagValue(e.long,e.short)}get isStrict(){return this.hasFlag(`isStrict`)}get isSimple(){return this.hasFlag(`isSimple`)}get isFlat(){return this.hasFlag(`isFlat`)}get noCodegen(){return this.hasFlag(`noCodegen`)}get file(){let e=$.file;return this.getFlagValue(e.long,e.short)}get hostPreset(){let e=this.getFlagValue($.preset.long,$.preset.short)??this.getFlagValue($.hostPreset.long,$.hostPreset.short);if(e&&Tn(e))return e}hasFlag(e){let t=$[e];return this.args.includes(t.long)||!!t.short&&this.args.includes(t.short)}get initInput(){let e={isYes:this.isYes,isForce:this.isForce,isQuiet:this.isQuiet,isAgent:this.isAgent,isStrict:this.isStrict,isSimple:this.isSimple,isFlat:this.isFlat};return this.example!==void 0&&(e.example=this.example),this.name!==void 0&&(e.name=this.name),this.noCodegen&&(e.noCodegen=!0),this.hostPreset!==void 0&&(e.hostPreset=this.hostPreset),e}get presetInput(){let e=this.positionalArgs[0],t=e===`remove`||e===`rm`?`remove`:`apply`,n=this.positionalArgs[1],r=this.file;return{action:t,...n&&En(n)?{provider:n}:{},...r===void 0?{}:{file:r},isForce:this.isForce,isYes:this.isYes}}getFlagValue(e,t){let n=this.args.findIndex(n=>n===e||n===t);if(n!==-1&&this.args[n+1]&&!this.args[n+1].startsWith(`-`))return this.args[n+1]}},Er=`1.0.0-alpha.14`;function Dr(e,t=2,n=4){let r=Math.max(...e.map(e=>e.left.length),0),i=` `.repeat(t);return e.map(e=>{let t=` `.repeat(r-e.left.length+n);return`${i}${e.left}${t}${e.right}`})}var Or=class{constructor(e){this.logger=e}async execute(){let e=[{left:`arkenv init [project-name]`,right:`Set up ArkEnv in your project`},{left:`arkenv preset apply [provider]`,right:`Apply or refresh hosting provider preset (vercel, netlify, cloudflare, railway, render, fly)`},{left:`arkenv preset remove [provider]`,right:`Remove hosting provider preset from schema`}],t=[{left:`--yes, -y`,right:`Skip prompts and use defaults (also passed to subprocesses)`},{left:`--quiet, -q`,right:`Quiet mode: Suppress output, capture logs on failure`},{left:`--json, -j`,right:`Output structured JSON to stdout`},{left:`--agent`,right:`Enable non-interactive, machine-readable mode for AI agents. Bypasses all prompts and outputs structured JSON. Macro for --yes --quiet --json`},{left:`--help, -h`,right:`Show this help message`}],n=[{left:`--example`,right:`Specify an example name when creating a new project`},{left:`--force, -f`,right:`Bypass technical requirement checks and dirty git working tree check, then force scaffolding`},{left:`--no-codegen`,right:`Disable automatic env.gen.ts code generation for Next.js`},{left:`--preset, -P <preset>`,right:`Specify a hosting provider preset (none, vercel, netlify, cloudflare, railway, render, fly)`}],r=[{left:`--file <path>`,right:`Path to schema file (overrides package.json arkenv pointer)`},{left:`--force, -f`,right:`Bypass dirty git working tree check`}];this.logger.log(`ArkEnv CLI v${Er}`),this.logger.log(`\n${_.default.bold(`Usage:`)}`);for(let t of Dr(e))this.logger.log(t);this.logger.log(`\n${_.default.bold(`Global options:`)}`);for(let e of Dr(t))this.logger.log(e);this.logger.log(`\n${_.default.bold(`init options:`)}`);for(let e of Dr(n))this.logger.log(e);this.logger.log(`\n${_.default.bold(`preset options:`)}`);for(let e of Dr(r))this.logger.log(e)}};async function kr(e,t){let n=t.targetDir??process.cwd(),r=s.default.join(process.cwd(),`.arkenv-temp`);await e.mkdir(r,!0),t.targetDir&&await e.mkdir(n,!0);try{await e.execute(`git`,[`clone`,`--filter=blob:none`,`--sparse`,t.repository,r]);let i=`examples/${t.example}`;await e.execute(`git`,[`-C`,r,`sparse-checkout`,`set`,i]);let a=s.default.join(r,i),o=await c.default.readdir(a),l=[];for(let t of o){let r=s.default.join(n,t);await e.exists(r)&&l.push(t)}if(l.length>0)throw Error(`Scaffolding into a non-empty directory failed. The following paths already exist: ${l.join(`, `)}`);await Ar(a,n);for(let e of[`package-lock.json`,`pnpm-lock.yaml`,`yarn.lock`,`bun.lockb`,`bun.lock`])await c.default.rm(s.default.join(n,e),{force:!0});let u=s.default.join(n,`package.json`);if(await e.exists(u)){let n=await e.readFile(u),r=JSON.parse(n);r.name=t.targetName,delete r.packageManager,await e.writeFile(u,JSON.stringify(r,null,2))}}finally{await c.default.rm(r,{recursive:!0,force:!0})}}async function Ar(e,t){let n=await c.default.readdir(e);await Promise.all(n.map(n=>c.default.cp(s.default.join(e,n),s.default.join(t,n),{recursive:!0,force:!1})))}function jr(e,t){let n=t.length>0;switch(e){case`pnpm`:return[`pnpm`,[n?`add`:`install`,...t]];case`yarn`:return[`yarn`,[n?`add`:`install`,...t]];case`bun`:return[`bun`,[n?`add`:`install`,...t]];default:return[`npm`,[`install`,...t]]}}function Mr(e,t,n){if(t||e.metadata.skillDetected){let t=e.metadata.framework===`nextjs`&&!e.metadata.disableCodegen,r=e.metadata.framework===`nuxt`&&!e.metadata.disableCodegen,i=t&&!n,a=l.default`
187
166
  Inside your AI assistant (e.g. Claude Code), use:
188
- ${G(`/arkenv`)} - automatically refine your schema and configure integrations.
167
+ ${W(`/arkenv`)} - automatically refine your schema and configure integrations.
189
168
  `;return i?(a+=`
190
169
 
191
- `,a+=`Also, wrap your Next.js config with ${G(`withArkEnv`)}:\n`,a+=` ${G(`import { withArkEnv } from "@arkenv/nextjs/config";`)}\n`,e.metadata.layout===`strict`?(a+=` ${G(`export default withArkEnv(nextConfig);`)}\n`,a+=`Import and use: ${G(`import { env } from "${e.metadata.importPath}/client"`)} (client) or ${G(`import { env } from "${e.metadata.importPath}/server"`)} (server)\n`):(a+=` ${G(`export default withArkEnv(nextConfig);`)}\n`,a+=`Import and use: ${G(`import { env } from "${e.metadata.importPath}"`)}\n`)):r&&(a+=`
170
+ `,a+=`Also, wrap your Next.js config with ${W(`withArkEnv`)}:\n`,a+=` ${W(`import { withArkEnv } from "@arkenv/nextjs/config";`)}\n`,e.metadata.layout===`strict`?(a+=` ${W(`export default withArkEnv(nextConfig);`)}\n`,a+=`Import and use: ${W(`import { env } from "${e.metadata.importPath}/client"`)} (client) or ${W(`import { env } from "${e.metadata.importPath}/server"`)} (server)\n`):(a+=` ${W(`export default withArkEnv(nextConfig);`)}\n`,a+=`Import and use: ${W(`import { env } from "${e.metadata.importPath}"`)}\n`)):r&&(a+=`
192
171
 
193
- `,e.metadata.layout===`strict`?a+=`Import and use: ${G(`import { env } from "${e.metadata.importPath}/client"`)} (client) or ${G(`import { env } from "${e.metadata.importPath}/server"`)} (server)\n`:a+=`Import and use: ${G(`import { env } from "${e.metadata.importPath}"`)}\n`),{message:a,title:`Next steps`}}let r=e.skill?.dlxCommand.join(` `)||`npx`,i=e.skill?.packageName||`yamcodes/arkenv`,a=``,o=1,s=e.metadata.displayPath;if(e.metadata.layout===`strict`){let e=s.lastIndexOf(`.`),t=e===-1?s:s.slice(0,e);s=`${t}/client.ts, ${t}/server.ts, and ${t}/internal/shared.ts`}a+=`${o++}. Check ${G(s)} and refine your environment schema.\n`;let l=e.metadata.framework===`nextjs`&&!e.metadata.disableCodegen&&!n;return e.metadata.framework===`vite`?a+=`${o++}. Access via ${G(`import.meta.env.YOUR_VAR`)}\n`:e.metadata.framework===`bun-fullstack`?a+=`${o++}. Access via ${G(`process.env.YOUR_VAR`)}\n`:e.metadata.framework===`nextjs`?e.metadata.layout===`strict`?(e.metadata.disableCodegen||l&&(a+=`${o++}. Wrap your Next.js config with ${G(`withArkEnv`)} inside ${G(`next.config.ts`)}:\n`,a+=` ${G(`import { withArkEnv } from "@arkenv/nextjs/config";`)}\n`,a+=` ${G(`export default withArkEnv(nextConfig);`)}\n`),a+=`${o++}. Import and use: ${G(`import { env } from "${e.metadata.importPath}/client"`)} (client) or ${G(`import { env } from "${e.metadata.importPath}/server"`)} (server)\n`):(e.metadata.disableCodegen||l&&(a+=`${o++}. Wrap your Next.js config with ${G(`withArkEnv`)} inside ${G(`next.config.ts`)}:\n`,a+=` ${G(`import { withArkEnv } from "@arkenv/nextjs/config";`)}\n`,a+=` ${G(`export default withArkEnv(nextConfig);`)}\n`),a+=`${o++}. Import and use: ${G(`import { env } from "${e.metadata.importPath}"`)}\n`):e.metadata.framework===`nuxt`&&e.metadata.layout===`strict`?a+=`${o++}. Import and use: ${G(`import { env } from "${e.metadata.importPath}/client"`)} (client) or ${G(`import { env } from "${e.metadata.importPath}/server"`)} (server)\n`:a+=`${o++}. Import and use: ${G(`import { env } from "${e.metadata.importPath}"`)}\n`,a+=`${o++}. (Recommended) Install the AI skill: ${G(`${r} skills add ${i}`)}\n`,a+=` Then run ${G(`/arkenv`)} inside your AI assistant to finish.`,{message:a,title:`Next steps`}}const _r=[`esbuild`];var vr=class{constructor(e,t){this.workspace=e,this.reporter=t}async execute(e){let t=this.reporter.spinner();t.start(`Scaffolding ArkEnv configuration...`);try{e.clone&&(t.stop(`Starting new project scaffolding...`),this.reporter.step(`Cloning example ${G(e.clone.example)}...`),await pr(this.workspace,e.clone),t.start(`Scaffolding complete, finalizing...`));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 ${G(o.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 ${G(o.default.basename(t.path))}.`):this.reporter.info(`${G(o.default.basename(t.path))} already contains ArkEnv types.`);continue}if(!(t.action===`create`&&await this.workspace.exists(t.path))&&(await this.workspace.mkdir(o.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} ${G(o.default.basename(t.path))} for typesafe environment variables.`)}}if(t.stop(`Configuration scaffolded!`),e.install&&process.env.SKIP_INSTALL!==`true`){e.install.packageManager===`pnpm`&&await this.configurePnpmBuilds(e.install.cwd??e.cwd),this.reporter.step(`Installing dependencies with ${G(e.install.packageManager)}...`);let[t,n]=hr(e.install.packageManager,e.install.dependencies);await this.workspace.execute(t,n,e.install.cwd??e.cwd)}let n=!1;if(e.tsConfig){let t=await this.workspace.updateTsConfigToStrict(e.tsConfig.path);t.status===`updated`?(this.reporter.info(`Enforced strict: true in your ${G(t.file)}`),n=!0):t.status===`error`&&this.reporter.warn(`Could not automatically update ${G(t.file||`tsconfig.json`)}. Please ensure 'strict: true' is set manually.`)}let r=!1;if(e.bootstrap){if(e.bootstrap.framework===`vite`){let t=await this.workspace.findViteConfig(e.cwd);if(t){this.reporter.step(`Bootstrapping Vite plugin...`);let n=await this.workspace.bootstrapViteConfig(t,e.bootstrap.importPath||`./src/env`);n.success?n.updated&&this.reporter.info(`Updated ${G(o.default.basename(t))}`):(this.reporter.warn(`Could not automatically update ${G(o.default.basename(t))}: ${n.error}`),this.reporter.info(`Please add ${G(`@arkenv/vite-plugin`)} manually.`))}else this.reporter.info(`No Vite config found - please add ${G(`@arkenv/vite-plugin`)} to your Vite config manually.`)}else if(e.bootstrap.framework===`bun-fullstack`){let t=await this.workspace.findBunConfig(e.cwd),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`)}else if(e.bootstrap.framework===`nextjs`){if(!e.bootstrap.disableCodegen){this.reporter.step(`Generating Next.js environment bindings...`);let t=`import('@arkenv/nextjs/config').then(({ runCodegen }) => { const path = require('path'); const schemaPath = path.resolve(process.cwd(), '${e.metadata.displayPath}'); const outputPath = path.join(path.dirname(schemaPath), 'generated', 'env.gen.ts'); runCodegen(schemaPath, outputPath); }).catch(err => { console.error(err); process.exit(1); });`;try{await this.workspace.execute(`node`,[`-e`,t],e.cwd),this.reporter.info(`Generated ${G(`env.gen.ts`)} for Next.js`)}catch{this.reporter.warn(`Failed to automatically generate ${G(`env.gen.ts`)}. It will be generated when you start your dev server.`)}}if(e.bootstrap.wrapNextjsConfig!==!1){this.reporter.step(`Bootstrapping Next.js config...`);let t=await this.workspace.findNextjsConfig(e.cwd);if(t){let n=await this.workspace.bootstrapNextjsConfig(t,e.bootstrap.disableCodegen);n.success?n.updated?(this.reporter.info(`Updated ${G(o.default.basename(t))}`),r=!0):(this.reporter.info(`${G(o.default.basename(t))} already uses withArkEnv`),r=!0):this.reporter.warn(`Could not automatically update ${G(o.default.basename(t))}: ${n.error}`)}else this.reporter.info(`No Next.js config found. Please wrap your config with ${G(`withArkEnv`)} manually.`)}}else if(e.bootstrap.framework===`nuxt`){this.reporter.step(`Bootstrapping Nuxt config...`);let t=await this.workspace.findNuxtConfig(e.cwd);if(t){let e=await this.workspace.bootstrapNuxtConfig(t);e.success?(e.updated?this.reporter.info(`Updated ${G(o.default.basename(t))}`):this.reporter.info(`${G(o.default.basename(t))} already registers @arkenv/nuxt/module`),r=!0):this.reporter.warn(`Could not automatically update ${G(o.default.basename(t))}: ${e.error}`)}else this.reporter.info(`No Nuxt config found. Please register ${G(`@arkenv/nuxt/module`)} manually.`)}}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,e.cwd),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=gr(e,i,r);if(this.reporter.note(a.message,a.title),e.metadata.layout===`strict`){let t=o.default.resolve(e.cwd,e.metadata.displayPath);if(await this.workspace.exists(t)){let t=e.metadata.displayPath,n=o.default.basename(t,o.default.extname(t));this.reporter.warn(`Found existing single-file schema at ${G(t)}. You can delete it after updating your imports to point to your new ${G(`${n}/client`)} and ${G(`${n}/server`)}.`)}}this.reporter.finish(`${Wt} ArkEnv scaffolding complete. Happy coding!`,{path:e.metadata.displayPath,framework:e.metadata.framework,validator:e.metadata.validator,packageManager:e.metadata.packageManager,tsConfigUpdated:n,skillInstalled:i})}catch(e){throw t.stop(`Scaffolding failed.`),e}}async configurePnpmBuilds(e){let t=o.default.join(e,`package.json`);if(await this.workspace.exists(t))try{let e=await this.workspace.readFile(t),n=JSON.parse(e);n.pnpm=n.pnpm||{},n.pnpm.onlyBuiltDependencies=n.pnpm.onlyBuiltDependencies||[];for(let e of _r)n.pnpm.onlyBuiltDependencies.includes(e)||n.pnpm.onlyBuiltDependencies.push(e);await this.workspace.writeFile(t,JSON.stringify(n,null,2)+`
194
- `)}catch(e){this.reporter.warn(`Could not update package.json with pnpm whitelisting: ${e}`)}let n=o.default.join(e,`pnpm-workspace.yaml`),r=``;if(await this.workspace.exists(n))try{r=await this.workspace.readFile(n)}catch{}let i=this.updatePnpmWorkspaceYaml(r);try{await this.workspace.writeFile(n,i)}catch(e){this.reporter.warn(`Could not write pnpm-workspace.yaml: ${e}`)}}updatePnpmWorkspaceYaml(e){let t=(0,p.parseDocument)(e||``);t.has(`allowBuilds`)||t.set(`allowBuilds`,t.createNode({}));let n=t.get(`allowBuilds`);if((0,p.isMap)(n)||(t.set(`allowBuilds`,t.createNode({})),n=t.get(`allowBuilds`)),(0,p.isMap)(n))for(let e of _r)n.get(e)!==!0&&n.set(e,!0);return String(t)}};const yr={basic:{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"basic-js":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"with-bun":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"with-nextjs":{DATABASE_URL:`postgres://localhost:5432/mydb`,NEXT_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`},"with-nextjs-strict":{DATABASE_URL:`postgres://localhost:5432/mydb`,NEXT_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`},"with-nuxt":{DATABASE_URL:`postgres://localhost:5432/mydb`,NUXT_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`},"with-vite-react":{PORT:`3000`,VITE_MY_VAR:`hello`,VITE_MY_NUMBER:`42`,VITE_MY_BOOLEAN:`true`},"with-bun-react":{BUN_PUBLIC_API_URL:`https://api.example.com`,BUN_PUBLIC_DEBUG:`true`,NODE_ENV:`development`},"with-zod":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"with-valibot":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"with-standard-schema":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`}};function br(e,t){return yr[e]??t()}function xr(e){switch(e){case`pnpm`:return[`pnpm`,`dlx`];case`yarn`:return[`yarn`,`dlx`];case`bun`:return[`bunx`];default:return[`npx`]}}function Sr(e,t,n,r){let i=Y(r??`none`,n);for(let a of i)n&&a.startsWith(n)?e.clientFields.push(`\t\t${t.formatCodegenField(a,`client`,n,r)}`):e.serverFields.push(`\t\t${t.formatCodegenField(a,`server`,n,r)}`)}function Cr(e){let t=[];for(let n of e){let e=n.trim().match(/^([a-zA-Z0-9_]+)\s*:/);e&&t.push(e[1])}return t}function wr(e,t,n,r=[]){let i=[],a=new Set,o=e=>{a.has(e)||(a.add(e),i.push(`\t\t${e}: process.env.${e},`))};if(e&&e.length>0){for(let n of e)(n.startsWith(t)||n===`NODE_ENV`||r.includes(n))&&o(n);return i}o(`${t}API_URL`),o(`NODE_ENV`);for(let e of Cr(n))o(e);for(let e of r)o(e);return i}function Tr(e){let{envKeys:t,dialect:n,config:r,importPath:i,disableCodegen:a,layout:o,hostPreset:s}=e,{clientPrefix:c}=r,l=[],u=[],d=[];if(t&&t.length>0)for(let e of t)e.startsWith(c)?u.push(`\t\t${n.formatCodegenField(e,`client`,c,s)}`):e===`NODE_ENV`?d.push(`\t\t${n.formatCodegenField(e,`shared`,c,s)}`):l.push(`\t\t${n.formatCodegenField(e,`server`,c,s)}`);else{let e=n.getDefaultCodegenFields(c);l.push(...e.serverFields),u.push(...e.clientFields),d.push(...e.sharedFields),Sr({serverFields:l,clientFields:u},n,c,s)}return o!==`simple`&&o!==`strict`?Er({serverFields:l,clientFields:u,sharedFields:d,envKeys:t,dialect:n,config:r,nextjsImportPath:i,disableCodegen:a}):Dr({serverFields:l,clientFields:u,sharedFields:d,envKeys:t,dialect:n,config:r,nextjsImportPath:i,disableCodegen:a,layout:o})}function Er(e){let{serverFields:t,clientFields:n,sharedFields:r,envKeys:i,dialect:a,config:o,nextjsImportPath:s,disableCodegen:c}=e,{clientPrefix:l,packageName:u,displayName:d}=o,f=o.id,p=a.extraImport,m=[...t,...n,...r].map(e=>e.replace(/^\t\t/,` `)),h=[];for(let e of r){let t=e.trim().match(/^([a-zA-Z0-9_]+)\s*:/);if(t){let e=t[1];e!==`NODE_ENV`&&h.push(e)}}let g=[];if(h.length>0&&g.push(`\texposeToClient: [${h.map(e=>`"${e}"`).join(`, `)}]`),c&&f===`nextjs`){let e=wr(i,l,n,h);g.push(`\truntimeEnv: {\n${e.join(`
195
- `)}\n\t}`)}let _=g.length>0?`, {\n${g.join(`,
196
- `)}\n}`:``;return`${[`import arkenv from "${f===`nuxt`||c?u:s||`./generated/env.gen`}";`,...p?[p]:[]].join(`
172
+ `,e.metadata.layout===`strict`?a+=`Import and use: ${W(`import { env } from "${e.metadata.importPath}/client"`)} (client) or ${W(`import { env } from "${e.metadata.importPath}/server"`)} (server)\n`:a+=`Import and use: ${W(`import { env } from "${e.metadata.importPath}"`)}\n`),{message:a,title:`Next steps`}}let r=e.skill?.dlxCommand.join(` `)||`npx`,i=e.skill?.packageName||`yamcodes/arkenv`,a=``,o=1,s=e.metadata.displayPath;if(e.metadata.layout===`strict`){let e=s.lastIndexOf(`.`),t=e===-1?s:s.slice(0,e);s=`${t}/client.ts, ${t}/server.ts, and ${t}/internal/shared.ts`}a+=`${o++}. Check ${W(s)} and refine your environment schema.\n`;let c=e.metadata.framework===`nextjs`&&!e.metadata.disableCodegen&&!n;return e.metadata.framework===`nextjs`?e.metadata.layout===`strict`?(e.metadata.disableCodegen||c&&(a+=`${o++}. Wrap your Next.js config with ${W(`withArkEnv`)} inside ${W(`next.config.ts`)}:\n`,a+=` ${W(`import { withArkEnv } from "@arkenv/nextjs/config";`)}\n`,a+=` ${W(`export default withArkEnv(nextConfig);`)}\n`),a+=`${o++}. Import and use: ${W(`import { env } from "${e.metadata.importPath}/client"`)} (client) or ${W(`import { env } from "${e.metadata.importPath}/server"`)} (server)\n`):(e.metadata.disableCodegen||c&&(a+=`${o++}. Wrap your Next.js config with ${W(`withArkEnv`)} inside ${W(`next.config.ts`)}:\n`,a+=` ${W(`import { withArkEnv } from "@arkenv/nextjs/config";`)}\n`,a+=` ${W(`export default withArkEnv(nextConfig);`)}\n`),a+=`${o++}. Import and use: ${W(`import { env } from "${e.metadata.importPath}"`)}\n`):e.metadata.layout===`strict`?a+=`${o++}. Import and use: ${W(`import { env } from "${e.metadata.importPath}/client"`)} (client) or ${W(`import { env } from "${e.metadata.importPath}/server"`)} (server)\n`:a+=`${o++}. Import and use: ${W(`import { env } from "${e.metadata.importPath}"`)}\n`,a+=`${o++}. (Recommended) Install the AI skill: ${W(`${r} skills add ${i}`)}\n`,a+=` Then run ${W(`/arkenv`)} inside your AI assistant to finish.`,{message:a,title:`Next steps`}}const Nr=[`esbuild`];var Pr=class{constructor(e,t){this.workspace=e,this.reporter=t}async execute(e){let t=this.reporter.spinner();t.start(`Scaffolding ArkEnv configuration...`);try{e.clone&&(t.stop(`Starting new project scaffolding...`),this.reporter.step(`Cloning example ${W(e.clone.example)}...`),await kr(this.workspace,e.clone),t.start(`Scaffolding complete, finalizing...`));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 ${W(s.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 ${W(s.default.basename(t.path))}.`):this.reporter.info(`${W(s.default.basename(t.path))} already contains ArkEnv types.`);continue}if(!(t.action===`create`&&await this.workspace.exists(t.path))&&(await this.workspace.mkdir(s.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} ${W(s.default.basename(t.path))} for typesafe environment variables.`)}}if(t.stop(`Configuration scaffolded!`),await this.configurePackageJsonArkenv(e.install?.cwd??e.cwd,e.metadata),e.install&&process.env.SKIP_INSTALL!==`true`){e.install.packageManager===`pnpm`&&await this.configurePnpmBuilds(e.install.cwd??e.cwd),this.reporter.step(`Installing dependencies with ${W(e.install.packageManager)}...`);let[t,n]=jr(e.install.packageManager,e.install.dependencies);await this.workspace.execute(t,n,e.install.cwd??e.cwd)}let n=!1;if(e.tsConfig){let t=await this.workspace.updateTsConfigToStrict(e.tsConfig.path);t.status===`updated`?(this.reporter.info(`Enforced strict: true in your ${W(t.file)}`),n=!0):t.status===`error`&&this.reporter.warn(`Could not automatically update ${W(t.file||`tsconfig.json`)}. Please ensure 'strict: true' is set manually.`)}let r=!1;if(e.bootstrap){if(e.bootstrap.framework===`vite`){let t=await this.workspace.findViteConfig(e.cwd);if(t){this.reporter.step(`Bootstrapping Vite plugin...`);let n=await this.workspace.bootstrapViteConfig(t,e.bootstrap.importPath||`./src/env`);n.success?n.updated&&this.reporter.info(`Updated ${W(s.default.basename(t))}`):(this.reporter.warn(`Could not automatically update ${W(s.default.basename(t))}: ${n.error}`),this.reporter.info(`Please add ${W(`@arkenv/vite-plugin`)} manually.`))}else this.reporter.info(`No Vite config found - please add ${W(`@arkenv/vite-plugin`)} to your Vite config manually.`)}else if(e.bootstrap.framework===`bun-fullstack`){let t=await this.workspace.findBunConfig(e.cwd),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`)}else if(e.bootstrap.framework===`nextjs`){if(!e.bootstrap.disableCodegen){this.reporter.step(`Generating Next.js environment bindings...`);let t=`import('@arkenv/nextjs/config').then(({ runCodegen }) => { const path = require('path'); const schemaPath = path.resolve(process.cwd(), '${e.metadata.displayPath}'); const outputPath = path.join(path.dirname(schemaPath), 'generated', 'env.gen.ts'); runCodegen(schemaPath, outputPath); }).catch(err => { console.error(err); process.exit(1); });`;try{await this.workspace.execute(`node`,[`-e`,t],e.cwd),this.reporter.info(`Generated ${W(`env.gen.ts`)} for Next.js`)}catch{this.reporter.warn(`Failed to automatically generate ${W(`env.gen.ts`)}. It will be generated when you start your dev server.`)}}if(e.bootstrap.wrapNextjsConfig!==!1){this.reporter.step(`Bootstrapping Next.js config...`);let t=await this.workspace.findNextjsConfig(e.cwd);if(t){let n=await this.workspace.bootstrapNextjsConfig(t,e.bootstrap.disableCodegen);n.success?n.updated?(this.reporter.info(`Updated ${W(s.default.basename(t))}`),r=!0):(this.reporter.info(`${W(s.default.basename(t))} already uses withArkEnv`),r=!0):this.reporter.warn(`Could not automatically update ${W(s.default.basename(t))}: ${n.error}`)}else this.reporter.info(`No Next.js config found. Please wrap your config with ${W(`withArkEnv`)} manually.`)}}else if(e.bootstrap.framework===`nuxt`){this.reporter.step(`Bootstrapping Nuxt config...`);let t=await this.workspace.findNuxtConfig(e.cwd);if(t){let e=await this.workspace.bootstrapNuxtConfig(t);e.success?(e.updated?this.reporter.info(`Updated ${W(s.default.basename(t))}`):this.reporter.info(`${W(s.default.basename(t))} already registers @arkenv/nuxt/module`),r=!0):this.reporter.warn(`Could not automatically update ${W(s.default.basename(t))}: ${e.error}`)}else this.reporter.info(`No Nuxt config found. Please register ${W(`@arkenv/nuxt/module`)} manually.`)}}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,e.cwd),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=Mr(e,i,r);if(this.reporter.note(a.message,a.title),e.metadata.layout===`strict`){let t=s.default.resolve(e.cwd,e.metadata.displayPath);if(await this.workspace.exists(t)){let t=e.metadata.displayPath,n=s.default.basename(t,s.default.extname(t));this.reporter.warn(`Found existing single-file schema at ${W(t)}. You can delete it after updating your imports to point to your new ${W(`${n}/client`)} and ${W(`${n}/server`)}.`)}}this.reporter.finish(`${on} ArkEnv scaffolding complete. Happy coding!`,{path:e.metadata.displayPath,framework:e.metadata.framework,validator:e.metadata.validator,packageManager:e.metadata.packageManager,tsConfigUpdated:n,skillInstalled:i})}catch(e){throw t.stop(`Scaffolding failed.`),e}}async configurePnpmBuilds(e){let t=s.default.join(e,`package.json`);if(await this.workspace.exists(t))try{let e=await this.workspace.readFile(t),n=JSON.parse(e);n.pnpm=n.pnpm||{},n.pnpm.onlyBuiltDependencies=n.pnpm.onlyBuiltDependencies||[];for(let e of Nr)n.pnpm.onlyBuiltDependencies.includes(e)||n.pnpm.onlyBuiltDependencies.push(e);await this.workspace.writeFile(t,JSON.stringify(n,null,2)+`
173
+ `)}catch(e){this.reporter.warn(`Could not update package.json with pnpm whitelisting: ${e}`)}let n=s.default.join(e,`pnpm-workspace.yaml`),r=``;if(await this.workspace.exists(n))try{r=await this.workspace.readFile(n)}catch{}let i=this.updatePnpmWorkspaceYaml(r);try{await this.workspace.writeFile(n,i)}catch(e){this.reporter.warn(`Could not write pnpm-workspace.yaml: ${e}`)}}updatePnpmWorkspaceYaml(e){let t=(0,h.parseDocument)(e||``);t.has(`allowBuilds`)||t.set(`allowBuilds`,t.createNode({}));let n=t.get(`allowBuilds`);if((0,h.isMap)(n)||(t.set(`allowBuilds`,t.createNode({})),n=t.get(`allowBuilds`)),(0,h.isMap)(n))for(let e of Nr)n.get(e)!==!0&&n.set(e,!0);return String(t)}async configurePackageJsonArkenv(e,t){let n=s.default.join(e,`package.json`);if(await this.workspace.exists(n))try{let e=await this.workspace.readFile(n),r=JSON.parse(e);r.arkenv={schema:t.displayPath,layout:t.layout===`strict`?`strict`:`flat`},await this.workspace.writeFile(n,JSON.stringify(r,null,2)+`
174
+ `)}catch(e){this.reporter.warn(`Could not update package.json with arkenv schema entry: ${e}`)}}};const Fr={basic:{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"basic-js":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"with-bun":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"with-nextjs":{DATABASE_URL:`postgres://localhost:5432/mydb`,NEXT_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`},"with-nextjs-strict":{DATABASE_URL:`postgres://localhost:5432/mydb`,NEXT_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`},"with-nextjs-zod":{DATABASE_URL:`postgres://localhost:5432/mydb`,NEXT_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`},"with-nuxt":{DATABASE_URL:`postgres://localhost:5432/mydb`,NUXT_PUBLIC_API_URL:`https://api.example.com`,NODE_ENV:`development`},"with-vite-react":{PORT:`3000`,VITE_MY_VAR:`hello`,VITE_MY_NUMBER:`42`,VITE_MY_BOOLEAN:`true`},"with-vite-react-zod":{PORT:`3000`,VITE_MY_VAR:`hello`,VITE_MY_NUMBER:`42`,VITE_MY_BOOLEAN:`true`},"with-bun-react":{BUN_PUBLIC_API_URL:`https://api.example.com`,BUN_PUBLIC_DEBUG:`true`,NODE_ENV:`development`},"with-zod":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"with-valibot":{HOST:`localhost`,PORT:`3000`,NODE_ENV:`development`},"mix-and-match":{DATABASE_URL:`https://postgres.example.com/db`,API_KEY:`12345678901234567890123456789012`,NODE_ENV:`development`,PORT:`3000`,DEBUG:`false`}};function Ir(e,t){return Fr[e]??t()}function Lr(e){switch(e){case`pnpm`:return[`pnpm`,`dlx`];case`yarn`:return[`yarn`,`dlx`];case`bun`:return[`bunx`];default:return[`npx`]}}function Rr(e,t,n,r){if(!r||r===`none`)return;let i=J(r,n);for(let a of i)n&&a.startsWith(n)?e.clientFields.push(`\t\t${t.formatCodegenField(a,`client`,n,r)}`):e.serverFields.push(`\t\t${t.formatCodegenField(a,`server`,n,r)}`)}function zr(e){let t=[];for(let n of e){let e=n.trim().match(/^([a-zA-Z0-9_]+)\s*:/);e&&t.push(e[1])}return t}function Br(e,t,n,r=[]){let i=[],a=new Set,o=e=>{a.has(e)||(a.add(e),i.push(`\t\t${e}: process.env.${e},`))};if(e&&e.length>0){for(let n of e)(n.startsWith(t)||n===`NODE_ENV`||r.includes(n))&&o(n);return i}o(`${t}API_URL`),o(`NODE_ENV`);for(let e of zr(n))o(e);for(let e of r)o(e);return i}function Vr(e){let{envKeys:t,dialect:n,config:r,importPath:i,disableCodegen:a,layout:o,hostPreset:s}=e,{clientPrefix:c}=r,l=[],u=[],d=[];if(t&&t.length>0)for(let e of t)e.startsWith(c)?u.push(`\t\t${n.formatCodegenField(e,`client`,c,s)}`):e===`NODE_ENV`?d.push(`\t\t${n.formatCodegenField(e,`shared`,c,s)}`):l.push(`\t\t${n.formatCodegenField(e,`server`,c,s)}`);else{let e=n.getDefaultCodegenFields(c);l.push(...e.serverFields),u.push(...e.clientFields),d.push(...e.sharedFields),Rr({serverFields:l,clientFields:u},n,c,s)}return o!==`simple`&&o!==`strict`?Hr({serverFields:l,clientFields:u,sharedFields:d,envKeys:t,dialect:n,config:r,nextjsImportPath:i,disableCodegen:a,hostPreset:s}):Ur({serverFields:l,clientFields:u,sharedFields:d,envKeys:t,dialect:n,config:r,nextjsImportPath:i,disableCodegen:a,layout:o,hostPreset:s})}function Hr(e){let{serverFields:t,clientFields:n,sharedFields:r,envKeys:i,dialect:a,config:o,nextjsImportPath:s,disableCodegen:c,hostPreset:l}=e,{clientPrefix:u,packageName:d,displayName:f}=o,p=o.id,m=a.extraImport,h=J(l??`none`,u),g;if(l&&l!==`none`&&h.length>0){let e=[...t,...n,...r].filter(e=>{let t=e.trim().match(/^([a-zA-Z0-9_]+)\s*:/)?.[1];return t&&!h.includes(t)}).map(e=>e.replace(/^\t\t/,` `)),i=[];for(let e of h){let t=u&&e.startsWith(u)?`client`:e===`NODE_ENV`?`shared`:`server`;i.push(`\t${a.formatCodegenField(e,t,u,l)}`)}g=[...e,...e.length>0?[``]:[],`\t${An(l)}`,...i,`\t${jn(l)}`]}else g=[...t,...n,...r].map(e=>e.replace(/^\t\t/,` `));let _=[];for(let e of r){let t=e.trim().match(/^([a-zA-Z0-9_]+)\s*:/);if(t){let e=t[1];e!==`NODE_ENV`&&_.push(e)}}let v=[];if(_.length>0&&v.push(`\texposeToClient: [${_.map(e=>`"${e}"`).join(`, `)}]`),c&&p===`nextjs`){let e=Br(i,u,n,_);v.push(`\truntimeEnv: {\n${e.join(`
175
+ `)}\n\t}`)}let y=v.length>0?`, {\n${v.join(`,
176
+ `)}\n}`:``;return`${[`import arkenv from "${p===`nuxt`||c?d:s||`./generated/env.gen`}";`,...m?[m]:[]].join(`
197
177
  `)}
198
178
 
199
179
  /**
200
180
  * Environment variable schema.
201
- * ${f===`nuxt`?`In ${d}, use \`${u}\` to validate variables at build-time and runtime.`:`In ${d}, use the generated \`arkenv\` from \`env.gen.ts\` to validate variables.`}
181
+ * ${p===`nuxt`?`In ${f}, use \`${d}\` to validate variables at build-time and runtime.`:`In ${f}, use the generated \`arkenv\` from \`env.gen.ts\` to validate variables.`}
202
182
  * Enforces client/server separation and prevents secret leaks.
203
183
  */
204
184
  export const env = arkenv({
205
- ${m.join(`
185
+ ${g.join(`
206
186
  `)}
207
- }${_});
208
- `}function Dr(e){let{serverFields:t,clientFields:n,sharedFields:r,envKeys:i,dialect:a,config:o,nextjsImportPath:s,disableCodegen:c,layout:l}=e,{clientPrefix:u,packageName:d,displayName:f}=o,p=o.id,m=a.extraImport,h=[];if(t.length>0&&h.push(`\tserver: {\n${t.join(`
187
+ }${y});
188
+ `}function Ur(e){let{serverFields:t,clientFields:n,sharedFields:r,envKeys:i,dialect:a,config:o,nextjsImportPath:s,disableCodegen:c,layout:l}=e,{clientPrefix:u,packageName:d,displayName:f}=o,p=o.id,m=a.extraImport,h=[];if(t.length>0&&h.push(`\tserver: {\n${t.join(`
209
189
  `)}\n\t}`),n.length>0&&h.push(`\tclient: {\n${n.join(`
210
190
  `)}\n\t}`),r.length>0&&h.push(`\tshared: {\n${r.join(`
211
- `)}\n\t}`),c||p===`nuxt`&&l===`simple`){let e=wr(i,u,n);return p!==`nuxt`&&h.push(`\truntimeEnv: {\n${e.join(`
191
+ `)}\n\t}`),c||p===`nuxt`&&l===`simple`){let e=Br(i,u,n);return p!==`nuxt`&&h.push(`\truntimeEnv: {\n${e.join(`
212
192
  `)}\n\t}`),`${[`import arkenv from "${d}";`,...m?[m]:[]].join(`
213
193
  `)}
214
194
 
@@ -233,23 +213,12 @@ export const env = arkenv({
233
213
  ${h.join(`,
234
214
  `)},
235
215
  });
236
- `}function Or(e,t,n){return c.default`
237
- ${e.pluginEnvImports.split(`
238
- `).map(e=>`\t${e}`).join(`
239
- `)}
240
-
241
- /**
242
- * ${t===`vite`?"Environment variable schema.\n * In Vite, use `@arkenv/vite-plugin` to validate these at build-time\n * and provide typesafety for `import.meta.env` on the client-side.":"Environment variable schema.\n * In Bun Fullstack, use `@arkenv/bun-plugin` to validate these at build-time\n * and provide typesafety for `process.env` on the client-side."}
243
- */
244
- export const Env = type({
245
- ${n}
246
- });
247
- `}function kr(e,t,n){let r=Y(n.hostPreset??`none`,n.clientPrefix),i=qt(n.framework);if(i){let a=t.length>0?Array.from(new Set([...t,...r])):void 0;return`${Tr({...a===void 0?{}:{envKeys:a},dialect:e,config:i,...n.nextjsImportPath!==void 0&&{importPath:n.nextjsImportPath},disableCodegen:n.disableCodegen,...n.layout!==void 0&&{layout:n.layout},...n.hostPreset!==void 0&&{hostPreset:n.hostPreset}})}\n`}let a;if(t.length>0){let i=Array.from(new Set([...t,...r]));a=e.formatSimpleSchemaFields(i,n.clientPrefix,n.hostPreset)}else a=r.length>0?`${e.defaultSimpleSchemaFields}\n${e.formatSimpleSchemaFields(r,n.clientPrefix,n.hostPreset)}`:e.defaultSimpleSchemaFields;return n.framework===`vite`||n.framework===`bun-fullstack`?`${Or(e,n.framework,a)}\n`:`${e.assembleVanilla(a)}\n`}function Ar(e,t=` `){return e.length===0?`{}`:`{\n${t}${e.map(e=>e.trim()).join(`\n${t}`)}\n${t.slice(1)}}`}function jr(e,t,n){let r=[],i=[],a=[],o=[];for(let s of e)s.startsWith(t.clientPrefix)?(i.push(n(s,`client`,t)),o.push(`${s}: process.env.${s},`)):s===`NODE_ENV`?(a.push(n(s,`shared`,t)),o.push(`${s}: process.env.${s},`)):r.push(n(s,`server`,t));return{serverFields:r,clientFields:i,sharedFields:a,runtimeEnvFields:o}}function Mr(e,t){return{shared:`${e.shared}\n`,client:`${Fr(t)?e.clientNoCodegen:e.clientCodegen}\n`,server:`${e.server}\n`}}function Nr(e){return e.packageName??qt(e.framework)?.packageName??`@arkenv/nextjs`}function Pr(e,t){return t.framework===`nuxt`?``:`,\n\t\truntimeEnv: {\n\t\t\t${e.map(e=>e.trim()).join(`
248
- `)}\n\t\t}`}function Fr(e){return e.disableCodegen||e.framework===`nuxt`}function Ir(e){return Fr(e)?`${Nr(e)}/client`:e.nextjsImportPath||`./generated/env.gen`}function Lr(e,t,n){let r=Y(n.hostPreset??`none`,n.clientPrefix);for(let i of r)n.clientPrefix&&i.startsWith(n.clientPrefix)?(e.clientFields.push(t.formatStrictField(i,`client`,n.clientPrefix,n.hostPreset)),e.runtimeEnvFields.push(`${i}: process.env.${i},`)):e.serverFields.push(t.formatStrictField(i,`server`,n.clientPrefix,n.hostPreset))}function Rr(e,t,n){let r=Nr(n),i=Ir(n),a=Y(n.hostPreset??`none`,n.clientPrefix),{serverFields:o,clientFields:s,sharedFields:c,runtimeEnvFields:l}=t.length>0?jr(Array.from(new Set([...t,...a])),n,(t,r)=>e.formatStrictField(t,r,n.clientPrefix,n.hostPreset)):(()=>{let t=e.getDefaultStrictFields(n.clientPrefix);return Lr(t,e,n),t})(),u=Pr(l,n),d=Ar(c,` `),f=Ar(s,` `),p=Ar(o,` `),m=e.strictExtraImports,h=`import arkenv from "${i}";
216
+ `}function Wr(e,t,n){let r=J(n.hostPreset??`none`,n.clientPrefix),i=sn(n.framework);if(i){let a=t.length>0?Array.from(new Set([...t,...r])):void 0;return`${Vr({...a===void 0?{}:{envKeys:a},dialect:e,config:i,...n.nextjsImportPath!==void 0&&{importPath:n.nextjsImportPath},disableCodegen:n.disableCodegen,...n.layout!==void 0&&{layout:n.layout},...n.hostPreset!==void 0&&{hostPreset:n.hostPreset}})}\n`}let a;if(n.hostPreset&&n.hostPreset!==`none`&&r.length>0){let i=`\t\t${An(n.hostPreset)}`,o=`\t\t${jn(n.hostPreset)}`,s=e.formatSimpleSchemaFields(r,n.clientPrefix,n.hostPreset),c=t.filter(e=>!r.includes(e));a=c.length>0?`${e.formatSimpleSchemaFields(c,n.clientPrefix,void 0)}\n\n${i}\n${s}\n${o}`:`${e.defaultSimpleSchemaFields}\n\n${i}\n${s}\n${o}`}else a=t.length>0?e.formatSimpleSchemaFields(t,n.clientPrefix,n.hostPreset):e.defaultSimpleSchemaFields;return`${e.assembleVanilla(a)}\n`}function Gr(e,t=` `){return e.length===0?`{}`:`{\n${t}${e.map(e=>e.trim()).join(`\n${t}`)}\n${t.slice(1)}}`}function Kr(e,t,n){let r=[],i=[],a=[],o=[];for(let s of e)s.startsWith(t.clientPrefix)?(i.push(n(s,`client`,t)),o.push(`${s}: process.env.${s},`)):s===`NODE_ENV`?(a.push(n(s,`shared`,t)),o.push(`${s}: process.env.${s},`)):r.push(n(s,`server`,t));return{serverFields:r,clientFields:i,sharedFields:a,runtimeEnvFields:o}}function qr(e,t){return{shared:`${e.shared}\n`,client:`${Xr(t)?e.clientNoCodegen:e.clientCodegen}\n`,server:`${e.server}\n`}}function Jr(e){return e.packageName??sn(e.framework)?.packageName??`@arkenv/nextjs`}function Yr(e,t){return t.framework===`nuxt`?``:`,\n\t\truntimeEnv: {\n\t\t\t${e.map(e=>e.trim()).join(`
217
+ `)}\n\t\t}`}function Xr(e){return e.disableCodegen||e.framework===`nuxt`}function Zr(e){return Xr(e)?`${Jr(e)}/client`:e.nextjsImportPath||`./generated/env.gen`}function Qr(e,t,n){if(!n.hostPreset||n.hostPreset===`none`)return;let r=J(n.hostPreset,n.clientPrefix),i=[],a=[];for(let o of r)n.clientPrefix&&o.startsWith(n.clientPrefix)?(i.push(t.formatStrictField(o,`client`,n.clientPrefix,n.hostPreset)),e.runtimeEnvFields.push(`${o}: process.env.${o},`)):a.push(t.formatStrictField(o,`server`,n.clientPrefix,n.hostPreset));i.length>0&&e.clientFields.push(An(`${n.hostPreset}:client`),...i,jn(`${n.hostPreset}:client`)),a.length>0&&e.serverFields.push(An(`${n.hostPreset}:server`),...a,jn(`${n.hostPreset}:server`))}function $r(e,t,n){let r=Jr(n),i=Zr(n),a=J(n.hostPreset??`none`,n.clientPrefix),{serverFields:o,clientFields:s,sharedFields:c,runtimeEnvFields:l}=t.length>0?Kr(Array.from(new Set([...t,...a])),n,(t,r)=>e.formatStrictField(t,r,n.clientPrefix,n.hostPreset)):(()=>{let t=e.getDefaultStrictFields(n.clientPrefix);return Qr(t,e,n),t})(),u=Yr(l,n),d=Gr(c,` `),f=Gr(s,` `),p=Gr(o,` `),m=e.strictExtraImports,h=new Set([`nuxt`,`nextjs`]).has(n.framework),g=`import arkenv from "${i}";
249
218
  ${m}
250
219
  export const env = arkenv(
251
220
  ${f},
252
- );`,g=`import arkenv from "${i}";
221
+ );`,_=`import arkenv from "${i}";
253
222
  ${m}import { SharedSchema } from "./internal/shared";
254
223
 
255
224
  export const env = arkenv(
@@ -257,7 +226,7 @@ export const env = arkenv(
257
226
  {
258
227
  extends: [SharedSchema],
259
228
  },
260
- );`,_=`import arkenv from "${i}";
229
+ );`,v=`import arkenv from "${i}";
261
230
  ${m}import { SharedSchema } from "./internal/shared";
262
231
 
263
232
  export const env = arkenv(
@@ -265,10 +234,10 @@ export const env = arkenv(
265
234
  {
266
235
  extends: [SharedSchema]${u}
267
236
  },
268
- );`,v=n.framework===`nuxt`?"/**\n * @internal 🛑 INTERNAL SCHEMA ONLY.\n * Do not import this directly. Import `env` from `./client` or `./server` instead.\n * Automatically picked up by `@arkenv/nuxt/client` when `extends` is omitted;\n * `@arkenv/nuxt/server` includes it through the composed client env.\n */":"/**\n * @internal 🛑 INTERNAL SCHEMA ONLY.\n * Do not import this directly. Import `env` from `./client` or `./server` instead.\n */";return Mr({shared:`${e.sharedImports}
237
+ );`,y=n.framework===`nuxt`?"/**\n * @internal 🛑 INTERNAL SCHEMA ONLY.\n * Do not import this directly. Import `env` from `./client` or `./server` instead.\n * Automatically picked up by `@arkenv/nuxt/client` when `extends` is omitted;\n * `@arkenv/nuxt/server` includes it through the composed client env.\n */":"/**\n * @internal 🛑 INTERNAL SCHEMA ONLY.\n * Do not import this directly. Import `env` from `./client` or `./server` instead.\n */";return qr({shared:`${e.sharedImports}
269
238
 
270
- ${v}
271
- export const SharedSchema = ${e.wrapSharedSchema(d)};`,clientCodegen:n.framework===`nuxt`?h:g,clientNoCodegen:n.framework===`nuxt`?h:_,server:n.framework===`nuxt`?`import arkenv from "${r}/server";
239
+ ${y}
240
+ export const SharedSchema = ${e.wrapSharedSchema(d)};`,clientCodegen:n.framework===`nuxt`?g:_,clientNoCodegen:n.framework===`nuxt`?g:v,server:h?`import arkenv from "${r}/server";
272
241
  ${m}
273
242
  export const env = arkenv(
274
243
  ${p},
@@ -280,15 +249,14 @@ export const env = arkenv(
280
249
  {
281
250
  extends: [clientEnv],
282
251
  },
283
- );`},n)}function zr(e){return{formatField(t,n,r){return e.formatStrictField(t,n,r.clientPrefix,r.hostPreset)},getSimpleTemplate(t,n){return kr(e,t,n)},getStrictTemplates(t,n){return Rr(e,t,n)}}}const Br={arktype:zr(Sn.arktype),zod:zr(Sn.zod),valibot:zr(Sn.valibot)};function Vr(e){return e.mode===`new`?Yr(e):Xr(e)}function Hr(e){let t=e.split(/\r?\n/),n=[],r=null;for(let e of t){let t=e.replace(/\\"/g,``).replace(/\\'/g,``);if(r){(t.match(new RegExp(r,`g`))||[]).length%2!=0&&(r=null);continue}let i=e.trim();if(!i||i.startsWith(`#`)){n.push(e);continue}let a=e.match(/^(\s*(?:export\s+)?)([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(a){let e=a[1],t=a[2],i=a[3].trim();n.push(`${e}${t}=`);let o=i.replace(/\\"/g,``).replace(/\\'/g,``);i.startsWith(`"`)?(o.match(/"/g)||[]).length%2!=0&&(r=`"`):i.startsWith(`'`)&&(o.match(/'/g)||[]).length%2!=0&&(r=`'`)}else n.push(e)}return n.join(`
284
- `)}function Ur(e,t){return e.some(e=>{let n=e.indexOf(`#`),r=(n===-1?e:e.slice(0,n)).trim();if(!r)return!1;if(r===t||r===`/${t}`)return!0;if(r.includes(`*`)){let e=`^${r.replace(/\./g,`\\.`).replace(/\*/g,`.*`).replace(/^\//,`/?`)}$`;try{let n=new RegExp(e);return n.test(t)||n.test(`/${t}`)}catch{return!1}}return!1})}function Wr(e){return Object.entries(e).map(([e,t])=>`${e}=${t}`).join(`
252
+ );`},n)}function ei(e){return{formatField(t,n,r){return e.formatStrictField(t,n,r.clientPrefix,r.hostPreset)},getSimpleTemplate(t,n){return Wr(e,t,n)},getStrictTemplates(t,n){return $r(e,t,n)}}}const ti={arktype:ei(In.arktype),zod:ei(In.zod),valibot:ei(In.valibot)};function ni(e){return e.mode===`new`?li(e):ui(e)}function ri(e,t){return e.some(e=>{let n=e.indexOf(`#`),r=(n===-1?e:e.slice(0,n)).trim();if(!r)return!1;if(r===t||r===`/${t}`)return!0;if(r.includes(`*`)){let e=`^${r.replace(/\./g,`\\.`).replace(/\*/g,`.*`).replace(/^\//,`/?`)}$`;try{let n=new RegExp(e);return n.test(t)||n.test(`/${t}`)}catch{return!1}}return!1})}function ii(e){return Object.entries(e).map(([e,t])=>`${e}=${t}`).join(`
285
253
  `)+`
286
- `}function Gr(e,t){let{cwd:n,options:r,existingFiles:i}=e,a=fn[r.framework],s=o.default.join(n,`.env`),c=o.default.join(n,`.env.example`),l=i.includes(s),u=i.includes(c),d=_n(r.envKeys,r.hostPreset,a.clientPrefix);if(!l){let e=r.envExampleContent===void 0?Wr(a.getEnvDefaults(d)):r.envExampleContent;t.files.push({path:s,content:e,action:`create`,label:`local environment variables`})}if(!u){let e=r.envContent===void 0?Wr(a.getEnvDefaults(d)):Hr(r.envContent);t.files.push({path:c,content:e,action:`create`,label:`environment variables template`})}}function Kr(e,t){let{cwd:n,options:r,existingFiles:i}=e,a=o.default.join(n,`.gitignore`),s=i.includes(a);if(s&&r.gitignoreContent!==void 0){let e=r.gitignoreContent.split(/\r?\n/),n=Ur(e,`.env`),i=Ur(e,`.env.local`);if(!n||!i){let e=`
254
+ `}function ai(e,t){let{cwd:n,options:r,existingFiles:i}=e,a=wn[r.framework],o=s.default.join(n,`.env`),c=s.default.join(n,`.env.example`),l=i.includes(o),u=i.includes(c),d=kn(r.envKeys,r.hostPreset,a.clientPrefix);if(!l){let e=r.envExampleContent===void 0?ii(a.getEnvDefaults(d)):r.envExampleContent;t.files.push({path:o,content:e,action:`create`,label:`local environment variables`})}u||t.files.push({path:c,content:ii(a.getEnvDefaults(d)),action:`create`,label:`environment variables template`})}function oi(e,t){let{cwd:n,options:r,existingFiles:i}=e,a=s.default.join(n,`.gitignore`),o=i.includes(a);if(o&&r.gitignoreContent!==void 0){let e=r.gitignoreContent.split(/\r?\n/),n=ri(e,`.env`),i=ri(e,`.env.local`);if(!n||!i){let e=`
287
255
  # Environment variables
288
256
  `;n||(e+=`.env
289
257
  `),i||(e+=`.env.local
290
258
  `);let o=r.gitignoreContent.endsWith(`
291
- `)?`${r.gitignoreContent}${e.trim()}\n`:`${r.gitignoreContent}\n${e.trim()}\n`;t.files.push({path:a,content:o,action:`overwrite`,label:`.gitignore update`})}}else s||t.files.push({path:a,content:`# Environment variables
259
+ `)?`${r.gitignoreContent}${e.trim()}\n`:`${r.gitignoreContent}\n${e.trim()}\n`;t.files.push({path:a,content:o,action:`overwrite`,label:`.gitignore update`})}}else o||t.files.push({path:a,content:`# Environment variables
292
260
  .env
293
261
  .env.local
294
- `,action:`create`,label:`.gitignore file`})}function qr(e){let{mode:n,options:r,packageManager:i}=e,a=r.name&&r.name!==`.`?o.default.basename(r.name):void 0;return(0,t.shake)({displayPath:``,framework:r.framework,validator:r.validator,packageManager:i,importPath:``,mode:n,example:r.example,name:a,layout:r.layout,skillDetected:r.skillDetected,disableCodegen:r.disableCodegen})}function Jr(e,t){e.options.installSkill&&(t.skill={dlxCommand:xr(e.packageManager),packageName:`yamcodes/arkenv`,isYes:e.isYes})}function Yr(e){let{options:t,packageManager:n,cwd:r}=e;if(!t.example)throw Error(`New project scaffolding requires an example.`);let i=t.name&&t.name!==`.`?o.default.join(r,t.name):void 0,a=t.name&&t.name!==`.`?o.default.basename(t.name):o.default.basename(r),s={files:[],cwd:r,metadata:qr(e),clone:{repository:`https://github.com/yamcodes/arkenv.git`,example:t.example,targetName:a,...i!==void 0&&{targetDir:i}},install:{packageManager:n,dependencies:[],...i!==void 0&&{cwd:i}}};Jr(e,s);let c=Wr(br(t.example,()=>fn[t.framework].getEnvDefaults())),l=i??r;return s.files.push({path:o.default.join(l,`.env`),content:c,action:`create`,label:`local environment variables`},{path:o.default.join(l,`.env.example`),content:c,action:`create`,label:`environment variables template`}),s.metadata.displayPath=`./src/env.ts`,s.metadata.importPath=`./src/env`,s}function Xr(e){let{options:t,packageManager:n,tsConfig:r,shouldUpdateTsConfig:i,cwd:a,existingFiles:s}=e,c=fn[t.framework],l=Br[t.validator],u=o.default.resolve(a,t.path),d=o.default.dirname(u),f={files:[],cwd:a,metadata:qr(e)},p={targetPath:u,targetDir:d,cwd:a,existingFiles:s,overwriteEnvSchemaFile:t.overwriteEnvSchemaFile,installTypeDefinitions:t.installTypeDefinitions,envDtsHandling:t.envDtsHandling,path:t.path,tsConfig:r};f.files.push(...c.getSchemaFiles(l,t,p)),Gr(e,f),Kr(e,f);let m=[`arkenv`,t.validator,...c.getDependencies(t)];c.requiresArktypePeer(t)&&!m.includes(`arktype`)&&m.push(`arktype`),f.install={packageManager:n,dependencies:m},i&&r.file&&(f.tsConfig={path:o.default.resolve(a,r.file),action:`strict`}),f.files.push(...c.getTypeDefinitionFiles(t,p));let h=c.bootstrap(t);h&&(f.bootstrap=h),Jr(e,f);let g=o.default.relative(a,u).replace(/\\/g,`/`),_=g.startsWith(`.`)?g:`./${g}`,v=_.replace(/\.(ts|js|tsx|jsx)$/,``);return f.metadata.displayPath=_,f.metadata.importPath=v,f.bootstrap&&(f.bootstrap.importPath=v),f}var Zr=class{async fetchRegistry(){try{let e=await fetch(`https://raw.githubusercontent.com/yamcodes/arkenv/main/examples/registry.json`);if(!e.ok)throw Error(`Failed to fetch registry: ${e.statusText}`);return await e.json()}catch{return{examples:[{id:`basic`,name:`Basic`,description:`A minimal ArkEnv setup in Node.js`,framework:`vanilla`},{id:`with-nextjs`,name:`Next.js`,description:`Minimal Next.js project with ArkType`,framework:`nextjs`},{id:`with-vite-react`,name:`React + Vite`,framework:`vite`},{id:`with-bun`,name:`Bun (Vanilla)`,description:`Minimal Bun project with ArkType`,framework:`vanilla`},{id:`with-bun-react`,name:`React + Bun fullstack dev server`,framework:`bun-fullstack`},{id:`with-zod`,name:`Zod`,description:`ArkEnv with Zod in Node.js`,framework:`vanilla`},{id:`with-valibot`,name:`Valibot`,description:`ArkEnv with Valibot in Node.js`,framework:`vanilla`}]}}}},Qr=class{constructor(e,t,n,r,i=new Zr){this.logger=e,this.workspace=t,this.prompt=n,this.scanner=r,this.registry=i}async execute(e){let t=await this.collect(e);if(!t)return!1;let n=Vr(t),r=new vr(this.workspace,this.logger);try{await r.execute(n)}catch(e){this.logger.fatal(`Scaffolding failed.`,e)}return!0}async collect(e){this.logger.interactiveStdout(!0);try{let t=e.name;t&&o.default.resolve(process.cwd(),t)===process.cwd()&&(t=`.`);let n={...e,...t!==void 0&&{name:t}},r=t&&t!==`.`?o.default.resolve(process.cwd(),t):process.cwd(),i=await this.workspace.exists(r),a=i?await this.scanner.hasPackageJson(r):!1,s=i?await this.scanner.isEmptyDirectory(r):!0;return n.example===void 0?a?await this.collectExistingProject(n,r):s||n.isForce?await this.collectNewProject(n,s):(this.logger.error(`Directory is not empty and no ${G(`package.json`)} was found.`),this.logger.info(`To scaffold a new project, run ${G(`arkenv init`)} in an empty directory or use ${G(`--force`)} to proceed anyway.`),this.logger.refuse({code:g.NON_EMPTY_DIR,message:`Directory is not empty and no package.json was found.`,retryWith:[`--force`]}),null):await this.collectNewProject(n,s)}finally{this.logger.interactiveStdout(!1)}}async collectExistingProject(e,n){let{isYes:r,isForce:i,isQuiet:a,isAgent:s}=e,c=await this.scanner.checkRequirements(n),l=c.filter(e=>e.status===`fail`),u=c.filter(e=>e.status===`warn`);for(let e of u)this.logger.warn(`${e.requirement}: ${e.message}`);if(l.length>0)if(i){this.logger.warn(`Technical requirements not met, but continuing due to --force flag.`);for(let e of l)this.logger.warn(`${e.requirement}: ${e.message}`)}else{this.logger.error(`Technical requirements not met:`);for(let e of l)this.logger.error(`- ${e.requirement}: ${e.message}${e.current?` (Current: ${e.current}, Expected: ${e.expected})`:``}`);return this.logger.info(`Use --force to bypass these checks.`),this.logger.refuse({code:g.REQUIREMENTS_NOT_MET,message:`Technical requirements not met.`,retryWith:[`--force`],details:{requirements:l.map(e=>(0,t.shake)({requirement:e.requirement,message:e.message,current:e.current,expected:e.expected}))}}),null}let d=await this.scanner.checkGitStatus(n);if(d.status===`dirty`)if(i)this.logger.warn(`Git working tree is not clean, but continuing due to --force flag.`);else return this.logger.error(`Git working tree is not clean. Commit or stash your changes (use 'git stash -u' for untracked files) before running arkenv init.`),this.logger.info(`Use --force to bypass this check.`),this.logger.refuse({code:g.GIT_TREE_DIRTY,message:`Git working tree is not clean.`,retryWith:[`--force`]}),null;d.status===`unknown`&&this.logger.warn(`Git working tree status could not be determined. Proceeding with caution.`);let f=!1,p=await this.scanner.checkTsConfig(n);if(p.status===`not_strict`)if(r)f=!0;else{this.logger.warn(`TypeScript strict mode is not enabled in your ${G(p.file)}.`);let e=await this.prompt.confirm(`ArkEnv requires ${G(`strict`)} mode in your ${G(p.file)}. Would you like to enable it now?`,!0,`Yes (Recommended)`);if(e===null)return null;if(!e)return this.logger.cancel(`Operation cancelled.`),null;f=!0}let m=await this.scanner.detectFramework(n,p.parsed);if(e.isSimple&&m===`nextjs`)return this.logger.error(`❌ Error: The --simple layout is deprecated and no longer supported by the CLI. Arkenv now exclusively uses the Flat Layout. Run npx arkenv init without this flag.`),null;let h=m===`bun-fullstack`?await this.scanner.detectBunFeatures(n,p.parsed):void 0,_=await this.scanner.suggestDefaultEnvPath(n,p.parsed),v=o.default.resolve(n,_),y=await this.scanner.getEnvExampleKeys(n,p.parsed,v),b=await(async()=>{if(e.isStrict){let e=o.default.extname(v),t=v.slice(0,-e.length),n=[o.default.join(t,`internal`,`shared${e}`),o.default.join(t,`client${e}`),o.default.join(t,`server${e}`)];if((await Promise.all(n.map(e=>this.workspace.exists(e)))).some(Boolean))return!0}return this.workspace.exists(v)})(),x=async({framework:e,envPath:t})=>{if(e!==`vite`&&e!==`bun-fullstack`)return!1;let r=e===`vite`?`vite-env.d.ts`:`bun-env.d.ts`,i=o.default.resolve(n,t),a=o.default.dirname(i),s=o.default.join(a,r);return this.workspace.exists(s)},S=await x({framework:m,envPath:_}),C=await this.prompt.runWizard((0,t.shake)({mode:`existing`,framework:m,bunFeatures:h,defaultEnvPath:_,tsConfig:p.parsed??null,envKeys:y?.keys,envKeysSource:y?.source,hasTypeFileAtPath:x,hasTypeFile:S,hasEnvSchemaFile:b,isStrict:e.isStrict,isSimple:e.isSimple,isFlat:e.isFlat,disableCodegen:e.noCodegen,hostPreset:e.hostPreset}),r);if(C===null)return null;let ee=await this.scanner.hasSkill(n);if(ee&&(C.skillDetected=!0,!a&&!s&&this.logger.info(`ArkEnv agent skill detected.`)),ee)C.installSkill=!1;else if(s)C.installSkill=!1;else if(r)C.installSkill=!0;else{let e=await this.prompt.confirm(`Would you like to install the ArkEnv agent skill?`,!0,`Yes (Recommended)`);if(e===null)return null;C.installSkill=e}let w=o.default.resolve(n,C.path);if(C.overwriteEnvSchemaFile===void 0&&(C.layout===`strict`?await(async()=>{let e=o.default.extname(w),t=w.slice(0,-e.length);return(await Promise.all([this.workspace.exists(o.default.join(t,`internal`,`shared${e}`)),this.workspace.exists(o.default.join(t,`client${e}`)),this.workspace.exists(o.default.join(t,`server${e}`))])).some(Boolean)})():await this.workspace.exists(w))){let e=C.layout===`strict`?`Strict layout files (client, server, internal/shared)`:o.default.basename(w),t=await this.prompt.confirm(`${e} already exist. Overwrite?`,!1);if(t===null)return null;if(!t)return this.logger.cancel(`Operation cancelled.`),null;C.overwriteEnvSchemaFile=t}let T=await this.scanner.detectPackageManager(n,p.parsed),E=o.default.extname(w),D=w.slice(0,-E.length),te=C.layout===`strict`?[o.default.join(D,`internal`,`shared${E}`),o.default.join(D,`client${E}`),o.default.join(D,`server${E}`)]:[w],O=[];for(let e of te)await this.workspace.exists(e)&&O.push(e);let k;if(C.framework===`vite`?k=`vite-env.d.ts`:C.framework===`bun-fullstack`&&(k=`bun-env.d.ts`),k){let e=o.default.dirname(w),t=o.default.join(e,k);await this.workspace.exists(t)&&O.push(t)}let A=o.default.join(n,`.env`),j=o.default.join(n,`.env.example`);await this.workspace.exists(A)&&(O.push(A),C.envContent=await this.workspace.readFile(A)),await this.workspace.exists(j)&&(O.push(j),C.envExampleContent=await this.workspace.readFile(j));let M=o.default.join(n,`.gitignore`);return await this.workspace.exists(M)&&(O.push(M),C.gitignoreContent=await this.workspace.readFile(M)),(0,t.shake)({mode:`existing`,cwd:n,options:C,detectedFramework:m,detectedBunFeatures:h,packageManager:T,tsConfig:p,shouldUpdateTsConfig:f,existingFiles:O,isYes:r})}async collectNewProject(e,n=!0){let{isYes:r,example:i,name:a,isForce:o}=e,s=await this.registry.fetchRegistry(),c=await this.prompt.runWizard((0,t.shake)({mode:`new`,examples:s.examples,example:i,name:a}),r);if(c===null)return null;if(c.name===`.`&&!n&&!o)return this.logger.error(`Cannot scaffold into ${G(`.`)} because the current directory is not empty.`),this.logger.info(`Run ${G(`arkenv init`)} in an empty directory or choose a sub-directory name instead.`),this.logger.refuse({code:g.NON_EMPTY_DIR,message:`Cannot scaffold into the current directory because it is not empty.`,retryWith:[`--force`]}),null;let l=this.detectPackageManager();return(0,t.shake)({mode:`new`,cwd:process.cwd(),options:c,detectedFramework:c.framework,packageManager:l,tsConfig:{status:`not_found`},shouldUpdateTsConfig:!1,existingFiles:[],isYes:r})}detectPackageManager(){let e=process.env.npm_config_user_agent||``;return e.includes(`pnpm`)?`pnpm`:e.includes(`yarn`)?`yarn`:e.includes(`bun`)?`bun`:`npm`}};function $r(e){let t=new sr(e),n=t.logger,r=new zn(t.isQuiet,n.stdio,n),i=new ir,a=new Ut(n);return{cli:t,logger:n,workspace:r,prompt:i,initUseCase:new Qr(n,r,i,a),addUseCase:new cr(n,r,i,a),helpUseCase:new fr(n)}}const ei=new tt({isQuiet:!1,isJson:!1});let ti,ni=!1;async function ri(){if(process.env.INIT_CWD)try{process.chdir(process.env.INIT_CWD)}catch{}let{cli:e,logger:n,initUseCase:r,addUseCase:i,helpUseCase:a}=$r(process.argv);ti=n,ii(n),e.validationError&&(n.error(e.validationError),await a.execute(),await n.flush(),process.exit(1)),e.helpRequested&&(await a.execute(),await n.flush(),process.exit(0));let o=e.command?{init:()=>r.execute((0,t.shake)(e.initInput)),add:()=>i.execute(e.addInput)}[e.command]:void 0;o||(e.command?n.error(`Unknown command: ${e.command}`):n.error(`Missing command.`),await a.execute(),await n.flush(),process.exit(1));try{await o()||(await n.flush(),process.exit(1))}catch(e){try{n.fatal(`An unexpected error occurred`,e)}catch{}await n.flush(),process.exit(1)}}function ii(e){let t=async t=>{ni&&process.exit(t),ni=!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))}ri(),process.on(`unhandledRejection`,async e=>{let t=ti??ei;try{t.fatal(`Unhandled rejection`,e)}catch{}await t.flush(),process.exit(1)}),process.on(`uncaughtException`,async e=>{let t=ti??ei;try{t.fatal(`Uncaught exception`,e)}catch{}await t.flush(),process.exit(1)});
262
+ `,action:`create`,label:`.gitignore file`})}function si(e){let{mode:t,options:r,packageManager:i}=e,a=r.name&&r.name!==`.`?s.default.basename(r.name):void 0;return(0,n.shake)({displayPath:``,framework:r.framework,validator:r.validator,packageManager:i,importPath:``,mode:t,example:r.example,name:a,layout:r.layout,skillDetected:r.skillDetected,disableCodegen:r.disableCodegen})}function ci(e,t){e.options.installSkill&&(t.skill={dlxCommand:Lr(e.packageManager),packageName:`yamcodes/arkenv`,isYes:e.isYes})}function li(e){let{options:t,packageManager:n,cwd:r}=e;if(!t.example)throw Error(`New project scaffolding requires an example.`);let i=t.name&&t.name!==`.`?s.default.join(r,t.name):void 0,a=t.name&&t.name!==`.`?s.default.basename(t.name):s.default.basename(r),o={files:[],cwd:r,metadata:si(e),clone:{repository:`https://github.com/yamcodes/arkenv.git`,example:t.example,targetName:a,...i!==void 0&&{targetDir:i}},install:{packageManager:n,dependencies:[],...i!==void 0&&{cwd:i}}};ci(e,o);let c=ii(Ir(t.example,()=>wn[t.framework].getEnvDefaults())),l=i??r;return o.files.push({path:s.default.join(l,`.env`),content:c,action:`create`,label:`local environment variables`},{path:s.default.join(l,`.env.example`),content:c,action:`create`,label:`environment variables template`}),o.metadata.displayPath=`./src/env.ts`,o.metadata.importPath=`./src/env`,o}function ui(e){let{options:t,packageManager:n,tsConfig:r,shouldUpdateTsConfig:i,cwd:a,existingFiles:o}=e,c=wn[t.framework],l=ti[t.validator],u=s.default.resolve(a,t.path),d=s.default.dirname(u),f={files:[],cwd:a,metadata:si(e)},p={targetPath:u,targetDir:d,cwd:a,existingFiles:o,overwriteEnvSchemaFile:t.overwriteEnvSchemaFile,path:t.path,tsConfig:r};f.files.push(...c.getSchemaFiles(l,t,p)),ai(e,f),oi(e,f);let m=t.framework===`nextjs`||t.framework===`nuxt`?void 0:t.validator===`arktype`?`@arkenv/core`:`@arkenv/standard`,h=[...m?[m]:[],t.validator,...t.validator===`valibot`?[`@valibot/to-json-schema`]:[],...c.getDependencies(t)];c.requiresArktypePeer(t)&&!h.includes(`arktype`)&&h.push(`arktype`),f.install={packageManager:n,dependencies:Array.from(new Set(h))},i&&r.file&&(f.tsConfig={path:s.default.resolve(a,r.file),action:`strict`}),f.files.push(...c.getTypeDefinitionFiles(t,p));let g=c.bootstrap(t);g&&(f.bootstrap=g),ci(e,f);let _=s.default.relative(a,u).replace(/\\/g,`/`),v=_.startsWith(`.`)?_:`./${_}`,y=v.replace(/\.(ts|js|tsx|jsx)$/,``);return f.metadata.displayPath=v,f.metadata.importPath=y,f.bootstrap&&(f.bootstrap.importPath=y),f}var di=class{async fetchRegistry(){try{let e=await fetch(`https://raw.githubusercontent.com/yamcodes/arkenv/main/examples/registry.json`);if(!e.ok)throw Error(`Failed to fetch registry: ${e.statusText}`);return await e.json()}catch{return{examples:[{id:`basic`,name:`Basic`,description:`A minimal ArkEnv setup in Node.js`,framework:`vanilla`},{id:`with-nextjs`,name:`Next.js`,description:`Minimal Next.js project with ArkType`,framework:`nextjs`},{id:`with-nextjs-zod`,name:`Next.js (Zod)`,description:`Next.js with @arkenv/nextjs/standard and Zod`,framework:`nextjs`},{id:`with-vite-react`,name:`React + Vite`,framework:`vite`},{id:`with-vite-react-zod`,name:`React + Vite (Zod)`,description:`React + Vite with @arkenv/vite-plugin/standard and Zod`,framework:`vite`},{id:`with-bun`,name:`Bun (Vanilla)`,description:`Minimal Bun project with ArkType`,framework:`vanilla`},{id:`with-bun-react`,name:`React + Bun fullstack dev server`,framework:`bun-fullstack`},{id:`with-zod`,name:`Zod`,description:`ArkEnv with Zod in Node.js`,framework:`vanilla`},{id:`with-valibot`,name:`Valibot`,description:`ArkEnv with Valibot in Node.js`,framework:`vanilla`},{id:`mix-and-match`,name:`Mix and Match`,description:`ArkEnv with mixed ArkType, Zod, and Valibot in Node.js`,framework:`vanilla`}]}}}},fi=class{constructor(e,t,n,r,i=new di){this.logger=e,this.workspace=t,this.prompt=n,this.scanner=r,this.registry=i}async execute(e){let t=await this.collect(e);if(!t)return!1;let n=ni(t),r=new Pr(this.workspace,this.logger);try{await r.execute(n)}catch(e){this.logger.fatal(`Scaffolding failed.`,e)}return!0}async collect(e){this.logger.interactiveStdout(!0);try{let t=e.name;t&&s.default.resolve(process.cwd(),t)===process.cwd()&&(t=`.`);let n={...e,...t!==void 0&&{name:t}},r=t&&t!==`.`?s.default.resolve(process.cwd(),t):process.cwd(),i=await this.workspace.exists(r),a=i?await this.scanner.hasPackageJson(r):!1,o=i?await this.scanner.isEmptyDirectory(r):!0;return n.example===void 0?a?await this.collectExistingProject(n,r):o||n.isForce?await this.collectNewProject(n,o):(this.logger.error(`Directory is not empty and no ${W(`package.json`)} was found.`),this.logger.info(`To scaffold a new project, run ${W(`arkenv init`)} in an empty directory or use ${W(`--force`)} to proceed anyway.`),this.logger.refuse({code:v.NON_EMPTY_DIR,message:`Directory is not empty and no package.json was found.`,retryWith:[`--force`]}),null):await this.collectNewProject(n,o)}finally{this.logger.interactiveStdout(!1)}}async collectExistingProject(e,t){let{isYes:r,isForce:i,isQuiet:a,isAgent:o}=e,c=await this.scanner.checkRequirements(t),l=c.filter(e=>e.status===`fail`),u=c.filter(e=>e.status===`warn`);for(let e of u)this.logger.warn(`${e.requirement}: ${e.message}`);if(l.length>0)if(i){this.logger.warn(`Technical requirements not met, but continuing due to --force flag.`);for(let e of l)this.logger.warn(`${e.requirement}: ${e.message}`)}else{this.logger.error(`Technical requirements not met:`);for(let e of l)this.logger.error(`- ${e.requirement}: ${e.message}${e.current?` (Current: ${e.current}, Expected: ${e.expected})`:``}`);return this.logger.info(`Use --force to bypass these checks.`),this.logger.refuse({code:v.REQUIREMENTS_NOT_MET,message:`Technical requirements not met.`,retryWith:[`--force`],details:{requirements:l.map(e=>(0,n.shake)({requirement:e.requirement,message:e.message,current:e.current,expected:e.expected}))}}),null}let d=await this.scanner.checkGitStatus(t);if(d.status===`dirty`)if(i)this.logger.warn(`Git working tree is not clean, but continuing due to --force flag.`);else return this.logger.error(`Git working tree is not clean. Commit or stash your changes (use 'git stash -u' for untracked files) before running arkenv init.`),this.logger.info(`Use --force to bypass this check.`),this.logger.refuse({code:v.GIT_TREE_DIRTY,message:`Git working tree is not clean.`,retryWith:[`--force`]}),null;d.status===`unknown`&&this.logger.warn(`Git working tree status could not be determined. Proceeding with caution.`);let f=!1,p=await this.scanner.checkTsConfig(t);if(p.status===`not_strict`)if(r)f=!0;else{this.logger.warn(`TypeScript strict mode is not enabled in your ${W(p.file)}.`);let e=await this.prompt.confirm(`ArkEnv requires ${W(`strict`)} mode in your ${W(p.file)}. Would you like to enable it now?`,!0,`Yes (Recommended)`);if(e===null)return null;if(!e)return this.logger.cancel(`Operation cancelled.`),null;f=!0}let m=await this.scanner.detectFramework(t,p.parsed);if(e.isSimple&&m===`nextjs`)return this.logger.error(`❌ Error: The --simple layout is deprecated and no longer supported by the CLI. Arkenv now exclusively uses the Flat Layout. Run npx arkenv init without this flag.`),null;let h=m===`bun-fullstack`?await this.scanner.detectBunFeatures(t,p.parsed):void 0,g=await this.scanner.suggestDefaultEnvPath(t,p.parsed),_=s.default.resolve(t,g),y=await this.scanner.getEnvExampleKeys(t,p.parsed,_),b=await(async()=>{if(e.isStrict){let e=s.default.extname(_),t=_.slice(0,-e.length),n=[s.default.join(t,`internal`,`shared${e}`),s.default.join(t,`client${e}`),s.default.join(t,`server${e}`)];if((await Promise.all(n.map(e=>this.workspace.exists(e)))).some(Boolean))return!0}return this.workspace.exists(_)})(),x=await this.prompt.runWizard((0,n.shake)({mode:`existing`,framework:m,bunFeatures:h,defaultEnvPath:g,tsConfig:p.parsed??null,envKeys:y?.keys,envKeysSource:y?.source,hasEnvSchemaFile:b,isStrict:e.isStrict,isSimple:e.isSimple,isFlat:e.isFlat,disableCodegen:e.noCodegen,hostPreset:e.hostPreset}),r);if(x===null)return null;let S=await this.scanner.hasSkill(t);if(S&&(x.skillDetected=!0,!a&&!o&&this.logger.info(`ArkEnv agent skill detected.`)),S)x.installSkill=!1;else if(o)x.installSkill=!1;else if(r)x.installSkill=!0;else{let e=await this.prompt.confirm(`Would you like to install the ArkEnv agent skill?`,!0,`Yes (Recommended)`);if(e===null)return null;x.installSkill=e}let C=s.default.resolve(t,x.path);if(x.overwriteEnvSchemaFile===void 0&&(x.layout===`strict`?await(async()=>{let e=s.default.extname(C),t=C.slice(0,-e.length);return(await Promise.all([this.workspace.exists(s.default.join(t,`internal`,`shared${e}`)),this.workspace.exists(s.default.join(t,`client${e}`)),this.workspace.exists(s.default.join(t,`server${e}`))])).some(Boolean)})():await this.workspace.exists(C))){let e=x.layout===`strict`?`Strict layout files (client, server, internal/shared)`:s.default.basename(C),t=await this.prompt.confirm(`${e} already exist. Overwrite?`,!1);if(t===null)return null;if(!t)return this.logger.cancel(`Operation cancelled.`),null;x.overwriteEnvSchemaFile=t}let ee=await this.scanner.detectPackageManager(t,p.parsed),w=s.default.extname(C),T=C.slice(0,-w.length),te=x.layout===`strict`?[s.default.join(T,`internal`,`shared${w}`),s.default.join(T,`client${w}`),s.default.join(T,`server${w}`)]:[C],E=[];for(let e of te)await this.workspace.exists(e)&&E.push(e);let ne=s.default.join(t,`.env`),D=s.default.join(t,`.env.example`);await this.workspace.exists(ne)&&E.push(ne),await this.workspace.exists(D)&&(E.push(D),x.envExampleContent=await this.workspace.readFile(D));let re=s.default.join(t,`.gitignore`);return await this.workspace.exists(re)&&(E.push(re),x.gitignoreContent=await this.workspace.readFile(re)),(0,n.shake)({mode:`existing`,cwd:t,options:x,detectedFramework:m,detectedBunFeatures:h,packageManager:ee,tsConfig:p,shouldUpdateTsConfig:f,existingFiles:E,isYes:r})}async collectNewProject(e,t=!0){let{isYes:r,example:i,name:a,isForce:o}=e,s=await this.registry.fetchRegistry(),c=await this.prompt.runWizard((0,n.shake)({mode:`new`,examples:s.examples,example:i,name:a}),r);if(c===null)return null;if(c.name===`.`&&!t&&!o)return this.logger.error(`Cannot scaffold into ${W(`.`)} because the current directory is not empty.`),this.logger.info(`Run ${W(`arkenv init`)} in an empty directory or choose a sub-directory name instead.`),this.logger.refuse({code:v.NON_EMPTY_DIR,message:`Cannot scaffold into the current directory because it is not empty.`,retryWith:[`--force`]}),null;let l=this.detectPackageManager();return(0,n.shake)({mode:`new`,cwd:process.cwd(),options:c,detectedFramework:c.framework,packageManager:l,tsConfig:{status:`not_found`},shouldUpdateTsConfig:!1,existingFiles:[],isYes:r})}detectPackageManager(){let e=process.env.npm_config_user_agent||``;return e.includes(`pnpm`)?`pnpm`:e.includes(`yarn`)?`yarn`:e.includes(`bun`)?`bun`:`npm`}};function pi(e){let t=e.replace(/\/\/.*/g,``).replace(/\/\*[\s\S]*?\*\//g,``);return/(?:^|\n)\s*import\s+[\s\S]*?from\s+['"]zod['"]/.test(t)?`zod`:/(?:^|\n)\s*import\s+[\s\S]*?from\s+['"]valibot['"]/.test(t)?`valibot`:`arktype`}var mi=class{constructor(e,t,n,r){this.logger=e,this.workspace=t,this.prompt=n,this.scanner=r}async execute(e){this.logger.interactiveStdout(!0);try{let t=process.cwd(),n=await this.scanner.checkGitStatus(t);if(n.status===`dirty`)if(e.isForce)this.logger.warn(`Git working tree is not clean, but continuing due to --force flag.`);else return this.logger.error(`Git working tree is not clean. Commit or stash your changes before running arkenv preset.`),this.logger.info(`Use --force to bypass this check.`),this.logger.refuse({code:v.GIT_TREE_DIRTY,message:`Git working tree is not clean.`,retryWith:[`--force`]}),!1;else n.status===`unknown`&&this.logger.warn(`Git working tree status could not be determined. Proceeding with caution.`);let r=e.provider;if(!r)if(e.isYes)r=`vercel`;else{let t=e.action===`remove`?`remove`:`apply`,n=await this.prompt.select(`Select a hosting provider preset to ${t}:`,Object.entries(q).map(([e,t])=>({value:e,label:t.label,hint:t.hint})),`vercel`);if(n&&n!==`none`)r=n;else return!1}let i=q[r]?.label||r,a=await this.discoverSchema(t,e.file);if(!a)return!1;let o=(await this.scanner.checkTsConfig(t)).parsed||null,c=await this.scanner.detectFramework(t,o),l=K[c]||``,u=J(r,l);if(e.action===`apply`){if(a.layout===`strict`){let e=s.default.join(a.dir,`client.ts`),n=s.default.join(a.dir,`server.ts`),o=s.default.relative(t,e),d=s.default.relative(t,n);if(!await this.workspace.exists(e)||!await this.workspace.exists(n))return this.logger.error(`Strict layout files not found in ${s.default.relative(t,a.dir)}.`),!1;let f=await this.workspace.readFile(e),p=await this.workspace.readFile(n),m=pi(f),h=pi(p),{clientKeys:g,serverKeys:_}=Dn(r,l),v=qn(f,{preset:r,framework:c,validator:m,markerId:`${r}:client`,targetKeys:g}),y=qn(p,{preset:r,framework:c,validator:h,markerId:`${r}:server`,targetKeys:_});if(!v.success||!v.code)return this.logger.error(v.error||`Failed to apply preset to ${o}.`),!1;if(!y.success||!y.code)return this.logger.error(y.error||`Failed to apply preset to ${d}.`),!1;let b=!1;return v.updated&&(await this.workspace.writeFile(e,v.code),b=!0),y.updated&&(await this.workspace.writeFile(n,y.code),b=!0),typeof this.workspace.appendMissingEnvExampleKeys==`function`&&await this.workspace.appendMissingEnvExampleKeys(t,u),b?this.logger.success(`Applied ${i} preset to ${o} and ${d}`):this.logger.info(`${i} preset is already up-to-date in ${o} and ${d}`),!0}let e=a.filePath,n=s.default.relative(t,e);if(!await this.workspace.exists(e))return this.logger.error(`Schema file not found at ${n}.`),!1;let o=await this.workspace.readFile(e),d=pi(o),f=qn(o,{preset:r,framework:c,validator:d});return!f.success||!f.code?(this.logger.error(f.error||`Failed to apply preset to ${n}.`),!1):(f.updated?(await this.workspace.writeFile(e,f.code),this.logger.success(`Applied ${i} preset to ${n}`)):this.logger.info(`${i} preset is already up-to-date in ${n}`),typeof this.workspace.appendMissingEnvExampleKeys==`function`&&await this.workspace.appendMissingEnvExampleKeys(t,u),!0)}if(a.layout===`strict`){let e=s.default.join(a.dir,`client.ts`),n=s.default.join(a.dir,`server.ts`),o=s.default.relative(t,e),c=s.default.relative(t,n);if(!await this.workspace.exists(e)||!await this.workspace.exists(n))return this.logger.error(`Strict layout files not found in ${s.default.relative(t,a.dir)}.`),!1;let l=await this.workspace.readFile(e),u=await this.workspace.readFile(n),d=Xn(l,{preset:r}),f=Xn(u,{preset:r});if(!d.success||!d.code)return this.logger.error(d.error||`Failed to remove preset from ${o}.`),!1;if(!f.success||!f.code)return this.logger.error(f.error||`Failed to remove preset from ${c}.`),!1;let p=!1,m=[];if(d.updated&&(await this.workspace.writeFile(e,d.code),p=!0,d.removedKeys&&m.push(...d.removedKeys)),f.updated&&(await this.workspace.writeFile(n,f.code),p=!0,f.removedKeys&&m.push(...f.removedKeys)),p){let e=X(d.code||l),n=e.success?e.blocks:[],r=X(f.code||u),a=r.success?r.blocks:[],s=[...n.flatMap(e=>e.keys),...a.flatMap(e=>e.keys)];typeof this.workspace.removeEnvExampleKeys==`function`&&await this.workspace.removeEnvExampleKeys(t,m,s),this.logger.success(`Removed ${i} preset from ${o} and ${c}`)}else this.logger.info(`${i} preset was not present in ${o} and ${c}`);return!0}let d=a.filePath,f=s.default.relative(t,d);if(!await this.workspace.exists(d))return this.logger.error(`Schema file not found at ${f}.`),!1;let p=Xn(await this.workspace.readFile(d),{preset:r});if(!p.success||!p.code)return this.logger.error(p.error||`Failed to remove preset from ${f}.`),!1;if(p.updated){await this.workspace.writeFile(d,p.code);let e=X(p.code),n=(e.success?e.blocks:[]).flatMap(e=>e.keys);typeof this.workspace.removeEnvExampleKeys==`function`&&await this.workspace.removeEnvExampleKeys(t,p.removedKeys||[],n),this.logger.success(`Removed ${i} preset from ${f}`)}else this.logger.info(`${i} preset was not present in ${f}`);return!0}finally{this.logger.interactiveStdout(!1)}}async discoverSchema(e,t){if(t){let n=s.default.resolve(e,t),r=s.default.join(n,`client.ts`),i=s.default.join(n,`server.ts`);return await this.workspace.exists(r)&&await this.workspace.exists(i)?{layout:`strict`,dir:n}:{layout:`flat`,filePath:n}}if(typeof this.scanner.readArkenvConfig==`function`){let t=await this.scanner.readArkenvConfig(e);if(t){let n=s.default.resolve(e,t.schema);return t.layout===`strict`?{layout:`strict`,dir:n}:{layout:`flat`,filePath:n}}}let n=[s.default.resolve(e,`env`),s.default.resolve(e,`src/env`)];for(let e of n)if(await this.workspace.exists(s.default.join(e,`client.ts`))&&await this.workspace.exists(s.default.join(e,`server.ts`)))return{layout:`strict`,dir:e};let r=[s.default.resolve(e,`env.ts`),s.default.resolve(e,`src/env.ts`)];for(let e of r)if(await this.workspace.exists(e))return{layout:`flat`,filePath:e};return this.logger.error(`Could not locate your schema file. Add an 'arkenv' entry to package.json or specify --file <path>.`),null}};function hi(e){let t=new Tr(e),n=t.logger,r=new or(t.isQuiet,n.stdio,n),i=new Sr,a=new an(n),o=new Rt;return{cli:t,logger:n,workspace:r,prompt:i,initUseCase:new fi(n,r,i,a),presetUseCase:new mi(n,r,i,a),helpUseCase:new Or(n),schemaLoader:o}}const gi=new ot({isQuiet:!1,isJson:!1});let _i,vi=!1;async function yi(){if(process.env.INIT_CWD)try{process.chdir(process.env.INIT_CWD)}catch{}let{cli:e,logger:t,initUseCase:r,presetUseCase:i,helpUseCase:a}=hi(process.argv);_i=t,bi(t),e.validationError&&(t.error(e.validationError),await a.execute(),await t.flush(),process.exit(1)),e.helpRequested&&(await a.execute(),await t.flush(),process.exit(0));let o=e.command?{init:()=>r.execute((0,n.shake)(e.initInput)),preset:()=>i.execute(e.presetInput)}[e.command]:void 0;o||(e.command?t.error(`Unknown command: ${e.command}`):t.error(`Missing command.`),await a.execute(),await t.flush(),process.exit(1));try{await o()||(await t.flush(),process.exit(1))}catch(e){try{t.fatal(`An unexpected error occurred`,e)}catch{}await t.flush(),process.exit(1)}}function bi(e){let t=async t=>{vi&&process.exit(t),vi=!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))}yi(),process.on(`unhandledRejection`,async e=>{let t=_i??gi;try{t.fatal(`Unhandled rejection`,e)}catch{}await t.flush(),process.exit(1)}),process.on(`uncaughtException`,async e=>{let t=_i??gi;try{t.fatal(`Uncaught exception`,e)}catch{}await t.flush(),process.exit(1)});