@stacksjs/rpx 0.11.22 → 0.11.24

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/cli.js CHANGED
@@ -1,24 +1,24 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
3
  #!/usr/bin/env bun
4
- import{createRequire as l6}from"node:module";var i6=Object.defineProperty;var m6=($)=>$;function g6($,w){this[$]=m6.bind(null,w)}var $j=($,w)=>{for(var Y in w)i6($,Y,{get:w[Y],enumerable:!0,configurable:!0,set:g6.bind(w,Y)})};var o=($,w)=>()=>($&&(w=$($=0)),w);var b=l6(import.meta.url);import{existsSync as qj,statSync as Ej}from"fs";import{existsSync as tF,mkdirSync as m4,readdirSync as g4,readFileSync as aF,writeFileSync as l4}from"fs";import{homedir as nw}from"os";import{dirname as p4,resolve as Y$}from"path";import kA from"process";import{existsSync as Hj,statSync as Tj}from"fs";import{existsSync as LJ,mkdirSync as sF,readdirSync as oF,writeFileSync as eF}from"fs";import{homedir as pw}from"os";import{dirname as Rj,resolve as v0}from"path";import _w from"process";import{join as $K,relative as wK,resolve as Mj}from"path";import RA from"process";import{existsSync as X9,mkdirSync as AI,readdirSync as XI,writeFileSync as JI}from"fs";import{homedir as WJ}from"os";import{dirname as BI,resolve as c0}from"path";import JY from"process";import{join as YK,relative as AK,resolve as Ij}from"path";import MA from"process";import{existsSync as J9,mkdirSync as KI,readdirSync as NI,writeFileSync as fI}from"fs";import{dirname as EI,resolve as IA}from"path";import OJ from"process";import{Buffer as Bw}from"buffer";import{createCipheriv as XK,createDecipheriv as JK,randomBytes as BJ}from"crypto";import{closeSync as jJ,createReadStream as Vj,createWriteStream as UK,existsSync as zJ,fsyncSync as yj,openSync as Cj,writeFileSync as WK}from"fs";import{access as BK,constants as Qj,mkdir as jK,readdir as $A,rename as Lj,stat as rw,unlink as wA,writeFile as GJ}from"fs/promises";import{join as tw}from"path";import Q0 from"process";import{pipeline as zK}from"stream/promises";import{createGzip as Oj}from"zlib";import aw from"process";import D$ from"process";import{Buffer as Z$}from"buffer";import{createCipheriv as GK,createDecipheriv as FK,randomBytes as FJ}from"crypto";import{closeSync as KJ,createReadStream as _j,createWriteStream as KK,existsSync as YA,fsyncSync as Sj,openSync as hj,writeFileSync as NK}from"fs";import{access as fK,constants as Zj,mkdir as qK,readdir as AA,rename as kj,stat as sw,unlink as XA,writeFile as NJ}from"fs/promises";import{isAbsolute as EK,join as ow,resolve as HK}from"path";import k from"process";import{pipeline as TK}from"stream/promises";import{createGzip as Dj}from"zlib";import ew from"process";import x$ from"process";import JA from"process";import{existsSync as UA}from"fs";import{resolve as fJ}from"path";import{existsSync as RK}from"fs";import{existsSync as MK,readdirSync as IK}from"fs";import{extname as qJ,resolve as xj}from"path";import VK from"process";import{join as yK,relative as CK,resolve as Pj}from"path";import VA from"process";import{Buffer as k$}from"buffer";import{createCipheriv as QK,createDecipheriv as LK,randomBytes as EJ}from"crypto";import{closeSync as HJ,createReadStream as bj,createWriteStream as OK,existsSync as WA,fsyncSync as uj,openSync as cj,writeFileSync as _K}from"fs";import{access as SK,constants as vj,mkdir as hK,readdir as BA,rename as ij,stat as $1,unlink as jA,writeFile as TJ}from"fs/promises";import{isAbsolute as ZK,join as w1,resolve as kK}from"path";import D from"process";import{pipeline as DK}from"stream/promises";import{createGzip as mj}from"zlib";import Y1 from"process";import P$ from"process";import GA from"process";import{existsSync as FA}from"fs";import{resolve as CJ}from"path";import{existsSync as $N}from"fs";class Y9{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!qj($))return!0;return Ej($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=qj(Y)?Ej(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class A9{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function bK($,w){this[$]=PK.bind(null,w)}class vJ{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!Hj($))return!0;return Tj($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=Hj(Y)?Tj(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class iJ{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function vK($,w={}){let A=Object.keys(w).sort().map((X)=>`${X}:${w[X]}`).join("|");return A?`${$}:${A}`:$}function iK($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function mK($){return $.getStats().size*2}function mJ($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&$0(w[0])&&"id"in w[0]&&w[0].id===3&&$0(w[1])&&"id"in w[1]&&w[1].id===4)return w;if($0(w)&&$0($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if($0($)&&"arr"in $&&Array.isArray($.arr)&&$0(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&$0(w[0])&&$0($[0])){let A=[...w];for(let X of $)if($0(X)&&"name"in X){if(!A.find((U)=>$0(U)&&("name"in U)&&U.name===X.name))A.push(X)}else if($0(X)&&"path"in X){if(!A.find((U)=>$0(U)&&("path"in U)&&U.path===X.path))A.push(X)}else if(!A.some((J)=>yA(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!$0(w)||!$0($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if($0(X)&&$0(Y[A]))Y[A]=mJ(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&$0(X[0])&&$0(Y[A][0])){let J=[...X];for(let U of Y[A])if($0(U)&&"name"in U){if(!J.find((W)=>$0(W)&&("name"in W)&&W.name===U.name))J.push(U)}else if($0(U)&&"path"in U){if(!J.find((W)=>$0(W)&&("path"in W)&&W.path===U.path))J.push(U)}else if(!J.some((B)=>yA(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function yA($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!yA($[Y],w[Y]))return!1;return!0}if($0($)&&$0(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!yA($[X],w[X]))return!1}return!0}return!1}function $0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function gK($,w){if(!J9($))return null;try{let Y=await import($),A=Y.default||Y;if(typeof A!=="object"||A===null||Array.isArray(A))return null;try{return mJ(w,A)}catch{return null}}catch{return null}}async function lK({name:$="",cwd:w,defaultConfig:Y}){let A=w||OJ.cwd(),X=[".ts",".js",".mjs",".cjs",".json"],J=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of J)for(let B of X){let W=IA(A,`${U}${B}`),j=await gK(W,Y);if(j!==null)return j}try{let U=IA(A,"package.json");if(J9(U)){let W=(await import(U))[$];if(W&&typeof W==="object"&&!Array.isArray(W))try{return mJ(Y,W)}catch{}}}catch{}return Y}function dK($,w={}){let Y=MA.cwd();while(Y.includes("storage"))Y=Ij(Y,"..");let A=Ij(Y,$||"");if(w?.relative)return AK(MA.cwd(),A);return A}async function nK(){try{let $=await lK({name:"clarity",defaultConfig:fA,cwd:MA.cwd(),endpoint:"",headers:{}});return{...fA,...$}}catch{return fA}}function U0(){if(D$.env.NODE_ENV==="test"||D$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function pK(){if(D$.env.NODE_ENV==="test"||D$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof D$<"u"){let $=D$.type;if($==="renderer"||$==="worker")return!1;return!!(D$.versions&&(D$.versions.node||D$.versions.bun))}return!1}class W9{async format($){let w=await pK(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:aw.pid,hostname:w(),environment:aw.env.NODE_ENV||"development",platform:aw.platform,version:aw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:aw.env.NODE_ENV||aw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class CA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...SJ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new W9,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??Q0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...qA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...qA};return{...qA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:SJ.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await BK(this.config.logDirectory,Qj.F_OK|Qj.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await jK(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:Bw.from($);try{if(!zJ(this.currentLogFile))await GJ(this.currentLogFile,"",{mode:420});if(X=Cj(this.currentLogFile,"a",420),WK(X,W,{flag:"a"}),yj(X),X!==void 0)jJ(X),X=void 0;if((await rw(this.currentLogFile)).size===0){if(await GJ(this.currentLogFile,W,{flag:"w",mode:420}),(await rw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let F=B*2**J;await new Promise((K)=>setTimeout(K,F)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{jJ(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return tw(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return tw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return tw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(U0())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return BJ(16).toString("hex")}generateKey(){return BJ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=BJ(16),A=XK("aes-256-gcm",w,Y),X=Bw.concat([A.update($,"utf8"),A.final()]),J=A.getAuthTag();return{encrypted:Bw.concat([Y,X,J]),iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=Oj(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(Bw.from(Bw.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(U0())return;let $=await rw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await $A(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await rw(Y).catch(()=>null))try{if(await Lj(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await wA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await GJ(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await rw(Y).catch(()=>null))await Lj(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await $A(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await wA(tw(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=Vj($),A=UK(w),X=Oj();await zK(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);await this.writeToFile(A),console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(w),console.log(w);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue($)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue($){return{debug:0,info:1,success:2,warning:3,error:4}[$]}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),zJ(this.currentLogFile))try{let $=Cj(this.currentLogFile,"r+");yj($),jJ($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!U0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await $A(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await wA(tw(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.fancy?t.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=Q0.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${t.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);if(this.fancy&&!U0()){let j=E9[$],z=this.options.showTags!==!1&&this.name?t.gray(this.formatTag(this.name)):"",G;switch($){case"debug":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:t.gray(U),level:$}),console.error(G);break;case"info":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G);break;case"success":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:t.green(U),level:$}),console.error(G);break;case"warning":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.warn(G);break;case"error":if(G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G),B){let F=B.split(`
5
- `);for(let K of F)if(K.trim()&&!K.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:t.gray(` ${K}`),level:$,showTimestamp:!1}))}break}}else if(!U0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${J} ${this.environment}.${$.toUpperCase()}: ${U}
4
+ import{createRequire as YK}from"node:module";var e6=Object.defineProperty;var $K=($)=>$;function wK($,w){this[$]=$K.bind(null,w)}var Gj=($,w)=>{for(var Y in w)e6($,Y,{get:w[Y],enumerable:!0,configurable:!0,set:wK.bind(w,Y)})};var t=($,w)=>()=>($&&(w=$($=0)),w);var b=YK(import.meta.url);import{existsSync as Lj,statSync as Oj}from"fs";import{existsSync as W7,mkdirSync as BI,readdirSync as jI,readFileSync as B7,writeFileSync as zI}from"fs";import{homedir as rw}from"os";import{dirname as FI,resolve as Y$}from"path";import vA from"process";import{existsSync as _j,statSync as Sj}from"fs";import{existsSync as uJ,mkdirSync as j7,readdirSync as z7,writeFileSync as G7}from"fs";import{homedir as tw}from"os";import{dirname as Zj,resolve as c0}from"path";import Zw from"process";import{join as K7,relative as F7,resolve as hj}from"path";import yA from"process";import{existsSync as q9,mkdirSync as VI,readdirSync as CI,writeFileSync as QI}from"fs";import{homedir as HJ}from"os";import{dirname as OI,resolve as v0}from"path";import zY from"process";import{join as N7,relative as q7,resolve as kj}from"path";import LA from"process";import{existsSync as E9,mkdirSync as kI,readdirSync as DI,writeFileSync as xI}from"fs";import{dirname as bI,resolve as OA}from"path";import vJ from"process";import{Buffer as zw}from"buffer";import{createCipheriv as E7,createDecipheriv as T7,randomBytes as fJ}from"crypto";import{closeSync as RJ,createReadStream as Dj,createWriteStream as H7,existsSync as MJ,fsyncSync as xj,openSync as Pj,writeFileSync as f7}from"fs";import{access as R7,constants as bj,mkdir as M7,readdir as UA,rename as uj,stat as aw,unlink as WA,writeFile as IJ}from"fs/promises";import{join as sw}from"path";import y0 from"process";import{pipeline as I7}from"stream/promises";import{createGzip as vj}from"zlib";import ow from"process";import b$ from"process";import{Buffer as x$}from"buffer";import{createCipheriv as V7,createDecipheriv as C7,randomBytes as VJ}from"crypto";import{closeSync as CJ,createReadStream as cj,createWriteStream as Q7,existsSync as BA,fsyncSync as ij,openSync as mj,writeFileSync as y7}from"fs";import{access as L7,constants as gj,mkdir as O7,readdir as jA,rename as dj,stat as ew,unlink as zA,writeFile as QJ}from"fs/promises";import{isAbsolute as _7,join as $1,resolve as S7}from"path";import k from"process";import{pipeline as Z7}from"stream/promises";import{createGzip as lj}from"zlib";import w1 from"process";import u$ from"process";import GA from"process";import{existsSync as KA}from"fs";import{resolve as yJ}from"path";import{existsSync as h7}from"fs";import{existsSync as k7,readdirSync as D7}from"fs";import{extname as LJ,resolve as nj}from"path";import x7 from"process";import{join as P7,relative as b7,resolve as pj}from"path";import _A from"process";import{Buffer as P$}from"buffer";import{createCipheriv as u7,createDecipheriv as v7,randomBytes as OJ}from"crypto";import{closeSync as _J,createReadStream as rj,createWriteStream as c7,existsSync as FA,fsyncSync as tj,openSync as aj,writeFileSync as i7}from"fs";import{access as m7,constants as sj,mkdir as g7,readdir as NA,rename as oj,stat as Y1,unlink as qA,writeFile as SJ}from"fs/promises";import{isAbsolute as d7,join as A1,resolve as l7}from"path";import D from"process";import{pipeline as n7}from"stream/promises";import{createGzip as ej}from"zlib";import X1 from"process";import v$ from"process";import TA from"process";import{existsSync as HA}from"fs";import{resolve as PJ}from"path";import{existsSync as KN}from"fs";class F9{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!Lj($))return!0;return Oj($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=Lj(Y)?Oj(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class N9{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function t7($,w){this[$]=r7.bind(null,w)}class sJ{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!_j($))return!0;return Sj($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=_j(Y)?Sj(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class oJ{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function o7($,w={}){let A=Object.keys(w).sort().map((X)=>`${X}:${w[X]}`).join("|");return A?`${$}:${A}`:$}function e7($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function $F($){return $.getStats().size*2}function eJ($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&$0(w[0])&&"id"in w[0]&&w[0].id===3&&$0(w[1])&&"id"in w[1]&&w[1].id===4)return w;if($0(w)&&$0($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if($0($)&&"arr"in $&&Array.isArray($.arr)&&$0(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&$0(w[0])&&$0($[0])){let A=[...w];for(let X of $)if($0(X)&&"name"in X){if(!A.find((U)=>$0(U)&&("name"in U)&&U.name===X.name))A.push(X)}else if($0(X)&&"path"in X){if(!A.find((U)=>$0(U)&&("path"in U)&&U.path===X.path))A.push(X)}else if(!A.some((J)=>SA(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!$0(w)||!$0($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if($0(X)&&$0(Y[A]))Y[A]=eJ(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&$0(X[0])&&$0(Y[A][0])){let J=[...X];for(let U of Y[A])if($0(U)&&"name"in U){if(!J.find((W)=>$0(W)&&("name"in W)&&W.name===U.name))J.push(U)}else if($0(U)&&"path"in U){if(!J.find((W)=>$0(W)&&("path"in W)&&W.path===U.path))J.push(U)}else if(!J.some((B)=>SA(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function SA($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!SA($[Y],w[Y]))return!1;return!0}if($0($)&&$0(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!SA($[X],w[X]))return!1}return!0}return!1}function $0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function wF($,w){if(!E9($))return null;try{let Y=await import($),A=Y.default||Y;if(typeof A!=="object"||A===null||Array.isArray(A))return null;try{return eJ(w,A)}catch{return null}}catch{return null}}async function YF({name:$="",cwd:w,defaultConfig:Y}){let A=w||vJ.cwd(),X=[".ts",".js",".mjs",".cjs",".json"],J=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of J)for(let B of X){let W=OA(A,`${U}${B}`),j=await wF(W,Y);if(j!==null)return j}try{let U=OA(A,"package.json");if(E9(U)){let W=(await import(U))[$];if(W&&typeof W==="object"&&!Array.isArray(W))try{return eJ(Y,W)}catch{}}}catch{}return Y}function AF($,w={}){let Y=LA.cwd();while(Y.includes("storage"))Y=kj(Y,"..");let A=kj(Y,$||"");if(w?.relative)return q7(LA.cwd(),A);return A}async function XF(){try{let $=await YF({name:"clarity",defaultConfig:MA,cwd:LA.cwd(),endpoint:"",headers:{}});return{...MA,...$}}catch{return MA}}function U0(){if(b$.env.NODE_ENV==="test"||b$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function JF(){if(b$.env.NODE_ENV==="test"||b$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof b$<"u"){let $=b$.type;if($==="renderer"||$==="worker")return!1;return!!(b$.versions&&(b$.versions.node||b$.versions.bun))}return!1}class H9{async format($){let w=await JF(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:ow.pid,hostname:w(),environment:ow.env.NODE_ENV||"development",platform:ow.platform,version:ow.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:ow.env.NODE_ENV||ow.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class ZA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...iJ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new H9,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??y0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...IA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...IA};return{...IA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:iJ.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await R7(this.config.logDirectory,bj.F_OK|bj.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await M7(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:zw.from($);try{if(!MJ(this.currentLogFile))await IJ(this.currentLogFile,"",{mode:420});if(X=Pj(this.currentLogFile,"a",420),f7(X,W,{flag:"a"}),xj(X),X!==void 0)RJ(X),X=void 0;if((await aw(this.currentLogFile)).size===0){if(await IJ(this.currentLogFile,W,{flag:"w",mode:420}),(await aw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let K=B*2**J;await new Promise((F)=>setTimeout(F,K)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{RJ(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return sw(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return sw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return sw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(U0())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return fJ(16).toString("hex")}generateKey(){return fJ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=fJ(16),A=E7("aes-256-gcm",w,Y),X=zw.concat([A.update($,"utf8"),A.final()]),J=A.getAuthTag();return{encrypted:zw.concat([Y,X,J]),iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=vj(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(zw.from(zw.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(U0())return;let $=await aw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await UA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await aw(Y).catch(()=>null))try{if(await uj(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await WA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await IJ(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await aw(Y).catch(()=>null))await uj(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await UA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await WA(sw(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=Dj($),A=H7(w),X=vj();await I7(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);await this.writeToFile(A),console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(w),console.log(w);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue($)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue($){return{debug:0,info:1,success:2,warning:3,error:4}[$]}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),MJ(this.currentLogFile))try{let $=Pj(this.currentLogFile,"r+");xj($),RJ($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!U0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await UA(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await WA(sw(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.fancy?a.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=y0.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${a.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);if(this.fancy&&!U0()){let j=O9[$],z=this.options.showTags!==!1&&this.name?a.gray(this.formatTag(this.name)):"",G;switch($){case"debug":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:a.gray(U),level:$}),console.error(G);break;case"info":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G);break;case"success":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:a.green(U),level:$}),console.error(G);break;case"warning":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.warn(G);break;case"error":if(G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G),B){let K=B.split(`
5
+ `);for(let F of K)if(F.trim()&&!F.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:a.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!U0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${J} ${this.environment}.${$.toUpperCase()}: ${U}
6
6
  `;if(B)W+=`${B}
7
- `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!U0()){let Y=this.options.showTags!==!1&&this.name?t.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:t.blue("◐"),tag:Y,message:`${t.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
8
- `,j=j.replace(this.ANSI_PATTERN,""),this.fancy&&!U0()){let z=this.options.showTags!==!1&&this.name?t.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:t.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!U0())console.error(j.trim());await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new CA(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(U0())throw Error("createReadStream is not supported in browser environments");if(!zJ(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Vj(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=Bw.isBuffer($)?$:Bw.from($,"base64"),X=A.slice(0,16),J=A.slice(-16),U=A.slice(16,-16),B=JK("aes-256-gcm",Y,X);return B.setAuthTag(J),Bw.concat([B.update(U),B.final()]).toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return U0()}isServerMode(){return!U0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w);if(this.fancy&&!U0()){let J=$.split(`
9
- `),U=Math.max(...J.map((z)=>z.length))+2,B=`┌${"─".repeat(U)}┐`,W=`└${"─".repeat(U)}┘`,j=J.map((z)=>{let G=" ".repeat(U-z.length-2);return`│ ${z}${G} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Y,message:t.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Y,message:t.cyan(B)})),j.forEach((z)=>console.error(this.formatConsoleMessage({timestamp:Y,message:t.cyan(z),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Y,message:t.cyan(W),showTimestamp:!1}))}else if(!U0())console.error(`${A} ${this.environment}.INFO: [BOX] ${$}`);let X=`${A} ${this.environment}.INFO: [BOX] ${$}
10
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(X)}async prompt($){if(U0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${t.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();Q0.stdin.removeListener("data",Y);try{if(typeof Q0.stdin.setRawMode==="function")Q0.stdin.setRawMode(!1)}catch{}Q0.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof Q0.stdin.setRawMode==="function")Q0.stdin.setRawMode(!0)}catch{}Q0.stdin.resume(),Q0.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,B=0;if(Y=$.replace(U,(W,j)=>{if(j==="%")return"%";if(B>=w.length)return W;let z=w[B++];switch(j){case"s":return String(z);case"d":case"i":return Number(z).toString();case"j":case"o":return JSON.stringify(z,null,2);default:return W}}),B<w.length)Y+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}if(this.fancy&&!U0()){let U=this.options.showTags!==!1&&this.name?t.gray(this.formatTag(this.name)):"",B=t.blue("◐");console.error(`${B} ${U} ${t.cyan(Y)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
11
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(J)}progress($,w=""){if(!this.enabled||!this.fancy||U0()||$<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let Y=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:Y,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(U,B)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||U0())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,U)),B!==void 0)this.activeProgressBar.message=B;let W=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,W)},finish:(U)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||U0())return;if(this.activeProgressBar.current=this.activeProgressBar.total,U!==void 0)this.activeProgressBar.message=U;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(U,B="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||U0())return;Q0.stdout.write(`${"\r".padEnd(Q0.stdout.columns||80)}\r`),this.log(B,U),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||U0()||!Q0.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=t.green("━".repeat(A)),U=t.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=w||Y===100?t.green("✓"):t.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${t.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=Q0.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,Q0.stdout.write($.lastRenderedLine),w)Q0.stdout.write(`
12
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||U0()||!Q0.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(U0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await $A(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=tw(this.config.logDirectory,A);if($.before)try{if((await rw(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await wA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function NA($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&l(w[0])&&"id"in w[0]&&w[0].id===3&&l(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(l(w)&&l($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(l($)&&"arr"in $&&Array.isArray($.arr)&&l(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&l(w[0])&&l($[0])){let A=[...w];for(let X of $)if(l(X)&&"name"in X){if(!A.find((U)=>l(U)&&("name"in U)&&U.name===X.name))A.push(X)}else if(l(X)&&"path"in X){if(!A.find((U)=>l(U)&&("path"in U)&&U.path===X.path))A.push(X)}else if(!A.some((J)=>QA(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!l(w)||!l($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(l(X)&&l(Y[A]))Y[A]=NA(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&l(X[0])&&l(Y[A][0])){let J=[...X];for(let U of Y[A])if(l(U)&&"name"in U){if(!J.find((W)=>l(W)&&("name"in W)&&W.name===U.name))J.push(U)}else if(l(U)&&"path"in U){if(!J.find((W)=>l(W)&&("path"in W)&&W.path===U.path))J.push(U)}else if(!J.some((B)=>QA(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function gJ($,w,Y="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return Y==="replace"?w:NA($,w);if(Array.isArray($))return Y==="replace"?w:NA($,w);if(!l(w)||!l($))return w;let A={...$};for(let X of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,X))continue;let J=w[X],U=A[X];if(J===null||J===void 0)continue;if(Array.isArray(J)||Array.isArray(U))if(Y==="replace")A[X]=J;else A[X]=NA(U,J);else if(l(J)&&l(U))A[X]=gJ(U,J,Y);else A[X]=J}return A}function QA($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!QA($[Y],w[Y]))return!1;return!0}if(l($)&&l(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!QA($[X],w[X]))return!1}return!0}return!1}function l($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function zA($,w,Y="replace"){if(!X9($))return null;try{let A=await import($),X=A.default||A;if(typeof X!=="object"||X===null||Array.isArray(X))return null;try{return gJ(w,X,Y)}catch{return null}}catch{return null}}function rK($,w,Y=!1){if(!$)return w;let A=$.toUpperCase().replace(/-/g,"_"),X={...w};function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],F=(f)=>f.replace(/([A-Z])/g,"_$1").toUpperCase(),K=`${A}_${G.map(F).join("_")}`,q=`${A}_${G.map((f)=>f.toUpperCase()).join("_")}`;if(Y)O0.info(`Checking environment variable ${K} for config ${$}.${G.join(".")}`);if(typeof z==="object"&&z!==null&&!Array.isArray(z))W[j]=J(z,G);else{let f=JY.env[K]||JY.env[q];if(f!==void 0){if(Y)O0.info(`Using environment variable ${f?K:q} for config ${$}.${G.join(".")}`);if(typeof z==="number")W[j]=Number(f);else if(typeof z==="boolean")W[j]=f.toLowerCase()==="true";else if(Array.isArray(z))try{let E=JSON.parse(f);if(Array.isArray(E))W[j]=E;else W[j]=f.split(",").map((H)=>H.trim())}catch{W[j]=f.split(",").map((E)=>E.trim())}else W[j]=f}}}return W}return J(X)}async function tK({name:$="",alias:w,cwd:Y,configDir:A,defaultConfig:X,verbose:J=!1,checkEnv:U=!0,arrayStrategy:B="replace"}){let W=U&&typeof X==="object"&&X!==null&&!Array.isArray(X)?rK($,X,J):X,j=Y||JY.cwd(),z=[".ts",".js",".mjs",".cjs",".json"];if(J)O0.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${j}`);let G=[$,`.${$}`].filter(Boolean),F=[`${$}.config`,`.${$}.config`].filter(Boolean),K=w?[w,`.${w}`]:[],q=w?[`${w}.config`,`.${w}.config`]:[],f=Array.from(new Set([j,c0(j,"config"),c0(j,".config"),A?c0(j,A):void 0].filter(Boolean)));for(let E of f){if(J)O0.info(`Searching for configuration in: ${E}`);let M=[c0(j,"config"),c0(j,".config")].concat(A?[c0(j,A)]:[]).includes(E)?[...G,...F,...K,...q]:[...F,...G,...q,...K];for(let y of M)for(let Q of z){let T=c0(E,`${y}${Q}`),I=await zA(T,W,B);if(I!==null){if(J)O0.success(`Configuration loaded from: ${T}`);return I}}}if($){let E=c0(WJ(),".config",$),H=["config",`${$}.config`];if(w)H.push(`${w}.config`);if(J)O0.info(`Checking user config directory: ${E}`);for(let M of H)for(let y of z){let Q=c0(E,`${M}${y}`),T=await zA(Q,W,B);if(T!==null){if(J)O0.success(`Configuration loaded from user config directory: ${Q}`);return T}}}if($){let E=c0(WJ(),".config"),H=[`.${$}.config`];if(w)H.push(`.${w}.config`);if(J)O0.info(`Checking user config directory for dotfile configs: ${E}`);for(let M of H)for(let y of z){let Q=c0(E,`${M}${y}`),T=await zA(Q,W,B);if(T!==null){if(J)O0.success(`Configuration loaded from user config directory dotfile: ${Q}`);return T}}}if($){let E=WJ(),H=[`.${$}.config`,`.${$}`];if(w)H.push(`.${w}.config`),H.push(`.${w}`);if(J)O0.info(`Checking user home directory for dotfile configs: ${E}`);for(let M of H)for(let y of z){let Q=c0(E,`${M}${y}`),T=await zA(Q,W,B);if(T!==null){if(J)O0.success(`Configuration loaded from user home directory: ${Q}`);return T}}}try{let E=c0(j,"package.json");if(X9(E)){let H=await import(E),M=H[$];if(!M&&w){if(M=H[w],M&&J)O0.success(`Using alias "${w}" configuration from package.json`)}if(M&&typeof M==="object"&&!Array.isArray(M))try{if(J)O0.success(`Configuration loaded from package.json: ${M===H[$]?$:w}`);return gJ(W,M,B)}catch(y){if(J)O0.warn("Failed to merge package.json config:",y)}}}catch(E){if(J)O0.warn("Failed to load package.json:",E)}if(J)O0.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function aK($,w={}){let Y=RA.cwd();while(Y.includes("storage"))Y=Mj(Y,"..");let A=Mj(Y,$||"");if(w?.relative)return wK(RA.cwd(),A);return A}async function sK(){try{let $=await tK({name:"clarity",alias:"logging",defaultConfig:EA,cwd:RA.cwd()});return{...EA,...$||{}}}catch{return EA}}function K0(){if(x$.env.NODE_ENV==="test"||x$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function oK(){if(x$.env.NODE_ENV==="test"||x$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof x$<"u"){let $=x$.type;if($==="renderer"||$==="worker")return!1;return!!(x$.versions&&(x$.versions.node||x$.versions.bun))}return!1}class B9{async format($){let w=await oK(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:ew.pid,hostname:w(),environment:ew.env.NODE_ENV||"development",platform:ew.platform,version:ew.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:ew.env.NODE_ENV||ew.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class LA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...hJ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new B9,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??k.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...HA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...HA};return{...HA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:hJ.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!K0()&&this.config.writeToFile===!0}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await fK(this.config.logDirectory,Zj.F_OK|Zj.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await qK(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:Z$.from($);try{if(!YA(this.currentLogFile))await NJ(this.currentLogFile,"",{mode:420});if(X=hj(this.currentLogFile,"a",420),NK(X,W,{flag:"a"}),Sj(X),X!==void 0)KJ(X),X=void 0;if((await sw(this.currentLogFile)).size===0){if(await NJ(this.currentLogFile,W,{flag:"w",mode:420}),(await sw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let F=B*2**J;await new Promise((K)=>setTimeout(K,F)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{KJ(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return ow(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return ow(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return ow(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(K0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return FJ(16).toString("hex")}generateKey(){return FJ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=FJ(16),A=GK("aes-256-gcm",w,Y),X=Z$.isBuffer($)?$:Z$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=Z$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=Dj(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(Z$.from(Z$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(K0())return;if(!this.shouldWriteToFile())return;let $=await sw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await AA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await sw(Y).catch(()=>null))try{if(await kj(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await XA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await NJ(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await sw(Y).catch(()=>null))await kj(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await AA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await XA(ow(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=_j($),A=KK(w),X=Dj();await TK(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),YA(this.currentLogFile))try{let $=hj(this.currentLogFile,"r+");Sj($),KJ($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!K0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await AA(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await XA(ow(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?u.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||K0())return!1;let $=typeof k.env.NO_COLOR<"u",w=k.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof k.stderr<"u"&&k.stderr.isTTY||typeof k.stdout<"u"&&k.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=k.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${u.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=u.underline(u.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>u.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>u.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>u.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>u.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>u.strikethrough(A)),w}supportsHyperlinks(){if(K0())return!1;let $=k.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=k.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(EK(w)||w.startsWith("./")||w.startsWith("../"))w=HK(w);else return null;return YA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":H9[$],F=this.options.showTags!==!1&&this.name?u.gray(this.formatTag(this.name)):"",K;switch($){case"debug":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:u.gray(W),level:$}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"success":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:u.green(W),level:$}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.error(K),B){let q=B.split(`
13
- `);for(let f of q)if(f.trim()&&!f.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:u.gray(` ${f}`),level:$,showTimestamp:!1}))}break}}else if(!K0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
7
+ `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!U0()){let Y=this.options.showTags!==!1&&this.name?a.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:a.blue("◐"),tag:Y,message:`${a.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
8
+ `,j=j.replace(this.ANSI_PATTERN,""),this.fancy&&!U0()){let z=this.options.showTags!==!1&&this.name?a.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:a.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!U0())console.error(j.trim());await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new ZA(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(U0())throw Error("createReadStream is not supported in browser environments");if(!MJ(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Dj(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=zw.isBuffer($)?$:zw.from($,"base64"),X=A.slice(0,16),J=A.slice(-16),U=A.slice(16,-16),B=T7("aes-256-gcm",Y,X);return B.setAuthTag(J),zw.concat([B.update(U),B.final()]).toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return U0()}isServerMode(){return!U0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w);if(this.fancy&&!U0()){let J=$.split(`
9
+ `),U=Math.max(...J.map((z)=>z.length))+2,B=`┌${"─".repeat(U)}┐`,W=`└${"─".repeat(U)}┘`,j=J.map((z)=>{let G=" ".repeat(U-z.length-2);return`│ ${z}${G} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Y,message:a.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Y,message:a.cyan(B)})),j.forEach((z)=>console.error(this.formatConsoleMessage({timestamp:Y,message:a.cyan(z),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Y,message:a.cyan(W),showTimestamp:!1}))}else if(!U0())console.error(`${A} ${this.environment}.INFO: [BOX] ${$}`);let X=`${A} ${this.environment}.INFO: [BOX] ${$}
10
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(X)}async prompt($){if(U0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${a.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();y0.stdin.removeListener("data",Y);try{if(typeof y0.stdin.setRawMode==="function")y0.stdin.setRawMode(!1)}catch{}y0.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof y0.stdin.setRawMode==="function")y0.stdin.setRawMode(!0)}catch{}y0.stdin.resume(),y0.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,B=0;if(Y=$.replace(U,(W,j)=>{if(j==="%")return"%";if(B>=w.length)return W;let z=w[B++];switch(j){case"s":return String(z);case"d":case"i":return Number(z).toString();case"j":case"o":return JSON.stringify(z,null,2);default:return W}}),B<w.length)Y+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}if(this.fancy&&!U0()){let U=this.options.showTags!==!1&&this.name?a.gray(this.formatTag(this.name)):"",B=a.blue("◐");console.error(`${B} ${U} ${a.cyan(Y)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
11
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(J)}progress($,w=""){if(!this.enabled||!this.fancy||U0()||$<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let Y=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:Y,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(U,B)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||U0())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,U)),B!==void 0)this.activeProgressBar.message=B;let W=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,W)},finish:(U)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||U0())return;if(this.activeProgressBar.current=this.activeProgressBar.total,U!==void 0)this.activeProgressBar.message=U;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(U,B="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||U0())return;y0.stdout.write(`${"\r".padEnd(y0.stdout.columns||80)}\r`),this.log(B,U),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||U0()||!y0.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=a.green("━".repeat(A)),U=a.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=w||Y===100?a.green("✓"):a.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${a.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=y0.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,y0.stdout.write($.lastRenderedLine),w)y0.stdout.write(`
12
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||U0()||!y0.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(U0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await UA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=sw(this.config.logDirectory,A);if($.before)try{if((await aw(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await WA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function RA($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&d(w[0])&&"id"in w[0]&&w[0].id===3&&d(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(d(w)&&d($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(d($)&&"arr"in $&&Array.isArray($.arr)&&d(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&d(w[0])&&d($[0])){let A=[...w];for(let X of $)if(d(X)&&"name"in X){if(!A.find((U)=>d(U)&&("name"in U)&&U.name===X.name))A.push(X)}else if(d(X)&&"path"in X){if(!A.find((U)=>d(U)&&("path"in U)&&U.path===X.path))A.push(X)}else if(!A.some((J)=>hA(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!d(w)||!d($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(d(X)&&d(Y[A]))Y[A]=RA(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&d(X[0])&&d(Y[A][0])){let J=[...X];for(let U of Y[A])if(d(U)&&"name"in U){if(!J.find((W)=>d(W)&&("name"in W)&&W.name===U.name))J.push(U)}else if(d(U)&&"path"in U){if(!J.find((W)=>d(W)&&("path"in W)&&W.path===U.path))J.push(U)}else if(!J.some((B)=>hA(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function $U($,w,Y="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return Y==="replace"?w:RA($,w);if(Array.isArray($))return Y==="replace"?w:RA($,w);if(!d(w)||!d($))return w;let A={...$};for(let X of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,X))continue;let J=w[X],U=A[X];if(J===null||J===void 0)continue;if(Array.isArray(J)||Array.isArray(U))if(Y==="replace")A[X]=J;else A[X]=RA(U,J);else if(d(J)&&d(U))A[X]=$U(U,J,Y);else A[X]=J}return A}function hA($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!hA($[Y],w[Y]))return!1;return!0}if(d($)&&d(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!hA($[X],w[X]))return!1}return!0}return!1}function d($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function EA($,w,Y="replace"){if(!q9($))return null;try{let A=await import($),X=A.default||A;if(typeof X!=="object"||X===null||Array.isArray(X))return null;try{return $U(w,X,Y)}catch{return null}}catch{return null}}function UF($,w,Y=!1){if(!$)return w;let A=$.toUpperCase().replace(/-/g,"_"),X={...w};function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],K=(q)=>q.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${A}_${G.map(K).join("_")}`,T=`${A}_${G.map((q)=>q.toUpperCase()).join("_")}`;if(Y)O0.info(`Checking environment variable ${F} for config ${$}.${G.join(".")}`);if(typeof z==="object"&&z!==null&&!Array.isArray(z))W[j]=J(z,G);else{let q=zY.env[F]||zY.env[T];if(q!==void 0){if(Y)O0.info(`Using environment variable ${q?F:T} for config ${$}.${G.join(".")}`);if(typeof z==="number")W[j]=Number(q);else if(typeof z==="boolean")W[j]=q.toLowerCase()==="true";else if(Array.isArray(z))try{let E=JSON.parse(q);if(Array.isArray(E))W[j]=E;else W[j]=q.split(",").map((H)=>H.trim())}catch{W[j]=q.split(",").map((E)=>E.trim())}else W[j]=q}}}return W}return J(X)}async function WF({name:$="",alias:w,cwd:Y,configDir:A,defaultConfig:X,verbose:J=!1,checkEnv:U=!0,arrayStrategy:B="replace"}){let W=U&&typeof X==="object"&&X!==null&&!Array.isArray(X)?UF($,X,J):X,j=Y||zY.cwd(),z=[".ts",".js",".mjs",".cjs",".json"];if(J)O0.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${j}`);let G=[$,`.${$}`].filter(Boolean),K=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],q=Array.from(new Set([j,v0(j,"config"),v0(j,".config"),A?v0(j,A):void 0].filter(Boolean)));for(let E of q){if(J)O0.info(`Searching for configuration in: ${E}`);let M=[v0(j,"config"),v0(j,".config")].concat(A?[v0(j,A)]:[]).includes(E)?[...G,...K,...F,...T]:[...K,...G,...T,...F];for(let Q of M)for(let V of z){let f=v0(E,`${Q}${V}`),I=await EA(f,W,B);if(I!==null){if(J)O0.success(`Configuration loaded from: ${f}`);return I}}}if($){let E=v0(HJ(),".config",$),H=["config",`${$}.config`];if(w)H.push(`${w}.config`);if(J)O0.info(`Checking user config directory: ${E}`);for(let M of H)for(let Q of z){let V=v0(E,`${M}${Q}`),f=await EA(V,W,B);if(f!==null){if(J)O0.success(`Configuration loaded from user config directory: ${V}`);return f}}}if($){let E=v0(HJ(),".config"),H=[`.${$}.config`];if(w)H.push(`.${w}.config`);if(J)O0.info(`Checking user config directory for dotfile configs: ${E}`);for(let M of H)for(let Q of z){let V=v0(E,`${M}${Q}`),f=await EA(V,W,B);if(f!==null){if(J)O0.success(`Configuration loaded from user config directory dotfile: ${V}`);return f}}}if($){let E=HJ(),H=[`.${$}.config`,`.${$}`];if(w)H.push(`.${w}.config`),H.push(`.${w}`);if(J)O0.info(`Checking user home directory for dotfile configs: ${E}`);for(let M of H)for(let Q of z){let V=v0(E,`${M}${Q}`),f=await EA(V,W,B);if(f!==null){if(J)O0.success(`Configuration loaded from user home directory: ${V}`);return f}}}try{let E=v0(j,"package.json");if(q9(E)){let H=await import(E),M=H[$];if(!M&&w){if(M=H[w],M&&J)O0.success(`Using alias "${w}" configuration from package.json`)}if(M&&typeof M==="object"&&!Array.isArray(M))try{if(J)O0.success(`Configuration loaded from package.json: ${M===H[$]?$:w}`);return $U(W,M,B)}catch(Q){if(J)O0.warn("Failed to merge package.json config:",Q)}}}catch(E){if(J)O0.warn("Failed to load package.json:",E)}if(J)O0.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function BF($,w={}){let Y=yA.cwd();while(Y.includes("storage"))Y=hj(Y,"..");let A=hj(Y,$||"");if(w?.relative)return F7(yA.cwd(),A);return A}async function jF(){try{let $=await WF({name:"clarity",alias:"logging",defaultConfig:VA,cwd:yA.cwd()});return{...VA,...$||{}}}catch{return VA}}function F0(){if(u$.env.NODE_ENV==="test"||u$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function zF(){if(u$.env.NODE_ENV==="test"||u$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof u$<"u"){let $=u$.type;if($==="renderer"||$==="worker")return!1;return!!(u$.versions&&(u$.versions.node||u$.versions.bun))}return!1}class f9{async format($){let w=await zF(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:w1.pid,hostname:w(),environment:w1.env.NODE_ENV||"development",platform:w1.platform,version:w1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:w1.env.NODE_ENV||w1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class kA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...mJ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new f9,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??k.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...CA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...CA};return{...CA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:mJ.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!F0()&&this.config.writeToFile===!0}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await L7(this.config.logDirectory,gj.F_OK|gj.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await O7(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:x$.from($);try{if(!BA(this.currentLogFile))await QJ(this.currentLogFile,"",{mode:420});if(X=mj(this.currentLogFile,"a",420),y7(X,W,{flag:"a"}),ij(X),X!==void 0)CJ(X),X=void 0;if((await ew(this.currentLogFile)).size===0){if(await QJ(this.currentLogFile,W,{flag:"w",mode:420}),(await ew(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let K=B*2**J;await new Promise((F)=>setTimeout(F,K)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{CJ(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return $1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return $1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return $1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(F0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return VJ(16).toString("hex")}generateKey(){return VJ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=VJ(16),A=V7("aes-256-gcm",w,Y),X=x$.isBuffer($)?$:x$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=x$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=lj(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(x$.from(x$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(F0())return;if(!this.shouldWriteToFile())return;let $=await ew(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await jA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await ew(Y).catch(()=>null))try{if(await dj(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await zA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await QJ(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await ew(Y).catch(()=>null))await dj(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await jA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await zA($1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=cj($),A=Q7(w),X=lj();await Z7(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),BA(this.currentLogFile))try{let $=mj(this.currentLogFile,"r+");ij($),CJ($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!F0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await jA(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await zA($1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?u.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||F0())return!1;let $=typeof k.env.NO_COLOR<"u",w=k.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof k.stderr<"u"&&k.stderr.isTTY||typeof k.stdout<"u"&&k.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=k.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${u.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=u.underline(u.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>u.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>u.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>u.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>u.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>u.strikethrough(A)),w}supportsHyperlinks(){if(F0())return!1;let $=k.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=k.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(_7(w)||w.startsWith("./")||w.startsWith("../"))w=S7(w);else return null;return BA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":_9[$],K=this.options.showTags!==!1&&this.name?u.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:u.gray(W),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:u.green(W),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.error(F),B){let T=B.split(`
13
+ `);for(let q of T)if(q.trim()&&!q.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:u.gray(` ${q}`),level:$,showTimestamp:!1}))}break}}else if(!F0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
14
14
  `;if(B)z+=`${B}
15
- `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!K0()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(B,W)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,B),this.activeProgressBar.total),W!==void 0)this.activeProgressBar.message=W;if(this.shouldStyleConsole()&&!K0()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!K0()&&k.stdout.isTTY)k.stdout.write(`
16
- `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!K0()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?u.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":u.blue("◐"),tag:Y,message:`${u.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
17
- `,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?u.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":u.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!K0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new LA(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(K0())throw Error("createReadStream is not supported in browser environments");if(!YA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return _j(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=Z$.isBuffer($)?$:Z$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=FK("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=Z$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return K0()}isServerMode(){return!K0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
18
- `),W=Math.max(...B.map((F)=>F.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((F)=>{return this.formatConsoleMessage({timestamp:Y,message:u.cyan(F),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:u.cyan(j),showTimestamp:!1})),G.forEach((F)=>console.error(F)),console.error(this.formatConsoleMessage({timestamp:Y,message:u.cyan(z),showTimestamp:!1}))}else if(!K0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
19
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(K0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${u.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();k.stdin.removeListener("data",Y);try{if(typeof k.stdin.setRawMode==="function")k.stdin.setRawMode(!1)}catch{}k.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof k.stdin.setRawMode==="function")k.stdin.setRawMode(!0)}catch{}k.stdin.resume(),k.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,j=0;if(Y=$.replace(W,(z,G)=>{if(G==="%")return"%";if(j>=w.length)return z;let F=w[j++];switch(G){case"s":return String(F);case"d":case"i":return Number(F).toString();case"j":case"o":return JSON.stringify(F,null,2);default:return z}}),j<w.length)Y+=` ${w.slice(j).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?u.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${u.blue("◐")} `;console.error(`${j}${W} ${u.cyan(A)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
20
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!k.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=u.green("━".repeat(A)),U=u.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?u.green("✓"):u.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${u.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=k.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,k.stdout.write($.lastRenderedLine),w)k.stdout.write(`
21
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||K0()||!k.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(K0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await AA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=ow(this.config.logDirectory,A);if($.before)try{if((await sw(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await XA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function j9($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function z9($){return $ instanceof a0}function eK($){return $ instanceof OA}function $7($){if(z9($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((Y)=>$.message.toLowerCase().includes(Y.toLowerCase()))}class DA{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return BY.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=JA.env[W]||(j?JA.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=JA.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof _A)throw G;throw jw.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw jw.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(JA.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
15
+ `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!F0()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(B,W)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,B),this.activeProgressBar.total),W!==void 0)this.activeProgressBar.message=W;if(this.shouldStyleConsole()&&!F0()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!F0()&&k.stdout.isTTY)k.stdout.write(`
16
+ `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!F0()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?u.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":u.blue("◐"),tag:Y,message:`${u.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
17
+ `,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?u.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":u.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!F0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new kA(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(F0())throw Error("createReadStream is not supported in browser environments");if(!BA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return cj(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=x$.isBuffer($)?$:x$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=C7("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=x$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return F0()}isServerMode(){return!F0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
18
+ `),W=Math.max(...B.map((K)=>K.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((K)=>{return this.formatConsoleMessage({timestamp:Y,message:u.cyan(K),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:u.cyan(j),showTimestamp:!1})),G.forEach((K)=>console.error(K)),console.error(this.formatConsoleMessage({timestamp:Y,message:u.cyan(z),showTimestamp:!1}))}else if(!F0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
19
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(F0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${u.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();k.stdin.removeListener("data",Y);try{if(typeof k.stdin.setRawMode==="function")k.stdin.setRawMode(!1)}catch{}k.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof k.stdin.setRawMode==="function")k.stdin.setRawMode(!0)}catch{}k.stdin.resume(),k.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,j=0;if(Y=$.replace(W,(z,G)=>{if(G==="%")return"%";if(j>=w.length)return z;let K=w[j++];switch(G){case"s":return String(K);case"d":case"i":return Number(K).toString();case"j":case"o":return JSON.stringify(K,null,2);default:return z}}),j<w.length)Y+=` ${w.slice(j).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?u.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${u.blue("◐")} `;console.error(`${j}${W} ${u.cyan(A)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
20
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!k.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=u.green("━".repeat(A)),U=u.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?u.green("✓"):u.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${u.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=k.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,k.stdout.write($.lastRenderedLine),w)k.stdout.write(`
21
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||F0()||!k.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(F0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await jA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=$1(this.config.logDirectory,A);if($.before)try{if((await ew(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await zA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function R9($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function M9($){return $ instanceof a0}function GF($){return $ instanceof DA}function KF($){if(M9($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((Y)=>$.message.toLowerCase().includes(Y.toLowerCase()))}class cA{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return FY.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=GA.env[W]||(j?GA.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=GA.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof xA)throw G;throw Gw.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw Gw.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(GA.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
22
22
 
23
23
  `;for(let A of $)Y+=`${A.key}
24
24
  `,Y+=` Type: ${A.type}
@@ -30,25 +30,25 @@ import{createRequire as l6}from"node:module";var i6=Object.defineProperty;var m6
30
30
  `;Y+=`| Variable | Type | Description | Example |
31
31
  `,Y+=`|----------|------|-------------|----------|
32
32
  `;for(let A of $)Y+=`| \`${A.key}\` | ${A.type} | ${A.description} | \`${A.example}\` |
33
- `;return Y}}function w7($,w){let Y=f9("process");if(typeof Y>"u"||!Y.env)return w;let A=Y.env[$];return A!==void 0?A:w}function G9($,w,Y={}){return F9($,w,Y,new WeakMap)}function F9($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return K9($,w,X,A);if(!A$(w)||!A$($))return w;return J7($,w,Y,A)}function K9($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return Y7($,w);case"smart":return A7($,w,A);default:return w}return w}function Y7($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>_J(X,A)))Y.push(A);return Y}function A7($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(A$(w[0])&&A$($[0]))return X7($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function X7($,w,Y){let A=[...w];for(let X of $){if(!A$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((j)=>A$(j)&&(B in j)&&j[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function J7($,w,Y,A){let X=w;if(A$(X)&&A.has(X))return A.get(X);let J={...$};if(A$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(A$(B)&&A$(W))J[U]=F9(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=K9(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function lJ($,w,Y="replace"){return G9($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function _J($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!_J($[Y],w[Y]))return!1;return!0}if(A$($)&&A$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!_J($[X],w[X]))return!1}return!0}return!1}function A$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class xA{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=A1.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!UA($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,F="default"in z,K=Object.keys(z).length>0;if(!F&&!K)throw new UY($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new UY($,Error("Configuration must export a valid object"),"unknown");let E={config:lJ(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)A1.setWithFileCheck("file",E,$,J);return E}catch(j){throw j instanceof Error?jw.configLoad($,j):jw.configLoad($,Error(String(j)))}};if(U)return BY.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(fJ(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(Y.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)Y.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return Y.filter(Boolean)}checkFileAccess($){return j9(async()=>{return UA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!UA($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=fJ($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=fJ($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Y)=>Y.test($))}async validateConfigFile($){let w=[];try{if(!UA($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class dJ{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],F={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,F);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],F);else return this.validateWithJSONSchema($,w,F)}catch(K){return z.push({path:"",message:`Validation failed: ${K}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await BY.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!RK(w))throw new WY(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new WY(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:R9},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class nJ{fileLoader=new xA;envProcessor=new DA;validator=new dJ;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),F=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(F||z))throw W;if(G&&(!j||!F))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)F$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw F$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||_w.cwd(),F=[],K=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(K)return F.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(K,F,W,A,z);let q=await this.loadHomeConfiguration(A,X,B,j,z,W);if(q)return F.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(q,F,W,A,z);let f=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(f)return F.push(v0(G,"package.json")),this.finalizeResult(f,F,W,A,z);if(F.push(...this.getAllSearchPaths(A,X,G,U)),w)throw jw.configNotFound(A,F,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${X?` or alias "${X}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?XY($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)F$.info(`Searching for configuration in: ${G}`);let F=this.fileLoader.generateConfigPaths($,G,w),K=await this.fileLoader.tryLoadFromPaths(F,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(K){if(U)F$.success(`Configuration loaded from: ${K.source.path}`);return K}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?XY($,Y,X):Y,B=[v0(pw(),".config",$),v0(pw(),".config"),pw()];for(let W of B){if(X)F$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)F$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?XY($,A,J):A;try{let W=v0(Y,"package.json");if(!LJ(W))return null;let j=await import(W),z=j[$],G=$;if(!z&&w)z=j[w],G=w;if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)F$.success(`Configuration loaded from package.json: ${G}`);return{config:lJ(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)F$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:XY($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw jw.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return A1.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);A1.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias)Y.push(`alias:${w.alias}`);if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,v0($,"config"),v0($,".config"),w?v0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(v0(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[v0(pw(),".config",$),v0(pw(),".config"),pw()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}function gj($){let Y=!($.message.includes("EACCES")||$.message.includes("EPERM")||$.message.includes("permission denied"))&&($.message.includes("syntax")||$.message.includes("Expected")||$.message.includes("Unexpected")||$.message.includes("BuildMessage")),A=$.message.includes("Configuration must export a valid object")||$.message.includes("Configuration file is empty and exports nothing");return Y||A}async function U7($){return b$.loadConfig({...$,__strictErrorHandling:!0})}async function N9($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},Y="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let A;if(Y)A=await b$.loadConfig($);else A=await b$.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return A?.config??w}catch(A){let X=A instanceof Error?A.name:"UnknownError",J=A instanceof Error?A.message:String(A);if(!(X==="ConfigNotFoundError"||X==="ConfigLoadError"||X==="ConfigValidationError"||J.includes("config"))&&$.verbose)F$.warn("Unexpected error loading config, using defaults:",[A instanceof Error?A:Error(String(A))]);let B=Y?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await b$.applyEnvironmentVariables(B.name||"",w,!0,B.verbose||!1))?.config??w;return w}}async function W7($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await b$.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Y){if(Y instanceof Error&&(Y.name==="ConfigNotFoundError"||Y.name==="ConfigLoadError"&&gj(Y)))return(await b$.applyEnvironmentVariables($,{},!0,!1)).config;throw Y}}try{return(await b$.loadConfig({...$,cwd:$.cwd||_w.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&gj(w)))return(await b$.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function B7($,w,Y="replace"){let A=new xA;try{let X=await A.loadFromPath($,w,{arrayStrategy:Y,useCache:!1,trackPerformance:!1});return X?X.config:null}catch{return null}}function XY($,w,Y=!1){let A=new DA,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],F=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((f)=>f.toUpperCase()).join("")}`,`${X}_${G.map((f)=>f.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],K,q;for(let f of F)if(K=_w.env[f],K!==void 0){q=f;break}if(K!==void 0&&q)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(K.toLowerCase());else if(typeof z==="number"){let f=Number(K);if(!Number.isNaN(f))W[j]=f}else if(Array.isArray(z))try{W[j]=JSON.parse(K)}catch{W[j]=K.split(",").map((f)=>f.trim())}else W[j]=K;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}function j7($){let w=v0(_w.cwd(),$.configDir),Y=v0(_w.cwd(),$.generatedDir),A=v0(Y,"config-types.ts");if(!LJ(Rj(A)))sF(Rj(A),{recursive:!0,mode:511});let X=LJ(w)?oF(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],J=`// Generated by bunfig v${u7}
33
+ `;return Y}}function FF($,w){let Y=y9("process");if(typeof Y>"u"||!Y.env)return w;let A=Y.env[$];return A!==void 0?A:w}function I9($,w,Y={}){return V9($,w,Y,new WeakMap)}function V9($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return C9($,w,X,A);if(!A$(w)||!A$($))return w;return TF($,w,Y,A)}function C9($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return NF($,w);case"smart":return qF($,w,A);default:return w}return w}function NF($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>cJ(X,A)))Y.push(A);return Y}function qF($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(A$(w[0])&&A$($[0]))return EF($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function EF($,w,Y){let A=[...w];for(let X of $){if(!A$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((j)=>A$(j)&&(B in j)&&j[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function TF($,w,Y,A){let X=w;if(A$(X)&&A.has(X))return A.get(X);let J={...$};if(A$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(A$(B)&&A$(W))J[U]=V9(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=C9(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function wU($,w,Y="replace"){return I9($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function cJ($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!cJ($[Y],w[Y]))return!1;return!0}if(A$($)&&A$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!cJ($[X],w[X]))return!1}return!0}return!1}function A$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class iA{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=J1.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!KA($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,K="default"in z,F=Object.keys(z).length>0;if(!K&&!F)throw new GY($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new GY($,Error("Configuration must export a valid object"),"unknown");let E={config:wU(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)J1.setWithFileCheck("file",E,$,J);return E}catch(j){throw j instanceof Error?Gw.configLoad($,j):Gw.configLoad($,Error(String(j)))}};if(U)return FY.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(yJ(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(Y.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)Y.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return Y.filter(Boolean)}checkFileAccess($){return R9(async()=>{return KA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!KA($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=yJ($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=yJ($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Y)=>Y.test($))}async validateConfigFile($){let w=[];try{if(!KA($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class YU{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],K={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,K);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],K);else return this.validateWithJSONSchema($,w,K)}catch(F){return z.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await FY.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!h7(w))throw new KY(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new KY(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:Z9},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class AU{fileLoader=new iA;envProcessor=new cA;validator=new YU;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),K=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(K||z))throw W;if(G&&(!j||!K))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)K$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw K$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||Zw.cwd(),K=[],F=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(F)return K.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(F,K,W,A,z);let T=await this.loadHomeConfiguration(A,X,B,j,z,W);if(T)return K.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(T,K,W,A,z);let q=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(q)return K.push(c0(G,"package.json")),this.finalizeResult(q,K,W,A,z);if(K.push(...this.getAllSearchPaths(A,X,G,U)),w)throw Gw.configNotFound(A,K,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${X?` or alias "${X}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?jY($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)K$.info(`Searching for configuration in: ${G}`);let K=this.fileLoader.generateConfigPaths($,G,w),F=await this.fileLoader.tryLoadFromPaths(K,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(F){if(U)K$.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?jY($,Y,X):Y,B=[c0(tw(),".config",$),c0(tw(),".config"),tw()];for(let W of B){if(X)K$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)K$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?jY($,A,J):A;try{let W=c0(Y,"package.json");if(!uJ(W))return null;let j=await import(W),z=j[$],G=$;if(!z&&w)z=j[w],G=w;if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)K$.success(`Configuration loaded from package.json: ${G}`);return{config:wU(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)K$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:jY($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw Gw.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return J1.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);J1.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias)Y.push(`alias:${w.alias}`);if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,c0($,"config"),c0($,".config"),w?c0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(c0(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[c0(tw(),".config",$),c0(tw(),".config"),tw()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}function $9($){let Y=!($.message.includes("EACCES")||$.message.includes("EPERM")||$.message.includes("permission denied"))&&($.message.includes("syntax")||$.message.includes("Expected")||$.message.includes("Unexpected")||$.message.includes("BuildMessage")),A=$.message.includes("Configuration must export a valid object")||$.message.includes("Configuration file is empty and exports nothing");return Y||A}async function HF($){return c$.loadConfig({...$,__strictErrorHandling:!0})}async function Q9($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},Y="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let A;if(Y)A=await c$.loadConfig($);else A=await c$.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return A?.config??w}catch(A){let X=A instanceof Error?A.name:"UnknownError",J=A instanceof Error?A.message:String(A);if(!(X==="ConfigNotFoundError"||X==="ConfigLoadError"||X==="ConfigValidationError"||J.includes("config"))&&$.verbose)K$.warn("Unexpected error loading config, using defaults:",[A instanceof Error?A:Error(String(A))]);let B=Y?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await c$.applyEnvironmentVariables(B.name||"",w,!0,B.verbose||!1))?.config??w;return w}}async function fF($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await c$.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Y){if(Y instanceof Error&&(Y.name==="ConfigNotFoundError"||Y.name==="ConfigLoadError"&&$9(Y)))return(await c$.applyEnvironmentVariables($,{},!0,!1)).config;throw Y}}try{return(await c$.loadConfig({...$,cwd:$.cwd||Zw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&$9(w)))return(await c$.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function RF($,w,Y="replace"){let A=new iA;try{let X=await A.loadFromPath($,w,{arrayStrategy:Y,useCache:!1,trackPerformance:!1});return X?X.config:null}catch{return null}}function jY($,w,Y=!1){let A=new cA,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],K=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((q)=>q.toUpperCase()).join("")}`,`${X}_${G.map((q)=>q.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let q of K)if(F=Zw.env[q],F!==void 0){T=q;break}if(F!==void 0&&T)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(F.toLowerCase());else if(typeof z==="number"){let q=Number(F);if(!Number.isNaN(q))W[j]=q}else if(Array.isArray(z))try{W[j]=JSON.parse(F)}catch{W[j]=F.split(",").map((q)=>q.trim())}else W[j]=F;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}function MF($){let w=c0(Zw.cwd(),$.configDir),Y=c0(Zw.cwd(),$.generatedDir),A=c0(Y,"config-types.ts");if(!uJ(Zj(A)))j7(Zj(A),{recursive:!0,mode:511});let X=uJ(w)?z7(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],J=`// Generated by bunfig v${aF}
34
34
  export type ConfigNames = ${X.length?`'${X.join("' | '")}'`:"string"}
35
- `;eF(A,J,{mode:438})}function z7($){let w=null,Y=null,A=()=>{if(!Y)Y=N9($).then((J)=>{return w=J,J},(J)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)F$.warn("Config loading failed, using defaults:",[J instanceof Error?J:Error(String(J))]);return U});return Y},X="defaultConfig"in $?$.defaultConfig:{};return w=X,A(),new Proxy({},{get(J,U){if(w)return w[U];let B=X[U];return A(),B},has(J,U){return U in(w||X)},ownKeys(){return Object.keys(w||X)},getOwnPropertyDescriptor(J,U){return Object.getOwnPropertyDescriptor(w||X,U)},set(J,U,B){if(!w)w={...X};return w[U]=B,!0}})}function G7($){let w=xj(VK.cwd(),$?.configDir||"./config");function Y(){if(!MK(w))return[];let X=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),J=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=IK(w).filter((W)=>X.has(qJ(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:j}of U){let z=qJ(j).toLowerCase(),G=B.get(W);if(!G){B.set(W,j);continue}let F=qJ(G).toLowerCase();if(J.indexOf(z)<J.indexOf(F))B.set(W,j)}return Array.from(B.entries()).map(([W,j])=>({base:W,file:j})).sort((W,j)=>W.base.localeCompare(j.base))}function A(){let X=Y(),J=X.map((j)=>j.base),U=J.length?J.map((j)=>`'${j}'`).join(" | "):"string",B=X.length?`{
36
- ${X.map((j)=>{let z=xj(w,j.file).replace(/\\/g,"/");return` '${j.base}': typeof import('${z}').default`}).join(`,
35
+ `;G7(A,J,{mode:438})}function IF($){let w=null,Y=null,A=()=>{if(!Y)Y=Q9($).then((J)=>{return w=J,J},(J)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)K$.warn("Config loading failed, using defaults:",[J instanceof Error?J:Error(String(J))]);return U});return Y},X="defaultConfig"in $?$.defaultConfig:{};return w=X,A(),new Proxy({},{get(J,U){if(w)return w[U];let B=X[U];return A(),B},has(J,U){return U in(w||X)},ownKeys(){return Object.keys(w||X)},getOwnPropertyDescriptor(J,U){return Object.getOwnPropertyDescriptor(w||X,U)},set(J,U,B){if(!w)w={...X};return w[U]=B,!0}})}function VF($){let w=nj(x7.cwd(),$?.configDir||"./config");function Y(){if(!k7(w))return[];let X=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),J=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=D7(w).filter((W)=>X.has(LJ(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:j}of U){let z=LJ(j).toLowerCase(),G=B.get(W);if(!G){B.set(W,j);continue}let K=LJ(G).toLowerCase();if(J.indexOf(z)<J.indexOf(K))B.set(W,j)}return Array.from(B.entries()).map(([W,j])=>({base:W,file:j})).sort((W,j)=>W.base.localeCompare(j.base))}function A(){let X=Y(),J=X.map((j)=>j.base),U=J.length?J.map((j)=>`'${j}'`).join(" | "):"string",B=X.length?`{
36
+ ${X.map((j)=>{let z=nj(w,j.file).replace(/\\/g,"/");return` '${j.base}': typeof import('${z}').default`}).join(`,
37
37
  `)}
38
38
  }`:"Record<string, any>";return`export type ConfigNames = ${U}
39
39
  export type ConfigByName = ${B}
40
40
  export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
41
41
  export type ConfigOf = Config
42
- `}return{name:"bunfig-plugin",setup(X){X.onResolve({filter:/^virtual:bunfig-types$/},(J)=>{return{path:J.path,namespace:"bunfig-virtual"}}),X.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:A(),loader:"ts"}})}}}function v7($,w={}){let Y=VA.cwd();while(Y.includes("storage"))Y=Pj(Y,"..");let A=Pj(Y,$||"");if(w?.relative)return CK(VA.cwd(),A);return A}function f0(){if(P$.env.NODE_ENV==="test"||P$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function m7(){if(P$.env.NODE_ENV==="test"||P$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof P$<"u"){let $=P$.type;if($==="renderer"||$==="worker")return!1;return!!(P$.versions&&(P$.versions.node||P$.versions.bun))}return!1}class y9{async format($){let w=await m7(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:Y1.pid,hostname:w(),environment:Y1.env.NODE_ENV||"development",platform:Y1.platform,version:Y1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Y1.env.NODE_ENV||Y1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class PA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...SA},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new y9,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??D.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...yJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...yJ};return{...yJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:SA.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!f0()&&this.config.writeToFile===!0}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await SK(this.config.logDirectory,vj.F_OK|vj.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await hK(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:k$.from($);try{if(!WA(this.currentLogFile))await TJ(this.currentLogFile,"",{mode:420});if(X=cj(this.currentLogFile,"a",420),_K(X,W,{flag:"a"}),uj(X),X!==void 0)HJ(X),X=void 0;if((await $1(this.currentLogFile)).size===0){if(await TJ(this.currentLogFile,W,{flag:"w",mode:420}),(await $1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let F=B*2**J;await new Promise((K)=>setTimeout(K,F)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{HJ(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return w1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return w1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return w1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(f0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return EJ(16).toString("hex")}generateKey(){return EJ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=EJ(16),A=QK("aes-256-gcm",w,Y),X=k$.isBuffer($)?$:k$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=k$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=mj(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(k$.from(k$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(f0())return;if(!this.shouldWriteToFile())return;let $=await $1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await BA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await $1(Y).catch(()=>null))try{if(await ij(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await jA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await TJ(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await $1(Y).catch(()=>null))await ij(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await BA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await jA(w1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=bj($),A=OK(w),X=mj();await DK(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),WA(this.currentLogFile))try{let $=cj(this.currentLogFile,"r+");uj($),HJ($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!f0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await BA(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await jA(w1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?i.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||f0())return!1;let $=typeof D.env.NO_COLOR<"u",w=D.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof D.stderr<"u"&&D.stderr.isTTY||typeof D.stdout<"u"&&D.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=D.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${i.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=i.underline(i.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>i.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>i.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>i.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>i.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>i.strikethrough(A)),w}supportsHyperlinks(){if(f0())return!1;let $=D.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=D.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(ZK(w)||w.startsWith("./")||w.startsWith("../"))w=kK(w);else return null;return WA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){if(!this.shouldLog($))return;let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":p7[$],F=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",K;switch($){case"debug":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:i.gray(W),level:$}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"success":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:i.green(W),level:$}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.error(K),B){let q=B.split(`
43
- `);for(let f of q)if(f.trim()&&!f.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:i.gray(` ${f}`),level:$,showTimestamp:!1}))}break}}else if(!f0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
42
+ `}return{name:"bunfig-plugin",setup(X){X.onResolve({filter:/^virtual:bunfig-types$/},(J)=>{return{path:J.path,namespace:"bunfig-virtual"}}),X.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:A(),loader:"ts"}})}}}function oF($,w={}){let Y=_A.cwd();while(Y.includes("storage"))Y=pj(Y,"..");let A=pj(Y,$||"");if(w?.relative)return b7(_A.cwd(),A);return A}function q0(){if(v$.env.NODE_ENV==="test"||v$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function $N(){if(v$.env.NODE_ENV==="test"||v$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof v$<"u"){let $=v$.type;if($==="renderer"||$==="worker")return!1;return!!(v$.versions&&(v$.versions.node||v$.versions.bun))}return!1}class x9{async format($){let w=await $N(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:X1.pid,hostname:w(),environment:X1.env.NODE_ENV||"development",platform:X1.platform,version:X1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:X1.env.NODE_ENV||X1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class mA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...PA},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new x9,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??D.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...xJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...xJ};return{...xJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:PA.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!q0()&&this.config.writeToFile===!0}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await m7(this.config.logDirectory,sj.F_OK|sj.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await g7(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:P$.from($);try{if(!FA(this.currentLogFile))await SJ(this.currentLogFile,"",{mode:420});if(X=aj(this.currentLogFile,"a",420),i7(X,W,{flag:"a"}),tj(X),X!==void 0)_J(X),X=void 0;if((await Y1(this.currentLogFile)).size===0){if(await SJ(this.currentLogFile,W,{flag:"w",mode:420}),(await Y1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let K=B*2**J;await new Promise((F)=>setTimeout(F,K)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{_J(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return A1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return A1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return A1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(q0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return OJ(16).toString("hex")}generateKey(){return OJ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=OJ(16),A=u7("aes-256-gcm",w,Y),X=P$.isBuffer($)?$:P$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=P$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=ej(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(P$.from(P$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(q0())return;if(!this.shouldWriteToFile())return;let $=await Y1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await NA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await Y1(Y).catch(()=>null))try{if(await oj(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await qA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await SJ(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await Y1(Y).catch(()=>null))await oj(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await NA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await qA(A1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=rj($),A=c7(w),X=ej();await n7(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),FA(this.currentLogFile))try{let $=aj(this.currentLogFile,"r+");tj($),_J($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!q0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await NA(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await qA(A1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?i.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||q0())return!1;let $=typeof D.env.NO_COLOR<"u",w=D.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof D.stderr<"u"&&D.stderr.isTTY||typeof D.stdout<"u"&&D.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=D.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${i.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=i.underline(i.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>i.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>i.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>i.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>i.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>i.strikethrough(A)),w}supportsHyperlinks(){if(q0())return!1;let $=D.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=D.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(d7(w)||w.startsWith("./")||w.startsWith("../"))w=l7(w);else return null;return FA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){if(!this.shouldLog($))return;let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":JN[$],K=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:i.gray(W),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:i.green(W),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.error(F),B){let T=B.split(`
43
+ `);for(let q of T)if(q.trim()&&!q.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:i.gray(` ${q}`),level:$,showTimestamp:!1}))}break}}else if(!q0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
44
44
  `;if(B)z+=`${B}
45
- `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!f0()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(B,W)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,B),this.activeProgressBar.total),W!==void 0)this.activeProgressBar.message=W;if(this.shouldStyleConsole()&&!f0()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!f0()&&D.stdout.isTTY)D.stdout.write(`
46
- `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!f0()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":i.blue("◐"),tag:Y,message:`${i.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
47
- `,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":i.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!f0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new PA(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(f0())throw Error("createReadStream is not supported in browser environments");if(!WA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return bj(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=k$.isBuffer($)?$:k$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=LK("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=k$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return f0()}isServerMode(){return!f0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
48
- `),W=Math.max(...B.map((F)=>F.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((F)=>{return this.formatConsoleMessage({timestamp:Y,message:i.cyan(F),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:i.cyan(j),showTimestamp:!1})),G.forEach((F)=>console.error(F)),console.error(this.formatConsoleMessage({timestamp:Y,message:i.cyan(z),showTimestamp:!1}))}else if(!f0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
49
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(f0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${i.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();D.stdin.removeListener("data",Y);try{if(typeof D.stdin.setRawMode==="function")D.stdin.setRawMode(!1)}catch{}D.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof D.stdin.setRawMode==="function")D.stdin.setRawMode(!0)}catch{}D.stdin.resume(),D.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,j=0;if(Y=$.replace(W,(z,G)=>{if(G==="%")return"%";if(j>=w.length)return z;let F=w[j++];switch(G){case"s":return String(F);case"d":case"i":return Number(F).toString();case"j":case"o":return JSON.stringify(F,null,2);default:return z}}),j<w.length)Y+=` ${w.slice(j).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${i.blue("◐")} `;console.error(`${j}${W} ${i.cyan(A)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
50
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!D.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=i.green("━".repeat(A)),U=i.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?i.green("✓"):i.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${i.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=D.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,D.stdout.write($.lastRenderedLine),w)D.stdout.write(`
51
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||f0()||!D.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(f0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await BA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=w1(this.config.logDirectory,A);if($.before)try{if((await $1(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await jA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function r7($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}class rJ{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return cJ.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=GA.env[W]||(j?GA.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=GA.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof pJ)throw G;throw X1.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw X1.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(GA.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
45
+ `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!q0()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(B,W)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,B),this.activeProgressBar.total),W!==void 0)this.activeProgressBar.message=W;if(this.shouldStyleConsole()&&!q0()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!q0()&&D.stdout.isTTY)D.stdout.write(`
46
+ `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!q0()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":i.blue("◐"),tag:Y,message:`${i.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
47
+ `,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":i.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!q0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new mA(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(q0())throw Error("createReadStream is not supported in browser environments");if(!FA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return rj(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=P$.isBuffer($)?$:P$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=v7("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=P$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return q0()}isServerMode(){return!q0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
48
+ `),W=Math.max(...B.map((K)=>K.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((K)=>{return this.formatConsoleMessage({timestamp:Y,message:i.cyan(K),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:i.cyan(j),showTimestamp:!1})),G.forEach((K)=>console.error(K)),console.error(this.formatConsoleMessage({timestamp:Y,message:i.cyan(z),showTimestamp:!1}))}else if(!q0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
49
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(q0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${i.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();D.stdin.removeListener("data",Y);try{if(typeof D.stdin.setRawMode==="function")D.stdin.setRawMode(!1)}catch{}D.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof D.stdin.setRawMode==="function")D.stdin.setRawMode(!0)}catch{}D.stdin.resume(),D.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,j=0;if(Y=$.replace(W,(z,G)=>{if(G==="%")return"%";if(j>=w.length)return z;let K=w[j++];switch(G){case"s":return String(K);case"d":case"i":return Number(K).toString();case"j":case"o":return JSON.stringify(K,null,2);default:return z}}),j<w.length)Y+=` ${w.slice(j).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${i.blue("◐")} `;console.error(`${j}${W} ${i.cyan(A)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
50
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!D.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=i.green("━".repeat(A)),U=i.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?i.green("✓"):i.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${i.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=D.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,D.stdout.write($.lastRenderedLine),w)D.stdout.write(`
51
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||q0()||!D.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(q0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await NA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=A1(this.config.logDirectory,A);if($.before)try{if((await Y1(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await qA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function UN($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}class JU{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return aJ.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=TA.env[W]||(j?TA.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=TA.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof XU)throw G;throw U1.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw U1.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(TA.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
52
52
 
53
53
  `;for(let A of $)Y+=`${A.key}
54
54
  `,Y+=` Type: ${A.type}
@@ -60,28 +60,28 @@ export type ConfigOf = Config
60
60
  `;Y+=`| Variable | Type | Description | Example |
61
61
  `,Y+=`|----------|------|-------------|----------|
62
62
  `;for(let A of $)Y+=`| \`${A.key}\` | ${A.type} | ${A.description} | \`${A.example}\` |
63
- `;return Y}}function t7($,w,Y={}){return Z9($,w,Y,new WeakMap)}function Z9($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return k9($,w,X,A);if(!X$(w)||!X$($))return w;return e7($,w,Y,A)}function k9($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return a7($,w);case"smart":return s7($,w,A);default:return w}return w}function a7($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>uJ(X,A)))Y.push(A);return Y}function s7($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(X$(w[0])&&X$($[0]))return o7($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function o7($,w,Y){let A=[...w];for(let X of $){if(!X$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((j)=>X$(j)&&(B in j)&&j[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function e7($,w,Y,A){let X=w;if(X$(X)&&A.has(X))return A.get(X);let J={...$};if(X$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(X$(B)&&X$(W))J[U]=Z9(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=k9(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function D9($,w,Y="replace"){return t7($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function uJ($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!uJ($[Y],w[Y]))return!1;return!0}if(X$($)&&X$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!uJ($[X],w[X]))return!1}return!0}return!1}function X$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class x9{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=TA.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!FA($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,F="default"in z,K=Object.keys(z).length>0;if(!F&&!K)throw new hA($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new hA($,Error("Configuration must export a valid object"),"unknown");let E={config:D9(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)TA.setWithFileCheck("file",E,$,J);return E}catch(j){throw j instanceof Error?X1.configLoad($,j):X1.configLoad($,Error(String(j)))}};if(U)return cJ.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(CJ(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);let A=w===void 0?[]:Array.isArray(w)?w:[w];for(let J of A){if(!J)continue;if(Y.push(J,`.${J}.config`,`${J}.config`,`.${J}`),$)Y.push(`${$}.${J}.config`,`.${$}.${J}.config`)}let X=new Set;return Y.filter((J)=>{if(!J||X.has(J))return!1;return X.add(J),!0})}checkFileAccess($){return r7(async()=>{return FA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!FA($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=CJ($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=CJ($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Y)=>Y.test($))}async validateConfigFile($){let w=[];try{if(!FA($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class P9{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],F={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,F);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],F);else return this.validateWithJSONSchema($,w,F)}catch(K){return z.push({path:"",message:`Validation failed: ${K}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await cJ.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!$N(w))throw new ZA(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new ZA(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:wN},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function YN($){if(!$)return"";let w=Array.isArray($)?$.filter(Boolean):[$];if(w.length===0)return"";if(w.length===1)return` or alias "${w[0]}"`;return` or aliases ${w.map((Y)=>`"${Y}"`).join(", ")}`}class b9{fileLoader=new x9;envProcessor=new rJ;validator=new P9;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),F=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(F||z))throw W;if(G&&(!j||!F))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)V$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){if(B instanceof Error&&B.name==="ConfigNotFoundError")throw B;let W=Date.now()-w;throw V$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||kA.cwd(),F=[],K=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(K)return F.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(K,F,W,A,z);let q=await this.loadHomeConfiguration(A,X,B,j,z,W);if(q)return F.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(q,F,W,A,z);let f=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(f)return F.push(Y$(G,"package.json")),this.finalizeResult(f,F,W,A,z);if(F.push(...this.getAllSearchPaths(A,X,G,U)),w)throw X1.configNotFound(A,F,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${YN(X)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?KA($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)V$.info(`Searching for configuration in: ${G}`);let F=this.fileLoader.generateConfigPaths($,G,w),K=await this.fileLoader.tryLoadFromPaths(F,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(K){if(U)V$.success(`Configuration loaded from: ${K.source.path}`);return K}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?KA($,Y,X):Y,B=[Y$(nw(),".config",$),Y$(nw(),".config"),nw()];for(let W of B){if(X)V$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)V$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?KA($,A,J):A;try{let W=Y$(Y,"package.json");if(!tF(W))return null;let j={};try{j=JSON.parse(aF(W,"utf8"))}catch(F){if(J)V$.warn("Failed to parse package.json:",[F instanceof Error?F:Error(String(F))]);return null}let z=j[$],G=$;if(!z&&w){let F=Array.isArray(w)?w:[w];for(let K of F){if(!K)continue;if(j[K]){z=j[K],G=K;break}}}if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)V$.success(`Configuration loaded from package.json: ${G}`);return{config:D9(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)V$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:KA($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw X1.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return TA.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);TA.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias){let A=Array.isArray(w.alias)?w.alias.join(","):w.alias;Y.push(`alias:${A}`)}if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,Y$($,"config"),Y$($,".config"),w?Y$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(Y$(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[Y$(nw(),".config",$),Y$(nw(),".config"),nw()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}async function tJ($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},Y="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let A;if(Y)A=await QJ.loadConfig($);else A=await QJ.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return A?.config??w}catch(A){let X=A instanceof Error?A.name:"UnknownError",J=A instanceof Error?A.message:String(A);if(!(X==="ConfigNotFoundError"||X==="ConfigLoadError"||X==="ConfigValidationError"||J.includes("config"))&&$.verbose)V$.warn("Unexpected error loading config, using defaults:",[A instanceof Error?A:Error(String(A))]);let B=Y?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await QJ.applyEnvironmentVariables(B.name||"",w,!0,B.verbose||!1))?.config??w;return w}}function KA($,w,Y=!1){let A=new rJ,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],F=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((f)=>f.toUpperCase()).join("")}`,`${X}_${G.map((f)=>f.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],K,q;for(let f of F)if(K=kA.env[f],K!==void 0){q=f;break}if(K!==void 0&&q)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(K.toLowerCase());else if(typeof z==="number"){let f=Number(K);if(!Number.isNaN(f))W[j]=f}else if(Array.isArray(z))try{W[j]=JSON.parse(K)}catch{W[j]=K.split(",").map((f)=>f.trim())}else W[j]=K;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}var TA,cJ,xK,PK=($)=>$,uK=($,w)=>{for(var Y in w)xK($,Y,{get:w[Y],enumerable:!0,configurable:!0,set:bK.bind(w,Y)})},cK=($,w)=>()=>($&&(w=$($=0)),w),U9,f9,A1,BY,q9,F7,K7,lj,fA,SJ,L0,t,N7,dj,f7,nj,q7,E7,RJ,H7,pj,rj,MJ,T7,R7,M7,I7,qA,E9,V7,O0,y7,C7,tj,EA,hJ,N0,u,Q7,aj,L7,sj,O7,_7,IJ,S7,oj,ej,h7,VJ,Z7,k7,D7,x7,P7,HA,H9,b7,u7="0.15.6",a0,OA,UY,ZJ,kJ,_A,DJ,xJ,WY,PJ,bJ,jw,T9,R9,F$,b$,M9,I9,c7,i7,V9,SA,XV,I0,i,JV,g7,UV,l7,WV,BV,$9,jV,d7,n7,zV,w9,GV,FV,KV,NV,fV,yJ,p7,qV,K$,C9,hA,Q9,L9,pJ,O9,_9,ZA,S9,h9,X1,wN,V$,QJ,MV,IV;var aJ=o(()=>{TA=new Y9,cJ=new A9,xK=Object.defineProperty;U9={};uK(U9,{withErrorRecovery:()=>j9,tryLoadConfig:()=>B7,loadConfigWithResult:()=>U7,loadConfig:()=>N9,isRetryableError:()=>$7,isConfigNotFoundError:()=>eK,isBunfigError:()=>z9,globalPerformanceMonitor:()=>BY,globalCache:()=>A1,getEnvOrDefault:()=>w7,generateConfigTypes:()=>j7,defaultGeneratedDir:()=>I9,defaultConfigDir:()=>M9,deepMergeWithArrayStrategy:()=>lJ,deepMerge:()=>G9,createLibraryConfig:()=>z7,config:()=>W7,bunfigPlugin:()=>G7,applyEnvVarsToConfig:()=>XY,TypeGenerationError:()=>xJ,SchemaValidationError:()=>WY,PluginError:()=>bJ,PerformanceMonitor:()=>iJ,FileSystemError:()=>DJ,ErrorFactory:()=>jw,EnvVarError:()=>_A,EnvProcessor:()=>DA,ConfigValidator:()=>dJ,ConfigValidationError:()=>ZJ,ConfigNotFoundError:()=>OA,ConfigMergeError:()=>kJ,ConfigLoader:()=>nJ,ConfigLoadError:()=>UY,ConfigFileLoader:()=>xA,ConfigCache:()=>vJ,CacheUtils:()=>q9,BunfigError:()=>a0,BrowserConfigError:()=>PJ,ArrayMergeStrategies:()=>T9});c7=cK(async()=>{f9=import.meta.require,A1=new vJ,BY=new iJ,q9={createKey:vK,isEquivalent:iK,estimateMemoryUsage:mK},F7=IA(OJ.cwd(),"config"),K7=IA(OJ.cwd(),"src/generated"),lj=MA.env.CLARITY_LOG_DIR||YK(dK(),"logs"),fA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:lj,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},SJ=await nK(),L0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},t=L0,N7=L0.red,dj=L0.green,f7=L0.yellow,nj=L0.blue,q7=L0.magenta,E7=L0.cyan,RJ=L0.white,H7=L0.gray,pj=L0.bgRed,rj=L0.bgYellow,MJ=L0.bold,T7=L0.dim,R7=L0.italic,M7=L0.underline,I7=L0.reset,qA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},E9={debug:"\uD83D\uDD0D",info:nj("ℹ"),success:dj("✓"),warning:rj(RJ(MJ(" WARN "))),error:pj(RJ(MJ(" ERROR ")))},V7=new CA("stacks"),O0=new CA("bunfig",{showTags:!0}),y7=c0(JY.cwd(),"config"),C7=c0(JY.cwd(),"src/generated"),tj=RA.env.CLARITY_LOG_DIR||$K(aK(),"logs"),EA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:tj,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},hJ=await sK(),N0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},u=N0,Q7=N0.red,aj=N0.green,L7=N0.yellow,sj=N0.blue,O7=N0.magenta,_7=N0.cyan,IJ=N0.white,S7=N0.gray,oj=N0.bgRed,ej=N0.bgYellow,h7=N0.bgGray,VJ=N0.bold,Z7=N0.dim,k7=N0.italic,D7=N0.underline,x7=N0.strikethrough,P7=N0.reset,HA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},H9={debug:"\uD83D\uDD0D",info:sj("ℹ"),success:aj("✓"),warning:ej(IJ(VJ(" WARN "))),error:oj(IJ(VJ(" ERROR ")))},b7=new LA("stacks"),a0=class extends Error{timestamp;context;constructor(w,Y={}){super(w);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Y,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let w=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Y,A])=>`${Y}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${w}`}},OA=class extends a0{code="CONFIG_NOT_FOUND";constructor(w,Y,A){let X=A?` or alias "${A}"`:"";super(`Configuration "${w}"${X} not found`,{configName:w,alias:A,searchPaths:Y,searchPathCount:Y.length})}},UY=class extends a0{code="CONFIG_LOAD_ERROR";constructor(w,Y,A){super(`Failed to load configuration from "${w}": ${Y.message}`,{configPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},ZJ=class extends a0{code="CONFIG_VALIDATION_ERROR";constructor(w,Y,A){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:A,validationErrors:Y,errorCount:Y.length})}},kJ=class extends a0{code="CONFIG_MERGE_ERROR";constructor(w,Y,A,X){super(`Failed to merge configuration from "${w}" with "${Y}": ${A.message}`,{sourcePath:w,targetPath:Y,configName:X,originalError:A.name,originalMessage:A.message});this.cause=A}},_A=class extends a0{code="ENV_VAR_ERROR";constructor(w,Y,A,X){super(`Failed to parse environment variable "${w}" with value "${Y}" as ${A}`,{envKey:w,envValue:Y,expectedType:A,configName:X})}},DJ=class extends a0{code="FILE_SYSTEM_ERROR";constructor(w,Y,A){super(`File system ${w} failed for "${Y}": ${A.message}`,{operation:w,path:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},xJ=class extends a0{code="TYPE_GENERATION_ERROR";constructor(w,Y,A){super(`Failed to generate types from "${w}" to "${Y}": ${A.message}`,{configDir:w,outputPath:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},WY=class extends a0{code="SCHEMA_VALIDATION_ERROR";constructor(w,Y,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:w,configName:A,validationErrors:Y,errorCount:Y.length})}},PJ=class extends a0{code="BROWSER_CONFIG_ERROR";constructor(w,Y,A,X){super(`Failed to fetch configuration from "${w}": ${Y} ${A}`,{endpoint:w,status:Y,statusText:A,configName:X})}},bJ=class extends a0{code="PLUGIN_ERROR";constructor(w,Y,A){super(`Plugin "${w}" failed during ${Y}: ${A.message}`,{pluginName:w,operation:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},jw={configNotFound($,w,Y){return new OA($,w,Y)},configLoad($,w,Y){return new UY($,w,Y)},configValidation($,w,Y){return new ZJ($,w,Y)},configMerge($,w,Y,A){return new kJ($,w,Y,A)},envVar($,w,Y,A){return new _A($,w,Y,A)},fileSystem($,w,Y){return new DJ($,w,Y)},typeGeneration($,w,Y){return new xJ($,w,Y)},schemaValidation($,w,Y){return new WY($,w,Y)},browserConfig($,w,Y,A){return new PJ($,w,Y,A)},plugin($,w,Y){return new bJ($,w,Y)}},T9={replace:"replace",concat:"concat",smart:"smart"},R9=/^https?:\/\//,F$=new LA("bunfig",{showTags:!0}),b$=new nJ,M9=v0(_w.cwd(),"config"),I9=v0(_w.cwd(),"src/generated")});i7=VA.env.CLARITY_LOG_DIR||yK(v7(),"logs"),V9={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:i7,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},SA={...V9},XV=(async()=>{try{let{loadConfig:$}=await c7().then(()=>U9),w=await $({name:"clarity",alias:"logging",defaultConfig:V9,cwd:VA.cwd()});if(w)Object.assign(SA,w)}catch{}return SA})();I0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},i=I0,JV=I0.red,g7=I0.green,UV=I0.yellow,l7=I0.blue,WV=I0.magenta,BV=I0.cyan,$9=I0.white,jV=I0.gray,d7=I0.bgRed,n7=I0.bgYellow,zV=I0.bgGray,w9=I0.bold,GV=I0.dim,FV=I0.italic,KV=I0.underline,NV=I0.strikethrough,fV=I0.reset,yJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},p7={debug:"\uD83D\uDD0D",info:l7("ℹ"),success:g7("✓"),warning:n7($9(w9(" WARN "))),error:d7($9(w9(" ERROR ")))};qV=new PA("stacks");K$=class K$ extends Error{timestamp;context;constructor($,w={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=w,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([w,Y])=>`${w}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}};C9=class C9 extends K${code="CONFIG_NOT_FOUND";constructor($,w,Y){let A=Y===void 0?[]:Array.isArray(Y)?Y.filter(Boolean):[Y],X="";if(A.length===1)X=` or alias "${A[0]}"`;else if(A.length>1)X=` or aliases ${A.map((J)=>`"${J}"`).join(", ")}`;super(`Configuration "${$}"${X} not found`,{configName:$,alias:Y,searchPaths:w,searchPathCount:w.length})}};hA=class hA extends K${code="CONFIG_LOAD_ERROR";constructor($,w,Y){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:Y,originalError:w.name,originalMessage:w.message});this.cause=w}};Q9=class Q9 extends K${code="CONFIG_VALIDATION_ERROR";constructor($,w,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:w,errorCount:w.length})}};L9=class L9 extends K${code="CONFIG_MERGE_ERROR";constructor($,w,Y,A){super(`Failed to merge configuration from "${$}" with "${w}": ${Y.message}`,{sourcePath:$,targetPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};pJ=class pJ extends K${code="ENV_VAR_ERROR";constructor($,w,Y,A){super(`Failed to parse environment variable "${$}" with value "${w}" as ${Y}`,{envKey:$,envValue:w,expectedType:Y,configName:A})}};O9=class O9 extends K${code="FILE_SYSTEM_ERROR";constructor($,w,Y){super(`File system ${$} failed for "${w}": ${Y.message}`,{operation:$,path:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};_9=class _9 extends K${code="TYPE_GENERATION_ERROR";constructor($,w,Y){super(`Failed to generate types from "${$}" to "${w}": ${Y.message}`,{configDir:$,outputPath:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};ZA=class ZA extends K${code="SCHEMA_VALIDATION_ERROR";constructor($,w,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:w,errorCount:w.length})}};S9=class S9 extends K${code="BROWSER_CONFIG_ERROR";constructor($,w,Y,A){super(`Failed to fetch configuration from "${$}": ${w} ${Y}`,{endpoint:$,status:w,statusText:Y,configName:A})}};h9=class h9 extends K${code="PLUGIN_ERROR";constructor($,w,Y){super(`Plugin "${$}" failed during ${w}: ${Y.message}`,{pluginName:$,operation:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};X1={configNotFound($,w,Y){return new C9($,w,Y)},configLoad($,w,Y){return new hA($,w,Y)},configValidation($,w,Y){return new Q9($,w,Y)},configMerge($,w,Y,A){return new L9($,w,Y,A)},envVar($,w,Y,A){return new pJ($,w,Y,A)},fileSystem($,w,Y){return new O9($,w,Y)},typeGeneration($,w,Y){return new _9($,w,Y)},schemaValidation($,w,Y){return new ZA($,w,Y)},browserConfig($,w,Y,A){return new S9($,w,Y,A)},plugin($,w,Y){return new h9($,w,Y)}};wN=/^https?:\/\//;V$=new PA("bunfig",{showTags:!0});QJ=new b9;MV=Y$(kA.cwd(),"config"),IV=Y$(kA.cwd(),"src/generated")});function U1($){return $.startsWith("*.")}function zY($,w){if(!U1(w))return!1;let Y=w.slice(1);return $.length>Y.length&&$.endsWith(Y)}function bA($,w){let Y=$.get(w);if(Y!==void 0)return Y;let A,X=-1;for(let[J,U]of $){if(!U1(J))continue;if(zY(w,J)){let B=J.length-1;if(B>X)X=B,A=U}}return A}var R;var u$=o(()=>{R={info:(...$)=>console.log("[info]",...$),success:(...$)=>console.log("[success]",...$),warn:(...$)=>console.warn("[warn]",...$),error:(...$)=>console.error("[error]",...$),debug:(...$)=>console.debug("[debug]",...$),log:(...$)=>console.log(...$),start:(...$)=>console.log("[start]",...$),box:(...$)=>console.log("[box]",...$)}});import{createRequire as EN}from"node:module";import{Resolver as YU}from"node:dns/promises";import{createHash as TN,sign as RN}from"node:crypto";import{createHash as MN}from"node:crypto";import{sign as IN}from"node:crypto";import{generateKeyPairSync as tz,X509Certificate as hN}from"node:crypto";import AU from"node:os";import XU from"node:path";import{existsSync as n9,statSync as p9}from"fs";import{existsSync as kN,mkdirSync as dV,readdirSync as nV,readFileSync as DN,writeFileSync as pV}from"fs";import{homedir as B1}from"os";import{dirname as aV,resolve as U$}from"path";import yX from"process";import{existsSync as r9,statSync as t9}from"fs";import{existsSync as OU,mkdirSync as xN,readdirSync as PN,writeFileSync as bN}from"fs";import{homedir as j1}from"os";import{dirname as a9,resolve as m0}from"path";import hw from"process";import{join as uN,relative as cN,resolve as s9}from"path";import WX from"process";import{existsSync as az,mkdirSync as Uy,readdirSync as Wy,writeFileSync as By}from"fs";import{homedir as JU}from"os";import{dirname as Gy,resolve as i0}from"path";import fY from"process";import{join as vN,relative as iN,resolve as o9}from"path";import BX from"process";import{existsSync as sz,mkdirSync as qy,readdirSync as Ey,writeFileSync as Hy}from"fs";import{dirname as Ry,resolve as jX}from"path";import _U from"process";import{Buffer as zw}from"buffer";import{createCipheriv as mN,createDecipheriv as gN,randomBytes as UU}from"crypto";import{closeSync as WU,createReadStream as e9,createWriteStream as lN,existsSync as BU,fsyncSync as $z,openSync as wz,writeFileSync as dN}from"fs";import{access as nN,constants as Yz,mkdir as pN,readdir as cA,rename as Az,stat as z1,unlink as vA,writeFile as jU}from"fs/promises";import{join as G1}from"path";import _0 from"process";import{pipeline as rN}from"stream/promises";import{createGzip as Xz}from"zlib";import F1 from"process";import m$ from"process";import{Buffer as c$}from"buffer";import{createCipheriv as tN,createDecipheriv as aN,randomBytes as zU}from"crypto";import{closeSync as GU,createReadStream as Jz,createWriteStream as sN,existsSync as iA,fsyncSync as Uz,openSync as Wz,writeFileSync as oN}from"fs";import{access as eN,constants as Bz,mkdir as $f,readdir as mA,rename as jz,stat as K1,unlink as gA,writeFile as FU}from"fs/promises";import{isAbsolute as wf,join as N1,resolve as Yf}from"path";import d from"process";import{pipeline as Af}from"stream/promises";import{createGzip as zz}from"zlib";import f1 from"process";import g$ from"process";import lA from"process";import{existsSync as dA}from"fs";import{resolve as KU}from"path";import{existsSync as Xf}from"fs";import{existsSync as Jf,readdirSync as Uf}from"fs";import{extname as NU,resolve as Gz}from"path";import Wf from"process";import{join as Bf,relative as jf,resolve as Fz}from"path";import zX from"process";import{Buffer as v$}from"buffer";import{createCipheriv as zf,createDecipheriv as Gf,randomBytes as fU}from"crypto";import{closeSync as qU,createReadStream as Kz,createWriteStream as Ff,existsSync as nA,fsyncSync as Nz,openSync as fz,writeFileSync as Kf}from"fs";import{access as Nf,constants as qz,mkdir as ff,readdir as pA,rename as Ez,stat as q1,unlink as rA,writeFile as EU}from"fs/promises";import{isAbsolute as qf,join as E1,resolve as Ef}from"path";import n from"process";import{pipeline as Hf}from"stream/promises";import{createGzip as Hz}from"zlib";import H1 from"process";import l$ from"process";import tA from"process";import{existsSync as aA}from"fs";import{resolve as HU}from"path";import{existsSync as Tf}from"fs";import{exec as mq}from"node:child_process";import vU from"node:fs";import gq from"node:os";import N$ from"node:path";import k2 from"node:process";import{promisify as lq}from"node:util";import I1 from"node:crypto";import d$ from"node:fs";import gU from"node:path";import KE from"node:crypto";import{execSync as qE}from"node:child_process";import IX from"node:os";async function Pz($,w,Y={}){let A=Y.timeoutMs??120000,X=Y.intervalMs??3000,J=$.split(".").slice(-2).join("."),U;try{let j=new YU,z=await j.resolveNs(J),G=(await Promise.all(z.map((F)=>j.resolve4(F).catch(()=>[])))).flat();if(G.length>0)U=new YU,U.setServers(G)}catch{}let B=Date.now()+A,W=U??new YU;for(;;){try{if((await W.resolveTxt($)).some((j)=>j.join("")===w))return!0}catch{}if(Date.now()>=B)return!1;await new Promise((j)=>setTimeout(j,X))}}class NY{tokens=new Map;add($,w){this.tokens.set($,w)}get($){return this.tokens.get($)}remove($){this.tokens.delete($)}static PATH_PREFIX="/.well-known/acme-challenge/";handlePath($){let w=$.indexOf(NY.PATH_PREFIX);if(w===-1)return;let Y=$.slice(w+NY.PATH_PREFIX.length);return this.get(Y)}}function eA($){return(typeof $==="string"?Buffer.from($,"utf8"):Buffer.from($)).toString("base64url")}function yU($){return Buffer.from($,"base64url")}function bz($){let w=$.export({format:"jwk"});if(w.kty!=="EC"||w.crv!=="P-256"||!w.x||!w.y)throw Error(`Expected a P-256 EC public key, got kty=${w.kty} crv=${w.crv}`);return{crv:"P-256",kty:"EC",x:w.x,y:w.y}}function uz($){let w=`{"crv":"${$.crv}","kty":"${$.kty}","x":"${$.x}","y":"${$.y}"}`;return TN("sha256").update(w).digest("base64url")}function cz($){let{protectedHeader:w,payload:Y,privateKey:A}=$,X=eA(JSON.stringify(w)),J=Y===""?"":eA(JSON.stringify(Y)),U=`${X}.${J}`,B=RN("sha256",Buffer.from(U),{key:A,dsaEncoding:"ieee-p1363"});return{protected:X,payload:J,signature:eA(B)}}class UX{directoryUrl;accountKey;jwk;thumbprint;directoryCache;nonce;accountKid;constructor($){this.directoryUrl=$.directoryUrl,this.accountKey=$.accountKey,this.jwk=bz($.accountPublicKey),this.thumbprint=uz(this.jwk)}get keyThumbprint(){return this.thumbprint}get kid(){return this.accountKid}async directory(){if(this.directoryCache)return this.directoryCache;let $=await fetch(this.directoryUrl);if(!$.ok)throw Error(`Failed to fetch ACME directory: HTTP ${$.status}`);return this.directoryCache=await $.json(),this.directoryCache}async newNonce(){let $=await this.directory(),w=(await fetch($.newNonce,{method:"HEAD"})).headers.get("replay-nonce");if(!w)throw Error("ACME server did not return a Replay-Nonce");return this.nonce=w,w}async ensureNonce(){if(this.nonce){let $=this.nonce;return this.nonce=void 0,$}return this.newNonce()}async signedPost($){let{url:w,payload:Y,useJwk:A}=$,X={alg:"ES256",nonce:await this.ensureNonce(),url:w};if(A)X.jwk=this.jwk;else X.kid=this.requireKid();let J=cz({protectedHeader:X,payload:Y,privateKey:this.accountKey}),U=await fetch(w,{method:"POST",headers:{"content-type":"application/jose+json"},body:JSON.stringify(J)}),B=U.headers.get("replay-nonce");if(B)this.nonce=B;let W=U.headers.get("content-type")??"",j;if(W.includes("application/pem-certificate-chain")||W.startsWith("text/"))j=await U.text();else{let z=await U.text();j=z?JSON.parse(z):{}}if(U.status>=400){let z=j??{};throw new JX(`ACME request to ${w} failed (HTTP ${U.status}): ${z.type??""} ${z.detail??""}`.trim(),z,U.status)}return{status:U.status,headers:U.headers,body:j,location:U.headers.get("location")??void 0}}requireKid(){if(!this.accountKid)throw Error("No ACME account; call newAccount() first");return this.accountKid}async newAccount($={}){let w=await this.directory(),Y={termsOfServiceAgreed:!0};if($.email)Y.contact=[`mailto:${$.email}`];let A=await this.signedPost({url:w.newAccount,payload:Y,useJwk:!0});if(!A.location)throw Error("ACME newAccount did not return an account URL (Location header)");return this.accountKid=A.location,this.accountKid}async newOrder($){let w=await this.directory(),Y={identifiers:$.map((X)=>({type:"dns",value:X}))},A=await this.signedPost({url:w.newOrder,payload:Y});if(!A.location)throw Error("ACME newOrder did not return an order URL (Location header)");return{order:A.body,orderUrl:A.location}}async getAuthorization($){return(await this.signedPost({url:$,payload:""})).body}keyAuthorization($){return`${$}.${this.thumbprint}`}dns01TxtValue($){return MN("sha256").update(this.keyAuthorization($)).digest("base64url")}async notifyChallengeReady($){await this.signedPost({url:$,payload:{}})}async pollAuthorization($,w={}){let Y=w.timeoutMs??60000,A=w.intervalMs??2000,X=Date.now()+Y;while(Date.now()<X){let J=await this.getAuthorization($);if(J.status==="valid")return;if(J.status==="invalid"){let U=J.challenges.find((B)=>B.status==="invalid");throw new JX(`Authorization for ${J.identifier.value} became invalid: ${U?.error?.detail??"unknown reason"}`,U?.error??{},0)}await d9(A),A=Math.min(A*1.5,1e4)}throw Error(`Timed out waiting for authorization ${$} to become valid`)}async finalizeOrder($,w){return(await this.signedPost({url:$,payload:{csr:w}})).body}async getOrder($){return(await this.signedPost({url:$,payload:""})).body}async pollOrder($,w={}){let Y=w.timeoutMs??60000,A=w.intervalMs??2000,X=Date.now()+Y;while(Date.now()<X){let J=await this.getOrder($);if(J.status==="valid"){if(!J.certificate)throw Error("ACME order is valid but has no certificate URL");return J.certificate}if(J.status==="invalid")throw Error(`ACME order ${$} became invalid`);await d9(A),A=Math.min(A*1.5,1e4)}throw Error(`Timed out waiting for order ${$} to become valid`)}async downloadCertificate($){let w=await this.signedPost({url:$,payload:""});return typeof w.body==="string"?w.body:String(w.body)}static selectChallenge($,w){let Y=$.challenges.find((A)=>A.type===w);if(!Y)throw Error(`No ${w} challenge available for ${$.identifier.value}`);return Y}}function mz($){let w=$.match(/-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----\n?/g)??[],Y=w[0];if(!Y)return{certPem:`${$.trim()}
63
+ `;return Y}}function WN($,w,Y={}){return g9($,w,Y,new WeakMap)}function g9($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return d9($,w,X,A);if(!X$(w)||!X$($))return w;return GN($,w,Y,A)}function d9($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return BN($,w);case"smart":return jN($,w,A);default:return w}return w}function BN($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>tJ(X,A)))Y.push(A);return Y}function jN($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(X$(w[0])&&X$($[0]))return zN($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function zN($,w,Y){let A=[...w];for(let X of $){if(!X$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((j)=>X$(j)&&(B in j)&&j[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function GN($,w,Y,A){let X=w;if(X$(X)&&A.has(X))return A.get(X);let J={...$};if(X$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(X$(B)&&X$(W))J[U]=g9(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=d9(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function l9($,w,Y="replace"){return WN($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function tJ($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!tJ($[Y],w[Y]))return!1;return!0}if(X$($)&&X$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!tJ($[X],w[X]))return!1}return!0}return!1}function X$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class n9{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=QA.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!HA($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,K="default"in z,F=Object.keys(z).length>0;if(!K&&!F)throw new bA($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new bA($,Error("Configuration must export a valid object"),"unknown");let E={config:l9(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)QA.setWithFileCheck("file",E,$,J);return E}catch(j){throw j instanceof Error?U1.configLoad($,j):U1.configLoad($,Error(String(j)))}};if(U)return aJ.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(PJ(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);let A=w===void 0?[]:Array.isArray(w)?w:[w];for(let J of A){if(!J)continue;if(Y.push(J,`.${J}.config`,`${J}.config`,`.${J}`),$)Y.push(`${$}.${J}.config`,`.${$}.${J}.config`)}let X=new Set;return Y.filter((J)=>{if(!J||X.has(J))return!1;return X.add(J),!0})}checkFileAccess($){return UN(async()=>{return HA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!HA($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=PJ($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=PJ($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Y)=>Y.test($))}async validateConfigFile($){let w=[];try{if(!HA($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class p9{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],K={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,K);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],K);else return this.validateWithJSONSchema($,w,K)}catch(F){return z.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await aJ.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!KN(w))throw new uA(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new uA(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:FN},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function NN($){if(!$)return"";let w=Array.isArray($)?$.filter(Boolean):[$];if(w.length===0)return"";if(w.length===1)return` or alias "${w[0]}"`;return` or aliases ${w.map((Y)=>`"${Y}"`).join(", ")}`}class r9{fileLoader=new n9;envProcessor=new JU;validator=new p9;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),K=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(K||z))throw W;if(G&&(!j||!K))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)C$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){if(B instanceof Error&&B.name==="ConfigNotFoundError")throw B;let W=Date.now()-w;throw C$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||vA.cwd(),K=[],F=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(F)return K.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(F,K,W,A,z);let T=await this.loadHomeConfiguration(A,X,B,j,z,W);if(T)return K.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(T,K,W,A,z);let q=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(q)return K.push(Y$(G,"package.json")),this.finalizeResult(q,K,W,A,z);if(K.push(...this.getAllSearchPaths(A,X,G,U)),w)throw U1.configNotFound(A,K,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${NN(X)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?fA($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)C$.info(`Searching for configuration in: ${G}`);let K=this.fileLoader.generateConfigPaths($,G,w),F=await this.fileLoader.tryLoadFromPaths(K,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(F){if(U)C$.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?fA($,Y,X):Y,B=[Y$(rw(),".config",$),Y$(rw(),".config"),rw()];for(let W of B){if(X)C$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)C$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?fA($,A,J):A;try{let W=Y$(Y,"package.json");if(!W7(W))return null;let j={};try{j=JSON.parse(B7(W,"utf8"))}catch(K){if(J)C$.warn("Failed to parse package.json:",[K instanceof Error?K:Error(String(K))]);return null}let z=j[$],G=$;if(!z&&w){let K=Array.isArray(w)?w:[w];for(let F of K){if(!F)continue;if(j[F]){z=j[F],G=F;break}}}if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)C$.success(`Configuration loaded from package.json: ${G}`);return{config:l9(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)C$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:fA($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw U1.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return QA.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);QA.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias){let A=Array.isArray(w.alias)?w.alias.join(","):w.alias;Y.push(`alias:${A}`)}if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,Y$($,"config"),Y$($,".config"),w?Y$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(Y$(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[Y$(rw(),".config",$),Y$(rw(),".config"),rw()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}async function UU($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},Y="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let A;if(Y)A=await bJ.loadConfig($);else A=await bJ.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return A?.config??w}catch(A){let X=A instanceof Error?A.name:"UnknownError",J=A instanceof Error?A.message:String(A);if(!(X==="ConfigNotFoundError"||X==="ConfigLoadError"||X==="ConfigValidationError"||J.includes("config"))&&$.verbose)C$.warn("Unexpected error loading config, using defaults:",[A instanceof Error?A:Error(String(A))]);let B=Y?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await bJ.applyEnvironmentVariables(B.name||"",w,!0,B.verbose||!1))?.config??w;return w}}function fA($,w,Y=!1){let A=new JU,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],K=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((q)=>q.toUpperCase()).join("")}`,`${X}_${G.map((q)=>q.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let q of K)if(F=vA.env[q],F!==void 0){T=q;break}if(F!==void 0&&T)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(F.toLowerCase());else if(typeof z==="number"){let q=Number(F);if(!Number.isNaN(q))W[j]=q}else if(Array.isArray(z))try{W[j]=JSON.parse(F)}catch{W[j]=F.split(",").map((q)=>q.trim())}else W[j]=F;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}var QA,aJ,p7,r7=($)=>$,a7=($,w)=>{for(var Y in w)p7($,Y,{get:w[Y],enumerable:!0,configurable:!0,set:t7.bind(w,Y)})},s7=($,w)=>()=>($&&(w=$($=0)),w),T9,y9,J1,FY,L9,CF,QF,w9,MA,iJ,L0,a,yF,Y9,LF,A9,OF,_F,ZJ,SF,X9,J9,hJ,ZF,hF,kF,DF,IA,O9,xF,O0,PF,bF,U9,VA,mJ,N0,u,uF,W9,vF,B9,cF,iF,kJ,mF,j9,z9,gF,DJ,dF,lF,nF,pF,rF,CA,_9,tF,aF="0.15.6",a0,DA,GY,gJ,dJ,xA,lJ,nJ,KY,pJ,rJ,Gw,S9,Z9,K$,c$,h9,k9,sF,eF,D9,PA,CV,I0,i,QV,wN,yV,YN,LV,OV,G9,_V,AN,XN,SV,K9,ZV,hV,kV,DV,xV,xJ,JN,PV,F$,P9,bA,b9,u9,XU,v9,c9,uA,i9,m9,U1,FN,C$,bJ,iV,mV;var WU=t(()=>{QA=new F9,aJ=new N9,p7=Object.defineProperty;T9={};a7(T9,{withErrorRecovery:()=>R9,tryLoadConfig:()=>RF,loadConfigWithResult:()=>HF,loadConfig:()=>Q9,isRetryableError:()=>KF,isConfigNotFoundError:()=>GF,isBunfigError:()=>M9,globalPerformanceMonitor:()=>FY,globalCache:()=>J1,getEnvOrDefault:()=>FF,generateConfigTypes:()=>MF,defaultGeneratedDir:()=>k9,defaultConfigDir:()=>h9,deepMergeWithArrayStrategy:()=>wU,deepMerge:()=>I9,createLibraryConfig:()=>IF,config:()=>fF,bunfigPlugin:()=>VF,applyEnvVarsToConfig:()=>jY,TypeGenerationError:()=>nJ,SchemaValidationError:()=>KY,PluginError:()=>rJ,PerformanceMonitor:()=>oJ,FileSystemError:()=>lJ,ErrorFactory:()=>Gw,EnvVarError:()=>xA,EnvProcessor:()=>cA,ConfigValidator:()=>YU,ConfigValidationError:()=>gJ,ConfigNotFoundError:()=>DA,ConfigMergeError:()=>dJ,ConfigLoader:()=>AU,ConfigLoadError:()=>GY,ConfigFileLoader:()=>iA,ConfigCache:()=>sJ,CacheUtils:()=>L9,BunfigError:()=>a0,BrowserConfigError:()=>pJ,ArrayMergeStrategies:()=>S9});sF=s7(async()=>{y9=import.meta.require,J1=new sJ,FY=new oJ,L9={createKey:o7,isEquivalent:e7,estimateMemoryUsage:$F},CF=OA(vJ.cwd(),"config"),QF=OA(vJ.cwd(),"src/generated"),w9=LA.env.CLARITY_LOG_DIR||N7(AF(),"logs"),MA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:w9,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},iJ=await XF(),L0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},a=L0,yF=L0.red,Y9=L0.green,LF=L0.yellow,A9=L0.blue,OF=L0.magenta,_F=L0.cyan,ZJ=L0.white,SF=L0.gray,X9=L0.bgRed,J9=L0.bgYellow,hJ=L0.bold,ZF=L0.dim,hF=L0.italic,kF=L0.underline,DF=L0.reset,IA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},O9={debug:"\uD83D\uDD0D",info:A9("ℹ"),success:Y9("✓"),warning:J9(ZJ(hJ(" WARN "))),error:X9(ZJ(hJ(" ERROR ")))},xF=new ZA("stacks"),O0=new ZA("bunfig",{showTags:!0}),PF=v0(zY.cwd(),"config"),bF=v0(zY.cwd(),"src/generated"),U9=yA.env.CLARITY_LOG_DIR||K7(BF(),"logs"),VA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:U9,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},mJ=await jF(),N0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},u=N0,uF=N0.red,W9=N0.green,vF=N0.yellow,B9=N0.blue,cF=N0.magenta,iF=N0.cyan,kJ=N0.white,mF=N0.gray,j9=N0.bgRed,z9=N0.bgYellow,gF=N0.bgGray,DJ=N0.bold,dF=N0.dim,lF=N0.italic,nF=N0.underline,pF=N0.strikethrough,rF=N0.reset,CA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},_9={debug:"\uD83D\uDD0D",info:B9("ℹ"),success:W9("✓"),warning:z9(kJ(DJ(" WARN "))),error:j9(kJ(DJ(" ERROR ")))},tF=new kA("stacks"),a0=class extends Error{timestamp;context;constructor(w,Y={}){super(w);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Y,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let w=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Y,A])=>`${Y}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${w}`}},DA=class extends a0{code="CONFIG_NOT_FOUND";constructor(w,Y,A){let X=A?` or alias "${A}"`:"";super(`Configuration "${w}"${X} not found`,{configName:w,alias:A,searchPaths:Y,searchPathCount:Y.length})}},GY=class extends a0{code="CONFIG_LOAD_ERROR";constructor(w,Y,A){super(`Failed to load configuration from "${w}": ${Y.message}`,{configPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},gJ=class extends a0{code="CONFIG_VALIDATION_ERROR";constructor(w,Y,A){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:A,validationErrors:Y,errorCount:Y.length})}},dJ=class extends a0{code="CONFIG_MERGE_ERROR";constructor(w,Y,A,X){super(`Failed to merge configuration from "${w}" with "${Y}": ${A.message}`,{sourcePath:w,targetPath:Y,configName:X,originalError:A.name,originalMessage:A.message});this.cause=A}},xA=class extends a0{code="ENV_VAR_ERROR";constructor(w,Y,A,X){super(`Failed to parse environment variable "${w}" with value "${Y}" as ${A}`,{envKey:w,envValue:Y,expectedType:A,configName:X})}},lJ=class extends a0{code="FILE_SYSTEM_ERROR";constructor(w,Y,A){super(`File system ${w} failed for "${Y}": ${A.message}`,{operation:w,path:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},nJ=class extends a0{code="TYPE_GENERATION_ERROR";constructor(w,Y,A){super(`Failed to generate types from "${w}" to "${Y}": ${A.message}`,{configDir:w,outputPath:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},KY=class extends a0{code="SCHEMA_VALIDATION_ERROR";constructor(w,Y,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:w,configName:A,validationErrors:Y,errorCount:Y.length})}},pJ=class extends a0{code="BROWSER_CONFIG_ERROR";constructor(w,Y,A,X){super(`Failed to fetch configuration from "${w}": ${Y} ${A}`,{endpoint:w,status:Y,statusText:A,configName:X})}},rJ=class extends a0{code="PLUGIN_ERROR";constructor(w,Y,A){super(`Plugin "${w}" failed during ${Y}: ${A.message}`,{pluginName:w,operation:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},Gw={configNotFound($,w,Y){return new DA($,w,Y)},configLoad($,w,Y){return new GY($,w,Y)},configValidation($,w,Y){return new gJ($,w,Y)},configMerge($,w,Y,A){return new dJ($,w,Y,A)},envVar($,w,Y,A){return new xA($,w,Y,A)},fileSystem($,w,Y){return new lJ($,w,Y)},typeGeneration($,w,Y){return new nJ($,w,Y)},schemaValidation($,w,Y){return new KY($,w,Y)},browserConfig($,w,Y,A){return new pJ($,w,Y,A)},plugin($,w,Y){return new rJ($,w,Y)}},S9={replace:"replace",concat:"concat",smart:"smart"},Z9=/^https?:\/\//,K$=new kA("bunfig",{showTags:!0}),c$=new AU,h9=c0(Zw.cwd(),"config"),k9=c0(Zw.cwd(),"src/generated")});eF=_A.env.CLARITY_LOG_DIR||P7(oF(),"logs"),D9={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:eF,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},PA={...D9},CV=(async()=>{try{let{loadConfig:$}=await sF().then(()=>T9),w=await $({name:"clarity",alias:"logging",defaultConfig:D9,cwd:_A.cwd()});if(w)Object.assign(PA,w)}catch{}return PA})();I0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},i=I0,QV=I0.red,wN=I0.green,yV=I0.yellow,YN=I0.blue,LV=I0.magenta,OV=I0.cyan,G9=I0.white,_V=I0.gray,AN=I0.bgRed,XN=I0.bgYellow,SV=I0.bgGray,K9=I0.bold,ZV=I0.dim,hV=I0.italic,kV=I0.underline,DV=I0.strikethrough,xV=I0.reset,xJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},JN={debug:"\uD83D\uDD0D",info:YN("ℹ"),success:wN("✓"),warning:XN(G9(K9(" WARN "))),error:AN(G9(K9(" ERROR ")))};PV=new mA("stacks");F$=class F$ extends Error{timestamp;context;constructor($,w={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=w,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([w,Y])=>`${w}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}};P9=class P9 extends F${code="CONFIG_NOT_FOUND";constructor($,w,Y){let A=Y===void 0?[]:Array.isArray(Y)?Y.filter(Boolean):[Y],X="";if(A.length===1)X=` or alias "${A[0]}"`;else if(A.length>1)X=` or aliases ${A.map((J)=>`"${J}"`).join(", ")}`;super(`Configuration "${$}"${X} not found`,{configName:$,alias:Y,searchPaths:w,searchPathCount:w.length})}};bA=class bA extends F${code="CONFIG_LOAD_ERROR";constructor($,w,Y){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:Y,originalError:w.name,originalMessage:w.message});this.cause=w}};b9=class b9 extends F${code="CONFIG_VALIDATION_ERROR";constructor($,w,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:w,errorCount:w.length})}};u9=class u9 extends F${code="CONFIG_MERGE_ERROR";constructor($,w,Y,A){super(`Failed to merge configuration from "${$}" with "${w}": ${Y.message}`,{sourcePath:$,targetPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};XU=class XU extends F${code="ENV_VAR_ERROR";constructor($,w,Y,A){super(`Failed to parse environment variable "${$}" with value "${w}" as ${Y}`,{envKey:$,envValue:w,expectedType:Y,configName:A})}};v9=class v9 extends F${code="FILE_SYSTEM_ERROR";constructor($,w,Y){super(`File system ${$} failed for "${w}": ${Y.message}`,{operation:$,path:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};c9=class c9 extends F${code="TYPE_GENERATION_ERROR";constructor($,w,Y){super(`Failed to generate types from "${$}" to "${w}": ${Y.message}`,{configDir:$,outputPath:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};uA=class uA extends F${code="SCHEMA_VALIDATION_ERROR";constructor($,w,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:w,errorCount:w.length})}};i9=class i9 extends F${code="BROWSER_CONFIG_ERROR";constructor($,w,Y,A){super(`Failed to fetch configuration from "${$}": ${w} ${Y}`,{endpoint:$,status:w,statusText:Y,configName:A})}};m9=class m9 extends F${code="PLUGIN_ERROR";constructor($,w,Y){super(`Plugin "${$}" failed during ${w}: ${Y.message}`,{pluginName:$,operation:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};U1={configNotFound($,w,Y){return new P9($,w,Y)},configLoad($,w,Y){return new bA($,w,Y)},configValidation($,w,Y){return new b9($,w,Y)},configMerge($,w,Y,A){return new u9($,w,Y,A)},envVar($,w,Y,A){return new XU($,w,Y,A)},fileSystem($,w,Y){return new v9($,w,Y)},typeGeneration($,w,Y){return new c9($,w,Y)},schemaValidation($,w,Y){return new uA($,w,Y)},browserConfig($,w,Y,A){return new i9($,w,Y,A)},plugin($,w,Y){return new m9($,w,Y)}};FN=/^https?:\/\//;C$=new mA("bunfig",{showTags:!0});bJ=new r9;iV=Y$(vA.cwd(),"config"),mV=Y$(vA.cwd(),"src/generated")});function B1($){return $.startsWith("*.")}function NY($,w){if(!B1(w))return!1;let Y=w.slice(1);return $.length>Y.length&&$.endsWith(Y)}function gA($,w){let Y=$.get(w);if(Y!==void 0)return Y;let A,X=-1;for(let[J,U]of $){if(!B1(J))continue;if(NY(w,J)){let B=J.length-1;if(B>X)X=B,A=U}}return A}var R;var i$=t(()=>{R={info:(...$)=>console.log("[info]",...$),success:(...$)=>console.log("[success]",...$),warn:(...$)=>console.warn("[warn]",...$),error:(...$)=>console.error("[error]",...$),debug:(...$)=>console.debug("[debug]",...$),log:(...$)=>console.log(...$),start:(...$)=>console.log("[start]",...$),box:(...$)=>console.log("[box]",...$)}});import{createRequire as _N}from"node:module";import{Resolver as FU}from"node:dns/promises";import{createHash as ZN,sign as hN}from"node:crypto";import{createHash as kN}from"node:crypto";import{sign as DN}from"node:crypto";import{generateKeyPairSync as U2,X509Certificate as gN}from"node:crypto";import NU from"node:os";import qU from"node:path";import{existsSync as Az,statSync as Xz}from"fs";import{existsSync as lN,mkdirSync as G3,readdirSync as K3,readFileSync as nN,writeFileSync as F3}from"fs";import{homedir as z1}from"os";import{dirname as E3,resolve as U$}from"path";import SX from"process";import{existsSync as Jz,statSync as Uz}from"fs";import{existsSync as vU,mkdirSync as pN,readdirSync as rN,writeFileSync as tN}from"fs";import{homedir as G1}from"os";import{dirname as Wz,resolve as m0}from"path";import Dw from"process";import{join as aN,relative as sN,resolve as Bz}from"path";import FX from"process";import{existsSync as W2,mkdirSync as y3,readdirSync as L3,writeFileSync as O3}from"fs";import{homedir as EU}from"os";import{dirname as Z3,resolve as i0}from"path";import fY from"process";import{join as oN,relative as eN,resolve as jz}from"path";import NX from"process";import{existsSync as B2,mkdirSync as P3,readdirSync as b3,writeFileSync as u3}from"fs";import{dirname as c3,resolve as qX}from"path";import cU from"process";import{Buffer as Kw}from"buffer";import{createCipheriv as $q,createDecipheriv as wq,randomBytes as TU}from"crypto";import{closeSync as HU,createReadStream as zz,createWriteStream as Yq,existsSync as fU,fsyncSync as Gz,openSync as Kz,writeFileSync as Aq}from"fs";import{access as Xq,constants as Fz,mkdir as Jq,readdir as lA,rename as Nz,stat as K1,unlink as nA,writeFile as RU}from"fs/promises";import{join as F1}from"path";import _0 from"process";import{pipeline as Uq}from"stream/promises";import{createGzip as qz}from"zlib";import N1 from"process";import l$ from"process";import{Buffer as m$}from"buffer";import{createCipheriv as Wq,createDecipheriv as Bq,randomBytes as MU}from"crypto";import{closeSync as IU,createReadStream as Ez,createWriteStream as jq,existsSync as pA,fsyncSync as Tz,openSync as Hz,writeFileSync as zq}from"fs";import{access as Gq,constants as fz,mkdir as Kq,readdir as rA,rename as Rz,stat as q1,unlink as tA,writeFile as VU}from"fs/promises";import{isAbsolute as Fq,join as E1,resolve as Nq}from"path";import l from"process";import{pipeline as qq}from"stream/promises";import{createGzip as Mz}from"zlib";import T1 from"process";import n$ from"process";import aA from"process";import{existsSync as sA}from"fs";import{resolve as CU}from"path";import{existsSync as Eq}from"fs";import{existsSync as Tq,readdirSync as Hq}from"fs";import{extname as QU,resolve as Iz}from"path";import fq from"process";import{join as Rq,relative as Mq,resolve as Vz}from"path";import EX from"process";import{Buffer as g$}from"buffer";import{createCipheriv as Iq,createDecipheriv as Vq,randomBytes as yU}from"crypto";import{closeSync as LU,createReadStream as Cz,createWriteStream as Cq,existsSync as oA,fsyncSync as Qz,openSync as yz,writeFileSync as Qq}from"fs";import{access as yq,constants as Lz,mkdir as Lq,readdir as eA,rename as Oz,stat as H1,unlink as $X,writeFile as OU}from"fs/promises";import{isAbsolute as Oq,join as f1,resolve as _q}from"path";import n from"process";import{pipeline as Sq}from"stream/promises";import{createGzip as _z}from"zlib";import R1 from"process";import p$ from"process";import wX from"process";import{existsSync as YX}from"fs";import{resolve as _U}from"path";import{existsSync as Zq}from"fs";import{exec as eE}from"node:child_process";import sU from"node:fs";import $T from"node:os";import N$ from"node:path";import d2 from"node:process";import{promisify as wT}from"node:util";import C1 from"node:crypto";import r$ from"node:fs";import $W from"node:path";import CT from"node:crypto";import{execSync as LT}from"node:child_process";import OX from"node:os";async function pz($,w,Y={}){let A=Y.timeoutMs??120000,X=Y.intervalMs??3000,J=$.split(".").slice(-2).join("."),U;try{let j=new FU,z=await j.resolveNs(J),G=(await Promise.all(z.map((K)=>j.resolve4(K).catch(()=>[])))).flat();if(G.length>0)U=new FU,U.setServers(G)}catch{}let B=Date.now()+A,W=U??new FU;for(;;){try{if((await W.resolveTxt($)).some((j)=>j.join("")===w))return!0}catch{}if(Date.now()>=B)return!1;await new Promise((j)=>setTimeout(j,X))}}class HY{tokens=new Map;add($,w){this.tokens.set($,w)}get($){return this.tokens.get($)}remove($){this.tokens.delete($)}static PATH_PREFIX="/.well-known/acme-challenge/";handlePath($){let w=$.indexOf(HY.PATH_PREFIX);if(w===-1)return;let Y=$.slice(w+HY.PATH_PREFIX.length);return this.get(Y)}}function JX($){return(typeof $==="string"?Buffer.from($,"utf8"):Buffer.from($)).toString("base64url")}function xU($){return Buffer.from($,"base64url")}function rz($){let w=$.export({format:"jwk"});if(w.kty!=="EC"||w.crv!=="P-256"||!w.x||!w.y)throw Error(`Expected a P-256 EC public key, got kty=${w.kty} crv=${w.crv}`);return{crv:"P-256",kty:"EC",x:w.x,y:w.y}}function tz($){let w=`{"crv":"${$.crv}","kty":"${$.kty}","x":"${$.x}","y":"${$.y}"}`;return ZN("sha256").update(w).digest("base64url")}function az($){let{protectedHeader:w,payload:Y,privateKey:A}=$,X=JX(JSON.stringify(w)),J=Y===""?"":JX(JSON.stringify(Y)),U=`${X}.${J}`,B=hN("sha256",Buffer.from(U),{key:A,dsaEncoding:"ieee-p1363"});return{protected:X,payload:J,signature:JX(B)}}class KX{directoryUrl;accountKey;jwk;thumbprint;directoryCache;nonce;accountKid;constructor($){this.directoryUrl=$.directoryUrl,this.accountKey=$.accountKey,this.jwk=rz($.accountPublicKey),this.thumbprint=tz(this.jwk)}get keyThumbprint(){return this.thumbprint}get kid(){return this.accountKid}async directory(){if(this.directoryCache)return this.directoryCache;let $=await fetch(this.directoryUrl);if(!$.ok)throw Error(`Failed to fetch ACME directory: HTTP ${$.status}`);return this.directoryCache=await $.json(),this.directoryCache}async newNonce(){let $=await this.directory(),w=(await fetch($.newNonce,{method:"HEAD"})).headers.get("replay-nonce");if(!w)throw Error("ACME server did not return a Replay-Nonce");return this.nonce=w,w}async ensureNonce(){if(this.nonce){let $=this.nonce;return this.nonce=void 0,$}return this.newNonce()}async signedPost($){let{url:w,payload:Y,useJwk:A}=$,X={alg:"ES256",nonce:await this.ensureNonce(),url:w};if(A)X.jwk=this.jwk;else X.kid=this.requireKid();let J=az({protectedHeader:X,payload:Y,privateKey:this.accountKey}),U=await fetch(w,{method:"POST",headers:{"content-type":"application/jose+json"},body:JSON.stringify(J)}),B=U.headers.get("replay-nonce");if(B)this.nonce=B;let W=U.headers.get("content-type")??"",j;if(W.includes("application/pem-certificate-chain")||W.startsWith("text/"))j=await U.text();else{let z=await U.text();j=z?JSON.parse(z):{}}if(U.status>=400){let z=j??{};throw new GX(`ACME request to ${w} failed (HTTP ${U.status}): ${z.type??""} ${z.detail??""}`.trim(),z,U.status)}return{status:U.status,headers:U.headers,body:j,location:U.headers.get("location")??void 0}}requireKid(){if(!this.accountKid)throw Error("No ACME account; call newAccount() first");return this.accountKid}async newAccount($={}){let w=await this.directory(),Y={termsOfServiceAgreed:!0};if($.email)Y.contact=[`mailto:${$.email}`];let A=await this.signedPost({url:w.newAccount,payload:Y,useJwk:!0});if(!A.location)throw Error("ACME newAccount did not return an account URL (Location header)");return this.accountKid=A.location,this.accountKid}async newOrder($){let w=await this.directory(),Y={identifiers:$.map((X)=>({type:"dns",value:X}))},A=await this.signedPost({url:w.newOrder,payload:Y});if(!A.location)throw Error("ACME newOrder did not return an order URL (Location header)");return{order:A.body,orderUrl:A.location}}async getAuthorization($){return(await this.signedPost({url:$,payload:""})).body}keyAuthorization($){return`${$}.${this.thumbprint}`}dns01TxtValue($){return kN("sha256").update(this.keyAuthorization($)).digest("base64url")}async notifyChallengeReady($){await this.signedPost({url:$,payload:{}})}async pollAuthorization($,w={}){let Y=w.timeoutMs??60000,A=w.intervalMs??2000,X=Date.now()+Y;while(Date.now()<X){let J=await this.getAuthorization($);if(J.status==="valid")return;if(J.status==="invalid"){let U=J.challenges.find((B)=>B.status==="invalid");throw new GX(`Authorization for ${J.identifier.value} became invalid: ${U?.error?.detail??"unknown reason"}`,U?.error??{},0)}await Yz(A),A=Math.min(A*1.5,1e4)}throw Error(`Timed out waiting for authorization ${$} to become valid`)}async finalizeOrder($,w){return(await this.signedPost({url:$,payload:{csr:w}})).body}async getOrder($){return(await this.signedPost({url:$,payload:""})).body}async pollOrder($,w={}){let Y=w.timeoutMs??60000,A=w.intervalMs??2000,X=Date.now()+Y;while(Date.now()<X){let J=await this.getOrder($);if(J.status==="valid"){if(!J.certificate)throw Error("ACME order is valid but has no certificate URL");return J.certificate}if(J.status==="invalid")throw Error(`ACME order ${$} became invalid`);await Yz(A),A=Math.min(A*1.5,1e4)}throw Error(`Timed out waiting for order ${$} to become valid`)}async downloadCertificate($){let w=await this.signedPost({url:$,payload:""});return typeof w.body==="string"?w.body:String(w.body)}static selectChallenge($,w){let Y=$.challenges.find((A)=>A.type===w);if(!Y)throw Error(`No ${w} challenge available for ${$.identifier.value}`);return Y}}function ez($){let w=$.match(/-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----\n?/g)??[],Y=w[0];if(!Y)return{certPem:`${$.trim()}
64
64
  `,chainPem:""};let A=`${Y.trim()}
65
65
  `,X=w.slice(1).map((J)=>J.trim()).join(`
66
66
  `);return{certPem:A,chainPem:X?`${X}
67
- `:""}}function gz($){return`_acme-challenge.${$.startsWith("*.")?$.slice(2):$}`}function d9($){return new Promise((w)=>setTimeout(w,$))}function VN($){if($<128)return Buffer.from([$]);let w=[],Y=$;while(Y>0)w.unshift(Y&255),Y>>=8;return Buffer.from([128|w.length,...w])}function Kw($,w){return Buffer.concat([Buffer.from([$]),VN(w.length),w])}function lz($){let w;if(typeof $==="number")if($===0)w=Buffer.from([0]);else{let Y=[],A=$;while(A>0)Y.unshift(A&255),A>>=8;if(Y[0]&128)Y.unshift(0);w=Buffer.from(Y)}else if(w=$.length===0?Buffer.from([0]):$,w[0]&128)w=Buffer.concat([Buffer.from([0]),w]);return Kw(2,w)}function Sw($){let w=$.split(".").map(Number);if(w.length<2)throw Error(`Invalid OID: ${$}`);let Y=[40*w[0]+w[1]];for(let A=2;A<w.length;A++){let X=w[A],J=[X&127];X=Math.floor(X/128);while(X>0)J.unshift(X&127|128),X=Math.floor(X/128);Y.push(...J)}return Kw(6,Buffer.from(Y))}function J$(...$){return Kw(48,Buffer.concat($))}function CU(...$){return Kw(49,Buffer.concat($))}function QU($){return Kw(3,Buffer.concat([Buffer.from([0]),$]))}function dz($){return Kw(4,$)}function nz($){return Kw(12,Buffer.from($,"utf8"))}function LU($,w,Y){let A=128|(Y?32:0)|$;return Kw(A,w)}function SN($){let w=$.export({format:"jwk"});if(!w.x||!w.y)throw Error("Public key JWK is missing x/y coordinates");let Y=yU(w.x),A=yU(w.y);if(Y.length!==32||A.length!==32)throw Error(`Expected 32-byte P-256 coordinates, got x=${Y.length} y=${A.length}`);return Buffer.concat([Buffer.from([4]),Y,A])}function pz($){let{domains:w,publicKey:Y,privateKey:A}=$;if(w.length===0)throw Error("At least one domain is required to build a CSR");let X=J$(CU(J$(Sw(LN),nz(w[0])))),J=J$(J$(Sw(yN),Sw(CN)),QU(SN(Y))),U=w.map((f)=>LU(2,Buffer.from(f,"ascii"),!1)),B=J$(...U),W=J$(Sw(_N),dz(B)),j=J$(W),z=J$(Sw(ON),CU(j)),G=LU(0,z,!0),F=J$(lz(0),X,J,G),K=IN("sha256",F,A),q=J$(Sw(QN));return J$(F,q,QU(K))}function rz($){return pz($).toString("base64url")}function ZN($){if($){let{createPrivateKey:X,createPublicKey:J}=HN("node:crypto"),U=X($),B=J(U);return{privateKey:U,publicKey:B,pem:$}}let{privateKey:w,publicKey:Y}=tz("ec",{namedCurve:"P-256"}),A=w.export({format:"pem",type:"pkcs8"}).toString();return{privateKey:w,publicKey:Y,pem:A}}async function lU($){let{domains:w,method:Y}=$;if(w.length===0)throw Error("obtainCertificate requires at least one domain");if(Y==="dns-01"&&!$.dnsProvider)throw Error("dns-01 requires a dnsProvider to publish _acme-challenge TXT records");if(w.some((G)=>G.startsWith("*."))&&Y!=="dns-01")throw Error("Wildcard certificates require the dns-01 challenge method");let A=$.directoryUrl??($.staging===!1?iz:vz),X=ZN($.accountKeyPem),J=new UX({directoryUrl:A,accountKey:X.privateKey,accountPublicKey:X.publicKey});await J.newAccount({email:$.email});let{order:U,orderUrl:B}=await J.newOrder(w),W=$.http01Store??VX,j=[],z=[];try{for(let T of U.authorizations){let I=await J.getAuthorization(T);if(I.status==="valid")continue;let _=UX.selectChallenge(I,Y);if(Y==="dns-01"){let h=gz(I.identifier.value),u0=J.dns01TxtValue(_.token);await $.dnsProvider.setTxt(h,u0),j.push({name:h,value:u0}),await Pz(h,u0,{timeoutMs:$.dnsPropagationTimeoutMs??120000})}else W.add(_.token,J.keyAuthorization(_.token)),z.push(_.token);await J.notifyChallengeReady(_.url),await J.pollAuthorization(T,{timeoutMs:$.timeoutMs})}let{privateKey:G,publicKey:F}=tz("ec",{namedCurve:"P-256"}),K=rz({domains:w,publicKey:F,privateKey:G});await J.finalizeOrder(U.finalize,K);let q=await J.pollOrder(B,{timeoutMs:$.timeoutMs}),f=await J.downloadCertificate(q),{certPem:E,chainPem:H}=mz(f),M=H?`${E}${H}`:E,y=G.export({format:"pem",type:"pkcs8"}).toString(),Q=new Date(new hN(E).validTo);return{certPem:E,keyPem:y,chainPem:H,fullChainPem:M,accountKeyPem:X.pem,notAfter:Q}}finally{for(let{name:G,value:F}of j)await $.dnsProvider?.removeTxt(G,F).catch(()=>{});for(let G of z)W.remove(G)}}class oz{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!n9($))return!0;return p9($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=n9(Y)?p9(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class ez{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function If($,w){this[$]=Mf.bind(null,w)}class nU{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!r9($))return!0;return t9($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=r9(Y)?t9(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class pU{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function Cf($,w={}){let Y=Object.keys(w).sort().map((A)=>`${A}:${w[A]}`).join("|");return Y?`${$}:${Y}`:$}function Qf($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function Lf($){return $.getStats().size*2}function rU($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&w0(w[0])&&"id"in w[0]&&w[0].id===3&&w0(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(w0(w)&&w0($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(w0($)&&"arr"in $&&Array.isArray($.arr)&&w0(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&w0(w[0])&&w0($[0])){let A=[...w];for(let X of $)if(w0(X)&&"name"in X){if(!A.find((J)=>w0(J)&&("name"in J)&&J.name===X.name))A.push(X)}else if(w0(X)&&"path"in X){if(!A.find((J)=>w0(J)&&("path"in J)&&J.path===X.path))A.push(X)}else if(!A.some((J)=>FX(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!w0(w)||!w0($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(w0(X)&&w0(Y[A]))Y[A]=rU(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&w0(X[0])&&w0(Y[A][0])){let J=[...X];for(let U of Y[A])if(w0(U)&&"name"in U){if(!J.find((B)=>w0(B)&&("name"in B)&&B.name===U.name))J.push(U)}else if(w0(U)&&"path"in U){if(!J.find((B)=>w0(B)&&("path"in B)&&B.path===U.path))J.push(U)}else if(!J.some((B)=>FX(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function FX($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!FX($[Y],w[Y]))return!1;return!0}if(w0($)&&w0(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!FX($[X],w[X]))return!1}return!0}return!1}function w0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function Of($,w){if(!sz($))return null;try{let Y=await import($),A=Y.default||Y;if(typeof A!=="object"||A===null||Array.isArray(A))return null;try{return rU(w,A)}catch{return null}}catch{return null}}async function _f({name:$="",cwd:w,defaultConfig:Y}){let A=w||_U.cwd(),X=[".ts",".js",".mjs",".cjs",".json"],J=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of J)for(let B of X){let W=jX(A,`${U}${B}`),j=await Of(W,Y);if(j!==null)return j}try{let U=jX(A,"package.json");if(sz(U)){let B=(await import(U))[$];if(B&&typeof B==="object"&&!Array.isArray(B))try{return rU(Y,B)}catch{}}}catch{}return Y}function Sf($,w={}){let Y=BX.cwd();while(Y.includes("storage"))Y=o9(Y,"..");let A=o9(Y,$||"");if(w?.relative)return iN(BX.cwd(),A);return A}async function hf(){try{let $=await _f({name:"clarity",defaultConfig:wX,cwd:BX.cwd(),endpoint:"",headers:{}});return{...wX,...$}}catch{return wX}}function W0(){if(m$.env.NODE_ENV==="test"||m$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function Zf(){if(m$.env.NODE_ENV==="test"||m$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof m$<"u"){let $=m$.type;if($==="renderer"||$==="worker")return!1;return!!(m$.versions&&(m$.versions.node||m$.versions.bun))}return!1}class w2{async format($){let w=await Zf(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:F1.pid,hostname:w(),environment:F1.env.NODE_ENV||"development",platform:F1.platform,version:F1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:F1.env.NODE_ENV||F1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class KX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...hU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new w2,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??_0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...YX,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...YX};return{...YX,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:hU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}async writeToFile($){let w=(async()=>{let A,X=0,J=3,U=1000;while(X<J)try{try{try{await nN(this.config.logDirectory,Yz.F_OK|Yz.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await pN(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let B=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:zw.from($);try{if(!BU(this.currentLogFile))await jU(this.currentLogFile,"",{mode:420});if(A=wz(this.currentLogFile,"a",420),dN(A,B,{flag:"a"}),$z(A),A!==void 0)WU(A),A=void 0;if((await z1(this.currentLogFile)).size===0){if(await jU(this.currentLogFile,B,{flag:"w",mode:420}),(await z1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let j=W;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(X<J-1){let z=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${J}:`,z);let G=U*2**X;await new Promise((F)=>setTimeout(F,G)),X++;continue}}if(j?.code&&["ENOSPC","EDQUOT"].includes(j.code))throw Error(`Disk quota exceeded or no space left on device: ${j.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",j),j}finally{if(A!==void 0)try{WU(A)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(X===J-1){let j=B,z=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",z),B}X++;let W=U*2**(X-1);await new Promise((j)=>setTimeout(j,W))}})();this.pendingOperations.push(w);let Y=this.pendingOperations.length-1;try{await w}catch(A){throw console.error("Debug: [writeToFile] Error in operation:",A),A}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return G1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return G1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return G1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(W0())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let w=typeof $.interval==="number"?$.interval:60,Y=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((A)=>{console.error("Error rotating keys:",A)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=w,this.keys.set(w,Y),this.encryptionKeys.set(w,{key:Y,createdAt:new Date});let A=Array.from(this.encryptionKeys.entries()).sort(([,U],[,B])=>B.createdAt.getTime()-U.createdAt.getTime()),X=typeof $.maxKeys==="number"?$.maxKeys:1,J=Math.max(1,X);if(A.length>J)for(let[U]of A.slice(J))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return UU(16).toString("hex")}generateKey(){return UU(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=UU(16),A=mN("aes-256-gcm",w,Y),X=zw.concat([A.update($,"utf8"),A.final()]),J=A.getAuthTag();return{encrypted:zw.concat([Y,X,J]),iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=Xz(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(zw.from(zw.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(W0())return;let $=await z1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await cA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await z1(Y).catch(()=>null))try{if(await Az(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await vA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await jU(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await z1(Y).catch(()=>null))await Az(Y,J)}if(this.currentLogFile=A,w.maxFiles){let X=(await cA(this.config.logDirectory)).filter((J)=>J.startsWith(this.name)).sort((J,U)=>U.localeCompare(J));for(let J of X.slice(w.maxFiles))await vA(G1(this.config.logDirectory,J))}}}async compressLogFile($,w){let Y=e9($),A=lN(w),X=Xz();await rN(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);await this.writeToFile(A),console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(w),console.log(w);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue($)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue($){return{debug:0,info:1,success:2,warning:3,error:4}[$]}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),BU(this.currentLogFile))try{let $=wz(this.currentLogFile,"r+");$z($),WU($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!W0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await cA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await vA(G1(this.config.logDirectory,w))}catch(Y){console.error(`Failed to delete temp file ${w}:`,Y)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.fancy?a.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=_0.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${a.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);if(this.fancy&&!W0()){let j=G2[$],z=this.options.showTags!==!1&&this.name?a.gray(this.formatTag(this.name)):"",G;switch($){case"debug":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:a.gray(U),level:$}),console.error(G);break;case"info":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G);break;case"success":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:a.green(U),level:$}),console.error(G);break;case"warning":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.warn(G);break;case"error":if(G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G),B){let F=B.split(`
68
- `);for(let K of F)if(K.trim()&&!K.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:a.gray(` ${K}`),level:$,showTimestamp:!1}))}break}}else if(!W0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${J} ${this.environment}.${$.toUpperCase()}: ${U}
67
+ `:""}}function $2($){return`_acme-challenge.${$.startsWith("*.")?$.slice(2):$}`}function Yz($){return new Promise((w)=>setTimeout(w,$))}function xN($){if($<128)return Buffer.from([$]);let w=[],Y=$;while(Y>0)w.unshift(Y&255),Y>>=8;return Buffer.from([128|w.length,...w])}function qw($,w){return Buffer.concat([Buffer.from([$]),xN(w.length),w])}function w2($){let w;if(typeof $==="number")if($===0)w=Buffer.from([0]);else{let Y=[],A=$;while(A>0)Y.unshift(A&255),A>>=8;if(Y[0]&128)Y.unshift(0);w=Buffer.from(Y)}else if(w=$.length===0?Buffer.from([0]):$,w[0]&128)w=Buffer.concat([Buffer.from([0]),w]);return qw(2,w)}function kw($){let w=$.split(".").map(Number);if(w.length<2)throw Error(`Invalid OID: ${$}`);let Y=[40*w[0]+w[1]];for(let A=2;A<w.length;A++){let X=w[A],J=[X&127];X=Math.floor(X/128);while(X>0)J.unshift(X&127|128),X=Math.floor(X/128);Y.push(...J)}return qw(6,Buffer.from(Y))}function J$(...$){return qw(48,Buffer.concat($))}function PU(...$){return qw(49,Buffer.concat($))}function bU($){return qw(3,Buffer.concat([Buffer.from([0]),$]))}function Y2($){return qw(4,$)}function A2($){return qw(12,Buffer.from($,"utf8"))}function uU($,w,Y){let A=128|(Y?32:0)|$;return qw(A,w)}function mN($){let w=$.export({format:"jwk"});if(!w.x||!w.y)throw Error("Public key JWK is missing x/y coordinates");let Y=xU(w.x),A=xU(w.y);if(Y.length!==32||A.length!==32)throw Error(`Expected 32-byte P-256 coordinates, got x=${Y.length} y=${A.length}`);return Buffer.concat([Buffer.from([4]),Y,A])}function X2($){let{domains:w,publicKey:Y,privateKey:A}=$;if(w.length===0)throw Error("At least one domain is required to build a CSR");let X=J$(PU(J$(kw(vN),A2(w[0])))),J=J$(J$(kw(PN),kw(bN)),bU(mN(Y))),U=w.map((q)=>uU(2,Buffer.from(q,"ascii"),!1)),B=J$(...U),W=J$(kw(iN),Y2(B)),j=J$(W),z=J$(kw(cN),PU(j)),G=uU(0,z,!0),K=J$(w2(0),X,J,G),F=DN("sha256",K,A),T=J$(kw(uN));return J$(K,T,bU(F))}function J2($){return X2($).toString("base64url")}function dN($){if($){let{createPrivateKey:X,createPublicKey:J}=SN("node:crypto"),U=X($),B=J(U);return{privateKey:U,publicKey:B,pem:$}}let{privateKey:w,publicKey:Y}=U2("ec",{namedCurve:"P-256"}),A=w.export({format:"pem",type:"pkcs8"}).toString();return{privateKey:w,publicKey:Y,pem:A}}async function wW($){let{domains:w,method:Y}=$;if(w.length===0)throw Error("obtainCertificate requires at least one domain");if(Y==="dns-01"&&!$.dnsProvider)throw Error("dns-01 requires a dnsProvider to publish _acme-challenge TXT records");if(w.some((G)=>G.startsWith("*."))&&Y!=="dns-01")throw Error("Wildcard certificates require the dns-01 challenge method");let A=$.directoryUrl??($.staging===!1?oz:sz),X=dN($.accountKeyPem),J=new KX({directoryUrl:A,accountKey:X.privateKey,accountPublicKey:X.publicKey});await J.newAccount({email:$.email});let{order:U,orderUrl:B}=await J.newOrder(w),W=$.http01Store??_X,j=[],z=[];try{for(let f of U.authorizations){let I=await J.getAuthorization(f);if(I.status==="valid")continue;let O=KX.selectChallenge(I,Y);if(Y==="dns-01"){let Z=$2(I.identifier.value),P0=J.dns01TxtValue(O.token);await $.dnsProvider.setTxt(Z,P0),j.push({name:Z,value:P0}),await pz(Z,P0,{timeoutMs:$.dnsPropagationTimeoutMs??120000})}else W.add(O.token,J.keyAuthorization(O.token)),z.push(O.token);await J.notifyChallengeReady(O.url),await J.pollAuthorization(f,{timeoutMs:$.timeoutMs})}let{privateKey:G,publicKey:K}=U2("ec",{namedCurve:"P-256"}),F=J2({domains:w,publicKey:K,privateKey:G});await J.finalizeOrder(U.finalize,F);let T=await J.pollOrder(B,{timeoutMs:$.timeoutMs}),q=await J.downloadCertificate(T),{certPem:E,chainPem:H}=ez(q),M=H?`${E}${H}`:E,Q=G.export({format:"pem",type:"pkcs8"}).toString(),V=new Date(new gN(E).validTo);return{certPem:E,keyPem:Q,chainPem:H,fullChainPem:M,accountKeyPem:X.pem,notAfter:V}}finally{for(let{name:G,value:K}of j)await $.dnsProvider?.removeTxt(G,K).catch(()=>{});for(let G of z)W.remove(G)}}class j2{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!Az($))return!0;return Xz($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=Az(Y)?Xz(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class z2{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function Dq($,w){this[$]=kq.bind(null,w)}class AW{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!Jz($))return!0;return Uz($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=Jz(Y)?Uz(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class XW{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function bq($,w={}){let Y=Object.keys(w).sort().map((A)=>`${A}:${w[A]}`).join("|");return Y?`${$}:${Y}`:$}function uq($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function vq($){return $.getStats().size*2}function JW($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&w0(w[0])&&"id"in w[0]&&w[0].id===3&&w0(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(w0(w)&&w0($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(w0($)&&"arr"in $&&Array.isArray($.arr)&&w0(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&w0(w[0])&&w0($[0])){let A=[...w];for(let X of $)if(w0(X)&&"name"in X){if(!A.find((J)=>w0(J)&&("name"in J)&&J.name===X.name))A.push(X)}else if(w0(X)&&"path"in X){if(!A.find((J)=>w0(J)&&("path"in J)&&J.path===X.path))A.push(X)}else if(!A.some((J)=>HX(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!w0(w)||!w0($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(w0(X)&&w0(Y[A]))Y[A]=JW(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&w0(X[0])&&w0(Y[A][0])){let J=[...X];for(let U of Y[A])if(w0(U)&&"name"in U){if(!J.find((B)=>w0(B)&&("name"in B)&&B.name===U.name))J.push(U)}else if(w0(U)&&"path"in U){if(!J.find((B)=>w0(B)&&("path"in B)&&B.path===U.path))J.push(U)}else if(!J.some((B)=>HX(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function HX($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!HX($[Y],w[Y]))return!1;return!0}if(w0($)&&w0(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!HX($[X],w[X]))return!1}return!0}return!1}function w0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function cq($,w){if(!B2($))return null;try{let Y=await import($),A=Y.default||Y;if(typeof A!=="object"||A===null||Array.isArray(A))return null;try{return JW(w,A)}catch{return null}}catch{return null}}async function iq({name:$="",cwd:w,defaultConfig:Y}){let A=w||cU.cwd(),X=[".ts",".js",".mjs",".cjs",".json"],J=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of J)for(let B of X){let W=qX(A,`${U}${B}`),j=await cq(W,Y);if(j!==null)return j}try{let U=qX(A,"package.json");if(B2(U)){let B=(await import(U))[$];if(B&&typeof B==="object"&&!Array.isArray(B))try{return JW(Y,B)}catch{}}}catch{}return Y}function mq($,w={}){let Y=NX.cwd();while(Y.includes("storage"))Y=jz(Y,"..");let A=jz(Y,$||"");if(w?.relative)return eN(NX.cwd(),A);return A}async function gq(){try{let $=await iq({name:"clarity",defaultConfig:WX,cwd:NX.cwd(),endpoint:"",headers:{}});return{...WX,...$}}catch{return WX}}function W0(){if(l$.env.NODE_ENV==="test"||l$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function dq(){if(l$.env.NODE_ENV==="test"||l$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof l$<"u"){let $=l$.type;if($==="renderer"||$==="worker")return!1;return!!(l$.versions&&(l$.versions.node||l$.versions.bun))}return!1}class K2{async format($){let w=await dq(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:N1.pid,hostname:w(),environment:N1.env.NODE_ENV||"development",platform:N1.platform,version:N1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:N1.env.NODE_ENV||N1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class fX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...mU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new K2,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??_0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...BX,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...BX};return{...BX,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:mU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}async writeToFile($){let w=(async()=>{let A,X=0,J=3,U=1000;while(X<J)try{try{try{await Xq(this.config.logDirectory,Fz.F_OK|Fz.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await Jq(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let B=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:Kw.from($);try{if(!fU(this.currentLogFile))await RU(this.currentLogFile,"",{mode:420});if(A=Kz(this.currentLogFile,"a",420),Aq(A,B,{flag:"a"}),Gz(A),A!==void 0)HU(A),A=void 0;if((await K1(this.currentLogFile)).size===0){if(await RU(this.currentLogFile,B,{flag:"w",mode:420}),(await K1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let j=W;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(X<J-1){let z=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${J}:`,z);let G=U*2**X;await new Promise((K)=>setTimeout(K,G)),X++;continue}}if(j?.code&&["ENOSPC","EDQUOT"].includes(j.code))throw Error(`Disk quota exceeded or no space left on device: ${j.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",j),j}finally{if(A!==void 0)try{HU(A)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(X===J-1){let j=B,z=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",z),B}X++;let W=U*2**(X-1);await new Promise((j)=>setTimeout(j,W))}})();this.pendingOperations.push(w);let Y=this.pendingOperations.length-1;try{await w}catch(A){throw console.error("Debug: [writeToFile] Error in operation:",A),A}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return F1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return F1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return F1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(W0())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let w=typeof $.interval==="number"?$.interval:60,Y=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((A)=>{console.error("Error rotating keys:",A)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=w,this.keys.set(w,Y),this.encryptionKeys.set(w,{key:Y,createdAt:new Date});let A=Array.from(this.encryptionKeys.entries()).sort(([,U],[,B])=>B.createdAt.getTime()-U.createdAt.getTime()),X=typeof $.maxKeys==="number"?$.maxKeys:1,J=Math.max(1,X);if(A.length>J)for(let[U]of A.slice(J))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return TU(16).toString("hex")}generateKey(){return TU(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=TU(16),A=$q("aes-256-gcm",w,Y),X=Kw.concat([A.update($,"utf8"),A.final()]),J=A.getAuthTag();return{encrypted:Kw.concat([Y,X,J]),iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=qz(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(Kw.from(Kw.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(W0())return;let $=await K1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await lA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await K1(Y).catch(()=>null))try{if(await Nz(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await nA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await RU(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await K1(Y).catch(()=>null))await Nz(Y,J)}if(this.currentLogFile=A,w.maxFiles){let X=(await lA(this.config.logDirectory)).filter((J)=>J.startsWith(this.name)).sort((J,U)=>U.localeCompare(J));for(let J of X.slice(w.maxFiles))await nA(F1(this.config.logDirectory,J))}}}async compressLogFile($,w){let Y=zz($),A=Yq(w),X=qz();await Uq(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);await this.writeToFile(A),console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(w),console.log(w);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue($)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue($){return{debug:0,info:1,success:2,warning:3,error:4}[$]}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),fU(this.currentLogFile))try{let $=Kz(this.currentLogFile,"r+");Gz($),HU($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!W0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await lA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await nA(F1(this.config.logDirectory,w))}catch(Y){console.error(`Failed to delete temp file ${w}:`,Y)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.fancy?s.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=_0.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${s.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);if(this.fancy&&!W0()){let j=I2[$],z=this.options.showTags!==!1&&this.name?s.gray(this.formatTag(this.name)):"",G;switch($){case"debug":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:s.gray(U),level:$}),console.error(G);break;case"info":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G);break;case"success":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:s.green(U),level:$}),console.error(G);break;case"warning":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.warn(G);break;case"error":if(G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G),B){let K=B.split(`
68
+ `);for(let F of K)if(F.trim()&&!F.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:s.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!W0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${J} ${this.environment}.${$.toUpperCase()}: ${U}
69
69
  `;if(B)W+=`${B}
70
- `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!W0()){let Y=this.options.showTags!==!1&&this.name?a.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:a.blue("◐"),tag:Y,message:`${a.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),W=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
71
- `,W=W.replace(this.ANSI_PATTERN,""),this.fancy&&!W0()){let j=this.options.showTags!==!1&&this.name?a.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:a.green("✓"),tag:j,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!W0())console.error(W.trim());await this.writeToFile(W)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new KX(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(W0())throw Error("createReadStream is not supported in browser environments");if(!BU(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return e9(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=zw.isBuffer($)?$:zw.from($,"base64"),X=A.slice(0,16),J=A.slice(-16),U=A.slice(16,-16),B=gN("aes-256-gcm",Y,X);return B.setAuthTag(J),zw.concat([B.update(U),B.final()]).toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return W0()}isServerMode(){return!W0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w);if(this.fancy&&!W0()){let J=$.split(`
72
- `),U=Math.max(...J.map((z)=>z.length))+2,B=`┌${"─".repeat(U)}┐`,W=`└${"─".repeat(U)}┘`,j=J.map((z)=>{let G=" ".repeat(U-z.length-2);return`│ ${z}${G} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Y,message:a.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Y,message:a.cyan(B)})),j.forEach((z)=>console.error(this.formatConsoleMessage({timestamp:Y,message:a.cyan(z),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Y,message:a.cyan(W),showTimestamp:!1}))}else if(!W0())console.error(`${A} ${this.environment}.INFO: [BOX] ${$}`);let X=`${A} ${this.environment}.INFO: [BOX] ${$}
73
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(X)}async prompt($){if(W0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${a.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();_0.stdin.removeListener("data",Y);try{if(typeof _0.stdin.setRawMode==="function")_0.stdin.setRawMode(!1)}catch{}_0.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof _0.stdin.setRawMode==="function")_0.stdin.setRawMode(!0)}catch{}_0.stdin.resume(),_0.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let X=/%([sdijfo%])/g,J=0;if(Y=$.replace(X,(U,B)=>{if(B==="%")return"%";if(J>=w.length)return U;let W=w[J++];switch(B){case"s":return String(W);case"d":case"i":return Number(W).toString();case"j":case"o":return JSON.stringify(W,null,2);default:return U}}),J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`}if(this.fancy&&!W0()){let X=this.options.showTags!==!1&&this.name?a.gray(this.formatTag(this.name)):"",J=a.blue("◐");console.error(`${J} ${X} ${a.cyan(Y)}`)}let A=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
74
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(A)}progress($,w=""){if(!this.enabled||!this.fancy||W0()||$<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let Y=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:Y,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(A,X)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||W0())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,A)),X!==void 0)this.activeProgressBar.message=X;let J=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,J)},finish:(A)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||W0())return;if(this.activeProgressBar.current=this.activeProgressBar.total,A!==void 0)this.activeProgressBar.message=A;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(A,X="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||W0())return;_0.stdout.write(`${"\r".padEnd(_0.stdout.columns||80)}\r`),this.log(X,A),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||W0()||!_0.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=a.green("━".repeat(A)),U=a.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=w||Y===100?a.green("✓"):a.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${a.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=_0.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,_0.stdout.write($.lastRenderedLine),w)_0.stdout.write(`
75
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||W0()||!_0.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(W0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await cA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let X=G1(this.config.logDirectory,A);if($.before)try{if((await z1(X)).mtime>=$.before)continue}catch(J){console.error(`Failed to get stats for file ${X}:`,J);continue}Y.push(X)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await vA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function $X($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&p(w[0])&&"id"in w[0]&&w[0].id===3&&p(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(p(w)&&p($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(p($)&&"arr"in $&&Array.isArray($.arr)&&p(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&p(w[0])&&p($[0])){let A=[...w];for(let X of $)if(p(X)&&"name"in X){if(!A.find((J)=>p(J)&&("name"in J)&&J.name===X.name))A.push(X)}else if(p(X)&&"path"in X){if(!A.find((J)=>p(J)&&("path"in J)&&J.path===X.path))A.push(X)}else if(!A.some((J)=>NX(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!p(w)||!p($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(p(X)&&p(Y[A]))Y[A]=$X(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&p(X[0])&&p(Y[A][0])){let J=[...X];for(let U of Y[A])if(p(U)&&"name"in U){if(!J.find((B)=>p(B)&&("name"in B)&&B.name===U.name))J.push(U)}else if(p(U)&&"path"in U){if(!J.find((B)=>p(B)&&("path"in B)&&B.path===U.path))J.push(U)}else if(!J.some((B)=>NX(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function tU($,w,Y="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return Y==="replace"?w:$X($,w);if(Array.isArray($))return Y==="replace"?w:$X($,w);if(!p(w)||!p($))return w;let A={...$};for(let X of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,X))continue;let J=w[X],U=A[X];if(J===null||J===void 0)continue;if(Array.isArray(J)||Array.isArray(U))if(Y==="replace")A[X]=J;else A[X]=$X(U,J);else if(p(J)&&p(U))A[X]=tU(U,J,Y);else A[X]=J}return A}function NX($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!NX($[Y],w[Y]))return!1;return!0}if(p($)&&p(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!NX($[X],w[X]))return!1}return!0}return!1}function p($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function sA($,w,Y="replace"){if(!az($))return null;try{let A=await import($),X=A.default||A;if(typeof X!=="object"||X===null||Array.isArray(X))return null;try{return tU(w,X,Y)}catch{return null}}catch{return null}}function kf($,w,Y=!1){if(!$)return w;let A=$.toUpperCase().replace(/-/g,"_"),X={...w};function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],F=(f)=>f.replace(/([A-Z])/g,"_$1").toUpperCase(),K=`${A}_${G.map(F).join("_")}`,q=`${A}_${G.map((f)=>f.toUpperCase()).join("_")}`;if(Y)h0.info(`Checking environment variable ${K} for config ${$}.${G.join(".")}`);if(typeof z==="object"&&z!==null&&!Array.isArray(z))W[j]=J(z,G);else{let f=fY.env[K]||fY.env[q];if(f!==void 0){if(Y)h0.info(`Using environment variable ${f?K:q} for config ${$}.${G.join(".")}`);if(typeof z==="number")W[j]=Number(f);else if(typeof z==="boolean")W[j]=f.toLowerCase()==="true";else if(Array.isArray(z))try{let E=JSON.parse(f);if(Array.isArray(E))W[j]=E;else W[j]=f.split(",").map((H)=>H.trim())}catch{W[j]=f.split(",").map((E)=>E.trim())}else W[j]=f}}}return W}return J(X)}async function Df({name:$="",alias:w,cwd:Y,configDir:A,defaultConfig:X,verbose:J=!1,checkEnv:U=!0,arrayStrategy:B="replace"}){let W=U&&typeof X==="object"&&X!==null&&!Array.isArray(X)?kf($,X,J):X,j=Y||fY.cwd(),z=[".ts",".js",".mjs",".cjs",".json"];if(J)h0.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${j}`);let G=[$,`.${$}`].filter(Boolean),F=[`${$}.config`,`.${$}.config`].filter(Boolean),K=w?[w,`.${w}`]:[],q=w?[`${w}.config`,`.${w}.config`]:[],f=Array.from(new Set([j,i0(j,"config"),i0(j,".config"),A?i0(j,A):void 0].filter(Boolean)));for(let E of f){if(J)h0.info(`Searching for configuration in: ${E}`);let H=[i0(j,"config"),i0(j,".config")].concat(A?[i0(j,A)]:[]).includes(E)?[...G,...F,...K,...q]:[...F,...G,...q,...K];for(let M of H)for(let y of z){let Q=i0(E,`${M}${y}`),T=await sA(Q,W,B);if(T!==null){if(J)h0.success(`Configuration loaded from: ${Q}`);return T}}}if($){let E=i0(JU(),".config",$),H=["config",`${$}.config`];if(w)H.push(`${w}.config`);if(J)h0.info(`Checking user config directory: ${E}`);for(let M of H)for(let y of z){let Q=i0(E,`${M}${y}`),T=await sA(Q,W,B);if(T!==null){if(J)h0.success(`Configuration loaded from user config directory: ${Q}`);return T}}}if($){let E=i0(JU(),".config"),H=[`.${$}.config`];if(w)H.push(`.${w}.config`);if(J)h0.info(`Checking user config directory for dotfile configs: ${E}`);for(let M of H)for(let y of z){let Q=i0(E,`${M}${y}`),T=await sA(Q,W,B);if(T!==null){if(J)h0.success(`Configuration loaded from user config directory dotfile: ${Q}`);return T}}}if($){let E=JU(),H=[`.${$}.config`,`.${$}`];if(w)H.push(`.${w}.config`),H.push(`.${w}`);if(J)h0.info(`Checking user home directory for dotfile configs: ${E}`);for(let M of H)for(let y of z){let Q=i0(E,`${M}${y}`),T=await sA(Q,W,B);if(T!==null){if(J)h0.success(`Configuration loaded from user home directory: ${Q}`);return T}}}try{let E=i0(j,"package.json");if(az(E)){let H=await import(E),M=H[$];if(!M&&w){if(M=H[w],M&&J)h0.success(`Using alias "${w}" configuration from package.json`)}if(M&&typeof M==="object"&&!Array.isArray(M))try{if(J)h0.success(`Configuration loaded from package.json: ${M===H[$]?$:w}`);return tU(W,M,B)}catch(y){if(J)h0.warn("Failed to merge package.json config:",y)}}}catch(E){if(J)h0.warn("Failed to load package.json:",E)}if(J)h0.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function xf($,w={}){let Y=WX.cwd();while(Y.includes("storage"))Y=s9(Y,"..");let A=s9(Y,$||"");if(w?.relative)return cN(WX.cwd(),A);return A}async function Pf(){try{let $=await Df({name:"clarity",alias:"logging",defaultConfig:AX,cwd:WX.cwd()});return{...AX,...$||{}}}catch{return AX}}function q0(){if(g$.env.NODE_ENV==="test"||g$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function bf(){if(g$.env.NODE_ENV==="test"||g$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof g$<"u"){let $=g$.type;if($==="renderer"||$==="worker")return!1;return!!(g$.versions&&(g$.versions.node||g$.versions.bun))}return!1}class Y2{async format($){let w=await bf(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:f1.pid,hostname:w(),environment:f1.env.NODE_ENV||"development",platform:f1.platform,version:f1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:f1.env.NODE_ENV||f1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class fX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...ZU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new Y2,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??d.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...XX,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...XX};return{...XX,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:ZU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!q0()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let A,X=0,J=3,U=1000;while(X<J)try{try{try{await eN(this.config.logDirectory,Bz.F_OK|Bz.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await $f(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let B=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:c$.from($);try{if(!iA(this.currentLogFile))await FU(this.currentLogFile,"",{mode:420});if(A=Wz(this.currentLogFile,"a",420),oN(A,B,{flag:"a"}),Uz(A),A!==void 0)GU(A),A=void 0;if((await K1(this.currentLogFile)).size===0){if(await FU(this.currentLogFile,B,{flag:"w",mode:420}),(await K1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let j=W;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(X<J-1){let z=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${J}:`,z);let G=U*2**X;await new Promise((F)=>setTimeout(F,G)),X++;continue}}if(j?.code&&["ENOSPC","EDQUOT"].includes(j.code))throw Error(`Disk quota exceeded or no space left on device: ${j.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",j),j}finally{if(A!==void 0)try{GU(A)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(X===J-1){let j=B,z=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",z),B}X++;let W=U*2**(X-1);await new Promise((j)=>setTimeout(j,W))}})();this.pendingOperations.push(w);let Y=this.pendingOperations.length-1;try{await w}catch(A){throw console.error("Debug: [writeToFile] Error in operation:",A),A}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return N1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return N1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return N1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(q0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let w=typeof $.interval==="number"?$.interval:60,Y=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((A)=>{console.error("Error rotating keys:",A)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=w,this.keys.set(w,Y),this.encryptionKeys.set(w,{key:Y,createdAt:new Date});let A=Array.from(this.encryptionKeys.entries()).sort(([,U],[,B])=>B.createdAt.getTime()-U.createdAt.getTime()),X=typeof $.maxKeys==="number"?$.maxKeys:1,J=Math.max(1,X);if(A.length>J)for(let[U]of A.slice(J))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return zU(16).toString("hex")}generateKey(){return zU(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=zU(16),A=tN("aes-256-gcm",w,Y),X=c$.isBuffer($)?$:c$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=c$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=zz(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(c$.from(c$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(q0())return;if(!this.shouldWriteToFile())return;let $=await K1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await mA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await K1(Y).catch(()=>null))try{if(await jz(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await gA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await FU(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await K1(Y).catch(()=>null))await jz(Y,J)}if(this.currentLogFile=A,w.maxFiles){let X=(await mA(this.config.logDirectory)).filter((J)=>J.startsWith(this.name)).sort((J,U)=>U.localeCompare(J));for(let J of X.slice(w.maxFiles))await gA(N1(this.config.logDirectory,J))}}}async compressLogFile($,w){let Y=Jz($),A=sN(w),X=zz();await Af(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),iA(this.currentLogFile))try{let $=Wz(this.currentLogFile,"r+");Uz($),GU($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!q0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await mA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await gA(N1(this.config.logDirectory,w))}catch(Y){console.error(`Failed to delete temp file ${w}:`,Y)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?c.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||q0())return!1;let $=typeof d.env.NO_COLOR<"u",w=d.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof d.stderr<"u"&&d.stderr.isTTY||typeof d.stdout<"u"&&d.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=d.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${c.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=c.underline(c.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>c.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>c.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>c.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>c.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>c.strikethrough(A)),w}supportsHyperlinks(){if(q0())return!1;let $=d.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=d.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(wf(w)||w.startsWith("./")||w.startsWith("../"))w=Yf(w);else return null;return iA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":F2[$],F=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",K;switch($){case"debug":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:c.gray(W),level:$}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"success":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:c.green(W),level:$}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.error(K),B){let q=B.split(`
76
- `);for(let f of q)if(f.trim()&&!f.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:c.gray(` ${f}`),level:$,showTimestamp:!1}))}break}}else if(!q0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
70
+ `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!W0()){let Y=this.options.showTags!==!1&&this.name?s.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:s.blue("◐"),tag:Y,message:`${s.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),W=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
71
+ `,W=W.replace(this.ANSI_PATTERN,""),this.fancy&&!W0()){let j=this.options.showTags!==!1&&this.name?s.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:s.green("✓"),tag:j,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!W0())console.error(W.trim());await this.writeToFile(W)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new fX(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(W0())throw Error("createReadStream is not supported in browser environments");if(!fU(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return zz(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=Kw.isBuffer($)?$:Kw.from($,"base64"),X=A.slice(0,16),J=A.slice(-16),U=A.slice(16,-16),B=wq("aes-256-gcm",Y,X);return B.setAuthTag(J),Kw.concat([B.update(U),B.final()]).toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return W0()}isServerMode(){return!W0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w);if(this.fancy&&!W0()){let J=$.split(`
72
+ `),U=Math.max(...J.map((z)=>z.length))+2,B=`┌${"─".repeat(U)}┐`,W=`└${"─".repeat(U)}┘`,j=J.map((z)=>{let G=" ".repeat(U-z.length-2);return`│ ${z}${G} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Y,message:s.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Y,message:s.cyan(B)})),j.forEach((z)=>console.error(this.formatConsoleMessage({timestamp:Y,message:s.cyan(z),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Y,message:s.cyan(W),showTimestamp:!1}))}else if(!W0())console.error(`${A} ${this.environment}.INFO: [BOX] ${$}`);let X=`${A} ${this.environment}.INFO: [BOX] ${$}
73
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(X)}async prompt($){if(W0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${s.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();_0.stdin.removeListener("data",Y);try{if(typeof _0.stdin.setRawMode==="function")_0.stdin.setRawMode(!1)}catch{}_0.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof _0.stdin.setRawMode==="function")_0.stdin.setRawMode(!0)}catch{}_0.stdin.resume(),_0.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let X=/%([sdijfo%])/g,J=0;if(Y=$.replace(X,(U,B)=>{if(B==="%")return"%";if(J>=w.length)return U;let W=w[J++];switch(B){case"s":return String(W);case"d":case"i":return Number(W).toString();case"j":case"o":return JSON.stringify(W,null,2);default:return U}}),J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`}if(this.fancy&&!W0()){let X=this.options.showTags!==!1&&this.name?s.gray(this.formatTag(this.name)):"",J=s.blue("◐");console.error(`${J} ${X} ${s.cyan(Y)}`)}let A=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
74
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(A)}progress($,w=""){if(!this.enabled||!this.fancy||W0()||$<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let Y=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:Y,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(A,X)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||W0())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,A)),X!==void 0)this.activeProgressBar.message=X;let J=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,J)},finish:(A)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||W0())return;if(this.activeProgressBar.current=this.activeProgressBar.total,A!==void 0)this.activeProgressBar.message=A;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(A,X="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||W0())return;_0.stdout.write(`${"\r".padEnd(_0.stdout.columns||80)}\r`),this.log(X,A),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||W0()||!_0.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=s.green("━".repeat(A)),U=s.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=w||Y===100?s.green("✓"):s.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${s.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=_0.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,_0.stdout.write($.lastRenderedLine),w)_0.stdout.write(`
75
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||W0()||!_0.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(W0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await lA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let X=F1(this.config.logDirectory,A);if($.before)try{if((await K1(X)).mtime>=$.before)continue}catch(J){console.error(`Failed to get stats for file ${X}:`,J);continue}Y.push(X)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await nA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function UX($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&p(w[0])&&"id"in w[0]&&w[0].id===3&&p(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(p(w)&&p($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(p($)&&"arr"in $&&Array.isArray($.arr)&&p(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&p(w[0])&&p($[0])){let A=[...w];for(let X of $)if(p(X)&&"name"in X){if(!A.find((J)=>p(J)&&("name"in J)&&J.name===X.name))A.push(X)}else if(p(X)&&"path"in X){if(!A.find((J)=>p(J)&&("path"in J)&&J.path===X.path))A.push(X)}else if(!A.some((J)=>RX(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!p(w)||!p($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(p(X)&&p(Y[A]))Y[A]=UX(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&p(X[0])&&p(Y[A][0])){let J=[...X];for(let U of Y[A])if(p(U)&&"name"in U){if(!J.find((B)=>p(B)&&("name"in B)&&B.name===U.name))J.push(U)}else if(p(U)&&"path"in U){if(!J.find((B)=>p(B)&&("path"in B)&&B.path===U.path))J.push(U)}else if(!J.some((B)=>RX(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function UW($,w,Y="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return Y==="replace"?w:UX($,w);if(Array.isArray($))return Y==="replace"?w:UX($,w);if(!p(w)||!p($))return w;let A={...$};for(let X of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,X))continue;let J=w[X],U=A[X];if(J===null||J===void 0)continue;if(Array.isArray(J)||Array.isArray(U))if(Y==="replace")A[X]=J;else A[X]=UX(U,J);else if(p(J)&&p(U))A[X]=UW(U,J,Y);else A[X]=J}return A}function RX($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!RX($[Y],w[Y]))return!1;return!0}if(p($)&&p(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!RX($[X],w[X]))return!1}return!0}return!1}function p($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function AX($,w,Y="replace"){if(!W2($))return null;try{let A=await import($),X=A.default||A;if(typeof X!=="object"||X===null||Array.isArray(X))return null;try{return UW(w,X,Y)}catch{return null}}catch{return null}}function lq($,w,Y=!1){if(!$)return w;let A=$.toUpperCase().replace(/-/g,"_"),X={...w};function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],K=(q)=>q.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${A}_${G.map(K).join("_")}`,T=`${A}_${G.map((q)=>q.toUpperCase()).join("_")}`;if(Y)Z0.info(`Checking environment variable ${F} for config ${$}.${G.join(".")}`);if(typeof z==="object"&&z!==null&&!Array.isArray(z))W[j]=J(z,G);else{let q=fY.env[F]||fY.env[T];if(q!==void 0){if(Y)Z0.info(`Using environment variable ${q?F:T} for config ${$}.${G.join(".")}`);if(typeof z==="number")W[j]=Number(q);else if(typeof z==="boolean")W[j]=q.toLowerCase()==="true";else if(Array.isArray(z))try{let E=JSON.parse(q);if(Array.isArray(E))W[j]=E;else W[j]=q.split(",").map((H)=>H.trim())}catch{W[j]=q.split(",").map((E)=>E.trim())}else W[j]=q}}}return W}return J(X)}async function nq({name:$="",alias:w,cwd:Y,configDir:A,defaultConfig:X,verbose:J=!1,checkEnv:U=!0,arrayStrategy:B="replace"}){let W=U&&typeof X==="object"&&X!==null&&!Array.isArray(X)?lq($,X,J):X,j=Y||fY.cwd(),z=[".ts",".js",".mjs",".cjs",".json"];if(J)Z0.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${j}`);let G=[$,`.${$}`].filter(Boolean),K=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],q=Array.from(new Set([j,i0(j,"config"),i0(j,".config"),A?i0(j,A):void 0].filter(Boolean)));for(let E of q){if(J)Z0.info(`Searching for configuration in: ${E}`);let H=[i0(j,"config"),i0(j,".config")].concat(A?[i0(j,A)]:[]).includes(E)?[...G,...K,...F,...T]:[...K,...G,...T,...F];for(let M of H)for(let Q of z){let V=i0(E,`${M}${Q}`),f=await AX(V,W,B);if(f!==null){if(J)Z0.success(`Configuration loaded from: ${V}`);return f}}}if($){let E=i0(EU(),".config",$),H=["config",`${$}.config`];if(w)H.push(`${w}.config`);if(J)Z0.info(`Checking user config directory: ${E}`);for(let M of H)for(let Q of z){let V=i0(E,`${M}${Q}`),f=await AX(V,W,B);if(f!==null){if(J)Z0.success(`Configuration loaded from user config directory: ${V}`);return f}}}if($){let E=i0(EU(),".config"),H=[`.${$}.config`];if(w)H.push(`.${w}.config`);if(J)Z0.info(`Checking user config directory for dotfile configs: ${E}`);for(let M of H)for(let Q of z){let V=i0(E,`${M}${Q}`),f=await AX(V,W,B);if(f!==null){if(J)Z0.success(`Configuration loaded from user config directory dotfile: ${V}`);return f}}}if($){let E=EU(),H=[`.${$}.config`,`.${$}`];if(w)H.push(`.${w}.config`),H.push(`.${w}`);if(J)Z0.info(`Checking user home directory for dotfile configs: ${E}`);for(let M of H)for(let Q of z){let V=i0(E,`${M}${Q}`),f=await AX(V,W,B);if(f!==null){if(J)Z0.success(`Configuration loaded from user home directory: ${V}`);return f}}}try{let E=i0(j,"package.json");if(W2(E)){let H=await import(E),M=H[$];if(!M&&w){if(M=H[w],M&&J)Z0.success(`Using alias "${w}" configuration from package.json`)}if(M&&typeof M==="object"&&!Array.isArray(M))try{if(J)Z0.success(`Configuration loaded from package.json: ${M===H[$]?$:w}`);return UW(W,M,B)}catch(Q){if(J)Z0.warn("Failed to merge package.json config:",Q)}}}catch(E){if(J)Z0.warn("Failed to load package.json:",E)}if(J)Z0.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function pq($,w={}){let Y=FX.cwd();while(Y.includes("storage"))Y=Bz(Y,"..");let A=Bz(Y,$||"");if(w?.relative)return sN(FX.cwd(),A);return A}async function rq(){try{let $=await nq({name:"clarity",alias:"logging",defaultConfig:jX,cwd:FX.cwd()});return{...jX,...$||{}}}catch{return jX}}function E0(){if(n$.env.NODE_ENV==="test"||n$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function tq(){if(n$.env.NODE_ENV==="test"||n$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof n$<"u"){let $=n$.type;if($==="renderer"||$==="worker")return!1;return!!(n$.versions&&(n$.versions.node||n$.versions.bun))}return!1}class F2{async format($){let w=await tq(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:T1.pid,hostname:w(),environment:T1.env.NODE_ENV||"development",platform:T1.platform,version:T1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:T1.env.NODE_ENV||T1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class MX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...gU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new F2,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??l.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...zX,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...zX};return{...zX,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:gU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!E0()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let A,X=0,J=3,U=1000;while(X<J)try{try{try{await Gq(this.config.logDirectory,fz.F_OK|fz.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await Kq(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let B=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:m$.from($);try{if(!pA(this.currentLogFile))await VU(this.currentLogFile,"",{mode:420});if(A=Hz(this.currentLogFile,"a",420),zq(A,B,{flag:"a"}),Tz(A),A!==void 0)IU(A),A=void 0;if((await q1(this.currentLogFile)).size===0){if(await VU(this.currentLogFile,B,{flag:"w",mode:420}),(await q1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let j=W;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(X<J-1){let z=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${J}:`,z);let G=U*2**X;await new Promise((K)=>setTimeout(K,G)),X++;continue}}if(j?.code&&["ENOSPC","EDQUOT"].includes(j.code))throw Error(`Disk quota exceeded or no space left on device: ${j.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",j),j}finally{if(A!==void 0)try{IU(A)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(X===J-1){let j=B,z=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",z),B}X++;let W=U*2**(X-1);await new Promise((j)=>setTimeout(j,W))}})();this.pendingOperations.push(w);let Y=this.pendingOperations.length-1;try{await w}catch(A){throw console.error("Debug: [writeToFile] Error in operation:",A),A}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return E1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return E1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return E1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(E0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let w=typeof $.interval==="number"?$.interval:60,Y=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((A)=>{console.error("Error rotating keys:",A)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=w,this.keys.set(w,Y),this.encryptionKeys.set(w,{key:Y,createdAt:new Date});let A=Array.from(this.encryptionKeys.entries()).sort(([,U],[,B])=>B.createdAt.getTime()-U.createdAt.getTime()),X=typeof $.maxKeys==="number"?$.maxKeys:1,J=Math.max(1,X);if(A.length>J)for(let[U]of A.slice(J))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return MU(16).toString("hex")}generateKey(){return MU(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=MU(16),A=Wq("aes-256-gcm",w,Y),X=m$.isBuffer($)?$:m$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=m$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=Mz(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(m$.from(m$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(E0())return;if(!this.shouldWriteToFile())return;let $=await q1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await rA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await q1(Y).catch(()=>null))try{if(await Rz(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await tA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await VU(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await q1(Y).catch(()=>null))await Rz(Y,J)}if(this.currentLogFile=A,w.maxFiles){let X=(await rA(this.config.logDirectory)).filter((J)=>J.startsWith(this.name)).sort((J,U)=>U.localeCompare(J));for(let J of X.slice(w.maxFiles))await tA(E1(this.config.logDirectory,J))}}}async compressLogFile($,w){let Y=Ez($),A=jq(w),X=Mz();await qq(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),pA(this.currentLogFile))try{let $=Hz(this.currentLogFile,"r+");Tz($),IU($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!E0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await rA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await tA(E1(this.config.logDirectory,w))}catch(Y){console.error(`Failed to delete temp file ${w}:`,Y)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?v.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||E0())return!1;let $=typeof l.env.NO_COLOR<"u",w=l.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof l.stderr<"u"&&l.stderr.isTTY||typeof l.stdout<"u"&&l.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=l.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${v.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=v.underline(v.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>v.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>v.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>v.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>v.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>v.strikethrough(A)),w}supportsHyperlinks(){if(E0())return!1;let $=l.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=l.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(Fq(w)||w.startsWith("./")||w.startsWith("../"))w=Nq(w);else return null;return pA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":V2[$],K=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:v.gray(W),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:v.green(W),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.error(F),B){let T=B.split(`
76
+ `);for(let q of T)if(q.trim()&&!q.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:v.gray(` ${q}`),level:$,showTimestamp:!1}))}break}}else if(!E0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
77
77
  `;if(B)z+=`${B}
78
- `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(X,J)=>{},finish:(X)=>{},interrupt:(X,J)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!q0()&&d.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(X,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,X),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!q0()&&d.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(X)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,X)},interrupt:(X,J="info")=>{if(!q0()&&d.stdout.isTTY)d.stdout.write(`
79
- `);if(this[J==="warning"?"warn":J](X),this.activeProgressBar&&this.shouldStyleConsole()&&!q0()&&d.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":c.blue("◐"),tag:Y,message:`${c.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),W=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
80
- `,W=W.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":c.green("✓"),tag:j,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!q0())console.error(W.trim());if(this.shouldWriteToFile())await this.writeToFile(W)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new fX(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(q0())throw Error("createReadStream is not supported in browser environments");if(!iA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Jz(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=c$.isBuffer($)?$:c$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=aN("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=c$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return q0()}isServerMode(){return!q0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
81
- `),W=Math.max(...B.map((F)=>F.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((F)=>{return this.formatConsoleMessage({timestamp:Y,message:c.cyan(F),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:c.cyan(j),showTimestamp:!1})),G.forEach((F)=>console.error(F)),console.error(this.formatConsoleMessage({timestamp:Y,message:c.cyan(z),showTimestamp:!1}))}else if(!q0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
82
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(q0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${c.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();d.stdin.removeListener("data",Y);try{if(typeof d.stdin.setRawMode==="function")d.stdin.setRawMode(!1)}catch{}d.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof d.stdin.setRawMode==="function")d.stdin.setRawMode(!0)}catch{}d.stdin.resume(),d.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,B=0;if(Y=$.replace(U,(W,j)=>{if(j==="%")return"%";if(B>=w.length)return W;let z=w[B++];switch(j){case"s":return String(z);case"d":case"i":return Number(z).toString();case"j":case"o":return JSON.stringify(z,null,2);default:return W}}),B<w.length)Y+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let U=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${c.blue("◐")} `;console.error(`${B}${U} ${c.cyan(A)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
83
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(J)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!d.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=c.green("━".repeat(A)),U=c.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?c.green("✓"):c.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${c.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=d.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,d.stdout.write($.lastRenderedLine),w)d.stdout.write(`
84
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||q0()||!d.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(q0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await mA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let X=N1(this.config.logDirectory,A);if($.before)try{if((await K1(X)).mtime>=$.before)continue}catch(J){console.error(`Failed to get stats for file ${X}:`,J);continue}Y.push(X)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await gA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function A2($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function X2($){return $ instanceof s0}function uf($){return $ instanceof qX}function cf($){if(X2($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((w)=>$.message.toLowerCase().includes(w.toLowerCase()))}class CX{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return TY.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=lA.env[W]||(j?lA.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=lA.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof EX)throw G;throw Fw.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw Fw.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(lA.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
78
+ `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(X,J)=>{},finish:(X)=>{},interrupt:(X,J)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!E0()&&l.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(X,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,X),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!E0()&&l.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(X)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,X)},interrupt:(X,J="info")=>{if(!E0()&&l.stdout.isTTY)l.stdout.write(`
79
+ `);if(this[J==="warning"?"warn":J](X),this.activeProgressBar&&this.shouldStyleConsole()&&!E0()&&l.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":v.blue("◐"),tag:Y,message:`${v.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),W=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
80
+ `,W=W.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":v.green("✓"),tag:j,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!E0())console.error(W.trim());if(this.shouldWriteToFile())await this.writeToFile(W)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new MX(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(E0())throw Error("createReadStream is not supported in browser environments");if(!pA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Ez(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=m$.isBuffer($)?$:m$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=Bq("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=m$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return E0()}isServerMode(){return!E0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
81
+ `),W=Math.max(...B.map((K)=>K.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((K)=>{return this.formatConsoleMessage({timestamp:Y,message:v.cyan(K),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:v.cyan(j),showTimestamp:!1})),G.forEach((K)=>console.error(K)),console.error(this.formatConsoleMessage({timestamp:Y,message:v.cyan(z),showTimestamp:!1}))}else if(!E0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
82
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(E0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${v.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();l.stdin.removeListener("data",Y);try{if(typeof l.stdin.setRawMode==="function")l.stdin.setRawMode(!1)}catch{}l.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof l.stdin.setRawMode==="function")l.stdin.setRawMode(!0)}catch{}l.stdin.resume(),l.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,B=0;if(Y=$.replace(U,(W,j)=>{if(j==="%")return"%";if(B>=w.length)return W;let z=w[B++];switch(j){case"s":return String(z);case"d":case"i":return Number(z).toString();case"j":case"o":return JSON.stringify(z,null,2);default:return W}}),B<w.length)Y+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let U=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${v.blue("◐")} `;console.error(`${B}${U} ${v.cyan(A)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
83
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(J)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!l.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=v.green("━".repeat(A)),U=v.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?v.green("✓"):v.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${v.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=l.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,l.stdout.write($.lastRenderedLine),w)l.stdout.write(`
84
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||E0()||!l.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(E0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await rA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let X=E1(this.config.logDirectory,A);if($.before)try{if((await q1(X)).mtime>=$.before)continue}catch(J){console.error(`Failed to get stats for file ${X}:`,J);continue}Y.push(X)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await tA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function N2($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function q2($){return $ instanceof s0}function aq($){return $ instanceof IX}function sq($){if(q2($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((w)=>$.message.toLowerCase().includes(w.toLowerCase()))}class ZX{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return VY.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=aA.env[W]||(j?aA.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=aA.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof VX)throw G;throw Nw.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw Nw.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(aA.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
85
85
 
86
86
  `;for(let A of $)Y+=`${A.key}
87
87
  `,Y+=` Type: ${A.type}
@@ -93,25 +93,25 @@ export type ConfigOf = Config
93
93
  `;Y+=`| Variable | Type | Description | Example |
94
94
  `,Y+=`|----------|------|-------------|----------|
95
95
  `;for(let A of $)Y+=`| \`${A.key}\` | ${A.type} | ${A.description} | \`${A.example}\` |
96
- `;return Y}}function vf($,w){let Y=j2("process");if(typeof Y>"u"||!Y.env)return w;let A=Y.env[$];return A!==void 0?A:w}function J2($,w,Y={}){return U2($,w,Y,new WeakMap)}function U2($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return W2($,w,X,A);if(!W$(w)||!W$($))return w;return df($,w,Y,A)}function W2($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return mf($,w);case"smart":return gf($,w,A);default:return w}return w}function mf($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>SU(X,A)))Y.push(A);return Y}function gf($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(W$(w[0])&&W$($[0]))return lf($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function lf($,w,Y){let A=[...w];for(let X of $){if(!W$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((W)=>W$(W)&&(B in W)&&W[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function df($,w,Y,A){let X=w;if(W$(X)&&A.has(X))return A.get(X);let J={...$};if(W$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(W$(B)&&W$(W))J[U]=U2(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=W2(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function aU($,w,Y="replace"){return J2($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function SU($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!SU($[Y],w[Y]))return!1;return!0}if(W$($)&&W$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!SU($[X],w[X]))return!1}return!0}return!1}function W$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class QX{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=R1.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!dA($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,F="default"in z,K=Object.keys(z).length>0;if(!F&&!K)throw new qY($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new qY($,Error("Configuration must export a valid object"),"unknown");let q={config:aU(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)R1.setWithFileCheck("file",q,$,J);return q}catch(j){throw j instanceof Error?Fw.configLoad($,j):Fw.configLoad($,Error(String(j)))}};if(U)return TY.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(KU(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(Y.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)Y.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return Y.filter(Boolean)}checkFileAccess($){return A2(async()=>{return dA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!dA($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=KU($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=KU($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((w)=>w.test($))}async validateConfigFile($){let w=[];try{if(!dA($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class sU{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],F={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,F);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],F);else return this.validateWithJSONSchema($,w,F)}catch(K){return z.push({path:"",message:`Validation failed: ${K}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await TY.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!Xf(w))throw new EY(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new EY(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:N2},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class oU{fileLoader=new QX;envProcessor=new CX;validator=new sU;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),F=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(F||z))throw W;if(G&&(!j||!F))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)f$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw f$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||hw.cwd(),F=[],K=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(K)return F.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(K,F,W,A,z);let q=await this.loadHomeConfiguration(A,X,B,j,z,W);if(q)return F.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(q,F,W,A,z);let f=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(f)return F.push(m0(G,"package.json")),this.finalizeResult(f,F,W,A,z);if(F.push(...this.getAllSearchPaths(A,X,G,U)),w)throw Fw.configNotFound(A,F,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${X?` or alias "${X}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?FY($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)f$.info(`Searching for configuration in: ${G}`);let F=this.fileLoader.generateConfigPaths($,G,w),K=await this.fileLoader.tryLoadFromPaths(F,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(K){if(U)f$.success(`Configuration loaded from: ${K.source.path}`);return K}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?FY($,Y,X):Y,B=[m0(j1(),".config",$),m0(j1(),".config"),j1()];for(let W of B){if(X)f$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)f$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?FY($,A,J):A;try{let W=m0(Y,"package.json");if(!OU(W))return null;let j=await import(W),z=j[$],G=$;if(!z&&w)z=j[w],G=w;if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)f$.success(`Configuration loaded from package.json: ${G}`);return{config:aU(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)f$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:FY($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw Fw.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return R1.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);R1.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias)Y.push(`alias:${w.alias}`);if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,m0($,"config"),m0($,".config"),w?m0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(m0(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[m0(j1(),".config",$),m0(j1(),".config"),j1()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}function Tz($){let w=!($.message.includes("EACCES")||$.message.includes("EPERM")||$.message.includes("permission denied"))&&($.message.includes("syntax")||$.message.includes("Expected")||$.message.includes("Unexpected")||$.message.includes("BuildMessage")),Y=$.message.includes("Configuration must export a valid object")||$.message.includes("Configuration file is empty and exports nothing");return w||Y}async function nf($){return n$.loadConfig({...$,__strictErrorHandling:!0})}async function B2($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},Y="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let A;if(Y)A=await n$.loadConfig($);else A=await n$.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return A?.config??w}catch(A){let X=A instanceof Error?A.name:"UnknownError",J=A instanceof Error?A.message:String(A);if(!(X==="ConfigNotFoundError"||X==="ConfigLoadError"||X==="ConfigValidationError"||J.includes("config"))&&$.verbose)f$.warn("Unexpected error loading config, using defaults:",[A instanceof Error?A:Error(String(A))]);let U=Y?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await n$.applyEnvironmentVariables(U.name||"",w,!0,U.verbose||!1))?.config??w;return w}}async function pf($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await n$.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Y){if(Y instanceof Error&&(Y.name==="ConfigNotFoundError"||Y.name==="ConfigLoadError"&&Tz(Y)))return(await n$.applyEnvironmentVariables($,{},!0,!1)).config;throw Y}}try{return(await n$.loadConfig({...$,cwd:$.cwd||hw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&Tz(w)))return(await n$.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function rf($,w,Y="replace"){let A=new QX;try{let X=await A.loadFromPath($,w,{arrayStrategy:Y,useCache:!1,trackPerformance:!1});return X?X.config:null}catch{return null}}function FY($,w,Y=!1){let A=new CX,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],F=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((f)=>f.toUpperCase()).join("")}`,`${X}_${G.map((f)=>f.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],K,q;for(let f of F)if(K=hw.env[f],K!==void 0){q=f;break}if(K!==void 0&&q)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(K.toLowerCase());else if(typeof z==="number"){let f=Number(K);if(!Number.isNaN(f))W[j]=f}else if(Array.isArray(z))try{W[j]=JSON.parse(K)}catch{W[j]=K.split(",").map((f)=>f.trim())}else W[j]=K;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}function tf($){let w=m0(hw.cwd(),$.configDir),Y=m0(hw.cwd(),$.generatedDir),A=m0(Y,"config-types.ts");if(!OU(a9(A)))xN(a9(A),{recursive:!0,mode:511});let X=OU(w)?PN(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],J=`// Generated by bunfig v${yq}
96
+ `;return Y}}function oq($,w){let Y=R2("process");if(typeof Y>"u"||!Y.env)return w;let A=Y.env[$];return A!==void 0?A:w}function E2($,w,Y={}){return T2($,w,Y,new WeakMap)}function T2($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return H2($,w,X,A);if(!W$(w)||!W$($))return w;return YE($,w,Y,A)}function H2($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return eq($,w);case"smart":return $E($,w,A);default:return w}return w}function eq($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>iU(X,A)))Y.push(A);return Y}function $E($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(W$(w[0])&&W$($[0]))return wE($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function wE($,w,Y){let A=[...w];for(let X of $){if(!W$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((W)=>W$(W)&&(B in W)&&W[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function YE($,w,Y,A){let X=w;if(W$(X)&&A.has(X))return A.get(X);let J={...$};if(W$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(W$(B)&&W$(W))J[U]=T2(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=H2(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function WW($,w,Y="replace"){return E2($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function iU($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!iU($[Y],w[Y]))return!1;return!0}if(W$($)&&W$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!iU($[X],w[X]))return!1}return!0}return!1}function W$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class hX{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=I1.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!sA($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,K="default"in z,F=Object.keys(z).length>0;if(!K&&!F)throw new RY($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new RY($,Error("Configuration must export a valid object"),"unknown");let T={config:WW(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)I1.setWithFileCheck("file",T,$,J);return T}catch(j){throw j instanceof Error?Nw.configLoad($,j):Nw.configLoad($,Error(String(j)))}};if(U)return VY.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(CU(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(Y.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)Y.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return Y.filter(Boolean)}checkFileAccess($){return N2(async()=>{return sA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!sA($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=CU($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=CU($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((w)=>w.test($))}async validateConfigFile($){let w=[];try{if(!sA($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class BW{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],K={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,K);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],K);else return this.validateWithJSONSchema($,w,K)}catch(F){return z.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await VY.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!Eq(w))throw new MY(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new MY(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:Q2},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class jW{fileLoader=new hX;envProcessor=new ZX;validator=new BW;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),K=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(K||z))throw W;if(G&&(!j||!K))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)q$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw q$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||Dw.cwd(),K=[],F=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(F)return K.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(F,K,W,A,z);let T=await this.loadHomeConfiguration(A,X,B,j,z,W);if(T)return K.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(T,K,W,A,z);let q=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(q)return K.push(m0(G,"package.json")),this.finalizeResult(q,K,W,A,z);if(K.push(...this.getAllSearchPaths(A,X,G,U)),w)throw Nw.configNotFound(A,K,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${X?` or alias "${X}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?EY($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)q$.info(`Searching for configuration in: ${G}`);let K=this.fileLoader.generateConfigPaths($,G,w),F=await this.fileLoader.tryLoadFromPaths(K,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(F){if(U)q$.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?EY($,Y,X):Y,B=[m0(G1(),".config",$),m0(G1(),".config"),G1()];for(let W of B){if(X)q$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)q$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?EY($,A,J):A;try{let W=m0(Y,"package.json");if(!vU(W))return null;let j=await import(W),z=j[$],G=$;if(!z&&w)z=j[w],G=w;if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)q$.success(`Configuration loaded from package.json: ${G}`);return{config:WW(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)q$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:EY($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw Nw.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return I1.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);I1.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias)Y.push(`alias:${w.alias}`);if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,m0($,"config"),m0($,".config"),w?m0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(m0(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[m0(G1(),".config",$),m0(G1(),".config"),G1()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}function Sz($){let w=!($.message.includes("EACCES")||$.message.includes("EPERM")||$.message.includes("permission denied"))&&($.message.includes("syntax")||$.message.includes("Expected")||$.message.includes("Unexpected")||$.message.includes("BuildMessage")),Y=$.message.includes("Configuration must export a valid object")||$.message.includes("Configuration file is empty and exports nothing");return w||Y}async function AE($){return t$.loadConfig({...$,__strictErrorHandling:!0})}async function f2($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},Y="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let A;if(Y)A=await t$.loadConfig($);else A=await t$.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return A?.config??w}catch(A){let X=A instanceof Error?A.name:"UnknownError",J=A instanceof Error?A.message:String(A);if(!(X==="ConfigNotFoundError"||X==="ConfigLoadError"||X==="ConfigValidationError"||J.includes("config"))&&$.verbose)q$.warn("Unexpected error loading config, using defaults:",[A instanceof Error?A:Error(String(A))]);let U=Y?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await t$.applyEnvironmentVariables(U.name||"",w,!0,U.verbose||!1))?.config??w;return w}}async function XE($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await t$.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Y){if(Y instanceof Error&&(Y.name==="ConfigNotFoundError"||Y.name==="ConfigLoadError"&&Sz(Y)))return(await t$.applyEnvironmentVariables($,{},!0,!1)).config;throw Y}}try{return(await t$.loadConfig({...$,cwd:$.cwd||Dw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&Sz(w)))return(await t$.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function JE($,w,Y="replace"){let A=new hX;try{let X=await A.loadFromPath($,w,{arrayStrategy:Y,useCache:!1,trackPerformance:!1});return X?X.config:null}catch{return null}}function EY($,w,Y=!1){let A=new ZX,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],K=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((q)=>q.toUpperCase()).join("")}`,`${X}_${G.map((q)=>q.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let q of K)if(F=Dw.env[q],F!==void 0){T=q;break}if(F!==void 0&&T)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(F.toLowerCase());else if(typeof z==="number"){let q=Number(F);if(!Number.isNaN(q))W[j]=q}else if(Array.isArray(z))try{W[j]=JSON.parse(F)}catch{W[j]=F.split(",").map((q)=>q.trim())}else W[j]=F;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}function UE($){let w=m0(Dw.cwd(),$.configDir),Y=m0(Dw.cwd(),$.generatedDir),A=m0(Y,"config-types.ts");if(!vU(Wz(A)))pN(Wz(A),{recursive:!0,mode:511});let X=vU(w)?rN(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],J=`// Generated by bunfig v${xE}
97
97
  export type ConfigNames = ${X.length?`'${X.join("' | '")}'`:"string"}
98
- `;bN(A,J,{mode:438})}function af($){let w=null,Y=null,A=()=>{if(!Y)Y=B2($).then((J)=>{return w=J,J},(J)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)f$.warn("Config loading failed, using defaults:",[J instanceof Error?J:Error(String(J))]);return U});return Y},X="defaultConfig"in $?$.defaultConfig:{};return w=X,A(),new Proxy({},{get(J,U){if(w)return w[U];let B=X[U];return A(),B},has(J,U){return U in(w||X)},ownKeys(){return Object.keys(w||X)},getOwnPropertyDescriptor(J,U){return Object.getOwnPropertyDescriptor(w||X,U)},set(J,U,B){if(!w)w={...X};return w[U]=B,!0}})}function sf($){let w=Gz(Wf.cwd(),$?.configDir||"./config");function Y(){if(!Jf(w))return[];let X=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),J=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=Uf(w).filter((W)=>X.has(NU(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:j}of U){let z=NU(j).toLowerCase(),G=B.get(W);if(!G){B.set(W,j);continue}let F=NU(G).toLowerCase();if(J.indexOf(z)<J.indexOf(F))B.set(W,j)}return Array.from(B.entries()).map(([W,j])=>({base:W,file:j})).sort((W,j)=>W.base.localeCompare(j.base))}function A(){let X=Y(),J=X.map((W)=>W.base),U=J.length?J.map((W)=>`'${W}'`).join(" | "):"string",B=X.length?`{
99
- ${X.map((W)=>{let j=Gz(w,W.file).replace(/\\/g,"/");return` '${W.base}': typeof import('${j}').default`}).join(`,
98
+ `;tN(A,J,{mode:438})}function WE($){let w=null,Y=null,A=()=>{if(!Y)Y=f2($).then((J)=>{return w=J,J},(J)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)q$.warn("Config loading failed, using defaults:",[J instanceof Error?J:Error(String(J))]);return U});return Y},X="defaultConfig"in $?$.defaultConfig:{};return w=X,A(),new Proxy({},{get(J,U){if(w)return w[U];let B=X[U];return A(),B},has(J,U){return U in(w||X)},ownKeys(){return Object.keys(w||X)},getOwnPropertyDescriptor(J,U){return Object.getOwnPropertyDescriptor(w||X,U)},set(J,U,B){if(!w)w={...X};return w[U]=B,!0}})}function BE($){let w=Iz(fq.cwd(),$?.configDir||"./config");function Y(){if(!Tq(w))return[];let X=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),J=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=Hq(w).filter((W)=>X.has(QU(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:j}of U){let z=QU(j).toLowerCase(),G=B.get(W);if(!G){B.set(W,j);continue}let K=QU(G).toLowerCase();if(J.indexOf(z)<J.indexOf(K))B.set(W,j)}return Array.from(B.entries()).map(([W,j])=>({base:W,file:j})).sort((W,j)=>W.base.localeCompare(j.base))}function A(){let X=Y(),J=X.map((W)=>W.base),U=J.length?J.map((W)=>`'${W}'`).join(" | "):"string",B=X.length?`{
99
+ ${X.map((W)=>{let j=Iz(w,W.file).replace(/\\/g,"/");return` '${W.base}': typeof import('${j}').default`}).join(`,
100
100
  `)}
101
101
  }`:"Record<string, any>";return`export type ConfigNames = ${U}
102
102
  export type ConfigByName = ${B}
103
103
  export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
104
104
  export type ConfigOf = Config
105
- `}return{name:"bunfig-plugin",setup(X){X.onResolve({filter:/^virtual:bunfig-types$/},(J)=>{return{path:J.path,namespace:"bunfig-virtual"}}),X.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:A(),loader:"ts"}})}}}function Qq($,w={}){let Y=zX.cwd();while(Y.includes("storage"))Y=Fz(Y,"..");let A=Fz(Y,$||"");if(w?.relative)return jf(zX.cwd(),A);return A}function H0(){if(l$.env.NODE_ENV==="test"||l$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function Oq(){if(l$.env.NODE_ENV==="test"||l$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof l$<"u"){let $=l$.type;if($==="renderer"||$==="worker")return!1;return!!(l$.versions&&(l$.versions.node||l$.versions.bun))}return!1}class H2{async format($){let w=await Oq(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:H1.pid,hostname:w(),environment:H1.env.NODE_ENV||"development",platform:H1.platform,version:H1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:H1.env.NODE_ENV||H1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class LX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...HX},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new H2,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??n.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...VU,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...VU};return{...VU,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:HX.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!H0()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let A,X=0,J=3,U=1000;while(X<J)try{try{try{await Nf(this.config.logDirectory,qz.F_OK|qz.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await ff(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let B=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:v$.from($);try{if(!nA(this.currentLogFile))await EU(this.currentLogFile,"",{mode:420});if(A=fz(this.currentLogFile,"a",420),Kf(A,B,{flag:"a"}),Nz(A),A!==void 0)qU(A),A=void 0;if((await q1(this.currentLogFile)).size===0){if(await EU(this.currentLogFile,B,{flag:"w",mode:420}),(await q1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let j=W;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(X<J-1){let z=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${J}:`,z);let G=U*2**X;await new Promise((F)=>setTimeout(F,G)),X++;continue}}if(j?.code&&["ENOSPC","EDQUOT"].includes(j.code))throw Error(`Disk quota exceeded or no space left on device: ${j.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",j),j}finally{if(A!==void 0)try{qU(A)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(X===J-1){let j=B,z=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",z),B}X++;let W=U*2**(X-1);await new Promise((j)=>setTimeout(j,W))}})();this.pendingOperations.push(w);let Y=this.pendingOperations.length-1;try{await w}catch(A){throw console.error("Debug: [writeToFile] Error in operation:",A),A}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return E1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return E1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return E1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(H0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let w=typeof $.interval==="number"?$.interval:60,Y=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((A)=>{console.error("Error rotating keys:",A)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=w,this.keys.set(w,Y),this.encryptionKeys.set(w,{key:Y,createdAt:new Date});let A=Array.from(this.encryptionKeys.entries()).sort(([,U],[,B])=>B.createdAt.getTime()-U.createdAt.getTime()),X=typeof $.maxKeys==="number"?$.maxKeys:1,J=Math.max(1,X);if(A.length>J)for(let[U]of A.slice(J))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return fU(16).toString("hex")}generateKey(){return fU(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=fU(16),A=zf("aes-256-gcm",w,Y),X=v$.isBuffer($)?$:v$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=v$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=Hz(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(v$.from(v$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(H0())return;if(!this.shouldWriteToFile())return;let $=await q1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await pA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await q1(Y).catch(()=>null))try{if(await Ez(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await rA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await EU(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await q1(Y).catch(()=>null))await Ez(Y,J)}if(this.currentLogFile=A,w.maxFiles){let X=(await pA(this.config.logDirectory)).filter((J)=>J.startsWith(this.name)).sort((J,U)=>U.localeCompare(J));for(let J of X.slice(w.maxFiles))await rA(E1(this.config.logDirectory,J))}}}async compressLogFile($,w){let Y=Kz($),A=Ff(w),X=Hz();await Hf(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),nA(this.currentLogFile))try{let $=fz(this.currentLogFile,"r+");Nz($),qU($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!H0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await pA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await rA(E1(this.config.logDirectory,w))}catch(Y){console.error(`Failed to delete temp file ${w}:`,Y)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?m.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||H0())return!1;let $=typeof n.env.NO_COLOR<"u",w=n.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof n.stderr<"u"&&n.stderr.isTTY||typeof n.stdout<"u"&&n.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=n.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${m.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=m.underline(m.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>m.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>m.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>m.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>m.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>m.strikethrough(A)),w}supportsHyperlinks(){if(H0())return!1;let $=n.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=n.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(qf(w)||w.startsWith("./")||w.startsWith("../"))w=Ef(w);else return null;return nA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){if(!this.shouldLog($))return;let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":kq[$],F=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",K;switch($){case"debug":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:m.gray(W),level:$}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"success":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:m.green(W),level:$}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.error(K),B){let q=B.split(`
106
- `);for(let f of q)if(f.trim()&&!f.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:m.gray(` ${f}`),level:$,showTimestamp:!1}))}break}}else if(!H0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
105
+ `}return{name:"bunfig-plugin",setup(X){X.onResolve({filter:/^virtual:bunfig-types$/},(J)=>{return{path:J.path,namespace:"bunfig-virtual"}}),X.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:A(),loader:"ts"}})}}}function bE($,w={}){let Y=EX.cwd();while(Y.includes("storage"))Y=Vz(Y,"..");let A=Vz(Y,$||"");if(w?.relative)return Mq(EX.cwd(),A);return A}function H0(){if(p$.env.NODE_ENV==="test"||p$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function vE(){if(p$.env.NODE_ENV==="test"||p$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof p$<"u"){let $=p$.type;if($==="renderer"||$==="worker")return!1;return!!(p$.versions&&(p$.versions.node||p$.versions.bun))}return!1}class _2{async format($){let w=await vE(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:R1.pid,hostname:w(),environment:R1.env.NODE_ENV||"development",platform:R1.platform,version:R1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:R1.env.NODE_ENV||R1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class kX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...CX},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new _2,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??n.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...DU,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...DU};return{...DU,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:CX.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!H0()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let A,X=0,J=3,U=1000;while(X<J)try{try{try{await yq(this.config.logDirectory,Lz.F_OK|Lz.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await Lq(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let B=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:g$.from($);try{if(!oA(this.currentLogFile))await OU(this.currentLogFile,"",{mode:420});if(A=yz(this.currentLogFile,"a",420),Qq(A,B,{flag:"a"}),Qz(A),A!==void 0)LU(A),A=void 0;if((await H1(this.currentLogFile)).size===0){if(await OU(this.currentLogFile,B,{flag:"w",mode:420}),(await H1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let j=W;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(X<J-1){let z=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${J}:`,z);let G=U*2**X;await new Promise((K)=>setTimeout(K,G)),X++;continue}}if(j?.code&&["ENOSPC","EDQUOT"].includes(j.code))throw Error(`Disk quota exceeded or no space left on device: ${j.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",j),j}finally{if(A!==void 0)try{LU(A)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(X===J-1){let j=B,z=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",z),B}X++;let W=U*2**(X-1);await new Promise((j)=>setTimeout(j,W))}})();this.pendingOperations.push(w);let Y=this.pendingOperations.length-1;try{await w}catch(A){throw console.error("Debug: [writeToFile] Error in operation:",A),A}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return f1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return f1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return f1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(H0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let w=typeof $.interval==="number"?$.interval:60,Y=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((A)=>{console.error("Error rotating keys:",A)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=w,this.keys.set(w,Y),this.encryptionKeys.set(w,{key:Y,createdAt:new Date});let A=Array.from(this.encryptionKeys.entries()).sort(([,U],[,B])=>B.createdAt.getTime()-U.createdAt.getTime()),X=typeof $.maxKeys==="number"?$.maxKeys:1,J=Math.max(1,X);if(A.length>J)for(let[U]of A.slice(J))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return yU(16).toString("hex")}generateKey(){return yU(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=yU(16),A=Iq("aes-256-gcm",w,Y),X=g$.isBuffer($)?$:g$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=g$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=_z(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(g$.from(g$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(H0())return;if(!this.shouldWriteToFile())return;let $=await H1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await eA(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await H1(Y).catch(()=>null))try{if(await Oz(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await $X(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await OU(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await H1(Y).catch(()=>null))await Oz(Y,J)}if(this.currentLogFile=A,w.maxFiles){let X=(await eA(this.config.logDirectory)).filter((J)=>J.startsWith(this.name)).sort((J,U)=>U.localeCompare(J));for(let J of X.slice(w.maxFiles))await $X(f1(this.config.logDirectory,J))}}}async compressLogFile($,w){let Y=Cz($),A=Cq(w),X=_z();await Sq(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),oA(this.currentLogFile))try{let $=yz(this.currentLogFile,"r+");Qz($),LU($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!H0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await eA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await $X(f1(this.config.logDirectory,w))}catch(Y){console.error(`Failed to delete temp file ${w}:`,Y)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?m.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||H0())return!1;let $=typeof n.env.NO_COLOR<"u",w=n.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof n.stderr<"u"&&n.stderr.isTTY||typeof n.stdout<"u"&&n.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=n.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${m.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=m.underline(m.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>m.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>m.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>m.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>m.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>m.strikethrough(A)),w}supportsHyperlinks(){if(H0())return!1;let $=n.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=n.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(Oq(w)||w.startsWith("./")||w.startsWith("../"))w=_q(w);else return null;return oA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){if(!this.shouldLog($))return;let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":dE[$],K=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:m.gray(W),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:m.green(W),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.error(F),B){let T=B.split(`
106
+ `);for(let q of T)if(q.trim()&&!q.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:m.gray(` ${q}`),level:$,showTimestamp:!1}))}break}}else if(!H0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
107
107
  `;if(B)z+=`${B}
108
108
  `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(X,J)=>{},finish:(X)=>{},interrupt:(X,J)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!H0()&&n.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(X,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,X),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!H0()&&n.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(X)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,X)},interrupt:(X,J="info")=>{if(!H0()&&n.stdout.isTTY)n.stdout.write(`
109
109
  `);if(this[J==="warning"?"warn":J](X),this.activeProgressBar&&this.shouldStyleConsole()&&!H0()&&n.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":m.blue("◐"),tag:Y,message:`${m.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),W=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
110
- `,W=W.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":m.green("✓"),tag:j,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!H0())console.error(W.trim());if(this.shouldWriteToFile())await this.writeToFile(W)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new LX(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(H0())throw Error("createReadStream is not supported in browser environments");if(!nA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Kz(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=v$.isBuffer($)?$:v$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=Gf("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=v$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return H0()}isServerMode(){return!H0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
111
- `),W=Math.max(...B.map((F)=>F.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((F)=>{return this.formatConsoleMessage({timestamp:Y,message:m.cyan(F),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:m.cyan(j),showTimestamp:!1})),G.forEach((F)=>console.error(F)),console.error(this.formatConsoleMessage({timestamp:Y,message:m.cyan(z),showTimestamp:!1}))}else if(!H0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
110
+ `,W=W.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":m.green("✓"),tag:j,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!H0())console.error(W.trim());if(this.shouldWriteToFile())await this.writeToFile(W)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new kX(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(H0())throw Error("createReadStream is not supported in browser environments");if(!oA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Cz(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=g$.isBuffer($)?$:g$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=Vq("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=g$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return H0()}isServerMode(){return!H0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
111
+ `),W=Math.max(...B.map((K)=>K.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((K)=>{return this.formatConsoleMessage({timestamp:Y,message:m.cyan(K),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:m.cyan(j),showTimestamp:!1})),G.forEach((K)=>console.error(K)),console.error(this.formatConsoleMessage({timestamp:Y,message:m.cyan(z),showTimestamp:!1}))}else if(!H0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
112
112
  `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(H0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${m.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();n.stdin.removeListener("data",Y);try{if(typeof n.stdin.setRawMode==="function")n.stdin.setRawMode(!1)}catch{}n.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof n.stdin.setRawMode==="function")n.stdin.setRawMode(!0)}catch{}n.stdin.resume(),n.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,B=0;if(Y=$.replace(U,(W,j)=>{if(j==="%")return"%";if(B>=w.length)return W;let z=w[B++];switch(j){case"s":return String(z);case"d":case"i":return Number(z).toString();case"j":case"o":return JSON.stringify(z,null,2);default:return W}}),B<w.length)Y+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let U=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${m.blue("◐")} `;console.error(`${B}${U} ${m.cyan(A)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
113
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(J)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!n.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=m.green("━".repeat(A)),U=m.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?m.green("✓"):m.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${m.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=n.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,n.stdout.write($.lastRenderedLine),w)n.stdout.write(`
114
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||H0()||!n.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(H0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await pA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let X=E1(this.config.logDirectory,A);if($.before)try{if((await q1(X)).mtime>=$.before)continue}catch(J){console.error(`Failed to get stats for file ${X}:`,J);continue}Y.push(X)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await rA(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function Dq($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}class $W{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return dU.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=tA.env[W]||(j?tA.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=tA.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof eU)throw G;throw M1.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw M1.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(tA.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
113
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(J)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!n.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=m.green("━".repeat(A)),U=m.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?m.green("✓"):m.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${m.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=n.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,n.stdout.write($.lastRenderedLine),w)n.stdout.write(`
114
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||H0()||!n.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(H0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await eA(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let X=f1(this.config.logDirectory,A);if($.before)try{if((await H1(X)).mtime>=$.before)continue}catch(J){console.error(`Failed to get stats for file ${X}:`,J);continue}Y.push(X)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await $X(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function lE($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}class GW{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return YW.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=wX.env[W]||(j?wX.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=wX.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof zW)throw G;throw V1.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw V1.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(wX.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
115
115
 
116
116
  `;for(let A of $)Y+=`${A.key}
117
117
  `,Y+=` Type: ${A.type}
@@ -123,32 +123,32 @@ export type ConfigOf = Config
123
123
  `;Y+=`| Variable | Type | Description | Example |
124
124
  `,Y+=`|----------|------|-------------|----------|
125
125
  `;for(let A of $)Y+=`| \`${A.key}\` | ${A.type} | ${A.description} | \`${A.example}\` |
126
- `;return Y}}function xq($,w,Y={}){return Q2($,w,Y,new WeakMap)}function Q2($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return L2($,w,X,A);if(!B$(w)||!B$($))return w;return cq($,w,Y,A)}function L2($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return Pq($,w);case"smart":return bq($,w,A);default:return w}return w}function Pq($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>cU(X,A)))Y.push(A);return Y}function bq($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(B$(w[0])&&B$($[0]))return uq($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function uq($,w,Y){let A=[...w];for(let X of $){if(!B$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((W)=>B$(W)&&(B in W)&&W[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function cq($,w,Y,A){let X=w;if(B$(X)&&A.has(X))return A.get(X);let J={...$};if(B$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(B$(B)&&B$(W))J[U]=Q2(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=L2(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function O2($,w,Y="replace"){return xq($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function cU($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!cU($[Y],w[Y]))return!1;return!0}if(B$($)&&B$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!cU($[X],w[X]))return!1}return!0}return!1}function B$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class _2{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=GX.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!aA($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,F="default"in z,K=Object.keys(z).length>0;if(!F&&!K)throw new TX($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new TX($,Error("Configuration must export a valid object"),"unknown");let q={config:O2(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)GX.setWithFileCheck("file",q,$,J);return q}catch(j){throw j instanceof Error?M1.configLoad($,j):M1.configLoad($,Error(String(j)))}};if(U)return dU.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(HU(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);let A=w===void 0?[]:Array.isArray(w)?w:[w];for(let J of A){if(!J)continue;if(Y.push(J,`.${J}.config`,`${J}.config`,`.${J}`),$)Y.push(`${$}.${J}.config`,`.${$}.${J}.config`)}let X=new Set;return Y.filter((J)=>{if(!J||X.has(J))return!1;return X.add(J),!0})}checkFileAccess($){return Dq(async()=>{return aA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!aA($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=HU($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=HU($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((w)=>w.test($))}async validateConfigFile($){let w=[];try{if(!aA($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class S2{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],F={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,F);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],F);else return this.validateWithJSONSchema($,w,F)}catch(K){return z.push({path:"",message:`Validation failed: ${K}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await dU.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!Tf(w))throw new RX(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new RX(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:vq},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function iq($){if(!$)return"";let w=Array.isArray($)?$.filter(Boolean):[$];if(w.length===0)return"";if(w.length===1)return` or alias "${w[0]}"`;return` or aliases ${w.map((Y)=>`"${Y}"`).join(", ")}`}class h2{fileLoader=new _2;envProcessor=new $W;validator=new S2;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),F=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(F||z))throw W;if(G&&(!j||!F))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)i$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){if(B instanceof Error&&B.name==="ConfigNotFoundError")throw B;let W=Date.now()-w;throw i$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||yX.cwd(),F=[],K=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(K)return F.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(K,F,W,A,z);let q=await this.loadHomeConfiguration(A,X,B,j,z,W);if(q)return F.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(q,F,W,A,z);let f=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(f)return F.push(U$(G,"package.json")),this.finalizeResult(f,F,W,A,z);if(F.push(...this.getAllSearchPaths(A,X,G,U)),w)throw M1.configNotFound(A,F,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${iq(X)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?oA($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)i$.info(`Searching for configuration in: ${G}`);let F=this.fileLoader.generateConfigPaths($,G,w),K=await this.fileLoader.tryLoadFromPaths(F,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(K){if(U)i$.success(`Configuration loaded from: ${K.source.path}`);return K}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?oA($,Y,X):Y,B=[U$(B1(),".config",$),U$(B1(),".config"),B1()];for(let W of B){if(X)i$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)i$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?oA($,A,J):A;try{let W=U$(Y,"package.json");if(!kN(W))return null;let j={};try{j=JSON.parse(DN(W,"utf8"))}catch(F){if(J)i$.warn("Failed to parse package.json:",[F instanceof Error?F:Error(String(F))]);return null}let z=j[$],G=$;if(!z&&w){let F=Array.isArray(w)?w:[w];for(let K of F){if(!K)continue;if(j[K]){z=j[K],G=K;break}}}if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)i$.success(`Configuration loaded from package.json: ${G}`);return{config:O2(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)i$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:oA($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw M1.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return GX.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);GX.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias){let A=Array.isArray(w.alias)?w.alias.join(","):w.alias;Y.push(`alias:${A}`)}if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,U$($,"config"),U$($,".config"),w?U$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(U$(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[U$(B1(),".config",$),U$(B1(),".config"),B1()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}function oA($,w,Y=!1){let A=new $W,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],F=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((f)=>f.toUpperCase()).join("")}`,`${X}_${G.map((f)=>f.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],K,q;for(let f of F)if(K=yX.env[f],K!==void 0){q=f;break}if(K!==void 0&&q)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(K.toLowerCase());else if(typeof z==="number"){let f=Number(K);if(!Number.isNaN(f))W[j]=f}else if(Array.isArray(z))try{W[j]=JSON.parse(K)}catch{W[j]=K.split(",").map((f)=>f.trim())}else W[j]=K;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}function D2($){return vU.readFileSync($,"utf8")}function iU($,w){let Y=[];function A(X){let J;try{J=vU.readdirSync(X)}catch{return}for(let U of J){let B=N$.join(X,U);try{if(vU.statSync(B).isDirectory())A(B);else if(U===w)Y.push(X)}catch{continue}}}return A($),Y}function L($,w,Y){if(Y||z0.verbose)console.debug(`[tlsx:${$}] ${w}`)}function x2(){return k2.env.SUDO_PASSWORD}function rq($){let w=$.toLowerCase();return nq.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function MX($){if(Array.isArray($))return $.map((Y)=>MX(Y));if(typeof $==="string")return pq.test($)?Zz:$;if(!$||typeof $!=="object")return $;let w={};for(let[Y,A]of Object.entries($)){if(rq(Y)){w[Y]=Zz;continue}w[Y]=MX(A)}return w}function OX($){return JSON.stringify(MX($))}function tq($){let w=x2();if(!w||!/(^|\|\s*|&&\s*|;\s*)sudo\s/.test($))return $;let Y=w.replace(/'/g,"'\\''"),A=$.replace(/(^|\|\s*|&&\s*|;\s*)sudo(?!\s+-[Sn])(\s+)/g,"$1sudo -S$2");return`echo '${Y}' | ${A}`}async function Gw($,w={}){let Y=tq($);try{let{stdout:A,stderr:X}=await dq(Y,{cwd:w.cwd||k2.cwd(),timeout:w.timeout||30000});return{stdout:A.trim(),stderr:X.trim()}}catch(A){let X=Error(`Failed to execute command: ${$}
127
- Error: ${A.message}`);throw X.stack=A.stack,X}}function P2($){if($.domain)return $.domain;if($.domains?.length)return $.domains[0];throw Error("Either domain or domains must be specified")}function wW($){let w=N$.join(gq.homedir(),".stacks","ssl"),Y=$.basePath&&$.basePath.trim()!==""?$.basePath:z0.basePath&&z0.basePath.trim()!==""?z0.basePath:w,A=$.certPath?N$.isAbsolute($.certPath)?$.certPath:N$.join(Y,$.certPath):N$.join(Y,z0.certPath),X=$.keyPath?N$.isAbsolute($.keyPath)?$.keyPath:N$.join(Y,$.keyPath):N$.join(Y,z0.keyPath),J=$.caCertPath?N$.isAbsolute($.caCertPath)?$.caCertPath:N$.join(Y,$.caCertPath):N$.join(Y,z0.caCertPath);return{certPath:A,keyPath:X,caCertPath:J,basePath:Y}}function b2($){let w=[],Y=new Set;if($.domain)Y.add($.domain);if($.domains?.length)$.domains.forEach((A)=>Y.add(A));for(let A of Y)w.push({type:2,value:A});if($.altNameIPs?.length)for(let A of $.altNameIPs)w.push({type:7,ip:A});if($.altNameURIs?.length)for(let A of $.altNameURIs)w.push({type:6,value:A});if($.subjectAltNames?.length)w.push(...$.subjectAltNames);return L(O.CERT,`Generated ${w.length} Subject Alternative Names`,$.verbose),w}function YW($){let w=$.notBeforeDays??q$.DEFAULT_NOT_BEFORE_DAYS,Y=$.validityDays??($.validityYears?$.validityYears*365:q$.DEFAULT_VALIDITY_DAYS);L(O.CERT,"Calculating certificate validity dates",$.verbose);let A=new Date(Date.now()-86400*w*1000),X=new Date(A.getTime()+Y*24*60*60*1000);return A.setUTCHours(0,0,0,0),X.setUTCHours(23,59,59,999),L(O.CERT,`Validity period: ${A.toISOString()} to ${X.toISOString()}`,$.verbose),{notBefore:A,notAfter:X}}function KY($){if($<128)return Buffer.from([$]);let w=[],Y=$;while(Y>0)w.unshift(Y&255),Y>>=8;return Buffer.from([128|w.length,...w])}function e0($,w){let Y=KY(w.length);return Buffer.concat([Buffer.from([$]),Y,w])}function HY($){let w=$.split(".").map(Number),Y=[];Y.push(40*w[0]+w[1]);for(let A=2;A<w.length;A++){let X=w[A],J=[];J.unshift(X&127),X>>=7;while(X>0)J.unshift(X&127|128),X>>=7;Y.push(...J)}return e0(E$.OID,Buffer.from(Y))}function mU($){let w;if(typeof $==="bigint"){let Y=$.toString(16).padStart(2,"0");w=Buffer.from(Y.length%2?`0${Y}`:Y,"hex")}else if(typeof $==="number")if($===0)w=Buffer.from([0]);else{let Y=$.toString(16).padStart(2,"0");w=Buffer.from(Y.length%2?`0${Y}`:Y,"hex")}else w=$;if(w[0]&128)w=Buffer.concat([Buffer.from([0]),w]);return e0(E$.INTEGER,w)}function u2($,w=0){return e0(E$.BIT_STRING,Buffer.concat([Buffer.from([w]),$]))}function c2($){return e0(E$.OCTET_STRING,$)}function o0(...$){return e0(E$.SEQUENCE,Buffer.concat($))}function aq(...$){return e0(E$.SET,Buffer.concat($))}function sq($){return e0(E$.PRINTABLE_STRING,Buffer.from($,"ascii"))}function oq($){return e0(E$.UTF8_STRING,Buffer.from($,"utf8"))}function eq(){return Buffer.from([E$.NULL,0])}function kz($,w,Y=!0){let A=160|$|(Y?0:0),X=KY(w.length);return Buffer.concat([Buffer.from([A]),X,w])}function Dz($){let w=$.getUTCFullYear();if(w>=2050){let Y=$.toISOString().replace(/[-:T]/g,"").slice(0,14)+"Z";return e0(E$.GENERALIZED_TIME,Buffer.from(Y,"ascii"))}else{let Y=(w%100).toString().padStart(2,"0"),A=($.getUTCMonth()+1).toString().padStart(2,"0"),X=$.getUTCDate().toString().padStart(2,"0"),J=$.getUTCHours().toString().padStart(2,"0"),U=$.getUTCMinutes().toString().padStart(2,"0"),B=$.getUTCSeconds().toString().padStart(2,"0"),W=`${Y}${A}${X}${J}${U}${B}Z`;return e0(E$.UTC_TIME,Buffer.from(W,"ascii"))}}function $E($,w){return o0(Dz($),Dz(w))}function xz($){let w=[];for(let Y of $){let A;switch(Y.shortName){case"CN":A=g0.COMMON_NAME;break;case"C":A=g0.COUNTRY;break;case"L":A=g0.LOCALITY;break;case"ST":A=g0.STATE;break;case"O":A=g0.ORGANIZATION;break;case"OU":A=g0.ORGANIZATIONAL_UNIT;break;default:continue}let X=Y.shortName==="C"?sq(Y.value):oq(Y.value),J=o0(HY(A),X);w.push(aq(J))}return o0(...w)}function v2($){return o0(HY($),eq())}function wE($){return $.export({type:"spki",format:"der"})}function YE($){if($.includes(":")){let w=$;if($.includes("::")){let X=$.split("::"),J=X[0]?X[0].split(":"):[],U=X[1]?X[1].split(":"):[],B=8-J.length-U.length,W=Array.from({length:B},()=>"0");w=[...J,...W,...U].join(":")}let Y=w.split(":"),A=Buffer.alloc(16);for(let X=0;X<8;X++){let J=Number.parseInt(Y[X]||"0",16);A.writeUInt16BE(J,X*2)}return A}else{let w=$.split(".").map((Y)=>Number.parseInt(Y,10));return Buffer.from(w)}}function AE($){let w=[];for(let Y of $)if(Y.type===2&&Y.value){let A=KY(Y.value.length);w.push(Buffer.concat([Buffer.from([130]),A,Buffer.from(Y.value,"ascii")]))}else if(Y.type===7&&Y.ip){let A=YE(Y.ip),X=KY(A.length);w.push(Buffer.concat([Buffer.from([135]),X,A]))}else if(Y.type===6&&Y.value){let A=KY(Y.value.length);w.push(Buffer.concat([Buffer.from([134]),A,Buffer.from(Y.value,"ascii")]))}return o0(...w)}function XE($,w){if($){if(w!==void 0)return o0(e0(1,Buffer.from([255])),mU(w));return o0(e0(1,Buffer.from([255])))}return o0()}function JE($){let w=0;if($.digitalSignature)w|=128;if($.keyEncipherment)w|=32;if($.keyCertSign)w|=4;if($.cRLSign)w|=2;let Y=0,A=w;while(A>0&&(A&1)===0)Y++,A>>=1;if(w===0)Y=7;return u2(Buffer.from([w]),Y)}function UE($){let w=[];if($.serverAuth)w.push(HY(g0.SERVER_AUTH));if($.clientAuth)w.push(HY(g0.CLIENT_AUTH));return o0(...w)}function GY($,w,Y){let A=[HY($)];if(w)A.push(e0(1,Buffer.from([255])));return A.push(c2(Y)),o0(...A)}function WE($){let w=[];if(w.push(kz(0,mU(2))),w.push(mU($.serialNumber)),w.push(v2(g0.SHA256_WITH_RSA)),w.push(xz($.issuer)),w.push($E($.notBefore,$.notAfter)),w.push(xz($.subject)),w.push(wE($.publicKey)),$.extensions){let Y=[];if($.extensions.basicConstraints)Y.push(GY(g0.BASIC_CONSTRAINTS,$.extensions.basicConstraints.critical??!0,XE($.extensions.basicConstraints.isCA,$.extensions.basicConstraints.pathLenConstraint)));if($.extensions.keyUsage)Y.push(GY(g0.KEY_USAGE,$.extensions.keyUsage.critical??!0,JE($.extensions.keyUsage)));if($.extensions.extendedKeyUsage)Y.push(GY(g0.EXTENDED_KEY_USAGE,!1,UE($.extensions.extendedKeyUsage)));if($.extensions.subjectAltName?.length)Y.push(GY(g0.SUBJECT_ALT_NAME,!1,AE($.extensions.subjectAltName)));if($.extensions.subjectKeyIdentifier)Y.push(GY(g0.SUBJECT_KEY_IDENTIFIER,!1,c2($.extensions.subjectKeyIdentifier)));if(Y.length>0)w.push(kz(3,o0(...Y)))}return o0(...w)}function BE($,w){let Y=I1.createSign("SHA256");Y.update($);let A=Y.sign(w);return o0($,v2(g0.SHA256_WITH_RSA),u2(A))}function jE($,w){let Y=$.toString("base64"),A=[];for(let X=0;X<Y.length;X+=64)A.push(Y.slice(X,X+64));return`-----BEGIN ${w}-----
126
+ `;return Y}}function nE($,w,Y={}){return b2($,w,Y,new WeakMap)}function b2($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return u2($,w,X,A);if(!B$(w)||!B$($))return w;return aE($,w,Y,A)}function u2($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return pE($,w);case"smart":return rE($,w,A);default:return w}return w}function pE($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>aU(X,A)))Y.push(A);return Y}function rE($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(B$(w[0])&&B$($[0]))return tE($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function tE($,w,Y){let A=[...w];for(let X of $){if(!B$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((W)=>B$(W)&&(B in W)&&W[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function aE($,w,Y,A){let X=w;if(B$(X)&&A.has(X))return A.get(X);let J={...$};if(B$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(B$(B)&&B$(W))J[U]=b2(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=u2(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function v2($,w,Y="replace"){return nE($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function aU($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!aU($[Y],w[Y]))return!1;return!0}if(B$($)&&B$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!aU($[X],w[X]))return!1}return!0}return!1}function B$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class c2{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=TX.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!YX($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,K="default"in z,F=Object.keys(z).length>0;if(!K&&!F)throw new QX($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new QX($,Error("Configuration must export a valid object"),"unknown");let T={config:v2(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)TX.setWithFileCheck("file",T,$,J);return T}catch(j){throw j instanceof Error?V1.configLoad($,j):V1.configLoad($,Error(String(j)))}};if(U)return YW.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(_U(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);let A=w===void 0?[]:Array.isArray(w)?w:[w];for(let J of A){if(!J)continue;if(Y.push(J,`.${J}.config`,`${J}.config`,`.${J}`),$)Y.push(`${$}.${J}.config`,`.${$}.${J}.config`)}let X=new Set;return Y.filter((J)=>{if(!J||X.has(J))return!1;return X.add(J),!0})}checkFileAccess($){return lE(async()=>{return YX($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!YX($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=_U($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=_U($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((w)=>w.test($))}async validateConfigFile($){let w=[];try{if(!YX($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class i2{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],K={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,K);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],K);else return this.validateWithJSONSchema($,w,K)}catch(F){return z.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await YW.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!Zq(w))throw new yX(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new yX(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:sE},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function oE($){if(!$)return"";let w=Array.isArray($)?$.filter(Boolean):[$];if(w.length===0)return"";if(w.length===1)return` or alias "${w[0]}"`;return` or aliases ${w.map((Y)=>`"${Y}"`).join(", ")}`}class m2{fileLoader=new c2;envProcessor=new GW;validator=new i2;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),K=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(K||z))throw W;if(G&&(!j||!K))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)d$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){if(B instanceof Error&&B.name==="ConfigNotFoundError")throw B;let W=Date.now()-w;throw d$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||SX.cwd(),K=[],F=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(F)return K.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(F,K,W,A,z);let T=await this.loadHomeConfiguration(A,X,B,j,z,W);if(T)return K.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(T,K,W,A,z);let q=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(q)return K.push(U$(G,"package.json")),this.finalizeResult(q,K,W,A,z);if(K.push(...this.getAllSearchPaths(A,X,G,U)),w)throw V1.configNotFound(A,K,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${oE(X)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?XX($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)d$.info(`Searching for configuration in: ${G}`);let K=this.fileLoader.generateConfigPaths($,G,w),F=await this.fileLoader.tryLoadFromPaths(K,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(F){if(U)d$.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?XX($,Y,X):Y,B=[U$(z1(),".config",$),U$(z1(),".config"),z1()];for(let W of B){if(X)d$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)d$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?XX($,A,J):A;try{let W=U$(Y,"package.json");if(!lN(W))return null;let j={};try{j=JSON.parse(nN(W,"utf8"))}catch(K){if(J)d$.warn("Failed to parse package.json:",[K instanceof Error?K:Error(String(K))]);return null}let z=j[$],G=$;if(!z&&w){let K=Array.isArray(w)?w:[w];for(let F of K){if(!F)continue;if(j[F]){z=j[F],G=F;break}}}if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)d$.success(`Configuration loaded from package.json: ${G}`);return{config:v2(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)d$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:XX($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw V1.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return TX.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);TX.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias){let A=Array.isArray(w.alias)?w.alias.join(","):w.alias;Y.push(`alias:${A}`)}if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,U$($,"config"),U$($,".config"),w?U$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(U$(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[U$(z1(),".config",$),U$(z1(),".config"),z1()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}function XX($,w,Y=!1){let A=new GW,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],K=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((q)=>q.toUpperCase()).join("")}`,`${X}_${G.map((q)=>q.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let q of K)if(F=SX.env[q],F!==void 0){T=q;break}if(F!==void 0&&T)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(F.toLowerCase());else if(typeof z==="number"){let q=Number(F);if(!Number.isNaN(q))W[j]=q}else if(Array.isArray(z))try{W[j]=JSON.parse(F)}catch{W[j]=F.split(",").map((q)=>q.trim())}else W[j]=F;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}function l2($){return sU.readFileSync($,"utf8")}function oU($,w){let Y=[];function A(X){let J;try{J=sU.readdirSync(X)}catch{return}for(let U of J){let B=N$.join(X,U);try{if(sU.statSync(B).isDirectory())A(B);else if(U===w)Y.push(X)}catch{continue}}}return A($),Y}function L($,w,Y){if(Y||z0.verbose)console.debug(`[tlsx:${$}] ${w}`)}function n2(){return d2.env.SUDO_PASSWORD}function JT($){let w=$.toLowerCase();return AT.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function LX($){if(Array.isArray($))return $.map((Y)=>LX(Y));if(typeof $==="string")return XT.test($)?gz:$;if(!$||typeof $!=="object")return $;let w={};for(let[Y,A]of Object.entries($)){if(JT(Y)){w[Y]=gz;continue}w[Y]=LX(A)}return w}function DX($){return JSON.stringify(LX($))}function UT($){let w=n2();if(!w||!/(^|\|\s*|&&\s*|;\s*)sudo\s/.test($))return $;let Y=w.replace(/'/g,"'\\''"),A=$.replace(/(^|\|\s*|&&\s*|;\s*)sudo(?!\s+-[Sn])(\s+)/g,"$1sudo -S$2");return`echo '${Y}' | ${A}`}async function Fw($,w={}){let Y=UT($);try{let{stdout:A,stderr:X}=await YT(Y,{cwd:w.cwd||d2.cwd(),timeout:w.timeout||30000});return{stdout:A.trim(),stderr:X.trim()}}catch(A){let X=Error(`Failed to execute command: ${$}
127
+ Error: ${A.message}`);throw X.stack=A.stack,X}}function p2($){if($.domain)return $.domain;if($.domains?.length)return $.domains[0];throw Error("Either domain or domains must be specified")}function KW($){let w=N$.join($T.homedir(),".stacks","ssl"),Y=$.basePath&&$.basePath.trim()!==""?$.basePath:z0.basePath&&z0.basePath.trim()!==""?z0.basePath:w,A=$.certPath?N$.isAbsolute($.certPath)?$.certPath:N$.join(Y,$.certPath):N$.join(Y,z0.certPath),X=$.keyPath?N$.isAbsolute($.keyPath)?$.keyPath:N$.join(Y,$.keyPath):N$.join(Y,z0.keyPath),J=$.caCertPath?N$.isAbsolute($.caCertPath)?$.caCertPath:N$.join(Y,$.caCertPath):N$.join(Y,z0.caCertPath);return{certPath:A,keyPath:X,caCertPath:J,basePath:Y}}function r2($){let w=[],Y=new Set;if($.domain)Y.add($.domain);if($.domains?.length)$.domains.forEach((A)=>Y.add(A));for(let A of Y)w.push({type:2,value:A});if($.altNameIPs?.length)for(let A of $.altNameIPs)w.push({type:7,ip:A});if($.altNameURIs?.length)for(let A of $.altNameURIs)w.push({type:6,value:A});if($.subjectAltNames?.length)w.push(...$.subjectAltNames);return L(_.CERT,`Generated ${w.length} Subject Alternative Names`,$.verbose),w}function FW($){let w=$.notBeforeDays??E$.DEFAULT_NOT_BEFORE_DAYS,Y=$.validityDays??($.validityYears?$.validityYears*365:E$.DEFAULT_VALIDITY_DAYS);L(_.CERT,"Calculating certificate validity dates",$.verbose);let A=new Date(Date.now()-86400*w*1000),X=new Date(A.getTime()+Y*24*60*60*1000);return A.setUTCHours(0,0,0,0),X.setUTCHours(23,59,59,999),L(_.CERT,`Validity period: ${A.toISOString()} to ${X.toISOString()}`,$.verbose),{notBefore:A,notAfter:X}}function TY($){if($<128)return Buffer.from([$]);let w=[],Y=$;while(Y>0)w.unshift(Y&255),Y>>=8;return Buffer.from([128|w.length,...w])}function e0($,w){let Y=TY(w.length);return Buffer.concat([Buffer.from([$]),Y,w])}function IY($){let w=$.split(".").map(Number),Y=[];Y.push(40*w[0]+w[1]);for(let A=2;A<w.length;A++){let X=w[A],J=[];J.unshift(X&127),X>>=7;while(X>0)J.unshift(X&127|128),X>>=7;Y.push(...J)}return e0(T$.OID,Buffer.from(Y))}function eU($){let w;if(typeof $==="bigint"){let Y=$.toString(16).padStart(2,"0");w=Buffer.from(Y.length%2?`0${Y}`:Y,"hex")}else if(typeof $==="number")if($===0)w=Buffer.from([0]);else{let Y=$.toString(16).padStart(2,"0");w=Buffer.from(Y.length%2?`0${Y}`:Y,"hex")}else w=$;if(w[0]&128)w=Buffer.concat([Buffer.from([0]),w]);return e0(T$.INTEGER,w)}function t2($,w=0){return e0(T$.BIT_STRING,Buffer.concat([Buffer.from([w]),$]))}function a2($){return e0(T$.OCTET_STRING,$)}function o0(...$){return e0(T$.SEQUENCE,Buffer.concat($))}function WT(...$){return e0(T$.SET,Buffer.concat($))}function BT($){return e0(T$.PRINTABLE_STRING,Buffer.from($,"ascii"))}function jT($){return e0(T$.UTF8_STRING,Buffer.from($,"utf8"))}function zT(){return Buffer.from([T$.NULL,0])}function dz($,w,Y=!0){let A=160|$|(Y?0:0),X=TY(w.length);return Buffer.concat([Buffer.from([A]),X,w])}function lz($){let w=$.getUTCFullYear();if(w>=2050){let Y=$.toISOString().replace(/[-:T]/g,"").slice(0,14)+"Z";return e0(T$.GENERALIZED_TIME,Buffer.from(Y,"ascii"))}else{let Y=(w%100).toString().padStart(2,"0"),A=($.getUTCMonth()+1).toString().padStart(2,"0"),X=$.getUTCDate().toString().padStart(2,"0"),J=$.getUTCHours().toString().padStart(2,"0"),U=$.getUTCMinutes().toString().padStart(2,"0"),B=$.getUTCSeconds().toString().padStart(2,"0"),W=`${Y}${A}${X}${J}${U}${B}Z`;return e0(T$.UTC_TIME,Buffer.from(W,"ascii"))}}function GT($,w){return o0(lz($),lz(w))}function nz($){let w=[];for(let Y of $){let A;switch(Y.shortName){case"CN":A=g0.COMMON_NAME;break;case"C":A=g0.COUNTRY;break;case"L":A=g0.LOCALITY;break;case"ST":A=g0.STATE;break;case"O":A=g0.ORGANIZATION;break;case"OU":A=g0.ORGANIZATIONAL_UNIT;break;default:continue}let X=Y.shortName==="C"?BT(Y.value):jT(Y.value),J=o0(IY(A),X);w.push(WT(J))}return o0(...w)}function s2($){return o0(IY($),zT())}function KT($){return $.export({type:"spki",format:"der"})}function FT($){if($.includes(":")){let w=$;if($.includes("::")){let X=$.split("::"),J=X[0]?X[0].split(":"):[],U=X[1]?X[1].split(":"):[],B=8-J.length-U.length,W=Array.from({length:B},()=>"0");w=[...J,...W,...U].join(":")}let Y=w.split(":"),A=Buffer.alloc(16);for(let X=0;X<8;X++){let J=Number.parseInt(Y[X]||"0",16);A.writeUInt16BE(J,X*2)}return A}else{let w=$.split(".").map((Y)=>Number.parseInt(Y,10));return Buffer.from(w)}}function NT($){let w=[];for(let Y of $)if(Y.type===2&&Y.value){let A=TY(Y.value.length);w.push(Buffer.concat([Buffer.from([130]),A,Buffer.from(Y.value,"ascii")]))}else if(Y.type===7&&Y.ip){let A=FT(Y.ip),X=TY(A.length);w.push(Buffer.concat([Buffer.from([135]),X,A]))}else if(Y.type===6&&Y.value){let A=TY(Y.value.length);w.push(Buffer.concat([Buffer.from([134]),A,Buffer.from(Y.value,"ascii")]))}return o0(...w)}function qT($,w){if($){if(w!==void 0)return o0(e0(1,Buffer.from([255])),eU(w));return o0(e0(1,Buffer.from([255])))}return o0()}function ET($){let w=0;if($.digitalSignature)w|=128;if($.keyEncipherment)w|=32;if($.keyCertSign)w|=4;if($.cRLSign)w|=2;let Y=0,A=w;while(A>0&&(A&1)===0)Y++,A>>=1;if(w===0)Y=7;return t2(Buffer.from([w]),Y)}function TT($){let w=[];if($.serverAuth)w.push(IY(g0.SERVER_AUTH));if($.clientAuth)w.push(IY(g0.CLIENT_AUTH));return o0(...w)}function qY($,w,Y){let A=[IY($)];if(w)A.push(e0(1,Buffer.from([255])));return A.push(a2(Y)),o0(...A)}function HT($){let w=[];if(w.push(dz(0,eU(2))),w.push(eU($.serialNumber)),w.push(s2(g0.SHA256_WITH_RSA)),w.push(nz($.issuer)),w.push(GT($.notBefore,$.notAfter)),w.push(nz($.subject)),w.push(KT($.publicKey)),$.extensions){let Y=[];if($.extensions.basicConstraints)Y.push(qY(g0.BASIC_CONSTRAINTS,$.extensions.basicConstraints.critical??!0,qT($.extensions.basicConstraints.isCA,$.extensions.basicConstraints.pathLenConstraint)));if($.extensions.keyUsage)Y.push(qY(g0.KEY_USAGE,$.extensions.keyUsage.critical??!0,ET($.extensions.keyUsage)));if($.extensions.extendedKeyUsage)Y.push(qY(g0.EXTENDED_KEY_USAGE,!1,TT($.extensions.extendedKeyUsage)));if($.extensions.subjectAltName?.length)Y.push(qY(g0.SUBJECT_ALT_NAME,!1,NT($.extensions.subjectAltName)));if($.extensions.subjectKeyIdentifier)Y.push(qY(g0.SUBJECT_KEY_IDENTIFIER,!1,a2($.extensions.subjectKeyIdentifier)));if(Y.length>0)w.push(dz(3,o0(...Y)))}return o0(...w)}function fT($,w){let Y=C1.createSign("SHA256");Y.update($);let A=Y.sign(w);return o0($,s2(g0.SHA256_WITH_RSA),t2(A))}function RT($,w){let Y=$.toString("base64"),A=[];for(let X=0;X<Y.length;X+=64)A.push(Y.slice(X,X+64));return`-----BEGIN ${w}-----
128
128
  ${A.join(`
129
129
  `)}
130
130
  -----END ${w}-----
131
- `}function AW(){let $=I1.randomBytes(20);return $[0]=$[0]&127||1,$}function i2($=2048){let{privateKey:w,publicKey:Y}=I1.generateKeyPairSync("rsa",{modulusLength:$});return{privateKey:w,publicKey:Y}}function zE($){let w=$.export({type:"spki",format:"der"});return I1.createHash("sha1").update(w).digest()}function m2($){let w={serialNumber:$.serialNumber||AW(),notBefore:$.notBefore,notAfter:$.notAfter,subject:$.subject,issuer:$.issuer||$.subject,publicKey:$.publicKey,extensions:{basicConstraints:{isCA:$.isCA??!1,critical:!0,pathLenConstraint:$.pathLenConstraint},subjectKeyIdentifier:zE($.publicKey)}};if($.keyUsage)w.extensions.keyUsage={...$.keyUsage,critical:!0};if($.extendedKeyUsage)w.extensions.extendedKeyUsage=$.extendedKeyUsage;if($.subjectAltName?.length)w.extensions.subjectAltName=$.subjectAltName;let Y=WE(w),A=BE(Y,$.signingKey);return{certificate:jE(A,"CERTIFICATE"),certificateDer:A}}function g2($){return $.export({type:"pkcs8",format:"pem"})}function GE($){return I1.createPrivateKey($)}function FE($){let w=new I1.X509Certificate($),Y=w.publicKey,A=[],X=w.subject.split(`
132
- `);for(let J of X){let[U,...B]=J.split("="),W=B.join("=");if(U&&W)A.push({shortName:U.trim(),value:W.trim()})}return{publicKey:Y,subject:A}}async function XW($={}){L("ca","Creating new Root CA Certificate",$.verbose);let w=$.keySize||q$.DEFAULT_KEY_SIZE;L("ca",`Generating ${w}-bit RSA key pair`,$.verbose);let{privateKey:Y,publicKey:A}=i2(w),X=[{shortName:"C",value:$.countryName||z0.countryName},{shortName:"ST",value:$.stateName||z0.stateName},{shortName:"L",value:$.localityName||z0.localityName},{shortName:"O",value:$.organization||"Local Development CA"},{shortName:"OU",value:$.organizationalUnit||"Certificate Authority"},{shortName:"CN",value:$.commonName||"Local Development Root CA"}],{notBefore:J,notAfter:U}=YW({validityYears:$.validityYears||q$.DEFAULT_CA_VALIDITY_YEARS,verbose:$.verbose}),{certificate:B}=m2({serialNumber:AW(),notBefore:J,notAfter:U,subject:X,publicKey:A,signingKey:Y,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:B,privateKey:g2(Y),notBefore:J,notAfter:U}}async function JW($){if(L("ca","Generating new certificate",$.verbose),L("ca",`Options: ${OX($)}`,$.verbose),!$.domain&&!$.domains?.length)throw Error("Either domain or domains must be specified");if(!$.rootCA?.certificate||!$.rootCA?.privateKey)throw Error("Root CA certificate and private key are required");let{subject:w}=FE($.rootCA.certificate),Y=GE($.rootCA.privateKey);L("ca",`Generating ${q$.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,$.verbose);let A=q$.DEFAULT_KEY_SIZE,{privateKey:X,publicKey:J}=i2(A),U=$.commonName||P2($),B=$.certificateAttributes||[{shortName:"C",value:$.countryName||z0.countryName},{shortName:"ST",value:$.stateName||z0.stateName},{shortName:"L",value:$.localityName||z0.localityName},{shortName:"O",value:$.organizationName||z0.organizationName},{shortName:"CN",value:U}],{notBefore:W,notAfter:j}=YW({validityDays:$.validityDays||q$.DEFAULT_VALIDITY_DAYS,verbose:$.verbose}),z=b2($),G=$.keyUsage||{digitalSignature:!0,keyEncipherment:!0},F=$.extKeyUsage||{serverAuth:!0},{certificate:K}=m2({serialNumber:AW(),notBefore:W,notAfter:j,subject:B,issuer:w,publicKey:J,signingKey:Y,isCA:$.basicConstraints?.cA??!1,pathLenConstraint:$.basicConstraints?.pathLenConstraint,keyUsage:G,extendedKeyUsage:F,subjectAltName:z});return{certificate:K,privateKey:g2(X),notBefore:W,notAfter:j}}function l2($,w){L(O.STORAGE,`Storing certificate and private key with options: ${OX(w)}`,w?.verbose);let{certPath:Y,keyPath:A}=wW({basePath:w?.basePath,certPath:w?.certPath,keyPath:w?.keyPath});L(O.STORAGE,`Certificate path: ${Y}`,w?.verbose),L(O.STORAGE,`Private key path: ${A}`,w?.verbose);let X=gU.dirname(Y);if(!d$.existsSync(X))L(O.STORAGE,`Creating certificate directory: ${X}`,w?.verbose),d$.mkdirSync(X,{recursive:!0});L(O.STORAGE,"Writing certificate file",w?.verbose),d$.writeFileSync(Y,$.certificate);let J=gU.dirname(A);if(!d$.existsSync(J))L(O.STORAGE,`Creating private key directory: ${J}`,w?.verbose),d$.mkdirSync(J,{recursive:!0});return L(O.STORAGE,"Writing private key file",w?.verbose),d$.writeFileSync(A,$.privateKey),L(O.STORAGE,"Certificate and private key stored successfully",w?.verbose),Y}function d2($,w){L(O.STORAGE,"Storing CA certificate",w?.verbose);let{caCertPath:Y}=wW({basePath:w?.basePath,caCertPath:w?.caCertPath});L(O.STORAGE,`CA certificate path: ${Y}`,w?.verbose);let A=gU.dirname(Y);if(!d$.existsSync(A))L(O.STORAGE,`Creating CA certificate directory: ${A}`,w?.verbose),d$.mkdirSync(A,{recursive:!0});return L(O.STORAGE,"Writing CA certificate file",w?.verbose),d$.writeFileSync(Y,$),L(O.STORAGE,"CA certificate stored successfully",w?.verbose),Y}function _X($){let w;if($.startsWith("-----BEGIN CERTIFICATE-----"))w=$;else w=D2($);return new KE.X509Certificate(w)}function SX($){return _X($).fingerprint256.replace(/:/g,"").toUpperCase()}function UW($){return n2(_X($).subject)}function NE($){let w=[],Y=$.split(`
133
- `);for(let A of Y){let[X,...J]=A.split("="),U=J.join("=");if(X&&U)w.push({shortName:X.trim(),value:U.trim()})}return w}function n2($){return NE($).find((w)=>w.shortName==="CN")?.value||""}function fE($){let w=[],Y=n2($.subject);if(Y&&!/^\d+\.\d+\.\d+\.\d+$/.test(Y))w.push(Y);let A=$.subjectAltName;if(A){let X=A.split(", ");for(let J of X)if(J.startsWith("DNS:"))w.push(J.slice(4))}return[...new Set(w)]}function WW($,w){let Y=_X($),A=fE(Y);for(let X of A){if(X===w)return!0;if(X.startsWith("*.")){let J=X.slice(2);if(w.endsWith(J)&&w.indexOf(".")===w.lastIndexOf("."))return!0}}return!1}async function EE($,w){if(IX.platform()!=="darwin")return!1;try{let Y=SX($);if(!Y)return L(O.TRUST,"Could not extract certificate fingerprint",w),!1;try{if(qE("security find-certificate -a -Z 2>/dev/null || true").toString().split(`
134
- `).some((A)=>{let X=A.match(/SHA-256 hash:\s*([A-F0-9]+)/i);return!!X&&X[1].toUpperCase()===Y}))return L(O.TRUST,"Certificate fingerprint found in system keychain",w),!0}catch{}return L(O.TRUST,"Certificate fingerprint not found in system keychain",w),!1}catch(Y){return L(O.TRUST,`Error checking certificate trust: ${Y}`,w),!1}}async function BW($,w,Y){L(O.TRUST,`Adding certificate to system trust store with options: ${OX(Y)}`,Y?.verbose),L(O.TRUST,"Storing certificate and private key",Y?.verbose);let A=l2($,Y);L(O.TRUST,"Storing CA certificate",Y?.verbose);let X=d2(w,Y),J=IX.platform();L(O.TRUST,`Detected platform: ${J}`,Y?.verbose);let U=ME[J];if(!U){let B=`Unsupported platform: ${J}`;throw L(O.TRUST,`Error: ${B}`,Y?.verbose),Error(B)}return await U.addCertificate(X,Y),L(O.TRUST,"Certificate successfully added to system trust store",Y?.verbose),A}var HN,VX,vz="https://acme-staging-v02.api.letsencrypt.org/directory",iz="https://acme-v02.api.letsencrypt.org/directory",JX,yN="1.2.840.10045.2.1",CN="1.2.840.10045.3.1.7",QN="1.2.840.10045.4.3.2",LN="2.5.4.3",ON="1.2.840.113549.1.9.14",_N="2.5.29.17",GX,dU,Rf,Mf=($)=>$,Vf=($,w)=>{for(var Y in w)Rf($,Y,{get:w[Y],enumerable:!0,configurable:!0,set:If.bind(w,Y)})},yf=($,w)=>()=>($&&(w=$($=0)),w),$2,j2,R1,TY,z2,of,ef,Rz,wX,hU,S0,a,$q,Mz,wq,Iz,Yq,Aq,TU,Xq,Vz,yz,RU,Jq,Uq,Wq,Bq,YX,G2,jq,h0,zq,Gq,Cz,AX,ZU,E0,c,Fq,Qz,Kq,Lz,Nq,fq,MU,qq,Oz,_z,Eq,IU,Hq,Tq,Rq,Mq,Iq,XX,F2,Vq,yq="0.15.6",s0,qX,qY,kU,DU,EX,xU,PU,EY,bU,uU,Fw,K2,N2,f$,n$,f2,q2,Cq,Lq,E2,HX,G3,V0,m,F3,_q,K3,Sq,N3,f3,Sz,q3,hq,Zq,E3,hz,H3,T3,R3,M3,I3,VU,kq,V3,H$,T2,TX,R2,M2,eU,I2,V2,RX,y2,C2,M1,vq,i$,y3,C3,Q3,Z2,z0,q$,O,T1,dq,Zz="[redacted]",nq,pq,E$,g0,HE,TE,RE,ME;var p2=o(()=>{HN=EN(import.meta.url);VX=new NY;JX=class JX extends Error{problem;httpStatus;constructor($,w,Y){super($);this.name="AcmeError",this.problem=w,this.httpStatus=Y}};GX=new oz,dU=new ez,Rf=Object.defineProperty;$2={};Vf($2,{withErrorRecovery:()=>A2,tryLoadConfig:()=>rf,loadConfigWithResult:()=>nf,loadConfig:()=>B2,isRetryableError:()=>cf,isConfigNotFoundError:()=>uf,isBunfigError:()=>X2,globalPerformanceMonitor:()=>TY,globalCache:()=>R1,getEnvOrDefault:()=>vf,generateConfigTypes:()=>tf,defaultGeneratedDir:()=>q2,defaultConfigDir:()=>f2,deepMergeWithArrayStrategy:()=>aU,deepMerge:()=>J2,createLibraryConfig:()=>af,config:()=>pf,bunfigPlugin:()=>sf,applyEnvVarsToConfig:()=>FY,TypeGenerationError:()=>PU,SchemaValidationError:()=>EY,PluginError:()=>uU,PerformanceMonitor:()=>pU,FileSystemError:()=>xU,ErrorFactory:()=>Fw,EnvVarError:()=>EX,EnvProcessor:()=>CX,ConfigValidator:()=>sU,ConfigValidationError:()=>kU,ConfigNotFoundError:()=>qX,ConfigMergeError:()=>DU,ConfigLoader:()=>oU,ConfigLoadError:()=>qY,ConfigFileLoader:()=>QX,ConfigCache:()=>nU,CacheUtils:()=>z2,BunfigError:()=>s0,BrowserConfigError:()=>bU,ArrayMergeStrategies:()=>K2});Cq=yf(async()=>{j2=import.meta.require,R1=new nU,TY=new pU,z2={createKey:Cf,isEquivalent:Qf,estimateMemoryUsage:Lf},of=jX(_U.cwd(),"config"),ef=jX(_U.cwd(),"src/generated"),Rz=BX.env.CLARITY_LOG_DIR||vN(Sf(),"logs"),wX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Rz,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},hU=await hf(),S0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},a=S0,$q=S0.red,Mz=S0.green,wq=S0.yellow,Iz=S0.blue,Yq=S0.magenta,Aq=S0.cyan,TU=S0.white,Xq=S0.gray,Vz=S0.bgRed,yz=S0.bgYellow,RU=S0.bold,Jq=S0.dim,Uq=S0.italic,Wq=S0.underline,Bq=S0.reset,YX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},G2={debug:"\uD83D\uDD0D",info:Iz("ℹ"),success:Mz("✓"),warning:yz(TU(RU(" WARN "))),error:Vz(TU(RU(" ERROR ")))},jq=new KX("stacks"),h0=new KX("bunfig",{showTags:!0}),zq=i0(fY.cwd(),"config"),Gq=i0(fY.cwd(),"src/generated"),Cz=WX.env.CLARITY_LOG_DIR||uN(xf(),"logs"),AX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Cz,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},ZU=await Pf(),E0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},c=E0,Fq=E0.red,Qz=E0.green,Kq=E0.yellow,Lz=E0.blue,Nq=E0.magenta,fq=E0.cyan,MU=E0.white,qq=E0.gray,Oz=E0.bgRed,_z=E0.bgYellow,Eq=E0.bgGray,IU=E0.bold,Hq=E0.dim,Tq=E0.italic,Rq=E0.underline,Mq=E0.strikethrough,Iq=E0.reset,XX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},F2={debug:"\uD83D\uDD0D",info:Lz("ℹ"),success:Qz("✓"),warning:_z(MU(IU(" WARN "))),error:Oz(MU(IU(" ERROR ")))},Vq=new fX("stacks"),s0=class extends Error{timestamp;context;constructor($,w={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=w,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([w,Y])=>`${w}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}},qX=class extends s0{code="CONFIG_NOT_FOUND";constructor($,w,Y){let A=Y?` or alias "${Y}"`:"";super(`Configuration "${$}"${A} not found`,{configName:$,alias:Y,searchPaths:w,searchPathCount:w.length})}},qY=class extends s0{code="CONFIG_LOAD_ERROR";constructor($,w,Y){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:Y,originalError:w.name,originalMessage:w.message});this.cause=w}},kU=class extends s0{code="CONFIG_VALIDATION_ERROR";constructor($,w,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:w,errorCount:w.length})}},DU=class extends s0{code="CONFIG_MERGE_ERROR";constructor($,w,Y,A){super(`Failed to merge configuration from "${$}" with "${w}": ${Y.message}`,{sourcePath:$,targetPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},EX=class extends s0{code="ENV_VAR_ERROR";constructor($,w,Y,A){super(`Failed to parse environment variable "${$}" with value "${w}" as ${Y}`,{envKey:$,envValue:w,expectedType:Y,configName:A})}},xU=class extends s0{code="FILE_SYSTEM_ERROR";constructor($,w,Y){super(`File system ${$} failed for "${w}": ${Y.message}`,{operation:$,path:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},PU=class extends s0{code="TYPE_GENERATION_ERROR";constructor($,w,Y){super(`Failed to generate types from "${$}" to "${w}": ${Y.message}`,{configDir:$,outputPath:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},EY=class extends s0{code="SCHEMA_VALIDATION_ERROR";constructor($,w,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:w,errorCount:w.length})}},bU=class extends s0{code="BROWSER_CONFIG_ERROR";constructor($,w,Y,A){super(`Failed to fetch configuration from "${$}": ${w} ${Y}`,{endpoint:$,status:w,statusText:Y,configName:A})}},uU=class extends s0{code="PLUGIN_ERROR";constructor($,w,Y){super(`Plugin "${$}" failed during ${w}: ${Y.message}`,{pluginName:$,operation:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},Fw={configNotFound($,w,Y){return new qX($,w,Y)},configLoad($,w,Y){return new qY($,w,Y)},configValidation($,w,Y){return new kU($,w,Y)},configMerge($,w,Y,A){return new DU($,w,Y,A)},envVar($,w,Y,A){return new EX($,w,Y,A)},fileSystem($,w,Y){return new xU($,w,Y)},typeGeneration($,w,Y){return new PU($,w,Y)},schemaValidation($,w,Y){return new EY($,w,Y)},browserConfig($,w,Y,A){return new bU($,w,Y,A)},plugin($,w,Y){return new uU($,w,Y)}},K2={replace:"replace",concat:"concat",smart:"smart"},N2=/^https?:\/\//,f$=new fX("bunfig",{showTags:!0}),n$=new oU,f2=m0(hw.cwd(),"config"),q2=m0(hw.cwd(),"src/generated")});Lq=zX.env.CLARITY_LOG_DIR||Bf(Qq(),"logs"),E2={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Lq,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},HX={...E2},G3=(async()=>{try{let{loadConfig:$}=await Cq().then(()=>$2),w=await $({name:"clarity",alias:"logging",defaultConfig:E2,cwd:zX.cwd()});if(w)Object.assign(HX,w)}catch{}return HX})();V0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},m=V0,F3=V0.red,_q=V0.green,K3=V0.yellow,Sq=V0.blue,N3=V0.magenta,f3=V0.cyan,Sz=V0.white,q3=V0.gray,hq=V0.bgRed,Zq=V0.bgYellow,E3=V0.bgGray,hz=V0.bold,H3=V0.dim,T3=V0.italic,R3=V0.underline,M3=V0.strikethrough,I3=V0.reset,VU={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},kq={debug:"\uD83D\uDD0D",info:Sq("ℹ"),success:_q("✓"),warning:Zq(Sz(hz(" WARN "))),error:hq(Sz(hz(" ERROR ")))};V3=new LX("stacks");H$=class H$ extends Error{timestamp;context;constructor($,w={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=w,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([w,Y])=>`${w}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}};T2=class T2 extends H${code="CONFIG_NOT_FOUND";constructor($,w,Y){let A=Y===void 0?[]:Array.isArray(Y)?Y.filter(Boolean):[Y],X="";if(A.length===1)X=` or alias "${A[0]}"`;else if(A.length>1)X=` or aliases ${A.map((J)=>`"${J}"`).join(", ")}`;super(`Configuration "${$}"${X} not found`,{configName:$,alias:Y,searchPaths:w,searchPathCount:w.length})}};TX=class TX extends H${code="CONFIG_LOAD_ERROR";constructor($,w,Y){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:Y,originalError:w.name,originalMessage:w.message});this.cause=w}};R2=class R2 extends H${code="CONFIG_VALIDATION_ERROR";constructor($,w,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:w,errorCount:w.length})}};M2=class M2 extends H${code="CONFIG_MERGE_ERROR";constructor($,w,Y,A){super(`Failed to merge configuration from "${$}" with "${w}": ${Y.message}`,{sourcePath:$,targetPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};eU=class eU extends H${code="ENV_VAR_ERROR";constructor($,w,Y,A){super(`Failed to parse environment variable "${$}" with value "${w}" as ${Y}`,{envKey:$,envValue:w,expectedType:Y,configName:A})}};I2=class I2 extends H${code="FILE_SYSTEM_ERROR";constructor($,w,Y){super(`File system ${$} failed for "${w}": ${Y.message}`,{operation:$,path:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};V2=class V2 extends H${code="TYPE_GENERATION_ERROR";constructor($,w,Y){super(`Failed to generate types from "${$}" to "${w}": ${Y.message}`,{configDir:$,outputPath:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};RX=class RX extends H${code="SCHEMA_VALIDATION_ERROR";constructor($,w,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:w,errorCount:w.length})}};y2=class y2 extends H${code="BROWSER_CONFIG_ERROR";constructor($,w,Y,A){super(`Failed to fetch configuration from "${$}": ${w} ${Y}`,{endpoint:$,status:w,statusText:Y,configName:A})}};C2=class C2 extends H${code="PLUGIN_ERROR";constructor($,w,Y){super(`Plugin "${$}" failed during ${w}: ${Y.message}`,{pluginName:$,operation:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};M1={configNotFound($,w,Y){return new T2($,w,Y)},configLoad($,w,Y){return new TX($,w,Y)},configValidation($,w,Y){return new R2($,w,Y)},configMerge($,w,Y,A){return new M2($,w,Y,A)},envVar($,w,Y,A){return new eU($,w,Y,A)},fileSystem($,w,Y){return new I2($,w,Y)},typeGeneration($,w,Y){return new V2($,w,Y)},schemaValidation($,w,Y){return new RX($,w,Y)},browserConfig($,w,Y,A){return new y2($,w,Y,A)},plugin($,w,Y){return new C2($,w,Y)}};vq=/^https?:\/\//;i$=new LX("bunfig",{showTags:!0});y3=new h2;C3=U$(yX.cwd(),"config"),Q3=U$(yX.cwd(),"src/generated"),Z2={altNameIPs:["127.0.0.1"],altNameURIs:["localhost"],organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",commonName:"tlsx.localhost",validityDays:825,hostCertCN:"tlsx.localhost",domain:"tlsx.localhost",rootCA:{certificate:"",privateKey:""},basePath:"",caCertPath:XU.join(AU.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:XU.join(AU.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:XU.join(AU.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},z0=Z2,q$={DEFAULT_KEY_SIZE:2048,DEFAULT_VALIDITY_DAYS:825,DEFAULT_CA_VALIDITY_YEARS:100,DEFAULT_NOT_BEFORE_DAYS:2,LINUX_TRUST_ARGS:"TC, C, C",LINUX_CERT_DB_FILENAME:"cert9.db"},O={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"},T1={info:(...$)=>console.log(...$),warn:(...$)=>console.warn(...$),success:(...$)=>console.log(...$),error:(...$)=>console.error(...$),debug:(...$)=>console.debug(...$)};dq=lq(mq);nq=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),pq=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/;E$={SEQUENCE:48,SET:49,INTEGER:2,BIT_STRING:3,OCTET_STRING:4,NULL:5,OID:6,UTF8_STRING:12,PRINTABLE_STRING:19,IA5_STRING:22,UTC_TIME:23,GENERALIZED_TIME:24,CONTEXT_0:160,CONTEXT_2:130,CONTEXT_3:163},g0={SHA256_WITH_RSA:"1.2.840.113549.1.1.11",RSA_ENCRYPTION:"1.2.840.113549.1.1.1",COMMON_NAME:"2.5.4.3",COUNTRY:"2.5.4.6",LOCALITY:"2.5.4.7",STATE:"2.5.4.8",ORGANIZATION:"2.5.4.10",ORGANIZATIONAL_UNIT:"2.5.4.11",BASIC_CONSTRAINTS:"2.5.29.19",KEY_USAGE:"2.5.29.15",EXTENDED_KEY_USAGE:"2.5.29.37",SUBJECT_ALT_NAME:"2.5.29.17",SUBJECT_KEY_IDENTIFIER:"2.5.29.14",AUTHORITY_KEY_IDENTIFIER:"2.5.29.35",SERVER_AUTH:"1.3.6.1.5.5.7.3.1",CLIENT_AUTH:"1.3.6.1.5.5.7.3.2"};HE={platform:"darwin",async addCertificate($,w){if(await EE($,w?.verbose)){L(O.TRUST,"Certificate is already trusted, skipping trust store update",w?.verbose),T1.success("Certificate is already trusted in system keychain");return}L(O.TRUST,"Adding certificate to macOS keychain",w?.verbose),await Gw(`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ${$}`)},async removeCertificate($,w,Y){let A=Y||z0.commonName;L(O.TRUST,`Removing certificate ${A} from macOS keychain`,w?.verbose);try{await Gw(`sudo security delete-certificate -c "${A}" /Library/Keychains/System.keychain`),L(O.TRUST,`Removed certificate ${A} from macOS keychain`,w?.verbose)}catch(X){throw L(O.TRUST,`Error removing certificate: ${X}`,w?.verbose),X}}},TE={platform:"win32",async addCertificate($,w){L(O.TRUST,"Adding certificate to Windows certificate store",w?.verbose),await Gw(`certutil -f -v -addstore -enterprise Root ${$}`)},async removeCertificate($,w,Y){let A=Y||z0.commonName;L(O.TRUST,`Removing certificate ${A} from Windows certificate store`,w?.verbose);try{await Gw(`certutil -delstore -enterprise Root "${A}"`),L(O.TRUST,`Removed certificate ${A} from Windows certificate store`,w?.verbose)}catch(X){throw L(O.TRUST,`Error removing certificate: ${X}`,w?.verbose),X}}},RE={platform:"linux",async addCertificate($,w){L(O.TRUST,"Adding certificate to Linux certificate store",w?.verbose);let Y=IX.homedir(),A=q$.LINUX_CERT_DB_FILENAME,X=q$.LINUX_TRUST_ARGS;L(O.TRUST,`Searching for certificate databases in ${Y}`,w?.verbose);let J=iU(Y,A);if(J.length===0){T1.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let U of J){L(O.TRUST,`Processing certificate database in ${U}`,w?.verbose);try{L(O.TRUST,`Attempting to delete existing cert for ${z0.commonName}`,w?.verbose),await Gw(`certutil -d sql:${U} -D -n ${z0.commonName}`)}catch(B){L(O.TRUST,`Warning: Error deleting existing cert: ${B}`,w?.verbose),console.warn(`Error deleting existing cert: ${B}`)}L(O.TRUST,`Adding new certificate to ${U}`,w?.verbose),await Gw(`certutil -d sql:${U} -A -t ${X} -n ${z0.commonName} -i ${$}`),T1.info(`Cert added to ${U}`)}},async removeCertificate($,w,Y){let A=Y||z0.commonName;L(O.TRUST,`Removing certificate ${A} from Linux certificate store`,w?.verbose);let X=IX.homedir(),J=q$.LINUX_CERT_DB_FILENAME;L(O.TRUST,`Searching for certificate databases in ${X}`,w?.verbose);let U=iU(X,J);if(U.length===0){T1.warn("No certificate databases found. Cannot remove certificate.");return}for(let B of U){L(O.TRUST,`Processing certificate database in ${B}`,w?.verbose);try{await Gw(`certutil -d sql:${B} -D -n "${A}"`),T1.info(`Cert removed from ${B}`)}catch(W){L(O.TRUST,`Error removing cert from ${B}: ${W}`,w?.verbose),console.warn(`Error removing cert from ${B}: ${W}`)}}}},ME={darwin:HE,win32:TE,linux:RE}});var hX=o(()=>{p2()});import{homedir as jW}from"node:os";import{join as zW,resolve as MC}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",VE,GW;var FW=o(()=>{aJ();VE={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:zW(jW(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:zW(jW(),".stacks","ssl","stacks.localhost.crt"),keyPath:zW(jW(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0},GW=VE});function Zw($){try{return SX($)}catch{return null}}function KW($){try{return UW($)||null}catch{return null}}function ZX($,w){try{return w.every((Y)=>WW($,Y))}catch{return!1}}var kX=o(()=>{hX()});import{existsSync as r2,statSync as t2}from"fs";import{existsSync as ZW,mkdirSync as _E,readdirSync as SE,writeFileSync as hE}from"fs";import{homedir as V1}from"os";import{dirname as a2,resolve as d0}from"path";import kw from"process";import{join as ZE,relative as kE,resolve as s2}from"path";import aX from"process";import{existsSync as kG,mkdirSync as DC,readdirSync as xC,writeFileSync as PC}from"fs";import{homedir as NW}from"os";import{dirname as cC,resolve as l0}from"path";import MY from"process";import{join as DE,relative as xE,resolve as o2}from"path";import sX from"process";import{existsSync as DG,mkdirSync as lC,readdirSync as dC,writeFileSync as nC}from"fs";import{dirname as rC,resolve as oX}from"path";import kW from"process";import{Buffer as Nw}from"buffer";import{createCipheriv as PE,createDecipheriv as bE,randomBytes as fW}from"crypto";import{closeSync as qW,createReadStream as e2,createWriteStream as uE,existsSync as EW,fsyncSync as $G,openSync as wG,writeFileSync as cE}from"fs";import{access as vE,constants as YG,mkdir as iE,readdir as DX,rename as AG,stat as y1,unlink as xX,writeFile as HW}from"fs/promises";import{join as C1}from"path";import Z0 from"process";import{pipeline as mE}from"stream/promises";import{createGzip as XG}from"zlib";import Q1 from"process";import t$ from"process";import{Buffer as p$}from"buffer";import{createCipheriv as gE,createDecipheriv as lE,randomBytes as TW}from"crypto";import{closeSync as RW,createReadStream as JG,createWriteStream as dE,existsSync as PX,fsyncSync as UG,openSync as WG,writeFileSync as nE}from"fs";import{access as pE,constants as BG,mkdir as rE,readdir as bX,rename as jG,stat as L1,unlink as uX,writeFile as MW}from"fs/promises";import{isAbsolute as tE,join as O1,resolve as aE}from"path";import x from"process";import{pipeline as sE}from"stream/promises";import{createGzip as zG}from"zlib";import _1 from"process";import a$ from"process";import cX from"process";import{existsSync as vX}from"fs";import{resolve as IW}from"path";import{existsSync as oE}from"fs";import{existsSync as eE,readdirSync as $H}from"fs";import{extname as VW,resolve as GG}from"path";import wH from"process";import{join as YT,relative as AT,resolve as VG}from"path";import J8 from"process";import{Buffer as r$}from"buffer";import{createCipheriv as UT,createDecipheriv as WT,randomBytes as OW}from"crypto";import{closeSync as _W,createReadStream as yG,createWriteStream as BT,existsSync as mX,fsyncSync as CG,openSync as QG,writeFileSync as jT}from"fs";import{access as zT,constants as LG,mkdir as GT,readdir as gX,rename as OG,stat as S1,unlink as lX,writeFile as SW}from"fs/promises";import{isAbsolute as FT,join as h1,resolve as KT}from"path";import P from"process";import{pipeline as NT}from"stream/promises";import{createGzip as _G}from"zlib";import Z1 from"process";import s$ from"process";function QE($,w){this[$]=CE.bind(null,w)}class gW{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!r2($))return!0;return t2($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=r2(Y)?t2(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class lW{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function YH($,w={}){let A=Object.keys(w).sort().map((X)=>`${X}:${w[X]}`).join("|");return A?`${$}:${A}`:$}function AH($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function XH($){return $.getStats().size*2}function dW($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&Y0(w[0])&&"id"in w[0]&&w[0].id===3&&Y0(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(Y0(w)&&Y0($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(Y0($)&&"arr"in $&&Array.isArray($.arr)&&Y0(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&Y0(w[0])&&Y0($[0])){let A=[...w];for(let X of $)if(Y0(X)&&"name"in X){if(!A.find((U)=>Y0(U)&&("name"in U)&&U.name===X.name))A.push(X)}else if(Y0(X)&&"path"in X){if(!A.find((U)=>Y0(U)&&("path"in U)&&U.path===X.path))A.push(X)}else if(!A.some((J)=>eX(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!Y0(w)||!Y0($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(Y0(X)&&Y0(Y[A]))Y[A]=dW(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&Y0(X[0])&&Y0(Y[A][0])){let J=[...X];for(let U of Y[A])if(Y0(U)&&"name"in U){if(!J.find((W)=>Y0(W)&&("name"in W)&&W.name===U.name))J.push(U)}else if(Y0(U)&&"path"in U){if(!J.find((W)=>Y0(W)&&("path"in W)&&W.path===U.path))J.push(U)}else if(!J.some((B)=>eX(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function eX($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!eX($[Y],w[Y]))return!1;return!0}if(Y0($)&&Y0(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!eX($[X],w[X]))return!1}return!0}return!1}function Y0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function JH($,w){if(!DG($))return null;try{let Y=await import($),A=Y.default||Y;if(typeof A!=="object"||A===null||Array.isArray(A))return null;try{return dW(w,A)}catch{return null}}catch{return null}}async function UH({name:$="",cwd:w,defaultConfig:Y}){let A=w||kW.cwd(),X=[".ts",".js",".mjs",".cjs",".json"],J=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of J)for(let B of X){let W=oX(A,`${U}${B}`),j=await JH(W,Y);if(j!==null)return j}try{let U=oX(A,"package.json");if(DG(U)){let W=(await import(U))[$];if(W&&typeof W==="object"&&!Array.isArray(W))try{return dW(Y,W)}catch{}}}catch{}return Y}function WH($,w={}){let Y=sX.cwd();while(Y.includes("storage"))Y=o2(Y,"..");let A=o2(Y,$||"");if(w?.relative)return xE(sX.cwd(),A);return A}async function BH(){try{let $=await UH({name:"clarity",defaultConfig:nX,cwd:sX.cwd(),endpoint:"",headers:{}});return{...nX,...$}}catch{return nX}}function B0(){if(t$.env.NODE_ENV==="test"||t$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function jH(){if(t$.env.NODE_ENV==="test"||t$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof t$<"u"){let $=t$.type;if($==="renderer"||$==="worker")return!1;return!!(t$.versions&&(t$.versions.node||t$.versions.bun))}return!1}class xG{async format($){let w=await jH(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:Q1.pid,hostname:w(),environment:Q1.env.NODE_ENV||"development",platform:Q1.platform,version:Q1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Q1.env.NODE_ENV||Q1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class $8{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...xW},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new xG,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??Z0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...pX,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...pX};return{...pX,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:xW.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await vE(this.config.logDirectory,YG.F_OK|YG.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await iE(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:Nw.from($);try{if(!EW(this.currentLogFile))await HW(this.currentLogFile,"",{mode:420});if(X=wG(this.currentLogFile,"a",420),cE(X,W,{flag:"a"}),$G(X),X!==void 0)qW(X),X=void 0;if((await y1(this.currentLogFile)).size===0){if(await HW(this.currentLogFile,W,{flag:"w",mode:420}),(await y1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let F=B*2**J;await new Promise((K)=>setTimeout(K,F)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{qW(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return C1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return C1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return C1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(B0())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return fW(16).toString("hex")}generateKey(){return fW(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=fW(16),A=PE("aes-256-gcm",w,Y),X=Nw.concat([A.update($,"utf8"),A.final()]),J=A.getAuthTag();return{encrypted:Nw.concat([Y,X,J]),iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=XG(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(Nw.from(Nw.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(B0())return;let $=await y1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await DX(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await y1(Y).catch(()=>null))try{if(await AG(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await xX(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await HW(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await y1(Y).catch(()=>null))await AG(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await DX(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await xX(C1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=e2($),A=uE(w),X=XG();await mE(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);await this.writeToFile(A),console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(w),console.log(w);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue($)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue($){return{debug:0,info:1,success:2,warning:3,error:4}[$]}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),EW(this.currentLogFile))try{let $=wG(this.currentLogFile,"r+");$G($),qW($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!B0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await DX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await xX(C1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.fancy?s.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=Z0.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${s.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);if(this.fancy&&!B0()){let j=dG[$],z=this.options.showTags!==!1&&this.name?s.gray(this.formatTag(this.name)):"",G;switch($){case"debug":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:s.gray(U),level:$}),console.error(G);break;case"info":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G);break;case"success":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:s.green(U),level:$}),console.error(G);break;case"warning":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.warn(G);break;case"error":if(G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G),B){let F=B.split(`
135
- `);for(let K of F)if(K.trim()&&!K.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:s.gray(` ${K}`),level:$,showTimestamp:!1}))}break}}else if(!B0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${J} ${this.environment}.${$.toUpperCase()}: ${U}
131
+ `}function NW(){let $=C1.randomBytes(20);return $[0]=$[0]&127||1,$}function o2($=2048){let{privateKey:w,publicKey:Y}=C1.generateKeyPairSync("rsa",{modulusLength:$});return{privateKey:w,publicKey:Y}}function MT($){let w=$.export({type:"spki",format:"der"});return C1.createHash("sha1").update(w).digest()}function e2($){let w={serialNumber:$.serialNumber||NW(),notBefore:$.notBefore,notAfter:$.notAfter,subject:$.subject,issuer:$.issuer||$.subject,publicKey:$.publicKey,extensions:{basicConstraints:{isCA:$.isCA??!1,critical:!0,pathLenConstraint:$.pathLenConstraint},subjectKeyIdentifier:MT($.publicKey)}};if($.keyUsage)w.extensions.keyUsage={...$.keyUsage,critical:!0};if($.extendedKeyUsage)w.extensions.extendedKeyUsage=$.extendedKeyUsage;if($.subjectAltName?.length)w.extensions.subjectAltName=$.subjectAltName;let Y=HT(w),A=fT(Y,$.signingKey);return{certificate:RT(A,"CERTIFICATE"),certificateDer:A}}function $G($){return $.export({type:"pkcs8",format:"pem"})}function IT($){return C1.createPrivateKey($)}function VT($){let w=new C1.X509Certificate($),Y=w.publicKey,A=[],X=w.subject.split(`
132
+ `);for(let J of X){let[U,...B]=J.split("="),W=B.join("=");if(U&&W)A.push({shortName:U.trim(),value:W.trim()})}return{publicKey:Y,subject:A}}async function qW($={}){L("ca","Creating new Root CA Certificate",$.verbose);let w=$.keySize||E$.DEFAULT_KEY_SIZE;L("ca",`Generating ${w}-bit RSA key pair`,$.verbose);let{privateKey:Y,publicKey:A}=o2(w),X=[{shortName:"C",value:$.countryName||z0.countryName},{shortName:"ST",value:$.stateName||z0.stateName},{shortName:"L",value:$.localityName||z0.localityName},{shortName:"O",value:$.organization||"Local Development CA"},{shortName:"OU",value:$.organizationalUnit||"Certificate Authority"},{shortName:"CN",value:$.commonName||"Local Development Root CA"}],{notBefore:J,notAfter:U}=FW({validityYears:$.validityYears||E$.DEFAULT_CA_VALIDITY_YEARS,verbose:$.verbose}),{certificate:B}=e2({serialNumber:NW(),notBefore:J,notAfter:U,subject:X,publicKey:A,signingKey:Y,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:B,privateKey:$G(Y),notBefore:J,notAfter:U}}async function EW($){if(L("ca","Generating new certificate",$.verbose),L("ca",`Options: ${DX($)}`,$.verbose),!$.domain&&!$.domains?.length)throw Error("Either domain or domains must be specified");if(!$.rootCA?.certificate||!$.rootCA?.privateKey)throw Error("Root CA certificate and private key are required");let{subject:w}=VT($.rootCA.certificate),Y=IT($.rootCA.privateKey);L("ca",`Generating ${E$.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,$.verbose);let A=E$.DEFAULT_KEY_SIZE,{privateKey:X,publicKey:J}=o2(A),U=$.commonName||p2($),B=$.certificateAttributes||[{shortName:"C",value:$.countryName||z0.countryName},{shortName:"ST",value:$.stateName||z0.stateName},{shortName:"L",value:$.localityName||z0.localityName},{shortName:"O",value:$.organizationName||z0.organizationName},{shortName:"CN",value:U}],{notBefore:W,notAfter:j}=FW({validityDays:$.validityDays||E$.DEFAULT_VALIDITY_DAYS,verbose:$.verbose}),z=r2($),G=$.keyUsage||{digitalSignature:!0,keyEncipherment:!0},K=$.extKeyUsage||{serverAuth:!0},{certificate:F}=e2({serialNumber:NW(),notBefore:W,notAfter:j,subject:B,issuer:w,publicKey:J,signingKey:Y,isCA:$.basicConstraints?.cA??!1,pathLenConstraint:$.basicConstraints?.pathLenConstraint,keyUsage:G,extendedKeyUsage:K,subjectAltName:z});return{certificate:F,privateKey:$G(X),notBefore:W,notAfter:j}}function wG($,w){L(_.STORAGE,`Storing certificate and private key with options: ${DX(w)}`,w?.verbose);let{certPath:Y,keyPath:A}=KW({basePath:w?.basePath,certPath:w?.certPath,keyPath:w?.keyPath});L(_.STORAGE,`Certificate path: ${Y}`,w?.verbose),L(_.STORAGE,`Private key path: ${A}`,w?.verbose);let X=$W.dirname(Y);if(!r$.existsSync(X))L(_.STORAGE,`Creating certificate directory: ${X}`,w?.verbose),r$.mkdirSync(X,{recursive:!0});L(_.STORAGE,"Writing certificate file",w?.verbose),r$.writeFileSync(Y,$.certificate);let J=$W.dirname(A);if(!r$.existsSync(J))L(_.STORAGE,`Creating private key directory: ${J}`,w?.verbose),r$.mkdirSync(J,{recursive:!0});return L(_.STORAGE,"Writing private key file",w?.verbose),r$.writeFileSync(A,$.privateKey),L(_.STORAGE,"Certificate and private key stored successfully",w?.verbose),Y}function YG($,w){L(_.STORAGE,"Storing CA certificate",w?.verbose);let{caCertPath:Y}=KW({basePath:w?.basePath,caCertPath:w?.caCertPath});L(_.STORAGE,`CA certificate path: ${Y}`,w?.verbose);let A=$W.dirname(Y);if(!r$.existsSync(A))L(_.STORAGE,`Creating CA certificate directory: ${A}`,w?.verbose),r$.mkdirSync(A,{recursive:!0});return L(_.STORAGE,"Writing CA certificate file",w?.verbose),r$.writeFileSync(Y,$),L(_.STORAGE,"CA certificate stored successfully",w?.verbose),Y}function xX($){let w;if($.startsWith("-----BEGIN CERTIFICATE-----"))w=$;else w=l2($);return new CT.X509Certificate(w)}function PX($){return xX($).fingerprint256.replace(/:/g,"").toUpperCase()}function TW($){return AG(xX($).subject)}function QT($){let w=[],Y=$.split(`
133
+ `);for(let A of Y){let[X,...J]=A.split("="),U=J.join("=");if(X&&U)w.push({shortName:X.trim(),value:U.trim()})}return w}function AG($){return QT($).find((w)=>w.shortName==="CN")?.value||""}function yT($){let w=[],Y=AG($.subject);if(Y&&!/^\d+\.\d+\.\d+\.\d+$/.test(Y))w.push(Y);let A=$.subjectAltName;if(A){let X=A.split(", ");for(let J of X)if(J.startsWith("DNS:"))w.push(J.slice(4))}return[...new Set(w)]}function HW($,w){let Y=xX($),A=yT(Y);for(let X of A){if(X===w)return!0;if(X.startsWith("*.")){let J=X.slice(2);if(w.endsWith(J)&&w.indexOf(".")===w.lastIndexOf("."))return!0}}return!1}async function OT($,w){if(OX.platform()!=="darwin")return!1;try{let Y=PX($);if(!Y)return L(_.TRUST,"Could not extract certificate fingerprint",w),!1;try{if(LT("security find-certificate -a -Z 2>/dev/null || true").toString().split(`
134
+ `).some((A)=>{let X=A.match(/SHA-256 hash:\s*([A-F0-9]+)/i);return!!X&&X[1].toUpperCase()===Y}))return L(_.TRUST,"Certificate fingerprint found in system keychain",w),!0}catch{}return L(_.TRUST,"Certificate fingerprint not found in system keychain",w),!1}catch(Y){return L(_.TRUST,`Error checking certificate trust: ${Y}`,w),!1}}async function fW($,w,Y){L(_.TRUST,`Adding certificate to system trust store with options: ${DX(Y)}`,Y?.verbose),L(_.TRUST,"Storing certificate and private key",Y?.verbose);let A=wG($,Y);L(_.TRUST,"Storing CA certificate",Y?.verbose);let X=YG(w,Y),J=OX.platform();L(_.TRUST,`Detected platform: ${J}`,Y?.verbose);let U=hT[J];if(!U){let B=`Unsupported platform: ${J}`;throw L(_.TRUST,`Error: ${B}`,Y?.verbose),Error(B)}return await U.addCertificate(X,Y),L(_.TRUST,"Certificate successfully added to system trust store",Y?.verbose),A}var SN,_X,sz="https://acme-staging-v02.api.letsencrypt.org/directory",oz="https://acme-v02.api.letsencrypt.org/directory",GX,PN="1.2.840.10045.2.1",bN="1.2.840.10045.3.1.7",uN="1.2.840.10045.4.3.2",vN="2.5.4.3",cN="1.2.840.113549.1.9.14",iN="2.5.29.17",TX,YW,hq,kq=($)=>$,xq=($,w)=>{for(var Y in w)hq($,Y,{get:w[Y],enumerable:!0,configurable:!0,set:Dq.bind(w,Y)})},Pq=($,w)=>()=>($&&(w=$($=0)),w),G2,R2,I1,VY,M2,jE,zE,Zz,WX,mU,S0,s,GE,hz,KE,kz,FE,NE,SU,qE,Dz,xz,ZU,EE,TE,HE,fE,BX,I2,RE,Z0,ME,IE,Pz,jX,gU,T0,v,VE,bz,CE,uz,QE,yE,hU,LE,vz,cz,OE,kU,_E,SE,ZE,hE,kE,zX,V2,DE,xE="0.15.6",s0,IX,RY,dU,lU,VX,nU,pU,MY,rU,tU,Nw,C2,Q2,q$,t$,y2,L2,PE,uE,O2,CX,ZC,V0,m,hC,cE,kC,iE,DC,xC,iz,PC,mE,gE,bC,mz,uC,vC,cC,iC,mC,DU,dE,gC,H$,S2,QX,Z2,h2,zW,k2,D2,yX,x2,P2,V1,sE,d$,dC,lC,nC,g2,z0,E$,_,M1,YT,gz="[redacted]",AT,XT,T$,g0,_T,ST,ZT,hT;var XG=t(()=>{SN=_N(import.meta.url);_X=new HY;GX=class GX extends Error{problem;httpStatus;constructor($,w,Y){super($);this.name="AcmeError",this.problem=w,this.httpStatus=Y}};TX=new j2,YW=new z2,hq=Object.defineProperty;G2={};xq(G2,{withErrorRecovery:()=>N2,tryLoadConfig:()=>JE,loadConfigWithResult:()=>AE,loadConfig:()=>f2,isRetryableError:()=>sq,isConfigNotFoundError:()=>aq,isBunfigError:()=>q2,globalPerformanceMonitor:()=>VY,globalCache:()=>I1,getEnvOrDefault:()=>oq,generateConfigTypes:()=>UE,defaultGeneratedDir:()=>L2,defaultConfigDir:()=>y2,deepMergeWithArrayStrategy:()=>WW,deepMerge:()=>E2,createLibraryConfig:()=>WE,config:()=>XE,bunfigPlugin:()=>BE,applyEnvVarsToConfig:()=>EY,TypeGenerationError:()=>pU,SchemaValidationError:()=>MY,PluginError:()=>tU,PerformanceMonitor:()=>XW,FileSystemError:()=>nU,ErrorFactory:()=>Nw,EnvVarError:()=>VX,EnvProcessor:()=>ZX,ConfigValidator:()=>BW,ConfigValidationError:()=>dU,ConfigNotFoundError:()=>IX,ConfigMergeError:()=>lU,ConfigLoader:()=>jW,ConfigLoadError:()=>RY,ConfigFileLoader:()=>hX,ConfigCache:()=>AW,CacheUtils:()=>M2,BunfigError:()=>s0,BrowserConfigError:()=>rU,ArrayMergeStrategies:()=>C2});PE=Pq(async()=>{R2=import.meta.require,I1=new AW,VY=new XW,M2={createKey:bq,isEquivalent:uq,estimateMemoryUsage:vq},jE=qX(cU.cwd(),"config"),zE=qX(cU.cwd(),"src/generated"),Zz=NX.env.CLARITY_LOG_DIR||oN(mq(),"logs"),WX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Zz,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},mU=await gq(),S0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},s=S0,GE=S0.red,hz=S0.green,KE=S0.yellow,kz=S0.blue,FE=S0.magenta,NE=S0.cyan,SU=S0.white,qE=S0.gray,Dz=S0.bgRed,xz=S0.bgYellow,ZU=S0.bold,EE=S0.dim,TE=S0.italic,HE=S0.underline,fE=S0.reset,BX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},I2={debug:"\uD83D\uDD0D",info:kz("ℹ"),success:hz("✓"),warning:xz(SU(ZU(" WARN "))),error:Dz(SU(ZU(" ERROR ")))},RE=new fX("stacks"),Z0=new fX("bunfig",{showTags:!0}),ME=i0(fY.cwd(),"config"),IE=i0(fY.cwd(),"src/generated"),Pz=FX.env.CLARITY_LOG_DIR||aN(pq(),"logs"),jX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Pz,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},gU=await rq(),T0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},v=T0,VE=T0.red,bz=T0.green,CE=T0.yellow,uz=T0.blue,QE=T0.magenta,yE=T0.cyan,hU=T0.white,LE=T0.gray,vz=T0.bgRed,cz=T0.bgYellow,OE=T0.bgGray,kU=T0.bold,_E=T0.dim,SE=T0.italic,ZE=T0.underline,hE=T0.strikethrough,kE=T0.reset,zX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},V2={debug:"\uD83D\uDD0D",info:uz("ℹ"),success:bz("✓"),warning:cz(hU(kU(" WARN "))),error:vz(hU(kU(" ERROR ")))},DE=new MX("stacks"),s0=class extends Error{timestamp;context;constructor($,w={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=w,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([w,Y])=>`${w}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}},IX=class extends s0{code="CONFIG_NOT_FOUND";constructor($,w,Y){let A=Y?` or alias "${Y}"`:"";super(`Configuration "${$}"${A} not found`,{configName:$,alias:Y,searchPaths:w,searchPathCount:w.length})}},RY=class extends s0{code="CONFIG_LOAD_ERROR";constructor($,w,Y){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:Y,originalError:w.name,originalMessage:w.message});this.cause=w}},dU=class extends s0{code="CONFIG_VALIDATION_ERROR";constructor($,w,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:w,errorCount:w.length})}},lU=class extends s0{code="CONFIG_MERGE_ERROR";constructor($,w,Y,A){super(`Failed to merge configuration from "${$}" with "${w}": ${Y.message}`,{sourcePath:$,targetPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},VX=class extends s0{code="ENV_VAR_ERROR";constructor($,w,Y,A){super(`Failed to parse environment variable "${$}" with value "${w}" as ${Y}`,{envKey:$,envValue:w,expectedType:Y,configName:A})}},nU=class extends s0{code="FILE_SYSTEM_ERROR";constructor($,w,Y){super(`File system ${$} failed for "${w}": ${Y.message}`,{operation:$,path:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},pU=class extends s0{code="TYPE_GENERATION_ERROR";constructor($,w,Y){super(`Failed to generate types from "${$}" to "${w}": ${Y.message}`,{configDir:$,outputPath:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},MY=class extends s0{code="SCHEMA_VALIDATION_ERROR";constructor($,w,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:w,errorCount:w.length})}},rU=class extends s0{code="BROWSER_CONFIG_ERROR";constructor($,w,Y,A){super(`Failed to fetch configuration from "${$}": ${w} ${Y}`,{endpoint:$,status:w,statusText:Y,configName:A})}},tU=class extends s0{code="PLUGIN_ERROR";constructor($,w,Y){super(`Plugin "${$}" failed during ${w}: ${Y.message}`,{pluginName:$,operation:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},Nw={configNotFound($,w,Y){return new IX($,w,Y)},configLoad($,w,Y){return new RY($,w,Y)},configValidation($,w,Y){return new dU($,w,Y)},configMerge($,w,Y,A){return new lU($,w,Y,A)},envVar($,w,Y,A){return new VX($,w,Y,A)},fileSystem($,w,Y){return new nU($,w,Y)},typeGeneration($,w,Y){return new pU($,w,Y)},schemaValidation($,w,Y){return new MY($,w,Y)},browserConfig($,w,Y,A){return new rU($,w,Y,A)},plugin($,w,Y){return new tU($,w,Y)}},C2={replace:"replace",concat:"concat",smart:"smart"},Q2=/^https?:\/\//,q$=new MX("bunfig",{showTags:!0}),t$=new jW,y2=m0(Dw.cwd(),"config"),L2=m0(Dw.cwd(),"src/generated")});uE=EX.env.CLARITY_LOG_DIR||Rq(bE(),"logs"),O2={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:uE,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},CX={...O2},ZC=(async()=>{try{let{loadConfig:$}=await PE().then(()=>G2),w=await $({name:"clarity",alias:"logging",defaultConfig:O2,cwd:EX.cwd()});if(w)Object.assign(CX,w)}catch{}return CX})();V0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},m=V0,hC=V0.red,cE=V0.green,kC=V0.yellow,iE=V0.blue,DC=V0.magenta,xC=V0.cyan,iz=V0.white,PC=V0.gray,mE=V0.bgRed,gE=V0.bgYellow,bC=V0.bgGray,mz=V0.bold,uC=V0.dim,vC=V0.italic,cC=V0.underline,iC=V0.strikethrough,mC=V0.reset,DU={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},dE={debug:"\uD83D\uDD0D",info:iE("ℹ"),success:cE("✓"),warning:gE(iz(mz(" WARN "))),error:mE(iz(mz(" ERROR ")))};gC=new kX("stacks");H$=class H$ extends Error{timestamp;context;constructor($,w={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=w,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([w,Y])=>`${w}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}};S2=class S2 extends H${code="CONFIG_NOT_FOUND";constructor($,w,Y){let A=Y===void 0?[]:Array.isArray(Y)?Y.filter(Boolean):[Y],X="";if(A.length===1)X=` or alias "${A[0]}"`;else if(A.length>1)X=` or aliases ${A.map((J)=>`"${J}"`).join(", ")}`;super(`Configuration "${$}"${X} not found`,{configName:$,alias:Y,searchPaths:w,searchPathCount:w.length})}};QX=class QX extends H${code="CONFIG_LOAD_ERROR";constructor($,w,Y){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:Y,originalError:w.name,originalMessage:w.message});this.cause=w}};Z2=class Z2 extends H${code="CONFIG_VALIDATION_ERROR";constructor($,w,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:w,errorCount:w.length})}};h2=class h2 extends H${code="CONFIG_MERGE_ERROR";constructor($,w,Y,A){super(`Failed to merge configuration from "${$}" with "${w}": ${Y.message}`,{sourcePath:$,targetPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};zW=class zW extends H${code="ENV_VAR_ERROR";constructor($,w,Y,A){super(`Failed to parse environment variable "${$}" with value "${w}" as ${Y}`,{envKey:$,envValue:w,expectedType:Y,configName:A})}};k2=class k2 extends H${code="FILE_SYSTEM_ERROR";constructor($,w,Y){super(`File system ${$} failed for "${w}": ${Y.message}`,{operation:$,path:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};D2=class D2 extends H${code="TYPE_GENERATION_ERROR";constructor($,w,Y){super(`Failed to generate types from "${$}" to "${w}": ${Y.message}`,{configDir:$,outputPath:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};yX=class yX extends H${code="SCHEMA_VALIDATION_ERROR";constructor($,w,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:w,errorCount:w.length})}};x2=class x2 extends H${code="BROWSER_CONFIG_ERROR";constructor($,w,Y,A){super(`Failed to fetch configuration from "${$}": ${w} ${Y}`,{endpoint:$,status:w,statusText:Y,configName:A})}};P2=class P2 extends H${code="PLUGIN_ERROR";constructor($,w,Y){super(`Plugin "${$}" failed during ${w}: ${Y.message}`,{pluginName:$,operation:w,originalError:Y.name,originalMessage:Y.message});this.cause=Y}};V1={configNotFound($,w,Y){return new S2($,w,Y)},configLoad($,w,Y){return new QX($,w,Y)},configValidation($,w,Y){return new Z2($,w,Y)},configMerge($,w,Y,A){return new h2($,w,Y,A)},envVar($,w,Y,A){return new zW($,w,Y,A)},fileSystem($,w,Y){return new k2($,w,Y)},typeGeneration($,w,Y){return new D2($,w,Y)},schemaValidation($,w,Y){return new yX($,w,Y)},browserConfig($,w,Y,A){return new x2($,w,Y,A)},plugin($,w,Y){return new P2($,w,Y)}};sE=/^https?:\/\//;d$=new kX("bunfig",{showTags:!0});dC=new m2;lC=U$(SX.cwd(),"config"),nC=U$(SX.cwd(),"src/generated"),g2={altNameIPs:["127.0.0.1"],altNameURIs:["localhost"],organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",commonName:"tlsx.localhost",validityDays:825,hostCertCN:"tlsx.localhost",domain:"tlsx.localhost",rootCA:{certificate:"",privateKey:""},basePath:"",caCertPath:qU.join(NU.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:qU.join(NU.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:qU.join(NU.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},z0=g2,E$={DEFAULT_KEY_SIZE:2048,DEFAULT_VALIDITY_DAYS:825,DEFAULT_CA_VALIDITY_YEARS:100,DEFAULT_NOT_BEFORE_DAYS:2,LINUX_TRUST_ARGS:"TC, C, C",LINUX_CERT_DB_FILENAME:"cert9.db"},_={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"},M1={info:(...$)=>console.log(...$),warn:(...$)=>console.warn(...$),success:(...$)=>console.log(...$),error:(...$)=>console.error(...$),debug:(...$)=>console.debug(...$)};YT=wT(eE);AT=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),XT=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/;T$={SEQUENCE:48,SET:49,INTEGER:2,BIT_STRING:3,OCTET_STRING:4,NULL:5,OID:6,UTF8_STRING:12,PRINTABLE_STRING:19,IA5_STRING:22,UTC_TIME:23,GENERALIZED_TIME:24,CONTEXT_0:160,CONTEXT_2:130,CONTEXT_3:163},g0={SHA256_WITH_RSA:"1.2.840.113549.1.1.11",RSA_ENCRYPTION:"1.2.840.113549.1.1.1",COMMON_NAME:"2.5.4.3",COUNTRY:"2.5.4.6",LOCALITY:"2.5.4.7",STATE:"2.5.4.8",ORGANIZATION:"2.5.4.10",ORGANIZATIONAL_UNIT:"2.5.4.11",BASIC_CONSTRAINTS:"2.5.29.19",KEY_USAGE:"2.5.29.15",EXTENDED_KEY_USAGE:"2.5.29.37",SUBJECT_ALT_NAME:"2.5.29.17",SUBJECT_KEY_IDENTIFIER:"2.5.29.14",AUTHORITY_KEY_IDENTIFIER:"2.5.29.35",SERVER_AUTH:"1.3.6.1.5.5.7.3.1",CLIENT_AUTH:"1.3.6.1.5.5.7.3.2"};_T={platform:"darwin",async addCertificate($,w){if(await OT($,w?.verbose)){L(_.TRUST,"Certificate is already trusted, skipping trust store update",w?.verbose),M1.success("Certificate is already trusted in system keychain");return}L(_.TRUST,"Adding certificate to macOS keychain",w?.verbose),await Fw(`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ${$}`)},async removeCertificate($,w,Y){let A=Y||z0.commonName;L(_.TRUST,`Removing certificate ${A} from macOS keychain`,w?.verbose);try{await Fw(`sudo security delete-certificate -c "${A}" /Library/Keychains/System.keychain`),L(_.TRUST,`Removed certificate ${A} from macOS keychain`,w?.verbose)}catch(X){throw L(_.TRUST,`Error removing certificate: ${X}`,w?.verbose),X}}},ST={platform:"win32",async addCertificate($,w){L(_.TRUST,"Adding certificate to Windows certificate store",w?.verbose),await Fw(`certutil -f -v -addstore -enterprise Root ${$}`)},async removeCertificate($,w,Y){let A=Y||z0.commonName;L(_.TRUST,`Removing certificate ${A} from Windows certificate store`,w?.verbose);try{await Fw(`certutil -delstore -enterprise Root "${A}"`),L(_.TRUST,`Removed certificate ${A} from Windows certificate store`,w?.verbose)}catch(X){throw L(_.TRUST,`Error removing certificate: ${X}`,w?.verbose),X}}},ZT={platform:"linux",async addCertificate($,w){L(_.TRUST,"Adding certificate to Linux certificate store",w?.verbose);let Y=OX.homedir(),A=E$.LINUX_CERT_DB_FILENAME,X=E$.LINUX_TRUST_ARGS;L(_.TRUST,`Searching for certificate databases in ${Y}`,w?.verbose);let J=oU(Y,A);if(J.length===0){M1.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let U of J){L(_.TRUST,`Processing certificate database in ${U}`,w?.verbose);try{L(_.TRUST,`Attempting to delete existing cert for ${z0.commonName}`,w?.verbose),await Fw(`certutil -d sql:${U} -D -n ${z0.commonName}`)}catch(B){L(_.TRUST,`Warning: Error deleting existing cert: ${B}`,w?.verbose),console.warn(`Error deleting existing cert: ${B}`)}L(_.TRUST,`Adding new certificate to ${U}`,w?.verbose),await Fw(`certutil -d sql:${U} -A -t ${X} -n ${z0.commonName} -i ${$}`),M1.info(`Cert added to ${U}`)}},async removeCertificate($,w,Y){let A=Y||z0.commonName;L(_.TRUST,`Removing certificate ${A} from Linux certificate store`,w?.verbose);let X=OX.homedir(),J=E$.LINUX_CERT_DB_FILENAME;L(_.TRUST,`Searching for certificate databases in ${X}`,w?.verbose);let U=oU(X,J);if(U.length===0){M1.warn("No certificate databases found. Cannot remove certificate.");return}for(let B of U){L(_.TRUST,`Processing certificate database in ${B}`,w?.verbose);try{await Fw(`certutil -d sql:${B} -D -n "${A}"`),M1.info(`Cert removed from ${B}`)}catch(W){L(_.TRUST,`Error removing cert from ${B}: ${W}`,w?.verbose),console.warn(`Error removing cert from ${B}: ${W}`)}}}},hT={darwin:_T,win32:ST,linux:ZT}});var bX=t(()=>{XG()});import{homedir as RW}from"node:os";import{join as MW,resolve as iQ}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",DT,IW;var VW=t(()=>{WU();DT={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:MW(RW(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:MW(RW(),".stacks","ssl","stacks.localhost.crt"),keyPath:MW(RW(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0},IW=DT});function xw($){try{return PX($)}catch{return null}}function CW($){try{return TW($)||null}catch{return null}}function uX($,w){try{return w.every((Y)=>HW($,Y))}catch{return!1}}var vX=t(()=>{bX()});import{existsSync as JG,statSync as UG}from"fs";import{existsSync as gW,mkdirSync as cT,readdirSync as iT,writeFileSync as mT}from"fs";import{homedir as Q1}from"os";import{dirname as WG,resolve as l0}from"path";import Pw from"process";import{join as gT,relative as dT,resolve as BG}from"path";import Y8 from"process";import{existsSync as dG,mkdirSync as $y,readdirSync as wy,writeFileSync as Yy}from"fs";import{homedir as QW}from"os";import{dirname as Jy,resolve as d0}from"path";import QY from"process";import{join as lT,relative as nT,resolve as jG}from"path";import A8 from"process";import{existsSync as lG,mkdirSync as zy,readdirSync as Gy,writeFileSync as Ky}from"fs";import{dirname as Ny,resolve as X8}from"path";import dW from"process";import{Buffer as Ew}from"buffer";import{createCipheriv as pT,createDecipheriv as rT,randomBytes as yW}from"crypto";import{closeSync as LW,createReadStream as zG,createWriteStream as tT,existsSync as OW,fsyncSync as GG,openSync as KG,writeFileSync as aT}from"fs";import{access as sT,constants as FG,mkdir as oT,readdir as cX,rename as NG,stat as y1,unlink as iX,writeFile as _W}from"fs/promises";import{join as L1}from"path";import h0 from"process";import{pipeline as eT}from"stream/promises";import{createGzip as qG}from"zlib";import O1 from"process";import o$ from"process";import{Buffer as a$}from"buffer";import{createCipheriv as $H,createDecipheriv as wH,randomBytes as SW}from"crypto";import{closeSync as ZW,createReadStream as EG,createWriteStream as YH,existsSync as mX,fsyncSync as TG,openSync as HG,writeFileSync as AH}from"fs";import{access as XH,constants as fG,mkdir as JH,readdir as gX,rename as RG,stat as _1,unlink as dX,writeFile as hW}from"fs/promises";import{isAbsolute as UH,join as S1,resolve as WH}from"path";import x from"process";import{pipeline as BH}from"stream/promises";import{createGzip as MG}from"zlib";import Z1 from"process";import e$ from"process";import lX from"process";import{existsSync as nX}from"fs";import{resolve as kW}from"path";import{existsSync as jH}from"fs";import{existsSync as zH,readdirSync as GH}from"fs";import{extname as DW,resolve as IG}from"path";import KH from"process";import{join as Ff,relative as Nf,resolve as DG}from"path";import G8 from"process";import{Buffer as s$}from"buffer";import{createCipheriv as Tf,createDecipheriv as Hf,randomBytes as vW}from"crypto";import{closeSync as cW,createReadStream as xG,createWriteStream as ff,existsSync as rX,fsyncSync as PG,openSync as bG,writeFileSync as Rf}from"fs";import{access as Mf,constants as uG,mkdir as If,readdir as tX,rename as vG,stat as h1,unlink as aX,writeFile as iW}from"fs/promises";import{isAbsolute as Vf,join as k1,resolve as Cf}from"path";import P from"process";import{pipeline as Qf}from"stream/promises";import{createGzip as cG}from"zlib";import D1 from"process";import $w from"process";function bT($,w){this[$]=PT.bind(null,w)}class $B{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let Y=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${Y}`}isExpired($){return Date.now()-$.timestamp.getTime()>$.ttl}estimateSize($){try{return JSON.stringify($).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let $=Array.from(this.cache.entries()).sort(([,Y],[,A])=>Y.timestamp.getTime()-A.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let Y=0;Y<w;Y++)this.cache.delete($[Y][0])}set($,w,Y,A){if(!this.options.enabled)return;let X=this.generateKey($,Y),J=A??this.options.ttl,U=this.estimateSize(w);this.cache.set(X,{value:w,timestamp:new Date,ttl:J,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey($,w),A=this.cache.get(Y);if(!A){this.totalMisses++;return}if(this.isExpired(A)){this.cache.delete(Y),this.totalMisses++;return}return A.hits++,this.totalHits++,A.value}isFileModified($,w){try{if(!JG($))return!0;return UG($).mtime>w}catch{return!0}}getWithFileCheck($,w){let Y=this.get($,w);if(!Y)return;if(this.isFileModified(w,Y.fileTimestamp)){this.delete($,w);return}return Y.value}setWithFileCheck($,w,Y,A){try{let X=JG(Y)?UG(Y):null,J=X?X.mtime:new Date;this.set($,{value:w,fileTimestamp:J},Y,A)}catch{this.set($,w,Y,A)}}delete($,w){let Y=this.generateKey($,w);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((A,X)=>A+X.size,0),Y=$.map((A)=>A.timestamp).sort();return{size:w,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let $={};for(let[w,Y]of this.cache.entries())$[w]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return $}import($){this.cache.clear();for(let[w,Y]of Object.entries($))if(typeof Y==="object"&&Y!==null){let A=Y;this.cache.set(w,{value:A.value,timestamp:new Date(A.timestamp),ttl:A.ttl,hits:A.hits,size:A.size})}}}class wB{metrics=[];maxMetrics=1000;async track($,w,Y={}){let A=performance.now(),X=new Date;try{let J=await w(),U=performance.now()-A;return this.recordMetric({operation:$,duration:U,timestamp:X,...Y}),J}catch(J){let U=performance.now()-A;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:X,...Y}),J}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((X)=>X.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=w.map((X)=>X.duration),A=Y.reduce((X,J)=>X+J,0);return{count:w.length,averageDuration:A/w.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:A,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function FH($,w={}){let A=Object.keys(w).sort().map((X)=>`${X}:${w[X]}`).join("|");return A?`${$}:${A}`:$}function NH($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function qH($){return $.getStats().size*2}function YB($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&Y0(w[0])&&"id"in w[0]&&w[0].id===3&&Y0(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(Y0(w)&&Y0($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(Y0($)&&"arr"in $&&Array.isArray($.arr)&&Y0(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&Y0(w[0])&&Y0($[0])){let A=[...w];for(let X of $)if(Y0(X)&&"name"in X){if(!A.find((U)=>Y0(U)&&("name"in U)&&U.name===X.name))A.push(X)}else if(Y0(X)&&"path"in X){if(!A.find((U)=>Y0(U)&&("path"in U)&&U.path===X.path))A.push(X)}else if(!A.some((J)=>J8(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!Y0(w)||!Y0($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(Y0(X)&&Y0(Y[A]))Y[A]=YB(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&Y0(X[0])&&Y0(Y[A][0])){let J=[...X];for(let U of Y[A])if(Y0(U)&&"name"in U){if(!J.find((W)=>Y0(W)&&("name"in W)&&W.name===U.name))J.push(U)}else if(Y0(U)&&"path"in U){if(!J.find((W)=>Y0(W)&&("path"in W)&&W.path===U.path))J.push(U)}else if(!J.some((B)=>J8(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function J8($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!J8($[Y],w[Y]))return!1;return!0}if(Y0($)&&Y0(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!J8($[X],w[X]))return!1}return!0}return!1}function Y0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function EH($,w){if(!lG($))return null;try{let Y=await import($),A=Y.default||Y;if(typeof A!=="object"||A===null||Array.isArray(A))return null;try{return YB(w,A)}catch{return null}}catch{return null}}async function TH({name:$="",cwd:w,defaultConfig:Y}){let A=w||dW.cwd(),X=[".ts",".js",".mjs",".cjs",".json"],J=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of J)for(let B of X){let W=X8(A,`${U}${B}`),j=await EH(W,Y);if(j!==null)return j}try{let U=X8(A,"package.json");if(lG(U)){let W=(await import(U))[$];if(W&&typeof W==="object"&&!Array.isArray(W))try{return YB(Y,W)}catch{}}}catch{}return Y}function HH($,w={}){let Y=A8.cwd();while(Y.includes("storage"))Y=jG(Y,"..");let A=jG(Y,$||"");if(w?.relative)return nT(A8.cwd(),A);return A}async function fH(){try{let $=await TH({name:"clarity",defaultConfig:oX,cwd:A8.cwd(),endpoint:"",headers:{}});return{...oX,...$}}catch{return oX}}function B0(){if(o$.env.NODE_ENV==="test"||o$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function RH(){if(o$.env.NODE_ENV==="test"||o$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof o$<"u"){let $=o$.type;if($==="renderer"||$==="worker")return!1;return!!(o$.versions&&(o$.versions.node||o$.versions.bun))}return!1}class nG{async format($){let w=await RH(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:O1.pid,hostname:w(),environment:O1.env.NODE_ENV||"development",platform:O1.platform,version:O1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:O1.env.NODE_ENV||O1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class U8{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...nW},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new nG,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??h0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...eX,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...eX};return{...eX,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:nW.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await sT(this.config.logDirectory,FG.F_OK|FG.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await oT(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:Ew.from($);try{if(!OW(this.currentLogFile))await _W(this.currentLogFile,"",{mode:420});if(X=KG(this.currentLogFile,"a",420),aT(X,W,{flag:"a"}),GG(X),X!==void 0)LW(X),X=void 0;if((await y1(this.currentLogFile)).size===0){if(await _W(this.currentLogFile,W,{flag:"w",mode:420}),(await y1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let K=B*2**J;await new Promise((F)=>setTimeout(F,K)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{LW(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return L1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return L1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return L1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(B0())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return yW(16).toString("hex")}generateKey(){return yW(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=yW(16),A=pT("aes-256-gcm",w,Y),X=Ew.concat([A.update($,"utf8"),A.final()]),J=A.getAuthTag();return{encrypted:Ew.concat([Y,X,J]),iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=qG(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(Ew.from(Ew.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(B0())return;let $=await y1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await cX(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await y1(Y).catch(()=>null))try{if(await NG(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await iX(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await _W(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await y1(Y).catch(()=>null))await NG(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await cX(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await iX(L1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=zG($),A=tT(w),X=qG();await eT(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);await this.writeToFile(A),console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(w),console.log(w);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue($)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue($){return{debug:0,info:1,success:2,warning:3,error:4}[$]}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),OW(this.currentLogFile))try{let $=KG(this.currentLogFile,"r+");GG($),LW($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!B0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await cX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await iX(L1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.fancy?o.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=h0.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${o.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);if(this.fancy&&!B0()){let j=Y5[$],z=this.options.showTags!==!1&&this.name?o.gray(this.formatTag(this.name)):"",G;switch($){case"debug":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:o.gray(U),level:$}),console.error(G);break;case"info":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G);break;case"success":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:o.green(U),level:$}),console.error(G);break;case"warning":G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.warn(G);break;case"error":if(G=this.formatConsoleMessage({timestamp:X,icon:j,tag:z,message:U,level:$}),console.error(G),B){let K=B.split(`
135
+ `);for(let F of K)if(F.trim()&&!F.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:o.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!B0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${J} ${this.environment}.${$.toUpperCase()}: ${U}
136
136
  `;if(B)W+=`${B}
137
- `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!B0()){let Y=this.options.showTags!==!1&&this.name?s.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:s.blue("◐"),tag:Y,message:`${s.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
138
- `,j=j.replace(this.ANSI_PATTERN,""),this.fancy&&!B0()){let z=this.options.showTags!==!1&&this.name?s.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:s.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!B0())console.error(j.trim());await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new $8(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(B0())throw Error("createReadStream is not supported in browser environments");if(!EW(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return e2(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=Nw.isBuffer($)?$:Nw.from($,"base64"),X=A.slice(0,16),J=A.slice(-16),U=A.slice(16,-16),B=bE("aes-256-gcm",Y,X);return B.setAuthTag(J),Nw.concat([B.update(U),B.final()]).toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return B0()}isServerMode(){return!B0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w);if(this.fancy&&!B0()){let J=$.split(`
139
- `),U=Math.max(...J.map((z)=>z.length))+2,B=`┌${"─".repeat(U)}┐`,W=`└${"─".repeat(U)}┘`,j=J.map((z)=>{let G=" ".repeat(U-z.length-2);return`│ ${z}${G} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Y,message:s.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Y,message:s.cyan(B)})),j.forEach((z)=>console.error(this.formatConsoleMessage({timestamp:Y,message:s.cyan(z),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Y,message:s.cyan(W),showTimestamp:!1}))}else if(!B0())console.error(`${A} ${this.environment}.INFO: [BOX] ${$}`);let X=`${A} ${this.environment}.INFO: [BOX] ${$}
140
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(X)}async prompt($){if(B0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${s.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();Z0.stdin.removeListener("data",Y);try{if(typeof Z0.stdin.setRawMode==="function")Z0.stdin.setRawMode(!1)}catch{}Z0.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof Z0.stdin.setRawMode==="function")Z0.stdin.setRawMode(!0)}catch{}Z0.stdin.resume(),Z0.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,B=0;if(Y=$.replace(U,(W,j)=>{if(j==="%")return"%";if(B>=w.length)return W;let z=w[B++];switch(j){case"s":return String(z);case"d":case"i":return Number(z).toString();case"j":case"o":return JSON.stringify(z,null,2);default:return W}}),B<w.length)Y+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}if(this.fancy&&!B0()){let U=this.options.showTags!==!1&&this.name?s.gray(this.formatTag(this.name)):"",B=s.blue("◐");console.error(`${B} ${U} ${s.cyan(Y)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
141
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(J)}progress($,w=""){if(!this.enabled||!this.fancy||B0()||$<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let Y=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:Y,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(U,B)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||B0())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,U)),B!==void 0)this.activeProgressBar.message=B;let W=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,W)},finish:(U)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||B0())return;if(this.activeProgressBar.current=this.activeProgressBar.total,U!==void 0)this.activeProgressBar.message=U;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(U,B="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||B0())return;Z0.stdout.write(`${"\r".padEnd(Z0.stdout.columns||80)}\r`),this.log(B,U),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||B0()||!Z0.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=s.green("━".repeat(A)),U=s.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=w||Y===100?s.green("✓"):s.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${s.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=Z0.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,Z0.stdout.write($.lastRenderedLine),w)Z0.stdout.write(`
142
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||B0()||!Z0.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(B0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await DX(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=C1(this.config.logDirectory,A);if($.before)try{if((await y1(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await xX(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function dX($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&r(w[0])&&"id"in w[0]&&w[0].id===3&&r(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(r(w)&&r($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(r($)&&"arr"in $&&Array.isArray($.arr)&&r(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&r(w[0])&&r($[0])){let A=[...w];for(let X of $)if(r(X)&&"name"in X){if(!A.find((U)=>r(U)&&("name"in U)&&U.name===X.name))A.push(X)}else if(r(X)&&"path"in X){if(!A.find((U)=>r(U)&&("path"in U)&&U.path===X.path))A.push(X)}else if(!A.some((J)=>w8(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!r(w)||!r($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(r(X)&&r(Y[A]))Y[A]=dX(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&r(X[0])&&r(Y[A][0])){let J=[...X];for(let U of Y[A])if(r(U)&&"name"in U){if(!J.find((W)=>r(W)&&("name"in W)&&W.name===U.name))J.push(U)}else if(r(U)&&"path"in U){if(!J.find((W)=>r(W)&&("path"in W)&&W.path===U.path))J.push(U)}else if(!J.some((B)=>w8(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function nW($,w,Y="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return Y==="replace"?w:dX($,w);if(Array.isArray($))return Y==="replace"?w:dX($,w);if(!r(w)||!r($))return w;let A={...$};for(let X of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,X))continue;let J=w[X],U=A[X];if(J===null||J===void 0)continue;if(Array.isArray(J)||Array.isArray(U))if(Y==="replace")A[X]=J;else A[X]=dX(U,J);else if(r(J)&&r(U))A[X]=nW(U,J,Y);else A[X]=J}return A}function w8($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!w8($[Y],w[Y]))return!1;return!0}if(r($)&&r(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!w8($[X],w[X]))return!1}return!0}return!1}function r($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function iX($,w,Y="replace"){if(!kG($))return null;try{let A=await import($),X=A.default||A;if(typeof X!=="object"||X===null||Array.isArray(X))return null;try{return nW(w,X,Y)}catch{return null}}catch{return null}}function zH($,w,Y=!1){if(!$)return w;let A=$.toUpperCase().replace(/-/g,"_"),X={...w};function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],F=(f)=>f.replace(/([A-Z])/g,"_$1").toUpperCase(),K=`${A}_${G.map(F).join("_")}`,q=`${A}_${G.map((f)=>f.toUpperCase()).join("_")}`;if(Y)D0.info(`Checking environment variable ${K} for config ${$}.${G.join(".")}`);if(typeof z==="object"&&z!==null&&!Array.isArray(z))W[j]=J(z,G);else{let f=MY.env[K]||MY.env[q];if(f!==void 0){if(Y)D0.info(`Using environment variable ${f?K:q} for config ${$}.${G.join(".")}`);if(typeof z==="number")W[j]=Number(f);else if(typeof z==="boolean")W[j]=f.toLowerCase()==="true";else if(Array.isArray(z))try{let E=JSON.parse(f);if(Array.isArray(E))W[j]=E;else W[j]=f.split(",").map((H)=>H.trim())}catch{W[j]=f.split(",").map((E)=>E.trim())}else W[j]=f}}}return W}return J(X)}async function GH({name:$="",alias:w,cwd:Y,configDir:A,defaultConfig:X,verbose:J=!1,checkEnv:U=!0,arrayStrategy:B="replace"}){let W=U&&typeof X==="object"&&X!==null&&!Array.isArray(X)?zH($,X,J):X,j=Y||MY.cwd(),z=[".ts",".js",".mjs",".cjs",".json"];if(J)D0.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${j}`);let G=[$,`.${$}`].filter(Boolean),F=[`${$}.config`,`.${$}.config`].filter(Boolean),K=w?[w,`.${w}`]:[],q=w?[`${w}.config`,`.${w}.config`]:[],f=Array.from(new Set([j,l0(j,"config"),l0(j,".config"),A?l0(j,A):void 0].filter(Boolean)));for(let E of f){if(J)D0.info(`Searching for configuration in: ${E}`);let M=[l0(j,"config"),l0(j,".config")].concat(A?[l0(j,A)]:[]).includes(E)?[...G,...F,...K,...q]:[...F,...G,...q,...K];for(let y of M)for(let Q of z){let T=l0(E,`${y}${Q}`),I=await iX(T,W,B);if(I!==null){if(J)D0.success(`Configuration loaded from: ${T}`);return I}}}if($){let E=l0(NW(),".config",$),H=["config",`${$}.config`];if(w)H.push(`${w}.config`);if(J)D0.info(`Checking user config directory: ${E}`);for(let M of H)for(let y of z){let Q=l0(E,`${M}${y}`),T=await iX(Q,W,B);if(T!==null){if(J)D0.success(`Configuration loaded from user config directory: ${Q}`);return T}}}if($){let E=l0(NW(),".config"),H=[`.${$}.config`];if(w)H.push(`.${w}.config`);if(J)D0.info(`Checking user config directory for dotfile configs: ${E}`);for(let M of H)for(let y of z){let Q=l0(E,`${M}${y}`),T=await iX(Q,W,B);if(T!==null){if(J)D0.success(`Configuration loaded from user config directory dotfile: ${Q}`);return T}}}if($){let E=NW(),H=[`.${$}.config`,`.${$}`];if(w)H.push(`.${w}.config`),H.push(`.${w}`);if(J)D0.info(`Checking user home directory for dotfile configs: ${E}`);for(let M of H)for(let y of z){let Q=l0(E,`${M}${y}`),T=await iX(Q,W,B);if(T!==null){if(J)D0.success(`Configuration loaded from user home directory: ${Q}`);return T}}}try{let E=l0(j,"package.json");if(kG(E)){let H=await import(E),M=H[$];if(!M&&w){if(M=H[w],M&&J)D0.success(`Using alias "${w}" configuration from package.json`)}if(M&&typeof M==="object"&&!Array.isArray(M))try{if(J)D0.success(`Configuration loaded from package.json: ${M===H[$]?$:w}`);return nW(W,M,B)}catch(y){if(J)D0.warn("Failed to merge package.json config:",y)}}}catch(E){if(J)D0.warn("Failed to load package.json:",E)}if(J)D0.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function FH($,w={}){let Y=aX.cwd();while(Y.includes("storage"))Y=s2(Y,"..");let A=s2(Y,$||"");if(w?.relative)return kE(aX.cwd(),A);return A}async function KH(){try{let $=await GH({name:"clarity",alias:"logging",defaultConfig:rX,cwd:aX.cwd()});return{...rX,...$||{}}}catch{return rX}}function T0(){if(a$.env.NODE_ENV==="test"||a$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function NH(){if(a$.env.NODE_ENV==="test"||a$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof a$<"u"){let $=a$.type;if($==="renderer"||$==="worker")return!1;return!!(a$.versions&&(a$.versions.node||a$.versions.bun))}return!1}class PG{async format($){let w=await NH(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:_1.pid,hostname:w(),environment:_1.env.NODE_ENV||"development",platform:_1.platform,version:_1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:_1.env.NODE_ENV||_1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class Y8{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...PW},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new PG,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??x.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...tX,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...tX};return{...tX,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:PW.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!T0()&&this.config.writeToFile===!0}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await pE(this.config.logDirectory,BG.F_OK|BG.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await rE(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:p$.from($);try{if(!PX(this.currentLogFile))await MW(this.currentLogFile,"",{mode:420});if(X=WG(this.currentLogFile,"a",420),nE(X,W,{flag:"a"}),UG(X),X!==void 0)RW(X),X=void 0;if((await L1(this.currentLogFile)).size===0){if(await MW(this.currentLogFile,W,{flag:"w",mode:420}),(await L1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let F=B*2**J;await new Promise((K)=>setTimeout(K,F)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{RW(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return O1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return O1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return O1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(T0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return TW(16).toString("hex")}generateKey(){return TW(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=TW(16),A=gE("aes-256-gcm",w,Y),X=p$.isBuffer($)?$:p$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=p$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=zG(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(p$.from(p$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(T0())return;if(!this.shouldWriteToFile())return;let $=await L1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await bX(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await L1(Y).catch(()=>null))try{if(await jG(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await uX(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await MW(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await L1(Y).catch(()=>null))await jG(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await bX(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await uX(O1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=JG($),A=dE(w),X=zG();await sE(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),PX(this.currentLogFile))try{let $=WG(this.currentLogFile,"r+");UG($),RW($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!T0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await bX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await uX(O1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?v.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||T0())return!1;let $=typeof x.env.NO_COLOR<"u",w=x.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof x.stderr<"u"&&x.stderr.isTTY||typeof x.stdout<"u"&&x.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=x.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${v.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=v.underline(v.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>v.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>v.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>v.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>v.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>v.strikethrough(A)),w}supportsHyperlinks(){if(T0())return!1;let $=x.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=x.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(tE(w)||w.startsWith("./")||w.startsWith("../"))w=aE(w);else return null;return PX(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":nG[$],F=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",K;switch($){case"debug":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:v.gray(W),level:$}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"success":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:v.green(W),level:$}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.error(K),B){let q=B.split(`
143
- `);for(let f of q)if(f.trim()&&!f.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:v.gray(` ${f}`),level:$,showTimestamp:!1}))}break}}else if(!T0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
137
+ `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!B0()){let Y=this.options.showTags!==!1&&this.name?o.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:o.blue("◐"),tag:Y,message:`${o.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
138
+ `,j=j.replace(this.ANSI_PATTERN,""),this.fancy&&!B0()){let z=this.options.showTags!==!1&&this.name?o.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:o.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!B0())console.error(j.trim());await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new U8(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(B0())throw Error("createReadStream is not supported in browser environments");if(!OW(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return zG(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=Ew.isBuffer($)?$:Ew.from($,"base64"),X=A.slice(0,16),J=A.slice(-16),U=A.slice(16,-16),B=rT("aes-256-gcm",Y,X);return B.setAuthTag(J),Ew.concat([B.update(U),B.final()]).toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return B0()}isServerMode(){return!B0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w);if(this.fancy&&!B0()){let J=$.split(`
139
+ `),U=Math.max(...J.map((z)=>z.length))+2,B=`┌${"─".repeat(U)}┐`,W=`└${"─".repeat(U)}┘`,j=J.map((z)=>{let G=" ".repeat(U-z.length-2);return`│ ${z}${G} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Y,message:o.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Y,message:o.cyan(B)})),j.forEach((z)=>console.error(this.formatConsoleMessage({timestamp:Y,message:o.cyan(z),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Y,message:o.cyan(W),showTimestamp:!1}))}else if(!B0())console.error(`${A} ${this.environment}.INFO: [BOX] ${$}`);let X=`${A} ${this.environment}.INFO: [BOX] ${$}
140
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(X)}async prompt($){if(B0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${o.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();h0.stdin.removeListener("data",Y);try{if(typeof h0.stdin.setRawMode==="function")h0.stdin.setRawMode(!1)}catch{}h0.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof h0.stdin.setRawMode==="function")h0.stdin.setRawMode(!0)}catch{}h0.stdin.resume(),h0.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,B=0;if(Y=$.replace(U,(W,j)=>{if(j==="%")return"%";if(B>=w.length)return W;let z=w[B++];switch(j){case"s":return String(z);case"d":case"i":return Number(z).toString();case"j":case"o":return JSON.stringify(z,null,2);default:return W}}),B<w.length)Y+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}if(this.fancy&&!B0()){let U=this.options.showTags!==!1&&this.name?o.gray(this.formatTag(this.name)):"",B=o.blue("◐");console.error(`${B} ${U} ${o.cyan(Y)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
141
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(J)}progress($,w=""){if(!this.enabled||!this.fancy||B0()||$<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let Y=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:Y,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(U,B)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||B0())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,U)),B!==void 0)this.activeProgressBar.message=B;let W=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,W)},finish:(U)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||B0())return;if(this.activeProgressBar.current=this.activeProgressBar.total,U!==void 0)this.activeProgressBar.message=U;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(U,B="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||B0())return;h0.stdout.write(`${"\r".padEnd(h0.stdout.columns||80)}\r`),this.log(B,U),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||B0()||!h0.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=o.green("━".repeat(A)),U=o.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=w||Y===100?o.green("✓"):o.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${o.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=h0.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,h0.stdout.write($.lastRenderedLine),w)h0.stdout.write(`
142
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||B0()||!h0.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(B0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await cX(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=L1(this.config.logDirectory,A);if($.before)try{if((await y1(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await iX(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function sX($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&r(w[0])&&"id"in w[0]&&w[0].id===3&&r(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(r(w)&&r($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(r($)&&"arr"in $&&Array.isArray($.arr)&&r(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&r(w[0])&&r($[0])){let A=[...w];for(let X of $)if(r(X)&&"name"in X){if(!A.find((U)=>r(U)&&("name"in U)&&U.name===X.name))A.push(X)}else if(r(X)&&"path"in X){if(!A.find((U)=>r(U)&&("path"in U)&&U.path===X.path))A.push(X)}else if(!A.some((J)=>W8(J,X)))A.push(X);return A}if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}if(!r(w)||!r($))return w;let Y={...$};for(let A in w)if(Object.prototype.hasOwnProperty.call(w,A)){let X=w[A];if(X===null||X===void 0)continue;else if(r(X)&&r(Y[A]))Y[A]=sX(Y[A],X);else if(Array.isArray(X)&&Array.isArray(Y[A]))if(X.length>0&&Y[A].length>0&&r(X[0])&&r(Y[A][0])){let J=[...X];for(let U of Y[A])if(r(U)&&"name"in U){if(!J.find((W)=>r(W)&&("name"in W)&&W.name===U.name))J.push(U)}else if(r(U)&&"path"in U){if(!J.find((W)=>r(W)&&("path"in W)&&W.path===U.path))J.push(U)}else if(!J.some((B)=>W8(B,U)))J.push(U);Y[A]=J}else if(X.every((J)=>typeof J==="string")&&Y[A].every((J)=>typeof J==="string")){let J=[...X];for(let U of Y[A])if(!J.includes(U))J.push(U);Y[A]=J}else Y[A]=X;else Y[A]=X}return Y}function AB($,w,Y="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return Y==="replace"?w:sX($,w);if(Array.isArray($))return Y==="replace"?w:sX($,w);if(!r(w)||!r($))return w;let A={...$};for(let X of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,X))continue;let J=w[X],U=A[X];if(J===null||J===void 0)continue;if(Array.isArray(J)||Array.isArray(U))if(Y==="replace")A[X]=J;else A[X]=sX(U,J);else if(r(J)&&r(U))A[X]=AB(U,J,Y);else A[X]=J}return A}function W8($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!W8($[Y],w[Y]))return!1;return!0}if(r($)&&r(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!W8($[X],w[X]))return!1}return!0}return!1}function r($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function pX($,w,Y="replace"){if(!dG($))return null;try{let A=await import($),X=A.default||A;if(typeof X!=="object"||X===null||Array.isArray(X))return null;try{return AB(w,X,Y)}catch{return null}}catch{return null}}function MH($,w,Y=!1){if(!$)return w;let A=$.toUpperCase().replace(/-/g,"_"),X={...w};function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],K=(q)=>q.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${A}_${G.map(K).join("_")}`,T=`${A}_${G.map((q)=>q.toUpperCase()).join("_")}`;if(Y)D0.info(`Checking environment variable ${F} for config ${$}.${G.join(".")}`);if(typeof z==="object"&&z!==null&&!Array.isArray(z))W[j]=J(z,G);else{let q=QY.env[F]||QY.env[T];if(q!==void 0){if(Y)D0.info(`Using environment variable ${q?F:T} for config ${$}.${G.join(".")}`);if(typeof z==="number")W[j]=Number(q);else if(typeof z==="boolean")W[j]=q.toLowerCase()==="true";else if(Array.isArray(z))try{let E=JSON.parse(q);if(Array.isArray(E))W[j]=E;else W[j]=q.split(",").map((H)=>H.trim())}catch{W[j]=q.split(",").map((E)=>E.trim())}else W[j]=q}}}return W}return J(X)}async function IH({name:$="",alias:w,cwd:Y,configDir:A,defaultConfig:X,verbose:J=!1,checkEnv:U=!0,arrayStrategy:B="replace"}){let W=U&&typeof X==="object"&&X!==null&&!Array.isArray(X)?MH($,X,J):X,j=Y||QY.cwd(),z=[".ts",".js",".mjs",".cjs",".json"];if(J)D0.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${j}`);let G=[$,`.${$}`].filter(Boolean),K=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],q=Array.from(new Set([j,d0(j,"config"),d0(j,".config"),A?d0(j,A):void 0].filter(Boolean)));for(let E of q){if(J)D0.info(`Searching for configuration in: ${E}`);let M=[d0(j,"config"),d0(j,".config")].concat(A?[d0(j,A)]:[]).includes(E)?[...G,...K,...F,...T]:[...K,...G,...T,...F];for(let Q of M)for(let V of z){let f=d0(E,`${Q}${V}`),I=await pX(f,W,B);if(I!==null){if(J)D0.success(`Configuration loaded from: ${f}`);return I}}}if($){let E=d0(QW(),".config",$),H=["config",`${$}.config`];if(w)H.push(`${w}.config`);if(J)D0.info(`Checking user config directory: ${E}`);for(let M of H)for(let Q of z){let V=d0(E,`${M}${Q}`),f=await pX(V,W,B);if(f!==null){if(J)D0.success(`Configuration loaded from user config directory: ${V}`);return f}}}if($){let E=d0(QW(),".config"),H=[`.${$}.config`];if(w)H.push(`.${w}.config`);if(J)D0.info(`Checking user config directory for dotfile configs: ${E}`);for(let M of H)for(let Q of z){let V=d0(E,`${M}${Q}`),f=await pX(V,W,B);if(f!==null){if(J)D0.success(`Configuration loaded from user config directory dotfile: ${V}`);return f}}}if($){let E=QW(),H=[`.${$}.config`,`.${$}`];if(w)H.push(`.${w}.config`),H.push(`.${w}`);if(J)D0.info(`Checking user home directory for dotfile configs: ${E}`);for(let M of H)for(let Q of z){let V=d0(E,`${M}${Q}`),f=await pX(V,W,B);if(f!==null){if(J)D0.success(`Configuration loaded from user home directory: ${V}`);return f}}}try{let E=d0(j,"package.json");if(dG(E)){let H=await import(E),M=H[$];if(!M&&w){if(M=H[w],M&&J)D0.success(`Using alias "${w}" configuration from package.json`)}if(M&&typeof M==="object"&&!Array.isArray(M))try{if(J)D0.success(`Configuration loaded from package.json: ${M===H[$]?$:w}`);return AB(W,M,B)}catch(Q){if(J)D0.warn("Failed to merge package.json config:",Q)}}}catch(E){if(J)D0.warn("Failed to load package.json:",E)}if(J)D0.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function VH($,w={}){let Y=Y8.cwd();while(Y.includes("storage"))Y=BG(Y,"..");let A=BG(Y,$||"");if(w?.relative)return dT(Y8.cwd(),A);return A}async function CH(){try{let $=await IH({name:"clarity",alias:"logging",defaultConfig:$8,cwd:Y8.cwd()});return{...$8,...$||{}}}catch{return $8}}function f0(){if(e$.env.NODE_ENV==="test"||e$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function QH(){if(e$.env.NODE_ENV==="test"||e$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof e$<"u"){let $=e$.type;if($==="renderer"||$==="worker")return!1;return!!(e$.versions&&(e$.versions.node||e$.versions.bun))}return!1}class pG{async format($){let w=await QH(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:Z1.pid,hostname:w(),environment:Z1.env.NODE_ENV||"development",platform:Z1.platform,version:Z1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Z1.env.NODE_ENV||Z1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class B8{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...pW},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new pG,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??x.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...w8,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...w8};return{...w8,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:pW.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!f0()&&this.config.writeToFile===!0}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await XH(this.config.logDirectory,fG.F_OK|fG.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await JH(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:a$.from($);try{if(!mX(this.currentLogFile))await hW(this.currentLogFile,"",{mode:420});if(X=HG(this.currentLogFile,"a",420),AH(X,W,{flag:"a"}),TG(X),X!==void 0)ZW(X),X=void 0;if((await _1(this.currentLogFile)).size===0){if(await hW(this.currentLogFile,W,{flag:"w",mode:420}),(await _1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let K=B*2**J;await new Promise((F)=>setTimeout(F,K)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{ZW(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return S1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return S1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return S1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(f0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return SW(16).toString("hex")}generateKey(){return SW(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=SW(16),A=$H("aes-256-gcm",w,Y),X=a$.isBuffer($)?$:a$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=a$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=MG(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(a$.from(a$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(f0())return;if(!this.shouldWriteToFile())return;let $=await _1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await gX(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await _1(Y).catch(()=>null))try{if(await RG(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await dX(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await hW(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await _1(Y).catch(()=>null))await RG(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await gX(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await dX(S1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=EG($),A=YH(w),X=MG();await BH(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),mX(this.currentLogFile))try{let $=HG(this.currentLogFile,"r+");TG($),ZW($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!f0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await gX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await dX(S1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?c.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||f0())return!1;let $=typeof x.env.NO_COLOR<"u",w=x.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof x.stderr<"u"&&x.stderr.isTTY||typeof x.stdout<"u"&&x.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=x.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${c.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=c.underline(c.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>c.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>c.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>c.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>c.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>c.strikethrough(A)),w}supportsHyperlinks(){if(f0())return!1;let $=x.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=x.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(UH(w)||w.startsWith("./")||w.startsWith("../"))w=WH(w);else return null;return mX(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":A5[$],K=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:c.gray(W),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:c.green(W),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.error(F),B){let T=B.split(`
143
+ `);for(let q of T)if(q.trim()&&!q.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:c.gray(` ${q}`),level:$,showTimestamp:!1}))}break}}else if(!f0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}if(!this.shouldLog($))return;let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
144
144
  `;if(B)z+=`${B}
145
- `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!T0()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(B,W)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,B),this.activeProgressBar.total),W!==void 0)this.activeProgressBar.message=W;if(this.shouldStyleConsole()&&!T0()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!T0()&&x.stdout.isTTY)x.stdout.write(`
146
- `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!T0()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":v.blue("◐"),tag:Y,message:`${v.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
147
- `,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":v.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!T0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new Y8(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(T0())throw Error("createReadStream is not supported in browser environments");if(!PX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return JG(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=p$.isBuffer($)?$:p$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=lE("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=p$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return T0()}isServerMode(){return!T0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
148
- `),W=Math.max(...B.map((F)=>F.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((F)=>{return this.formatConsoleMessage({timestamp:Y,message:v.cyan(F),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:v.cyan(j),showTimestamp:!1})),G.forEach((F)=>console.error(F)),console.error(this.formatConsoleMessage({timestamp:Y,message:v.cyan(z),showTimestamp:!1}))}else if(!T0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
149
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(T0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${v.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();x.stdin.removeListener("data",Y);try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!1)}catch{}x.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!0)}catch{}x.stdin.resume(),x.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,j=0;if(Y=$.replace(W,(z,G)=>{if(G==="%")return"%";if(j>=w.length)return z;let F=w[j++];switch(G){case"s":return String(F);case"d":case"i":return Number(F).toString();case"j":case"o":return JSON.stringify(F,null,2);default:return z}}),j<w.length)Y+=` ${w.slice(j).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${v.blue("◐")} `;console.error(`${j}${W} ${v.cyan(A)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
150
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!x.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=v.green("━".repeat(A)),U=v.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?v.green("✓"):v.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${v.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=x.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,x.stdout.write($.lastRenderedLine),w)x.stdout.write(`
151
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||T0()||!x.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(T0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await bX(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=O1(this.config.logDirectory,A);if($.before)try{if((await L1(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await uX(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function bG($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function uG($){return $ instanceof $$}function fH($){return $ instanceof A8}function qH($){if(uG($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((Y)=>$.message.toLowerCase().includes(Y.toLowerCase()))}class W8{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return yY.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=cX.env[W]||(j?cX.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=cX.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof X8)throw G;throw fw.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw fw.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(cX.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
145
+ `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!f0()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(B,W)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,B),this.activeProgressBar.total),W!==void 0)this.activeProgressBar.message=W;if(this.shouldStyleConsole()&&!f0()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!f0()&&x.stdout.isTTY)x.stdout.write(`
146
+ `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!f0()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":c.blue("◐"),tag:Y,message:`${c.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
147
+ `,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":c.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!f0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new B8(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(f0())throw Error("createReadStream is not supported in browser environments");if(!mX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return EG(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=a$.isBuffer($)?$:a$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=wH("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=a$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return f0()}isServerMode(){return!f0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
148
+ `),W=Math.max(...B.map((K)=>K.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((K)=>{return this.formatConsoleMessage({timestamp:Y,message:c.cyan(K),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:c.cyan(j),showTimestamp:!1})),G.forEach((K)=>console.error(K)),console.error(this.formatConsoleMessage({timestamp:Y,message:c.cyan(z),showTimestamp:!1}))}else if(!f0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
149
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(f0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${c.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();x.stdin.removeListener("data",Y);try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!1)}catch{}x.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!0)}catch{}x.stdin.resume(),x.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,j=0;if(Y=$.replace(W,(z,G)=>{if(G==="%")return"%";if(j>=w.length)return z;let K=w[j++];switch(G){case"s":return String(K);case"d":case"i":return Number(K).toString();case"j":case"o":return JSON.stringify(K,null,2);default:return z}}),j<w.length)Y+=` ${w.slice(j).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${c.blue("◐")} `;console.error(`${j}${W} ${c.cyan(A)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
150
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!x.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=c.green("━".repeat(A)),U=c.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?c.green("✓"):c.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${c.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=x.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,x.stdout.write($.lastRenderedLine),w)x.stdout.write(`
151
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||f0()||!x.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(f0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await gX(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=S1(this.config.logDirectory,A);if($.before)try{if((await _1(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await dX(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function rG($,w={}){let{maxRetries:Y=3,retryDelay:A=1000,isRetryable:X=()=>!0,fallback:J}=w,U=Error("Unknown error occurred");for(let B=0;B<=Y;B++)try{return await $()}catch(W){if(U=W instanceof Error?W:Error(String(W)),B===Y||!X(U))break;if(A>0)await new Promise((j)=>setTimeout(j,A))}if(J!==void 0)return J;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function tG($){return $ instanceof $$}function yH($){return $ instanceof j8}function LH($){if(tG($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((Y)=>$.message.toLowerCase().includes(Y.toLowerCase()))}class F8{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,Y={}){let{prefix:A,useCamelCase:X=!0,useBackwardCompatibility:J=!0,customParsers:U={},verbose:B=!1,trackPerformance:W=!0}=Y,j=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let z=A||this.generateEnvPrefix($),G={...w};return this.processObject(G,[],z,{useCamelCase:X,useBackwardCompatibility:J,customParsers:U,verbose:B,configName:$}),{config:G,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return OY.track("applyEnvironmentVariables",j,{configName:$});return j()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=U.map((z)=>this.formatEnvKey(z,A.useCamelCase)),W=`${Y}_${B.join("_")}`,j=A.useBackwardCompatibility?`${Y}_${U.map((z)=>z.toUpperCase()).join("_")}`:null;if(A.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,U,Y,A);else{let z=lX.env[W]||(j?lX.env[j]:void 0);if(z!==void 0){if(A.verbose){let G=lX.env[W]?W:j}try{$[X]=this.parseEnvironmentValue(z,typeof J,W,A.customParsers,A.configName)}catch(G){if(G instanceof z8)throw G;throw Tw.envVar(W,z,typeof J,A.configName)}}}}}parseEnvironmentValue($,w,Y,A,X){for(let[J,U]of Object.entries(A))try{return U($)}catch{continue}for(let J of this.defaultParsers)if(J.canParse($,w))try{return J.parse($)}catch{throw Tw.envVar(Y,$,`${w} (via ${J.name} parser)`,X)}return $}getEnvironmentVariables($){let w={},Y=$.toUpperCase();for(let[A,X]of Object.entries(lX.env))if(A.startsWith(Y)&&X!==void 0)w[A]=X;return w}validateEnvironmentVariable($,w,Y){let A=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))A.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue($,w,Y,{})}catch(X){A.push(`Cannot parse value "${w}" as ${Y}: ${X}`)}return{isValid:A.length===0,errors:A}}generateEnvVarDocs($,w,Y={}){let{prefix:A,format:X="text"}=Y,J=A||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],J,U),X){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,Y,A){for(let[X,J]of Object.entries($)){let U=[...w,X],B=`${Y}_${U.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,U,Y,A);else A.push({key:B,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${U.join(".")}`,example:this.generateExample(J)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let Y=`Environment Variables for ${w}:
152
152
 
153
153
  `;for(let A of $)Y+=`${A.key}
154
154
  `,Y+=` Type: ${A.type}
@@ -160,83 +160,83 @@ ${A.join(`
160
160
  `;Y+=`| Variable | Type | Description | Example |
161
161
  `,Y+=`|----------|------|-------------|----------|
162
162
  `;for(let A of $)Y+=`| \`${A.key}\` | ${A.type} | ${A.description} | \`${A.example}\` |
163
- `;return Y}}function EH($,w){let Y=gG("process");if(typeof Y>"u"||!Y.env)return w;let A=Y.env[$];return A!==void 0?A:w}function cG($,w,Y={}){return vG($,w,Y,new WeakMap)}function vG($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return iG($,w,X,A);if(!j$(w)||!j$($))return w;return MH($,w,Y,A)}function iG($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return HH($,w);case"smart":return TH($,w,A);default:return w}return w}function HH($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>DW(X,A)))Y.push(A);return Y}function TH($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(j$(w[0])&&j$($[0]))return RH($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function RH($,w,Y){let A=[...w];for(let X of $){if(!j$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((j)=>j$(j)&&(B in j)&&j[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function MH($,w,Y,A){let X=w;if(j$(X)&&A.has(X))return A.get(X);let J={...$};if(j$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(j$(B)&&j$(W))J[U]=vG(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=iG(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function pW($,w,Y="replace"){return cG($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function DW($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!DW($[Y],w[Y]))return!1;return!0}if(j$($)&&j$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!DW($[X],w[X]))return!1}return!0}return!1}function j$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class B8{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=k1.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!vX($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,F="default"in z,K=Object.keys(z).length>0;if(!F&&!K)throw new IY($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new IY($,Error("Configuration must export a valid object"),"unknown");let E={config:pW(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)k1.setWithFileCheck("file",E,$,J);return E}catch(j){throw j instanceof Error?fw.configLoad($,j):fw.configLoad($,Error(String(j)))}};if(U)return yY.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(IW(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(Y.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)Y.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return Y.filter(Boolean)}checkFileAccess($){return bG(async()=>{return vX($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!vX($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=IW($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=IW($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Y)=>Y.test($))}async validateConfigFile($){let w=[];try{if(!vX($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class rW{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],F={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,F);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],F);else return this.validateWithJSONSchema($,w,F)}catch(K){return z.push({path:"",message:`Validation failed: ${K}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await yY.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!oE(w))throw new VY(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new VY(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:rG},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class tW{fileLoader=new B8;envProcessor=new W8;validator=new rW;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),F=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(F||z))throw W;if(G&&(!j||!F))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)T$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw T$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||kw.cwd(),F=[],K=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(K)return F.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(K,F,W,A,z);let q=await this.loadHomeConfiguration(A,X,B,j,z,W);if(q)return F.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(q,F,W,A,z);let f=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(f)return F.push(d0(G,"package.json")),this.finalizeResult(f,F,W,A,z);if(F.push(...this.getAllSearchPaths(A,X,G,U)),w)throw fw.configNotFound(A,F,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${X?` or alias "${X}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?RY($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)T$.info(`Searching for configuration in: ${G}`);let F=this.fileLoader.generateConfigPaths($,G,w),K=await this.fileLoader.tryLoadFromPaths(F,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(K){if(U)T$.success(`Configuration loaded from: ${K.source.path}`);return K}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?RY($,Y,X):Y,B=[d0(V1(),".config",$),d0(V1(),".config"),V1()];for(let W of B){if(X)T$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)T$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?RY($,A,J):A;try{let W=d0(Y,"package.json");if(!ZW(W))return null;let j=await import(W),z=j[$],G=$;if(!z&&w)z=j[w],G=w;if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)T$.success(`Configuration loaded from package.json: ${G}`);return{config:pW(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)T$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:RY($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw fw.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return k1.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);k1.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias)Y.push(`alias:${w.alias}`);if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,d0($,"config"),d0($,".config"),w?d0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(d0(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[d0(V1(),".config",$),d0(V1(),".config"),V1()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}function FG($){let Y=!($.message.includes("EACCES")||$.message.includes("EPERM")||$.message.includes("permission denied"))&&($.message.includes("syntax")||$.message.includes("Expected")||$.message.includes("Unexpected")||$.message.includes("BuildMessage")),A=$.message.includes("Configuration must export a valid object")||$.message.includes("Configuration file is empty and exports nothing");return Y||A}async function IH($){return o$.loadConfig({...$,__strictErrorHandling:!0})}async function mG($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},Y="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let A;if(Y)A=await o$.loadConfig($);else A=await o$.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return A?.config??w}catch(A){let X=A instanceof Error?A.name:"UnknownError",J=A instanceof Error?A.message:String(A);if(!(X==="ConfigNotFoundError"||X==="ConfigLoadError"||X==="ConfigValidationError"||J.includes("config"))&&$.verbose)T$.warn("Unexpected error loading config, using defaults:",[A instanceof Error?A:Error(String(A))]);let B=Y?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await o$.applyEnvironmentVariables(B.name||"",w,!0,B.verbose||!1))?.config??w;return w}}async function VH($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await o$.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Y){if(Y instanceof Error&&(Y.name==="ConfigNotFoundError"||Y.name==="ConfigLoadError"&&FG(Y)))return(await o$.applyEnvironmentVariables($,{},!0,!1)).config;throw Y}}try{return(await o$.loadConfig({...$,cwd:$.cwd||kw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&FG(w)))return(await o$.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function yH($,w,Y="replace"){let A=new B8;try{let X=await A.loadFromPath($,w,{arrayStrategy:Y,useCache:!1,trackPerformance:!1});return X?X.config:null}catch{return null}}function RY($,w,Y=!1){let A=new W8,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],F=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((f)=>f.toUpperCase()).join("")}`,`${X}_${G.map((f)=>f.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],K,q;for(let f of F)if(K=kw.env[f],K!==void 0){q=f;break}if(K!==void 0&&q)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(K.toLowerCase());else if(typeof z==="number"){let f=Number(K);if(!Number.isNaN(f))W[j]=f}else if(Array.isArray(z))try{W[j]=JSON.parse(K)}catch{W[j]=K.split(",").map((f)=>f.trim())}else W[j]=K;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}function CH($){let w=d0(kw.cwd(),$.configDir),Y=d0(kw.cwd(),$.generatedDir),A=d0(Y,"config-types.ts");if(!ZW(a2(A)))_E(a2(A),{recursive:!0,mode:511});let X=ZW(w)?SE(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],J=`// Generated by bunfig v${$T}
163
+ `;return Y}}function OH($,w){let Y=$5("process");if(typeof Y>"u"||!Y.env)return w;let A=Y.env[$];return A!==void 0?A:w}function aG($,w,Y={}){return sG($,w,Y,new WeakMap)}function sG($,w,Y,A){let{arrayMergeMode:X="replace",skipNullish:J=!1,customMerger:U}=Y;if(w===null||w===void 0)return J?$:w;if(U){let B=U($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return oG($,w,X,A);if(!j$(w)||!j$($))return w;return hH($,w,Y,A)}function oG($,w,Y,A){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(Y){case"replace":return w;case"concat":return _H($,w);case"smart":return SH($,w,A);default:return w}return w}function _H($,w){let Y=[...w];for(let A of $)if(!Y.some((X)=>lW(X,A)))Y.push(A);return Y}function SH($,w,Y){if(w.length===0)return $;if($.length===0)return w;if(j$(w[0])&&j$($[0]))return ZH($,w,Y);if(w.every((A)=>typeof A==="string")&&$.every((A)=>typeof A==="string")){let A=[...w];for(let X of $)if(!A.includes(X))A.push(X);return A}return w}function ZH($,w,Y){let A=[...w];for(let X of $){if(!j$(X)){A.push(X);continue}let J=["id","name","key","path","type"],U=!1;for(let B of J)if(B in X){if(A.find((j)=>j$(j)&&(B in j)&&j[B]===X[B])){U=!0;break}}if(!U)A.push(X)}return A}function hH($,w,Y,A){let X=w;if(j$(X)&&A.has(X))return A.get(X);let J={...$};if(j$(X))A.set(X,J);for(let U in X){if(!Object.prototype.hasOwnProperty.call(X,U))continue;let B=X[U],W=J[U];if(Y.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){J[U]=B;continue}if(j$(B)&&j$(W))J[U]=sG(W,B,Y,A);else if(Array.isArray(B)||Array.isArray(W))J[U]=oG(W,B,Y.arrayMergeMode||"smart",A);else J[U]=B}return J}function XB($,w,Y="replace"){return aG($,w,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function lW($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let Y=0;Y<$.length;Y++)if(!lW($[Y],w[Y]))return!1;return!0}if(j$($)&&j$(w)){let Y=Object.keys($),A=Object.keys(w);if(Y.length!==A.length)return!1;for(let X of Y){if(!Object.prototype.hasOwnProperty.call(w,X))return!1;if(!lW($[X],w[X]))return!1}return!0}return!1}function j$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class N8{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,Y={}){let{arrayStrategy:A="replace",useCache:X=!0,cacheTtl:J,trackPerformance:U=!0,verbose:B=!1}=Y;if(X){let j=x1.getWithFileCheck("file",$);if(j){if(B)console.log(`Configuration loaded from cache: ${$}`);return j}}let W=async()=>{if(!nX($))return null;try{let j=`?t=${Date.now()}`,z=await import($+j),G=z.default||z,K="default"in z,F=Object.keys(z).length>0;if(!K&&!F)throw new yY($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof G!=="object"||G===null||Array.isArray(G))throw new yY($,Error("Configuration must export a valid object"),"unknown");let E={config:XB(w,G,A),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(X)x1.setWithFileCheck("file",E,$,J);return E}catch(j){throw j instanceof Error?Tw.configLoad($,j):Tw.configLoad($,Error(String(j)))}};if(U)return OY.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,Y={}){for(let A of $)try{let X=await this.loadFromPath(A,w,Y);if(X)return X}catch(X){if(X instanceof Error&&X.name==="ConfigLoadError")throw X;if(Y.verbose)console.warn(`Failed to load config from ${A}:`,X)}return null}generateConfigPaths($,w,Y){let A=this.generateNamePatterns($,Y),X=[];for(let J of A)for(let U of this.extensions)X.push(kW(w,`${J}${U}`));return X}generateNamePatterns($,w){let Y=[];if(Y.push("config",".config"),$)Y.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(Y.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)Y.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return Y.filter(Boolean)}checkFileAccess($){return rG(async()=>{return nX($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,Y){let A=[];if(!nX($))return A;if(w||Y){let X=this.generateNamePatterns(w||"",Y);for(let J of X)for(let U of this.extensions){let B=kW($,`${J}${U}`);if(await this.checkFileAccess(B))A.push(B)}}else try{let{readdirSync:X}=await import("fs"),J=X($);for(let U of J)if(this.looksLikeConfigFile(U)){let B=kW($,U);if(await this.checkFileAccess(B))A.push(B)}}catch{return[]}return A}looksLikeConfigFile($){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Y)=>Y.test($))}async validateConfigFile($){let w=[];try{if(!nX($))return w.push("Configuration file does not exist"),w;let Y=await import($),A=Y.default||Y;if(A===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof A!=="object"||A===null)w.push("Configuration must be an object");else if(Array.isArray(A))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:X}=await import("fs"),J=X($,"utf8");JSON.parse(J)}catch(X){w.push(`Invalid JSON syntax: ${X}`)}}catch(Y){w.push(`Failed to load configuration file: ${Y}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let Y=new Map;return await Promise.allSettled($.map(async(A)=>{try{let X=await this.loadFromPath(A,{},w);if(X)Y.set(A,X.config)}catch(X){if(w.verbose)console.warn(`Failed to preload ${A}:`,X)}})),Y}}class JB{async validateConfiguration($,w,Y={}){let{stopOnFirstError:A=!1,validateRequired:X=!0,validateTypes:J=!0,customRules:U=[],trackPerformance:B=!0,verbose:W=!1}=Y,j=async()=>{let z=[],G=[],K={stopOnFirstError:A,validateRequired:X,validateTypes:J,customRules:U,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,K);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],K);else return this.validateWithJSONSchema($,w,K)}catch(F){return z.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:z,warnings:G}}};if(B)return await OY.track("validateConfiguration",j);return j()}async validateWithSchemaFile($,w,Y){try{if(!jH(w))throw new LY(w,[{path:"",message:"Schema file does not exist"}]);let A=await import(w),X=A.default||A;if(Array.isArray(X))return this.validateWithRules($,X,Y);else return this.validateWithJSONSchema($,X,Y)}catch(A){throw new LY(w,[{path:"",message:`Failed to load schema: ${A}`}])}}validateWithJSONSchema($,w,Y){let A=[],X=[];return this.validateObjectAgainstSchema($,w,"",A,X,Y),{isValid:A.length===0,errors:A,warnings:X}}validateObjectAgainstSchema($,w,Y,A,X,J){if(J.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(U)){if(A.push({path:Y,message:`Expected type ${B.join(" or ")}, got ${U}`,expected:B.join(" or "),actual:U,rule:"type"}),J.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(A.push({path:Y,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),J.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)A.push({path:Y,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)A.push({path:Y,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))A.push({path:Y,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)A.push({path:Y,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)A.push({path:Y,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let U=0;U<$.length;U++){let B=Y?`${Y}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,B,A,X,J),J.stopOnFirstError&&A.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(J.validateRequired&&w.required){for(let B of w.required)if(!(B in U)){if(A.push({path:Y?`${Y}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in U){let j=Y?`${Y}.${B}`:B;if(this.validateObjectAgainstSchema(U[B],W,j,A,X,J),J.stopOnFirstError&&A.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(U))if(!B.has(W))X.push({path:Y?`${Y}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,Y){let A=[],X=[];for(let J of w)try{let U=this.getValueByPath($,J.path),B=this.validateWithRule(U,J,J.path);if(A.push(...B),Y.stopOnFirstError&&A.length>0)break}catch(U){A.push({path:J.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:A.length===0,errors:A,warnings:X}}validateWithRule($,w,Y){let A=[];if(w.required&&($===void 0||$===null))return A.push({path:Y,message:w.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),A;if($===void 0||$===null)return A;if(w.type){let X=Array.isArray($)?"array":typeof $;if(X!==w.type)A.push({path:Y,message:w.message||`Expected type ${w.type}, got ${X}`,expected:w.type,actual:X,rule:"type"})}if(w.min!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X<w.min)A.push({path:Y,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:X,rule:"min"})}if(w.max!==void 0){let X=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(X>w.max)A.push({path:Y,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:X,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))A.push({path:Y,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))A.push({path:Y,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let X=w.validator($);if(X)A.push({path:Y,message:w.message||X,rule:"custom"})}return A}getValueByPath($,w){if(!w)return $;let Y=w.split("."),A=$;for(let X of Y)if(A&&typeof A==="object"&&X in A)A=A[X];else return;return A}generateRulesFromInterface($){let w=[],Y=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let A of Y){let[,X,J,U]=A;w.push({path:X,required:!J,type:this.mapTypeScriptType(U)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:J5},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class UB{fileLoader=new N8;envProcessor=new F8;validator=new JB;async loadConfig($){let w=Date.now(),{cache:Y,performance:A,schema:X,validate:J,...U}=$;try{if(Y?.enabled){let W=this.checkCache(U.name||"",U);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(U,!0,Y)}catch(W){let j=U.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(j)throw W;B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`No configuration file found for "${U.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let z=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),G=!z&&(W.message.includes("syntax")||W.message.includes("Expected")||W.message.includes("Unexpected")||W.message.includes("BuildMessage")||W.message.includes("errors building")),K=W.message.includes("Configuration must export a valid object")||W.message.includes("Configuration file is empty and exports nothing");if(j&&(K||z))throw W;if(G&&(!j||!K))B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(X||J)await this.validateConfiguration(B.config,X,J,U.name);if(Y?.enabled&&B)this.cacheResult(U.name||"",B,Y,U);if(A?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(A.onMetrics)A.onMetrics(W);if(A.slowThreshold&&W.duration>A.slowThreshold)f$.warn(`Slow configuration loading detected: ${W.duration}ms for ${U.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw f$.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,Y){let{name:A="",alias:X,cwd:J,configDir:U,defaultConfig:B,checkEnv:W=!0,arrayStrategy:j="replace",verbose:z=!1}=$,G=J||Pw.cwd(),K=[],F=await this.loadLocalConfiguration(A,X,G,U,B,j,z,W,Y);if(F)return K.push(...this.getLocalSearchPaths(A,X,G,U)),this.finalizeResult(F,K,W,A,z);let T=await this.loadHomeConfiguration(A,X,B,j,z,W);if(T)return K.push(...this.getHomeSearchPaths(A,X)),this.finalizeResult(T,K,W,A,z);let q=await this.loadPackageJsonConfiguration(A,X,G,B,j,z,W);if(q)return K.push(l0(G,"package.json")),this.finalizeResult(q,K,W,A,z);if(K.push(...this.getAllSearchPaths(A,X,G,U)),w)throw Tw.configNotFound(A,K,X);return{...await this.applyEnvironmentVariables(A,B,W,z),warnings:[`No configuration file found for "${A}"${X?` or alias "${X}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,Y,A,X,J,U,B,W){let j=B?CY($,X,U):X,z=this.getLocalDirectories(Y,A);for(let G of z){if(U)f$.info(`Searching for configuration in: ${G}`);let K=this.fileLoader.generateConfigPaths($,G,w),F=await this.fileLoader.tryLoadFromPaths(K,j,{arrayStrategy:J,verbose:U,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(F){if(U)f$.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,Y,A,X,J){if(!$)return null;let U=J?CY($,Y,X):Y,B=[l0(Q1(),".config",$),l0(Q1(),".config"),Q1()];for(let W of B){if(X)f$.info(`Checking home directory: ${W}`);let j=this.fileLoader.generateConfigPaths($,W,w),z=await this.fileLoader.tryLoadFromPaths(j,U,{arrayStrategy:A,verbose:X});if(z){if(X)f$.success(`Configuration loaded from home directory: ${z.source.path}`);return z}}return null}async loadPackageJsonConfiguration($,w,Y,A,X,J,U){let B=U?CY($,A,J):A;try{let W=l0(Y,"package.json");if(!gW(W))return null;let j=await import(W),z=j[$],G=$;if(!z&&w)z=j[w],G=w;if(z&&typeof z==="object"&&!Array.isArray(z)){if(J)f$.success(`Configuration loaded from package.json: ${G}`);return{config:XB(B,z,X),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(J)f$.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,Y,A){if(!Y||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:CY($,w,A),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,Y,A,X){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,Y,A){let X=[];if(Y){let J=Y($);if(J)X.push(...J)}if(w){let J=await this.validator.validateConfiguration($,w);if(!J.isValid)X.push(...J.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(X.length>0)throw Tw.configValidation(A||"unknown",X,A)}checkCache($,w){let Y=this.generateCacheKey($,w);return x1.get(Y)||null}cacheResult($,w,Y,A){let X=this.generateCacheKey($,A);x1.set(X,w,void 0,Y.ttl)}generateCacheKey($,w){let Y=[$];if(w.alias)Y.push(`alias:${w.alias}`);if(w.cwd)Y.push(`cwd:${w.cwd}`);if(w.configDir)Y.push(`configDir:${w.configDir}`);if("checkEnv"in w)Y.push(`checkEnv:${w.checkEnv}`);return Y.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,l0($,"config"),l0($,".config"),w?l0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,Y,A){let X=[];return X.push(...this.getLocalSearchPaths($,w,Y,A)),X.push(...this.getHomeSearchPaths($,w)),X.push(l0(Y,"package.json")),X}getLocalSearchPaths($,w,Y,A){let X=this.getLocalDirectories(Y,A),J=[];for(let U of X)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}getHomeSearchPaths($,w){if(!$)return[];let Y=[l0(Q1(),".config",$),l0(Q1(),".config"),Q1()],A=[];for(let X of Y)A.push(...this.fileLoader.generateConfigPaths($,X,w));return A}async loadConfigWithResult($){return this.loadConfig($)}}function VG($){let Y=!($.message.includes("EACCES")||$.message.includes("EPERM")||$.message.includes("permission denied"))&&($.message.includes("syntax")||$.message.includes("Expected")||$.message.includes("Unexpected")||$.message.includes("BuildMessage")),A=$.message.includes("Configuration must export a valid object")||$.message.includes("Configuration file is empty and exports nothing");return Y||A}async function kH($){return ww.loadConfig({...$,__strictErrorHandling:!0})}async function eG($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},Y="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let A;if(Y)A=await ww.loadConfig($);else A=await ww.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return A?.config??w}catch(A){let X=A instanceof Error?A.name:"UnknownError",J=A instanceof Error?A.message:String(A);if(!(X==="ConfigNotFoundError"||X==="ConfigLoadError"||X==="ConfigValidationError"||J.includes("config"))&&$.verbose)f$.warn("Unexpected error loading config, using defaults:",[A instanceof Error?A:Error(String(A))]);let B=Y?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await ww.applyEnvironmentVariables(B.name||"",w,!0,B.verbose||!1))?.config??w;return w}}async function DH($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await ww.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Y){if(Y instanceof Error&&(Y.name==="ConfigNotFoundError"||Y.name==="ConfigLoadError"&&VG(Y)))return(await ww.applyEnvironmentVariables($,{},!0,!1)).config;throw Y}}try{return(await ww.loadConfig({...$,cwd:$.cwd||Pw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&VG(w)))return(await ww.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function xH($,w,Y="replace"){let A=new N8;try{let X=await A.loadFromPath($,w,{arrayStrategy:Y,useCache:!1,trackPerformance:!1});return X?X.config:null}catch{return null}}function CY($,w,Y=!1){let A=new F8,X=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(U,B=[]){let W={...U};for(let[j,z]of Object.entries(U)){let G=[...B,j],K=[`${X}_${G.join("_").toUpperCase()}`,`${X}_${G.map((q)=>q.toUpperCase()).join("")}`,`${X}_${G.map((q)=>q.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let q of K)if(F=Pw.env[q],F!==void 0){T=q;break}if(F!==void 0&&T)if(typeof z==="boolean")W[j]=["true","1","yes"].includes(F.toLowerCase());else if(typeof z==="number"){let q=Number(F);if(!Number.isNaN(q))W[j]=q}else if(Array.isArray(z))try{W[j]=JSON.parse(F)}catch{W[j]=F.split(",").map((q)=>q.trim())}else W[j]=F;else if(z&&typeof z==="object"&&!Array.isArray(z))W[j]=J(z,G)}return W}return J(w)}function PH($){let w=l0(Pw.cwd(),$.configDir),Y=l0(Pw.cwd(),$.generatedDir),A=l0(Y,"config-types.ts");if(!gW(WG(A)))cT(WG(A),{recursive:!0,mode:511});let X=gW(w)?iT(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],J=`// Generated by bunfig v${Gf}
164
164
  export type ConfigNames = ${X.length?`'${X.join("' | '")}'`:"string"}
165
- `;hE(A,J,{mode:438})}function QH($){let w=null,Y=null,A=()=>{if(!Y)Y=mG($).then((J)=>{return w=J,J},(J)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)T$.warn("Config loading failed, using defaults:",[J instanceof Error?J:Error(String(J))]);return U});return Y},X="defaultConfig"in $?$.defaultConfig:{};return w=X,A(),new Proxy({},{get(J,U){if(w)return w[U];let B=X[U];return A(),B},has(J,U){return U in(w||X)},ownKeys(){return Object.keys(w||X)},getOwnPropertyDescriptor(J,U){return Object.getOwnPropertyDescriptor(w||X,U)},set(J,U,B){if(!w)w={...X};return w[U]=B,!0}})}function LH($){let w=GG(wH.cwd(),$?.configDir||"./config");function Y(){if(!eE(w))return[];let X=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),J=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=$H(w).filter((W)=>X.has(VW(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:j}of U){let z=VW(j).toLowerCase(),G=B.get(W);if(!G){B.set(W,j);continue}let F=VW(G).toLowerCase();if(J.indexOf(z)<J.indexOf(F))B.set(W,j)}return Array.from(B.entries()).map(([W,j])=>({base:W,file:j})).sort((W,j)=>W.base.localeCompare(j.base))}function A(){let X=Y(),J=X.map((j)=>j.base),U=J.length?J.map((j)=>`'${j}'`).join(" | "):"string",B=X.length?`{
166
- ${X.map((j)=>{let z=GG(w,j.file).replace(/\\/g,"/");return` '${j.base}': typeof import('${z}').default`}).join(`,
165
+ `;mT(A,J,{mode:438})}function bH($){let w=null,Y=null,A=()=>{if(!Y)Y=eG($).then((J)=>{return w=J,J},(J)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)f$.warn("Config loading failed, using defaults:",[J instanceof Error?J:Error(String(J))]);return U});return Y},X="defaultConfig"in $?$.defaultConfig:{};return w=X,A(),new Proxy({},{get(J,U){if(w)return w[U];let B=X[U];return A(),B},has(J,U){return U in(w||X)},ownKeys(){return Object.keys(w||X)},getOwnPropertyDescriptor(J,U){return Object.getOwnPropertyDescriptor(w||X,U)},set(J,U,B){if(!w)w={...X};return w[U]=B,!0}})}function uH($){let w=IG(KH.cwd(),$?.configDir||"./config");function Y(){if(!zH(w))return[];let X=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),J=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=GH(w).filter((W)=>X.has(DW(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:j}of U){let z=DW(j).toLowerCase(),G=B.get(W);if(!G){B.set(W,j);continue}let K=DW(G).toLowerCase();if(J.indexOf(z)<J.indexOf(K))B.set(W,j)}return Array.from(B.entries()).map(([W,j])=>({base:W,file:j})).sort((W,j)=>W.base.localeCompare(j.base))}function A(){let X=Y(),J=X.map((j)=>j.base),U=J.length?J.map((j)=>`'${j}'`).join(" | "):"string",B=X.length?`{
166
+ ${X.map((j)=>{let z=IG(w,j.file).replace(/\\/g,"/");return` '${j.base}': typeof import('${z}').default`}).join(`,
167
167
  `)}
168
168
  }`:"Record<string, any>";return`export type ConfigNames = ${U}
169
169
  export type ConfigByName = ${B}
170
170
  export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
171
171
  export type ConfigOf = Config
172
- `}return{name:"bunfig-plugin",setup(X){X.onResolve({filter:/^virtual:bunfig-types$/},(J)=>{return{path:J.path,namespace:"bunfig-virtual"}}),X.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:A(),loader:"ts"}})}}}function XT($,w={}){let Y=J8.cwd();while(Y.includes("storage"))Y=VG(Y,"..");let A=VG(Y,$||"");if(w?.relative)return AT(J8.cwd(),A);return A}function M0(){if(s$.env.NODE_ENV==="test"||s$.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function fT(){if(s$.env.NODE_ENV==="test"||s$.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof s$<"u"){let $=s$.type;if($==="renderer"||$==="worker")return!1;return!!(s$.versions&&(s$.versions.node||s$.versions.bun))}return!1}class oG{async format($){let w=await fT(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:Z1.pid,hostname:w(),environment:Z1.env.NODE_ENV||"development",platform:Z1.platform,version:Z1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Z1.env.NODE_ENV||Z1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class Dw{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...U8},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new oG,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??P.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...hW,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...hW};return{...hW,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:U8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!M0()&&this.config.writeToFile===!0}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await zT(this.config.logDirectory,LG.F_OK|LG.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await GT(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:r$.from($);try{if(!mX(this.currentLogFile))await SW(this.currentLogFile,"",{mode:420});if(X=QG(this.currentLogFile,"a",420),jT(X,W,{flag:"a"}),CG(X),X!==void 0)_W(X),X=void 0;if((await S1(this.currentLogFile)).size===0){if(await SW(this.currentLogFile,W,{flag:"w",mode:420}),(await S1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let F=B*2**J;await new Promise((K)=>setTimeout(K,F)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{_W(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return h1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return h1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return h1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(M0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return OW(16).toString("hex")}generateKey(){return OW(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=OW(16),A=UT("aes-256-gcm",w,Y),X=r$.isBuffer($)?$:r$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=r$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=_G(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(r$.from(r$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(M0())return;if(!this.shouldWriteToFile())return;let $=await S1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await gX(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await S1(Y).catch(()=>null))try{if(await OG(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await lX(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await SW(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await S1(Y).catch(()=>null))await OG(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await gX(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await lX(h1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=yG($),A=BT(w),X=_G();await NT(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),mX(this.currentLogFile))try{let $=QG(this.currentLogFile,"r+");CG($),_W($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!M0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await gX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await lX(h1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?g.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||M0())return!1;let $=typeof P.env.NO_COLOR<"u",w=P.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof P.stderr<"u"&&P.stderr.isTTY||typeof P.stdout<"u"&&P.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(U)K.push(w);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)K.push(A.replace(/[[\]]/g,""));return K.push(X),K.join(" ")}let W=P.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${g.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,F=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(F)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=g.underline(g.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>g.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>g.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>g.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>g.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>g.strikethrough(A)),w}supportsHyperlinks(){if(M0())return!1;let $=P.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=P.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(FT(w)||w.startsWith("./")||w.startsWith("../"))w=KT(w);else return null;return mX(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){if(!this.shouldLog($))return;let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":RT[$],F=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",K;switch($){case"debug":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:g.gray(W),level:$}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"success":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:g.green(W),level:$}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:X,icon:G,tag:F,message:W,level:$}),console.error(K),B){let q=B.split(`
173
- `);for(let f of q)if(f.trim()&&!f.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:g.gray(` ${f}`),level:$,showTimestamp:!1}))}break}}else if(!M0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
172
+ `}return{name:"bunfig-plugin",setup(X){X.onResolve({filter:/^virtual:bunfig-types$/},(J)=>{return{path:J.path,namespace:"bunfig-virtual"}}),X.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:A(),loader:"ts"}})}}}function qf($,w={}){let Y=G8.cwd();while(Y.includes("storage"))Y=DG(Y,"..");let A=DG(Y,$||"");if(w?.relative)return Nf(G8.cwd(),A);return A}function M0(){if($w.env.NODE_ENV==="test"||$w.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function yf(){if($w.env.NODE_ENV==="test"||$w.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof $w<"u"){let $=$w.type;if($==="renderer"||$==="worker")return!1;return!!($w.versions&&($w.versions.node||$w.versions.bun))}return!1}class j5{async format($){let w=await yf(),Y=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:Y})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:D1.pid,hostname:w(),environment:D1.env.NODE_ENV||"development",platform:D1.platform,version:D1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:D1.env.NODE_ENV||D1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class bw{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...K8},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new j5,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??P.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let Y={...w},A=w.timestamp!==void 0;if(A)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:A||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let X=this.generateKeyId(),J=this.generateKey();this.currentKeyId=X,this.keys.set(X,J),this.encryptionKeys.set(X,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[Y]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...mW,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...mW};return{...mW,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:K8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...w,...Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=w.level;return Y}shouldWriteToFile(){return!M0()&&this.config.writeToFile===!0}async writeToFile($){let Y=(async()=>{let X,J=0,U=3,B=1000;while(J<U)try{try{try{await Mf(this.config.logDirectory,uG.F_OK|uG.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await If(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:s$.from($);try{if(!rX(this.currentLogFile))await iW(this.currentLogFile,"",{mode:420});if(X=bG(this.currentLogFile,"a",420),Rf(X,W,{flag:"a"}),PG(X),X!==void 0)cW(X),X=void 0;if((await h1(this.currentLogFile)).size===0){if(await iW(this.currentLogFile,W,{flag:"w",mode:420}),(await h1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let z=j;if(z.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(z.code)){if(J<U-1){let G=typeof z.message==="string"?z.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${U}:`,G);let K=B*2**J;await new Promise((F)=>setTimeout(F,K)),J++;continue}}if(z?.code&&["ENOSPC","EDQUOT"].includes(z.code))throw Error(`Disk quota exceeded or no space left on device: ${z.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",z),z}finally{if(X!==void 0)try{cW(X)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(W){if(J===U-1){let z=W,G=typeof z.message==="string"?z.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",G),W}J++;let j=B*2**(J-1);await new Promise((z)=>setTimeout(z,j))}})();this.pendingOperations.push(Y);let A=this.pendingOperations.length-1;try{await Y}catch(X){throw console.error("Debug: [writeToFile] Error in operation:",X),X}finally{this.pendingOperations.splice(A,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return k1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return k1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return k1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(M0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let $=this.config.rotation,w;switch($.frequency){case"daily":w=86400000;break;case"weekly":w=604800000;break;case"monthly":w=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},w)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let w=this.config.rotation.keyRotation;if(!w?.enabled)return;let Y=typeof w.interval==="number"?w.interval:60,A=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((X)=>{console.error("Error rotating keys:",X)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,Y=this.generateKeyId(),A=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,A),this.encryptionKeys.set(Y,{key:A,createdAt:new Date});let X=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),J=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,J);if(X.length>U)for(let[B]of X.slice(U))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return vW(16).toString("hex")}generateKey(){return vW(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let $=this.keys.get(this.currentKeyId);if(!$)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:$,id:this.currentKeyId}}encrypt($){let{key:w}=this.getCurrentKey(),Y=vW(16),A=Tf("aes-256-gcm",w,Y),X=s$.isBuffer($)?$:s$.from($,"utf8"),J=A.update(X),U=A.final(),B=J.length+U.length,W=A.getAuthTag(),j=s$.allocUnsafe(16+B+16);return Y.copy(j,0),J.copy(j,16),U.copy(j,16+J.length),W.copy(j,16+B),{encrypted:j,iv:Y}}async compressData($){return new Promise((w,Y)=>{let A=cG(),X=[];A.on("data",(J)=>X.push(J)),A.on("end",()=>w(s$.from(s$.concat(X)))),A.on("error",Y),A.write($),A.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let $={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let w=this.config.rotation.encrypt;return{...$,...w}}return $}async rotateLog(){if(M0())return;if(!this.shouldWriteToFile())return;let $=await h1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let Y=this.currentLogFile,A=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let X=await tX(this.config.logDirectory),J=X.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,j)=>{let z=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-z}),U=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${Y}.${U}`;if(await h1(Y).catch(()=>null))try{if(await vG(Y,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await aX(B)}catch(W){console.error("Error compressing rotated file:",W)}if(J.length===0&&!X.some((W)=>W.endsWith(".log.1")))try{let W=`${Y}.1`;await iW(W,"")}catch(W){console.error("Error creating backup file:",W)}}catch(W){console.error(`Error during rotation: ${W instanceof Error?W.message:String(W)}`)}}else{let X=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${X}.log`);if(await h1(Y).catch(()=>null))await vG(Y,J)}if(this.currentLogFile=A,w.maxFiles){let J=(await tX(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,B)=>B.localeCompare(U));for(let U of J.slice(w.maxFiles))await aX(k1(this.config.logDirectory,U))}}}async compressLogFile($,w){let Y=xG($),A=ff(w),X=cG();await Qf(Y,X,A)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let A=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(A);console.log(A)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(w);console.log(w)}}shouldLog($){if(!this.enabled)return!1;let w={debug:0,info:1,success:2,warning:3,error:4};return w[$]>=w[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map(($)=>{if($ instanceof Promise)return $.catch((w)=>{console.error("Error in pending write operation:",w)});return Promise.resolve()})),rX(this.currentLogFile))try{let $=bG(this.currentLogFile,"r+");PG($),cW($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!M0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await tX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of w)try{await aX(k1(this.config.logDirectory,Y))}catch(A){console.error(`Failed to delete temp file ${Y}:`,A)}}catch($){console.error("Error cleaning up temporary files:",$)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag($){if(!$)return"";return`${this.tagFormat.prefix}${$}${this.tagFormat.suffix}`}formatFileTimestamp($){return`[${$.toISOString()}]`}formatConsoleTimestamp($){return this.shouldStyleConsole()?g.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||M0())return!1;let $=typeof P.env.NO_COLOR<"u",w=P.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof P.stderr<"u"&&P.stderr.isTTY||typeof P.stdout<"u"&&P.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:Y="",tag:A="",message:X,level:J,showTimestamp:U=!0}=$,B=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(J==="warning")F.push("WARN");else if(J==="error")F.push("ERROR");else if(Y)F.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(A)F.push(A.replace(/[[\]]/g,""));return F.push(X),F.join(" ")}let W=P.stdout.columns||120,j="";if(J==="warning"||J==="error")j=`${Y} ${X}`;else if(J==="info"||J==="success")j=`${Y} ${A} ${X}`;else j=`${Y} ${A} ${g.cyan(X)}`;if(!U)return j.trim();let z=B(j).trim().length,G=B(w).length,K=Math.max(1,W-2-z-G);return`${j.trim()}${" ".repeat(K)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(J,U)=>{let B=Number.parseInt(U,10);return B<w[0].length?String(w[0][B]):J});let Y=/%([sdijfo%])/g,A=0,X=$.replace(Y,(J,U)=>{if(U==="%")return"%";if(A>=w.length)return J;let B=w[A++];switch(U){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return J}});if(A<w.length)X+=` ${w.slice(A).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return X}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,A,X)=>{let J=g.underline(g.blue(A)),U=this.toAbsoluteFilePath(X);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(U)}`,W="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${B}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${X}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),w=w.replace(/`([^`]+)`/g,(Y,A)=>g.bgGray(A)),w=w.replace(/\*\*([^*]+)\*\*/g,(Y,A)=>g.bold(A)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,A)=>g.italic(A)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,A)=>g.italic(A)),w=w.replace(/~([^~]+)~/g,(Y,A)=>g.strikethrough(A)),w}supportsHyperlinks(){if(M0())return!1;let $=P.env;if(!$)return!1;if($.TERM_PROGRAM==="iTerm.app"||$.TERM_PROGRAM==="vscode"||$.TERM_PROGRAM==="WezTerm")return!0;if($.WT_SESSION)return!0;if($.TERM==="xterm-kitty")return!0;let w=$.VTE_VERSION?Number.parseInt($.VTE_VERSION,10):0;if(!Number.isNaN(w)&&w>=5000)return!0;return!1}toAbsoluteFilePath($){try{let w=$;if(w.startsWith("file://"))w=w.replace(/^file:\/\//,"");if(w.startsWith("~")){let Y=P.env.HOME||"";if(Y)w=w.replace(/^~(?=$|\/)/,Y)}if(Vf(w)||w.startsWith("./")||w.startsWith("../"))w=Cf(w);else return null;return rX(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,Y=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:Y}}async log($,w,...Y){if(!this.shouldLog($))return;let A=new Date,X=this.formatConsoleTimestamp(A),J=this.formatFileTimestamp(A),U,B;if(w instanceof Error)U=w.message,B=w.stack;else U=this.formatMessage(w,Y);let{consoleText:W,fileText:j}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let G=this.options.showIcons===!1?"":Zf[$],K=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:g.gray(W),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:g.green(W),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:X,icon:G,tag:K,message:W,level:$}),console.error(F),B){let T=B.split(`
173
+ `);for(let q of T)if(q.trim()&&!q.includes(U))console.error(this.formatConsoleMessage({timestamp:X,message:g.gray(` ${q}`),level:$,showTimestamp:!1}))}break}}else if(!M0()){if(console.error(`${J} ${this.environment}.${$.toUpperCase()}: ${U}`),B)console.error(B)}let z=`${J} ${this.environment}.${$.toUpperCase()}: ${j}
174
174
  `;if(B)z+=`${B}
175
175
  `;if(z=z.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(z)}progress($,w=""){let Y={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return Y;let A=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:A,lastRenderedLine:""},this.shouldStyleConsole()&&!M0()&&P.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(B,W)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,B),this.activeProgressBar.total),W!==void 0)this.activeProgressBar.message=W;if(this.shouldStyleConsole()&&!M0()&&P.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!M0()&&P.stdout.isTTY)P.stdout.write(`
176
176
  `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!M0()&&P.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",A=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:A,icon:this.options.showIcons===!1?"":g.blue("◐"),tag:Y,message:`${g.cyan($)}...`}))}return async(Y)=>{if(!this.enabled)return;let A=performance.now(),X=Math.round(A-w),J=`${$} completed in ${X}ms`,U=new Date,B=this.formatConsoleTimestamp(U),j=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${J}`;if(Y)j+=` ${JSON.stringify(Y)}`;if(j+=`
177
- `,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":g.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!M0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new Dw(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(M0())throw Error("createReadStream is not supported in browser environments");if(!mX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return yG(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=r$.isBuffer($)?$:r$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=WT("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=r$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return M0()}isServerMode(){return!M0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
178
- `),W=Math.max(...B.map((F)=>F.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((F)=>{return this.formatConsoleMessage({timestamp:Y,message:g.cyan(F),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:g.cyan(j),showTimestamp:!1})),G.forEach((F)=>console.error(F)),console.error(this.formatConsoleMessage({timestamp:Y,message:g.cyan(z),showTimestamp:!1}))}else if(!M0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
179
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(M0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${g.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();P.stdin.removeListener("data",Y);try{if(typeof P.stdin.setRawMode==="function")P.stdin.setRawMode(!1)}catch{}P.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof P.stdin.setRawMode==="function")P.stdin.setRawMode(!0)}catch{}P.stdin.resume(),P.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,j=0;if(Y=$.replace(W,(z,G)=>{if(G==="%")return"%";if(j>=w.length)return z;let F=w[j++];switch(G){case"s":return String(F);case"d":case"i":return Number(F).toString();case"j":case"o":return JSON.stringify(F,null,2);default:return z}}),j<w.length)Y+=` ${w.slice(j).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${g.blue("◐")} `;console.error(`${j}${W} ${g.cyan(A)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
180
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!P.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=g.green("━".repeat(A)),U=g.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?g.green("✓"):g.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${g.gray(this.formatTag(this.name))}`:"",F=`\r${z}${G} ${B} ${W}${j}`,K=P.stdout.columns||80,q=" ".repeat(Math.max(0,K-F.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${F}${q}`,P.stdout.write($.lastRenderedLine),w)P.stdout.write(`
181
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||M0()||!P.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(M0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await gX(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=h1(this.config.logDirectory,A);if($.before)try{if((await S1(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await lX(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}var yE,CE=($)=>$,LE=($,w)=>{for(var Y in w)yE($,Y,{get:w[Y],enumerable:!0,configurable:!0,set:QE.bind(w,Y)})},OE=($,w)=>()=>($&&(w=$($=0)),w),ZG,gG,k1,yY,lG,OH,_H,KG,nX,xW,k0,s,SH,NG,hH,fG,ZH,kH,yW,DH,qG,EG,CW,xH,PH,bH,uH,pX,dG,cH,D0,vH,iH,HG,rX,PW,R0,v,mH,TG,gH,RG,lH,dH,QW,nH,MG,IG,pH,LW,rH,tH,aH,sH,oH,tX,nG,eH,$T="0.15.6",$$,A8,IY,bW,uW,X8,cW,vW,VY,iW,mW,fw,pG,rG,T$,o$,tG,aG,wT,JT,sG,U8,CQ,y0,g,PQ,qT,bQ,ET,uQ,cQ,SG,vQ,HT,TT,iQ,hG,mQ,gQ,lQ,dQ,nQ,hW,RT,pQ;var aW=o(()=>{yE=Object.defineProperty;ZG={};LE(ZG,{withErrorRecovery:()=>bG,tryLoadConfig:()=>yH,loadConfigWithResult:()=>IH,loadConfig:()=>mG,isRetryableError:()=>qH,isConfigNotFoundError:()=>fH,isBunfigError:()=>uG,globalPerformanceMonitor:()=>yY,globalCache:()=>k1,getEnvOrDefault:()=>EH,generateConfigTypes:()=>CH,defaultGeneratedDir:()=>aG,defaultConfigDir:()=>tG,deepMergeWithArrayStrategy:()=>pW,deepMerge:()=>cG,createLibraryConfig:()=>QH,config:()=>VH,bunfigPlugin:()=>LH,applyEnvVarsToConfig:()=>RY,TypeGenerationError:()=>vW,SchemaValidationError:()=>VY,PluginError:()=>mW,PerformanceMonitor:()=>lW,FileSystemError:()=>cW,ErrorFactory:()=>fw,EnvVarError:()=>X8,EnvProcessor:()=>W8,ConfigValidator:()=>rW,ConfigValidationError:()=>bW,ConfigNotFoundError:()=>A8,ConfigMergeError:()=>uW,ConfigLoader:()=>tW,ConfigLoadError:()=>IY,ConfigFileLoader:()=>B8,ConfigCache:()=>gW,CacheUtils:()=>lG,BunfigError:()=>$$,BrowserConfigError:()=>iW,ArrayMergeStrategies:()=>pG});wT=OE(async()=>{gG=import.meta.require,k1=new gW,yY=new lW,lG={createKey:YH,isEquivalent:AH,estimateMemoryUsage:XH},OH=oX(kW.cwd(),"config"),_H=oX(kW.cwd(),"src/generated"),KG=sX.env.CLARITY_LOG_DIR||DE(WH(),"logs"),nX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:KG,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},xW=await BH(),k0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},s=k0,SH=k0.red,NG=k0.green,hH=k0.yellow,fG=k0.blue,ZH=k0.magenta,kH=k0.cyan,yW=k0.white,DH=k0.gray,qG=k0.bgRed,EG=k0.bgYellow,CW=k0.bold,xH=k0.dim,PH=k0.italic,bH=k0.underline,uH=k0.reset,pX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},dG={debug:"\uD83D\uDD0D",info:fG("ℹ"),success:NG("✓"),warning:EG(yW(CW(" WARN "))),error:qG(yW(CW(" ERROR ")))},cH=new $8("stacks"),D0=new $8("bunfig",{showTags:!0}),vH=l0(MY.cwd(),"config"),iH=l0(MY.cwd(),"src/generated"),HG=aX.env.CLARITY_LOG_DIR||ZE(FH(),"logs"),rX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:HG,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},PW=await KH(),R0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},v=R0,mH=R0.red,TG=R0.green,gH=R0.yellow,RG=R0.blue,lH=R0.magenta,dH=R0.cyan,QW=R0.white,nH=R0.gray,MG=R0.bgRed,IG=R0.bgYellow,pH=R0.bgGray,LW=R0.bold,rH=R0.dim,tH=R0.italic,aH=R0.underline,sH=R0.strikethrough,oH=R0.reset,tX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},nG={debug:"\uD83D\uDD0D",info:RG("ℹ"),success:TG("✓"),warning:IG(QW(LW(" WARN "))),error:MG(QW(LW(" ERROR ")))},eH=new Y8("stacks"),$$=class extends Error{timestamp;context;constructor(w,Y={}){super(w);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Y,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let w=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Y,A])=>`${Y}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${w}`}},A8=class extends $${code="CONFIG_NOT_FOUND";constructor(w,Y,A){let X=A?` or alias "${A}"`:"";super(`Configuration "${w}"${X} not found`,{configName:w,alias:A,searchPaths:Y,searchPathCount:Y.length})}},IY=class extends $${code="CONFIG_LOAD_ERROR";constructor(w,Y,A){super(`Failed to load configuration from "${w}": ${Y.message}`,{configPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},bW=class extends $${code="CONFIG_VALIDATION_ERROR";constructor(w,Y,A){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:A,validationErrors:Y,errorCount:Y.length})}},uW=class extends $${code="CONFIG_MERGE_ERROR";constructor(w,Y,A,X){super(`Failed to merge configuration from "${w}" with "${Y}": ${A.message}`,{sourcePath:w,targetPath:Y,configName:X,originalError:A.name,originalMessage:A.message});this.cause=A}},X8=class extends $${code="ENV_VAR_ERROR";constructor(w,Y,A,X){super(`Failed to parse environment variable "${w}" with value "${Y}" as ${A}`,{envKey:w,envValue:Y,expectedType:A,configName:X})}},cW=class extends $${code="FILE_SYSTEM_ERROR";constructor(w,Y,A){super(`File system ${w} failed for "${Y}": ${A.message}`,{operation:w,path:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},vW=class extends $${code="TYPE_GENERATION_ERROR";constructor(w,Y,A){super(`Failed to generate types from "${w}" to "${Y}": ${A.message}`,{configDir:w,outputPath:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},VY=class extends $${code="SCHEMA_VALIDATION_ERROR";constructor(w,Y,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:w,configName:A,validationErrors:Y,errorCount:Y.length})}},iW=class extends $${code="BROWSER_CONFIG_ERROR";constructor(w,Y,A,X){super(`Failed to fetch configuration from "${w}": ${Y} ${A}`,{endpoint:w,status:Y,statusText:A,configName:X})}},mW=class extends $${code="PLUGIN_ERROR";constructor(w,Y,A){super(`Plugin "${w}" failed during ${Y}: ${A.message}`,{pluginName:w,operation:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},fw={configNotFound($,w,Y){return new A8($,w,Y)},configLoad($,w,Y){return new IY($,w,Y)},configValidation($,w,Y){return new bW($,w,Y)},configMerge($,w,Y,A){return new uW($,w,Y,A)},envVar($,w,Y,A){return new X8($,w,Y,A)},fileSystem($,w,Y){return new cW($,w,Y)},typeGeneration($,w,Y){return new vW($,w,Y)},schemaValidation($,w,Y){return new VY($,w,Y)},browserConfig($,w,Y,A){return new iW($,w,Y,A)},plugin($,w,Y){return new mW($,w,Y)}},pG={replace:"replace",concat:"concat",smart:"smart"},rG=/^https?:\/\//,T$=new Y8("bunfig",{showTags:!0}),o$=new tW,tG=d0(kw.cwd(),"config"),aG=d0(kw.cwd(),"src/generated")});JT=J8.env.CLARITY_LOG_DIR||YT(XT(),"logs"),sG={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:JT,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},U8={...sG},CQ=(async()=>{try{let{loadConfig:$}=await wT().then(()=>ZG),w=await $({name:"clarity",alias:"logging",defaultConfig:sG,cwd:J8.cwd()});if(w)Object.assign(U8,w)}catch{}return U8})();y0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},g=y0,PQ=y0.red,qT=y0.green,bQ=y0.yellow,ET=y0.blue,uQ=y0.magenta,cQ=y0.cyan,SG=y0.white,vQ=y0.gray,HT=y0.bgRed,TT=y0.bgYellow,iQ=y0.bgGray,hG=y0.bold,mQ=y0.dim,gQ=y0.italic,lQ=y0.underline,dQ=y0.strikethrough,nQ=y0.reset,hW={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},RT={debug:"\uD83D\uDD0D",info:ET("ℹ"),success:qT("✓"),warning:TT(SG(hG(" WARN "))),error:HT(SG(hG(" ERROR ")))};pQ=new Dw("stacks")});var x1={};$j(x1,{shouldReusePort:()=>D1,safeStringify:()=>R$,safeDeleteFile:()=>$B,resolvePathRewrite:()=>eW,redactSensitive:()=>j8,isValidRootCA:()=>oW,isSingleProxyOptions:()=>QY,isSingleProxyConfig:()=>QT,isProcessElevated:()=>z8,isMultiProxyOptions:()=>Pw,isMultiProxyConfig:()=>w5,getSudoPassword:()=>xw,getPrimaryDomain:()=>G8,extractHostname:()=>CT,execSudoSync:()=>CY,debugLog:()=>N});import{execSync as sW}from"node:child_process";import*as $5 from"node:fs/promises";function xw(){return process.env.SUDO_PASSWORD}function z8(){if(process.platform==="win32")return!1;try{return typeof process.getuid==="function"&&process.getuid()===0}catch{return!1}}function CY($){if(z8())return sW($,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});let w=xw(),Y=$.replace(/'/g,"'\\''");if(w)return sW(`echo '${w}' | sudo -S sh -c '${Y}' 2>/dev/null`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});try{return sW(`sudo -n sh -c '${Y}'`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{throw Error("sudo required but no cached credentials (set SUDO_PASSWORD in .env or run sudo -v)")}}function N($,w,Y){if(Y)MT.debug(`[rpx:${$}] ${w}`)}function D1(){let $=process.env.RPX_REUSE_PORT;return $==="1"||$==="true"}function yT($){let w=$.toLowerCase();return IT.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function j8($){if(Array.isArray($))return $.map((Y)=>j8(Y));if(typeof $==="string")return VT.test($)?eG:$;if(!$||typeof $!=="object")return $;let w={};for(let[Y,A]of Object.entries($)){if(yT(Y)){w[Y]=eG;continue}w[Y]=j8(A)}return w}function R$($,w){return JSON.stringify(j8($),null,w)}function CT($){if(Pw($))return $.proxies.map((w)=>{let Y=w.to||"stacks.localhost";return Y.startsWith("http")?new URL(Y).hostname:Y});if(QY($)){let w=$.to||"stacks.localhost";return[w.startsWith("http")?new URL(w).hostname:w]}return["stacks.localhost"]}function oW($){return typeof $==="object"&&$!==null&&"certificate"in $&&"privateKey"in $&&typeof $.certificate==="string"&&typeof $.privateKey==="string"}function G8($){if(!$)return"stacks.localhost";if(Pw($)&&$.proxies.length>0)return $.proxies[0].to||"stacks.localhost";if(QY($))return $.to||"stacks.localhost";return"stacks.localhost"}function w5($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}function Pw($){return"proxies"in $&&Array.isArray($.proxies)}function QY($){return"to"in $&&typeof $.to==="string"}function QT($){return!!($&&("to"in $)&&!("proxies"in $))}function eW($,w){if(!w||w.length===0)return null;for(let Y of w)if($===Y.from||$.startsWith(`${Y.from}/`)){let A=Y.to.startsWith("http")?new URL(Y.to).host:Y.to,X=Y.stripPrefix===!0?$.slice(Y.from.length)||"/":$;return{targetHost:A,targetPath:X}}return null}async function $B($,w){try{await $5.unlink($),N("certificates",`Successfully deleted: ${$}`,w)}catch(Y){if(Y.code!=="ENOENT")N("certificates",`Warning: Could not delete ${$}: ${Y}`,w)}}var MT,eG="[redacted]",IT,VT;var X0=o(()=>{aW();MT=new Dw("rpx",{showTags:!1});IT=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),VT=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/});import{execSync as F8}from"node:child_process";import{homedir as LT}from"node:os";import{join as OT}from"node:path";function K8(){return OT(LT(),"Library/Keychains/login.keychain-db")}function YB(){return[b1,K8()]}function Y5($,w=wB){let Y=F8(`security find-certificate -a -c "${w}" -Z "${$}" 2>/dev/null || true`,{encoding:"utf8"}),A=[];for(let X of Y.split(`
182
- `)){let J=X.match(/SHA-256 hash:\s*([A-F0-9]+)/i);if(J)A.push(J[1].toUpperCase())}return A}function AB($){if(process.platform!=="darwin")return;let w=Zw($.caPath);if(!w)return;let Y=$.commonName??wB,A=$.keychains??YB();for(let X of A)for(let J of Y5(X,Y)){if(J===w)continue;try{if(X.startsWith("/Library"))CY(`security delete-certificate -Z ${J} "${X}"`);else F8(`security delete-certificate -Z ${J} "${X}"`,{stdio:"ignore"});N("ssl",`Removed stale Root CA ${J} from ${X}`,$.verbose)}catch{}}}function XB($,w,Y){if(process.platform!=="darwin")return N8($,Y);try{let X=F8(`security verify-cert -c "${$}" -s "${w}" -l -L -R ssl 2>&1`,{encoding:"utf8"}).includes("successful");return N("ssl",`verify-cert ${w}: ${X?"trusted":"not trusted"}`,Y?.verbose),X}catch{return!1}}function N8($,w){let Y=Zw($);if(!Y)return!1;for(let A of YB())try{let X=F8(`security find-certificate -a -Z "${A}" 2>/dev/null || true`,{encoding:"utf8"});for(let J of X.split(`
183
- `))if(J.toUpperCase().includes("SHA-256")){if(J.split("=").pop().replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase()===Y)return N("ssl",`Root CA fingerprint found in ${A}`,w?.verbose),!0}}catch{}return!1}var P1="-d -r trustRoot -p ssl -p basic",b1="/Library/Keychains/System.keychain",wB="rpx.localhost";var JB=o(()=>{kX();X0()});import{execSync as UB}from"node:child_process";import G0 from"node:fs/promises";import*as WB from"node:os";import{homedir as u1}from"node:os";import*as J5 from"node:path";import{join as F0}from"node:path";import*as qw from"node:process";function BB($,w){return[...new Set($.filter(Boolean))].map((Y)=>({serverName:Y,cert:w.cert,key:w.key}))}function jB($,w,Y){let A=F0(u1(),".stacks","ssl"),X=[...new Set([w,...$,"rpx.localhost"])];return{https:{certPath:f8,keyPath:F0(A,"rpx.localhost.key"),caCertPath:F0(A,"rpx.localhost.ca.crt"),commonName:w},verbose:Y,regenerateUntrustedCerts:!0,proxies:X.map((J)=>({from:"localhost:1",to:J,cleanUrls:!1}))}}function U5($){return{caCertPath:F0($,ST),caKeyPath:F0($,hT)}}async function ZT($,w){try{let[Y,A]=await Promise.all([G0.readFile($.caCertPath,"utf8"),G0.readFile($.caKeyPath,"utf8")]);if(!Y.includes("-----BEGIN CERTIFICATE-----")||!A.includes("PRIVATE KEY-----"))return N("ssl",`Root CA files at ${$.caCertPath} look malformed, will regenerate`,w),null;return{certificate:Y,privateKey:A}}catch(Y){return N("ssl",`No existing Root CA at ${$.caCertPath} (${Y.code||Y}), will create one`,w),null}}function A5($){let w=new Set;w.add($);let Y=$.split(".");if(Y.length>=2)w.add(`*.${Y.slice(1).join(".")}`);return Array.from(w)}function W5($){let Y=G8($).replace(/\*/g,"wildcard"),A=F0(u1(),".stacks","ssl"),X=A;if(typeof $?.https==="object")return X=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:A,{caCertPath:$.https.caCertPath||F0(X,`${Y}.ca.crt`),certPath:$.https.certPath||F0(X,`${Y}.crt`),keyPath:$.https.keyPath||F0(X,`${Y}.key`)};return{caCertPath:F0(X,`${Y}.ca.crt`),certPath:F0(X,`${Y}.crt`),keyPath:F0(X,`${Y}.key`)}}function X5($){let w=new Set;if(Pw($))$.proxies.forEach((Y)=>{let A=Y.to||"rpx.localhost";A5(A).forEach((X)=>w.add(X))});else if(QY($)){let Y=$.to||"rpx.localhost";A5(Y).forEach((A)=>w.add(A))}else w.add("rpx.localhost");return w.add("localhost"),w.add("*.localhost"),w}async function c1($){if(Ew&&!$.forceRegenerate){N("ssl","Using cached SSL configuration",$.verbose);return}q8();let w=Pw($)?$.proxies.map((z)=>z.to):[$.to];N("ssl",`Generating certificate for domains: ${w.join(", ")}`,$.verbose);let Y=LY($,$.verbose),A=Y.basePath||F0(u1(),".stacks","ssl");await G0.mkdir(A,{recursive:!0});let X=U5(A),J=await ZT(X,$.verbose),U=!1;if(!J){if($.verbose)R.info("Generating Root CA certificate (one-time)...");J=await XW(Y);try{await Promise.all([G0.writeFile(X.caCertPath,J.certificate),G0.writeFile(X.caKeyPath,J.privateKey,{mode:384})]),U=!0,N("ssl",`Persisted Root CA at ${X.caCertPath}`,$.verbose)}catch(z){throw N("ssl",`Error saving Root CA files: ${z}`,$.verbose),Error(`Failed to save Root CA files: ${z}`)}}else N("ssl",`Reusing existing Root CA from ${X.caCertPath}`,$.verbose);if($.verbose)R.info(`Generating host certificate for: ${w.join(", ")}`);let B=await JW({...Y,rootCA:{certificate:J.certificate,privateKey:J.privateKey}});try{await Promise.all([G0.writeFile(Y.certPath,B.certificate),G0.writeFile(Y.keyPath,B.privateKey),G0.writeFile(Y.caCertPath,J.certificate)]),N("ssl","Certificate files saved successfully",$.verbose)}catch(z){throw N("ssl",`Error saving certificate files: ${z}`,$.verbose),Error(`Failed to save certificate files: ${z}`)}if(U?!1:await j5(X.caCertPath,{verbose:$.verbose,regenerateUntrustedCerts:!0})){if(N("ssl","Root CA already trusted, skipping trust store update",$.verbose),$.verbose)R.success("Root CA is already trusted in system trust store");if(Ew={key:B.privateKey,cert:B.certificate,ca:J.certificate},$.verbose)R.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);return}if($.verbose)R.info("Adding certificate to system trust store (may require sudo permission)...");let j=!1;if(qw.platform==="darwin")try{AB({caPath:X.caCertPath,verbose:$.verbose});let z=K8();try{UB(`security add-trusted-cert ${P1} -k "${z}" "${X.caCertPath}"`,{stdio:"ignore"})}catch{}if(CY(`security add-trusted-cert ${P1} -k ${b1} "${X.caCertPath}"`),$.verbose)R.success("Successfully added Root CA to system trust store");j=!0;let G=F0(A,"trust-rpx-cert.sh"),F=`#!/bin/bash
177
+ `,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":g.green("✓"),tag:z,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!M0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug($,...w){await this.log("debug",$,...w)}async info($,...w){await this.log("info",$,...w)}async success($,...w){await this.log("success",$,...w)}async warn($,...w){await this.log("warning",$,...w)}async error($,...w){await this.log("error",$,...w)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let $=this.config.rotation,{encrypt:w}=$;return!!w}async only($){if(!this.enabled)return;return await $()}isEnabled(){return this.enabled}setEnabled($){this.enabled=$}extend($){let w=`${this.name}:${$}`,Y=new bw(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(M0())throw Error("createReadStream is not supported in browser environments");if(!rX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return xG(this.currentLogFile,{encoding:"utf8"})}async decrypt($){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let w=this.config.rotation;if(!w.encrypt||typeof w.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let A=s$.isBuffer($)?$:s$.from($,"base64"),X=A.subarray(0,16),J=A.subarray(A.length-16),U=A.subarray(16,A.length-16),B=Hf("aes-256-gcm",Y,X);B.setAuthTag(J);let W=B.update(U),j=B.final(),z=W.length+j.length,G=s$.allocUnsafe(z);return W.copy(G,0),j.copy(G,W.length),G.toString("utf8")}catch(A){throw Error(`Decryption failed: ${A instanceof Error?A.message:String(A)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return M0()}isServerMode(){return!M0()}setTestEncryptionKey($,w){this.currentKeyId=$,this.keys.set($,w)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box($){if(!this.enabled)return;let w=new Date,Y=this.formatConsoleTimestamp(w),A=this.formatFileTimestamp(w),{consoleText:X,fileText:J}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=X.split(`
178
+ `),W=Math.max(...B.map((K)=>K.length))+2,j=`┌${"─".repeat(W)}┐`,z=`└${"─".repeat(W)}┘`,G=B.map((K)=>{return this.formatConsoleMessage({timestamp:Y,message:g.cyan(K),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:g.cyan(j),showTimestamp:!1})),G.forEach((K)=>console.error(K)),console.error(this.formatConsoleMessage({timestamp:Y,message:g.cyan(z),showTimestamp:!1}))}else if(!M0())console.error(`${A} ${this.environment}.INFO: [BOX] ${J}`);let U=`${A} ${this.environment}.INFO: [BOX] ${J}
179
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(M0())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${g.cyan("?")} ${$} (y/n) `);let Y=(A)=>{let X=A.toString().trim().toLowerCase();P.stdin.removeListener("data",Y);try{if(typeof P.stdin.setRawMode==="function")P.stdin.setRawMode(!1)}catch{}P.stdin.pause(),console.error(""),w(X==="y"||X==="yes")};try{if(typeof P.stdin.setRawMode==="function")P.stdin.setRawMode(!0)}catch{}P.stdin.resume(),P.stdin.once("data",Y)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let Y=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,j=0;if(Y=$.replace(W,(z,G)=>{if(G==="%")return"%";if(j>=w.length)return z;let K=w[j++];switch(G){case"s":return String(K);case"d":case"i":return Number(K).toString();case"j":case"o":return JSON.stringify(K,null,2);default:return z}}),j<w.length)Y+=` ${w.slice(j).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:A,fileText:X}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${g.blue("◐")} `;console.error(`${j}${W} ${g.cyan(A)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${X}
180
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!P.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),A=Math.round($.barLength*Y/100),X=$.barLength-A,J=g.green("━".repeat(A)),U=g.gray("━".repeat(X)),B=`[${J}${U}]`,W=`${Y}%`.padStart(4),j=$.message?` ${$.message}`:"",z=this.options.showIcons===!1?"":w||Y===100?g.green("✓"):g.blue("▶"),G=this.options.showTags!==!1&&this.name?` ${g.gray(this.formatTag(this.name))}`:"",K=`\r${z}${G} ${B} ${W}${j}`,F=P.stdout.columns||80,T=" ".repeat(Math.max(0,F-K.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${K}${T}`,P.stdout.write($.lastRenderedLine),w)P.stdout.write(`
181
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||M0()||!P.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(M0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await tX(this.config.logDirectory),Y=[];for(let A of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(A):A.startsWith(this.name))||!A.endsWith(".log"))continue;let J=k1(this.config.logDirectory,A);if($.before)try{if((await h1(J)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${J}:`,U);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let A of Y)try{await aX(A),console.warn(`Deleted log file: ${A}`)}catch(X){console.error(`Failed to delete log file ${A}:`,X)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}var xT,PT=($)=>$,uT=($,w)=>{for(var Y in w)xT($,Y,{get:w[Y],enumerable:!0,configurable:!0,set:bT.bind(w,Y)})},vT=($,w)=>()=>($&&(w=$($=0)),w),gG,$5,x1,OY,w5,vH,cH,CG,oX,nW,k0,o,iH,QG,mH,yG,gH,dH,xW,lH,LG,OG,PW,nH,pH,rH,tH,eX,Y5,aH,D0,sH,oH,_G,$8,pW,R0,c,eH,SG,$f,ZG,wf,Yf,bW,Af,hG,kG,Xf,uW,Jf,Uf,Wf,Bf,jf,w8,A5,zf,Gf="0.15.6",$$,j8,yY,rW,tW,z8,aW,sW,LY,oW,eW,Tw,X5,J5,f$,ww,U5,W5,Kf,Ef,B5,K8,ly,C0,g,YL,Lf,AL,Of,XL,JL,iG,UL,_f,Sf,WL,mG,BL,jL,zL,GL,KL,mW,Zf,FL;var WB=t(()=>{xT=Object.defineProperty;gG={};uT(gG,{withErrorRecovery:()=>rG,tryLoadConfig:()=>xH,loadConfigWithResult:()=>kH,loadConfig:()=>eG,isRetryableError:()=>LH,isConfigNotFoundError:()=>yH,isBunfigError:()=>tG,globalPerformanceMonitor:()=>OY,globalCache:()=>x1,getEnvOrDefault:()=>OH,generateConfigTypes:()=>PH,defaultGeneratedDir:()=>W5,defaultConfigDir:()=>U5,deepMergeWithArrayStrategy:()=>XB,deepMerge:()=>aG,createLibraryConfig:()=>bH,config:()=>DH,bunfigPlugin:()=>uH,applyEnvVarsToConfig:()=>CY,TypeGenerationError:()=>sW,SchemaValidationError:()=>LY,PluginError:()=>eW,PerformanceMonitor:()=>wB,FileSystemError:()=>aW,ErrorFactory:()=>Tw,EnvVarError:()=>z8,EnvProcessor:()=>F8,ConfigValidator:()=>JB,ConfigValidationError:()=>rW,ConfigNotFoundError:()=>j8,ConfigMergeError:()=>tW,ConfigLoader:()=>UB,ConfigLoadError:()=>yY,ConfigFileLoader:()=>N8,ConfigCache:()=>$B,CacheUtils:()=>w5,BunfigError:()=>$$,BrowserConfigError:()=>oW,ArrayMergeStrategies:()=>X5});Kf=vT(async()=>{$5=import.meta.require,x1=new $B,OY=new wB,w5={createKey:FH,isEquivalent:NH,estimateMemoryUsage:qH},vH=X8(dW.cwd(),"config"),cH=X8(dW.cwd(),"src/generated"),CG=A8.env.CLARITY_LOG_DIR||lT(HH(),"logs"),oX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:CG,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},nW=await fH(),k0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},o=k0,iH=k0.red,QG=k0.green,mH=k0.yellow,yG=k0.blue,gH=k0.magenta,dH=k0.cyan,xW=k0.white,lH=k0.gray,LG=k0.bgRed,OG=k0.bgYellow,PW=k0.bold,nH=k0.dim,pH=k0.italic,rH=k0.underline,tH=k0.reset,eX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Y5={debug:"\uD83D\uDD0D",info:yG("ℹ"),success:QG("✓"),warning:OG(xW(PW(" WARN "))),error:LG(xW(PW(" ERROR ")))},aH=new U8("stacks"),D0=new U8("bunfig",{showTags:!0}),sH=d0(QY.cwd(),"config"),oH=d0(QY.cwd(),"src/generated"),_G=Y8.env.CLARITY_LOG_DIR||gT(VH(),"logs"),$8={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:_G,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},pW=await CH(),R0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},c=R0,eH=R0.red,SG=R0.green,$f=R0.yellow,ZG=R0.blue,wf=R0.magenta,Yf=R0.cyan,bW=R0.white,Af=R0.gray,hG=R0.bgRed,kG=R0.bgYellow,Xf=R0.bgGray,uW=R0.bold,Jf=R0.dim,Uf=R0.italic,Wf=R0.underline,Bf=R0.strikethrough,jf=R0.reset,w8={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},A5={debug:"\uD83D\uDD0D",info:ZG("ℹ"),success:SG("✓"),warning:kG(bW(uW(" WARN "))),error:hG(bW(uW(" ERROR ")))},zf=new B8("stacks"),$$=class extends Error{timestamp;context;constructor(w,Y={}){super(w);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Y,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let w=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Y,A])=>`${Y}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${w}`}},j8=class extends $${code="CONFIG_NOT_FOUND";constructor(w,Y,A){let X=A?` or alias "${A}"`:"";super(`Configuration "${w}"${X} not found`,{configName:w,alias:A,searchPaths:Y,searchPathCount:Y.length})}},yY=class extends $${code="CONFIG_LOAD_ERROR";constructor(w,Y,A){super(`Failed to load configuration from "${w}": ${Y.message}`,{configPath:w,configName:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},rW=class extends $${code="CONFIG_VALIDATION_ERROR";constructor(w,Y,A){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:A,validationErrors:Y,errorCount:Y.length})}},tW=class extends $${code="CONFIG_MERGE_ERROR";constructor(w,Y,A,X){super(`Failed to merge configuration from "${w}" with "${Y}": ${A.message}`,{sourcePath:w,targetPath:Y,configName:X,originalError:A.name,originalMessage:A.message});this.cause=A}},z8=class extends $${code="ENV_VAR_ERROR";constructor(w,Y,A,X){super(`Failed to parse environment variable "${w}" with value "${Y}" as ${A}`,{envKey:w,envValue:Y,expectedType:A,configName:X})}},aW=class extends $${code="FILE_SYSTEM_ERROR";constructor(w,Y,A){super(`File system ${w} failed for "${Y}": ${A.message}`,{operation:w,path:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},sW=class extends $${code="TYPE_GENERATION_ERROR";constructor(w,Y,A){super(`Failed to generate types from "${w}" to "${Y}": ${A.message}`,{configDir:w,outputPath:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},LY=class extends $${code="SCHEMA_VALIDATION_ERROR";constructor(w,Y,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:w,configName:A,validationErrors:Y,errorCount:Y.length})}},oW=class extends $${code="BROWSER_CONFIG_ERROR";constructor(w,Y,A,X){super(`Failed to fetch configuration from "${w}": ${Y} ${A}`,{endpoint:w,status:Y,statusText:A,configName:X})}},eW=class extends $${code="PLUGIN_ERROR";constructor(w,Y,A){super(`Plugin "${w}" failed during ${Y}: ${A.message}`,{pluginName:w,operation:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},Tw={configNotFound($,w,Y){return new j8($,w,Y)},configLoad($,w,Y){return new yY($,w,Y)},configValidation($,w,Y){return new rW($,w,Y)},configMerge($,w,Y,A){return new tW($,w,Y,A)},envVar($,w,Y,A){return new z8($,w,Y,A)},fileSystem($,w,Y){return new aW($,w,Y)},typeGeneration($,w,Y){return new sW($,w,Y)},schemaValidation($,w,Y){return new LY($,w,Y)},browserConfig($,w,Y,A){return new oW($,w,Y,A)},plugin($,w,Y){return new eW($,w,Y)}},X5={replace:"replace",concat:"concat",smart:"smart"},J5=/^https?:\/\//,f$=new B8("bunfig",{showTags:!0}),ww=new UB,U5=l0(Pw.cwd(),"config"),W5=l0(Pw.cwd(),"src/generated")});Ef=G8.env.CLARITY_LOG_DIR||Ff(qf(),"logs"),B5={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Ef,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},K8={...B5},ly=(async()=>{try{let{loadConfig:$}=await Kf().then(()=>gG),w=await $({name:"clarity",alias:"logging",defaultConfig:B5,cwd:G8.cwd()});if(w)Object.assign(K8,w)}catch{}return K8})();C0={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},g=C0,YL=C0.red,Lf=C0.green,AL=C0.yellow,Of=C0.blue,XL=C0.magenta,JL=C0.cyan,iG=C0.white,UL=C0.gray,_f=C0.bgRed,Sf=C0.bgYellow,WL=C0.bgGray,mG=C0.bold,BL=C0.dim,jL=C0.italic,zL=C0.underline,GL=C0.strikethrough,KL=C0.reset,mW={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Zf={debug:"\uD83D\uDD0D",info:Of("ℹ"),success:Lf("✓"),warning:Sf(iG(mG(" WARN "))),error:_f(iG(mG(" ERROR ")))};FL=new bw("stacks")});var b1={};Gj(b1,{shouldReusePort:()=>P1,safeStringify:()=>R$,safeDeleteFile:()=>GB,resolvePathRewrite:()=>zB,redactSensitive:()=>q8,isValidRootCA:()=>jB,isSingleProxyOptions:()=>SY,isSingleProxyConfig:()=>bf,isProcessElevated:()=>E8,isMultiProxyOptions:()=>vw,isMultiProxyConfig:()=>K5,getSudoPassword:()=>uw,getPrimaryDomain:()=>T8,extractHostname:()=>Pf,execSudoSync:()=>_Y,debugLog:()=>N});import{execSync as BB}from"node:child_process";import*as G5 from"node:fs/promises";function uw(){return process.env.SUDO_PASSWORD}function E8(){if(process.platform==="win32")return!1;try{return typeof process.getuid==="function"&&process.getuid()===0}catch{return!1}}function _Y($){if(E8())return BB($,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});let w=uw(),Y=$.replace(/'/g,"'\\''");if(w)return BB(`echo '${w}' | sudo -S sh -c '${Y}' 2>/dev/null`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});try{return BB(`sudo -n sh -c '${Y}'`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{throw Error("sudo required but no cached credentials (set SUDO_PASSWORD in .env or run sudo -v)")}}function N($,w,Y){if(Y)hf.debug(`[rpx:${$}] ${w}`)}function P1(){let $=process.env.RPX_REUSE_PORT;return $==="1"||$==="true"}function xf($){let w=$.toLowerCase();return kf.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function q8($){if(Array.isArray($))return $.map((Y)=>q8(Y));if(typeof $==="string")return Df.test($)?z5:$;if(!$||typeof $!=="object")return $;let w={};for(let[Y,A]of Object.entries($)){if(xf(Y)){w[Y]=z5;continue}w[Y]=q8(A)}return w}function R$($,w){return JSON.stringify(q8($),null,w)}function Pf($){if(vw($))return $.proxies.map((w)=>{let Y=w.to||"stacks.localhost";return Y.startsWith("http")?new URL(Y).hostname:Y});if(SY($)){let w=$.to||"stacks.localhost";return[w.startsWith("http")?new URL(w).hostname:w]}return["stacks.localhost"]}function jB($){return typeof $==="object"&&$!==null&&"certificate"in $&&"privateKey"in $&&typeof $.certificate==="string"&&typeof $.privateKey==="string"}function T8($){if(!$)return"stacks.localhost";if(vw($)&&$.proxies.length>0)return $.proxies[0].to||"stacks.localhost";if(SY($))return $.to||"stacks.localhost";return"stacks.localhost"}function K5($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}function vw($){return"proxies"in $&&Array.isArray($.proxies)}function SY($){return"to"in $&&typeof $.to==="string"}function bf($){return!!($&&("to"in $)&&!("proxies"in $))}function zB($,w){if(!w||w.length===0)return null;for(let Y of w)if($===Y.from||$.startsWith(`${Y.from}/`)){let A=Y.to.startsWith("http")?new URL(Y.to).host:Y.to,X=Y.stripPrefix===!0?$.slice(Y.from.length)||"/":$;return{targetHost:A,targetPath:X}}return null}async function GB($,w){try{await G5.unlink($),N("certificates",`Successfully deleted: ${$}`,w)}catch(Y){if(Y.code!=="ENOENT")N("certificates",`Warning: Could not delete ${$}: ${Y}`,w)}}var hf,z5="[redacted]",kf,Df;var X0=t(()=>{WB();hf=new bw("rpx",{showTags:!1});kf=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),Df=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/});import{execSync as H8}from"node:child_process";import{homedir as uf}from"node:os";import{join as vf}from"node:path";function f8(){return vf(uf(),"Library/Keychains/login.keychain-db")}function FB(){return[v1,f8()]}function F5($,w=KB){let Y=H8(`security find-certificate -a -c "${w}" -Z "${$}" 2>/dev/null || true`,{encoding:"utf8"}),A=[];for(let X of Y.split(`
182
+ `)){let J=X.match(/SHA-256 hash:\s*([A-F0-9]+)/i);if(J)A.push(J[1].toUpperCase())}return A}function NB($){if(process.platform!=="darwin")return;let w=xw($.caPath);if(!w)return;let Y=$.commonName??KB,A=$.keychains??FB();for(let X of A)for(let J of F5(X,Y)){if(J===w)continue;try{if(X.startsWith("/Library"))_Y(`security delete-certificate -Z ${J} "${X}"`);else H8(`security delete-certificate -Z ${J} "${X}"`,{stdio:"ignore"});N("ssl",`Removed stale Root CA ${J} from ${X}`,$.verbose)}catch{}}}function qB($,w,Y){if(process.platform!=="darwin")return R8($,Y);try{let X=H8(`security verify-cert -c "${$}" -s "${w}" -l -L -R ssl 2>&1`,{encoding:"utf8"}).includes("successful");return N("ssl",`verify-cert ${w}: ${X?"trusted":"not trusted"}`,Y?.verbose),X}catch{return!1}}function R8($,w){let Y=xw($);if(!Y)return!1;for(let A of FB())try{let X=H8(`security find-certificate -a -Z "${A}" 2>/dev/null || true`,{encoding:"utf8"});for(let J of X.split(`
183
+ `))if(J.toUpperCase().includes("SHA-256")){if(J.split("=").pop().replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase()===Y)return N("ssl",`Root CA fingerprint found in ${A}`,w?.verbose),!0}}catch{}return!1}var u1="-d -r trustRoot -p ssl -p basic",v1="/Library/Keychains/System.keychain",KB="rpx.localhost";var EB=t(()=>{vX();X0()});import{execSync as TB}from"node:child_process";import G0 from"node:fs/promises";import*as HB from"node:os";import{homedir as c1}from"node:os";import*as E5 from"node:path";import{join as K0}from"node:path";import*as Hw from"node:process";function fB($,w){return[...new Set($.filter(Boolean))].map((Y)=>({serverName:Y,cert:w.cert,key:w.key}))}function RB($,w,Y){let A=K0(c1(),".stacks","ssl"),X=[...new Set([w,...$,"rpx.localhost"])];return{https:{certPath:M8,keyPath:K0(A,"rpx.localhost.key"),caCertPath:K0(A,"rpx.localhost.ca.crt"),commonName:w},verbose:Y,regenerateUntrustedCerts:!0,proxies:X.map((J)=>({from:"localhost:1",to:J,cleanUrls:!1}))}}function T5($){return{caCertPath:K0($,mf),caKeyPath:K0($,gf)}}async function df($,w){try{let[Y,A]=await Promise.all([G0.readFile($.caCertPath,"utf8"),G0.readFile($.caKeyPath,"utf8")]);if(!Y.includes("-----BEGIN CERTIFICATE-----")||!A.includes("PRIVATE KEY-----"))return N("ssl",`Root CA files at ${$.caCertPath} look malformed, will regenerate`,w),null;return{certificate:Y,privateKey:A}}catch(Y){return N("ssl",`No existing Root CA at ${$.caCertPath} (${Y.code||Y}), will create one`,w),null}}function N5($){let w=new Set;w.add($);let Y=$.split(".");if(Y.length>=2)w.add(`*.${Y.slice(1).join(".")}`);return Array.from(w)}function H5($){let Y=T8($).replace(/\*/g,"wildcard"),A=K0(c1(),".stacks","ssl"),X=A;if(typeof $?.https==="object")return X=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:A,{caCertPath:$.https.caCertPath||K0(X,`${Y}.ca.crt`),certPath:$.https.certPath||K0(X,`${Y}.crt`),keyPath:$.https.keyPath||K0(X,`${Y}.key`)};return{caCertPath:K0(X,`${Y}.ca.crt`),certPath:K0(X,`${Y}.crt`),keyPath:K0(X,`${Y}.key`)}}function q5($){let w=new Set;if(vw($))$.proxies.forEach((Y)=>{let A=Y.to||"rpx.localhost";N5(A).forEach((X)=>w.add(X))});else if(SY($)){let Y=$.to||"rpx.localhost";N5(Y).forEach((A)=>w.add(A))}else w.add("rpx.localhost");return w.add("localhost"),w.add("*.localhost"),w}async function i1($){if(fw&&!$.forceRegenerate){N("ssl","Using cached SSL configuration",$.verbose);return}I8();let w=vw($)?$.proxies.map((z)=>z.to):[$.to];N("ssl",`Generating certificate for domains: ${w.join(", ")}`,$.verbose);let Y=ZY($,$.verbose),A=Y.basePath||K0(c1(),".stacks","ssl");await G0.mkdir(A,{recursive:!0});let X=T5(A),J=await df(X,$.verbose),U=!1;if(!J){if($.verbose)R.info("Generating Root CA certificate (one-time)...");J=await qW(Y);try{await Promise.all([G0.writeFile(X.caCertPath,J.certificate),G0.writeFile(X.caKeyPath,J.privateKey,{mode:384})]),U=!0,N("ssl",`Persisted Root CA at ${X.caCertPath}`,$.verbose)}catch(z){throw N("ssl",`Error saving Root CA files: ${z}`,$.verbose),Error(`Failed to save Root CA files: ${z}`)}}else N("ssl",`Reusing existing Root CA from ${X.caCertPath}`,$.verbose);if($.verbose)R.info(`Generating host certificate for: ${w.join(", ")}`);let B=await EW({...Y,rootCA:{certificate:J.certificate,privateKey:J.privateKey}});try{await Promise.all([G0.writeFile(Y.certPath,B.certificate),G0.writeFile(Y.keyPath,B.privateKey),G0.writeFile(Y.caCertPath,J.certificate)]),N("ssl","Certificate files saved successfully",$.verbose)}catch(z){throw N("ssl",`Error saving certificate files: ${z}`,$.verbose),Error(`Failed to save certificate files: ${z}`)}if(U?!1:await R5(X.caCertPath,{verbose:$.verbose,regenerateUntrustedCerts:!0})){if(N("ssl","Root CA already trusted, skipping trust store update",$.verbose),$.verbose)R.success("Root CA is already trusted in system trust store");if(fw={key:B.privateKey,cert:B.certificate,ca:J.certificate},$.verbose)R.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);return}if($.verbose)R.info("Adding certificate to system trust store (may require sudo permission)...");let j=!1;if(Hw.platform==="darwin")try{NB({caPath:X.caCertPath,verbose:$.verbose});let z=f8();try{TB(`security add-trusted-cert ${u1} -k "${z}" "${X.caCertPath}"`,{stdio:"ignore"})}catch{}if(_Y(`security add-trusted-cert ${u1} -k ${v1} "${X.caCertPath}"`),$.verbose)R.success("Successfully added Root CA to system trust store");j=!0;let G=K0(A,"trust-rpx-cert.sh"),K=`#!/bin/bash
184
184
  echo "Trusting RPX Root CA"
185
- sudo security add-trusted-cert ${P1} -k ${b1} "${X.caCertPath}"
185
+ sudo security add-trusted-cert ${u1} -k ${v1} "${X.caCertPath}"
186
186
  echo "Root CA trusted! Please restart your browser."
187
187
  echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
188
- `;await G0.writeFile(G,F,{mode:493})}catch(z){if($.verbose)R.warn(`Could not add Root CA to trust store automatically: ${z}`);let G=F0(A,"trust-rpx-cert.sh"),F=`#!/bin/bash
188
+ `;await G0.writeFile(G,K,{mode:493})}catch(z){if($.verbose)R.warn(`Could not add Root CA to trust store automatically: ${z}`);let G=K0(A,"trust-rpx-cert.sh"),K=`#!/bin/bash
189
189
  echo "Trusting RPX Root CA"
190
- sudo security add-trusted-cert ${P1} -k ${b1} "${X.caCertPath}"
190
+ sudo security add-trusted-cert ${u1} -k ${v1} "${X.caCertPath}"
191
191
  echo "Root CA trusted! Please restart your browser."
192
192
  echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
193
- `;if(await G0.writeFile(G,F,{mode:493}),$.verbose)R.info(`Created a trust helper script at: ${G}`),R.info(`If you're still having certificate issues, run: sh ${G}`)}else if(qw.platform==="linux")try{let{exec:z}=await import("node:child_process"),G="/usr/local/share/ca-certificates/rpx",F=`
193
+ `;if(await G0.writeFile(G,K,{mode:493}),$.verbose)R.info(`Created a trust helper script at: ${G}`),R.info(`If you're still having certificate issues, run: sh ${G}`)}else if(Hw.platform==="linux")try{let{exec:z}=await import("node:child_process"),G="/usr/local/share/ca-certificates/rpx",K=`
194
194
  mkdir -p "/usr/local/share/ca-certificates/rpx" 2>/dev/null || true
195
195
  cp "${X.caCertPath}" "/usr/local/share/ca-certificates/rpx/"
196
196
  update-ca-certificates
197
197
  echo "RPX Root CA installed. Please restart your browser."
198
- `,K=F0(WB.tmpdir(),`rpx-trust-${Date.now()}.sh`);await G0.writeFile(K,F,{mode:493}),await new Promise((q)=>{z(`sudo bash "${K}"`,(f)=>{if(f){if($.verbose)R.warn(`Could not trust certificates: ${f}`);q(!1)}else{if($.verbose)R.success("Successfully added certificates to system trust store");q(!0)}})}),await G0.unlink(K).catch(()=>{}),j=!0}catch(z){if($.verbose)R.warn(`Failed to trust certificates: ${z}`)}else if(qw.platform==="win32")try{let z=`
198
+ `,F=K0(HB.tmpdir(),`rpx-trust-${Date.now()}.sh`);await G0.writeFile(F,K,{mode:493}),await new Promise((T)=>{z(`sudo bash "${F}"`,(q)=>{if(q){if($.verbose)R.warn(`Could not trust certificates: ${q}`);T(!1)}else{if($.verbose)R.success("Successfully added certificates to system trust store");T(!0)}})}),await G0.unlink(F).catch(()=>{}),j=!0}catch(z){if($.verbose)R.warn(`Failed to trust certificates: ${z}`)}else if(Hw.platform==="win32")try{let z=`
199
199
  $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("${X.caCertPath.replace(/\//g,"\\")}")
200
200
  $store = New-Object System.Security.Cryptography.X509Certificates.X509Store("ROOT", "LocalMachine")
201
201
  $store.Open("ReadWrite")
202
202
  $store.Add($cert)
203
203
  $store.Close()
204
204
  Write-Host "Root CA trusted successfully!"
205
- `,G=F0(WB.tmpdir(),"rpx-trust.ps1");if(await G0.writeFile(G,z),UB(`powershell -ExecutionPolicy Bypass -File "${G}"`),$.verbose)R.success("Successfully added certificate to Windows trust store");j=!0}catch(z){if($.verbose)R.warn(`Could not trust certificate: ${z}`)}else try{await BW(B,J.certificate,Y),j=!0}catch(z){if($.verbose)R.warn(`Could not add certificate to trust store: ${z}`)}if(Ew={key:B.privateKey,cert:B.certificate,ca:J.certificate},$.verbose)R.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);if(!j&&$.verbose)R.warn('If you see certificate warnings in Chrome/Arc, type "thisisunsafe" on the warning page'),R.warn("This will bypass the warning and you should only need to do it once")}function q8(){Ew=null}async function e$($){if(!$)return null;if(Ew)return Ew;let w=LY($);try{let[Y,A,X]=await Promise.all([G0.access(w.keyPath).then(()=>!0).catch(()=>!1),G0.access(w.certPath).then(()=>!0).catch(()=>!1),w.caCertPath?G0.access(w.caCertPath).then(()=>!0).catch(()=>!1):Promise.resolve(!1)]);if(!Y||!A)return N("ssl",`Certificate files don't exist: key=${Y}, cert=${A}, paths: ${w.keyPath}, ${w.certPath}`,$.verbose),null;let J="regenerateUntrustedCerts"in $,U=$.regenerateUntrustedCerts,B=J?U!==!1:!0;N("ssl",`Trust check: hasFlag=${J}, flagValue=${U}, shouldCheckTrust=${B}`,$.verbose);let W=w.basePath||F0(u1(),".stacks","ssl"),j=U5(W);if(!(B?await j5(j.caCertPath,$):!0))return N("ssl","Root CA exists but is not trusted, will regenerate",$.verbose),null;let[G,F,K]=await Promise.all([G0.readFile(w.keyPath,"utf8"),G0.readFile(w.certPath,"utf8"),X&&w.caCertPath?G0.readFile(w.caCertPath,"utf8"):Promise.resolve(void 0)]);if(K&&!K.includes("-----BEGIN CERTIFICATE-----"))return N("ssl","Invalid root CA certificate content, will regenerate",$.verbose),null;if(Pw($))try{let{X509Certificate:q}=await import("node:crypto"),E=new q(F).subjectAltName||"",M=$.proxies.map((y)=>y.to).filter((y)=>!E.includes(`DNS:${y}`));if(M.length>0)return N("ssl",`Certificate missing SANs for: ${M.join(", ")}, will regenerate`,$.verbose),null}catch(q){N("ssl",`Could not verify cert SANs: ${q}`,$.verbose)}return N("ssl","Successfully loaded existing certificates",$.verbose),Ew={key:G,cert:F,ca:K},Ew}catch(Y){return N("ssl",`Error checking existing certificates: ${Y}`,$.verbose),null}}function LY($,w){let Y=G8($);N("ssl",`Primary domain: ${Y}`,w);let A=W5($),X=F0(u1(),".stacks","ssl");if(typeof $.https==="object"){let J=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:X,U={domain:Y,hostCertCN:Y,basePath:J,caCertPath:$.https.caCertPath||A.caCertPath,certPath:$.https.certPath||A.certPath,keyPath:$.https.keyPath||A.keyPath,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:$.https.commonName||Y,organizationName:$.https.organizationName||"Local Development",countryName:$.https.countryName||"US",stateName:$.https.stateName||"California",localityName:$.https.localityName||"Playa Vista",validityDays:$.https.validityDays||825,verbose:w||!1,subjectAltNames:Array.from(X5($)).map((B)=>({type:2,value:B}))};if(oW($.https.rootCA))U.rootCA=$.https.rootCA;return U}return{domain:Y,hostCertCN:Y,basePath:X,...A,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:Y,organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",validityDays:825,verbose:w||!1,subjectAltNames:Array.from(X5($)).map((J)=>({type:2,value:J}))}}async function B5($,w){let Y=W5({to:$,verbose:w}),A=[Y.caCertPath,Y.certPath,Y.keyPath];N("certificates","Attempting to clean up relating certificates",w),await Promise.all(A.map((X)=>$B(X,w)))}async function j5($,w){try{if(N("ssl",`Checking if certificate is trusted: ${$}`,w?.verbose),qw.platform==="darwin"){if(w?.serverName)return XB($,w.serverName,{verbose:w?.verbose});return N8($,{verbose:w?.verbose})}else if(qw.platform==="win32")try{let Y=KW($)||"";if(!Y)return N("ssl","Could not extract certificate subject",w?.verbose),!1;let A=`powershell -Command "Get-ChildItem -Path Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -like '*${Y}*' } | Select-Object Subject"`;if(UB(A).toString().includes(Y))return N("ssl","Certificate found in trusted root store",w?.verbose),!0;return N("ssl","Certificate not found in trusted root store",w?.verbose),!1}catch(Y){return N("ssl",`Error checking certificate trust on Windows: ${Y}`,w?.verbose),!1}else if(qw.platform==="linux")try{let Y=Zw($);if(!Y)return N("ssl","Could not extract certificate fingerprint",w?.verbose),!1;let A=["/etc/ssl/certs","/etc/pki/tls/certs"];for(let X of A){let J;try{J=await G0.readdir(X)}catch{continue}for(let U of J){let B=Zw(J5.join(X,U));if(B&&B===Y)return N("ssl",`Certificate fingerprint found in ${X}`,w?.verbose),!0}}return N("ssl","Certificate not found in system trust stores",w?.verbose),!1}catch(Y){return N("ssl",`Error checking certificate trust on Linux: ${Y}`,w?.verbose),!1}return N("ssl",`Platform ${qw.platform} not supported for certificate trust check`,w?.verbose),!1}catch(Y){return N("ssl",`Error checking if certificate is trusted: ${Y}`,w?.verbose),!1}}var Ew=null,f8,ST="rpx-root-ca.crt",hT="rpx-root-ca.key";var E8=o(()=>{hX();u$();FW();JB();X0();JB();kX();kX();f8=F0(u1(),".stacks","ssl","rpx.localhost.crt")});import{createHash as G5,timingSafeEqual as z5}from"node:crypto";import{readFileSync as kT}from"node:fs";function OY($,w){let Y=Buffer.from($,"utf8"),A=Buffer.from(w,"utf8");if(Y.length!==A.length)return z5(Y,Y),!1;return z5(Y,A)}function xT($,w){let Y=(F)=>G5("md5").update(F).digest(),A=Buffer.from($,"utf8"),X=Buffer.from(w,"utf8"),J=Y(Buffer.concat([A,X,A])),U=[A,Buffer.from("$apr1$","utf8"),X];for(let F=A.length;F>0;F-=16)U.push(J.subarray(0,Math.min(F,16)));for(let F=A.length;F>0;F>>=1)U.push(F&1?Buffer.from([0]):A.subarray(0,1));let B=Y(Buffer.concat(U));for(let F=0;F<1000;F++){let K=[];if(K.push(F&1?A:B.subarray(0,16)),F%3)K.push(X);if(F%7)K.push(A);K.push(F&1?B.subarray(0,16):A),B=Y(Buffer.concat(K))}let W="./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",j=(F,K)=>{let q="",f=F;for(let E=0;E<K;E++)q+=W[f&63],f>>=6;return q},z=B,G="";return G+=j(z[0]<<16|z[6]<<8|z[12],4),G+=j(z[1]<<16|z[7]<<8|z[13],4),G+=j(z[2]<<16|z[8]<<8|z[14],4),G+=j(z[3]<<16|z[9]<<8|z[15],4),G+=j(z[4]<<16|z[10]<<8|z[5],4),G+=j(z[11],2),`$apr1$${w}$${G}`}function PT($,w){if(/^\$2[aby]?\$/.test(w))try{return Bun.password.verifySync($,w)}catch{return!1}if(w.startsWith("$apr1$")){let A=w.split("$")[2]??"";return OY(xT($,A),w)}if(w.startsWith("{SHA}")){let Y=G5("sha1").update($,"utf8").digest("base64");return OY(`{SHA}${Y}`,w)}return OY($,w)}function bT($){let w=new Map;for(let Y of $.split(`
206
- `)){let A=Y.trim();if(!A||A.startsWith("#"))continue;let X=A.indexOf(":");if(X<=0)continue;w.set(A.slice(0,X),A.slice(X+1))}return w}function v1($){if(!$)return;let w=($.realm??"").trim()||"Restricted",Y=[];if($.username)Y.push({username:$.username,password:$.password??""});for(let J of $.users??[])if(J?.username)Y.push({username:J.username,password:J.password??""});let A;if($.htpasswdFile)try{A=bT(kT($.htpasswdFile,"utf8"))}catch{A=void 0}if(Y.length===0&&(!A||A.size===0))return;return{realm:w,verify:(J,U)=>{let B=!1;for(let W of Y)if(OY(J,W.username)&&OY(U,W.password))B=!0;if(A){let W=A.get(J);if(W&&PT(U,W))B=!0}return B}}}function F5($,w,Y){if(w.startsWith(DT))return;let A=$.headers.get("authorization")??"",X=A.indexOf(" "),J=X===-1?A:A.slice(0,X),U=X===-1?"":A.slice(X+1).trim();if(J.toLowerCase()==="basic"&&U){let W="";try{W=Buffer.from(U,"base64").toString("utf8")}catch{W=""}let j=W.indexOf(":");if(j>=0&&Y.verify(W.slice(0,j),W.slice(j+1)))return}let B=Y.realm.replace(/["\\]/g,"");return new Response("401 Unauthorized",{status:401,headers:{"www-authenticate":`Basic realm="${B}", charset="UTF-8"`,"content-type":"text/plain; charset=utf-8"}})}var DT="/.well-known/acme-challenge/";var _Y=()=>{};function vT($){return cT.has($.toUpperCase())}function iT(){let $=Number.parseInt(process.env.RPX_QUEUE_WAIT_MS??"",10);return Number.isFinite($)&&$>0?$:30000}function mT($){let w=Number.parseInt(process.env.RPX_MAX_QUEUED??"",10);return Number.isFinite(w)&&w>0?w:$*8}function gT(){let $=Number.parseInt(process.env.RPX_CHECKOUT_IDLE_MS??"",10);return Number.isFinite($)&&$>0?$:0}function lT(){let $=Number.parseInt(process.env.RPX_UPSTREAM_TIMEOUT??"",10);return Number.isFinite($)&&$>0?$:0}function dT(){let $=Number.parseInt(process.env.RPX_MAX_UPSTREAM_CONNS??"",10);return Number.isFinite($)&&$>0?$:256}class E5{socket=null;buf=new Uint8Array(nT);len=0;pos=0;closed=!1;fresh=!0;timedOut=!1;idleSince=0;bodyQueue=null;bodyRemaining=0;queuedBytes=0;streamingBody=!1;paused=!1;lastActivityAt=0;waiter=null;drainWaiter=null;async writeAll($){let w=this.socket,Y=w.write($);while(Y<$.length){if(this.closed)throw H8;await new Promise((A)=>{this.drainWaiter=A}),Y+=w.write($.subarray(Y))}}wakeDrain(){let $=this.drainWaiter;if($)this.drainWaiter=null,$()}push($){if(this.bodyQueue){let w=$.length<=this.bodyRemaining?$.length:this.bodyRemaining;if(w>0)this.bodyQueue.push($.slice(0,w)),this.queuedBytes+=w;if(this.bodyRemaining-=w,w<$.length)this.appendToBuf($.subarray(w));this.maybePause(),this.lastActivityAt=Date.now(),this.wake();return}this.appendToBuf($),this.maybePause(),this.lastActivityAt=Date.now(),this.wake()}bufferedBodyBytes(){return this.bodyQueue?this.queuedBytes:this.len-this.pos}maybePause(){if(this.streamingBody&&!this.paused&&this.bufferedBodyBytes()>pT)this.paused=!0,this.socket?.pause?.()}resumeIfDrained(){if(this.lastActivityAt=Date.now(),this.paused&&this.bufferedBodyBytes()<=rT)this.paused=!1,this.socket?.resume?.()}clearStreaming(){if(this.streamingBody=!1,this.queuedBytes=0,this.paused)this.paused=!1,this.socket?.resume?.()}appendToBuf($){let w=this.len+$.length;if(w>this.buf.length){let Y=new Uint8Array(Math.max(this.buf.length*2,w));Y.set(this.buf.subarray(0,this.len)),this.buf=Y}this.buf.set($,this.len),this.len=w}markClosed(){this.closed=!0,this.wake(),this.wakeDrain()}markTimedOut(){this.timedOut=!0,this.markClosed()}wake(){let $=this.waiter;if($)this.waiter=null,$()}waitForData($){if(this.len>$||this.closed)return Promise.resolve();return new Promise((w)=>{this.waiter=w})}waitForBody(){if(this.bodyQueue!==null&&this.bodyQueue.length>0||this.closed)return Promise.resolve();return new Promise(($)=>{this.waiter=$})}compact(){if(this.pos===0)return;if(this.pos===this.len){this.pos=0,this.len=0;return}this.buf.copyWithin(0,this.pos,this.len),this.len-=this.pos,this.pos=0}destroy(){this.closed=!0;try{this.socket?.end()}catch{}this.socket=null}}class H5{host;port;maxTotal;key;idle=[];waiters=[];open=0;sweeper=null;queueWaitMs=iT();maxWaiters;checkoutIdleMs=gT();inUse=new Set;constructor($,w,Y,A=""){this.host=$;this.port=w;this.maxTotal=Y;this.key=A;this.maxWaiters=mT(Y)}trackCheckout($){if($.lastActivityAt=Date.now(),this.checkoutIdleMs>0)this.inUse.add($),this.ensureSweeper()}dial(){let $=new E5;return uT({hostname:this.host,port:this.port,socket:{data:(w,Y)=>$.push(Y),drain:()=>$.wakeDrain(),close:()=>$.markClosed(),end:()=>$.markClosed(),error:()=>$.markClosed(),connectError:()=>$.markClosed(),timeout:()=>$.markTimedOut()}}).then((w)=>{let Y=w;Y.setNoDelay?.(!0);let A=lT();if(A>0)Y.timeout?.(A);return $.socket=w,$})}acquireIdleSync(){while(this.idle.length){let $=this.idle.pop();if(!$.closed)return $.socket?.ref(),$.pos=0,$.len=0,this.trackCheckout($),$;this.open--}return null}async acquireOrDial(){if(this.open>=this.maxTotal){if(this.waiters.length>=this.maxWaiters)throw bw;let $=await this.waitForSlot();if($===bw)throw bw;if($)return $.pos=0,$.len=0,this.trackCheckout($),$}this.open++;try{let $=await this.dial();return this.trackCheckout($),$}catch($){throw this.open--,this.wakeWaiter(),$}}waitForSlot(){return new Promise(($)=>{let w=!1,Y=(J)=>{if(w)return;w=!0,clearTimeout(X),$(J)},A=(J)=>Y(J),X=setTimeout(()=>{let J=this.waiters.indexOf(A);if(J!==-1)this.waiters.splice(J,1);Y(bw)},this.queueWaitMs);X.unref?.(),this.waiters.push(A)})}release($){if(this.inUse.delete($),$.closed){this.open--,this.wakeWaiter();return}$.clearStreaming(),$.compact(),$.fresh=!1;let w=this.waiters.shift();if(w){$.socket?.ref(),this.trackCheckout($),w($);return}$.idleSince=Date.now(),$.socket?.unref(),this.idle.push($),this.ensureSweeper()}destroy($){this.inUse.delete($),$.destroy(),this.open--,this.wakeWaiter()}wakeWaiter(){let $=this.waiters.shift();if($)$(null)}ensureSweeper(){if(this.sweeper)return;let $=this.checkoutIdleMs>0?Math.min(zB,this.checkoutIdleMs):zB;this.sweeper=setInterval(()=>this.sweep(),$),this.sweeper.unref?.()}sweep(){let $=Date.now(),w=$-zB;if(this.idle.length){let Y=[];for(let A of this.idle)if(A.closed||A.idleSince<=w)A.destroy(),this.open--;else Y.push(A);this.idle=Y}if(this.checkoutIdleMs>0&&this.inUse.size){let Y=$-this.checkoutIdleMs;for(let A of this.inUse)if(!A.closed&&A.lastActivityAt>0&&A.lastActivityAt<=Y)A.markTimedOut()}if(this.idle.length===0&&this.inUse.size===0&&this.sweeper){if(clearInterval(this.sweeper),this.sweeper=null,this.key&&T8.get(this.key)===this)T8.delete(this.key)}}}function eT($,w){let Y=T8.get($);if(!Y){let A=$.lastIndexOf(":"),X=A===-1?$:$.slice(0,A),J=A===-1?80:Number($.slice(A+1));Y=new H5(X,J,w,$),T8.set($,Y)}return Y}function K5($,w,Y){for(let A=Y+3;A<w;A++)if($[A]===10&&$[A-1]===13&&$[A-2]===10&&$[A-3]===13)return A-3;return-1}function $R($,w,Y){let A=q5.decode($.subarray(w,Y)),X=A.indexOf(`\r
207
- `),J=X===-1?A:A.slice(0,X),U=J.indexOf(" "),B=Number.parseInt(J.slice(U+1,U+5),10),W=J.startsWith("HTTP/1.0"),j=[],z=-1,G=!1,F=W,K=!1,q=!1,f=X===-1?A.length:X+2;while(f<A.length){let E=A.indexOf(`\r
208
- `,f);if(E===-1)E=A.length;let H=A.slice(f,E);if(f=E+2,H==="")continue;let M=H.indexOf(":");if(M===-1)continue;let y=H.slice(0,M),Q=H.slice(M+1).trim(),T=y.charCodeAt(0)|32;if(T===99||T===116||T===107){let I=y.toLowerCase();if(I==="content-length"){let _=/^\d+$/.test(Q)?Number(Q):Number.NaN;if(!Number.isSafeInteger(_)||z>=0&&z!==_)q=!0;else z=_;continue}if(I==="transfer-encoding"){if(Q.toLowerCase().includes("chunked"))G=!0;continue}if(I==="connection"){let _=Q.toLowerCase();if(_.includes("close"))F=!0;if(_.includes("keep-alive"))K=!0;continue}if(I==="keep-alive")continue}j.push([y,Q])}if(W&&K)F=!1;if(G&&z>=0)z=-1;return{status:B,headerEnd:Y,headers:j,contentLength:z,chunked:G,closeConn:F,malformed:q}}function wR($,w){return w||$===204||$===304}async function T5($){let{hostPort:w,method:Y,path:A,reqHeaders:X,forwardedHost:J,originOverride:U,body:B}=$,W=Y==="HEAD";if(X.get("expect")||X.get("upgrade"))throw SY;let j=null;if(B){let K=X.get("content-length"),q=K?Number.parseInt(K,10):Number.NaN;if(Number.isNaN(q)||q>N5)throw SY;if(j=await BR(B),j===null)throw SY}let z=WR(Y,A,X,w,J,U,j),G=z;if(j&&j.length)G=new Uint8Array(z.length+j.length),G.set(z),G.set(j,z.length);let F=eT(w,$.maxPerHost??dT());for(let K=0;;K++){if(K>0)await new Promise((f)=>{setTimeout(f,K)});let q;try{q=F.acquireIdleSync()??await F.acquireOrDial()}catch(f){if(f!==bw&&K<4)continue;throw f}try{let f=q.socket.write(G);if(f<G.length)await q.writeAll(G.subarray(f));return await AR(F,q,W)}catch(f){let E=f===H8&&K<4&&(q.fresh||vT(Y));if(F.destroy(q),E)continue;if(f===H8)throw Error("upstream closed connection");throw f}}}async function YR($){let w=K5($.buf,$.len,$.pos);while(w===-1){if($.closed){if($.timedOut)throw GB;if($.len===$.pos)throw H8;throw Error("upstream closed mid-header")}if($.len-$.pos>f5)throw Error("upstream header block too large");await $.waitForData($.len),w=K5($.buf,$.len,$.pos)}return w}async function AR($,w,Y){let A;for(;;){let J=await YR(w);if(A=$R(w.buf,w.pos,J),w.pos=J+4,A.status>=100&&A.status<200)continue;break}if(A.malformed)throw $.destroy(w),Error("upstream sent malformed response framing");let X=A.headers;if(wR(A.status,Y))return R5($,w,A.closeConn),new Response(null,{status:A.status,headers:X});if(A.chunked)return new Response(UR($,w,A.closeConn),{status:A.status,headers:X});if(A.contentLength>=0){if(w.len-w.pos>=A.contentLength){let U=w.pos+A.contentLength,B=w.len>U,W=null;if(A.contentLength>=tT)W=w.buf.subarray(w.pos,U),w.buf=new Uint8Array(aT);else if(A.contentLength>0)W=w.buf.slice(w.pos,U);if(w.pos=0,w.len=0,A.closeConn||B)$.destroy(w);else $.release(w);return new Response(W,{status:A.status,headers:X})}return new Response(XR($,w,A.contentLength,A.closeConn),{status:A.status,headers:X})}return new Response(JR(w),{status:A.status,headers:X})}function R5($,w,Y){if(Y||w.pos!==w.len)$.destroy(w);else $.release(w)}function XR($,w,Y,A){let X=w.len-w.pos,J=X>0?w.buf.slice(w.pos,w.len):null;w.pos=0,w.len=0,w.bodyQueue=[],w.bodyRemaining=Y-X,w.queuedBytes=0,w.streamingBody=!0;let U=(B)=>{if(w.bodyQueue=null,A||w.len>0)$.destroy(w);else $.release(w);B.close()};return new ReadableStream({start(B){if(J)B.enqueue(J);if(w.bodyRemaining===0&&w.bodyQueue.length===0)U(B)},async pull(B){for(;;){let W=w.bodyQueue;if(W&&W.length>0){let j=W.shift();if(w.queuedBytes-=j.length,w.resumeIfDrained(),B.enqueue(j),w.bodyRemaining===0&&W.length===0)U(B);return}if(w.bodyRemaining===0){if(w.bodyQueue)U(B);return}if(w.closed){w.bodyQueue=null,$.destroy(w),B.error(Error("upstream closed mid-body"));return}await w.waitForBody()}},cancel(){w.bodyQueue=null,$.destroy(w)}})}function JR($){return $.streamingBody=!0,new ReadableStream({async pull(w){for(;;){if($.len>$.pos){w.enqueue($.buf.slice($.pos,$.len)),$.pos=$.len,$.resumeIfDrained();return}if($.closed){$.destroy(),w.close();return}await $.waitForData($.len)}},cancel(){$.destroy()}})}function UR($,w,Y){w.streamingBody=!0;let A=0,X=!1;async function J(){for(;;){for(let U=w.pos;U+1<w.len;U++)if(w.buf[U]===13&&w.buf[U+1]===10){let B=q5.decode(w.buf.subarray(w.pos,U));return w.pos=U+2,B}if(w.closed)throw Error("upstream closed mid-chunk-header");if(w.len-w.pos>f5)throw Error("upstream chunk header too large");await w.waitForData(w.len)}}return new ReadableStream({async pull(U){for(;;){if(A>0){if(w.len===w.pos){if(w.closed){$.destroy(w),U.error(Error("upstream closed mid-chunk"));return}await w.waitForData(w.len);continue}let z=Math.min(A,w.len-w.pos);if(U.enqueue(w.buf.slice(w.pos,w.pos+z)),w.pos+=z,A-=z,w.resumeIfDrained(),A===0)X=!0;return}if(X)await J(),X=!1;let B=await J(),W=B.indexOf(";"),j=Number.parseInt(W===-1?B:B.slice(0,W),16);if(!Number.isInteger(j)||j<0){$.destroy(w),U.error(Error("upstream sent malformed chunk size"));return}if(j===0){for(;;)if(await J()==="")break;R5($,w,Y),U.close();return}A=j}},cancel(){$.destroy(w)}})}function WR($,w,Y,A,X,J,U){let B=`${$} ${w} HTTP/1.1\r
205
+ `,G=K0(HB.tmpdir(),"rpx-trust.ps1");if(await G0.writeFile(G,z),TB(`powershell -ExecutionPolicy Bypass -File "${G}"`),$.verbose)R.success("Successfully added certificate to Windows trust store");j=!0}catch(z){if($.verbose)R.warn(`Could not trust certificate: ${z}`)}else try{await fW(B,J.certificate,Y),j=!0}catch(z){if($.verbose)R.warn(`Could not add certificate to trust store: ${z}`)}if(fw={key:B.privateKey,cert:B.certificate,ca:J.certificate},$.verbose)R.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);if(!j&&$.verbose)R.warn('If you see certificate warnings in Chrome/Arc, type "thisisunsafe" on the warning page'),R.warn("This will bypass the warning and you should only need to do it once")}function I8(){fw=null}async function Yw($){if(!$)return null;if(fw)return fw;let w=ZY($);try{let[Y,A,X]=await Promise.all([G0.access(w.keyPath).then(()=>!0).catch(()=>!1),G0.access(w.certPath).then(()=>!0).catch(()=>!1),w.caCertPath?G0.access(w.caCertPath).then(()=>!0).catch(()=>!1):Promise.resolve(!1)]);if(!Y||!A)return N("ssl",`Certificate files don't exist: key=${Y}, cert=${A}, paths: ${w.keyPath}, ${w.certPath}`,$.verbose),null;let J="regenerateUntrustedCerts"in $,U=$.regenerateUntrustedCerts,B=J?U!==!1:!0;N("ssl",`Trust check: hasFlag=${J}, flagValue=${U}, shouldCheckTrust=${B}`,$.verbose);let W=w.basePath||K0(c1(),".stacks","ssl"),j=T5(W);if(!(B?await R5(j.caCertPath,$):!0))return N("ssl","Root CA exists but is not trusted, will regenerate",$.verbose),null;let[G,K,F]=await Promise.all([G0.readFile(w.keyPath,"utf8"),G0.readFile(w.certPath,"utf8"),X&&w.caCertPath?G0.readFile(w.caCertPath,"utf8"):Promise.resolve(void 0)]);if(F&&!F.includes("-----BEGIN CERTIFICATE-----"))return N("ssl","Invalid root CA certificate content, will regenerate",$.verbose),null;if(vw($))try{let{X509Certificate:T}=await import("node:crypto"),E=new T(K).subjectAltName||"",M=$.proxies.map((Q)=>Q.to).filter((Q)=>!E.includes(`DNS:${Q}`));if(M.length>0)return N("ssl",`Certificate missing SANs for: ${M.join(", ")}, will regenerate`,$.verbose),null}catch(T){N("ssl",`Could not verify cert SANs: ${T}`,$.verbose)}return N("ssl","Successfully loaded existing certificates",$.verbose),fw={key:G,cert:K,ca:F},fw}catch(Y){return N("ssl",`Error checking existing certificates: ${Y}`,$.verbose),null}}function ZY($,w){let Y=T8($);N("ssl",`Primary domain: ${Y}`,w);let A=H5($),X=K0(c1(),".stacks","ssl");if(typeof $.https==="object"){let J=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:X,U={domain:Y,hostCertCN:Y,basePath:J,caCertPath:$.https.caCertPath||A.caCertPath,certPath:$.https.certPath||A.certPath,keyPath:$.https.keyPath||A.keyPath,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:$.https.commonName||Y,organizationName:$.https.organizationName||"Local Development",countryName:$.https.countryName||"US",stateName:$.https.stateName||"California",localityName:$.https.localityName||"Playa Vista",validityDays:$.https.validityDays||825,verbose:w||!1,subjectAltNames:Array.from(q5($)).map((B)=>({type:2,value:B}))};if(jB($.https.rootCA))U.rootCA=$.https.rootCA;return U}return{domain:Y,hostCertCN:Y,basePath:X,...A,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:Y,organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",validityDays:825,verbose:w||!1,subjectAltNames:Array.from(q5($)).map((J)=>({type:2,value:J}))}}async function f5($,w){let Y=H5({to:$,verbose:w}),A=[Y.caCertPath,Y.certPath,Y.keyPath];N("certificates","Attempting to clean up relating certificates",w),await Promise.all(A.map((X)=>GB(X,w)))}async function R5($,w){try{if(N("ssl",`Checking if certificate is trusted: ${$}`,w?.verbose),Hw.platform==="darwin"){if(w?.serverName)return qB($,w.serverName,{verbose:w?.verbose});return R8($,{verbose:w?.verbose})}else if(Hw.platform==="win32")try{let Y=CW($)||"";if(!Y)return N("ssl","Could not extract certificate subject",w?.verbose),!1;let A=`powershell -Command "Get-ChildItem -Path Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -like '*${Y}*' } | Select-Object Subject"`;if(TB(A).toString().includes(Y))return N("ssl","Certificate found in trusted root store",w?.verbose),!0;return N("ssl","Certificate not found in trusted root store",w?.verbose),!1}catch(Y){return N("ssl",`Error checking certificate trust on Windows: ${Y}`,w?.verbose),!1}else if(Hw.platform==="linux")try{let Y=xw($);if(!Y)return N("ssl","Could not extract certificate fingerprint",w?.verbose),!1;let A=["/etc/ssl/certs","/etc/pki/tls/certs"];for(let X of A){let J;try{J=await G0.readdir(X)}catch{continue}for(let U of J){let B=xw(E5.join(X,U));if(B&&B===Y)return N("ssl",`Certificate fingerprint found in ${X}`,w?.verbose),!0}}return N("ssl","Certificate not found in system trust stores",w?.verbose),!1}catch(Y){return N("ssl",`Error checking certificate trust on Linux: ${Y}`,w?.verbose),!1}return N("ssl",`Platform ${Hw.platform} not supported for certificate trust check`,w?.verbose),!1}catch(Y){return N("ssl",`Error checking if certificate is trusted: ${Y}`,w?.verbose),!1}}var fw=null,M8,mf="rpx-root-ca.crt",gf="rpx-root-ca.key";var V8=t(()=>{bX();i$();VW();EB();X0();EB();vX();vX();M8=K0(c1(),".stacks","ssl","rpx.localhost.crt")});function lf($){return{enabled:$?.enabled??!1,path:$?.path??"/",interval:$?.interval??1e4,timeout:$?.timeout??2000,healthyThreshold:$?.healthyThreshold??2,unhealthyThreshold:$?.unhealthyThreshold??3}}function nf($){return(Array.isArray($)?$:[$]).map((Y)=>{let A=typeof Y==="string"?{url:Y}:Y;return{url:A.url,weight:A.weight&&A.weight>0?A.weight:1,healthy:!0,activeConnections:0,consecutiveFailures:0,consecutiveSuccesses:0}})}function Rw($){if(!$)return"localhost:5173";let w=Array.isArray($)?$[0]:$;if(!w)return"localhost:5173";return typeof w==="string"?w:w.url}function m1($,w){return{upstreams:nf($),strategy:w?.strategy??"round-robin",healthCheck:lf(w?.healthCheck),cursor:0,wrrCurrentWeights:[],healthCheckTimer:null}}function pf($){let w=$.upstreams.filter((Y)=>Y.healthy);if(w.length===0&&$.upstreams.length===1)return $.upstreams;return w}function rf($,w){let Y=$.cursor%w.length;return $.cursor=($.cursor+1)%w.length,w[Y]}function tf($,w){if($.wrrCurrentWeights.length!==w.length)$.wrrCurrentWeights=w.map(()=>0);let Y=w.reduce((X,J)=>X+J.weight,0),A=0;for(let X=0;X<w.length;X++)if($.wrrCurrentWeights[X]+=w[X].weight,$.wrrCurrentWeights[X]>$.wrrCurrentWeights[A])A=X;return $.wrrCurrentWeights[A]-=Y,w[A]}function af($){let w=$[0];for(let Y=1;Y<$.length;Y++)if($[Y].activeConnections<w.activeConnections)w=$[Y];return w}function M5($){let w=pf($);if(w.length===0)return;if(w.length===1)return w[0];switch($.strategy){case"weighted-round-robin":return tf($,w);case"least-connections":return af(w);case"round-robin":default:return rf($,w)}}function C8($,w){if(w.consecutiveFailures=0,w.consecutiveSuccesses+=1,!w.healthy&&w.consecutiveSuccesses>=$.healthCheck.healthyThreshold)w.healthy=!0}function hY($,w){if(w.consecutiveSuccesses=0,w.consecutiveFailures+=1,w.healthy&&w.consecutiveFailures>=$.healthCheck.unhealthyThreshold)w.healthy=!1}function sf($){let w=$.lastIndexOf(":");if(w===-1)return{hostname:$,port:80};let Y=Number($.slice(w+1));return{hostname:$.slice(0,w),port:Number.isFinite(Y)?Y:80}}async function of($,w){let{hostname:Y,port:A}=sf(w.url),X=new AbortController,J=setTimeout(()=>X.abort(),$.healthCheck.timeout);try{(await fetch(`http://${Y}:${A}${$.healthCheck.path}`,{signal:X.signal,redirect:"manual"})).body?.cancel().catch(()=>{}),C8($,w)}catch{hY($,w)}finally{clearTimeout(J)}}function g1($){if(!$.healthCheck.enabled||$.healthCheckTimer||$.upstreams.length<2)return;let w=setInterval(()=>{for(let Y of $.upstreams)of($,Y)},$.healthCheck.interval);w.unref?.(),$.healthCheckTimer=w}function d1($){if($.healthCheckTimer)clearInterval($.healthCheckTimer),$.healthCheckTimer=null}import{createHash as V5,timingSafeEqual as I5}from"node:crypto";import{readFileSync as ef}from"node:fs";function kY($,w){let Y=Buffer.from($,"utf8"),A=Buffer.from(w,"utf8");if(Y.length!==A.length)return I5(Y,Y),!1;return I5(Y,A)}function wR($,w){let Y=(K)=>V5("md5").update(K).digest(),A=Buffer.from($,"utf8"),X=Buffer.from(w,"utf8"),J=Y(Buffer.concat([A,X,A])),U=[A,Buffer.from("$apr1$","utf8"),X];for(let K=A.length;K>0;K-=16)U.push(J.subarray(0,Math.min(K,16)));for(let K=A.length;K>0;K>>=1)U.push(K&1?Buffer.from([0]):A.subarray(0,1));let B=Y(Buffer.concat(U));for(let K=0;K<1000;K++){let F=[];if(F.push(K&1?A:B.subarray(0,16)),K%3)F.push(X);if(K%7)F.push(A);F.push(K&1?B.subarray(0,16):A),B=Y(Buffer.concat(F))}let W="./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",j=(K,F)=>{let T="",q=K;for(let E=0;E<F;E++)T+=W[q&63],q>>=6;return T},z=B,G="";return G+=j(z[0]<<16|z[6]<<8|z[12],4),G+=j(z[1]<<16|z[7]<<8|z[13],4),G+=j(z[2]<<16|z[8]<<8|z[14],4),G+=j(z[3]<<16|z[9]<<8|z[15],4),G+=j(z[4]<<16|z[10]<<8|z[5],4),G+=j(z[11],2),`$apr1$${w}$${G}`}function YR($,w){if(/^\$2[aby]?\$/.test(w))try{return Bun.password.verifySync($,w)}catch{return!1}if(w.startsWith("$apr1$")){let A=w.split("$")[2]??"";return kY(wR($,A),w)}if(w.startsWith("{SHA}")){let Y=V5("sha1").update($,"utf8").digest("base64");return kY(`{SHA}${Y}`,w)}return kY($,w)}function AR($){let w=new Map;for(let Y of $.split(`
206
+ `)){let A=Y.trim();if(!A||A.startsWith("#"))continue;let X=A.indexOf(":");if(X<=0)continue;w.set(A.slice(0,X),A.slice(X+1))}return w}function l1($){if(!$)return;let w=($.realm??"").trim()||"Restricted",Y=[];if($.username)Y.push({username:$.username,password:$.password??""});for(let J of $.users??[])if(J?.username)Y.push({username:J.username,password:J.password??""});let A;if($.htpasswdFile)try{A=AR(ef($.htpasswdFile,"utf8"))}catch{A=void 0}if(Y.length===0&&(!A||A.size===0))return;return{realm:w,verify:(J,U)=>{let B=!1;for(let W of Y)if(kY(J,W.username)&&kY(U,W.password))B=!0;if(A){let W=A.get(J);if(W&&YR(U,W))B=!0}return B}}}function C5($,w,Y){if(w.startsWith($R))return;let A=$.headers.get("authorization")??"",X=A.indexOf(" "),J=X===-1?A:A.slice(0,X),U=X===-1?"":A.slice(X+1).trim();if(J.toLowerCase()==="basic"&&U){let W="";try{W=Buffer.from(U,"base64").toString("utf8")}catch{W=""}let j=W.indexOf(":");if(j>=0&&Y.verify(W.slice(0,j),W.slice(j+1)))return}let B=Y.realm.replace(/["\\]/g,"");return new Response("401 Unauthorized",{status:401,headers:{"www-authenticate":`Basic realm="${B}", charset="UTF-8"`,"content-type":"text/plain; charset=utf-8"}})}var $R="/.well-known/acme-challenge/";var DY=()=>{};function UR($){return JR.has($.toUpperCase())}function WR(){let $=Number.parseInt(process.env.RPX_QUEUE_WAIT_MS??"",10);return Number.isFinite($)&&$>0?$:30000}function BR($){let w=Number.parseInt(process.env.RPX_MAX_QUEUED??"",10);return Number.isFinite(w)&&w>0?w:$*8}function jR(){let $=Number.parseInt(process.env.RPX_CHECKOUT_IDLE_MS??"",10);return Number.isFinite($)&&$>0?$:0}function zR(){let $=Number.parseInt(process.env.RPX_UPSTREAM_TIMEOUT??"",10);return Number.isFinite($)&&$>0?$:0}function GR(){let $=Number.parseInt(process.env.RPX_MAX_UPSTREAM_CONNS??"",10);return Number.isFinite($)&&$>0?$:256}class _5{socket=null;buf=new Uint8Array(KR);len=0;pos=0;closed=!1;fresh=!0;timedOut=!1;idleSince=0;bodyQueue=null;bodyRemaining=0;queuedBytes=0;streamingBody=!1;paused=!1;lastActivityAt=0;waiter=null;drainWaiter=null;async writeAll($){let w=this.socket,Y=w.write($);while(Y<$.length){if(this.closed)throw Q8;await new Promise((A)=>{this.drainWaiter=A}),Y+=w.write($.subarray(Y))}}wakeDrain(){let $=this.drainWaiter;if($)this.drainWaiter=null,$()}push($){if(this.bodyQueue){let w=$.length<=this.bodyRemaining?$.length:this.bodyRemaining;if(w>0)this.bodyQueue.push($.slice(0,w)),this.queuedBytes+=w;if(this.bodyRemaining-=w,w<$.length)this.appendToBuf($.subarray(w));this.maybePause(),this.lastActivityAt=Date.now(),this.wake();return}this.appendToBuf($),this.maybePause(),this.lastActivityAt=Date.now(),this.wake()}bufferedBodyBytes(){return this.bodyQueue?this.queuedBytes:this.len-this.pos}maybePause(){if(this.streamingBody&&!this.paused&&this.bufferedBodyBytes()>FR)this.paused=!0,this.socket?.pause?.()}resumeIfDrained(){if(this.lastActivityAt=Date.now(),this.paused&&this.bufferedBodyBytes()<=NR)this.paused=!1,this.socket?.resume?.()}clearStreaming(){if(this.streamingBody=!1,this.queuedBytes=0,this.paused)this.paused=!1,this.socket?.resume?.()}appendToBuf($){let w=this.len+$.length;if(w>this.buf.length){let Y=new Uint8Array(Math.max(this.buf.length*2,w));Y.set(this.buf.subarray(0,this.len)),this.buf=Y}this.buf.set($,this.len),this.len=w}markClosed(){this.closed=!0,this.wake(),this.wakeDrain()}markTimedOut(){this.timedOut=!0,this.markClosed()}wake(){let $=this.waiter;if($)this.waiter=null,$()}waitForData($){if(this.len>$||this.closed)return Promise.resolve();return new Promise((w)=>{this.waiter=w})}waitForBody(){if(this.bodyQueue!==null&&this.bodyQueue.length>0||this.closed)return Promise.resolve();return new Promise(($)=>{this.waiter=$})}compact(){if(this.pos===0)return;if(this.pos===this.len){this.pos=0,this.len=0;return}this.buf.copyWithin(0,this.pos,this.len),this.len-=this.pos,this.pos=0}destroy(){this.closed=!0;try{this.socket?.end()}catch{}this.socket=null}}class S5{host;port;maxTotal;key;idle=[];waiters=[];open=0;sweeper=null;queueWaitMs=WR();maxWaiters;checkoutIdleMs=jR();inUse=new Set;constructor($,w,Y,A=""){this.host=$;this.port=w;this.maxTotal=Y;this.key=A;this.maxWaiters=BR(Y)}trackCheckout($){if($.lastActivityAt=Date.now(),this.checkoutIdleMs>0)this.inUse.add($),this.ensureSweeper()}dial(){let $=new _5;return XR({hostname:this.host,port:this.port,socket:{data:(w,Y)=>$.push(Y),drain:()=>$.wakeDrain(),close:()=>$.markClosed(),end:()=>$.markClosed(),error:()=>$.markClosed(),connectError:()=>$.markClosed(),timeout:()=>$.markTimedOut()}}).then((w)=>{let Y=w;Y.setNoDelay?.(!0);let A=zR();if(A>0)Y.timeout?.(A);return $.socket=w,$})}acquireIdleSync(){while(this.idle.length){let $=this.idle.pop();if(!$.closed)return $.socket?.ref(),$.pos=0,$.len=0,this.trackCheckout($),$;this.open--}return null}async acquireOrDial(){if(this.open>=this.maxTotal){if(this.waiters.length>=this.maxWaiters)throw cw;let $=await this.waitForSlot();if($===cw)throw cw;if($)return $.pos=0,$.len=0,this.trackCheckout($),$}this.open++;try{let $=await this.dial();return this.trackCheckout($),$}catch($){throw this.open--,this.wakeWaiter(),$}}waitForSlot(){return new Promise(($)=>{let w=!1,Y=(J)=>{if(w)return;w=!0,clearTimeout(X),$(J)},A=(J)=>Y(J),X=setTimeout(()=>{let J=this.waiters.indexOf(A);if(J!==-1)this.waiters.splice(J,1);Y(cw)},this.queueWaitMs);X.unref?.(),this.waiters.push(A)})}release($){if(this.inUse.delete($),$.closed){this.open--,this.wakeWaiter();return}$.clearStreaming(),$.compact(),$.fresh=!1;let w=this.waiters.shift();if(w){$.socket?.ref(),this.trackCheckout($),w($);return}$.idleSince=Date.now(),$.socket?.unref(),this.idle.push($),this.ensureSweeper()}destroy($){this.inUse.delete($),$.destroy(),this.open--,this.wakeWaiter()}wakeWaiter(){let $=this.waiters.shift();if($)$(null)}ensureSweeper(){if(this.sweeper)return;let $=this.checkoutIdleMs>0?Math.min(MB,this.checkoutIdleMs):MB;this.sweeper=setInterval(()=>this.sweep(),$),this.sweeper.unref?.()}sweep(){let $=Date.now(),w=$-MB;if(this.idle.length){let Y=[];for(let A of this.idle)if(A.closed||A.idleSince<=w)A.destroy(),this.open--;else Y.push(A);this.idle=Y}if(this.checkoutIdleMs>0&&this.inUse.size){let Y=$-this.checkoutIdleMs;for(let A of this.inUse)if(!A.closed&&A.lastActivityAt>0&&A.lastActivityAt<=Y)A.markTimedOut()}if(this.idle.length===0&&this.inUse.size===0&&this.sweeper){if(clearInterval(this.sweeper),this.sweeper=null,this.key&&y8.get(this.key)===this)y8.delete(this.key)}}}function fR($,w){let Y=y8.get($);if(!Y){let A=$.lastIndexOf(":"),X=A===-1?$:$.slice(0,A),J=A===-1?80:Number($.slice(A+1));Y=new S5(X,J,w,$),y8.set($,Y)}return Y}function Q5($,w,Y){for(let A=Y+3;A<w;A++)if($[A]===10&&$[A-1]===13&&$[A-2]===10&&$[A-3]===13)return A-3;return-1}function RR($,w,Y){let A=O5.decode($.subarray(w,Y)),X=A.indexOf(`\r
207
+ `),J=X===-1?A:A.slice(0,X),U=J.indexOf(" "),B=Number.parseInt(J.slice(U+1,U+5),10),W=J.startsWith("HTTP/1.0"),j=[],z=-1,G=!1,K=W,F=!1,T=!1,q=X===-1?A.length:X+2;while(q<A.length){let E=A.indexOf(`\r
208
+ `,q);if(E===-1)E=A.length;let H=A.slice(q,E);if(q=E+2,H==="")continue;let M=H.indexOf(":");if(M===-1)continue;let Q=H.slice(0,M),V=H.slice(M+1).trim(),f=Q.charCodeAt(0)|32;if(f===99||f===116||f===107){let I=Q.toLowerCase();if(I==="content-length"){let O=/^\d+$/.test(V)?Number(V):Number.NaN;if(!Number.isSafeInteger(O)||z>=0&&z!==O)T=!0;else z=O;continue}if(I==="transfer-encoding"){if(V.toLowerCase().includes("chunked"))G=!0;continue}if(I==="connection"){let O=V.toLowerCase();if(O.includes("close"))K=!0;if(O.includes("keep-alive"))F=!0;continue}if(I==="keep-alive")continue}j.push([Q,V])}if(W&&F)K=!1;if(G&&z>=0)z=-1;return{status:B,headerEnd:Y,headers:j,contentLength:z,chunked:G,closeConn:K,malformed:T}}function MR($,w){return w||$===204||$===304}async function Z5($){let{hostPort:w,method:Y,path:A,reqHeaders:X,forwardedHost:J,originOverride:U,body:B}=$,W=Y==="HEAD";if(X.get("expect")||X.get("upgrade"))throw xY;let j=null;if(B){let F=X.get("content-length"),T=F?Number.parseInt(F,10):Number.NaN;if(Number.isNaN(T)||T>y5)throw xY;if(j=await OR(B),j===null)throw xY}let z=LR(Y,A,X,w,J,U,j),G=z;if(j&&j.length)G=new Uint8Array(z.length+j.length),G.set(z),G.set(j,z.length);let K=fR(w,$.maxPerHost??GR());for(let F=0;;F++){if(F>0)await new Promise((q)=>{setTimeout(q,F)});let T;try{T=K.acquireIdleSync()??await K.acquireOrDial()}catch(q){if(q!==cw&&F<4)continue;throw q}try{let q=T.socket.write(G);if(q<G.length)await T.writeAll(G.subarray(q));return await VR(K,T,W)}catch(q){let E=q===Q8&&F<4&&(T.fresh||UR(Y));if(K.destroy(T),E)continue;if(q===Q8)throw Error("upstream closed connection");throw q}}}async function IR($){let w=Q5($.buf,$.len,$.pos);while(w===-1){if($.closed){if($.timedOut)throw IB;if($.len===$.pos)throw Q8;throw Error("upstream closed mid-header")}if($.len-$.pos>L5)throw Error("upstream header block too large");await $.waitForData($.len),w=Q5($.buf,$.len,$.pos)}return w}async function VR($,w,Y){let A;for(;;){let J=await IR(w);if(A=RR(w.buf,w.pos,J),w.pos=J+4,A.status>=100&&A.status<200)continue;break}if(A.malformed)throw $.destroy(w),Error("upstream sent malformed response framing");let X=A.headers;if(MR(A.status,Y))return h5($,w,A.closeConn),new Response(null,{status:A.status,headers:X});if(A.chunked)return new Response(yR($,w,A.closeConn),{status:A.status,headers:X});if(A.contentLength>=0){if(w.len-w.pos>=A.contentLength){let U=w.pos+A.contentLength,B=w.len>U,W=null;if(A.contentLength>=qR)W=w.buf.subarray(w.pos,U),w.buf=new Uint8Array(ER);else if(A.contentLength>0)W=w.buf.slice(w.pos,U);if(w.pos=0,w.len=0,A.closeConn||B)$.destroy(w);else $.release(w);return new Response(W,{status:A.status,headers:X})}return new Response(CR($,w,A.contentLength,A.closeConn),{status:A.status,headers:X})}return new Response(QR(w),{status:A.status,headers:X})}function h5($,w,Y){if(Y||w.pos!==w.len)$.destroy(w);else $.release(w)}function CR($,w,Y,A){let X=w.len-w.pos,J=X>0?w.buf.slice(w.pos,w.len):null;w.pos=0,w.len=0,w.bodyQueue=[],w.bodyRemaining=Y-X,w.queuedBytes=0,w.streamingBody=!0;let U=(B)=>{if(w.bodyQueue=null,A||w.len>0)$.destroy(w);else $.release(w);B.close()};return new ReadableStream({start(B){if(J)B.enqueue(J);if(w.bodyRemaining===0&&w.bodyQueue.length===0)U(B)},async pull(B){for(;;){let W=w.bodyQueue;if(W&&W.length>0){let j=W.shift();if(w.queuedBytes-=j.length,w.resumeIfDrained(),B.enqueue(j),w.bodyRemaining===0&&W.length===0)U(B);return}if(w.bodyRemaining===0){if(w.bodyQueue)U(B);return}if(w.closed){w.bodyQueue=null,$.destroy(w),B.error(Error("upstream closed mid-body"));return}await w.waitForBody()}},cancel(){w.bodyQueue=null,$.destroy(w)}})}function QR($){return $.streamingBody=!0,new ReadableStream({async pull(w){for(;;){if($.len>$.pos){w.enqueue($.buf.slice($.pos,$.len)),$.pos=$.len,$.resumeIfDrained();return}if($.closed){$.destroy(),w.close();return}await $.waitForData($.len)}},cancel(){$.destroy()}})}function yR($,w,Y){w.streamingBody=!0;let A=0,X=!1;async function J(){for(;;){for(let U=w.pos;U+1<w.len;U++)if(w.buf[U]===13&&w.buf[U+1]===10){let B=O5.decode(w.buf.subarray(w.pos,U));return w.pos=U+2,B}if(w.closed)throw Error("upstream closed mid-chunk-header");if(w.len-w.pos>L5)throw Error("upstream chunk header too large");await w.waitForData(w.len)}}return new ReadableStream({async pull(U){for(;;){if(A>0){if(w.len===w.pos){if(w.closed){$.destroy(w),U.error(Error("upstream closed mid-chunk"));return}await w.waitForData(w.len);continue}let z=Math.min(A,w.len-w.pos);if(U.enqueue(w.buf.slice(w.pos,w.pos+z)),w.pos+=z,A-=z,w.resumeIfDrained(),A===0)X=!0;return}if(X)await J(),X=!1;let B=await J(),W=B.indexOf(";"),j=Number.parseInt(W===-1?B:B.slice(0,W),16);if(!Number.isInteger(j)||j<0){$.destroy(w),U.error(Error("upstream sent malformed chunk size"));return}if(j===0){for(;;)if(await J()==="")break;h5($,w,Y),U.close();return}A=j}},cancel(){$.destroy(w)}})}function LR($,w,Y,A,X,J,U){let B=`${$} ${w} HTTP/1.1\r
209
209
  host: ${A}\r
210
210
  x-forwarded-for: 127.0.0.1\r
211
211
  x-forwarded-proto: https\r
212
212
  x-forwarded-host: ${X}\r
213
213
  `;if(J!==void 0)B+=`origin: ${J}\r
214
- `;let W=!1;for(let[j,z]of Y){let G=j.toLowerCase();if(oT.has(G))continue;if(J!==void 0&&G==="origin")continue;if(G==="content-length")W=!0;B+=`${j}: ${z}\r
214
+ `;let W=!1;for(let[j,z]of Y){let G=j.toLowerCase();if(HR.has(G))continue;if(J!==void 0&&G==="origin")continue;if(G==="content-length")W=!0;B+=`${j}: ${z}\r
215
215
  `}if(B+=`connection: keep-alive\r
216
216
  `,U&&!W)B+=`content-length: ${U.length}\r
217
217
  `;return B+=`\r
218
- `,sT.encode(B)}async function BR($){let w=$.getReader(),Y=[],A=0;for(;;){let{done:U,value:B}=await w.read();if(U)break;if(B){if(A+=B.length,A>N5)return w.cancel().catch(()=>{}),null;Y.push(B)}}if(Y.length===1)return Y[0];let X=new Uint8Array(A),J=0;for(let U of Y)X.set(U,J),J+=U.length;return X}var uT,SY,H8,cT,GB,bw,N5=1048576,zB=30000,nT=16384,f5=262144,pT=2097152,rT=524288,tT=8192,aT=4096,sT,q5,oT,T8;var M5=o(()=>{({connect:uT}=Bun),SY=Symbol("rpx.pool.fallback"),H8=Symbol("rpx.pool.stale"),cT=new Set(["GET","HEAD","PUT","DELETE","OPTIONS","TRACE"]);GB=Symbol("rpx.pool.timeout"),bw=Symbol("rpx.pool.busy");sT=new TextEncoder,q5=new TextDecoder,oT=new Set(["host","connection","keep-alive","proxy-connection","transfer-encoding","x-forwarded-for","x-forwarded-proto","x-forwarded-host"]);T8=new Map});function I5($){let w=typeof $==="string"?{to:$}:$,Y=(w.to??"").trim();if(Y&&!/^[a-z][\w+.-]*:\/\//i.test(Y))Y=`https://${Y}`;return Y=Y.replace(/\/+$/,""),{to:Y,status:w.status??301,preservePath:w.preservePath??!0}}function V5($,w,Y){if(!$.preservePath)return $.to||"/";let A=`${w}${Y}`;return A==="/"?`${$.to}/`:`${$.to}${A}`}import*as z$ from"node:path";function hY($,w){if(typeof $==="string")return{dir:$,spa:!1,pathRewriteStyle:"directory",maxAge:0,cleanUrls:w};return{dir:$.dir,spa:$.spa??!1,pathRewriteStyle:$.pathRewriteStyle??"directory",maxAge:$.maxAge??0,cleanUrls:w}}function zR($){let w=z$.extname($).toLowerCase();return jR[w]??"application/octet-stream"}function GR($){let w;try{w=decodeURIComponent($)}catch{return null}if(w.includes("\x00")||w.includes("\\"))return null;let Y=z$.posix.normalize(`/${w}`);if(Y.includes(".."))return null;return Y.replace(/^\/+/,"")}function FR($,w){let Y=GR($);if(Y===null)return null;let A=z$.posix.extname(Y);if(w.cleanUrls&&A===".html"){let X=$.replace(/\/index\.html$/i,"/").replace(/\.html$/i,"");return{filePath:z$.join(w.dir,Y),redirectTo:X||"/"}}if(Y===""||$.endsWith("/"))return{filePath:z$.join(w.dir,Y,"index.html")};if(A!=="")return{filePath:z$.join(w.dir,Y)};if(w.pathRewriteStyle==="flat")return{filePath:z$.join(w.dir,`${Y}.html`)};return{filePath:z$.join(w.dir,Y,"index.html")}}async function y5($,w){let Y=FR($,w);if(!Y)return new Response("Forbidden",{status:403});if(Y.redirectTo)return new Response(null,{status:301,headers:{Location:Y.redirectTo}});let A=w.maxAge>0?`public, max-age=${w.maxAge}`:"no-cache",X=Bun.file(Y.filePath);if(await X.exists())return new Response(X,{status:200,headers:{"Content-Type":zR(Y.filePath),"Cache-Control":A}});if(w.spa){let J=z$.join(w.dir,"index.html"),U=Bun.file(J);if(await U.exists())return new Response(U,{status:200,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-cache"}})}return new Response("Not Found",{status:404})}var jR;var ZY=o(()=>{jR={".html":"text/html; charset=utf-8",".htm":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".js":"text/javascript; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".map":"application/json; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject",".txt":"text/plain; charset=utf-8",".xml":"application/xml; charset=utf-8",".pdf":"application/pdf",".wasm":"application/wasm",".mp4":"video/mp4",".webm":"video/webm",".mp3":"audio/mpeg",".wav":"audio/wav"}});function KR(){return Math.max(0,Number(process.env.RPX_MAX_WS_PENDING_BYTES))||8388608}function fR($){let w=$.headers.get("host")||"",Y=w.indexOf(":");return Y===-1?w:w.slice(0,Y)}function Q5($,w){if(!w||w==="/")return $;if($===w)return"/";if($.startsWith(`${w}/`)){let Y=$.slice(w.length);return Y===""?"/":Y}return $}function C5($,w,Y){let A=w.sourceHost??"",J=w.stripBasePathPrefix??!1?Q5($,w.basePath):$,U=eW(J,w.pathRewrites);if(U)A=U.targetHost,J=U.targetPath,N("request",`Path rewrite: ${$} → ${A}${J}`,Y);return{targetHost:A,targetPath:J}}function qR($){let w=$.indexOf("://"),Y=w===-1?$.indexOf("/"):$.indexOf("/",w+3);if(Y===-1)return{pathname:"/",search:""};let A=$.indexOf("?",Y);if(A===-1)return{pathname:$.slice(Y),search:""};return{pathname:$.slice(Y,A),search:$.slice(A)}}function i1($,w,Y){let A=async(X,J)=>{let{pathname:U,search:B}=qR(X.url),W=fR(X),j=$(W,U);if(!j&&Y){let q=await Y(W,U,X);if(q instanceof Response)return q;if(q&&q.retry)j=$(W,U)}if(!j)return N("request",`No route found for host: ${W}`,w),new Response(`No proxy configured for ${W}`,{status:404});if(j.auth){let q=F5(X,U,j.auth);if(q)return N("request",`401 challenge for ${W}${U}`,w),q}if(j.redirect){let q=V5(j.redirect,U,B);return N("request",`${j.redirect.status} redirect ${W}${U} → ${q}`,w),new Response(null,{status:j.redirect.status,headers:{location:q}})}if(j.static){let f=j.stripBasePathPrefix??!0?Q5(U,j.basePath):U;return y5(f,j.static)}if(X.headers.get("upgrade")?.toLowerCase()==="websocket"){if(!J||!j.sourceHost)return new Response("WebSocket upgrade not supported here",{status:400});let{targetHost:q,targetPath:f}=C5(U,j,w),E=`ws://${q}${f}${B}`,H={};for(let[Q,T]of X.headers)if(!NR.has(Q.toLowerCase())&&Q.toLowerCase()!=="host")H[Q]=T;H.host=q,H["x-forwarded-for"]="127.0.0.1",H["x-forwarded-proto"]="https",H["x-forwarded-host"]=W;let M={targetUrl:E,forwardHeaders:H};if(J.upgrade(X,{data:M})){N("ws",`upgraded ${W}${f} → ${E}`,w);return}return new Response("WebSocket upgrade failed",{status:400})}if(!j.sourceHost)return new Response(`No upstream configured for ${W}`,{status:502});if(j.cleanUrls&&U.endsWith(".html")){let q=U.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:q}})}let{targetHost:z,targetPath:G}=C5(U,j,w),F=j.changeOrigin?`http://${j.sourceHost}`:void 0,K=X.body!=null&&X.method!=="GET"&&X.method!=="HEAD";try{return await T5({hostPort:z,method:X.method,path:`${G}${B}`,reqHeaders:X.headers,forwardedHost:W,originOverride:F,body:X.body})}catch(q){if(q===GB)return N("request",`Upstream timeout for ${W}`,w),new Response("Gateway Timeout",{status:504});if(q===bw)return N("request",`Upstream pool saturated for ${W}`,w),new Response("Service Unavailable",{status:503,headers:{"retry-after":"1"}});if(q===SY||!K)try{let f=new Headers(X.headers);if(f.set("host",z),f.set("x-forwarded-for","127.0.0.1"),f.set("x-forwarded-proto","https"),f.set("x-forwarded-host",W),F!==void 0)f.set("origin",F);return await fetch(`http://${z}${G}${B}`,{method:X.method,headers:f,body:X.body,redirect:"manual"})}catch(f){return N("request",`Proxy error for ${W}: ${f}`,w),new Response(`Proxy Error: ${f}`,{status:502})}return N("request",`Proxy error for ${W}: ${q}`,w),new Response(`Proxy Error: ${q}`,{status:502})}};return async(X,J)=>{try{return await A(X,J)}catch(U){return N("request",`Unhandled proxy handler error: ${U}`,w),new Response("Bad Gateway",{status:502})}}}function m1($){let w=new WeakMap,Y=KR();return{open(A){let{targetUrl:X,forwardHeaders:J}=A.data,U;try{U=new WebSocket(X,{headers:J})}catch(W){N("ws",`failed to open upstream ${X}: ${W}`,$),A.close(1011,"upstream connect failed");return}U.binaryType="arraybuffer";let B={upstream:U,upstreamOpen:!1,pending:[],pendingBytes:0};w.set(A,B),U.addEventListener("open",()=>{B.upstreamOpen=!0;for(let W of B.pending)U.send(W);B.pending=[],B.pendingBytes=0}),U.addEventListener("message",(W)=>{A.send(W.data)}),U.addEventListener("close",(W)=>{try{A.close(W.code||1000,W.reason||"")}catch{}}),U.addEventListener("error",()=>{N("ws",`upstream error for ${X}`,$);try{A.close(1011,"upstream error")}catch{}})},message(A,X){let J=w.get(A);if(!J)return;let U=typeof X==="string"?X:new Uint8Array(X);if(J.upstreamOpen){J.upstream.send(U);return}let B=typeof U==="string"?Buffer.byteLength(U):U.byteLength;if(J.pendingBytes+B>Y){N("ws",`pending buffer would exceed ${Y}B before upstream open; closing socket`,$);try{A.close(1009,"buffer limit")}catch{}try{J.upstream.close(1011,"client buffer overflow")}catch{}w.delete(A);return}J.pending.push(U),J.pendingBytes+=B},close(A,X,J){let U=w.get(A);if(!U)return;w.delete(A);try{U.upstream.close(X||1000,J||"")}catch{}}}}var NR;var R8=o(()=>{_Y();M5();ZY();X0();NR=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","sec-websocket-key","sec-websocket-version","sec-websocket-extensions"])});function y$($){if(!$||$==="/")return"/";let w=$.trim();if(!w.startsWith("/"))w=`/${w}`;return w=w.replace(/\/+$/,""),w===""?"/":w}function ER($,w){if(w==="/")return!0;if($===w)return!0;return $.startsWith(`${w}/`)}function g1($){let w=new Map;for(let A of $){let X=y$(A.path),J=w.get(A.host);if(!J)J=new Map,w.set(A.host,J);J.set(X,A.route)}let Y=new Map;for(let[A,X]of w){let J=[];for(let[U,B]of X)J.push({path:U,route:B});J.sort((U,B)=>B.path.length-U.path.length),Y.set(A,J)}return Y}function M8($,w){let Y=$.get(w);if(Y!==void 0)return Y;let A,X=-1;for(let[J,U]of $){if(!U1(J))continue;if(zY(w,J)){let B=J.length-1;if(B>X)X=B,A=U}}return A}function l1($,w,Y){let A=M8($,w);if(!A)return;for(let X of A)if(ER(Y,X.path))return X.route;return}var kY=()=>{};import*as DY from"node:fs/promises";import*as FB from"node:path";function HR($){if(!$.endsWith(".crt"))return null;let w=$.slice(0,-4);if(w.length===0)return null;if(w.startsWith("_wildcard."))return`*.${w.slice(10)}`;return w}async function TR($,w,Y,A){try{let[X,J]=await Promise.all([DY.readFile(w,"utf8"),DY.readFile(Y,"utf8")]);return{serverName:$,cert:X,key:J}}catch(X){return N("sni",`skipping ${$}: ${X.message}`,A),null}}async function d1($,w){let Y=new Map;if($.certsDir){let X=[];try{X=await DY.readdir($.certsDir)}catch(J){N("sni",`certsDir read failed (${$.certsDir}): ${J.message}`,w)}for(let J of X){let U=HR(J);if(!U)continue;let B=J.slice(0,-4);Y.set(U,{certPath:FB.join($.certsDir,J),keyPath:FB.join($.certsDir,`${B}.key`)})}}if($.domains)for(let[X,J]of Object.entries($.domains))Y.set(X,J);let A=[];for(let[X,J]of Y){let U=await TR(X,J.certPath,J.keyPath,w);if(U)A.push(U)}return A}var I8=o(()=>{X0()});import*as Hw from"node:fs/promises";import*as KB from"node:path";function MR($,w){if(!w||w.length===0)return!1;return w.some((Y)=>{let A=Y.startsWith(".")?Y.slice(1):Y;return $===A||$.endsWith(`.${A}`)})}function O5($){if(!$||$.length>253)return!1;if($.includes("/")||$.includes(":")||$.includes(" "))return!1;if($.startsWith("*"))return!1;return/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i.test($)}class xY{config;certsDir;onCertAdded;http01Store;issuer;verbose;negativeCacheMs;certs=new Map;inFlight=new Map;negativeCache=new Map;constructor($){this.config=$.config,this.certsDir=$.certsDir,this.onCertAdded=$.onCertAdded,this.http01Store=$.http01Store??VX,this.issuer=$.issuer??lU,this.verbose=$.verbose??!1,this.negativeCacheMs=$.negativeCacheMs??RR;for(let w of $.initial??[])this.certs.set(w.serverName,w)}get challengeStore(){return this.http01Store}sniEntries(){return Array.from(this.certs.values())}hasCert($){return this.certs.has($)}async isApproved($){if(!O5($))return!1;if(MR($,this.config.allowedSuffixes))return!0;if(this.config.ask)try{return await this.config.ask($)}catch(w){return N("on-demand",`ask(${$}) threw: ${w.message}`,this.verbose),!1}return!1}async ensureCert($){if(!this.config.enabled)return!1;if(this.certs.has($))return!0;if(!O5($))return!1;let w=this.inFlight.get($);if(w)return w;let Y=this.negativeCache.get($);if(Y!==void 0&&Date.now()<Y)return N("on-demand",`${$} negatively cached for ${Y-Date.now()}ms`,this.verbose),!1;let A=this.issue($).finally(()=>{this.inFlight.delete($)});return this.inFlight.set($,A),A}async issue($){if(this.certs.has($))return!0;if(await this.loadFromDisk($))return!0;if(!await this.isApproved($))return N("on-demand",`refused issuance for ${$} (not approved)`,this.verbose),this.cacheNegative($),!1;try{N("on-demand",`issuing cert for ${$} (staging=${this.config.staging??!1})`,this.verbose);let w=await this.issuer({domains:[$],method:"http-01",http01Store:this.http01Store,email:this.config.email,staging:this.config.staging});await this.persist($,w.fullChainPem,w.keyPem);let Y={serverName:$,cert:w.fullChainPem,key:w.keyPem};return this.certs.set($,Y),this.negativeCache.delete($),N("on-demand",`issued + installed cert for ${$}`,this.verbose),await this.onCertAdded?.(this.sniEntries()),!0}catch(w){return this.cacheNegative($),N("on-demand",`issuance for ${$} failed: ${w.message}`,this.verbose),!1}}cacheNegative($){if(this.negativeCache.size>=L5){let w=Date.now();for(let[Y,A]of this.negativeCache)if(A<=w)this.negativeCache.delete(Y);if(this.negativeCache.size>=L5){let Y=this.negativeCache.keys().next().value;if(Y!==void 0)this.negativeCache.delete(Y)}}this.negativeCache.set($,Date.now()+this.negativeCacheMs)}async loadFromDisk($){let{certPath:w,keyPath:Y}=this.pathsFor($);try{let[A,X]=await Promise.all([Hw.readFile(w,"utf8"),Hw.readFile(Y,"utf8")]),J={serverName:$,cert:A,key:X};return this.certs.set($,J),N("on-demand",`adopted existing on-disk cert for ${$}`,this.verbose),await this.onCertAdded?.(this.sniEntries()),!0}catch{return!1}}pathsFor($){return{certPath:KB.join(this.certsDir,`${$}.crt`),keyPath:KB.join(this.certsDir,`${$}.key`)}}async persist($,w,Y){await Hw.mkdir(this.certsDir,{recursive:!0}).catch(()=>{});let{certPath:A,keyPath:X}=this.pathsFor($);await Promise.all([Hw.writeFile(A,w,"utf8"),Hw.writeFile(X,Y,{encoding:"utf8",mode:384})])}}var RR=60000,L5=4096;var NB=o(()=>{hX();X0()});import{existsSync as IR,readdirSync as cL,readFileSync as VR,statSync as yR}from"node:fs";import{homedir as CR}from"node:os";import{isAbsolute as QR,join as n1}from"node:path";function _5($,w){if($==="~")return w;if($.startsWith("~/"))return n1(w,$.slice(2));return $}function SR($){let w=$.indexOf(":");return(w===-1?$:$.slice(0,w)).toLowerCase()}function S5($){return $.replace(/[^a-z0-9._-]/gi,"-").replace(/^[-.]+|[-.]+$/g,"")||"site"}function hR($,w){for(let Y of w){let A=`.${Y}`;if($.endsWith(A)){let X=$.slice(0,-A.length);if(X.length>0&&!X.includes(".")&&/^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i.test(X))return X}}return null}function ZR($,w){let Y=w.readText(n1($,"rpx.site.json"));if(Y)try{let X=JSON.parse(Y);if(X&&typeof X==="object")return X}catch{}let A=w.readText(n1($,"package.json"));if(A)try{let X=JSON.parse(A);if(X.rpx&&typeof X.rpx==="object")return X.rpx}catch{}return null}function kR($){let w=$.selfRegisters??!1;return{command:$.command,env:$.env,urlEnv:$.urlEnv,selfRegisters:w,routes:$.routes??(w?void 0:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}])}}function DR($,w){let Y=ZR($,w);if(Y?.command)return kR(Y);let A=w.fileExists(n1($,"buddy")),X=w.readText(n1($,"package.json")),J=null;if(X)try{J=JSON.parse(X)}catch{J=null}let U={...J?.dependencies??{},...J?.devDependencies??{}};if(A||Object.keys(U).some((W)=>W==="stacks"||W.startsWith("@stacksjs/")))return{command:A?"./buddy dev":"bun run dev",env:{STACKS_PROXY_MANAGED:"1"},urlEnv:["APP_URL"],routes:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0},{path:"/api",portEnv:"PORT_API",defaultPort:3008,stripPrefix:!1,readyGate:!1},{path:"/docs",portEnv:"PORT_DOCS",defaultPort:3006,stripPrefix:!0,readyGate:!1}]};if(J?.scripts?.dev)return{command:"bun run dev",routes:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}]};return null}function qB($,w={}){let Y={dirExists:w.dirExists??fB.dirExists,fileExists:w.fileExists??fB.fileExists,readText:w.readText??fB.readText},A=w.detect??DR,X=w.homeDir??CR(),J=$.tlds??OR,U=($.roots??LR).map((F)=>_5(F,X)),B=$.idleTimeoutMs??_R,W=new Map;for(let F of $.sites??[])W.set(F.to,F);let j=(F)=>F.idleTimeoutMs??B;function z(F){let K=bA(W,F);if(!K)return null;let q=QR(K.dir)?K.dir:_5(K.dir,X),f=K.selfRegisters??!1,E=K.routes??[];if(!f&&E.length===0)E=A(q,Y)?.routes??[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}];let H=h5({...K.env??{}},void 0,F);return{host:F,id:S5(F),dir:q,command:K.command,env:H,routes:E,selfRegisters:f,idleTimeoutMs:j(K),source:"config"}}function G(F){let K=hR(F,J);if(!K)return null;for(let q of U){let f=n1(q,K);if(!Y.dirExists(f))continue;let E=A(f,Y);if(!E)continue;let H=E.selfRegisters??!1;return{host:F,id:S5(F),dir:f,command:E.command,env:h5({...E.env??{}},E.urlEnv,F),routes:H?[]:E.routes??[],selfRegisters:H,idleTimeoutMs:B,source:"discovered"}}return null}return{resolve(F){let K=SR(F);if(!K)return null;return z(K)??G(K)}}}function h5($,w,Y){if(!w)return $;let A=`https://${Y}`;for(let X of w)if($[X]===void 0)$[X]=A;return $}var LR,OR,_R=1800000,fB;var EB=o(()=>{LR=["~/Code"],OR=["localhost","test"],fB={dirExists:($)=>{try{return yR($).isDirectory()}catch{return!1}},fileExists:($)=>{try{return IR($)}catch{return!1}},readText:($)=>{try{return VR($,"utf8")}catch{return null}}}});import*as V8 from"node:net";function Tw($,w,Y){return N("port",`Checking if port ${$} is in use on ${w}`,Y),new Promise((A)=>{let X=V8.createServer(),J=setTimeout(()=>{N("port",`Checking port ${$} timed out, assuming it's in use`,Y),X.close(),A(!0)},3000);X.once("error",(U)=>{if(clearTimeout(J),U.code==="EADDRINUSE")N("port",`Port ${$} is in use`,Y),A(!0);else N("port",`Error checking port ${$}: ${U.message}`,Y),A(!0)}),X.once("listening",()=>{clearTimeout(J),N("port",`Port ${$} is available`,Y),X.close(),A(!1)});try{X.listen($,w)}catch(U){clearTimeout(J),N("port",`Exception checking port ${$}: ${U}`,Y),A(!0)}})}async function HB($,w,Y,A=50){N("port",`Finding available port starting from ${$} (max attempts: ${A})`,Y);let X=$,J=0;while(J<A){if(J++,!await Tw(X,w,Y))return N("port",`Found available port: ${X} after ${J} attempts`,Y),X;N("port",`Port ${X} is in use, trying ${X+1} (attempt ${J}/${A})`,Y),X++}throw Error(`Unable to find available port after ${A} attempts starting from ${$}`)}function Z5($,w,Y=5000,A){return N("port",`Testing connection to ${w}:${$}`,A),new Promise((X)=>{let J=V8.connect({host:w,port:$,timeout:Y});J.once("connect",()=>{N("port",`Successfully connected to ${w}:${$}`,A),J.end(),X(!0)}),J.once("timeout",()=>{N("port",`Connection to ${w}:${$} timed out`,A),J.destroy(),X(!1)}),J.once("error",(U)=>{N("port",`Failed to connect to ${w}:${$}: ${U.message}`,A),J.destroy(),X(!1)})})}class y8{usedPorts=new Set;hostname;verbose;maxRetries;constructor($="0.0.0.0",w,Y=50){this.hostname=$,this.verbose=w,this.maxRetries=Y}async getNextAvailablePort($,w=!1){if(this.usedPorts.has($))return this.findNextAvailablePort($+1,w);if(await Tw($,this.hostname,this.verbose))return this.findNextAvailablePort($+1,w);if(w){if(!await Z5($,this.hostname,3000,this.verbose))return N("port",`Port ${$} is available but not connectable, trying next port`,this.verbose),this.findNextAvailablePort($+1,w)}return this.usedPorts.add($),$}async findNextAvailablePort($,w=!1){let Y=await HB($,this.hostname,this.verbose,this.maxRetries);if(w){if(!await Z5(Y,this.hostname,3000,this.verbose))if(Y<$+this.maxRetries)return this.findNextAvailablePort(Y+1,w);else throw Error(`Unable to find a connectable port after ${this.maxRetries} attempts`)}return this.usedPorts.add(Y),Y}releasePort($){N("port",`Releasing port ${$}`,this.verbose),this.usedPorts.delete($)}}var dL;var TB=o(()=>{X0();dL=new y8});import*as C8 from"node:fs";import*as n0 from"node:fs/promises";import{homedir as xR}from"node:os";import*as RB from"node:path";import*as Q8 from"node:process";function Q$(){return RB.join(xR(),".stacks","rpx","registry.d")}function PY($){return typeof $==="string"&&$.length>0&&$.length<=128&&PR.test($)}function MB($,w){if(!PY(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return RB.join($,`${w}.json`)}function r0($){if(!Number.isInteger($)||$<=0)return!1;try{return Q8.kill($,0),!0}catch(w){return w.code==="EPERM"}}function k5($){if(!$||typeof $!=="object")return!1;let w=$,Y=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0,A=typeof w.from==="string"&&w.from.length>0,X=typeof w.static==="string"||!!w.static&&typeof w.static==="object"&&typeof w.static.dir==="string",J=w.path===void 0||typeof w.path==="string";return typeof w.id==="string"&&PY(w.id)&&(A||X)&&typeof w.to==="string"&&w.to.length>0&&J&&Y&&typeof w.createdAt==="string"}async function bR($){await n0.mkdir($,{recursive:!0})}async function L8($,w=Q$(),Y){if(!k5($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await bR(w);let A=MB(w,$.id),X=`${A}.tmp.${Q8.pid}.${Date.now()}`,J=JSON.stringify($,null,2);try{await n0.writeFile(X,J,{encoding:"utf8",mode:420}),await n0.rename(X,A),N("registry",`wrote entry ${$.id} → ${A}`,Y)}catch(U){throw await n0.unlink(X).catch(()=>{}),U}}async function bY($,w=Q$(),Y){let A=MB(w,$);try{await n0.unlink(A),N("registry",`removed entry ${$}`,Y)}catch(X){if(X.code!=="ENOENT")throw X}}async function uR($,w=Q$(),Y){let A=MB(w,$);try{let X=await n0.readFile(A,"utf8"),J=JSON.parse(X);if(!k5(J))return N("registry",`entry ${$} failed validation, removing`,Y),await n0.unlink(A).catch(()=>{}),null;return J}catch(X){if(X.code==="ENOENT")return null;if(X instanceof SyntaxError)return N("registry",`entry ${$} has invalid JSON, removing`,Y),await n0.unlink(A).catch(()=>{}),null;throw X}}async function C$($=Q$(),w){let Y;try{Y=await n0.readdir($)}catch(X){if(X.code==="ENOENT")return[];throw X}let A=[];for(let X of Y){if(!X.endsWith(".json"))continue;let J=X.slice(0,-5);if(!PY(J))continue;let U=await uR(J,$,w);if(U)A.push(U)}return A}async function p1($=Q$(),w){let Y=await C$($,w),A=0;for(let X of Y){if(X.pid===void 0)continue;if(!r0(X.pid))N("registry",`GC: pid ${X.pid} for ${X.id} is dead, removing`,w),await bY(X.id,$,w).catch(()=>{}),A++}return A}function uY($,w={}){let Y=w.dir??Q$(),A=w.debounceMs??100,X=w.pollMs??Math.max(A*2,250),J=w.verbose;C8.mkdirSync(Y,{recursive:!0});let U=null,B=!1,W=null,j=!1,z=(E)=>{return JSON.stringify(E.map((H)=>({id:H.id,from:H.from,to:H.to,path:H.path,pid:H.pid,pathRewrites:H.pathRewrites,cleanUrls:H.cleanUrls,changeOrigin:H.changeOrigin,static:H.static})).sort((H,M)=>H.id.localeCompare(M.id)))},G=()=>{if(U=null,B)return;C$(Y,J).then((E)=>{return W=z(E),$(E)}).catch((E)=>{N("registry",`watcher onChange failed: ${E}`,J)})},F=()=>{if(B)return;if(U)clearTimeout(U);U=setTimeout(G,A)},q=setInterval(()=>{if(B||j)return;j=!0,C$(Y,J).then((E)=>{if(z(E)!==W)F()}).catch((E)=>{N("registry",`watcher poll failed: ${E}`,J)}).finally(()=>{j=!1})},X),f=C8.watch(Y,{persistent:!0},(E,H)=>{if(H&&/\.tmp\.\d+\.\d+$/.test(H))return;F()});return f.on("error",(E)=>{N("registry",`watcher error: ${E}`,J)}),F(),{close:()=>{if(B=!0,U)clearTimeout(U);clearInterval(q),f.close()}}}var PR;var r1=o(()=>{X0();PR=/^[a-zA-Z0-9._-]+$/});import{closeSync as D5,openSync as cR,readFileSync as vR}from"node:fs";import*as x5 from"node:fs/promises";import{spawn as iR}from"node:child_process";import{homedir as mR}from"node:os";import*as cY from"node:path";import*as M$ from"node:process";class O8{resolver;registryDir;rpxDir;verbose;startupTimeoutMs;pollIntervalMs;restartDelayMs;killGraceMs;launch;probePort;pickPort;isHostRoutable;onSiteActivating;now;writeEntry;removeEntry;sites=new Map;reaper;stopped=!1;constructor($){this.resolver=$.resolver,this.registryDir=$.registryDir??Q$(),this.rpxDir=$.rpxDir??cY.join(mR(),".stacks","rpx"),this.verbose=$.verbose??!1,this.startupTimeoutMs=$.startupTimeoutMs??gR,this.pollIntervalMs=$.pollIntervalMs??lR,this.restartDelayMs=$.restartDelayMs??nR,this.killGraceMs=$.killGraceMs??pR,this.launch=$.launcher??tR(this.verbose),this.probePort=$.probePort??rR,this.pickPort=$.pickPort??((Y)=>HB(Y,"127.0.0.1")),this.isHostRoutable=$.isHostRoutable??(()=>!1),this.onSiteActivating=$.onSiteActivating,this.now=$.now??Date.now,this.writeEntry=$.writeEntry??L8,this.removeEntry=$.removeEntry??bY;let w=$.reapIntervalMs??dR;if(this.reaper=setInterval(()=>{this.reapIdle()},w),typeof this.reaper.unref==="function")this.reaper.unref()}async onRequest($){if(this.stopped)return{kind:"unknown"};let w=this.sites.get($);if(w&&w.status==="failed"&&this.now()-w.failedAt>=this.restartDelayMs)this.sites.delete($),w=void 0;if(!w){let Y=this.resolver.resolve($);if(!Y)return{kind:"unknown"};w=await this.start(Y)}if(w.lastAccess=this.now(),w.status==="ready")return{kind:"ready",host:$};if(w.status==="failed")return{kind:"failed",host:$,error:w.error??"failed to start",logTail:this.readLogTail(w)};return{kind:"starting",host:$,sinceMs:this.now()-w.startedAt,source:w.site.source,logTail:this.readLogTail(w,16)}}async start($){try{this.onSiteActivating?.($.host)}catch{}let w=new Map;if(!$.selfRegisters)for(let B of $.routes){if(w.has(B.portEnv))continue;let W=await this.pickPort(B.defaultPort??3000);w.set(B.portEnv,W)}let Y=cY.join(this.rpxDir,"sites",`${$.id}.log`);await x5.mkdir(cY.dirname(Y),{recursive:!0}).catch(()=>{});let A=this.buildEnv($,w),X=null,J;try{X=this.launch({command:$.command,cwd:$.dir,env:A,logPath:Y})}catch(B){J=`failed to spawn: ${B.message}`}let U={site:$,status:J?"failed":"starting",handle:X,ports:w,routeIds:[],startedAt:this.now(),lastAccess:this.now(),failedAt:J?this.now():0,error:J,logPath:Y,exited:!1,ready:Promise.resolve()};if(this.sites.set($.host,U),J)return R.warn(`rpx: site ${$.host} ${J}`),U;return R.info(`rpx: booting ${$.host} → ${$.command} (${$.dir})`),X.exited.then((B)=>this.onProcessExit(U,B)).catch(()=>{}),U.ready=this.driveReadiness(U).catch((B)=>{N("sites",`readiness loop for ${$.host} threw: ${B}`,this.verbose)}),U}async onProcessExit($,w){if($.exited=!0,this.stopped||this.sites.get($.site.host)!==$)return;if($.status==="ready"){R.warn(`rpx: ${$.site.host} exited${w!==null?` (code ${w})`:""} — will reboot on next request`),this.sites.delete($.site.host);for(let Y of $.routeIds)await this.removeEntry(Y,this.registryDir,this.verbose).catch(()=>{})}else if($.status==="starting")this.fail($,`process exited${w!==null?` with code ${w}`:""} before becoming ready`)}async driveReadiness($){let{site:w}=$,Y=this.now()+this.startupTimeoutMs,A=w.selfRegisters?()=>this.isHostRoutable(w.host):await this.makeGateProbe(w,$.ports);while(this.now()<Y&&!this.stopped){if($.status!=="starting"||$.exited)return;if(await A()){if(await this.publishRoutes($),$.status==="starting")$.status="ready",R.success(`rpx: ${w.host} ready`);return}await IB(this.pollIntervalMs)}if($.status==="starting")this.fail($,`did not become ready within ${Math.round(this.startupTimeoutMs/1000)}s`)}async makeGateProbe($,w){let Y=$.routes.filter((X)=>X.readyGate??y$(X.path)==="/").map((X)=>w.get(X.portEnv)).filter((X)=>typeof X==="number"),A=Y.length>0?Y:[...w.values()];return async()=>{for(let X of A)if(!await this.probePort(X))return!1;return A.length>0}}async publishRoutes($){let{site:w,ports:Y}=$;if(w.selfRegisters||w.routes.length===0)return;let A=w.routes.find((W)=>y$(W.path)==="/")??w.routes[0],X=Y.get(A.portEnv);if(X===void 0)return;let J=[];for(let W of w.routes){if(W===A)continue;let j=Y.get(W.portEnv);if(j===void 0)continue;J.push({from:y$(W.path),to:`localhost:${j}`,stripPrefix:W.stripPrefix??!1})}let U={id:w.id,from:`localhost:${X}`,to:w.host,cwd:w.dir,createdAt:new Date(this.now()).toISOString(),pathRewrites:J.length>0?J:void 0,pid:$.handle?.pid};await this.writeEntry(U,this.registryDir,this.verbose),$.routeIds=[w.id];let B=this.now()+2000;while(this.now()<B&&!this.isHostRoutable(w.host))await IB(50)}fail($,w){$.status="failed",$.error=w,$.failedAt=this.now(),R.warn(`rpx: site ${$.site.host} failed — ${w}`),this.killProcess($)}buildEnv($,w){let Y={};for(let[A,X]of Object.entries(M$.env))if(typeof X==="string")Y[A]=X;Object.assign(Y,$.env);for(let[A,X]of w)Y[A]=String(X);return Y.RPX_SITE_HOST=$.host,Y.RPX_SITE_URL=`https://${$.host}`,Y}readLogTail($,w=40){try{return vR($.logPath,"utf8").split(`
218
+ `,TR.encode(B)}async function OR($){let w=$.getReader(),Y=[],A=0;for(;;){let{done:U,value:B}=await w.read();if(U)break;if(B){if(A+=B.length,A>y5)return w.cancel().catch(()=>{}),null;Y.push(B)}}if(Y.length===1)return Y[0];let X=new Uint8Array(A),J=0;for(let U of Y)X.set(U,J),J+=U.length;return X}var XR,xY,Q8,JR,IB,cw,y5=1048576,MB=30000,KR=16384,L5=262144,FR=2097152,NR=524288,qR=8192,ER=4096,TR,O5,HR,y8;var k5=t(()=>{({connect:XR}=Bun),xY=Symbol("rpx.pool.fallback"),Q8=Symbol("rpx.pool.stale"),JR=new Set(["GET","HEAD","PUT","DELETE","OPTIONS","TRACE"]);IB=Symbol("rpx.pool.timeout"),cw=Symbol("rpx.pool.busy");TR=new TextEncoder,O5=new TextDecoder,HR=new Set(["host","connection","keep-alive","proxy-connection","transfer-encoding","x-forwarded-for","x-forwarded-proto","x-forwarded-host"]);y8=new Map});function D5($){let w=typeof $==="string"?{to:$}:$,Y=(w.to??"").trim();if(Y&&!/^[a-z][\w+.-]*:\/\//i.test(Y))Y=`https://${Y}`;return Y=Y.replace(/\/+$/,""),{to:Y,status:w.status??301,preservePath:w.preservePath??!0}}function x5($,w,Y){if(!$.preservePath)return $.to||"/";let A=`${w}${Y}`;return A==="/"?`${$.to}/`:`${$.to}${A}`}import*as z$ from"node:path";function PY($,w){if(typeof $==="string")return{dir:$,spa:!1,pathRewriteStyle:"directory",maxAge:0,cleanUrls:w};return{dir:$.dir,spa:$.spa??!1,pathRewriteStyle:$.pathRewriteStyle??"directory",maxAge:$.maxAge??0,cleanUrls:w}}function SR($){let w=z$.extname($).toLowerCase();return _R[w]??"application/octet-stream"}function ZR($){let w;try{w=decodeURIComponent($)}catch{return null}if(w.includes("\x00")||w.includes("\\"))return null;let Y=z$.posix.normalize(`/${w}`);if(Y.includes(".."))return null;return Y.replace(/^\/+/,"")}function hR($,w){let Y=ZR($);if(Y===null)return null;let A=z$.posix.extname(Y);if(w.cleanUrls&&A===".html"){let X=$.replace(/\/index\.html$/i,"/").replace(/\.html$/i,"");return{filePath:z$.join(w.dir,Y),redirectTo:X||"/"}}if(Y===""||$.endsWith("/"))return{filePath:z$.join(w.dir,Y,"index.html")};if(A!=="")return{filePath:z$.join(w.dir,Y)};if(w.pathRewriteStyle==="flat")return{filePath:z$.join(w.dir,`${Y}.html`)};return{filePath:z$.join(w.dir,Y,"index.html")}}async function P5($,w){let Y=hR($,w);if(!Y)return new Response("Forbidden",{status:403});if(Y.redirectTo)return new Response(null,{status:301,headers:{Location:Y.redirectTo}});let A=w.maxAge>0?`public, max-age=${w.maxAge}`:"no-cache",X=Bun.file(Y.filePath);if(await X.exists())return new Response(X,{status:200,headers:{"Content-Type":SR(Y.filePath),"Cache-Control":A}});if(w.spa){let J=z$.join(w.dir,"index.html"),U=Bun.file(J);if(await U.exists())return new Response(U,{status:200,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-cache"}})}return new Response("Not Found",{status:404})}var _R;var bY=t(()=>{_R={".html":"text/html; charset=utf-8",".htm":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".js":"text/javascript; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".map":"application/json; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject",".txt":"text/plain; charset=utf-8",".xml":"application/xml; charset=utf-8",".pdf":"application/pdf",".wasm":"application/wasm",".mp4":"video/mp4",".webm":"video/webm",".mp3":"audio/mpeg",".wav":"audio/wav"}});function kR(){return Math.max(0,Number(process.env.RPX_MAX_WS_PENDING_BYTES))||8388608}function xR($){let w=$.headers.get("host")||"",Y=w.indexOf(":");return Y===-1?w:w.slice(0,Y)}function v5($,w){if(!w||w==="/")return $;if($===w)return"/";if($.startsWith(`${w}/`)){let Y=$.slice(w.length);return Y===""?"/":Y}return $}function b5($){if($.upstreamPool)return M5($.upstreamPool);if($.sourceHost)return{url:$.sourceHost,weight:1,healthy:!0,activeConnections:0,consecutiveFailures:0,consecutiveSuccesses:0};return}function u5($,w,Y,A){let X=Y?.url??w.sourceHost??"",U=w.stripBasePathPrefix??!1?v5($,w.basePath):$,B=zB(U,w.pathRewrites);if(B)X=B.targetHost,U=B.targetPath,N("request",`Path rewrite: ${$} → ${X}${U}`,A);return{targetHost:X,targetPath:U}}function PR($){let w=$.indexOf("://"),Y=w===-1?$.indexOf("/"):$.indexOf("/",w+3);if(Y===-1)return{pathname:"/",search:""};let A=$.indexOf("?",Y);if(A===-1)return{pathname:$.slice(Y),search:""};return{pathname:$.slice(Y,A),search:$.slice(A)}}function n1($,w,Y){let A=async(X,J)=>{let{pathname:U,search:B}=PR(X.url),W=xR(X),j=$(W,U);if(!j&&Y){let E=await Y(W,U,X);if(E instanceof Response)return E;if(E&&E.retry)j=$(W,U)}if(!j)return N("request",`No route found for host: ${W}`,w),new Response(`No proxy configured for ${W}`,{status:404});if(j.auth){let E=C5(X,U,j.auth);if(E)return N("request",`401 challenge for ${W}${U}`,w),E}if(j.redirect){let E=x5(j.redirect,U,B);return N("request",`${j.redirect.status} redirect ${W}${U} → ${E}`,w),new Response(null,{status:j.redirect.status,headers:{location:E}})}if(j.static){let H=j.stripBasePathPrefix??!0?v5(U,j.basePath):U;return P5(H,j.static)}if(X.headers.get("upgrade")?.toLowerCase()==="websocket"){let E=b5(j);if(!J||!E)return new Response("WebSocket upgrade not supported here",{status:400});let{targetHost:H,targetPath:M}=u5(U,j,E,w),Q=`ws://${H}${M}${B}`,V={};for(let[O,Z]of X.headers)if(!DR.has(O.toLowerCase())&&O.toLowerCase()!=="host")V[O]=Z;V.host=H,V["x-forwarded-for"]="127.0.0.1",V["x-forwarded-proto"]="https",V["x-forwarded-host"]=W;let f={targetUrl:Q,forwardHeaders:V};if(J.upgrade(X,{data:f})){N("ws",`upgraded ${W}${M} → ${Q}`,w);return}return new Response("WebSocket upgrade failed",{status:400})}let z=b5(j);if(!z)return new Response(`No upstream configured for ${W}`,{status:502});if(j.cleanUrls&&U.endsWith(".html")){let E=U.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:E}})}let{targetHost:G,targetPath:K}=u5(U,j,z,w),F=j.changeOrigin?`http://${G}`:void 0,T=X.body!=null&&X.method!=="GET"&&X.method!=="HEAD",q=j.upstreamPool;if(q)z.activeConnections++;try{let E=await Z5({hostPort:G,method:X.method,path:`${K}${B}`,reqHeaders:X.headers,forwardedHost:W,originOverride:F,body:X.body});if(q)C8(q,z);return E}catch(E){if(E===IB){if(N("request",`Upstream timeout for ${W}`,w),q)hY(q,z);return new Response("Gateway Timeout",{status:504})}if(E===cw)return N("request",`Upstream pool saturated for ${W}`,w),new Response("Service Unavailable",{status:503,headers:{"retry-after":"1"}});if(E===xY||!T)try{let H=new Headers(X.headers);if(H.set("host",G),H.set("x-forwarded-for","127.0.0.1"),H.set("x-forwarded-proto","https"),H.set("x-forwarded-host",W),F!==void 0)H.set("origin",F);let M=await fetch(`http://${G}${K}${B}`,{method:X.method,headers:H,body:X.body,redirect:"manual"});if(q)C8(q,z);return M}catch(H){if(N("request",`Proxy error for ${W}: ${H}`,w),q)hY(q,z);return new Response(`Proxy Error: ${H}`,{status:502})}if(N("request",`Proxy error for ${W}: ${E}`,w),q)hY(q,z);return new Response(`Proxy Error: ${E}`,{status:502})}finally{if(q)z.activeConnections--}};return async(X,J)=>{try{return await A(X,J)}catch(U){return N("request",`Unhandled proxy handler error: ${U}`,w),new Response("Bad Gateway",{status:502})}}}function p1($){let w=new WeakMap,Y=kR();return{open(A){let{targetUrl:X,forwardHeaders:J}=A.data,U;try{U=new WebSocket(X,{headers:J})}catch(W){N("ws",`failed to open upstream ${X}: ${W}`,$),A.close(1011,"upstream connect failed");return}U.binaryType="arraybuffer";let B={upstream:U,upstreamOpen:!1,pending:[],pendingBytes:0};w.set(A,B),U.addEventListener("open",()=>{B.upstreamOpen=!0;for(let W of B.pending)U.send(W);B.pending=[],B.pendingBytes=0}),U.addEventListener("message",(W)=>{A.send(W.data)}),U.addEventListener("close",(W)=>{try{A.close(W.code||1000,W.reason||"")}catch{}}),U.addEventListener("error",()=>{N("ws",`upstream error for ${X}`,$);try{A.close(1011,"upstream error")}catch{}})},message(A,X){let J=w.get(A);if(!J)return;let U=typeof X==="string"?X:new Uint8Array(X);if(J.upstreamOpen){J.upstream.send(U);return}let B=typeof U==="string"?Buffer.byteLength(U):U.byteLength;if(J.pendingBytes+B>Y){N("ws",`pending buffer would exceed ${Y}B before upstream open; closing socket`,$);try{A.close(1009,"buffer limit")}catch{}try{J.upstream.close(1011,"client buffer overflow")}catch{}w.delete(A);return}J.pending.push(U),J.pendingBytes+=B},close(A,X,J){let U=w.get(A);if(!U)return;w.delete(A);try{U.upstream.close(X||1000,J||"")}catch{}}}}var DR;var L8=t(()=>{DY();k5();bY();X0();DR=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","sec-websocket-key","sec-websocket-version","sec-websocket-extensions"])});import*as i5 from"node:fs";import*as m5 from"node:path";function uY($,w){if(!$||!w.startsWith(c5))return null;let Y=w.slice(c5.length);if(!Y||!/^[A-Za-z0-9_-]+$/.test(Y))return null;try{return i5.readFileSync(m5.join($,Y),"utf8")}catch{return null}}var c5="/.well-known/acme-challenge/";var O8=()=>{};function Q$($){if(!$||$==="/")return"/";let w=$.trim();if(!w.startsWith("/"))w=`/${w}`;return w=w.replace(/\/+$/,""),w===""?"/":w}function bR($,w){if(w==="/")return!0;if($===w)return!0;return $.startsWith(`${w}/`)}function r1($){let w=new Map;for(let A of $){let X=Q$(A.path),J=w.get(A.host);if(!J)J=new Map,w.set(A.host,J);J.set(X,A.route)}let Y=new Map;for(let[A,X]of w){let J=[];for(let[U,B]of X)J.push({path:U,route:B});J.sort((U,B)=>B.path.length-U.path.length),Y.set(A,J)}return Y}function _8($,w){let Y=$.get(w);if(Y!==void 0)return Y;let A,X=-1;for(let[J,U]of $){if(!B1(J))continue;if(NY(w,J)){let B=J.length-1;if(B>X)X=B,A=U}}return A}function t1($,w,Y){let A=_8($,w);if(!A)return;for(let X of A)if(bR(Y,X.path))return X.route;return}var vY=()=>{};import*as cY from"node:fs/promises";import*as VB from"node:path";function uR($){if(!$.endsWith(".crt"))return null;let w=$.slice(0,-4);if(w.length===0)return null;if(w.startsWith("_wildcard."))return`*.${w.slice(10)}`;return w}async function vR($,w,Y,A){try{let[X,J]=await Promise.all([cY.readFile(w,"utf8"),cY.readFile(Y,"utf8")]);return{serverName:$,cert:X,key:J}}catch(X){return N("sni",`skipping ${$}: ${X.message}`,A),null}}async function a1($,w){let Y=new Map;if($.certsDir){let X=[];try{X=await cY.readdir($.certsDir)}catch(J){N("sni",`certsDir read failed (${$.certsDir}): ${J.message}`,w)}for(let J of X){let U=uR(J);if(!U)continue;let B=J.slice(0,-4);Y.set(U,{certPath:VB.join($.certsDir,J),keyPath:VB.join($.certsDir,`${B}.key`)})}}if($.domains)for(let[X,J]of Object.entries($.domains))Y.set(X,J);let A=[];for(let[X,J]of Y){let U=await vR(X,J.certPath,J.keyPath,w);if(U)A.push(U)}return A}var S8=t(()=>{X0()});import*as Mw from"node:fs/promises";import*as CB from"node:path";function iR($,w){if(!w||w.length===0)return!1;return w.some((Y)=>{let A=Y.startsWith(".")?Y.slice(1):Y;return $===A||$.endsWith(`.${A}`)})}function d5($){if(!$||$.length>253)return!1;if($.includes("/")||$.includes(":")||$.includes(" "))return!1;if($.startsWith("*"))return!1;return/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i.test($)}class iY{config;certsDir;onCertAdded;http01Store;issuer;verbose;negativeCacheMs;certs=new Map;inFlight=new Map;negativeCache=new Map;constructor($){this.config=$.config,this.certsDir=$.certsDir,this.onCertAdded=$.onCertAdded,this.http01Store=$.http01Store??_X,this.issuer=$.issuer??wW,this.verbose=$.verbose??!1,this.negativeCacheMs=$.negativeCacheMs??cR;for(let w of $.initial??[])this.certs.set(w.serverName,w)}get challengeStore(){return this.http01Store}sniEntries(){return Array.from(this.certs.values())}hasCert($){return this.certs.has($)}async isApproved($){if(!d5($))return!1;if(iR($,this.config.allowedSuffixes))return!0;if(this.config.ask)try{return await this.config.ask($)}catch(w){return N("on-demand",`ask(${$}) threw: ${w.message}`,this.verbose),!1}return!1}async ensureCert($){if(!this.config.enabled)return!1;if(this.certs.has($))return!0;if(!d5($))return!1;let w=this.inFlight.get($);if(w)return w;let Y=this.negativeCache.get($);if(Y!==void 0&&Date.now()<Y)return N("on-demand",`${$} negatively cached for ${Y-Date.now()}ms`,this.verbose),!1;let A=this.issue($).finally(()=>{this.inFlight.delete($)});return this.inFlight.set($,A),A}async issue($){if(this.certs.has($))return!0;if(await this.loadFromDisk($))return!0;if(!await this.isApproved($))return N("on-demand",`refused issuance for ${$} (not approved)`,this.verbose),this.cacheNegative($),!1;try{N("on-demand",`issuing cert for ${$} (staging=${this.config.staging??!1})`,this.verbose);let w=await this.issuer({domains:[$],method:"http-01",http01Store:this.http01Store,email:this.config.email,staging:this.config.staging});await this.persist($,w.fullChainPem,w.keyPem);let Y={serverName:$,cert:w.fullChainPem,key:w.keyPem};return this.certs.set($,Y),this.negativeCache.delete($),N("on-demand",`issued + installed cert for ${$}`,this.verbose),await this.onCertAdded?.(this.sniEntries()),!0}catch(w){return this.cacheNegative($),N("on-demand",`issuance for ${$} failed: ${w.message}`,this.verbose),!1}}cacheNegative($){if(this.negativeCache.size>=g5){let w=Date.now();for(let[Y,A]of this.negativeCache)if(A<=w)this.negativeCache.delete(Y);if(this.negativeCache.size>=g5){let Y=this.negativeCache.keys().next().value;if(Y!==void 0)this.negativeCache.delete(Y)}}this.negativeCache.set($,Date.now()+this.negativeCacheMs)}async loadFromDisk($){let{certPath:w,keyPath:Y}=this.pathsFor($);try{let[A,X]=await Promise.all([Mw.readFile(w,"utf8"),Mw.readFile(Y,"utf8")]),J={serverName:$,cert:A,key:X};return this.certs.set($,J),N("on-demand",`adopted existing on-disk cert for ${$}`,this.verbose),await this.onCertAdded?.(this.sniEntries()),!0}catch{return!1}}pathsFor($){return{certPath:CB.join(this.certsDir,`${$}.crt`),keyPath:CB.join(this.certsDir,`${$}.key`)}}async persist($,w,Y){await Mw.mkdir(this.certsDir,{recursive:!0}).catch(()=>{});let{certPath:A,keyPath:X}=this.pathsFor($);await Promise.all([Mw.writeFile(A,w,"utf8"),Mw.writeFile(X,Y,{encoding:"utf8",mode:384})])}}var cR=60000,g5=4096;var QB=t(()=>{bX();X0()});import{existsSync as mR,readdirSync as BO,readFileSync as gR,statSync as dR}from"node:fs";import{homedir as lR}from"node:os";import{isAbsolute as nR,join as s1}from"node:path";function l5($,w){if($==="~")return w;if($.startsWith("~/"))return s1(w,$.slice(2));return $}function aR($){let w=$.indexOf(":");return(w===-1?$:$.slice(0,w)).toLowerCase()}function n5($){return $.replace(/[^a-z0-9._-]/gi,"-").replace(/^[-.]+|[-.]+$/g,"")||"site"}function sR($,w){for(let Y of w){let A=`.${Y}`;if($.endsWith(A)){let X=$.slice(0,-A.length);if(X.length>0&&!X.includes(".")&&/^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i.test(X))return X}}return null}function oR($,w){let Y=w.readText(s1($,"rpx.site.json"));if(Y)try{let X=JSON.parse(Y);if(X&&typeof X==="object")return X}catch{}let A=w.readText(s1($,"package.json"));if(A)try{let X=JSON.parse(A);if(X.rpx&&typeof X.rpx==="object")return X.rpx}catch{}return null}function eR($){let w=$.selfRegisters??!1;return{command:$.command,env:$.env,urlEnv:$.urlEnv,selfRegisters:w,routes:$.routes??(w?void 0:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}])}}function $M($,w){let Y=oR($,w);if(Y?.command)return eR(Y);let A=w.fileExists(s1($,"buddy")),X=w.readText(s1($,"package.json")),J=null;if(X)try{J=JSON.parse(X)}catch{J=null}let U={...J?.dependencies??{},...J?.devDependencies??{}};if(A||Object.keys(U).some((W)=>W==="stacks"||W.startsWith("@stacksjs/")))return{command:A?"./buddy dev":"bun run dev",env:{STACKS_PROXY_MANAGED:"1"},urlEnv:["APP_URL"],routes:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0},{path:"/api",portEnv:"PORT_API",defaultPort:3008,stripPrefix:!1,readyGate:!1},{path:"/docs",portEnv:"PORT_DOCS",defaultPort:3006,stripPrefix:!0,readyGate:!1}]};if(J?.scripts?.dev)return{command:"bun run dev",routes:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}]};return null}function LB($,w={}){let Y={dirExists:w.dirExists??yB.dirExists,fileExists:w.fileExists??yB.fileExists,readText:w.readText??yB.readText},A=w.detect??$M,X=w.homeDir??lR(),J=$.tlds??rR,U=($.roots??pR).map((K)=>l5(K,X)),B=$.idleTimeoutMs??tR,W=new Map;for(let K of $.sites??[])W.set(K.to,K);let j=(K)=>K.idleTimeoutMs??B;function z(K){let F=gA(W,K);if(!F)return null;let T=nR(F.dir)?F.dir:l5(F.dir,X),q=F.selfRegisters??!1,E=F.routes??[];if(!q&&E.length===0)E=A(T,Y)?.routes??[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}];let H=p5({...F.env??{}},void 0,K);return{host:K,id:n5(K),dir:T,command:F.command,env:H,routes:E,selfRegisters:q,idleTimeoutMs:j(F),source:"config"}}function G(K){let F=sR(K,J);if(!F)return null;for(let T of U){let q=s1(T,F);if(!Y.dirExists(q))continue;let E=A(q,Y);if(!E)continue;let H=E.selfRegisters??!1;return{host:K,id:n5(K),dir:q,command:E.command,env:p5({...E.env??{}},E.urlEnv,K),routes:H?[]:E.routes??[],selfRegisters:H,idleTimeoutMs:B,source:"discovered"}}return null}return{resolve(K){let F=aR(K);if(!F)return null;return z(F)??G(F)}}}function p5($,w,Y){if(!w)return $;let A=`https://${Y}`;for(let X of w)if($[X]===void 0)$[X]=A;return $}var pR,rR,tR=1800000,yB;var OB=t(()=>{pR=["~/Code"],rR=["localhost","test"],yB={dirExists:($)=>{try{return dR($).isDirectory()}catch{return!1}},fileExists:($)=>{try{return mR($)}catch{return!1}},readText:($)=>{try{return gR($,"utf8")}catch{return null}}}});import*as Z8 from"node:net";function Iw($,w,Y){return N("port",`Checking if port ${$} is in use on ${w}`,Y),new Promise((A)=>{let X=Z8.createServer(),J=setTimeout(()=>{N("port",`Checking port ${$} timed out, assuming it's in use`,Y),X.close(),A(!0)},3000);X.once("error",(U)=>{if(clearTimeout(J),U.code==="EADDRINUSE")N("port",`Port ${$} is in use`,Y),A(!0);else N("port",`Error checking port ${$}: ${U.message}`,Y),A(!0)}),X.once("listening",()=>{clearTimeout(J),N("port",`Port ${$} is available`,Y),X.close(),A(!1)});try{X.listen($,w)}catch(U){clearTimeout(J),N("port",`Exception checking port ${$}: ${U}`,Y),A(!0)}})}async function _B($,w,Y,A=50){N("port",`Finding available port starting from ${$} (max attempts: ${A})`,Y);let X=$,J=0;while(J<A){if(J++,!await Iw(X,w,Y))return N("port",`Found available port: ${X} after ${J} attempts`,Y),X;N("port",`Port ${X} is in use, trying ${X+1} (attempt ${J}/${A})`,Y),X++}throw Error(`Unable to find available port after ${A} attempts starting from ${$}`)}function r5($,w,Y=5000,A){return N("port",`Testing connection to ${w}:${$}`,A),new Promise((X)=>{let J=Z8.connect({host:w,port:$,timeout:Y});J.once("connect",()=>{N("port",`Successfully connected to ${w}:${$}`,A),J.end(),X(!0)}),J.once("timeout",()=>{N("port",`Connection to ${w}:${$} timed out`,A),J.destroy(),X(!1)}),J.once("error",(U)=>{N("port",`Failed to connect to ${w}:${$}: ${U.message}`,A),J.destroy(),X(!1)})})}class h8{usedPorts=new Set;hostname;verbose;maxRetries;constructor($="0.0.0.0",w,Y=50){this.hostname=$,this.verbose=w,this.maxRetries=Y}async getNextAvailablePort($,w=!1){if(this.usedPorts.has($))return this.findNextAvailablePort($+1,w);if(await Iw($,this.hostname,this.verbose))return this.findNextAvailablePort($+1,w);if(w){if(!await r5($,this.hostname,3000,this.verbose))return N("port",`Port ${$} is available but not connectable, trying next port`,this.verbose),this.findNextAvailablePort($+1,w)}return this.usedPorts.add($),$}async findNextAvailablePort($,w=!1){let Y=await _B($,this.hostname,this.verbose,this.maxRetries);if(w){if(!await r5(Y,this.hostname,3000,this.verbose))if(Y<$+this.maxRetries)return this.findNextAvailablePort(Y+1,w);else throw Error(`Unable to find a connectable port after ${this.maxRetries} attempts`)}return this.usedPorts.add(Y),Y}releasePort($){N("port",`Releasing port ${$}`,this.verbose),this.usedPorts.delete($)}}var NO;var SB=t(()=>{X0();NO=new h8});import*as k8 from"node:fs";import*as n0 from"node:fs/promises";import{homedir as wM}from"node:os";import*as ZB from"node:path";import*as D8 from"node:process";function L$(){return ZB.join(wM(),".stacks","rpx","registry.d")}function mY($){return typeof $==="string"&&$.length>0&&$.length<=128&&YM.test($)}function hB($,w){if(!mY(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return ZB.join($,`${w}.json`)}function r0($){if(!Number.isInteger($)||$<=0)return!1;try{return D8.kill($,0),!0}catch(w){return w.code==="EPERM"}}function t5($){if(!$||typeof $!=="object")return!1;let w=$,Y=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0,A=typeof w.from==="string"&&w.from.length>0||Array.isArray(w.from)&&w.from.length>0,X=typeof w.static==="string"||!!w.static&&typeof w.static==="object"&&typeof w.static.dir==="string",J=w.path===void 0||typeof w.path==="string";return typeof w.id==="string"&&mY(w.id)&&(A||X)&&typeof w.to==="string"&&w.to.length>0&&J&&Y&&typeof w.createdAt==="string"}async function AM($){await n0.mkdir($,{recursive:!0})}async function x8($,w=L$(),Y){if(!t5($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await AM(w);let A=hB(w,$.id),X=`${A}.tmp.${D8.pid}.${Date.now()}`,J=JSON.stringify($,null,2);try{await n0.writeFile(X,J,{encoding:"utf8",mode:420}),await n0.rename(X,A),N("registry",`wrote entry ${$.id} → ${A}`,Y)}catch(U){throw await n0.unlink(X).catch(()=>{}),U}}async function gY($,w=L$(),Y){let A=hB(w,$);try{await n0.unlink(A),N("registry",`removed entry ${$}`,Y)}catch(X){if(X.code!=="ENOENT")throw X}}async function XM($,w=L$(),Y){let A=hB(w,$);try{let X=await n0.readFile(A,"utf8"),J=JSON.parse(X);if(!t5(J))return N("registry",`entry ${$} failed validation, removing`,Y),await n0.unlink(A).catch(()=>{}),null;return J}catch(X){if(X.code==="ENOENT")return null;if(X instanceof SyntaxError)return N("registry",`entry ${$} has invalid JSON, removing`,Y),await n0.unlink(A).catch(()=>{}),null;throw X}}async function y$($=L$(),w){let Y;try{Y=await n0.readdir($)}catch(X){if(X.code==="ENOENT")return[];throw X}let A=[];for(let X of Y){if(!X.endsWith(".json"))continue;let J=X.slice(0,-5);if(!mY(J))continue;let U=await XM(J,$,w);if(U)A.push(U)}return A}async function o1($=L$(),w){let Y=await y$($,w),A=0;for(let X of Y){if(X.pid===void 0)continue;if(!r0(X.pid))N("registry",`GC: pid ${X.pid} for ${X.id} is dead, removing`,w),await gY(X.id,$,w).catch(()=>{}),A++}return A}function dY($,w={}){let Y=w.dir??L$(),A=w.debounceMs??100,X=w.pollMs??Math.max(A*2,250),J=w.verbose;k8.mkdirSync(Y,{recursive:!0});let U=null,B=!1,W=null,j=!1,z=(E)=>{return JSON.stringify(E.map((H)=>({id:H.id,from:H.from,to:H.to,path:H.path,pid:H.pid,pathRewrites:H.pathRewrites,cleanUrls:H.cleanUrls,changeOrigin:H.changeOrigin,static:H.static,loadBalancer:H.loadBalancer})).sort((H,M)=>H.id.localeCompare(M.id)))},G=()=>{if(U=null,B)return;y$(Y,J).then((E)=>{return W=z(E),$(E)}).catch((E)=>{N("registry",`watcher onChange failed: ${E}`,J)})},K=()=>{if(B)return;if(U)clearTimeout(U);U=setTimeout(G,A)},T=setInterval(()=>{if(B||j)return;j=!0,y$(Y,J).then((E)=>{if(z(E)!==W)K()}).catch((E)=>{N("registry",`watcher poll failed: ${E}`,J)}).finally(()=>{j=!1})},X),q=k8.watch(Y,{persistent:!0},(E,H)=>{if(H&&/\.tmp\.\d+\.\d+$/.test(H))return;K()});return q.on("error",(E)=>{N("registry",`watcher error: ${E}`,J)}),K(),{close:()=>{if(B=!0,U)clearTimeout(U);clearInterval(T),q.close()}}}var YM;var e1=t(()=>{X0();YM=/^[a-zA-Z0-9._-]+$/});import{closeSync as a5,openSync as JM,readFileSync as UM}from"node:fs";import*as s5 from"node:fs/promises";import{spawn as WM}from"node:child_process";import{homedir as BM}from"node:os";import*as lY from"node:path";import*as M$ from"node:process";class P8{resolver;registryDir;rpxDir;verbose;startupTimeoutMs;pollIntervalMs;restartDelayMs;killGraceMs;launch;probePort;pickPort;isHostRoutable;onSiteActivating;now;writeEntry;removeEntry;sites=new Map;reaper;stopped=!1;constructor($){this.resolver=$.resolver,this.registryDir=$.registryDir??L$(),this.rpxDir=$.rpxDir??lY.join(BM(),".stacks","rpx"),this.verbose=$.verbose??!1,this.startupTimeoutMs=$.startupTimeoutMs??jM,this.pollIntervalMs=$.pollIntervalMs??zM,this.restartDelayMs=$.restartDelayMs??KM,this.killGraceMs=$.killGraceMs??FM,this.launch=$.launcher??qM(this.verbose),this.probePort=$.probePort??NM,this.pickPort=$.pickPort??((Y)=>_B(Y,"127.0.0.1")),this.isHostRoutable=$.isHostRoutable??(()=>!1),this.onSiteActivating=$.onSiteActivating,this.now=$.now??Date.now,this.writeEntry=$.writeEntry??x8,this.removeEntry=$.removeEntry??gY;let w=$.reapIntervalMs??GM;if(this.reaper=setInterval(()=>{this.reapIdle()},w),typeof this.reaper.unref==="function")this.reaper.unref()}async onRequest($){if(this.stopped)return{kind:"unknown"};let w=this.sites.get($);if(w&&w.status==="failed"&&this.now()-w.failedAt>=this.restartDelayMs)this.sites.delete($),w=void 0;if(!w){let Y=this.resolver.resolve($);if(!Y)return{kind:"unknown"};w=await this.start(Y)}if(w.lastAccess=this.now(),w.status==="ready")return{kind:"ready",host:$};if(w.status==="failed")return{kind:"failed",host:$,error:w.error??"failed to start",logTail:this.readLogTail(w)};return{kind:"starting",host:$,sinceMs:this.now()-w.startedAt,source:w.site.source,logTail:this.readLogTail(w,16)}}async start($){try{this.onSiteActivating?.($.host)}catch{}let w=new Map;if(!$.selfRegisters)for(let B of $.routes){if(w.has(B.portEnv))continue;let W=await this.pickPort(B.defaultPort??3000);w.set(B.portEnv,W)}let Y=lY.join(this.rpxDir,"sites",`${$.id}.log`);await s5.mkdir(lY.dirname(Y),{recursive:!0}).catch(()=>{});let A=this.buildEnv($,w),X=null,J;try{X=this.launch({command:$.command,cwd:$.dir,env:A,logPath:Y})}catch(B){J=`failed to spawn: ${B.message}`}let U={site:$,status:J?"failed":"starting",handle:X,ports:w,routeIds:[],startedAt:this.now(),lastAccess:this.now(),failedAt:J?this.now():0,error:J,logPath:Y,exited:!1,ready:Promise.resolve()};if(this.sites.set($.host,U),J)return R.warn(`rpx: site ${$.host} ${J}`),U;return R.info(`rpx: booting ${$.host} → ${$.command} (${$.dir})`),X.exited.then((B)=>this.onProcessExit(U,B)).catch(()=>{}),U.ready=this.driveReadiness(U).catch((B)=>{N("sites",`readiness loop for ${$.host} threw: ${B}`,this.verbose)}),U}async onProcessExit($,w){if($.exited=!0,this.stopped||this.sites.get($.site.host)!==$)return;if($.status==="ready"){R.warn(`rpx: ${$.site.host} exited${w!==null?` (code ${w})`:""} — will reboot on next request`),this.sites.delete($.site.host);for(let Y of $.routeIds)await this.removeEntry(Y,this.registryDir,this.verbose).catch(()=>{})}else if($.status==="starting")this.fail($,`process exited${w!==null?` with code ${w}`:""} before becoming ready`)}async driveReadiness($){let{site:w}=$,Y=this.now()+this.startupTimeoutMs,A=w.selfRegisters?()=>this.isHostRoutable(w.host):await this.makeGateProbe(w,$.ports);while(this.now()<Y&&!this.stopped){if($.status!=="starting"||$.exited)return;if(await A()){if(await this.publishRoutes($),$.status==="starting")$.status="ready",R.success(`rpx: ${w.host} ready`);return}await kB(this.pollIntervalMs)}if($.status==="starting")this.fail($,`did not become ready within ${Math.round(this.startupTimeoutMs/1000)}s`)}async makeGateProbe($,w){let Y=$.routes.filter((X)=>X.readyGate??Q$(X.path)==="/").map((X)=>w.get(X.portEnv)).filter((X)=>typeof X==="number"),A=Y.length>0?Y:[...w.values()];return async()=>{for(let X of A)if(!await this.probePort(X))return!1;return A.length>0}}async publishRoutes($){let{site:w,ports:Y}=$;if(w.selfRegisters||w.routes.length===0)return;let A=w.routes.find((W)=>Q$(W.path)==="/")??w.routes[0],X=Y.get(A.portEnv);if(X===void 0)return;let J=[];for(let W of w.routes){if(W===A)continue;let j=Y.get(W.portEnv);if(j===void 0)continue;J.push({from:Q$(W.path),to:`localhost:${j}`,stripPrefix:W.stripPrefix??!1})}let U={id:w.id,from:`localhost:${X}`,to:w.host,cwd:w.dir,createdAt:new Date(this.now()).toISOString(),pathRewrites:J.length>0?J:void 0,pid:$.handle?.pid};await this.writeEntry(U,this.registryDir,this.verbose),$.routeIds=[w.id];let B=this.now()+2000;while(this.now()<B&&!this.isHostRoutable(w.host))await kB(50)}fail($,w){$.status="failed",$.error=w,$.failedAt=this.now(),R.warn(`rpx: site ${$.site.host} failed — ${w}`),this.killProcess($)}buildEnv($,w){let Y={};for(let[A,X]of Object.entries(M$.env))if(typeof X==="string")Y[A]=X;Object.assign(Y,$.env);for(let[A,X]of w)Y[A]=String(X);return Y.RPX_SITE_HOST=$.host,Y.RPX_SITE_URL=`https://${$.host}`,Y}readLogTail($,w=40){try{return UM($.logPath,"utf8").split(`
219
219
  `).slice(-w).join(`
220
- `).trim()}catch{return""}}async stop($){let w=this.sites.get($);if(!w)return;this.sites.delete($);for(let Y of w.routeIds)await this.removeEntry(Y,this.registryDir,this.verbose).catch(()=>{});await this.killProcess(w),R.info(`rpx: stopped ${$}`)}async killProcess($){let w=$.handle;if(!w)return;$.handle=null;try{w.stop("SIGTERM")}catch{}let Y=setTimeout(()=>{try{w.stop("SIGKILL")}catch{}},this.killGraceMs);if(typeof Y.unref==="function")Y.unref();await Promise.race([w.exited.catch(()=>{}),IB(this.killGraceMs+500)]),clearTimeout(Y)}async reapIdle(){if(this.stopped)return;let $=this.now();for(let[w,Y]of this.sites){let A=Y.site.idleTimeoutMs;if(A<=0)continue;let X=$-Y.lastAccess;if((Y.status==="ready"||$-Y.startedAt>this.startupTimeoutMs)&&X>A)N("sites",`reaping ${w} (idle ${Math.round(X/1000)}s)`,this.verbose),await this.stop(w)}}list(){let $=this.now();return[...this.sites.values()].map((w)=>({host:w.site.host,dir:w.site.dir,status:w.status,pid:w.handle?.pid??null,ports:Object.fromEntries(w.ports),uptimeMs:$-w.startedAt,idleMs:$-w.lastAccess,error:w.error}))}async stopAll(){this.stopped=!0,clearInterval(this.reaper),await Promise.allSettled([...this.sites.keys()].map(($)=>this.stop($)))}}function IB($){return new Promise((w)=>setTimeout(w,$))}async function rR($){let w=new AbortController,Y=setTimeout(()=>w.abort(),2000);try{return await fetch(`http://127.0.0.1:${$}/`,{signal:w.signal,redirect:"manual"}),!0}catch{return!1}finally{clearTimeout(Y)}}function tR($){let w=aR();return({command:Y,cwd:A,env:X,logPath:J})=>{let U=cR(J,"a");try{let B=iR("sh",["-c",Y],{cwd:A,env:X,detached:!0,stdio:["ignore",U,U],...w?{uid:w.uid,gid:w.gid}:{}}),W=B.pid;if(W===void 0)throw Error("spawn returned no pid");let j=new Promise((z)=>{B.once("exit",(G)=>{z(G)}),B.once("error",()=>{z(null)})}).finally(()=>{try{D5(U)}catch{}});return N("sites",`spawned pid ${W}: sh -c ${Y} (cwd ${A})`,$),{pid:W,exited:j,stop:(z="SIGTERM")=>{try{M$.kill(-W,z)}catch{try{B.kill(z)}catch{}}}}}catch(B){try{D5(U)}catch{}throw B}}}function aR(){if(M$.platform==="win32")return null;if(!(typeof M$.getuid==="function"&&M$.getuid()===0))return null;let w=Number.parseInt(M$.env.SUDO_UID??"",10),Y=Number.parseInt(M$.env.SUDO_GID??"",10);if(!Number.isInteger(w)||w<=0||!Number.isInteger(Y)||Y<=0)return null;return{uid:w,gid:Y}}var gR=120000,lR=200,dR=30000,nR=3000,pR=4000;var VB=o(()=>{kY();TB();r1();X0();u$()});function t1($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function P5($,w,Y){return`<!doctype html>
220
+ `).trim()}catch{return""}}async stop($){let w=this.sites.get($);if(!w)return;this.sites.delete($);for(let Y of w.routeIds)await this.removeEntry(Y,this.registryDir,this.verbose).catch(()=>{});await this.killProcess(w),R.info(`rpx: stopped ${$}`)}async killProcess($){let w=$.handle;if(!w)return;$.handle=null;try{w.stop("SIGTERM")}catch{}let Y=setTimeout(()=>{try{w.stop("SIGKILL")}catch{}},this.killGraceMs);if(typeof Y.unref==="function")Y.unref();await Promise.race([w.exited.catch(()=>{}),kB(this.killGraceMs+500)]),clearTimeout(Y)}async reapIdle(){if(this.stopped)return;let $=this.now();for(let[w,Y]of this.sites){let A=Y.site.idleTimeoutMs;if(A<=0)continue;let X=$-Y.lastAccess;if((Y.status==="ready"||$-Y.startedAt>this.startupTimeoutMs)&&X>A)N("sites",`reaping ${w} (idle ${Math.round(X/1000)}s)`,this.verbose),await this.stop(w)}}list(){let $=this.now();return[...this.sites.values()].map((w)=>({host:w.site.host,dir:w.site.dir,status:w.status,pid:w.handle?.pid??null,ports:Object.fromEntries(w.ports),uptimeMs:$-w.startedAt,idleMs:$-w.lastAccess,error:w.error}))}async stopAll(){this.stopped=!0,clearInterval(this.reaper),await Promise.allSettled([...this.sites.keys()].map(($)=>this.stop($)))}}function kB($){return new Promise((w)=>setTimeout(w,$))}async function NM($){let w=new AbortController,Y=setTimeout(()=>w.abort(),2000);try{return await fetch(`http://127.0.0.1:${$}/`,{signal:w.signal,redirect:"manual"}),!0}catch{return!1}finally{clearTimeout(Y)}}function qM($){let w=EM();return({command:Y,cwd:A,env:X,logPath:J})=>{let U=JM(J,"a");try{let B=WM("sh",["-c",Y],{cwd:A,env:X,detached:!0,stdio:["ignore",U,U],...w?{uid:w.uid,gid:w.gid}:{}}),W=B.pid;if(W===void 0)throw Error("spawn returned no pid");let j=new Promise((z)=>{B.once("exit",(G)=>{z(G)}),B.once("error",()=>{z(null)})}).finally(()=>{try{a5(U)}catch{}});return N("sites",`spawned pid ${W}: sh -c ${Y} (cwd ${A})`,$),{pid:W,exited:j,stop:(z="SIGTERM")=>{try{M$.kill(-W,z)}catch{try{B.kill(z)}catch{}}}}}catch(B){try{a5(U)}catch{}throw B}}}function EM(){if(M$.platform==="win32")return null;if(!(typeof M$.getuid==="function"&&M$.getuid()===0))return null;let w=Number.parseInt(M$.env.SUDO_UID??"",10),Y=Number.parseInt(M$.env.SUDO_GID??"",10);if(!Number.isInteger(w)||w<=0||!Number.isInteger(Y)||Y<=0)return null;return{uid:w,gid:Y}}var jM=120000,zM=200,GM=30000,KM=3000,FM=4000;var DB=t(()=>{vY();SB();e1();X0();i$()});function $Y($){return $.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function o5($,w,Y){return`<!doctype html>
221
221
  <html lang="en">
222
222
  <head>
223
223
  <meta charset="utf-8">
224
224
  <meta name="viewport" content="width=device-width, initial-scale=1">
225
225
  ${Y>0?`<meta http-equiv="refresh" content="${Y}">`:""}
226
- <title>${t1($)}</title>
227
- <style>${sR}</style>
226
+ <title>${$Y($)}</title>
227
+ <style>${TM}</style>
228
228
  </head>
229
229
  <body><main class="card">${w}</main></body>
230
- </html>`}function yB($){let w=Math.max(1,Math.round($.sinceMs/1000)),Y=$.logTail?`<pre>${t1($.logTail)}</pre>`:"",A=`
231
- <div class="row"><div class="spinner"></div><h1>Starting ${t1($.host)}…</h1></div>
230
+ </html>`}function xB($){let w=Math.max(1,Math.round($.sinceMs/1000)),Y=$.logTail?`<pre>${$Y($.logTail)}</pre>`:"",A=`
231
+ <div class="row"><div class="spinner"></div><h1>Starting ${$Y($.host)}…</h1></div>
232
232
  <p>rpx is booting this site's dev server on demand. This page reloads itself —
233
233
  it'll switch to the app as soon as it's ready (usually a few seconds).</p>
234
234
  <p>Booting for ${w}s.</p>
235
- ${Y}`;return new Response(P5(`Starting ${$.host}`,A,2),{status:503,headers:{"content-type":"text/html; charset=utf-8","retry-after":"2","cache-control":"no-store"}})}function CB($){let w=$.logTail?`<pre>${t1($.logTail)}</pre>`:"<p>No output was captured.</p>",Y=`
236
- <div class="row"><div class="dot"></div><h1>${t1($.host)} failed to start</h1></div>
237
- <p>${t1($.error)}</p>
235
+ ${Y}`;return new Response(o5(`Starting ${$.host}`,A,2),{status:503,headers:{"content-type":"text/html; charset=utf-8","retry-after":"2","cache-control":"no-store"}})}function PB($){let w=$.logTail?`<pre>${$Y($.logTail)}</pre>`:"<p>No output was captured.</p>",Y=`
236
+ <div class="row"><div class="dot"></div><h1>${$Y($.host)} failed to start</h1></div>
237
+ <p>${$Y($.error)}</p>
238
238
  ${w}
239
- <p>Fix the cause and reload — rpx retries the boot on the next request.</p>`;return new Response(P5(`${$.host} failed`,Y,5),{status:502,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store"}})}var sR=`
239
+ <p>Fix the cause and reload — rpx retries the boot on the next request.</p>`;return new Response(o5(`${$.host} failed`,Y,5),{status:502,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store"}})}var TM=`
240
240
  :root { color-scheme: light dark }
241
241
  * { box-sizing: border-box }
242
242
  body {
@@ -262,59 +262,59 @@ ${Y>0?`<meta http-equiv="refresh" content="${Y}">`:""}
262
262
  }
263
263
  .dot { width: 10px; height: 10px; border-radius: 50%; background: #f87171 }
264
264
  @keyframes spin { to { transform: rotate(360deg) } }
265
- `;import{spawn as oR}from"node:child_process";import*as $w from"node:fs/promises";import{homedir as eR}from"node:os";import*as vY from"node:path";import*as C0 from"node:process";function ww(){return vY.join(eR(),".stacks","rpx")}function u5($=ww()){return vY.join($,"daemon.pid")}async function b5($=ww()){try{let w=await $w.readFile(u5($),"utf8"),Y=Number.parseInt(w.trim(),10);if(!Number.isFinite(Y)||Y<=0)return null;return Y}catch(w){if(w.code==="ENOENT")return null;throw w}}async function $M($=ww()){await $w.unlink(u5($)).catch(()=>{})}function wM(){let $=C0.execPath,w=vY.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&C0.argv[1])return[$,C0.argv[1],"daemon:start"];return[$,"daemon:start"]}async function c5($={}){let w=$.rpxDir??ww(),Y=$.verbose??!1;await Yw({rpxDir:w,verbose:Y}).catch((z)=>{N("daemon",`DNS reconcile before ensureDaemonRunning: ${z}`,Y)});let A=await b5(w);if(A!==null&&r0(A))return N("daemon",`ensureDaemonRunning: already running pid=${A}`,Y),{pid:A,spawned:!1};if(A!==null)N("daemon",`ensureDaemonRunning: clearing stale pid=${A}`,Y),await $M(w);await $w.mkdir(w,{recursive:!0});let X=$.spawnCommand??wM();if(X.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");N("daemon",`spawning daemon: ${X.join(" ")}`,Y);let J=oR(X[0],X.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??C0.cwd(),env:$.spawnEnv?{...C0.env,...$.spawnEnv}:C0.env});J.unref();let U=null;J.once("error",(z)=>{U=z});let B=$.startupTimeoutMs??5000,W=$.pollIntervalMs??50,j=Date.now()+B;while(Date.now()<j){if(U)throw U;let z=await b5(w);if(z!==null&&r0(z))return N("daemon",`daemon registered with pid=${z}`,Y),{pid:z,spawned:!0};await new Promise((G)=>setTimeout(G,W))}if(U)throw U;throw Error(`rpx daemon failed to start within ${B}ms (rpxDir=${w})`)}var QB=o(()=>{u$();E8();R8();kY();I8();NB();EB();VB();ZY();_Y();r1();a1();X0()});import*as Mw from"node:fs/promises";import{homedir as YM}from"node:os";import*as LB from"node:path";function i5(){return LB.join(YM(),".stacks","rpx")}function OB($=i5()){return LB.join($,AM)}async function S8($=i5()){try{let w=await Mw.readFile(OB($),"utf8"),Y=JSON.parse(w);if(Y.version!==_8||!Array.isArray(Y.resolvers))return null;return{version:_8,resolvers:Y.resolvers.filter((A)=>typeof A==="string"),domains:Array.isArray(Y.domains)?Y.domains.filter((A)=>typeof A==="string"):[],ownerPid:typeof Y.ownerPid==="number"?Y.ownerPid:null,updatedAt:typeof Y.updatedAt==="string"?Y.updatedAt:""}}catch(w){if(w.code==="ENOENT")return null;throw w}}async function m5($,w){await Mw.mkdir($,{recursive:!0}),await Mw.writeFile(OB($),`${JSON.stringify(w,null,2)}
266
- `,"utf8")}async function _B($){await Mw.rm(OB($),{force:!0})}function g5($){let w=$.trim().toLowerCase().replace(/\.$/,"");if(!w||w.includes("127.0.0.1"))return null;if(w==="localhost"||w.endsWith(".localhost"))return null;if(/^\d{1,3}(\.\d{1,3}){3}$/.test(w))return null;if(!/^[a-z0-9.-]+$/.test(w))return null;return w}function XM($){let w=g5($);if(!w)return null;let Y=w.split(".");if(Y.length<2)return null;return Y.slice(-2).join(".")}function SB($){let w=new Set;for(let Y of $){let A=XM(Y);if(A)w.add(A)}return Array.from(w).sort()}function hB($){let w=new Set;for(let Y of $){let A=g5(Y);if(A)w.add(A)}return Array.from(w).sort()}var _8=1,AM="dns-state.json",v5;var l5=o(()=>{v5=["com","test","dev","app","page","local","localhost","example","invalid"]});var Z8={};$j(Z8,{tearDownDevelopmentDns:()=>Rw,syncDevelopmentDnsFromRegistry:()=>uw,stopDnsServer:()=>ZB,startDnsServer:()=>o5,setupResolver:()=>NM,setupDevelopmentDns:()=>PB,resolverFilePath:()=>s1,removeResolver:()=>qM,removeLegacyTldResolvers:()=>xB,reconcileStaleDevelopmentDns:()=>Yw,isRpxDevelopmentDnsAnswering:()=>e5,isDnsServerRunning:()=>BM,contentLooksLikeRpxResolver:()=>$6,RPX_RESOLVER_MARKER:()=>r5,DNS_PORT:()=>mY});import d5 from"node:dgram";import*as n5 from"node:fs/promises";import*as p5 from"node:path";import*as Aw from"node:process";function a5($){return{id:$.readUInt16BE(0),flags:$.readUInt16BE(2),qdcount:$.readUInt16BE(4),ancount:$.readUInt16BE(6),nscount:$.readUInt16BE(8),arcount:$.readUInt16BE(10)}}function s5($,w,Y=0){let A=[],X=w,J=0;while(!0){if(X>=$.length||++J>128)break;let U=$[X];if(U===0){X++;break}if((U&192)===192){if(X+1>=$.length||Y>=10)break;let B=$.readUInt16BE(X)&16383,{name:W}=s5($,B,Y+1);if(W)A.push(W);X+=2;break}if(X++,X+U>$.length)break;A.push($.subarray(X,X+U).toString("ascii")),X+=U}return{name:A.join("."),newOffset:X}}function JM($,w){let{name:Y,newOffset:A}=s5($,w),X=$.readUInt16BE(A),J=$.readUInt16BE(A+2);return{question:{name:Y,type:X,class:J},newOffset:A+4}}function iY($){let w=$.split("."),Y=[];for(let A of w)Y.push(Buffer.from([A.length])),Y.push(Buffer.from(A,"ascii"));return Y.push(Buffer.from([0])),Buffer.concat(Y)}function UM($,w,Y){let A=[],X=Buffer.alloc(12);X.writeUInt16BE($,0),X.writeUInt16BE(33152,2),X.writeUInt16BE(1,4),X.writeUInt16BE(1,6),X.writeUInt16BE(0,8),X.writeUInt16BE(0,10),A.push(X),A.push(iY(w.name));let J=Buffer.alloc(4);J.writeUInt16BE(w.type,0),J.writeUInt16BE(w.class,2),A.push(J),A.push(iY(w.name));let U=Buffer.alloc(10);if(U.writeUInt16BE(w.type,0),U.writeUInt16BE(1,2),U.writeUInt32BE(300,4),w.type===1){U.writeUInt16BE(4,8),A.push(U);let B=Y.split(".").map((W)=>Number.parseInt(W,10));A.push(Buffer.from(B))}else if(w.type===28)U.writeUInt16BE(16,8),A.push(U),A.push(Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]));else return X.writeUInt16BE(33155,2),X.writeUInt16BE(0,6),Buffer.concat([X,iY(w.name),J]);return Buffer.concat(A)}function WM($,w){let Y=[],A=Buffer.alloc(12);A.writeUInt16BE($,0),A.writeUInt16BE(33155,2),A.writeUInt16BE(1,4),A.writeUInt16BE(0,6),A.writeUInt16BE(0,8),A.writeUInt16BE(0,10),Y.push(A),Y.push(iY(w.name));let X=Buffer.alloc(4);return X.writeUInt16BE(w.type,0),X.writeUInt16BE(w.class,2),Y.push(X),Buffer.concat(Y)}async function o5($,w){if(Aw.platform!=="darwin")return!1;let Y=hB($);if(Y.length===0)return!1;if(t0){for(let A of Y)h8.add(A);return N("dns","DNS server already running — merged domains",w),!0}return h8=new Set(Y),new Promise((A)=>{t0=d5.createSocket("udp4"),t0.on("error",(X)=>{N("dns",`DNS server error: ${X.message}`,w),t0?.close(),t0=null,A(!1)}),t0.on("message",(X,J)=>{try{let U=a5(X),{question:B}=JM(X,12);N("dns",`Query for ${B.name} type ${B.type} from ${J.address}`,w);let W=B.name.toLowerCase(),j=!1;for(let G of h8)if(W===G||W.endsWith(`.${G}`)){j=!0;break}let z;if(j&&(B.type===1||B.type===28))z=UM(U.id,B,"127.0.0.1"),N("dns",`Responding with localhost for ${B.name}`,w);else z=WM(U.id,B),N("dns",`NXDOMAIN for ${B.name}`,w);t0?.send(z,J.port,J.address)}catch(U){N("dns",`Error processing DNS query: ${U}`,w)}}),t0.on("listening",()=>{let X=t0?.address();N("dns",`DNS server listening on ${X?.address}:${X?.port}`,w),A(!0)});try{t0.bind(mY,"127.0.0.1")}catch(X){N("dns",`Failed to bind DNS server: ${X}`,w),A(!1)}})}function ZB($){if(t0)N("dns","Stopping DNS server",$),t0.close(),t0=null,h8=new Set}function BM(){return t0!==null}async function e5($,w=500){let Y=$.trim().toLowerCase().replace(/\.$/,"");if(!Y)return!1;return new Promise((A)=>{let X=d5.createSocket("udp4"),J=setTimeout(()=>{X.close(),A(!1)},w);X.on("message",(B)=>{clearTimeout(J),X.close();try{let W=a5(B);A(W.ancount>0)}catch{A(!1)}}),X.on("error",()=>{clearTimeout(J),X.close(),A(!1)});let U=jM(Y,1);X.send(U,mY,"127.0.0.1",(B)=>{if(B)clearTimeout(J),X.close(),A(!1)})})}function jM($,w){let Y=Buffer.alloc(12);Y.writeUInt16BE(1,0),Y.writeUInt16BE(256,2),Y.writeUInt16BE(1,4);let A=Buffer.concat([iY($),Buffer.from([0,w,0,1])]);return Buffer.concat([Y,A])}function zM(){return`${r5}
265
+ `;import{spawn as HM}from"node:child_process";import*as Aw from"node:fs/promises";import{homedir as fM}from"node:os";import*as nY from"node:path";import*as Q0 from"node:process";function Xw(){return nY.join(fM(),".stacks","rpx")}function $6($=Xw()){return nY.join($,"daemon.pid")}async function e5($=Xw()){try{let w=await Aw.readFile($6($),"utf8"),Y=Number.parseInt(w.trim(),10);if(!Number.isFinite(Y)||Y<=0)return null;return Y}catch(w){if(w.code==="ENOENT")return null;throw w}}async function RM($=Xw()){await Aw.unlink($6($)).catch(()=>{})}function MM(){let $=Q0.execPath,w=nY.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&Q0.argv[1])return[$,Q0.argv[1],"daemon:start"];return[$,"daemon:start"]}async function w6($={}){let w=$.rpxDir??Xw(),Y=$.verbose??!1;await Jw({rpxDir:w,verbose:Y}).catch((z)=>{N("daemon",`DNS reconcile before ensureDaemonRunning: ${z}`,Y)});let A=await e5(w);if(A!==null&&r0(A))return N("daemon",`ensureDaemonRunning: already running pid=${A}`,Y),{pid:A,spawned:!1};if(A!==null)N("daemon",`ensureDaemonRunning: clearing stale pid=${A}`,Y),await RM(w);await Aw.mkdir(w,{recursive:!0});let X=$.spawnCommand??MM();if(X.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");N("daemon",`spawning daemon: ${X.join(" ")}`,Y);let J=HM(X[0],X.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??Q0.cwd(),env:$.spawnEnv?{...Q0.env,...$.spawnEnv}:Q0.env});J.unref();let U=null;J.once("error",(z)=>{U=z});let B=$.startupTimeoutMs??5000,W=$.pollIntervalMs??50,j=Date.now()+B;while(Date.now()<j){if(U)throw U;let z=await e5(w);if(z!==null&&r0(z))return N("daemon",`daemon registered with pid=${z}`,Y),{pid:z,spawned:!0};await new Promise((G)=>setTimeout(G,W))}if(U)throw U;throw Error(`rpx daemon failed to start within ${B}ms (rpxDir=${w})`)}var bB=t(()=>{i$();V8();L8();O8();vY();S8();QB();OB();DB();bY();DY();e1();wY();X0()});import*as Cw from"node:fs/promises";import{homedir as IM}from"node:os";import*as uB from"node:path";function A6(){return uB.join(IM(),".stacks","rpx")}function vB($=A6()){return uB.join($,VM)}async function u8($=A6()){try{let w=await Cw.readFile(vB($),"utf8"),Y=JSON.parse(w);if(Y.version!==b8||!Array.isArray(Y.resolvers))return null;return{version:b8,resolvers:Y.resolvers.filter((A)=>typeof A==="string"),domains:Array.isArray(Y.domains)?Y.domains.filter((A)=>typeof A==="string"):[],ownerPid:typeof Y.ownerPid==="number"?Y.ownerPid:null,updatedAt:typeof Y.updatedAt==="string"?Y.updatedAt:""}}catch(w){if(w.code==="ENOENT")return null;throw w}}async function X6($,w){await Cw.mkdir($,{recursive:!0}),await Cw.writeFile(vB($),`${JSON.stringify(w,null,2)}
266
+ `,"utf8")}async function cB($){await Cw.rm(vB($),{force:!0})}function J6($){let w=$.trim().toLowerCase().replace(/\.$/,"");if(!w||w.includes("127.0.0.1"))return null;if(w==="localhost"||w.endsWith(".localhost"))return null;if(/^\d{1,3}(\.\d{1,3}){3}$/.test(w))return null;if(!/^[a-z0-9.-]+$/.test(w))return null;return w}function CM($){let w=J6($);if(!w)return null;let Y=w.split(".");if(Y.length<2)return null;return Y.slice(-2).join(".")}function iB($){let w=new Set;for(let Y of $){let A=CM(Y);if(A)w.add(A)}return Array.from(w).sort()}function mB($){let w=new Set;for(let Y of $){let A=J6(Y);if(A)w.add(A)}return Array.from(w).sort()}var b8=1,VM="dns-state.json",Y6;var U6=t(()=>{Y6=["com","test","dev","app","page","local","localhost","example","invalid"]});var c8={};Gj(c8,{tearDownDevelopmentDns:()=>Vw,syncDevelopmentDnsFromRegistry:()=>iw,stopDnsServer:()=>gB,startDnsServer:()=>N6,setupResolver:()=>DM,setupDevelopmentDns:()=>pB,resolverFilePath:()=>YY,removeResolver:()=>PM,removeLegacyTldResolvers:()=>nB,reconcileStaleDevelopmentDns:()=>Jw,isRpxDevelopmentDnsAnswering:()=>q6,isDnsServerRunning:()=>OM,contentLooksLikeRpxResolver:()=>E6,RPX_RESOLVER_MARKER:()=>z6,DNS_PORT:()=>rY});import W6 from"node:dgram";import*as B6 from"node:fs/promises";import*as j6 from"node:path";import*as Uw from"node:process";function K6($){return{id:$.readUInt16BE(0),flags:$.readUInt16BE(2),qdcount:$.readUInt16BE(4),ancount:$.readUInt16BE(6),nscount:$.readUInt16BE(8),arcount:$.readUInt16BE(10)}}function F6($,w,Y=0){let A=[],X=w,J=0;while(!0){if(X>=$.length||++J>128)break;let U=$[X];if(U===0){X++;break}if((U&192)===192){if(X+1>=$.length||Y>=10)break;let B=$.readUInt16BE(X)&16383,{name:W}=F6($,B,Y+1);if(W)A.push(W);X+=2;break}if(X++,X+U>$.length)break;A.push($.subarray(X,X+U).toString("ascii")),X+=U}return{name:A.join("."),newOffset:X}}function QM($,w){let{name:Y,newOffset:A}=F6($,w),X=$.readUInt16BE(A),J=$.readUInt16BE(A+2);return{question:{name:Y,type:X,class:J},newOffset:A+4}}function pY($){let w=$.split("."),Y=[];for(let A of w)Y.push(Buffer.from([A.length])),Y.push(Buffer.from(A,"ascii"));return Y.push(Buffer.from([0])),Buffer.concat(Y)}function yM($,w,Y){let A=[],X=Buffer.alloc(12);X.writeUInt16BE($,0),X.writeUInt16BE(33152,2),X.writeUInt16BE(1,4),X.writeUInt16BE(1,6),X.writeUInt16BE(0,8),X.writeUInt16BE(0,10),A.push(X),A.push(pY(w.name));let J=Buffer.alloc(4);J.writeUInt16BE(w.type,0),J.writeUInt16BE(w.class,2),A.push(J),A.push(pY(w.name));let U=Buffer.alloc(10);if(U.writeUInt16BE(w.type,0),U.writeUInt16BE(1,2),U.writeUInt32BE(300,4),w.type===1){U.writeUInt16BE(4,8),A.push(U);let B=Y.split(".").map((W)=>Number.parseInt(W,10));A.push(Buffer.from(B))}else if(w.type===28)U.writeUInt16BE(16,8),A.push(U),A.push(Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]));else return X.writeUInt16BE(33155,2),X.writeUInt16BE(0,6),Buffer.concat([X,pY(w.name),J]);return Buffer.concat(A)}function LM($,w){let Y=[],A=Buffer.alloc(12);A.writeUInt16BE($,0),A.writeUInt16BE(33155,2),A.writeUInt16BE(1,4),A.writeUInt16BE(0,6),A.writeUInt16BE(0,8),A.writeUInt16BE(0,10),Y.push(A),Y.push(pY(w.name));let X=Buffer.alloc(4);return X.writeUInt16BE(w.type,0),X.writeUInt16BE(w.class,2),Y.push(X),Buffer.concat(Y)}async function N6($,w){if(Uw.platform!=="darwin")return!1;let Y=mB($);if(Y.length===0)return!1;if(t0){for(let A of Y)v8.add(A);return N("dns","DNS server already running — merged domains",w),!0}return v8=new Set(Y),new Promise((A)=>{t0=W6.createSocket("udp4"),t0.on("error",(X)=>{N("dns",`DNS server error: ${X.message}`,w),t0?.close(),t0=null,A(!1)}),t0.on("message",(X,J)=>{try{let U=K6(X),{question:B}=QM(X,12);N("dns",`Query for ${B.name} type ${B.type} from ${J.address}`,w);let W=B.name.toLowerCase(),j=!1;for(let G of v8)if(W===G||W.endsWith(`.${G}`)){j=!0;break}let z;if(j&&(B.type===1||B.type===28))z=yM(U.id,B,"127.0.0.1"),N("dns",`Responding with localhost for ${B.name}`,w);else z=LM(U.id,B),N("dns",`NXDOMAIN for ${B.name}`,w);t0?.send(z,J.port,J.address)}catch(U){N("dns",`Error processing DNS query: ${U}`,w)}}),t0.on("listening",()=>{let X=t0?.address();N("dns",`DNS server listening on ${X?.address}:${X?.port}`,w),A(!0)});try{t0.bind(rY,"127.0.0.1")}catch(X){N("dns",`Failed to bind DNS server: ${X}`,w),A(!1)}})}function gB($){if(t0)N("dns","Stopping DNS server",$),t0.close(),t0=null,v8=new Set}function OM(){return t0!==null}async function q6($,w=500){let Y=$.trim().toLowerCase().replace(/\.$/,"");if(!Y)return!1;return new Promise((A)=>{let X=W6.createSocket("udp4"),J=setTimeout(()=>{X.close(),A(!1)},w);X.on("message",(B)=>{clearTimeout(J),X.close();try{let W=K6(B);A(W.ancount>0)}catch{A(!1)}}),X.on("error",()=>{clearTimeout(J),X.close(),A(!1)});let U=_M(Y,1);X.send(U,rY,"127.0.0.1",(B)=>{if(B)clearTimeout(J),X.close(),A(!1)})})}function _M($,w){let Y=Buffer.alloc(12);Y.writeUInt16BE(1,0),Y.writeUInt16BE(256,2),Y.writeUInt16BE(1,4);let A=Buffer.concat([pY($),Buffer.from([0,w,0,1])]);return Buffer.concat([Y,A])}function SM(){return`${z6}
267
267
  nameserver 127.0.0.1
268
- port ${mY}
269
- `}function s1($){return p5.join(t5,$)}function $6($){return $.includes("127.0.0.1")&&$.includes(String(mY))}async function GM($){try{return await n5.readFile(s1($),"utf8")}catch(w){if(w.code==="ENOENT")return null;throw w}}async function kB($){if(Aw.platform!=="darwin")return;let{execSudoSync:w,getSudoPassword:Y,isProcessElevated:A}=await Promise.resolve().then(() => (X0(),x1));if(!A()&&!Y()){N("dns","Cannot flush DNS cache without SUDO_PASSWORD",$);return}try{w("dscacheutil -flushcache"),w("killall -HUP mDNSResponder 2>/dev/null || true"),N("dns","DNS cache flushed",$)}catch(X){N("dns",`Could not flush DNS cache: ${X}`,$)}}function w6($){if(!/^[a-z0-9.-]+$/.test($))throw Error(`refusing unsafe resolver basename: ${JSON.stringify($)}`)}async function FM($,w){w6($);let{execSudoSync:Y}=await Promise.resolve().then(() => (X0(),x1)),A=zM().replace(/\n/g,"\\n"),X=`bash -c 'mkdir -p ${t5} && printf "%b" "${A}" > ${s1($)}'`;Y(X),N("dns",`Created ${s1($)}`,w)}async function KM($,w){w6($);let{execSudoSync:Y}=await Promise.resolve().then(() => (X0(),x1));Y(`rm -f ${s1($)}`),N("dns",`Removed ${s1($)}`,w)}async function NM($,w){return PB({domains:w??[],verbose:$})}async function fM($,w){if(Aw.platform!=="darwin")return!0;let{getSudoPassword:Y,isProcessElevated:A}=await Promise.resolve().then(() => (X0(),x1));if(!A()&&!Y())return N("dns","SUDO_PASSWORD not set, cannot create resolver files",w),!1;try{for(let X of $)await FM(X,w);return await kB(w),!0}catch(X){return N("dns",`Failed to create resolver file: ${X}`,w),!1}}async function DB($,w){if(Aw.platform!=="darwin")return;let{getSudoPassword:Y,isProcessElevated:A}=await Promise.resolve().then(() => (X0(),x1));if(!A()&&!Y())return;try{for(let X of $)await KM(X,w);await kB(w)}catch(X){N("dns",`Failed to remove resolver files: ${X}`,w)}}async function xB($){if(Aw.platform!=="darwin")return[];let w=[];for(let Y of v5){let A=await GM(Y);if(A&&$6(A))await DB([Y],$),w.push(Y)}return w}async function PB($){let w=$.rpxDir??ww(),Y=hB($.domains);if(Y.length===0)return!1;let A=SB(Y),X=await o5(Y,$.verbose);if(!X){let B=Y[0];if(B&&await e5(B))X=!0;else N("dns","Dev DNS server not available on 127.0.0.1:15353",$.verbose)}if(!X)return!1;if(!await fM(A,$.verbose))return!1;let U={version:_8,resolvers:A,domains:Y,ownerPid:$.ownerPid??Aw.pid,updatedAt:new Date().toISOString()};return await m5(w,U),!0}async function uw($,w={}){let Y=$.map((W)=>W.to).filter(Boolean),A=w.rpxDir??ww(),X=SB(Y),B=((await S8(A))?.resolvers??[]).filter((W)=>!X.includes(W));if(B.length>0)await DB(B,w.verbose);if(X.length===0){ZB(w.verbose),await _B(A);return}await PB({domains:Y,rpxDir:A,verbose:w.verbose,ownerPid:w.ownerPid??Aw.pid})}async function Rw($={}){let w=$.rpxDir??ww();ZB($.verbose);let A=(await S8(w))?.resolvers??[];await DB(A,$.verbose),await xB($.verbose),await _B(w)}async function qM($){await Rw({verbose:$})}async function Yw($={}){let w=$.rpxDir??ww(),Y=await S8(w),A=Y?.ownerPid!=null&&r0(Y.ownerPid);if(Y&&!A){N("dns",`reconcile: owner pid ${Y.ownerPid} is gone — tearing down DNS`,$.verbose),await Rw($);return}let X=await xB($.verbose);if(X.length>0)N("dns",`reconcile: removed legacy TLD resolvers: ${X.join(", ")}`,$.verbose);await kB($.verbose)}var mY=15353,r5="# managed-by: rpx",t5="/etc/resolver",t0=null,h8;var a1=o(()=>{QB();l5();r1();X0();h8=new Set});import{dirname as lM,join as dM}from"path";import*as x0 from"process";import{fileURLToPath as nM}from"url";import{existsSync as d6}from"node:fs";import s8 from"node:fs/promises";import wj from"node:os";import o8 from"node:path";import Ow from"node:process";import{EventEmitter as n6}from"node:events";import Uw from"node:process";import Yj from"node:process";import YJ from"node:process";import aY from"node:process";import AY from"node:process";import Jj from"node:tty";import kF,{stdin as F4,stdout as K4}from"node:process";import Wj,{stdin as PF,stdout as bF}from"node:process";import uF from"node:readline";class jj{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let $=wj.homedir(),w=o8.join($,".config","clapp");this.configPath=o8.join(w,"telemetry.json")}async isEnabled(){if(Ow.env.DO_NOT_TRACK==="1"||Ow.env.DO_NOT_TRACK==="true")return!1;if(Ow.env.NO_TELEMETRY==="1"||Ow.env.NO_TELEMETRY==="true")return!1;return(await this.loadConfig()).enabled}async enable(){let $=await this.loadConfig();if($.enabled=!0,!$.userId)$.userId=this.generateUserId();await this.saveConfig($)}async disable(){let $=await this.loadConfig();$.enabled=!1,await this.saveConfig($)}async track($,w){if(!await this.isEnabled())return;let A={event:$,...w,timestamp:Date.now(),platform:wj.platform(),nodeVersion:Ow.version};if(this.events.push(A),this.events.length>=10)await this.send()}async trackCommand($,w){await this.track("command",{command:$,duration:w})}async trackError($,w){await this.track("error",{error:$,command:w})}async send(){if(!await this.isEnabled()||this.events.length===0)return!0;try{this.events=[],this.retryCount=0;let w=await this.loadConfig();return w.lastSent=Date.now(),await this.saveConfig(w),!0}catch{if(this.retryCount<this.maxRetries){this.retryCount++;let w=this.retryDelayMs*2**(this.retryCount-1);return await this.sleep(w),this.send()}return this.events=[],this.retryCount=0,!1}}async flush(){if(this.events.length===0)return!0;return this.send()}sleep($){return new Promise((w)=>setTimeout(w,$))}async status(){let $=await this.loadConfig();return{enabled:$.enabled,doNotTrack:Ow.env.DO_NOT_TRACK==="1"||Ow.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:$.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(d6(this.configPath)){let $=await s8.readFile(this.configPath,"utf-8");return this.config=JSON.parse($),this.config}}catch{}return this.config={enabled:!1},this.config}async saveConfig($){this.config=$;try{let w=o8.dirname(this.configPath);await s8.mkdir(w,{recursive:!0}),await s8.writeFile(this.configPath,JSON.stringify($,null,2),"utf-8")}catch{}}generateUserId(){let $=Math.random().toString(36).substring(2,15),w=Date.now().toString(36);return`${$}-${w}`}}var $4=new jj;function p6($,w={}){let Y={_:[]},A=w.alias||{},X=new Set(w.boolean||[]),J={};for(let B of Object.keys(A))for(let W of A[B])J[W]=B;for(let B of X)if(A[B])for(let W of A[B])X.add(W);function U(B,W){let j=J[B]||B;if(Y[j]=W,A[j])for(let z of A[j])Y[z]=W;if(J[B]&&A[J[B]])for(let z of A[J[B]])Y[z]=W;Y[B]=W}for(let B=0;B<$.length;B++){let W=$[B];if(W==="--"){Y._.push(...$.slice(B+1));break}if(W.startsWith("--")){let j=W.indexOf("=");if(j!==-1){let z=W.slice(2,j),G=W.slice(j+1);U(z,G)}else{let z=W.slice(2);if(z.startsWith("no-")){let F=z.slice(3);U(F,!1);continue}let G=J[z]||z;if(X.has(G)||X.has(z))U(z,!0);else{let F=$[B+1];if(F!==void 0&&!F.startsWith("-"))U(z,F),B++;else U(z,!0)}}}else if(W.startsWith("-")&&W.length>1){let j=W.slice(1);for(let z=0;z<j.length;z++){let G=j[z],F=J[G]||G;if(z===j.length-1&&!X.has(F)&&!X.has(G)){let K=$[B+1];if(K!==void 0&&!K.startsWith("-"))U(G,K),B++;else U(G,!0)}else U(G,!0)}}else Y._.push(W)}return Y}function wJ($){return $.replace(/[<[].+/,"").trim()}function r6($){let w=/<([^>]+)>/g,Y=/\[([^\]]+)\]/g,A=[],X=(B)=>{let W=!1,j=B[1];if(j.startsWith("..."))j=j.slice(3),W=!0;return{required:B[0].startsWith("<"),value:j,variadic:W}},J;while(J=w.exec($))A.push(X(J));let U;while(U=Y.exec($))A.push(X(U));return A}function t6($){let w={alias:{},boolean:[]};for(let[Y,A]of $.entries()){if(A.names.length>1)w.alias[A.names[0]]=A.names.slice(1);if(A.isBoolean)if(A.negated){if(!$.some((J,U)=>{return U!==Y&&J.names.some((B)=>A.names.includes(B))&&typeof J.required==="boolean"}))w.boolean.push(A.names[0])}else w.boolean.push(A.names[0])}return w}function Aj($){return $.reduce((w,Y)=>w.length>=Y.length?w:Y,"")}function e8($,w){return $.length>=w?$:`${$}${" ".repeat(w-$.length)}`}function a6($){return $.replace(/([a-z])-([a-z])/g,(w,Y,A)=>{return Y+A.toUpperCase()})}function s6($,w,Y){let A=0,X=w.length,J=$,U;for(;A<X;++A)U=J[w[A]],J=J[w[A]]=A===X-1?Y:U!=null?U:!!~w[A+1].indexOf(".")||!(+w[A+1]>-1)?{}:[]}function o6($,w){for(let Y of Object.keys(w)){let A=w[Y];if(A.shouldTransform){if($[Y]=Array.prototype.concat.call([],$[Y]),typeof A.transformFunction==="function")$[Y]=$[Y].map(A.transformFunction)}}}function e6($){let w=/([^\\/]+)$/.exec($);return w?w[1]:""}function zj($){return $.split(".").map((w,Y)=>{return Y===0?a6(w):w}).join(".")}class tY extends Error{exitCode=2;isUsageError=!0;constructor($){super($);if(this.name=this.constructor.name,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error($).stack}format($=!1){if($&&this.stack)return`${this.message}
268
+ port ${rY}
269
+ `}function YY($){return j6.join(G6,$)}function E6($){return $.includes("127.0.0.1")&&$.includes(String(rY))}async function ZM($){try{return await B6.readFile(YY($),"utf8")}catch(w){if(w.code==="ENOENT")return null;throw w}}async function dB($){if(Uw.platform!=="darwin")return;let{execSudoSync:w,getSudoPassword:Y,isProcessElevated:A}=await Promise.resolve().then(() => (X0(),b1));if(!A()&&!Y()){N("dns","Cannot flush DNS cache without SUDO_PASSWORD",$);return}try{w("dscacheutil -flushcache"),w("killall -HUP mDNSResponder 2>/dev/null || true"),N("dns","DNS cache flushed",$)}catch(X){N("dns",`Could not flush DNS cache: ${X}`,$)}}function T6($){if(!/^[a-z0-9.-]+$/.test($))throw Error(`refusing unsafe resolver basename: ${JSON.stringify($)}`)}async function hM($,w){T6($);let{execSudoSync:Y}=await Promise.resolve().then(() => (X0(),b1)),A=SM().replace(/\n/g,"\\n"),X=`bash -c 'mkdir -p ${G6} && printf "%b" "${A}" > ${YY($)}'`;Y(X),N("dns",`Created ${YY($)}`,w)}async function kM($,w){T6($);let{execSudoSync:Y}=await Promise.resolve().then(() => (X0(),b1));Y(`rm -f ${YY($)}`),N("dns",`Removed ${YY($)}`,w)}async function DM($,w){return pB({domains:w??[],verbose:$})}async function xM($,w){if(Uw.platform!=="darwin")return!0;let{getSudoPassword:Y,isProcessElevated:A}=await Promise.resolve().then(() => (X0(),b1));if(!A()&&!Y())return N("dns","SUDO_PASSWORD not set, cannot create resolver files",w),!1;try{for(let X of $)await hM(X,w);return await dB(w),!0}catch(X){return N("dns",`Failed to create resolver file: ${X}`,w),!1}}async function lB($,w){if(Uw.platform!=="darwin")return;let{getSudoPassword:Y,isProcessElevated:A}=await Promise.resolve().then(() => (X0(),b1));if(!A()&&!Y())return;try{for(let X of $)await kM(X,w);await dB(w)}catch(X){N("dns",`Failed to remove resolver files: ${X}`,w)}}async function nB($){if(Uw.platform!=="darwin")return[];let w=[];for(let Y of Y6){let A=await ZM(Y);if(A&&E6(A))await lB([Y],$),w.push(Y)}return w}async function pB($){let w=$.rpxDir??Xw(),Y=mB($.domains);if(Y.length===0)return!1;let A=iB(Y),X=await N6(Y,$.verbose);if(!X){let B=Y[0];if(B&&await q6(B))X=!0;else N("dns","Dev DNS server not available on 127.0.0.1:15353",$.verbose)}if(!X)return!1;if(!await xM(A,$.verbose))return!1;let U={version:b8,resolvers:A,domains:Y,ownerPid:$.ownerPid??Uw.pid,updatedAt:new Date().toISOString()};return await X6(w,U),!0}async function iw($,w={}){let Y=$.map((W)=>W.to).filter(Boolean),A=w.rpxDir??Xw(),X=iB(Y),B=((await u8(A))?.resolvers??[]).filter((W)=>!X.includes(W));if(B.length>0)await lB(B,w.verbose);if(X.length===0){gB(w.verbose),await cB(A);return}await pB({domains:Y,rpxDir:A,verbose:w.verbose,ownerPid:w.ownerPid??Uw.pid})}async function Vw($={}){let w=$.rpxDir??Xw();gB($.verbose);let A=(await u8(w))?.resolvers??[];await lB(A,$.verbose),await nB($.verbose),await cB(w)}async function PM($){await Vw({verbose:$})}async function Jw($={}){let w=$.rpxDir??Xw(),Y=await u8(w),A=Y?.ownerPid!=null&&r0(Y.ownerPid);if(Y&&!A){N("dns",`reconcile: owner pid ${Y.ownerPid} is gone — tearing down DNS`,$.verbose),await Vw($);return}let X=await nB($.verbose);if(X.length>0)N("dns",`reconcile: removed legacy TLD resolvers: ${X.join(", ")}`,$.verbose);await dB($.verbose)}var rY=15353,z6="# managed-by: rpx",G6="/etc/resolver",t0=null,v8;var wY=t(()=>{bB();U6();e1();X0();v8=new Set});import{dirname as z4,join as G4}from"path";import*as x0 from"process";import{fileURLToPath as K4}from"url";import{existsSync as AK}from"node:fs";import BJ from"node:fs/promises";import Kj from"node:os";import jJ from"node:path";import Sw from"node:process";import{EventEmitter as XK}from"node:events";import Bw from"node:process";import Fj from"node:process";import FJ from"node:process";import YA from"node:process";import BY from"node:process";import Ej from"node:tty";import lK,{stdin as h4,stdout as k4}from"node:process";import Hj,{stdin as rK,stdout as tK}from"node:process";import aK from"node:readline";class Rj{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let $=Kj.homedir(),w=jJ.join($,".config","clapp");this.configPath=jJ.join(w,"telemetry.json")}async isEnabled(){if(Sw.env.DO_NOT_TRACK==="1"||Sw.env.DO_NOT_TRACK==="true")return!1;if(Sw.env.NO_TELEMETRY==="1"||Sw.env.NO_TELEMETRY==="true")return!1;return(await this.loadConfig()).enabled}async enable(){let $=await this.loadConfig();if($.enabled=!0,!$.userId)$.userId=this.generateUserId();await this.saveConfig($)}async disable(){let $=await this.loadConfig();$.enabled=!1,await this.saveConfig($)}async track($,w){if(!await this.isEnabled())return;let A={event:$,...w,timestamp:Date.now(),platform:Kj.platform(),nodeVersion:Sw.version};if(this.events.push(A),this.events.length>=10)await this.send()}async trackCommand($,w){await this.track("command",{command:$,duration:w})}async trackError($,w){await this.track("error",{error:$,command:w})}async send(){if(!await this.isEnabled()||this.events.length===0)return!0;try{this.events=[],this.retryCount=0;let w=await this.loadConfig();return w.lastSent=Date.now(),await this.saveConfig(w),!0}catch{if(this.retryCount<this.maxRetries){this.retryCount++;let w=this.retryDelayMs*2**(this.retryCount-1);return await this.sleep(w),this.send()}return this.events=[],this.retryCount=0,!1}}async flush(){if(this.events.length===0)return!0;return this.send()}sleep($){return new Promise((w)=>setTimeout(w,$))}async status(){let $=await this.loadConfig();return{enabled:$.enabled,doNotTrack:Sw.env.DO_NOT_TRACK==="1"||Sw.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:$.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(AK(this.configPath)){let $=await BJ.readFile(this.configPath,"utf-8");return this.config=JSON.parse($),this.config}}catch{}return this.config={enabled:!1},this.config}async saveConfig($){this.config=$;try{let w=jJ.dirname(this.configPath);await BJ.mkdir(w,{recursive:!0}),await BJ.writeFile(this.configPath,JSON.stringify($,null,2),"utf-8")}catch{}}generateUserId(){let $=Math.random().toString(36).substring(2,15),w=Date.now().toString(36);return`${$}-${w}`}}var R4=new Rj;function JK($,w={}){let Y={_:[]},A=w.alias||{},X=new Set(w.boolean||[]),J={};for(let B of Object.keys(A))for(let W of A[B])J[W]=B;for(let B of X)if(A[B])for(let W of A[B])X.add(W);function U(B,W){let j=J[B]||B;if(Y[j]=W,A[j])for(let z of A[j])Y[z]=W;if(J[B]&&A[J[B]])for(let z of A[J[B]])Y[z]=W;Y[B]=W}for(let B=0;B<$.length;B++){let W=$[B];if(W==="--"){Y._.push(...$.slice(B+1));break}if(W.startsWith("--")){let j=W.indexOf("=");if(j!==-1){let z=W.slice(2,j),G=W.slice(j+1);U(z,G)}else{let z=W.slice(2);if(z.startsWith("no-")){let K=z.slice(3);U(K,!1);continue}let G=J[z]||z;if(X.has(G)||X.has(z))U(z,!0);else{let K=$[B+1];if(K!==void 0&&!K.startsWith("-"))U(z,K),B++;else U(z,!0)}}}else if(W.startsWith("-")&&W.length>1){let j=W.slice(1);for(let z=0;z<j.length;z++){let G=j[z],K=J[G]||G;if(z===j.length-1&&!X.has(K)&&!X.has(G)){let F=$[B+1];if(F!==void 0&&!F.startsWith("-"))U(G,F),B++;else U(G,!0)}else U(G,!0)}}else Y._.push(W)}return Y}function KJ($){return $.replace(/[<[].+/,"").trim()}function UK($){let w=/<([^>]+)>/g,Y=/\[([^\]]+)\]/g,A=[],X=(B)=>{let W=!1,j=B[1];if(j.startsWith("..."))j=j.slice(3),W=!0;return{required:B[0].startsWith("<"),value:j,variadic:W}},J;while(J=w.exec($))A.push(X(J));let U;while(U=Y.exec($))A.push(X(U));return A}function WK($){let w={alias:{},boolean:[]};for(let[Y,A]of $.entries()){if(A.names.length>1)w.alias[A.names[0]]=A.names.slice(1);if(A.isBoolean)if(A.negated){if(!$.some((J,U)=>{return U!==Y&&J.names.some((B)=>A.names.includes(B))&&typeof J.required==="boolean"}))w.boolean.push(A.names[0])}else w.boolean.push(A.names[0])}return w}function Nj($){return $.reduce((w,Y)=>w.length>=Y.length?w:Y,"")}function zJ($,w){return $.length>=w?$:`${$}${" ".repeat(w-$.length)}`}function BK($){return $.replace(/([a-z])-([a-z])/g,(w,Y,A)=>{return Y+A.toUpperCase()})}function jK($,w,Y){let A=0,X=w.length,J=$,U;for(;A<X;++A)U=J[w[A]],J=J[w[A]]=A===X-1?Y:U!=null?U:!!~w[A+1].indexOf(".")||!(+w[A+1]>-1)?{}:[]}function zK($,w){for(let Y of Object.keys(w)){let A=w[Y];if(A.shouldTransform){if($[Y]=Array.prototype.concat.call([],$[Y]),typeof A.transformFunction==="function")$[Y]=$[Y].map(A.transformFunction)}}}function GK($){let w=/([^\\/]+)$/.exec($);return w?w[1]:""}function Mj($){return $.split(".").map((w,Y)=>{return Y===0?BK(w):w}).join(".")}class wA extends Error{exitCode=2;isUsageError=!0;constructor($){super($);if(this.name=this.constructor.name,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error($).stack}format($=!1){if($&&this.stack)return`${this.message}
270
270
 
271
271
  Stack trace:
272
- ${this.stack}`;return this.message}}function $F(){let{env:$}=Yj,{TERM:w,TERM_PROGRAM:Y}=$;if(Yj.platform!=="win32")return w!=="linux";return Boolean($.WT_SESSION)||Boolean($.TERMINUS_SUBLIME)||$.ConEmuTask==="{cmd::Cmder}"||Y==="Terminus-Sublime"||Y==="vscode"||w==="xterm-256color"||w==="alacritty"||w==="rxvt-unicode"||w==="rxvt-unicode-256color"||$.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var eY="\x1B",j0=`${eY}[`;var h$={to($,w){if(!w)return`${j0}${$+1}G`;return`${j0}${w+1};${$+1}H`},move($,w){let Y="";if($<0)Y+=`${j0}${-$}D`;else if($>0)Y+=`${j0}${$}C`;if(w<0)Y+=`${j0}${-w}A`;else if(w>0)Y+=`${j0}${w}B`;return Y},up:($=1)=>`${j0}${$}A`,down:($=1)=>`${j0}${$}B`,forward:($=1)=>`${j0}${$}C`,backward:($=1)=>`${j0}${$}D`,nextLine:($=1)=>`${j0}E`.repeat($),prevLine:($=1)=>`${j0}F`.repeat($),left:`${j0}G`,hide:`${j0}?25l`,show:`${j0}?25h`,save:`${eY}7`,restore:`${eY}8`};var $J={screen:`${j0}2J`,up:($=1)=>`${j0}1J`.repeat($),down:($=1)=>`${j0}J`.repeat($),line:`${j0}2K`,lineEnd:`${j0}K`,lineStart:`${j0}1K`,lines($){let w="";for(let Y=0;Y<$;Y++)w+=this.line+(Y<$-1?h$.up():"");if($)w+=h$.left;return w}},X4={screen:`${eY}c`};function wF($,w){let Y=[];for(let A=0;A<=w.length;A++)Y[A]=[A];for(let A=0;A<=$.length;A++)Y[0][A]=A;for(let A=1;A<=w.length;A++)for(let X=1;X<=$.length;X++)if(w.charAt(A-1)===$.charAt(X-1))Y[A][X]=Y[A-1][X-1];else Y[A][X]=Math.min(Y[A-1][X-1]+1,Y[A][X-1]+1,Y[A-1][X]+1);return Y[w.length][$.length]}function Gj($,w,Y=2,A=3){return w.map((X)=>({cmd:X,distance:wF($,X)})).filter(({distance:X})=>X<=Y).sort((X,J)=>X.distance-J.distance).slice(0,A).map(({cmd:X})=>X)}class Fj{rawName;description;name;names;isBoolean;required;config;negated;constructor($,w,Y){if(this.rawName=$,this.description=w,this.config=Object.assign({},Y),$=$.replace(/\.\*/g,""),this.negated=!1,this.names=wJ($).split(",").map((A)=>{let X=A.trim().replace(/^-{1,2}/,"");if(X.startsWith("no-"))this.negated=!0,X=X.replace(/^no-/,"");return zj(X)}).sort((A,X)=>A.length>X.length?1:-1),this.name=this.names[this.names.length-1],this.negated&&this.config.default==null)this.config.default=!0;if($.includes("<"))this.required=!0;else if($.includes("["))this.required=!1;else this.isBoolean=!0}}var U4=YJ.argv,YF=`${YJ.platform}-${YJ.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,Xj=aY.argv,AF=`${aY.platform}-${aY.arch} node-${aY.version}`;class AJ{rawName;description;config;cli;options;aliasNames;name;namespace;args;commandAction;usageText;versionNumber;examples;helpCallback;globalCommand;beforeHooks;afterHooks;middleware;constructor($,w,Y,A){this.rawName=$,this.description=w,this.config=Y,this.cli=A,this.options=[],this.aliasNames=[],this.name=wJ($);let X=wJ($),J=X.indexOf(":");if(J>0)this.namespace=X.substring(0,J),this.name=X.substring(J+1);if(this.args=r6($),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!Y)this.config={}}usage($){return this.usageText=$,this}allowUnknownOptions(){return this.config.allowUnknownOptions=!0,this}ignoreOptionDefaultValue(){return this.config.ignoreOptionDefaultValue=!0,this}version($,w="-v, --version"){return this.versionNumber=$,this.option(w,"Display version number"),this}example($){return this.examples.push($),this}option($,w,Y){let A=new Fj($,w,Y);return this.options.push(A),this}alias($){return this.aliasNames.push($),this}action($){return this.commandAction=$,this}before($){return this.beforeHooks.push($),this}after($){return this.afterHooks.push($),this}use($){return this.middleware.push($),this}isMatched($){if(this.aliasNames.includes($))return!0;if(this.namespace)return`${this.namespace}:${this.name}`===$;return this.name===$}get isDefaultCommand(){return this.name===""||this.aliasNames.includes("!")}get isGlobalCommand(){return this instanceof XJ}get displayName(){return this.namespace?`${this.namespace}:${this.name}`:this.name}hasOption($){return $=$.split(".")[0],!!this.options.find((w)=>{return w.names.includes($)})}outputHelp(){let{name:$,commands:w}=this.cli,{versionNumber:Y,options:A,helpCallback:X}=this.cli.globalCommand,J=[{body:`${$}${Y?`/${Y}`:""}`}];if(J.push({title:"Usage",body:` $ ${$} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&w.length>0){let W=Aj(w.map((K)=>K.rawName)),j=new Map,z=[];for(let K of w)if(K.namespace){if(!j.has(K.namespace))j.set(K.namespace,[]);j.get(K.namespace).push(K)}else z.push(K);let G="";if(z.length>0)G+=z.map((K)=>{return` ${e8(K.rawName,W.length)} ${K.description}`}).join(`
273
- `);let F=Array.from(j.keys()).sort();for(let K of F){let q=j.get(K);if(G.length>0)G+=`
272
+ ${this.stack}`;return this.message}}function KK(){let{env:$}=Fj,{TERM:w,TERM_PROGRAM:Y}=$;if(Fj.platform!=="win32")return w!=="linux";return Boolean($.WT_SESSION)||Boolean($.TERMINUS_SUBLIME)||$.ConEmuTask==="{cmd::Cmder}"||Y==="Terminus-Sublime"||Y==="vscode"||w==="xterm-256color"||w==="alacritty"||w==="rxvt-unicode"||w==="rxvt-unicode-256color"||$.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var JA="\x1B",j0=`${JA}[`;var D$={to($,w){if(!w)return`${j0}${$+1}G`;return`${j0}${w+1};${$+1}H`},move($,w){let Y="";if($<0)Y+=`${j0}${-$}D`;else if($>0)Y+=`${j0}${$}C`;if(w<0)Y+=`${j0}${-w}A`;else if(w>0)Y+=`${j0}${w}B`;return Y},up:($=1)=>`${j0}${$}A`,down:($=1)=>`${j0}${$}B`,forward:($=1)=>`${j0}${$}C`,backward:($=1)=>`${j0}${$}D`,nextLine:($=1)=>`${j0}E`.repeat($),prevLine:($=1)=>`${j0}F`.repeat($),left:`${j0}G`,hide:`${j0}?25l`,show:`${j0}?25h`,save:`${JA}7`,restore:`${JA}8`};var GJ={screen:`${j0}2J`,up:($=1)=>`${j0}1J`.repeat($),down:($=1)=>`${j0}J`.repeat($),line:`${j0}2K`,lineEnd:`${j0}K`,lineStart:`${j0}1K`,lines($){let w="";for(let Y=0;Y<$;Y++)w+=this.line+(Y<$-1?D$.up():"");if($)w+=D$.left;return w}},C4={screen:`${JA}c`};function FK($,w){let Y=[];for(let A=0;A<=w.length;A++)Y[A]=[A];for(let A=0;A<=$.length;A++)Y[0][A]=A;for(let A=1;A<=w.length;A++)for(let X=1;X<=$.length;X++)if(w.charAt(A-1)===$.charAt(X-1))Y[A][X]=Y[A-1][X-1];else Y[A][X]=Math.min(Y[A-1][X-1]+1,Y[A][X-1]+1,Y[A-1][X]+1);return Y[w.length][$.length]}function Ij($,w,Y=2,A=3){return w.map((X)=>({cmd:X,distance:FK($,X)})).filter(({distance:X})=>X<=Y).sort((X,J)=>X.distance-J.distance).slice(0,A).map(({cmd:X})=>X)}class Vj{rawName;description;name;names;isBoolean;required;config;negated;constructor($,w,Y){if(this.rawName=$,this.description=w,this.config=Object.assign({},Y),$=$.replace(/\.\*/g,""),this.negated=!1,this.names=KJ($).split(",").map((A)=>{let X=A.trim().replace(/^-{1,2}/,"");if(X.startsWith("no-"))this.negated=!0,X=X.replace(/^no-/,"");return Mj(X)}).sort((A,X)=>A.length>X.length?1:-1),this.name=this.names[this.names.length-1],this.negated&&this.config.default==null)this.config.default=!0;if($.includes("<"))this.required=!0;else if($.includes("["))this.required=!1;else this.isBoolean=!0}}var y4=FJ.argv,NK=`${FJ.platform}-${FJ.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,qj=YA.argv,qK=`${YA.platform}-${YA.arch} node-${YA.version}`;class NJ{rawName;description;config;cli;options;aliasNames;name;namespace;args;commandAction;usageText;versionNumber;examples;helpCallback;globalCommand;beforeHooks;afterHooks;middleware;constructor($,w,Y,A){this.rawName=$,this.description=w,this.config=Y,this.cli=A,this.options=[],this.aliasNames=[],this.name=KJ($);let X=KJ($),J=X.indexOf(":");if(J>0)this.namespace=X.substring(0,J),this.name=X.substring(J+1);if(this.args=UK($),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!Y)this.config={}}usage($){return this.usageText=$,this}allowUnknownOptions(){return this.config.allowUnknownOptions=!0,this}ignoreOptionDefaultValue(){return this.config.ignoreOptionDefaultValue=!0,this}version($,w="-v, --version"){return this.versionNumber=$,this.option(w,"Display version number"),this}example($){return this.examples.push($),this}option($,w,Y){let A=new Vj($,w,Y);return this.options.push(A),this}alias($){return this.aliasNames.push($),this}action($){return this.commandAction=$,this}before($){return this.beforeHooks.push($),this}after($){return this.afterHooks.push($),this}use($){return this.middleware.push($),this}isMatched($){if(this.aliasNames.includes($))return!0;if(this.namespace)return`${this.namespace}:${this.name}`===$;return this.name===$}get isDefaultCommand(){return this.name===""||this.aliasNames.includes("!")}get isGlobalCommand(){return this instanceof qJ}get displayName(){return this.namespace?`${this.namespace}:${this.name}`:this.name}hasOption($){return $=$.split(".")[0],!!this.options.find((w)=>{return w.names.includes($)})}outputHelp(){let{name:$,commands:w}=this.cli,{versionNumber:Y,options:A,helpCallback:X}=this.cli.globalCommand,J=[{body:`${$}${Y?`/${Y}`:""}`}];if(J.push({title:"Usage",body:` $ ${$} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&w.length>0){let W=Nj(w.map((F)=>F.rawName)),j=new Map,z=[];for(let F of w)if(F.namespace){if(!j.has(F.namespace))j.set(F.namespace,[]);j.get(F.namespace).push(F)}else z.push(F);let G="";if(z.length>0)G+=z.map((F)=>{return` ${zJ(F.rawName,W.length)} ${F.description}`}).join(`
273
+ `);let K=Array.from(j.keys()).sort();for(let F of K){let T=j.get(F);if(G.length>0)G+=`
274
274
 
275
- `;G+=` ${K}:
276
- `,G+=q.map((f)=>{return` ${e8(f.rawName,W.length-2)} ${f.description}`}).join(`
277
- `)}J.push({title:"Commands",body:G}),J.push({title:"For more info, run any command with the `--help` flag",body:w.map((K)=>` $ ${$}${K.displayName===""?"":` ${K.displayName}`} --help`).join(`
278
- `)})}let B=this.isGlobalCommand?A:[...this.options,...A||[]];if(!this.isGlobalCommand&&!this.isDefaultCommand)B=B.filter((W)=>W.name!=="version");if(B.length>0){let W=Aj(B.map((j)=>j.rawName));J.push({title:"Options",body:B.map((j)=>{return` ${e8(j.rawName,W.length)} ${j.description} ${j.config.default===void 0?"":`(default: ${j.config.default})`}`}).join(`
275
+ `;G+=` ${F}:
276
+ `,G+=T.map((q)=>{return` ${zJ(q.rawName,W.length-2)} ${q.description}`}).join(`
277
+ `)}J.push({title:"Commands",body:G}),J.push({title:"For more info, run any command with the `--help` flag",body:w.map((F)=>` $ ${$}${F.displayName===""?"":` ${F.displayName}`} --help`).join(`
278
+ `)})}let B=this.isGlobalCommand?A:[...this.options,...A||[]];if(!this.isGlobalCommand&&!this.isDefaultCommand)B=B.filter((W)=>W.name!=="version");if(B.length>0){let W=Nj(B.map((j)=>j.rawName));J.push({title:"Options",body:B.map((j)=>{return` ${zJ(j.rawName,W.length)} ${j.description} ${j.config.default===void 0?"":`(default: ${j.config.default})`}`}).join(`
279
279
  `)})}if(this.examples.length>0)J.push({title:"Examples",body:this.examples.map((W)=>{if(typeof W==="function")return W($);return W}).join(`
280
280
  `)});if(X)J=X(J)||J;console.log(J.map((W)=>{return W.title?`${W.title}:
281
281
  ${W.body}`:W.body}).join(`
282
282
 
283
- `))}outputVersion(){let{name:$}=this.cli,{versionNumber:w}=this.cli.globalCommand;if(w)console.log(`${$}/${w} ${typeof Bun<"u"?YF:AF}`)}checkRequiredArgs(){let $=this.args.filter((w)=>w.required).length;if(this.cli.args.length<$){let Y=this.args.filter((X)=>X.required).slice(this.cli.args.length),A=Y.map((X)=>`<${X.value}>`).join(" ");throw new tY(`Missing required argument${Y.length>1?"s":""}: ${A}
283
+ `))}outputVersion(){let{name:$}=this.cli,{versionNumber:w}=this.cli.globalCommand;if(w)console.log(`${$}/${w} ${typeof Bun<"u"?NK:qK}`)}checkRequiredArgs(){let $=this.args.filter((w)=>w.required).length;if(this.cli.args.length<$){let Y=this.args.filter((X)=>X.required).slice(this.cli.args.length),A=Y.map((X)=>`<${X.value}>`).join(" ");throw new wA(`Missing required argument${Y.length>1?"s":""}: ${A}
284
284
 
285
- Run \`${this.cli.name} ${this.rawName} --help\` for usage information.`)}}checkUnknownOptions(){let{options:$,globalCommand:w}=this.cli;if(!this.config.allowUnknownOptions){for(let Y of Object.keys($))if(Y!=="--"&&!this.hasOption(Y)&&!w.hasOption(Y)){let X=[...w.options,...this.options].flatMap((W)=>W.names),J=Y.length>1?`--${Y}`:`-${Y}`,U=Gj(Y,X),B=`Unknown option \`${J}\``;if(U.length>0)B+=`
285
+ Run \`${this.cli.name} ${this.rawName} --help\` for usage information.`)}}checkUnknownOptions(){let{options:$,globalCommand:w}=this.cli;if(!this.config.allowUnknownOptions){for(let Y of Object.keys($))if(Y!=="--"&&!this.hasOption(Y)&&!w.hasOption(Y)){let X=[...w.options,...this.options].flatMap((W)=>W.names),J=Y.length>1?`--${Y}`:`-${Y}`,U=Ij(Y,X),B=`Unknown option \`${J}\``;if(U.length>0)B+=`
286
286
 
287
287
  Did you mean one of these?`,U.forEach((W)=>{let j=W.length>1?`--${W}`:`-${W}`;B+=`
288
288
  • ${j}`});throw B+=`
289
289
 
290
- Run \`${this.cli.name} ${this.rawName} --help\` to see available options.`,new tY(B)}}}checkOptionValue(){let{options:$,globalCommand:w}=this.cli,Y=[...w.options,...this.options];for(let A of Y){let X=$[A.name.split(".")[0]];if(A.required){let J=Y.some((U)=>U.negated&&U.names.includes(A.name));if(X===!0||X===!1&&!J)throw new tY(`Option \`${A.rawName}\` requires a value.
290
+ Run \`${this.cli.name} ${this.rawName} --help\` to see available options.`,new wA(B)}}}checkOptionValue(){let{options:$,globalCommand:w}=this.cli,Y=[...w.options,...this.options];for(let A of Y){let X=$[A.name.split(".")[0]];if(A.required){let J=Y.some((U)=>U.negated&&U.names.includes(A.name));if(X===!0||X===!1&&!J)throw new wA(`Option \`${A.rawName}\` requires a value.
291
291
 
292
- Example: ${this.cli.name} ${this.rawName} ${A.rawName} <value>`)}}}}class XJ extends AJ{constructor($){super("@@global@@","",{},$)}}var XF=AJ,Ww={red:["\x1B[31m","\x1B[39m"],green:["\x1B[32m","\x1B[39m"],blue:["\x1B[34m","\x1B[39m"],yellow:["\x1B[33m","\x1B[39m"],cyan:["\x1B[36m","\x1B[39m"],magenta:["\x1B[35m","\x1B[39m"],white:["\x1B[37m","\x1B[39m"],gray:["\x1B[90m","\x1B[39m"],bgRed:["\x1B[41m","\x1B[49m"],bgGreen:["\x1B[42m","\x1B[49m"],bgBlue:["\x1B[44m","\x1B[49m"],bgYellow:["\x1B[43m","\x1B[49m"],bgCyan:["\x1B[46m","\x1B[49m"],bgMagenta:["\x1B[45m","\x1B[49m"],bold:["\x1B[1m","\x1B[22m"],italic:["\x1B[3m","\x1B[23m"],underline:["\x1B[4m","\x1B[24m"],dim:["\x1B[2m","\x1B[22m"],inverse:["\x1B[7m","\x1B[27m"],hidden:["\x1B[8m","\x1B[28m"],strikethrough:["\x1B[9m","\x1B[29m"]};var wY={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function JF(){return!0}function UF(){let $={};$.supportsColor=JF();function w(A,X=[]){let J=A===""?[]:[...X,A],U=function(W){if(!$.supportsColor)return W;let j="",z="";for(let G of J)if(G in wY&&wY[G]in Ww){let F=wY[G];j+=Ww[F][0],z=Ww[F][1]+z}else if(G in Ww)j+=Ww[G][0],z=Ww[G][1]+z;return j+W+z},B=[...Object.keys(Ww),...Object.keys(wY)];for(let W of B)if(!(W in U))Object.defineProperty(U,W,{get(){return w(W,J)}});return U}let Y=[...Object.keys(Ww),...Object.keys(wY)];for(let A of Y)if(!(A in $))Object.defineProperty($,A,{get(){return w(A)}});return $}var YY=UF();class JJ extends n6{name;commands;globalCommand;matchedCommand;matchedCommandName;rawArgs;args;options;showHelpOnExit;showVersionOnExit;enableDidYouMean=!0;signalHandlersSet=!1;isVerbose=!1;isQuiet=!1;isDebug=!1;isNoInteraction=!1;environment;isDryRun=!1;isForce=!1;useEmoji=!0;theme;isNoCache=!1;constructor($=""){super();this.name=$,this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.globalCommand=new XJ(this),this.globalCommand.usage("<command> [options]")}handleSignals($){if(this.signalHandlersSet)return this;let w=async(Y)=>{if(console.log(`
292
+ Example: ${this.cli.name} ${this.rawName} ${A.rawName} <value>`)}}}}class qJ extends NJ{constructor($){super("@@global@@","",{},$)}}var EK=NJ,jw={red:["\x1B[31m","\x1B[39m"],green:["\x1B[32m","\x1B[39m"],blue:["\x1B[34m","\x1B[39m"],yellow:["\x1B[33m","\x1B[39m"],cyan:["\x1B[36m","\x1B[39m"],magenta:["\x1B[35m","\x1B[39m"],white:["\x1B[37m","\x1B[39m"],gray:["\x1B[90m","\x1B[39m"],bgRed:["\x1B[41m","\x1B[49m"],bgGreen:["\x1B[42m","\x1B[49m"],bgBlue:["\x1B[44m","\x1B[49m"],bgYellow:["\x1B[43m","\x1B[49m"],bgCyan:["\x1B[46m","\x1B[49m"],bgMagenta:["\x1B[45m","\x1B[49m"],bold:["\x1B[1m","\x1B[22m"],italic:["\x1B[3m","\x1B[23m"],underline:["\x1B[4m","\x1B[24m"],dim:["\x1B[2m","\x1B[22m"],inverse:["\x1B[7m","\x1B[27m"],hidden:["\x1B[8m","\x1B[28m"],strikethrough:["\x1B[9m","\x1B[29m"]};var UY={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function TK(){return!0}function HK(){let $={};$.supportsColor=TK();function w(A,X=[]){let J=A===""?[]:[...X,A],U=function(W){if(!$.supportsColor)return W;let j="",z="";for(let G of J)if(G in UY&&UY[G]in jw){let K=UY[G];j+=jw[K][0],z=jw[K][1]+z}else if(G in jw)j+=jw[G][0],z=jw[G][1]+z;return j+W+z},B=[...Object.keys(jw),...Object.keys(UY)];for(let W of B)if(!(W in U))Object.defineProperty(U,W,{get(){return w(W,J)}});return U}let Y=[...Object.keys(jw),...Object.keys(UY)];for(let A of Y)if(!(A in $))Object.defineProperty($,A,{get(){return w(A)}});return $}var WY=HK();class EJ extends XK{name;commands;globalCommand;matchedCommand;matchedCommandName;rawArgs;args;options;showHelpOnExit;showVersionOnExit;enableDidYouMean=!0;signalHandlersSet=!1;isVerbose=!1;isQuiet=!1;isDebug=!1;isNoInteraction=!1;environment;isDryRun=!1;isForce=!1;useEmoji=!0;theme;isNoCache=!1;constructor($=""){super();this.name=$,this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.globalCommand=new qJ(this),this.globalCommand.usage("<command> [options]")}handleSignals($){if(this.signalHandlersSet)return this;let w=async(Y)=>{if(console.log(`
293
293
 
294
- Received ${Y}, cleaning up...`),$)try{await $()}catch(A){console.error("Error during cleanup:",A)}Uw.exit(0)};return Uw.on("SIGINT",()=>w("SIGINT")),Uw.on("SIGTERM",()=>w("SIGTERM")),this.signalHandlersSet=!0,this}didYouMean($=!0){return this.enableDidYouMean=$,this}verbose(){return this.globalCommand.option("-v, --verbose","Enable verbose output"),this}quiet(){return this.globalCommand.option("-q, --quiet","Suppress non-essential output"),this}debug(){return this.globalCommand.option("--debug","Enable debug mode with detailed error information"),this}noInteraction(){return this.globalCommand.option("-n, --no-interaction","Do not ask any interactive questions (for CI/CD)"),this}env(){return this.globalCommand.option("--env <environment>","Target environment (e.g., production, staging, local)"),this}dryRun(){return this.globalCommand.option("--dry-run","Preview actions without executing them"),this}force(){return this.globalCommand.option("-f, --force","Skip confirmation prompts"),this}emoji(){return this.globalCommand.option("--no-emoji","Disable emoji in output"),this}themes(){return this.globalCommand.option("--theme <theme>","Color theme (default, dracula, nord, solarized, monokai)"),this}cache(){return this.globalCommand.option("--no-cache","Disable caching"),this}usage($){return this.globalCommand.usage($),this}command($,w,Y){if(!Y)Y={};let A=new XF($,w||"",Y,this);return A.globalCommand=this.globalCommand,this.commands.push(A),A}option($,w,Y){return this.globalCommand.option($,w,Y),this}help($){return this.globalCommand.option("-h, --help","Display this message"),this.globalCommand.helpCallback=$,this.showHelpOnExit=!0,this}version($,w="-v, --version"){return this.globalCommand.version($,w),this.showVersionOnExit=!0,this}example($){return this.globalCommand.example($),this}outputHelp(){if(this.matchedCommand)this.matchedCommand.outputHelp();else this.globalCommand.outputHelp()}outputVersion(){this.globalCommand.outputVersion()}setParsedInfo({args:$,options:w},Y,A){if(this.args=$,this.options=w,Y)this.matchedCommand=Y;if(A)this.matchedCommandName=A;return this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}showCommandNotFound($){if(console.log(YY.red(`
294
+ Received ${Y}, cleaning up...`),$)try{await $()}catch(A){console.error("Error during cleanup:",A)}Bw.exit(0)};return Bw.on("SIGINT",()=>w("SIGINT")),Bw.on("SIGTERM",()=>w("SIGTERM")),this.signalHandlersSet=!0,this}didYouMean($=!0){return this.enableDidYouMean=$,this}verbose(){return this.globalCommand.option("-v, --verbose","Enable verbose output"),this}quiet(){return this.globalCommand.option("-q, --quiet","Suppress non-essential output"),this}debug(){return this.globalCommand.option("--debug","Enable debug mode with detailed error information"),this}noInteraction(){return this.globalCommand.option("-n, --no-interaction","Do not ask any interactive questions (for CI/CD)"),this}env(){return this.globalCommand.option("--env <environment>","Target environment (e.g., production, staging, local)"),this}dryRun(){return this.globalCommand.option("--dry-run","Preview actions without executing them"),this}force(){return this.globalCommand.option("-f, --force","Skip confirmation prompts"),this}emoji(){return this.globalCommand.option("--no-emoji","Disable emoji in output"),this}themes(){return this.globalCommand.option("--theme <theme>","Color theme (default, dracula, nord, solarized, monokai)"),this}cache(){return this.globalCommand.option("--no-cache","Disable caching"),this}usage($){return this.globalCommand.usage($),this}command($,w,Y){if(!Y)Y={};let A=new EK($,w||"",Y,this);return A.globalCommand=this.globalCommand,this.commands.push(A),A}option($,w,Y){return this.globalCommand.option($,w,Y),this}help($){return this.globalCommand.option("-h, --help","Display this message"),this.globalCommand.helpCallback=$,this.showHelpOnExit=!0,this}version($,w="-v, --version"){return this.globalCommand.version($,w),this.showVersionOnExit=!0,this}example($){return this.globalCommand.example($),this}outputHelp(){if(this.matchedCommand)this.matchedCommand.outputHelp();else this.globalCommand.outputHelp()}outputVersion(){this.globalCommand.outputVersion()}setParsedInfo({args:$,options:w},Y,A){if(this.args=$,this.options=w,Y)this.matchedCommand=Y;if(A)this.matchedCommandName=A;return this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}showCommandNotFound($){if(console.log(WY.red(`
295
295
  ✗ Command "${$}" not found.
296
- `)),this.enableDidYouMean){let w=[];for(let A of this.commands){if(A.displayName)w.push(A.displayName);if(A.aliasNames)w.push(...A.aliasNames)}let Y=Gj($,w);if(Y.length>0)console.log(YY.yellow("Did you mean one of these?")),Y.forEach((A)=>console.log(` ${YY.dim("•")} ${this.name} ${A}`)),console.log("")}console.log(YY.dim("Run"),`${this.name} --help`,YY.dim("to see all available commands")),Uw.exit(1)}async parse($=Xj,w={}){let{run:Y=!0,exitOnError:A=!1}=w;if(A)try{return await this.parse($,{run:Y})}catch(W){throw this.handleUsageError(W),W}if(this.rawArgs=$,!this.name)this.name=$[1]?e6($[1]):"cli";let X=!0,J=$.slice(2),U=J[0];if(U&&!U.startsWith("-")){for(let W of this.commands)if(W.isMatched(U)){let j=this.mri(J,W);X=!1;let z={...j,args:j.args.slice(1)};this.setParsedInfo(z,W,U),this.emit(`command:${U}`,W);break}}if(X){for(let W of this.commands)if(W.name===""){X=!1;let j=this.mri(J,W);this.setParsedInfo(j,W),this.emit("command:!",W);break}}if(X){let W=this.mri($.slice(2));this.setParsedInfo(W)}if(this.options.verbose)this.isVerbose=!0;if(this.options.quiet)this.isQuiet=!0;if(this.options.debug)this.isDebug=!0;if(this.options.noInteraction)this.isNoInteraction=!0;if(this.options.env)this.environment=String(this.options.env);if(this.options.dryRun)this.isDryRun=!0;if(this.options.force)this.isForce=!0;if(this.options.noEmoji!==void 0)this.useEmoji=!this.options.noEmoji;if(this.options.theme)this.theme=String(this.options.theme);if(this.options.noCache!==void 0)this.isNoCache=Boolean(this.options.noCache);if(this.options.help&&this.showHelpOnExit)this.outputHelp(),Y=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),Y=!1,this.unsetMatchedCommand();let B={args:this.args,options:this.options};if(Y)await this.runMatchedCommand();if(!this.matchedCommand&&this.args[0]){if(this.emit("command:*"),!(this.listenerCount("command:*")>0))this.showCommandNotFound(this.args[0])}return B}mri($,w){let Y=[...this.globalCommand.options,...w?w.options:[]],A=t6(Y),X=[],J=$.indexOf("--");if(J>-1)X=$.slice(J+1),$=$.slice(0,J);let U=p6($,A),B={_:U._};for(let F of Object.keys(U))if(F!=="_")B[zj(F)]=U[F];let W=B._,j={"--":X},z=w&&w.config.ignoreOptionDefaultValue?w.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,G=Object.create(null);for(let F of Y){if(!z&&F.config.default!==void 0)for(let K of F.names)j[K]=F.config.default;if(Array.isArray(F.config.type)){if(G[F.name]===void 0)G[F.name]={shouldTransform:!0,transformFunction:F.config.type[0]}}}for(let F of Object.keys(B))if(F!=="_"){let K=F.split(".");s6(j,K,B[F]),o6(j,G)}return{args:W,options:j}}async run($=Xj){return this.parse($,{run:!0,exitOnError:!0})}handleUsageError($){if(!(!!$&&typeof $==="object"&&$.name==="ClappError"&&$.isUsageError!==!1))return;let A=$,X=A.message??"command-line error",J=this.name?`${this.name}: `:"",U=/--help/.test(X)?"":`
297
- Run \`${this.name??"cli"} --help\` for usage.`;Uw.stderr.write(`${J}${X}${U}
298
- `),Uw.exit(A.exitCode??2)}async runMatchedCommand(){let{args:$,options:w,matchedCommand:Y}=this;if(!Y||!Y.commandAction)return;Y.checkUnknownOptions(),Y.checkOptionValue(),Y.checkRequiredArgs();let A=[];Y.args.forEach((B,W)=>{if(B.variadic)A.push($.slice(W));else A.push($[W])}),A.push(w);let X={command:Y,args:A,options:w};for(let B of Y.beforeHooks)await B(X);let J,U=async()=>{let B=Y.commandAction.apply(this,A);if(B instanceof Promise)J=await B;else J=B;return J};if(Y.middleware.length>0){let B=0,W=async()=>{if(B<Y.middleware.length){let j=Y.middleware[B++];await j({...X,next:W})}else await U()};await W()}else await U();for(let B of Y.afterHooks)await B(X);return J}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return Uw.removeAllListeners("SIGINT"),Uw.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class Kj{cache;enabled;cleanupInterval=null;hits=0;misses=0;constructor(){this.cache=new Map,this.enabled=!0,this.startCleanupInterval()}startCleanupInterval(){if(this.cleanupInterval)return;this.cleanupInterval=setInterval(()=>{this.cleanup()},30000),this.cleanupInterval.unref()}stopCleanup(){if(this.cleanupInterval)clearInterval(this.cleanupInterval),this.cleanupInterval=null}isEnabled(){return this.enabled}get($){if(!this.enabled){this.misses++;return}let w=this.cache.get($);if(!w){this.misses++;return}if(Date.now()-w.timestamp>w.ttl){this.cache.delete($),this.misses++;return}return this.hits++,w.value}set($,w,Y=5000){if(!this.enabled)return;this.cache.set($,{value:w,timestamp:Date.now(),ttl:Y})}has($){if(!this.enabled)return!1;let w=this.cache.get($);if(!w)return!1;if(Date.now()-w.timestamp>w.ttl)return this.cache.delete($),!1;return!0}delete($){this.cache.delete($)}clear(){this.cache.clear()}disable(){this.enabled=!1,this.clear()}enable(){this.enabled=!0}stats(){return{size:this.cache.size,enabled:this.enabled,hits:this.hits,misses:this.misses}}resetStats(){this.hits=0,this.misses=0}keys(){return Array.from(this.cache.keys())}cleanup(){let $=Date.now();for(let[w,Y]of this.cache.entries())if($-Y.timestamp>Y.ttl)this.cache.delete(w)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var B4=new Kj;function WF(){if("FORCE_COLOR"in AY.env)return AY.env.FORCE_COLOR!=="0";if("NO_COLOR"in AY.env||AY.env.TERM==="dumb")return!1;if(AY.platform==="win32")return!0;return Jj.isatty(1)&&Jj.isatty(2)}var Nj=WF();function A0($,w){if(!Nj)return(Y)=>Y;return(Y)=>$+Y+w}var BF=A0("\x1B[0m","\x1B[0m"),jF=A0("\x1B[31m","\x1B[39m"),zF=A0("\x1B[32m","\x1B[39m"),GF=A0("\x1B[33m","\x1B[39m"),FF=A0("\x1B[34m","\x1B[39m"),KF=A0("\x1B[35m","\x1B[39m"),NF=A0("\x1B[36m","\x1B[39m"),fF=A0("\x1B[37m","\x1B[39m"),qF=A0("\x1B[90m","\x1B[39m"),EF=A0("\x1B[1m","\x1B[22m"),HF=A0("\x1B[3m","\x1B[23m"),TF=A0("\x1B[4m","\x1B[24m"),RF=A0("\x1B[2m","\x1B[22m"),MF=A0("\x1B[7m","\x1B[27m"),IF=A0("\x1B[8m","\x1B[28m"),VF=A0("\x1B[9m","\x1B[29m"),yF=A0("\x1B[41m","\x1B[49m"),CF=A0("\x1B[42m","\x1B[49m"),QF=A0("\x1B[43m","\x1B[49m"),LF=A0("\x1B[44m","\x1B[49m"),OF=A0("\x1B[45m","\x1B[49m"),_F=A0("\x1B[46m","\x1B[49m"),SF=A0("\x1B[47m","\x1B[49m"),hF=Nj,ZF={reset:BF,red:jF,green:zF,yellow:GF,blue:FF,magenta:KF,cyan:NF,white:fF,gray:qF,bold:EF,italic:HF,underline:TF,dim:RF,inverse:MF,hidden:IF,strikethrough:VF,bgRed:yF,bgGreen:CF,bgYellow:QF,bgBlue:LF,bgMagenta:OF,bgCyan:_F,bgWhite:SF,isColorSupported:hF},sY=ZF,DF=["up","down","left","right","space","enter","cancel"],oY={actions:new Set(DF),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};function fj($,w){if(typeof $==="string")return oY.aliases.get($)===w;for(let Y of $){if(Y===void 0)continue;if(fj(Y,w))return!0}return!1}function xF($,w){if($===w)return[];let Y=$.split(`
296
+ `)),this.enableDidYouMean){let w=[];for(let A of this.commands){if(A.displayName)w.push(A.displayName);if(A.aliasNames)w.push(...A.aliasNames)}let Y=Ij($,w);if(Y.length>0)console.log(WY.yellow("Did you mean one of these?")),Y.forEach((A)=>console.log(` ${WY.dim("•")} ${this.name} ${A}`)),console.log("")}console.log(WY.dim("Run"),`${this.name} --help`,WY.dim("to see all available commands")),Bw.exit(1)}async parse($=qj,w={}){let{run:Y=!0,exitOnError:A=!1}=w;if(A)try{return await this.parse($,{run:Y})}catch(W){throw this.handleUsageError(W),W}if(this.rawArgs=$,!this.name)this.name=$[1]?GK($[1]):"cli";let X=!0,J=$.slice(2),U=J[0];if(U&&!U.startsWith("-")){for(let W of this.commands)if(W.isMatched(U)){let j=this.mri(J,W);X=!1;let z={...j,args:j.args.slice(1)};this.setParsedInfo(z,W,U),this.emit(`command:${U}`,W);break}}if(X){for(let W of this.commands)if(W.name===""){X=!1;let j=this.mri(J,W);this.setParsedInfo(j,W),this.emit("command:!",W);break}}if(X){let W=this.mri($.slice(2));this.setParsedInfo(W)}if(this.options.verbose)this.isVerbose=!0;if(this.options.quiet)this.isQuiet=!0;if(this.options.debug)this.isDebug=!0;if(this.options.noInteraction)this.isNoInteraction=!0;if(this.options.env)this.environment=String(this.options.env);if(this.options.dryRun)this.isDryRun=!0;if(this.options.force)this.isForce=!0;if(this.options.noEmoji!==void 0)this.useEmoji=!this.options.noEmoji;if(this.options.theme)this.theme=String(this.options.theme);if(this.options.noCache!==void 0)this.isNoCache=Boolean(this.options.noCache);if(this.options.help&&this.showHelpOnExit)this.outputHelp(),Y=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),Y=!1,this.unsetMatchedCommand();let B={args:this.args,options:this.options};if(Y)await this.runMatchedCommand();if(!this.matchedCommand&&this.args[0]){if(this.emit("command:*"),!(this.listenerCount("command:*")>0))this.showCommandNotFound(this.args[0])}return B}mri($,w){let Y=[...this.globalCommand.options,...w?w.options:[]],A=WK(Y),X=[],J=$.indexOf("--");if(J>-1)X=$.slice(J+1),$=$.slice(0,J);let U=JK($,A),B={_:U._};for(let K of Object.keys(U))if(K!=="_")B[Mj(K)]=U[K];let W=B._,j={"--":X},z=w&&w.config.ignoreOptionDefaultValue?w.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,G=Object.create(null);for(let K of Y){if(!z&&K.config.default!==void 0)for(let F of K.names)j[F]=K.config.default;if(Array.isArray(K.config.type)){if(G[K.name]===void 0)G[K.name]={shouldTransform:!0,transformFunction:K.config.type[0]}}}for(let K of Object.keys(B))if(K!=="_"){let F=K.split(".");jK(j,F,B[K]),zK(j,G)}return{args:W,options:j}}async run($=qj){return this.parse($,{run:!0,exitOnError:!0})}handleUsageError($){if(!(!!$&&typeof $==="object"&&$.name==="ClappError"&&$.isUsageError!==!1))return;let A=$,X=A.message??"command-line error",J=this.name?`${this.name}: `:"",U=/--help/.test(X)?"":`
297
+ Run \`${this.name??"cli"} --help\` for usage.`;Bw.stderr.write(`${J}${X}${U}
298
+ `),Bw.exit(A.exitCode??2)}async runMatchedCommand(){let{args:$,options:w,matchedCommand:Y}=this;if(!Y||!Y.commandAction)return;Y.checkUnknownOptions(),Y.checkOptionValue(),Y.checkRequiredArgs();let A=[];Y.args.forEach((B,W)=>{if(B.variadic)A.push($.slice(W));else A.push($[W])}),A.push(w);let X={command:Y,args:A,options:w};for(let B of Y.beforeHooks)await B(X);let J,U=async()=>{let B=Y.commandAction.apply(this,A);if(B instanceof Promise)J=await B;else J=B;return J};if(Y.middleware.length>0){let B=0,W=async()=>{if(B<Y.middleware.length){let j=Y.middleware[B++];await j({...X,next:W})}else await U()};await W()}else await U();for(let B of Y.afterHooks)await B(X);return J}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return Bw.removeAllListeners("SIGINT"),Bw.removeAllListeners("SIGTERM"),this.signalHandlersSet=!1,this}destroy(){this.removeSignalHandlers(),this.commands=[],this.rawArgs=[],this.args=[],this.options={},this.matchedCommand=void 0,this.matchedCommandName=void 0,this.removeAllListeners()}}class Cj{cache;enabled;cleanupInterval=null;hits=0;misses=0;constructor(){this.cache=new Map,this.enabled=!0,this.startCleanupInterval()}startCleanupInterval(){if(this.cleanupInterval)return;this.cleanupInterval=setInterval(()=>{this.cleanup()},30000),this.cleanupInterval.unref()}stopCleanup(){if(this.cleanupInterval)clearInterval(this.cleanupInterval),this.cleanupInterval=null}isEnabled(){return this.enabled}get($){if(!this.enabled){this.misses++;return}let w=this.cache.get($);if(!w){this.misses++;return}if(Date.now()-w.timestamp>w.ttl){this.cache.delete($),this.misses++;return}return this.hits++,w.value}set($,w,Y=5000){if(!this.enabled)return;this.cache.set($,{value:w,timestamp:Date.now(),ttl:Y})}has($){if(!this.enabled)return!1;let w=this.cache.get($);if(!w)return!1;if(Date.now()-w.timestamp>w.ttl)return this.cache.delete($),!1;return!0}delete($){this.cache.delete($)}clear(){this.cache.clear()}disable(){this.enabled=!1,this.clear()}enable(){this.enabled=!0}stats(){return{size:this.cache.size,enabled:this.enabled,hits:this.hits,misses:this.misses}}resetStats(){this.hits=0,this.misses=0}keys(){return Array.from(this.cache.keys())}cleanup(){let $=Date.now();for(let[w,Y]of this.cache.entries())if($-Y.timestamp>Y.ttl)this.cache.delete(w)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var O4=new Cj;function fK(){if("FORCE_COLOR"in BY.env)return BY.env.FORCE_COLOR!=="0";if("NO_COLOR"in BY.env||BY.env.TERM==="dumb")return!1;if(BY.platform==="win32")return!0;return Ej.isatty(1)&&Ej.isatty(2)}var Qj=fK();function A0($,w){if(!Qj)return(Y)=>Y;return(Y)=>$+Y+w}var RK=A0("\x1B[0m","\x1B[0m"),MK=A0("\x1B[31m","\x1B[39m"),IK=A0("\x1B[32m","\x1B[39m"),VK=A0("\x1B[33m","\x1B[39m"),CK=A0("\x1B[34m","\x1B[39m"),QK=A0("\x1B[35m","\x1B[39m"),yK=A0("\x1B[36m","\x1B[39m"),LK=A0("\x1B[37m","\x1B[39m"),OK=A0("\x1B[90m","\x1B[39m"),_K=A0("\x1B[1m","\x1B[22m"),SK=A0("\x1B[3m","\x1B[23m"),ZK=A0("\x1B[4m","\x1B[24m"),hK=A0("\x1B[2m","\x1B[22m"),kK=A0("\x1B[7m","\x1B[27m"),DK=A0("\x1B[8m","\x1B[28m"),xK=A0("\x1B[9m","\x1B[29m"),PK=A0("\x1B[41m","\x1B[49m"),bK=A0("\x1B[42m","\x1B[49m"),uK=A0("\x1B[43m","\x1B[49m"),vK=A0("\x1B[44m","\x1B[49m"),cK=A0("\x1B[45m","\x1B[49m"),iK=A0("\x1B[46m","\x1B[49m"),mK=A0("\x1B[47m","\x1B[49m"),gK=Qj,dK={reset:RK,red:MK,green:IK,yellow:VK,blue:CK,magenta:QK,cyan:yK,white:LK,gray:OK,bold:_K,italic:SK,underline:ZK,dim:hK,inverse:kK,hidden:DK,strikethrough:xK,bgRed:PK,bgGreen:bK,bgYellow:uK,bgBlue:vK,bgMagenta:cK,bgCyan:iK,bgWhite:mK,isColorSupported:gK},AA=dK,nK=["up","down","left","right","space","enter","cancel"],XA={actions:new Set(nK),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};function yj($,w){if(typeof $==="string")return XA.aliases.get($)===w;for(let Y of $){if(Y===void 0)continue;if(yj(Y,w))return!0}return!1}function pK($,w){if($===w)return[];let Y=$.split(`
299
299
  `),A=w.split(`
300
- `),X=[];for(let J=0;J<Math.max(Y.length,A.length);J++)if(Y[J]!==A[J])X.push(J);return X}var N4=kF.platform.startsWith("win"),Uj=Symbol("clapp:cancel");function rY($,w){let Y=$;if(Y.isTTY)Y.setRawMode(w)}function cF($){return $.replace(/\x1b\[[0-9;]*m/g,"")}function vF($){return cF($).length}function Bj($,w,Y){if(!w||w<1)return $;let A=Y?.hard??!1,X=Y?.trim??!0,J=$.split(`
301
- `),U=[];for(let B of J){if(vF(B)<=w){U.push(X?B.trimEnd():B);continue}if(A){let W="",j=0,z=0;while(z<B.length){let G=B.slice(z).match(/^\x1b\[[0-9;]*m/);if(G){W+=G[0],z+=G[0].length;continue}if(j>=w)U.push(X?W.trimEnd():W),W="",j=0;W+=B[z],j++,z++}if(W)U.push(X?W.trimEnd():W)}else U.push(X?B.trimEnd():B)}return U.join(`
302
- `)}class UJ{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;_manualLine="";state="initial";error="";value;userInput="";constructor($,w=!0){let{input:Y=PF,output:A=bF,render:X,signal:J,...U}=$;this.opts=U,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=X.bind(this),this._track=w,this._abortSignal=J,this.input=Y,this.output=A}unsubscribe(){this._subscribers.clear()}setSubscriber($,w){let Y=this._subscribers.get($)??[];Y.push(w),this._subscribers.set($,Y)}on($,w){return this.setSubscriber($,{cb:w}),this}once($,w){return this.setSubscriber($,{cb:w,once:!0}),this}emit($,...w){let Y=this._subscribers.get($)??[],A=[];for(let X of Y)if(X.cb(...w),X.once)A.push(()=>Y.splice(Y.indexOf(X),1));for(let X of A)X();return this}prompt(){return new Promise(($)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),$(Uj);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}if(this.rl=uF.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),rY(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(h$.show),this.output.off("resize",this.render),rY(this.input,!1),$(this.value)}),this.once("cancel",()=>{this.output.write(h$.show),this.output.off("resize",this.render),rY(this.input,!1),$(Uj)})})}_isActionKey($,w){return $==="\t"}_setValue($){this.value=$,this.emit("value",this.value)}_setUserInput($,w){if(this.userInput=$??"",this.emit("userInput",this.userInput),w&&this._track&&this.rl)this.rl.write(this.userInput),this._cursor=this.rl.cursor}onKeypress($,w){if(this._track&&w.name!=="return"){if(w.name&&this._isActionKey($,w))this.rl?.write(null,{ctrl:!0,name:"h"});this._cursor=this.rl?.cursor??0;let Y=w.name==="tab"||w.name==="escape"||w.name==="backspace"||w.name==="delete"||w.name==="enter"||w.name==="return"||w.name&&["up","down","left","right"].includes(w.name);if($&&!Y&&$.length===1&&$>=" ")this._manualLine+=$;else if(w.name==="backspace"&&this._manualLine.length>0)this._manualLine=this._manualLine.slice(0,-1);let A=this._manualLine.length>=(this.rl?.line?.length||0)?this._manualLine:this.rl?.line;this._setUserInput(A)}if(this.state==="error")this.state="active",this.error="";if(w?.name){if(!this._track&&oY.aliases.has(w.name))this.emit("cursor",oY.aliases.get(w.name));if(oY.actions.has(w.name))this.emit("cursor",w.name)}if($&&($.toLowerCase()==="y"||$.toLowerCase()==="n"))this.emit("confirm",$.toLowerCase()==="y");if(this.emit("key",$?.toLowerCase(),w),w?.name==="return"){if(this.opts.validate){let Y=this.opts.validate(this.value);if(Y)this.error=Y instanceof Error?Y.message:Y,this.state="error"}if(this.state!=="error")this.state="submit"}if(fj([$,w?.name,w?.sequence],"cancel"))this.state="cancel";if(this.state==="submit"||this.state==="cancel")this.emit("finalize");if(this.render(),this.state==="submit"||this.state==="cancel")this.close()}close(){if(this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
303
- `),rY(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.state==="cancel")setTimeout(()=>{this.unsubscribe()},10);else this.unsubscribe()}restoreCursor(){let $=Bj(this._prevFrame,Wj.stdout.columns,{hard:!0,trim:!1}).split(`
304
- `).length-1;this.output.write(h$.move(-999,$*-1))}render(){let $=Bj(this._render(this)??"",Wj.stdout.columns,{hard:!0,trim:!1});if($===this._prevFrame)return;if(this.state==="initial")this.output.write(h$.hide);else{let w=xF(this._prevFrame,$);if(this.restoreCursor(),w&&w?.length===1){let Y=w[0];this.output.write(h$.move(0,Y)),this.output.write($J.lines(1));let A=$.split(`
305
- `);this.output.write(A[Y]),this._prevFrame=$,this.output.write(h$.move(0,A.length-Y-1));return}if(w&&w?.length>1){let Y=w[0];this.output.write(h$.move(0,Y)),this.output.write($J.down());let X=$.split(`
300
+ `),X=[];for(let J=0;J<Math.max(Y.length,A.length);J++)if(Y[J]!==A[J])X.push(J);return X}var D4=lK.platform.startsWith("win"),Tj=Symbol("clapp:cancel");function $A($,w){let Y=$;if(Y.isTTY)Y.setRawMode(w)}function sK($){return $.replace(/\x1b\[[0-9;]*m/g,"")}function oK($){return sK($).length}function fj($,w,Y){if(!w||w<1)return $;let A=Y?.hard??!1,X=Y?.trim??!0,J=$.split(`
301
+ `),U=[];for(let B of J){if(oK(B)<=w){U.push(X?B.trimEnd():B);continue}if(A){let W="",j=0,z=0;while(z<B.length){let G=B.slice(z).match(/^\x1b\[[0-9;]*m/);if(G){W+=G[0],z+=G[0].length;continue}if(j>=w)U.push(X?W.trimEnd():W),W="",j=0;W+=B[z],j++,z++}if(W)U.push(X?W.trimEnd():W)}else U.push(X?B.trimEnd():B)}return U.join(`
302
+ `)}class TJ{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;_manualLine="";state="initial";error="";value;userInput="";constructor($,w=!0){let{input:Y=rK,output:A=tK,render:X,signal:J,...U}=$;this.opts=U,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=X.bind(this),this._track=w,this._abortSignal=J,this.input=Y,this.output=A}unsubscribe(){this._subscribers.clear()}setSubscriber($,w){let Y=this._subscribers.get($)??[];Y.push(w),this._subscribers.set($,Y)}on($,w){return this.setSubscriber($,{cb:w}),this}once($,w){return this.setSubscriber($,{cb:w,once:!0}),this}emit($,...w){let Y=this._subscribers.get($)??[],A=[];for(let X of Y)if(X.cb(...w),X.once)A.push(()=>Y.splice(Y.indexOf(X),1));for(let X of A)X();return this}prompt(){return new Promise(($)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),$(Tj);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}if(this.rl=aK.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),$A(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(D$.show),this.output.off("resize",this.render),$A(this.input,!1),$(this.value)}),this.once("cancel",()=>{this.output.write(D$.show),this.output.off("resize",this.render),$A(this.input,!1),$(Tj)})})}_isActionKey($,w){return $==="\t"}_setValue($){this.value=$,this.emit("value",this.value)}_setUserInput($,w){if(this.userInput=$??"",this.emit("userInput",this.userInput),w&&this._track&&this.rl)this.rl.write(this.userInput),this._cursor=this.rl.cursor}onKeypress($,w){if(this._track&&w.name!=="return"){if(w.name&&this._isActionKey($,w))this.rl?.write(null,{ctrl:!0,name:"h"});this._cursor=this.rl?.cursor??0;let Y=w.name==="tab"||w.name==="escape"||w.name==="backspace"||w.name==="delete"||w.name==="enter"||w.name==="return"||w.name&&["up","down","left","right"].includes(w.name);if($&&!Y&&$.length===1&&$>=" ")this._manualLine+=$;else if(w.name==="backspace"&&this._manualLine.length>0)this._manualLine=this._manualLine.slice(0,-1);let A=this._manualLine.length>=(this.rl?.line?.length||0)?this._manualLine:this.rl?.line;this._setUserInput(A)}if(this.state==="error")this.state="active",this.error="";if(w?.name){if(!this._track&&XA.aliases.has(w.name))this.emit("cursor",XA.aliases.get(w.name));if(XA.actions.has(w.name))this.emit("cursor",w.name)}if($&&($.toLowerCase()==="y"||$.toLowerCase()==="n"))this.emit("confirm",$.toLowerCase()==="y");if(this.emit("key",$?.toLowerCase(),w),w?.name==="return"){if(this.opts.validate){let Y=this.opts.validate(this.value);if(Y)this.error=Y instanceof Error?Y.message:Y,this.state="error"}if(this.state!=="error")this.state="submit"}if(yj([$,w?.name,w?.sequence],"cancel"))this.state="cancel";if(this.state==="submit"||this.state==="cancel")this.emit("finalize");if(this.render(),this.state==="submit"||this.state==="cancel")this.close()}close(){if(this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
303
+ `),$A(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.state==="cancel")setTimeout(()=>{this.unsubscribe()},10);else this.unsubscribe()}restoreCursor(){let $=fj(this._prevFrame,Hj.stdout.columns,{hard:!0,trim:!1}).split(`
304
+ `).length-1;this.output.write(D$.move(-999,$*-1))}render(){let $=fj(this._render(this)??"",Hj.stdout.columns,{hard:!0,trim:!1});if($===this._prevFrame)return;if(this.state==="initial")this.output.write(D$.hide);else{let w=pK(this._prevFrame,$);if(this.restoreCursor(),w&&w?.length===1){let Y=w[0];this.output.write(D$.move(0,Y)),this.output.write(GJ.lines(1));let A=$.split(`
305
+ `);this.output.write(A[Y]),this._prevFrame=$,this.output.write(D$.move(0,A.length-Y-1));return}if(w&&w?.length>1){let Y=w[0];this.output.write(D$.move(0,Y)),this.output.write(GJ.down());let X=$.split(`
306
306
  `).slice(Y);this.output.write(X.join(`
307
- `)),this._prevFrame=$;return}this.output.write($J.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function iF($,w){if($===void 0)return 0;if(w.length===0)return 0;let A=w.findIndex((X)=>X.value===$);return A!==-1?A:0}function mF($,w){return(w.label??String(w.value)).toLowerCase().includes($.toLowerCase())}function gF($,w){if(!w)return;if($)return w;return w[0]}class lF extends UJ{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#Y="";#A;#w;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return sY.inverse(sY.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let $=this.userInput.slice(0,this._cursor),[w,...Y]=this.userInput.slice(this._cursor);return`${$}${sY.inverse(w)}${Y.join("")}`}get options(){if(typeof this.#w==="function")return this.#w();return this.#w}constructor($){super($);this.#w=$.options;let w=this.options;this.filteredOptions=[...w],this.multiple=$.multiple===!0,this.#A=$.filter??mF;let Y;if($.initialValue&&Array.isArray($.initialValue))if(this.multiple)Y=$.initialValue;else Y=$.initialValue.slice(0,1);else if(!this.multiple&&this.options.length>0)Y=[this.options[0].value];if(Y)for(let A of Y){let X=w.findIndex((J)=>J.value===A);if(X!==-1)this.toggleSelected(A),this.#$=X}this.focusedValue=this.options[this.#$]?.value,this.on("key",(A,X)=>this.#X(A,X)),this.on("userInput",(A)=>this.#J(A))}_isActionKey($,w){return $==="\t"||this.multiple&&this.isNavigating&&w.name==="space"&&$!==void 0&&$!==""}#X($,w){let Y=w.name==="up",A=w.name==="down",X=w.name==="return";if(Y||A){if(this.#$=Math.max(0,Math.min(this.#$+(Y?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)this.selectedValues=[this.focusedValue];this.isNavigating=!0}else if(X)this.value=gF(this.multiple,this.selectedValues);else if(this.multiple)if(this.focusedValue!==void 0&&(w.name==="tab"||this.isNavigating&&w.name==="space"))this.toggleSelected(this.focusedValue);else this.isNavigating=!1;else{if(this.focusedValue)this.selectedValues=[this.focusedValue];this.isNavigating=!1}}deselectAll(){this.selectedValues=[]}toggleSelected($){if(this.filteredOptions.length===0)return;if(this.multiple)if(this.selectedValues.includes($))this.selectedValues=this.selectedValues.filter((w)=>w!==$);else this.selectedValues=[...this.selectedValues,$];else this.selectedValues=[$]}#J($){if($!==this.#Y){this.#Y=$;let w=this.options;if($)this.filteredOptions=w.filter((Y)=>this.#A($,Y));else this.filteredOptions=[...w];if(this.#$=iF(this.focusedValue,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)if(this.focusedValue!==void 0)this.toggleSelected(this.focusedValue);else this.deselectAll()}}}class dF extends UJ{options;cursor=0;#$;getGroupItems($){return this.options.filter((w)=>w.group===$)}isGroupSelected($){let w=this.getGroupItems($),Y=this.value;if(Y===void 0)return!1;return w.every((A)=>Y.includes(A.value))}toggleValue(){let $=this.options[this.cursor];if(this.value===void 0)this.value=[];if($.group===!0){let w=String($.value),Y=this.getGroupItems(w);if(this.isGroupSelected(w))this.value=this.value.filter((A)=>Y.findIndex((X)=>X.value===A)===-1);else this.value=[...this.value,...Y.map((A)=>A.value)];this.value=Array.from(new Set(this.value))}else{let w=this.value.includes($.value);this.value=w?this.value.filter((Y)=>Y!==$.value):[...this.value,$.value]}}constructor($){super($,!1);let{options:w}=$;this.#$=$.selectableGroups!==!1,this.options=Object.entries(w).flatMap(([Y,A])=>[{value:Y,group:!0,label:Y},...A.map((X)=>({...X,group:Y}))]),this.value=[...$.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:Y})=>Y===$.cursorAt),this.#$?0:1),this.on("cursor",(Y)=>{switch(Y){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let A=this.options[this.cursor]?.group===!0;if(!this.#$&&A)this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let A=this.options[this.cursor]?.group===!0;if(!this.#$&&A)this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}case"space":this.toggleValue();break}})}}var nF=$F();var e=($,w)=>nF?$:w,E4=e("◆","*"),H4=e("■","x"),T4=e("▲","x"),R4=e("◇","o"),M4=e("┌","T"),pF=e("│","|"),I4=e("└","—"),V4=e("●",">"),y4=e("○"," "),C4=e("◻","[•]"),Q4=e("◼","[+]"),L4=e("◻","[ ]"),O4=e("▪","•"),_4=e("─","-"),S4=e("╮","+"),h4=e("├","+"),Z4=e("╯","+"),k4=e("●","•"),D4=e("◆","*"),x4=e("▲","!"),P4=e("■","x");var b4={light:e("─","-"),heavy:e("━","="),block:e("█","#")};function rF(){return`${sY.gray(pF)} `}var u4=rF();aJ();import{homedir as sJ}from"node:os";import{join as oJ,resolve as AN}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",u9={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:oJ(sJ(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:oJ(sJ(),".stacks","ssl","stacks.localhost.crt"),keyPath:oJ(sJ(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0},eJ=null;async function c9(){if(!eJ)eJ=await tJ({name:"rpx",cwd:AN(__dirname,".."),defaultConfig:u9});return eJ}var J1=u9;import{existsSync as XN,readdirSync as JN,readFileSync as UN,statSync as WN}from"node:fs";import{homedir as i9}from"node:os";import{isAbsolute as BN,join as W1}from"node:path";var m9=["~/Code"],g9=["localhost","test"],jN=1800000,$U={dirExists:($)=>{try{return WN($).isDirectory()}catch{return!1}},fileExists:($)=>{try{return XN($)}catch{return!1}},readText:($)=>{try{return UN($,"utf8")}catch{return null}}};function wU($,w){if($==="~")return w;if($.startsWith("~/"))return W1(w,$.slice(2));return $}function zN($){let w=$.indexOf(":");return(w===-1?$:$.slice(0,w)).toLowerCase()}function uA($){return $.replace(/[^a-z0-9._-]/gi,"-").replace(/^[-.]+|[-.]+$/g,"")||"site"}function GN($,w){for(let Y of w){let A=`.${Y}`;if($.endsWith(A)){let X=$.slice(0,-A.length);if(X.length>0&&!X.includes(".")&&/^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i.test(X))return X}}return null}function FN($,w){let Y=w.readText(W1($,"rpx.site.json"));if(Y)try{let X=JSON.parse(Y);if(X&&typeof X==="object")return X}catch{}let A=w.readText(W1($,"package.json"));if(A)try{let X=JSON.parse(A);if(X.rpx&&typeof X.rpx==="object")return X.rpx}catch{}return null}function KN($){let w=$.selfRegisters??!1;return{command:$.command,env:$.env,urlEnv:$.urlEnv,selfRegisters:w,routes:$.routes??(w?void 0:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}])}}function NN($,w){let Y=FN($,w);if(Y?.command)return KN(Y);let A=w.fileExists(W1($,"buddy")),X=w.readText(W1($,"package.json")),J=null;if(X)try{J=JSON.parse(X)}catch{J=null}let U={...J?.dependencies??{},...J?.devDependencies??{}};if(A||Object.keys(U).some((W)=>W==="stacks"||W.startsWith("@stacksjs/")))return{command:A?"./buddy dev":"bun run dev",env:{STACKS_PROXY_MANAGED:"1"},urlEnv:["APP_URL"],routes:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0},{path:"/api",portEnv:"PORT_API",defaultPort:3008,stripPrefix:!1,readyGate:!1},{path:"/docs",portEnv:"PORT_DOCS",defaultPort:3006,stripPrefix:!0,readyGate:!1}]};if(J?.scripts?.dev)return{command:"bun run dev",routes:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}]};return null}function fN($,w={}){let Y={dirExists:w.dirExists??$U.dirExists,fileExists:w.fileExists??$U.fileExists,readText:w.readText??$U.readText},A=w.detect??NN,X=w.homeDir??i9(),J=$.tlds??g9,U=($.roots??m9).map((F)=>wU(F,X)),B=$.idleTimeoutMs??jN,W=new Map;for(let F of $.sites??[])W.set(F.to,F);let j=(F)=>F.idleTimeoutMs??B;function z(F){let K=bA(W,F);if(!K)return null;let q=BN(K.dir)?K.dir:wU(K.dir,X),f=K.selfRegisters??!1,E=K.routes??[];if(!f&&E.length===0)E=A(q,Y)?.routes??[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}];let H=v9({...K.env??{}},void 0,F);return{host:F,id:uA(F),dir:q,command:K.command,env:H,routes:E,selfRegisters:f,idleTimeoutMs:j(K),source:"config"}}function G(F){let K=GN(F,J);if(!K)return null;for(let q of U){let f=W1(q,K);if(!Y.dirExists(f))continue;let E=A(f,Y);if(!E)continue;let H=E.selfRegisters??!1;return{host:F,id:uA(F),dir:f,command:E.command,env:v9({...E.env??{}},E.urlEnv,F),routes:H?[]:E.routes??[],selfRegisters:H,idleTimeoutMs:B,source:"discovered"}}return null}return{resolve(F){let K=zN(F);if(!K)return null;return z(K)??G(K)}}}function qN($){try{return JN($,{withFileTypes:!0}).filter((w)=>w.isDirectory()).map((w)=>w.name)}catch{return[]}}function l9($,w={}){let Y=w.homeDir??i9(),A=$.tlds??g9,X=($.roots??m9).map((G)=>wU(G,Y)),J=w.readdir??qN,U=fN($,w),B=[],W=new Set,j=(G)=>{if(G&&!W.has(G.host))W.add(G.host),B.push(G)};for(let G of $.sites??[])if(!G.to.includes("*"))j(U.resolve(G.to));let z=A[0]??"localhost";for(let G of X)for(let F of J(G))j(U.resolve(`${F}.${z}`));return B}function v9($,w,Y){if(!w)return $;let A=`https://${Y}`;for(let X of w)if($[X]===void 0)$[X]=A;return $}u$();E8();R8();kY();I8();NB();EB();VB();ZY();_Y();r1();a1();X0();import{spawn as J6}from"node:child_process";import*as P0 from"node:fs/promises";import{homedir as U6}from"node:os";import*as L$ from"node:path";import*as V from"node:process";var EM=5000;function w$(){return L$.join(U6(),".stacks","rpx")}function Vw($=w$()){return L$.join($,"daemon.pid")}async function Iw($=w$()){try{let w=await P0.readFile(Vw($),"utf8"),Y=Number.parseInt(w.trim(),10);if(!Number.isFinite(Y)||Y<=0)return null;return Y}catch(w){if(w.code==="ENOENT")return null;throw w}}async function D8($=w$()){let w=await Iw($);return w!==null&&r0(w)}async function W6($=w$()){await P0.mkdir($,{recursive:!0});let w=Vw($);while(!0){try{let A=await P0.open(w,"wx");try{await A.write(`${V.pid}
308
- `)}finally{await A.close()}return w}catch(A){if(A.code!=="EEXIST")throw A}let Y=await Iw($);if(Y!==null&&r0(Y))throw Error(`rpx daemon already running (pid=${Y})`);await P0.unlink(w).catch(()=>{})}}async function o1($=w$()){await P0.unlink(Vw($)).catch(()=>{})}function B6($){let w=$.cleanUrls??!1,Y=y$($.path),A=v1($.auth);if($.static)return{static:hY($.static,w),cleanUrls:w,basePath:Y,auth:A};let X=$.from??"localhost:1";return{sourceHost:new URL(X.startsWith("http")?X:`http://${X}`).host,cleanUrls:w,changeOrigin:$.changeOrigin??!1,pathRewrites:$.pathRewrites,basePath:Y,auth:A}}function HM($){return $.find((Y)=>!/^api\./.test(Y)&&!/^docs\./.test(Y)&&!/^dashboard\./.test(Y))??$[0]??"rpx.localhost"}async function k8($,w,Y=[],A=!1){let X=await C$(w,$.verbose),J=[...new Set([...X.map((z)=>z.to).filter(Boolean),...Y])],U=HM(J),B=[...new Set([U,...J,"rpx.localhost"])],W=jB(J,U,$.verbose);if(typeof $.https==="object"&&typeof W.https==="object")W.https={...W.https,...$.https};let j=await e$(W);if(j&&(A||!ZX(f8,B)))N("daemon",`regenerating shared cert for host(s): ${B.join(", ")}`,$.verbose),q8(),j=null;if(!j)N("daemon","no usable cert on disk, generating one via tlsx",$.verbose),await c1({...W,forceRegenerate:!0}),j=await e$(W);if(!j)throw Error("failed to bootstrap TLS for rpx daemon");return j}async function TM($,w,Y,A){let X=V.env.SUDO_PASSWORD,J=V.env.HOME??U6(),U=[V.execPath,...V.argv.slice(1)],B=[`HOME=${J}`,`PATH=${V.env.PATH??""}`];if(A)B.push("RPX_VERBOSE=1");for(let[q,f]of Object.entries(V.env))if(f!==void 0&&q!=="RPX_VERBOSE"&&/^(?:RPX_|STACKS_RPX_)/.test(q))B.push(`${q}=${f}`);let W=X?["-S","-p","","env",...B,...U]:["-n","env",...B,...U];N("daemon",`elevating daemon via sudo for privileged ports ${w}/${Y}`,A);let j=J6("sudo",W,{detached:!0,stdio:["pipe","ignore","ignore"]}),z=null,G=null;if(j.once("error",(q)=>{z=q}),j.once("exit",(q)=>{G=q??0}),X&&j.stdin)j.stdin.write(`${X}
309
- `),j.stdin.end();j.unref();let F=Vw($),K=Date.now()+15000;while(Date.now()<K){if(z)throw z;let q=await Iw($);if(q!==null&&r0(q)){if(A)R.success(`rpx daemon elevated to root (pid=${q}, https on :${w})`);return{httpsPort:w,httpPort:Y,pidPath:F,done:Promise.resolve(),stop:async()=>{try{V.kill(q,"SIGTERM")}catch{}},ensureCert:()=>Promise.resolve(!1),listSites:()=>[]}}if(G!==null&&G!==0)throw Error(`rpx daemon could not elevate to bind :${w} (sudo exited ${G}). Set SUDO_PASSWORD in .env or run \`sudo -v\` first.`);await new Promise((f)=>setTimeout(f,50))}throw Error(`rpx daemon failed to elevate within 15000ms (rpxDir=${$})`)}var Y6=!1;function bB(){if(Y6)return;Y6=!0,V.on("uncaughtException",($)=>{R.error(`rpx daemon: uncaught exception (continuing): ${$?.stack??$}`)}),V.on("unhandledRejection",($)=>{R.error(`rpx daemon: unhandled rejection (continuing): ${$}`)})}function j6($,w){let Y;try{Y=new URL($.url)}catch{return new Response("Bad Request",{status:400})}let A=($.headers.get("host")??Y.hostname).split(":")[0];if(w&&Y.pathname.startsWith("/.well-known/acme-challenge/")){let X=w.challengeStore.handlePath(Y.pathname);if(X!==void 0)return new Response(X,{status:200,headers:{"content-type":"text/plain"}});return new Response("challenge not found",{status:404})}if(w&&!w.hasCert(A))w.ensureCert(A).catch(()=>{});return new Response(null,{status:301,headers:{Location:`https://${A}${Y.pathname}${Y.search}`}})}async function z6($={}){bB();let w=$.verbose??!1,Y=$.rpxDir??w$(),A=$.registryDir??L$.join(Y,"registry.d"),X=$.httpsPort??443,J=$.httpPort??80,U=$.hostname??"0.0.0.0",B=$.gcIntervalMs??EM;if(V.env.RPX_DAEMON_WORKER==="1")return IM({rpxDir:V.env.RPX_WORKER_RPXDIR??Y,registryDir:V.env.RPX_WORKER_REGISTRYDIR??A,httpsPort:Number.parseInt(V.env.RPX_WORKER_HTTPSPORT??"",10)||X,hostname:V.env.RPX_WORKER_HOSTNAME??U,verbose:V.env.RPX_WORKER_VERBOSE==="1"||w});let W=X>0&&X<1024||J>0&&J<1024,j=typeof V.getuid==="function"&&V.getuid()===0;if(V.platform!=="win32"&&W&&!j)return TM(Y,X,J,w);let z=Math.max(1,$.workers??(Number.parseInt(V.env.RPX_WORKERS??"",10)||1));if(z>1){if($.onDemandSites?.enabled)R.warn("rpx: on-demand sites are not supported in cluster mode (workers > 1); ignoring");return VM($,{rpxDir:Y,registryDir:A,httpsPort:X,httpPort:J,hostname:U,verbose:w,gcIntervalMs:B,workers:z})}let G=await W6(Y),F=new Map,K=(C,S)=>l1(F,C,S);function q(C){F=g1(C.map((Jw)=>({host:Jw.to,path:Jw.path,route:B6(Jw)})));let S=Array.from(F.keys());N("daemon",`routing table now covers ${S.length} host(s): ${S.join(", ")||"<empty>"}`,w)}await p1(A,w).catch((C)=>{N("daemon",`initial gc failed: ${C}`,w)});let f=await C$(A,w);q(f),await Yw({rpxDir:Y,verbose:w}).catch((C)=>{N("daemon",`DNS reconcile on start failed: ${C}`,w)}),await uw(f,{rpxDir:Y,verbose:w,ownerPid:V.pid}).catch((C)=>{N("daemon",`DNS setup on start failed: ${C}`,w)});let E=[];if($.productionCerts){if(E=await d1($.productionCerts,w),w&&E.length>0)R.info(`SNI: serving ${E.length} real cert(s): ${E.map((C)=>C.serverName).join(", ")}`)}let H=new Set,M=null,y;if($.onDemandSites?.enabled){if(M=new O8({resolver:qB($.onDemandSites),registryDir:A,rpxDir:Y,verbose:w,startupTimeoutMs:$.onDemandSites.startupTimeoutMs,isHostRoutable:(C)=>M8(F,C)!==void 0,onSiteActivating:(C)=>{Lw(C)}}),y=async(C)=>{let S=await M.onRequest(C);switch(S.kind){case"ready":return{retry:!0};case"starting":return yB({host:S.host,sinceMs:S.sinceMs,logTail:S.logTail});case"failed":return CB({host:S.host,error:S.error,logTail:S.logTail});case"unknown":default:return}},w)R.info("rpx: on-demand sites enabled")}let Q=i1(K,w,y),T=m1(w),I=null;if(E.length===0)I=await k8($,A);let _=$.onDemandTls,h=_?.enabled?new xY({config:_,certsDir:_.certsDir??$.productionCerts?.certsDir??L$.join(Y,"on-demand-certs"),initial:E,verbose:w,onCertAdded:(C)=>{gw(C)}}):null;function u0(C){if(C.length>0)return C.map((S)=>({serverName:S.serverName,cert:S.cert,key:S.key}));return{key:I.key,cert:I.cert,ca:I.ca,requestCert:!1,rejectUnauthorized:!1}}function iw(C){return Bun.serve({port:X,hostname:U,reusePort:D1(),tls:u0(C),fetch(S,Jw){return Q(S,Jw)},websocket:T,error(S){return N("daemon",`https server error: ${S}`,w),new Response(`Server Error: ${S.message}`,{status:500})}})}let yw=(C)=>[...new Set(C.map((S)=>S.to).filter(Boolean))],mw=(C)=>{if(!I)return E;return BB([...yw(C),...H,"rpx.localhost"],I)},Xw=iw(h?h.sniEntries():E.length>0?E:mw(f)),Cw=null,Qw=!1;async function gw(C){if(I$)return;if(Cw=C,Qw)return;Qw=!0;try{while(!I$&&Cw){let S=Cw;Cw=null,N("daemon",`rebuilding :443 with ${S.length} SNI cert(s)`,w),Xw.stop(!1);let Jw,t8=!1,eB=60,u6=500;for(let a8=0;!I$&&!t8;a8++)try{Xw=iw(S),t8=!0;break}catch(c6){if(Jw=c6,a8>=eB)break;await new Promise((v6)=>setTimeout(v6,Math.min(25*2**Math.min(a8,4),u6)))}if(!t8)R.error(`rpx: CRITICAL — could not rebind :443 after ${eB} attempts issuing cert; HTTPS unbound until the next cert event or a gateway restart: ${Jw?.message}`)}}finally{Qw=!1}}let S$=null;if(J>0)S$=Bun.serve({port:J,hostname:U,fetch(C){return j6(C,h)},error(){return new Response("Bad Request",{status:400})}});if(w)R.success(`rpx daemon listening on https://${U}:${X}${S$?` (http→https on :${J})`:""}`),R.info(`pid file: ${G}`),R.info(`registry: ${A}`);async function Z(C){if(I$||E.length>0||h||!I)return;try{I=await k8($,A,[...H]),await gw(mw(C))}catch(S){N("daemon",`TLS sync on registry change failed: ${S}`,w)}}async function Lw(C){if(I$||E.length>0||h||!I||!C)return;if(H.has(C))return;H.add(C);try{I=await k8($,A,[...H],!0);let S=await C$(A,w);await gw(mw(S))}catch(S){N("daemon",`dev cert refresh for ${C} failed: ${S}`,w)}}let p8=uY((C)=>{q(C),Z(C),uw(C,{rpxDir:Y,verbose:w,ownerPid:V.pid}).catch((S)=>{N("daemon",`DNS sync on registry change failed: ${S}`,w)})},{dir:A,verbose:w}),lw=setInterval(()=>{p1(A,w).then((C)=>{if(C>0)N("daemon",`gc reaped ${C} stale entries`,w)}).catch((C)=>{N("daemon",`periodic gc failed: ${C}`,w)})},B);if(typeof lw.unref==="function")lw.unref();let I$=!1,$Y,dw=new Promise((C)=>{$Y=C});async function r8(){if(I$)return dw;if(I$=!0,clearInterval(lw),p8.close(),await M?.stopAll().catch((C)=>{N("daemon",`site supervisor stopAll failed: ${C}`,w)}),Xw.stop(!1),S$?.stop(!1),await Rw({rpxDir:Y,verbose:w}).catch((C)=>{N("daemon",`DNS teardown failed: ${C}`,w)}),await o1(Y),w)R.info("rpx daemon stopped");return $Y(),dw}let oB=(C)=>{N("daemon",`received ${C}, shutting down`,w),r8().catch(()=>{})};return V.once("SIGINT",oB),V.once("SIGTERM",oB),{stop:r8,done:dw,httpsPort:typeof Xw.port==="number"?Xw.port:X,httpPort:S$&&typeof S$.port==="number"?S$.port:J,pidPath:G,ensureCert:(C)=>h?h.ensureCert(C):Promise.resolve(!1),listSites:()=>M?.list()??[]}}function uB($){return L$.join($,"cluster-sni.json")}async function A6($,w,Y){let A=uB($),X=`${A}.${V.pid}.tmp`;await P0.writeFile(X,JSON.stringify({sni:w,dev:Y}),"utf8"),await P0.rename(X,A)}async function X6($){try{return JSON.parse(await P0.readFile(uB($),"utf8"))}catch{return{sni:[],dev:null}}}function RM($){if($.sni.length>0)return $.sni.map((w)=>({serverName:w.serverName,cert:w.cert,key:w.key}));if($.dev)return{key:$.dev.key,cert:$.dev.cert,ca:$.dev.ca,requestCert:!1,rejectUnauthorized:!1};return}function MM(){let $=V.execPath,w=V.env.RPX_WORKER_BIN;if(w)return[$,w,"daemon:start"];let Y=L$.basename($).toLowerCase();if((Y==="bun"||Y==="node"||Y.startsWith("bun-"))&&V.argv[1])return[$,V.argv[1],"daemon:start"];return[$,"daemon:start"]}async function IM($){bB();let{rpxDir:w,registryDir:Y,httpsPort:A,hostname:X,verbose:J}=$,U=new Map,B=(T,I)=>l1(U,T,I),W=(T)=>{U=g1(T.map((I)=>({host:I.to,path:I.path,route:B6(I)})))};W(await C$(Y,J));let j=i1(B,J),z=m1(J),G=!1,F=(T)=>Bun.serve({port:A,hostname:X,reusePort:!0,tls:RM(T),fetch(I,_){return j(I,_)},websocket:z,error(I){return N("daemon",`worker https error: ${I}`,J),new Response(`Server Error: ${I.message}`,{status:500})}}),K=F(await X6(w));async function q(){if(G)return;let T=await X6(w),I=null;for(let h=0;h<20&&!G;h++)try{I=F(T);break}catch{await new Promise((u0)=>setTimeout(u0,25))}if(!I){N("daemon","worker reloadTls: could not bind new listener; keeping current",J);return}let _=K;K=I,_.stop(!1)}let f=uY((T)=>W(T),{dir:Y,verbose:J}),E=()=>{q().catch(()=>{})};V.on("SIGHUP",E);let H,M=new Promise((T)=>{H=T});async function y(){if(G)return M;return G=!0,V.off("SIGHUP",E),f.close(),K.stop(!1),H(),M}let Q=()=>{y().then(()=>V.exit(0)).catch(()=>V.exit(0))};if(V.once("SIGTERM",Q),V.once("SIGINT",Q),J)R.success(`rpx worker (pid ${V.pid}) serving :${A}`);return{stop:y,done:M,httpsPort:typeof K.port==="number"?K.port:A,httpPort:0,pidPath:"",ensureCert:()=>Promise.resolve(!1),listSites:()=>[]}}async function VM($,w){bB();let{rpxDir:Y,registryDir:A,httpsPort:X,httpPort:J,hostname:U,verbose:B,gcIntervalMs:W,workers:j}=w,z=await W6(Y),G=[];if($.productionCerts)G=await d1($.productionCerts,B);let F=null;if(G.length===0)F=await k8($,A);let K=F?{key:F.key,cert:F.cert,ca:Array.isArray(F.ca)?F.ca.join(`
310
- `):F.ca}:null,q=!1,f=[];function E(Z){for(let Lw of f)try{Lw.kill(Z)}catch{}}async function H(Z){await A6(Y,Z,K),E("SIGHUP")}let M=$.onDemandTls,y=M?.enabled?new xY({config:M,certsDir:M.certsDir??$.productionCerts?.certsDir??L$.join(Y,"on-demand-certs"),initial:G,verbose:B,onCertAdded:(Z)=>{H(Z)}}):null;await A6(Y,y?y.sniEntries():G,K);let Q=await C$(A,B);await Yw({rpxDir:Y,verbose:B}).catch((Z)=>{N("daemon",`DNS reconcile on start failed: ${Z}`,B)}),await uw(Q,{rpxDir:Y,verbose:B,ownerPid:V.pid}).catch((Z)=>{N("daemon",`DNS setup on start failed: ${Z}`,B)}),await p1(A,B).catch(()=>{});let T=uY((Z)=>{uw(Z,{rpxDir:Y,verbose:B,ownerPid:V.pid}).catch((Lw)=>{N("daemon",`DNS sync on registry change failed: ${Lw}`,B)})},{dir:A,verbose:B}),I=setInterval(()=>{p1(A,B).catch(()=>{})},W);I.unref?.();let _=null;if(J>0)_=Bun.serve({port:J,hostname:U,fetch(Z){return j6(Z,y)},error(){return new Response("Bad Request",{status:400})}});let h=10,u0=60000,iw=30000,yw=0,mw=Date.now();function Xw(){if(q)return;let Z={...V.env,RPX_DAEMON_WORKER:"1",RPX_WORKERS:"1",RPX_WORKER_RPXDIR:Y,RPX_WORKER_REGISTRYDIR:A,RPX_WORKER_HTTPSPORT:String(X),RPX_WORKER_HOSTNAME:U,RPX_WORKER_VERBOSE:B?"1":"0"},Lw=Bun.spawn(MM(),{env:Z,stdout:"inherit",stderr:"inherit",stdin:"ignore",onExit(p8,lw){if(q)return;let I$=f.indexOf(p8);if(I$!==-1)f.splice(I$,1);let $Y=Date.now();if($Y-mw>u0)mw=$Y,yw=0;if(yw++,yw>h){R.error(`rpx: worker keeps exiting (code ${lw}); giving up after ${h} restarts in ${Math.round(u0/1000)}s`);return}let dw=Math.min(iw,100*2**Math.min(yw,8));N("daemon",`worker exited (code ${lw}); respawning in ${dw}ms (restart ${yw}/${h})`,B),setTimeout(Xw,dw).unref?.()}});f.push(Lw)}for(let Z=0;Z<j;Z++)Xw();if(B)R.success(`rpx coordinator listening on https://${U}:${X} via ${j} worker(s)${_?` (http→https on :${J})`:""}`),R.info(`pid file: ${z}`);let Cw,Qw=new Promise((Z)=>{Cw=Z});async function gw(){if(q)return Qw;if(q=!0,clearInterval(I),T.close(),_?.stop(!1),E("SIGTERM"),await Promise.race([Promise.all(f.map((Z)=>Z.exited)),new Promise((Z)=>setTimeout(Z,3000))]),E("SIGKILL"),await Rw({rpxDir:Y,verbose:B}).catch((Z)=>{N("daemon",`DNS teardown failed: ${Z}`,B)}),await o1(Y),await P0.unlink(uB(Y)).catch(()=>{}),B)R.info("rpx coordinator stopped");return Cw(),Qw}let S$=(Z)=>{N("daemon",`coordinator received ${Z}, shutting down`,B),gw().catch(()=>{})};return V.once("SIGINT",S$),V.once("SIGTERM",S$),{stop:gw,done:Qw,httpsPort:X,httpPort:J,pidPath:z,ensureCert:(Z)=>y?y.ensureCert(Z):Promise.resolve(!1),listSites:()=>[]}}function yM(){let $=V.execPath,w=L$.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&V.argv[1])return[$,V.argv[1],"daemon:start"];return[$,"daemon:start"]}async function G6($={}){let w=$.rpxDir??w$(),Y=$.verbose??!1;await Yw({rpxDir:w,verbose:Y}).catch((z)=>{N("daemon",`DNS reconcile before ensureDaemonRunning: ${z}`,Y)});let A=await Iw(w);if(A!==null&&r0(A))return N("daemon",`ensureDaemonRunning: already running pid=${A}`,Y),{pid:A,spawned:!1};if(A!==null)N("daemon",`ensureDaemonRunning: clearing stale pid=${A}`,Y),await o1(w);await P0.mkdir(w,{recursive:!0});let X=$.spawnCommand??yM();if(X.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");N("daemon",`spawning daemon: ${X.join(" ")}`,Y);let J=J6(X[0],X.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??V.cwd(),env:$.spawnEnv?{...V.env,...$.spawnEnv}:V.env});J.unref();let U=null;J.once("error",(z)=>{U=z});let B=$.startupTimeoutMs??5000,W=$.pollIntervalMs??50,j=Date.now()+B;while(Date.now()<j){if(U)throw U;let z=await Iw(w);if(z!==null&&r0(z))return N("daemon",`daemon registered with pid=${z}`,Y),{pid:z,spawned:!0};await new Promise((G)=>setTimeout(G,W))}if(U)throw U;throw Error(`rpx daemon failed to start within ${B}ms (rpxDir=${w})`)}async function F6($={}){let w=$.rpxDir??w$(),Y=$.verbose??!1,A=$.timeoutMs??5000,X=$.pollIntervalMs??50,J=$.forceAfterTimeout??!0,U=await Iw(w);if(U===null||!r0(U)){if(U!==null)await o1(w);return await Yw({rpxDir:w,verbose:Y}).catch(()=>{}),{stopped:!1,pid:U,forced:!1}}try{V.kill(U,"SIGTERM")}catch(W){if(W.code==="ESRCH")return await o1(w),{stopped:!1,pid:U,forced:!1};throw W}let B=Date.now()+A;while(Date.now()<B){if(!r0(U))return N("daemon",`daemon pid=${U} stopped cleanly`,Y),{stopped:!0,pid:U,forced:!1};await new Promise((W)=>setTimeout(W,X))}if(!J)throw Error(`rpx daemon (pid=${U}) did not exit within ${A}ms`);N("daemon",`daemon pid=${U} did not exit, escalating to SIGKILL`,Y);try{V.kill(U,"SIGKILL")}catch(W){if(W.code!=="ESRCH")throw W}return await o1(w),await Rw({rpxDir:w,verbose:Y}).catch((W)=>{N("daemon",`DNS teardown after SIGKILL: ${W}`,Y)}),{stopped:!0,pid:U,forced:!0}}async function K6($={}){let w=$.rpxDir??w$();if(await D8(w))return;await Yw({rpxDir:w,verbose:$.verbose})}u$();X0();import{spawn as CM}from"node:child_process";import*as x8 from"node:process";class N6{processes=new Map;isShuttingDown=!1;async startProcess($,w,Y){if(this.processes.has($)){N("start",`Process ${$} is already running`,Y);return}let[A,...X]=w.command.split(" "),J=w.cwd||x8.cwd();N("start",`Starting process ${$}:`,Y),N("start",` Command: ${A} ${X.join(" ")}`,Y),N("start",` Working directory: ${J}`,Y),N("start",` Environment variables: ${R$(w.env)}`,Y);let U=CM(A,X,{cwd:J,env:{...x8.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:J,process:U,env:w.env}),new Promise((B,W)=>{if(U.on("error",(j)=>{if(!this.isShuttingDown)N("start",`Process ${$} failed to start: ${j}`,Y),this.processes.delete($),W(j)}),U.on("exit",(j)=>{if(!this.isShuttingDown&&j!==null&&j!==0)N("start",`Process ${$} exited with code ${j}; leaving the proxy running`,Y),this.processes.delete($),W(Error(`Process ${$} exited with code ${j}`))}),Y)U.stdout?.on("data",(j)=>{N("process",`[${$}] ${j.toString().trim()}`,!0)}),U.stderr?.on("data",(j)=>{N("process",`[${$}] ERR: ${j.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&U.killed)this.processes.delete($),W(Error(`Process ${$} was killed during startup`));else N("start",`Process ${$} started successfully`,Y),B()},1000)})}async stopProcess($,w){let Y=this.processes.get($);if(!Y?.process){N("start",`No process found for ${$}`,w);return}return N("start",`Stopping process ${$}`,w),new Promise((A)=>{if(!Y.process){A();return}Y.process.once("exit",()=>{this.processes.delete($),N("start",`Process ${$} stopped`,w),A()});try{Y.process.kill("SIGTERM"),setTimeout(()=>{if(Y.process){N("start",`Force killing process ${$}`,w);try{Y.process.kill("SIGKILL")}catch(X){}}},3000)}catch(X){N("start",`Error stopping process ${$}: ${X}`,w),this.processes.delete($),A()}})}async stopAll($){if(this.isShuttingDown){N("start","Already shutting down, skipping duplicate stopAll call",$);return}this.isShuttingDown=!0,N("start","Stopping all processes",$);let w=Array.from(this.processes.keys()).map((Y)=>this.stopProcess(Y,$).catch((A)=>{R.error(`Failed to stop process ${Y}:`,A)}));await Promise.allSettled(w),this.processes.clear(),this.isShuttingDown=!1}isRunning($){let w=this.processes.get($);return!!w?.process&&!w.process.killed}}var P8=new N6;X0();import*as p0 from"node:fs/promises";import{homedir as QM}from"node:os";import*as cB from"node:path";import*as vB from"node:process";var LM=/^[a-zA-Z0-9._-]+$/;function cw(){return cB.join(QM(),".stacks","rpx","registry.d")}function e1($){return typeof $==="string"&&$.length>0&&$.length<=128&&LM.test($)}function iB($,w){if(!e1(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return cB.join($,`${w}.json`)}function f6($){if(!$||typeof $!=="object")return!1;let w=$,Y=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0,A=typeof w.from==="string"&&w.from.length>0,X=typeof w.static==="string"||!!w.static&&typeof w.static==="object"&&typeof w.static.dir==="string",J=w.path===void 0||typeof w.path==="string";return typeof w.id==="string"&&e1(w.id)&&(A||X)&&typeof w.to==="string"&&w.to.length>0&&J&&Y&&typeof w.createdAt==="string"}async function OM($){await p0.mkdir($,{recursive:!0})}async function q6($,w=cw(),Y){if(!f6($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await OM(w);let A=iB(w,$.id),X=`${A}.tmp.${vB.pid}.${Date.now()}`,J=JSON.stringify($,null,2);try{await p0.writeFile(X,J,{encoding:"utf8",mode:420}),await p0.rename(X,A),N("registry",`wrote entry ${$.id} → ${A}`,Y)}catch(U){throw await p0.unlink(X).catch(()=>{}),U}}async function E6($,w=cw(),Y){let A=iB(w,$);try{await p0.unlink(A),N("registry",`removed entry ${$}`,Y)}catch(X){if(X.code!=="ENOENT")throw X}}async function mB($,w=cw(),Y){let A=iB(w,$);try{let X=await p0.readFile(A,"utf8"),J=JSON.parse(X);if(!f6(J))return N("registry",`entry ${$} failed validation, removing`,Y),await p0.unlink(A).catch(()=>{}),null;return J}catch(X){if(X.code==="ENOENT")return null;if(X instanceof SyntaxError)return N("registry",`entry ${$} has invalid JSON, removing`,Y),await p0.unlink(A).catch(()=>{}),null;throw X}}async function gB($=cw(),w){let Y;try{Y=await p0.readdir($)}catch(X){if(X.code==="ENOENT")return[];throw X}let A=[];for(let X of Y){if(!X.endsWith(".json"))continue;let J=X.slice(0,-5);if(!e1(J))continue;let U=await mB(J,$,w);if(U)A.push(U)}return A}u$();import{execSync as bM}from"node:child_process";import*as d8 from"node:http";import*as _6 from"node:net";import*as J0 from"node:process";var b8=($,w)=>(Y)=>`\x1B[${$}m${Y}\x1B[${w}m`,O$={bold:b8(1,22),dim:b8(2,22),green:b8(32,39),cyan:b8(36,39)};FW();QB();u$();r1();X0();import*as H6 from"node:fs";import*as T6 from"node:path";import*as _$ from"node:process";function _M($,w){let A=(w&&w!=="/"?`${$}${w}`:$).replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128);return A.length>0?A:"rpx"}async function lB($){if($.proxies.length===0)throw Error("runViaDaemon: no proxies provided");let w=$.verbose??!1,Y=$.registryDir,A=new Set,X=$.proxies.map((F)=>{let K=F.id??_M(F.to,F.path);if(!PY(K))throw Error(`invalid registry id "${K}" derived from to="${F.to}"`);if(A.has(K))throw Error(`duplicate registry id "${K}" — set an explicit \`id\` on one of the proxies`);return A.add(K),{...F,id:K}}),J=new Date().toISOString();for(let F of X)await L8({id:F.id,from:F.from,to:F.to,path:F.path,pid:$.persistent?void 0:_$.pid,cwd:_$.cwd(),createdAt:J,cleanUrls:F.cleanUrls,changeOrigin:F.changeOrigin,pathRewrites:F.pathRewrites,static:F.static},Y,w);let U=await c5({rpxDir:$.rpxDir,verbose:w,spawnCommand:$.spawnCommand,startupTimeoutMs:$.startupTimeoutMs,spawnEnv:$.spawnEnv});for(let F of X){let K=F.static?`static ${typeof F.static==="string"?F.static:F.static.dir}`:F.from;R.success(`https://${F.to} → ${K}`)}if(R.info(`(via rpx daemon pid=${U.pid}; \`rpx daemon:status\` to inspect)`),$.detached)return;let B=!1,W=Y??Q$(),j=X.map((F)=>F.id),z=async()=>{if(B)return;B=!0;for(let F of j)await bY(F,Y,w).catch((K)=>{N("runner",`removeEntry(${F}) failed: ${K}`,w)})},G=(F)=>{N("runner",`received ${F}, unregistering ${j.length} entries`,w),z().finally(()=>_$.exit(0))};_$.once("SIGINT",G),_$.once("SIGTERM",G),_$.once("exit",()=>{if(B)return;for(let F of j)try{H6.unlinkSync(T6.join(W,`${F}.json`))}catch{}}),await new Promise(()=>{})}X0();import{exec as SM}from"node:child_process";import vw from"node:fs";import M6 from"node:os";import nB from"node:path";import*as lY from"node:process";import{promisify as hM}from"node:util";var gY=hM(SM);function R6($){let w=$.trim().toLowerCase();return w==="localhost"||w.endsWith(".localhost")||w.endsWith(".localhost.")}var G$=lY.platform==="win32"?nB.join(lY.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",dB=!1;async function u8($){if(lY.platform==="win32")throw Error("Administrator privileges required on Windows");if(z8()){let{stdout:A}=await gY($);return A}let w=xw(),Y=$.replace(/'/g,"'\\''");try{if(w){let{stdout:A}=await gY(`echo '${w}' | sudo -S sh -c '${Y}' 2>/dev/null`);return dB=!0,A}if(dB)try{let{stdout:A}=await gY(`sudo -n sh -c '${Y}'`);return A}catch(A){N("hosts","Cached sudo privileges expired, requesting again",!0)}try{let{stdout:A}=await gY(`sudo -n sh -c '${Y}'`);return dB=!0,A}catch{throw Error("sudo required but no cached credentials (set SUDO_PASSWORD in .env or run sudo -v)")}}catch(A){throw Error(`Failed to execute sudo command: ${A.message}`)}}async function dY($,w){let Y=$.filter((X)=>!R6(X)),A=$.filter((X)=>R6(X));if(A.length>0)N("hosts",`Skipping /etc/hosts for loopback dev names: ${A.join(", ")}`,w);if(Y.length===0)return;N("hosts",`Adding hosts: ${Y.join(", ")}`,w),N("hosts",`Using hosts file at: ${G$}`,w);try{let X;try{X=await vw.promises.readFile(G$,"utf-8")}catch{N("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{X=await u8(`cat "${G$}"`)}catch(W){throw console.log(" Could not read hosts file — skipping hosts setup"),N("hosts",`sudo read also failed: ${W}`,w),Error(`Cannot read hosts file: ${W}`)}}let J=Y.filter((W)=>{let j=`127.0.0.1 ${W}`,z=`::1 ${W}`;return!X.includes(j)&&!X.includes(z)});if(J.length===0){N("hosts","All hosts already exist in hosts file",w);return}let U=J.map((W)=>`
307
+ `)),this._prevFrame=$;return}this.output.write(GJ.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function eK($,w){if($===void 0)return 0;if(w.length===0)return 0;let A=w.findIndex((X)=>X.value===$);return A!==-1?A:0}function $7($,w){return(w.label??String(w.value)).toLowerCase().includes($.toLowerCase())}function w7($,w){if(!w)return;if($)return w;return w[0]}class Y7 extends TJ{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#Y="";#A;#w;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return AA.inverse(AA.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let $=this.userInput.slice(0,this._cursor),[w,...Y]=this.userInput.slice(this._cursor);return`${$}${AA.inverse(w)}${Y.join("")}`}get options(){if(typeof this.#w==="function")return this.#w();return this.#w}constructor($){super($);this.#w=$.options;let w=this.options;this.filteredOptions=[...w],this.multiple=$.multiple===!0,this.#A=$.filter??$7;let Y;if($.initialValue&&Array.isArray($.initialValue))if(this.multiple)Y=$.initialValue;else Y=$.initialValue.slice(0,1);else if(!this.multiple&&this.options.length>0)Y=[this.options[0].value];if(Y)for(let A of Y){let X=w.findIndex((J)=>J.value===A);if(X!==-1)this.toggleSelected(A),this.#$=X}this.focusedValue=this.options[this.#$]?.value,this.on("key",(A,X)=>this.#X(A,X)),this.on("userInput",(A)=>this.#J(A))}_isActionKey($,w){return $==="\t"||this.multiple&&this.isNavigating&&w.name==="space"&&$!==void 0&&$!==""}#X($,w){let Y=w.name==="up",A=w.name==="down",X=w.name==="return";if(Y||A){if(this.#$=Math.max(0,Math.min(this.#$+(Y?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)this.selectedValues=[this.focusedValue];this.isNavigating=!0}else if(X)this.value=w7(this.multiple,this.selectedValues);else if(this.multiple)if(this.focusedValue!==void 0&&(w.name==="tab"||this.isNavigating&&w.name==="space"))this.toggleSelected(this.focusedValue);else this.isNavigating=!1;else{if(this.focusedValue)this.selectedValues=[this.focusedValue];this.isNavigating=!1}}deselectAll(){this.selectedValues=[]}toggleSelected($){if(this.filteredOptions.length===0)return;if(this.multiple)if(this.selectedValues.includes($))this.selectedValues=this.selectedValues.filter((w)=>w!==$);else this.selectedValues=[...this.selectedValues,$];else this.selectedValues=[$]}#J($){if($!==this.#Y){this.#Y=$;let w=this.options;if($)this.filteredOptions=w.filter((Y)=>this.#A($,Y));else this.filteredOptions=[...w];if(this.#$=eK(this.focusedValue,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)if(this.focusedValue!==void 0)this.toggleSelected(this.focusedValue);else this.deselectAll()}}}class A7 extends TJ{options;cursor=0;#$;getGroupItems($){return this.options.filter((w)=>w.group===$)}isGroupSelected($){let w=this.getGroupItems($),Y=this.value;if(Y===void 0)return!1;return w.every((A)=>Y.includes(A.value))}toggleValue(){let $=this.options[this.cursor];if(this.value===void 0)this.value=[];if($.group===!0){let w=String($.value),Y=this.getGroupItems(w);if(this.isGroupSelected(w))this.value=this.value.filter((A)=>Y.findIndex((X)=>X.value===A)===-1);else this.value=[...this.value,...Y.map((A)=>A.value)];this.value=Array.from(new Set(this.value))}else{let w=this.value.includes($.value);this.value=w?this.value.filter((Y)=>Y!==$.value):[...this.value,$.value]}}constructor($){super($,!1);let{options:w}=$;this.#$=$.selectableGroups!==!1,this.options=Object.entries(w).flatMap(([Y,A])=>[{value:Y,group:!0,label:Y},...A.map((X)=>({...X,group:Y}))]),this.value=[...$.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:Y})=>Y===$.cursorAt),this.#$?0:1),this.on("cursor",(Y)=>{switch(Y){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let A=this.options[this.cursor]?.group===!0;if(!this.#$&&A)this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let A=this.options[this.cursor]?.group===!0;if(!this.#$&&A)this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}case"space":this.toggleValue();break}})}}var X7=KK();var e=($,w)=>X7?$:w,b4=e("◆","*"),u4=e("■","x"),v4=e("▲","x"),c4=e("◇","o"),i4=e("┌","T"),J7=e("│","|"),m4=e("└","—"),g4=e("●",">"),d4=e("○"," "),l4=e("◻","[•]"),n4=e("◼","[+]"),p4=e("◻","[ ]"),r4=e("▪","•"),t4=e("─","-"),a4=e("╮","+"),s4=e("├","+"),o4=e("╯","+"),e4=e("●","•"),$I=e("◆","*"),wI=e("▲","!"),YI=e("■","x");var AI={light:e("─","-"),heavy:e("━","="),block:e("█","#")};function U7(){return`${AA.gray(J7)} `}var XI=U7();WU();import{homedir as BU}from"node:os";import{join as jU,resolve as qN}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",t9={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:jU(BU(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:jU(BU(),".stacks","ssl","stacks.localhost.crt"),keyPath:jU(BU(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0},zU=null;async function a9(){if(!zU)zU=await UU({name:"rpx",cwd:qN(__dirname,".."),defaultConfig:t9});return zU}var W1=t9;import{existsSync as EN,readdirSync as TN,readFileSync as HN,statSync as fN}from"node:fs";import{homedir as o9}from"node:os";import{isAbsolute as RN,join as j1}from"node:path";var e9=["~/Code"],$z=["localhost","test"],MN=1800000,GU={dirExists:($)=>{try{return fN($).isDirectory()}catch{return!1}},fileExists:($)=>{try{return EN($)}catch{return!1}},readText:($)=>{try{return HN($,"utf8")}catch{return null}}};function KU($,w){if($==="~")return w;if($.startsWith("~/"))return j1(w,$.slice(2));return $}function IN($){let w=$.indexOf(":");return(w===-1?$:$.slice(0,w)).toLowerCase()}function dA($){return $.replace(/[^a-z0-9._-]/gi,"-").replace(/^[-.]+|[-.]+$/g,"")||"site"}function VN($,w){for(let Y of w){let A=`.${Y}`;if($.endsWith(A)){let X=$.slice(0,-A.length);if(X.length>0&&!X.includes(".")&&/^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i.test(X))return X}}return null}function CN($,w){let Y=w.readText(j1($,"rpx.site.json"));if(Y)try{let X=JSON.parse(Y);if(X&&typeof X==="object")return X}catch{}let A=w.readText(j1($,"package.json"));if(A)try{let X=JSON.parse(A);if(X.rpx&&typeof X.rpx==="object")return X.rpx}catch{}return null}function QN($){let w=$.selfRegisters??!1;return{command:$.command,env:$.env,urlEnv:$.urlEnv,selfRegisters:w,routes:$.routes??(w?void 0:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}])}}function yN($,w){let Y=CN($,w);if(Y?.command)return QN(Y);let A=w.fileExists(j1($,"buddy")),X=w.readText(j1($,"package.json")),J=null;if(X)try{J=JSON.parse(X)}catch{J=null}let U={...J?.dependencies??{},...J?.devDependencies??{}};if(A||Object.keys(U).some((W)=>W==="stacks"||W.startsWith("@stacksjs/")))return{command:A?"./buddy dev":"bun run dev",env:{STACKS_PROXY_MANAGED:"1"},urlEnv:["APP_URL"],routes:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0},{path:"/api",portEnv:"PORT_API",defaultPort:3008,stripPrefix:!1,readyGate:!1},{path:"/docs",portEnv:"PORT_DOCS",defaultPort:3006,stripPrefix:!0,readyGate:!1}]};if(J?.scripts?.dev)return{command:"bun run dev",routes:[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}]};return null}function LN($,w={}){let Y={dirExists:w.dirExists??GU.dirExists,fileExists:w.fileExists??GU.fileExists,readText:w.readText??GU.readText},A=w.detect??yN,X=w.homeDir??o9(),J=$.tlds??$z,U=($.roots??e9).map((K)=>KU(K,X)),B=$.idleTimeoutMs??MN,W=new Map;for(let K of $.sites??[])W.set(K.to,K);let j=(K)=>K.idleTimeoutMs??B;function z(K){let F=gA(W,K);if(!F)return null;let T=RN(F.dir)?F.dir:KU(F.dir,X),q=F.selfRegisters??!1,E=F.routes??[];if(!q&&E.length===0)E=A(T,Y)?.routes??[{path:"/",portEnv:"PORT",defaultPort:3000,readyGate:!0}];let H=s9({...F.env??{}},void 0,K);return{host:K,id:dA(K),dir:T,command:F.command,env:H,routes:E,selfRegisters:q,idleTimeoutMs:j(F),source:"config"}}function G(K){let F=VN(K,J);if(!F)return null;for(let T of U){let q=j1(T,F);if(!Y.dirExists(q))continue;let E=A(q,Y);if(!E)continue;let H=E.selfRegisters??!1;return{host:K,id:dA(K),dir:q,command:E.command,env:s9({...E.env??{}},E.urlEnv,K),routes:H?[]:E.routes??[],selfRegisters:H,idleTimeoutMs:B,source:"discovered"}}return null}return{resolve(K){let F=IN(K);if(!F)return null;return z(F)??G(F)}}}function ON($){try{return TN($,{withFileTypes:!0}).filter((w)=>w.isDirectory()).map((w)=>w.name)}catch{return[]}}function wz($,w={}){let Y=w.homeDir??o9(),A=$.tlds??$z,X=($.roots??e9).map((G)=>KU(G,Y)),J=w.readdir??ON,U=LN($,w),B=[],W=new Set,j=(G)=>{if(G&&!W.has(G.host))W.add(G.host),B.push(G)};for(let G of $.sites??[])if(!G.to.includes("*"))j(U.resolve(G.to));let z=A[0]??"localhost";for(let G of X)for(let K of J(G))j(U.resolve(`${K}.${z}`));return B}function s9($,w,Y){if(!w)return $;let A=`https://${Y}`;for(let X of w)if($[X]===void 0)$[X]=A;return $}i$();V8();L8();O8();vY();S8();QB();OB();DB();bY();DY();e1();wY();X0();import{spawn as M6}from"node:child_process";import*as b0 from"node:fs/promises";import{homedir as I6}from"node:os";import*as O$ from"node:path";import*as C from"node:process";var bM=5000;function w$(){return O$.join(I6(),".stacks","rpx")}function yw($=w$()){return O$.join($,"daemon.pid")}async function Qw($=w$()){try{let w=await b0.readFile(yw($),"utf8"),Y=Number.parseInt(w.trim(),10);if(!Number.isFinite(Y)||Y<=0)return null;return Y}catch(w){if(w.code==="ENOENT")return null;throw w}}async function d8($=w$()){let w=await Qw($);return w!==null&&r0(w)}async function V6($=w$()){await b0.mkdir($,{recursive:!0});let w=yw($);while(!0){try{let A=await b0.open(w,"wx");try{await A.write(`${C.pid}
308
+ `)}finally{await A.close()}return w}catch(A){if(A.code!=="EEXIST")throw A}let Y=await Qw($);if(Y!==null&&r0(Y))throw Error(`rpx daemon already running (pid=${Y})`);await b0.unlink(w).catch(()=>{})}}async function AY($=w$()){await b0.unlink(yw($)).catch(()=>{})}var m8=new Map;function g8($){for(let[w,Y]of m8)if(!$.has(w))d1(Y),m8.delete(w)}function C6($){let w=$.cleanUrls??!1,Y=Q$($.path),A=l1($.auth);if($.static)return{static:PY($.static,w),cleanUrls:w,basePath:Y,auth:A};let X=$.from??"localhost:1",J=Rw(X),U=new URL(J.startsWith("http")?J:`http://${J}`),B=m8.get($.id);if(!B)B=m1(X,$.loadBalancer),g1(B),m8.set($.id,B);return{sourceHost:U.host,upstreamPool:B,cleanUrls:w,changeOrigin:$.changeOrigin??!1,pathRewrites:$.pathRewrites,basePath:Y,auth:A}}function uM($){return $.find((Y)=>!/^api\./.test(Y)&&!/^docs\./.test(Y)&&!/^dashboard\./.test(Y))??$[0]??"rpx.localhost"}async function i8($,w,Y=[],A=!1){let X=await y$(w,$.verbose),J=[...new Set([...X.map((z)=>z.to).filter(Boolean),...Y])],U=uM(J),B=[...new Set([U,...J,"rpx.localhost"])],W=RB(J,U,$.verbose);if(typeof $.https==="object"&&typeof W.https==="object")W.https={...W.https,...$.https};let j=await Yw(W);if(j&&(A||!uX(M8,B)))N("daemon",`regenerating shared cert for host(s): ${B.join(", ")}`,$.verbose),I8(),j=null;if(!j)N("daemon","no usable cert on disk, generating one via tlsx",$.verbose),await i1({...W,forceRegenerate:!0}),j=await Yw(W);if(!j)throw Error("failed to bootstrap TLS for rpx daemon");return j}async function vM($,w,Y,A){let X=C.env.SUDO_PASSWORD,J=C.env.HOME??I6(),U=[C.execPath,...C.argv.slice(1)],B=[`HOME=${J}`,`PATH=${C.env.PATH??""}`];if(A)B.push("RPX_VERBOSE=1");for(let[T,q]of Object.entries(C.env))if(q!==void 0&&T!=="RPX_VERBOSE"&&/^(?:RPX_|STACKS_RPX_)/.test(T))B.push(`${T}=${q}`);let W=X?["-S","-p","","env",...B,...U]:["-n","env",...B,...U];N("daemon",`elevating daemon via sudo for privileged ports ${w}/${Y}`,A);let j=M6("sudo",W,{detached:!0,stdio:["pipe","ignore","ignore"]}),z=null,G=null;if(j.once("error",(T)=>{z=T}),j.once("exit",(T)=>{G=T??0}),X&&j.stdin)j.stdin.write(`${X}
309
+ `),j.stdin.end();j.unref();let K=yw($),F=Date.now()+15000;while(Date.now()<F){if(z)throw z;let T=await Qw($);if(T!==null&&r0(T)){if(A)R.success(`rpx daemon elevated to root (pid=${T}, https on :${w})`);return{httpsPort:w,httpPort:Y,pidPath:K,done:Promise.resolve(),stop:async()=>{try{C.kill(T,"SIGTERM")}catch{}},ensureCert:()=>Promise.resolve(!1),listSites:()=>[]}}if(G!==null&&G!==0)throw Error(`rpx daemon could not elevate to bind :${w} (sudo exited ${G}). Set SUDO_PASSWORD in .env or run \`sudo -v\` first.`);await new Promise((q)=>setTimeout(q,50))}throw Error(`rpx daemon failed to elevate within 15000ms (rpxDir=${$})`)}var H6=!1;function rB(){if(H6)return;H6=!0,C.on("uncaughtException",($)=>{R.error(`rpx daemon: uncaught exception (continuing): ${$?.stack??$}`)}),C.on("unhandledRejection",($)=>{R.error(`rpx daemon: unhandled rejection (continuing): ${$}`)})}function Q6($,w,Y){let A;try{A=new URL($.url)}catch{return new Response("Bad Request",{status:400})}let X=($.headers.get("host")??A.hostname).split(":")[0];if(A.pathname.startsWith("/.well-known/acme-challenge/")){if(w){let J=w.challengeStore.handlePath(A.pathname);if(J!==void 0)return new Response(J,{status:200,headers:{"content-type":"text/plain"}})}if(Y){let J=uY(Y,A.pathname);if(J!=null)return new Response(J,{status:200,headers:{"content-type":"text/plain"}})}if(w)return new Response("challenge not found",{status:404})}if(w&&!w.hasCert(X))w.ensureCert(X).catch(()=>{});return new Response(null,{status:301,headers:{Location:`https://${X}${A.pathname}${A.search}`}})}async function y6($={}){rB();let w=$.verbose??!1,Y=$.rpxDir??w$(),A=$.registryDir??O$.join(Y,"registry.d"),X=$.httpsPort??443,J=$.httpPort??80,U=$.hostname??"0.0.0.0",B=$.gcIntervalMs??bM;if(C.env.RPX_DAEMON_WORKER==="1")return mM({rpxDir:C.env.RPX_WORKER_RPXDIR??Y,registryDir:C.env.RPX_WORKER_REGISTRYDIR??A,httpsPort:Number.parseInt(C.env.RPX_WORKER_HTTPSPORT??"",10)||X,hostname:C.env.RPX_WORKER_HOSTNAME??U,verbose:C.env.RPX_WORKER_VERBOSE==="1"||w});let W=X>0&&X<1024||J>0&&J<1024,j=typeof C.getuid==="function"&&C.getuid()===0;if(C.platform!=="win32"&&W&&!j)return vM(Y,X,J,w);let z=Math.max(1,$.workers??(Number.parseInt(C.env.RPX_WORKERS??"",10)||1));if(z>1){if($.onDemandSites?.enabled)R.warn("rpx: on-demand sites are not supported in cluster mode (workers > 1); ignoring");return gM($,{rpxDir:Y,registryDir:A,httpsPort:X,httpPort:J,hostname:U,verbose:w,gcIntervalMs:B,workers:z})}let G=await V6(Y),K=new Map,F=(y,S)=>t1(K,y,S);function T(y){K=r1(y.map((V$)=>({host:V$.to,path:V$.path,route:C6(V$)}))),g8(new Set(y.map((V$)=>V$.id)));let S=Array.from(K.keys());N("daemon",`routing table now covers ${S.length} host(s): ${S.join(", ")||"<empty>"}`,w)}await o1(A,w).catch((y)=>{N("daemon",`initial gc failed: ${y}`,w)});let q=await y$(A,w);T(q),await Jw({rpxDir:Y,verbose:w}).catch((y)=>{N("daemon",`DNS reconcile on start failed: ${y}`,w)}),await iw(q,{rpxDir:Y,verbose:w,ownerPid:C.pid}).catch((y)=>{N("daemon",`DNS setup on start failed: ${y}`,w)});let E=[];if($.productionCerts){if(E=await a1($.productionCerts,w),w&&E.length>0)R.info(`SNI: serving ${E.length} real cert(s): ${E.map((y)=>y.serverName).join(", ")}`)}let H=new Set,M=null,Q;if($.onDemandSites?.enabled){if(M=new P8({resolver:LB($.onDemandSites),registryDir:A,rpxDir:Y,verbose:w,startupTimeoutMs:$.onDemandSites.startupTimeoutMs,isHostRoutable:(y)=>_8(K,y)!==void 0,onSiteActivating:(y)=>{_w(y)}}),Q=async(y)=>{let S=await M.onRequest(y);switch(S.kind){case"ready":return{retry:!0};case"starting":return xB({host:S.host,sinceMs:S.sinceMs,logTail:S.logTail});case"failed":return PB({host:S.host,error:S.error,logTail:S.logTail});case"unknown":default:return}},w)R.info("rpx: on-demand sites enabled")}let V=n1(F,w,Q),f=p1(w),I=null;if(E.length===0)I=await i8($,A);let O=$.onDemandTls,Z=O?.enabled?new iY({config:O,certsDir:O.certsDir??$.productionCerts?.certsDir??O$.join(Y,"on-demand-certs"),initial:E,verbose:w,onCertAdded:(y)=>{lw(y)}}):null;function P0(y){if(y.length>0)return y.map((S)=>({serverName:S.serverName,cert:S.cert,key:S.key}));return{key:I.key,cert:I.cert,ca:I.ca,requestCert:!1,rejectUnauthorized:!1}}function Z$(y){return Bun.serve({port:X,hostname:U,reusePort:P1(),tls:P0(y),fetch(S,V$){return V(S,V$)},websocket:f,error(S){return N("daemon",`https server error: ${S}`,w),new Response(`Server Error: ${S.message}`,{status:500})}})}let h$=(y)=>[...new Set(y.map((S)=>S.to).filter(Boolean))],dw=(y)=>{if(!I)return E;return fB([...h$(y),...H,"rpx.localhost"],I)},Ww=Z$(Z?Z.sniEntries():E.length>0?E:dw(q)),Lw=null,Ow=!1;async function lw(y){if(I$)return;if(Lw=y,Ow)return;Ow=!0;try{while(!I$&&Lw){let S=Lw;Lw=null,N("daemon",`rebuilding :443 with ${S.length} SNI cert(s)`,w),Ww.stop(!1);let V$,UJ=!1,zj=60,a6=500;for(let WJ=0;!I$&&!UJ;WJ++)try{Ww=Z$(S),UJ=!0;break}catch(s6){if(V$=s6,WJ>=zj)break;await new Promise((o6)=>setTimeout(o6,Math.min(25*2**Math.min(WJ,4),a6)))}if(!UJ)R.error(`rpx: CRITICAL — could not rebind :443 after ${zj} attempts issuing cert; HTTPS unbound until the next cert event or a gateway restart: ${V$?.message}`)}}finally{Ow=!1}}let k$=null;if(J>0)k$=Bun.serve({port:J,hostname:U,fetch(y){return Q6(y,Z,$.acmeChallengeWebroot)},error(){return new Response("Bad Request",{status:400})}});if(w)R.success(`rpx daemon listening on https://${U}:${X}${k$?` (http→https on :${J})`:""}`),R.info(`pid file: ${G}`),R.info(`registry: ${A}`);async function h(y){if(I$||E.length>0||Z||!I)return;try{I=await i8($,A,[...H]),await lw(dw(y))}catch(S){N("daemon",`TLS sync on registry change failed: ${S}`,w)}}async function _w(y){if(I$||E.length>0||Z||!I||!y)return;if(H.has(y))return;H.add(y);try{I=await i8($,A,[...H],!0);let S=await y$(A,w);await lw(dw(S))}catch(S){N("daemon",`dev cert refresh for ${y} failed: ${S}`,w)}}let XJ=dY((y)=>{T(y),h(y),iw(y,{rpxDir:Y,verbose:w,ownerPid:C.pid}).catch((S)=>{N("daemon",`DNS sync on registry change failed: ${S}`,w)})},{dir:A,verbose:w}),nw=setInterval(()=>{o1(A,w).then((y)=>{if(y>0)N("daemon",`gc reaped ${y} stale entries`,w)}).catch((y)=>{N("daemon",`periodic gc failed: ${y}`,w)})},B);if(typeof nw.unref==="function")nw.unref();let I$=!1,JY,pw=new Promise((y)=>{JY=y});async function JJ(){if(I$)return pw;if(I$=!0,clearInterval(nw),XJ.close(),await M?.stopAll().catch((y)=>{N("daemon",`site supervisor stopAll failed: ${y}`,w)}),Ww.stop(!1),k$?.stop(!1),await Vw({rpxDir:Y,verbose:w}).catch((y)=>{N("daemon",`DNS teardown failed: ${y}`,w)}),g8(new Set),await AY(Y),w)R.info("rpx daemon stopped");return JY(),pw}let jj=(y)=>{N("daemon",`received ${y}, shutting down`,w),JJ().catch(()=>{})};return C.once("SIGINT",jj),C.once("SIGTERM",jj),{stop:JJ,done:pw,httpsPort:typeof Ww.port==="number"?Ww.port:X,httpPort:k$&&typeof k$.port==="number"?k$.port:J,pidPath:G,ensureCert:(y)=>Z?Z.ensureCert(y):Promise.resolve(!1),listSites:()=>M?.list()??[]}}function tB($){return O$.join($,"cluster-sni.json")}async function f6($,w,Y){let A=tB($),X=`${A}.${C.pid}.tmp`;await b0.writeFile(X,JSON.stringify({sni:w,dev:Y}),"utf8"),await b0.rename(X,A)}async function R6($){try{return JSON.parse(await b0.readFile(tB($),"utf8"))}catch{return{sni:[],dev:null}}}function cM($){if($.sni.length>0)return $.sni.map((w)=>({serverName:w.serverName,cert:w.cert,key:w.key}));if($.dev)return{key:$.dev.key,cert:$.dev.cert,ca:$.dev.ca,requestCert:!1,rejectUnauthorized:!1};return}function iM(){let $=C.execPath,w=C.env.RPX_WORKER_BIN;if(w)return[$,w,"daemon:start"];let Y=O$.basename($).toLowerCase();if((Y==="bun"||Y==="node"||Y.startsWith("bun-"))&&C.argv[1])return[$,C.argv[1],"daemon:start"];return[$,"daemon:start"]}async function mM($){rB();let{rpxDir:w,registryDir:Y,httpsPort:A,hostname:X,verbose:J}=$,U=new Map,B=(f,I)=>t1(U,f,I),W=(f)=>{U=r1(f.map((I)=>({host:I.to,path:I.path,route:C6(I)}))),g8(new Set(f.map((I)=>I.id)))};W(await y$(Y,J));let j=n1(B,J),z=p1(J),G=!1,K=(f)=>Bun.serve({port:A,hostname:X,reusePort:!0,tls:cM(f),fetch(I,O){return j(I,O)},websocket:z,error(I){return N("daemon",`worker https error: ${I}`,J),new Response(`Server Error: ${I.message}`,{status:500})}}),F=K(await R6(w));async function T(){if(G)return;let f=await R6(w),I=null;for(let Z=0;Z<20&&!G;Z++)try{I=K(f);break}catch{await new Promise((P0)=>setTimeout(P0,25))}if(!I){N("daemon","worker reloadTls: could not bind new listener; keeping current",J);return}let O=F;F=I,O.stop(!1)}let q=dY((f)=>W(f),{dir:Y,verbose:J}),E=()=>{T().catch(()=>{})};C.on("SIGHUP",E);let H,M=new Promise((f)=>{H=f});async function Q(){if(G)return M;return G=!0,C.off("SIGHUP",E),q.close(),F.stop(!1),g8(new Set),H(),M}let V=()=>{Q().then(()=>C.exit(0)).catch(()=>C.exit(0))};if(C.once("SIGTERM",V),C.once("SIGINT",V),J)R.success(`rpx worker (pid ${C.pid}) serving :${A}`);return{stop:Q,done:M,httpsPort:typeof F.port==="number"?F.port:A,httpPort:0,pidPath:"",ensureCert:()=>Promise.resolve(!1),listSites:()=>[]}}async function gM($,w){rB();let{rpxDir:Y,registryDir:A,httpsPort:X,httpPort:J,hostname:U,verbose:B,gcIntervalMs:W,workers:j}=w,z=await V6(Y),G=[];if($.productionCerts)G=await a1($.productionCerts,B);let K=null;if(G.length===0)K=await i8($,A);let F=K?{key:K.key,cert:K.cert,ca:Array.isArray(K.ca)?K.ca.join(`
310
+ `):K.ca}:null,T=!1,q=[];function E(h){for(let _w of q)try{_w.kill(h)}catch{}}async function H(h){await f6(Y,h,F),E("SIGHUP")}let M=$.onDemandTls,Q=M?.enabled?new iY({config:M,certsDir:M.certsDir??$.productionCerts?.certsDir??O$.join(Y,"on-demand-certs"),initial:G,verbose:B,onCertAdded:(h)=>{H(h)}}):null;await f6(Y,Q?Q.sniEntries():G,F);let V=await y$(A,B);await Jw({rpxDir:Y,verbose:B}).catch((h)=>{N("daemon",`DNS reconcile on start failed: ${h}`,B)}),await iw(V,{rpxDir:Y,verbose:B,ownerPid:C.pid}).catch((h)=>{N("daemon",`DNS setup on start failed: ${h}`,B)}),await o1(A,B).catch(()=>{});let f=dY((h)=>{iw(h,{rpxDir:Y,verbose:B,ownerPid:C.pid}).catch((_w)=>{N("daemon",`DNS sync on registry change failed: ${_w}`,B)})},{dir:A,verbose:B}),I=setInterval(()=>{o1(A,B).catch(()=>{})},W);I.unref?.();let O=null;if(J>0)O=Bun.serve({port:J,hostname:U,fetch(h){return Q6(h,Q,$.acmeChallengeWebroot)},error(){return new Response("Bad Request",{status:400})}});let Z=10,P0=60000,Z$=30000,h$=0,dw=Date.now();function Ww(){if(T)return;let h={...C.env,RPX_DAEMON_WORKER:"1",RPX_WORKERS:"1",RPX_WORKER_RPXDIR:Y,RPX_WORKER_REGISTRYDIR:A,RPX_WORKER_HTTPSPORT:String(X),RPX_WORKER_HOSTNAME:U,RPX_WORKER_VERBOSE:B?"1":"0"},_w=Bun.spawn(iM(),{env:h,stdout:"inherit",stderr:"inherit",stdin:"ignore",onExit(XJ,nw){if(T)return;let I$=q.indexOf(XJ);if(I$!==-1)q.splice(I$,1);let JY=Date.now();if(JY-dw>P0)dw=JY,h$=0;if(h$++,h$>Z){R.error(`rpx: worker keeps exiting (code ${nw}); giving up after ${Z} restarts in ${Math.round(P0/1000)}s`);return}let pw=Math.min(Z$,100*2**Math.min(h$,8));N("daemon",`worker exited (code ${nw}); respawning in ${pw}ms (restart ${h$}/${Z})`,B),setTimeout(Ww,pw).unref?.()}});q.push(_w)}for(let h=0;h<j;h++)Ww();if(B)R.success(`rpx coordinator listening on https://${U}:${X} via ${j} worker(s)${O?` (http→https on :${J})`:""}`),R.info(`pid file: ${z}`);let Lw,Ow=new Promise((h)=>{Lw=h});async function lw(){if(T)return Ow;if(T=!0,clearInterval(I),f.close(),O?.stop(!1),E("SIGTERM"),await Promise.race([Promise.all(q.map((h)=>h.exited)),new Promise((h)=>setTimeout(h,3000))]),E("SIGKILL"),await Vw({rpxDir:Y,verbose:B}).catch((h)=>{N("daemon",`DNS teardown failed: ${h}`,B)}),await AY(Y),await b0.unlink(tB(Y)).catch(()=>{}),B)R.info("rpx coordinator stopped");return Lw(),Ow}let k$=(h)=>{N("daemon",`coordinator received ${h}, shutting down`,B),lw().catch(()=>{})};return C.once("SIGINT",k$),C.once("SIGTERM",k$),{stop:lw,done:Ow,httpsPort:X,httpPort:J,pidPath:z,ensureCert:(h)=>Q?Q.ensureCert(h):Promise.resolve(!1),listSites:()=>[]}}function dM(){let $=C.execPath,w=O$.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&C.argv[1])return[$,C.argv[1],"daemon:start"];return[$,"daemon:start"]}async function L6($={}){let w=$.rpxDir??w$(),Y=$.verbose??!1;await Jw({rpxDir:w,verbose:Y}).catch((z)=>{N("daemon",`DNS reconcile before ensureDaemonRunning: ${z}`,Y)});let A=await Qw(w);if(A!==null&&r0(A))return N("daemon",`ensureDaemonRunning: already running pid=${A}`,Y),{pid:A,spawned:!1};if(A!==null)N("daemon",`ensureDaemonRunning: clearing stale pid=${A}`,Y),await AY(w);await b0.mkdir(w,{recursive:!0});let X=$.spawnCommand??dM();if(X.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");N("daemon",`spawning daemon: ${X.join(" ")}`,Y);let J=M6(X[0],X.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??C.cwd(),env:$.spawnEnv?{...C.env,...$.spawnEnv}:C.env});J.unref();let U=null;J.once("error",(z)=>{U=z});let B=$.startupTimeoutMs??5000,W=$.pollIntervalMs??50,j=Date.now()+B;while(Date.now()<j){if(U)throw U;let z=await Qw(w);if(z!==null&&r0(z))return N("daemon",`daemon registered with pid=${z}`,Y),{pid:z,spawned:!0};await new Promise((G)=>setTimeout(G,W))}if(U)throw U;throw Error(`rpx daemon failed to start within ${B}ms (rpxDir=${w})`)}async function O6($={}){let w=$.rpxDir??w$(),Y=$.verbose??!1,A=$.timeoutMs??5000,X=$.pollIntervalMs??50,J=$.forceAfterTimeout??!0,U=await Qw(w);if(U===null||!r0(U)){if(U!==null)await AY(w);return await Jw({rpxDir:w,verbose:Y}).catch(()=>{}),{stopped:!1,pid:U,forced:!1}}try{C.kill(U,"SIGTERM")}catch(W){if(W.code==="ESRCH")return await AY(w),{stopped:!1,pid:U,forced:!1};throw W}let B=Date.now()+A;while(Date.now()<B){if(!r0(U))return N("daemon",`daemon pid=${U} stopped cleanly`,Y),{stopped:!0,pid:U,forced:!1};await new Promise((W)=>setTimeout(W,X))}if(!J)throw Error(`rpx daemon (pid=${U}) did not exit within ${A}ms`);N("daemon",`daemon pid=${U} did not exit, escalating to SIGKILL`,Y);try{C.kill(U,"SIGKILL")}catch(W){if(W.code!=="ESRCH")throw W}return await AY(w),await Vw({rpxDir:w,verbose:Y}).catch((W)=>{N("daemon",`DNS teardown after SIGKILL: ${W}`,Y)}),{stopped:!0,pid:U,forced:!0}}async function _6($={}){let w=$.rpxDir??w$();if(await d8(w))return;await Jw({rpxDir:w,verbose:$.verbose})}i$();X0();import{spawn as lM}from"node:child_process";import*as l8 from"node:process";class S6{processes=new Map;isShuttingDown=!1;async startProcess($,w,Y){if(this.processes.has($)){N("start",`Process ${$} is already running`,Y);return}let[A,...X]=w.command.split(" "),J=w.cwd||l8.cwd();N("start",`Starting process ${$}:`,Y),N("start",` Command: ${A} ${X.join(" ")}`,Y),N("start",` Working directory: ${J}`,Y),N("start",` Environment variables: ${R$(w.env)}`,Y);let U=lM(A,X,{cwd:J,env:{...l8.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:J,process:U,env:w.env}),new Promise((B,W)=>{if(U.on("error",(j)=>{if(!this.isShuttingDown)N("start",`Process ${$} failed to start: ${j}`,Y),this.processes.delete($),W(j)}),U.on("exit",(j)=>{if(!this.isShuttingDown&&j!==null&&j!==0)N("start",`Process ${$} exited with code ${j}; leaving the proxy running`,Y),this.processes.delete($),W(Error(`Process ${$} exited with code ${j}`))}),Y)U.stdout?.on("data",(j)=>{N("process",`[${$}] ${j.toString().trim()}`,!0)}),U.stderr?.on("data",(j)=>{N("process",`[${$}] ERR: ${j.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&U.killed)this.processes.delete($),W(Error(`Process ${$} was killed during startup`));else N("start",`Process ${$} started successfully`,Y),B()},1000)})}async stopProcess($,w){let Y=this.processes.get($);if(!Y?.process){N("start",`No process found for ${$}`,w);return}return N("start",`Stopping process ${$}`,w),new Promise((A)=>{if(!Y.process){A();return}Y.process.once("exit",()=>{this.processes.delete($),N("start",`Process ${$} stopped`,w),A()});try{Y.process.kill("SIGTERM"),setTimeout(()=>{if(Y.process){N("start",`Force killing process ${$}`,w);try{Y.process.kill("SIGKILL")}catch(X){}}},3000)}catch(X){N("start",`Error stopping process ${$}: ${X}`,w),this.processes.delete($),A()}})}async stopAll($){if(this.isShuttingDown){N("start","Already shutting down, skipping duplicate stopAll call",$);return}this.isShuttingDown=!0,N("start","Stopping all processes",$);let w=Array.from(this.processes.keys()).map((Y)=>this.stopProcess(Y,$).catch((A)=>{R.error(`Failed to stop process ${Y}:`,A)}));await Promise.allSettled(w),this.processes.clear(),this.isShuttingDown=!1}isRunning($){let w=this.processes.get($);return!!w?.process&&!w.process.killed}}var n8=new S6;X0();import*as p0 from"node:fs/promises";import{homedir as nM}from"node:os";import*as aB from"node:path";import*as sB from"node:process";var pM=/^[a-zA-Z0-9._-]+$/;function mw(){return aB.join(nM(),".stacks","rpx","registry.d")}function XY($){return typeof $==="string"&&$.length>0&&$.length<=128&&pM.test($)}function oB($,w){if(!XY(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return aB.join($,`${w}.json`)}function Z6($){if(!$||typeof $!=="object")return!1;let w=$,Y=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0,A=typeof w.from==="string"&&w.from.length>0||Array.isArray(w.from)&&w.from.length>0,X=typeof w.static==="string"||!!w.static&&typeof w.static==="object"&&typeof w.static.dir==="string",J=w.path===void 0||typeof w.path==="string";return typeof w.id==="string"&&XY(w.id)&&(A||X)&&typeof w.to==="string"&&w.to.length>0&&J&&Y&&typeof w.createdAt==="string"}async function rM($){await p0.mkdir($,{recursive:!0})}async function h6($,w=mw(),Y){if(!Z6($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await rM(w);let A=oB(w,$.id),X=`${A}.tmp.${sB.pid}.${Date.now()}`,J=JSON.stringify($,null,2);try{await p0.writeFile(X,J,{encoding:"utf8",mode:420}),await p0.rename(X,A),N("registry",`wrote entry ${$.id} → ${A}`,Y)}catch(U){throw await p0.unlink(X).catch(()=>{}),U}}async function k6($,w=mw(),Y){let A=oB(w,$);try{await p0.unlink(A),N("registry",`removed entry ${$}`,Y)}catch(X){if(X.code!=="ENOENT")throw X}}async function eB($,w=mw(),Y){let A=oB(w,$);try{let X=await p0.readFile(A,"utf8"),J=JSON.parse(X);if(!Z6(J))return N("registry",`entry ${$} failed validation, removing`,Y),await p0.unlink(A).catch(()=>{}),null;return J}catch(X){if(X.code==="ENOENT")return null;if(X instanceof SyntaxError)return N("registry",`entry ${$} has invalid JSON, removing`,Y),await p0.unlink(A).catch(()=>{}),null;throw X}}async function $j($=mw(),w){let Y;try{Y=await p0.readdir($)}catch(X){if(X.code==="ENOENT")return[];throw X}let A=[];for(let X of Y){if(!X.endsWith(".json"))continue;let J=X.slice(0,-5);if(!XY(J))continue;let U=await eB(J,$,w);if(U)A.push(U)}return A}i$();import{execSync as A4}from"node:child_process";import*as YJ from"node:http";import*as i6 from"node:net";import*as J0 from"node:process";var p8=($,w)=>(Y)=>`\x1B[${$}m${Y}\x1B[${w}m`,_$={bold:p8(1,22),dim:p8(2,22),green:p8(32,39),cyan:p8(36,39)};VW();bB();i$();e1();X0();import*as D6 from"node:fs";import*as x6 from"node:path";import*as S$ from"node:process";function tM($,w){let A=(w&&w!=="/"?`${$}${w}`:$).replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128);return A.length>0?A:"rpx"}async function wj($){if($.proxies.length===0)throw Error("runViaDaemon: no proxies provided");let w=$.verbose??!1,Y=$.registryDir,A=new Set,X=$.proxies.map((K)=>{let F=K.id??tM(K.to,K.path);if(!mY(F))throw Error(`invalid registry id "${F}" derived from to="${K.to}"`);if(A.has(F))throw Error(`duplicate registry id "${F}" — set an explicit \`id\` on one of the proxies`);return A.add(F),{...K,id:F}}),J=new Date().toISOString();for(let K of X)await x8({id:K.id,from:K.from,to:K.to,path:K.path,pid:$.persistent?void 0:S$.pid,cwd:S$.cwd(),createdAt:J,cleanUrls:K.cleanUrls,changeOrigin:K.changeOrigin,pathRewrites:K.pathRewrites,static:K.static,loadBalancer:K.loadBalancer},Y,w);let U=await w6({rpxDir:$.rpxDir,verbose:w,spawnCommand:$.spawnCommand,startupTimeoutMs:$.startupTimeoutMs,spawnEnv:$.spawnEnv});for(let K of X){let F=K.static?`static ${typeof K.static==="string"?K.static:K.static.dir}`:K.from;R.success(`https://${K.to} → ${F}`)}if(R.info(`(via rpx daemon pid=${U.pid}; \`rpx daemon:status\` to inspect)`),$.detached)return;let B=!1,W=Y??L$(),j=X.map((K)=>K.id),z=async()=>{if(B)return;B=!0;for(let K of j)await gY(K,Y,w).catch((F)=>{N("runner",`removeEntry(${K}) failed: ${F}`,w)})},G=(K)=>{N("runner",`received ${K}, unregistering ${j.length} entries`,w),z().finally(()=>S$.exit(0))};S$.once("SIGINT",G),S$.once("SIGTERM",G),S$.once("exit",()=>{if(B)return;for(let K of j)try{D6.unlinkSync(x6.join(W,`${K}.json`))}catch{}}),await new Promise(()=>{})}X0();import{exec as aM}from"node:child_process";import gw from"node:fs";import b6 from"node:os";import Aj from"node:path";import*as aY from"node:process";import{promisify as sM}from"node:util";var tY=sM(aM);function P6($){let w=$.trim().toLowerCase();return w==="localhost"||w.endsWith(".localhost")||w.endsWith(".localhost.")}var G$=aY.platform==="win32"?Aj.join(aY.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",Yj=!1;async function r8($){if(aY.platform==="win32")throw Error("Administrator privileges required on Windows");if(E8()){let{stdout:A}=await tY($);return A}let w=uw(),Y=$.replace(/'/g,"'\\''");try{if(w){let{stdout:A}=await tY(`echo '${w}' | sudo -S sh -c '${Y}' 2>/dev/null`);return Yj=!0,A}if(Yj)try{let{stdout:A}=await tY(`sudo -n sh -c '${Y}'`);return A}catch(A){N("hosts","Cached sudo privileges expired, requesting again",!0)}try{let{stdout:A}=await tY(`sudo -n sh -c '${Y}'`);return Yj=!0,A}catch{throw Error("sudo required but no cached credentials (set SUDO_PASSWORD in .env or run sudo -v)")}}catch(A){throw Error(`Failed to execute sudo command: ${A.message}`)}}async function sY($,w){let Y=$.filter((X)=>!P6(X)),A=$.filter((X)=>P6(X));if(A.length>0)N("hosts",`Skipping /etc/hosts for loopback dev names: ${A.join(", ")}`,w);if(Y.length===0)return;N("hosts",`Adding hosts: ${Y.join(", ")}`,w),N("hosts",`Using hosts file at: ${G$}`,w);try{let X;try{X=await gw.promises.readFile(G$,"utf-8")}catch{N("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{X=await r8(`cat "${G$}"`)}catch(W){throw console.log(" Could not read hosts file — skipping hosts setup"),N("hosts",`sudo read also failed: ${W}`,w),Error(`Cannot read hosts file: ${W}`)}}let J=Y.filter((W)=>{let j=`127.0.0.1 ${W}`,z=`::1 ${W}`;return!X.includes(j)&&!X.includes(z)});if(J.length===0){N("hosts","All hosts already exist in hosts file",w);return}let U=J.map((W)=>`
311
311
  # Added by rpx
312
312
  127.0.0.1 ${W}
313
313
  ::1 ${W}`).join(`
314
- `),B=nB.join(M6.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await vw.promises.writeFile(B,X+U,"utf8"),await u8(`cat "${B}" | tee "${G$}" > /dev/null`),console.log(` Hosts updated: ${J.join(", ")}`)}catch(W){console.log(" Could not update hosts file automatically"),console.log(" Add these entries to /etc/hosts:"),J.forEach((j)=>{console.log(` 127.0.0.1 ${j}`),console.log(` ::1 ${j}`)}),console.log(` Or run: sudo nano ${G$}`)}finally{try{await vw.promises.unlink(B)}catch{}}}catch(X){N("hosts",`Failed to manage hosts file: ${X.message}`,w)}}async function I6($,w){N("hosts",`Removing hosts: ${$.join(", ")}`,w);try{let Y;try{Y=await vw.promises.readFile(G$,"utf-8")}catch{N("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{Y=await u8(`cat "${G$}"`)}catch(W){throw N("hosts",`sudo read also failed: ${W}`,w),Error(`Cannot read hosts file: ${W}`)}}let A=Y.split(`
314
+ `),B=Aj.join(b6.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await gw.promises.writeFile(B,X+U,"utf8"),await r8(`cat "${B}" | tee "${G$}" > /dev/null`),console.log(` Hosts updated: ${J.join(", ")}`)}catch(W){console.log(" Could not update hosts file automatically"),console.log(" Add these entries to /etc/hosts:"),J.forEach((j)=>{console.log(` 127.0.0.1 ${j}`),console.log(` ::1 ${j}`)}),console.log(` Or run: sudo nano ${G$}`)}finally{try{await gw.promises.unlink(B)}catch{}}}catch(X){N("hosts",`Failed to manage hosts file: ${X.message}`,w)}}async function u6($,w){N("hosts",`Removing hosts: ${$.join(", ")}`,w);try{let Y;try{Y=await gw.promises.readFile(G$,"utf-8")}catch{N("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{Y=await r8(`cat "${G$}"`)}catch(W){throw N("hosts",`sudo read also failed: ${W}`,w),Error(`Cannot read hosts file: ${W}`)}}let A=Y.split(`
315
315
  `),X=!1,J=A.filter((W)=>{if($.some((z)=>W.includes(` ${z}`)&&(W.includes("127.0.0.1")||W.includes("::1"))))return X=!0,!1;if(W.trim()==="# Added by rpx")return X=!0,!1;return!0});if(!X){N("hosts","No matching hosts found to remove",w);return}while(J[J.length-1]?.trim()==="")J.pop();let U=`${J.join(`
316
316
  `)}
317
- `,B=nB.join(M6.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await vw.promises.writeFile(B,U,"utf8"),await u8(`cat "${B}" | tee "${G$}" > /dev/null`),N("hosts","Hosts removed successfully",w)}catch(W){N("hosts","Could not clean up hosts file automatically",w)}finally{try{await vw.promises.unlink(B)}catch(W){N("hosts",`Failed to remove temporary file: ${W}`,w)}}}catch(Y){N("hosts",`Failed to clean up hosts file: ${Y.message}`,w)}}async function nY($,w){N("hosts",`Checking hosts: ${$}`,w);let Y;try{Y=await vw.promises.readFile(G$,"utf-8")}catch(A){N("hosts",`Error reading hosts file: ${A}`,w);try{let X=xw(),J;if(X)J=`echo '${X}' | sudo -S cat "${G$}" 2>/dev/null`;else J=`sudo -n cat "${G$}" 2>/dev/null || cat "${G$}" 2>/dev/null || echo ""`;let{stdout:U}=await gY(J);Y=U}catch(X){return N("hosts",`Cannot read hosts file, assuming entries don't exist: ${X}`,w),$.map(()=>!1)}}return $.map((A)=>{let X=`127.0.0.1 ${A}`,J=`::1 ${A}`;return Y.includes(X)||Y.includes(J)})}E8();TB();u$();X0();import{spawn as ZM}from"node:child_process";import*as c8 from"node:process";class v8{processes=new Map;isShuttingDown=!1;async startProcess($,w,Y){if(this.processes.has($)){N("start",`Process ${$} is already running`,Y);return}let[A,...X]=w.command.split(" "),J=w.cwd||c8.cwd();N("start",`Starting process ${$}:`,Y),N("start",` Command: ${A} ${X.join(" ")}`,Y),N("start",` Working directory: ${J}`,Y),N("start",` Environment variables: ${R$(w.env)}`,Y);let U=ZM(A,X,{cwd:J,env:{...c8.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:J,process:U,env:w.env}),new Promise((B,W)=>{if(U.on("error",(j)=>{if(!this.isShuttingDown)N("start",`Process ${$} failed to start: ${j}`,Y),this.processes.delete($),W(j)}),U.on("exit",(j)=>{if(!this.isShuttingDown&&j!==null&&j!==0)N("start",`Process ${$} exited with code ${j}; leaving the proxy running`,Y),this.processes.delete($),W(Error(`Process ${$} exited with code ${j}`))}),Y)U.stdout?.on("data",(j)=>{N("process",`[${$}] ${j.toString().trim()}`,!0)}),U.stderr?.on("data",(j)=>{N("process",`[${$}] ERR: ${j.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&U.killed)this.processes.delete($),W(Error(`Process ${$} was killed during startup`));else N("start",`Process ${$} started successfully`,Y),B()},1000)})}async stopProcess($,w){let Y=this.processes.get($);if(!Y?.process){N("start",`No process found for ${$}`,w);return}return N("start",`Stopping process ${$}`,w),new Promise((A)=>{if(!Y.process){A();return}Y.process.once("exit",()=>{this.processes.delete($),N("start",`Process ${$} stopped`,w),A()});try{Y.process.kill("SIGTERM"),setTimeout(()=>{if(Y.process){N("start",`Force killing process ${$}`,w);try{Y.process.kill("SIGKILL")}catch(X){}}},3000)}catch(X){N("start",`Error stopping process ${$}: ${X}`,w),this.processes.delete($),A()}})}async stopAll($){if(this.isShuttingDown){N("start","Already shutting down, skipping duplicate stopAll call",$);return}this.isShuttingDown=!0,N("start","Stopping all processes",$);let w=Array.from(this.processes.keys()).map((Y)=>this.stopProcess(Y,$).catch((A)=>{R.error(`Failed to stop process ${Y}:`,A)}));await Promise.allSettled(w),this.processes.clear(),this.isShuttingDown=!1}isRunning($){let w=this.processes.get($);return!!w?.process&&!w.process.killed}}var H_=new v8;import{timingSafeEqual as kM}from"node:crypto";function DM($,w){if($==null)return!1;let Y=Buffer.from($),A=Buffer.from(w);if(Y.length!==A.length)return!1;return kM(Y,A)}function i8($){return $.toLowerCase().replace(/\.$/,"")}var xM=["/.well-known/acme-challenge/"];function PM($){let w=$.headers.get("host");if(w)return i8(w.split(":")[0]);try{return i8(new URL($.url).hostname)}catch{return""}}function V6($){let w=$.header.toLowerCase(),Y=new Set,A=[];for(let W of $.hosts){let j=i8(W);if(j.startsWith("*."))A.push(j);else Y.add(j)}let X=$.exemptPaths??xM,J=$.forbiddenMessage??`Forbidden: direct origin access is not allowed; requests must arrive via the CDN.
318
- `,U=(W)=>{let j=i8(W);return Y.has(j)||A.some((z)=>zY(j,z))},B=(W)=>{let j=PM(W);if(!U(j))return;let z="/";try{z=new URL(W.url).pathname}catch{}if(X.some((G)=>z.startsWith(G)))return;if(DM(W.headers.get(w),$.value))return;return new Response(J,{status:403,headers:{"content-type":"text/plain"}})};return B.protects=U,B}R8();import*as C6 from"node:fs";import*as Q6 from"node:path";var y6="/.well-known/acme-challenge/";function L6($,w){if(!$||!w.startsWith(y6))return null;let Y=w.slice(y6.length);if(!Y||!/^[A-Za-z0-9_-]+$/.test(Y))return null;try{return C6.readFileSync(Q6.join($,Y),"utf8")}catch{return null}}_Y();kY();I8();ZY();X0();var g8=new v8,uM="0.12.0",cM=new y8("0.0.0.0"),l8=new Set,pB=!1,m8=null,rB=null;async function n8($){if(pB)return N("cleanup","Cleanup already in progress, skipping",$?.verbose),rB||Promise.resolve();pB=!0,N("cleanup","Starting cleanup process",$?.verbose),rB=new Promise((w)=>{m8=w});try{await g8.stopAll($?.verbose),R.info("Shutting down proxy servers...");let w=[],Y=Array.from(l8).map((A)=>new Promise((X)=>{let J=A;try{if(typeof J.stop==="function")J.stop(!0),N("cleanup","Bun server stopped",$?.verbose),X();else if(typeof J.close==="function")J.close(()=>{N("cleanup","Server closed successfully",$?.verbose),X()});else X()}catch(U){N("cleanup",`Error stopping server: ${U}`,$?.verbose),X()}}));if(w.push(...Y),l8.clear(),$?.hosts&&$.domains?.length){N("cleanup","Cleaning up hosts file entries",$?.verbose),N("cleanup",`Original domains for cleanup: ${JSON.stringify($.domains)}`,$?.verbose);let A=$.domains.filter((X)=>{if(X==="test.local")return!0;return X!=="localhost"&&!X.startsWith("localhost.")&&X!=="127.0.0.1"});if(N("cleanup",`Filtered domains for cleanup: ${JSON.stringify(A)}`,$?.verbose),A.length>0)R.info("Cleaning up hosts file entries..."),w.push(I6(A,$?.verbose).then(()=>{N("cleanup",`Removed hosts entries for ${A.join(", ")}`,$?.verbose)}).catch((X)=>{N("cleanup",`Failed to remove hosts entries: ${X}`,$?.verbose),R.warn(`Failed to clean up hosts file entries for ${A.join(", ")}:`,X)}))}if($?.certs&&$.domains?.length){N("cleanup","Cleaning up SSL certificates",$?.verbose),R.info("Cleaning up SSL certificates...");let A=$.domains.map(async(X)=>{try{await B5(X,$?.verbose),N("cleanup",`Removed certificates for ${X}`,$?.verbose)}catch(J){N("cleanup",`Failed to remove certificates for ${X}: ${J}`,$?.verbose),R.warn(`Failed to clean up certificates for ${X}:`,J)}});w.push(...A)}await Promise.allSettled(w),N("cleanup","All cleanup tasks completed successfully",$?.verbose),R.success("All cleanup tasks completed successfully")}catch(w){N("cleanup",`Error during cleanup: ${w}`,$?.verbose),R.error("Error during cleanup:",w)}finally{if(m8)m8();m8=null,pB=!1;let w=$&&"vitePluginUsage"in $&&$.vitePluginUsage===!0;if(J0.env.NODE_ENV!=="test"&&J0.env.BUN_ENV!=="test"&&!w)J0.exit(0)}return rB}var tB=!1;function S6($){if(tB){N("signal",`Received second ${$} signal, forcing exit`,!0),J0.exit(1);return}tB=!0,N("signal",`Received ${$} signal, initiating cleanup`,!0),n8().catch((w)=>{N("signal",`Cleanup failed after ${$}: ${w}`,!0),J0.exit(1)}).finally(()=>{tB=!1})}J0.once("SIGINT",()=>S6("SIGINT"));J0.once("SIGTERM",()=>S6("SIGTERM"));J0.on("uncaughtException",($)=>{R.error("Uncaught exception (continuing):",$)});J0.on("unhandledRejection",($)=>{R.error("Unhandled rejection (continuing):",$)});async function pY($,w,Y,A=5){N("connection",`Testing connection to ${$}:${w} (retries left: ${A})`,Y);let X=15000,J=Date.now();if(J0.env.RPX_BYPASS_CONNECTION_TEST==="true"){N("connection",`Bypassing connection test for ${$}:${w} due to RPX_BYPASS_CONNECTION_TEST flag`,Y);return}let U=()=>new Promise((B,W)=>{let j=_6.connect({host:$,port:w,timeout:3000});j.once("connect",()=>{N("connection",`Successfully connected to ${$}:${w}`,Y),j.end(),B()}),j.once("timeout",()=>{N("connection",`Connection to ${$}:${w} timed out`,Y),j.destroy(),W(Error("Connection timed out"))}),j.once("error",(z)=>{N("connection",`Failed to connect to ${$}:${w}: ${z}`,Y),j.destroy(),W(z)})});try{await U()}catch(B){let W=B;if(Date.now()-J>X){N("connection",`Connection test timed out after ${X}ms, but continuing anyway`,Y),R.warn(`Connection test to ${$}:${w} timed out, but RPX will try to proceed anyway.`);return}if(W.code==="ECONNREFUSED"&&A>0)return N("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${A} retries left)`,Y),await new Promise((z)=>setTimeout(z,2000)),pY($,w,Y,A-1);if(A>0)try{N("connection",`Trying HTTP request to ${$}:${w}`,Y),await new Promise((z,G)=>{let F=d8.request({hostname:$,port:w,path:"/",method:"HEAD",timeout:5000},(K)=>{N("connection",`Received HTTP response with status: ${K.statusCode}`,Y),z()});F.on("error",(K)=>G(K)),F.on("timeout",()=>{F.destroy(),G(Error("HTTP request timed out"))}),F.end()}),N("connection",`HTTP request to ${$}:${w} succeeded`,Y);return}catch(z){return N("connection",`HTTP request to ${$}:${w} failed: ${z}`,Y),N("connection",`Retrying socket connection in 2 seconds... (${A} retries left)`,Y),await new Promise((G)=>setTimeout(G,2000)),pY($,w,Y,A-1)}let j=`Failed to connect to ${$}:${w} after ${5-A} attempts: ${W.message}`;N("connection",`${j}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,Y),R.warn(j),R.warn("RPX will try to continue anyway. If you're sure this is correct, you can set RPX_BYPASS_CONNECTION_TEST=true to skip this check.")}}async function h6($){N("server",`Starting server with options: ${R$($)}`,$.verbose);let w=new URL(($.from?.startsWith("http")?$.from:`http://${$.from}`)||"localhost:5173"),Y=new URL(($.to?.startsWith("http")?$.to:`http://${$.to}`)||"rpx.localhost"),A=Number.parseInt(w.port)||(w.protocol.includes("https:")?443:80),X=[Y.hostname];if(sB($)&&!Y.hostname.includes("localhost")&&!Y.hostname.includes("127.0.0.1")){N("hosts",`Checking if hosts file entry exists for: ${Y.hostname}`,$?.verbose);try{if(!(await nY(X,$.verbose))[0]){R.info(`Adding ${Y.hostname} to hosts file...`),R.info("This may require sudo/administrator privileges");try{await dY(X,$.verbose)}catch(B){if(R.error("Failed to add hosts entry:",B.message),R.warn("You can manually add this entry to your hosts file:"),R.warn(`127.0.0.1 ${Y.hostname}`),R.warn(`::1 ${Y.hostname}`),J0.platform==="win32")R.warn("On Windows:"),R.warn("1. Run notepad as administrator"),R.warn("2. Open C:\\Windows\\System32\\drivers\\etc\\hosts");else R.warn("On Unix systems:"),R.warn("sudo nano /etc/hosts")}}else N("hosts",`Host entry already exists for ${Y.hostname}`,$.verbose)}catch(U){R.error("Failed to check hosts file:",U.message)}}try{await pY(w.hostname,A,$.verbose)}catch(U){N("server",`Connection test failed: ${U}`,$.verbose),R.error(U.message),R.warn("Continuing with proxy setup despite connection test failure..."),R.info("If you need to bypass connection testing, set environment variable RPX_BYPASS_CONNECTION_TEST=true")}let J=$._cachedSSLConfig||null;if($.https)try{if($.https===!0)$.https=LY({...$,to:Y.hostname});if(J=await e$({...$,to:Y.hostname,https:$.https}),!J){if(N("ssl",`Generating new certificates for ${Y.hostname}`,$.verbose),await c1({...$,from:w.toString(),to:Y.hostname,https:$.https}),J=await e$({...$,to:Y.hostname,https:$.https}),!J)throw Error(`Failed to load SSL configuration after generating certificates for ${Y.hostname}`)}}catch(U){throw N("server",`SSL setup failed: ${U}`,$.verbose),U}N("server",`Setting up reverse proxy with SSL config for ${Y.hostname}`,$.verbose),await iM({...$,from:$.from||"localhost:5173",to:Y.hostname,fromPort:A,sourceUrl:{hostname:w.hostname,host:w.host},ssl:J})}async function vM($,w,Y,A,X,J,U,B,W,j){N("proxy",`Creating proxy server ${$} -> ${w} with cleanUrls: ${B}`,U);let z=[{host:w,route:{sourceHost:A.host,cleanUrls:B||!1,changeOrigin:W||!1,basePath:"/",auth:j}}];if(!aB({routeEntries:z,listenPort:Y,sslConfig:X,originGuard:null,verbose:U??!1}))throw Error(`Failed to start proxy server for ${w} on port ${Y}`);gM({from:$,to:w,vitePluginUsage:J,listenPort:Y,ssl:!!X,cleanUrls:B,verbose:U})}async function iM($){N("setup",`Setting up reverse proxy: ${R$($)}`,$.verbose);let{from:w,to:Y,sourceUrl:A,ssl:X,verbose:J,cleanup:U,vitePluginUsage:B,changeOrigin:W,cleanUrls:j}=$,z=80,G=443,F="0.0.0.0",K=$.portManager||cM,q=sB($);try{if(q&&Y&&!Y.includes("localhost")&&!Y.includes("127.0.0.1")){if(!(await nY([Y],J))[0]){R.warn(`The hostname ${Y} isn't in your hosts file. Adding it now...`);try{await dY([Y],J),R.success(`Added ${Y} to your hosts file.`)}catch(y){R.error(`Failed to add ${Y} to your hosts file: ${y}`),R.info(`You may need to manually add '127.0.0.1 ${Y}' to your /etc/hosts file.`)}}}else if(q&&J0.platform!=="darwin"&&Y&&Y.includes("localhost")&&!Y.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await nY([Y],J))[0]){N("hosts",`${Y} not found in hosts file, adding...`,J);try{await dY([Y],J)}catch(y){N("hosts",`Failed to add ${Y} to hosts file: ${y}`,J)}}}if(X&&!K.usedPorts.has(z)){if(!await Tw(z,F,J))N("setup","Starting HTTP redirect server",J),Z6(J),K.usedPorts.add(z);else if(N("setup","Port 80 is in use, skipping HTTP redirect",J),J)R.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let f=X?G:z,E=await Tw(f,F,J),H;if(E){if(N("setup",`Port ${f} is already in use`,J),J)R.warn(`Port ${f} is already in use. This may be another instance of rpx or another service.`);if(f===443){if(H=await K.getNextAvailablePort(3443,!0),N("setup",`Using port ${H} instead of ${f}`,J),J)R.info(`Using port ${H} instead. Access your site at https://${Y}:${H}`)}else if(H=await K.getNextAvailablePort(f+1000,!0),N("setup",`Using port ${H} instead of ${f}`,J),J)R.info(`Using port ${H} instead. Access your site at http://${Y}:${H}`)}else H=f,K.usedPorts.add(H),N("setup",`Using standard ${f===443?"HTTPS":"HTTP"} port ${f} for ${Y}`,J);await vM(w,Y,H,A,X,B,J,j,W,v1($.auth))}catch(f){N("setup",`Setup failed: ${f}`,J),R.error(`Failed to setup reverse proxy: ${f.message}`),n8({domains:[Y],hosts:typeof U==="boolean"?U:U?.hosts,certs:typeof U==="boolean"?U:U?.certs,verbose:J,vitePluginUsage:B})}}function Z6($,w=80,Y=443,A){N("redirect",`Starting HTTP redirect server on port ${w}`,$);let X=d8.createServer((J,U)=>{if(A&&J.url){let z=J.url.split("?",1)[0],G=L6(A,z);if(G!=null){N("redirect",`Serving ACME challenge ${z}`,$),U.writeHead(200,{"content-type":"text/plain"}),U.end(G);return}}let B=J.headers.host||"",W=B.includes(":")?B.slice(0,B.indexOf(":")):B,j=Y===443?W:`${W}:${Y}`;N("redirect",`Redirecting request from ${B}${J.url} to https://${j}`,$),U.writeHead(301,{Location:`https://${j}${J.url}`}),U.end()}).listen(w);l8.add(X),N("redirect","HTTP redirect server started",$)}function k6($){let w={...GW,...$};if(N("proxy",`Starting proxy with options: ${R$(w)}`,w?.verbose),w.viaDaemon){if(!w.from||!w.to){R.error("viaDaemon mode requires both `from` and `to`");return}lB({proxies:[{id:w.id,from:w.from,to:w.to,path:w.path,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}],verbose:w.verbose}).catch((W)=>{R.error(`Failed to register with rpx daemon: ${W.message}`),J0.exit(1)});return}let Y=w.to||"",A=Y.split(".").pop()?.toLowerCase()||"",X=J0.platform==="darwin"&&Y&&!Y.includes("localhost")&&!Y.includes("127.0.0.1"),J=["dev","app","page","new","day","foo"],U=["test","localhost","local","example","invalid"];if(X&&J.includes(A)&&w?.verbose)R.warn(`The .${A} TLD may not work reliably for local development`),R.info(` Google owns .${A} with HSTS preloading, which can bypass local DNS`),R.info(" Consider using a reserved TLD: .test, .localhost, or .local");if(X)Promise.resolve().then(() => (a1(),Z8)).then(({setupDevelopmentDns:W})=>{W({domains:[Y],verbose:w.verbose}).then((j)=>{if(j)Promise.resolve().then(()=>{if(w.verbose)if(U.includes(A))R.success(`DNS server started for .${A} domains`);else R.success(`DNS server started for .${A} domains (hosts file entry also added)`)});else N("dns",`Could not start DNS server - ${Y} may not resolve in browser`,w.verbose)})}).catch((W)=>{N("dns",`Failed to start DNS server: ${W}`,w.verbose)});let B={from:w.from,to:w.to,cleanUrls:w.cleanUrls,https:LY(w),cleanup:w.cleanup,vitePluginUsage:w.vitePluginUsage,changeOrigin:w.changeOrigin,verbose:w.verbose,regenerateUntrustedCerts:w.regenerateUntrustedCerts};N("proxy",`Server options: ${R$(B)}`,w.verbose),h6(B).catch((W)=>{N("proxy",`Failed to start proxy: ${W}`,w.verbose),R.error(`Failed to start proxy: ${W.message}`),n8({domains:[w.to],hosts:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.hosts,certs:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.certs,verbose:w.verbose})})}function mM($){return $?.verbose||!1}function sB($){if($?.hostsManagement===!1)return!1;let w=$?.cleanup;if(w===!1)return!1;if(w&&typeof w==="object"&&w.hosts===!1)return!1;return!0}async function D6($){let w={from:"localhost:5173",to:"rpx.localhost",https:!1,cleanup:{hosts:!0,certs:!1},vitePluginUsage:!1,verbose:!1,cleanUrls:!1,changeOrigin:!1,regenerateUntrustedCerts:!0};if($)w={...w,...$};let Y=mM(w),A=sB(w);if(N("config",`Starting with config: ${R$(w,2)}`,Y),N("config",`Is multi-proxy? ${"proxies"in w}`,Y),N("config",`Hosts management enabled? ${A}`,Y),w.viaDaemon){let I="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((_)=>({id:_.id,from:_.from,to:_.to,path:_.path,cleanUrls:_.cleanUrls??w.cleanUrls,changeOrigin:_.changeOrigin??w.changeOrigin,pathRewrites:_.pathRewrites})):[{id:w.id,from:w.from,to:w.to??"rpx.localhost",path:w.path,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}];await lB({proxies:I,verbose:Y});return}if("proxies"in w&&Array.isArray(w.proxies)){N("servers",`Found ${w.proxies.length} proxies in config`,Y);for(let T of w.proxies)if(T.start){let I=`${T.from}-${T.to}`;try{N("watch",`Starting command for ${I} with command: ${T.start.command}`,Y),R.info(`Starting command for ${I}...`),await g8.startProcess(I,T.start,Y);let _=new URL(T.from?.startsWith("http")?T.from:`http://${T.from}`),h=_.hostname||"localhost",u0=Number(_.port)||80;try{await pY(h,u0,Y),N("watch",`Dev server is ready at ${h}:${u0}`,Y)}catch(iw){N("watch",`Connection check failed, but continuing with proxy setup: ${iw}`,Y),R.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(_){throw N("watch",`Failed to start command for ${I}: ${_}`,Y),Error(`Failed to start command for ${I}: ${_}`)}}else N("watch",`No start command for proxy ${T.from} -> ${T.to}`,Y)}else if("start"in w&&w.start){N("watch","Found start command in single proxy config",Y);let T=`${w.from}-${w.to}`;try{if(w.start)N("watch",`Starting command: ${w.start.command}`,Y),await g8.startProcess(T,w.start,Y);let I=new URL(w.from?.startsWith("http")?w.from:`http://${w.from}`),_=I.hostname||"localhost",h=Number(I.port)||80;try{await pY(_,h,Y),N("watch",`Dev server is ready at ${_}:${h}`,Y)}catch(u0){N("watch",`Connection check failed, but continuing with proxy setup: ${u0}`,Y),R.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(I){throw N("watch",`Failed to run start command: ${I}`,Y),Error(`Failed to run start command: ${I}`)}}else N("watch","No start command found in config",Y);let X="proxies"in w&&Array.isArray(w.proxies)?w.proxies[0]?.to:("to"in w)?w.to:"rpx.localhost";if(J0.platform!=="win32"&&(w.https||A)){if(!xw())try{N("sudo","Pre-acquiring sudo credentials for privileged operations",Y),bM("sudo -v",{stdio:"inherit"})}catch{N("sudo","Could not pre-acquire sudo credentials",Y)}}let J=[];if(w.productionCerts){if(J=await d1(w.productionCerts,Y),J.length>0)N("ssl",`Using ${J.length} production SNI cert(s): ${J.map((T)=>T.serverName).join(", ")}`,Y)}if(w.https){let T=J.length>0?null:await e$(w);if(!T&&J.length===0){if(N("ssl",`No valid or trusted certificates found for ${X}, generating new ones`,w.verbose),await c1(w),T=await e$(w),!T)throw Error(`Failed to load SSL certificates after generation for ${X}`)}else N("ssl",`Using existing and trusted certificates for ${X}`,w.verbose);w._cachedSSLConfig=T}let U="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((T)=>({...T,https:w.https,cleanup:w.cleanup,cleanUrls:T.cleanUrls??("cleanUrls"in w?w.cleanUrls:!1),vitePluginUsage:w.vitePluginUsage,changeOrigin:T.changeOrigin??w.changeOrigin,verbose:Y,_cachedSSLConfig:w._cachedSSLConfig})):[{from:"from"in w?w.from:"localhost:5173",to:"to"in w?w.to:"rpx.localhost",cleanUrls:"cleanUrls"in w?w.cleanUrls:!1,https:w.https,cleanup:w.cleanup,vitePluginUsage:w.vitePluginUsage,start:"start"in w?w.start:void 0,changeOrigin:w.changeOrigin,auth:"auth"in w?w.auth:void 0,verbose:Y,_cachedSSLConfig:w._cachedSSLConfig}],B=U.map((T)=>T.to||"rpx.localhost"),W=J.length>0?J:w._cachedSSLConfig??null,j=B.filter((T)=>T&&!T.includes("localhost")&&!T.includes("127.0.0.1")),z=["dev","app","page","new","day","foo"],G=["test","localhost","local","example","invalid"],F=[...new Set(j.map((T)=>T.split(".").pop()?.toLowerCase()))],K=F.filter((T)=>!!T&&z.includes(T));if(K.length>0&&Y)R.warn(`The following TLDs may not work reliably for local development: ${K.map((T)=>`.${T}`).join(", ")}`),R.info(" These TLDs have HSTS preloading which can bypass local DNS"),R.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(A&&J0.platform==="darwin"&&j.length>0){let{setupDevelopmentDns:T}=await Promise.resolve().then(() => (a1(),Z8));if(await T({domains:j,verbose:Y})){if(Y)if(F.every((h)=>!!h&&G.includes(h)))R.success(`DNS server started for ${F.map((h)=>`.${h}`).join(", ")} domains`);else R.success(`DNS server started for ${F.map((h)=>`.${h}`).join(", ")} domains (hosts file entries also added)`)}else N("dns","Could not start DNS server - custom domains may not resolve",Y)}let q=async()=>{N("cleanup","Starting cleanup handler",w.verbose);try{let{tearDownDevelopmentDns:T}=await Promise.resolve().then(() => (a1(),Z8));await T({verbose:w.verbose})}catch(T){N("cleanup",`Error stopping DNS server: ${T}`,w.verbose)}try{await g8.stopAll(w.verbose)}catch(T){N("cleanup",`Error stopping processes: ${T}`,w.verbose)}await n8({domains:B,hosts:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.hosts,certs:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.certs,verbose:w.verbose||!1})};J0.on("SIGINT",q),J0.on("SIGTERM",q);let f=w.singlePortMode===!0,E=w.httpsPort??443,H=w.httpPort??80,M=w.originGuard?V6(w.originGuard):null,y=!!W&&(U.length>1||f),Q=!W&&f&&U.length>0;if(y&&W){N("proxies",`Creating shared HTTPS server for ${U.length} domains on port ${E}`,Y);let T=await O6(U,A,Y);if(!await Tw(H,"0.0.0.0",Y))Z6(Y,H,E,w.acmeChallengeWebroot);if(await Tw(E,"0.0.0.0",Y)){if(N("proxies",`Port ${E} is already in use, cannot start shared proxy`,Y),Y)R.warn(`Port ${E} is in use. Shared HTTPS proxy cannot start.`);return}if(!aB({routeEntries:T,listenPort:E,sslConfig:W,originGuard:M,verbose:Y})){R.error(`Shared HTTPS proxy failed to bind :${E}; not exiting`);return}}else if(Q){N("proxies",`Creating shared HTTP server for ${U.length} domains on port ${H}`,Y);let T=await O6(U,A,Y);if(await Tw(H,"0.0.0.0",Y)){if(N("proxies",`Port ${H} is already in use, cannot start shared proxy`,Y),Y)R.warn(`Port ${H} is in use. Shared HTTP proxy cannot start.`);return}if(!aB({routeEntries:T,listenPort:H,sslConfig:null,originGuard:M,verbose:Y})){R.error(`Shared HTTP proxy failed to bind :${H}; not exiting`);return}}else for(let T of U)try{let I=T.to||"rpx.localhost";N("proxy",`Starting proxy for ${I} with SSL config: ${!!W}`,T.verbose),await h6({from:T.from||"localhost:5173",to:I,cleanUrls:T.cleanUrls||!1,https:T.https||!1,cleanup:T.cleanup||!1,vitePluginUsage:T.vitePluginUsage||!1,verbose:T.verbose||!1,_cachedSSLConfig:w._cachedSSLConfig,changeOrigin:T.changeOrigin||!1})}catch(I){N("proxies",`Failed to start proxy for ${T.to}: ${I}`,T.verbose),R.error(`Failed to start proxy for ${T.to}:`,I)}}async function O6($,w,Y){let A=[],X=new Set;for(let J of $){let U=J.to||"rpx.localhost",B=J.cleanUrls||!1,W=J.path,j=y$(W),z=v1(J.auth);if(J.redirect){let G=I5(J.redirect);A.push({host:U,path:W,route:{redirect:G,basePath:j,auth:z}}),N("proxies",`Route: ${U}${W??""} → redirect ${G.status} ${G.to}${z?" (auth)":""}`,Y)}else if(J.static)A.push({host:U,path:W,route:{static:hY(J.static,B),cleanUrls:B,basePath:j,auth:z}}),N("proxies",`Route: ${U}${W??""} → static ${typeof J.static==="string"?J.static:J.static.dir}${z?" (auth)":""}`,Y);else{let G=new URL(J.from?.startsWith("http")?J.from:`http://${J.from}`);A.push({host:U,path:W,route:{sourceHost:G.host,cleanUrls:B,changeOrigin:J.changeOrigin||!1,pathRewrites:J.pathRewrites,basePath:j,auth:z}}),N("proxies",`Route: ${U}${W??""} → ${G.host}${z?" (auth)":""}`,Y)}if(X.has(U))continue;if(X.add(U),w&&!U1(U)&&!U.includes("localhost")&&!U.includes("127.0.0.1"))try{if(!(await nY([U],Y))[0])await dY([U],Y)}catch{N("hosts",`Could not add hosts entry for ${U}`,Y)}}return A}function aB($){let{routeEntries:w,listenPort:Y,sslConfig:A,originGuard:X,verbose:J}=$,U=g1(w),B=i1((z,G)=>l1(U,z,G),J),W=X?(z,G)=>X(z)??B(z,G):B,j=m1(J);try{let z=Bun.serve({port:Y,hostname:"0.0.0.0",reusePort:D1(),...A?{tls:Array.isArray(A)?A.map((G)=>({serverName:G.serverName,key:G.key,cert:G.cert})):{key:A.key,cert:A.cert,ca:A.ca,requestCert:!1,rejectUnauthorized:!1}}:{},fetch(G,F){return W(G,F)},websocket:j,error(G){return N("server",`Shared proxy server error: ${G}`,J),new Response(`Server Error: ${G.message}`,{status:500})}});return l8.add(z),N("proxies",`Shared ${A?"HTTPS":"HTTP"} proxy listening on port ${Y} for ${U.size} domains`,J),z}catch(z){return N("proxies",`Failed to start shared proxy: ${z}`,J),console.error("Failed to start shared proxy:",z),null}}function gM($){if($?.vitePluginUsage||!$?.verbose)return;if(console.log(""),console.log(` ${O$.green(O$.bold("rpx"))} ${O$.green(`v${uM}`)}`),console.log(` ${O$.green("➜")} ${O$.dim($?.from??"")} ${O$.dim("➜")} ${O$.cyan($?.ssl?`https://${$?.to}`:`http://${$?.to}`)}`),$?.listenPort!==($?.ssl?443:80))console.log(` ${O$.green("➜")} Listening on port ${$?.listenPort}`);if($?.cleanUrls)console.log(` ${O$.green("➜")} Clean URLs enabled`)}aW();var r_=new Dw("rpx",{showTags:!1});function x6($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}x0.chdir(dM(lM(nM(import.meta.url)),".."));var b0=new JJ("rpx"),P6="0.12.0";b0.command("start","Start the Reverse Proxy Server").option("--from <from>","The URL to proxy from").option("--to <to>","The URL to proxy to").option("--key-path <path>","Absolute path to the SSL key").option("--cert-path <path>","Absolute path to the SSL certificate").option("--ca-cert-path <path>","Absolute path to the SSL CA certificate").option("--hosts-cleanup","Cleanup /etc/hosts on exit").option("--certs-cleanup","Cleanup SSL certificates on exit").option("--start-command <command>","Command to start the dev server").option("--start-cwd <path>","Current working directory for the dev server").option("--start-env <env>","Environment variables for the dev server").option("--change-origin","Change the origin of the host header to the target URL").option("--single-port-mode","Route all proxies through one shared listener (by Host header) instead of a port per proxy").option("--http-port <port>","Port for the shared HTTP listener / redirect (default: 80)").option("--https-port <port>","Port for the shared HTTPS listener (default: 443)").option("--via-daemon","Route through the shared rpx daemon instead of binding :443 directly").option("--id <id>","Stable id used when registering with the daemon (auto-derived from --to)").option("--verbose","Enable verbose logging").example("rpx start --from localhost:5173 --to my-project.localhost").example("rpx start --from localhost:3000 --to my-project.localhost/api").example("rpx start --from localhost:3000 --to localhost:3001").example("rpx start --from localhost:5173 --to my-project.test --key-path /absolute/path/to/key --cert-path /absolute/path/to/cert").example("rpx start --from localhost:5173 --to my-project.localhost --change-origin").example("rpx start --single-port-mode --https-port 8443").action(async($)=>{if(!$?.from||!$.to)return D6(J1);let w={from:$.from,to:$.to,https:{keyPath:$.keyPath,certPath:$.certPath,caCertPath:$.caCertPath},cleanup:{certs:$.certsCleanup||!1,hosts:$.hostsCleanup||!1},verbose:$.verbose||!1,changeOrigin:$.changeOrigin||!1,singlePortMode:$.singlePortMode||!1,httpPort:$.httpPort!==void 0?Number($.httpPort):void 0,httpsPort:$.httpsPort!==void 0?Number($.httpsPort):void 0,viaDaemon:$.viaDaemon||!1,id:$.id};if($.startCommand){let Y={command:$.startCommand};if($.startCwd)Y.cwd=$.startCwd;if($.startEnv)try{Y.env=JSON.parse($.startEnv)}catch(A){console.error("Failed to parse start-env JSON:",A),x0.exit(1)}w.start=Y}return k6(w)});b0.command("watch:start <proxy>","Start the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{let Y=x6(J1)?J1.proxies.find((A)=>A.to===$||`${A.from}-${A.to}`===$):J1.to===$?J1:null;if(!Y?.start)console.error(`No watch configuration found for proxy: ${$}`),x0.exit(1);try{await P8.startProcess($,Y.start,w.verbose),console.log(`Started dev server for ${$}`)}catch(A){console.error(`Failed to start dev server for ${$}:`,A),x0.exit(1)}});b0.command("watch:stop <proxy>","Stop the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{try{await P8.stopProcess($,w.verbose),console.log(`Stopped dev server for ${$}`)}catch(Y){console.error(`Failed to stop dev server for ${$}:`,Y),x0.exit(1)}});b0.command("watch:stopall","Stop all running dev servers").option("--verbose","Enable verbose logging").action(async($)=>{try{await P8.stopAll($.verbose),console.log("Stopped all dev servers")}catch(w){console.error("Failed to stop all dev servers:",w),x0.exit(1)}});async function b6($){let Y={...(await c9().catch(()=>null))?.onDemand??{},enabled:!0};if($){let A=$.split(",").map((X)=>X.trim()).filter(Boolean);if(A.length>0)Y.roots=A}return Y}b0.command("daemon:start","Start the rpx daemon in the foreground (binds :443 + :80)").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--registry-dir <path>","Override the registry dir (default <rpx-dir>/registry.d)").option("--https-port <port>","HTTPS port (default 443)",{default:443}).option("--http-port <port>","HTTP redirect port; 0 to disable (default 80)",{default:80}).option("--hostname <host>","Bind address (default 0.0.0.0)",{default:"0.0.0.0"}).option("--certs-dir <path>","Directory of real PEM certs for per-domain SNI (<domain>.crt/.key, _wildcard.<apex>.crt/.key)").option("--workers <n>","Run as a multi-core cluster of N worker processes (default 1; also RPX_WORKERS)").option("--on-demand","Lazily boot a project's dev server the first time its host is visited (reads config `onDemand`)").option("--roots <dirs>","Comma-separated roots scanned for on-demand sites (overrides config; default ~/Code)").option("--verbose","Enable verbose logging").example("rpx daemon:start --on-demand").example("rpx daemon:start --on-demand --roots ~/Code,~/work").action(async($)=>{try{let w=$.onDemand?await b6($.roots):void 0;await(await z6({rpxDir:$.rpxDir,registryDir:$.registryDir,httpsPort:typeof $.httpsPort==="string"?Number.parseInt($.httpsPort,10):$.httpsPort,httpPort:typeof $.httpPort==="string"?Number.parseInt($.httpPort,10):$.httpPort,hostname:$.hostname,productionCerts:$.certsDir?{certsDir:$.certsDir}:void 0,workers:$.workers===void 0?void 0:typeof $.workers==="string"?Number.parseInt($.workers,10):$.workers,onDemandSites:w,verbose:$.verbose??!0})).done,x0.exit(0)}catch(w){console.error(`Failed to start rpx daemon: ${w.message}`),x0.exit(1)}});b0.command("daemon:stop","Stop the running rpx daemon (SIGTERM, escalates to SIGKILL)").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--timeout <ms>","Max ms to wait for graceful shutdown",{default:5000}).option("--no-force","Do not escalate to SIGKILL after timeout").option("--verbose","Enable verbose logging").action(async($)=>{let w=typeof $.timeout==="string"?Number.parseInt($.timeout,10):$.timeout,Y=await F6({rpxDir:$.rpxDir,timeoutMs:w,forceAfterTimeout:$.force!==!1,verbose:$.verbose});if(!Y.stopped&&Y.pid===null){console.log("rpx daemon is not running");return}if(!Y.stopped){console.log(`rpx daemon pid=${Y.pid} was already gone (cleaned stale lock)`);return}console.log(`rpx daemon pid=${Y.pid} stopped${Y.forced?" (SIGKILL)":""}`)});b0.command("daemon:status","Print daemon state and currently registered hosts").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--registry-dir <path>","Override the registry dir (default <rpx-dir>/registry.d)").option("--json","Emit machine-readable JSON instead of a human summary").action(async($)=>{let w=$.rpxDir??w$(),Y=await Iw(w),A=await D8(w),X=$.registryDir,J=await gB(X).catch(()=>[]);if($.json){console.log(JSON.stringify({running:A,pid:Y,pidFile:Vw(w),rpxDir:w,registryDir:X??cw(),entries:J},null,2));return}if(!A){if(console.log("rpx daemon: not running"),Y!==null)console.log(`(stale pid file at ${Vw(w)} \u2192 pid ${Y})`)}else console.log(`rpx daemon: running (pid=${Y})`),console.log(`pid file: ${Vw(w)}`);if(console.log(`registry: ${X??cw()}`),J.length===0){console.log("no registered hosts");return}console.log(`registered hosts (${J.length}):`);for(let U of J){let B=U.pid!==void 0?`, pid=${U.pid}`:"";console.log(` https://${U.to} \u2192 ${U.from} (id=${U.id}${B})`)}});b0.command("register","Register an upstream app with the rpx daemon").option("--id <id>","Unique id for this entry (a-z, 0-9, dot, dash, underscore)").option("--from <host:port>","Upstream host:port (e.g. localhost:5173)").option("--to <host>","Public hostname (e.g. pet-store.localhost)").option("--cwd <path>","Working directory of the upstream (informational)").option("--clean-urls","Strip .html and 301 to the clean URL").option("--change-origin","Rewrite Origin to the upstream").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--registry-dir <path>","Override the registry dir (default <rpx-dir>/registry.d)").option("--skip-spawn","Do not lazy-spawn the daemon if it is not already running").option("--verbose","Enable verbose logging").example("rpx register --id pet-store --from localhost:5173 --to pet-store.localhost").action(async($)=>{if(!$.id||!$.from||!$.to)console.error("rpx register requires --id, --from, and --to"),x0.exit(1);if(!e1($.id))console.error(`invalid id: ${JSON.stringify($.id)} (must match /^[a-zA-Z0-9._-]+$/, \u2264128 chars)`),x0.exit(1);try{await q6({id:$.id,from:$.from,to:$.to,cwd:$.cwd,createdAt:new Date().toISOString(),cleanUrls:$.cleanUrls,changeOrigin:$.changeOrigin},$.registryDir,$.verbose)}catch(w){console.error(`failed to write registry entry: ${w.message}`),x0.exit(1)}if($.skipSpawn){console.log(`registered ${$.to} \u2192 ${$.from} (daemon spawn skipped)`);return}try{let w=await G6({rpxDir:$.rpxDir,verbose:$.verbose}),Y=w.spawned?"spawned":"attached to";console.log(`registered https://${$.to} \u2192 ${$.from} (${Y} daemon pid=${w.pid})`)}catch(w){console.error(`registered entry but daemon spawn failed: ${w.message}`),console.error("the entry remains in the registry; start the daemon manually with `rpx daemon:start`"),x0.exit(1)}});b0.command("unregister <id>","Remove a previously registered app from the rpx daemon").option("--registry-dir <path>","Override the registry dir (default ~/.stacks/rpx/registry.d)").option("--verbose","Enable verbose logging").action(async($,w)=>{if(!e1($))console.error(`invalid id: ${JSON.stringify($)}`),x0.exit(1);let Y=await mB($,w.registryDir,w.verbose);if(!Y){console.log(`no registry entry for id=${$}`);return}await E6($,w.registryDir,w.verbose),console.log(`unregistered ${Y.to} (id=${$})`)});b0.command("dns:reconcile","Remove stale macOS DNS overrides left by crashed dev sessions").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--verbose","Enable verbose logging").action(async($)=>{let w=$.rpxDir??w$();if(await D8(w)){console.log("rpx daemon is running \u2014 DNS overrides are managed by the daemon");return}await K6({rpxDir:w,verbose:$.verbose}),console.log("DNS reconcile complete")});b0.command("sites","List the on-demand sites rpx can boot (and which are currently live)").option("--roots <dirs>","Comma-separated roots to scan (overrides config; default ~/Code)").option("--registry-dir <path>","Override the registry dir (default ~/.stacks/rpx/registry.d)").option("--json","Emit machine-readable JSON").action(async($)=>{let w=await b6($.roots),Y=l9(w),A=await gB($.registryDir).catch(()=>[]),X=new Set(A.map((B)=>B.to)),J=Y.map((B)=>({host:B.host,dir:B.dir,command:B.command,source:B.source,live:X.has(B.host)}));if($.json){console.log(JSON.stringify(J,null,2));return}let U=w.roots??["~/Code"];if(J.length===0){console.log("no on-demand sites found"),console.log(`scanned roots: ${U.join(", ")}`),console.log("start the daemon with `rpx daemon:start --on-demand` to serve them");return}console.log(`on-demand sites (${J.length}) \u2014 scanned ${U.join(", ")}:`);for(let B of J)console.log(` ${B.live?"\u25CF":"\u25CB"} https://${B.host} ${B.live?"(live)":"(idle)"}`),console.log(` ${B.command} ${B.dir}`)});b0.command("logs <host>","Show an on-demand site's boot log (e.g. rpx logs myapp.localhost)").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--lines <n>","Show only the last N lines (default: all)").action(async($,w)=>{let{readFile:Y}=await import("fs/promises"),{join:A}=await import("path"),X=w.rpxDir??w$(),J=A(X,"sites",`${uA($.split(":")[0])}.log`),U;try{U=await Y(J,"utf8")}catch{console.log(`no log for ${$} (it may not have been booted yet) \u2014 looked in ${J}`);return}let B=w.lines===void 0?void 0:typeof w.lines==="string"?Number.parseInt(w.lines,10):w.lines,W=U.split(`
317
+ `,B=Aj.join(b6.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await gw.promises.writeFile(B,U,"utf8"),await r8(`cat "${B}" | tee "${G$}" > /dev/null`),N("hosts","Hosts removed successfully",w)}catch(W){N("hosts","Could not clean up hosts file automatically",w)}finally{try{await gw.promises.unlink(B)}catch(W){N("hosts",`Failed to remove temporary file: ${W}`,w)}}}catch(Y){N("hosts",`Failed to clean up hosts file: ${Y.message}`,w)}}async function oY($,w){N("hosts",`Checking hosts: ${$}`,w);let Y;try{Y=await gw.promises.readFile(G$,"utf-8")}catch(A){N("hosts",`Error reading hosts file: ${A}`,w);try{let X=uw(),J;if(X)J=`echo '${X}' | sudo -S cat "${G$}" 2>/dev/null`;else J=`sudo -n cat "${G$}" 2>/dev/null || cat "${G$}" 2>/dev/null || echo ""`;let{stdout:U}=await tY(J);Y=U}catch(X){return N("hosts",`Cannot read hosts file, assuming entries don't exist: ${X}`,w),$.map(()=>!1)}}return $.map((A)=>{let X=`127.0.0.1 ${A}`,J=`::1 ${A}`;return Y.includes(X)||Y.includes(J)})}V8();SB();i$();X0();import{spawn as oM}from"node:child_process";import*as t8 from"node:process";class a8{processes=new Map;isShuttingDown=!1;async startProcess($,w,Y){if(this.processes.has($)){N("start",`Process ${$} is already running`,Y);return}let[A,...X]=w.command.split(" "),J=w.cwd||t8.cwd();N("start",`Starting process ${$}:`,Y),N("start",` Command: ${A} ${X.join(" ")}`,Y),N("start",` Working directory: ${J}`,Y),N("start",` Environment variables: ${R$(w.env)}`,Y);let U=oM(A,X,{cwd:J,env:{...t8.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:J,process:U,env:w.env}),new Promise((B,W)=>{if(U.on("error",(j)=>{if(!this.isShuttingDown)N("start",`Process ${$} failed to start: ${j}`,Y),this.processes.delete($),W(j)}),U.on("exit",(j)=>{if(!this.isShuttingDown&&j!==null&&j!==0)N("start",`Process ${$} exited with code ${j}; leaving the proxy running`,Y),this.processes.delete($),W(Error(`Process ${$} exited with code ${j}`))}),Y)U.stdout?.on("data",(j)=>{N("process",`[${$}] ${j.toString().trim()}`,!0)}),U.stderr?.on("data",(j)=>{N("process",`[${$}] ERR: ${j.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&U.killed)this.processes.delete($),W(Error(`Process ${$} was killed during startup`));else N("start",`Process ${$} started successfully`,Y),B()},1000)})}async stopProcess($,w){let Y=this.processes.get($);if(!Y?.process){N("start",`No process found for ${$}`,w);return}return N("start",`Stopping process ${$}`,w),new Promise((A)=>{if(!Y.process){A();return}Y.process.once("exit",()=>{this.processes.delete($),N("start",`Process ${$} stopped`,w),A()});try{Y.process.kill("SIGTERM"),setTimeout(()=>{if(Y.process){N("start",`Force killing process ${$}`,w);try{Y.process.kill("SIGKILL")}catch(X){}}},3000)}catch(X){N("start",`Error stopping process ${$}: ${X}`,w),this.processes.delete($),A()}})}async stopAll($){if(this.isShuttingDown){N("start","Already shutting down, skipping duplicate stopAll call",$);return}this.isShuttingDown=!0,N("start","Stopping all processes",$);let w=Array.from(this.processes.keys()).map((Y)=>this.stopProcess(Y,$).catch((A)=>{R.error(`Failed to stop process ${Y}:`,A)}));await Promise.allSettled(w),this.processes.clear(),this.isShuttingDown=!1}isRunning($){let w=this.processes.get($);return!!w?.process&&!w.process.killed}}var l_=new a8;import{timingSafeEqual as eM}from"node:crypto";function $4($,w){if($==null)return!1;let Y=Buffer.from($),A=Buffer.from(w);if(Y.length!==A.length)return!1;return eM(Y,A)}function s8($){return $.toLowerCase().replace(/\.$/,"")}var w4=["/.well-known/acme-challenge/"];function Y4($){let w=$.headers.get("host");if(w)return s8(w.split(":")[0]);try{return s8(new URL($.url).hostname)}catch{return""}}function v6($){let w=$.header.toLowerCase(),Y=new Set,A=[];for(let W of $.hosts){let j=s8(W);if(j.startsWith("*."))A.push(j);else Y.add(j)}let X=$.exemptPaths??w4,J=$.forbiddenMessage??`Forbidden: direct origin access is not allowed; requests must arrive via the CDN.
318
+ `,U=(W)=>{let j=s8(W);return Y.has(j)||A.some((z)=>NY(j,z))},B=(W)=>{let j=Y4(W);if(!U(j))return;let z="/";try{z=new URL(W.url).pathname}catch{}if(X.some((G)=>z.startsWith(G)))return;if($4(W.headers.get(w),$.value))return;return new Response(J,{status:403,headers:{"content-type":"text/plain"}})};return B.protects=U,B}L8();O8();DY();vY();S8();bY();X0();var e8=new a8,X4="0.12.0",J4=new h8("0.0.0.0"),$J=new Set,wJ=new Set,Xj=!1,o8=null,Jj=null;async function AJ($){if(Xj)return N("cleanup","Cleanup already in progress, skipping",$?.verbose),Jj||Promise.resolve();Xj=!0,N("cleanup","Starting cleanup process",$?.verbose),Jj=new Promise((w)=>{o8=w});try{await e8.stopAll($?.verbose),R.info("Shutting down proxy servers...");let w=[],Y=Array.from($J).map((A)=>new Promise((X)=>{let J=A;try{if(typeof J.stop==="function")J.stop(!0),N("cleanup","Bun server stopped",$?.verbose),X();else if(typeof J.close==="function")J.close(()=>{N("cleanup","Server closed successfully",$?.verbose),X()});else X()}catch(U){N("cleanup",`Error stopping server: ${U}`,$?.verbose),X()}}));w.push(...Y),$J.clear();for(let A of wJ)d1(A);if(wJ.clear(),$?.hosts&&$.domains?.length){N("cleanup","Cleaning up hosts file entries",$?.verbose),N("cleanup",`Original domains for cleanup: ${JSON.stringify($.domains)}`,$?.verbose);let A=$.domains.filter((X)=>{if(X==="test.local")return!0;return X!=="localhost"&&!X.startsWith("localhost.")&&X!=="127.0.0.1"});if(N("cleanup",`Filtered domains for cleanup: ${JSON.stringify(A)}`,$?.verbose),A.length>0)R.info("Cleaning up hosts file entries..."),w.push(u6(A,$?.verbose).then(()=>{N("cleanup",`Removed hosts entries for ${A.join(", ")}`,$?.verbose)}).catch((X)=>{N("cleanup",`Failed to remove hosts entries: ${X}`,$?.verbose),R.warn(`Failed to clean up hosts file entries for ${A.join(", ")}:`,X)}))}if($?.certs&&$.domains?.length){N("cleanup","Cleaning up SSL certificates",$?.verbose),R.info("Cleaning up SSL certificates...");let A=$.domains.map(async(X)=>{try{await f5(X,$?.verbose),N("cleanup",`Removed certificates for ${X}`,$?.verbose)}catch(J){N("cleanup",`Failed to remove certificates for ${X}: ${J}`,$?.verbose),R.warn(`Failed to clean up certificates for ${X}:`,J)}});w.push(...A)}await Promise.allSettled(w),N("cleanup","All cleanup tasks completed successfully",$?.verbose),R.success("All cleanup tasks completed successfully")}catch(w){N("cleanup",`Error during cleanup: ${w}`,$?.verbose),R.error("Error during cleanup:",w)}finally{if(o8)o8();o8=null,Xj=!1;let w=$&&"vitePluginUsage"in $&&$.vitePluginUsage===!0;if(J0.env.NODE_ENV!=="test"&&J0.env.BUN_ENV!=="test"&&!w)J0.exit(0)}return Jj}var Uj=!1;function m6($){if(Uj){N("signal",`Received second ${$} signal, forcing exit`,!0),J0.exit(1);return}Uj=!0,N("signal",`Received ${$} signal, initiating cleanup`,!0),AJ().catch((w)=>{N("signal",`Cleanup failed after ${$}: ${w}`,!0),J0.exit(1)}).finally(()=>{Uj=!1})}J0.once("SIGINT",()=>m6("SIGINT"));J0.once("SIGTERM",()=>m6("SIGTERM"));J0.on("uncaughtException",($)=>{R.error("Uncaught exception (continuing):",$)});J0.on("unhandledRejection",($)=>{R.error("Unhandled rejection (continuing):",$)});async function eY($,w,Y,A=5){N("connection",`Testing connection to ${$}:${w} (retries left: ${A})`,Y);let X=15000,J=Date.now();if(J0.env.RPX_BYPASS_CONNECTION_TEST==="true"){N("connection",`Bypassing connection test for ${$}:${w} due to RPX_BYPASS_CONNECTION_TEST flag`,Y);return}let U=()=>new Promise((B,W)=>{let j=i6.connect({host:$,port:w,timeout:3000});j.once("connect",()=>{N("connection",`Successfully connected to ${$}:${w}`,Y),j.end(),B()}),j.once("timeout",()=>{N("connection",`Connection to ${$}:${w} timed out`,Y),j.destroy(),W(Error("Connection timed out"))}),j.once("error",(z)=>{N("connection",`Failed to connect to ${$}:${w}: ${z}`,Y),j.destroy(),W(z)})});try{await U()}catch(B){let W=B;if(Date.now()-J>X){N("connection",`Connection test timed out after ${X}ms, but continuing anyway`,Y),R.warn(`Connection test to ${$}:${w} timed out, but RPX will try to proceed anyway.`);return}if(W.code==="ECONNREFUSED"&&A>0)return N("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${A} retries left)`,Y),await new Promise((z)=>setTimeout(z,2000)),eY($,w,Y,A-1);if(A>0)try{N("connection",`Trying HTTP request to ${$}:${w}`,Y),await new Promise((z,G)=>{let K=YJ.request({hostname:$,port:w,path:"/",method:"HEAD",timeout:5000},(F)=>{N("connection",`Received HTTP response with status: ${F.statusCode}`,Y),z()});K.on("error",(F)=>G(F)),K.on("timeout",()=>{K.destroy(),G(Error("HTTP request timed out"))}),K.end()}),N("connection",`HTTP request to ${$}:${w} succeeded`,Y);return}catch(z){return N("connection",`HTTP request to ${$}:${w} failed: ${z}`,Y),N("connection",`Retrying socket connection in 2 seconds... (${A} retries left)`,Y),await new Promise((G)=>setTimeout(G,2000)),eY($,w,Y,A-1)}let j=`Failed to connect to ${$}:${w} after ${5-A} attempts: ${W.message}`;N("connection",`${j}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,Y),R.warn(j),R.warn("RPX will try to continue anyway. If you're sure this is correct, you can set RPX_BYPASS_CONNECTION_TEST=true to skip this check.")}}async function g6($){N("server",`Starting server with options: ${R$($)}`,$.verbose);let w=Rw($.from),Y=new URL(w.startsWith("http")?w:`http://${w}`),A=new URL(($.to?.startsWith("http")?$.to:`http://${$.to}`)||"rpx.localhost"),X=Number.parseInt(Y.port)||(Y.protocol.includes("https:")?443:80),J=[A.hostname];if(Bj($)&&!A.hostname.includes("localhost")&&!A.hostname.includes("127.0.0.1")){N("hosts",`Checking if hosts file entry exists for: ${A.hostname}`,$?.verbose);try{if(!(await oY(J,$.verbose))[0]){R.info(`Adding ${A.hostname} to hosts file...`),R.info("This may require sudo/administrator privileges");try{await sY(J,$.verbose)}catch(W){if(R.error("Failed to add hosts entry:",W.message),R.warn("You can manually add this entry to your hosts file:"),R.warn(`127.0.0.1 ${A.hostname}`),R.warn(`::1 ${A.hostname}`),J0.platform==="win32")R.warn("On Windows:"),R.warn("1. Run notepad as administrator"),R.warn("2. Open C:\\Windows\\System32\\drivers\\etc\\hosts");else R.warn("On Unix systems:"),R.warn("sudo nano /etc/hosts")}}else N("hosts",`Host entry already exists for ${A.hostname}`,$.verbose)}catch(B){R.error("Failed to check hosts file:",B.message)}}try{await eY(Y.hostname,X,$.verbose)}catch(B){N("server",`Connection test failed: ${B}`,$.verbose),R.error(B.message),R.warn("Continuing with proxy setup despite connection test failure..."),R.info("If you need to bypass connection testing, set environment variable RPX_BYPASS_CONNECTION_TEST=true")}let U=$._cachedSSLConfig||null;if($.https)try{if($.https===!0)$.https=ZY({...$,to:A.hostname});if(U=await Yw({...$,to:A.hostname,https:$.https}),!U){if(N("ssl",`Generating new certificates for ${A.hostname}`,$.verbose),await i1({...$,from:Y.toString(),to:A.hostname,https:$.https}),U=await Yw({...$,to:A.hostname,https:$.https}),!U)throw Error(`Failed to load SSL configuration after generating certificates for ${A.hostname}`)}}catch(B){throw N("server",`SSL setup failed: ${B}`,$.verbose),B}N("server",`Setting up reverse proxy with SSL config for ${A.hostname}`,$.verbose),await W4({...$,from:w,originalFrom:$.from||w,to:A.hostname,fromPort:X,sourceUrl:{hostname:Y.hostname,host:Y.host},ssl:U})}async function U4($,w,Y,A,X,J,U,B,W,j,z,G){N("proxy",`Creating proxy server ${$} -> ${w} with cleanUrls: ${B}`,U);let K=m1(z??A.host,G);g1(K);let F=[{host:w,route:{sourceHost:A.host,upstreamPool:K,cleanUrls:B||!1,changeOrigin:W||!1,basePath:"/",auth:j}}];if(!Wj({routeEntries:F,listenPort:Y,sslConfig:X,originGuard:null,verbose:U??!1}))throw d1(K),Error(`Failed to start proxy server for ${w} on port ${Y}`);wJ.add(K),j4({from:$,to:w,vitePluginUsage:J,listenPort:Y,ssl:!!X,cleanUrls:B,verbose:U})}async function W4($){N("setup",`Setting up reverse proxy: ${R$($)}`,$.verbose);let{from:w,originalFrom:Y,to:A,sourceUrl:X,ssl:J,verbose:U,cleanup:B,vitePluginUsage:W,changeOrigin:j,cleanUrls:z}=$,G=80,K=443,F="0.0.0.0",T=$.portManager||J4,q=Bj($);try{if(q&&A&&!A.includes("localhost")&&!A.includes("127.0.0.1")){if(!(await oY([A],U))[0]){R.warn(`The hostname ${A} isn't in your hosts file. Adding it now...`);try{await sY([A],U),R.success(`Added ${A} to your hosts file.`)}catch(V){R.error(`Failed to add ${A} to your hosts file: ${V}`),R.info(`You may need to manually add '127.0.0.1 ${A}' to your /etc/hosts file.`)}}}else if(q&&J0.platform!=="darwin"&&A&&A.includes("localhost")&&!A.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await oY([A],U))[0]){N("hosts",`${A} not found in hosts file, adding...`,U);try{await sY([A],U)}catch(V){N("hosts",`Failed to add ${A} to hosts file: ${V}`,U)}}}if(J&&!T.usedPorts.has(G)){if(!await Iw(G,F,U))N("setup","Starting HTTP redirect server",U),d6(U),T.usedPorts.add(G);else if(N("setup","Port 80 is in use, skipping HTTP redirect",U),U)R.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let E=J?K:G,H=await Iw(E,F,U),M;if(H){if(N("setup",`Port ${E} is already in use`,U),U)R.warn(`Port ${E} is already in use. This may be another instance of rpx or another service.`);if(E===443){if(M=await T.getNextAvailablePort(3443,!0),N("setup",`Using port ${M} instead of ${E}`,U),U)R.info(`Using port ${M} instead. Access your site at https://${A}:${M}`)}else if(M=await T.getNextAvailablePort(E+1000,!0),N("setup",`Using port ${M} instead of ${E}`,U),U)R.info(`Using port ${M} instead. Access your site at http://${A}:${M}`)}else M=E,T.usedPorts.add(M),N("setup",`Using standard ${E===443?"HTTPS":"HTTP"} port ${E} for ${A}`,U);await U4(w,A,M,X,J,W,U,z,j,l1($.auth),Y,$.loadBalancer)}catch(E){N("setup",`Setup failed: ${E}`,U),R.error(`Failed to setup reverse proxy: ${E.message}`),AJ({domains:[A],hosts:typeof B==="boolean"?B:B?.hosts,certs:typeof B==="boolean"?B:B?.certs,verbose:U,vitePluginUsage:W})}}function d6($,w=80,Y=443,A){N("redirect",`Starting HTTP redirect server on port ${w}`,$);let X=YJ.createServer((J,U)=>{if(A&&J.url){let z=J.url.split("?",1)[0],G=uY(A,z);if(G!=null){N("redirect",`Serving ACME challenge ${z}`,$),U.writeHead(200,{"content-type":"text/plain"}),U.end(G);return}}let B=J.headers.host||"",W=B.includes(":")?B.slice(0,B.indexOf(":")):B,j=Y===443?W:`${W}:${Y}`;N("redirect",`Redirecting request from ${B}${J.url} to https://${j}`,$),U.writeHead(301,{Location:`https://${j}${J.url}`}),U.end()}).listen(w);$J.add(X),N("redirect","HTTP redirect server started",$)}function l6($){let w={...IW,...$};if(N("proxy",`Starting proxy with options: ${R$(w)}`,w?.verbose),w.viaDaemon){if(!w.from||!w.to){R.error("viaDaemon mode requires both `from` and `to`");return}wj({proxies:[{id:w.id,from:w.from,to:w.to,path:w.path,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}],verbose:w.verbose}).catch((W)=>{R.error(`Failed to register with rpx daemon: ${W.message}`),J0.exit(1)});return}let Y=w.to||"",A=Y.split(".").pop()?.toLowerCase()||"",X=J0.platform==="darwin"&&Y&&!Y.includes("localhost")&&!Y.includes("127.0.0.1"),J=["dev","app","page","new","day","foo"],U=["test","localhost","local","example","invalid"];if(X&&J.includes(A)&&w?.verbose)R.warn(`The .${A} TLD may not work reliably for local development`),R.info(` Google owns .${A} with HSTS preloading, which can bypass local DNS`),R.info(" Consider using a reserved TLD: .test, .localhost, or .local");if(X)Promise.resolve().then(() => (wY(),c8)).then(({setupDevelopmentDns:W})=>{W({domains:[Y],verbose:w.verbose}).then((j)=>{if(j)Promise.resolve().then(()=>{if(w.verbose)if(U.includes(A))R.success(`DNS server started for .${A} domains`);else R.success(`DNS server started for .${A} domains (hosts file entry also added)`)});else N("dns",`Could not start DNS server - ${Y} may not resolve in browser`,w.verbose)})}).catch((W)=>{N("dns",`Failed to start DNS server: ${W}`,w.verbose)});let B={from:w.from,to:w.to,cleanUrls:w.cleanUrls,https:ZY(w),cleanup:w.cleanup,vitePluginUsage:w.vitePluginUsage,changeOrigin:w.changeOrigin,verbose:w.verbose,regenerateUntrustedCerts:w.regenerateUntrustedCerts};N("proxy",`Server options: ${R$(B)}`,w.verbose),g6(B).catch((W)=>{N("proxy",`Failed to start proxy: ${W}`,w.verbose),R.error(`Failed to start proxy: ${W.message}`),AJ({domains:[w.to],hosts:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.hosts,certs:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.certs,verbose:w.verbose})})}function B4($){return $?.verbose||!1}function Bj($){if($?.hostsManagement===!1)return!1;let w=$?.cleanup;if(w===!1)return!1;if(w&&typeof w==="object"&&w.hosts===!1)return!1;return!0}async function n6($){let w={from:"localhost:5173",to:"rpx.localhost",https:!1,cleanup:{hosts:!0,certs:!1},vitePluginUsage:!1,verbose:!1,cleanUrls:!1,changeOrigin:!1,regenerateUntrustedCerts:!0};if($)w={...w,...$};let Y=B4(w),A=Bj(w);if(N("config",`Starting with config: ${R$(w,2)}`,Y),N("config",`Is multi-proxy? ${"proxies"in w}`,Y),N("config",`Hosts management enabled? ${A}`,Y),w.viaDaemon){let I="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((O)=>({id:O.id,from:O.from,to:O.to,path:O.path,cleanUrls:O.cleanUrls??w.cleanUrls,changeOrigin:O.changeOrigin??w.changeOrigin,pathRewrites:O.pathRewrites})):[{id:w.id,from:w.from,to:w.to??"rpx.localhost",path:w.path,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}];await wj({proxies:I,verbose:Y});return}if("proxies"in w&&Array.isArray(w.proxies)){N("servers",`Found ${w.proxies.length} proxies in config`,Y);for(let f of w.proxies)if(f.start){let I=`${f.from}-${f.to}`;try{N("watch",`Starting command for ${I} with command: ${f.start.command}`,Y),R.info(`Starting command for ${I}...`),await e8.startProcess(I,f.start,Y);let O=Rw(f.from),Z=new URL(O.startsWith("http")?O:`http://${O}`),P0=Z.hostname||"localhost",Z$=Number(Z.port)||80;try{await eY(P0,Z$,Y),N("watch",`Dev server is ready at ${P0}:${Z$}`,Y)}catch(h$){N("watch",`Connection check failed, but continuing with proxy setup: ${h$}`,Y),R.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(O){throw N("watch",`Failed to start command for ${I}: ${O}`,Y),Error(`Failed to start command for ${I}: ${O}`)}}else N("watch",`No start command for proxy ${f.from} -> ${f.to}`,Y)}else if("start"in w&&w.start){N("watch","Found start command in single proxy config",Y);let f=`${w.from}-${w.to}`;try{if(w.start)N("watch",`Starting command: ${w.start.command}`,Y),await e8.startProcess(f,w.start,Y);let I=Rw(w.from),O=new URL(I.startsWith("http")?I:`http://${I}`),Z=O.hostname||"localhost",P0=Number(O.port)||80;try{await eY(Z,P0,Y),N("watch",`Dev server is ready at ${Z}:${P0}`,Y)}catch(Z$){N("watch",`Connection check failed, but continuing with proxy setup: ${Z$}`,Y),R.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(I){throw N("watch",`Failed to run start command: ${I}`,Y),Error(`Failed to run start command: ${I}`)}}else N("watch","No start command found in config",Y);let X="proxies"in w&&Array.isArray(w.proxies)?w.proxies[0]?.to:("to"in w)?w.to:"rpx.localhost";if(J0.platform!=="win32"&&(w.https||A)){if(!uw())try{N("sudo","Pre-acquiring sudo credentials for privileged operations",Y),A4("sudo -v",{stdio:"inherit"})}catch{N("sudo","Could not pre-acquire sudo credentials",Y)}}let J=[];if(w.productionCerts){if(J=await a1(w.productionCerts,Y),J.length>0)N("ssl",`Using ${J.length} production SNI cert(s): ${J.map((f)=>f.serverName).join(", ")}`,Y)}if(w.https){let f=J.length>0?null:await Yw(w);if(!f&&J.length===0){if(N("ssl",`No valid or trusted certificates found for ${X}, generating new ones`,w.verbose),await i1(w),f=await Yw(w),!f)throw Error(`Failed to load SSL certificates after generation for ${X}`)}else N("ssl",`Using existing and trusted certificates for ${X}`,w.verbose);w._cachedSSLConfig=f}let U="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((f)=>({...f,https:w.https,cleanup:w.cleanup,cleanUrls:f.cleanUrls??("cleanUrls"in w?w.cleanUrls:!1),vitePluginUsage:w.vitePluginUsage,changeOrigin:f.changeOrigin??w.changeOrigin,verbose:Y,_cachedSSLConfig:w._cachedSSLConfig})):[{from:"from"in w?w.from:"localhost:5173",to:"to"in w?w.to:"rpx.localhost",cleanUrls:"cleanUrls"in w?w.cleanUrls:!1,https:w.https,cleanup:w.cleanup,vitePluginUsage:w.vitePluginUsage,start:"start"in w?w.start:void 0,changeOrigin:w.changeOrigin,auth:"auth"in w?w.auth:void 0,verbose:Y,_cachedSSLConfig:w._cachedSSLConfig}],B=U.map((f)=>f.to||"rpx.localhost"),W=J.length>0?J:w._cachedSSLConfig??null,j=B.filter((f)=>f&&!f.includes("localhost")&&!f.includes("127.0.0.1")),z=["dev","app","page","new","day","foo"],G=["test","localhost","local","example","invalid"],K=[...new Set(j.map((f)=>f.split(".").pop()?.toLowerCase()))],F=K.filter((f)=>!!f&&z.includes(f));if(F.length>0&&Y)R.warn(`The following TLDs may not work reliably for local development: ${F.map((f)=>`.${f}`).join(", ")}`),R.info(" These TLDs have HSTS preloading which can bypass local DNS"),R.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(A&&J0.platform==="darwin"&&j.length>0){let{setupDevelopmentDns:f}=await Promise.resolve().then(() => (wY(),c8));if(await f({domains:j,verbose:Y})){if(Y)if(K.every((Z)=>!!Z&&G.includes(Z)))R.success(`DNS server started for ${K.map((Z)=>`.${Z}`).join(", ")} domains`);else R.success(`DNS server started for ${K.map((Z)=>`.${Z}`).join(", ")} domains (hosts file entries also added)`)}else N("dns","Could not start DNS server - custom domains may not resolve",Y)}let T=async()=>{N("cleanup","Starting cleanup handler",w.verbose);try{let{tearDownDevelopmentDns:f}=await Promise.resolve().then(() => (wY(),c8));await f({verbose:w.verbose})}catch(f){N("cleanup",`Error stopping DNS server: ${f}`,w.verbose)}try{await e8.stopAll(w.verbose)}catch(f){N("cleanup",`Error stopping processes: ${f}`,w.verbose)}await AJ({domains:B,hosts:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.hosts,certs:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.certs,verbose:w.verbose||!1})};J0.on("SIGINT",T),J0.on("SIGTERM",T);let q=w.singlePortMode===!0,E=w.httpsPort??443,H=w.httpPort??80,M=w.originGuard?v6(w.originGuard):null,Q=!!W&&(U.length>1||q),V=!W&&q&&U.length>0;if(Q&&W){N("proxies",`Creating shared HTTPS server for ${U.length} domains on port ${E}`,Y);let f=await c6(U,A,Y);if(!await Iw(H,"0.0.0.0",Y))d6(Y,H,E,w.acmeChallengeWebroot);if(await Iw(E,"0.0.0.0",Y)){if(N("proxies",`Port ${E} is already in use, cannot start shared proxy`,Y),Y)R.warn(`Port ${E} is in use. Shared HTTPS proxy cannot start.`);return}if(!Wj({routeEntries:f,listenPort:E,sslConfig:W,originGuard:M,verbose:Y})){R.error(`Shared HTTPS proxy failed to bind :${E}; not exiting`);return}}else if(V){N("proxies",`Creating shared HTTP server for ${U.length} domains on port ${H}`,Y);let f=await c6(U,A,Y);if(await Iw(H,"0.0.0.0",Y)){if(N("proxies",`Port ${H} is already in use, cannot start shared proxy`,Y),Y)R.warn(`Port ${H} is in use. Shared HTTP proxy cannot start.`);return}if(!Wj({routeEntries:f,listenPort:H,sslConfig:null,originGuard:M,verbose:Y})){R.error(`Shared HTTP proxy failed to bind :${H}; not exiting`);return}}else for(let f of U)try{let I=f.to||"rpx.localhost";N("proxy",`Starting proxy for ${I} with SSL config: ${!!W}`,f.verbose),await g6({from:f.from||"localhost:5173",to:I,cleanUrls:f.cleanUrls||!1,https:f.https||!1,cleanup:f.cleanup||!1,vitePluginUsage:f.vitePluginUsage||!1,verbose:f.verbose||!1,_cachedSSLConfig:w._cachedSSLConfig,changeOrigin:f.changeOrigin||!1})}catch(I){N("proxies",`Failed to start proxy for ${f.to}: ${I}`,f.verbose),R.error(`Failed to start proxy for ${f.to}:`,I)}}async function c6($,w,Y){let A=[],X=new Set;for(let J of $){let U=J.to||"rpx.localhost",B=J.cleanUrls||!1,W=J.path,j=Q$(W),z=l1(J.auth);if(J.redirect){let G=D5(J.redirect);A.push({host:U,path:W,route:{redirect:G,basePath:j,auth:z}}),N("proxies",`Route: ${U}${W??""} → redirect ${G.status} ${G.to}${z?" (auth)":""}`,Y)}else if(J.static)A.push({host:U,path:W,route:{static:PY(J.static,B),cleanUrls:B,basePath:j,auth:z}}),N("proxies",`Route: ${U}${W??""} → static ${typeof J.static==="string"?J.static:J.static.dir}${z?" (auth)":""}`,Y);else{let G=Rw(J.from),K=new URL(G.startsWith("http")?G:`http://${G}`),F=m1(J.from??K.host,J.loadBalancer);g1(F),wJ.add(F),A.push({host:U,path:W,route:{sourceHost:K.host,upstreamPool:F,cleanUrls:B,changeOrigin:J.changeOrigin||!1,pathRewrites:J.pathRewrites,basePath:j,auth:z}}),N("proxies",`Route: ${U}${W??""} → ${K.host}${z?" (auth)":""}`,Y)}if(X.has(U))continue;if(X.add(U),w&&!B1(U)&&!U.includes("localhost")&&!U.includes("127.0.0.1"))try{if(!(await oY([U],Y))[0])await sY([U],Y)}catch{N("hosts",`Could not add hosts entry for ${U}`,Y)}}return A}function Wj($){let{routeEntries:w,listenPort:Y,sslConfig:A,originGuard:X,verbose:J}=$,U=r1(w),B=n1((z,G)=>t1(U,z,G),J),W=X?(z,G)=>X(z)??B(z,G):B,j=p1(J);try{let z=Bun.serve({port:Y,hostname:"0.0.0.0",reusePort:P1(),...A?{tls:Array.isArray(A)?A.map((G)=>({serverName:G.serverName,key:G.key,cert:G.cert})):{key:A.key,cert:A.cert,ca:A.ca,requestCert:!1,rejectUnauthorized:!1}}:{},fetch(G,K){return W(G,K)},websocket:j,error(G){return N("server",`Shared proxy server error: ${G}`,J),new Response(`Server Error: ${G.message}`,{status:500})}});return $J.add(z),N("proxies",`Shared ${A?"HTTPS":"HTTP"} proxy listening on port ${Y} for ${U.size} domains`,J),z}catch(z){return N("proxies",`Failed to start shared proxy: ${z}`,J),console.error("Failed to start shared proxy:",z),null}}function j4($){if($?.vitePluginUsage||!$?.verbose)return;if(console.log(""),console.log(` ${_$.green(_$.bold("rpx"))} ${_$.green(`v${X4}`)}`),console.log(` ${_$.green("➜")} ${_$.dim($?.from??"")} ${_$.dim("➜")} ${_$.cyan($?.ssl?`https://${$?.to}`:`http://${$?.to}`)}`),$?.listenPort!==($?.ssl?443:80))console.log(` ${_$.green("➜")} Listening on port ${$?.listenPort}`);if($?.cleanUrls)console.log(` ${_$.green("➜")} Clean URLs enabled`)}WB();var MS=new bw("rpx",{showTags:!1});function p6($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}x0.chdir(G4(z4(K4(import.meta.url)),".."));var u0=new EJ("rpx"),r6="0.12.0";u0.command("start","Start the Reverse Proxy Server").option("--from <from>","The URL to proxy from").option("--to <to>","The URL to proxy to").option("--key-path <path>","Absolute path to the SSL key").option("--cert-path <path>","Absolute path to the SSL certificate").option("--ca-cert-path <path>","Absolute path to the SSL CA certificate").option("--hosts-cleanup","Cleanup /etc/hosts on exit").option("--certs-cleanup","Cleanup SSL certificates on exit").option("--start-command <command>","Command to start the dev server").option("--start-cwd <path>","Current working directory for the dev server").option("--start-env <env>","Environment variables for the dev server").option("--change-origin","Change the origin of the host header to the target URL").option("--single-port-mode","Route all proxies through one shared listener (by Host header) instead of a port per proxy").option("--http-port <port>","Port for the shared HTTP listener / redirect (default: 80)").option("--https-port <port>","Port for the shared HTTPS listener (default: 443)").option("--via-daemon","Route through the shared rpx daemon instead of binding :443 directly").option("--id <id>","Stable id used when registering with the daemon (auto-derived from --to)").option("--verbose","Enable verbose logging").example("rpx start --from localhost:5173 --to my-project.localhost").example("rpx start --from localhost:3000 --to my-project.localhost/api").example("rpx start --from localhost:3000 --to localhost:3001").example("rpx start --from localhost:5173 --to my-project.test --key-path /absolute/path/to/key --cert-path /absolute/path/to/cert").example("rpx start --from localhost:5173 --to my-project.localhost --change-origin").example("rpx start --single-port-mode --https-port 8443").action(async($)=>{if(!$?.from||!$.to)return n6(W1);let w={from:$.from,to:$.to,https:{keyPath:$.keyPath,certPath:$.certPath,caCertPath:$.caCertPath},cleanup:{certs:$.certsCleanup||!1,hosts:$.hostsCleanup||!1},verbose:$.verbose||!1,changeOrigin:$.changeOrigin||!1,singlePortMode:$.singlePortMode||!1,httpPort:$.httpPort!==void 0?Number($.httpPort):void 0,httpsPort:$.httpsPort!==void 0?Number($.httpsPort):void 0,viaDaemon:$.viaDaemon||!1,id:$.id};if($.startCommand){let Y={command:$.startCommand};if($.startCwd)Y.cwd=$.startCwd;if($.startEnv)try{Y.env=JSON.parse($.startEnv)}catch(A){console.error("Failed to parse start-env JSON:",A),x0.exit(1)}w.start=Y}return l6(w)});u0.command("watch:start <proxy>","Start the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{let Y=p6(W1)?W1.proxies.find((A)=>A.to===$||`${A.from}-${A.to}`===$):W1.to===$?W1:null;if(!Y?.start)console.error(`No watch configuration found for proxy: ${$}`),x0.exit(1);try{await n8.startProcess($,Y.start,w.verbose),console.log(`Started dev server for ${$}`)}catch(A){console.error(`Failed to start dev server for ${$}:`,A),x0.exit(1)}});u0.command("watch:stop <proxy>","Stop the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{try{await n8.stopProcess($,w.verbose),console.log(`Stopped dev server for ${$}`)}catch(Y){console.error(`Failed to stop dev server for ${$}:`,Y),x0.exit(1)}});u0.command("watch:stopall","Stop all running dev servers").option("--verbose","Enable verbose logging").action(async($)=>{try{await n8.stopAll($.verbose),console.log("Stopped all dev servers")}catch(w){console.error("Failed to stop all dev servers:",w),x0.exit(1)}});async function t6($){let Y={...(await a9().catch(()=>null))?.onDemand??{},enabled:!0};if($){let A=$.split(",").map((X)=>X.trim()).filter(Boolean);if(A.length>0)Y.roots=A}return Y}u0.command("daemon:start","Start the rpx daemon in the foreground (binds :443 + :80)").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--registry-dir <path>","Override the registry dir (default <rpx-dir>/registry.d)").option("--https-port <port>","HTTPS port (default 443)",{default:443}).option("--http-port <port>","HTTP redirect port; 0 to disable (default 80)",{default:80}).option("--hostname <host>","Bind address (default 0.0.0.0)",{default:"0.0.0.0"}).option("--certs-dir <path>","Directory of real PEM certs for per-domain SNI (<domain>.crt/.key, _wildcard.<apex>.crt/.key)").option("--workers <n>","Run as a multi-core cluster of N worker processes (default 1; also RPX_WORKERS)").option("--on-demand","Lazily boot a project's dev server the first time its host is visited (reads config `onDemand`)").option("--roots <dirs>","Comma-separated roots scanned for on-demand sites (overrides config; default ~/Code)").option("--verbose","Enable verbose logging").example("rpx daemon:start --on-demand").example("rpx daemon:start --on-demand --roots ~/Code,~/work").action(async($)=>{try{let w=$.onDemand?await t6($.roots):void 0;await(await y6({rpxDir:$.rpxDir,registryDir:$.registryDir,httpsPort:typeof $.httpsPort==="string"?Number.parseInt($.httpsPort,10):$.httpsPort,httpPort:typeof $.httpPort==="string"?Number.parseInt($.httpPort,10):$.httpPort,hostname:$.hostname,productionCerts:$.certsDir?{certsDir:$.certsDir}:void 0,workers:$.workers===void 0?void 0:typeof $.workers==="string"?Number.parseInt($.workers,10):$.workers,onDemandSites:w,verbose:$.verbose??!0})).done,x0.exit(0)}catch(w){console.error(`Failed to start rpx daemon: ${w.message}`),x0.exit(1)}});u0.command("daemon:stop","Stop the running rpx daemon (SIGTERM, escalates to SIGKILL)").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--timeout <ms>","Max ms to wait for graceful shutdown",{default:5000}).option("--no-force","Do not escalate to SIGKILL after timeout").option("--verbose","Enable verbose logging").action(async($)=>{let w=typeof $.timeout==="string"?Number.parseInt($.timeout,10):$.timeout,Y=await O6({rpxDir:$.rpxDir,timeoutMs:w,forceAfterTimeout:$.force!==!1,verbose:$.verbose});if(!Y.stopped&&Y.pid===null){console.log("rpx daemon is not running");return}if(!Y.stopped){console.log(`rpx daemon pid=${Y.pid} was already gone (cleaned stale lock)`);return}console.log(`rpx daemon pid=${Y.pid} stopped${Y.forced?" (SIGKILL)":""}`)});u0.command("daemon:status","Print daemon state and currently registered hosts").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--registry-dir <path>","Override the registry dir (default <rpx-dir>/registry.d)").option("--json","Emit machine-readable JSON instead of a human summary").action(async($)=>{let w=$.rpxDir??w$(),Y=await Qw(w),A=await d8(w),X=$.registryDir,J=await $j(X).catch(()=>[]);if($.json){console.log(JSON.stringify({running:A,pid:Y,pidFile:yw(w),rpxDir:w,registryDir:X??mw(),entries:J},null,2));return}if(!A){if(console.log("rpx daemon: not running"),Y!==null)console.log(`(stale pid file at ${yw(w)} \u2192 pid ${Y})`)}else console.log(`rpx daemon: running (pid=${Y})`),console.log(`pid file: ${yw(w)}`);if(console.log(`registry: ${X??mw()}`),J.length===0){console.log("no registered hosts");return}console.log(`registered hosts (${J.length}):`);for(let U of J){let B=U.pid!==void 0?`, pid=${U.pid}`:"";console.log(` https://${U.to} \u2192 ${U.from} (id=${U.id}${B})`)}});u0.command("register","Register an upstream app with the rpx daemon").option("--id <id>","Unique id for this entry (a-z, 0-9, dot, dash, underscore)").option("--from <host:port>","Upstream host:port (e.g. localhost:5173)").option("--to <host>","Public hostname (e.g. pet-store.localhost)").option("--cwd <path>","Working directory of the upstream (informational)").option("--clean-urls","Strip .html and 301 to the clean URL").option("--change-origin","Rewrite Origin to the upstream").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--registry-dir <path>","Override the registry dir (default <rpx-dir>/registry.d)").option("--skip-spawn","Do not lazy-spawn the daemon if it is not already running").option("--verbose","Enable verbose logging").example("rpx register --id pet-store --from localhost:5173 --to pet-store.localhost").action(async($)=>{if(!$.id||!$.from||!$.to)console.error("rpx register requires --id, --from, and --to"),x0.exit(1);if(!XY($.id))console.error(`invalid id: ${JSON.stringify($.id)} (must match /^[a-zA-Z0-9._-]+$/, \u2264128 chars)`),x0.exit(1);try{await h6({id:$.id,from:$.from,to:$.to,cwd:$.cwd,createdAt:new Date().toISOString(),cleanUrls:$.cleanUrls,changeOrigin:$.changeOrigin},$.registryDir,$.verbose)}catch(w){console.error(`failed to write registry entry: ${w.message}`),x0.exit(1)}if($.skipSpawn){console.log(`registered ${$.to} \u2192 ${$.from} (daemon spawn skipped)`);return}try{let w=await L6({rpxDir:$.rpxDir,verbose:$.verbose}),Y=w.spawned?"spawned":"attached to";console.log(`registered https://${$.to} \u2192 ${$.from} (${Y} daemon pid=${w.pid})`)}catch(w){console.error(`registered entry but daemon spawn failed: ${w.message}`),console.error("the entry remains in the registry; start the daemon manually with `rpx daemon:start`"),x0.exit(1)}});u0.command("unregister <id>","Remove a previously registered app from the rpx daemon").option("--registry-dir <path>","Override the registry dir (default ~/.stacks/rpx/registry.d)").option("--verbose","Enable verbose logging").action(async($,w)=>{if(!XY($))console.error(`invalid id: ${JSON.stringify($)}`),x0.exit(1);let Y=await eB($,w.registryDir,w.verbose);if(!Y){console.log(`no registry entry for id=${$}`);return}await k6($,w.registryDir,w.verbose),console.log(`unregistered ${Y.to} (id=${$})`)});u0.command("dns:reconcile","Remove stale macOS DNS overrides left by crashed dev sessions").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--verbose","Enable verbose logging").action(async($)=>{let w=$.rpxDir??w$();if(await d8(w)){console.log("rpx daemon is running \u2014 DNS overrides are managed by the daemon");return}await _6({rpxDir:w,verbose:$.verbose}),console.log("DNS reconcile complete")});u0.command("sites","List the on-demand sites rpx can boot (and which are currently live)").option("--roots <dirs>","Comma-separated roots to scan (overrides config; default ~/Code)").option("--registry-dir <path>","Override the registry dir (default ~/.stacks/rpx/registry.d)").option("--json","Emit machine-readable JSON").action(async($)=>{let w=await t6($.roots),Y=wz(w),A=await $j($.registryDir).catch(()=>[]),X=new Set(A.map((B)=>B.to)),J=Y.map((B)=>({host:B.host,dir:B.dir,command:B.command,source:B.source,live:X.has(B.host)}));if($.json){console.log(JSON.stringify(J,null,2));return}let U=w.roots??["~/Code"];if(J.length===0){console.log("no on-demand sites found"),console.log(`scanned roots: ${U.join(", ")}`),console.log("start the daemon with `rpx daemon:start --on-demand` to serve them");return}console.log(`on-demand sites (${J.length}) \u2014 scanned ${U.join(", ")}:`);for(let B of J)console.log(` ${B.live?"\u25CF":"\u25CB"} https://${B.host} ${B.live?"(live)":"(idle)"}`),console.log(` ${B.command} ${B.dir}`)});u0.command("logs <host>","Show an on-demand site's boot log (e.g. rpx logs myapp.localhost)").option("--rpx-dir <path>","Override the rpx state dir (default ~/.stacks/rpx)").option("--lines <n>","Show only the last N lines (default: all)").action(async($,w)=>{let{readFile:Y}=await import("fs/promises"),{join:A}=await import("path"),X=w.rpxDir??w$(),J=A(X,"sites",`${dA($.split(":")[0])}.log`),U;try{U=await Y(J,"utf8")}catch{console.log(`no log for ${$} (it may not have been booted yet) \u2014 looked in ${J}`);return}let B=w.lines===void 0?void 0:typeof w.lines==="string"?Number.parseInt(w.lines,10):w.lines,W=U.split(`
319
319
  `);x0.stdout.write((B&&B>0?W.slice(-B):W).join(`
320
- `))});b0.command("version","Show the version of the Reverse Proxy CLI").action(()=>{console.log(P6)});b0.version(P6);b0.help();b0.run();
320
+ `))});u0.command("version","Show the version of the Reverse Proxy CLI").action(()=>{console.log(r6)});u0.version(r6);u0.help();u0.run();