@stacksjs/rpx 0.11.14 → 0.11.16

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,250 +1,254 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
3
  #!/usr/bin/env bun
4
- import{createRequire as o9}from"node:module";var r9=Object.defineProperty;var a9=($)=>$;function s9($,w){this[$]=a9.bind(null,w)}var TW=($,w)=>{for(var A in w)r9($,A,{get:w[A],enumerable:!0,configurable:!0,set:s9.bind(w,A)})};var h$=($,w)=>()=>($&&(w=$($=0)),w);var u=o9(import.meta.url);import{existsSync as _W,statSync as DW}from"fs";import{existsSync as Jf,mkdirSync as FK,readdirSync as zK,readFileSync as Yf,writeFileSync as fK}from"fs";import{homedir as Sw}from"os";import{dirname as HK,resolve as s$}from"path";import tA from"process";import{existsSync as QW,statSync as kW}from"fs";import{existsSync as KU,mkdirSync as Uf,readdirSync as Zf,writeFileSync as Wf}from"fs";import{homedir as Ow}from"os";import{dirname as xW,resolve as D$}from"path";import fw from"process";import{join as Bf,relative as Ef,resolve as PW}from"path";import xA from"process";import{existsSync as hB,mkdirSync as yK,readdirSync as VK,writeFileSync as SK}from"fs";import{homedir as eY}from"os";import{dirname as _K,resolve as _$}from"path";import V1 from"process";import{join as jf,relative as Ff,resolve as bW}from"path";import PA from"process";import{existsSync as RB,mkdirSync as PK,readdirSync as bK,writeFileSync as iK}from"fs";import{dirname as cK,resolve as bA}from"path";import hU from"process";import{Buffer as a0}from"buffer";import{createCipheriv as zf,createDecipheriv as ff,randomBytes as $U}from"crypto";import{closeSync as wU,createReadStream as iW,createWriteStream as Gf,existsSync as AU,fsyncSync as uW,openSync as cW,writeFileSync as Tf}from"fs";import{access as Hf,constants as vW,mkdir as qf,readdir as TA,rename as mW,stat as Xw,unlink as HA,writeFile as JU}from"fs/promises";import{join as _w}from"path";import R$ from"process";import{pipeline as Kf}from"stream/promises";import{createGzip as nW}from"zlib";import Dw from"process";import V0 from"process";import{Buffer as C0}from"buffer";import{createCipheriv as hf,createDecipheriv as Rf,randomBytes as YU}from"crypto";import{closeSync as UU,createReadStream as dW,createWriteStream as Nf,existsSync as qA,fsyncSync as gW,openSync as lW,writeFileSync as Mf}from"fs";import{access as If,constants as pW,mkdir as Cf,readdir as KA,rename as tW,stat as Qw,unlink as hA,writeFile as ZU}from"fs/promises";import{isAbsolute as Lf,join as kw,resolve as yf}from"path";import S from"process";import{pipeline as Vf}from"stream/promises";import{createGzip as rW}from"zlib";import xw from"process";import S0 from"process";import RA from"process";import{existsSync as NA}from"fs";import{resolve as WU}from"path";import{existsSync as Sf}from"fs";import{existsSync as Of,readdirSync as Xf}from"fs";import{extname as BU,resolve as aW}from"path";import _f from"process";import{join as Df,relative as Qf,resolve as sW}from"path";import iA from"process";import{Buffer as L0}from"buffer";import{createCipheriv as kf,createDecipheriv as xf,randomBytes as EU}from"crypto";import{closeSync as jU,createReadStream as oW,createWriteStream as Pf,existsSync as MA,fsyncSync as eW,openSync as $B,writeFileSync as bf}from"fs";import{access as uf,constants as wB,mkdir as cf,readdir as IA,rename as AB,stat as Pw,unlink as CA,writeFile as FU}from"fs/promises";import{isAbsolute as vf,join as bw,resolve as mf}from"path";import O from"process";import{pipeline as nf}from"stream/promises";import{createGzip as JB}from"zlib";import iw from"process";import O0 from"process";import yA from"process";import{existsSync as VA}from"fs";import{resolve as qU}from"path";import{existsSync as E2}from"fs";class qB{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,J])=>A.timestamp.getTime()-J.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,J){if(!this.options.enabled)return;let Y=this.generateKey($,A),U=J??this.options.ttl,Z=this.estimateSize(w);this.cache.set(Y,{value:w,timestamp:new Date,ttl:U,hits:0,size:Z}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),J=this.cache.get(A);if(!J){this.totalMisses++;return}if(this.isExpired(J)){this.cache.delete(A),this.totalMisses++;return}return J.hits++,this.totalHits++,J.value}isFileModified($,w){try{if(!_W($))return!0;return DW($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,J){try{let Y=_W(A)?DW(A):null,U=Y?Y.mtime:new Date;this.set($,{value:w,fileTimestamp:U},A,J)}catch{this.set($,w,A,J)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((J,Y)=>J+Y.size,0),A=$.map((J)=>J.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let J=A;this.cache.set(w,{value:J.value,timestamp:new Date(J.timestamp),ttl:J.ttl,hits:J.hits,size:J.size})}}}class KB{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),Y=new Date;try{let U=await w(),Z=performance.now()-J;return this.recordMetric({operation:$,duration:Z,timestamp:Y,...A}),U}catch(U){let Z=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:Z,timestamp:Y,...A}),U}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((Y)=>Y.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((Y)=>Y.duration),J=A.reduce((Y,U)=>Y+U,0);return{count:w.length,averageDuration:J/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:J,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function lf($,w){this[$]=gf.bind(null,w)}class _U{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,J])=>A.timestamp.getTime()-J.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,J){if(!this.options.enabled)return;let Y=this.generateKey($,A),U=J??this.options.ttl,Z=this.estimateSize(w);this.cache.set(Y,{value:w,timestamp:new Date,ttl:U,hits:0,size:Z}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),J=this.cache.get(A);if(!J){this.totalMisses++;return}if(this.isExpired(J)){this.cache.delete(A),this.totalMisses++;return}return J.hits++,this.totalHits++,J.value}isFileModified($,w){try{if(!QW($))return!0;return kW($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,J){try{let Y=QW(A)?kW(A):null,U=Y?Y.mtime:new Date;this.set($,{value:w,fileTimestamp:U},A,J)}catch{this.set($,w,A,J)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((J,Y)=>J+Y.size,0),A=$.map((J)=>J.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let J=A;this.cache.set(w,{value:J.value,timestamp:new Date(J.timestamp),ttl:J.ttl,hits:J.hits,size:J.size})}}}class DU{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),Y=new Date;try{let U=await w(),Z=performance.now()-J;return this.recordMetric({operation:$,duration:Z,timestamp:Y,...A}),U}catch(U){let Z=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:Z,timestamp:Y,...A}),U}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((Y)=>Y.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((Y)=>Y.duration),J=A.reduce((Y,U)=>Y+U,0);return{count:w.length,averageDuration:J/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:J,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function rf($,w={}){let J=Object.keys(w).sort().map((Y)=>`${Y}:${w[Y]}`).join("|");return J?`${$}:${J}`:$}function af($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function sf($){return $.getStats().size*2}function QU($,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 J=[...w];for(let Y of $)if(r(Y)&&"name"in Y){if(!J.find((Z)=>r(Z)&&("name"in Z)&&Z.name===Y.name))J.push(Y)}else if(r(Y)&&"path"in Y){if(!J.find((Z)=>r(Z)&&("path"in Z)&&Z.path===Y.path))J.push(Y)}else if(!J.some((U)=>uA(U,Y)))J.push(Y);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}if(!r(w)||!r($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let Y=w[J];if(Y===null||Y===void 0)continue;else if(r(Y)&&r(A[J]))A[J]=QU(A[J],Y);else if(Array.isArray(Y)&&Array.isArray(A[J]))if(Y.length>0&&A[J].length>0&&r(Y[0])&&r(A[J][0])){let U=[...Y];for(let Z of A[J])if(r(Z)&&"name"in Z){if(!U.find((W)=>r(W)&&("name"in W)&&W.name===Z.name))U.push(Z)}else if(r(Z)&&"path"in Z){if(!U.find((W)=>r(W)&&("path"in W)&&W.path===Z.path))U.push(Z)}else if(!U.some((B)=>uA(B,Z)))U.push(Z);A[J]=U}else if(Y.every((U)=>typeof U==="string")&&A[J].every((U)=>typeof U==="string")){let U=[...Y];for(let Z of A[J])if(!U.includes(Z))U.push(Z);A[J]=U}else A[J]=Y;else A[J]=Y}return A}function uA($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!uA($[A],w[A]))return!1;return!0}if(r($)&&r(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!uA($[Y],w[Y]))return!1}return!0}return!1}function r($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function of($,w){if(!RB($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return QU(w,J)}catch{return null}}catch{return null}}async function ef({name:$="",cwd:w,defaultConfig:A}){let J=w||hU.cwd(),Y=[".ts",".js",".mjs",".cjs",".json"],U=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let Z of U)for(let B of Y){let W=bA(J,`${Z}${B}`),E=await of(W,A);if(E!==null)return E}try{let Z=bA(J,"package.json");if(RB(Z)){let W=(await import(Z))[$];if(W&&typeof W==="object"&&!Array.isArray(W))try{return QU(A,W)}catch{}}}catch{}return A}function $G($,w={}){let A=PA.cwd();while(A.includes("storage"))A=bW(A,"..");let J=bW(A,$||"");if(w?.relative)return Ff(PA.cwd(),J);return J}async function wG(){try{let $=await ef({name:"clarity",defaultConfig:XA,cwd:PA.cwd(),endpoint:"",headers:{}});return{...XA,...$}}catch{return XA}}function $$(){if(V0.env.NODE_ENV==="test"||V0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function AG(){if(V0.env.NODE_ENV==="test"||V0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof V0<"u"){let $=V0.type;if($==="renderer"||$==="worker")return!1;return!!(V0.versions&&(V0.versions.node||V0.versions.bun))}return!1}class MB{async format($){let w=await AG(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:Dw.pid,hostname:w(),environment:Dw.env.NODE_ENV||"development",platform:Dw.platform,version:Dw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Dw.env.NODE_ENV||Dw.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={...NU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new MB,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??R$.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{..._A,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{..._A};return{..._A,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:NU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}async writeToFile($){let A=(async()=>{let Y,U=0,Z=3,B=1000;while(U<Z)try{try{try{await Hf(this.config.logDirectory,vW.F_OK|vW.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await qf(this.config.logDirectory,{recursive:!0,mode:493});else if(E.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw E;else throw E}}catch(E){throw console.error("Debug: [writeToFile] Failed to create log directory:",E),E}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:a0.from($);try{if(!AU(this.currentLogFile))await JU(this.currentLogFile,"",{mode:420});if(Y=cW(this.currentLogFile,"a",420),Tf(Y,W,{flag:"a"}),uW(Y),Y!==void 0)wU(Y),Y=void 0;if((await Xw(this.currentLogFile)).size===0){if(await JU(this.currentLogFile,W,{flag:"w",mode:420}),(await Xw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let j=E;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(U<Z-1){let F=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Z}:`,F);let f=B*2**U;await new Promise((z)=>setTimeout(z,f)),U++;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(Y!==void 0)try{wU(Y)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(W){if(U===Z-1){let j=W,F=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),W}U++;let E=B*2**(U-1);await new Promise((j)=>setTimeout(j,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(J,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 _w(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 _w(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return _w(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if($$())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 A=typeof w.interval==="number"?w.interval:60,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},J)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),J=this.generateKey();this.currentKeyId=A,this.keys.set(A,J),this.encryptionKeys.set(A,{key:J,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),U=typeof w.maxKeys==="number"?w.maxKeys:1,Z=Math.max(1,U);if(Y.length>Z)for(let[B]of Y.slice(Z))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return $U(16).toString("hex")}generateKey(){return $U(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(),A=$U(16),J=zf("aes-256-gcm",w,A),Y=a0.concat([J.update($,"utf8"),J.final()]),U=J.getAuthTag();return{encrypted:a0.concat([A,Y,U]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=nW(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(a0.from(a0.concat(Y)))),J.on("error",A),J.write($),J.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($$())return;let $=await Xw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await TA(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await Xw(A).catch(()=>null))try{if(await mW(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await HA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await Xw(A).catch(()=>null))await mW(A,U)}if(this.currentLogFile=J,w.maxFiles){let U=(await TA(this.config.logDirectory)).filter((Z)=>Z.startsWith(this.name)).sort((Z,B)=>B.localeCompare(Z));for(let Z of U.slice(w.maxFiles))await HA(_w(this.config.logDirectory,Z))}}}async compressLogFile($,w){let A=iW($),J=Gf(w),Y=nW();await Kf(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);await this.writeToFile(J),console.log(J)}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 A={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(A)}}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()})),AU(this.currentLogFile))try{let $=cW(this.currentLogFile,"r+");uW($),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(!$$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await TA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await HA(_w(this.config.logDirectory,A))}catch(J){console.error(`Failed to delete temp file ${A}:`,J)}}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?g.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=R$.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${g.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}async log($,w,...A){let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);if(this.fancy&&!$$()){let E=DB[$],j=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:g.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.error(F);break;case"success":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:g.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.error(F),B){let f=B.split(`
5
- `);for(let z of f)if(z.trim()&&!z.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:g.gray(` ${z}`),level:$,showTimestamp:!1}))}break}}else if(!$$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${U} ${this.environment}.${$.toUpperCase()}: ${Z}
6
- `;if(B)W+=`${B}
7
- `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!$$()){let A=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:g.blue("◐"),tag:A,message:`${g.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),E=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
8
- `,E=E.replace(this.ANSI_PATTERN,""),this.fancy&&!$$()){let j=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:g.green("✓"),tag:j,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!$$())console.error(E.trim());await this.writeToFile(E)}}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}:${$}`,A=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(A),A}createReadStream(){if($$())throw Error("createReadStream is not supported in browser environments");if(!AU(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return iW(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 A=this.keys.get(this.currentKeyId);try{let J=a0.isBuffer($)?$:a0.from($,"base64"),Y=J.slice(0,16),U=J.slice(-16),Z=J.slice(16,-16),B=ff("aes-256-gcm",A,Y);return B.setAuthTag(U),a0.concat([B.update(Z),B.final()]).toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return $$()}isServerMode(){return!$$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w);if(this.fancy&&!$$()){let U=$.split(`
9
- `),Z=Math.max(...U.map((j)=>j.length))+2,B=`┌${"─".repeat(Z)}┐`,W=`└${"─".repeat(Z)}┘`,E=U.map((j)=>{let F=" ".repeat(Z-j.length-2);return`│ ${j}${F} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:A,message:g.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:A,message:g.cyan(B)})),E.forEach((j)=>console.error(this.formatConsoleMessage({timestamp:A,message:g.cyan(j),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:g.cyan(W),showTimestamp:!1}))}else if(!$$())console.error(`${J} ${this.environment}.INFO: [BOX] ${$}`);let Y=`${J} ${this.environment}.INFO: [BOX] ${$}
10
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(Y)}async prompt($){if($$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${g.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();R$.stdin.removeListener("data",A);try{if(typeof R$.stdin.setRawMode==="function")R$.stdin.setRawMode(!1)}catch{}R$.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof R$.stdin.setRawMode==="function")R$.stdin.setRawMode(!0)}catch{}R$.stdin.resume(),R$.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let Z=/%([sdijfo%])/g,B=0;if(A=$.replace(Z,(W,E)=>{if(E==="%")return"%";if(B>=w.length)return W;let j=w[B++];switch(E){case"s":return String(j);case"d":case"i":return Number(j).toString();case"j":case"o":return JSON.stringify(j,null,2);default:return W}}),B<w.length)A+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}if(this.fancy&&!$$()){let Z=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",B=g.blue("◐");console.error(`${B} ${Z} ${g.cyan(A)}`)}let U=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
11
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(U)}progress($,w=""){if(!this.enabled||!this.fancy||$$()||$<=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 A=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:A,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(Z,B)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||$$())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,Z)),B!==void 0)this.activeProgressBar.message=B;let W=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,W)},finish:(Z)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||$$())return;if(this.activeProgressBar.current=this.activeProgressBar.total,Z!==void 0)this.activeProgressBar.message=Z;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(Z,B="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||$$())return;R$.stdout.write(`${"\r".padEnd(R$.stdout.columns||80)}\r`),this.log(B,Z),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||$$()||!R$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=g.green("━".repeat(J)),Z=g.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=w||A===100?g.green("✓"):g.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${g.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=R$.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,R$.stdout.write($.lastRenderedLine),w)R$.stdout.write(`
12
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||$$()||!R$.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if($$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await TA(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let U=_w(this.config.logDirectory,J);if($.before)try{if((await Xw(U)).mtime>=$.before)continue}catch(Z){console.error(`Failed to get stats for file ${U}:`,Z);continue}A.push(U)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await HA(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function OA($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&c(w[0])&&"id"in w[0]&&w[0].id===3&&c(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(c(w)&&c($)&&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(c($)&&"arr"in $&&Array.isArray($.arr)&&c(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&c(w[0])&&c($[0])){let J=[...w];for(let Y of $)if(c(Y)&&"name"in Y){if(!J.find((Z)=>c(Z)&&("name"in Z)&&Z.name===Y.name))J.push(Y)}else if(c(Y)&&"path"in Y){if(!J.find((Z)=>c(Z)&&("path"in Z)&&Z.path===Y.path))J.push(Y)}else if(!J.some((U)=>vA(U,Y)))J.push(Y);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}if(!c(w)||!c($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let Y=w[J];if(Y===null||Y===void 0)continue;else if(c(Y)&&c(A[J]))A[J]=OA(A[J],Y);else if(Array.isArray(Y)&&Array.isArray(A[J]))if(Y.length>0&&A[J].length>0&&c(Y[0])&&c(A[J][0])){let U=[...Y];for(let Z of A[J])if(c(Z)&&"name"in Z){if(!U.find((W)=>c(W)&&("name"in W)&&W.name===Z.name))U.push(Z)}else if(c(Z)&&"path"in Z){if(!U.find((W)=>c(W)&&("path"in W)&&W.path===Z.path))U.push(Z)}else if(!U.some((B)=>vA(B,Z)))U.push(Z);A[J]=U}else if(Y.every((U)=>typeof U==="string")&&A[J].every((U)=>typeof U==="string")){let U=[...Y];for(let Z of A[J])if(!U.includes(Z))U.push(Z);A[J]=U}else A[J]=Y;else A[J]=Y}return A}function kU($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:OA($,w);if(Array.isArray($))return A==="replace"?w:OA($,w);if(!c(w)||!c($))return w;let J={...$};for(let Y of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,Y))continue;let U=w[Y],Z=J[Y];if(U===null||U===void 0)continue;if(Array.isArray(U)||Array.isArray(Z))if(A==="replace")J[Y]=U;else J[Y]=OA(Z,U);else if(c(U)&&c(Z))J[Y]=kU(Z,U,A);else J[Y]=U}return J}function vA($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!vA($[A],w[A]))return!1;return!0}if(c($)&&c(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!vA($[Y],w[Y]))return!1}return!0}return!1}function c($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function LA($,w,A="replace"){if(!hB($))return null;try{let J=await import($),Y=J.default||J;if(typeof Y!=="object"||Y===null||Array.isArray(Y))return null;try{return kU(w,Y,A)}catch{return null}}catch{return null}}function JG($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),Y={...w};function U(Z,B=[]){let W={...Z};for(let[E,j]of Object.entries(Z)){let F=[...B,E],f=(T)=>T.replace(/([A-Z])/g,"_$1").toUpperCase(),z=`${J}_${F.map(f).join("_")}`,H=`${J}_${F.map((T)=>T.toUpperCase()).join("_")}`;if(A)M$.info(`Checking environment variable ${z} for config ${$}.${F.join(".")}`);if(typeof j==="object"&&j!==null&&!Array.isArray(j))W[E]=U(j,F);else{let T=V1.env[z]||V1.env[H];if(T!==void 0){if(A)M$.info(`Using environment variable ${T?z:H} for config ${$}.${F.join(".")}`);if(typeof j==="number")W[E]=Number(T);else if(typeof j==="boolean")W[E]=T.toLowerCase()==="true";else if(Array.isArray(j))try{let q=JSON.parse(T);if(Array.isArray(q))W[E]=q;else W[E]=T.split(",").map((K)=>K.trim())}catch{W[E]=T.split(",").map((q)=>q.trim())}else W[E]=T}}}return W}return U(Y)}async function YG({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:Y,verbose:U=!1,checkEnv:Z=!0,arrayStrategy:B="replace"}){let W=Z&&typeof Y==="object"&&Y!==null&&!Array.isArray(Y)?JG($,Y,U):Y,E=A||V1.cwd(),j=[".ts",".js",".mjs",".cjs",".json"];if(U)M$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let F=[$,`.${$}`].filter(Boolean),f=[`${$}.config`,`.${$}.config`].filter(Boolean),z=w?[w,`.${w}`]:[],H=w?[`${w}.config`,`.${w}.config`]:[],T=Array.from(new Set([E,_$(E,"config"),_$(E,".config"),J?_$(E,J):void 0].filter(Boolean)));for(let q of T){if(U)M$.info(`Searching for configuration in: ${q}`);let h=[_$(E,"config"),_$(E,".config")].concat(J?[_$(E,J)]:[]).includes(q)?[...F,...f,...z,...H]:[...f,...F,...H,...z];for(let I of h)for(let N of j){let M=_$(q,`${I}${N}`),V=await LA(M,W,B);if(V!==null){if(U)M$.success(`Configuration loaded from: ${M}`);return V}}}if($){let q=_$(eY(),".config",$),K=["config",`${$}.config`];if(w)K.push(`${w}.config`);if(U)M$.info(`Checking user config directory: ${q}`);for(let h of K)for(let I of j){let N=_$(q,`${h}${I}`),M=await LA(N,W,B);if(M!==null){if(U)M$.success(`Configuration loaded from user config directory: ${N}`);return M}}}if($){let q=_$(eY(),".config"),K=[`.${$}.config`];if(w)K.push(`.${w}.config`);if(U)M$.info(`Checking user config directory for dotfile configs: ${q}`);for(let h of K)for(let I of j){let N=_$(q,`${h}${I}`),M=await LA(N,W,B);if(M!==null){if(U)M$.success(`Configuration loaded from user config directory dotfile: ${N}`);return M}}}if($){let q=eY(),K=[`.${$}.config`,`.${$}`];if(w)K.push(`.${w}.config`),K.push(`.${w}`);if(U)M$.info(`Checking user home directory for dotfile configs: ${q}`);for(let h of K)for(let I of j){let N=_$(q,`${h}${I}`),M=await LA(N,W,B);if(M!==null){if(U)M$.success(`Configuration loaded from user home directory: ${N}`);return M}}}try{let q=_$(E,"package.json");if(hB(q)){let K=await import(q),h=K[$];if(!h&&w){if(h=K[w],h&&U)M$.success(`Using alias "${w}" configuration from package.json`)}if(h&&typeof h==="object"&&!Array.isArray(h))try{if(U)M$.success(`Configuration loaded from package.json: ${h===K[$]?$:w}`);return kU(W,h,B)}catch(I){if(U)M$.warn("Failed to merge package.json config:",I)}}}catch(q){if(U)M$.warn("Failed to load package.json:",q)}if(U)M$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function UG($,w={}){let A=xA.cwd();while(A.includes("storage"))A=PW(A,"..");let J=PW(A,$||"");if(w?.relative)return Ef(xA.cwd(),J);return J}async function ZG(){try{let $=await YG({name:"clarity",alias:"logging",defaultConfig:DA,cwd:xA.cwd()});return{...DA,...$||{}}}catch{return DA}}function Z$(){if(S0.env.NODE_ENV==="test"||S0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function WG(){if(S0.env.NODE_ENV==="test"||S0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof S0<"u"){let $=S0.type;if($==="renderer"||$==="worker")return!1;return!!(S0.versions&&(S0.versions.node||S0.versions.bun))}return!1}class IB{async format($){let w=await WG(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:xw.pid,hostname:w(),environment:xw.env.NODE_ENV||"development",platform:xw.platform,version:xw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:xw.env.NODE_ENV||xw.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={...MU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new IB,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??S.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}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:MU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!Z$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let Y,U=0,Z=3,B=1000;while(U<Z)try{try{try{await If(this.config.logDirectory,pW.F_OK|pW.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await Cf(this.config.logDirectory,{recursive:!0,mode:493});else if(E.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw E;else throw E}}catch(E){throw console.error("Debug: [writeToFile] Failed to create log directory:",E),E}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:C0.from($);try{if(!qA(this.currentLogFile))await ZU(this.currentLogFile,"",{mode:420});if(Y=lW(this.currentLogFile,"a",420),Mf(Y,W,{flag:"a"}),gW(Y),Y!==void 0)UU(Y),Y=void 0;if((await Qw(this.currentLogFile)).size===0){if(await ZU(this.currentLogFile,W,{flag:"w",mode:420}),(await Qw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let j=E;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(U<Z-1){let F=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Z}:`,F);let f=B*2**U;await new Promise((z)=>setTimeout(z,f)),U++;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(Y!==void 0)try{UU(Y)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(W){if(U===Z-1){let j=W,F=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),W}U++;let E=B*2**(U-1);await new Promise((j)=>setTimeout(j,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(J,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 kw(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 kw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return kw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(Z$())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 A=typeof w.interval==="number"?w.interval:60,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},J)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),J=this.generateKey();this.currentKeyId=A,this.keys.set(A,J),this.encryptionKeys.set(A,{key:J,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),U=typeof w.maxKeys==="number"?w.maxKeys:1,Z=Math.max(1,U);if(Y.length>Z)for(let[B]of Y.slice(Z))this.encryptionKeys.delete(B),this.keys.delete(B)}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(),A=YU(16),J=hf("aes-256-gcm",w,A),Y=C0.isBuffer($)?$:C0.from($,"utf8"),U=J.update(Y),Z=J.final(),B=U.length+Z.length,W=J.getAuthTag(),E=C0.allocUnsafe(16+B+16);return A.copy(E,0),U.copy(E,16),Z.copy(E,16+U.length),W.copy(E,16+B),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=rW(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(C0.from(C0.concat(Y)))),J.on("error",A),J.write($),J.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(Z$())return;if(!this.shouldWriteToFile())return;let $=await Qw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await KA(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await Qw(A).catch(()=>null))try{if(await tW(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await hA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.1`;await ZU(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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await Qw(A).catch(()=>null))await tW(A,U)}if(this.currentLogFile=J,w.maxFiles){let U=(await KA(this.config.logDirectory)).filter((Z)=>Z.startsWith(this.name)).sort((Z,B)=>B.localeCompare(Z));for(let Z of U.slice(w.maxFiles))await hA(kw(this.config.logDirectory,Z))}}}async compressLogFile($,w){let A=dW($),J=Nf(w),Y=rW();await Vf(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(J);console.log(J)}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()})),qA(this.currentLogFile))try{let $=lW(this.currentLogFile,"r+");gW($),UU($)}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(!Z$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await KA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await hA(kw(this.config.logDirectory,A))}catch(J){console.error(`Failed to delete temp file ${A}:`,J)}}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()?D.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||Z$())return!1;let $=typeof S.env.NO_COLOR<"u",w=S.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof S.stderr<"u"&&S.stderr.isTTY||typeof S.stdout<"u"&&S.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=S.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${D.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,Y)=>{let U=D.underline(D.blue(J)),Z=this.toAbsoluteFilePath(Y);if(Z&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(Z)}`,W="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${B}\x1B\\${U}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${Y}\x1B\\${U}\x1B]8;;\x1B\\`;return U}),w=w.replace(/`([^`]+)`/g,(A,J)=>D.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>D.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>D.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>D.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>D.strikethrough(J)),w}supportsHyperlinks(){if(Z$())return!1;let $=S.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 A=S.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(Lf(w)||w.startsWith("./")||w.startsWith("../"))w=yf(w);else return null;return qA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);let{consoleText:W,fileText:E}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":QB[$],f=this.options.showTags!==!1&&this.name?D.gray(this.formatTag(this.name)):"",z;switch($){case"debug":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:D.gray(W),level:$}),console.error(z);break;case"info":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"success":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:D.green(W),level:$}),console.error(z);break;case"warning":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"error":if(z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.error(z),B){let H=B.split(`
13
- `);for(let T of H)if(T.trim()&&!T.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:D.gray(` ${T}`),level:$,showTimestamp:!1}))}break}}else if(!Z$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}if(!this.shouldLog($))return;let j=`${U} ${this.environment}.${$.toUpperCase()}: ${E}
14
- `;if(B)j+=`${B}
15
- `;if(j=j.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(j)}progress($,w=""){let A={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return A;let J=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:J,lastRenderedLine:""},this.shouldStyleConsole()&&!Z$()&&S.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()&&!Z$()&&S.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!Z$()&&S.stdout.isTTY)S.stdout.write(`
16
- `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!Z$()&&S.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?D.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:this.options.showIcons===!1?"":D.blue("◐"),tag:A,message:`${D.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),E=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
17
- `,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=this.options.showTags!==!1&&this.name?D.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":D.green("✓"),tag:j,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!Z$())console.error(E.trim());if(this.shouldWriteToFile())await this.writeToFile(E)}}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}:${$}`,A=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(A),A}createReadStream(){if(Z$())throw Error("createReadStream is not supported in browser environments");if(!qA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return dW(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 A=this.keys.get(this.currentKeyId);try{let J=C0.isBuffer($)?$:C0.from($,"base64"),Y=J.subarray(0,16),U=J.subarray(J.length-16),Z=J.subarray(16,J.length-16),B=Rf("aes-256-gcm",A,Y);B.setAuthTag(U);let W=B.update(Z),E=B.final(),j=W.length+E.length,F=C0.allocUnsafe(j);return W.copy(F,0),E.copy(F,W.length),F.toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return Z$()}isServerMode(){return!Z$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w),{consoleText:Y,fileText:U}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=Y.split(`
18
- `),W=Math.max(...B.map((f)=>f.length))+2,E=`┌${"─".repeat(W)}┐`,j=`└${"─".repeat(W)}┘`,F=B.map((f)=>{return this.formatConsoleMessage({timestamp:A,message:D.cyan(f),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:D.cyan(E),showTimestamp:!1})),F.forEach((f)=>console.error(f)),console.error(this.formatConsoleMessage({timestamp:A,message:D.cyan(j),showTimestamp:!1}))}else if(!Z$())console.error(`${J} ${this.environment}.INFO: [BOX] ${U}`);let Z=`${J} ${this.environment}.INFO: [BOX] ${U}
19
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Z)}async prompt($){if(Z$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${D.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();S.stdin.removeListener("data",A);try{if(typeof S.stdin.setRawMode==="function")S.stdin.setRawMode(!1)}catch{}S.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof S.stdin.setRawMode==="function")S.stdin.setRawMode(!0)}catch{}S.stdin.resume(),S.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,E=0;if(A=$.replace(W,(j,F)=>{if(F==="%")return"%";if(E>=w.length)return j;let f=w[E++];switch(F){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 j}}),E<w.length)A+=` ${w.slice(E).map((j)=>typeof j==="object"?JSON.stringify(j,null,2):String(j)).join(" ")}`}let{consoleText:J,fileText:Y}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?D.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${D.blue("◐")} `;console.error(`${E}${W} ${D.cyan(J)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
20
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!S.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=D.green("━".repeat(J)),Z=D.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=this.options.showIcons===!1?"":w||A===100?D.green("✓"):D.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${D.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=S.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,S.stdout.write($.lastRenderedLine),w)S.stdout.write(`
21
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||Z$()||!S.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(Z$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await KA(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let U=kw(this.config.logDirectory,J);if($.before)try{if((await Qw(U)).mtime>=$.before)continue}catch(Z){console.error(`Failed to get stats for file ${U}:`,Z);continue}A.push(U)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await hA(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function CB($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:Y=()=>!0,fallback:U}=w,Z=Error("Unknown error occurred");for(let B=0;B<=A;B++)try{return await $()}catch(W){if(Z=W instanceof Error?W:Error(String(W)),B===A||!Y(Z))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(U!==void 0)return U;throw Z instanceof Error?Z:Error(`Unknown error: ${String(Z)}`)}function LB($){return $ instanceof l$}function BG($){return $ instanceof nA}function EG($){if(LB($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((A)=>$.message.toLowerCase().includes(A.toLowerCase()))}class rA{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,A={}){let{prefix:J,useCamelCase:Y=!0,useBackwardCompatibility:U=!0,customParsers:Z={},verbose:B=!1,trackPerformance:W=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let j=J||this.generateEnvPrefix($),F={...w};return this.processObject(F,[],j,{useCamelCase:Y,useBackwardCompatibility:U,customParsers:Z,verbose:B,configName:$}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return X1.track("applyEnvironmentVariables",E,{configName:$});return E()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=Z.map((j)=>this.formatEnvKey(j,J.useCamelCase)),W=`${A}_${B.join("_")}`,E=J.useBackwardCompatibility?`${A}_${Z.map((j)=>j.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.processObject(U,Z,A,J);else{let j=RA.env[W]||(E?RA.env[E]:void 0);if(j!==void 0){if(J.verbose){let F=RA.env[W]?W:E}try{$[Y]=this.parseEnvironmentValue(j,typeof U,W,J.customParsers,J.configName)}catch(F){if(F instanceof dA)throw F;throw s0.envVar(W,j,typeof U,J.configName)}}}}}parseEnvironmentValue($,w,A,J,Y){for(let[U,Z]of Object.entries(J))try{return Z($)}catch{continue}for(let U of this.defaultParsers)if(U.canParse($,w))try{return U.parse($)}catch{throw s0.envVar(A,$,`${w} (via ${U.name} parser)`,Y)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,Y]of Object.entries(RA.env))if(J.startsWith(A)&&Y!==void 0)w[J]=Y;return w}validateEnvironmentVariable($,w,A){let J=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))J.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(Y){J.push(`Cannot parse value "${w}" as ${A}: ${Y}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:Y="text"}=A,U=J||this.generateEnvPrefix($),Z=[];switch(this.extractEnvVarInfo(w,[],U,Z),Y){case"markdown":return this.formatAsMarkdown(Z,$);case"json":return JSON.stringify(Z,null,2);default:return this.formatAsText(Z,$)}}extractEnvVarInfo($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=`${A}_${Z.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.extractEnvVarInfo(U,Z,A,J);else J.push({key:B,type:Array.isArray(U)?"array":typeof U,description:`Configuration for ${Z.join(".")}`,example:this.generateExample(U)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
22
-
23
- `;for(let J of $)A+=`${J.key}
24
- `,A+=` Type: ${J.type}
25
- `,A+=` Description: ${J.description}
26
- `,A+=` Example: ${J.example}
4
+ import{createRequire as dF}from"node:module";var nF=Object.defineProperty;var vF=($)=>$;function mF($,w){this[$]=vF.bind(null,w)}var dJ=($,w)=>{for(var A in w)nF($,A,{get:w[A],enumerable:!0,configurable:!0,set:mF.bind(w,A)})};var E$=($,w)=>()=>($&&(w=$($=0)),w);var u=dF(import.meta.url);import{existsSync as UW,statSync as JW}from"fs";import{existsSync as rz,mkdirSync as Nh,readdirSync as yh,readFileSync as az,writeFileSync as Mh}from"fs";import{homedir as xw}from"os";import{dirname as Sh,resolve as $0}from"path";import UY from"process";import{existsSync as WW,statSync as BW}from"fs";import{existsSync as PX,mkdirSync as sz,readdirSync as oz,writeFileSync as ez}from"fs";import{homedir as Pw}from"os";import{dirname as EW,resolve as x$}from"path";import Rw from"process";import{join as $2,relative as w2,resolve as jW}from"path";import tA from"process";import{existsSync as pW,mkdirSync as Ph,readdirSync as ih,writeFileSync as bh}from"fs";import{homedir as KX}from"os";import{dirname as nh,resolve as Z$}from"path";import x1 from"process";import{join as A2,relative as Y2,resolve as TW}from"path";import pA from"process";import{existsSync as rW,mkdirSync as gh,readdirSync as th,writeFileSync as ph}from"fs";import{dirname as ah,resolve as rA}from"path";import iX from"process";import{Buffer as $w}from"buffer";import{createCipheriv as f2,createDecipheriv as X2,randomBytes as RX}from"crypto";import{closeSync as hX,createReadStream as FW,createWriteStream as U2,existsSync as qX,fsyncSync as zW,openSync as GW,writeFileSync as J2}from"fs";import{access as W2,constants as HW,mkdir as B2,readdir as LA,rename as KW,stat as iw,unlink as OA,writeFile as NX}from"fs/promises";import{join as bw}from"path";import I$ from"process";import{pipeline as E2}from"stream/promises";import{createGzip as RW}from"zlib";import cw from"process";import Q0 from"process";import{Buffer as L0}from"buffer";import{createCipheriv as j2,createDecipheriv as T2,randomBytes as yX}from"crypto";import{closeSync as MX,createReadStream as hW,createWriteStream as F2,existsSync as VA,fsyncSync as qW,openSync as NW,writeFileSync as z2}from"fs";import{access as G2,constants as yW,mkdir as H2,readdir as QA,rename as MW,stat as uw,unlink as _A,writeFile as IX}from"fs/promises";import{isAbsolute as K2,join as nw,resolve as R2}from"path";import V from"process";import{pipeline as h2}from"stream/promises";import{createGzip as IW}from"zlib";import vw from"process";import _0 from"process";import DA from"process";import{existsSync as kA}from"fs";import{resolve as CX}from"path";import{existsSync as q2}from"fs";import{existsSync as N2,readdirSync as y2}from"fs";import{extname as SX,resolve as CW}from"path";import M2 from"process";import{join as I2,relative as C2,resolve as SW}from"path";import aA from"process";import{Buffer as O0}from"buffer";import{createCipheriv as S2,createDecipheriv as L2,randomBytes as LX}from"crypto";import{closeSync as OX,createReadStream as LW,createWriteStream as O2,existsSync as ZA,fsyncSync as OW,openSync as VW,writeFileSync as V2}from"fs";import{access as Q2,constants as QW,mkdir as _2,readdir as xA,rename as _W,stat as mw,unlink as PA,writeFile as VX}from"fs/promises";import{isAbsolute as D2,join as dw,resolve as k2}from"path";import Q from"process";import{pipeline as Z2}from"stream/promises";import{createGzip as DW}from"zlib";import lw from"process";import D0 from"process";import bA from"process";import{existsSync as cA}from"fs";import{resolve as xX}from"path";import{existsSync as $H}from"fs";class gW{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,Y])=>A.timestamp.getTime()-Y.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,Y){if(!this.options.enabled)return;let f=this.generateKey($,A),X=Y??this.options.ttl,U=this.estimateSize(w);this.cache.set(f,{value:w,timestamp:new Date,ttl:X,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),Y=this.cache.get(A);if(!Y){this.totalMisses++;return}if(this.isExpired(Y)){this.cache.delete(A),this.totalMisses++;return}return Y.hits++,this.totalHits++,Y.value}isFileModified($,w){try{if(!UW($))return!0;return JW($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,Y){try{let f=UW(A)?JW(A):null,X=f?f.mtime:new Date;this.set($,{value:w,fileTimestamp:X},A,Y)}catch{this.set($,w,A,Y)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((Y,f)=>Y+f.size,0),A=$.map((Y)=>Y.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let Y=A;this.cache.set(w,{value:Y.value,timestamp:new Date(Y.timestamp),ttl:Y.ttl,hits:Y.hits,size:Y.size})}}}class tW{metrics=[];maxMetrics=1000;async track($,w,A={}){let Y=performance.now(),f=new Date;try{let X=await w(),U=performance.now()-Y;return this.recordMetric({operation:$,duration:U,timestamp:f,...A}),X}catch(X){let U=performance.now()-Y;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:f,...A}),X}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((f)=>f.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((f)=>f.duration),Y=A.reduce((f,X)=>f+X,0);return{count:w.length,averageDuration:Y/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:Y,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function i2($,w){this[$]=P2.bind(null,w)}class rX{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,Y])=>A.timestamp.getTime()-Y.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,Y){if(!this.options.enabled)return;let f=this.generateKey($,A),X=Y??this.options.ttl,U=this.estimateSize(w);this.cache.set(f,{value:w,timestamp:new Date,ttl:X,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),Y=this.cache.get(A);if(!Y){this.totalMisses++;return}if(this.isExpired(Y)){this.cache.delete(A),this.totalMisses++;return}return Y.hits++,this.totalHits++,Y.value}isFileModified($,w){try{if(!WW($))return!0;return BW($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,Y){try{let f=WW(A)?BW(A):null,X=f?f.mtime:new Date;this.set($,{value:w,fileTimestamp:X},A,Y)}catch{this.set($,w,A,Y)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((Y,f)=>Y+f.size,0),A=$.map((Y)=>Y.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let Y=A;this.cache.set(w,{value:Y.value,timestamp:new Date(Y.timestamp),ttl:Y.ttl,hits:Y.hits,size:Y.size})}}}class aX{metrics=[];maxMetrics=1000;async track($,w,A={}){let Y=performance.now(),f=new Date;try{let X=await w(),U=performance.now()-Y;return this.recordMetric({operation:$,duration:U,timestamp:f,...A}),X}catch(X){let U=performance.now()-Y;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:f,...A}),X}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((f)=>f.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((f)=>f.duration),Y=A.reduce((f,X)=>f+X,0);return{count:w.length,averageDuration:Y/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:Y,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function u2($,w={}){let Y=Object.keys(w).sort().map((f)=>`${f}:${w[f]}`).join("|");return Y?`${$}:${Y}`:$}function n2($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function v2($){return $.getStats().size*2}function sX($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&s(w[0])&&"id"in w[0]&&w[0].id===3&&s(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(s(w)&&s($)&&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(s($)&&"arr"in $&&Array.isArray($.arr)&&s(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&s(w[0])&&s($[0])){let Y=[...w];for(let f of $)if(s(f)&&"name"in f){if(!Y.find((U)=>s(U)&&("name"in U)&&U.name===f.name))Y.push(f)}else if(s(f)&&"path"in f){if(!Y.find((U)=>s(U)&&("path"in U)&&U.path===f.path))Y.push(f)}else if(!Y.some((X)=>sA(X,f)))Y.push(f);return Y}if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}if(!s(w)||!s($))return w;let A={...$};for(let Y in w)if(Object.prototype.hasOwnProperty.call(w,Y)){let f=w[Y];if(f===null||f===void 0)continue;else if(s(f)&&s(A[Y]))A[Y]=sX(A[Y],f);else if(Array.isArray(f)&&Array.isArray(A[Y]))if(f.length>0&&A[Y].length>0&&s(f[0])&&s(A[Y][0])){let X=[...f];for(let U of A[Y])if(s(U)&&"name"in U){if(!X.find((J)=>s(J)&&("name"in J)&&J.name===U.name))X.push(U)}else if(s(U)&&"path"in U){if(!X.find((J)=>s(J)&&("path"in J)&&J.path===U.path))X.push(U)}else if(!X.some((W)=>sA(W,U)))X.push(U);A[Y]=X}else if(f.every((X)=>typeof X==="string")&&A[Y].every((X)=>typeof X==="string")){let X=[...f];for(let U of A[Y])if(!X.includes(U))X.push(U);A[Y]=X}else A[Y]=f;else A[Y]=f}return A}function sA($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!sA($[A],w[A]))return!1;return!0}if(s($)&&s(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!sA($[f],w[f]))return!1}return!0}return!1}function s($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function m2($,w){if(!rW($))return null;try{let A=await import($),Y=A.default||A;if(typeof Y!=="object"||Y===null||Array.isArray(Y))return null;try{return sX(w,Y)}catch{return null}}catch{return null}}async function d2({name:$="",cwd:w,defaultConfig:A}){let Y=w||iX.cwd(),f=[".ts",".js",".mjs",".cjs",".json"],X=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of X)for(let W of f){let J=rA(Y,`${U}${W}`),B=await m2(J,A);if(B!==null)return B}try{let U=rA(Y,"package.json");if(rW(U)){let J=(await import(U))[$];if(J&&typeof J==="object"&&!Array.isArray(J))try{return sX(A,J)}catch{}}}catch{}return A}function l2($,w={}){let A=pA.cwd();while(A.includes("storage"))A=TW(A,"..");let Y=TW(A,$||"");if(w?.relative)return Y2(pA.cwd(),Y);return Y}async function g2(){try{let $=await d2({name:"clarity",defaultConfig:vA,cwd:pA.cwd(),endpoint:"",headers:{}});return{...vA,...$}}catch{return vA}}function Y$(){if(Q0.env.NODE_ENV==="test"||Q0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function t2(){if(Q0.env.NODE_ENV==="test"||Q0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof Q0<"u"){let $=Q0.type;if($==="renderer"||$==="worker")return!1;return!!(Q0.versions&&(Q0.versions.node||Q0.versions.bun))}return!1}class sW{async format($){let w=await t2(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:cw.pid,hostname:w(),environment:cw.env.NODE_ENV||"development",platform:cw.platform,version:cw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:cw.env.NODE_ENV||cw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class oA{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={...cX},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new sW,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??I$.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...mA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...mA};return{...mA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:cX.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}async writeToFile($){let A=(async()=>{let f,X=0,U=3,W=1000;while(X<U)try{try{try{await W2(this.config.logDirectory,HW.F_OK|HW.W_OK)}catch(B){if(B instanceof Error&&"code"in B)if(B.code==="ENOENT")await B2(this.config.logDirectory,{recursive:!0,mode:493});else if(B.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw B;else throw B}}catch(B){throw console.error("Debug: [writeToFile] Failed to create log directory:",B),B}let J=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:$w.from($);try{if(!qX(this.currentLogFile))await NX(this.currentLogFile,"",{mode:420});if(f=GW(this.currentLogFile,"a",420),J2(f,J,{flag:"a"}),zW(f),f!==void 0)hX(f),f=void 0;if((await iw(this.currentLogFile)).size===0){if(await NX(this.currentLogFile,J,{flag:"w",mode:420}),(await iw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(B){let E=B;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(X<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${U}:`,j);let T=W*2**X;await new Promise((F)=>setTimeout(F,T)),X++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(f!==void 0)try{hX(f)}catch(B){console.error("Debug: [writeToFile] Error closing file descriptor:",B)}}}catch(J){if(X===U-1){let E=J,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),J}X++;let B=W*2**(X-1);await new Promise((E)=>setTimeout(E,B))}})();this.pendingOperations.push(A);let Y=this.pendingOperations.length-1;try{await A}catch(f){throw console.error("Debug: [writeToFile] Error in operation:",f),f}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 bw(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 bw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return bw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(Y$())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 A=typeof w.interval==="number"?w.interval:60,Y=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((f)=>{console.error("Error rotating keys:",f)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=A,this.keys.set(A,Y),this.encryptionKeys.set(A,{key:Y,createdAt:new Date});let f=Array.from(this.encryptionKeys.entries()).sort(([,W],[,J])=>J.createdAt.getTime()-W.createdAt.getTime()),X=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,X);if(f.length>U)for(let[W]of f.slice(U))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return RX(16).toString("hex")}generateKey(){return RX(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(),A=RX(16),Y=f2("aes-256-gcm",w,A),f=$w.concat([Y.update($,"utf8"),Y.final()]),X=Y.getAuthTag();return{encrypted:$w.concat([A,f,X]),iv:A}}async compressData($){return new Promise((w,A)=>{let Y=RW(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w($w.from($w.concat(f)))),Y.on("error",A),Y.write($),Y.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(Y$())return;let $=await iw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await LA(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await iw(A).catch(()=>null))try{if(await KW(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await OA(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await NX(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await iw(A).catch(()=>null))await KW(A,X)}if(this.currentLogFile=Y,w.maxFiles){let X=(await LA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,W)=>W.localeCompare(U));for(let U of X.slice(w.maxFiles))await OA(bw(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=FW($),Y=U2(w),f=RW();await E2(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);await this.writeToFile(Y),console.log(Y)}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 A={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(A)}}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()})),qX(this.currentLogFile))try{let $=GW(this.currentLogFile,"r+");zW($),hX($)}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(!Y$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await LA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await OA(bw(this.config.logDirectory,A))}catch(Y){console.error(`Failed to delete temp file ${A}:`,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?g.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=I$.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${g.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}async log($,w,...A){let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);if(this.fancy&&!Y$()){let B=JB[$],E=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",j;switch($){case"debug":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:g.gray(U),level:$}),console.error(j);break;case"info":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.error(j);break;case"success":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:g.green(U),level:$}),console.error(j);break;case"warning":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.warn(j);break;case"error":if(j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.error(j),W){let T=W.split(`
5
+ `);for(let F of T)if(F.trim()&&!F.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:g.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!Y$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}if(!this.shouldLog($))return;let J=`${X} ${this.environment}.${$.toUpperCase()}: ${U}
6
+ `;if(W)J+=`${W}
7
+ `;J=J.replace(this.ANSI_PATTERN,""),await this.writeToFile(J)}time($){let w=performance.now();if(this.fancy&&!Y$()){let A=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:g.blue("◐"),tag:A,message:`${g.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),B=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)B+=` ${JSON.stringify(A)}`;if(B+=`
8
+ `,B=B.replace(this.ANSI_PATTERN,""),this.fancy&&!Y$()){let E=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:g.green("✓"),tag:E,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!Y$())console.error(B.trim());await this.writeToFile(B)}}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}:${$}`,A=new oA(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(A),A}createReadStream(){if(Y$())throw Error("createReadStream is not supported in browser environments");if(!qX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return FW(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 A=this.keys.get(this.currentKeyId);try{let Y=$w.isBuffer($)?$:$w.from($,"base64"),f=Y.slice(0,16),X=Y.slice(-16),U=Y.slice(16,-16),W=X2("aes-256-gcm",A,f);return W.setAuthTag(X),$w.concat([W.update(U),W.final()]).toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return Y$()}isServerMode(){return!Y$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w);if(this.fancy&&!Y$()){let X=$.split(`
9
+ `),U=Math.max(...X.map((E)=>E.length))+2,W=`┌${"─".repeat(U)}┐`,J=`└${"─".repeat(U)}┘`,B=X.map((E)=>{let j=" ".repeat(U-E.length-2);return`│ ${E}${j} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:A,message:g.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:A,message:g.cyan(W)})),B.forEach((E)=>console.error(this.formatConsoleMessage({timestamp:A,message:g.cyan(E),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:g.cyan(J),showTimestamp:!1}))}else if(!Y$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${$}`);let f=`${Y} ${this.environment}.INFO: [BOX] ${$}
10
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(f)}async prompt($){if(Y$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${g.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();I$.stdin.removeListener("data",A);try{if(typeof I$.stdin.setRawMode==="function")I$.stdin.setRawMode(!1)}catch{}I$.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof I$.stdin.setRawMode==="function")I$.stdin.setRawMode(!0)}catch{}I$.stdin.resume(),I$.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,W=0;if(A=$.replace(U,(J,B)=>{if(B==="%")return"%";if(W>=w.length)return J;let E=w[W++];switch(B){case"s":return String(E);case"d":case"i":return Number(E).toString();case"j":case"o":return JSON.stringify(E,null,2);default:return J}}),W<w.length)A+=` ${w.slice(W).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`}if(this.fancy&&!Y$()){let U=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",W=g.blue("◐");console.error(`${W} ${U} ${g.cyan(A)}`)}let X=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
11
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(X)}progress($,w=""){if(!this.enabled||!this.fancy||Y$()||$<=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 A=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:A,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(U,W)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||Y$())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,U)),W!==void 0)this.activeProgressBar.message=W;let J=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,J)},finish:(U)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||Y$())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,W="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||Y$())return;I$.stdout.write(`${"\r".padEnd(I$.stdout.columns||80)}\r`),this.log(W,U),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||Y$()||!I$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=g.green("━".repeat(Y)),U=g.gray("━".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=w||A===100?g.green("✓"):g.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${g.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=I$.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,I$.stdout.write($.lastRenderedLine),w)I$.stdout.write(`
12
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||Y$()||!I$.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(Y$()){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),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let X=bw(this.config.logDirectory,Y);if($.before)try{if((await iw(X)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${X}:`,U);continue}A.push(X)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await OA(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}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&&n(w[0])&&"id"in w[0]&&w[0].id===3&&n(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(n(w)&&n($)&&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(n($)&&"arr"in $&&Array.isArray($.arr)&&n(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&n(w[0])&&n($[0])){let Y=[...w];for(let f of $)if(n(f)&&"name"in f){if(!Y.find((U)=>n(U)&&("name"in U)&&U.name===f.name))Y.push(f)}else if(n(f)&&"path"in f){if(!Y.find((U)=>n(U)&&("path"in U)&&U.path===f.path))Y.push(f)}else if(!Y.some((X)=>eA(X,f)))Y.push(f);return Y}if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}if(!n(w)||!n($))return w;let A={...$};for(let Y in w)if(Object.prototype.hasOwnProperty.call(w,Y)){let f=w[Y];if(f===null||f===void 0)continue;else if(n(f)&&n(A[Y]))A[Y]=nA(A[Y],f);else if(Array.isArray(f)&&Array.isArray(A[Y]))if(f.length>0&&A[Y].length>0&&n(f[0])&&n(A[Y][0])){let X=[...f];for(let U of A[Y])if(n(U)&&"name"in U){if(!X.find((J)=>n(J)&&("name"in J)&&J.name===U.name))X.push(U)}else if(n(U)&&"path"in U){if(!X.find((J)=>n(J)&&("path"in J)&&J.path===U.path))X.push(U)}else if(!X.some((W)=>eA(W,U)))X.push(U);A[Y]=X}else if(f.every((X)=>typeof X==="string")&&A[Y].every((X)=>typeof X==="string")){let X=[...f];for(let U of A[Y])if(!X.includes(U))X.push(U);A[Y]=X}else A[Y]=f;else A[Y]=f}return A}function oX($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:nA($,w);if(Array.isArray($))return A==="replace"?w:nA($,w);if(!n(w)||!n($))return w;let Y={...$};for(let f of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,f))continue;let X=w[f],U=Y[f];if(X===null||X===void 0)continue;if(Array.isArray(X)||Array.isArray(U))if(A==="replace")Y[f]=X;else Y[f]=nA(U,X);else if(n(X)&&n(U))Y[f]=oX(U,X,A);else Y[f]=X}return Y}function eA($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!eA($[A],w[A]))return!1;return!0}if(n($)&&n(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!eA($[f],w[f]))return!1}return!0}return!1}function n($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function iA($,w,A="replace"){if(!pW($))return null;try{let Y=await import($),f=Y.default||Y;if(typeof f!=="object"||f===null||Array.isArray(f))return null;try{return oX(w,f,A)}catch{return null}}catch{return null}}function p2($,w,A=!1){if(!$)return w;let Y=$.toUpperCase().replace(/-/g,"_"),f={...w};function X(U,W=[]){let J={...U};for(let[B,E]of Object.entries(U)){let j=[...W,B],T=(G)=>G.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${Y}_${j.map(T).join("_")}`,H=`${Y}_${j.map((G)=>G.toUpperCase()).join("_")}`;if(A)S$.info(`Checking environment variable ${F} for config ${$}.${j.join(".")}`);if(typeof E==="object"&&E!==null&&!Array.isArray(E))J[B]=X(E,j);else{let G=x1.env[F]||x1.env[H];if(G!==void 0){if(A)S$.info(`Using environment variable ${G?F:H} for config ${$}.${j.join(".")}`);if(typeof E==="number")J[B]=Number(G);else if(typeof E==="boolean")J[B]=G.toLowerCase()==="true";else if(Array.isArray(E))try{let K=JSON.parse(G);if(Array.isArray(K))J[B]=K;else J[B]=G.split(",").map((R)=>R.trim())}catch{J[B]=G.split(",").map((K)=>K.trim())}else J[B]=G}}}return J}return X(f)}async function r2({name:$="",alias:w,cwd:A,configDir:Y,defaultConfig:f,verbose:X=!1,checkEnv:U=!0,arrayStrategy:W="replace"}){let J=U&&typeof f==="object"&&f!==null&&!Array.isArray(f)?p2($,f,X):f,B=A||x1.cwd(),E=[".ts",".js",".mjs",".cjs",".json"];if(X)S$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${B}`);let j=[$,`.${$}`].filter(Boolean),T=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],H=w?[`${w}.config`,`.${w}.config`]:[],G=Array.from(new Set([B,Z$(B,"config"),Z$(B,".config"),Y?Z$(B,Y):void 0].filter(Boolean)));for(let K of G){if(X)S$.info(`Searching for configuration in: ${K}`);let h=[Z$(B,"config"),Z$(B,".config")].concat(Y?[Z$(B,Y)]:[]).includes(K)?[...j,...T,...F,...H]:[...T,...j,...H,...F];for(let N of h)for(let M of E){let C=Z$(K,`${N}${M}`),y=await iA(C,J,W);if(y!==null){if(X)S$.success(`Configuration loaded from: ${C}`);return y}}}if($){let K=Z$(KX(),".config",$),R=["config",`${$}.config`];if(w)R.push(`${w}.config`);if(X)S$.info(`Checking user config directory: ${K}`);for(let h of R)for(let N of E){let M=Z$(K,`${h}${N}`),C=await iA(M,J,W);if(C!==null){if(X)S$.success(`Configuration loaded from user config directory: ${M}`);return C}}}if($){let K=Z$(KX(),".config"),R=[`.${$}.config`];if(w)R.push(`.${w}.config`);if(X)S$.info(`Checking user config directory for dotfile configs: ${K}`);for(let h of R)for(let N of E){let M=Z$(K,`${h}${N}`),C=await iA(M,J,W);if(C!==null){if(X)S$.success(`Configuration loaded from user config directory dotfile: ${M}`);return C}}}if($){let K=KX(),R=[`.${$}.config`,`.${$}`];if(w)R.push(`.${w}.config`),R.push(`.${w}`);if(X)S$.info(`Checking user home directory for dotfile configs: ${K}`);for(let h of R)for(let N of E){let M=Z$(K,`${h}${N}`),C=await iA(M,J,W);if(C!==null){if(X)S$.success(`Configuration loaded from user home directory: ${M}`);return C}}}try{let K=Z$(B,"package.json");if(pW(K)){let R=await import(K),h=R[$];if(!h&&w){if(h=R[w],h&&X)S$.success(`Using alias "${w}" configuration from package.json`)}if(h&&typeof h==="object"&&!Array.isArray(h))try{if(X)S$.success(`Configuration loaded from package.json: ${h===R[$]?$:w}`);return oX(J,h,W)}catch(N){if(X)S$.warn("Failed to merge package.json config:",N)}}}catch(K){if(X)S$.warn("Failed to load package.json:",K)}if(X)S$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return J}function a2($,w={}){let A=tA.cwd();while(A.includes("storage"))A=jW(A,"..");let Y=jW(A,$||"");if(w?.relative)return w2(tA.cwd(),Y);return Y}async function s2(){try{let $=await r2({name:"clarity",alias:"logging",defaultConfig:dA,cwd:tA.cwd()});return{...dA,...$||{}}}catch{return dA}}function j$(){if(_0.env.NODE_ENV==="test"||_0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function o2(){if(_0.env.NODE_ENV==="test"||_0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof _0<"u"){let $=_0.type;if($==="renderer"||$==="worker")return!1;return!!(_0.versions&&(_0.versions.node||_0.versions.bun))}return!1}class oW{async format($){let w=await o2(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:vw.pid,hostname:w(),environment:vw.env.NODE_ENV||"development",platform:vw.platform,version:vw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:vw.env.NODE_ENV||vw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class $Y{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={...uX},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new oW,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??V.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...lA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...lA};return{...lA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:uX.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!j$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let f,X=0,U=3,W=1000;while(X<U)try{try{try{await G2(this.config.logDirectory,yW.F_OK|yW.W_OK)}catch(B){if(B instanceof Error&&"code"in B)if(B.code==="ENOENT")await H2(this.config.logDirectory,{recursive:!0,mode:493});else if(B.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw B;else throw B}}catch(B){throw console.error("Debug: [writeToFile] Failed to create log directory:",B),B}let J=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:L0.from($);try{if(!VA(this.currentLogFile))await IX(this.currentLogFile,"",{mode:420});if(f=NW(this.currentLogFile,"a",420),z2(f,J,{flag:"a"}),qW(f),f!==void 0)MX(f),f=void 0;if((await uw(this.currentLogFile)).size===0){if(await IX(this.currentLogFile,J,{flag:"w",mode:420}),(await uw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(B){let E=B;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(X<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${U}:`,j);let T=W*2**X;await new Promise((F)=>setTimeout(F,T)),X++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(f!==void 0)try{MX(f)}catch(B){console.error("Debug: [writeToFile] Error closing file descriptor:",B)}}}catch(J){if(X===U-1){let E=J,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),J}X++;let B=W*2**(X-1);await new Promise((E)=>setTimeout(E,B))}})();this.pendingOperations.push(A);let Y=this.pendingOperations.length-1;try{await A}catch(f){throw console.error("Debug: [writeToFile] Error in operation:",f),f}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 nw(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 nw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return nw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(j$())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 A=typeof w.interval==="number"?w.interval:60,Y=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((f)=>{console.error("Error rotating keys:",f)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=A,this.keys.set(A,Y),this.encryptionKeys.set(A,{key:Y,createdAt:new Date});let f=Array.from(this.encryptionKeys.entries()).sort(([,W],[,J])=>J.createdAt.getTime()-W.createdAt.getTime()),X=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,X);if(f.length>U)for(let[W]of f.slice(U))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return yX(16).toString("hex")}generateKey(){return yX(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(),A=yX(16),Y=j2("aes-256-gcm",w,A),f=L0.isBuffer($)?$:L0.from($,"utf8"),X=Y.update(f),U=Y.final(),W=X.length+U.length,J=Y.getAuthTag(),B=L0.allocUnsafe(16+W+16);return A.copy(B,0),X.copy(B,16),U.copy(B,16+X.length),J.copy(B,16+W),{encrypted:B,iv:A}}async compressData($){return new Promise((w,A)=>{let Y=IW(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w(L0.from(L0.concat(f)))),Y.on("error",A),Y.write($),Y.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(j$())return;if(!this.shouldWriteToFile())return;let $=await uw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await QA(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await uw(A).catch(()=>null))try{if(await MW(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await _A(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await IX(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await uw(A).catch(()=>null))await MW(A,X)}if(this.currentLogFile=Y,w.maxFiles){let X=(await QA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,W)=>W.localeCompare(U));for(let U of X.slice(w.maxFiles))await _A(nw(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=hW($),Y=F2(w),f=IW();await h2(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}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()})),VA(this.currentLogFile))try{let $=NW(this.currentLogFile,"r+");qW($),MX($)}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(!j$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await QA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await _A(nw(this.config.logDirectory,A))}catch(Y){console.error(`Failed to delete temp file ${A}:`,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()?k.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||j$())return!1;let $=typeof V.env.NO_COLOR<"u",w=V.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof V.stderr<"u"&&V.stderr.isTTY||typeof V.stdout<"u"&&V.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=V.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${k.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,Y,f)=>{let X=k.underline(k.blue(Y)),U=this.toAbsoluteFilePath(f);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(U)}`,J="\x1B]8;;",B="\x1B\\";return`\x1B]8;;${W}\x1B\\${X}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${f}\x1B\\${X}\x1B]8;;\x1B\\`;return X}),w=w.replace(/`([^`]+)`/g,(A,Y)=>k.bgGray(Y)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,Y)=>k.bold(Y)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,Y)=>k.italic(Y)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,Y)=>k.italic(Y)),w=w.replace(/~([^~]+)~/g,(A,Y)=>k.strikethrough(Y)),w}supportsHyperlinks(){if(j$())return!1;let $=V.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 A=V.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(K2(w)||w.startsWith("./")||w.startsWith("../"))w=R2(w);else return null;return VA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);let{consoleText:J,fileText:B}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let j=this.options.showIcons===!1?"":WB[$],T=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:k.gray(J),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:k.green(J),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.error(F),W){let H=W.split(`
13
+ `);for(let G of H)if(G.trim()&&!G.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:k.gray(` ${G}`),level:$,showTimestamp:!1}))}break}}else if(!j$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}if(!this.shouldLog($))return;let E=`${X} ${this.environment}.${$.toUpperCase()}: ${B}
14
+ `;if(W)E+=`${W}
15
+ `;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress($,w=""){let A={update:(W,J)=>{},finish:(W)=>{},interrupt:(W,J)=>{}};if(!this.enabled)return A;let Y=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!j$()&&V.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(W,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,W),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!j$()&&V.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(W)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,W)},interrupt:(W,J="info")=>{if(!j$()&&V.stdout.isTTY)V.stdout.write(`
16
+ `);if(this[J==="warning"?"warn":J](W),this.activeProgressBar&&this.shouldStyleConsole()&&!j$()&&V.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":k.blue("◐"),tag:A,message:`${k.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),B=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)B+=` ${JSON.stringify(A)}`;if(B+=`
17
+ `,B=B.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":k.green("✓"),tag:E,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!j$())console.error(B.trim());if(this.shouldWriteToFile())await this.writeToFile(B)}}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}:${$}`,A=new $Y(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(A),A}createReadStream(){if(j$())throw Error("createReadStream is not supported in browser environments");if(!VA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return hW(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 A=this.keys.get(this.currentKeyId);try{let Y=L0.isBuffer($)?$:L0.from($,"base64"),f=Y.subarray(0,16),X=Y.subarray(Y.length-16),U=Y.subarray(16,Y.length-16),W=T2("aes-256-gcm",A,f);W.setAuthTag(X);let J=W.update(U),B=W.final(),E=J.length+B.length,j=L0.allocUnsafe(E);return J.copy(j,0),B.copy(j,J.length),j.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return j$()}isServerMode(){return!j$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w),{consoleText:f,fileText:X}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=f.split(`
18
+ `),J=Math.max(...W.map((T)=>T.length))+2,B=`┌${"─".repeat(J)}┐`,E=`└${"─".repeat(J)}┘`,j=W.map((T)=>{return this.formatConsoleMessage({timestamp:A,message:k.cyan(T),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:k.cyan(B),showTimestamp:!1})),j.forEach((T)=>console.error(T)),console.error(this.formatConsoleMessage({timestamp:A,message:k.cyan(E),showTimestamp:!1}))}else if(!j$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${X}`);let U=`${Y} ${this.environment}.INFO: [BOX] ${X}
19
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(j$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${k.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();V.stdin.removeListener("data",A);try{if(typeof V.stdin.setRawMode==="function")V.stdin.setRawMode(!1)}catch{}V.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof V.stdin.setRawMode==="function")V.stdin.setRawMode(!0)}catch{}V.stdin.resume(),V.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let J=/%([sdijfo%])/g,B=0;if(A=$.replace(J,(E,j)=>{if(j==="%")return"%";if(B>=w.length)return E;let T=w[B++];switch(j){case"s":return String(T);case"d":case"i":return Number(T).toString();case"j":case"o":return JSON.stringify(T,null,2);default:return E}}),B<w.length)A+=` ${w.slice(B).map((E)=>typeof E==="object"?JSON.stringify(E,null,2):String(E)).join(" ")}`}let{consoleText:Y,fileText:f}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let J=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${k.blue("◐")} `;console.error(`${B}${J} ${k.cyan(Y)}`)}let W=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${f}
20
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(W)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!V.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=k.green("━".repeat(Y)),U=k.gray("━".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=this.options.showIcons===!1?"":w||A===100?k.green("✓"):k.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${k.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=V.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,V.stdout.write($.lastRenderedLine),w)V.stdout.write(`
21
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||j$()||!V.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(j$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await QA(this.config.logDirectory),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let X=nw(this.config.logDirectory,Y);if($.before)try{if((await uw(X)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${X}:`,U);continue}A.push(X)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await _A(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function eW($,w={}){let{maxRetries:A=3,retryDelay:Y=1000,isRetryable:f=()=>!0,fallback:X}=w,U=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(J){if(U=J instanceof Error?J:Error(String(J)),W===A||!f(U))break;if(Y>0)await new Promise((B)=>setTimeout(B,Y))}if(X!==void 0)return X;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function $B($){return $ instanceof p$}function e2($){return $ instanceof wY}function $G($){if($B($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((A)=>$.message.toLowerCase().includes(A.toLowerCase()))}class JY{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,A={}){let{prefix:Y,useCamelCase:f=!0,useBackwardCompatibility:X=!0,customParsers:U={},verbose:W=!1,trackPerformance:J=!0}=A,B=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let E=Y||this.generateEnvPrefix($),j={...w};return this.processObject(j,[],E,{useCamelCase:f,useBackwardCompatibility:X,customParsers:U,verbose:W,configName:$}),{config:j,source:{type:"environment",priority:50,timestamp:new Date}}};if(J)return b1.track("applyEnvironmentVariables",B,{configName:$});return B()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=U.map((E)=>this.formatEnvKey(E,Y.useCamelCase)),J=`${A}_${W.join("_")}`,B=Y.useBackwardCompatibility?`${A}_${U.map((E)=>E.toUpperCase()).join("_")}`:null;if(Y.verbose);if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.processObject(X,U,A,Y);else{let E=DA.env[J]||(B?DA.env[B]:void 0);if(E!==void 0){if(Y.verbose){let j=DA.env[J]?J:B}try{$[f]=this.parseEnvironmentValue(E,typeof X,J,Y.customParsers,Y.configName)}catch(j){if(j instanceof AY)throw j;throw ww.envVar(J,E,typeof X,Y.configName)}}}}}parseEnvironmentValue($,w,A,Y,f){for(let[X,U]of Object.entries(Y))try{return U($)}catch{continue}for(let X of this.defaultParsers)if(X.canParse($,w))try{return X.parse($)}catch{throw ww.envVar(A,$,`${w} (via ${X.name} parser)`,f)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[Y,f]of Object.entries(DA.env))if(Y.startsWith(A)&&f!==void 0)w[Y]=f;return w}validateEnvironmentVariable($,w,A){let Y=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))Y.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(f){Y.push(`Cannot parse value "${w}" as ${A}: ${f}`)}return{isValid:Y.length===0,errors:Y}}generateEnvVarDocs($,w,A={}){let{prefix:Y,format:f="text"}=A,X=Y||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],X,U),f){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=`${A}_${U.map((J)=>this.formatEnvKey(J,!0)).join("_")}`;if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.extractEnvVarInfo(X,U,A,Y);else Y.push({key:W,type:Array.isArray(X)?"array":typeof X,description:`Configuration for ${U.join(".")}`,example:this.generateExample(X)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
22
+
23
+ `;for(let Y of $)A+=`${Y.key}
24
+ `,A+=` Type: ${Y.type}
25
+ `,A+=` Description: ${Y.description}
26
+ `,A+=` Example: ${Y.example}
27
27
 
28
28
  `;return A}formatAsMarkdown($,w){let A=`# Environment Variables for ${w}
29
29
 
30
30
  `;A+=`| Variable | Type | Description | Example |
31
31
  `,A+=`|----------|------|-------------|----------|
32
- `;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
33
- `;return A}}function jG($,w){let A=XB("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function yB($,w,A={}){return VB($,w,A,new WeakMap)}function VB($,w,A,J){let{arrayMergeMode:Y="replace",skipNullish:U=!1,customMerger:Z}=A;if(w===null||w===void 0)return U?$:w;if(Z){let B=Z($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return SB($,w,Y,J);if(!o$(w)||!o$($))return w;return GG($,w,A,J)}function SB($,w,A,J){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return FG($,w);case"smart":return zG($,w,J);default:return w}return w}function FG($,w){let A=[...w];for(let J of $)if(!A.some((Y)=>RU(Y,J)))A.push(J);return A}function zG($,w,A){if(w.length===0)return $;if($.length===0)return w;if(o$(w[0])&&o$($[0]))return fG($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}function fG($,w,A){let J=[...w];for(let Y of $){if(!o$(Y)){J.push(Y);continue}let U=["id","name","key","path","type"],Z=!1;for(let B of U)if(B in Y){if(J.find((E)=>o$(E)&&(B in E)&&E[B]===Y[B])){Z=!0;break}}if(!Z)J.push(Y)}return J}function GG($,w,A,J){let Y=w;if(o$(Y)&&J.has(Y))return J.get(Y);let U={...$};if(o$(Y))J.set(Y,U);for(let Z in Y){if(!Object.prototype.hasOwnProperty.call(Y,Z))continue;let B=Y[Z],W=U[Z];if(A.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){U[Z]=B;continue}if(o$(B)&&o$(W))U[Z]=VB(W,B,A,J);else if(Array.isArray(B)||Array.isArray(W))U[Z]=SB(W,B,A.arrayMergeMode||"smart",J);else U[Z]=B}return U}function xU($,w,A="replace"){return yB($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function RU($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!RU($[A],w[A]))return!1;return!0}if(o$($)&&o$(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!RU($[Y],w[Y]))return!1}return!0}return!1}function o$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class aA{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:Y=!0,cacheTtl:U,trackPerformance:Z=!0,verbose:B=!1}=A;if(Y){let E=uw.getWithFileCheck("file",$);if(E){if(B)console.log(`Configuration loaded from cache: ${$}`);return E}}let W=async()=>{if(!NA($))return null;try{let E=`?t=${Date.now()}`,j=await import($+E),F=j.default||j,f="default"in j,z=Object.keys(j).length>0;if(!f&&!z)throw new S1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new S1($,Error("Configuration must export a valid object"),"unknown");let q={config:xU(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(Y)uw.setWithFileCheck("file",q,$,U);return q}catch(E){throw E instanceof Error?s0.configLoad($,E):s0.configLoad($,Error(String(E)))}};if(Z)return X1.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let Y=await this.loadFromPath(J,w,A);if(Y)return Y}catch(Y){if(Y instanceof Error&&Y.name==="ConfigLoadError")throw Y;if(A.verbose)console.warn(`Failed to load config from ${J}:`,Y)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),Y=[];for(let U of J)for(let Z of this.extensions)Y.push(WU(w,`${U}${Z}`));return Y}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(A.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)A.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return A.filter(Boolean)}checkFileAccess($){return CB(async()=>{return NA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!NA($))return J;if(w||A){let Y=this.generateNamePatterns(w||"",A);for(let U of Y)for(let Z of this.extensions){let B=WU($,`${U}${Z}`);if(await this.checkFileAccess(B))J.push(B)}}else try{let{readdirSync:Y}=await import("fs"),U=Y($);for(let Z of U)if(this.looksLikeConfigFile(Z)){let B=WU($,Z);if(await this.checkFileAccess(B))J.push(B)}}catch{return[]}return J}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((A)=>A.test($))}async validateConfigFile($){let w=[];try{if(!NA($))return w.push("Configuration file does not exist"),w;let A=await import($),J=A.default||A;if(J===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof J!=="object"||J===null)w.push("Configuration must be an object");else if(Array.isArray(J))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:Y}=await import("fs"),U=Y($,"utf8");JSON.parse(U)}catch(Y){w.push(`Invalid JSON syntax: ${Y}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(J)=>{try{let Y=await this.loadFromPath(J,{},w);if(Y)A.set(J,Y.config)}catch(Y){if(w.verbose)console.warn(`Failed to preload ${J}:`,Y)}})),A}}class PU{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:Y=!0,validateTypes:U=!0,customRules:Z=[],trackPerformance:B=!0,verbose:W=!1}=A,E=async()=>{let j=[],F=[],f={stopOnFirstError:J,validateRequired:Y,validateTypes:U,customRules:Z,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,f);else if(Array.isArray(w))return this.validateWithRules($,[...w,...Z],f);else return this.validateWithJSONSchema($,w,f)}catch(z){return j.push({path:"",message:`Validation failed: ${z}`,rule:"system"}),{isValid:!1,errors:j,warnings:F}}};if(B)return await X1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!Sf(w))throw new O1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),Y=J.default||J;if(Array.isArray(Y))return this.validateWithRules($,Y,A);else return this.validateWithJSONSchema($,Y,A)}catch(J){throw new O1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],Y=[];return this.validateObjectAgainstSchema($,w,"",J,Y,A),{isValid:J.length===0,errors:J,warnings:Y}}validateObjectAgainstSchema($,w,A,J,Y,U){if(U.validateTypes&&w.type){let Z=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(Z)){if(J.push({path:A,message:`Expected type ${B.join(" or ")}, got ${Z}`,expected:B.join(" or "),actual:Z,rule:"type"}),U.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(J.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),U.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)J.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)J.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))J.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)J.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)J.push({path:A,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let Z=0;Z<$.length;Z++){let B=A?`${A}[${Z}]`:`[${Z}]`;if(this.validateObjectAgainstSchema($[Z],w.items,B,J,Y,U),U.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let Z=$;if(U.validateRequired&&w.required){for(let B of w.required)if(!(B in Z)){if(J.push({path:A?`${A}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),U.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in Z){let E=A?`${A}.${B}`:B;if(this.validateObjectAgainstSchema(Z[B],W,E,J,Y,U),U.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(Z))if(!B.has(W))Y.push({path:A?`${A}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],Y=[];for(let U of w)try{let Z=this.getValueByPath($,U.path),B=this.validateWithRule(Z,U,U.path);if(J.push(...B),A.stopOnFirstError&&J.length>0)break}catch(Z){J.push({path:U.path,message:`Rule validation failed: ${Z}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:Y}}validateWithRule($,w,A){let J=[];if(w.required&&($===void 0||$===null))return J.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),J;if($===void 0||$===null)return J;if(w.type){let Y=Array.isArray($)?"array":typeof $;if(Y!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${Y}`,expected:w.type,actual:Y,rule:"type"})}if(w.min!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:Y,rule:"min"})}if(w.max!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:Y,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))J.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))J.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let Y=w.validator($);if(Y)J.push({path:A,message:w.message||Y,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let Y of A)if(J&&typeof J==="object"&&Y in J)J=J[Y];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,Y,U,Z]=J;w.push({path:Y,required:!U,type:this.mapTypeScriptType(Z)})}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:xB},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class bU{fileLoader=new aA;envProcessor=new rA;validator=new PU;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:Y,validate:U,...Z}=$;try{if(A?.enabled){let W=this.checkCache(Z.name||"",Z);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(Z,!0,A)}catch(W){let E=Z.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(E)throw W;B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`No configuration file found for "${Z.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let j=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),F=!j&&(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(E&&(f||j))throw W;if(F&&(!E||!f))B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(Y||U)await this.validateConfiguration(B.config,Y,U,Z.name);if(A?.enabled&&B)this.cacheResult(Z.name||"",B,A,Z);if(J?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:Z.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(W);if(J.slowThreshold&&W.duration>J.slowThreshold)E0.warn(`Slow configuration loading detected: ${W.duration}ms for ${Z.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw E0.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:Y,cwd:U,configDir:Z,defaultConfig:B,checkEnv:W=!0,arrayStrategy:E="replace",verbose:j=!1}=$,F=U||fw.cwd(),f=[],z=await this.loadLocalConfiguration(J,Y,F,Z,B,E,j,W,A);if(z)return f.push(...this.getLocalSearchPaths(J,Y,F,Z)),this.finalizeResult(z,f,W,J,j);let H=await this.loadHomeConfiguration(J,Y,B,E,j,W);if(H)return f.push(...this.getHomeSearchPaths(J,Y)),this.finalizeResult(H,f,W,J,j);let T=await this.loadPackageJsonConfiguration(J,Y,F,B,E,j,W);if(T)return f.push(D$(F,"package.json")),this.finalizeResult(T,f,W,J,j);if(f.push(...this.getAllSearchPaths(J,Y,F,Z)),w)throw s0.configNotFound(J,f,Y);return{...await this.applyEnvironmentVariables(J,B,W,j),warnings:[`No configuration file found for "${J}"${Y?` or alias "${Y}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,Y,U,Z,B,W){let E=B?y1($,Y,Z):Y,j=this.getLocalDirectories(A,J);for(let F of j){if(Z)E0.info(`Searching for configuration in: ${F}`);let f=this.fileLoader.generateConfigPaths($,F,w),z=await this.fileLoader.tryLoadFromPaths(f,E,{arrayStrategy:U,verbose:Z,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(z){if(Z)E0.success(`Configuration loaded from: ${z.source.path}`);return z}}return null}async loadHomeConfiguration($,w,A,J,Y,U){if(!$)return null;let Z=U?y1($,A,Y):A,B=[D$(Ow(),".config",$),D$(Ow(),".config"),Ow()];for(let W of B){if(Y)E0.info(`Checking home directory: ${W}`);let E=this.fileLoader.generateConfigPaths($,W,w),j=await this.fileLoader.tryLoadFromPaths(E,Z,{arrayStrategy:J,verbose:Y});if(j){if(Y)E0.success(`Configuration loaded from home directory: ${j.source.path}`);return j}}return null}async loadPackageJsonConfiguration($,w,A,J,Y,U,Z){let B=Z?y1($,J,U):J;try{let W=D$(A,"package.json");if(!KU(W))return null;let E=await import(W),j=E[$],F=$;if(!j&&w)j=E[w],F=w;if(j&&typeof j==="object"&&!Array.isArray(j)){if(U)E0.success(`Configuration loaded from package.json: ${F}`);return{config:xU(B,j,Y),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(U)E0.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,A,J){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:y1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,Y){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let Y=[];if(A){let U=A($);if(U)Y.push(...U)}if(w){let U=await this.validator.validateConfiguration($,w);if(!U.isValid)Y.push(...U.errors.map((Z)=>Z.path?`${Z.path}: ${Z.message}`:Z.message))}if(Y.length>0)throw s0.configValidation(J||"unknown",Y,J)}checkCache($,w){let A=this.generateCacheKey($,w);return uw.get(A)||null}cacheResult($,w,A,J){let Y=this.generateCacheKey($,J);uw.set(Y,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias)A.push(`alias:${w.alias}`);if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,D$($,"config"),D$($,".config"),w?D$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let Y=[];return Y.push(...this.getLocalSearchPaths($,w,A,J)),Y.push(...this.getHomeSearchPaths($,w)),Y.push(D$(A,"package.json")),Y}getLocalSearchPaths($,w,A,J){let Y=this.getLocalDirectories(A,J),U=[];for(let Z of Y)U.push(...this.fileLoader.generateConfigPaths($,Z,w));return U}getHomeSearchPaths($,w){if(!$)return[];let A=[D$(Ow(),".config",$),D$(Ow(),".config"),Ow()],J=[];for(let Y of A)J.push(...this.fileLoader.generateConfigPaths($,Y,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function YB($){let A=!($.message.includes("EACCES")||$.message.includes("EPERM")||$.message.includes("permission denied"))&&($.message.includes("syntax")||$.message.includes("Expected")||$.message.includes("Unexpected")||$.message.includes("BuildMessage")),J=$.message.includes("Configuration must export a valid object")||$.message.includes("Configuration file is empty and exports nothing");return A||J}async function TG($){return X0.loadConfig({...$,__strictErrorHandling:!0})}async function OB($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let J;if(A)J=await X0.loadConfig($);else J=await X0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return J?.config??w}catch(J){let Y=J instanceof Error?J.name:"UnknownError",U=J instanceof Error?J.message:String(J);if(!(Y==="ConfigNotFoundError"||Y==="ConfigLoadError"||Y==="ConfigValidationError"||U.includes("config"))&&$.verbose)E0.warn("Unexpected error loading config, using defaults:",[J instanceof Error?J:Error(String(J))]);let B=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await X0.applyEnvironmentVariables(B.name||"",w,!0,B.verbose||!1))?.config??w;return w}}async function HG($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await X0.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(A){if(A instanceof Error&&(A.name==="ConfigNotFoundError"||A.name==="ConfigLoadError"&&YB(A)))return(await X0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await X0.loadConfig({...$,cwd:$.cwd||fw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&YB(w)))return(await X0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function qG($,w,A="replace"){let J=new aA;try{let Y=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return Y?Y.config:null}catch{return null}}function y1($,w,A=!1){let J=new rA,Y=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function U(Z,B=[]){let W={...Z};for(let[E,j]of Object.entries(Z)){let F=[...B,E],f=[`${Y}_${F.join("_").toUpperCase()}`,`${Y}_${F.map((T)=>T.toUpperCase()).join("")}`,`${Y}_${F.map((T)=>T.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],z,H;for(let T of f)if(z=fw.env[T],z!==void 0){H=T;break}if(z!==void 0&&H)if(typeof j==="boolean")W[E]=["true","1","yes"].includes(z.toLowerCase());else if(typeof j==="number"){let T=Number(z);if(!Number.isNaN(T))W[E]=T}else if(Array.isArray(j))try{W[E]=JSON.parse(z)}catch{W[E]=z.split(",").map((T)=>T.trim())}else W[E]=z;else if(j&&typeof j==="object"&&!Array.isArray(j))W[E]=U(j,F)}return W}return U(w)}function KG($){let w=D$(fw.cwd(),$.configDir),A=D$(fw.cwd(),$.generatedDir),J=D$(A,"config-types.ts");if(!KU(xW(J)))Uf(xW(J),{recursive:!0,mode:511});let Y=KU(w)?Zf(w).map((Z)=>Z.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],U=`// Generated by bunfig v${pG}
34
- export type ConfigNames = ${Y.length?`'${Y.join("' | '")}'`:"string"}
35
- `;Wf(J,U,{mode:438})}function hG($){let w=null,A=null,J=()=>{if(!A)A=OB($).then((U)=>{return w=U,U},(U)=>{let Z="defaultConfig"in $?$.defaultConfig:{};if(w=Z,"verbose"in $&&$.verbose)E0.warn("Config loading failed, using defaults:",[U instanceof Error?U:Error(String(U))]);return Z});return A},Y="defaultConfig"in $?$.defaultConfig:{};return w=Y,J(),new Proxy({},{get(U,Z){if(w)return w[Z];let B=Y[Z];return J(),B},has(U,Z){return Z in(w||Y)},ownKeys(){return Object.keys(w||Y)},getOwnPropertyDescriptor(U,Z){return Object.getOwnPropertyDescriptor(w||Y,Z)},set(U,Z,B){if(!w)w={...Y};return w[Z]=B,!0}})}function RG($){let w=aW(_f.cwd(),$?.configDir||"./config");function A(){if(!Of(w))return[];let Y=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),U=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],Z=Xf(w).filter((W)=>Y.has(BU(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:E}of Z){let j=BU(E).toLowerCase(),F=B.get(W);if(!F){B.set(W,E);continue}let f=BU(F).toLowerCase();if(U.indexOf(j)<U.indexOf(f))B.set(W,E)}return Array.from(B.entries()).map(([W,E])=>({base:W,file:E})).sort((W,E)=>W.base.localeCompare(E.base))}function J(){let Y=A(),U=Y.map((E)=>E.base),Z=U.length?U.map((E)=>`'${E}'`).join(" | "):"string",B=Y.length?`{
36
- ${Y.map((E)=>{let j=aW(w,E.file).replace(/\\/g,"/");return` '${E.base}': typeof import('${j}').default`}).join(`,
32
+ `;for(let Y of $)A+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
33
+ `;return A}}function wG($,w){let A=XB("process");if(typeof A>"u"||!A.env)return w;let Y=A.env[$];return Y!==void 0?Y:w}function wB($,w,A={}){return AB($,w,A,new WeakMap)}function AB($,w,A,Y){let{arrayMergeMode:f="replace",skipNullish:X=!1,customMerger:U}=A;if(w===null||w===void 0)return X?$:w;if(U){let W=U($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return YB($,w,f,Y);if(!w0(w)||!w0($))return w;return XG($,w,A,Y)}function YB($,w,A,Y){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return AG($,w);case"smart":return YG($,w,Y);default:return w}return w}function AG($,w){let A=[...w];for(let Y of $)if(!A.some((f)=>bX(f,Y)))A.push(Y);return A}function YG($,w,A){if(w.length===0)return $;if($.length===0)return w;if(w0(w[0])&&w0($[0]))return fG($,w,A);if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}function fG($,w,A){let Y=[...w];for(let f of $){if(!w0(f)){Y.push(f);continue}let X=["id","name","key","path","type"],U=!1;for(let W of X)if(W in f){if(Y.find((B)=>w0(B)&&(W in B)&&B[W]===f[W])){U=!0;break}}if(!U)Y.push(f)}return Y}function XG($,w,A,Y){let f=w;if(w0(f)&&Y.has(f))return Y.get(f);let X={...$};if(w0(f))Y.set(f,X);for(let U in f){if(!Object.prototype.hasOwnProperty.call(f,U))continue;let W=f[U],J=X[U];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){X[U]=W;continue}if(w0(W)&&w0(J))X[U]=AB(J,W,A,Y);else if(Array.isArray(W)||Array.isArray(J))X[U]=YB(J,W,A.arrayMergeMode||"smart",Y);else X[U]=W}return X}function eX($,w,A="replace"){return wB($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function bX($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!bX($[A],w[A]))return!1;return!0}if(w0($)&&w0(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!bX($[f],w[f]))return!1}return!0}return!1}function w0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class WY{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:Y="replace",useCache:f=!0,cacheTtl:X,trackPerformance:U=!0,verbose:W=!1}=A;if(f){let B=gw.getWithFileCheck("file",$);if(B){if(W)console.log(`Configuration loaded from cache: ${$}`);return B}}let J=async()=>{if(!kA($))return null;try{let B=`?t=${Date.now()}`,E=await import($+B),j=E.default||E,T="default"in E,F=Object.keys(E).length>0;if(!T&&!F)throw new P1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof j!=="object"||j===null||Array.isArray(j))throw new P1($,Error("Configuration must export a valid object"),"unknown");let K={config:eX(w,j,Y),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(f)gw.setWithFileCheck("file",K,$,X);return K}catch(B){throw B instanceof Error?ww.configLoad($,B):ww.configLoad($,Error(String(B)))}};if(U)return b1.track("loadFromPath",J,{path:$});return J()}async tryLoadFromPaths($,w,A={}){for(let Y of $)try{let f=await this.loadFromPath(Y,w,A);if(f)return f}catch(f){if(f instanceof Error&&f.name==="ConfigLoadError")throw f;if(A.verbose)console.warn(`Failed to load config from ${Y}:`,f)}return null}generateConfigPaths($,w,A){let Y=this.generateNamePatterns($,A),f=[];for(let X of Y)for(let U of this.extensions)f.push(CX(w,`${X}${U}`));return f}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(A.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)A.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return A.filter(Boolean)}checkFileAccess($){return eW(async()=>{return kA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let Y=[];if(!kA($))return Y;if(w||A){let f=this.generateNamePatterns(w||"",A);for(let X of f)for(let U of this.extensions){let W=CX($,`${X}${U}`);if(await this.checkFileAccess(W))Y.push(W)}}else try{let{readdirSync:f}=await import("fs"),X=f($);for(let U of X)if(this.looksLikeConfigFile(U)){let W=CX($,U);if(await this.checkFileAccess(W))Y.push(W)}}catch{return[]}return Y}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((A)=>A.test($))}async validateConfigFile($){let w=[];try{if(!kA($))return w.push("Configuration file does not exist"),w;let A=await import($),Y=A.default||A;if(Y===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)w.push("Configuration must be an object");else if(Array.isArray(Y))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:f}=await import("fs"),X=f($,"utf8");JSON.parse(X)}catch(f){w.push(`Invalid JSON syntax: ${f}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(Y)=>{try{let f=await this.loadFromPath(Y,{},w);if(f)A.set(Y,f.config)}catch(f){if(w.verbose)console.warn(`Failed to preload ${Y}:`,f)}})),A}}class $8{async validateConfiguration($,w,A={}){let{stopOnFirstError:Y=!1,validateRequired:f=!0,validateTypes:X=!0,customRules:U=[],trackPerformance:W=!0,verbose:J=!1}=A,B=async()=>{let E=[],j=[],T={stopOnFirstError:Y,validateRequired:f,validateTypes:X,customRules:U,trackPerformance:W,verbose:J};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,T);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],T);else return this.validateWithJSONSchema($,w,T)}catch(F){return E.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:E,warnings:j}}};if(W)return await b1.track("validateConfiguration",B);return B()}async validateWithSchemaFile($,w,A){try{if(!q2(w))throw new i1(w,[{path:"",message:"Schema file does not exist"}]);let Y=await import(w),f=Y.default||Y;if(Array.isArray(f))return this.validateWithRules($,f,A);else return this.validateWithJSONSchema($,f,A)}catch(Y){throw new i1(w,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema($,w,A){let Y=[],f=[];return this.validateObjectAgainstSchema($,w,"",Y,f,A),{isValid:Y.length===0,errors:Y,warnings:f}}validateObjectAgainstSchema($,w,A,Y,f,X){if(X.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(U)){if(Y.push({path:A,message:`Expected type ${W.join(" or ")}, got ${U}`,expected:W.join(" or "),actual:U,rule:"type"}),X.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(Y.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),X.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)Y.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)Y.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))Y.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)Y.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)Y.push({path:A,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 W=A?`${A}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,W,Y,f,X),X.stopOnFirstError&&Y.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(X.validateRequired&&w.required){for(let W of w.required)if(!(W in U)){if(Y.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),X.stopOnFirstError)return}}if(w.properties){for(let[W,J]of Object.entries(w.properties))if(W in U){let B=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(U[W],J,B,Y,f,X),X.stopOnFirstError&&Y.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let J of Object.keys(U))if(!W.has(J))f.push({path:A?`${A}.${J}`:J,message:`Additional property '${J}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let Y=[],f=[];for(let X of w)try{let U=this.getValueByPath($,X.path),W=this.validateWithRule(U,X,X.path);if(Y.push(...W),A.stopOnFirstError&&Y.length>0)break}catch(U){Y.push({path:X.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:f}}validateWithRule($,w,A){let Y=[];if(w.required&&($===void 0||$===null))return Y.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),Y;if($===void 0||$===null)return Y;if(w.type){let f=Array.isArray($)?"array":typeof $;if(f!==w.type)Y.push({path:A,message:w.message||`Expected type ${w.type}, got ${f}`,expected:w.type,actual:f,rule:"type"})}if(w.min!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f<w.min)Y.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:f,rule:"min"})}if(w.max!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f>w.max)Y.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:f,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))Y.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))Y.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let f=w.validator($);if(f)Y.push({path:A,message:w.message||f,rule:"custom"})}return Y}getValueByPath($,w){if(!w)return $;let A=w.split("."),Y=$;for(let f of A)if(Y&&typeof Y==="object"&&f in Y)Y=Y[f];else return;return Y}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of A){let[,f,X,U]=Y;w.push({path:f,required:!X,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:EB},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class w8{fileLoader=new WY;envProcessor=new JY;validator=new $8;async loadConfig($){let w=Date.now(),{cache:A,performance:Y,schema:f,validate:X,...U}=$;try{if(A?.enabled){let J=this.checkCache(U.name||"",U);if(J)return J}let W;try{W=await this.loadConfigurationStrategies(U,!0,A)}catch(J){let B=U.__strictErrorHandling;if(J instanceof Error&&J.name==="ConfigNotFoundError"){if(B)throw J;W={...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(J instanceof Error&&J.name==="ConfigLoadError"){let E=J.message.includes("EACCES")||J.message.includes("EPERM")||J.message.includes("permission denied"),j=!E&&(J.message.includes("syntax")||J.message.includes("Expected")||J.message.includes("Unexpected")||J.message.includes("BuildMessage")||J.message.includes("errors building")),T=J.message.includes("Configuration must export a valid object")||J.message.includes("Configuration file is empty and exports nothing");if(B&&(T||E))throw J;if(j&&(!B||!T))W={...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(!B)W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${J.message}`]};else throw J}else W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${J instanceof Error?J.message:String(J)}`]}}if(f||X)await this.validateConfiguration(W.config,f,X,U.name);if(A?.enabled&&W)this.cacheResult(U.name||"",W,A,U);if(Y?.enabled){let J={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(J);if(Y.slowThreshold&&J.duration>Y.slowThreshold)F0.warn(`Slow configuration loading detected: ${J.duration}ms for ${U.name}`);W.metrics=J}return W}catch(W){let J=Date.now()-w;throw F0.error(`Configuration loading failed after ${J}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:Y="",alias:f,cwd:X,configDir:U,defaultConfig:W,checkEnv:J=!0,arrayStrategy:B="replace",verbose:E=!1}=$,j=X||Rw.cwd(),T=[],F=await this.loadLocalConfiguration(Y,f,j,U,W,B,E,J,A);if(F)return T.push(...this.getLocalSearchPaths(Y,f,j,U)),this.finalizeResult(F,T,J,Y,E);let H=await this.loadHomeConfiguration(Y,f,W,B,E,J);if(H)return T.push(...this.getHomeSearchPaths(Y,f)),this.finalizeResult(H,T,J,Y,E);let G=await this.loadPackageJsonConfiguration(Y,f,j,W,B,E,J);if(G)return T.push(x$(j,"package.json")),this.finalizeResult(G,T,J,Y,E);if(T.push(...this.getAllSearchPaths(Y,f,j,U)),w)throw ww.configNotFound(Y,T,f);return{...await this.applyEnvironmentVariables(Y,W,J,E),warnings:[`No configuration file found for "${Y}"${f?` or alias "${f}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,Y,f,X,U,W,J){let B=W?Z1($,f,U):f,E=this.getLocalDirectories(A,Y);for(let j of E){if(U)F0.info(`Searching for configuration in: ${j}`);let T=this.fileLoader.generateConfigPaths($,j,w),F=await this.fileLoader.tryLoadFromPaths(T,B,{arrayStrategy:X,verbose:U,cacheTtl:J?.ttl,useCache:!J?.ttl||J.ttl>100});if(F){if(U)F0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,Y,f,X){if(!$)return null;let U=X?Z1($,A,f):A,W=[x$(Pw(),".config",$),x$(Pw(),".config"),Pw()];for(let J of W){if(f)F0.info(`Checking home directory: ${J}`);let B=this.fileLoader.generateConfigPaths($,J,w),E=await this.fileLoader.tryLoadFromPaths(B,U,{arrayStrategy:Y,verbose:f});if(E){if(f)F0.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration($,w,A,Y,f,X,U){let W=U?Z1($,Y,X):Y;try{let J=x$(A,"package.json");if(!PX(J))return null;let B=await import(J),E=B[$],j=$;if(!E&&w)E=B[w],j=w;if(E&&typeof E==="object"&&!Array.isArray(E)){if(X)F0.success(`Configuration loaded from package.json: ${j}`);return{config:eX(W,E,f),source:{type:"package.json",path:J,priority:30,timestamp:new Date}}}}catch(J){if(X)F0.warn("Failed to load package.json:",[J instanceof Error?J:Error(String(J))])}return null}async applyEnvironmentVariables($,w,A,Y){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:Z1($,w,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,Y,f){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,Y){let f=[];if(A){let X=A($);if(X)f.push(...X)}if(w){let X=await this.validator.validateConfiguration($,w);if(!X.isValid)f.push(...X.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(f.length>0)throw ww.configValidation(Y||"unknown",f,Y)}checkCache($,w){let A=this.generateCacheKey($,w);return gw.get(A)||null}cacheResult($,w,A,Y){let f=this.generateCacheKey($,Y);gw.set(f,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias)A.push(`alias:${w.alias}`);if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,x$($,"config"),x$($,".config"),w?x$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,Y){let f=[];return f.push(...this.getLocalSearchPaths($,w,A,Y)),f.push(...this.getHomeSearchPaths($,w)),f.push(x$(A,"package.json")),f}getLocalSearchPaths($,w,A,Y){let f=this.getLocalDirectories(A,Y),X=[];for(let U of f)X.push(...this.fileLoader.generateConfigPaths($,U,w));return X}getHomeSearchPaths($,w){if(!$)return[];let A=[x$(Pw(),".config",$),x$(Pw(),".config"),Pw()],Y=[];for(let f of A)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}async loadConfigWithResult($){return this.loadConfig($)}}function kW($){let A=!($.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 A||Y}async function UG($){return k0.loadConfig({...$,__strictErrorHandling:!0})}async function fB($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let Y;if(A)Y=await k0.loadConfig($);else Y=await k0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return Y?.config??w}catch(Y){let f=Y instanceof Error?Y.name:"UnknownError",X=Y instanceof Error?Y.message:String(Y);if(!(f==="ConfigNotFoundError"||f==="ConfigLoadError"||f==="ConfigValidationError"||X.includes("config"))&&$.verbose)F0.warn("Unexpected error loading config, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);let W=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await k0.applyEnvironmentVariables(W.name||"",w,!0,W.verbose||!1))?.config??w;return w}}async function JG($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await k0.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(A){if(A instanceof Error&&(A.name==="ConfigNotFoundError"||A.name==="ConfigLoadError"&&kW(A)))return(await k0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await k0.loadConfig({...$,cwd:$.cwd||Rw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&kW(w)))return(await k0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function WG($,w,A="replace"){let Y=new WY;try{let f=await Y.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return f?f.config:null}catch{return null}}function Z1($,w,A=!1){let Y=new JY,f=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function X(U,W=[]){let J={...U};for(let[B,E]of Object.entries(U)){let j=[...W,B],T=[`${f}_${j.join("_").toUpperCase()}`,`${f}_${j.map((G)=>G.toUpperCase()).join("")}`,`${f}_${j.map((G)=>G.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,H;for(let G of T)if(F=Rw.env[G],F!==void 0){H=G;break}if(F!==void 0&&H)if(typeof E==="boolean")J[B]=["true","1","yes"].includes(F.toLowerCase());else if(typeof E==="number"){let G=Number(F);if(!Number.isNaN(G))J[B]=G}else if(Array.isArray(E))try{J[B]=JSON.parse(F)}catch{J[B]=F.split(",").map((G)=>G.trim())}else J[B]=F;else if(E&&typeof E==="object"&&!Array.isArray(E))J[B]=X(E,j)}return J}return X(w)}function BG($){let w=x$(Rw.cwd(),$.configDir),A=x$(Rw.cwd(),$.generatedDir),Y=x$(A,"config-types.ts");if(!PX(EW(Y)))sz(EW(Y),{recursive:!0,mode:511});let f=PX(w)?oz(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],X=`// Generated by bunfig v${bG}
34
+ export type ConfigNames = ${f.length?`'${f.join("' | '")}'`:"string"}
35
+ `;ez(Y,X,{mode:438})}function EG($){let w=null,A=null,Y=()=>{if(!A)A=fB($).then((X)=>{return w=X,X},(X)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)F0.warn("Config loading failed, using defaults:",[X instanceof Error?X:Error(String(X))]);return U});return A},f="defaultConfig"in $?$.defaultConfig:{};return w=f,Y(),new Proxy({},{get(X,U){if(w)return w[U];let W=f[U];return Y(),W},has(X,U){return U in(w||f)},ownKeys(){return Object.keys(w||f)},getOwnPropertyDescriptor(X,U){return Object.getOwnPropertyDescriptor(w||f,U)},set(X,U,W){if(!w)w={...f};return w[U]=W,!0}})}function jG($){let w=CW(M2.cwd(),$?.configDir||"./config");function A(){if(!N2(w))return[];let f=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),X=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=y2(w).filter((J)=>f.has(SX(J))).map((J)=>({base:J.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:J})),W=new Map;for(let{base:J,file:B}of U){let E=SX(B).toLowerCase(),j=W.get(J);if(!j){W.set(J,B);continue}let T=SX(j).toLowerCase();if(X.indexOf(E)<X.indexOf(T))W.set(J,B)}return Array.from(W.entries()).map(([J,B])=>({base:J,file:B})).sort((J,B)=>J.base.localeCompare(B.base))}function Y(){let f=A(),X=f.map((B)=>B.base),U=X.length?X.map((B)=>`'${B}'`).join(" | "):"string",W=f.length?`{
36
+ ${f.map((B)=>{let E=CW(w,B.file).replace(/\\/g,"/");return` '${B.base}': typeof import('${E}').default`}).join(`,
37
37
  `)}
38
- }`:"Record<string, any>";return`export type ConfigNames = ${Z}
39
- export type ConfigByName = ${B}
38
+ }`:"Record<string, any>";return`export type ConfigNames = ${U}
39
+ export type ConfigByName = ${W}
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(Y){Y.onResolve({filter:/^virtual:bunfig-types$/},(U)=>{return{path:U.path,namespace:"bunfig-virtual"}}),Y.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}function rG($,w={}){let A=iA.cwd();while(A.includes("storage"))A=sW(A,"..");let J=sW(A,$||"");if(w?.relative)return Qf(iA.cwd(),J);return J}function B$(){if(O0.env.NODE_ENV==="test"||O0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function sG(){if(O0.env.NODE_ENV==="test"||O0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof O0<"u"){let $=O0.type;if($==="renderer"||$==="worker")return!1;return!!(O0.versions&&(O0.versions.node||O0.versions.bun))}return!1}class uB{async format($){let w=await sG(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:iw.pid,hostname:w(),environment:iw.env.NODE_ENV||"development",platform:iw.platform,version:iw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:iw.env.NODE_ENV||iw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class sA{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={...gA},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new uB,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??O.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...HU,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...HU};return{...HU,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:gA.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!B$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let Y,U=0,Z=3,B=1000;while(U<Z)try{try{try{await uf(this.config.logDirectory,wB.F_OK|wB.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await cf(this.config.logDirectory,{recursive:!0,mode:493});else if(E.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw E;else throw E}}catch(E){throw console.error("Debug: [writeToFile] Failed to create log directory:",E),E}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:L0.from($);try{if(!MA(this.currentLogFile))await FU(this.currentLogFile,"",{mode:420});if(Y=$B(this.currentLogFile,"a",420),bf(Y,W,{flag:"a"}),eW(Y),Y!==void 0)jU(Y),Y=void 0;if((await Pw(this.currentLogFile)).size===0){if(await FU(this.currentLogFile,W,{flag:"w",mode:420}),(await Pw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let j=E;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(U<Z-1){let F=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Z}:`,F);let f=B*2**U;await new Promise((z)=>setTimeout(z,f)),U++;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(Y!==void 0)try{jU(Y)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(W){if(U===Z-1){let j=W,F=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),W}U++;let E=B*2**(U-1);await new Promise((j)=>setTimeout(j,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(J,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 bw(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 bw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return bw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(B$())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 A=typeof w.interval==="number"?w.interval:60,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},J)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),J=this.generateKey();this.currentKeyId=A,this.keys.set(A,J),this.encryptionKeys.set(A,{key:J,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),U=typeof w.maxKeys==="number"?w.maxKeys:1,Z=Math.max(1,U);if(Y.length>Z)for(let[B]of Y.slice(Z))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return EU(16).toString("hex")}generateKey(){return EU(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(),A=EU(16),J=kf("aes-256-gcm",w,A),Y=L0.isBuffer($)?$:L0.from($,"utf8"),U=J.update(Y),Z=J.final(),B=U.length+Z.length,W=J.getAuthTag(),E=L0.allocUnsafe(16+B+16);return A.copy(E,0),U.copy(E,16),Z.copy(E,16+U.length),W.copy(E,16+B),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=JB(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(L0.from(L0.concat(Y)))),J.on("error",A),J.write($),J.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(B$())return;if(!this.shouldWriteToFile())return;let $=await Pw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await IA(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await Pw(A).catch(()=>null))try{if(await AB(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await CA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await Pw(A).catch(()=>null))await AB(A,U)}if(this.currentLogFile=J,w.maxFiles){let U=(await IA(this.config.logDirectory)).filter((Z)=>Z.startsWith(this.name)).sort((Z,B)=>B.localeCompare(Z));for(let Z of U.slice(w.maxFiles))await CA(bw(this.config.logDirectory,Z))}}}async compressLogFile($,w){let A=oW($),J=Pf(w),Y=JB();await nf(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(J);console.log(J)}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()})),MA(this.currentLogFile))try{let $=$B(this.currentLogFile,"r+");eW($),jU($)}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(!B$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await IA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await CA(bw(this.config.logDirectory,A))}catch(J){console.error(`Failed to delete temp file ${A}:`,J)}}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()?P.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||B$())return!1;let $=typeof O.env.NO_COLOR<"u",w=O.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof O.stderr<"u"&&O.stderr.isTTY||typeof O.stdout<"u"&&O.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=O.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${P.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,Y)=>{let U=P.underline(P.blue(J)),Z=this.toAbsoluteFilePath(Y);if(Z&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(Z)}`,W="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${B}\x1B\\${U}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${Y}\x1B\\${U}\x1B]8;;\x1B\\`;return U}),w=w.replace(/`([^`]+)`/g,(A,J)=>P.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>P.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>P.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>P.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>P.strikethrough(J)),w}supportsHyperlinks(){if(B$())return!1;let $=O.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 A=O.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(vf(w)||w.startsWith("./")||w.startsWith("../"))w=mf(w);else return null;return MA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){if(!this.shouldLog($))return;let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);let{consoleText:W,fileText:E}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":A2[$],f=this.options.showTags!==!1&&this.name?P.gray(this.formatTag(this.name)):"",z;switch($){case"debug":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:P.gray(W),level:$}),console.error(z);break;case"info":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"success":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:P.green(W),level:$}),console.error(z);break;case"warning":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"error":if(z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.error(z),B){let H=B.split(`
43
- `);for(let T of H)if(T.trim()&&!T.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:P.gray(` ${T}`),level:$,showTimestamp:!1}))}break}}else if(!B$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}let j=`${U} ${this.environment}.${$.toUpperCase()}: ${E}
44
- `;if(B)j+=`${B}
45
- `;if(j=j.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(j)}progress($,w=""){let A={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return A;let J=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:J,lastRenderedLine:""},this.shouldStyleConsole()&&!B$()&&O.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()&&!B$()&&O.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!B$()&&O.stdout.isTTY)O.stdout.write(`
46
- `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!B$()&&O.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?P.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:this.options.showIcons===!1?"":P.blue("◐"),tag:A,message:`${P.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),E=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
47
- `,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=this.options.showTags!==!1&&this.name?P.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":P.green("✓"),tag:j,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!B$())console.error(E.trim());if(this.shouldWriteToFile())await this.writeToFile(E)}}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}:${$}`,A=new sA(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(A),A}createReadStream(){if(B$())throw Error("createReadStream is not supported in browser environments");if(!MA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return oW(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 A=this.keys.get(this.currentKeyId);try{let J=L0.isBuffer($)?$:L0.from($,"base64"),Y=J.subarray(0,16),U=J.subarray(J.length-16),Z=J.subarray(16,J.length-16),B=xf("aes-256-gcm",A,Y);B.setAuthTag(U);let W=B.update(Z),E=B.final(),j=W.length+E.length,F=L0.allocUnsafe(j);return W.copy(F,0),E.copy(F,W.length),F.toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return B$()}isServerMode(){return!B$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w),{consoleText:Y,fileText:U}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=Y.split(`
48
- `),W=Math.max(...B.map((f)=>f.length))+2,E=`┌${"─".repeat(W)}┐`,j=`└${"─".repeat(W)}┘`,F=B.map((f)=>{return this.formatConsoleMessage({timestamp:A,message:P.cyan(f),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:P.cyan(E),showTimestamp:!1})),F.forEach((f)=>console.error(f)),console.error(this.formatConsoleMessage({timestamp:A,message:P.cyan(j),showTimestamp:!1}))}else if(!B$())console.error(`${J} ${this.environment}.INFO: [BOX] ${U}`);let Z=`${J} ${this.environment}.INFO: [BOX] ${U}
49
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Z)}async prompt($){if(B$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${P.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();O.stdin.removeListener("data",A);try{if(typeof O.stdin.setRawMode==="function")O.stdin.setRawMode(!1)}catch{}O.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof O.stdin.setRawMode==="function")O.stdin.setRawMode(!0)}catch{}O.stdin.resume(),O.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,E=0;if(A=$.replace(W,(j,F)=>{if(F==="%")return"%";if(E>=w.length)return j;let f=w[E++];switch(F){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 j}}),E<w.length)A+=` ${w.slice(E).map((j)=>typeof j==="object"?JSON.stringify(j,null,2):String(j)).join(" ")}`}let{consoleText:J,fileText:Y}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?P.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${P.blue("◐")} `;console.error(`${E}${W} ${P.cyan(J)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
50
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!O.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=P.green("━".repeat(J)),Z=P.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=this.options.showIcons===!1?"":w||A===100?P.green("✓"):P.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${P.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=O.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,O.stdout.write($.lastRenderedLine),w)O.stdout.write(`
51
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||B$()||!O.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(B$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await IA(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let U=bw(this.config.logDirectory,J);if($.before)try{if((await Pw(U)).mtime>=$.before)continue}catch(Z){console.error(`Failed to get stats for file ${U}:`,Z);continue}A.push(U)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await CA(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function J2($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:Y=()=>!0,fallback:U}=w,Z=Error("Unknown error occurred");for(let B=0;B<=A;B++)try{return await $()}catch(W){if(Z=W instanceof Error?W:Error(String(W)),B===A||!Y(Z))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(U!==void 0)return U;throw Z instanceof Error?Z:Error(`Unknown error: ${String(Z)}`)}class uU{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,A={}){let{prefix:J,useCamelCase:Y=!0,useBackwardCompatibility:U=!0,customParsers:Z={},verbose:B=!1,trackPerformance:W=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let j=J||this.generateEnvPrefix($),F={...w};return this.processObject(F,[],j,{useCamelCase:Y,useBackwardCompatibility:U,customParsers:Z,verbose:B,configName:$}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return XU.track("applyEnvironmentVariables",E,{configName:$});return E()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=Z.map((j)=>this.formatEnvKey(j,J.useCamelCase)),W=`${A}_${B.join("_")}`,E=J.useBackwardCompatibility?`${A}_${Z.map((j)=>j.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.processObject(U,Z,A,J);else{let j=yA.env[W]||(E?yA.env[E]:void 0);if(j!==void 0){if(J.verbose){let F=yA.env[W]?W:E}try{$[Y]=this.parseEnvironmentValue(j,typeof U,W,J.customParsers,J.configName)}catch(F){if(F instanceof iU)throw F;throw cw.envVar(W,j,typeof U,J.configName)}}}}}parseEnvironmentValue($,w,A,J,Y){for(let[U,Z]of Object.entries(J))try{return Z($)}catch{continue}for(let U of this.defaultParsers)if(U.canParse($,w))try{return U.parse($)}catch{throw cw.envVar(A,$,`${w} (via ${U.name} parser)`,Y)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,Y]of Object.entries(yA.env))if(J.startsWith(A)&&Y!==void 0)w[J]=Y;return w}validateEnvironmentVariable($,w,A){let J=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))J.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(Y){J.push(`Cannot parse value "${w}" as ${A}: ${Y}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:Y="text"}=A,U=J||this.generateEnvPrefix($),Z=[];switch(this.extractEnvVarInfo(w,[],U,Z),Y){case"markdown":return this.formatAsMarkdown(Z,$);case"json":return JSON.stringify(Z,null,2);default:return this.formatAsText(Z,$)}}extractEnvVarInfo($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=`${A}_${Z.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.extractEnvVarInfo(U,Z,A,J);else J.push({key:B,type:Array.isArray(U)?"array":typeof U,description:`Configuration for ${Z.join(".")}`,example:this.generateExample(U)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
52
-
53
- `;for(let J of $)A+=`${J.key}
54
- `,A+=` Type: ${J.type}
55
- `,A+=` Description: ${J.description}
56
- `,A+=` Example: ${J.example}
42
+ `}return{name:"bunfig-plugin",setup(f){f.onResolve({filter:/^virtual:bunfig-types$/},(X)=>{return{path:X.path,namespace:"bunfig-virtual"}}),f.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:Y(),loader:"ts"}})}}}function uG($,w={}){let A=aA.cwd();while(A.includes("storage"))A=SW(A,"..");let Y=SW(A,$||"");if(w?.relative)return C2(aA.cwd(),Y);return Y}function F$(){if(D0.env.NODE_ENV==="test"||D0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function vG(){if(D0.env.NODE_ENV==="test"||D0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof D0<"u"){let $=D0.type;if($==="renderer"||$==="worker")return!1;return!!(D0.versions&&(D0.versions.node||D0.versions.bun))}return!1}class zB{async format($){let w=await vG(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:lw.pid,hostname:w(),environment:lw.env.NODE_ENV||"development",platform:lw.platform,version:lw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:lw.env.NODE_ENV||lw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class BY{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={...YY},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new zB,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??Q.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}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:YY.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!F$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let f,X=0,U=3,W=1000;while(X<U)try{try{try{await Q2(this.config.logDirectory,QW.F_OK|QW.W_OK)}catch(B){if(B instanceof Error&&"code"in B)if(B.code==="ENOENT")await _2(this.config.logDirectory,{recursive:!0,mode:493});else if(B.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw B;else throw B}}catch(B){throw console.error("Debug: [writeToFile] Failed to create log directory:",B),B}let J=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:O0.from($);try{if(!ZA(this.currentLogFile))await VX(this.currentLogFile,"",{mode:420});if(f=VW(this.currentLogFile,"a",420),V2(f,J,{flag:"a"}),OW(f),f!==void 0)OX(f),f=void 0;if((await mw(this.currentLogFile)).size===0){if(await VX(this.currentLogFile,J,{flag:"w",mode:420}),(await mw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(B){let E=B;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(X<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${U}:`,j);let T=W*2**X;await new Promise((F)=>setTimeout(F,T)),X++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(f!==void 0)try{OX(f)}catch(B){console.error("Debug: [writeToFile] Error closing file descriptor:",B)}}}catch(J){if(X===U-1){let E=J,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),J}X++;let B=W*2**(X-1);await new Promise((E)=>setTimeout(E,B))}})();this.pendingOperations.push(A);let Y=this.pendingOperations.length-1;try{await A}catch(f){throw console.error("Debug: [writeToFile] Error in operation:",f),f}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 dw(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 dw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return dw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(F$())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 A=typeof w.interval==="number"?w.interval:60,Y=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((f)=>{console.error("Error rotating keys:",f)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=A,this.keys.set(A,Y),this.encryptionKeys.set(A,{key:Y,createdAt:new Date});let f=Array.from(this.encryptionKeys.entries()).sort(([,W],[,J])=>J.createdAt.getTime()-W.createdAt.getTime()),X=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,X);if(f.length>U)for(let[W]of f.slice(U))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return LX(16).toString("hex")}generateKey(){return LX(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(),A=LX(16),Y=S2("aes-256-gcm",w,A),f=O0.isBuffer($)?$:O0.from($,"utf8"),X=Y.update(f),U=Y.final(),W=X.length+U.length,J=Y.getAuthTag(),B=O0.allocUnsafe(16+W+16);return A.copy(B,0),X.copy(B,16),U.copy(B,16+X.length),J.copy(B,16+W),{encrypted:B,iv:A}}async compressData($){return new Promise((w,A)=>{let Y=DW(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w(O0.from(O0.concat(f)))),Y.on("error",A),Y.write($),Y.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(F$())return;if(!this.shouldWriteToFile())return;let $=await mw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await xA(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await mw(A).catch(()=>null))try{if(await _W(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await PA(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await VX(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await mw(A).catch(()=>null))await _W(A,X)}if(this.currentLogFile=Y,w.maxFiles){let X=(await xA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,W)=>W.localeCompare(U));for(let U of X.slice(w.maxFiles))await PA(dw(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=LW($),Y=O2(w),f=DW();await Z2(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}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()})),ZA(this.currentLogFile))try{let $=VW(this.currentLogFile,"r+");OW($),OX($)}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(!F$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await xA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await PA(dw(this.config.logDirectory,A))}catch(Y){console.error(`Failed to delete temp file ${A}:`,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()?i.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||F$())return!1;let $=typeof Q.env.NO_COLOR<"u",w=Q.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof Q.stderr<"u"&&Q.stderr.isTTY||typeof Q.stdout<"u"&&Q.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=Q.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${i.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,Y,f)=>{let X=i.underline(i.blue(Y)),U=this.toAbsoluteFilePath(f);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(U)}`,J="\x1B]8;;",B="\x1B\\";return`\x1B]8;;${W}\x1B\\${X}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${f}\x1B\\${X}\x1B]8;;\x1B\\`;return X}),w=w.replace(/`([^`]+)`/g,(A,Y)=>i.bgGray(Y)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,Y)=>i.bold(Y)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,Y)=>i.italic(Y)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,Y)=>i.italic(Y)),w=w.replace(/~([^~]+)~/g,(A,Y)=>i.strikethrough(Y)),w}supportsHyperlinks(){if(F$())return!1;let $=Q.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 A=Q.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(D2(w)||w.startsWith("./")||w.startsWith("../"))w=k2(w);else return null;return ZA(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){if(!this.shouldLog($))return;let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);let{consoleText:J,fileText:B}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let j=this.options.showIcons===!1?"":tG[$],T=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:i.gray(J),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:i.green(J),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.error(F),W){let H=W.split(`
43
+ `);for(let G of H)if(G.trim()&&!G.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:i.gray(` ${G}`),level:$,showTimestamp:!1}))}break}}else if(!F$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}let E=`${X} ${this.environment}.${$.toUpperCase()}: ${B}
44
+ `;if(W)E+=`${W}
45
+ `;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress($,w=""){let A={update:(W,J)=>{},finish:(W)=>{},interrupt:(W,J)=>{}};if(!this.enabled)return A;let Y=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!F$()&&Q.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(W,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,W),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!F$()&&Q.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(W)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,W)},interrupt:(W,J="info")=>{if(!F$()&&Q.stdout.isTTY)Q.stdout.write(`
46
+ `);if(this[J==="warning"?"warn":J](W),this.activeProgressBar&&this.shouldStyleConsole()&&!F$()&&Q.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":i.blue("◐"),tag:A,message:`${i.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),B=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)B+=` ${JSON.stringify(A)}`;if(B+=`
47
+ `,B=B.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":i.green("✓"),tag:E,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!F$())console.error(B.trim());if(this.shouldWriteToFile())await this.writeToFile(B)}}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}:${$}`,A=new BY(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(A),A}createReadStream(){if(F$())throw Error("createReadStream is not supported in browser environments");if(!ZA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return LW(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 A=this.keys.get(this.currentKeyId);try{let Y=O0.isBuffer($)?$:O0.from($,"base64"),f=Y.subarray(0,16),X=Y.subarray(Y.length-16),U=Y.subarray(16,Y.length-16),W=L2("aes-256-gcm",A,f);W.setAuthTag(X);let J=W.update(U),B=W.final(),E=J.length+B.length,j=O0.allocUnsafe(E);return J.copy(j,0),B.copy(j,J.length),j.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return F$()}isServerMode(){return!F$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w),{consoleText:f,fileText:X}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=f.split(`
48
+ `),J=Math.max(...W.map((T)=>T.length))+2,B=`┌${"─".repeat(J)}┐`,E=`└${"─".repeat(J)}┘`,j=W.map((T)=>{return this.formatConsoleMessage({timestamp:A,message:i.cyan(T),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:i.cyan(B),showTimestamp:!1})),j.forEach((T)=>console.error(T)),console.error(this.formatConsoleMessage({timestamp:A,message:i.cyan(E),showTimestamp:!1}))}else if(!F$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${X}`);let U=`${Y} ${this.environment}.INFO: [BOX] ${X}
49
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(F$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${i.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();Q.stdin.removeListener("data",A);try{if(typeof Q.stdin.setRawMode==="function")Q.stdin.setRawMode(!1)}catch{}Q.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof Q.stdin.setRawMode==="function")Q.stdin.setRawMode(!0)}catch{}Q.stdin.resume(),Q.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let J=/%([sdijfo%])/g,B=0;if(A=$.replace(J,(E,j)=>{if(j==="%")return"%";if(B>=w.length)return E;let T=w[B++];switch(j){case"s":return String(T);case"d":case"i":return Number(T).toString();case"j":case"o":return JSON.stringify(T,null,2);default:return E}}),B<w.length)A+=` ${w.slice(B).map((E)=>typeof E==="object"?JSON.stringify(E,null,2):String(E)).join(" ")}`}let{consoleText:Y,fileText:f}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let J=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${i.blue("◐")} `;console.error(`${B}${J} ${i.cyan(Y)}`)}let W=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${f}
50
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(W)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!Q.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=i.green("━".repeat(Y)),U=i.gray("━".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=this.options.showIcons===!1?"":w||A===100?i.green("✓"):i.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${i.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=Q.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,Q.stdout.write($.lastRenderedLine),w)Q.stdout.write(`
51
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||F$()||!Q.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(F$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await xA(this.config.logDirectory),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let X=dw(this.config.logDirectory,Y);if($.before)try{if((await mw(X)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${X}:`,U);continue}A.push(X)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await PA(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function pG($,w={}){let{maxRetries:A=3,retryDelay:Y=1000,isRetryable:f=()=>!0,fallback:X}=w,U=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(J){if(U=J instanceof Error?J:Error(String(J)),W===A||!f(U))break;if(Y>0)await new Promise((B)=>setTimeout(B,Y))}if(X!==void 0)return X;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}class Y8{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,A={}){let{prefix:Y,useCamelCase:f=!0,useBackwardCompatibility:X=!0,customParsers:U={},verbose:W=!1,trackPerformance:J=!0}=A,B=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let E=Y||this.generateEnvPrefix($),j={...w};return this.processObject(j,[],E,{useCamelCase:f,useBackwardCompatibility:X,customParsers:U,verbose:W,configName:$}),{config:j,source:{type:"environment",priority:50,timestamp:new Date}}};if(J)return pX.track("applyEnvironmentVariables",B,{configName:$});return B()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=U.map((E)=>this.formatEnvKey(E,Y.useCamelCase)),J=`${A}_${W.join("_")}`,B=Y.useBackwardCompatibility?`${A}_${U.map((E)=>E.toUpperCase()).join("_")}`:null;if(Y.verbose);if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.processObject(X,U,A,Y);else{let E=bA.env[J]||(B?bA.env[B]:void 0);if(E!==void 0){if(Y.verbose){let j=bA.env[J]?J:B}try{$[f]=this.parseEnvironmentValue(E,typeof X,J,Y.customParsers,Y.configName)}catch(j){if(j instanceof A8)throw j;throw tw.envVar(J,E,typeof X,Y.configName)}}}}}parseEnvironmentValue($,w,A,Y,f){for(let[X,U]of Object.entries(Y))try{return U($)}catch{continue}for(let X of this.defaultParsers)if(X.canParse($,w))try{return X.parse($)}catch{throw tw.envVar(A,$,`${w} (via ${X.name} parser)`,f)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[Y,f]of Object.entries(bA.env))if(Y.startsWith(A)&&f!==void 0)w[Y]=f;return w}validateEnvironmentVariable($,w,A){let Y=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))Y.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(f){Y.push(`Cannot parse value "${w}" as ${A}: ${f}`)}return{isValid:Y.length===0,errors:Y}}generateEnvVarDocs($,w,A={}){let{prefix:Y,format:f="text"}=A,X=Y||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],X,U),f){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=`${A}_${U.map((J)=>this.formatEnvKey(J,!0)).join("_")}`;if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.extractEnvVarInfo(X,U,A,Y);else Y.push({key:W,type:Array.isArray(X)?"array":typeof X,description:`Configuration for ${U.join(".")}`,example:this.generateExample(X)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
52
+
53
+ `;for(let Y of $)A+=`${Y.key}
54
+ `,A+=` Type: ${Y.type}
55
+ `,A+=` Description: ${Y.description}
56
+ `,A+=` Example: ${Y.example}
57
57
 
58
58
  `;return A}formatAsMarkdown($,w){let A=`# Environment Variables for ${w}
59
59
 
60
60
  `;A+=`| Variable | Type | Description | Example |
61
61
  `,A+=`|----------|------|-------------|----------|
62
- `;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
63
- `;return A}}function Y2($,w,A={}){return pB($,w,A,new WeakMap)}function pB($,w,A,J){let{arrayMergeMode:Y="replace",skipNullish:U=!1,customMerger:Z}=A;if(w===null||w===void 0)return U?$:w;if(Z){let B=Z($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return tB($,w,Y,J);if(!e$(w)||!e$($))return w;return B2($,w,A,J)}function tB($,w,A,J){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return U2($,w);case"smart":return Z2($,w,J);default:return w}return w}function U2($,w){let A=[...w];for(let J of $)if(!A.some((Y)=>OU(Y,J)))A.push(J);return A}function Z2($,w,A){if(w.length===0)return $;if($.length===0)return w;if(e$(w[0])&&e$($[0]))return W2($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}function W2($,w,A){let J=[...w];for(let Y of $){if(!e$(Y)){J.push(Y);continue}let U=["id","name","key","path","type"],Z=!1;for(let B of U)if(B in Y){if(J.find((E)=>e$(E)&&(B in E)&&E[B]===Y[B])){Z=!0;break}}if(!Z)J.push(Y)}return J}function B2($,w,A,J){let Y=w;if(e$(Y)&&J.has(Y))return J.get(Y);let U={...$};if(e$(Y))J.set(Y,U);for(let Z in Y){if(!Object.prototype.hasOwnProperty.call(Y,Z))continue;let B=Y[Z],W=U[Z];if(A.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){U[Z]=B;continue}if(e$(B)&&e$(W))U[Z]=pB(W,B,A,J);else if(Array.isArray(B)||Array.isArray(W))U[Z]=tB(W,B,A.arrayMergeMode||"smart",J);else U[Z]=B}return U}function rB($,w,A="replace"){return Y2($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function OU($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!OU($[A],w[A]))return!1;return!0}if(e$($)&&e$(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!OU($[Y],w[Y]))return!1}return!0}return!1}function e$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class aB{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:Y=!0,cacheTtl:U,trackPerformance:Z=!0,verbose:B=!1}=A;if(Y){let E=kA.getWithFileCheck("file",$);if(E){if(B)console.log(`Configuration loaded from cache: ${$}`);return E}}let W=async()=>{if(!VA($))return null;try{let E=`?t=${Date.now()}`,j=await import($+E),F=j.default||j,f="default"in j,z=Object.keys(j).length>0;if(!f&&!z)throw new lA($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new lA($,Error("Configuration must export a valid object"),"unknown");let q={config:rB(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(Y)kA.setWithFileCheck("file",q,$,U);return q}catch(E){throw E instanceof Error?cw.configLoad($,E):cw.configLoad($,Error(String(E)))}};if(Z)return XU.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let Y=await this.loadFromPath(J,w,A);if(Y)return Y}catch(Y){if(Y instanceof Error&&Y.name==="ConfigLoadError")throw Y;if(A.verbose)console.warn(`Failed to load config from ${J}:`,Y)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),Y=[];for(let U of J)for(let Z of this.extensions)Y.push(qU(w,`${U}${Z}`));return Y}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);let J=w===void 0?[]:Array.isArray(w)?w:[w];for(let U of J){if(!U)continue;if(A.push(U,`.${U}.config`,`${U}.config`,`.${U}`),$)A.push(`${$}.${U}.config`,`.${$}.${U}.config`)}let Y=new Set;return A.filter((U)=>{if(!U||Y.has(U))return!1;return Y.add(U),!0})}checkFileAccess($){return J2(async()=>{return VA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!VA($))return J;if(w||A){let Y=this.generateNamePatterns(w||"",A);for(let U of Y)for(let Z of this.extensions){let B=qU($,`${U}${Z}`);if(await this.checkFileAccess(B))J.push(B)}}else try{let{readdirSync:Y}=await import("fs"),U=Y($);for(let Z of U)if(this.looksLikeConfigFile(Z)){let B=qU($,Z);if(await this.checkFileAccess(B))J.push(B)}}catch{return[]}return J}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((A)=>A.test($))}async validateConfigFile($){let w=[];try{if(!VA($))return w.push("Configuration file does not exist"),w;let A=await import($),J=A.default||A;if(J===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof J!=="object"||J===null)w.push("Configuration must be an object");else if(Array.isArray(J))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:Y}=await import("fs"),U=Y($,"utf8");JSON.parse(U)}catch(Y){w.push(`Invalid JSON syntax: ${Y}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(J)=>{try{let Y=await this.loadFromPath(J,{},w);if(Y)A.set(J,Y.config)}catch(Y){if(w.verbose)console.warn(`Failed to preload ${J}:`,Y)}})),A}}class sB{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:Y=!0,validateTypes:U=!0,customRules:Z=[],trackPerformance:B=!0,verbose:W=!1}=A,E=async()=>{let j=[],F=[],f={stopOnFirstError:J,validateRequired:Y,validateTypes:U,customRules:Z,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,f);else if(Array.isArray(w))return this.validateWithRules($,[...w,...Z],f);else return this.validateWithJSONSchema($,w,f)}catch(z){return j.push({path:"",message:`Validation failed: ${z}`,rule:"system"}),{isValid:!1,errors:j,warnings:F}}};if(B)return await XU.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!E2(w))throw new pA(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),Y=J.default||J;if(Array.isArray(Y))return this.validateWithRules($,Y,A);else return this.validateWithJSONSchema($,Y,A)}catch(J){throw new pA(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],Y=[];return this.validateObjectAgainstSchema($,w,"",J,Y,A),{isValid:J.length===0,errors:J,warnings:Y}}validateObjectAgainstSchema($,w,A,J,Y,U){if(U.validateTypes&&w.type){let Z=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(Z)){if(J.push({path:A,message:`Expected type ${B.join(" or ")}, got ${Z}`,expected:B.join(" or "),actual:Z,rule:"type"}),U.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(J.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),U.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)J.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)J.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))J.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)J.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)J.push({path:A,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let Z=0;Z<$.length;Z++){let B=A?`${A}[${Z}]`:`[${Z}]`;if(this.validateObjectAgainstSchema($[Z],w.items,B,J,Y,U),U.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let Z=$;if(U.validateRequired&&w.required){for(let B of w.required)if(!(B in Z)){if(J.push({path:A?`${A}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),U.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in Z){let E=A?`${A}.${B}`:B;if(this.validateObjectAgainstSchema(Z[B],W,E,J,Y,U),U.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(Z))if(!B.has(W))Y.push({path:A?`${A}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],Y=[];for(let U of w)try{let Z=this.getValueByPath($,U.path),B=this.validateWithRule(Z,U,U.path);if(J.push(...B),A.stopOnFirstError&&J.length>0)break}catch(Z){J.push({path:U.path,message:`Rule validation failed: ${Z}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:Y}}validateWithRule($,w,A){let J=[];if(w.required&&($===void 0||$===null))return J.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),J;if($===void 0||$===null)return J;if(w.type){let Y=Array.isArray($)?"array":typeof $;if(Y!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${Y}`,expected:w.type,actual:Y,rule:"type"})}if(w.min!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:Y,rule:"min"})}if(w.max!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:Y,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))J.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))J.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let Y=w.validator($);if(Y)J.push({path:A,message:w.message||Y,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let Y of A)if(J&&typeof J==="object"&&Y in J)J=J[Y];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,Y,U,Z]=J;w.push({path:Y,required:!U,type:this.mapTypeScriptType(Z)})}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:j2},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function F2($){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((A)=>`"${A}"`).join(", ")}`}class oB{fileLoader=new aB;envProcessor=new uU;validator=new sB;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:Y,validate:U,...Z}=$;try{if(A?.enabled){let W=this.checkCache(Z.name||"",Z);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(Z,!0,A)}catch(W){let E=Z.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(E)throw W;B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`No configuration file found for "${Z.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let j=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),F=!j&&(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(E&&(f||j))throw W;if(F&&(!E||!f))B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(Y||U)await this.validateConfiguration(B.config,Y,U,Z.name);if(A?.enabled&&B)this.cacheResult(Z.name||"",B,A,Z);if(J?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:Z.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(W);if(J.slowThreshold&&W.duration>J.slowThreshold)y0.warn(`Slow configuration loading detected: ${W.duration}ms for ${Z.name}`);B.metrics=W}return B}catch(B){if(B instanceof Error&&B.name==="ConfigNotFoundError")throw B;let W=Date.now()-w;throw y0.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:Y,cwd:U,configDir:Z,defaultConfig:B,checkEnv:W=!0,arrayStrategy:E="replace",verbose:j=!1}=$,F=U||tA.cwd(),f=[],z=await this.loadLocalConfiguration(J,Y,F,Z,B,E,j,W,A);if(z)return f.push(...this.getLocalSearchPaths(J,Y,F,Z)),this.finalizeResult(z,f,W,J,j);let H=await this.loadHomeConfiguration(J,Y,B,E,j,W);if(H)return f.push(...this.getHomeSearchPaths(J,Y)),this.finalizeResult(H,f,W,J,j);let T=await this.loadPackageJsonConfiguration(J,Y,F,B,E,j,W);if(T)return f.push(s$(F,"package.json")),this.finalizeResult(T,f,W,J,j);if(f.push(...this.getAllSearchPaths(J,Y,F,Z)),w)throw cw.configNotFound(J,f,Y);return{...await this.applyEnvironmentVariables(J,B,W,j),warnings:[`No configuration file found for "${J}"${F2(Y)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,Y,U,Z,B,W){let E=B?SA($,Y,Z):Y,j=this.getLocalDirectories(A,J);for(let F of j){if(Z)y0.info(`Searching for configuration in: ${F}`);let f=this.fileLoader.generateConfigPaths($,F,w),z=await this.fileLoader.tryLoadFromPaths(f,E,{arrayStrategy:U,verbose:Z,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(z){if(Z)y0.success(`Configuration loaded from: ${z.source.path}`);return z}}return null}async loadHomeConfiguration($,w,A,J,Y,U){if(!$)return null;let Z=U?SA($,A,Y):A,B=[s$(Sw(),".config",$),s$(Sw(),".config"),Sw()];for(let W of B){if(Y)y0.info(`Checking home directory: ${W}`);let E=this.fileLoader.generateConfigPaths($,W,w),j=await this.fileLoader.tryLoadFromPaths(E,Z,{arrayStrategy:J,verbose:Y});if(j){if(Y)y0.success(`Configuration loaded from home directory: ${j.source.path}`);return j}}return null}async loadPackageJsonConfiguration($,w,A,J,Y,U,Z){let B=Z?SA($,J,U):J;try{let W=s$(A,"package.json");if(!Jf(W))return null;let E={};try{E=JSON.parse(Yf(W,"utf8"))}catch(f){if(U)y0.warn("Failed to parse package.json:",[f instanceof Error?f:Error(String(f))]);return null}let j=E[$],F=$;if(!j&&w){let f=Array.isArray(w)?w:[w];for(let z of f){if(!z)continue;if(E[z]){j=E[z],F=z;break}}}if(j&&typeof j==="object"&&!Array.isArray(j)){if(U)y0.success(`Configuration loaded from package.json: ${F}`);return{config:rB(B,j,Y),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(U)y0.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,A,J){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:SA($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,Y){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let Y=[];if(A){let U=A($);if(U)Y.push(...U)}if(w){let U=await this.validator.validateConfiguration($,w);if(!U.isValid)Y.push(...U.errors.map((Z)=>Z.path?`${Z.path}: ${Z.message}`:Z.message))}if(Y.length>0)throw cw.configValidation(J||"unknown",Y,J)}checkCache($,w){let A=this.generateCacheKey($,w);return kA.get(A)||null}cacheResult($,w,A,J){let Y=this.generateCacheKey($,J);kA.set(Y,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias){let J=Array.isArray(w.alias)?w.alias.join(","):w.alias;A.push(`alias:${J}`)}if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,s$($,"config"),s$($,".config"),w?s$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let Y=[];return Y.push(...this.getLocalSearchPaths($,w,A,J)),Y.push(...this.getHomeSearchPaths($,w)),Y.push(s$(A,"package.json")),Y}getLocalSearchPaths($,w,A,J){let Y=this.getLocalDirectories(A,J),U=[];for(let Z of Y)U.push(...this.fileLoader.generateConfigPaths($,Z,w));return U}getHomeSearchPaths($,w){if(!$)return[];let A=[s$(Sw(),".config",$),s$(Sw(),".config"),Sw()],J=[];for(let Y of A)J.push(...this.fileLoader.generateConfigPaths($,Y,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function SA($,w,A=!1){let J=new uU,Y=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function U(Z,B=[]){let W={...Z};for(let[E,j]of Object.entries(Z)){let F=[...B,E],f=[`${Y}_${F.join("_").toUpperCase()}`,`${Y}_${F.map((T)=>T.toUpperCase()).join("")}`,`${Y}_${F.map((T)=>T.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],z,H;for(let T of f)if(z=tA.env[T],z!==void 0){H=T;break}if(z!==void 0&&H)if(typeof j==="boolean")W[E]=["true","1","yes"].includes(z.toLowerCase());else if(typeof j==="number"){let T=Number(z);if(!Number.isNaN(T))W[E]=T}else if(Array.isArray(j))try{W[E]=JSON.parse(z)}catch{W[E]=z.split(",").map((T)=>T.trim())}else W[E]=z;else if(j&&typeof j==="object"&&!Array.isArray(j))W[E]=U(j,F)}return W}return U(w)}var kA,XU,df,gf=($)=>$,pf=($,w)=>{for(var A in w)df($,A,{get:w[A],enumerable:!0,configurable:!0,set:lf.bind(w,A)})},tf=($,w)=>()=>($&&(w=$($=0)),w),NB,XB,uw,X1,_B,NG,MG,UB,XA,NU,N$,g,IG,ZB,CG,WB,LG,yG,zU,VG,BB,EB,fU,SG,OG,XG,_G,_A,DB,DG,M$,QG,kG,jB,DA,MU,W$,D,xG,FB,PG,zB,bG,iG,GU,uG,fB,GB,cG,TU,vG,mG,nG,dG,gG,QA,QB,lG,pG="0.15.6",l$,nA,S1,IU,CU,dA,LU,yU,O1,VU,SU,s0,kB,xB,E0,X0,PB,bB,tG,aG,iB,gA,Vh,H$,P,Sh,oG,Oh,eG,Xh,_h,TB,Dh,$2,w2,Qh,HB,kh,xh,Ph,bh,ih,HU,A2,uh,j0,cB,lA,vB,mB,iU,nB,dB,pA,gB,lB,cw,j2,y0,dh,gh,lh;var cU=h$(()=>{kA=new qB,XU=new KB,df=Object.defineProperty;NB={};pf(NB,{withErrorRecovery:()=>CB,tryLoadConfig:()=>qG,loadConfigWithResult:()=>TG,loadConfig:()=>OB,isRetryableError:()=>EG,isConfigNotFoundError:()=>BG,isBunfigError:()=>LB,globalPerformanceMonitor:()=>X1,globalCache:()=>uw,getEnvOrDefault:()=>jG,generateConfigTypes:()=>KG,defaultGeneratedDir:()=>bB,defaultConfigDir:()=>PB,deepMergeWithArrayStrategy:()=>xU,deepMerge:()=>yB,createLibraryConfig:()=>hG,config:()=>HG,bunfigPlugin:()=>RG,applyEnvVarsToConfig:()=>y1,TypeGenerationError:()=>yU,SchemaValidationError:()=>O1,PluginError:()=>SU,PerformanceMonitor:()=>DU,FileSystemError:()=>LU,ErrorFactory:()=>s0,EnvVarError:()=>dA,EnvProcessor:()=>rA,ConfigValidator:()=>PU,ConfigValidationError:()=>IU,ConfigNotFoundError:()=>nA,ConfigMergeError:()=>CU,ConfigLoader:()=>bU,ConfigLoadError:()=>S1,ConfigFileLoader:()=>aA,ConfigCache:()=>_U,CacheUtils:()=>_B,BunfigError:()=>l$,BrowserConfigError:()=>VU,ArrayMergeStrategies:()=>kB});tG=tf(async()=>{XB=import.meta.require,uw=new _U,X1=new DU,_B={createKey:rf,isEquivalent:af,estimateMemoryUsage:sf},NG=bA(hU.cwd(),"config"),MG=bA(hU.cwd(),"src/generated"),UB=PA.env.CLARITY_LOG_DIR||jf($G(),"logs"),XA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:UB,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},NU=await wG(),N$={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"},g=N$,IG=N$.red,ZB=N$.green,CG=N$.yellow,WB=N$.blue,LG=N$.magenta,yG=N$.cyan,zU=N$.white,VG=N$.gray,BB=N$.bgRed,EB=N$.bgYellow,fU=N$.bold,SG=N$.dim,OG=N$.italic,XG=N$.underline,_G=N$.reset,_A={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},DB={debug:"\uD83D\uDD0D",info:WB("ℹ"),success:ZB("✓"),warning:EB(zU(fU(" WARN "))),error:BB(zU(fU(" ERROR ")))},DG=new cA("stacks"),M$=new cA("bunfig",{showTags:!0}),QG=_$(V1.cwd(),"config"),kG=_$(V1.cwd(),"src/generated"),jB=xA.env.CLARITY_LOG_DIR||Bf(UG(),"logs"),DA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:jB,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},MU=await ZG(),W$={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"},D=W$,xG=W$.red,FB=W$.green,PG=W$.yellow,zB=W$.blue,bG=W$.magenta,iG=W$.cyan,GU=W$.white,uG=W$.gray,fB=W$.bgRed,GB=W$.bgYellow,cG=W$.bgGray,TU=W$.bold,vG=W$.dim,mG=W$.italic,nG=W$.underline,dG=W$.strikethrough,gG=W$.reset,QA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},QB={debug:"\uD83D\uDD0D",info:zB("ℹ"),success:FB("✓"),warning:GB(GU(TU(" WARN "))),error:fB(GU(TU(" ERROR ")))},lG=new mA("stacks"),l$=class extends Error{timestamp;context;constructor(w,A={}){super(w);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=A,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(([A,J])=>`${A}: ${J}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${w}`}},nA=class extends l${code="CONFIG_NOT_FOUND";constructor(w,A,J){let Y=J?` or alias "${J}"`:"";super(`Configuration "${w}"${Y} not found`,{configName:w,alias:J,searchPaths:A,searchPathCount:A.length})}},S1=class extends l${code="CONFIG_LOAD_ERROR";constructor(w,A,J){super(`Failed to load configuration from "${w}": ${A.message}`,{configPath:w,configName:J,originalError:A.name,originalMessage:A.message});this.cause=A}},IU=class extends l${code="CONFIG_VALIDATION_ERROR";constructor(w,A,J){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:J,validationErrors:A,errorCount:A.length})}},CU=class extends l${code="CONFIG_MERGE_ERROR";constructor(w,A,J,Y){super(`Failed to merge configuration from "${w}" with "${A}": ${J.message}`,{sourcePath:w,targetPath:A,configName:Y,originalError:J.name,originalMessage:J.message});this.cause=J}},dA=class extends l${code="ENV_VAR_ERROR";constructor(w,A,J,Y){super(`Failed to parse environment variable "${w}" with value "${A}" as ${J}`,{envKey:w,envValue:A,expectedType:J,configName:Y})}},LU=class extends l${code="FILE_SYSTEM_ERROR";constructor(w,A,J){super(`File system ${w} failed for "${A}": ${J.message}`,{operation:w,path:A,originalError:J.name,originalMessage:J.message});this.cause=J}},yU=class extends l${code="TYPE_GENERATION_ERROR";constructor(w,A,J){super(`Failed to generate types from "${w}" to "${A}": ${J.message}`,{configDir:w,outputPath:A,originalError:J.name,originalMessage:J.message});this.cause=J}},O1=class extends l${code="SCHEMA_VALIDATION_ERROR";constructor(w,A,J){super(`Schema validation failed${J?` for config "${J}"`:""}`,{schemaPath:w,configName:J,validationErrors:A,errorCount:A.length})}},VU=class extends l${code="BROWSER_CONFIG_ERROR";constructor(w,A,J,Y){super(`Failed to fetch configuration from "${w}": ${A} ${J}`,{endpoint:w,status:A,statusText:J,configName:Y})}},SU=class extends l${code="PLUGIN_ERROR";constructor(w,A,J){super(`Plugin "${w}" failed during ${A}: ${J.message}`,{pluginName:w,operation:A,originalError:J.name,originalMessage:J.message});this.cause=J}},s0={configNotFound($,w,A){return new nA($,w,A)},configLoad($,w,A){return new S1($,w,A)},configValidation($,w,A){return new IU($,w,A)},configMerge($,w,A,J){return new CU($,w,A,J)},envVar($,w,A,J){return new dA($,w,A,J)},fileSystem($,w,A){return new LU($,w,A)},typeGeneration($,w,A){return new yU($,w,A)},schemaValidation($,w,A){return new O1($,w,A)},browserConfig($,w,A,J){return new VU($,w,A,J)},plugin($,w,A){return new SU($,w,A)}},kB={replace:"replace",concat:"concat",smart:"smart"},xB=/^https?:\/\//,E0=new mA("bunfig",{showTags:!0}),X0=new bU,PB=D$(fw.cwd(),"config"),bB=D$(fw.cwd(),"src/generated")});aG=iA.env.CLARITY_LOG_DIR||Df(rG(),"logs"),iB={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:aG,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},gA={...iB},Vh=(async()=>{try{let{loadConfig:$}=await tG().then(()=>NB),w=await $({name:"clarity",alias:"logging",defaultConfig:iB,cwd:iA.cwd()});if(w)Object.assign(gA,w)}catch{}return gA})();H$={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"},P=H$,Sh=H$.red,oG=H$.green,Oh=H$.yellow,eG=H$.blue,Xh=H$.magenta,_h=H$.cyan,TB=H$.white,Dh=H$.gray,$2=H$.bgRed,w2=H$.bgYellow,Qh=H$.bgGray,HB=H$.bold,kh=H$.dim,xh=H$.italic,Ph=H$.underline,bh=H$.strikethrough,ih=H$.reset,HU={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},A2={debug:"\uD83D\uDD0D",info:eG("ℹ"),success:oG("✓"),warning:w2(TB(HB(" WARN "))),error:$2(TB(HB(" ERROR ")))};uh=new sA("stacks");j0=class j0 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,A])=>`${w}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}};cB=class cB extends j0{code="CONFIG_NOT_FOUND";constructor($,w,A){let J=A===void 0?[]:Array.isArray(A)?A.filter(Boolean):[A],Y="";if(J.length===1)Y=` or alias "${J[0]}"`;else if(J.length>1)Y=` or aliases ${J.map((U)=>`"${U}"`).join(", ")}`;super(`Configuration "${$}"${Y} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}};lA=class lA extends j0{code="CONFIG_LOAD_ERROR";constructor($,w,A){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:A,originalError:w.name,originalMessage:w.message});this.cause=w}};vB=class vB extends j0{code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}};mB=class mB extends j0{code="CONFIG_MERGE_ERROR";constructor($,w,A,J){super(`Failed to merge configuration from "${$}" with "${w}": ${A.message}`,{sourcePath:$,targetPath:w,configName:J,originalError:A.name,originalMessage:A.message});this.cause=A}};iU=class iU extends j0{code="ENV_VAR_ERROR";constructor($,w,A,J){super(`Failed to parse environment variable "${$}" with value "${w}" as ${A}`,{envKey:$,envValue:w,expectedType:A,configName:J})}};nB=class nB extends j0{code="FILE_SYSTEM_ERROR";constructor($,w,A){super(`File system ${$} failed for "${w}": ${A.message}`,{operation:$,path:w,originalError:A.name,originalMessage:A.message});this.cause=A}};dB=class dB extends j0{code="TYPE_GENERATION_ERROR";constructor($,w,A){super(`Failed to generate types from "${$}" to "${w}": ${A.message}`,{configDir:$,outputPath:w,originalError:A.name,originalMessage:A.message});this.cause=A}};pA=class pA extends j0{code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}};gB=class gB extends j0{code="BROWSER_CONFIG_ERROR";constructor($,w,A,J){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:J})}};lB=class lB extends j0{code="PLUGIN_ERROR";constructor($,w,A){super(`Plugin "${$}" failed during ${w}: ${A.message}`,{pluginName:$,operation:w,originalError:A.name,originalMessage:A.message});this.cause=A}};cw={configNotFound($,w,A){return new cB($,w,A)},configLoad($,w,A){return new lA($,w,A)},configValidation($,w,A){return new vB($,w,A)},configMerge($,w,A,J){return new mB($,w,A,J)},envVar($,w,A,J){return new iU($,w,A,J)},fileSystem($,w,A){return new nB($,w,A)},typeGeneration($,w,A){return new dB($,w,A)},schemaValidation($,w,A){return new pA($,w,A)},browserConfig($,w,A,J){return new gB($,w,A,J)},plugin($,w,A){return new lB($,w,A)}};j2=/^https?:\/\//;y0=new sA("bunfig",{showTags:!0});dh=new oB;gh=s$(tA.cwd(),"config"),lh=s$(tA.cwd(),"src/generated")});var R;var o0=h$(()=>{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 G2}from"node:module";import nU from"node:os";import dU from"node:path";import{existsSync as eB,statSync as $E}from"fs";import{existsSync as T2,mkdirSync as ZR,readdirSync as WR,readFileSync as H2,writeFileSync as BR}from"fs";import{homedir as mw}from"os";import{dirname as FR,resolve as $0}from"path";import QJ from"process";import{existsSync as wE,statSync as AE}from"fs";import{existsSync as j8,mkdirSync as q2,readdirSync as K2,writeFileSync as h2}from"fs";import{homedir as nw}from"os";import{dirname as JE,resolve as k$}from"path";import Gw from"process";import{join as R2,relative as N2,resolve as YE}from"path";import qJ from"process";import{existsSync as gE,mkdirSync as NR,readdirSync as MR,writeFileSync as IR}from"fs";import{homedir as gU}from"os";import{dirname as yR,resolve as Q$}from"path";import k1 from"process";import{join as M2,relative as I2,resolve as UE}from"path";import KJ from"process";import{existsSync as lE,mkdirSync as _R,readdirSync as DR,writeFileSync as QR}from"fs";import{dirname as xR,resolve as hJ}from"path";import F8 from"process";import{Buffer as e0}from"buffer";import{createCipheriv as C2,createDecipheriv as L2,randomBytes as lU}from"crypto";import{closeSync as pU,createReadStream as ZE,createWriteStream as y2,existsSync as tU,fsyncSync as WE,openSync as BE,writeFileSync as V2}from"fs";import{access as S2,constants as EE,mkdir as O2,readdir as oA,rename as jE,stat as dw,unlink as eA,writeFile as rU}from"fs/promises";import{join as gw}from"path";import I$ from"process";import{pipeline as X2}from"stream/promises";import{createGzip as FE}from"zlib";import lw from"process";import k0 from"process";import{Buffer as _0}from"buffer";import{createCipheriv as _2,createDecipheriv as D2,randomBytes as aU}from"crypto";import{closeSync as sU,createReadStream as zE,createWriteStream as Q2,existsSync as $J,fsyncSync as fE,openSync as GE,writeFileSync as k2}from"fs";import{access as x2,constants as TE,mkdir as P2,readdir as wJ,rename as HE,stat as pw,unlink as AJ,writeFile as oU}from"fs/promises";import{isAbsolute as b2,join as tw,resolve as i2}from"path";import v from"process";import{pipeline as u2}from"stream/promises";import{createGzip as qE}from"zlib";import rw from"process";import x0 from"process";import JJ from"process";import{existsSync as YJ}from"fs";import{resolve as eU}from"path";import{existsSync as c2}from"fs";import{existsSync as v2,readdirSync as m2}from"fs";import{extname as $8,resolve as KE}from"path";import n2 from"process";import{join as d2,relative as g2,resolve as hE}from"path";import RJ from"process";import{Buffer as D0}from"buffer";import{createCipheriv as l2,createDecipheriv as p2,randomBytes as w8}from"crypto";import{closeSync as A8,createReadStream as RE,createWriteStream as t2,existsSync as UJ,fsyncSync as NE,openSync as ME,writeFileSync as r2}from"fs";import{access as a2,constants as IE,mkdir as s2,readdir as ZJ,rename as CE,stat as aw,unlink as WJ,writeFile as J8}from"fs/promises";import{isAbsolute as o2,join as sw,resolve as e2}from"path";import m from"process";import{pipeline as $T}from"stream/promises";import{createGzip as LE}from"zlib";import ow from"process";import P0 from"process";import BJ from"process";import{existsSync as EJ}from"fs";import{resolve as Y8}from"path";import{existsSync as wT}from"fs";import{exec as IH}from"node:child_process";import uE from"node:fs";import CH from"node:os";import F0 from"node:path";import Sj from"node:process";import{promisify as LH}from"node:util";import A1 from"node:crypto";import b0 from"node:fs";import C8 from"node:path";import{execSync as dE}from"node:child_process";import DJ from"node:os";class pE{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,J])=>A.timestamp.getTime()-J.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,J){if(!this.options.enabled)return;let Y=this.generateKey($,A),U=J??this.options.ttl,Z=this.estimateSize(w);this.cache.set(Y,{value:w,timestamp:new Date,ttl:U,hits:0,size:Z}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),J=this.cache.get(A);if(!J){this.totalMisses++;return}if(this.isExpired(J)){this.cache.delete(A),this.totalMisses++;return}return J.hits++,this.totalHits++,J.value}isFileModified($,w){try{if(!eB($))return!0;return $E($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,J){try{let Y=eB(A)?$E(A):null,U=Y?Y.mtime:new Date;this.set($,{value:w,fileTimestamp:U},A,J)}catch{this.set($,w,A,J)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((J,Y)=>J+Y.size,0),A=$.map((J)=>J.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let J=A;this.cache.set(w,{value:J.value,timestamp:new Date(J.timestamp),ttl:J.ttl,hits:J.hits,size:J.size})}}}class tE{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),Y=new Date;try{let U=await w(),Z=performance.now()-J;return this.recordMetric({operation:$,duration:Z,timestamp:Y,...A}),U}catch(U){let Z=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:Z,timestamp:Y,...A}),U}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((Y)=>Y.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((Y)=>Y.duration),J=A.reduce((Y,U)=>Y+U,0);return{count:w.length,averageDuration:J/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:J,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function YT($,w){this[$]=JT.bind(null,w)}class y8{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,J])=>A.timestamp.getTime()-J.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,J){if(!this.options.enabled)return;let Y=this.generateKey($,A),U=J??this.options.ttl,Z=this.estimateSize(w);this.cache.set(Y,{value:w,timestamp:new Date,ttl:U,hits:0,size:Z}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),J=this.cache.get(A);if(!J){this.totalMisses++;return}if(this.isExpired(J)){this.cache.delete(A),this.totalMisses++;return}return J.hits++,this.totalHits++,J.value}isFileModified($,w){try{if(!wE($))return!0;return AE($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,J){try{let Y=wE(A)?AE(A):null,U=Y?Y.mtime:new Date;this.set($,{value:w,fileTimestamp:U},A,J)}catch{this.set($,w,A,J)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((J,Y)=>J+Y.size,0),A=$.map((J)=>J.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let J=A;this.cache.set(w,{value:J.value,timestamp:new Date(J.timestamp),ttl:J.ttl,hits:J.hits,size:J.size})}}}class V8{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),Y=new Date;try{let U=await w(),Z=performance.now()-J;return this.recordMetric({operation:$,duration:Z,timestamp:Y,...A}),U}catch(U){let Z=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:Z,timestamp:Y,...A}),U}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((Y)=>Y.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((Y)=>Y.duration),J=A.reduce((Y,U)=>Y+U,0);return{count:w.length,averageDuration:J/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:J,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function WT($,w={}){let A=Object.keys(w).sort().map((J)=>`${J}:${w[J]}`).join("|");return A?`${$}:${A}`:$}function BT($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function ET($){return $.getStats().size*2}function S8($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&a(w[0])&&"id"in w[0]&&w[0].id===3&&a(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(a(w)&&a($)&&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(a($)&&"arr"in $&&Array.isArray($.arr)&&a(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&a(w[0])&&a($[0])){let J=[...w];for(let Y of $)if(a(Y)&&"name"in Y){if(!J.find((U)=>a(U)&&("name"in U)&&U.name===Y.name))J.push(Y)}else if(a(Y)&&"path"in Y){if(!J.find((U)=>a(U)&&("path"in U)&&U.path===Y.path))J.push(Y)}else if(!J.some((U)=>MJ(U,Y)))J.push(Y);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}if(!a(w)||!a($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let Y=w[J];if(Y===null||Y===void 0)continue;else if(a(Y)&&a(A[J]))A[J]=S8(A[J],Y);else if(Array.isArray(Y)&&Array.isArray(A[J]))if(Y.length>0&&A[J].length>0&&a(Y[0])&&a(A[J][0])){let U=[...Y];for(let Z of A[J])if(a(Z)&&"name"in Z){if(!U.find((B)=>a(B)&&("name"in B)&&B.name===Z.name))U.push(Z)}else if(a(Z)&&"path"in Z){if(!U.find((B)=>a(B)&&("path"in B)&&B.path===Z.path))U.push(Z)}else if(!U.some((B)=>MJ(B,Z)))U.push(Z);A[J]=U}else if(Y.every((U)=>typeof U==="string")&&A[J].every((U)=>typeof U==="string")){let U=[...Y];for(let Z of A[J])if(!U.includes(Z))U.push(Z);A[J]=U}else A[J]=Y;else A[J]=Y}return A}function MJ($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!MJ($[A],w[A]))return!1;return!0}if(a($)&&a(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!MJ($[Y],w[Y]))return!1}return!0}return!1}function a($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function jT($,w){if(!lE($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return S8(w,J)}catch{return null}}catch{return null}}async function FT({name:$="",cwd:w,defaultConfig:A}){let J=w||F8.cwd(),Y=[".ts",".js",".mjs",".cjs",".json"],U=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let Z of U)for(let B of Y){let W=hJ(J,`${Z}${B}`),E=await jT(W,A);if(E!==null)return E}try{let Z=hJ(J,"package.json");if(lE(Z)){let B=(await import(Z))[$];if(B&&typeof B==="object"&&!Array.isArray(B))try{return S8(A,B)}catch{}}}catch{}return A}function zT($,w={}){let A=KJ.cwd();while(A.includes("storage"))A=UE(A,"..");let J=UE(A,$||"");if(w?.relative)return I2(KJ.cwd(),J);return J}async function fT(){try{let $=await FT({name:"clarity",defaultConfig:fJ,cwd:KJ.cwd(),endpoint:"",headers:{}});return{...fJ,...$}}catch{return fJ}}function w$(){if(k0.env.NODE_ENV==="test"||k0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function GT(){if(k0.env.NODE_ENV==="test"||k0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof k0<"u"){let $=k0.type;if($==="renderer"||$==="worker")return!1;return!!(k0.versions&&(k0.versions.node||k0.versions.bun))}return!1}class aE{async format($){let w=await GT(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:lw.pid,hostname:w(),environment:lw.env.NODE_ENV||"development",platform:lw.platform,version:lw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:lw.env.NODE_ENV||lw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class IJ{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={...f8},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new aE,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??I$.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...GJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...GJ};return{...GJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:f8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}async writeToFile($){let w=(async()=>{let J,Y=0,U=3,Z=1000;while(Y<U)try{try{try{await S2(this.config.logDirectory,EE.F_OK|EE.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await O2(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:e0.from($);try{if(!tU(this.currentLogFile))await rU(this.currentLogFile,"",{mode:420});if(J=BE(this.currentLogFile,"a",420),V2(J,B,{flag:"a"}),WE(J),J!==void 0)pU(J),J=void 0;if((await dw(this.currentLogFile)).size===0){if(await rU(this.currentLogFile,B,{flag:"w",mode:420}),(await dw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let E=W;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(Y<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${U}:`,j);let F=Z*2**Y;await new Promise((f)=>setTimeout(f,F)),Y++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(J!==void 0)try{pU(J)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(Y===U-1){let E=B,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),B}Y++;let W=Z*2**(Y-1);await new Promise((E)=>setTimeout(E,W))}})();this.pendingOperations.push(w);let A=this.pendingOperations.length-1;try{await w}catch(J){throw console.error("Debug: [writeToFile] Error in operation:",J),J}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 gw(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 gw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return gw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(w$())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,A=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((J)=>{console.error("Error rotating keys:",J)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),A=this.generateKey();this.currentKeyId=w,this.keys.set(w,A),this.encryptionKeys.set(w,{key:A,createdAt:new Date});let J=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,B])=>B.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof $.maxKeys==="number"?$.maxKeys:1,U=Math.max(1,Y);if(J.length>U)for(let[Z]of J.slice(U))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return lU(16).toString("hex")}generateKey(){return lU(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(),A=lU(16),J=C2("aes-256-gcm",w,A),Y=e0.concat([J.update($,"utf8"),J.final()]),U=J.getAuthTag();return{encrypted:e0.concat([A,Y,U]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=FE(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(e0.from(e0.concat(Y)))),J.on("error",A),J.write($),J.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(w$())return;let $=await dw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await oA(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await dw(A).catch(()=>null))try{if(await jE(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await eA(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await dw(A).catch(()=>null))await jE(A,U)}if(this.currentLogFile=J,w.maxFiles){let Y=(await oA(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,Z)=>Z.localeCompare(U));for(let U of Y.slice(w.maxFiles))await eA(gw(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=ZE($),J=y2(w),Y=FE();await X2(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);await this.writeToFile(J),console.log(J)}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 A={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(A)}}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()})),tU(this.currentLogFile))try{let $=BE(this.currentLogFile,"r+");WE($),pU($)}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(!w$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await oA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await eA(gw(this.config.logDirectory,w))}catch(A){console.error(`Failed to delete temp file ${w}:`,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?l.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=I$.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${l.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}async log($,w,...A){let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);if(this.fancy&&!w$()){let E=Zj[$],j=this.options.showTags!==!1&&this.name?l.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:l.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.error(F);break;case"success":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:l.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.error(F),B){let f=B.split(`
64
- `);for(let z of f)if(z.trim()&&!z.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:l.gray(` ${z}`),level:$,showTimestamp:!1}))}break}}else if(!w$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${U} ${this.environment}.${$.toUpperCase()}: ${Z}
65
- `;if(B)W+=`${B}
66
- `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!w$()){let A=this.options.showTags!==!1&&this.name?l.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:l.blue("◐"),tag:A,message:`${l.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),W=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)W+=` ${JSON.stringify(A)}`;if(W+=`
67
- `,W=W.replace(this.ANSI_PATTERN,""),this.fancy&&!w$()){let E=this.options.showTags!==!1&&this.name?l.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:l.green("✓"),tag:E,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!w$())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}:${$}`,A=new IJ(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(A),A}createReadStream(){if(w$())throw Error("createReadStream is not supported in browser environments");if(!tU(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return ZE(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 A=this.keys.get(this.currentKeyId);try{let J=e0.isBuffer($)?$:e0.from($,"base64"),Y=J.slice(0,16),U=J.slice(-16),Z=J.slice(16,-16),B=L2("aes-256-gcm",A,Y);return B.setAuthTag(U),e0.concat([B.update(Z),B.final()]).toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return w$()}isServerMode(){return!w$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w);if(this.fancy&&!w$()){let U=$.split(`
68
- `),Z=Math.max(...U.map((j)=>j.length))+2,B=`┌${"─".repeat(Z)}┐`,W=`└${"─".repeat(Z)}┘`,E=U.map((j)=>{let F=" ".repeat(Z-j.length-2);return`│ ${j}${F} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:A,message:l.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:A,message:l.cyan(B)})),E.forEach((j)=>console.error(this.formatConsoleMessage({timestamp:A,message:l.cyan(j),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:l.cyan(W),showTimestamp:!1}))}else if(!w$())console.error(`${J} ${this.environment}.INFO: [BOX] ${$}`);let Y=`${J} ${this.environment}.INFO: [BOX] ${$}
69
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(Y)}async prompt($){if(w$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${l.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();I$.stdin.removeListener("data",A);try{if(typeof I$.stdin.setRawMode==="function")I$.stdin.setRawMode(!1)}catch{}I$.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof I$.stdin.setRawMode==="function")I$.stdin.setRawMode(!0)}catch{}I$.stdin.resume(),I$.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let Y=/%([sdijfo%])/g,U=0;if(A=$.replace(Y,(Z,B)=>{if(B==="%")return"%";if(U>=w.length)return Z;let W=w[U++];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 Z}}),U<w.length)A+=` ${w.slice(U).map((Z)=>typeof Z==="object"?JSON.stringify(Z,null,2):String(Z)).join(" ")}`}if(this.fancy&&!w$()){let Y=this.options.showTags!==!1&&this.name?l.gray(this.formatTag(this.name)):"",U=l.blue("◐");console.error(`${U} ${Y} ${l.cyan(A)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
70
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(J)}progress($,w=""){if(!this.enabled||!this.fancy||w$()||$<=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 A=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:A,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(J,Y)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||w$())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,J)),Y!==void 0)this.activeProgressBar.message=Y;let U=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,U)},finish:(J)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||w$())return;if(this.activeProgressBar.current=this.activeProgressBar.total,J!==void 0)this.activeProgressBar.message=J;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(J,Y="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||w$())return;I$.stdout.write(`${"\r".padEnd(I$.stdout.columns||80)}\r`),this.log(Y,J),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||w$()||!I$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=l.green("━".repeat(J)),Z=l.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=w||A===100?l.green("✓"):l.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${l.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=I$.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,I$.stdout.write($.lastRenderedLine),w)I$.stdout.write(`
71
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||w$()||!I$.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(w$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await oA(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let Y=gw(this.config.logDirectory,J);if($.before)try{if((await dw(Y)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${Y}:`,U);continue}A.push(Y)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await eA(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function zJ($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&n(w[0])&&"id"in w[0]&&w[0].id===3&&n(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(n(w)&&n($)&&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(n($)&&"arr"in $&&Array.isArray($.arr)&&n(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&n(w[0])&&n($[0])){let J=[...w];for(let Y of $)if(n(Y)&&"name"in Y){if(!J.find((U)=>n(U)&&("name"in U)&&U.name===Y.name))J.push(Y)}else if(n(Y)&&"path"in Y){if(!J.find((U)=>n(U)&&("path"in U)&&U.path===Y.path))J.push(Y)}else if(!J.some((U)=>CJ(U,Y)))J.push(Y);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}if(!n(w)||!n($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let Y=w[J];if(Y===null||Y===void 0)continue;else if(n(Y)&&n(A[J]))A[J]=zJ(A[J],Y);else if(Array.isArray(Y)&&Array.isArray(A[J]))if(Y.length>0&&A[J].length>0&&n(Y[0])&&n(A[J][0])){let U=[...Y];for(let Z of A[J])if(n(Z)&&"name"in Z){if(!U.find((B)=>n(B)&&("name"in B)&&B.name===Z.name))U.push(Z)}else if(n(Z)&&"path"in Z){if(!U.find((B)=>n(B)&&("path"in B)&&B.path===Z.path))U.push(Z)}else if(!U.some((B)=>CJ(B,Z)))U.push(Z);A[J]=U}else if(Y.every((U)=>typeof U==="string")&&A[J].every((U)=>typeof U==="string")){let U=[...Y];for(let Z of A[J])if(!U.includes(Z))U.push(Z);A[J]=U}else A[J]=Y;else A[J]=Y}return A}function O8($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:zJ($,w);if(Array.isArray($))return A==="replace"?w:zJ($,w);if(!n(w)||!n($))return w;let J={...$};for(let Y of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,Y))continue;let U=w[Y],Z=J[Y];if(U===null||U===void 0)continue;if(Array.isArray(U)||Array.isArray(Z))if(A==="replace")J[Y]=U;else J[Y]=zJ(Z,U);else if(n(U)&&n(Z))J[Y]=O8(Z,U,A);else J[Y]=U}return J}function CJ($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!CJ($[A],w[A]))return!1;return!0}if(n($)&&n(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!CJ($[Y],w[Y]))return!1}return!0}return!1}function n($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function jJ($,w,A="replace"){if(!gE($))return null;try{let J=await import($),Y=J.default||J;if(typeof Y!=="object"||Y===null||Array.isArray(Y))return null;try{return O8(w,Y,A)}catch{return null}}catch{return null}}function TT($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),Y={...w};function U(Z,B=[]){let W={...Z};for(let[E,j]of Object.entries(Z)){let F=[...B,E],f=(T)=>T.replace(/([A-Z])/g,"_$1").toUpperCase(),z=`${J}_${F.map(f).join("_")}`,H=`${J}_${F.map((T)=>T.toUpperCase()).join("_")}`;if(A)L$.info(`Checking environment variable ${z} for config ${$}.${F.join(".")}`);if(typeof j==="object"&&j!==null&&!Array.isArray(j))W[E]=U(j,F);else{let T=k1.env[z]||k1.env[H];if(T!==void 0){if(A)L$.info(`Using environment variable ${T?z:H} for config ${$}.${F.join(".")}`);if(typeof j==="number")W[E]=Number(T);else if(typeof j==="boolean")W[E]=T.toLowerCase()==="true";else if(Array.isArray(j))try{let q=JSON.parse(T);if(Array.isArray(q))W[E]=q;else W[E]=T.split(",").map((K)=>K.trim())}catch{W[E]=T.split(",").map((q)=>q.trim())}else W[E]=T}}}return W}return U(Y)}async function HT({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:Y,verbose:U=!1,checkEnv:Z=!0,arrayStrategy:B="replace"}){let W=Z&&typeof Y==="object"&&Y!==null&&!Array.isArray(Y)?TT($,Y,U):Y,E=A||k1.cwd(),j=[".ts",".js",".mjs",".cjs",".json"];if(U)L$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let F=[$,`.${$}`].filter(Boolean),f=[`${$}.config`,`.${$}.config`].filter(Boolean),z=w?[w,`.${w}`]:[],H=w?[`${w}.config`,`.${w}.config`]:[],T=Array.from(new Set([E,Q$(E,"config"),Q$(E,".config"),J?Q$(E,J):void 0].filter(Boolean)));for(let q of T){if(U)L$.info(`Searching for configuration in: ${q}`);let K=[Q$(E,"config"),Q$(E,".config")].concat(J?[Q$(E,J)]:[]).includes(q)?[...F,...f,...z,...H]:[...f,...F,...H,...z];for(let h of K)for(let I of j){let N=Q$(q,`${h}${I}`),M=await jJ(N,W,B);if(M!==null){if(U)L$.success(`Configuration loaded from: ${N}`);return M}}}if($){let q=Q$(gU(),".config",$),K=["config",`${$}.config`];if(w)K.push(`${w}.config`);if(U)L$.info(`Checking user config directory: ${q}`);for(let h of K)for(let I of j){let N=Q$(q,`${h}${I}`),M=await jJ(N,W,B);if(M!==null){if(U)L$.success(`Configuration loaded from user config directory: ${N}`);return M}}}if($){let q=Q$(gU(),".config"),K=[`.${$}.config`];if(w)K.push(`.${w}.config`);if(U)L$.info(`Checking user config directory for dotfile configs: ${q}`);for(let h of K)for(let I of j){let N=Q$(q,`${h}${I}`),M=await jJ(N,W,B);if(M!==null){if(U)L$.success(`Configuration loaded from user config directory dotfile: ${N}`);return M}}}if($){let q=gU(),K=[`.${$}.config`,`.${$}`];if(w)K.push(`.${w}.config`),K.push(`.${w}`);if(U)L$.info(`Checking user home directory for dotfile configs: ${q}`);for(let h of K)for(let I of j){let N=Q$(q,`${h}${I}`),M=await jJ(N,W,B);if(M!==null){if(U)L$.success(`Configuration loaded from user home directory: ${N}`);return M}}}try{let q=Q$(E,"package.json");if(gE(q)){let K=await import(q),h=K[$];if(!h&&w){if(h=K[w],h&&U)L$.success(`Using alias "${w}" configuration from package.json`)}if(h&&typeof h==="object"&&!Array.isArray(h))try{if(U)L$.success(`Configuration loaded from package.json: ${h===K[$]?$:w}`);return O8(W,h,B)}catch(I){if(U)L$.warn("Failed to merge package.json config:",I)}}}catch(q){if(U)L$.warn("Failed to load package.json:",q)}if(U)L$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function qT($,w={}){let A=qJ.cwd();while(A.includes("storage"))A=YE(A,"..");let J=YE(A,$||"");if(w?.relative)return N2(qJ.cwd(),J);return J}async function KT(){try{let $=await HT({name:"clarity",alias:"logging",defaultConfig:TJ,cwd:qJ.cwd()});return{...TJ,...$||{}}}catch{return TJ}}function E$(){if(x0.env.NODE_ENV==="test"||x0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function hT(){if(x0.env.NODE_ENV==="test"||x0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof x0<"u"){let $=x0.type;if($==="renderer"||$==="worker")return!1;return!!(x0.versions&&(x0.versions.node||x0.versions.bun))}return!1}class sE{async format($){let w=await hT(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:rw.pid,hostname:w(),environment:rw.env.NODE_ENV||"development",platform:rw.platform,version:rw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:rw.env.NODE_ENV||rw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class LJ{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={...G8},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new sE,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??v.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...HJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...HJ};return{...HJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:G8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!E$()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let J,Y=0,U=3,Z=1000;while(Y<U)try{try{try{await x2(this.config.logDirectory,TE.F_OK|TE.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await P2(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:_0.from($);try{if(!$J(this.currentLogFile))await oU(this.currentLogFile,"",{mode:420});if(J=GE(this.currentLogFile,"a",420),k2(J,B,{flag:"a"}),fE(J),J!==void 0)sU(J),J=void 0;if((await pw(this.currentLogFile)).size===0){if(await oU(this.currentLogFile,B,{flag:"w",mode:420}),(await pw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let E=W;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(Y<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${U}:`,j);let F=Z*2**Y;await new Promise((f)=>setTimeout(f,F)),Y++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(J!==void 0)try{sU(J)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(Y===U-1){let E=B,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),B}Y++;let W=Z*2**(Y-1);await new Promise((E)=>setTimeout(E,W))}})();this.pendingOperations.push(w);let A=this.pendingOperations.length-1;try{await w}catch(J){throw console.error("Debug: [writeToFile] Error in operation:",J),J}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(E$())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,A=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((J)=>{console.error("Error rotating keys:",J)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),A=this.generateKey();this.currentKeyId=w,this.keys.set(w,A),this.encryptionKeys.set(w,{key:A,createdAt:new Date});let J=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,B])=>B.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof $.maxKeys==="number"?$.maxKeys:1,U=Math.max(1,Y);if(J.length>U)for(let[Z]of J.slice(U))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return aU(16).toString("hex")}generateKey(){return aU(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(),A=aU(16),J=_2("aes-256-gcm",w,A),Y=_0.isBuffer($)?$:_0.from($,"utf8"),U=J.update(Y),Z=J.final(),B=U.length+Z.length,W=J.getAuthTag(),E=_0.allocUnsafe(16+B+16);return A.copy(E,0),U.copy(E,16),Z.copy(E,16+U.length),W.copy(E,16+B),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=qE(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(_0.from(_0.concat(Y)))),J.on("error",A),J.write($),J.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(E$())return;if(!this.shouldWriteToFile())return;let $=await pw(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await wJ(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await pw(A).catch(()=>null))try{if(await HE(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await AJ(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await pw(A).catch(()=>null))await HE(A,U)}if(this.currentLogFile=J,w.maxFiles){let Y=(await wJ(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,Z)=>Z.localeCompare(U));for(let U of Y.slice(w.maxFiles))await AJ(tw(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=zE($),J=Q2(w),Y=qE();await u2(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(J);console.log(J)}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()})),$J(this.currentLogFile))try{let $=GE(this.currentLogFile,"r+");fE($),sU($)}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(!E$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await wJ(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await AJ(tw(this.config.logDirectory,w))}catch(A){console.error(`Failed to delete temp file ${w}:`,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()?Q.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||E$())return!1;let $=typeof v.env.NO_COLOR<"u",w=v.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof v.stderr<"u"&&v.stderr.isTTY||typeof v.stdout<"u"&&v.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=v.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${Q.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,Y)=>{let U=Q.underline(Q.blue(J)),Z=this.toAbsoluteFilePath(Y);if(Z&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(Z)}`,W="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${B}\x1B\\${U}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${Y}\x1B\\${U}\x1B]8;;\x1B\\`;return U}),w=w.replace(/`([^`]+)`/g,(A,J)=>Q.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>Q.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>Q.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>Q.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>Q.strikethrough(J)),w}supportsHyperlinks(){if(E$())return!1;let $=v.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 A=v.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(b2(w)||w.startsWith("./")||w.startsWith("../"))w=i2(w);else return null;return $J(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);let{consoleText:W,fileText:E}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":Wj[$],f=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",z;switch($){case"debug":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:Q.gray(W),level:$}),console.error(z);break;case"info":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"success":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:Q.green(W),level:$}),console.error(z);break;case"warning":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"error":if(z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.error(z),B){let H=B.split(`
72
- `);for(let T of H)if(T.trim()&&!T.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:Q.gray(` ${T}`),level:$,showTimestamp:!1}))}break}}else if(!E$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}if(!this.shouldLog($))return;let j=`${U} ${this.environment}.${$.toUpperCase()}: ${E}
73
- `;if(B)j+=`${B}
74
- `;if(j=j.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(j)}progress($,w=""){let A={update:(Y,U)=>{},finish:(Y)=>{},interrupt:(Y,U)=>{}};if(!this.enabled)return A;let J=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:J,lastRenderedLine:""},this.shouldStyleConsole()&&!E$()&&v.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(Y,U)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,Y),this.activeProgressBar.total),U!==void 0)this.activeProgressBar.message=U;if(this.shouldStyleConsole()&&!E$()&&v.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(Y)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,Y)},interrupt:(Y,U="info")=>{if(!E$()&&v.stdout.isTTY)v.stdout.write(`
75
- `);if(this[U==="warning"?"warn":U](Y),this.activeProgressBar&&this.shouldStyleConsole()&&!E$()&&v.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:this.options.showIcons===!1?"":Q.blue("◐"),tag:A,message:`${Q.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),W=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)W+=` ${JSON.stringify(A)}`;if(W+=`
76
- `,W=W.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":Q.green("✓"),tag:E,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!E$())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}:${$}`,A=new LJ(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(A),A}createReadStream(){if(E$())throw Error("createReadStream is not supported in browser environments");if(!$J(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return zE(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 A=this.keys.get(this.currentKeyId);try{let J=_0.isBuffer($)?$:_0.from($,"base64"),Y=J.subarray(0,16),U=J.subarray(J.length-16),Z=J.subarray(16,J.length-16),B=D2("aes-256-gcm",A,Y);B.setAuthTag(U);let W=B.update(Z),E=B.final(),j=W.length+E.length,F=_0.allocUnsafe(j);return W.copy(F,0),E.copy(F,W.length),F.toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return E$()}isServerMode(){return!E$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w),{consoleText:Y,fileText:U}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=Y.split(`
77
- `),W=Math.max(...B.map((f)=>f.length))+2,E=`┌${"─".repeat(W)}┐`,j=`└${"─".repeat(W)}┘`,F=B.map((f)=>{return this.formatConsoleMessage({timestamp:A,message:Q.cyan(f),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:Q.cyan(E),showTimestamp:!1})),F.forEach((f)=>console.error(f)),console.error(this.formatConsoleMessage({timestamp:A,message:Q.cyan(j),showTimestamp:!1}))}else if(!E$())console.error(`${J} ${this.environment}.INFO: [BOX] ${U}`);let Z=`${J} ${this.environment}.INFO: [BOX] ${U}
78
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Z)}async prompt($){if(E$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${Q.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();v.stdin.removeListener("data",A);try{if(typeof v.stdin.setRawMode==="function")v.stdin.setRawMode(!1)}catch{}v.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof v.stdin.setRawMode==="function")v.stdin.setRawMode(!0)}catch{}v.stdin.resume(),v.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let Z=/%([sdijfo%])/g,B=0;if(A=$.replace(Z,(W,E)=>{if(E==="%")return"%";if(B>=w.length)return W;let j=w[B++];switch(E){case"s":return String(j);case"d":case"i":return Number(j).toString();case"j":case"o":return JSON.stringify(j,null,2);default:return W}}),B<w.length)A+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:J,fileText:Y}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${Q.blue("◐")} `;console.error(`${B}${Z} ${Q.cyan(J)}`)}let U=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
79
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!v.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=Q.green("━".repeat(J)),Z=Q.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=this.options.showIcons===!1?"":w||A===100?Q.green(""):Q.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${Q.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=v.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,v.stdout.write($.lastRenderedLine),w)v.stdout.write(`
80
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||E$()||!v.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(E$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await wJ(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let Y=tw(this.config.logDirectory,J);if($.before)try{if((await pw(Y)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${Y}:`,U);continue}A.push(Y)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await AJ(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function oE($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:Y=()=>!0,fallback:U}=w,Z=Error("Unknown error occurred");for(let B=0;B<=A;B++)try{return await $()}catch(W){if(Z=W instanceof Error?W:Error(String(W)),B===A||!Y(Z))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(U!==void 0)return U;throw Z instanceof Error?Z:Error(`Unknown error: ${String(Z)}`)}function eE($){return $ instanceof p$}function RT($){return $ instanceof yJ}function NT($){if(eE($))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 kJ{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,A={}){let{prefix:J,useCamelCase:Y=!0,useBackwardCompatibility:U=!0,customParsers:Z={},verbose:B=!1,trackPerformance:W=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let j=J||this.generateEnvPrefix($),F={...w};return this.processObject(F,[],j,{useCamelCase:Y,useBackwardCompatibility:U,customParsers:Z,verbose:B,configName:$}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return i1.track("applyEnvironmentVariables",E,{configName:$});return E()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=Z.map((j)=>this.formatEnvKey(j,J.useCamelCase)),W=`${A}_${B.join("_")}`,E=J.useBackwardCompatibility?`${A}_${Z.map((j)=>j.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.processObject(U,Z,A,J);else{let j=JJ.env[W]||(E?JJ.env[E]:void 0);if(j!==void 0){if(J.verbose){let F=JJ.env[W]?W:E}try{$[Y]=this.parseEnvironmentValue(j,typeof U,W,J.customParsers,J.configName)}catch(F){if(F instanceof VJ)throw F;throw ww.envVar(W,j,typeof U,J.configName)}}}}}parseEnvironmentValue($,w,A,J,Y){for(let[U,Z]of Object.entries(J))try{return Z($)}catch{continue}for(let U of this.defaultParsers)if(U.canParse($,w))try{return U.parse($)}catch{throw ww.envVar(A,$,`${w} (via ${U.name} parser)`,Y)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,Y]of Object.entries(JJ.env))if(J.startsWith(A)&&Y!==void 0)w[J]=Y;return w}validateEnvironmentVariable($,w,A){let J=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))J.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(Y){J.push(`Cannot parse value "${w}" as ${A}: ${Y}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:Y="text"}=A,U=J||this.generateEnvPrefix($),Z=[];switch(this.extractEnvVarInfo(w,[],U,Z),Y){case"markdown":return this.formatAsMarkdown(Z,$);case"json":return JSON.stringify(Z,null,2);default:return this.formatAsText(Z,$)}}extractEnvVarInfo($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=`${A}_${Z.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.extractEnvVarInfo(U,Z,A,J);else J.push({key:B,type:Array.isArray(U)?"array":typeof U,description:`Configuration for ${Z.join(".")}`,example:this.generateExample(U)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
81
-
82
- `;for(let J of $)A+=`${J.key}
83
- `,A+=` Type: ${J.type}
84
- `,A+=` Description: ${J.description}
85
- `,A+=` Example: ${J.example}
62
+ `;for(let Y of $)A+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
63
+ `;return A}}function rG($,w,A={}){return yB($,w,A,new WeakMap)}function yB($,w,A,Y){let{arrayMergeMode:f="replace",skipNullish:X=!1,customMerger:U}=A;if(w===null||w===void 0)return X?$:w;if(U){let W=U($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return MB($,w,f,Y);if(!A0(w)||!A0($))return w;return eG($,w,A,Y)}function MB($,w,A,Y){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return aG($,w);case"smart":return sG($,w,Y);default:return w}return w}function aG($,w){let A=[...w];for(let Y of $)if(!A.some((f)=>tX(f,Y)))A.push(Y);return A}function sG($,w,A){if(w.length===0)return $;if($.length===0)return w;if(A0(w[0])&&A0($[0]))return oG($,w,A);if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}function oG($,w,A){let Y=[...w];for(let f of $){if(!A0(f)){Y.push(f);continue}let X=["id","name","key","path","type"],U=!1;for(let W of X)if(W in f){if(Y.find((B)=>A0(B)&&(W in B)&&B[W]===f[W])){U=!0;break}}if(!U)Y.push(f)}return Y}function eG($,w,A,Y){let f=w;if(A0(f)&&Y.has(f))return Y.get(f);let X={...$};if(A0(f))Y.set(f,X);for(let U in f){if(!Object.prototype.hasOwnProperty.call(f,U))continue;let W=f[U],J=X[U];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){X[U]=W;continue}if(A0(W)&&A0(J))X[U]=yB(J,W,A,Y);else if(Array.isArray(W)||Array.isArray(J))X[U]=MB(J,W,A.arrayMergeMode||"smart",Y);else X[U]=W}return X}function IB($,w,A="replace"){return rG($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function tX($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!tX($[A],w[A]))return!1;return!0}if(A0($)&&A0(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!tX($[f],w[f]))return!1}return!0}return!1}function A0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class CB{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:Y="replace",useCache:f=!0,cacheTtl:X,trackPerformance:U=!0,verbose:W=!1}=A;if(f){let B=gA.getWithFileCheck("file",$);if(B){if(W)console.log(`Configuration loaded from cache: ${$}`);return B}}let J=async()=>{if(!cA($))return null;try{let B=`?t=${Date.now()}`,E=await import($+B),j=E.default||E,T="default"in E,F=Object.keys(E).length>0;if(!T&&!F)throw new fY($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof j!=="object"||j===null||Array.isArray(j))throw new fY($,Error("Configuration must export a valid object"),"unknown");let K={config:IB(w,j,Y),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(f)gA.setWithFileCheck("file",K,$,X);return K}catch(B){throw B instanceof Error?tw.configLoad($,B):tw.configLoad($,Error(String(B)))}};if(U)return pX.track("loadFromPath",J,{path:$});return J()}async tryLoadFromPaths($,w,A={}){for(let Y of $)try{let f=await this.loadFromPath(Y,w,A);if(f)return f}catch(f){if(f instanceof Error&&f.name==="ConfigLoadError")throw f;if(A.verbose)console.warn(`Failed to load config from ${Y}:`,f)}return null}generateConfigPaths($,w,A){let Y=this.generateNamePatterns($,A),f=[];for(let X of Y)for(let U of this.extensions)f.push(xX(w,`${X}${U}`));return f}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);let Y=w===void 0?[]:Array.isArray(w)?w:[w];for(let X of Y){if(!X)continue;if(A.push(X,`.${X}.config`,`${X}.config`,`.${X}`),$)A.push(`${$}.${X}.config`,`.${$}.${X}.config`)}let f=new Set;return A.filter((X)=>{if(!X||f.has(X))return!1;return f.add(X),!0})}checkFileAccess($){return pG(async()=>{return cA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let Y=[];if(!cA($))return Y;if(w||A){let f=this.generateNamePatterns(w||"",A);for(let X of f)for(let U of this.extensions){let W=xX($,`${X}${U}`);if(await this.checkFileAccess(W))Y.push(W)}}else try{let{readdirSync:f}=await import("fs"),X=f($);for(let U of X)if(this.looksLikeConfigFile(U)){let W=xX($,U);if(await this.checkFileAccess(W))Y.push(W)}}catch{return[]}return Y}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((A)=>A.test($))}async validateConfigFile($){let w=[];try{if(!cA($))return w.push("Configuration file does not exist"),w;let A=await import($),Y=A.default||A;if(Y===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)w.push("Configuration must be an object");else if(Array.isArray(Y))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:f}=await import("fs"),X=f($,"utf8");JSON.parse(X)}catch(f){w.push(`Invalid JSON syntax: ${f}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(Y)=>{try{let f=await this.loadFromPath(Y,{},w);if(f)A.set(Y,f.config)}catch(f){if(w.verbose)console.warn(`Failed to preload ${Y}:`,f)}})),A}}class SB{async validateConfiguration($,w,A={}){let{stopOnFirstError:Y=!1,validateRequired:f=!0,validateTypes:X=!0,customRules:U=[],trackPerformance:W=!0,verbose:J=!1}=A,B=async()=>{let E=[],j=[],T={stopOnFirstError:Y,validateRequired:f,validateTypes:X,customRules:U,trackPerformance:W,verbose:J};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,T);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],T);else return this.validateWithJSONSchema($,w,T)}catch(F){return E.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:E,warnings:j}}};if(W)return await pX.track("validateConfiguration",B);return B()}async validateWithSchemaFile($,w,A){try{if(!$H(w))throw new XY(w,[{path:"",message:"Schema file does not exist"}]);let Y=await import(w),f=Y.default||Y;if(Array.isArray(f))return this.validateWithRules($,f,A);else return this.validateWithJSONSchema($,f,A)}catch(Y){throw new XY(w,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema($,w,A){let Y=[],f=[];return this.validateObjectAgainstSchema($,w,"",Y,f,A),{isValid:Y.length===0,errors:Y,warnings:f}}validateObjectAgainstSchema($,w,A,Y,f,X){if(X.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(U)){if(Y.push({path:A,message:`Expected type ${W.join(" or ")}, got ${U}`,expected:W.join(" or "),actual:U,rule:"type"}),X.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(Y.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),X.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)Y.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)Y.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))Y.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)Y.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)Y.push({path:A,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 W=A?`${A}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,W,Y,f,X),X.stopOnFirstError&&Y.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(X.validateRequired&&w.required){for(let W of w.required)if(!(W in U)){if(Y.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),X.stopOnFirstError)return}}if(w.properties){for(let[W,J]of Object.entries(w.properties))if(W in U){let B=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(U[W],J,B,Y,f,X),X.stopOnFirstError&&Y.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let J of Object.keys(U))if(!W.has(J))f.push({path:A?`${A}.${J}`:J,message:`Additional property '${J}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let Y=[],f=[];for(let X of w)try{let U=this.getValueByPath($,X.path),W=this.validateWithRule(U,X,X.path);if(Y.push(...W),A.stopOnFirstError&&Y.length>0)break}catch(U){Y.push({path:X.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:f}}validateWithRule($,w,A){let Y=[];if(w.required&&($===void 0||$===null))return Y.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),Y;if($===void 0||$===null)return Y;if(w.type){let f=Array.isArray($)?"array":typeof $;if(f!==w.type)Y.push({path:A,message:w.message||`Expected type ${w.type}, got ${f}`,expected:w.type,actual:f,rule:"type"})}if(w.min!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f<w.min)Y.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:f,rule:"min"})}if(w.max!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f>w.max)Y.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:f,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))Y.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))Y.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let f=w.validator($);if(f)Y.push({path:A,message:w.message||f,rule:"custom"})}return Y}getValueByPath($,w){if(!w)return $;let A=w.split("."),Y=$;for(let f of A)if(Y&&typeof Y==="object"&&f in Y)Y=Y[f];else return;return Y}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of A){let[,f,X,U]=Y;w.push({path:f,required:!X,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:wH},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function AH($){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((A)=>`"${A}"`).join(", ")}`}class LB{fileLoader=new CB;envProcessor=new Y8;validator=new SB;async loadConfig($){let w=Date.now(),{cache:A,performance:Y,schema:f,validate:X,...U}=$;try{if(A?.enabled){let J=this.checkCache(U.name||"",U);if(J)return J}let W;try{W=await this.loadConfigurationStrategies(U,!0,A)}catch(J){let B=U.__strictErrorHandling;if(J instanceof Error&&J.name==="ConfigNotFoundError"){if(B)throw J;W={...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(J instanceof Error&&J.name==="ConfigLoadError"){let E=J.message.includes("EACCES")||J.message.includes("EPERM")||J.message.includes("permission denied"),j=!E&&(J.message.includes("syntax")||J.message.includes("Expected")||J.message.includes("Unexpected")||J.message.includes("BuildMessage")||J.message.includes("errors building")),T=J.message.includes("Configuration must export a valid object")||J.message.includes("Configuration file is empty and exports nothing");if(B&&(T||E))throw J;if(j&&(!B||!T))W={...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(!B)W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${J.message}`]};else throw J}else W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${J instanceof Error?J.message:String(J)}`]}}if(f||X)await this.validateConfiguration(W.config,f,X,U.name);if(A?.enabled&&W)this.cacheResult(U.name||"",W,A,U);if(Y?.enabled){let J={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(J);if(Y.slowThreshold&&J.duration>Y.slowThreshold)V0.warn(`Slow configuration loading detected: ${J.duration}ms for ${U.name}`);W.metrics=J}return W}catch(W){if(W instanceof Error&&W.name==="ConfigNotFoundError")throw W;let J=Date.now()-w;throw V0.error(`Configuration loading failed after ${J}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:Y="",alias:f,cwd:X,configDir:U,defaultConfig:W,checkEnv:J=!0,arrayStrategy:B="replace",verbose:E=!1}=$,j=X||UY.cwd(),T=[],F=await this.loadLocalConfiguration(Y,f,j,U,W,B,E,J,A);if(F)return T.push(...this.getLocalSearchPaths(Y,f,j,U)),this.finalizeResult(F,T,J,Y,E);let H=await this.loadHomeConfiguration(Y,f,W,B,E,J);if(H)return T.push(...this.getHomeSearchPaths(Y,f)),this.finalizeResult(H,T,J,Y,E);let G=await this.loadPackageJsonConfiguration(Y,f,j,W,B,E,J);if(G)return T.push($0(j,"package.json")),this.finalizeResult(G,T,J,Y,E);if(T.push(...this.getAllSearchPaths(Y,f,j,U)),w)throw tw.configNotFound(Y,T,f);return{...await this.applyEnvironmentVariables(Y,W,J,E),warnings:[`No configuration file found for "${Y}"${AH(f)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,Y,f,X,U,W,J){let B=W?uA($,f,U):f,E=this.getLocalDirectories(A,Y);for(let j of E){if(U)V0.info(`Searching for configuration in: ${j}`);let T=this.fileLoader.generateConfigPaths($,j,w),F=await this.fileLoader.tryLoadFromPaths(T,B,{arrayStrategy:X,verbose:U,cacheTtl:J?.ttl,useCache:!J?.ttl||J.ttl>100});if(F){if(U)V0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,Y,f,X){if(!$)return null;let U=X?uA($,A,f):A,W=[$0(xw(),".config",$),$0(xw(),".config"),xw()];for(let J of W){if(f)V0.info(`Checking home directory: ${J}`);let B=this.fileLoader.generateConfigPaths($,J,w),E=await this.fileLoader.tryLoadFromPaths(B,U,{arrayStrategy:Y,verbose:f});if(E){if(f)V0.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration($,w,A,Y,f,X,U){let W=U?uA($,Y,X):Y;try{let J=$0(A,"package.json");if(!rz(J))return null;let B={};try{B=JSON.parse(az(J,"utf8"))}catch(T){if(X)V0.warn("Failed to parse package.json:",[T instanceof Error?T:Error(String(T))]);return null}let E=B[$],j=$;if(!E&&w){let T=Array.isArray(w)?w:[w];for(let F of T){if(!F)continue;if(B[F]){E=B[F],j=F;break}}}if(E&&typeof E==="object"&&!Array.isArray(E)){if(X)V0.success(`Configuration loaded from package.json: ${j}`);return{config:IB(W,E,f),source:{type:"package.json",path:J,priority:30,timestamp:new Date}}}}catch(J){if(X)V0.warn("Failed to load package.json:",[J instanceof Error?J:Error(String(J))])}return null}async applyEnvironmentVariables($,w,A,Y){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:uA($,w,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,Y,f){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,Y){let f=[];if(A){let X=A($);if(X)f.push(...X)}if(w){let X=await this.validator.validateConfiguration($,w);if(!X.isValid)f.push(...X.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(f.length>0)throw tw.configValidation(Y||"unknown",f,Y)}checkCache($,w){let A=this.generateCacheKey($,w);return gA.get(A)||null}cacheResult($,w,A,Y){let f=this.generateCacheKey($,Y);gA.set(f,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias){let Y=Array.isArray(w.alias)?w.alias.join(","):w.alias;A.push(`alias:${Y}`)}if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,$0($,"config"),$0($,".config"),w?$0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,Y){let f=[];return f.push(...this.getLocalSearchPaths($,w,A,Y)),f.push(...this.getHomeSearchPaths($,w)),f.push($0(A,"package.json")),f}getLocalSearchPaths($,w,A,Y){let f=this.getLocalDirectories(A,Y),X=[];for(let U of f)X.push(...this.fileLoader.generateConfigPaths($,U,w));return X}getHomeSearchPaths($,w){if(!$)return[];let A=[$0(xw(),".config",$),$0(xw(),".config"),xw()],Y=[];for(let f of A)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}async loadConfigWithResult($){return this.loadConfig($)}}function uA($,w,A=!1){let Y=new Y8,f=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function X(U,W=[]){let J={...U};for(let[B,E]of Object.entries(U)){let j=[...W,B],T=[`${f}_${j.join("_").toUpperCase()}`,`${f}_${j.map((G)=>G.toUpperCase()).join("")}`,`${f}_${j.map((G)=>G.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,H;for(let G of T)if(F=UY.env[G],F!==void 0){H=G;break}if(F!==void 0&&H)if(typeof E==="boolean")J[B]=["true","1","yes"].includes(F.toLowerCase());else if(typeof E==="number"){let G=Number(F);if(!Number.isNaN(G))J[B]=G}else if(Array.isArray(E))try{J[B]=JSON.parse(F)}catch{J[B]=F.split(",").map((G)=>G.trim())}else J[B]=F;else if(E&&typeof E==="object"&&!Array.isArray(E))J[B]=X(E,j)}return J}return X(w)}var gA,pX,x2,P2=($)=>$,b2=($,w)=>{for(var A in w)x2($,A,{get:w[A],enumerable:!0,configurable:!0,set:i2.bind(w,A)})},c2=($,w)=>()=>($&&(w=$($=0)),w),aW,XB,gw,b1,UB,TG,FG,ZW,vA,cX,C$,g,zG,xW,GG,PW,HG,KG,QX,RG,iW,bW,_X,hG,qG,NG,yG,mA,JB,MG,S$,IG,CG,cW,dA,uX,T$,k,SG,uW,LG,nW,OG,VG,DX,QG,vW,mW,_G,kX,DG,kG,ZG,xG,PG,lA,WB,iG,bG="0.15.6",p$,wY,P1,nX,vX,AY,mX,dX,i1,lX,gX,ww,BB,EB,F0,k0,jB,TB,cG,nG,FB,YY,iq,N$,i,bq,mG,cq,dG,uq,nq,dW,vq,lG,gG,mq,lW,dq,lq,gq,tq,pq,ZX,tG,rq,z0,GB,fY,HB,KB,A8,RB,hB,XY,qB,NB,tw,wH,V0,$N,wN,AN;var f8=E$(()=>{gA=new gW,pX=new tW,x2=Object.defineProperty;aW={};b2(aW,{withErrorRecovery:()=>eW,tryLoadConfig:()=>WG,loadConfigWithResult:()=>UG,loadConfig:()=>fB,isRetryableError:()=>$G,isConfigNotFoundError:()=>e2,isBunfigError:()=>$B,globalPerformanceMonitor:()=>b1,globalCache:()=>gw,getEnvOrDefault:()=>wG,generateConfigTypes:()=>BG,defaultGeneratedDir:()=>TB,defaultConfigDir:()=>jB,deepMergeWithArrayStrategy:()=>eX,deepMerge:()=>wB,createLibraryConfig:()=>EG,config:()=>JG,bunfigPlugin:()=>jG,applyEnvVarsToConfig:()=>Z1,TypeGenerationError:()=>dX,SchemaValidationError:()=>i1,PluginError:()=>gX,PerformanceMonitor:()=>aX,FileSystemError:()=>mX,ErrorFactory:()=>ww,EnvVarError:()=>AY,EnvProcessor:()=>JY,ConfigValidator:()=>$8,ConfigValidationError:()=>nX,ConfigNotFoundError:()=>wY,ConfigMergeError:()=>vX,ConfigLoader:()=>w8,ConfigLoadError:()=>P1,ConfigFileLoader:()=>WY,ConfigCache:()=>rX,CacheUtils:()=>UB,BunfigError:()=>p$,BrowserConfigError:()=>lX,ArrayMergeStrategies:()=>BB});cG=c2(async()=>{XB=import.meta.require,gw=new rX,b1=new aX,UB={createKey:u2,isEquivalent:n2,estimateMemoryUsage:v2},TG=rA(iX.cwd(),"config"),FG=rA(iX.cwd(),"src/generated"),ZW=pA.env.CLARITY_LOG_DIR||A2(l2(),"logs"),vA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:ZW,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},cX=await g2(),C$={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"},g=C$,zG=C$.red,xW=C$.green,GG=C$.yellow,PW=C$.blue,HG=C$.magenta,KG=C$.cyan,QX=C$.white,RG=C$.gray,iW=C$.bgRed,bW=C$.bgYellow,_X=C$.bold,hG=C$.dim,qG=C$.italic,NG=C$.underline,yG=C$.reset,mA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},JB={debug:"\uD83D\uDD0D",info:PW("ℹ"),success:xW("✓"),warning:bW(QX(_X(" WARN "))),error:iW(QX(_X(" ERROR ")))},MG=new oA("stacks"),S$=new oA("bunfig",{showTags:!0}),IG=Z$(x1.cwd(),"config"),CG=Z$(x1.cwd(),"src/generated"),cW=tA.env.CLARITY_LOG_DIR||$2(a2(),"logs"),dA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:cW,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},uX=await s2(),T$={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"},k=T$,SG=T$.red,uW=T$.green,LG=T$.yellow,nW=T$.blue,OG=T$.magenta,VG=T$.cyan,DX=T$.white,QG=T$.gray,vW=T$.bgRed,mW=T$.bgYellow,_G=T$.bgGray,kX=T$.bold,DG=T$.dim,kG=T$.italic,ZG=T$.underline,xG=T$.strikethrough,PG=T$.reset,lA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},WB={debug:"\uD83D\uDD0D",info:nW("ℹ"),success:uW("✓"),warning:mW(DX(kX(" WARN "))),error:vW(DX(kX(" ERROR ")))},iG=new $Y("stacks"),p$=class extends Error{timestamp;context;constructor(w,A={}){super(w);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=A,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(([A,Y])=>`${A}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${w}`}},wY=class extends p${code="CONFIG_NOT_FOUND";constructor(w,A,Y){let f=Y?` or alias "${Y}"`:"";super(`Configuration "${w}"${f} not found`,{configName:w,alias:Y,searchPaths:A,searchPathCount:A.length})}},P1=class extends p${code="CONFIG_LOAD_ERROR";constructor(w,A,Y){super(`Failed to load configuration from "${w}": ${A.message}`,{configPath:w,configName:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},nX=class extends p${code="CONFIG_VALIDATION_ERROR";constructor(w,A,Y){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:Y,validationErrors:A,errorCount:A.length})}},vX=class extends p${code="CONFIG_MERGE_ERROR";constructor(w,A,Y,f){super(`Failed to merge configuration from "${w}" with "${A}": ${Y.message}`,{sourcePath:w,targetPath:A,configName:f,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},AY=class extends p${code="ENV_VAR_ERROR";constructor(w,A,Y,f){super(`Failed to parse environment variable "${w}" with value "${A}" as ${Y}`,{envKey:w,envValue:A,expectedType:Y,configName:f})}},mX=class extends p${code="FILE_SYSTEM_ERROR";constructor(w,A,Y){super(`File system ${w} failed for "${A}": ${Y.message}`,{operation:w,path:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},dX=class extends p${code="TYPE_GENERATION_ERROR";constructor(w,A,Y){super(`Failed to generate types from "${w}" to "${A}": ${Y.message}`,{configDir:w,outputPath:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},i1=class extends p${code="SCHEMA_VALIDATION_ERROR";constructor(w,A,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:w,configName:Y,validationErrors:A,errorCount:A.length})}},lX=class extends p${code="BROWSER_CONFIG_ERROR";constructor(w,A,Y,f){super(`Failed to fetch configuration from "${w}": ${A} ${Y}`,{endpoint:w,status:A,statusText:Y,configName:f})}},gX=class extends p${code="PLUGIN_ERROR";constructor(w,A,Y){super(`Plugin "${w}" failed during ${A}: ${Y.message}`,{pluginName:w,operation:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},ww={configNotFound($,w,A){return new wY($,w,A)},configLoad($,w,A){return new P1($,w,A)},configValidation($,w,A){return new nX($,w,A)},configMerge($,w,A,Y){return new vX($,w,A,Y)},envVar($,w,A,Y){return new AY($,w,A,Y)},fileSystem($,w,A){return new mX($,w,A)},typeGeneration($,w,A){return new dX($,w,A)},schemaValidation($,w,A){return new i1($,w,A)},browserConfig($,w,A,Y){return new lX($,w,A,Y)},plugin($,w,A){return new gX($,w,A)}},BB={replace:"replace",concat:"concat",smart:"smart"},EB=/^https?:\/\//,F0=new $Y("bunfig",{showTags:!0}),k0=new w8,jB=x$(Rw.cwd(),"config"),TB=x$(Rw.cwd(),"src/generated")});nG=aA.env.CLARITY_LOG_DIR||I2(uG(),"logs"),FB={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:nG,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},YY={...FB},iq=(async()=>{try{let{loadConfig:$}=await cG().then(()=>aW),w=await $({name:"clarity",alias:"logging",defaultConfig:FB,cwd:aA.cwd()});if(w)Object.assign(YY,w)}catch{}return YY})();N$={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=N$,bq=N$.red,mG=N$.green,cq=N$.yellow,dG=N$.blue,uq=N$.magenta,nq=N$.cyan,dW=N$.white,vq=N$.gray,lG=N$.bgRed,gG=N$.bgYellow,mq=N$.bgGray,lW=N$.bold,dq=N$.dim,lq=N$.italic,gq=N$.underline,tq=N$.strikethrough,pq=N$.reset,ZX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},tG={debug:"\uD83D\uDD0D",info:dG("ℹ"),success:mG("✓"),warning:gG(dW(lW(" WARN "))),error:lG(dW(lW(" ERROR ")))};rq=new BY("stacks");z0=class z0 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,A])=>`${w}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}};GB=class GB extends z0{code="CONFIG_NOT_FOUND";constructor($,w,A){let Y=A===void 0?[]:Array.isArray(A)?A.filter(Boolean):[A],f="";if(Y.length===1)f=` or alias "${Y[0]}"`;else if(Y.length>1)f=` or aliases ${Y.map((X)=>`"${X}"`).join(", ")}`;super(`Configuration "${$}"${f} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}};fY=class fY extends z0{code="CONFIG_LOAD_ERROR";constructor($,w,A){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:A,originalError:w.name,originalMessage:w.message});this.cause=w}};HB=class HB extends z0{code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}};KB=class KB extends z0{code="CONFIG_MERGE_ERROR";constructor($,w,A,Y){super(`Failed to merge configuration from "${$}" with "${w}": ${A.message}`,{sourcePath:$,targetPath:w,configName:Y,originalError:A.name,originalMessage:A.message});this.cause=A}};A8=class A8 extends z0{code="ENV_VAR_ERROR";constructor($,w,A,Y){super(`Failed to parse environment variable "${$}" with value "${w}" as ${A}`,{envKey:$,envValue:w,expectedType:A,configName:Y})}};RB=class RB extends z0{code="FILE_SYSTEM_ERROR";constructor($,w,A){super(`File system ${$} failed for "${w}": ${A.message}`,{operation:$,path:w,originalError:A.name,originalMessage:A.message});this.cause=A}};hB=class hB extends z0{code="TYPE_GENERATION_ERROR";constructor($,w,A){super(`Failed to generate types from "${$}" to "${w}": ${A.message}`,{configDir:$,outputPath:w,originalError:A.name,originalMessage:A.message});this.cause=A}};XY=class XY extends z0{code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}};qB=class qB extends z0{code="BROWSER_CONFIG_ERROR";constructor($,w,A,Y){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:Y})}};NB=class NB extends z0{code="PLUGIN_ERROR";constructor($,w,A){super(`Plugin "${$}" failed during ${w}: ${A.message}`,{pluginName:$,operation:w,originalError:A.name,originalMessage:A.message});this.cause=A}};tw={configNotFound($,w,A){return new GB($,w,A)},configLoad($,w,A){return new fY($,w,A)},configValidation($,w,A){return new HB($,w,A)},configMerge($,w,A,Y){return new KB($,w,A,Y)},envVar($,w,A,Y){return new A8($,w,A,Y)},fileSystem($,w,A){return new RB($,w,A)},typeGeneration($,w,A){return new hB($,w,A)},schemaValidation($,w,A){return new XY($,w,A)},browserConfig($,w,A,Y){return new qB($,w,A,Y)},plugin($,w,A){return new NB($,w,A)}};wH=/^https?:\/\//;V0=new BY("bunfig",{showTags:!0});$N=new LB;wN=$0(UY.cwd(),"config"),AN=$0(UY.cwd(),"src/generated")});var q;var Aw=E$(()=>{q={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 XH}from"node:module";import{Resolver as J8}from"node:dns/promises";import{createHash as JH,sign as WH}from"node:crypto";import{createHash as BH}from"node:crypto";import{sign as EH}from"node:crypto";import{generateKeyPairSync as ZE,X509Certificate as hH}from"node:crypto";import W8 from"node:os";import B8 from"node:path";import{existsSync as VB,statSync as QB}from"fs";import{existsSync as NH,mkdirSync as qN,readdirSync as NN,readFileSync as yH,writeFileSync as yN}from"fs";import{homedir as rw}from"os";import{dirname as CN,resolve as f0}from"path";import rY from"process";import{existsSync as _B,statSync as DB}from"fs";import{existsSync as k8,mkdirSync as MH,readdirSync as IH,writeFileSync as CH}from"fs";import{homedir as aw}from"os";import{dirname as kB,resolve as i$}from"path";import qw from"process";import{join as SH,relative as LH,resolve as ZB}from"path";import DY from"process";import{existsSync as xE,mkdirSync as xN,readdirSync as PN,writeFileSync as iN}from"fs";import{homedir as E8}from"os";import{dirname as uN,resolve as P$}from"path";import m1 from"process";import{join as OH,relative as VH,resolve as xB}from"path";import kY from"process";import{existsSync as PE,mkdirSync as lN,readdirSync as gN,writeFileSync as tN}from"fs";import{dirname as rN,resolve as ZY}from"path";import Z8 from"process";import{Buffer as Yw}from"buffer";import{createCipheriv as QH,createDecipheriv as _H,randomBytes as j8}from"crypto";import{closeSync as T8,createReadStream as PB,createWriteStream as DH,existsSync as F8,fsyncSync as iB,openSync as bB,writeFileSync as kH}from"fs";import{access as ZH,constants as cB,mkdir as xH,readdir as EY,rename as uB,stat as sw,unlink as jY,writeFile as z8}from"fs/promises";import{join as ow}from"path";import L$ from"process";import{pipeline as PH}from"stream/promises";import{createGzip as nB}from"zlib";import ew from"process";import i0 from"process";import{Buffer as Z0}from"buffer";import{createCipheriv as iH,createDecipheriv as bH,randomBytes as G8}from"crypto";import{closeSync as H8,createReadStream as vB,createWriteStream as cH,existsSync as TY,fsyncSync as mB,openSync as dB,writeFileSync as uH}from"fs";import{access as nH,constants as lB,mkdir as vH,readdir as FY,rename as gB,stat as $1,unlink as zY,writeFile as K8}from"fs/promises";import{isAbsolute as mH,join as w1,resolve as dH}from"path";import v from"process";import{pipeline as lH}from"stream/promises";import{createGzip as tB}from"zlib";import A1 from"process";import b0 from"process";import GY from"process";import{existsSync as HY}from"fs";import{resolve as R8}from"path";import{existsSync as gH}from"fs";import{existsSync as tH,readdirSync as pH}from"fs";import{extname as h8,resolve as pB}from"path";import rH from"process";import{join as aH,relative as sH,resolve as rB}from"path";import xY from"process";import{Buffer as x0}from"buffer";import{createCipheriv as oH,createDecipheriv as eH,randomBytes as q8}from"crypto";import{closeSync as N8,createReadStream as aB,createWriteStream as $9,existsSync as KY,fsyncSync as sB,openSync as oB,writeFileSync as w9}from"fs";import{access as A9,constants as eB,mkdir as Y9,readdir as RY,rename as $E,stat as Y1,unlink as hY,writeFile as y8}from"fs/promises";import{isAbsolute as f9,join as f1,resolve as X9}from"path";import m from"process";import{pipeline as U9}from"stream/promises";import{createGzip as wE}from"zlib";import X1 from"process";import c0 from"process";import qY from"process";import{existsSync as NY}from"fs";import{resolve as M8}from"path";import{existsSync as J9}from"fs";import{exec as V5}from"node:child_process";import GE from"node:fs";import Q5 from"node:os";import G0 from"node:path";import Rj from"node:process";import{promisify as _5}from"node:util";import B1 from"node:crypto";import u0 from"node:fs";import t8 from"node:path";import{execSync as qE}from"node:child_process";import tY from"node:os";async function NE($,w,A={}){let Y=A.timeoutMs??120000,f=A.intervalMs??3000,X=$.split(".").slice(-2).join("."),U;try{let B=new J8,E=await B.resolveNs(X),j=(await Promise.all(E.map((T)=>B.resolve4(T).catch(()=>[])))).flat();if(j.length>0)U=new J8,U.setServers(j)}catch{}let W=Date.now()+Y,J=U??new J8;for(;;){try{if((await J.resolveTxt($)).some((B)=>B.join("")===w))return!0}catch{}if(Date.now()>=W)return!1;await new Promise((B)=>setTimeout(B,f))}}class v1{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(v1.PATH_PREFIX);if(w===-1)return;let A=$.slice(w+v1.PATH_PREFIX.length);return this.get(A)}}function IY($){return(typeof $==="string"?Buffer.from($,"utf8"):Buffer.from($)).toString("base64url")}function V8($){return Buffer.from($,"base64url")}function yE($){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 ME($){let w=`{"crv":"${$.crv}","kty":"${$.kty}","x":"${$.x}","y":"${$.y}"}`;return JH("sha256").update(w).digest("base64url")}function IE($){let{protectedHeader:w,payload:A,privateKey:Y}=$,f=IY(JSON.stringify(w)),X=A===""?"":IY(JSON.stringify(A)),U=`${f}.${X}`,W=WH("sha256",Buffer.from(U),{key:Y,dsaEncoding:"ieee-p1363"});return{protected:f,payload:X,signature:IY(W)}}class _Y{directoryUrl;accountKey;jwk;thumbprint;directoryCache;nonce;accountKid;constructor($){this.directoryUrl=$.directoryUrl,this.accountKey=$.accountKey,this.jwk=yE($.accountPublicKey),this.thumbprint=ME(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:A,useJwk:Y}=$,f={alg:"ES256",nonce:await this.ensureNonce(),url:w};if(Y)f.jwk=this.jwk;else f.kid=this.requireKid();let X=IE({protectedHeader:f,payload:A,privateKey:this.accountKey}),U=await fetch(w,{method:"POST",headers:{"content-type":"application/jose+json"},body:JSON.stringify(X)}),W=U.headers.get("replay-nonce");if(W)this.nonce=W;let J=U.headers.get("content-type")??"",B;if(J.includes("application/pem-certificate-chain")||J.startsWith("text/"))B=await U.text();else{let E=await U.text();B=E?JSON.parse(E):{}}if(U.status>=400){let E=B??{};throw new QY(`ACME request to ${w} failed (HTTP ${U.status}): ${E.type??""} ${E.detail??""}`.trim(),E,U.status)}return{status:U.status,headers:U.headers,body:B,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(),A={termsOfServiceAgreed:!0};if($.email)A.contact=[`mailto:${$.email}`];let Y=await this.signedPost({url:w.newAccount,payload:A,useJwk:!0});if(!Y.location)throw Error("ACME newAccount did not return an account URL (Location header)");return this.accountKid=Y.location,this.accountKid}async newOrder($){let w=await this.directory(),A={identifiers:$.map((f)=>({type:"dns",value:f}))},Y=await this.signedPost({url:w.newOrder,payload:A});if(!Y.location)throw Error("ACME newOrder did not return an order URL (Location header)");return{order:Y.body,orderUrl:Y.location}}async getAuthorization($){return(await this.signedPost({url:$,payload:""})).body}keyAuthorization($){return`${$}.${this.thumbprint}`}dns01TxtValue($){return BH("sha256").update(this.keyAuthorization($)).digest("base64url")}async notifyChallengeReady($){await this.signedPost({url:$,payload:{}})}async pollAuthorization($,w={}){let A=w.timeoutMs??60000,Y=w.intervalMs??2000,f=Date.now()+A;while(Date.now()<f){let X=await this.getAuthorization($);if(X.status==="valid")return;if(X.status==="invalid"){let U=X.challenges.find((W)=>W.status==="invalid");throw new QY(`Authorization for ${X.identifier.value} became invalid: ${U?.error?.detail??"unknown reason"}`,U?.error??{},0)}await OB(Y),Y=Math.min(Y*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 A=w.timeoutMs??60000,Y=w.intervalMs??2000,f=Date.now()+A;while(Date.now()<f){let X=await this.getOrder($);if(X.status==="valid"){if(!X.certificate)throw Error("ACME order is valid but has no certificate URL");return X.certificate}if(X.status==="invalid")throw Error(`ACME order ${$} became invalid`);await OB(Y),Y=Math.min(Y*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 A=$.challenges.find((Y)=>Y.type===w);if(!A)throw Error(`No ${w} challenge available for ${$.identifier.value}`);return A}}function LE($){let w=$.match(/-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----\n?/g)??[],A=w[0];if(!A)return{certPem:`${$.trim()}
64
+ `,chainPem:""};let Y=`${A.trim()}
65
+ `,f=w.slice(1).map((X)=>X.trim()).join(`
66
+ `);return{certPem:Y,chainPem:f?`${f}
67
+ `:""}}function OE($){return`_acme-challenge.${$.startsWith("*.")?$.slice(2):$}`}function OB($){return new Promise((w)=>setTimeout(w,$))}function jH($){if($<128)return Buffer.from([$]);let w=[],A=$;while(A>0)w.unshift(A&255),A>>=8;return Buffer.from([128|w.length,...w])}function Uw($,w){return Buffer.concat([Buffer.from([$]),jH(w.length),w])}function VE($){let w;if(typeof $==="number")if($===0)w=Buffer.from([0]);else{let A=[],Y=$;while(Y>0)A.unshift(Y&255),Y>>=8;if(A[0]&128)A.unshift(0);w=Buffer.from(A)}else if(w=$.length===0?Buffer.from([0]):$,w[0]&128)w=Buffer.concat([Buffer.from([0]),w]);return Uw(2,w)}function hw($){let w=$.split(".").map(Number);if(w.length<2)throw Error(`Invalid OID: ${$}`);let A=[40*w[0]+w[1]];for(let Y=2;Y<w.length;Y++){let f=w[Y],X=[f&127];f=Math.floor(f/128);while(f>0)X.unshift(f&127|128),f=Math.floor(f/128);A.push(...X)}return Uw(6,Buffer.from(A))}function Y0(...$){return Uw(48,Buffer.concat($))}function Q8(...$){return Uw(49,Buffer.concat($))}function _8($){return Uw(3,Buffer.concat([Buffer.from([0]),$]))}function QE($){return Uw(4,$)}function _E($){return Uw(12,Buffer.from($,"utf8"))}function D8($,w,A){let Y=128|(A?32:0)|$;return Uw(Y,w)}function RH($){let w=$.export({format:"jwk"});if(!w.x||!w.y)throw Error("Public key JWK is missing x/y coordinates");let A=V8(w.x),Y=V8(w.y);if(A.length!==32||Y.length!==32)throw Error(`Expected 32-byte P-256 coordinates, got x=${A.length} y=${Y.length}`);return Buffer.concat([Buffer.from([4]),A,Y])}function DE($){let{domains:w,publicKey:A,privateKey:Y}=$;if(w.length===0)throw Error("At least one domain is required to build a CSR");let f=Y0(Q8(Y0(hw(GH),_E(w[0])))),X=Y0(Y0(hw(TH),hw(FH)),_8(RH(A))),U=w.map((G)=>D8(2,Buffer.from(G,"ascii"),!1)),W=Y0(...U),J=Y0(hw(KH),QE(W)),B=Y0(J),E=Y0(hw(HH),Q8(B)),j=D8(0,E,!0),T=Y0(VE(0),f,X,j),F=EH("sha256",T,Y),H=Y0(hw(zH));return Y0(T,H,_8(F))}function kE($){return DE($).toString("base64url")}function qH($){if($){let{createPrivateKey:f,createPublicKey:X}=UH("node:crypto"),U=f($),W=X(U);return{privateKey:U,publicKey:W,pem:$}}let{privateKey:w,publicKey:A}=ZE("ec",{namedCurve:"P-256"}),Y=w.export({format:"pem",type:"pkcs8"}).toString();return{privateKey:w,publicKey:A,pem:Y}}async function p8($){let{domains:w,method:A}=$;if(w.length===0)throw Error("obtainCertificate requires at least one domain");if(A==="dns-01"&&!$.dnsProvider)throw Error("dns-01 requires a dnsProvider to publish _acme-challenge TXT records");if(w.some((j)=>j.startsWith("*."))&&A!=="dns-01")throw Error("Wildcard certificates require the dns-01 challenge method");let Y=$.directoryUrl??($.staging===!1?SE:CE),f=qH($.accountKeyPem),X=new _Y({directoryUrl:Y,accountKey:f.privateKey,accountPublicKey:f.publicKey});await X.newAccount({email:$.email});let{order:U,orderUrl:W}=await X.newOrder(w),J=$.http01Store??pY,B=[],E=[];try{for(let C of U.authorizations){let y=await X.getAuthorization(C);if(y.status==="valid")continue;let O=_Y.selectChallenge(y,A);if(A==="dns-01"){let B$=OE(y.identifier.value),A$=X.dns01TxtValue(O.token);await $.dnsProvider.setTxt(B$,A$),B.push({name:B$,value:A$}),await NE(B$,A$,{timeoutMs:$.dnsPropagationTimeoutMs??120000})}else J.add(O.token,X.keyAuthorization(O.token)),E.push(O.token);await X.notifyChallengeReady(O.url),await X.pollAuthorization(C,{timeoutMs:$.timeoutMs})}let{privateKey:j,publicKey:T}=ZE("ec",{namedCurve:"P-256"}),F=kE({domains:w,publicKey:T,privateKey:j});await X.finalizeOrder(U.finalize,F);let H=await X.pollOrder(W,{timeoutMs:$.timeoutMs}),G=await X.downloadCertificate(H),{certPem:K,chainPem:R}=LE(G),h=R?`${K}${R}`:K,N=j.export({format:"pem",type:"pkcs8"}).toString(),M=new Date(new hH(K).validTo);return{certPem:K,keyPem:N,chainPem:R,fullChainPem:h,accountKeyPem:f.pem,notAfter:M}}finally{for(let{name:j,value:T}of B)await $.dnsProvider?.removeTxt(j,T).catch(()=>{});for(let j of E)J.remove(j)}}class iE{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,Y])=>A.timestamp.getTime()-Y.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,Y){if(!this.options.enabled)return;let f=this.generateKey($,A),X=Y??this.options.ttl,U=this.estimateSize(w);this.cache.set(f,{value:w,timestamp:new Date,ttl:X,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),Y=this.cache.get(A);if(!Y){this.totalMisses++;return}if(this.isExpired(Y)){this.cache.delete(A),this.totalMisses++;return}return Y.hits++,this.totalHits++,Y.value}isFileModified($,w){try{if(!VB($))return!0;return QB($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,Y){try{let f=VB(A)?QB(A):null,X=f?f.mtime:new Date;this.set($,{value:w,fileTimestamp:X},A,Y)}catch{this.set($,w,A,Y)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((Y,f)=>Y+f.size,0),A=$.map((Y)=>Y.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let Y=A;this.cache.set(w,{value:Y.value,timestamp:new Date(Y.timestamp),ttl:Y.ttl,hits:Y.hits,size:Y.size})}}}class bE{metrics=[];maxMetrics=1000;async track($,w,A={}){let Y=performance.now(),f=new Date;try{let X=await w(),U=performance.now()-Y;return this.recordMetric({operation:$,duration:U,timestamp:f,...A}),X}catch(X){let U=performance.now()-Y;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:f,...A}),X}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((f)=>f.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((f)=>f.duration),Y=A.reduce((f,X)=>f+X,0);return{count:w.length,averageDuration:Y/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:Y,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function E9($,w){this[$]=B9.bind(null,w)}class a8{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,Y])=>A.timestamp.getTime()-Y.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,Y){if(!this.options.enabled)return;let f=this.generateKey($,A),X=Y??this.options.ttl,U=this.estimateSize(w);this.cache.set(f,{value:w,timestamp:new Date,ttl:X,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),Y=this.cache.get(A);if(!Y){this.totalMisses++;return}if(this.isExpired(Y)){this.cache.delete(A),this.totalMisses++;return}return Y.hits++,this.totalHits++,Y.value}isFileModified($,w){try{if(!_B($))return!0;return DB($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,Y){try{let f=_B(A)?DB(A):null,X=f?f.mtime:new Date;this.set($,{value:w,fileTimestamp:X},A,Y)}catch{this.set($,w,A,Y)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((Y,f)=>Y+f.size,0),A=$.map((Y)=>Y.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let Y=A;this.cache.set(w,{value:Y.value,timestamp:new Date(Y.timestamp),ttl:Y.ttl,hits:Y.hits,size:Y.size})}}}class s8{metrics=[];maxMetrics=1000;async track($,w,A={}){let Y=performance.now(),f=new Date;try{let X=await w(),U=performance.now()-Y;return this.recordMetric({operation:$,duration:U,timestamp:f,...A}),X}catch(X){let U=performance.now()-Y;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:f,...A}),X}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((f)=>f.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((f)=>f.duration),Y=A.reduce((f,X)=>f+X,0);return{count:w.length,averageDuration:Y/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:Y,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function F9($,w={}){let A=Object.keys(w).sort().map((Y)=>`${Y}:${w[Y]}`).join("|");return A?`${$}:${A}`:$}function z9($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function G9($){return $.getStats().size*2}function o8($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&o(w[0])&&"id"in w[0]&&w[0].id===3&&o(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(o(w)&&o($)&&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(o($)&&"arr"in $&&Array.isArray($.arr)&&o(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&o(w[0])&&o($[0])){let Y=[...w];for(let f of $)if(o(f)&&"name"in f){if(!Y.find((X)=>o(X)&&("name"in X)&&X.name===f.name))Y.push(f)}else if(o(f)&&"path"in f){if(!Y.find((X)=>o(X)&&("path"in X)&&X.path===f.path))Y.push(f)}else if(!Y.some((X)=>iY(X,f)))Y.push(f);return Y}if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}if(!o(w)||!o($))return w;let A={...$};for(let Y in w)if(Object.prototype.hasOwnProperty.call(w,Y)){let f=w[Y];if(f===null||f===void 0)continue;else if(o(f)&&o(A[Y]))A[Y]=o8(A[Y],f);else if(Array.isArray(f)&&Array.isArray(A[Y]))if(f.length>0&&A[Y].length>0&&o(f[0])&&o(A[Y][0])){let X=[...f];for(let U of A[Y])if(o(U)&&"name"in U){if(!X.find((W)=>o(W)&&("name"in W)&&W.name===U.name))X.push(U)}else if(o(U)&&"path"in U){if(!X.find((W)=>o(W)&&("path"in W)&&W.path===U.path))X.push(U)}else if(!X.some((W)=>iY(W,U)))X.push(U);A[Y]=X}else if(f.every((X)=>typeof X==="string")&&A[Y].every((X)=>typeof X==="string")){let X=[...f];for(let U of A[Y])if(!X.includes(U))X.push(U);A[Y]=X}else A[Y]=f;else A[Y]=f}return A}function iY($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!iY($[A],w[A]))return!1;return!0}if(o($)&&o(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!iY($[f],w[f]))return!1}return!0}return!1}function o($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function H9($,w){if(!PE($))return null;try{let A=await import($),Y=A.default||A;if(typeof Y!=="object"||Y===null||Array.isArray(Y))return null;try{return o8(w,Y)}catch{return null}}catch{return null}}async function K9({name:$="",cwd:w,defaultConfig:A}){let Y=w||Z8.cwd(),f=[".ts",".js",".mjs",".cjs",".json"],X=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of X)for(let W of f){let J=ZY(Y,`${U}${W}`),B=await H9(J,A);if(B!==null)return B}try{let U=ZY(Y,"package.json");if(PE(U)){let W=(await import(U))[$];if(W&&typeof W==="object"&&!Array.isArray(W))try{return o8(A,W)}catch{}}}catch{}return A}function R9($,w={}){let A=kY.cwd();while(A.includes("storage"))A=xB(A,"..");let Y=xB(A,$||"");if(w?.relative)return VH(kY.cwd(),Y);return Y}async function h9(){try{let $=await K9({name:"clarity",defaultConfig:SY,cwd:kY.cwd(),endpoint:"",headers:{}});return{...SY,...$}}catch{return SY}}function f$(){if(i0.env.NODE_ENV==="test"||i0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function q9(){if(i0.env.NODE_ENV==="test"||i0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof i0<"u"){let $=i0.type;if($==="renderer"||$==="worker")return!1;return!!(i0.versions&&(i0.versions.node||i0.versions.bun))}return!1}class uE{async format($){let w=await q9(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}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 bY{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={...P8},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new uE,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 A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...LY,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...LY};return{...LY,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:P8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}async writeToFile($){let w=(async()=>{let Y,f=0,X=3,U=1000;while(f<X)try{try{try{await ZH(this.config.logDirectory,cB.F_OK|cB.W_OK)}catch(J){if(J instanceof Error&&"code"in J)if(J.code==="ENOENT")await xH(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:Yw.from($);try{if(!F8(this.currentLogFile))await z8(this.currentLogFile,"",{mode:420});if(Y=bB(this.currentLogFile,"a",420),kH(Y,W,{flag:"a"}),iB(Y),Y!==void 0)T8(Y),Y=void 0;if((await sw(this.currentLogFile)).size===0){if(await z8(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 B=J;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(f<X-1){let E=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${f+1}/${X}:`,E);let j=U*2**f;await new Promise((T)=>setTimeout(T,j)),f++;continue}}if(B?.code&&["ENOSPC","EDQUOT"].includes(B.code))throw Error(`Disk quota exceeded or no space left on device: ${B.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",B),B}finally{if(Y!==void 0)try{T8(Y)}catch(J){console.error("Debug: [writeToFile] Error closing file descriptor:",J)}}}catch(W){if(f===X-1){let B=W,E=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",E),W}f++;let J=U*2**(f-1);await new Promise((B)=>setTimeout(B,J))}})();this.pendingOperations.push(w);let A=this.pendingOperations.length-1;try{await w}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}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(f$())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,A=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),A=this.generateKey();this.currentKeyId=w,this.keys.set(w,A),this.encryptionKeys.set(w,{key:A,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,U],[,W])=>W.createdAt.getTime()-U.createdAt.getTime()),f=typeof $.maxKeys==="number"?$.maxKeys:1,X=Math.max(1,f);if(Y.length>X)for(let[U]of Y.slice(X))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return j8(16).toString("hex")}generateKey(){return j8(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(),A=j8(16),Y=QH("aes-256-gcm",w,A),f=Yw.concat([Y.update($,"utf8"),Y.final()]),X=Y.getAuthTag();return{encrypted:Yw.concat([A,f,X]),iv:A}}async compressData($){return new Promise((w,A)=>{let Y=nB(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w(Yw.from(Yw.concat(f)))),Y.on("error",A),Y.write($),Y.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(f$())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 A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await EY(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await sw(A).catch(()=>null))try{if(await uB(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await jY(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await z8(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await sw(A).catch(()=>null))await uB(A,X)}if(this.currentLogFile=Y,w.maxFiles){let f=(await EY(this.config.logDirectory)).filter((X)=>X.startsWith(this.name)).sort((X,U)=>U.localeCompare(X));for(let X of f.slice(w.maxFiles))await jY(ow(this.config.logDirectory,X))}}}async compressLogFile($,w){let A=PB($),Y=DH(w),f=nB();await PH(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);await this.writeToFile(Y),console.log(Y)}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 A={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(A)}}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()})),F8(this.currentLogFile))try{let $=bB(this.currentLogFile,"r+");iB($),T8($)}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(!f$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await EY(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await jY(ow(this.config.logDirectory,w))}catch(A){console.error(`Failed to delete temp file ${w}:`,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:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=L$.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${t.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}async log($,w,...A){let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);if(this.fancy&&!f$()){let B=aE[$],E=this.options.showTags!==!1&&this.name?t.gray(this.formatTag(this.name)):"",j;switch($){case"debug":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:t.gray(U),level:$}),console.error(j);break;case"info":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.error(j);break;case"success":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:t.green(U),level:$}),console.error(j);break;case"warning":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.warn(j);break;case"error":if(j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.error(j),W){let T=W.split(`
68
+ `);for(let F of T)if(F.trim()&&!F.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:t.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!f$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}if(!this.shouldLog($))return;let J=`${X} ${this.environment}.${$.toUpperCase()}: ${U}
69
+ `;if(W)J+=`${W}
70
+ `;J=J.replace(this.ANSI_PATTERN,""),await this.writeToFile(J)}time($){let w=performance.now();if(this.fancy&&!f$()){let A=this.options.showTags!==!1&&this.name?t.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:t.blue(""),tag:A,message:`${t.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),J=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)J+=` ${JSON.stringify(A)}`;if(J+=`
71
+ `,J=J.replace(this.ANSI_PATTERN,""),this.fancy&&!f$()){let B=this.options.showTags!==!1&&this.name?t.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:t.green("✓"),tag:B,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!f$())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}:${$}`,A=new bY(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(A),A}createReadStream(){if(f$())throw Error("createReadStream is not supported in browser environments");if(!F8(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return PB(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 A=this.keys.get(this.currentKeyId);try{let Y=Yw.isBuffer($)?$:Yw.from($,"base64"),f=Y.slice(0,16),X=Y.slice(-16),U=Y.slice(16,-16),W=_H("aes-256-gcm",A,f);return W.setAuthTag(X),Yw.concat([W.update(U),W.final()]).toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return f$()}isServerMode(){return!f$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w);if(this.fancy&&!f$()){let X=$.split(`
72
+ `),U=Math.max(...X.map((E)=>E.length))+2,W=`┌${"─".repeat(U)}┐`,J=`└${"─".repeat(U)}┘`,B=X.map((E)=>{let j=" ".repeat(U-E.length-2);return`│ ${E}${j} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:A,message:t.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:A,message:t.cyan(W)})),B.forEach((E)=>console.error(this.formatConsoleMessage({timestamp:A,message:t.cyan(E),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:t.cyan(J),showTimestamp:!1}))}else if(!f$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${$}`);let f=`${Y} ${this.environment}.INFO: [BOX] ${$}
73
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(f)}async prompt($){if(f$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${t.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();L$.stdin.removeListener("data",A);try{if(typeof L$.stdin.setRawMode==="function")L$.stdin.setRawMode(!1)}catch{}L$.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof L$.stdin.setRawMode==="function")L$.stdin.setRawMode(!0)}catch{}L$.stdin.resume(),L$.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let f=/%([sdijfo%])/g,X=0;if(A=$.replace(f,(U,W)=>{if(W==="%")return"%";if(X>=w.length)return U;let J=w[X++];switch(W){case"s":return String(J);case"d":case"i":return Number(J).toString();case"j":case"o":return JSON.stringify(J,null,2);default:return U}}),X<w.length)A+=` ${w.slice(X).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`}if(this.fancy&&!f$()){let f=this.options.showTags!==!1&&this.name?t.gray(this.formatTag(this.name)):"",X=t.blue("◐");console.error(`${X} ${f} ${t.cyan(A)}`)}let Y=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
74
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(Y)}progress($,w=""){if(!this.enabled||!this.fancy||f$()||$<=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 A=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:A,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(Y,f)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||f$())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,Y)),f!==void 0)this.activeProgressBar.message=f;let X=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,X)},finish:(Y)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||f$())return;if(this.activeProgressBar.current=this.activeProgressBar.total,Y!==void 0)this.activeProgressBar.message=Y;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(Y,f="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||f$())return;L$.stdout.write(`${"\r".padEnd(L$.stdout.columns||80)}\r`),this.log(f,Y),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||f$()||!L$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=t.green("━".repeat(Y)),U=t.gray("".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=w||A===100?t.green("✓"):t.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${t.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=L$.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,L$.stdout.write($.lastRenderedLine),w)L$.stdout.write(`
75
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||f$()||!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(f$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await EY(this.config.logDirectory),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let f=ow(this.config.logDirectory,Y);if($.before)try{if((await sw(f)).mtime>=$.before)continue}catch(X){console.error(`Failed to get stats for file ${f}:`,X);continue}A.push(f)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await jY(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function CY($,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 Y=[...w];for(let f of $)if(d(f)&&"name"in f){if(!Y.find((X)=>d(X)&&("name"in X)&&X.name===f.name))Y.push(f)}else if(d(f)&&"path"in f){if(!Y.find((X)=>d(X)&&("path"in X)&&X.path===f.path))Y.push(f)}else if(!Y.some((X)=>cY(X,f)))Y.push(f);return Y}if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}if(!d(w)||!d($))return w;let A={...$};for(let Y in w)if(Object.prototype.hasOwnProperty.call(w,Y)){let f=w[Y];if(f===null||f===void 0)continue;else if(d(f)&&d(A[Y]))A[Y]=CY(A[Y],f);else if(Array.isArray(f)&&Array.isArray(A[Y]))if(f.length>0&&A[Y].length>0&&d(f[0])&&d(A[Y][0])){let X=[...f];for(let U of A[Y])if(d(U)&&"name"in U){if(!X.find((W)=>d(W)&&("name"in W)&&W.name===U.name))X.push(U)}else if(d(U)&&"path"in U){if(!X.find((W)=>d(W)&&("path"in W)&&W.path===U.path))X.push(U)}else if(!X.some((W)=>cY(W,U)))X.push(U);A[Y]=X}else if(f.every((X)=>typeof X==="string")&&A[Y].every((X)=>typeof X==="string")){let X=[...f];for(let U of A[Y])if(!X.includes(U))X.push(U);A[Y]=X}else A[Y]=f;else A[Y]=f}return A}function e8($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:CY($,w);if(Array.isArray($))return A==="replace"?w:CY($,w);if(!d(w)||!d($))return w;let Y={...$};for(let f of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,f))continue;let X=w[f],U=Y[f];if(X===null||X===void 0)continue;if(Array.isArray(X)||Array.isArray(U))if(A==="replace")Y[f]=X;else Y[f]=CY(U,X);else if(d(X)&&d(U))Y[f]=e8(U,X,A);else Y[f]=X}return Y}function cY($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!cY($[A],w[A]))return!1;return!0}if(d($)&&d(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!cY($[f],w[f]))return!1}return!0}return!1}function d($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function yY($,w,A="replace"){if(!xE($))return null;try{let Y=await import($),f=Y.default||Y;if(typeof f!=="object"||f===null||Array.isArray(f))return null;try{return e8(w,f,A)}catch{return null}}catch{return null}}function N9($,w,A=!1){if(!$)return w;let Y=$.toUpperCase().replace(/-/g,"_"),f={...w};function X(U,W=[]){let J={...U};for(let[B,E]of Object.entries(U)){let j=[...W,B],T=(G)=>G.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${Y}_${j.map(T).join("_")}`,H=`${Y}_${j.map((G)=>G.toUpperCase()).join("_")}`;if(A)V$.info(`Checking environment variable ${F} for config ${$}.${j.join(".")}`);if(typeof E==="object"&&E!==null&&!Array.isArray(E))J[B]=X(E,j);else{let G=m1.env[F]||m1.env[H];if(G!==void 0){if(A)V$.info(`Using environment variable ${G?F:H} for config ${$}.${j.join(".")}`);if(typeof E==="number")J[B]=Number(G);else if(typeof E==="boolean")J[B]=G.toLowerCase()==="true";else if(Array.isArray(E))try{let K=JSON.parse(G);if(Array.isArray(K))J[B]=K;else J[B]=G.split(",").map((R)=>R.trim())}catch{J[B]=G.split(",").map((K)=>K.trim())}else J[B]=G}}}return J}return X(f)}async function y9({name:$="",alias:w,cwd:A,configDir:Y,defaultConfig:f,verbose:X=!1,checkEnv:U=!0,arrayStrategy:W="replace"}){let J=U&&typeof f==="object"&&f!==null&&!Array.isArray(f)?N9($,f,X):f,B=A||m1.cwd(),E=[".ts",".js",".mjs",".cjs",".json"];if(X)V$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${B}`);let j=[$,`.${$}`].filter(Boolean),T=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],H=w?[`${w}.config`,`.${w}.config`]:[],G=Array.from(new Set([B,P$(B,"config"),P$(B,".config"),Y?P$(B,Y):void 0].filter(Boolean)));for(let K of G){if(X)V$.info(`Searching for configuration in: ${K}`);let R=[P$(B,"config"),P$(B,".config")].concat(Y?[P$(B,Y)]:[]).includes(K)?[...j,...T,...F,...H]:[...T,...j,...H,...F];for(let h of R)for(let N of E){let M=P$(K,`${h}${N}`),C=await yY(M,J,W);if(C!==null){if(X)V$.success(`Configuration loaded from: ${M}`);return C}}}if($){let K=P$(E8(),".config",$),R=["config",`${$}.config`];if(w)R.push(`${w}.config`);if(X)V$.info(`Checking user config directory: ${K}`);for(let h of R)for(let N of E){let M=P$(K,`${h}${N}`),C=await yY(M,J,W);if(C!==null){if(X)V$.success(`Configuration loaded from user config directory: ${M}`);return C}}}if($){let K=P$(E8(),".config"),R=[`.${$}.config`];if(w)R.push(`.${w}.config`);if(X)V$.info(`Checking user config directory for dotfile configs: ${K}`);for(let h of R)for(let N of E){let M=P$(K,`${h}${N}`),C=await yY(M,J,W);if(C!==null){if(X)V$.success(`Configuration loaded from user config directory dotfile: ${M}`);return C}}}if($){let K=E8(),R=[`.${$}.config`,`.${$}`];if(w)R.push(`.${w}.config`),R.push(`.${w}`);if(X)V$.info(`Checking user home directory for dotfile configs: ${K}`);for(let h of R)for(let N of E){let M=P$(K,`${h}${N}`),C=await yY(M,J,W);if(C!==null){if(X)V$.success(`Configuration loaded from user home directory: ${M}`);return C}}}try{let K=P$(B,"package.json");if(xE(K)){let R=await import(K),h=R[$];if(!h&&w){if(h=R[w],h&&X)V$.success(`Using alias "${w}" configuration from package.json`)}if(h&&typeof h==="object"&&!Array.isArray(h))try{if(X)V$.success(`Configuration loaded from package.json: ${h===R[$]?$:w}`);return e8(J,h,W)}catch(N){if(X)V$.warn("Failed to merge package.json config:",N)}}}catch(K){if(X)V$.warn("Failed to load package.json:",K)}if(X)V$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return J}function M9($,w={}){let A=DY.cwd();while(A.includes("storage"))A=ZB(A,"..");let Y=ZB(A,$||"");if(w?.relative)return LH(DY.cwd(),Y);return Y}async function I9(){try{let $=await y9({name:"clarity",alias:"logging",defaultConfig:OY,cwd:DY.cwd()});return{...OY,...$||{}}}catch{return OY}}function z$(){if(b0.env.NODE_ENV==="test"||b0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function C9(){if(b0.env.NODE_ENV==="test"||b0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof b0<"u"){let $=b0.type;if($==="renderer"||$==="worker")return!1;return!!(b0.versions&&(b0.versions.node||b0.versions.bun))}return!1}class nE{async format($){let w=await C9(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:A1.pid,hostname:w(),environment:A1.env.NODE_ENV||"development",platform:A1.platform,version:A1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:A1.env.NODE_ENV||A1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class uY{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={...i8},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new nE,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??v.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...VY,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...VY};return{...VY,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:i8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!z$()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let Y,f=0,X=3,U=1000;while(f<X)try{try{try{await nH(this.config.logDirectory,lB.F_OK|lB.W_OK)}catch(J){if(J instanceof Error&&"code"in J)if(J.code==="ENOENT")await vH(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:Z0.from($);try{if(!TY(this.currentLogFile))await K8(this.currentLogFile,"",{mode:420});if(Y=dB(this.currentLogFile,"a",420),uH(Y,W,{flag:"a"}),mB(Y),Y!==void 0)H8(Y),Y=void 0;if((await $1(this.currentLogFile)).size===0){if(await K8(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 B=J;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(f<X-1){let E=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${f+1}/${X}:`,E);let j=U*2**f;await new Promise((T)=>setTimeout(T,j)),f++;continue}}if(B?.code&&["ENOSPC","EDQUOT"].includes(B.code))throw Error(`Disk quota exceeded or no space left on device: ${B.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",B),B}finally{if(Y!==void 0)try{H8(Y)}catch(J){console.error("Debug: [writeToFile] Error closing file descriptor:",J)}}}catch(W){if(f===X-1){let B=W,E=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",E),W}f++;let J=U*2**(f-1);await new Promise((B)=>setTimeout(B,J))}})();this.pendingOperations.push(w);let A=this.pendingOperations.length-1;try{await w}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}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(z$())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,A=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),A=this.generateKey();this.currentKeyId=w,this.keys.set(w,A),this.encryptionKeys.set(w,{key:A,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,U],[,W])=>W.createdAt.getTime()-U.createdAt.getTime()),f=typeof $.maxKeys==="number"?$.maxKeys:1,X=Math.max(1,f);if(Y.length>X)for(let[U]of Y.slice(X))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return G8(16).toString("hex")}generateKey(){return G8(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(),A=G8(16),Y=iH("aes-256-gcm",w,A),f=Z0.isBuffer($)?$:Z0.from($,"utf8"),X=Y.update(f),U=Y.final(),W=X.length+U.length,J=Y.getAuthTag(),B=Z0.allocUnsafe(16+W+16);return A.copy(B,0),X.copy(B,16),U.copy(B,16+X.length),J.copy(B,16+W),{encrypted:B,iv:A}}async compressData($){return new Promise((w,A)=>{let Y=tB(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w(Z0.from(Z0.concat(f)))),Y.on("error",A),Y.write($),Y.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(z$())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 A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await FY(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await $1(A).catch(()=>null))try{if(await gB(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await zY(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await K8(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await $1(A).catch(()=>null))await gB(A,X)}if(this.currentLogFile=Y,w.maxFiles){let f=(await FY(this.config.logDirectory)).filter((X)=>X.startsWith(this.name)).sort((X,U)=>U.localeCompare(X));for(let X of f.slice(w.maxFiles))await zY(w1(this.config.logDirectory,X))}}}async compressLogFile($,w){let A=vB($),Y=cH(w),f=tB();await lH(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}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()})),TY(this.currentLogFile))try{let $=dB(this.currentLogFile,"r+");mB($),H8($)}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(!z$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await FY(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await zY(w1(this.config.logDirectory,w))}catch(A){console.error(`Failed to delete temp file ${w}:`,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()?Z.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||z$())return!1;let $=typeof v.env.NO_COLOR<"u",w=v.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof v.stderr<"u"&&v.stderr.isTTY||typeof v.stdout<"u"&&v.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=v.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${Z.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,Y,f)=>{let X=Z.underline(Z.blue(Y)),U=this.toAbsoluteFilePath(f);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(U)}`,J="\x1B]8;;",B="\x1B\\";return`\x1B]8;;${W}\x1B\\${X}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${f}\x1B\\${X}\x1B]8;;\x1B\\`;return X}),w=w.replace(/`([^`]+)`/g,(A,Y)=>Z.bgGray(Y)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,Y)=>Z.bold(Y)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,Y)=>Z.italic(Y)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,Y)=>Z.italic(Y)),w=w.replace(/~([^~]+)~/g,(A,Y)=>Z.strikethrough(Y)),w}supportsHyperlinks(){if(z$())return!1;let $=v.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 A=v.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(mH(w)||w.startsWith("./")||w.startsWith("../"))w=dH(w);else return null;return TY(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);let{consoleText:J,fileText:B}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let j=this.options.showIcons===!1?"":sE[$],T=this.options.showTags!==!1&&this.name?Z.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:Z.gray(J),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:Z.green(J),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.error(F),W){let H=W.split(`
76
+ `);for(let G of H)if(G.trim()&&!G.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:Z.gray(` ${G}`),level:$,showTimestamp:!1}))}break}}else if(!z$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}if(!this.shouldLog($))return;let E=`${X} ${this.environment}.${$.toUpperCase()}: ${B}
77
+ `;if(W)E+=`${W}
78
+ `;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress($,w=""){let A={update:(f,X)=>{},finish:(f)=>{},interrupt:(f,X)=>{}};if(!this.enabled)return A;let Y=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!z$()&&v.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(f,X)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,f),this.activeProgressBar.total),X!==void 0)this.activeProgressBar.message=X;if(this.shouldStyleConsole()&&!z$()&&v.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(f)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,f)},interrupt:(f,X="info")=>{if(!z$()&&v.stdout.isTTY)v.stdout.write(`
79
+ `);if(this[X==="warning"?"warn":X](f),this.activeProgressBar&&this.shouldStyleConsole()&&!z$()&&v.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?Z.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":Z.blue(""),tag:A,message:`${Z.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),J=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)J+=` ${JSON.stringify(A)}`;if(J+=`
80
+ `,J=J.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let B=this.options.showTags!==!1&&this.name?Z.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":Z.green(""),tag:B,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!z$())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}:${$}`,A=new uY(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(A),A}createReadStream(){if(z$())throw Error("createReadStream is not supported in browser environments");if(!TY(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return vB(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 A=this.keys.get(this.currentKeyId);try{let Y=Z0.isBuffer($)?$:Z0.from($,"base64"),f=Y.subarray(0,16),X=Y.subarray(Y.length-16),U=Y.subarray(16,Y.length-16),W=bH("aes-256-gcm",A,f);W.setAuthTag(X);let J=W.update(U),B=W.final(),E=J.length+B.length,j=Z0.allocUnsafe(E);return J.copy(j,0),B.copy(j,J.length),j.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return z$()}isServerMode(){return!z$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w),{consoleText:f,fileText:X}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=f.split(`
81
+ `),J=Math.max(...W.map((T)=>T.length))+2,B=`┌${"─".repeat(J)}┐`,E=`└${"─".repeat(J)}┘`,j=W.map((T)=>{return this.formatConsoleMessage({timestamp:A,message:Z.cyan(T),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:Z.cyan(B),showTimestamp:!1})),j.forEach((T)=>console.error(T)),console.error(this.formatConsoleMessage({timestamp:A,message:Z.cyan(E),showTimestamp:!1}))}else if(!z$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${X}`);let U=`${Y} ${this.environment}.INFO: [BOX] ${X}
82
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(z$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${Z.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();v.stdin.removeListener("data",A);try{if(typeof v.stdin.setRawMode==="function")v.stdin.setRawMode(!1)}catch{}v.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof v.stdin.setRawMode==="function")v.stdin.setRawMode(!0)}catch{}v.stdin.resume(),v.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,W=0;if(A=$.replace(U,(J,B)=>{if(B==="%")return"%";if(W>=w.length)return J;let E=w[W++];switch(B){case"s":return String(E);case"d":case"i":return Number(E).toString();case"j":case"o":return JSON.stringify(E,null,2);default:return J}}),W<w.length)A+=` ${w.slice(W).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`}let{consoleText:Y,fileText:f}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let U=this.options.showTags!==!1&&this.name?Z.gray(this.formatTag(this.name)):"",W=this.options.showIcons===!1?"":`${Z.blue("◐")} `;console.error(`${W}${U} ${Z.cyan(Y)}`)}let X=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${f}
83
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(X)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!v.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=Z.green("━".repeat(Y)),U=Z.gray("━".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=this.options.showIcons===!1?"":w||A===100?Z.green("✓"):Z.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${Z.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=v.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,v.stdout.write($.lastRenderedLine),w)v.stdout.write(`
84
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||z$()||!v.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(z$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await FY(this.config.logDirectory),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let f=w1(this.config.logDirectory,Y);if($.before)try{if((await $1(f)).mtime>=$.before)continue}catch(X){console.error(`Failed to get stats for file ${f}:`,X);continue}A.push(f)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await zY(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function vE($,w={}){let{maxRetries:A=3,retryDelay:Y=1000,isRetryable:f=()=>!0,fallback:X}=w,U=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(J){if(U=J instanceof Error?J:Error(String(J)),W===A||!f(U))break;if(Y>0)await new Promise((B)=>setTimeout(B,Y))}if(X!==void 0)return X;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function mE($){return $ instanceof r$}function S9($){return $ instanceof nY}function L9($){if(mE($))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 aY{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,A={}){let{prefix:Y,useCamelCase:f=!0,useBackwardCompatibility:X=!0,customParsers:U={},verbose:W=!1,trackPerformance:J=!0}=A,B=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let E=Y||this.generateEnvPrefix($),j={...w};return this.processObject(j,[],E,{useCamelCase:f,useBackwardCompatibility:X,customParsers:U,verbose:W,configName:$}),{config:j,source:{type:"environment",priority:50,timestamp:new Date}}};if(J)return t1.track("applyEnvironmentVariables",B,{configName:$});return B()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=U.map((E)=>this.formatEnvKey(E,Y.useCamelCase)),J=`${A}_${W.join("_")}`,B=Y.useBackwardCompatibility?`${A}_${U.map((E)=>E.toUpperCase()).join("_")}`:null;if(Y.verbose);if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.processObject(X,U,A,Y);else{let E=GY.env[J]||(B?GY.env[B]:void 0);if(E!==void 0){if(Y.verbose){let j=GY.env[J]?J:B}try{$[f]=this.parseEnvironmentValue(E,typeof X,J,Y.customParsers,Y.configName)}catch(j){if(j instanceof vY)throw j;throw Xw.envVar(J,E,typeof X,Y.configName)}}}}}parseEnvironmentValue($,w,A,Y,f){for(let[X,U]of Object.entries(Y))try{return U($)}catch{continue}for(let X of this.defaultParsers)if(X.canParse($,w))try{return X.parse($)}catch{throw Xw.envVar(A,$,`${w} (via ${X.name} parser)`,f)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[Y,f]of Object.entries(GY.env))if(Y.startsWith(A)&&f!==void 0)w[Y]=f;return w}validateEnvironmentVariable($,w,A){let Y=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))Y.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(f){Y.push(`Cannot parse value "${w}" as ${A}: ${f}`)}return{isValid:Y.length===0,errors:Y}}generateEnvVarDocs($,w,A={}){let{prefix:Y,format:f="text"}=A,X=Y||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],X,U),f){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=`${A}_${U.map((J)=>this.formatEnvKey(J,!0)).join("_")}`;if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.extractEnvVarInfo(X,U,A,Y);else Y.push({key:W,type:Array.isArray(X)?"array":typeof X,description:`Configuration for ${U.join(".")}`,example:this.generateExample(X)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
85
+
86
+ `;for(let Y of $)A+=`${Y.key}
87
+ `,A+=` Type: ${Y.type}
88
+ `,A+=` Description: ${Y.description}
89
+ `,A+=` Example: ${Y.example}
86
90
 
87
91
  `;return A}formatAsMarkdown($,w){let A=`# Environment Variables for ${w}
88
92
 
89
93
  `;A+=`| Variable | Type | Description | Example |
90
94
  `,A+=`|----------|------|-------------|----------|
91
- `;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
92
- `;return A}}function MT($,w){let A=Yj("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function $j($,w,A={}){return wj($,w,A,new WeakMap)}function wj($,w,A,J){let{arrayMergeMode:Y="replace",skipNullish:U=!1,customMerger:Z}=A;if(w===null||w===void 0)return U?$:w;if(Z){let B=Z($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return Aj($,w,Y,J);if(!w0(w)||!w0($))return w;return yT($,w,A,J)}function Aj($,w,A,J){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return IT($,w);case"smart":return CT($,w,J);default:return w}return w}function IT($,w){let A=[...w];for(let J of $)if(!A.some((Y)=>z8(Y,J)))A.push(J);return A}function CT($,w,A){if(w.length===0)return $;if($.length===0)return w;if(w0(w[0])&&w0($[0]))return LT($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}function LT($,w,A){let J=[...w];for(let Y of $){if(!w0(Y)){J.push(Y);continue}let U=["id","name","key","path","type"],Z=!1;for(let B of U)if(B in Y){if(J.find((W)=>w0(W)&&(B in W)&&W[B]===Y[B])){Z=!0;break}}if(!Z)J.push(Y)}return J}function yT($,w,A,J){let Y=w;if(w0(Y)&&J.has(Y))return J.get(Y);let U={...$};if(w0(Y))J.set(Y,U);for(let Z in Y){if(!Object.prototype.hasOwnProperty.call(Y,Z))continue;let B=Y[Z],W=U[Z];if(A.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){U[Z]=B;continue}if(w0(B)&&w0(W))U[Z]=wj(W,B,A,J);else if(Array.isArray(B)||Array.isArray(W))U[Z]=Aj(W,B,A.arrayMergeMode||"smart",J);else U[Z]=B}return U}function X8($,w,A="replace"){return $j($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function z8($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!z8($[A],w[A]))return!1;return!0}if(w0($)&&w0(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!z8($[Y],w[Y]))return!1}return!0}return!1}function w0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class xJ{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:Y=!0,cacheTtl:U,trackPerformance:Z=!0,verbose:B=!1}=A;if(Y){let E=$1.getWithFileCheck("file",$);if(E){if(B)console.log(`Configuration loaded from cache: ${$}`);return E}}let W=async()=>{if(!YJ($))return null;try{let E=`?t=${Date.now()}`,j=await import($+E),F=j.default||j,f="default"in j,z=Object.keys(j).length>0;if(!f&&!z)throw new x1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new x1($,Error("Configuration must export a valid object"),"unknown");let H={config:X8(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(Y)$1.setWithFileCheck("file",H,$,U);return H}catch(E){throw E instanceof Error?ww.configLoad($,E):ww.configLoad($,Error(String(E)))}};if(Z)return i1.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let Y=await this.loadFromPath(J,w,A);if(Y)return Y}catch(Y){if(Y instanceof Error&&Y.name==="ConfigLoadError")throw Y;if(A.verbose)console.warn(`Failed to load config from ${J}:`,Y)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),Y=[];for(let U of J)for(let Z of this.extensions)Y.push(eU(w,`${U}${Z}`));return Y}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(A.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)A.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return A.filter(Boolean)}checkFileAccess($){return oE(async()=>{return YJ($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!YJ($))return J;if(w||A){let Y=this.generateNamePatterns(w||"",A);for(let U of Y)for(let Z of this.extensions){let B=eU($,`${U}${Z}`);if(await this.checkFileAccess(B))J.push(B)}}else try{let{readdirSync:Y}=await import("fs"),U=Y($);for(let Z of U)if(this.looksLikeConfigFile(Z)){let B=eU($,Z);if(await this.checkFileAccess(B))J.push(B)}}catch{return[]}return J}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(!YJ($))return w.push("Configuration file does not exist"),w;let A=await import($),J=A.default||A;if(J===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof J!=="object"||J===null)w.push("Configuration must be an object");else if(Array.isArray(J))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:Y}=await import("fs"),U=Y($,"utf8");JSON.parse(U)}catch(Y){w.push(`Invalid JSON syntax: ${Y}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(J)=>{try{let Y=await this.loadFromPath(J,{},w);if(Y)A.set(J,Y.config)}catch(Y){if(w.verbose)console.warn(`Failed to preload ${J}:`,Y)}})),A}}class _8{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:Y=!0,validateTypes:U=!0,customRules:Z=[],trackPerformance:B=!0,verbose:W=!1}=A,E=async()=>{let j=[],F=[],f={stopOnFirstError:J,validateRequired:Y,validateTypes:U,customRules:Z,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,f);else if(Array.isArray(w))return this.validateWithRules($,[...w,...Z],f);else return this.validateWithJSONSchema($,w,f)}catch(z){return j.push({path:"",message:`Validation failed: ${z}`,rule:"system"}),{isValid:!1,errors:j,warnings:F}}};if(B)return await i1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!c2(w))throw new P1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),Y=J.default||J;if(Array.isArray(Y))return this.validateWithRules($,Y,A);else return this.validateWithJSONSchema($,Y,A)}catch(J){throw new P1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],Y=[];return this.validateObjectAgainstSchema($,w,"",J,Y,A),{isValid:J.length===0,errors:J,warnings:Y}}validateObjectAgainstSchema($,w,A,J,Y,U){if(U.validateTypes&&w.type){let Z=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(Z)){if(J.push({path:A,message:`Expected type ${B.join(" or ")}, got ${Z}`,expected:B.join(" or "),actual:Z,rule:"type"}),U.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(J.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),U.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)J.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)J.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))J.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)J.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)J.push({path:A,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let Z=0;Z<$.length;Z++){let B=A?`${A}[${Z}]`:`[${Z}]`;if(this.validateObjectAgainstSchema($[Z],w.items,B,J,Y,U),U.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let Z=$;if(U.validateRequired&&w.required){for(let B of w.required)if(!(B in Z)){if(J.push({path:A?`${A}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),U.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in Z){let E=A?`${A}.${B}`:B;if(this.validateObjectAgainstSchema(Z[B],W,E,J,Y,U),U.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(Z))if(!B.has(W))Y.push({path:A?`${A}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],Y=[];for(let U of w)try{let Z=this.getValueByPath($,U.path),B=this.validateWithRule(Z,U,U.path);if(J.push(...B),A.stopOnFirstError&&J.length>0)break}catch(Z){J.push({path:U.path,message:`Rule validation failed: ${Z}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:Y}}validateWithRule($,w,A){let J=[];if(w.required&&($===void 0||$===null))return J.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),J;if($===void 0||$===null)return J;if(w.type){let Y=Array.isArray($)?"array":typeof $;if(Y!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${Y}`,expected:w.type,actual:Y,rule:"type"})}if(w.min!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:Y,rule:"min"})}if(w.max!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:Y,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))J.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))J.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let Y=w.validator($);if(Y)J.push({path:A,message:w.message||Y,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let Y of A)if(J&&typeof J==="object"&&Y in J)J=J[Y];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,Y,U,Z]=J;w.push({path:Y,required:!U,type:this.mapTypeScriptType(Z)})}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:Ej},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class D8{fileLoader=new xJ;envProcessor=new kJ;validator=new _8;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:Y,validate:U,...Z}=$;try{if(A?.enabled){let W=this.checkCache(Z.name||"",Z);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(Z,!0,A)}catch(W){let E=Z.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(E)throw W;B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`No configuration file found for "${Z.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let j=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),F=!j&&(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(E&&(f||j))throw W;if(F&&(!E||!f))B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(Y||U)await this.validateConfiguration(B.config,Y,U,Z.name);if(A?.enabled&&B)this.cacheResult(Z.name||"",B,A,Z);if(J?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:Z.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(W);if(J.slowThreshold&&W.duration>J.slowThreshold)z0.warn(`Slow configuration loading detected: ${W.duration}ms for ${Z.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw z0.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:Y,cwd:U,configDir:Z,defaultConfig:B,checkEnv:W=!0,arrayStrategy:E="replace",verbose:j=!1}=$,F=U||Gw.cwd(),f=[],z=await this.loadLocalConfiguration(J,Y,F,Z,B,E,j,W,A);if(z)return f.push(...this.getLocalSearchPaths(J,Y,F,Z)),this.finalizeResult(z,f,W,J,j);let H=await this.loadHomeConfiguration(J,Y,B,E,j,W);if(H)return f.push(...this.getHomeSearchPaths(J,Y)),this.finalizeResult(H,f,W,J,j);let T=await this.loadPackageJsonConfiguration(J,Y,F,B,E,j,W);if(T)return f.push(k$(F,"package.json")),this.finalizeResult(T,f,W,J,j);if(f.push(...this.getAllSearchPaths(J,Y,F,Z)),w)throw ww.configNotFound(J,f,Y);return{...await this.applyEnvironmentVariables(J,B,W,j),warnings:[`No configuration file found for "${J}"${Y?` or alias "${Y}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,Y,U,Z,B,W){let E=B?D1($,Y,Z):Y,j=this.getLocalDirectories(A,J);for(let F of j){if(Z)z0.info(`Searching for configuration in: ${F}`);let f=this.fileLoader.generateConfigPaths($,F,w),z=await this.fileLoader.tryLoadFromPaths(f,E,{arrayStrategy:U,verbose:Z,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(z){if(Z)z0.success(`Configuration loaded from: ${z.source.path}`);return z}}return null}async loadHomeConfiguration($,w,A,J,Y,U){if(!$)return null;let Z=U?D1($,A,Y):A,B=[k$(nw(),".config",$),k$(nw(),".config"),nw()];for(let W of B){if(Y)z0.info(`Checking home directory: ${W}`);let E=this.fileLoader.generateConfigPaths($,W,w),j=await this.fileLoader.tryLoadFromPaths(E,Z,{arrayStrategy:J,verbose:Y});if(j){if(Y)z0.success(`Configuration loaded from home directory: ${j.source.path}`);return j}}return null}async loadPackageJsonConfiguration($,w,A,J,Y,U,Z){let B=Z?D1($,J,U):J;try{let W=k$(A,"package.json");if(!j8(W))return null;let E=await import(W),j=E[$],F=$;if(!j&&w)j=E[w],F=w;if(j&&typeof j==="object"&&!Array.isArray(j)){if(U)z0.success(`Configuration loaded from package.json: ${F}`);return{config:X8(B,j,Y),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(U)z0.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,A,J){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:D1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,Y){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let Y=[];if(A){let U=A($);if(U)Y.push(...U)}if(w){let U=await this.validator.validateConfiguration($,w);if(!U.isValid)Y.push(...U.errors.map((Z)=>Z.path?`${Z.path}: ${Z.message}`:Z.message))}if(Y.length>0)throw ww.configValidation(J||"unknown",Y,J)}checkCache($,w){let A=this.generateCacheKey($,w);return $1.get(A)||null}cacheResult($,w,A,J){let Y=this.generateCacheKey($,J);$1.set(Y,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias)A.push(`alias:${w.alias}`);if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,k$($,"config"),k$($,".config"),w?k$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let Y=[];return Y.push(...this.getLocalSearchPaths($,w,A,J)),Y.push(...this.getHomeSearchPaths($,w)),Y.push(k$(A,"package.json")),Y}getLocalSearchPaths($,w,A,J){let Y=this.getLocalDirectories(A,J),U=[];for(let Z of Y)U.push(...this.fileLoader.generateConfigPaths($,Z,w));return U}getHomeSearchPaths($,w){if(!$)return[];let A=[k$(nw(),".config",$),k$(nw(),".config"),nw()],J=[];for(let Y of A)J.push(...this.fileLoader.generateConfigPaths($,Y,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function yE($){let w=!($.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 w||A}async function VT($){return i0.loadConfig({...$,__strictErrorHandling:!0})}async function Jj($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let J;if(A)J=await i0.loadConfig($);else J=await i0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return J?.config??w}catch(J){let Y=J instanceof Error?J.name:"UnknownError",U=J instanceof Error?J.message:String(J);if(!(Y==="ConfigNotFoundError"||Y==="ConfigLoadError"||Y==="ConfigValidationError"||U.includes("config"))&&$.verbose)z0.warn("Unexpected error loading config, using defaults:",[J instanceof Error?J:Error(String(J))]);let Z=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await i0.applyEnvironmentVariables(Z.name||"",w,!0,Z.verbose||!1))?.config??w;return w}}async function ST($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await i0.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(A){if(A instanceof Error&&(A.name==="ConfigNotFoundError"||A.name==="ConfigLoadError"&&yE(A)))return(await i0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await i0.loadConfig({...$,cwd:$.cwd||Gw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&yE(w)))return(await i0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function OT($,w,A="replace"){let J=new xJ;try{let Y=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return Y?Y.config:null}catch{return null}}function D1($,w,A=!1){let J=new kJ,Y=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function U(Z,B=[]){let W={...Z};for(let[E,j]of Object.entries(Z)){let F=[...B,E],f=[`${Y}_${F.join("_").toUpperCase()}`,`${Y}_${F.map((T)=>T.toUpperCase()).join("")}`,`${Y}_${F.map((T)=>T.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],z,H;for(let T of f)if(z=Gw.env[T],z!==void 0){H=T;break}if(z!==void 0&&H)if(typeof j==="boolean")W[E]=["true","1","yes"].includes(z.toLowerCase());else if(typeof j==="number"){let T=Number(z);if(!Number.isNaN(T))W[E]=T}else if(Array.isArray(j))try{W[E]=JSON.parse(z)}catch{W[E]=z.split(",").map((T)=>T.trim())}else W[E]=z;else if(j&&typeof j==="object"&&!Array.isArray(j))W[E]=U(j,F)}return W}return U(w)}function XT($){let w=k$(Gw.cwd(),$.configDir),A=k$(Gw.cwd(),$.generatedDir),J=k$(A,"config-types.ts");if(!j8(JE(J)))q2(JE(J),{recursive:!0,mode:511});let Y=j8(w)?K2(w).map((Z)=>Z.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],U=`// Generated by bunfig v${UH}
93
- export type ConfigNames = ${Y.length?`'${Y.join("' | '")}'`:"string"}
94
- `;h2(J,U,{mode:438})}function _T($){let w=null,A=null,J=()=>{if(!A)A=Jj($).then((U)=>{return w=U,U},(U)=>{let Z="defaultConfig"in $?$.defaultConfig:{};if(w=Z,"verbose"in $&&$.verbose)z0.warn("Config loading failed, using defaults:",[U instanceof Error?U:Error(String(U))]);return Z});return A},Y="defaultConfig"in $?$.defaultConfig:{};return w=Y,J(),new Proxy({},{get(U,Z){if(w)return w[Z];let B=Y[Z];return J(),B},has(U,Z){return Z in(w||Y)},ownKeys(){return Object.keys(w||Y)},getOwnPropertyDescriptor(U,Z){return Object.getOwnPropertyDescriptor(w||Y,Z)},set(U,Z,B){if(!w)w={...Y};return w[Z]=B,!0}})}function DT($){let w=KE(n2.cwd(),$?.configDir||"./config");function A(){if(!v2(w))return[];let Y=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),U=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],Z=m2(w).filter((W)=>Y.has($8(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:E}of Z){let j=$8(E).toLowerCase(),F=B.get(W);if(!F){B.set(W,E);continue}let f=$8(F).toLowerCase();if(U.indexOf(j)<U.indexOf(f))B.set(W,E)}return Array.from(B.entries()).map(([W,E])=>({base:W,file:E})).sort((W,E)=>W.base.localeCompare(E.base))}function J(){let Y=A(),U=Y.map((W)=>W.base),Z=U.length?U.map((W)=>`'${W}'`).join(" | "):"string",B=Y.length?`{
95
- ${Y.map((W)=>{let E=KE(w,W.file).replace(/\\/g,"/");return` '${W.base}': typeof import('${E}').default`}).join(`,
95
+ `;for(let Y of $)A+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
96
+ `;return A}}function O9($,w){let A=pE("process");if(typeof A>"u"||!A.env)return w;let Y=A.env[$];return Y!==void 0?Y:w}function dE($,w,A={}){return lE($,w,A,new WeakMap)}function lE($,w,A,Y){let{arrayMergeMode:f="replace",skipNullish:X=!1,customMerger:U}=A;if(w===null||w===void 0)return X?$:w;if(U){let W=U($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return gE($,w,f,Y);if(!X0(w)||!X0($))return w;return D9($,w,A,Y)}function gE($,w,A,Y){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return V9($,w);case"smart":return Q9($,w,Y);default:return w}return w}function V9($,w){let A=[...w];for(let Y of $)if(!A.some((f)=>x8(f,Y)))A.push(Y);return A}function Q9($,w,A){if(w.length===0)return $;if($.length===0)return w;if(X0(w[0])&&X0($[0]))return _9($,w,A);if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}function _9($,w,A){let Y=[...w];for(let f of $){if(!X0(f)){Y.push(f);continue}let X=["id","name","key","path","type"],U=!1;for(let W of X)if(W in f){if(Y.find((J)=>X0(J)&&(W in J)&&J[W]===f[W])){U=!0;break}}if(!U)Y.push(f)}return Y}function D9($,w,A,Y){let f=w;if(X0(f)&&Y.has(f))return Y.get(f);let X={...$};if(X0(f))Y.set(f,X);for(let U in f){if(!Object.prototype.hasOwnProperty.call(f,U))continue;let W=f[U],J=X[U];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){X[U]=W;continue}if(X0(W)&&X0(J))X[U]=lE(J,W,A,Y);else if(Array.isArray(W)||Array.isArray(J))X[U]=gE(J,W,A.arrayMergeMode||"smart",Y);else X[U]=W}return X}function $U($,w,A="replace"){return dE($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function x8($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!x8($[A],w[A]))return!1;return!0}if(X0($)&&X0(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!x8($[f],w[f]))return!1}return!0}return!1}function X0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class sY{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:Y="replace",useCache:f=!0,cacheTtl:X,trackPerformance:U=!0,verbose:W=!1}=A;if(f){let B=J1.getWithFileCheck("file",$);if(B){if(W)console.log(`Configuration loaded from cache: ${$}`);return B}}let J=async()=>{if(!HY($))return null;try{let B=`?t=${Date.now()}`,E=await import($+B),j=E.default||E,T="default"in E,F=Object.keys(E).length>0;if(!T&&!F)throw new d1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof j!=="object"||j===null||Array.isArray(j))throw new d1($,Error("Configuration must export a valid object"),"unknown");let H={config:$U(w,j,Y),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(f)J1.setWithFileCheck("file",H,$,X);return H}catch(B){throw B instanceof Error?Xw.configLoad($,B):Xw.configLoad($,Error(String(B)))}};if(U)return t1.track("loadFromPath",J,{path:$});return J()}async tryLoadFromPaths($,w,A={}){for(let Y of $)try{let f=await this.loadFromPath(Y,w,A);if(f)return f}catch(f){if(f instanceof Error&&f.name==="ConfigLoadError")throw f;if(A.verbose)console.warn(`Failed to load config from ${Y}:`,f)}return null}generateConfigPaths($,w,A){let Y=this.generateNamePatterns($,A),f=[];for(let X of Y)for(let U of this.extensions)f.push(R8(w,`${X}${U}`));return f}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(A.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)A.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return A.filter(Boolean)}checkFileAccess($){return vE(async()=>{return HY($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let Y=[];if(!HY($))return Y;if(w||A){let f=this.generateNamePatterns(w||"",A);for(let X of f)for(let U of this.extensions){let W=R8($,`${X}${U}`);if(await this.checkFileAccess(W))Y.push(W)}}else try{let{readdirSync:f}=await import("fs"),X=f($);for(let U of X)if(this.looksLikeConfigFile(U)){let W=R8($,U);if(await this.checkFileAccess(W))Y.push(W)}}catch{return[]}return Y}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(!HY($))return w.push("Configuration file does not exist"),w;let A=await import($),Y=A.default||A;if(Y===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)w.push("Configuration must be an object");else if(Array.isArray(Y))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:f}=await import("fs"),X=f($,"utf8");JSON.parse(X)}catch(f){w.push(`Invalid JSON syntax: ${f}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(Y)=>{try{let f=await this.loadFromPath(Y,{},w);if(f)A.set(Y,f.config)}catch(f){if(w.verbose)console.warn(`Failed to preload ${Y}:`,f)}})),A}}class wU{async validateConfiguration($,w,A={}){let{stopOnFirstError:Y=!1,validateRequired:f=!0,validateTypes:X=!0,customRules:U=[],trackPerformance:W=!0,verbose:J=!1}=A,B=async()=>{let E=[],j=[],T={stopOnFirstError:Y,validateRequired:f,validateTypes:X,customRules:U,trackPerformance:W,verbose:J};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,T);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],T);else return this.validateWithJSONSchema($,w,T)}catch(F){return E.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:E,warnings:j}}};if(W)return await t1.track("validateConfiguration",B);return B()}async validateWithSchemaFile($,w,A){try{if(!gH(w))throw new l1(w,[{path:"",message:"Schema file does not exist"}]);let Y=await import(w),f=Y.default||Y;if(Array.isArray(f))return this.validateWithRules($,f,A);else return this.validateWithJSONSchema($,f,A)}catch(Y){throw new l1(w,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema($,w,A){let Y=[],f=[];return this.validateObjectAgainstSchema($,w,"",Y,f,A),{isValid:Y.length===0,errors:Y,warnings:f}}validateObjectAgainstSchema($,w,A,Y,f,X){if(X.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(U)){if(Y.push({path:A,message:`Expected type ${W.join(" or ")}, got ${U}`,expected:W.join(" or "),actual:U,rule:"type"}),X.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(Y.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),X.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)Y.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)Y.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))Y.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)Y.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)Y.push({path:A,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 W=A?`${A}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,W,Y,f,X),X.stopOnFirstError&&Y.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(X.validateRequired&&w.required){for(let W of w.required)if(!(W in U)){if(Y.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),X.stopOnFirstError)return}}if(w.properties){for(let[W,J]of Object.entries(w.properties))if(W in U){let B=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(U[W],J,B,Y,f,X),X.stopOnFirstError&&Y.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let J of Object.keys(U))if(!W.has(J))f.push({path:A?`${A}.${J}`:J,message:`Additional property '${J}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let Y=[],f=[];for(let X of w)try{let U=this.getValueByPath($,X.path),W=this.validateWithRule(U,X,X.path);if(Y.push(...W),A.stopOnFirstError&&Y.length>0)break}catch(U){Y.push({path:X.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:f}}validateWithRule($,w,A){let Y=[];if(w.required&&($===void 0||$===null))return Y.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),Y;if($===void 0||$===null)return Y;if(w.type){let f=Array.isArray($)?"array":typeof $;if(f!==w.type)Y.push({path:A,message:w.message||`Expected type ${w.type}, got ${f}`,expected:w.type,actual:f,rule:"type"})}if(w.min!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f<w.min)Y.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:f,rule:"min"})}if(w.max!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f>w.max)Y.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:f,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))Y.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))Y.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let f=w.validator($);if(f)Y.push({path:A,message:w.message||f,rule:"custom"})}return Y}getValueByPath($,w){if(!w)return $;let A=w.split("."),Y=$;for(let f of A)if(Y&&typeof Y==="object"&&f in Y)Y=Y[f];else return;return Y}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of A){let[,f,X,U]=Y;w.push({path:f,required:!X,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:eE},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class AU{fileLoader=new sY;envProcessor=new aY;validator=new wU;async loadConfig($){let w=Date.now(),{cache:A,performance:Y,schema:f,validate:X,...U}=$;try{if(A?.enabled){let J=this.checkCache(U.name||"",U);if(J)return J}let W;try{W=await this.loadConfigurationStrategies(U,!0,A)}catch(J){let B=U.__strictErrorHandling;if(J instanceof Error&&J.name==="ConfigNotFoundError"){if(B)throw J;W={...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(J instanceof Error&&J.name==="ConfigLoadError"){let E=J.message.includes("EACCES")||J.message.includes("EPERM")||J.message.includes("permission denied"),j=!E&&(J.message.includes("syntax")||J.message.includes("Expected")||J.message.includes("Unexpected")||J.message.includes("BuildMessage")||J.message.includes("errors building")),T=J.message.includes("Configuration must export a valid object")||J.message.includes("Configuration file is empty and exports nothing");if(B&&(T||E))throw J;if(j&&(!B||!T))W={...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(!B)W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${J.message}`]};else throw J}else W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${J instanceof Error?J.message:String(J)}`]}}if(f||X)await this.validateConfiguration(W.config,f,X,U.name);if(A?.enabled&&W)this.cacheResult(U.name||"",W,A,U);if(Y?.enabled){let J={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(J);if(Y.slowThreshold&&J.duration>Y.slowThreshold)H0.warn(`Slow configuration loading detected: ${J.duration}ms for ${U.name}`);W.metrics=J}return W}catch(W){let J=Date.now()-w;throw H0.error(`Configuration loading failed after ${J}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:Y="",alias:f,cwd:X,configDir:U,defaultConfig:W,checkEnv:J=!0,arrayStrategy:B="replace",verbose:E=!1}=$,j=X||qw.cwd(),T=[],F=await this.loadLocalConfiguration(Y,f,j,U,W,B,E,J,A);if(F)return T.push(...this.getLocalSearchPaths(Y,f,j,U)),this.finalizeResult(F,T,J,Y,E);let H=await this.loadHomeConfiguration(Y,f,W,B,E,J);if(H)return T.push(...this.getHomeSearchPaths(Y,f)),this.finalizeResult(H,T,J,Y,E);let G=await this.loadPackageJsonConfiguration(Y,f,j,W,B,E,J);if(G)return T.push(i$(j,"package.json")),this.finalizeResult(G,T,J,Y,E);if(T.push(...this.getAllSearchPaths(Y,f,j,U)),w)throw Xw.configNotFound(Y,T,f);return{...await this.applyEnvironmentVariables(Y,W,J,E),warnings:[`No configuration file found for "${Y}"${f?` or alias "${f}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,Y,f,X,U,W,J){let B=W?u1($,f,U):f,E=this.getLocalDirectories(A,Y);for(let j of E){if(U)H0.info(`Searching for configuration in: ${j}`);let T=this.fileLoader.generateConfigPaths($,j,w),F=await this.fileLoader.tryLoadFromPaths(T,B,{arrayStrategy:X,verbose:U,cacheTtl:J?.ttl,useCache:!J?.ttl||J.ttl>100});if(F){if(U)H0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,Y,f,X){if(!$)return null;let U=X?u1($,A,f):A,W=[i$(aw(),".config",$),i$(aw(),".config"),aw()];for(let J of W){if(f)H0.info(`Checking home directory: ${J}`);let B=this.fileLoader.generateConfigPaths($,J,w),E=await this.fileLoader.tryLoadFromPaths(B,U,{arrayStrategy:Y,verbose:f});if(E){if(f)H0.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration($,w,A,Y,f,X,U){let W=U?u1($,Y,X):Y;try{let J=i$(A,"package.json");if(!k8(J))return null;let B=await import(J),E=B[$],j=$;if(!E&&w)E=B[w],j=w;if(E&&typeof E==="object"&&!Array.isArray(E)){if(X)H0.success(`Configuration loaded from package.json: ${j}`);return{config:$U(W,E,f),source:{type:"package.json",path:J,priority:30,timestamp:new Date}}}}catch(J){if(X)H0.warn("Failed to load package.json:",[J instanceof Error?J:Error(String(J))])}return null}async applyEnvironmentVariables($,w,A,Y){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:u1($,w,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,Y,f){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,Y){let f=[];if(A){let X=A($);if(X)f.push(...X)}if(w){let X=await this.validator.validateConfiguration($,w);if(!X.isValid)f.push(...X.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(f.length>0)throw Xw.configValidation(Y||"unknown",f,Y)}checkCache($,w){let A=this.generateCacheKey($,w);return J1.get(A)||null}cacheResult($,w,A,Y){let f=this.generateCacheKey($,Y);J1.set(f,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias)A.push(`alias:${w.alias}`);if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,i$($,"config"),i$($,".config"),w?i$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,Y){let f=[];return f.push(...this.getLocalSearchPaths($,w,A,Y)),f.push(...this.getHomeSearchPaths($,w)),f.push(i$(A,"package.json")),f}getLocalSearchPaths($,w,A,Y){let f=this.getLocalDirectories(A,Y),X=[];for(let U of f)X.push(...this.fileLoader.generateConfigPaths($,U,w));return X}getHomeSearchPaths($,w){if(!$)return[];let A=[i$(aw(),".config",$),i$(aw(),".config"),aw()],Y=[];for(let f of A)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}async loadConfigWithResult($){return this.loadConfig($)}}function AE($){let w=!($.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 w||A}async function k9($){return n0.loadConfig({...$,__strictErrorHandling:!0})}async function tE($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let Y;if(A)Y=await n0.loadConfig($);else Y=await n0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return Y?.config??w}catch(Y){let f=Y instanceof Error?Y.name:"UnknownError",X=Y instanceof Error?Y.message:String(Y);if(!(f==="ConfigNotFoundError"||f==="ConfigLoadError"||f==="ConfigValidationError"||X.includes("config"))&&$.verbose)H0.warn("Unexpected error loading config, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);let U=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await n0.applyEnvironmentVariables(U.name||"",w,!0,U.verbose||!1))?.config??w;return w}}async function Z9($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await n0.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(A){if(A instanceof Error&&(A.name==="ConfigNotFoundError"||A.name==="ConfigLoadError"&&AE(A)))return(await n0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await n0.loadConfig({...$,cwd:$.cwd||qw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&AE(w)))return(await n0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function x9($,w,A="replace"){let Y=new sY;try{let f=await Y.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return f?f.config:null}catch{return null}}function u1($,w,A=!1){let Y=new aY,f=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function X(U,W=[]){let J={...U};for(let[B,E]of Object.entries(U)){let j=[...W,B],T=[`${f}_${j.join("_").toUpperCase()}`,`${f}_${j.map((G)=>G.toUpperCase()).join("")}`,`${f}_${j.map((G)=>G.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,H;for(let G of T)if(F=qw.env[G],F!==void 0){H=G;break}if(F!==void 0&&H)if(typeof E==="boolean")J[B]=["true","1","yes"].includes(F.toLowerCase());else if(typeof E==="number"){let G=Number(F);if(!Number.isNaN(G))J[B]=G}else if(Array.isArray(E))try{J[B]=JSON.parse(F)}catch{J[B]=F.split(",").map((G)=>G.trim())}else J[B]=F;else if(E&&typeof E==="object"&&!Array.isArray(E))J[B]=X(E,j)}return J}return X(w)}function P9($){let w=i$(qw.cwd(),$.configDir),A=i$(qw.cwd(),$.generatedDir),Y=i$(A,"config-types.ts");if(!k8(kB(Y)))MH(kB(Y),{recursive:!0,mode:511});let f=k8(w)?IH(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],X=`// Generated by bunfig v${j5}
97
+ export type ConfigNames = ${f.length?`'${f.join("' | '")}'`:"string"}
98
+ `;CH(Y,X,{mode:438})}function i9($){let w=null,A=null,Y=()=>{if(!A)A=tE($).then((X)=>{return w=X,X},(X)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)H0.warn("Config loading failed, using defaults:",[X instanceof Error?X:Error(String(X))]);return U});return A},f="defaultConfig"in $?$.defaultConfig:{};return w=f,Y(),new Proxy({},{get(X,U){if(w)return w[U];let W=f[U];return Y(),W},has(X,U){return U in(w||f)},ownKeys(){return Object.keys(w||f)},getOwnPropertyDescriptor(X,U){return Object.getOwnPropertyDescriptor(w||f,U)},set(X,U,W){if(!w)w={...f};return w[U]=W,!0}})}function b9($){let w=pB(rH.cwd(),$?.configDir||"./config");function A(){if(!tH(w))return[];let f=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),X=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=pH(w).filter((J)=>f.has(h8(J))).map((J)=>({base:J.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:J})),W=new Map;for(let{base:J,file:B}of U){let E=h8(B).toLowerCase(),j=W.get(J);if(!j){W.set(J,B);continue}let T=h8(j).toLowerCase();if(X.indexOf(E)<X.indexOf(T))W.set(J,B)}return Array.from(W.entries()).map(([J,B])=>({base:J,file:B})).sort((J,B)=>J.base.localeCompare(B.base))}function Y(){let f=A(),X=f.map((J)=>J.base),U=X.length?X.map((J)=>`'${J}'`).join(" | "):"string",W=f.length?`{
99
+ ${f.map((J)=>{let B=pB(w,J.file).replace(/\\/g,"/");return` '${J.base}': typeof import('${B}').default`}).join(`,
96
100
  `)}
97
- }`:"Record<string, any>";return`export type ConfigNames = ${Z}
98
- export type ConfigByName = ${B}
101
+ }`:"Record<string, any>";return`export type ConfigNames = ${U}
102
+ export type ConfigByName = ${W}
99
103
  export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
100
104
  export type ConfigOf = Config
101
- `}return{name:"bunfig-plugin",setup(Y){Y.onResolve({filter:/^virtual:bunfig-types$/},(U)=>{return{path:U.path,namespace:"bunfig-virtual"}}),Y.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}function WH($,w={}){let A=RJ.cwd();while(A.includes("storage"))A=hE(A,"..");let J=hE(A,$||"");if(w?.relative)return g2(RJ.cwd(),J);return J}function F$(){if(P0.env.NODE_ENV==="test"||P0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function EH(){if(P0.env.NODE_ENV==="test"||P0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof P0<"u"){let $=P0.type;if($==="renderer"||$==="worker")return!1;return!!(P0.versions&&(P0.versions.node||P0.versions.bun))}return!1}class fj{async format($){let w=await EH(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}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 PJ{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={...SJ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new fj,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??m.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...E8,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...E8};return{...E8,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:SJ.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!F$()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let J,Y=0,U=3,Z=1000;while(Y<U)try{try{try{await a2(this.config.logDirectory,IE.F_OK|IE.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await s2(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:D0.from($);try{if(!UJ(this.currentLogFile))await J8(this.currentLogFile,"",{mode:420});if(J=ME(this.currentLogFile,"a",420),r2(J,B,{flag:"a"}),NE(J),J!==void 0)A8(J),J=void 0;if((await aw(this.currentLogFile)).size===0){if(await J8(this.currentLogFile,B,{flag:"w",mode:420}),(await aw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let E=W;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(Y<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${U}:`,j);let F=Z*2**Y;await new Promise((f)=>setTimeout(f,F)),Y++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(J!==void 0)try{A8(J)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(B){if(Y===U-1){let E=B,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),B}Y++;let W=Z*2**(Y-1);await new Promise((E)=>setTimeout(E,W))}})();this.pendingOperations.push(w);let A=this.pendingOperations.length-1;try{await w}catch(J){throw console.error("Debug: [writeToFile] Error in operation:",J),J}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(F$())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,A=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((J)=>{console.error("Error rotating keys:",J)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),A=this.generateKey();this.currentKeyId=w,this.keys.set(w,A),this.encryptionKeys.set(w,{key:A,createdAt:new Date});let J=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,B])=>B.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof $.maxKeys==="number"?$.maxKeys:1,U=Math.max(1,Y);if(J.length>U)for(let[Z]of J.slice(U))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return w8(16).toString("hex")}generateKey(){return w8(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(),A=w8(16),J=l2("aes-256-gcm",w,A),Y=D0.isBuffer($)?$:D0.from($,"utf8"),U=J.update(Y),Z=J.final(),B=U.length+Z.length,W=J.getAuthTag(),E=D0.allocUnsafe(16+B+16);return A.copy(E,0),U.copy(E,16),Z.copy(E,16+U.length),W.copy(E,16+B),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=LE(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(D0.from(D0.concat(Y)))),J.on("error",A),J.write($),J.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(F$())return;if(!this.shouldWriteToFile())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 A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await ZJ(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await aw(A).catch(()=>null))try{if(await CE(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await WJ(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.1`;await J8(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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await aw(A).catch(()=>null))await CE(A,U)}if(this.currentLogFile=J,w.maxFiles){let Y=(await ZJ(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,Z)=>Z.localeCompare(U));for(let U of Y.slice(w.maxFiles))await WJ(sw(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=RE($),J=t2(w),Y=LE();await $T(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(J);console.log(J)}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()})),UJ(this.currentLogFile))try{let $=ME(this.currentLogFile,"r+");NE($),A8($)}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(!F$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await ZJ(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await WJ(sw(this.config.logDirectory,w))}catch(A){console.error(`Failed to delete temp file ${w}:`,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()?b.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||F$())return!1;let $=typeof m.env.NO_COLOR<"u",w=m.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof m.stderr<"u"&&m.stderr.isTTY||typeof m.stdout<"u"&&m.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=m.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${b.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,Y)=>{let U=b.underline(b.blue(J)),Z=this.toAbsoluteFilePath(Y);if(Z&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(Z)}`,W="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${B}\x1B\\${U}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${Y}\x1B\\${U}\x1B]8;;\x1B\\`;return U}),w=w.replace(/`([^`]+)`/g,(A,J)=>b.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>b.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>b.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>b.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>b.strikethrough(J)),w}supportsHyperlinks(){if(F$())return!1;let $=m.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 A=m.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(o2(w)||w.startsWith("./")||w.startsWith("../"))w=e2(w);else return null;return UJ(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){if(!this.shouldLog($))return;let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);let{consoleText:W,fileText:E}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":GH[$],f=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",z;switch($){case"debug":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:b.gray(W),level:$}),console.error(z);break;case"info":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"success":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:b.green(W),level:$}),console.error(z);break;case"warning":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"error":if(z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.error(z),B){let H=B.split(`
102
- `);for(let T of H)if(T.trim()&&!T.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:b.gray(` ${T}`),level:$,showTimestamp:!1}))}break}}else if(!F$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}let j=`${U} ${this.environment}.${$.toUpperCase()}: ${E}
103
- `;if(B)j+=`${B}
104
- `;if(j=j.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(j)}progress($,w=""){let A={update:(Y,U)=>{},finish:(Y)=>{},interrupt:(Y,U)=>{}};if(!this.enabled)return A;let J=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:J,lastRenderedLine:""},this.shouldStyleConsole()&&!F$()&&m.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(Y,U)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,Y),this.activeProgressBar.total),U!==void 0)this.activeProgressBar.message=U;if(this.shouldStyleConsole()&&!F$()&&m.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(Y)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,Y)},interrupt:(Y,U="info")=>{if(!F$()&&m.stdout.isTTY)m.stdout.write(`
105
- `);if(this[U==="warning"?"warn":U](Y),this.activeProgressBar&&this.shouldStyleConsole()&&!F$()&&m.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:this.options.showIcons===!1?"":b.blue("◐"),tag:A,message:`${b.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),W=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)W+=` ${JSON.stringify(A)}`;if(W+=`
106
- `,W=W.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":b.green("✓"),tag:E,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!F$())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}:${$}`,A=new PJ(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(A),A}createReadStream(){if(F$())throw Error("createReadStream is not supported in browser environments");if(!UJ(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return RE(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 A=this.keys.get(this.currentKeyId);try{let J=D0.isBuffer($)?$:D0.from($,"base64"),Y=J.subarray(0,16),U=J.subarray(J.length-16),Z=J.subarray(16,J.length-16),B=p2("aes-256-gcm",A,Y);B.setAuthTag(U);let W=B.update(Z),E=B.final(),j=W.length+E.length,F=D0.allocUnsafe(j);return W.copy(F,0),E.copy(F,W.length),F.toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return F$()}isServerMode(){return!F$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w),{consoleText:Y,fileText:U}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=Y.split(`
107
- `),W=Math.max(...B.map((f)=>f.length))+2,E=`┌${"─".repeat(W)}┐`,j=`└${"─".repeat(W)}┘`,F=B.map((f)=>{return this.formatConsoleMessage({timestamp:A,message:b.cyan(f),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:b.cyan(E),showTimestamp:!1})),F.forEach((f)=>console.error(f)),console.error(this.formatConsoleMessage({timestamp:A,message:b.cyan(j),showTimestamp:!1}))}else if(!F$())console.error(`${J} ${this.environment}.INFO: [BOX] ${U}`);let Z=`${J} ${this.environment}.INFO: [BOX] ${U}
108
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Z)}async prompt($){if(F$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${b.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();m.stdin.removeListener("data",A);try{if(typeof m.stdin.setRawMode==="function")m.stdin.setRawMode(!1)}catch{}m.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof m.stdin.setRawMode==="function")m.stdin.setRawMode(!0)}catch{}m.stdin.resume(),m.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let Z=/%([sdijfo%])/g,B=0;if(A=$.replace(Z,(W,E)=>{if(E==="%")return"%";if(B>=w.length)return W;let j=w[B++];switch(E){case"s":return String(j);case"d":case"i":return Number(j).toString();case"j":case"o":return JSON.stringify(j,null,2);default:return W}}),B<w.length)A+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:J,fileText:Y}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${b.blue("◐")} `;console.error(`${B}${Z} ${b.cyan(J)}`)}let U=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
109
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!m.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=b.green("━".repeat(J)),Z=b.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=this.options.showIcons===!1?"":w||A===100?b.green("✓"):b.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${b.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=m.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,m.stdout.write($.lastRenderedLine),w)m.stdout.write(`
110
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||F$()||!m.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(F$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await ZJ(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let Y=sw(this.config.logDirectory,J);if($.before)try{if((await aw(Y)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${Y}:`,U);continue}A.push(Y)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await WJ(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function TH($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:Y=()=>!0,fallback:U}=w,Z=Error("Unknown error occurred");for(let B=0;B<=A;B++)try{return await $()}catch(W){if(Z=W instanceof Error?W:Error(String(W)),B===A||!Y(Z))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(U!==void 0)return U;throw Z instanceof Error?Z:Error(`Unknown error: ${String(Z)}`)}class k8{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,A={}){let{prefix:J,useCamelCase:Y=!0,useBackwardCompatibility:U=!0,customParsers:Z={},verbose:B=!1,trackPerformance:W=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let j=J||this.generateEnvPrefix($),F={...w};return this.processObject(F,[],j,{useCamelCase:Y,useBackwardCompatibility:U,customParsers:Z,verbose:B,configName:$}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return L8.track("applyEnvironmentVariables",E,{configName:$});return E()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=Z.map((j)=>this.formatEnvKey(j,J.useCamelCase)),W=`${A}_${B.join("_")}`,E=J.useBackwardCompatibility?`${A}_${Z.map((j)=>j.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.processObject(U,Z,A,J);else{let j=BJ.env[W]||(E?BJ.env[E]:void 0);if(j!==void 0){if(J.verbose){let F=BJ.env[W]?W:E}try{$[Y]=this.parseEnvironmentValue(j,typeof U,W,J.customParsers,J.configName)}catch(F){if(F instanceof Q8)throw F;throw w1.envVar(W,j,typeof U,J.configName)}}}}}parseEnvironmentValue($,w,A,J,Y){for(let[U,Z]of Object.entries(J))try{return Z($)}catch{continue}for(let U of this.defaultParsers)if(U.canParse($,w))try{return U.parse($)}catch{throw w1.envVar(A,$,`${w} (via ${U.name} parser)`,Y)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,Y]of Object.entries(BJ.env))if(J.startsWith(A)&&Y!==void 0)w[J]=Y;return w}validateEnvironmentVariable($,w,A){let J=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))J.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(Y){J.push(`Cannot parse value "${w}" as ${A}: ${Y}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:Y="text"}=A,U=J||this.generateEnvPrefix($),Z=[];switch(this.extractEnvVarInfo(w,[],U,Z),Y){case"markdown":return this.formatAsMarkdown(Z,$);case"json":return JSON.stringify(Z,null,2);default:return this.formatAsText(Z,$)}}extractEnvVarInfo($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=`${A}_${Z.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.extractEnvVarInfo(U,Z,A,J);else J.push({key:B,type:Array.isArray(U)?"array":typeof U,description:`Configuration for ${Z.join(".")}`,example:this.generateExample(U)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
111
-
112
- `;for(let J of $)A+=`${J.key}
113
- `,A+=` Type: ${J.type}
114
- `,A+=` Description: ${J.description}
115
- `,A+=` Example: ${J.example}
105
+ `}return{name:"bunfig-plugin",setup(f){f.onResolve({filter:/^virtual:bunfig-types$/},(X)=>{return{path:X.path,namespace:"bunfig-virtual"}}),f.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:Y(),loader:"ts"}})}}}function F5($,w={}){let A=xY.cwd();while(A.includes("storage"))A=rB(A,"..");let Y=rB(A,$||"");if(w?.relative)return sH(xY.cwd(),Y);return Y}function H$(){if(c0.env.NODE_ENV==="test"||c0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function G5(){if(c0.env.NODE_ENV==="test"||c0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof c0<"u"){let $=c0.type;if($==="renderer"||$==="worker")return!1;return!!(c0.versions&&(c0.versions.node||c0.versions.bun))}return!1}class Yj{async format($){let w=await G5(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}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 oY{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={...mY},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new Yj,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??m.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...O8,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...O8};return{...O8,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:mY.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!H$()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let Y,f=0,X=3,U=1000;while(f<X)try{try{try{await A9(this.config.logDirectory,eB.F_OK|eB.W_OK)}catch(J){if(J instanceof Error&&"code"in J)if(J.code==="ENOENT")await Y9(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:x0.from($);try{if(!KY(this.currentLogFile))await y8(this.currentLogFile,"",{mode:420});if(Y=oB(this.currentLogFile,"a",420),w9(Y,W,{flag:"a"}),sB(Y),Y!==void 0)N8(Y),Y=void 0;if((await Y1(this.currentLogFile)).size===0){if(await y8(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 B=J;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(f<X-1){let E=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${f+1}/${X}:`,E);let j=U*2**f;await new Promise((T)=>setTimeout(T,j)),f++;continue}}if(B?.code&&["ENOSPC","EDQUOT"].includes(B.code))throw Error(`Disk quota exceeded or no space left on device: ${B.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",B),B}finally{if(Y!==void 0)try{N8(Y)}catch(J){console.error("Debug: [writeToFile] Error closing file descriptor:",J)}}}catch(W){if(f===X-1){let B=W,E=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",E),W}f++;let J=U*2**(f-1);await new Promise((B)=>setTimeout(B,J))}})();this.pendingOperations.push(w);let A=this.pendingOperations.length-1;try{await w}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}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 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(H$())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,A=Math.max(w,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},A)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,w=this.generateKeyId(),A=this.generateKey();this.currentKeyId=w,this.keys.set(w,A),this.encryptionKeys.set(w,{key:A,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,U],[,W])=>W.createdAt.getTime()-U.createdAt.getTime()),f=typeof $.maxKeys==="number"?$.maxKeys:1,X=Math.max(1,f);if(Y.length>X)for(let[U]of Y.slice(X))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return q8(16).toString("hex")}generateKey(){return q8(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(),A=q8(16),Y=oH("aes-256-gcm",w,A),f=x0.isBuffer($)?$:x0.from($,"utf8"),X=Y.update(f),U=Y.final(),W=X.length+U.length,J=Y.getAuthTag(),B=x0.allocUnsafe(16+W+16);return A.copy(B,0),X.copy(B,16),U.copy(B,16+X.length),J.copy(B,16+W),{encrypted:B,iv:A}}async compressData($){return new Promise((w,A)=>{let Y=wE(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w(x0.from(x0.concat(f)))),Y.on("error",A),Y.write($),Y.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(H$())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 A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await RY(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await Y1(A).catch(()=>null))try{if(await $E(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await hY(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await y8(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await Y1(A).catch(()=>null))await $E(A,X)}if(this.currentLogFile=Y,w.maxFiles){let f=(await RY(this.config.logDirectory)).filter((X)=>X.startsWith(this.name)).sort((X,U)=>U.localeCompare(X));for(let X of f.slice(w.maxFiles))await hY(f1(this.config.logDirectory,X))}}}async compressLogFile($,w){let A=aB($),Y=$9(w),f=wE();await U9(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}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()})),KY(this.currentLogFile))try{let $=oB(this.currentLogFile,"r+");sB($),N8($)}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(!H$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await RY(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await hY(f1(this.config.logDirectory,w))}catch(A){console.error(`Failed to delete temp file ${w}:`,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()?b.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||H$())return!1;let $=typeof m.env.NO_COLOR<"u",w=m.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof m.stderr<"u"&&m.stderr.isTTY||typeof m.stdout<"u"&&m.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=m.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${b.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,Y,f)=>{let X=b.underline(b.blue(Y)),U=this.toAbsoluteFilePath(f);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(U)}`,J="\x1B]8;;",B="\x1B\\";return`\x1B]8;;${W}\x1B\\${X}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${f}\x1B\\${X}\x1B]8;;\x1B\\`;return X}),w=w.replace(/`([^`]+)`/g,(A,Y)=>b.bgGray(Y)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,Y)=>b.bold(Y)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,Y)=>b.italic(Y)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,Y)=>b.italic(Y)),w=w.replace(/~([^~]+)~/g,(A,Y)=>b.strikethrough(Y)),w}supportsHyperlinks(){if(H$())return!1;let $=m.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 A=m.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(f9(w)||w.startsWith("./")||w.startsWith("../"))w=X9(w);else return null;return KY(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){if(!this.shouldLog($))return;let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);let{consoleText:J,fileText:B}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let j=this.options.showIcons===!1?"":q5[$],T=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:b.gray(J),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:b.green(J),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.error(F),W){let H=W.split(`
106
+ `);for(let G of H)if(G.trim()&&!G.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:b.gray(` ${G}`),level:$,showTimestamp:!1}))}break}}else if(!H$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}let E=`${X} ${this.environment}.${$.toUpperCase()}: ${B}
107
+ `;if(W)E+=`${W}
108
+ `;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress($,w=""){let A={update:(f,X)=>{},finish:(f)=>{},interrupt:(f,X)=>{}};if(!this.enabled)return A;let Y=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!H$()&&m.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(f,X)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,f),this.activeProgressBar.total),X!==void 0)this.activeProgressBar.message=X;if(this.shouldStyleConsole()&&!H$()&&m.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(f)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,f)},interrupt:(f,X="info")=>{if(!H$()&&m.stdout.isTTY)m.stdout.write(`
109
+ `);if(this[X==="warning"?"warn":X](f),this.activeProgressBar&&this.shouldStyleConsole()&&!H$()&&m.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":b.blue("◐"),tag:A,message:`${b.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),J=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)J+=` ${JSON.stringify(A)}`;if(J+=`
110
+ `,J=J.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let B=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":b.green("✓"),tag:B,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!H$())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}:${$}`,A=new oY(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(A),A}createReadStream(){if(H$())throw Error("createReadStream is not supported in browser environments");if(!KY(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return aB(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 A=this.keys.get(this.currentKeyId);try{let Y=x0.isBuffer($)?$:x0.from($,"base64"),f=Y.subarray(0,16),X=Y.subarray(Y.length-16),U=Y.subarray(16,Y.length-16),W=eH("aes-256-gcm",A,f);W.setAuthTag(X);let J=W.update(U),B=W.final(),E=J.length+B.length,j=x0.allocUnsafe(E);return J.copy(j,0),B.copy(j,J.length),j.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return H$()}isServerMode(){return!H$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w),{consoleText:f,fileText:X}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=f.split(`
111
+ `),J=Math.max(...W.map((T)=>T.length))+2,B=`┌${"─".repeat(J)}┐`,E=`└${"─".repeat(J)}┘`,j=W.map((T)=>{return this.formatConsoleMessage({timestamp:A,message:b.cyan(T),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:b.cyan(B),showTimestamp:!1})),j.forEach((T)=>console.error(T)),console.error(this.formatConsoleMessage({timestamp:A,message:b.cyan(E),showTimestamp:!1}))}else if(!H$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${X}`);let U=`${Y} ${this.environment}.INFO: [BOX] ${X}
112
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(H$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${b.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();m.stdin.removeListener("data",A);try{if(typeof m.stdin.setRawMode==="function")m.stdin.setRawMode(!1)}catch{}m.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof m.stdin.setRawMode==="function")m.stdin.setRawMode(!0)}catch{}m.stdin.resume(),m.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,W=0;if(A=$.replace(U,(J,B)=>{if(B==="%")return"%";if(W>=w.length)return J;let E=w[W++];switch(B){case"s":return String(E);case"d":case"i":return Number(E).toString();case"j":case"o":return JSON.stringify(E,null,2);default:return J}}),W<w.length)A+=` ${w.slice(W).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`}let{consoleText:Y,fileText:f}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let U=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",W=this.options.showIcons===!1?"":`${b.blue("◐")} `;console.error(`${W}${U} ${b.cyan(Y)}`)}let X=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${f}
113
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(X)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!m.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=b.green("━".repeat(Y)),U=b.gray("━".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=this.options.showIcons===!1?"":w||A===100?b.green("✓"):b.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${b.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=m.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,m.stdout.write($.lastRenderedLine),w)m.stdout.write(`
114
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||H$()||!m.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(H$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await RY(this.config.logDirectory),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let f=f1(this.config.logDirectory,Y);if($.before)try{if((await Y1(f)).mtime>=$.before)continue}catch(X){console.error(`Failed to get stats for file ${f}:`,X);continue}A.push(f)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await hY(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function N5($,w={}){let{maxRetries:A=3,retryDelay:Y=1000,isRetryable:f=()=>!0,fallback:X}=w,U=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(J){if(U=J instanceof Error?J:Error(String(J)),W===A||!f(U))break;if(Y>0)await new Promise((B)=>setTimeout(B,Y))}if(X!==void 0)return X;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}class fU{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,A={}){let{prefix:Y,useCamelCase:f=!0,useBackwardCompatibility:X=!0,customParsers:U={},verbose:W=!1,trackPerformance:J=!0}=A,B=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let E=Y||this.generateEnvPrefix($),j={...w};return this.processObject(j,[],E,{useCamelCase:f,useBackwardCompatibility:X,customParsers:U,verbose:W,configName:$}),{config:j,source:{type:"environment",priority:50,timestamp:new Date}}};if(J)return r8.track("applyEnvironmentVariables",B,{configName:$});return B()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=U.map((E)=>this.formatEnvKey(E,Y.useCamelCase)),J=`${A}_${W.join("_")}`,B=Y.useBackwardCompatibility?`${A}_${U.map((E)=>E.toUpperCase()).join("_")}`:null;if(Y.verbose);if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.processObject(X,U,A,Y);else{let E=qY.env[J]||(B?qY.env[B]:void 0);if(E!==void 0){if(Y.verbose){let j=qY.env[J]?J:B}try{$[f]=this.parseEnvironmentValue(E,typeof X,J,Y.customParsers,Y.configName)}catch(j){if(j instanceof YU)throw j;throw W1.envVar(J,E,typeof X,Y.configName)}}}}}parseEnvironmentValue($,w,A,Y,f){for(let[X,U]of Object.entries(Y))try{return U($)}catch{continue}for(let X of this.defaultParsers)if(X.canParse($,w))try{return X.parse($)}catch{throw W1.envVar(A,$,`${w} (via ${X.name} parser)`,f)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[Y,f]of Object.entries(qY.env))if(Y.startsWith(A)&&f!==void 0)w[Y]=f;return w}validateEnvironmentVariable($,w,A){let Y=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))Y.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(f){Y.push(`Cannot parse value "${w}" as ${A}: ${f}`)}return{isValid:Y.length===0,errors:Y}}generateEnvVarDocs($,w,A={}){let{prefix:Y,format:f="text"}=A,X=Y||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],X,U),f){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=`${A}_${U.map((J)=>this.formatEnvKey(J,!0)).join("_")}`;if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.extractEnvVarInfo(X,U,A,Y);else Y.push({key:W,type:Array.isArray(X)?"array":typeof X,description:`Configuration for ${U.join(".")}`,example:this.generateExample(X)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
115
+
116
+ `;for(let Y of $)A+=`${Y.key}
117
+ `,A+=` Type: ${Y.type}
118
+ `,A+=` Description: ${Y.description}
119
+ `,A+=` Example: ${Y.example}
116
120
 
117
121
  `;return A}formatAsMarkdown($,w){let A=`# Environment Variables for ${w}
118
122
 
119
123
  `;A+=`| Variable | Type | Description | Example |
120
124
  `,A+=`|----------|------|-------------|----------|
121
- `;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
122
- `;return A}}function HH($,w,A={}){return Nj($,w,A,new WeakMap)}function Nj($,w,A,J){let{arrayMergeMode:Y="replace",skipNullish:U=!1,customMerger:Z}=A;if(w===null||w===void 0)return U?$:w;if(Z){let B=Z($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return Mj($,w,Y,J);if(!A0(w)||!A0($))return w;return RH($,w,A,J)}function Mj($,w,A,J){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return qH($,w);case"smart":return KH($,w,J);default:return w}return w}function qH($,w){let A=[...w];for(let J of $)if(!A.some((Y)=>N8(Y,J)))A.push(J);return A}function KH($,w,A){if(w.length===0)return $;if($.length===0)return w;if(A0(w[0])&&A0($[0]))return hH($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}function hH($,w,A){let J=[...w];for(let Y of $){if(!A0(Y)){J.push(Y);continue}let U=["id","name","key","path","type"],Z=!1;for(let B of U)if(B in Y){if(J.find((W)=>A0(W)&&(B in W)&&W[B]===Y[B])){Z=!0;break}}if(!Z)J.push(Y)}return J}function RH($,w,A,J){let Y=w;if(A0(Y)&&J.has(Y))return J.get(Y);let U={...$};if(A0(Y))J.set(Y,U);for(let Z in Y){if(!Object.prototype.hasOwnProperty.call(Y,Z))continue;let B=Y[Z],W=U[Z];if(A.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){U[Z]=B;continue}if(A0(B)&&A0(W))U[Z]=Nj(W,B,A,J);else if(Array.isArray(B)||Array.isArray(W))U[Z]=Mj(W,B,A.arrayMergeMode||"smart",J);else U[Z]=B}return U}function Ij($,w,A="replace"){return HH($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function N8($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!N8($[A],w[A]))return!1;return!0}if(A0($)&&A0(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!N8($[Y],w[Y]))return!1}return!0}return!1}function A0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class Cj{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:Y=!0,cacheTtl:U,trackPerformance:Z=!0,verbose:B=!1}=A;if(Y){let E=NJ.getWithFileCheck("file",$);if(E){if(B)console.log(`Configuration loaded from cache: ${$}`);return E}}let W=async()=>{if(!EJ($))return null;try{let E=`?t=${Date.now()}`,j=await import($+E),F=j.default||j,f="default"in j,z=Object.keys(j).length>0;if(!f&&!z)throw new OJ($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new OJ($,Error("Configuration must export a valid object"),"unknown");let H={config:Ij(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(Y)NJ.setWithFileCheck("file",H,$,U);return H}catch(E){throw E instanceof Error?w1.configLoad($,E):w1.configLoad($,Error(String(E)))}};if(Z)return L8.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let Y=await this.loadFromPath(J,w,A);if(Y)return Y}catch(Y){if(Y instanceof Error&&Y.name==="ConfigLoadError")throw Y;if(A.verbose)console.warn(`Failed to load config from ${J}:`,Y)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),Y=[];for(let U of J)for(let Z of this.extensions)Y.push(Y8(w,`${U}${Z}`));return Y}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);let J=w===void 0?[]:Array.isArray(w)?w:[w];for(let U of J){if(!U)continue;if(A.push(U,`.${U}.config`,`${U}.config`,`.${U}`),$)A.push(`${$}.${U}.config`,`.${$}.${U}.config`)}let Y=new Set;return A.filter((U)=>{if(!U||Y.has(U))return!1;return Y.add(U),!0})}checkFileAccess($){return TH(async()=>{return EJ($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!EJ($))return J;if(w||A){let Y=this.generateNamePatterns(w||"",A);for(let U of Y)for(let Z of this.extensions){let B=Y8($,`${U}${Z}`);if(await this.checkFileAccess(B))J.push(B)}}else try{let{readdirSync:Y}=await import("fs"),U=Y($);for(let Z of U)if(this.looksLikeConfigFile(Z)){let B=Y8($,Z);if(await this.checkFileAccess(B))J.push(B)}}catch{return[]}return J}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(!EJ($))return w.push("Configuration file does not exist"),w;let A=await import($),J=A.default||A;if(J===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof J!=="object"||J===null)w.push("Configuration must be an object");else if(Array.isArray(J))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:Y}=await import("fs"),U=Y($,"utf8");JSON.parse(U)}catch(Y){w.push(`Invalid JSON syntax: ${Y}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(J)=>{try{let Y=await this.loadFromPath(J,{},w);if(Y)A.set(J,Y.config)}catch(Y){if(w.verbose)console.warn(`Failed to preload ${J}:`,Y)}})),A}}class Lj{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:Y=!0,validateTypes:U=!0,customRules:Z=[],trackPerformance:B=!0,verbose:W=!1}=A,E=async()=>{let j=[],F=[],f={stopOnFirstError:J,validateRequired:Y,validateTypes:U,customRules:Z,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,f);else if(Array.isArray(w))return this.validateWithRules($,[...w,...Z],f);else return this.validateWithJSONSchema($,w,f)}catch(z){return j.push({path:"",message:`Validation failed: ${z}`,rule:"system"}),{isValid:!1,errors:j,warnings:F}}};if(B)return await L8.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!wT(w))throw new XJ(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),Y=J.default||J;if(Array.isArray(Y))return this.validateWithRules($,Y,A);else return this.validateWithJSONSchema($,Y,A)}catch(J){throw new XJ(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],Y=[];return this.validateObjectAgainstSchema($,w,"",J,Y,A),{isValid:J.length===0,errors:J,warnings:Y}}validateObjectAgainstSchema($,w,A,J,Y,U){if(U.validateTypes&&w.type){let Z=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(Z)){if(J.push({path:A,message:`Expected type ${B.join(" or ")}, got ${Z}`,expected:B.join(" or "),actual:Z,rule:"type"}),U.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(J.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),U.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)J.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)J.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))J.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)J.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)J.push({path:A,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let Z=0;Z<$.length;Z++){let B=A?`${A}[${Z}]`:`[${Z}]`;if(this.validateObjectAgainstSchema($[Z],w.items,B,J,Y,U),U.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let Z=$;if(U.validateRequired&&w.required){for(let B of w.required)if(!(B in Z)){if(J.push({path:A?`${A}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),U.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in Z){let E=A?`${A}.${B}`:B;if(this.validateObjectAgainstSchema(Z[B],W,E,J,Y,U),U.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(Z))if(!B.has(W))Y.push({path:A?`${A}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],Y=[];for(let U of w)try{let Z=this.getValueByPath($,U.path),B=this.validateWithRule(Z,U,U.path);if(J.push(...B),A.stopOnFirstError&&J.length>0)break}catch(Z){J.push({path:U.path,message:`Rule validation failed: ${Z}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:Y}}validateWithRule($,w,A){let J=[];if(w.required&&($===void 0||$===null))return J.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),J;if($===void 0||$===null)return J;if(w.type){let Y=Array.isArray($)?"array":typeof $;if(Y!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${Y}`,expected:w.type,actual:Y,rule:"type"})}if(w.min!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:Y,rule:"min"})}if(w.max!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:Y,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))J.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))J.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let Y=w.validator($);if(Y)J.push({path:A,message:w.message||Y,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let Y of A)if(J&&typeof J==="object"&&Y in J)J=J[Y];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,Y,U,Z]=J;w.push({path:Y,required:!U,type:this.mapTypeScriptType(Z)})}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:NH},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function MH($){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((A)=>`"${A}"`).join(", ")}`}class yj{fileLoader=new Cj;envProcessor=new k8;validator=new Lj;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:Y,validate:U,...Z}=$;try{if(A?.enabled){let W=this.checkCache(Z.name||"",Z);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(Z,!0,A)}catch(W){let E=Z.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(E)throw W;B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`No configuration file found for "${Z.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let j=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),F=!j&&(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(E&&(f||j))throw W;if(F&&(!E||!f))B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(Y||U)await this.validateConfiguration(B.config,Y,U,Z.name);if(A?.enabled&&B)this.cacheResult(Z.name||"",B,A,Z);if(J?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:Z.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(W);if(J.slowThreshold&&W.duration>J.slowThreshold)Q0.warn(`Slow configuration loading detected: ${W.duration}ms for ${Z.name}`);B.metrics=W}return B}catch(B){if(B instanceof Error&&B.name==="ConfigNotFoundError")throw B;let W=Date.now()-w;throw Q0.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:Y,cwd:U,configDir:Z,defaultConfig:B,checkEnv:W=!0,arrayStrategy:E="replace",verbose:j=!1}=$,F=U||QJ.cwd(),f=[],z=await this.loadLocalConfiguration(J,Y,F,Z,B,E,j,W,A);if(z)return f.push(...this.getLocalSearchPaths(J,Y,F,Z)),this.finalizeResult(z,f,W,J,j);let H=await this.loadHomeConfiguration(J,Y,B,E,j,W);if(H)return f.push(...this.getHomeSearchPaths(J,Y)),this.finalizeResult(H,f,W,J,j);let T=await this.loadPackageJsonConfiguration(J,Y,F,B,E,j,W);if(T)return f.push($0(F,"package.json")),this.finalizeResult(T,f,W,J,j);if(f.push(...this.getAllSearchPaths(J,Y,F,Z)),w)throw w1.configNotFound(J,f,Y);return{...await this.applyEnvironmentVariables(J,B,W,j),warnings:[`No configuration file found for "${J}"${MH(Y)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,Y,U,Z,B,W){let E=B?FJ($,Y,Z):Y,j=this.getLocalDirectories(A,J);for(let F of j){if(Z)Q0.info(`Searching for configuration in: ${F}`);let f=this.fileLoader.generateConfigPaths($,F,w),z=await this.fileLoader.tryLoadFromPaths(f,E,{arrayStrategy:U,verbose:Z,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(z){if(Z)Q0.success(`Configuration loaded from: ${z.source.path}`);return z}}return null}async loadHomeConfiguration($,w,A,J,Y,U){if(!$)return null;let Z=U?FJ($,A,Y):A,B=[$0(mw(),".config",$),$0(mw(),".config"),mw()];for(let W of B){if(Y)Q0.info(`Checking home directory: ${W}`);let E=this.fileLoader.generateConfigPaths($,W,w),j=await this.fileLoader.tryLoadFromPaths(E,Z,{arrayStrategy:J,verbose:Y});if(j){if(Y)Q0.success(`Configuration loaded from home directory: ${j.source.path}`);return j}}return null}async loadPackageJsonConfiguration($,w,A,J,Y,U,Z){let B=Z?FJ($,J,U):J;try{let W=$0(A,"package.json");if(!T2(W))return null;let E={};try{E=JSON.parse(H2(W,"utf8"))}catch(f){if(U)Q0.warn("Failed to parse package.json:",[f instanceof Error?f:Error(String(f))]);return null}let j=E[$],F=$;if(!j&&w){let f=Array.isArray(w)?w:[w];for(let z of f){if(!z)continue;if(E[z]){j=E[z],F=z;break}}}if(j&&typeof j==="object"&&!Array.isArray(j)){if(U)Q0.success(`Configuration loaded from package.json: ${F}`);return{config:Ij(B,j,Y),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(U)Q0.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,A,J){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:FJ($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,Y){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let Y=[];if(A){let U=A($);if(U)Y.push(...U)}if(w){let U=await this.validator.validateConfiguration($,w);if(!U.isValid)Y.push(...U.errors.map((Z)=>Z.path?`${Z.path}: ${Z.message}`:Z.message))}if(Y.length>0)throw w1.configValidation(J||"unknown",Y,J)}checkCache($,w){let A=this.generateCacheKey($,w);return NJ.get(A)||null}cacheResult($,w,A,J){let Y=this.generateCacheKey($,J);NJ.set(Y,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias){let J=Array.isArray(w.alias)?w.alias.join(","):w.alias;A.push(`alias:${J}`)}if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,$0($,"config"),$0($,".config"),w?$0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let Y=[];return Y.push(...this.getLocalSearchPaths($,w,A,J)),Y.push(...this.getHomeSearchPaths($,w)),Y.push($0(A,"package.json")),Y}getLocalSearchPaths($,w,A,J){let Y=this.getLocalDirectories(A,J),U=[];for(let Z of Y)U.push(...this.fileLoader.generateConfigPaths($,Z,w));return U}getHomeSearchPaths($,w){if(!$)return[];let A=[$0(mw(),".config",$),$0(mw(),".config"),mw()],J=[];for(let Y of A)J.push(...this.fileLoader.generateConfigPaths($,Y,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function FJ($,w,A=!1){let J=new k8,Y=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function U(Z,B=[]){let W={...Z};for(let[E,j]of Object.entries(Z)){let F=[...B,E],f=[`${Y}_${F.join("_").toUpperCase()}`,`${Y}_${F.map((T)=>T.toUpperCase()).join("")}`,`${Y}_${F.map((T)=>T.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],z,H;for(let T of f)if(z=QJ.env[T],z!==void 0){H=T;break}if(z!==void 0&&H)if(typeof j==="boolean")W[E]=["true","1","yes"].includes(z.toLowerCase());else if(typeof j==="number"){let T=Number(z);if(!Number.isNaN(T))W[E]=T}else if(Array.isArray(j))try{W[E]=JSON.parse(z)}catch{W[E]=z.split(",").map((T)=>T.trim())}else W[E]=z;else if(j&&typeof j==="object"&&!Array.isArray(j))W[E]=U(j,F)}return W}return U(w)}function M8($,w){let A=[];function J(Y){let U;try{U=uE.readdirSync(Y)}catch{return}for(let Z of U){let B=F0.join(Y,Z);try{if(uE.statSync(B).isDirectory())J(B);else if(Z===w)A.push(Y)}catch{continue}}}return J($),A}function C($,w,A){if(A||Y$.verbose)console.debug(`[tlsx:${$}] ${w}`)}function Oj(){return Sj.env.SUDO_PASSWORD}function OH($){let w=$.toLowerCase();return VH.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function _J($){if(Array.isArray($))return $.map((A)=>_J(A));if(typeof $==="string")return SH.test($)?cE:$;if(!$||typeof $!=="object")return $;let w={};for(let[A,J]of Object.entries($)){if(OH(A)){w[A]=cE;continue}w[A]=_J(J)}return w}function bJ($){return JSON.stringify(_J($))}function XH($){let w=Oj();if(!w||!/(^|\|\s*|&&\s*|;\s*)sudo\s/.test($))return $;let A=w.replace(/'/g,"'\\''"),J=$.replace(/(^|\|\s*|&&\s*|;\s*)sudo(?!\s+-[Sn])(\s+)/g,"$1sudo -S$2");return`echo '${A}' | ${J}`}async function $w($,w={}){let A=XH($);try{let{stdout:J,stderr:Y}=await yH(A,{cwd:w.cwd||Sj.cwd(),timeout:w.timeout||30000});return{stdout:J.trim(),stderr:Y.trim()}}catch(J){let Y=Error(`Failed to execute command: ${$}
123
- Error: ${J.message}`);throw Y.stack=J.stack,Y}}function Xj($){if($.domain)return $.domain;if($.domains?.length)return $.domains[0];throw Error("Either domain or domains must be specified")}function x8($){let w=F0.join(CH.homedir(),".stacks","ssl"),A=$.basePath&&$.basePath.trim()!==""?$.basePath:Y$.basePath&&Y$.basePath.trim()!==""?Y$.basePath:w,J=$.certPath?F0.isAbsolute($.certPath)?$.certPath:F0.join(A,$.certPath):F0.join(A,Y$.certPath),Y=$.keyPath?F0.isAbsolute($.keyPath)?$.keyPath:F0.join(A,$.keyPath):F0.join(A,Y$.keyPath),U=$.caCertPath?F0.isAbsolute($.caCertPath)?$.caCertPath:F0.join(A,$.caCertPath):F0.join(A,Y$.caCertPath);return{certPath:J,keyPath:Y,caCertPath:U,basePath:A}}function _j($){let w=[],A=new Set;if($.domain)A.add($.domain);if($.domains?.length)$.domains.forEach((J)=>A.add(J));for(let J of A)w.push({type:2,value:J});if($.altNameIPs?.length)for(let J of $.altNameIPs)w.push({type:7,ip:J});if($.altNameURIs?.length)for(let J of $.altNameURIs)w.push({type:6,value:J});if($.subjectAltNames?.length)w.push(...$.subjectAltNames);return C(L.CERT,`Generated ${w.length} Subject Alternative Names`,$.verbose),w}function P8($){let w=$.notBeforeDays??f0.DEFAULT_NOT_BEFORE_DAYS,A=$.validityDays??($.validityYears?$.validityYears*365:f0.DEFAULT_VALIDITY_DAYS);C(L.CERT,"Calculating certificate validity dates",$.verbose);let J=new Date(Date.now()-86400*w*1000),Y=new Date(J.getTime()+A*24*60*60*1000);return J.setUTCHours(0,0,0,0),Y.setUTCHours(23,59,59,999),C(L.CERT,`Validity period: ${J.toISOString()} to ${Y.toISOString()}`,$.verbose),{notBefore:J,notAfter:Y}}function Q1($){if($<128)return Buffer.from([$]);let w=[],A=$;while(A>0)w.unshift(A&255),A>>=8;return Buffer.from([128|w.length,...w])}function r$($,w){let A=Q1(w.length);return Buffer.concat([Buffer.from([$]),A,w])}function b1($){let w=$.split(".").map(Number),A=[];A.push(40*w[0]+w[1]);for(let J=2;J<w.length;J++){let Y=w[J],U=[];U.unshift(Y&127),Y>>=7;while(Y>0)U.unshift(Y&127|128),Y>>=7;A.push(...U)}return r$(G0.OID,Buffer.from(A))}function I8($){let w;if(typeof $==="bigint"){let A=$.toString(16).padStart(2,"0");w=Buffer.from(A.length%2?`0${A}`:A,"hex")}else if(typeof $==="number")if($===0)w=Buffer.from([0]);else{let A=$.toString(16).padStart(2,"0");w=Buffer.from(A.length%2?`0${A}`:A,"hex")}else w=$;if(w[0]&128)w=Buffer.concat([Buffer.from([0]),w]);return r$(G0.INTEGER,w)}function Dj($,w=0){return r$(G0.BIT_STRING,Buffer.concat([Buffer.from([w]),$]))}function Qj($){return r$(G0.OCTET_STRING,$)}function t$(...$){return r$(G0.SEQUENCE,Buffer.concat($))}function _H(...$){return r$(G0.SET,Buffer.concat($))}function DH($){return r$(G0.PRINTABLE_STRING,Buffer.from($,"ascii"))}function QH($){return r$(G0.UTF8_STRING,Buffer.from($,"utf8"))}function kH(){return Buffer.from([G0.NULL,0])}function vE($,w,A=!0){let J=160|$|(A?0:0),Y=Q1(w.length);return Buffer.concat([Buffer.from([J]),Y,w])}function mE($){let w=$.getUTCFullYear();if(w>=2050){let A=$.toISOString().replace(/[-:T]/g,"").slice(0,14)+"Z";return r$(G0.GENERALIZED_TIME,Buffer.from(A,"ascii"))}else{let A=(w%100).toString().padStart(2,"0"),J=($.getUTCMonth()+1).toString().padStart(2,"0"),Y=$.getUTCDate().toString().padStart(2,"0"),U=$.getUTCHours().toString().padStart(2,"0"),Z=$.getUTCMinutes().toString().padStart(2,"0"),B=$.getUTCSeconds().toString().padStart(2,"0"),W=`${A}${J}${Y}${U}${Z}${B}Z`;return r$(G0.UTC_TIME,Buffer.from(W,"ascii"))}}function xH($,w){return t$(mE($),mE(w))}function nE($){let w=[];for(let A of $){let J;switch(A.shortName){case"CN":J=x$.COMMON_NAME;break;case"C":J=x$.COUNTRY;break;case"L":J=x$.LOCALITY;break;case"ST":J=x$.STATE;break;case"O":J=x$.ORGANIZATION;break;case"OU":J=x$.ORGANIZATIONAL_UNIT;break;default:continue}let Y=A.shortName==="C"?DH(A.value):QH(A.value),U=t$(b1(J),Y);w.push(_H(U))}return t$(...w)}function kj($){return t$(b1($),kH())}function PH($){return $.export({type:"spki",format:"der"})}function bH($){if($.includes(":")){let w=$;if($.includes("::")){let Y=$.split("::"),U=Y[0]?Y[0].split(":"):[],Z=Y[1]?Y[1].split(":"):[],B=8-U.length-Z.length,W=Array.from({length:B},()=>"0");w=[...U,...W,...Z].join(":")}let A=w.split(":"),J=Buffer.alloc(16);for(let Y=0;Y<8;Y++){let U=Number.parseInt(A[Y]||"0",16);J.writeUInt16BE(U,Y*2)}return J}else{let w=$.split(".").map((A)=>Number.parseInt(A,10));return Buffer.from(w)}}function iH($){let w=[];for(let A of $)if(A.type===2&&A.value){let J=Q1(A.value.length);w.push(Buffer.concat([Buffer.from([130]),J,Buffer.from(A.value,"ascii")]))}else if(A.type===7&&A.ip){let J=bH(A.ip),Y=Q1(J.length);w.push(Buffer.concat([Buffer.from([135]),Y,J]))}else if(A.type===6&&A.value){let J=Q1(A.value.length);w.push(Buffer.concat([Buffer.from([134]),J,Buffer.from(A.value,"ascii")]))}return t$(...w)}function uH($,w){if($){if(w!==void 0)return t$(r$(1,Buffer.from([255])),I8(w));return t$(r$(1,Buffer.from([255])))}return t$()}function cH($){let w=0;if($.digitalSignature)w|=128;if($.keyEncipherment)w|=32;if($.keyCertSign)w|=4;if($.cRLSign)w|=2;let A=0,J=w;while(J>0&&(J&1)===0)A++,J>>=1;if(w===0)A=7;return Dj(Buffer.from([w]),A)}function vH($){let w=[];if($.serverAuth)w.push(b1(x$.SERVER_AUTH));if($.clientAuth)w.push(b1(x$.CLIENT_AUTH));return t$(...w)}function _1($,w,A){let J=[b1($)];if(w)J.push(r$(1,Buffer.from([255])));return J.push(Qj(A)),t$(...J)}function mH($){let w=[];if(w.push(vE(0,I8(2))),w.push(I8($.serialNumber)),w.push(kj(x$.SHA256_WITH_RSA)),w.push(nE($.issuer)),w.push(xH($.notBefore,$.notAfter)),w.push(nE($.subject)),w.push(PH($.publicKey)),$.extensions){let A=[];if($.extensions.basicConstraints)A.push(_1(x$.BASIC_CONSTRAINTS,$.extensions.basicConstraints.critical??!0,uH($.extensions.basicConstraints.isCA,$.extensions.basicConstraints.pathLenConstraint)));if($.extensions.keyUsage)A.push(_1(x$.KEY_USAGE,$.extensions.keyUsage.critical??!0,cH($.extensions.keyUsage)));if($.extensions.extendedKeyUsage)A.push(_1(x$.EXTENDED_KEY_USAGE,!1,vH($.extensions.extendedKeyUsage)));if($.extensions.subjectAltName?.length)A.push(_1(x$.SUBJECT_ALT_NAME,!1,iH($.extensions.subjectAltName)));if($.extensions.subjectKeyIdentifier)A.push(_1(x$.SUBJECT_KEY_IDENTIFIER,!1,Qj($.extensions.subjectKeyIdentifier)));if(A.length>0)w.push(vE(3,t$(...A)))}return t$(...w)}function nH($,w){let A=A1.createSign("SHA256");A.update($);let J=A.sign(w);return t$($,kj(x$.SHA256_WITH_RSA),Dj(J))}function dH($,w){let A=$.toString("base64"),J=[];for(let Y=0;Y<A.length;Y+=64)J.push(A.slice(Y,Y+64));return`-----BEGIN ${w}-----
124
- ${J.join(`
125
+ `;for(let Y of $)A+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
126
+ `;return A}}function y5($,w,A={}){return jj($,w,A,new WeakMap)}function jj($,w,A,Y){let{arrayMergeMode:f="replace",skipNullish:X=!1,customMerger:U}=A;if(w===null||w===void 0)return X?$:w;if(U){let W=U($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return Tj($,w,f,Y);if(!U0(w)||!U0($))return w;return S5($,w,A,Y)}function Tj($,w,A,Y){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return M5($,w);case"smart":return I5($,w,Y);default:return w}return w}function M5($,w){let A=[...w];for(let Y of $)if(!A.some((f)=>d8(f,Y)))A.push(Y);return A}function I5($,w,A){if(w.length===0)return $;if($.length===0)return w;if(U0(w[0])&&U0($[0]))return C5($,w,A);if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}function C5($,w,A){let Y=[...w];for(let f of $){if(!U0(f)){Y.push(f);continue}let X=["id","name","key","path","type"],U=!1;for(let W of X)if(W in f){if(Y.find((J)=>U0(J)&&(W in J)&&J[W]===f[W])){U=!0;break}}if(!U)Y.push(f)}return Y}function S5($,w,A,Y){let f=w;if(U0(f)&&Y.has(f))return Y.get(f);let X={...$};if(U0(f))Y.set(f,X);for(let U in f){if(!Object.prototype.hasOwnProperty.call(f,U))continue;let W=f[U],J=X[U];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){X[U]=W;continue}if(U0(W)&&U0(J))X[U]=jj(J,W,A,Y);else if(Array.isArray(W)||Array.isArray(J))X[U]=Tj(J,W,A.arrayMergeMode||"smart",Y);else X[U]=W}return X}function Fj($,w,A="replace"){return y5($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function d8($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!d8($[A],w[A]))return!1;return!0}if(U0($)&&U0(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!d8($[f],w[f]))return!1}return!0}return!1}function U0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class zj{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:Y="replace",useCache:f=!0,cacheTtl:X,trackPerformance:U=!0,verbose:W=!1}=A;if(f){let B=PY.getWithFileCheck("file",$);if(B){if(W)console.log(`Configuration loaded from cache: ${$}`);return B}}let J=async()=>{if(!NY($))return null;try{let B=`?t=${Date.now()}`,E=await import($+B),j=E.default||E,T="default"in E,F=Object.keys(E).length>0;if(!T&&!F)throw new dY($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof j!=="object"||j===null||Array.isArray(j))throw new dY($,Error("Configuration must export a valid object"),"unknown");let H={config:Fj(w,j,Y),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(f)PY.setWithFileCheck("file",H,$,X);return H}catch(B){throw B instanceof Error?W1.configLoad($,B):W1.configLoad($,Error(String(B)))}};if(U)return r8.track("loadFromPath",J,{path:$});return J()}async tryLoadFromPaths($,w,A={}){for(let Y of $)try{let f=await this.loadFromPath(Y,w,A);if(f)return f}catch(f){if(f instanceof Error&&f.name==="ConfigLoadError")throw f;if(A.verbose)console.warn(`Failed to load config from ${Y}:`,f)}return null}generateConfigPaths($,w,A){let Y=this.generateNamePatterns($,A),f=[];for(let X of Y)for(let U of this.extensions)f.push(M8(w,`${X}${U}`));return f}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);let Y=w===void 0?[]:Array.isArray(w)?w:[w];for(let X of Y){if(!X)continue;if(A.push(X,`.${X}.config`,`${X}.config`,`.${X}`),$)A.push(`${$}.${X}.config`,`.${$}.${X}.config`)}let f=new Set;return A.filter((X)=>{if(!X||f.has(X))return!1;return f.add(X),!0})}checkFileAccess($){return N5(async()=>{return NY($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let Y=[];if(!NY($))return Y;if(w||A){let f=this.generateNamePatterns(w||"",A);for(let X of f)for(let U of this.extensions){let W=M8($,`${X}${U}`);if(await this.checkFileAccess(W))Y.push(W)}}else try{let{readdirSync:f}=await import("fs"),X=f($);for(let U of X)if(this.looksLikeConfigFile(U)){let W=M8($,U);if(await this.checkFileAccess(W))Y.push(W)}}catch{return[]}return Y}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(!NY($))return w.push("Configuration file does not exist"),w;let A=await import($),Y=A.default||A;if(Y===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)w.push("Configuration must be an object");else if(Array.isArray(Y))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:f}=await import("fs"),X=f($,"utf8");JSON.parse(X)}catch(f){w.push(`Invalid JSON syntax: ${f}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(Y)=>{try{let f=await this.loadFromPath(Y,{},w);if(f)A.set(Y,f.config)}catch(f){if(w.verbose)console.warn(`Failed to preload ${Y}:`,f)}})),A}}class Gj{async validateConfiguration($,w,A={}){let{stopOnFirstError:Y=!1,validateRequired:f=!0,validateTypes:X=!0,customRules:U=[],trackPerformance:W=!0,verbose:J=!1}=A,B=async()=>{let E=[],j=[],T={stopOnFirstError:Y,validateRequired:f,validateTypes:X,customRules:U,trackPerformance:W,verbose:J};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,T);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],T);else return this.validateWithJSONSchema($,w,T)}catch(F){return E.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:E,warnings:j}}};if(W)return await r8.track("validateConfiguration",B);return B()}async validateWithSchemaFile($,w,A){try{if(!J9(w))throw new lY(w,[{path:"",message:"Schema file does not exist"}]);let Y=await import(w),f=Y.default||Y;if(Array.isArray(f))return this.validateWithRules($,f,A);else return this.validateWithJSONSchema($,f,A)}catch(Y){throw new lY(w,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema($,w,A){let Y=[],f=[];return this.validateObjectAgainstSchema($,w,"",Y,f,A),{isValid:Y.length===0,errors:Y,warnings:f}}validateObjectAgainstSchema($,w,A,Y,f,X){if(X.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(U)){if(Y.push({path:A,message:`Expected type ${W.join(" or ")}, got ${U}`,expected:W.join(" or "),actual:U,rule:"type"}),X.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(Y.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),X.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)Y.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)Y.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))Y.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)Y.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)Y.push({path:A,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 W=A?`${A}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,W,Y,f,X),X.stopOnFirstError&&Y.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(X.validateRequired&&w.required){for(let W of w.required)if(!(W in U)){if(Y.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),X.stopOnFirstError)return}}if(w.properties){for(let[W,J]of Object.entries(w.properties))if(W in U){let B=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(U[W],J,B,Y,f,X),X.stopOnFirstError&&Y.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let J of Object.keys(U))if(!W.has(J))f.push({path:A?`${A}.${J}`:J,message:`Additional property '${J}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let Y=[],f=[];for(let X of w)try{let U=this.getValueByPath($,X.path),W=this.validateWithRule(U,X,X.path);if(Y.push(...W),A.stopOnFirstError&&Y.length>0)break}catch(U){Y.push({path:X.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:f}}validateWithRule($,w,A){let Y=[];if(w.required&&($===void 0||$===null))return Y.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),Y;if($===void 0||$===null)return Y;if(w.type){let f=Array.isArray($)?"array":typeof $;if(f!==w.type)Y.push({path:A,message:w.message||`Expected type ${w.type}, got ${f}`,expected:w.type,actual:f,rule:"type"})}if(w.min!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f<w.min)Y.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:f,rule:"min"})}if(w.max!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f>w.max)Y.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:f,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))Y.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))Y.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let f=w.validator($);if(f)Y.push({path:A,message:w.message||f,rule:"custom"})}return Y}getValueByPath($,w){if(!w)return $;let A=w.split("."),Y=$;for(let f of A)if(Y&&typeof Y==="object"&&f in Y)Y=Y[f];else return;return Y}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of A){let[,f,X,U]=Y;w.push({path:f,required:!X,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:L5},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function O5($){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((A)=>`"${A}"`).join(", ")}`}class Hj{fileLoader=new zj;envProcessor=new fU;validator=new Gj;async loadConfig($){let w=Date.now(),{cache:A,performance:Y,schema:f,validate:X,...U}=$;try{if(A?.enabled){let J=this.checkCache(U.name||"",U);if(J)return J}let W;try{W=await this.loadConfigurationStrategies(U,!0,A)}catch(J){let B=U.__strictErrorHandling;if(J instanceof Error&&J.name==="ConfigNotFoundError"){if(B)throw J;W={...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(J instanceof Error&&J.name==="ConfigLoadError"){let E=J.message.includes("EACCES")||J.message.includes("EPERM")||J.message.includes("permission denied"),j=!E&&(J.message.includes("syntax")||J.message.includes("Expected")||J.message.includes("Unexpected")||J.message.includes("BuildMessage")||J.message.includes("errors building")),T=J.message.includes("Configuration must export a valid object")||J.message.includes("Configuration file is empty and exports nothing");if(B&&(T||E))throw J;if(j&&(!B||!T))W={...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(!B)W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${J.message}`]};else throw J}else W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${J instanceof Error?J.message:String(J)}`]}}if(f||X)await this.validateConfiguration(W.config,f,X,U.name);if(A?.enabled&&W)this.cacheResult(U.name||"",W,A,U);if(Y?.enabled){let J={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(J);if(Y.slowThreshold&&J.duration>Y.slowThreshold)P0.warn(`Slow configuration loading detected: ${J.duration}ms for ${U.name}`);W.metrics=J}return W}catch(W){if(W instanceof Error&&W.name==="ConfigNotFoundError")throw W;let J=Date.now()-w;throw P0.error(`Configuration loading failed after ${J}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:Y="",alias:f,cwd:X,configDir:U,defaultConfig:W,checkEnv:J=!0,arrayStrategy:B="replace",verbose:E=!1}=$,j=X||rY.cwd(),T=[],F=await this.loadLocalConfiguration(Y,f,j,U,W,B,E,J,A);if(F)return T.push(...this.getLocalSearchPaths(Y,f,j,U)),this.finalizeResult(F,T,J,Y,E);let H=await this.loadHomeConfiguration(Y,f,W,B,E,J);if(H)return T.push(...this.getHomeSearchPaths(Y,f)),this.finalizeResult(H,T,J,Y,E);let G=await this.loadPackageJsonConfiguration(Y,f,j,W,B,E,J);if(G)return T.push(f0(j,"package.json")),this.finalizeResult(G,T,J,Y,E);if(T.push(...this.getAllSearchPaths(Y,f,j,U)),w)throw W1.configNotFound(Y,T,f);return{...await this.applyEnvironmentVariables(Y,W,J,E),warnings:[`No configuration file found for "${Y}"${O5(f)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,Y,f,X,U,W,J){let B=W?MY($,f,U):f,E=this.getLocalDirectories(A,Y);for(let j of E){if(U)P0.info(`Searching for configuration in: ${j}`);let T=this.fileLoader.generateConfigPaths($,j,w),F=await this.fileLoader.tryLoadFromPaths(T,B,{arrayStrategy:X,verbose:U,cacheTtl:J?.ttl,useCache:!J?.ttl||J.ttl>100});if(F){if(U)P0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,Y,f,X){if(!$)return null;let U=X?MY($,A,f):A,W=[f0(rw(),".config",$),f0(rw(),".config"),rw()];for(let J of W){if(f)P0.info(`Checking home directory: ${J}`);let B=this.fileLoader.generateConfigPaths($,J,w),E=await this.fileLoader.tryLoadFromPaths(B,U,{arrayStrategy:Y,verbose:f});if(E){if(f)P0.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration($,w,A,Y,f,X,U){let W=U?MY($,Y,X):Y;try{let J=f0(A,"package.json");if(!NH(J))return null;let B={};try{B=JSON.parse(yH(J,"utf8"))}catch(T){if(X)P0.warn("Failed to parse package.json:",[T instanceof Error?T:Error(String(T))]);return null}let E=B[$],j=$;if(!E&&w){let T=Array.isArray(w)?w:[w];for(let F of T){if(!F)continue;if(B[F]){E=B[F],j=F;break}}}if(E&&typeof E==="object"&&!Array.isArray(E)){if(X)P0.success(`Configuration loaded from package.json: ${j}`);return{config:Fj(W,E,f),source:{type:"package.json",path:J,priority:30,timestamp:new Date}}}}catch(J){if(X)P0.warn("Failed to load package.json:",[J instanceof Error?J:Error(String(J))])}return null}async applyEnvironmentVariables($,w,A,Y){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:MY($,w,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,Y,f){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,Y){let f=[];if(A){let X=A($);if(X)f.push(...X)}if(w){let X=await this.validator.validateConfiguration($,w);if(!X.isValid)f.push(...X.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(f.length>0)throw W1.configValidation(Y||"unknown",f,Y)}checkCache($,w){let A=this.generateCacheKey($,w);return PY.get(A)||null}cacheResult($,w,A,Y){let f=this.generateCacheKey($,Y);PY.set(f,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias){let Y=Array.isArray(w.alias)?w.alias.join(","):w.alias;A.push(`alias:${Y}`)}if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,f0($,"config"),f0($,".config"),w?f0($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,Y){let f=[];return f.push(...this.getLocalSearchPaths($,w,A,Y)),f.push(...this.getHomeSearchPaths($,w)),f.push(f0(A,"package.json")),f}getLocalSearchPaths($,w,A,Y){let f=this.getLocalDirectories(A,Y),X=[];for(let U of f)X.push(...this.fileLoader.generateConfigPaths($,U,w));return X}getHomeSearchPaths($,w){if(!$)return[];let A=[f0(rw(),".config",$),f0(rw(),".config"),rw()],Y=[];for(let f of A)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}async loadConfigWithResult($){return this.loadConfig($)}}function MY($,w,A=!1){let Y=new fU,f=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function X(U,W=[]){let J={...U};for(let[B,E]of Object.entries(U)){let j=[...W,B],T=[`${f}_${j.join("_").toUpperCase()}`,`${f}_${j.map((G)=>G.toUpperCase()).join("")}`,`${f}_${j.map((G)=>G.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,H;for(let G of T)if(F=rY.env[G],F!==void 0){H=G;break}if(F!==void 0&&H)if(typeof E==="boolean")J[B]=["true","1","yes"].includes(F.toLowerCase());else if(typeof E==="number"){let G=Number(F);if(!Number.isNaN(G))J[B]=G}else if(Array.isArray(E))try{J[B]=JSON.parse(F)}catch{J[B]=F.split(",").map((G)=>G.trim())}else J[B]=F;else if(E&&typeof E==="object"&&!Array.isArray(E))J[B]=X(E,j)}return J}return X(w)}function l8($,w){let A=[];function Y(f){let X;try{X=GE.readdirSync(f)}catch{return}for(let U of X){let W=G0.join(f,U);try{if(GE.statSync(W).isDirectory())Y(W);else if(U===w)A.push(f)}catch{continue}}}return Y($),A}function I($,w,A){if(A||W$.verbose)console.debug(`[tlsx:${$}] ${w}`)}function hj(){return Rj.env.SUDO_PASSWORD}function x5($){let w=$.toLowerCase();return k5.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function gY($){if(Array.isArray($))return $.map((A)=>gY(A));if(typeof $==="string")return Z5.test($)?HE:$;if(!$||typeof $!=="object")return $;let w={};for(let[A,Y]of Object.entries($)){if(x5(A)){w[A]=HE;continue}w[A]=gY(Y)}return w}function eY($){return JSON.stringify(gY($))}function P5($){let w=hj();if(!w||!/(^|\|\s*|&&\s*|;\s*)sudo\s/.test($))return $;let A=w.replace(/'/g,"'\\''"),Y=$.replace(/(^|\|\s*|&&\s*|;\s*)sudo(?!\s+-[Sn])(\s+)/g,"$1sudo -S$2");return`echo '${A}' | ${Y}`}async function fw($,w={}){let A=P5($);try{let{stdout:Y,stderr:f}=await D5(A,{cwd:w.cwd||Rj.cwd(),timeout:w.timeout||30000});return{stdout:Y.trim(),stderr:f.trim()}}catch(Y){let f=Error(`Failed to execute command: ${$}
127
+ Error: ${Y.message}`);throw f.stack=Y.stack,f}}function qj($){if($.domain)return $.domain;if($.domains?.length)return $.domains[0];throw Error("Either domain or domains must be specified")}function XU($){let w=G0.join(Q5.homedir(),".stacks","ssl"),A=$.basePath&&$.basePath.trim()!==""?$.basePath:W$.basePath&&W$.basePath.trim()!==""?W$.basePath:w,Y=$.certPath?G0.isAbsolute($.certPath)?$.certPath:G0.join(A,$.certPath):G0.join(A,W$.certPath),f=$.keyPath?G0.isAbsolute($.keyPath)?$.keyPath:G0.join(A,$.keyPath):G0.join(A,W$.keyPath),X=$.caCertPath?G0.isAbsolute($.caCertPath)?$.caCertPath:G0.join(A,$.caCertPath):G0.join(A,W$.caCertPath);return{certPath:Y,keyPath:f,caCertPath:X,basePath:A}}function Nj($){let w=[],A=new Set;if($.domain)A.add($.domain);if($.domains?.length)$.domains.forEach((Y)=>A.add(Y));for(let Y of A)w.push({type:2,value:Y});if($.altNameIPs?.length)for(let Y of $.altNameIPs)w.push({type:7,ip:Y});if($.altNameURIs?.length)for(let Y of $.altNameURIs)w.push({type:6,value:Y});if($.subjectAltNames?.length)w.push(...$.subjectAltNames);return I(S.CERT,`Generated ${w.length} Subject Alternative Names`,$.verbose),w}function UU($){let w=$.notBeforeDays??K0.DEFAULT_NOT_BEFORE_DAYS,A=$.validityDays??($.validityYears?$.validityYears*365:K0.DEFAULT_VALIDITY_DAYS);I(S.CERT,"Calculating certificate validity dates",$.verbose);let Y=new Date(Date.now()-86400*w*1000),f=new Date(Y.getTime()+A*24*60*60*1000);return Y.setUTCHours(0,0,0,0),f.setUTCHours(23,59,59,999),I(S.CERT,`Validity period: ${Y.toISOString()} to ${f.toISOString()}`,$.verbose),{notBefore:Y,notAfter:f}}function n1($){if($<128)return Buffer.from([$]);let w=[],A=$;while(A>0)w.unshift(A&255),A>>=8;return Buffer.from([128|w.length,...w])}function s$($,w){let A=n1(w.length);return Buffer.concat([Buffer.from([$]),A,w])}function g1($){let w=$.split(".").map(Number),A=[];A.push(40*w[0]+w[1]);for(let Y=2;Y<w.length;Y++){let f=w[Y],X=[];X.unshift(f&127),f>>=7;while(f>0)X.unshift(f&127|128),f>>=7;A.push(...X)}return s$(R0.OID,Buffer.from(A))}function g8($){let w;if(typeof $==="bigint"){let A=$.toString(16).padStart(2,"0");w=Buffer.from(A.length%2?`0${A}`:A,"hex")}else if(typeof $==="number")if($===0)w=Buffer.from([0]);else{let A=$.toString(16).padStart(2,"0");w=Buffer.from(A.length%2?`0${A}`:A,"hex")}else w=$;if(w[0]&128)w=Buffer.concat([Buffer.from([0]),w]);return s$(R0.INTEGER,w)}function yj($,w=0){return s$(R0.BIT_STRING,Buffer.concat([Buffer.from([w]),$]))}function Mj($){return s$(R0.OCTET_STRING,$)}function a$(...$){return s$(R0.SEQUENCE,Buffer.concat($))}function i5(...$){return s$(R0.SET,Buffer.concat($))}function b5($){return s$(R0.PRINTABLE_STRING,Buffer.from($,"ascii"))}function c5($){return s$(R0.UTF8_STRING,Buffer.from($,"utf8"))}function u5(){return Buffer.from([R0.NULL,0])}function KE($,w,A=!0){let Y=160|$|(A?0:0),f=n1(w.length);return Buffer.concat([Buffer.from([Y]),f,w])}function RE($){let w=$.getUTCFullYear();if(w>=2050){let A=$.toISOString().replace(/[-:T]/g,"").slice(0,14)+"Z";return s$(R0.GENERALIZED_TIME,Buffer.from(A,"ascii"))}else{let A=(w%100).toString().padStart(2,"0"),Y=($.getUTCMonth()+1).toString().padStart(2,"0"),f=$.getUTCDate().toString().padStart(2,"0"),X=$.getUTCHours().toString().padStart(2,"0"),U=$.getUTCMinutes().toString().padStart(2,"0"),W=$.getUTCSeconds().toString().padStart(2,"0"),J=`${A}${Y}${f}${X}${U}${W}Z`;return s$(R0.UTC_TIME,Buffer.from(J,"ascii"))}}function n5($,w){return a$(RE($),RE(w))}function hE($){let w=[];for(let A of $){let Y;switch(A.shortName){case"CN":Y=b$.COMMON_NAME;break;case"C":Y=b$.COUNTRY;break;case"L":Y=b$.LOCALITY;break;case"ST":Y=b$.STATE;break;case"O":Y=b$.ORGANIZATION;break;case"OU":Y=b$.ORGANIZATIONAL_UNIT;break;default:continue}let f=A.shortName==="C"?b5(A.value):c5(A.value),X=a$(g1(Y),f);w.push(i5(X))}return a$(...w)}function Ij($){return a$(g1($),u5())}function v5($){return $.export({type:"spki",format:"der"})}function m5($){if($.includes(":")){let w=$;if($.includes("::")){let f=$.split("::"),X=f[0]?f[0].split(":"):[],U=f[1]?f[1].split(":"):[],W=8-X.length-U.length,J=Array.from({length:W},()=>"0");w=[...X,...J,...U].join(":")}let A=w.split(":"),Y=Buffer.alloc(16);for(let f=0;f<8;f++){let X=Number.parseInt(A[f]||"0",16);Y.writeUInt16BE(X,f*2)}return Y}else{let w=$.split(".").map((A)=>Number.parseInt(A,10));return Buffer.from(w)}}function d5($){let w=[];for(let A of $)if(A.type===2&&A.value){let Y=n1(A.value.length);w.push(Buffer.concat([Buffer.from([130]),Y,Buffer.from(A.value,"ascii")]))}else if(A.type===7&&A.ip){let Y=m5(A.ip),f=n1(Y.length);w.push(Buffer.concat([Buffer.from([135]),f,Y]))}else if(A.type===6&&A.value){let Y=n1(A.value.length);w.push(Buffer.concat([Buffer.from([134]),Y,Buffer.from(A.value,"ascii")]))}return a$(...w)}function l5($,w){if($){if(w!==void 0)return a$(s$(1,Buffer.from([255])),g8(w));return a$(s$(1,Buffer.from([255])))}return a$()}function g5($){let w=0;if($.digitalSignature)w|=128;if($.keyEncipherment)w|=32;if($.keyCertSign)w|=4;if($.cRLSign)w|=2;let A=0,Y=w;while(Y>0&&(Y&1)===0)A++,Y>>=1;if(w===0)A=7;return yj(Buffer.from([w]),A)}function t5($){let w=[];if($.serverAuth)w.push(g1(b$.SERVER_AUTH));if($.clientAuth)w.push(g1(b$.CLIENT_AUTH));return a$(...w)}function c1($,w,A){let Y=[g1($)];if(w)Y.push(s$(1,Buffer.from([255])));return Y.push(Mj(A)),a$(...Y)}function p5($){let w=[];if(w.push(KE(0,g8(2))),w.push(g8($.serialNumber)),w.push(Ij(b$.SHA256_WITH_RSA)),w.push(hE($.issuer)),w.push(n5($.notBefore,$.notAfter)),w.push(hE($.subject)),w.push(v5($.publicKey)),$.extensions){let A=[];if($.extensions.basicConstraints)A.push(c1(b$.BASIC_CONSTRAINTS,$.extensions.basicConstraints.critical??!0,l5($.extensions.basicConstraints.isCA,$.extensions.basicConstraints.pathLenConstraint)));if($.extensions.keyUsage)A.push(c1(b$.KEY_USAGE,$.extensions.keyUsage.critical??!0,g5($.extensions.keyUsage)));if($.extensions.extendedKeyUsage)A.push(c1(b$.EXTENDED_KEY_USAGE,!1,t5($.extensions.extendedKeyUsage)));if($.extensions.subjectAltName?.length)A.push(c1(b$.SUBJECT_ALT_NAME,!1,d5($.extensions.subjectAltName)));if($.extensions.subjectKeyIdentifier)A.push(c1(b$.SUBJECT_KEY_IDENTIFIER,!1,Mj($.extensions.subjectKeyIdentifier)));if(A.length>0)w.push(KE(3,a$(...A)))}return a$(...w)}function r5($,w){let A=B1.createSign("SHA256");A.update($);let Y=A.sign(w);return a$($,Ij(b$.SHA256_WITH_RSA),yj(Y))}function a5($,w){let A=$.toString("base64"),Y=[];for(let f=0;f<A.length;f+=64)Y.push(A.slice(f,f+64));return`-----BEGIN ${w}-----
128
+ ${Y.join(`
125
129
  `)}
126
130
  -----END ${w}-----
127
- `}function b8(){return A1.randomBytes(20)}function xj($=2048){let{privateKey:w,publicKey:A}=A1.generateKeyPairSync("rsa",{modulusLength:$});return{privateKey:w,publicKey:A}}function gH($){let w=$.export({type:"spki",format:"der"});return A1.createHash("sha1").update(w).digest()}function Pj($){let w={serialNumber:$.serialNumber||b8(),notBefore:$.notBefore,notAfter:$.notAfter,subject:$.subject,issuer:$.issuer||$.subject,publicKey:$.publicKey,extensions:{basicConstraints:{isCA:$.isCA??!1,critical:!0,pathLenConstraint:$.pathLenConstraint},subjectKeyIdentifier:gH($.publicKey)}};if($.keyUsage)w.extensions.keyUsage={...$.keyUsage,critical:!0};if($.extendedKeyUsage)w.extensions.extendedKeyUsage=$.extendedKeyUsage;if($.subjectAltName?.length)w.extensions.subjectAltName=$.subjectAltName;let A=mH(w),J=nH(A,$.signingKey);return{certificate:dH(J,"CERTIFICATE"),certificateDer:J}}function bj($){return $.export({type:"pkcs8",format:"pem"})}function lH($){return A1.createPrivateKey($)}function pH($){let w=new A1.X509Certificate($),A=w.publicKey,J=[],Y=w.subject.split(`
128
- `);for(let U of Y){let[Z,...B]=U.split("="),W=B.join("=");if(Z&&W)J.push({shortName:Z.trim(),value:W.trim()})}return{publicKey:A,subject:J}}async function i8($={}){C("ca","Creating new Root CA Certificate",$.verbose);let w=$.keySize||f0.DEFAULT_KEY_SIZE;C("ca",`Generating ${w}-bit RSA key pair`,$.verbose);let{privateKey:A,publicKey:J}=xj(w),Y=[{shortName:"C",value:$.countryName||Y$.countryName},{shortName:"ST",value:$.stateName||Y$.stateName},{shortName:"L",value:$.localityName||Y$.localityName},{shortName:"O",value:$.organization||"Local Development CA"},{shortName:"OU",value:$.organizationalUnit||"Certificate Authority"},{shortName:"CN",value:$.commonName||"Local Development Root CA"}],{notBefore:U,notAfter:Z}=P8({validityYears:$.validityYears||f0.DEFAULT_CA_VALIDITY_YEARS,verbose:$.verbose}),{certificate:B}=Pj({serialNumber:b8(),notBefore:U,notAfter:Z,subject:Y,publicKey:J,signingKey:A,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:B,privateKey:bj(A),notBefore:U,notAfter:Z}}async function u8($){if(C("ca","Generating new certificate",$.verbose),C("ca",`Options: ${bJ($)}`,$.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}=pH($.rootCA.certificate),A=lH($.rootCA.privateKey);C("ca",`Generating ${f0.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,$.verbose);let J=f0.DEFAULT_KEY_SIZE,{privateKey:Y,publicKey:U}=xj(J),Z=$.commonName||Xj($),B=$.certificateAttributes||[{shortName:"C",value:$.countryName||Y$.countryName},{shortName:"ST",value:$.stateName||Y$.stateName},{shortName:"L",value:$.localityName||Y$.localityName},{shortName:"O",value:$.organizationName||Y$.organizationName},{shortName:"CN",value:Z}],{notBefore:W,notAfter:E}=P8({validityDays:$.validityDays||f0.DEFAULT_VALIDITY_DAYS,verbose:$.verbose}),j=_j($),F=$.keyUsage||{digitalSignature:!0,keyEncipherment:!0},f=$.extKeyUsage||{serverAuth:!0},{certificate:z}=Pj({serialNumber:b8(),notBefore:W,notAfter:E,subject:B,issuer:w,publicKey:U,signingKey:A,isCA:$.basicConstraints?.cA??!1,pathLenConstraint:$.basicConstraints?.pathLenConstraint,keyUsage:F,extendedKeyUsage:f,subjectAltName:j});return{certificate:z,privateKey:bj(Y),notBefore:W,notAfter:E}}function ij($,w){C(L.STORAGE,`Storing certificate and private key with options: ${bJ(w)}`,w?.verbose);let{certPath:A,keyPath:J}=x8({basePath:w?.basePath,certPath:w?.certPath,keyPath:w?.keyPath});C(L.STORAGE,`Certificate path: ${A}`,w?.verbose),C(L.STORAGE,`Private key path: ${J}`,w?.verbose);let Y=C8.dirname(A);if(!b0.existsSync(Y))C(L.STORAGE,`Creating certificate directory: ${Y}`,w?.verbose),b0.mkdirSync(Y,{recursive:!0});C(L.STORAGE,"Writing certificate file",w?.verbose),b0.writeFileSync(A,$.certificate);let U=C8.dirname(J);if(!b0.existsSync(U))C(L.STORAGE,`Creating private key directory: ${U}`,w?.verbose),b0.mkdirSync(U,{recursive:!0});return C(L.STORAGE,"Writing private key file",w?.verbose),b0.writeFileSync(J,$.privateKey),C(L.STORAGE,"Certificate and private key stored successfully",w?.verbose),A}function uj($,w){C(L.STORAGE,"Storing CA certificate",w?.verbose);let{caCertPath:A}=x8({basePath:w?.basePath,caCertPath:w?.caCertPath});C(L.STORAGE,`CA certificate path: ${A}`,w?.verbose);let J=C8.dirname(A);if(!b0.existsSync(J))C(L.STORAGE,`Creating CA certificate directory: ${J}`,w?.verbose),b0.mkdirSync(J,{recursive:!0});return C(L.STORAGE,"Writing CA certificate file",w?.verbose),b0.writeFileSync(A,$),C(L.STORAGE,"CA certificate stored successfully",w?.verbose),A}async function tH($,w){if(DJ.platform()!=="darwin")return!1;try{let A=dE(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`).toString().trim().split("=")[1]?.trim()||"";if(!A)return C(L.TRUST,"Could not extract certificate fingerprint",w),!1;try{if(dE("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256 2>/dev/null || true").toString().includes(A))return C(L.TRUST,"Certificate fingerprint found in system keychain",w),!0}catch{}return C(L.TRUST,"Certificate fingerprint not found in system keychain",w),!1}catch(A){return C(L.TRUST,`Error checking certificate trust: ${A}`,w),!1}}async function c8($,w,A){C(L.TRUST,`Adding certificate to system trust store with options: ${bJ(A)}`,A?.verbose),C(L.TRUST,"Storing certificate and private key",A?.verbose);let J=ij($,A);C(L.TRUST,"Storing CA certificate",A?.verbose);let Y=uj(w,A),U=DJ.platform();C(L.TRUST,`Detected platform: ${U}`,A?.verbose);let Z=oH[U];if(!Z){let B=`Unsupported platform: ${U}`;throw C(L.TRUST,`Error: ${B}`,A?.verbose),Error(B)}return await Z.addCertificate(Y,A),C(L.TRUST,"Certificate successfully added to system trust store",A?.verbose),J}var wR,NJ,L8,AT,JT=($)=>$,UT=($,w)=>{for(var A in w)AT($,A,{get:w[A],enumerable:!0,configurable:!0,set:YT.bind(w,A)})},ZT=($,w)=>()=>($&&(w=$($=0)),w),rE,Yj,$1,i1,Uj,QT,kT,VE,fJ,f8,C$,l,xT,SE,PT,OE,bT,iT,U8,uT,XE,_E,Z8,cT,vT,mT,nT,GJ,Zj,dT,L$,gT,lT,DE,TJ,G8,j$,Q,pT,QE,tT,kE,rT,aT,W8,sT,xE,PE,oT,B8,eT,$H,wH,AH,JH,HJ,Wj,YH,UH="0.15.6",p$,yJ,x1,T8,H8,VJ,q8,K8,P1,h8,R8,ww,Bj,Ej,z0,i0,jj,Fj,ZH,BH,zj,SJ,yN,q$,b,VN,jH,SN,FH,ON,XN,bE,_N,zH,fH,DN,iE,QN,kN,xN,PN,bN,E8,GH,iN,T0,Gj,OJ,Tj,Hj,Q8,qj,Kj,XJ,hj,Rj,w1,NH,Q0,uN,cN,vN,Vj,Y$,f0,L,ew,yH,cE="[redacted]",VH,SH,G0,x$,rH,aH,sH,oH;var cj=h$(()=>{wR=G2(import.meta.url);NJ=new pE,L8=new tE,AT=Object.defineProperty;rE={};UT(rE,{withErrorRecovery:()=>oE,tryLoadConfig:()=>OT,loadConfigWithResult:()=>VT,loadConfig:()=>Jj,isRetryableError:()=>NT,isConfigNotFoundError:()=>RT,isBunfigError:()=>eE,globalPerformanceMonitor:()=>i1,globalCache:()=>$1,getEnvOrDefault:()=>MT,generateConfigTypes:()=>XT,defaultGeneratedDir:()=>Fj,defaultConfigDir:()=>jj,deepMergeWithArrayStrategy:()=>X8,deepMerge:()=>$j,createLibraryConfig:()=>_T,config:()=>ST,bunfigPlugin:()=>DT,applyEnvVarsToConfig:()=>D1,TypeGenerationError:()=>K8,SchemaValidationError:()=>P1,PluginError:()=>R8,PerformanceMonitor:()=>V8,FileSystemError:()=>q8,ErrorFactory:()=>ww,EnvVarError:()=>VJ,EnvProcessor:()=>kJ,ConfigValidator:()=>_8,ConfigValidationError:()=>T8,ConfigNotFoundError:()=>yJ,ConfigMergeError:()=>H8,ConfigLoader:()=>D8,ConfigLoadError:()=>x1,ConfigFileLoader:()=>xJ,ConfigCache:()=>y8,CacheUtils:()=>Uj,BunfigError:()=>p$,BrowserConfigError:()=>h8,ArrayMergeStrategies:()=>Bj});ZH=ZT(async()=>{Yj=import.meta.require,$1=new y8,i1=new V8,Uj={createKey:WT,isEquivalent:BT,estimateMemoryUsage:ET},QT=hJ(F8.cwd(),"config"),kT=hJ(F8.cwd(),"src/generated"),VE=KJ.env.CLARITY_LOG_DIR||M2(zT(),"logs"),fJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:VE,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},f8=await fT(),C$={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"},l=C$,xT=C$.red,SE=C$.green,PT=C$.yellow,OE=C$.blue,bT=C$.magenta,iT=C$.cyan,U8=C$.white,uT=C$.gray,XE=C$.bgRed,_E=C$.bgYellow,Z8=C$.bold,cT=C$.dim,vT=C$.italic,mT=C$.underline,nT=C$.reset,GJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Zj={debug:"\uD83D\uDD0D",info:OE("ℹ"),success:SE("✓"),warning:_E(U8(Z8(" WARN "))),error:XE(U8(Z8(" ERROR ")))},dT=new IJ("stacks"),L$=new IJ("bunfig",{showTags:!0}),gT=Q$(k1.cwd(),"config"),lT=Q$(k1.cwd(),"src/generated"),DE=qJ.env.CLARITY_LOG_DIR||R2(qT(),"logs"),TJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:DE,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},G8=await KT(),j$={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"},Q=j$,pT=j$.red,QE=j$.green,tT=j$.yellow,kE=j$.blue,rT=j$.magenta,aT=j$.cyan,W8=j$.white,sT=j$.gray,xE=j$.bgRed,PE=j$.bgYellow,oT=j$.bgGray,B8=j$.bold,eT=j$.dim,$H=j$.italic,wH=j$.underline,AH=j$.strikethrough,JH=j$.reset,HJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Wj={debug:"\uD83D\uDD0D",info:kE("ℹ"),success:QE("✓"),warning:PE(W8(B8(" WARN "))),error:xE(W8(B8(" ERROR ")))},YH=new LJ("stacks"),p$=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,A])=>`${w}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}},yJ=class extends p${code="CONFIG_NOT_FOUND";constructor($,w,A){let J=A?` or alias "${A}"`:"";super(`Configuration "${$}"${J} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}},x1=class extends p${code="CONFIG_LOAD_ERROR";constructor($,w,A){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:A,originalError:w.name,originalMessage:w.message});this.cause=w}},T8=class extends p${code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}},H8=class extends p${code="CONFIG_MERGE_ERROR";constructor($,w,A,J){super(`Failed to merge configuration from "${$}" with "${w}": ${A.message}`,{sourcePath:$,targetPath:w,configName:J,originalError:A.name,originalMessage:A.message});this.cause=A}},VJ=class extends p${code="ENV_VAR_ERROR";constructor($,w,A,J){super(`Failed to parse environment variable "${$}" with value "${w}" as ${A}`,{envKey:$,envValue:w,expectedType:A,configName:J})}},q8=class extends p${code="FILE_SYSTEM_ERROR";constructor($,w,A){super(`File system ${$} failed for "${w}": ${A.message}`,{operation:$,path:w,originalError:A.name,originalMessage:A.message});this.cause=A}},K8=class extends p${code="TYPE_GENERATION_ERROR";constructor($,w,A){super(`Failed to generate types from "${$}" to "${w}": ${A.message}`,{configDir:$,outputPath:w,originalError:A.name,originalMessage:A.message});this.cause=A}},P1=class extends p${code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}},h8=class extends p${code="BROWSER_CONFIG_ERROR";constructor($,w,A,J){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:J})}},R8=class extends p${code="PLUGIN_ERROR";constructor($,w,A){super(`Plugin "${$}" failed during ${w}: ${A.message}`,{pluginName:$,operation:w,originalError:A.name,originalMessage:A.message});this.cause=A}},ww={configNotFound($,w,A){return new yJ($,w,A)},configLoad($,w,A){return new x1($,w,A)},configValidation($,w,A){return new T8($,w,A)},configMerge($,w,A,J){return new H8($,w,A,J)},envVar($,w,A,J){return new VJ($,w,A,J)},fileSystem($,w,A){return new q8($,w,A)},typeGeneration($,w,A){return new K8($,w,A)},schemaValidation($,w,A){return new P1($,w,A)},browserConfig($,w,A,J){return new h8($,w,A,J)},plugin($,w,A){return new R8($,w,A)}},Bj={replace:"replace",concat:"concat",smart:"smart"},Ej=/^https?:\/\//,z0=new LJ("bunfig",{showTags:!0}),i0=new D8,jj=k$(Gw.cwd(),"config"),Fj=k$(Gw.cwd(),"src/generated")});BH=RJ.env.CLARITY_LOG_DIR||d2(WH(),"logs"),zj={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:BH,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},SJ={...zj},yN=(async()=>{try{let{loadConfig:$}=await ZH().then(()=>rE),w=await $({name:"clarity",alias:"logging",defaultConfig:zj,cwd:RJ.cwd()});if(w)Object.assign(SJ,w)}catch{}return SJ})();q$={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"},b=q$,VN=q$.red,jH=q$.green,SN=q$.yellow,FH=q$.blue,ON=q$.magenta,XN=q$.cyan,bE=q$.white,_N=q$.gray,zH=q$.bgRed,fH=q$.bgYellow,DN=q$.bgGray,iE=q$.bold,QN=q$.dim,kN=q$.italic,xN=q$.underline,PN=q$.strikethrough,bN=q$.reset,E8={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},GH={debug:"\uD83D\uDD0D",info:FH("ℹ"),success:jH("✓"),warning:fH(bE(iE(" WARN "))),error:zH(bE(iE(" ERROR ")))};iN=new PJ("stacks");T0=class T0 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,A])=>`${w}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}};Gj=class Gj extends T0{code="CONFIG_NOT_FOUND";constructor($,w,A){let J=A===void 0?[]:Array.isArray(A)?A.filter(Boolean):[A],Y="";if(J.length===1)Y=` or alias "${J[0]}"`;else if(J.length>1)Y=` or aliases ${J.map((U)=>`"${U}"`).join(", ")}`;super(`Configuration "${$}"${Y} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}};OJ=class OJ extends T0{code="CONFIG_LOAD_ERROR";constructor($,w,A){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:A,originalError:w.name,originalMessage:w.message});this.cause=w}};Tj=class Tj extends T0{code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}};Hj=class Hj extends T0{code="CONFIG_MERGE_ERROR";constructor($,w,A,J){super(`Failed to merge configuration from "${$}" with "${w}": ${A.message}`,{sourcePath:$,targetPath:w,configName:J,originalError:A.name,originalMessage:A.message});this.cause=A}};Q8=class Q8 extends T0{code="ENV_VAR_ERROR";constructor($,w,A,J){super(`Failed to parse environment variable "${$}" with value "${w}" as ${A}`,{envKey:$,envValue:w,expectedType:A,configName:J})}};qj=class qj extends T0{code="FILE_SYSTEM_ERROR";constructor($,w,A){super(`File system ${$} failed for "${w}": ${A.message}`,{operation:$,path:w,originalError:A.name,originalMessage:A.message});this.cause=A}};Kj=class Kj extends T0{code="TYPE_GENERATION_ERROR";constructor($,w,A){super(`Failed to generate types from "${$}" to "${w}": ${A.message}`,{configDir:$,outputPath:w,originalError:A.name,originalMessage:A.message});this.cause=A}};XJ=class XJ extends T0{code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}};hj=class hj extends T0{code="BROWSER_CONFIG_ERROR";constructor($,w,A,J){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:J})}};Rj=class Rj extends T0{code="PLUGIN_ERROR";constructor($,w,A){super(`Plugin "${$}" failed during ${w}: ${A.message}`,{pluginName:$,operation:w,originalError:A.name,originalMessage:A.message});this.cause=A}};w1={configNotFound($,w,A){return new Gj($,w,A)},configLoad($,w,A){return new OJ($,w,A)},configValidation($,w,A){return new Tj($,w,A)},configMerge($,w,A,J){return new Hj($,w,A,J)},envVar($,w,A,J){return new Q8($,w,A,J)},fileSystem($,w,A){return new qj($,w,A)},typeGeneration($,w,A){return new Kj($,w,A)},schemaValidation($,w,A){return new XJ($,w,A)},browserConfig($,w,A,J){return new hj($,w,A,J)},plugin($,w,A){return new Rj($,w,A)}};NH=/^https?:\/\//;Q0=new PJ("bunfig",{showTags:!0});uN=new yj;cN=$0(QJ.cwd(),"config"),vN=$0(QJ.cwd(),"src/generated"),Vj={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:dU.join(nU.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:dU.join(nU.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:dU.join(nU.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},Y$=Vj,f0={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"},L={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"},ew={info:(...$)=>console.log(...$),warn:(...$)=>console.warn(...$),success:(...$)=>console.log(...$),error:(...$)=>console.error(...$),debug:(...$)=>console.debug(...$)};yH=LH(IH);VH=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),SH=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/;G0={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},x$={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"};rH={platform:"darwin",async addCertificate($,w){if(await tH($,w?.verbose)){C(L.TRUST,"Certificate is already trusted, skipping trust store update",w?.verbose),ew.success("Certificate is already trusted in system keychain");return}C(L.TRUST,"Adding certificate to macOS keychain",w?.verbose),await $w(`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ${$}`)},async removeCertificate($,w,A){let J=A||Y$.commonName;C(L.TRUST,`Removing certificate ${J} from macOS keychain`,w?.verbose);try{await $w(`sudo security delete-certificate -c "${J}" /Library/Keychains/System.keychain`),C(L.TRUST,`Removed certificate ${J} from macOS keychain`,w?.verbose)}catch(Y){throw C(L.TRUST,`Error removing certificate: ${Y}`,w?.verbose),Y}}},aH={platform:"win32",async addCertificate($,w){C(L.TRUST,"Adding certificate to Windows certificate store",w?.verbose),await $w(`certutil -f -v -addstore -enterprise Root ${$}`)},async removeCertificate($,w,A){let J=A||Y$.commonName;C(L.TRUST,`Removing certificate ${J} from Windows certificate store`,w?.verbose);try{await $w(`certutil -delstore -enterprise Root "${J}"`),C(L.TRUST,`Removed certificate ${J} from Windows certificate store`,w?.verbose)}catch(Y){throw C(L.TRUST,`Error removing certificate: ${Y}`,w?.verbose),Y}}},sH={platform:"linux",async addCertificate($,w){C(L.TRUST,"Adding certificate to Linux certificate store",w?.verbose);let A=DJ.homedir(),J=f0.LINUX_CERT_DB_FILENAME,Y=f0.LINUX_TRUST_ARGS;C(L.TRUST,`Searching for certificate databases in ${A}`,w?.verbose);let U=M8(A,J);if(U.length===0){ew.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let Z of U){C(L.TRUST,`Processing certificate database in ${Z}`,w?.verbose);try{C(L.TRUST,`Attempting to delete existing cert for ${Y$.commonName}`,w?.verbose),await $w(`certutil -d sql:${Z} -D -n ${Y$.commonName}`)}catch(B){C(L.TRUST,`Warning: Error deleting existing cert: ${B}`,w?.verbose),console.warn(`Error deleting existing cert: ${B}`)}C(L.TRUST,`Adding new certificate to ${Z}`,w?.verbose),await $w(`certutil -d sql:${Z} -A -t ${Y} -n ${Y$.commonName} -i ${$}`),ew.info(`Cert added to ${Z}`)}},async removeCertificate($,w,A){let J=A||Y$.commonName;C(L.TRUST,`Removing certificate ${J} from Linux certificate store`,w?.verbose);let Y=DJ.homedir(),U=f0.LINUX_CERT_DB_FILENAME;C(L.TRUST,`Searching for certificate databases in ${Y}`,w?.verbose);let Z=M8(Y,U);if(Z.length===0){ew.warn("No certificate databases found. Cannot remove certificate.");return}for(let B of Z){C(L.TRUST,`Processing certificate database in ${B}`,w?.verbose);try{await $w(`certutil -d sql:${B} -D -n "${J}"`),ew.info(`Cert removed from ${B}`)}catch(W){C(L.TRUST,`Error removing cert from ${B}: ${W}`,w?.verbose),console.warn(`Error removing cert from ${B}: ${W}`)}}}},oH={darwin:rH,win32:aH,linux:sH}});var vj=h$(()=>{cj()});import{homedir as v8}from"node:os";import{join as m8,resolve as XM}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",eH,n8;var d8=h$(()=>{cU();eH={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:m8(v8(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:m8(v8(),".stacks","ssl","stacks.localhost.crt"),keyPath:m8(v8(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0},n8=eH});import{execSync as $7}from"node:child_process";function mj($){return($.includes("=")?$.split("=").pop():$).replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase()}function iJ($){try{let w=$7(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`,{encoding:"utf8"});return mj(w)}catch{return null}}var g8=()=>{};import{existsSync as nj,statSync as dj}from"fs";import{existsSync as jZ,mkdirSync as Z7,readdirSync as W7,writeFileSync as B7}from"fs";import{homedir as J1}from"os";import{dirname as gj,resolve as b$}from"path";import Tw from"process";import{join as E7,relative as j7,resolve as lj}from"path";import wY from"process";import{existsSync as SF,mkdirSync as nM,readdirSync as dM,writeFileSync as gM}from"fs";import{homedir as l8}from"os";import{dirname as tM,resolve as P$}from"path";import c1 from"process";import{join as F7,relative as z7,resolve as pj}from"path";import AY from"process";import{existsSync as OF,mkdirSync as eM,readdirSync as $I,writeFileSync as wI}from"fs";import{dirname as JI,resolve as JY}from"path";import FZ from"process";import{Buffer as Aw}from"buffer";import{createCipheriv as f7,createDecipheriv as G7,randomBytes as p8}from"crypto";import{closeSync as t8,createReadStream as tj,createWriteStream as T7,existsSync as r8,fsyncSync as rj,openSync as aj,writeFileSync as H7}from"fs";import{access as q7,constants as sj,mkdir as K7,readdir as uJ,rename as oj,stat as Y1,unlink as cJ,writeFile as a8}from"fs/promises";import{join as U1}from"path";import y$ from"process";import{pipeline as h7}from"stream/promises";import{createGzip as ej}from"zlib";import Z1 from"process";import v0 from"process";import{Buffer as u0}from"buffer";import{createCipheriv as R7,createDecipheriv as N7,randomBytes as s8}from"crypto";import{closeSync as o8,createReadStream as $F,createWriteStream as M7,existsSync as vJ,fsyncSync as wF,openSync as AF,writeFileSync as I7}from"fs";import{access as C7,constants as JF,mkdir as L7,readdir as mJ,rename as YF,stat as W1,unlink as nJ,writeFile as e8}from"fs/promises";import{isAbsolute as y7,join as B1,resolve as V7}from"path";import X from"process";import{pipeline as S7}from"stream/promises";import{createGzip as UF}from"zlib";import E1 from"process";import m0 from"process";import dJ from"process";import{existsSync as gJ}from"fs";import{resolve as $Z}from"path";import{existsSync as O7}from"fs";import{existsSync as X7,readdirSync as _7}from"fs";import{extname as wZ,resolve as ZF}from"path";import D7 from"process";import{join as Q5,relative as k5,resolve as KF}from"path";import jY from"process";import{Buffer as c0}from"buffer";import{createCipheriv as b5,createDecipheriv as i5,randomBytes as ZZ}from"crypto";import{closeSync as WZ,createReadStream as hF,createWriteStream as u5,existsSync as pJ,fsyncSync as RF,openSync as NF,writeFileSync as c5}from"fs";import{access as v5,constants as MF,mkdir as m5,readdir as tJ,rename as IF,stat as j1,unlink as rJ,writeFile as BZ}from"fs/promises";import{isAbsolute as n5,join as F1,resolve as d5}from"path";import _ from"process";import{pipeline as g5}from"stream/promises";import{createGzip as CF}from"zlib";import z1 from"process";import n0 from"process";function J7($,w){this[$]=A7.bind(null,w)}class NZ{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,J])=>A.timestamp.getTime()-J.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,J){if(!this.options.enabled)return;let Y=this.generateKey($,A),U=J??this.options.ttl,Z=this.estimateSize(w);this.cache.set(Y,{value:w,timestamp:new Date,ttl:U,hits:0,size:Z}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),J=this.cache.get(A);if(!J){this.totalMisses++;return}if(this.isExpired(J)){this.cache.delete(A),this.totalMisses++;return}return J.hits++,this.totalHits++,J.value}isFileModified($,w){try{if(!nj($))return!0;return dj($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,J){try{let Y=nj(A)?dj(A):null,U=Y?Y.mtime:new Date;this.set($,{value:w,fileTimestamp:U},A,J)}catch{this.set($,w,A,J)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((J,Y)=>J+Y.size,0),A=$.map((J)=>J.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let J=A;this.cache.set(w,{value:J.value,timestamp:new Date(J.timestamp),ttl:J.ttl,hits:J.hits,size:J.size})}}}class MZ{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),Y=new Date;try{let U=await w(),Z=performance.now()-J;return this.recordMetric({operation:$,duration:Z,timestamp:Y,...A}),U}catch(U){let Z=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:Z,timestamp:Y,...A}),U}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((Y)=>Y.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((Y)=>Y.duration),J=A.reduce((Y,U)=>Y+U,0);return{count:w.length,averageDuration:J/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:J,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function Q7($,w={}){let J=Object.keys(w).sort().map((Y)=>`${Y}:${w[Y]}`).join("|");return J?`${$}:${J}`:$}function k7($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function x7($){return $.getStats().size*2}function IZ($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&s(w[0])&&"id"in w[0]&&w[0].id===3&&s(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(s(w)&&s($)&&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(s($)&&"arr"in $&&Array.isArray($.arr)&&s(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&s(w[0])&&s($[0])){let J=[...w];for(let Y of $)if(s(Y)&&"name"in Y){if(!J.find((Z)=>s(Z)&&("name"in Z)&&Z.name===Y.name))J.push(Y)}else if(s(Y)&&"path"in Y){if(!J.find((Z)=>s(Z)&&("path"in Z)&&Z.path===Y.path))J.push(Y)}else if(!J.some((U)=>YY(U,Y)))J.push(Y);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}if(!s(w)||!s($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let Y=w[J];if(Y===null||Y===void 0)continue;else if(s(Y)&&s(A[J]))A[J]=IZ(A[J],Y);else if(Array.isArray(Y)&&Array.isArray(A[J]))if(Y.length>0&&A[J].length>0&&s(Y[0])&&s(A[J][0])){let U=[...Y];for(let Z of A[J])if(s(Z)&&"name"in Z){if(!U.find((W)=>s(W)&&("name"in W)&&W.name===Z.name))U.push(Z)}else if(s(Z)&&"path"in Z){if(!U.find((W)=>s(W)&&("path"in W)&&W.path===Z.path))U.push(Z)}else if(!U.some((B)=>YY(B,Z)))U.push(Z);A[J]=U}else if(Y.every((U)=>typeof U==="string")&&A[J].every((U)=>typeof U==="string")){let U=[...Y];for(let Z of A[J])if(!U.includes(Z))U.push(Z);A[J]=U}else A[J]=Y;else A[J]=Y}return A}function YY($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!YY($[A],w[A]))return!1;return!0}if(s($)&&s(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!YY($[Y],w[Y]))return!1}return!0}return!1}function s($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function P7($,w){if(!OF($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return IZ(w,J)}catch{return null}}catch{return null}}async function b7({name:$="",cwd:w,defaultConfig:A}){let J=w||FZ.cwd(),Y=[".ts",".js",".mjs",".cjs",".json"],U=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let Z of U)for(let B of Y){let W=JY(J,`${Z}${B}`),E=await P7(W,A);if(E!==null)return E}try{let Z=JY(J,"package.json");if(OF(Z)){let W=(await import(Z))[$];if(W&&typeof W==="object"&&!Array.isArray(W))try{return IZ(A,W)}catch{}}}catch{}return A}function i7($,w={}){let A=AY.cwd();while(A.includes("storage"))A=pj(A,"..");let J=pj(A,$||"");if(w?.relative)return z7(AY.cwd(),J);return J}async function u7(){try{let $=await b7({name:"clarity",defaultConfig:sJ,cwd:AY.cwd(),endpoint:"",headers:{}});return{...sJ,...$}}catch{return sJ}}function A$(){if(v0.env.NODE_ENV==="test"||v0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function c7(){if(v0.env.NODE_ENV==="test"||v0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof v0<"u"){let $=v0.type;if($==="renderer"||$==="worker")return!1;return!!(v0.versions&&(v0.versions.node||v0.versions.bun))}return!1}class XF{async format($){let w=await c7(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}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 UY{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={...fZ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new XF,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??y$.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...oJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...oJ};return{...oJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:fZ.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}async writeToFile($){let A=(async()=>{let Y,U=0,Z=3,B=1000;while(U<Z)try{try{try{await q7(this.config.logDirectory,sj.F_OK|sj.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await K7(this.config.logDirectory,{recursive:!0,mode:493});else if(E.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw E;else throw E}}catch(E){throw console.error("Debug: [writeToFile] Failed to create log directory:",E),E}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:Aw.from($);try{if(!r8(this.currentLogFile))await a8(this.currentLogFile,"",{mode:420});if(Y=aj(this.currentLogFile,"a",420),H7(Y,W,{flag:"a"}),rj(Y),Y!==void 0)t8(Y),Y=void 0;if((await Y1(this.currentLogFile)).size===0){if(await a8(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(E){let j=E;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(U<Z-1){let F=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Z}:`,F);let f=B*2**U;await new Promise((z)=>setTimeout(z,f)),U++;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(Y!==void 0)try{t8(Y)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(W){if(U===Z-1){let j=W,F=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),W}U++;let E=B*2**(U-1);await new Promise((j)=>setTimeout(j,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(J,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 U1(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 U1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return U1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(A$())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 A=typeof w.interval==="number"?w.interval:60,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},J)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),J=this.generateKey();this.currentKeyId=A,this.keys.set(A,J),this.encryptionKeys.set(A,{key:J,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),U=typeof w.maxKeys==="number"?w.maxKeys:1,Z=Math.max(1,U);if(Y.length>Z)for(let[B]of Y.slice(Z))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return p8(16).toString("hex")}generateKey(){return p8(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(),A=p8(16),J=f7("aes-256-gcm",w,A),Y=Aw.concat([J.update($,"utf8"),J.final()]),U=J.getAuthTag();return{encrypted:Aw.concat([A,Y,U]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=ej(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(Aw.from(Aw.concat(Y)))),J.on("error",A),J.write($),J.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(A$())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 A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await uJ(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await Y1(A).catch(()=>null))try{if(await oj(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await cJ(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.1`;await a8(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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await Y1(A).catch(()=>null))await oj(A,U)}if(this.currentLogFile=J,w.maxFiles){let U=(await uJ(this.config.logDirectory)).filter((Z)=>Z.startsWith(this.name)).sort((Z,B)=>B.localeCompare(Z));for(let Z of U.slice(w.maxFiles))await cJ(U1(this.config.logDirectory,Z))}}}async compressLogFile($,w){let A=tj($),J=T7(w),Y=ej();await h7(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);await this.writeToFile(J),console.log(J)}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 A={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(A)}}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()})),r8(this.currentLogFile))try{let $=aj(this.currentLogFile,"r+");rj($),t8($)}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(!A$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await uJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await cJ(U1(this.config.logDirectory,A))}catch(J){console.error(`Failed to delete temp file ${A}:`,J)}}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?p.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=y$.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${p.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}async log($,w,...A){let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);if(this.fancy&&!A$()){let E=cF[$],j=this.options.showTags!==!1&&this.name?p.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:p.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.error(F);break;case"success":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:p.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:Y,icon:E,tag:j,message:Z,level:$}),console.error(F),B){let f=B.split(`
129
- `);for(let z of f)if(z.trim()&&!z.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:p.gray(` ${z}`),level:$,showTimestamp:!1}))}break}}else if(!A$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}if(!this.shouldLog($))return;let W=`${U} ${this.environment}.${$.toUpperCase()}: ${Z}
130
- `;if(B)W+=`${B}
131
- `;W=W.replace(this.ANSI_PATTERN,""),await this.writeToFile(W)}time($){let w=performance.now();if(this.fancy&&!A$()){let A=this.options.showTags!==!1&&this.name?p.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:p.blue("◐"),tag:A,message:`${p.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),E=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
132
- `,E=E.replace(this.ANSI_PATTERN,""),this.fancy&&!A$()){let j=this.options.showTags!==!1&&this.name?p.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:p.green("✓"),tag:j,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!A$())console.error(E.trim());await this.writeToFile(E)}}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}:${$}`,A=new UY(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(A),A}createReadStream(){if(A$())throw Error("createReadStream is not supported in browser environments");if(!r8(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return tj(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 A=this.keys.get(this.currentKeyId);try{let J=Aw.isBuffer($)?$:Aw.from($,"base64"),Y=J.slice(0,16),U=J.slice(-16),Z=J.slice(16,-16),B=G7("aes-256-gcm",A,Y);return B.setAuthTag(U),Aw.concat([B.update(Z),B.final()]).toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return A$()}isServerMode(){return!A$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w);if(this.fancy&&!A$()){let U=$.split(`
133
- `),Z=Math.max(...U.map((j)=>j.length))+2,B=`┌${"─".repeat(Z)}┐`,W=`└${"─".repeat(Z)}┘`,E=U.map((j)=>{let F=" ".repeat(Z-j.length-2);return`│ ${j}${F} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:A,message:p.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:A,message:p.cyan(B)})),E.forEach((j)=>console.error(this.formatConsoleMessage({timestamp:A,message:p.cyan(j),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:p.cyan(W),showTimestamp:!1}))}else if(!A$())console.error(`${J} ${this.environment}.INFO: [BOX] ${$}`);let Y=`${J} ${this.environment}.INFO: [BOX] ${$}
134
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(Y)}async prompt($){if(A$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${p.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();y$.stdin.removeListener("data",A);try{if(typeof y$.stdin.setRawMode==="function")y$.stdin.setRawMode(!1)}catch{}y$.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof y$.stdin.setRawMode==="function")y$.stdin.setRawMode(!0)}catch{}y$.stdin.resume(),y$.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let Z=/%([sdijfo%])/g,B=0;if(A=$.replace(Z,(W,E)=>{if(E==="%")return"%";if(B>=w.length)return W;let j=w[B++];switch(E){case"s":return String(j);case"d":case"i":return Number(j).toString();case"j":case"o":return JSON.stringify(j,null,2);default:return W}}),B<w.length)A+=` ${w.slice(B).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}if(this.fancy&&!A$()){let Z=this.options.showTags!==!1&&this.name?p.gray(this.formatTag(this.name)):"",B=p.blue("◐");console.error(`${B} ${Z} ${p.cyan(A)}`)}let U=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
135
- `.replace(this.ANSI_PATTERN,"");await this.writeToFile(U)}progress($,w=""){if(!this.enabled||!this.fancy||A$()||$<=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 A=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:A,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(Z,B)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||A$())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,Z)),B!==void 0)this.activeProgressBar.message=B;let W=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,W)},finish:(Z)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||A$())return;if(this.activeProgressBar.current=this.activeProgressBar.total,Z!==void 0)this.activeProgressBar.message=Z;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(Z,B="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||A$())return;y$.stdout.write(`${"\r".padEnd(y$.stdout.columns||80)}\r`),this.log(B,Z),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||A$()||!y$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=p.green("━".repeat(J)),Z=p.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=w||A===100?p.green("✓"):p.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${p.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=y$.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,y$.stdout.write($.lastRenderedLine),w)y$.stdout.write(`
136
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||A$()||!y$.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(A$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await uJ(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let U=U1(this.config.logDirectory,J);if($.before)try{if((await Y1(U)).mtime>=$.before)continue}catch(Z){console.error(`Failed to get stats for file ${U}:`,Z);continue}A.push(U)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await cJ(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function aJ($,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 J=[...w];for(let Y of $)if(d(Y)&&"name"in Y){if(!J.find((Z)=>d(Z)&&("name"in Z)&&Z.name===Y.name))J.push(Y)}else if(d(Y)&&"path"in Y){if(!J.find((Z)=>d(Z)&&("path"in Z)&&Z.path===Y.path))J.push(Y)}else if(!J.some((U)=>ZY(U,Y)))J.push(Y);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}if(!d(w)||!d($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let Y=w[J];if(Y===null||Y===void 0)continue;else if(d(Y)&&d(A[J]))A[J]=aJ(A[J],Y);else if(Array.isArray(Y)&&Array.isArray(A[J]))if(Y.length>0&&A[J].length>0&&d(Y[0])&&d(A[J][0])){let U=[...Y];for(let Z of A[J])if(d(Z)&&"name"in Z){if(!U.find((W)=>d(W)&&("name"in W)&&W.name===Z.name))U.push(Z)}else if(d(Z)&&"path"in Z){if(!U.find((W)=>d(W)&&("path"in W)&&W.path===Z.path))U.push(Z)}else if(!U.some((B)=>ZY(B,Z)))U.push(Z);A[J]=U}else if(Y.every((U)=>typeof U==="string")&&A[J].every((U)=>typeof U==="string")){let U=[...Y];for(let Z of A[J])if(!U.includes(Z))U.push(Z);A[J]=U}else A[J]=Y;else A[J]=Y}return A}function CZ($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:aJ($,w);if(Array.isArray($))return A==="replace"?w:aJ($,w);if(!d(w)||!d($))return w;let J={...$};for(let Y of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,Y))continue;let U=w[Y],Z=J[Y];if(U===null||U===void 0)continue;if(Array.isArray(U)||Array.isArray(Z))if(A==="replace")J[Y]=U;else J[Y]=aJ(Z,U);else if(d(U)&&d(Z))J[Y]=CZ(Z,U,A);else J[Y]=U}return J}function ZY($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!ZY($[A],w[A]))return!1;return!0}if(d($)&&d(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!ZY($[Y],w[Y]))return!1}return!0}return!1}function d($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function lJ($,w,A="replace"){if(!SF($))return null;try{let J=await import($),Y=J.default||J;if(typeof Y!=="object"||Y===null||Array.isArray(Y))return null;try{return CZ(w,Y,A)}catch{return null}}catch{return null}}function v7($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),Y={...w};function U(Z,B=[]){let W={...Z};for(let[E,j]of Object.entries(Z)){let F=[...B,E],f=(T)=>T.replace(/([A-Z])/g,"_$1").toUpperCase(),z=`${J}_${F.map(f).join("_")}`,H=`${J}_${F.map((T)=>T.toUpperCase()).join("_")}`;if(A)S$.info(`Checking environment variable ${z} for config ${$}.${F.join(".")}`);if(typeof j==="object"&&j!==null&&!Array.isArray(j))W[E]=U(j,F);else{let T=c1.env[z]||c1.env[H];if(T!==void 0){if(A)S$.info(`Using environment variable ${T?z:H} for config ${$}.${F.join(".")}`);if(typeof j==="number")W[E]=Number(T);else if(typeof j==="boolean")W[E]=T.toLowerCase()==="true";else if(Array.isArray(j))try{let q=JSON.parse(T);if(Array.isArray(q))W[E]=q;else W[E]=T.split(",").map((K)=>K.trim())}catch{W[E]=T.split(",").map((q)=>q.trim())}else W[E]=T}}}return W}return U(Y)}async function m7({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:Y,verbose:U=!1,checkEnv:Z=!0,arrayStrategy:B="replace"}){let W=Z&&typeof Y==="object"&&Y!==null&&!Array.isArray(Y)?v7($,Y,U):Y,E=A||c1.cwd(),j=[".ts",".js",".mjs",".cjs",".json"];if(U)S$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let F=[$,`.${$}`].filter(Boolean),f=[`${$}.config`,`.${$}.config`].filter(Boolean),z=w?[w,`.${w}`]:[],H=w?[`${w}.config`,`.${w}.config`]:[],T=Array.from(new Set([E,P$(E,"config"),P$(E,".config"),J?P$(E,J):void 0].filter(Boolean)));for(let q of T){if(U)S$.info(`Searching for configuration in: ${q}`);let h=[P$(E,"config"),P$(E,".config")].concat(J?[P$(E,J)]:[]).includes(q)?[...F,...f,...z,...H]:[...f,...F,...H,...z];for(let I of h)for(let N of j){let M=P$(q,`${I}${N}`),V=await lJ(M,W,B);if(V!==null){if(U)S$.success(`Configuration loaded from: ${M}`);return V}}}if($){let q=P$(l8(),".config",$),K=["config",`${$}.config`];if(w)K.push(`${w}.config`);if(U)S$.info(`Checking user config directory: ${q}`);for(let h of K)for(let I of j){let N=P$(q,`${h}${I}`),M=await lJ(N,W,B);if(M!==null){if(U)S$.success(`Configuration loaded from user config directory: ${N}`);return M}}}if($){let q=P$(l8(),".config"),K=[`.${$}.config`];if(w)K.push(`.${w}.config`);if(U)S$.info(`Checking user config directory for dotfile configs: ${q}`);for(let h of K)for(let I of j){let N=P$(q,`${h}${I}`),M=await lJ(N,W,B);if(M!==null){if(U)S$.success(`Configuration loaded from user config directory dotfile: ${N}`);return M}}}if($){let q=l8(),K=[`.${$}.config`,`.${$}`];if(w)K.push(`.${w}.config`),K.push(`.${w}`);if(U)S$.info(`Checking user home directory for dotfile configs: ${q}`);for(let h of K)for(let I of j){let N=P$(q,`${h}${I}`),M=await lJ(N,W,B);if(M!==null){if(U)S$.success(`Configuration loaded from user home directory: ${N}`);return M}}}try{let q=P$(E,"package.json");if(SF(q)){let K=await import(q),h=K[$];if(!h&&w){if(h=K[w],h&&U)S$.success(`Using alias "${w}" configuration from package.json`)}if(h&&typeof h==="object"&&!Array.isArray(h))try{if(U)S$.success(`Configuration loaded from package.json: ${h===K[$]?$:w}`);return CZ(W,h,B)}catch(I){if(U)S$.warn("Failed to merge package.json config:",I)}}}catch(q){if(U)S$.warn("Failed to load package.json:",q)}if(U)S$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return W}function n7($,w={}){let A=wY.cwd();while(A.includes("storage"))A=lj(A,"..");let J=lj(A,$||"");if(w?.relative)return j7(wY.cwd(),J);return J}async function d7(){try{let $=await m7({name:"clarity",alias:"logging",defaultConfig:eJ,cwd:wY.cwd()});return{...eJ,...$||{}}}catch{return eJ}}function z$(){if(m0.env.NODE_ENV==="test"||m0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function g7(){if(m0.env.NODE_ENV==="test"||m0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof m0<"u"){let $=m0.type;if($==="renderer"||$==="worker")return!1;return!!(m0.versions&&(m0.versions.node||m0.versions.bun))}return!1}class _F{async format($){let w=await g7(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}async getMetadata($){if($){let{hostname:w}=await import("os");return{pid:E1.pid,hostname:w(),environment:E1.env.NODE_ENV||"development",platform:E1.platform,version:E1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:E1.env.NODE_ENV||E1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class WY{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={...GZ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new _F,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 A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...$Y,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...$Y};return{...$Y,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:GZ.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!z$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let Y,U=0,Z=3,B=1000;while(U<Z)try{try{try{await C7(this.config.logDirectory,JF.F_OK|JF.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await L7(this.config.logDirectory,{recursive:!0,mode:493});else if(E.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw E;else throw E}}catch(E){throw console.error("Debug: [writeToFile] Failed to create log directory:",E),E}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:u0.from($);try{if(!vJ(this.currentLogFile))await e8(this.currentLogFile,"",{mode:420});if(Y=AF(this.currentLogFile,"a",420),I7(Y,W,{flag:"a"}),wF(Y),Y!==void 0)o8(Y),Y=void 0;if((await W1(this.currentLogFile)).size===0){if(await e8(this.currentLogFile,W,{flag:"w",mode:420}),(await W1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let j=E;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(U<Z-1){let F=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Z}:`,F);let f=B*2**U;await new Promise((z)=>setTimeout(z,f)),U++;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(Y!==void 0)try{o8(Y)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(W){if(U===Z-1){let j=W,F=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),W}U++;let E=B*2**(U-1);await new Promise((j)=>setTimeout(j,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(J,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 B1(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 B1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return B1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(z$())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 A=typeof w.interval==="number"?w.interval:60,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},J)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),J=this.generateKey();this.currentKeyId=A,this.keys.set(A,J),this.encryptionKeys.set(A,{key:J,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),U=typeof w.maxKeys==="number"?w.maxKeys:1,Z=Math.max(1,U);if(Y.length>Z)for(let[B]of Y.slice(Z))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return s8(16).toString("hex")}generateKey(){return s8(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(),A=s8(16),J=R7("aes-256-gcm",w,A),Y=u0.isBuffer($)?$:u0.from($,"utf8"),U=J.update(Y),Z=J.final(),B=U.length+Z.length,W=J.getAuthTag(),E=u0.allocUnsafe(16+B+16);return A.copy(E,0),U.copy(E,16),Z.copy(E,16+U.length),W.copy(E,16+B),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=UF(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(u0.from(u0.concat(Y)))),J.on("error",A),J.write($),J.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(z$())return;if(!this.shouldWriteToFile())return;let $=await W1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await mJ(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await W1(A).catch(()=>null))try{if(await YF(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await nJ(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.1`;await e8(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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await W1(A).catch(()=>null))await YF(A,U)}if(this.currentLogFile=J,w.maxFiles){let U=(await mJ(this.config.logDirectory)).filter((Z)=>Z.startsWith(this.name)).sort((Z,B)=>B.localeCompare(Z));for(let Z of U.slice(w.maxFiles))await nJ(B1(this.config.logDirectory,Z))}}}async compressLogFile($,w){let A=$F($),J=M7(w),Y=UF();await S7(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(J);console.log(J)}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()})),vJ(this.currentLogFile))try{let $=AF(this.currentLogFile,"r+");wF($),o8($)}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(!z$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await mJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await nJ(B1(this.config.logDirectory,A))}catch(J){console.error(`Failed to delete temp file ${A}:`,J)}}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()?k.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||z$())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:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=X.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${k.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,Y)=>{let U=k.underline(k.blue(J)),Z=this.toAbsoluteFilePath(Y);if(Z&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(Z)}`,W="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${B}\x1B\\${U}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${Y}\x1B\\${U}\x1B]8;;\x1B\\`;return U}),w=w.replace(/`([^`]+)`/g,(A,J)=>k.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>k.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>k.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>k.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>k.strikethrough(J)),w}supportsHyperlinks(){if(z$())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 A=X.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(y7(w)||w.startsWith("./")||w.startsWith("../"))w=V7(w);else return null;return vJ(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);let{consoleText:W,fileText:E}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":vF[$],f=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",z;switch($){case"debug":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:k.gray(W),level:$}),console.error(z);break;case"info":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"success":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:k.green(W),level:$}),console.error(z);break;case"warning":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"error":if(z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.error(z),B){let H=B.split(`
137
- `);for(let T of H)if(T.trim()&&!T.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:k.gray(` ${T}`),level:$,showTimestamp:!1}))}break}}else if(!z$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}if(!this.shouldLog($))return;let j=`${U} ${this.environment}.${$.toUpperCase()}: ${E}
138
- `;if(B)j+=`${B}
139
- `;if(j=j.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(j)}progress($,w=""){let A={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return A;let J=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:J,lastRenderedLine:""},this.shouldStyleConsole()&&!z$()&&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()&&!z$()&&X.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!z$()&&X.stdout.isTTY)X.stdout.write(`
140
- `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!z$()&&X.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:this.options.showIcons===!1?"":k.blue("◐"),tag:A,message:`${k.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),E=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
141
- `,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:B,icon:this.options.showIcons===!1?"":k.green("✓"),tag:j,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!z$())console.error(E.trim());if(this.shouldWriteToFile())await this.writeToFile(E)}}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}:${$}`,A=new WY(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(A),A}createReadStream(){if(z$())throw Error("createReadStream is not supported in browser environments");if(!vJ(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return $F(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 A=this.keys.get(this.currentKeyId);try{let J=u0.isBuffer($)?$:u0.from($,"base64"),Y=J.subarray(0,16),U=J.subarray(J.length-16),Z=J.subarray(16,J.length-16),B=N7("aes-256-gcm",A,Y);B.setAuthTag(U);let W=B.update(Z),E=B.final(),j=W.length+E.length,F=u0.allocUnsafe(j);return W.copy(F,0),E.copy(F,W.length),F.toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return z$()}isServerMode(){return!z$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w),{consoleText:Y,fileText:U}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=Y.split(`
142
- `),W=Math.max(...B.map((f)=>f.length))+2,E=`┌${"─".repeat(W)}┐`,j=`└${"─".repeat(W)}┘`,F=B.map((f)=>{return this.formatConsoleMessage({timestamp:A,message:k.cyan(f),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:k.cyan(E),showTimestamp:!1})),F.forEach((f)=>console.error(f)),console.error(this.formatConsoleMessage({timestamp:A,message:k.cyan(j),showTimestamp:!1}))}else if(!z$())console.error(`${J} ${this.environment}.INFO: [BOX] ${U}`);let Z=`${J} ${this.environment}.INFO: [BOX] ${U}
143
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Z)}async prompt($){if(z$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${k.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();X.stdin.removeListener("data",A);try{if(typeof X.stdin.setRawMode==="function")X.stdin.setRawMode(!1)}catch{}X.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof X.stdin.setRawMode==="function")X.stdin.setRawMode(!0)}catch{}X.stdin.resume(),X.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,E=0;if(A=$.replace(W,(j,F)=>{if(F==="%")return"%";if(E>=w.length)return j;let f=w[E++];switch(F){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 j}}),E<w.length)A+=` ${w.slice(E).map((j)=>typeof j==="object"?JSON.stringify(j,null,2):String(j)).join(" ")}`}let{consoleText:J,fileText:Y}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${k.blue("◐")} `;console.error(`${E}${W} ${k.cyan(J)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
144
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!X.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=k.green("━".repeat(J)),Z=k.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=this.options.showIcons===!1?"":w||A===100?k.green("✓"):k.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${k.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=X.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,X.stdout.write($.lastRenderedLine),w)X.stdout.write(`
145
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||z$()||!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(z$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await mJ(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let U=B1(this.config.logDirectory,J);if($.before)try{if((await W1(U)).mtime>=$.before)continue}catch(Z){console.error(`Failed to get stats for file ${U}:`,Z);continue}A.push(U)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await nJ(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function DF($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:Y=()=>!0,fallback:U}=w,Z=Error("Unknown error occurred");for(let B=0;B<=A;B++)try{return await $()}catch(W){if(Z=W instanceof Error?W:Error(String(W)),B===A||!Y(Z))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(U!==void 0)return U;throw Z instanceof Error?Z:Error(`Unknown error: ${String(Z)}`)}function QF($){return $ instanceof a$}function l7($){return $ instanceof BY}function p7($){if(QF($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((A)=>$.message.toLowerCase().includes(A.toLowerCase()))}class zY{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,A={}){let{prefix:J,useCamelCase:Y=!0,useBackwardCompatibility:U=!0,customParsers:Z={},verbose:B=!1,trackPerformance:W=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let j=J||this.generateEnvPrefix($),F={...w};return this.processObject(F,[],j,{useCamelCase:Y,useBackwardCompatibility:U,customParsers:Z,verbose:B,configName:$}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(W)return n1.track("applyEnvironmentVariables",E,{configName:$});return E()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=Z.map((j)=>this.formatEnvKey(j,J.useCamelCase)),W=`${A}_${B.join("_")}`,E=J.useBackwardCompatibility?`${A}_${Z.map((j)=>j.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.processObject(U,Z,A,J);else{let j=dJ.env[W]||(E?dJ.env[E]:void 0);if(j!==void 0){if(J.verbose){let F=dJ.env[W]?W:E}try{$[Y]=this.parseEnvironmentValue(j,typeof U,W,J.customParsers,J.configName)}catch(F){if(F instanceof EY)throw F;throw Jw.envVar(W,j,typeof U,J.configName)}}}}}parseEnvironmentValue($,w,A,J,Y){for(let[U,Z]of Object.entries(J))try{return Z($)}catch{continue}for(let U of this.defaultParsers)if(U.canParse($,w))try{return U.parse($)}catch{throw Jw.envVar(A,$,`${w} (via ${U.name} parser)`,Y)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,Y]of Object.entries(dJ.env))if(J.startsWith(A)&&Y!==void 0)w[J]=Y;return w}validateEnvironmentVariable($,w,A){let J=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))J.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(Y){J.push(`Cannot parse value "${w}" as ${A}: ${Y}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:Y="text"}=A,U=J||this.generateEnvPrefix($),Z=[];switch(this.extractEnvVarInfo(w,[],U,Z),Y){case"markdown":return this.formatAsMarkdown(Z,$);case"json":return JSON.stringify(Z,null,2);default:return this.formatAsText(Z,$)}}extractEnvVarInfo($,w,A,J){for(let[Y,U]of Object.entries($)){let Z=[...w,Y],B=`${A}_${Z.map((W)=>this.formatEnvKey(W,!0)).join("_")}`;if(typeof U==="object"&&U!==null&&!Array.isArray(U))this.extractEnvVarInfo(U,Z,A,J);else J.push({key:B,type:Array.isArray(U)?"array":typeof U,description:`Configuration for ${Z.join(".")}`,example:this.generateExample(U)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
146
-
147
- `;for(let J of $)A+=`${J.key}
148
- `,A+=` Type: ${J.type}
149
- `,A+=` Description: ${J.description}
150
- `,A+=` Example: ${J.example}
131
+ `}function JU(){return B1.randomBytes(20)}function Cj($=2048){let{privateKey:w,publicKey:A}=B1.generateKeyPairSync("rsa",{modulusLength:$});return{privateKey:w,publicKey:A}}function s5($){let w=$.export({type:"spki",format:"der"});return B1.createHash("sha1").update(w).digest()}function Sj($){let w={serialNumber:$.serialNumber||JU(),notBefore:$.notBefore,notAfter:$.notAfter,subject:$.subject,issuer:$.issuer||$.subject,publicKey:$.publicKey,extensions:{basicConstraints:{isCA:$.isCA??!1,critical:!0,pathLenConstraint:$.pathLenConstraint},subjectKeyIdentifier:s5($.publicKey)}};if($.keyUsage)w.extensions.keyUsage={...$.keyUsage,critical:!0};if($.extendedKeyUsage)w.extensions.extendedKeyUsage=$.extendedKeyUsage;if($.subjectAltName?.length)w.extensions.subjectAltName=$.subjectAltName;let A=p5(w),Y=r5(A,$.signingKey);return{certificate:a5(Y,"CERTIFICATE"),certificateDer:Y}}function Lj($){return $.export({type:"pkcs8",format:"pem"})}function o5($){return B1.createPrivateKey($)}function e5($){let w=new B1.X509Certificate($),A=w.publicKey,Y=[],f=w.subject.split(`
132
+ `);for(let X of f){let[U,...W]=X.split("="),J=W.join("=");if(U&&J)Y.push({shortName:U.trim(),value:J.trim()})}return{publicKey:A,subject:Y}}async function WU($={}){I("ca","Creating new Root CA Certificate",$.verbose);let w=$.keySize||K0.DEFAULT_KEY_SIZE;I("ca",`Generating ${w}-bit RSA key pair`,$.verbose);let{privateKey:A,publicKey:Y}=Cj(w),f=[{shortName:"C",value:$.countryName||W$.countryName},{shortName:"ST",value:$.stateName||W$.stateName},{shortName:"L",value:$.localityName||W$.localityName},{shortName:"O",value:$.organization||"Local Development CA"},{shortName:"OU",value:$.organizationalUnit||"Certificate Authority"},{shortName:"CN",value:$.commonName||"Local Development Root CA"}],{notBefore:X,notAfter:U}=UU({validityYears:$.validityYears||K0.DEFAULT_CA_VALIDITY_YEARS,verbose:$.verbose}),{certificate:W}=Sj({serialNumber:JU(),notBefore:X,notAfter:U,subject:f,publicKey:Y,signingKey:A,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:W,privateKey:Lj(A),notBefore:X,notAfter:U}}async function BU($){if(I("ca","Generating new certificate",$.verbose),I("ca",`Options: ${eY($)}`,$.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}=e5($.rootCA.certificate),A=o5($.rootCA.privateKey);I("ca",`Generating ${K0.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,$.verbose);let Y=K0.DEFAULT_KEY_SIZE,{privateKey:f,publicKey:X}=Cj(Y),U=$.commonName||qj($),W=$.certificateAttributes||[{shortName:"C",value:$.countryName||W$.countryName},{shortName:"ST",value:$.stateName||W$.stateName},{shortName:"L",value:$.localityName||W$.localityName},{shortName:"O",value:$.organizationName||W$.organizationName},{shortName:"CN",value:U}],{notBefore:J,notAfter:B}=UU({validityDays:$.validityDays||K0.DEFAULT_VALIDITY_DAYS,verbose:$.verbose}),E=Nj($),j=$.keyUsage||{digitalSignature:!0,keyEncipherment:!0},T=$.extKeyUsage||{serverAuth:!0},{certificate:F}=Sj({serialNumber:JU(),notBefore:J,notAfter:B,subject:W,issuer:w,publicKey:X,signingKey:A,isCA:$.basicConstraints?.cA??!1,pathLenConstraint:$.basicConstraints?.pathLenConstraint,keyUsage:j,extendedKeyUsage:T,subjectAltName:E});return{certificate:F,privateKey:Lj(f),notBefore:J,notAfter:B}}function Oj($,w){I(S.STORAGE,`Storing certificate and private key with options: ${eY(w)}`,w?.verbose);let{certPath:A,keyPath:Y}=XU({basePath:w?.basePath,certPath:w?.certPath,keyPath:w?.keyPath});I(S.STORAGE,`Certificate path: ${A}`,w?.verbose),I(S.STORAGE,`Private key path: ${Y}`,w?.verbose);let f=t8.dirname(A);if(!u0.existsSync(f))I(S.STORAGE,`Creating certificate directory: ${f}`,w?.verbose),u0.mkdirSync(f,{recursive:!0});I(S.STORAGE,"Writing certificate file",w?.verbose),u0.writeFileSync(A,$.certificate);let X=t8.dirname(Y);if(!u0.existsSync(X))I(S.STORAGE,`Creating private key directory: ${X}`,w?.verbose),u0.mkdirSync(X,{recursive:!0});return I(S.STORAGE,"Writing private key file",w?.verbose),u0.writeFileSync(Y,$.privateKey),I(S.STORAGE,"Certificate and private key stored successfully",w?.verbose),A}function Vj($,w){I(S.STORAGE,"Storing CA certificate",w?.verbose);let{caCertPath:A}=XU({basePath:w?.basePath,caCertPath:w?.caCertPath});I(S.STORAGE,`CA certificate path: ${A}`,w?.verbose);let Y=t8.dirname(A);if(!u0.existsSync(Y))I(S.STORAGE,`Creating CA certificate directory: ${Y}`,w?.verbose),u0.mkdirSync(Y,{recursive:!0});return I(S.STORAGE,"Writing CA certificate file",w?.verbose),u0.writeFileSync(A,$),I(S.STORAGE,"CA certificate stored successfully",w?.verbose),A}async function $K($,w){if(tY.platform()!=="darwin")return!1;try{let A=qE(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`).toString().trim().split("=")[1]?.trim()||"";if(!A)return I(S.TRUST,"Could not extract certificate fingerprint",w),!1;try{if(qE("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256 2>/dev/null || true").toString().includes(A))return I(S.TRUST,"Certificate fingerprint found in system keychain",w),!0}catch{}return I(S.TRUST,"Certificate fingerprint not found in system keychain",w),!1}catch(A){return I(S.TRUST,`Error checking certificate trust: ${A}`,w),!1}}async function EU($,w,A){I(S.TRUST,`Adding certificate to system trust store with options: ${eY(A)}`,A?.verbose),I(S.TRUST,"Storing certificate and private key",A?.verbose);let Y=Oj($,A);I(S.TRUST,"Storing CA certificate",A?.verbose);let f=Vj(w,A),X=tY.platform();I(S.TRUST,`Detected platform: ${X}`,A?.verbose);let U=fK[X];if(!U){let W=`Unsupported platform: ${X}`;throw I(S.TRUST,`Error: ${W}`,A?.verbose),Error(W)}return await U.addCertificate(f,A),I(S.TRUST,"Certificate successfully added to system trust store",A?.verbose),Y}var UH,pY,CE="https://acme-staging-v02.api.letsencrypt.org/directory",SE="https://acme-v02.api.letsencrypt.org/directory",QY,TH="1.2.840.10045.2.1",FH="1.2.840.10045.3.1.7",zH="1.2.840.10045.4.3.2",GH="2.5.4.3",HH="1.2.840.113549.1.9.14",KH="2.5.29.17",PY,r8,W9,B9=($)=>$,j9=($,w)=>{for(var A in w)W9($,A,{get:w[A],enumerable:!0,configurable:!0,set:E9.bind(w,A)})},T9=($,w)=>()=>($&&(w=$($=0)),w),cE,pE,J1,t1,rE,c9,u9,YE,SY,P8,O$,t,n9,fE,v9,XE,m9,d9,I8,l9,UE,JE,C8,g9,t9,p9,r9,LY,aE,a9,V$,s9,o9,WE,OY,i8,G$,Z,e9,BE,$5,EE,w5,A5,S8,Y5,jE,TE,f5,L8,X5,U5,J5,W5,B5,VY,sE,E5,j5="0.15.6",r$,nY,d1,b8,c8,vY,u8,n8,l1,v8,m8,Xw,oE,eE,H0,n0,$j,wj,T5,z5,Aj,mY,uy,y$,b,ny,H5,vy,K5,my,dy,FE,ly,R5,h5,gy,zE,ty,py,ry,ay,sy,O8,q5,oy,h0,fj,dY,Xj,Uj,YU,Jj,Wj,lY,Bj,Ej,W1,L5,P0,ey,$M,wM,Kj,W$,K0,S,U1,D5,HE="[redacted]",k5,Z5,R0,b$,wK,AK,YK,fK;var Qj=E$(()=>{UH=XH(import.meta.url);pY=new v1;QY=class QY extends Error{problem;httpStatus;constructor($,w,A){super($);this.name="AcmeError",this.problem=w,this.httpStatus=A}};PY=new iE,r8=new bE,W9=Object.defineProperty;cE={};j9(cE,{withErrorRecovery:()=>vE,tryLoadConfig:()=>x9,loadConfigWithResult:()=>k9,loadConfig:()=>tE,isRetryableError:()=>L9,isConfigNotFoundError:()=>S9,isBunfigError:()=>mE,globalPerformanceMonitor:()=>t1,globalCache:()=>J1,getEnvOrDefault:()=>O9,generateConfigTypes:()=>P9,defaultGeneratedDir:()=>wj,defaultConfigDir:()=>$j,deepMergeWithArrayStrategy:()=>$U,deepMerge:()=>dE,createLibraryConfig:()=>i9,config:()=>Z9,bunfigPlugin:()=>b9,applyEnvVarsToConfig:()=>u1,TypeGenerationError:()=>n8,SchemaValidationError:()=>l1,PluginError:()=>m8,PerformanceMonitor:()=>s8,FileSystemError:()=>u8,ErrorFactory:()=>Xw,EnvVarError:()=>vY,EnvProcessor:()=>aY,ConfigValidator:()=>wU,ConfigValidationError:()=>b8,ConfigNotFoundError:()=>nY,ConfigMergeError:()=>c8,ConfigLoader:()=>AU,ConfigLoadError:()=>d1,ConfigFileLoader:()=>sY,ConfigCache:()=>a8,CacheUtils:()=>rE,BunfigError:()=>r$,BrowserConfigError:()=>v8,ArrayMergeStrategies:()=>oE});T5=T9(async()=>{pE=import.meta.require,J1=new a8,t1=new s8,rE={createKey:F9,isEquivalent:z9,estimateMemoryUsage:G9},c9=ZY(Z8.cwd(),"config"),u9=ZY(Z8.cwd(),"src/generated"),YE=kY.env.CLARITY_LOG_DIR||OH(R9(),"logs"),SY={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:YE,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},P8=await h9(),O$={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=O$,n9=O$.red,fE=O$.green,v9=O$.yellow,XE=O$.blue,m9=O$.magenta,d9=O$.cyan,I8=O$.white,l9=O$.gray,UE=O$.bgRed,JE=O$.bgYellow,C8=O$.bold,g9=O$.dim,t9=O$.italic,p9=O$.underline,r9=O$.reset,LY={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},aE={debug:"\uD83D\uDD0D",info:XE("ℹ"),success:fE("✓"),warning:JE(I8(C8(" WARN "))),error:UE(I8(C8(" ERROR ")))},a9=new bY("stacks"),V$=new bY("bunfig",{showTags:!0}),s9=P$(m1.cwd(),"config"),o9=P$(m1.cwd(),"src/generated"),WE=DY.env.CLARITY_LOG_DIR||SH(M9(),"logs"),OY={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:WE,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},i8=await I9(),G$={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"},Z=G$,e9=G$.red,BE=G$.green,$5=G$.yellow,EE=G$.blue,w5=G$.magenta,A5=G$.cyan,S8=G$.white,Y5=G$.gray,jE=G$.bgRed,TE=G$.bgYellow,f5=G$.bgGray,L8=G$.bold,X5=G$.dim,U5=G$.italic,J5=G$.underline,W5=G$.strikethrough,B5=G$.reset,VY={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},sE={debug:"\uD83D\uDD0D",info:EE("ℹ"),success:BE("✓"),warning:TE(S8(L8(" WARN "))),error:jE(S8(L8(" ERROR ")))},E5=new uY("stacks"),r$=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,A])=>`${w}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}},nY=class extends r${code="CONFIG_NOT_FOUND";constructor($,w,A){let Y=A?` or alias "${A}"`:"";super(`Configuration "${$}"${Y} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}},d1=class extends r${code="CONFIG_LOAD_ERROR";constructor($,w,A){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:A,originalError:w.name,originalMessage:w.message});this.cause=w}},b8=class extends r${code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}},c8=class extends r${code="CONFIG_MERGE_ERROR";constructor($,w,A,Y){super(`Failed to merge configuration from "${$}" with "${w}": ${A.message}`,{sourcePath:$,targetPath:w,configName:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},vY=class extends r${code="ENV_VAR_ERROR";constructor($,w,A,Y){super(`Failed to parse environment variable "${$}" with value "${w}" as ${A}`,{envKey:$,envValue:w,expectedType:A,configName:Y})}},u8=class extends r${code="FILE_SYSTEM_ERROR";constructor($,w,A){super(`File system ${$} failed for "${w}": ${A.message}`,{operation:$,path:w,originalError:A.name,originalMessage:A.message});this.cause=A}},n8=class extends r${code="TYPE_GENERATION_ERROR";constructor($,w,A){super(`Failed to generate types from "${$}" to "${w}": ${A.message}`,{configDir:$,outputPath:w,originalError:A.name,originalMessage:A.message});this.cause=A}},l1=class extends r${code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}},v8=class extends r${code="BROWSER_CONFIG_ERROR";constructor($,w,A,Y){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:Y})}},m8=class extends r${code="PLUGIN_ERROR";constructor($,w,A){super(`Plugin "${$}" failed during ${w}: ${A.message}`,{pluginName:$,operation:w,originalError:A.name,originalMessage:A.message});this.cause=A}},Xw={configNotFound($,w,A){return new nY($,w,A)},configLoad($,w,A){return new d1($,w,A)},configValidation($,w,A){return new b8($,w,A)},configMerge($,w,A,Y){return new c8($,w,A,Y)},envVar($,w,A,Y){return new vY($,w,A,Y)},fileSystem($,w,A){return new u8($,w,A)},typeGeneration($,w,A){return new n8($,w,A)},schemaValidation($,w,A){return new l1($,w,A)},browserConfig($,w,A,Y){return new v8($,w,A,Y)},plugin($,w,A){return new m8($,w,A)}},oE={replace:"replace",concat:"concat",smart:"smart"},eE=/^https?:\/\//,H0=new uY("bunfig",{showTags:!0}),n0=new AU,$j=i$(qw.cwd(),"config"),wj=i$(qw.cwd(),"src/generated")});z5=xY.env.CLARITY_LOG_DIR||aH(F5(),"logs"),Aj={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:z5,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},mY={...Aj},uy=(async()=>{try{let{loadConfig:$}=await T5().then(()=>cE),w=await $({name:"clarity",alias:"logging",defaultConfig:Aj,cwd:xY.cwd()});if(w)Object.assign(mY,w)}catch{}return mY})();y$={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"},b=y$,ny=y$.red,H5=y$.green,vy=y$.yellow,K5=y$.blue,my=y$.magenta,dy=y$.cyan,FE=y$.white,ly=y$.gray,R5=y$.bgRed,h5=y$.bgYellow,gy=y$.bgGray,zE=y$.bold,ty=y$.dim,py=y$.italic,ry=y$.underline,ay=y$.strikethrough,sy=y$.reset,O8={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},q5={debug:"\uD83D\uDD0D",info:K5("ℹ"),success:H5("✓"),warning:h5(FE(zE(" WARN "))),error:R5(FE(zE(" ERROR ")))};oy=new oY("stacks");h0=class h0 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,A])=>`${w}: ${A}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}};fj=class fj extends h0{code="CONFIG_NOT_FOUND";constructor($,w,A){let Y=A===void 0?[]:Array.isArray(A)?A.filter(Boolean):[A],f="";if(Y.length===1)f=` or alias "${Y[0]}"`;else if(Y.length>1)f=` or aliases ${Y.map((X)=>`"${X}"`).join(", ")}`;super(`Configuration "${$}"${f} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}};dY=class dY extends h0{code="CONFIG_LOAD_ERROR";constructor($,w,A){super(`Failed to load configuration from "${$}": ${w.message}`,{configPath:$,configName:A,originalError:w.name,originalMessage:w.message});this.cause=w}};Xj=class Xj extends h0{code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}};Uj=class Uj extends h0{code="CONFIG_MERGE_ERROR";constructor($,w,A,Y){super(`Failed to merge configuration from "${$}" with "${w}": ${A.message}`,{sourcePath:$,targetPath:w,configName:Y,originalError:A.name,originalMessage:A.message});this.cause=A}};YU=class YU extends h0{code="ENV_VAR_ERROR";constructor($,w,A,Y){super(`Failed to parse environment variable "${$}" with value "${w}" as ${A}`,{envKey:$,envValue:w,expectedType:A,configName:Y})}};Jj=class Jj extends h0{code="FILE_SYSTEM_ERROR";constructor($,w,A){super(`File system ${$} failed for "${w}": ${A.message}`,{operation:$,path:w,originalError:A.name,originalMessage:A.message});this.cause=A}};Wj=class Wj extends h0{code="TYPE_GENERATION_ERROR";constructor($,w,A){super(`Failed to generate types from "${$}" to "${w}": ${A.message}`,{configDir:$,outputPath:w,originalError:A.name,originalMessage:A.message});this.cause=A}};lY=class lY extends h0{code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}};Bj=class Bj extends h0{code="BROWSER_CONFIG_ERROR";constructor($,w,A,Y){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:Y})}};Ej=class Ej extends h0{code="PLUGIN_ERROR";constructor($,w,A){super(`Plugin "${$}" failed during ${w}: ${A.message}`,{pluginName:$,operation:w,originalError:A.name,originalMessage:A.message});this.cause=A}};W1={configNotFound($,w,A){return new fj($,w,A)},configLoad($,w,A){return new dY($,w,A)},configValidation($,w,A){return new Xj($,w,A)},configMerge($,w,A,Y){return new Uj($,w,A,Y)},envVar($,w,A,Y){return new YU($,w,A,Y)},fileSystem($,w,A){return new Jj($,w,A)},typeGeneration($,w,A){return new Wj($,w,A)},schemaValidation($,w,A){return new lY($,w,A)},browserConfig($,w,A,Y){return new Bj($,w,A,Y)},plugin($,w,A){return new Ej($,w,A)}};L5=/^https?:\/\//;P0=new oY("bunfig",{showTags:!0});ey=new Hj;$M=f0(rY.cwd(),"config"),wM=f0(rY.cwd(),"src/generated"),Kj={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:B8.join(W8.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:B8.join(W8.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:B8.join(W8.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},W$=Kj,K0={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"},S={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"},U1={info:(...$)=>console.log(...$),warn:(...$)=>console.warn(...$),success:(...$)=>console.log(...$),error:(...$)=>console.error(...$),debug:(...$)=>console.debug(...$)};D5=_5(V5);k5=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),Z5=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/;R0={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},b$={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"};wK={platform:"darwin",async addCertificate($,w){if(await $K($,w?.verbose)){I(S.TRUST,"Certificate is already trusted, skipping trust store update",w?.verbose),U1.success("Certificate is already trusted in system keychain");return}I(S.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,A){let Y=A||W$.commonName;I(S.TRUST,`Removing certificate ${Y} from macOS keychain`,w?.verbose);try{await fw(`sudo security delete-certificate -c "${Y}" /Library/Keychains/System.keychain`),I(S.TRUST,`Removed certificate ${Y} from macOS keychain`,w?.verbose)}catch(f){throw I(S.TRUST,`Error removing certificate: ${f}`,w?.verbose),f}}},AK={platform:"win32",async addCertificate($,w){I(S.TRUST,"Adding certificate to Windows certificate store",w?.verbose),await fw(`certutil -f -v -addstore -enterprise Root ${$}`)},async removeCertificate($,w,A){let Y=A||W$.commonName;I(S.TRUST,`Removing certificate ${Y} from Windows certificate store`,w?.verbose);try{await fw(`certutil -delstore -enterprise Root "${Y}"`),I(S.TRUST,`Removed certificate ${Y} from Windows certificate store`,w?.verbose)}catch(f){throw I(S.TRUST,`Error removing certificate: ${f}`,w?.verbose),f}}},YK={platform:"linux",async addCertificate($,w){I(S.TRUST,"Adding certificate to Linux certificate store",w?.verbose);let A=tY.homedir(),Y=K0.LINUX_CERT_DB_FILENAME,f=K0.LINUX_TRUST_ARGS;I(S.TRUST,`Searching for certificate databases in ${A}`,w?.verbose);let X=l8(A,Y);if(X.length===0){U1.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let U of X){I(S.TRUST,`Processing certificate database in ${U}`,w?.verbose);try{I(S.TRUST,`Attempting to delete existing cert for ${W$.commonName}`,w?.verbose),await fw(`certutil -d sql:${U} -D -n ${W$.commonName}`)}catch(W){I(S.TRUST,`Warning: Error deleting existing cert: ${W}`,w?.verbose),console.warn(`Error deleting existing cert: ${W}`)}I(S.TRUST,`Adding new certificate to ${U}`,w?.verbose),await fw(`certutil -d sql:${U} -A -t ${f} -n ${W$.commonName} -i ${$}`),U1.info(`Cert added to ${U}`)}},async removeCertificate($,w,A){let Y=A||W$.commonName;I(S.TRUST,`Removing certificate ${Y} from Linux certificate store`,w?.verbose);let f=tY.homedir(),X=K0.LINUX_CERT_DB_FILENAME;I(S.TRUST,`Searching for certificate databases in ${f}`,w?.verbose);let U=l8(f,X);if(U.length===0){U1.warn("No certificate databases found. Cannot remove certificate.");return}for(let W of U){I(S.TRUST,`Processing certificate database in ${W}`,w?.verbose);try{await fw(`certutil -d sql:${W} -D -n "${Y}"`),U1.info(`Cert removed from ${W}`)}catch(J){I(S.TRUST,`Error removing cert from ${W}: ${J}`,w?.verbose),console.warn(`Error removing cert from ${W}: ${J}`)}}}},fK={darwin:wK,win32:AK,linux:YK}});var jU=E$(()=>{Qj()});import{homedir as TU}from"node:os";import{join as FU,resolve as sM}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",XK,zU;var GU=E$(()=>{f8();XK={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:FU(TU(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:FU(TU(),".stacks","ssl","stacks.localhost.crt"),keyPath:FU(TU(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0},zU=XK});import{execSync as UK}from"node:child_process";function _j($){return($.includes("=")?$.split("=").pop():$).replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase()}function $f($){try{let w=UK(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`,{encoding:"utf8"});return _j(w)}catch{return null}}var HU=()=>{};import{existsSync as Dj,statSync as kj}from"fs";import{existsSync as xU,mkdirSync as TK,readdirSync as FK,writeFileSync as zK}from"fs";import{homedir as E1}from"os";import{dirname as Zj,resolve as u$}from"path";import Nw from"process";import{join as GK,relative as HK,resolve as xj}from"path";import Kf from"process";import{existsSync as KT,mkdirSync as EI,readdirSync as jI,writeFileSync as TI}from"fs";import{homedir as KU}from"os";import{dirname as GI,resolve as c$}from"path";import r1 from"process";import{join as KK,relative as RK,resolve as Pj}from"path";import Rf from"process";import{existsSync as RT,mkdirSync as qI,readdirSync as NI,writeFileSync as yI}from"fs";import{dirname as II,resolve as hf}from"path";import PU from"process";import{Buffer as Jw}from"buffer";import{createCipheriv as hK,createDecipheriv as qK,randomBytes as RU}from"crypto";import{closeSync as hU,createReadStream as ij,createWriteStream as NK,existsSync as qU,fsyncSync as bj,openSync as cj,writeFileSync as yK}from"fs";import{access as MK,constants as uj,mkdir as IK,readdir as wf,rename as nj,stat as j1,unlink as Af,writeFile as NU}from"fs/promises";import{join as T1}from"path";import Q$ from"process";import{pipeline as CK}from"stream/promises";import{createGzip as vj}from"zlib";import F1 from"process";import d0 from"process";import{Buffer as v0}from"buffer";import{createCipheriv as SK,createDecipheriv as LK,randomBytes as yU}from"crypto";import{closeSync as MU,createReadStream as mj,createWriteStream as OK,existsSync as Yf,fsyncSync as dj,openSync as lj,writeFileSync as VK}from"fs";import{access as QK,constants as gj,mkdir as _K,readdir as ff,rename as tj,stat as z1,unlink as Xf,writeFile as IU}from"fs/promises";import{isAbsolute as DK,join as G1,resolve as kK}from"path";import _ from"process";import{pipeline as ZK}from"stream/promises";import{createGzip as pj}from"zlib";import H1 from"process";import l0 from"process";import Uf from"process";import{existsSync as Jf}from"fs";import{resolve as CU}from"path";import{existsSync as xK}from"fs";import{existsSync as PK,readdirSync as iK}from"fs";import{extname as SU,resolve as rj}from"path";import bK from"process";import{join as c6,relative as u6,resolve as JT}from"path";import Sf from"process";import{Buffer as m0}from"buffer";import{createCipheriv as m6,createDecipheriv as d6,randomBytes as _U}from"crypto";import{closeSync as DU,createReadStream as WT,createWriteStream as l6,existsSync as Bf,fsyncSync as BT,openSync as ET,writeFileSync as g6}from"fs";import{access as t6,constants as jT,mkdir as p6,readdir as Ef,rename as TT,stat as K1,unlink as jf,writeFile as kU}from"fs/promises";import{isAbsolute as r6,join as R1,resolve as a6}from"path";import D from"process";import{pipeline as s6}from"stream/promises";import{createGzip as FT}from"zlib";import h1 from"process";import g0 from"process";function BK($,w){this[$]=WK.bind(null,w)}class gU{cache=new Map;totalHits=0;totalMisses=0;options;constructor($={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...$}}generateKey($,w){let A=w?`:${w}`:"";return`${this.options.keyPrefix}${$}${A}`}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(([,A],[,Y])=>A.timestamp.getTime()-Y.timestamp.getTime()),w=$.length-this.options.maxSize+1;for(let A=0;A<w;A++)this.cache.delete($[A][0])}set($,w,A,Y){if(!this.options.enabled)return;let f=this.generateKey($,A),X=Y??this.options.ttl,U=this.estimateSize(w);this.cache.set(f,{value:w,timestamp:new Date,ttl:X,hits:0,size:U}),this.evictIfNeeded()}get($,w){if(!this.options.enabled){this.totalMisses++;return}let A=this.generateKey($,w),Y=this.cache.get(A);if(!Y){this.totalMisses++;return}if(this.isExpired(Y)){this.cache.delete(A),this.totalMisses++;return}return Y.hits++,this.totalHits++,Y.value}isFileModified($,w){try{if(!Dj($))return!0;return kj($).mtime>w}catch{return!0}}getWithFileCheck($,w){let A=this.get($,w);if(!A)return;if(this.isFileModified(w,A.fileTimestamp)){this.delete($,w);return}return A.value}setWithFileCheck($,w,A,Y){try{let f=Dj(A)?kj(A):null,X=f?f.mtime:new Date;this.set($,{value:w,fileTimestamp:X},A,Y)}catch{this.set($,w,A,Y)}}delete($,w){let A=this.generateKey($,w);return this.cache.delete(A)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let $=0;for(let[w,A]of this.cache.entries())if(this.isExpired(A))this.cache.delete(w),$++;return $}getStats(){let $=Array.from(this.cache.values()),w=$.reduce((Y,f)=>Y+f.size,0),A=$.map((Y)=>Y.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:A[0],newestEntry:A[A.length-1]}}export(){let $={};for(let[w,A]of this.cache.entries())$[w]={value:A.value,timestamp:A.timestamp.toISOString(),ttl:A.ttl,hits:A.hits,size:A.size};return $}import($){this.cache.clear();for(let[w,A]of Object.entries($))if(typeof A==="object"&&A!==null){let Y=A;this.cache.set(w,{value:Y.value,timestamp:new Date(Y.timestamp),ttl:Y.ttl,hits:Y.hits,size:Y.size})}}}class tU{metrics=[];maxMetrics=1000;async track($,w,A={}){let Y=performance.now(),f=new Date;try{let X=await w(),U=performance.now()-Y;return this.recordMetric({operation:$,duration:U,timestamp:f,...A}),X}catch(X){let U=performance.now()-Y;throw this.recordMetric({operation:`${$}:error`,duration:U,timestamp:f,...A}),X}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((f)=>f.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((f)=>f.duration),Y=A.reduce((f,X)=>f+X,0);return{count:w.length,averageDuration:Y/w.length,minDuration:Math.min(...A),maxDuration:Math.max(...A),totalDuration:Y,recentMetrics:w.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations($){return this.metrics.filter((w)=>w.duration>$)}}function cK($,w={}){let Y=Object.keys(w).sort().map((f)=>`${f}:${w[f]}`).join("|");return Y?`${$}:${Y}`:$}function uK($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function nK($){return $.getStats().size*2}function pU($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&e(w[0])&&"id"in w[0]&&w[0].id===3&&e(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(e(w)&&e($)&&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(e($)&&"arr"in $&&Array.isArray($.arr)&&e(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&e(w[0])&&e($[0])){let Y=[...w];for(let f of $)if(e(f)&&"name"in f){if(!Y.find((U)=>e(U)&&("name"in U)&&U.name===f.name))Y.push(f)}else if(e(f)&&"path"in f){if(!Y.find((U)=>e(U)&&("path"in U)&&U.path===f.path))Y.push(f)}else if(!Y.some((X)=>qf(X,f)))Y.push(f);return Y}if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}if(!e(w)||!e($))return w;let A={...$};for(let Y in w)if(Object.prototype.hasOwnProperty.call(w,Y)){let f=w[Y];if(f===null||f===void 0)continue;else if(e(f)&&e(A[Y]))A[Y]=pU(A[Y],f);else if(Array.isArray(f)&&Array.isArray(A[Y]))if(f.length>0&&A[Y].length>0&&e(f[0])&&e(A[Y][0])){let X=[...f];for(let U of A[Y])if(e(U)&&"name"in U){if(!X.find((J)=>e(J)&&("name"in J)&&J.name===U.name))X.push(U)}else if(e(U)&&"path"in U){if(!X.find((J)=>e(J)&&("path"in J)&&J.path===U.path))X.push(U)}else if(!X.some((W)=>qf(W,U)))X.push(U);A[Y]=X}else if(f.every((X)=>typeof X==="string")&&A[Y].every((X)=>typeof X==="string")){let X=[...f];for(let U of A[Y])if(!X.includes(U))X.push(U);A[Y]=X}else A[Y]=f;else A[Y]=f}return A}function qf($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!qf($[A],w[A]))return!1;return!0}if(e($)&&e(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!qf($[f],w[f]))return!1}return!0}return!1}function e($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function vK($,w){if(!RT($))return null;try{let A=await import($),Y=A.default||A;if(typeof Y!=="object"||Y===null||Array.isArray(Y))return null;try{return pU(w,Y)}catch{return null}}catch{return null}}async function mK({name:$="",cwd:w,defaultConfig:A}){let Y=w||PU.cwd(),f=[".ts",".js",".mjs",".cjs",".json"],X=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let U of X)for(let W of f){let J=hf(Y,`${U}${W}`),B=await vK(J,A);if(B!==null)return B}try{let U=hf(Y,"package.json");if(RT(U)){let J=(await import(U))[$];if(J&&typeof J==="object"&&!Array.isArray(J))try{return pU(A,J)}catch{}}}catch{}return A}function dK($,w={}){let A=Rf.cwd();while(A.includes("storage"))A=Pj(A,"..");let Y=Pj(A,$||"");if(w?.relative)return RK(Rf.cwd(),Y);return Y}async function lK(){try{let $=await mK({name:"clarity",defaultConfig:Ff,cwd:Rf.cwd(),endpoint:"",headers:{}});return{...Ff,...$}}catch{return Ff}}function X$(){if(d0.env.NODE_ENV==="test"||d0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function gK(){if(d0.env.NODE_ENV==="test"||d0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof d0<"u"){let $=d0.type;if($==="renderer"||$==="worker")return!1;return!!(d0.versions&&(d0.versions.node||d0.versions.bun))}return!1}class hT{async format($){let w=await gK(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}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 Nf{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={...bU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new hT,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??Q$.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...zf,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...zf};return{...zf,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:bU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}async writeToFile($){let A=(async()=>{let f,X=0,U=3,W=1000;while(X<U)try{try{try{await MK(this.config.logDirectory,uj.F_OK|uj.W_OK)}catch(B){if(B instanceof Error&&"code"in B)if(B.code==="ENOENT")await IK(this.config.logDirectory,{recursive:!0,mode:493});else if(B.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw B;else throw B}}catch(B){throw console.error("Debug: [writeToFile] Failed to create log directory:",B),B}let J=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:Jw.from($);try{if(!qU(this.currentLogFile))await NU(this.currentLogFile,"",{mode:420});if(f=cj(this.currentLogFile,"a",420),yK(f,J,{flag:"a"}),bj(f),f!==void 0)hU(f),f=void 0;if((await j1(this.currentLogFile)).size===0){if(await NU(this.currentLogFile,J,{flag:"w",mode:420}),(await j1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(B){let E=B;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(X<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${U}:`,j);let T=W*2**X;await new Promise((F)=>setTimeout(F,T)),X++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(f!==void 0)try{hU(f)}catch(B){console.error("Debug: [writeToFile] Error closing file descriptor:",B)}}}catch(J){if(X===U-1){let E=J,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),J}X++;let B=W*2**(X-1);await new Promise((E)=>setTimeout(E,B))}})();this.pendingOperations.push(A);let Y=this.pendingOperations.length-1;try{await A}catch(f){throw console.error("Debug: [writeToFile] Error in operation:",f),f}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 T1(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 T1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return T1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(X$())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 A=typeof w.interval==="number"?w.interval:60,Y=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((f)=>{console.error("Error rotating keys:",f)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=A,this.keys.set(A,Y),this.encryptionKeys.set(A,{key:Y,createdAt:new Date});let f=Array.from(this.encryptionKeys.entries()).sort(([,W],[,J])=>J.createdAt.getTime()-W.createdAt.getTime()),X=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,X);if(f.length>U)for(let[W]of f.slice(U))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return RU(16).toString("hex")}generateKey(){return RU(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(),A=RU(16),Y=hK("aes-256-gcm",w,A),f=Jw.concat([Y.update($,"utf8"),Y.final()]),X=Y.getAuthTag();return{encrypted:Jw.concat([A,f,X]),iv:A}}async compressData($){return new Promise((w,A)=>{let Y=vj(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w(Jw.from(Jw.concat(f)))),Y.on("error",A),Y.write($),Y.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(X$())return;let $=await j1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await wf(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await j1(A).catch(()=>null))try{if(await nj(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await Af(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await NU(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await j1(A).catch(()=>null))await nj(A,X)}if(this.currentLogFile=Y,w.maxFiles){let X=(await wf(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,W)=>W.localeCompare(U));for(let U of X.slice(w.maxFiles))await Af(T1(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=ij($),Y=NK(w),f=vj();await CK(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);await this.writeToFile(Y),console.log(Y)}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 A={timestamp:new Date,level:$,message:w,name:this.name};this.logBuffer.push(A)}}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()})),qU(this.currentLogFile))try{let $=cj(this.currentLogFile,"r+");bj($),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(!X$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await wf(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await Af(T1(this.config.logDirectory,A))}catch(Y){console.error(`Failed to delete temp file ${A}:`,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?p.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=Q$.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${p.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}async log($,w,...A){let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);if(this.fancy&&!X$()){let B=VT[$],E=this.options.showTags!==!1&&this.name?p.gray(this.formatTag(this.name)):"",j;switch($){case"debug":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:p.gray(U),level:$}),console.error(j);break;case"info":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.error(j);break;case"success":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:p.green(U),level:$}),console.error(j);break;case"warning":j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.warn(j);break;case"error":if(j=this.formatConsoleMessage({timestamp:f,icon:B,tag:E,message:U,level:$}),console.error(j),W){let T=W.split(`
133
+ `);for(let F of T)if(F.trim()&&!F.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:p.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!X$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}if(!this.shouldLog($))return;let J=`${X} ${this.environment}.${$.toUpperCase()}: ${U}
134
+ `;if(W)J+=`${W}
135
+ `;J=J.replace(this.ANSI_PATTERN,""),await this.writeToFile(J)}time($){let w=performance.now();if(this.fancy&&!X$()){let A=this.options.showTags!==!1&&this.name?p.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:p.blue("◐"),tag:A,message:`${p.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),B=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)B+=` ${JSON.stringify(A)}`;if(B+=`
136
+ `,B=B.replace(this.ANSI_PATTERN,""),this.fancy&&!X$()){let E=this.options.showTags!==!1&&this.name?p.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:p.green("✓"),tag:E,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!X$())console.error(B.trim());await this.writeToFile(B)}}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}:${$}`,A=new Nf(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(A),A}createReadStream(){if(X$())throw Error("createReadStream is not supported in browser environments");if(!qU(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return ij(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 A=this.keys.get(this.currentKeyId);try{let Y=Jw.isBuffer($)?$:Jw.from($,"base64"),f=Y.slice(0,16),X=Y.slice(-16),U=Y.slice(16,-16),W=qK("aes-256-gcm",A,f);return W.setAuthTag(X),Jw.concat([W.update(U),W.final()]).toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return X$()}isServerMode(){return!X$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w);if(this.fancy&&!X$()){let X=$.split(`
137
+ `),U=Math.max(...X.map((E)=>E.length))+2,W=`┌${"─".repeat(U)}┐`,J=`└${"─".repeat(U)}┘`,B=X.map((E)=>{let j=" ".repeat(U-E.length-2);return`│ ${E}${j} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:A,message:p.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:A,message:p.cyan(W)})),B.forEach((E)=>console.error(this.formatConsoleMessage({timestamp:A,message:p.cyan(E),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:p.cyan(J),showTimestamp:!1}))}else if(!X$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${$}`);let f=`${Y} ${this.environment}.INFO: [BOX] ${$}
138
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(f)}async prompt($){if(X$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${p.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();Q$.stdin.removeListener("data",A);try{if(typeof Q$.stdin.setRawMode==="function")Q$.stdin.setRawMode(!1)}catch{}Q$.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof Q$.stdin.setRawMode==="function")Q$.stdin.setRawMode(!0)}catch{}Q$.stdin.resume(),Q$.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let U=/%([sdijfo%])/g,W=0;if(A=$.replace(U,(J,B)=>{if(B==="%")return"%";if(W>=w.length)return J;let E=w[W++];switch(B){case"s":return String(E);case"d":case"i":return Number(E).toString();case"j":case"o":return JSON.stringify(E,null,2);default:return J}}),W<w.length)A+=` ${w.slice(W).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`}if(this.fancy&&!X$()){let U=this.options.showTags!==!1&&this.name?p.gray(this.formatTag(this.name)):"",W=p.blue("◐");console.error(`${W} ${U} ${p.cyan(A)}`)}let X=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
139
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(X)}progress($,w=""){if(!this.enabled||!this.fancy||X$()||$<=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 A=20;return this.activeProgressBar={total:$,current:0,message:w,barLength:A,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(U,W)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||X$())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,U)),W!==void 0)this.activeProgressBar.message=W;let J=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,J)},finish:(U)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||X$())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,W="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||X$())return;Q$.stdout.write(`${"\r".padEnd(Q$.stdout.columns||80)}\r`),this.log(W,U),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||X$()||!Q$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=p.green("━".repeat(Y)),U=p.gray("━".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=w||A===100?p.green("✓"):p.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${p.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=Q$.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,Q$.stdout.write($.lastRenderedLine),w)Q$.stdout.write(`
140
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||X$()||!Q$.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(X$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await wf(this.config.logDirectory),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let X=T1(this.config.logDirectory,Y);if($.before)try{if((await j1(X)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${X}:`,U);continue}A.push(X)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await Af(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function Tf($,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 Y=[...w];for(let f of $)if(l(f)&&"name"in f){if(!Y.find((U)=>l(U)&&("name"in U)&&U.name===f.name))Y.push(f)}else if(l(f)&&"path"in f){if(!Y.find((U)=>l(U)&&("path"in U)&&U.path===f.path))Y.push(f)}else if(!Y.some((X)=>yf(X,f)))Y.push(f);return Y}if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}if(!l(w)||!l($))return w;let A={...$};for(let Y in w)if(Object.prototype.hasOwnProperty.call(w,Y)){let f=w[Y];if(f===null||f===void 0)continue;else if(l(f)&&l(A[Y]))A[Y]=Tf(A[Y],f);else if(Array.isArray(f)&&Array.isArray(A[Y]))if(f.length>0&&A[Y].length>0&&l(f[0])&&l(A[Y][0])){let X=[...f];for(let U of A[Y])if(l(U)&&"name"in U){if(!X.find((J)=>l(J)&&("name"in J)&&J.name===U.name))X.push(U)}else if(l(U)&&"path"in U){if(!X.find((J)=>l(J)&&("path"in J)&&J.path===U.path))X.push(U)}else if(!X.some((W)=>yf(W,U)))X.push(U);A[Y]=X}else if(f.every((X)=>typeof X==="string")&&A[Y].every((X)=>typeof X==="string")){let X=[...f];for(let U of A[Y])if(!X.includes(U))X.push(U);A[Y]=X}else A[Y]=f;else A[Y]=f}return A}function rU($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:Tf($,w);if(Array.isArray($))return A==="replace"?w:Tf($,w);if(!l(w)||!l($))return w;let Y={...$};for(let f of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,f))continue;let X=w[f],U=Y[f];if(X===null||X===void 0)continue;if(Array.isArray(X)||Array.isArray(U))if(A==="replace")Y[f]=X;else Y[f]=Tf(U,X);else if(l(X)&&l(U))Y[f]=rU(U,X,A);else Y[f]=X}return Y}function yf($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!yf($[A],w[A]))return!1;return!0}if(l($)&&l(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!yf($[f],w[f]))return!1}return!0}return!1}function l($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function Wf($,w,A="replace"){if(!KT($))return null;try{let Y=await import($),f=Y.default||Y;if(typeof f!=="object"||f===null||Array.isArray(f))return null;try{return rU(w,f,A)}catch{return null}}catch{return null}}function tK($,w,A=!1){if(!$)return w;let Y=$.toUpperCase().replace(/-/g,"_"),f={...w};function X(U,W=[]){let J={...U};for(let[B,E]of Object.entries(U)){let j=[...W,B],T=(G)=>G.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${Y}_${j.map(T).join("_")}`,H=`${Y}_${j.map((G)=>G.toUpperCase()).join("_")}`;if(A)D$.info(`Checking environment variable ${F} for config ${$}.${j.join(".")}`);if(typeof E==="object"&&E!==null&&!Array.isArray(E))J[B]=X(E,j);else{let G=r1.env[F]||r1.env[H];if(G!==void 0){if(A)D$.info(`Using environment variable ${G?F:H} for config ${$}.${j.join(".")}`);if(typeof E==="number")J[B]=Number(G);else if(typeof E==="boolean")J[B]=G.toLowerCase()==="true";else if(Array.isArray(E))try{let K=JSON.parse(G);if(Array.isArray(K))J[B]=K;else J[B]=G.split(",").map((R)=>R.trim())}catch{J[B]=G.split(",").map((K)=>K.trim())}else J[B]=G}}}return J}return X(f)}async function pK({name:$="",alias:w,cwd:A,configDir:Y,defaultConfig:f,verbose:X=!1,checkEnv:U=!0,arrayStrategy:W="replace"}){let J=U&&typeof f==="object"&&f!==null&&!Array.isArray(f)?tK($,f,X):f,B=A||r1.cwd(),E=[".ts",".js",".mjs",".cjs",".json"];if(X)D$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${B}`);let j=[$,`.${$}`].filter(Boolean),T=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],H=w?[`${w}.config`,`.${w}.config`]:[],G=Array.from(new Set([B,c$(B,"config"),c$(B,".config"),Y?c$(B,Y):void 0].filter(Boolean)));for(let K of G){if(X)D$.info(`Searching for configuration in: ${K}`);let h=[c$(B,"config"),c$(B,".config")].concat(Y?[c$(B,Y)]:[]).includes(K)?[...j,...T,...F,...H]:[...T,...j,...H,...F];for(let N of h)for(let M of E){let C=c$(K,`${N}${M}`),y=await Wf(C,J,W);if(y!==null){if(X)D$.success(`Configuration loaded from: ${C}`);return y}}}if($){let K=c$(KU(),".config",$),R=["config",`${$}.config`];if(w)R.push(`${w}.config`);if(X)D$.info(`Checking user config directory: ${K}`);for(let h of R)for(let N of E){let M=c$(K,`${h}${N}`),C=await Wf(M,J,W);if(C!==null){if(X)D$.success(`Configuration loaded from user config directory: ${M}`);return C}}}if($){let K=c$(KU(),".config"),R=[`.${$}.config`];if(w)R.push(`.${w}.config`);if(X)D$.info(`Checking user config directory for dotfile configs: ${K}`);for(let h of R)for(let N of E){let M=c$(K,`${h}${N}`),C=await Wf(M,J,W);if(C!==null){if(X)D$.success(`Configuration loaded from user config directory dotfile: ${M}`);return C}}}if($){let K=KU(),R=[`.${$}.config`,`.${$}`];if(w)R.push(`.${w}.config`),R.push(`.${w}`);if(X)D$.info(`Checking user home directory for dotfile configs: ${K}`);for(let h of R)for(let N of E){let M=c$(K,`${h}${N}`),C=await Wf(M,J,W);if(C!==null){if(X)D$.success(`Configuration loaded from user home directory: ${M}`);return C}}}try{let K=c$(B,"package.json");if(KT(K)){let R=await import(K),h=R[$];if(!h&&w){if(h=R[w],h&&X)D$.success(`Using alias "${w}" configuration from package.json`)}if(h&&typeof h==="object"&&!Array.isArray(h))try{if(X)D$.success(`Configuration loaded from package.json: ${h===R[$]?$:w}`);return rU(J,h,W)}catch(N){if(X)D$.warn("Failed to merge package.json config:",N)}}}catch(K){if(X)D$.warn("Failed to load package.json:",K)}if(X)D$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return J}function rK($,w={}){let A=Kf.cwd();while(A.includes("storage"))A=xj(A,"..");let Y=xj(A,$||"");if(w?.relative)return HK(Kf.cwd(),Y);return Y}async function aK(){try{let $=await pK({name:"clarity",alias:"logging",defaultConfig:Gf,cwd:Kf.cwd()});return{...Gf,...$||{}}}catch{return Gf}}function K$(){if(l0.env.NODE_ENV==="test"||l0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function sK(){if(l0.env.NODE_ENV==="test"||l0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof l0<"u"){let $=l0.type;if($==="renderer"||$==="worker")return!1;return!!(l0.versions&&(l0.versions.node||l0.versions.bun))}return!1}class qT{async format($){let w=await sK(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}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 Mf{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={...cU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new qT,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??_.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...Hf,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...Hf};return{...Hf,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:cU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!K$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let f,X=0,U=3,W=1000;while(X<U)try{try{try{await QK(this.config.logDirectory,gj.F_OK|gj.W_OK)}catch(B){if(B instanceof Error&&"code"in B)if(B.code==="ENOENT")await _K(this.config.logDirectory,{recursive:!0,mode:493});else if(B.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw B;else throw B}}catch(B){throw console.error("Debug: [writeToFile] Failed to create log directory:",B),B}let J=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:v0.from($);try{if(!Yf(this.currentLogFile))await IU(this.currentLogFile,"",{mode:420});if(f=lj(this.currentLogFile,"a",420),VK(f,J,{flag:"a"}),dj(f),f!==void 0)MU(f),f=void 0;if((await z1(this.currentLogFile)).size===0){if(await IU(this.currentLogFile,J,{flag:"w",mode:420}),(await z1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(B){let E=B;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(X<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${U}:`,j);let T=W*2**X;await new Promise((F)=>setTimeout(F,T)),X++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(f!==void 0)try{MU(f)}catch(B){console.error("Debug: [writeToFile] Error closing file descriptor:",B)}}}catch(J){if(X===U-1){let E=J,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),J}X++;let B=W*2**(X-1);await new Promise((E)=>setTimeout(E,B))}})();this.pendingOperations.push(A);let Y=this.pendingOperations.length-1;try{await A}catch(f){throw console.error("Debug: [writeToFile] Error in operation:",f),f}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(K$())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 A=typeof w.interval==="number"?w.interval:60,Y=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((f)=>{console.error("Error rotating keys:",f)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=A,this.keys.set(A,Y),this.encryptionKeys.set(A,{key:Y,createdAt:new Date});let f=Array.from(this.encryptionKeys.entries()).sort(([,W],[,J])=>J.createdAt.getTime()-W.createdAt.getTime()),X=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,X);if(f.length>U)for(let[W]of f.slice(U))this.encryptionKeys.delete(W),this.keys.delete(W)}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(),A=yU(16),Y=SK("aes-256-gcm",w,A),f=v0.isBuffer($)?$:v0.from($,"utf8"),X=Y.update(f),U=Y.final(),W=X.length+U.length,J=Y.getAuthTag(),B=v0.allocUnsafe(16+W+16);return A.copy(B,0),X.copy(B,16),U.copy(B,16+X.length),J.copy(B,16+W),{encrypted:B,iv:A}}async compressData($){return new Promise((w,A)=>{let Y=pj(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w(v0.from(v0.concat(f)))),Y.on("error",A),Y.write($),Y.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(K$())return;if(!this.shouldWriteToFile())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 A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await ff(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await z1(A).catch(()=>null))try{if(await tj(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await Xf(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await IU(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await z1(A).catch(()=>null))await tj(A,X)}if(this.currentLogFile=Y,w.maxFiles){let X=(await ff(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,W)=>W.localeCompare(U));for(let U of X.slice(w.maxFiles))await Xf(G1(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=mj($),Y=OK(w),f=pj();await ZK(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}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()})),Yf(this.currentLogFile))try{let $=lj(this.currentLogFile,"r+");dj($),MU($)}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(!K$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await ff(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await Xf(G1(this.config.logDirectory,A))}catch(Y){console.error(`Failed to delete temp file ${A}:`,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()?x.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||K$())return!1;let $=typeof _.env.NO_COLOR<"u",w=_.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof _.stderr<"u"&&_.stderr.isTTY||typeof _.stdout<"u"&&_.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=_.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${x.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,Y,f)=>{let X=x.underline(x.blue(Y)),U=this.toAbsoluteFilePath(f);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(U)}`,J="\x1B]8;;",B="\x1B\\";return`\x1B]8;;${W}\x1B\\${X}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${f}\x1B\\${X}\x1B]8;;\x1B\\`;return X}),w=w.replace(/`([^`]+)`/g,(A,Y)=>x.bgGray(Y)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,Y)=>x.bold(Y)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,Y)=>x.italic(Y)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,Y)=>x.italic(Y)),w=w.replace(/~([^~]+)~/g,(A,Y)=>x.strikethrough(Y)),w}supportsHyperlinks(){if(K$())return!1;let $=_.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 A=_.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(DK(w)||w.startsWith("./")||w.startsWith("../"))w=kK(w);else return null;return Yf(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);let{consoleText:J,fileText:B}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let j=this.options.showIcons===!1?"":QT[$],T=this.options.showTags!==!1&&this.name?x.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:x.gray(J),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:x.green(J),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.error(F),W){let H=W.split(`
141
+ `);for(let G of H)if(G.trim()&&!G.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:x.gray(` ${G}`),level:$,showTimestamp:!1}))}break}}else if(!K$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}if(!this.shouldLog($))return;let E=`${X} ${this.environment}.${$.toUpperCase()}: ${B}
142
+ `;if(W)E+=`${W}
143
+ `;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress($,w=""){let A={update:(W,J)=>{},finish:(W)=>{},interrupt:(W,J)=>{}};if(!this.enabled)return A;let Y=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!K$()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(W,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,W),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!K$()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(W)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,W)},interrupt:(W,J="info")=>{if(!K$()&&_.stdout.isTTY)_.stdout.write(`
144
+ `);if(this[J==="warning"?"warn":J](W),this.activeProgressBar&&this.shouldStyleConsole()&&!K$()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?x.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":x.blue("◐"),tag:A,message:`${x.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),B=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)B+=` ${JSON.stringify(A)}`;if(B+=`
145
+ `,B=B.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?x.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":x.green("✓"),tag:E,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!K$())console.error(B.trim());if(this.shouldWriteToFile())await this.writeToFile(B)}}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}:${$}`,A=new Mf(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(A),A}createReadStream(){if(K$())throw Error("createReadStream is not supported in browser environments");if(!Yf(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return mj(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 A=this.keys.get(this.currentKeyId);try{let Y=v0.isBuffer($)?$:v0.from($,"base64"),f=Y.subarray(0,16),X=Y.subarray(Y.length-16),U=Y.subarray(16,Y.length-16),W=LK("aes-256-gcm",A,f);W.setAuthTag(X);let J=W.update(U),B=W.final(),E=J.length+B.length,j=v0.allocUnsafe(E);return J.copy(j,0),B.copy(j,J.length),j.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return K$()}isServerMode(){return!K$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w),{consoleText:f,fileText:X}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=f.split(`
146
+ `),J=Math.max(...W.map((T)=>T.length))+2,B=`┌${"─".repeat(J)}┐`,E=`└${"─".repeat(J)}┘`,j=W.map((T)=>{return this.formatConsoleMessage({timestamp:A,message:x.cyan(T),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:x.cyan(B),showTimestamp:!1})),j.forEach((T)=>console.error(T)),console.error(this.formatConsoleMessage({timestamp:A,message:x.cyan(E),showTimestamp:!1}))}else if(!K$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${X}`);let U=`${Y} ${this.environment}.INFO: [BOX] ${X}
147
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(K$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${x.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();_.stdin.removeListener("data",A);try{if(typeof _.stdin.setRawMode==="function")_.stdin.setRawMode(!1)}catch{}_.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof _.stdin.setRawMode==="function")_.stdin.setRawMode(!0)}catch{}_.stdin.resume(),_.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let J=/%([sdijfo%])/g,B=0;if(A=$.replace(J,(E,j)=>{if(j==="%")return"%";if(B>=w.length)return E;let T=w[B++];switch(j){case"s":return String(T);case"d":case"i":return Number(T).toString();case"j":case"o":return JSON.stringify(T,null,2);default:return E}}),B<w.length)A+=` ${w.slice(B).map((E)=>typeof E==="object"?JSON.stringify(E,null,2):String(E)).join(" ")}`}let{consoleText:Y,fileText:f}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let J=this.options.showTags!==!1&&this.name?x.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${x.blue("◐")} `;console.error(`${B}${J} ${x.cyan(Y)}`)}let W=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${f}
148
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(W)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!_.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=x.green("━".repeat(Y)),U=x.gray("━".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=this.options.showIcons===!1?"":w||A===100?x.green("✓"):x.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${x.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=_.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,_.stdout.write($.lastRenderedLine),w)_.stdout.write(`
149
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||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(K$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await ff(this.config.logDirectory),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let X=G1(this.config.logDirectory,Y);if($.before)try{if((await z1(X)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${X}:`,U);continue}A.push(X)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await Xf(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function NT($,w={}){let{maxRetries:A=3,retryDelay:Y=1000,isRetryable:f=()=>!0,fallback:X}=w,U=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(J){if(U=J instanceof Error?J:Error(String(J)),W===A||!f(U))break;if(Y>0)await new Promise((B)=>setTimeout(B,Y))}if(X!==void 0)return X;throw U instanceof Error?U:Error(`Unknown error: ${String(U)}`)}function yT($){return $ instanceof o$}function oK($){return $ instanceof If}function eK($){if(yT($))return $.code==="FILE_SYSTEM_ERROR"||$.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((A)=>$.message.toLowerCase().includes(A.toLowerCase()))}class Of{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,A={}){let{prefix:Y,useCamelCase:f=!0,useBackwardCompatibility:X=!0,customParsers:U={},verbose:W=!1,trackPerformance:J=!0}=A,B=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let E=Y||this.generateEnvPrefix($),j={...w};return this.processObject(j,[],E,{useCamelCase:f,useBackwardCompatibility:X,customParsers:U,verbose:W,configName:$}),{config:j,source:{type:"environment",priority:50,timestamp:new Date}}};if(J)return o1.track("applyEnvironmentVariables",B,{configName:$});return B()}generateEnvPrefix($){return $.toUpperCase().replace(/-/g,"_")}formatEnvKey($,w){if(!w)return $.toUpperCase();return $.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=U.map((E)=>this.formatEnvKey(E,Y.useCamelCase)),J=`${A}_${W.join("_")}`,B=Y.useBackwardCompatibility?`${A}_${U.map((E)=>E.toUpperCase()).join("_")}`:null;if(Y.verbose);if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.processObject(X,U,A,Y);else{let E=Uf.env[J]||(B?Uf.env[B]:void 0);if(E!==void 0){if(Y.verbose){let j=Uf.env[J]?J:B}try{$[f]=this.parseEnvironmentValue(E,typeof X,J,Y.customParsers,Y.configName)}catch(j){if(j instanceof Cf)throw j;throw Ww.envVar(J,E,typeof X,Y.configName)}}}}}parseEnvironmentValue($,w,A,Y,f){for(let[X,U]of Object.entries(Y))try{return U($)}catch{continue}for(let X of this.defaultParsers)if(X.canParse($,w))try{return X.parse($)}catch{throw Ww.envVar(A,$,`${w} (via ${X.name} parser)`,f)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[Y,f]of Object.entries(Uf.env))if(Y.startsWith(A)&&f!==void 0)w[Y]=f;return w}validateEnvironmentVariable($,w,A){let Y=[];if(!/^[A-Z_][A-Z0-9_]*$/.test($))Y.push(`Environment variable key "${$}" should only contain uppercase letters, numbers, and underscores`);if(A)try{this.parseEnvironmentValue($,w,A,{})}catch(f){Y.push(`Cannot parse value "${w}" as ${A}: ${f}`)}return{isValid:Y.length===0,errors:Y}}generateEnvVarDocs($,w,A={}){let{prefix:Y,format:f="text"}=A,X=Y||this.generateEnvPrefix($),U=[];switch(this.extractEnvVarInfo(w,[],X,U),f){case"markdown":return this.formatAsMarkdown(U,$);case"json":return JSON.stringify(U,null,2);default:return this.formatAsText(U,$)}}extractEnvVarInfo($,w,A,Y){for(let[f,X]of Object.entries($)){let U=[...w,f],W=`${A}_${U.map((J)=>this.formatEnvKey(J,!0)).join("_")}`;if(typeof X==="object"&&X!==null&&!Array.isArray(X))this.extractEnvVarInfo(X,U,A,Y);else Y.push({key:W,type:Array.isArray(X)?"array":typeof X,description:`Configuration for ${U.join(".")}`,example:this.generateExample(X)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
150
+
151
+ `;for(let Y of $)A+=`${Y.key}
152
+ `,A+=` Type: ${Y.type}
153
+ `,A+=` Description: ${Y.description}
154
+ `,A+=` Example: ${Y.example}
151
155
 
152
156
  `;return A}formatAsMarkdown($,w){let A=`# Environment Variables for ${w}
153
157
 
154
158
  `;A+=`| Variable | Type | Description | Example |
155
159
  `,A+=`|----------|------|-------------|----------|
156
- `;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
157
- `;return A}}function t7($,w){let A=iF("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function kF($,w,A={}){return xF($,w,A,new WeakMap)}function xF($,w,A,J){let{arrayMergeMode:Y="replace",skipNullish:U=!1,customMerger:Z}=A;if(w===null||w===void 0)return U?$:w;if(Z){let B=Z($,w);if(B!==void 0)return B}if(Array.isArray(w)||Array.isArray($))return PF($,w,Y,J);if(!J0(w)||!J0($))return w;return o7($,w,A,J)}function PF($,w,A,J){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return r7($,w);case"smart":return a7($,w,J);default:return w}return w}function r7($,w){let A=[...w];for(let J of $)if(!A.some((Y)=>zZ(Y,J)))A.push(J);return A}function a7($,w,A){if(w.length===0)return $;if($.length===0)return w;if(J0(w[0])&&J0($[0]))return s7($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let Y of $)if(!J.includes(Y))J.push(Y);return J}return w}function s7($,w,A){let J=[...w];for(let Y of $){if(!J0(Y)){J.push(Y);continue}let U=["id","name","key","path","type"],Z=!1;for(let B of U)if(B in Y){if(J.find((E)=>J0(E)&&(B in E)&&E[B]===Y[B])){Z=!0;break}}if(!Z)J.push(Y)}return J}function o7($,w,A,J){let Y=w;if(J0(Y)&&J.has(Y))return J.get(Y);let U={...$};if(J0(Y))J.set(Y,U);for(let Z in Y){if(!Object.prototype.hasOwnProperty.call(Y,Z))continue;let B=Y[Z],W=U[Z];if(A.skipNullish&&(B===null||B===void 0))continue;if(B===null||B===void 0){U[Z]=B;continue}if(J0(B)&&J0(W))U[Z]=xF(W,B,A,J);else if(Array.isArray(B)||Array.isArray(W))U[Z]=PF(W,B,A.arrayMergeMode||"smart",J);else U[Z]=B}return U}function LZ($,w,A="replace"){return kF($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function zZ($,w){if($===w)return!0;if(Array.isArray($)&&Array.isArray(w)){if($.length!==w.length)return!1;for(let A=0;A<$.length;A++)if(!zZ($[A],w[A]))return!1;return!0}if(J0($)&&J0(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let Y of A){if(!Object.prototype.hasOwnProperty.call(w,Y))return!1;if(!zZ($[Y],w[Y]))return!1}return!0}return!1}function J0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class fY{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:Y=!0,cacheTtl:U,trackPerformance:Z=!0,verbose:B=!1}=A;if(Y){let E=f1.getWithFileCheck("file",$);if(E){if(B)console.log(`Configuration loaded from cache: ${$}`);return E}}let W=async()=>{if(!gJ($))return null;try{let E=`?t=${Date.now()}`,j=await import($+E),F=j.default||j,f="default"in j,z=Object.keys(j).length>0;if(!f&&!z)throw new v1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new v1($,Error("Configuration must export a valid object"),"unknown");let q={config:LZ(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(Y)f1.setWithFileCheck("file",q,$,U);return q}catch(E){throw E instanceof Error?Jw.configLoad($,E):Jw.configLoad($,Error(String(E)))}};if(Z)return n1.track("loadFromPath",W,{path:$});return W()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let Y=await this.loadFromPath(J,w,A);if(Y)return Y}catch(Y){if(Y instanceof Error&&Y.name==="ConfigLoadError")throw Y;if(A.verbose)console.warn(`Failed to load config from ${J}:`,Y)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),Y=[];for(let U of J)for(let Z of this.extensions)Y.push($Z(w,`${U}${Z}`));return Y}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(A.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)A.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return A.filter(Boolean)}checkFileAccess($){return DF(async()=>{return gJ($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!gJ($))return J;if(w||A){let Y=this.generateNamePatterns(w||"",A);for(let U of Y)for(let Z of this.extensions){let B=$Z($,`${U}${Z}`);if(await this.checkFileAccess(B))J.push(B)}}else try{let{readdirSync:Y}=await import("fs"),U=Y($);for(let Z of U)if(this.looksLikeConfigFile(Z)){let B=$Z($,Z);if(await this.checkFileAccess(B))J.push(B)}}catch{return[]}return J}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((A)=>A.test($))}async validateConfigFile($){let w=[];try{if(!gJ($))return w.push("Configuration file does not exist"),w;let A=await import($),J=A.default||A;if(J===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof J!=="object"||J===null)w.push("Configuration must be an object");else if(Array.isArray(J))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:Y}=await import("fs"),U=Y($,"utf8");JSON.parse(U)}catch(Y){w.push(`Invalid JSON syntax: ${Y}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(J)=>{try{let Y=await this.loadFromPath(J,{},w);if(Y)A.set(J,Y.config)}catch(Y){if(w.verbose)console.warn(`Failed to preload ${J}:`,Y)}})),A}}class yZ{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:Y=!0,validateTypes:U=!0,customRules:Z=[],trackPerformance:B=!0,verbose:W=!1}=A,E=async()=>{let j=[],F=[],f={stopOnFirstError:J,validateRequired:Y,validateTypes:U,customRules:Z,trackPerformance:B,verbose:W};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,f);else if(Array.isArray(w))return this.validateWithRules($,[...w,...Z],f);else return this.validateWithJSONSchema($,w,f)}catch(z){return j.push({path:"",message:`Validation failed: ${z}`,rule:"system"}),{isValid:!1,errors:j,warnings:F}}};if(B)return await n1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!O7(w))throw new m1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),Y=J.default||J;if(Array.isArray(Y))return this.validateWithRules($,Y,A);else return this.validateWithJSONSchema($,Y,A)}catch(J){throw new m1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],Y=[];return this.validateObjectAgainstSchema($,w,"",J,Y,A),{isValid:J.length===0,errors:J,warnings:Y}}validateObjectAgainstSchema($,w,A,J,Y,U){if(U.validateTypes&&w.type){let Z=Array.isArray($)?"array":typeof $,B=Array.isArray(w.type)?w.type:[w.type];if(!B.includes(Z)){if(J.push({path:A,message:`Expected type ${B.join(" or ")}, got ${Z}`,expected:B.join(" or "),actual:Z,rule:"type"}),U.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(J.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),U.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)J.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)J.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))J.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)J.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)J.push({path:A,message:`Value must not exceed ${w.maximum}`,expected:`<= ${w.maximum}`,actual:$,rule:"maximum"})}if(Array.isArray($)&&w.items)for(let Z=0;Z<$.length;Z++){let B=A?`${A}[${Z}]`:`[${Z}]`;if(this.validateObjectAgainstSchema($[Z],w.items,B,J,Y,U),U.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let Z=$;if(U.validateRequired&&w.required){for(let B of w.required)if(!(B in Z)){if(J.push({path:A?`${A}.${B}`:B,message:`Missing required property '${B}'`,expected:"required",rule:"required"}),U.stopOnFirstError)return}}if(w.properties){for(let[B,W]of Object.entries(w.properties))if(B in Z){let E=A?`${A}.${B}`:B;if(this.validateObjectAgainstSchema(Z[B],W,E,J,Y,U),U.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let B=new Set(Object.keys(w.properties||{}));for(let W of Object.keys(Z))if(!B.has(W))Y.push({path:A?`${A}.${W}`:W,message:`Additional property '${W}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],Y=[];for(let U of w)try{let Z=this.getValueByPath($,U.path),B=this.validateWithRule(Z,U,U.path);if(J.push(...B),A.stopOnFirstError&&J.length>0)break}catch(Z){J.push({path:U.path,message:`Rule validation failed: ${Z}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:Y}}validateWithRule($,w,A){let J=[];if(w.required&&($===void 0||$===null))return J.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),J;if($===void 0||$===null)return J;if(w.type){let Y=Array.isArray($)?"array":typeof $;if(Y!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${Y}`,expected:w.type,actual:Y,rule:"type"})}if(w.min!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:Y,rule:"min"})}if(w.max!==void 0){let Y=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(Y>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:Y,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))J.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))J.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let Y=w.validator($);if(Y)J.push({path:A,message:w.message||Y,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let Y of A)if(J&&typeof J==="object"&&Y in J)J=J[Y];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,Y,U,Z]=J;w.push({path:Y,required:!U,type:this.mapTypeScriptType(Z)})}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:nF},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class VZ{fileLoader=new fY;envProcessor=new zY;validator=new yZ;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:Y,validate:U,...Z}=$;try{if(A?.enabled){let W=this.checkCache(Z.name||"",Z);if(W)return W}let B;try{B=await this.loadConfigurationStrategies(Z,!0,A)}catch(W){let E=Z.__strictErrorHandling;if(W instanceof Error&&W.name==="ConfigNotFoundError"){if(E)throw W;B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`No configuration file found for "${Z.name||"config"}", using defaults with environment variables`]}}else if(W instanceof Error&&W.name==="ConfigLoadError"){let j=W.message.includes("EACCES")||W.message.includes("EPERM")||W.message.includes("permission denied"),F=!j&&(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(E&&(f||j))throw W;if(F&&(!E||!f))B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading error, using defaults: ${W.message}`]};else throw W}else B={...await this.applyEnvironmentVariables(Z.name||"",Z.defaultConfig,Z.checkEnv!==!1,Z.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${W instanceof Error?W.message:String(W)}`]}}if(Y||U)await this.validateConfiguration(B.config,Y,U,Z.name);if(A?.enabled&&B)this.cacheResult(Z.name||"",B,A,Z);if(J?.enabled){let W={operation:"loadConfig",duration:Date.now()-w,configName:Z.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(W);if(J.slowThreshold&&W.duration>J.slowThreshold)H0.warn(`Slow configuration loading detected: ${W.duration}ms for ${Z.name}`);B.metrics=W}return B}catch(B){let W=Date.now()-w;throw H0.error(`Configuration loading failed after ${W}ms:`,[B instanceof Error?B:Error(String(B))]),B}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:Y,cwd:U,configDir:Z,defaultConfig:B,checkEnv:W=!0,arrayStrategy:E="replace",verbose:j=!1}=$,F=U||Tw.cwd(),f=[],z=await this.loadLocalConfiguration(J,Y,F,Z,B,E,j,W,A);if(z)return f.push(...this.getLocalSearchPaths(J,Y,F,Z)),this.finalizeResult(z,f,W,J,j);let H=await this.loadHomeConfiguration(J,Y,B,E,j,W);if(H)return f.push(...this.getHomeSearchPaths(J,Y)),this.finalizeResult(H,f,W,J,j);let T=await this.loadPackageJsonConfiguration(J,Y,F,B,E,j,W);if(T)return f.push(b$(F,"package.json")),this.finalizeResult(T,f,W,J,j);if(f.push(...this.getAllSearchPaths(J,Y,F,Z)),w)throw Jw.configNotFound(J,f,Y);return{...await this.applyEnvironmentVariables(J,B,W,j),warnings:[`No configuration file found for "${J}"${Y?` or alias "${Y}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,Y,U,Z,B,W){let E=B?u1($,Y,Z):Y,j=this.getLocalDirectories(A,J);for(let F of j){if(Z)H0.info(`Searching for configuration in: ${F}`);let f=this.fileLoader.generateConfigPaths($,F,w),z=await this.fileLoader.tryLoadFromPaths(f,E,{arrayStrategy:U,verbose:Z,cacheTtl:W?.ttl,useCache:!W?.ttl||W.ttl>100});if(z){if(Z)H0.success(`Configuration loaded from: ${z.source.path}`);return z}}return null}async loadHomeConfiguration($,w,A,J,Y,U){if(!$)return null;let Z=U?u1($,A,Y):A,B=[b$(J1(),".config",$),b$(J1(),".config"),J1()];for(let W of B){if(Y)H0.info(`Checking home directory: ${W}`);let E=this.fileLoader.generateConfigPaths($,W,w),j=await this.fileLoader.tryLoadFromPaths(E,Z,{arrayStrategy:J,verbose:Y});if(j){if(Y)H0.success(`Configuration loaded from home directory: ${j.source.path}`);return j}}return null}async loadPackageJsonConfiguration($,w,A,J,Y,U,Z){let B=Z?u1($,J,U):J;try{let W=b$(A,"package.json");if(!jZ(W))return null;let E=await import(W),j=E[$],F=$;if(!j&&w)j=E[w],F=w;if(j&&typeof j==="object"&&!Array.isArray(j)){if(U)H0.success(`Configuration loaded from package.json: ${F}`);return{config:LZ(B,j,Y),source:{type:"package.json",path:W,priority:30,timestamp:new Date}}}}catch(W){if(U)H0.warn("Failed to load package.json:",[W instanceof Error?W:Error(String(W))])}return null}async applyEnvironmentVariables($,w,A,J){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:u1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,Y){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let Y=[];if(A){let U=A($);if(U)Y.push(...U)}if(w){let U=await this.validator.validateConfiguration($,w);if(!U.isValid)Y.push(...U.errors.map((Z)=>Z.path?`${Z.path}: ${Z.message}`:Z.message))}if(Y.length>0)throw Jw.configValidation(J||"unknown",Y,J)}checkCache($,w){let A=this.generateCacheKey($,w);return f1.get(A)||null}cacheResult($,w,A,J){let Y=this.generateCacheKey($,J);f1.set(Y,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias)A.push(`alias:${w.alias}`);if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,b$($,"config"),b$($,".config"),w?b$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let Y=[];return Y.push(...this.getLocalSearchPaths($,w,A,J)),Y.push(...this.getHomeSearchPaths($,w)),Y.push(b$(A,"package.json")),Y}getLocalSearchPaths($,w,A,J){let Y=this.getLocalDirectories(A,J),U=[];for(let Z of Y)U.push(...this.fileLoader.generateConfigPaths($,Z,w));return U}getHomeSearchPaths($,w){if(!$)return[];let A=[b$(J1(),".config",$),b$(J1(),".config"),J1()],J=[];for(let Y of A)J.push(...this.fileLoader.generateConfigPaths($,Y,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function WF($){let A=!($.message.includes("EACCES")||$.message.includes("EPERM")||$.message.includes("permission denied"))&&($.message.includes("syntax")||$.message.includes("Expected")||$.message.includes("Unexpected")||$.message.includes("BuildMessage")),J=$.message.includes("Configuration must export a valid object")||$.message.includes("Configuration file is empty and exports nothing");return A||J}async function e7($){return d0.loadConfig({...$,__strictErrorHandling:!0})}async function bF($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let J;if(A)J=await d0.loadConfig($);else J=await d0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return J?.config??w}catch(J){let Y=J instanceof Error?J.name:"UnknownError",U=J instanceof Error?J.message:String(J);if(!(Y==="ConfigNotFoundError"||Y==="ConfigLoadError"||Y==="ConfigValidationError"||U.includes("config"))&&$.verbose)H0.warn("Unexpected error loading config, using defaults:",[J instanceof Error?J:Error(String(J))]);let B=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await d0.applyEnvironmentVariables(B.name||"",w,!0,B.verbose||!1))?.config??w;return w}}async function $5($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await d0.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(A){if(A instanceof Error&&(A.name==="ConfigNotFoundError"||A.name==="ConfigLoadError"&&WF(A)))return(await d0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await d0.loadConfig({...$,cwd:$.cwd||Tw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&WF(w)))return(await d0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function w5($,w,A="replace"){let J=new fY;try{let Y=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return Y?Y.config:null}catch{return null}}function u1($,w,A=!1){let J=new zY,Y=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function U(Z,B=[]){let W={...Z};for(let[E,j]of Object.entries(Z)){let F=[...B,E],f=[`${Y}_${F.join("_").toUpperCase()}`,`${Y}_${F.map((T)=>T.toUpperCase()).join("")}`,`${Y}_${F.map((T)=>T.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],z,H;for(let T of f)if(z=Tw.env[T],z!==void 0){H=T;break}if(z!==void 0&&H)if(typeof j==="boolean")W[E]=["true","1","yes"].includes(z.toLowerCase());else if(typeof j==="number"){let T=Number(z);if(!Number.isNaN(T))W[E]=T}else if(Array.isArray(j))try{W[E]=JSON.parse(z)}catch{W[E]=z.split(",").map((T)=>T.trim())}else W[E]=z;else if(j&&typeof j==="object"&&!Array.isArray(j))W[E]=U(j,F)}return W}return U(w)}function A5($){let w=b$(Tw.cwd(),$.configDir),A=b$(Tw.cwd(),$.generatedDir),J=b$(A,"config-types.ts");if(!jZ(gj(J)))Z7(gj(J),{recursive:!0,mode:511});let Y=jZ(w)?W7(w).map((Z)=>Z.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],U=`// Generated by bunfig v${_5}
158
- export type ConfigNames = ${Y.length?`'${Y.join("' | '")}'`:"string"}
159
- `;B7(J,U,{mode:438})}function J5($){let w=null,A=null,J=()=>{if(!A)A=bF($).then((U)=>{return w=U,U},(U)=>{let Z="defaultConfig"in $?$.defaultConfig:{};if(w=Z,"verbose"in $&&$.verbose)H0.warn("Config loading failed, using defaults:",[U instanceof Error?U:Error(String(U))]);return Z});return A},Y="defaultConfig"in $?$.defaultConfig:{};return w=Y,J(),new Proxy({},{get(U,Z){if(w)return w[Z];let B=Y[Z];return J(),B},has(U,Z){return Z in(w||Y)},ownKeys(){return Object.keys(w||Y)},getOwnPropertyDescriptor(U,Z){return Object.getOwnPropertyDescriptor(w||Y,Z)},set(U,Z,B){if(!w)w={...Y};return w[Z]=B,!0}})}function Y5($){let w=ZF(D7.cwd(),$?.configDir||"./config");function A(){if(!X7(w))return[];let Y=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),U=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],Z=_7(w).filter((W)=>Y.has(wZ(W))).map((W)=>({base:W.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:W})),B=new Map;for(let{base:W,file:E}of Z){let j=wZ(E).toLowerCase(),F=B.get(W);if(!F){B.set(W,E);continue}let f=wZ(F).toLowerCase();if(U.indexOf(j)<U.indexOf(f))B.set(W,E)}return Array.from(B.entries()).map(([W,E])=>({base:W,file:E})).sort((W,E)=>W.base.localeCompare(E.base))}function J(){let Y=A(),U=Y.map((E)=>E.base),Z=U.length?U.map((E)=>`'${E}'`).join(" | "):"string",B=Y.length?`{
160
- ${Y.map((E)=>{let j=ZF(w,E.file).replace(/\\/g,"/");return` '${E.base}': typeof import('${j}').default`}).join(`,
160
+ `;for(let Y of $)A+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
161
+ `;return A}}function $6($,w){let A=LT("process");if(typeof A>"u"||!A.env)return w;let Y=A.env[$];return Y!==void 0?Y:w}function MT($,w,A={}){return IT($,w,A,new WeakMap)}function IT($,w,A,Y){let{arrayMergeMode:f="replace",skipNullish:X=!1,customMerger:U}=A;if(w===null||w===void 0)return X?$:w;if(U){let W=U($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return CT($,w,f,Y);if(!J0(w)||!J0($))return w;return f6($,w,A,Y)}function CT($,w,A,Y){if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray($)&&!Array.isArray(w))return w;if(Array.isArray(w)&&Array.isArray($))switch(A){case"replace":return w;case"concat":return w6($,w);case"smart":return A6($,w,Y);default:return w}return w}function w6($,w){let A=[...w];for(let Y of $)if(!A.some((f)=>iU(f,Y)))A.push(Y);return A}function A6($,w,A){if(w.length===0)return $;if($.length===0)return w;if(J0(w[0])&&J0($[0]))return Y6($,w,A);if(w.every((Y)=>typeof Y==="string")&&$.every((Y)=>typeof Y==="string")){let Y=[...w];for(let f of $)if(!Y.includes(f))Y.push(f);return Y}return w}function Y6($,w,A){let Y=[...w];for(let f of $){if(!J0(f)){Y.push(f);continue}let X=["id","name","key","path","type"],U=!1;for(let W of X)if(W in f){if(Y.find((B)=>J0(B)&&(W in B)&&B[W]===f[W])){U=!0;break}}if(!U)Y.push(f)}return Y}function f6($,w,A,Y){let f=w;if(J0(f)&&Y.has(f))return Y.get(f);let X={...$};if(J0(f))Y.set(f,X);for(let U in f){if(!Object.prototype.hasOwnProperty.call(f,U))continue;let W=f[U],J=X[U];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){X[U]=W;continue}if(J0(W)&&J0(J))X[U]=IT(J,W,A,Y);else if(Array.isArray(W)||Array.isArray(J))X[U]=CT(J,W,A.arrayMergeMode||"smart",Y);else X[U]=W}return X}function aU($,w,A="replace"){return MT($,w,{arrayMergeMode:A==="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 A=0;A<$.length;A++)if(!iU($[A],w[A]))return!1;return!0}if(J0($)&&J0(w)){let A=Object.keys($),Y=Object.keys(w);if(A.length!==Y.length)return!1;for(let f of A){if(!Object.prototype.hasOwnProperty.call(w,f))return!1;if(!iU($[f],w[f]))return!1}return!0}return!1}function J0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class Vf{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:Y="replace",useCache:f=!0,cacheTtl:X,trackPerformance:U=!0,verbose:W=!1}=A;if(f){let B=q1.getWithFileCheck("file",$);if(B){if(W)console.log(`Configuration loaded from cache: ${$}`);return B}}let J=async()=>{if(!Jf($))return null;try{let B=`?t=${Date.now()}`,E=await import($+B),j=E.default||E,T="default"in E,F=Object.keys(E).length>0;if(!T&&!F)throw new a1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof j!=="object"||j===null||Array.isArray(j))throw new a1($,Error("Configuration must export a valid object"),"unknown");let K={config:aU(w,j,Y),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(f)q1.setWithFileCheck("file",K,$,X);return K}catch(B){throw B instanceof Error?Ww.configLoad($,B):Ww.configLoad($,Error(String(B)))}};if(U)return o1.track("loadFromPath",J,{path:$});return J()}async tryLoadFromPaths($,w,A={}){for(let Y of $)try{let f=await this.loadFromPath(Y,w,A);if(f)return f}catch(f){if(f instanceof Error&&f.name==="ConfigLoadError")throw f;if(A.verbose)console.warn(`Failed to load config from ${Y}:`,f)}return null}generateConfigPaths($,w,A){let Y=this.generateNamePatterns($,A),f=[];for(let X of Y)for(let U of this.extensions)f.push(CU(w,`${X}${U}`));return f}generateNamePatterns($,w){let A=[];if(A.push("config",".config"),$)A.push($,`.${$}.config`,`${$}.config`,`.${$}`);if(w){if(A.push(w,`.${w}.config`,`${w}.config`,`.${w}`),$)A.push(`${$}.${w}.config`,`.${$}.${w}.config`)}return A.filter(Boolean)}checkFileAccess($){return NT(async()=>{return Jf($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let Y=[];if(!Jf($))return Y;if(w||A){let f=this.generateNamePatterns(w||"",A);for(let X of f)for(let U of this.extensions){let W=CU($,`${X}${U}`);if(await this.checkFileAccess(W))Y.push(W)}}else try{let{readdirSync:f}=await import("fs"),X=f($);for(let U of X)if(this.looksLikeConfigFile(U)){let W=CU($,U);if(await this.checkFileAccess(W))Y.push(W)}}catch{return[]}return Y}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((A)=>A.test($))}async validateConfigFile($){let w=[];try{if(!Jf($))return w.push("Configuration file does not exist"),w;let A=await import($),Y=A.default||A;if(Y===void 0)w.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)w.push("Configuration must be an object");else if(Array.isArray(Y))w.push("Configuration cannot be an array at the root level");if($.endsWith(".json"))try{let{readFileSync:f}=await import("fs"),X=f($,"utf8");JSON.parse(X)}catch(f){w.push(`Invalid JSON syntax: ${f}`)}}catch(A){w.push(`Failed to load configuration file: ${A}`)}return w}async getFileModificationTime($){try{let{statSync:w}=await import("fs");return w($).mtime}catch{return null}}async preloadConfigurations($,w={}){let A=new Map;return await Promise.allSettled($.map(async(Y)=>{try{let f=await this.loadFromPath(Y,{},w);if(f)A.set(Y,f.config)}catch(f){if(w.verbose)console.warn(`Failed to preload ${Y}:`,f)}})),A}}class sU{async validateConfiguration($,w,A={}){let{stopOnFirstError:Y=!1,validateRequired:f=!0,validateTypes:X=!0,customRules:U=[],trackPerformance:W=!0,verbose:J=!1}=A,B=async()=>{let E=[],j=[],T={stopOnFirstError:Y,validateRequired:f,validateTypes:X,customRules:U,trackPerformance:W,verbose:J};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,T);else if(Array.isArray(w))return this.validateWithRules($,[...w,...U],T);else return this.validateWithJSONSchema($,w,T)}catch(F){return E.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:E,warnings:j}}};if(W)return await o1.track("validateConfiguration",B);return B()}async validateWithSchemaFile($,w,A){try{if(!xK(w))throw new s1(w,[{path:"",message:"Schema file does not exist"}]);let Y=await import(w),f=Y.default||Y;if(Array.isArray(f))return this.validateWithRules($,f,A);else return this.validateWithJSONSchema($,f,A)}catch(Y){throw new s1(w,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema($,w,A){let Y=[],f=[];return this.validateObjectAgainstSchema($,w,"",Y,f,A),{isValid:Y.length===0,errors:Y,warnings:f}}validateObjectAgainstSchema($,w,A,Y,f,X){if(X.validateTypes&&w.type){let U=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(U)){if(Y.push({path:A,message:`Expected type ${W.join(" or ")}, got ${U}`,expected:W.join(" or "),actual:U,rule:"type"}),X.stopOnFirstError)return}}if(w.enum&&!w.enum.includes($)){if(Y.push({path:A,message:`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"}),X.stopOnFirstError)return}if(typeof $==="string"){if(w.minLength!==void 0&&$.length<w.minLength)Y.push({path:A,message:`String length must be at least ${w.minLength}`,expected:`>= ${w.minLength}`,actual:$.length,rule:"minLength"});if(w.maxLength!==void 0&&$.length>w.maxLength)Y.push({path:A,message:`String length must not exceed ${w.maxLength}`,expected:`<= ${w.maxLength}`,actual:$.length,rule:"maxLength"});if(w.pattern){if(!new RegExp(w.pattern).test($))Y.push({path:A,message:`String does not match pattern ${w.pattern}`,expected:w.pattern,actual:$,rule:"pattern"})}}if(typeof $==="number"){if(w.minimum!==void 0&&$<w.minimum)Y.push({path:A,message:`Value must be at least ${w.minimum}`,expected:`>= ${w.minimum}`,actual:$,rule:"minimum"});if(w.maximum!==void 0&&$>w.maximum)Y.push({path:A,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 W=A?`${A}[${U}]`:`[${U}]`;if(this.validateObjectAgainstSchema($[U],w.items,W,Y,f,X),X.stopOnFirstError&&Y.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let U=$;if(X.validateRequired&&w.required){for(let W of w.required)if(!(W in U)){if(Y.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),X.stopOnFirstError)return}}if(w.properties){for(let[W,J]of Object.entries(w.properties))if(W in U){let B=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(U[W],J,B,Y,f,X),X.stopOnFirstError&&Y.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let J of Object.keys(U))if(!W.has(J))f.push({path:A?`${A}.${J}`:J,message:`Additional property '${J}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let Y=[],f=[];for(let X of w)try{let U=this.getValueByPath($,X.path),W=this.validateWithRule(U,X,X.path);if(Y.push(...W),A.stopOnFirstError&&Y.length>0)break}catch(U){Y.push({path:X.path,message:`Rule validation failed: ${U}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:f}}validateWithRule($,w,A){let Y=[];if(w.required&&($===void 0||$===null))return Y.push({path:A,message:w.message||`Property '${A}' is required`,expected:"required",rule:"required"}),Y;if($===void 0||$===null)return Y;if(w.type){let f=Array.isArray($)?"array":typeof $;if(f!==w.type)Y.push({path:A,message:w.message||`Expected type ${w.type}, got ${f}`,expected:w.type,actual:f,rule:"type"})}if(w.min!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f<w.min)Y.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:f,rule:"min"})}if(w.max!==void 0){let f=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(f>w.max)Y.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:f,rule:"max"})}if(w.pattern&&typeof $==="string"){if(!w.pattern.test($))Y.push({path:A,message:w.message||`Value does not match pattern ${w.pattern}`,expected:w.pattern.toString(),actual:$,rule:"pattern"})}if(w.enum&&!w.enum.includes($))Y.push({path:A,message:w.message||`Value must be one of: ${w.enum.join(", ")}`,expected:w.enum.join(", "),actual:$,rule:"enum"});if(w.validator){let f=w.validator($);if(f)Y.push({path:A,message:w.message||f,rule:"custom"})}return Y}getValueByPath($,w){if(!w)return $;let A=w.split("."),Y=$;for(let f of A)if(Y&&typeof Y==="object"&&f in Y)Y=Y[f];else return;return Y}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of A){let[,f,X,U]=Y;w.push({path:f,required:!X,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:DT},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class oU{fileLoader=new Vf;envProcessor=new Of;validator=new sU;async loadConfig($){let w=Date.now(),{cache:A,performance:Y,schema:f,validate:X,...U}=$;try{if(A?.enabled){let J=this.checkCache(U.name||"",U);if(J)return J}let W;try{W=await this.loadConfigurationStrategies(U,!0,A)}catch(J){let B=U.__strictErrorHandling;if(J instanceof Error&&J.name==="ConfigNotFoundError"){if(B)throw J;W={...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(J instanceof Error&&J.name==="ConfigLoadError"){let E=J.message.includes("EACCES")||J.message.includes("EPERM")||J.message.includes("permission denied"),j=!E&&(J.message.includes("syntax")||J.message.includes("Expected")||J.message.includes("Unexpected")||J.message.includes("BuildMessage")||J.message.includes("errors building")),T=J.message.includes("Configuration must export a valid object")||J.message.includes("Configuration file is empty and exports nothing");if(B&&(T||E))throw J;if(j&&(!B||!T))W={...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(!B)W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading error, using defaults: ${J.message}`]};else throw J}else W={...await this.applyEnvironmentVariables(U.name||"",U.defaultConfig,U.checkEnv!==!1,U.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${J instanceof Error?J.message:String(J)}`]}}if(f||X)await this.validateConfiguration(W.config,f,X,U.name);if(A?.enabled&&W)this.cacheResult(U.name||"",W,A,U);if(Y?.enabled){let J={operation:"loadConfig",duration:Date.now()-w,configName:U.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(J);if(Y.slowThreshold&&J.duration>Y.slowThreshold)q0.warn(`Slow configuration loading detected: ${J.duration}ms for ${U.name}`);W.metrics=J}return W}catch(W){let J=Date.now()-w;throw q0.error(`Configuration loading failed after ${J}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:Y="",alias:f,cwd:X,configDir:U,defaultConfig:W,checkEnv:J=!0,arrayStrategy:B="replace",verbose:E=!1}=$,j=X||Nw.cwd(),T=[],F=await this.loadLocalConfiguration(Y,f,j,U,W,B,E,J,A);if(F)return T.push(...this.getLocalSearchPaths(Y,f,j,U)),this.finalizeResult(F,T,J,Y,E);let H=await this.loadHomeConfiguration(Y,f,W,B,E,J);if(H)return T.push(...this.getHomeSearchPaths(Y,f)),this.finalizeResult(H,T,J,Y,E);let G=await this.loadPackageJsonConfiguration(Y,f,j,W,B,E,J);if(G)return T.push(u$(j,"package.json")),this.finalizeResult(G,T,J,Y,E);if(T.push(...this.getAllSearchPaths(Y,f,j,U)),w)throw Ww.configNotFound(Y,T,f);return{...await this.applyEnvironmentVariables(Y,W,J,E),warnings:[`No configuration file found for "${Y}"${f?` or alias "${f}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,Y,f,X,U,W,J){let B=W?p1($,f,U):f,E=this.getLocalDirectories(A,Y);for(let j of E){if(U)q0.info(`Searching for configuration in: ${j}`);let T=this.fileLoader.generateConfigPaths($,j,w),F=await this.fileLoader.tryLoadFromPaths(T,B,{arrayStrategy:X,verbose:U,cacheTtl:J?.ttl,useCache:!J?.ttl||J.ttl>100});if(F){if(U)q0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,Y,f,X){if(!$)return null;let U=X?p1($,A,f):A,W=[u$(E1(),".config",$),u$(E1(),".config"),E1()];for(let J of W){if(f)q0.info(`Checking home directory: ${J}`);let B=this.fileLoader.generateConfigPaths($,J,w),E=await this.fileLoader.tryLoadFromPaths(B,U,{arrayStrategy:Y,verbose:f});if(E){if(f)q0.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration($,w,A,Y,f,X,U){let W=U?p1($,Y,X):Y;try{let J=u$(A,"package.json");if(!xU(J))return null;let B=await import(J),E=B[$],j=$;if(!E&&w)E=B[w],j=w;if(E&&typeof E==="object"&&!Array.isArray(E)){if(X)q0.success(`Configuration loaded from package.json: ${j}`);return{config:aU(W,E,f),source:{type:"package.json",path:J,priority:30,timestamp:new Date}}}}catch(J){if(X)q0.warn("Failed to load package.json:",[J instanceof Error?J:Error(String(J))])}return null}async applyEnvironmentVariables($,w,A,Y){if(!A||!$||typeof w!=="object"||w===null||Array.isArray(w))return{config:w,source:{type:"default",priority:10,timestamp:new Date}};return{config:p1($,w,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,Y,f){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,Y){let f=[];if(A){let X=A($);if(X)f.push(...X)}if(w){let X=await this.validator.validateConfiguration($,w);if(!X.isValid)f.push(...X.errors.map((U)=>U.path?`${U.path}: ${U.message}`:U.message))}if(f.length>0)throw Ww.configValidation(Y||"unknown",f,Y)}checkCache($,w){let A=this.generateCacheKey($,w);return q1.get(A)||null}cacheResult($,w,A,Y){let f=this.generateCacheKey($,Y);q1.set(f,w,void 0,A.ttl)}generateCacheKey($,w){let A=[$];if(w.alias)A.push(`alias:${w.alias}`);if(w.cwd)A.push(`cwd:${w.cwd}`);if(w.configDir)A.push(`configDir:${w.configDir}`);if("checkEnv"in w)A.push(`checkEnv:${w.checkEnv}`);return A.join("|")}getLocalDirectories($,w){return Array.from(new Set([$,u$($,"config"),u$($,".config"),w?u$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,Y){let f=[];return f.push(...this.getLocalSearchPaths($,w,A,Y)),f.push(...this.getHomeSearchPaths($,w)),f.push(u$(A,"package.json")),f}getLocalSearchPaths($,w,A,Y){let f=this.getLocalDirectories(A,Y),X=[];for(let U of f)X.push(...this.fileLoader.generateConfigPaths($,U,w));return X}getHomeSearchPaths($,w){if(!$)return[];let A=[u$(E1(),".config",$),u$(E1(),".config"),E1()],Y=[];for(let f of A)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}async loadConfigWithResult($){return this.loadConfig($)}}function aj($){let A=!($.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 A||Y}async function X6($){return t0.loadConfig({...$,__strictErrorHandling:!0})}async function ST($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let Y;if(A)Y=await t0.loadConfig($);else Y=await t0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return Y?.config??w}catch(Y){let f=Y instanceof Error?Y.name:"UnknownError",X=Y instanceof Error?Y.message:String(Y);if(!(f==="ConfigNotFoundError"||f==="ConfigLoadError"||f==="ConfigValidationError"||X.includes("config"))&&$.verbose)q0.warn("Unexpected error loading config, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);let W=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await t0.applyEnvironmentVariables(W.name||"",w,!0,W.verbose||!1))?.config??w;return w}}async function U6($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await t0.loadConfig({name:$,cwd:w(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(A){if(A instanceof Error&&(A.name==="ConfigNotFoundError"||A.name==="ConfigLoadError"&&aj(A)))return(await t0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await t0.loadConfig({...$,cwd:$.cwd||Nw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&aj(w)))return(await t0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function J6($,w,A="replace"){let Y=new Vf;try{let f=await Y.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return f?f.config:null}catch{return null}}function p1($,w,A=!1){let Y=new Of,f=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function X(U,W=[]){let J={...U};for(let[B,E]of Object.entries(U)){let j=[...W,B],T=[`${f}_${j.join("_").toUpperCase()}`,`${f}_${j.map((G)=>G.toUpperCase()).join("")}`,`${f}_${j.map((G)=>G.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,H;for(let G of T)if(F=Nw.env[G],F!==void 0){H=G;break}if(F!==void 0&&H)if(typeof E==="boolean")J[B]=["true","1","yes"].includes(F.toLowerCase());else if(typeof E==="number"){let G=Number(F);if(!Number.isNaN(G))J[B]=G}else if(Array.isArray(E))try{J[B]=JSON.parse(F)}catch{J[B]=F.split(",").map((G)=>G.trim())}else J[B]=F;else if(E&&typeof E==="object"&&!Array.isArray(E))J[B]=X(E,j)}return J}return X(w)}function W6($){let w=u$(Nw.cwd(),$.configDir),A=u$(Nw.cwd(),$.generatedDir),Y=u$(A,"config-types.ts");if(!xU(Zj(Y)))TK(Zj(Y),{recursive:!0,mode:511});let f=xU(w)?FK(w).map((U)=>U.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],X=`// Generated by bunfig v${i6}
162
+ export type ConfigNames = ${f.length?`'${f.join("' | '")}'`:"string"}
163
+ `;zK(Y,X,{mode:438})}function B6($){let w=null,A=null,Y=()=>{if(!A)A=ST($).then((X)=>{return w=X,X},(X)=>{let U="defaultConfig"in $?$.defaultConfig:{};if(w=U,"verbose"in $&&$.verbose)q0.warn("Config loading failed, using defaults:",[X instanceof Error?X:Error(String(X))]);return U});return A},f="defaultConfig"in $?$.defaultConfig:{};return w=f,Y(),new Proxy({},{get(X,U){if(w)return w[U];let W=f[U];return Y(),W},has(X,U){return U in(w||f)},ownKeys(){return Object.keys(w||f)},getOwnPropertyDescriptor(X,U){return Object.getOwnPropertyDescriptor(w||f,U)},set(X,U,W){if(!w)w={...f};return w[U]=W,!0}})}function E6($){let w=rj(bK.cwd(),$?.configDir||"./config");function A(){if(!PK(w))return[];let f=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),X=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],U=iK(w).filter((J)=>f.has(SU(J))).map((J)=>({base:J.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:J})),W=new Map;for(let{base:J,file:B}of U){let E=SU(B).toLowerCase(),j=W.get(J);if(!j){W.set(J,B);continue}let T=SU(j).toLowerCase();if(X.indexOf(E)<X.indexOf(T))W.set(J,B)}return Array.from(W.entries()).map(([J,B])=>({base:J,file:B})).sort((J,B)=>J.base.localeCompare(B.base))}function Y(){let f=A(),X=f.map((B)=>B.base),U=X.length?X.map((B)=>`'${B}'`).join(" | "):"string",W=f.length?`{
164
+ ${f.map((B)=>{let E=rj(w,B.file).replace(/\\/g,"/");return` '${B.base}': typeof import('${E}').default`}).join(`,
161
165
  `)}
162
- }`:"Record<string, any>";return`export type ConfigNames = ${Z}
163
- export type ConfigByName = ${B}
166
+ }`:"Record<string, any>";return`export type ConfigNames = ${U}
167
+ export type ConfigByName = ${W}
164
168
  export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
165
169
  export type ConfigOf = Config
166
- `}return{name:"bunfig-plugin",setup(Y){Y.onResolve({filter:/^virtual:bunfig-types$/},(U)=>{return{path:U.path,namespace:"bunfig-virtual"}}),Y.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}function x5($,w={}){let A=jY.cwd();while(A.includes("storage"))A=KF(A,"..");let J=KF(A,$||"");if(w?.relative)return k5(jY.cwd(),J);return J}function G$(){if(n0.env.NODE_ENV==="test"||n0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function l5(){if(n0.env.NODE_ENV==="test"||n0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof n0<"u"){let $=n0.type;if($==="renderer"||$==="worker")return!1;return!!(n0.versions&&(n0.versions.node||n0.versions.bun))}return!1}class pF{async format($){let w=await l5(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}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 Hw{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={...FY},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new pF,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??_.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let A={...w},J=w.timestamp!==void 0;if(J)delete A.timestamp;if(this.config={...this.config,...A,timestamp:J||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let Y=this.generateKeyId(),U=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,U),this.encryptionKeys.set(Y,{key:U,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...EZ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...EZ};return{...EZ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:FY.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!G$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let Y,U=0,Z=3,B=1000;while(U<Z)try{try{try{await v5(this.config.logDirectory,MF.F_OK|MF.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await m5(this.config.logDirectory,{recursive:!0,mode:493});else if(E.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw E;else throw E}}catch(E){throw console.error("Debug: [writeToFile] Failed to create log directory:",E),E}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:c0.from($);try{if(!pJ(this.currentLogFile))await BZ(this.currentLogFile,"",{mode:420});if(Y=NF(this.currentLogFile,"a",420),c5(Y,W,{flag:"a"}),RF(Y),Y!==void 0)WZ(Y),Y=void 0;if((await j1(this.currentLogFile)).size===0){if(await BZ(this.currentLogFile,W,{flag:"w",mode:420}),(await j1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let j=E;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(U<Z-1){let F=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Z}:`,F);let f=B*2**U;await new Promise((z)=>setTimeout(z,f)),U++;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(Y!==void 0)try{WZ(Y)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(W){if(U===Z-1){let j=W,F=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),W}U++;let E=B*2**(U-1);await new Promise((j)=>setTimeout(j,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(J,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(G$())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 A=typeof w.interval==="number"?w.interval:60,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},J)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),J=this.generateKey();this.currentKeyId=A,this.keys.set(A,J),this.encryptionKeys.set(A,{key:J,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,B],[,W])=>W.createdAt.getTime()-B.createdAt.getTime()),U=typeof w.maxKeys==="number"?w.maxKeys:1,Z=Math.max(1,U);if(Y.length>Z)for(let[B]of Y.slice(Z))this.encryptionKeys.delete(B),this.keys.delete(B)}generateKeyId(){return ZZ(16).toString("hex")}generateKey(){return ZZ(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(),A=ZZ(16),J=b5("aes-256-gcm",w,A),Y=c0.isBuffer($)?$:c0.from($,"utf8"),U=J.update(Y),Z=J.final(),B=U.length+Z.length,W=J.getAuthTag(),E=c0.allocUnsafe(16+B+16);return A.copy(E,0),U.copy(E,16),Z.copy(E,16+U.length),W.copy(E,16+B),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=CF(),Y=[];J.on("data",(U)=>Y.push(U)),J.on("end",()=>w(c0.from(c0.concat(Y)))),J.on("error",A),J.write($),J.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(G$())return;if(!this.shouldWriteToFile())return;let $=await j1(this.currentLogFile).catch(()=>null);if(!$)return;let w=this.config.rotation;if(typeof w==="boolean")return;if(w.maxSize&&$.size>=w.maxSize){let A=this.currentLogFile,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let Y=await tJ(this.config.logDirectory),U=Y.filter((W)=>W.startsWith(this.name)&&/\.log\.\d+$/.test(W)).sort((W,E)=>{let j=Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-j}),Z=U.length>0?Number.parseInt(U[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,B=`${A}.${Z}`;if(await j1(A).catch(()=>null))try{if(await IF(A,B),w.compress)try{let W=`${B}.gz`;await this.compressLogFile(B,W),await rJ(B)}catch(W){console.error("Error compressing rotated file:",W)}if(U.length===0&&!Y.some((W)=>W.endsWith(".log.1")))try{let W=`${A}.1`;await BZ(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 Y=new Date().toISOString().replace(/[:.]/g,"-"),U=A.replace(/\.log$/,`-${Y}.log`);if(await j1(A).catch(()=>null))await IF(A,U)}if(this.currentLogFile=J,w.maxFiles){let U=(await tJ(this.config.logDirectory)).filter((Z)=>Z.startsWith(this.name)).sort((Z,B)=>B.localeCompare(Z));for(let Z of U.slice(w.maxFiles))await rJ(F1(this.config.logDirectory,Z))}}}async compressLogFile($,w){let A=hF($),J=u5(w),Y=CF();await g5(A,Y,J)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let J=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(J);console.log(J)}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()})),pJ(this.currentLogFile))try{let $=NF(this.currentLogFile,"r+");RF($),WZ($)}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(!G$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await tJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await rJ(F1(this.config.logDirectory,A))}catch(J){console.error(`Failed to delete temp file ${A}:`,J)}}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||G$())return!1;let $=typeof _.env.NO_COLOR<"u",w=_.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof _.stderr<"u"&&_.stderr.isTTY||typeof _.stdout<"u"&&_.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:Y,level:U,showTimestamp:Z=!0}=$,B=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(Z)z.push(w);if(U==="warning")z.push("WARN");else if(U==="error")z.push("ERROR");else if(A)z.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)z.push(J.replace(/[[\]]/g,""));return z.push(Y),z.join(" ")}let W=_.stdout.columns||120,E="";if(U==="warning"||U==="error")E=`${A} ${Y}`;else if(U==="info"||U==="success")E=`${A} ${J} ${Y}`;else E=`${A} ${J} ${i.cyan(Y)}`;if(!Z)return E.trim();let j=B(E).trim().length,F=B(w).length,f=Math.max(1,W-2-j-F);return`${E.trim()}${" ".repeat(f)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(U,Z)=>{let B=Number.parseInt(Z,10);return B<w[0].length?String(w[0][B]):U});let A=/%([sdijfo%])/g,J=0,Y=$.replace(A,(U,Z)=>{if(Z==="%")return"%";if(J>=w.length)return U;let B=w[J++];switch(Z){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 U}});if(J<w.length)Y+=` ${w.slice(J).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`;return Y}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,Y)=>{let U=i.underline(i.blue(J)),Z=this.toAbsoluteFilePath(Y);if(Z&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let B=`file://${encodeURI(Z)}`,W="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${B}\x1B\\${U}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${Y}\x1B\\${U}\x1B]8;;\x1B\\`;return U}),w=w.replace(/`([^`]+)`/g,(A,J)=>i.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>i.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>i.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>i.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>i.strikethrough(J)),w}supportsHyperlinks(){if(G$())return!1;let $=_.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 A=_.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(n5(w)||w.startsWith("./")||w.startsWith("../"))w=d5(w);else return null;return pJ(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){if(!this.shouldLog($))return;let J=new Date,Y=this.formatConsoleTimestamp(J),U=this.formatFileTimestamp(J),Z,B;if(w instanceof Error)Z=w.message,B=w.stack;else Z=this.formatMessage(w,A);let{consoleText:W,fileText:E}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":s5[$],f=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",z;switch($){case"debug":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:i.gray(W),level:$}),console.error(z);break;case"info":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"success":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:i.green(W),level:$}),console.error(z);break;case"warning":z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.warn(z);break;case"error":if(z=this.formatConsoleMessage({timestamp:Y,icon:F,tag:f,message:W,level:$}),console.error(z),B){let H=B.split(`
167
- `);for(let T of H)if(T.trim()&&!T.includes(Z))console.error(this.formatConsoleMessage({timestamp:Y,message:i.gray(` ${T}`),level:$,showTimestamp:!1}))}break}}else if(!G$()){if(console.error(`${U} ${this.environment}.${$.toUpperCase()}: ${Z}`),B)console.error(B)}let j=`${U} ${this.environment}.${$.toUpperCase()}: ${E}
168
- `;if(B)j+=`${B}
169
- `;if(j=j.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(j)}progress($,w=""){let A={update:(B,W)=>{},finish:(B)=>{},interrupt:(B,W)=>{}};if(!this.enabled)return A;let J=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:J,lastRenderedLine:""},this.shouldStyleConsole()&&!G$()&&_.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()&&!G$()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(B)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,B)},interrupt:(B,W="info")=>{if(!G$()&&_.stdout.isTTY)_.stdout.write(`
170
- `);if(this[W==="warning"?"warn":W](B),this.activeProgressBar&&this.shouldStyleConsole()&&!G$()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:this.options.showIcons===!1?"":i.blue("◐"),tag:A,message:`${i.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),Y=Math.round(J-w),U=`${$} completed in ${Y}ms`,Z=new Date,B=this.formatConsoleTimestamp(Z),E=`${this.formatFileTimestamp(Z)} ${this.environment}.INFO: ${U}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
171
- `,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=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:j,message:`${U}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!G$())console.error(E.trim());if(this.shouldWriteToFile())await this.writeToFile(E)}}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}:${$}`,A=new Hw(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(A),A}createReadStream(){if(G$())throw Error("createReadStream is not supported in browser environments");if(!pJ(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return hF(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 A=this.keys.get(this.currentKeyId);try{let J=c0.isBuffer($)?$:c0.from($,"base64"),Y=J.subarray(0,16),U=J.subarray(J.length-16),Z=J.subarray(16,J.length-16),B=i5("aes-256-gcm",A,Y);B.setAuthTag(U);let W=B.update(Z),E=B.final(),j=W.length+E.length,F=c0.allocUnsafe(j);return W.copy(F,0),E.copy(F,W.length),F.toString("utf8")}catch(J){throw Error(`Decryption failed: ${J instanceof Error?J.message:String(J)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return G$()}isServerMode(){return!G$()}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,A=this.formatConsoleTimestamp(w),J=this.formatFileTimestamp(w),{consoleText:Y,fileText:U}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let B=Y.split(`
172
- `),W=Math.max(...B.map((f)=>f.length))+2,E=`┌${"─".repeat(W)}┐`,j=`└${"─".repeat(W)}┘`,F=B.map((f)=>{return this.formatConsoleMessage({timestamp:A,message:i.cyan(f),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:i.cyan(E),showTimestamp:!1})),F.forEach((f)=>console.error(f)),console.error(this.formatConsoleMessage({timestamp:A,message:i.cyan(j),showTimestamp:!1}))}else if(!G$())console.error(`${J} ${this.environment}.INFO: [BOX] ${U}`);let Z=`${J} ${this.environment}.INFO: [BOX] ${U}
173
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Z)}async prompt($){if(G$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${i.cyan("?")} ${$} (y/n) `);let A=(J)=>{let Y=J.toString().trim().toLowerCase();_.stdin.removeListener("data",A);try{if(typeof _.stdin.setRawMode==="function")_.stdin.setRawMode(!1)}catch{}_.stdin.pause(),console.error(""),w(Y==="y"||Y==="yes")};try{if(typeof _.stdin.setRawMode==="function")_.stdin.setRawMode(!0)}catch{}_.stdin.resume(),_.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let W=/%([sdijfo%])/g,E=0;if(A=$.replace(W,(j,F)=>{if(F==="%")return"%";if(E>=w.length)return j;let f=w[E++];switch(F){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 j}}),E<w.length)A+=` ${w.slice(E).map((j)=>typeof j==="object"?JSON.stringify(j,null,2):String(j)).join(" ")}`}let{consoleText:J,fileText:Y}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?i.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${i.blue("◐")} `;console.error(`${E}${W} ${i.cyan(J)}`)}let B=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
174
- `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(B)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!_.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),Y=$.barLength-J,U=i.green("━".repeat(J)),Z=i.gray("━".repeat(Y)),B=`[${U}${Z}]`,W=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",j=this.options.showIcons===!1?"":w||A===100?i.green("✓"):i.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${i.gray(this.formatTag(this.name))}`:"",f=`\r${j}${F} ${B} ${W}${E}`,z=_.stdout.columns||80,H=" ".repeat(Math.max(0,z-f.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${f}${H}`,_.stdout.write($.lastRenderedLine),w)_.stdout.write(`
175
- `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||G$()||!_.stdout.isTTY){this.activeProgressBar=null;return}if($.current<$.total)$.current=$.total;if(w)$.message=w;this.renderProgressBar($,!0),this.activeProgressBar=null}async clear($={}){if(G$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await tJ(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let U=F1(this.config.logDirectory,J);if($.before)try{if((await j1(U)).mtime>=$.before)continue}catch(Z){console.error(`Failed to get stats for file ${U}:`,Z);continue}A.push(U)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let J of A)try{await rJ(J),console.warn(`Deleted log file: ${J}`)}catch(Y){console.error(`Failed to delete log file ${J}:`,Y)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}var w7,A7=($)=>$,Y7=($,w)=>{for(var A in w)w7($,A,{get:w[A],enumerable:!0,configurable:!0,set:J7.bind(w,A)})},U7=($,w)=>()=>($&&(w=$($=0)),w),VF,iF,f1,n1,uF,U5,Z5,BF,sJ,fZ,V$,p,W5,EF,B5,jF,E5,j5,AZ,F5,FF,zF,JZ,z5,f5,G5,T5,oJ,cF,H5,S$,q5,K5,fF,eJ,GZ,f$,k,h5,GF,R5,TF,N5,M5,YZ,I5,HF,qF,C5,UZ,L5,y5,V5,S5,O5,$Y,vF,X5,_5="0.15.6",a$,BY,v1,TZ,HZ,EY,qZ,KZ,m1,hZ,RZ,Jw,mF,nF,H0,d0,dF,gF,D5,P5,lF,FY,kI,K$,i,gI,p5,lI,t5,pI,tI,LF,rI,r5,a5,aI,yF,sI,oI,eI,$4,w4,EZ,s5,A4;var SZ=h$(()=>{w7=Object.defineProperty;VF={};Y7(VF,{withErrorRecovery:()=>DF,tryLoadConfig:()=>w5,loadConfigWithResult:()=>e7,loadConfig:()=>bF,isRetryableError:()=>p7,isConfigNotFoundError:()=>l7,isBunfigError:()=>QF,globalPerformanceMonitor:()=>n1,globalCache:()=>f1,getEnvOrDefault:()=>t7,generateConfigTypes:()=>A5,defaultGeneratedDir:()=>gF,defaultConfigDir:()=>dF,deepMergeWithArrayStrategy:()=>LZ,deepMerge:()=>kF,createLibraryConfig:()=>J5,config:()=>$5,bunfigPlugin:()=>Y5,applyEnvVarsToConfig:()=>u1,TypeGenerationError:()=>KZ,SchemaValidationError:()=>m1,PluginError:()=>RZ,PerformanceMonitor:()=>MZ,FileSystemError:()=>qZ,ErrorFactory:()=>Jw,EnvVarError:()=>EY,EnvProcessor:()=>zY,ConfigValidator:()=>yZ,ConfigValidationError:()=>TZ,ConfigNotFoundError:()=>BY,ConfigMergeError:()=>HZ,ConfigLoader:()=>VZ,ConfigLoadError:()=>v1,ConfigFileLoader:()=>fY,ConfigCache:()=>NZ,CacheUtils:()=>uF,BunfigError:()=>a$,BrowserConfigError:()=>hZ,ArrayMergeStrategies:()=>mF});D5=U7(async()=>{iF=import.meta.require,f1=new NZ,n1=new MZ,uF={createKey:Q7,isEquivalent:k7,estimateMemoryUsage:x7},U5=JY(FZ.cwd(),"config"),Z5=JY(FZ.cwd(),"src/generated"),BF=AY.env.CLARITY_LOG_DIR||F7(i7(),"logs"),sJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:BF,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},fZ=await u7(),V$={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"},p=V$,W5=V$.red,EF=V$.green,B5=V$.yellow,jF=V$.blue,E5=V$.magenta,j5=V$.cyan,AZ=V$.white,F5=V$.gray,FF=V$.bgRed,zF=V$.bgYellow,JZ=V$.bold,z5=V$.dim,f5=V$.italic,G5=V$.underline,T5=V$.reset,oJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},cF={debug:"\uD83D\uDD0D",info:jF("ℹ"),success:EF("✓"),warning:zF(AZ(JZ(" WARN "))),error:FF(AZ(JZ(" ERROR ")))},H5=new UY("stacks"),S$=new UY("bunfig",{showTags:!0}),q5=P$(c1.cwd(),"config"),K5=P$(c1.cwd(),"src/generated"),fF=wY.env.CLARITY_LOG_DIR||E7(n7(),"logs"),eJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:fF,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},GZ=await d7(),f$={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"},k=f$,h5=f$.red,GF=f$.green,R5=f$.yellow,TF=f$.blue,N5=f$.magenta,M5=f$.cyan,YZ=f$.white,I5=f$.gray,HF=f$.bgRed,qF=f$.bgYellow,C5=f$.bgGray,UZ=f$.bold,L5=f$.dim,y5=f$.italic,V5=f$.underline,S5=f$.strikethrough,O5=f$.reset,$Y={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},vF={debug:"\uD83D\uDD0D",info:TF("ℹ"),success:GF("✓"),warning:qF(YZ(UZ(" WARN "))),error:HF(YZ(UZ(" ERROR ")))},X5=new WY("stacks"),a$=class extends Error{timestamp;context;constructor(w,A={}){super(w);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=A,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(([A,J])=>`${A}: ${J}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${w}`}},BY=class extends a${code="CONFIG_NOT_FOUND";constructor(w,A,J){let Y=J?` or alias "${J}"`:"";super(`Configuration "${w}"${Y} not found`,{configName:w,alias:J,searchPaths:A,searchPathCount:A.length})}},v1=class extends a${code="CONFIG_LOAD_ERROR";constructor(w,A,J){super(`Failed to load configuration from "${w}": ${A.message}`,{configPath:w,configName:J,originalError:A.name,originalMessage:A.message});this.cause=A}},TZ=class extends a${code="CONFIG_VALIDATION_ERROR";constructor(w,A,J){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:J,validationErrors:A,errorCount:A.length})}},HZ=class extends a${code="CONFIG_MERGE_ERROR";constructor(w,A,J,Y){super(`Failed to merge configuration from "${w}" with "${A}": ${J.message}`,{sourcePath:w,targetPath:A,configName:Y,originalError:J.name,originalMessage:J.message});this.cause=J}},EY=class extends a${code="ENV_VAR_ERROR";constructor(w,A,J,Y){super(`Failed to parse environment variable "${w}" with value "${A}" as ${J}`,{envKey:w,envValue:A,expectedType:J,configName:Y})}},qZ=class extends a${code="FILE_SYSTEM_ERROR";constructor(w,A,J){super(`File system ${w} failed for "${A}": ${J.message}`,{operation:w,path:A,originalError:J.name,originalMessage:J.message});this.cause=J}},KZ=class extends a${code="TYPE_GENERATION_ERROR";constructor(w,A,J){super(`Failed to generate types from "${w}" to "${A}": ${J.message}`,{configDir:w,outputPath:A,originalError:J.name,originalMessage:J.message});this.cause=J}},m1=class extends a${code="SCHEMA_VALIDATION_ERROR";constructor(w,A,J){super(`Schema validation failed${J?` for config "${J}"`:""}`,{schemaPath:w,configName:J,validationErrors:A,errorCount:A.length})}},hZ=class extends a${code="BROWSER_CONFIG_ERROR";constructor(w,A,J,Y){super(`Failed to fetch configuration from "${w}": ${A} ${J}`,{endpoint:w,status:A,statusText:J,configName:Y})}},RZ=class extends a${code="PLUGIN_ERROR";constructor(w,A,J){super(`Plugin "${w}" failed during ${A}: ${J.message}`,{pluginName:w,operation:A,originalError:J.name,originalMessage:J.message});this.cause=J}},Jw={configNotFound($,w,A){return new BY($,w,A)},configLoad($,w,A){return new v1($,w,A)},configValidation($,w,A){return new TZ($,w,A)},configMerge($,w,A,J){return new HZ($,w,A,J)},envVar($,w,A,J){return new EY($,w,A,J)},fileSystem($,w,A){return new qZ($,w,A)},typeGeneration($,w,A){return new KZ($,w,A)},schemaValidation($,w,A){return new m1($,w,A)},browserConfig($,w,A,J){return new hZ($,w,A,J)},plugin($,w,A){return new RZ($,w,A)}},mF={replace:"replace",concat:"concat",smart:"smart"},nF=/^https?:\/\//,H0=new WY("bunfig",{showTags:!0}),d0=new VZ,dF=b$(Tw.cwd(),"config"),gF=b$(Tw.cwd(),"src/generated")});P5=jY.env.CLARITY_LOG_DIR||Q5(x5(),"logs"),lF={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:P5,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},FY={...lF},kI=(async()=>{try{let{loadConfig:$}=await D5().then(()=>VF),w=await $({name:"clarity",alias:"logging",defaultConfig:lF,cwd:jY.cwd()});if(w)Object.assign(FY,w)}catch{}return FY})();K$={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=K$,gI=K$.red,p5=K$.green,lI=K$.yellow,t5=K$.blue,pI=K$.magenta,tI=K$.cyan,LF=K$.white,rI=K$.gray,r5=K$.bgRed,a5=K$.bgYellow,aI=K$.bgGray,yF=K$.bold,sI=K$.dim,oI=K$.italic,eI=K$.underline,$4=K$.strikethrough,w4=K$.reset,EZ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},s5={debug:"\uD83D\uDD0D",info:t5("ℹ"),success:p5("✓"),warning:a5(LF(yF(" WARN "))),error:r5(LF(yF(" ERROR ")))};A4=new Hw("stacks")});var G1={};TW(G1,{safeStringify:()=>Y0,safeDeleteFile:()=>_Z,resolvePathRewrite:()=>XZ,redactSensitive:()=>GY,isValidRootCA:()=>OZ,isSingleProxyOptions:()=>g1,isSingleProxyConfig:()=>J6,isMultiProxyOptions:()=>Kw,isMultiProxyConfig:()=>sF,getSudoPassword:()=>qw,getPrimaryDomain:()=>TY,extractHostname:()=>A6,execSudoSync:()=>d1,debugLog:()=>G});import{execSync as tF}from"node:child_process";import*as aF from"node:fs/promises";function qw(){return process.env.SUDO_PASSWORD}function d1($){let w=qw(),A=$.replace(/'/g,"'\\''");if(w)return tF(`echo '${w}' | sudo -S sh -c '${A}' 2>/dev/null`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});try{return tF(`sudo -n sh -c '${A}'`,{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 G($,w,A){if(A)o5.debug(`[rpx:${$}] ${w}`)}function w6($){let w=$.toLowerCase();return e5.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function GY($){if(Array.isArray($))return $.map((A)=>GY(A));if(typeof $==="string")return $6.test($)?rF:$;if(!$||typeof $!=="object")return $;let w={};for(let[A,J]of Object.entries($)){if(w6(A)){w[A]=rF;continue}w[A]=GY(J)}return w}function Y0($,w){return JSON.stringify(GY($),null,w)}function A6($){if(Kw($))return $.proxies.map((w)=>{let A=w.to||"stacks.localhost";return A.startsWith("http")?new URL(A).hostname:A});if(g1($)){let w=$.to||"stacks.localhost";return[w.startsWith("http")?new URL(w).hostname:w]}return["stacks.localhost"]}function OZ($){return typeof $==="object"&&$!==null&&"certificate"in $&&"privateKey"in $&&typeof $.certificate==="string"&&typeof $.privateKey==="string"}function TY($){if(!$)return"stacks.localhost";if(Kw($)&&$.proxies.length>0)return $.proxies[0].to||"stacks.localhost";if(g1($))return $.to||"stacks.localhost";return"stacks.localhost"}function sF($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}function Kw($){return"proxies"in $&&Array.isArray($.proxies)}function g1($){return"to"in $&&typeof $.to==="string"}function J6($){return!!($&&("to"in $)&&!("proxies"in $))}function XZ($,w){if(!w||w.length===0)return null;for(let A of w)if($===A.from||$.startsWith(`${A.from}/`)){let J=A.to.startsWith("http")?new URL(A.to).host:A.to,Y=A.stripPrefix===!0?$.slice(A.from.length)||"/":$;return{targetHost:J,targetPath:Y}}return null}async function _Z($,w){try{await aF.unlink($),G("certificates",`Successfully deleted: ${$}`,w)}catch(A){if(A.code!=="ENOENT")G("certificates",`Warning: Could not delete ${$}: ${A}`,w)}}var o5,rF="[redacted]",e5,$6;var U$=h$(()=>{SZ();o5=new Hw("rpx",{showTags:!1});e5=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),$6=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/});import{execSync as HY}from"node:child_process";import{homedir as Y6}from"node:os";import{join as U6}from"node:path";function qY(){return U6(Y6(),"Library/Keychains/login.keychain-db")}function QZ(){return[H1,qY()]}function oF($,w=DZ){let A=HY(`security find-certificate -a -c "${w}" -Z "${$}" 2>/dev/null || true`,{encoding:"utf8"}),J=[];for(let Y of A.split(`
176
- `)){let U=Y.match(/SHA-256 hash:\s*([A-F0-9]+)/i);if(U)J.push(U[1].toUpperCase())}return J}function kZ($){if(process.platform!=="darwin")return;let w=iJ($.caPath);if(!w)return;let A=$.commonName??DZ,J=$.keychains??QZ();for(let Y of J)for(let U of oF(Y,A)){if(U===w)continue;try{if(Y.startsWith("/Library"))d1(`security delete-certificate -Z ${U} "${Y}"`);else HY(`security delete-certificate -Z ${U} "${Y}"`,{stdio:"ignore"});G("ssl",`Removed stale Root CA ${U} from ${Y}`,$.verbose)}catch{}}}function xZ($,w,A){if(process.platform!=="darwin")return KY($,A);try{let Y=HY(`security verify-cert -c "${$}" -s "${w}" -l -L -R ssl 2>&1`,{encoding:"utf8"}).includes("successful");return G("ssl",`verify-cert ${w}: ${Y?"trusted":"not trusted"}`,A?.verbose),Y}catch{return!1}}function KY($,w){let A=iJ($);if(!A)return!1;for(let J of QZ())try{let Y=HY(`security find-certificate -a -Z "${J}" 2>/dev/null || true`,{encoding:"utf8"});for(let U of Y.split(`
177
- `))if(U.toUpperCase().includes("SHA-256")){if(U.split("=").pop().replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase()===A)return G("ssl",`Root CA fingerprint found in ${J}`,w?.verbose),!0}}catch{}return!1}var T1="-d -r trustRoot -p ssl -p basic",H1="/Library/Keychains/System.keychain",DZ="rpx.localhost";var PZ=h$(()=>{g8();U$()});import{execSync as q1}from"node:child_process";import T$ from"node:fs/promises";import*as bZ from"node:os";import{homedir as hY}from"node:os";import{join as O$}from"node:path";import*as Yw from"node:process";function w9($){return{caCertPath:O$($,W6),caKeyPath:O$($,B6)}}async function E6($,w){try{let[A,J]=await Promise.all([T$.readFile($.caCertPath,"utf8"),T$.readFile($.caKeyPath,"utf8")]);if(!A.includes("-----BEGIN CERTIFICATE-----")||!J.includes("PRIVATE KEY-----"))return G("ssl",`Root CA files at ${$.caCertPath} look malformed, will regenerate`,w),null;return{certificate:A,privateKey:J}}catch(A){return G("ssl",`No existing Root CA at ${$.caCertPath} (${A.code||A}), will create one`,w),null}}function eF($){let w=new Set;w.add($);let A=$.split(".");if(A.length>=2)w.add(`*.${A.slice(1).join(".")}`);return Array.from(w)}function A9($){let A=TY($).replace(/\*/g,"wildcard"),J=O$(hY(),".stacks","ssl"),Y=J;if(typeof $?.https==="object")return Y=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:J,{caCertPath:$.https.caCertPath||O$(Y,`${A}.ca.crt`),certPath:$.https.certPath||O$(Y,`${A}.crt`),keyPath:$.https.keyPath||O$(Y,`${A}.key`)};return{caCertPath:O$(Y,`${A}.ca.crt`),certPath:O$(Y,`${A}.crt`),keyPath:O$(Y,`${A}.key`)}}function $9($){let w=new Set;if(Kw($))$.proxies.forEach((A)=>{let J=A.to||"rpx.localhost";eF(J).forEach((Y)=>w.add(Y))});else if(g1($)){let A=$.to||"rpx.localhost";eF(A).forEach((J)=>w.add(J))}else w.add("rpx.localhost");return w.add("localhost"),w.add("*.localhost"),w}async function K1($){if(Uw&&!$.forceRegenerate){G("ssl","Using cached SSL configuration",$.verbose);return}j6();let w=Kw($)?$.proxies.map((j)=>j.to):[$.to];G("ssl",`Generating certificate for domains: ${w.join(", ")}`,$.verbose);let A=l1($,$.verbose),J=A.basePath||O$(hY(),".stacks","ssl");await T$.mkdir(J,{recursive:!0});let Y=w9(J),U=await E6(Y,$.verbose),Z=!1;if(!U){if($.verbose)R.info("Generating Root CA certificate (one-time)...");U=await i8(A);try{await Promise.all([T$.writeFile(Y.caCertPath,U.certificate),T$.writeFile(Y.caKeyPath,U.privateKey,{mode:384})]),Z=!0,G("ssl",`Persisted Root CA at ${Y.caCertPath}`,$.verbose)}catch(j){throw G("ssl",`Error saving Root CA files: ${j}`,$.verbose),Error(`Failed to save Root CA files: ${j}`)}}else G("ssl",`Reusing existing Root CA from ${Y.caCertPath}`,$.verbose);if($.verbose)R.info(`Generating host certificate for: ${w.join(", ")}`);let B=await u8({...A,rootCA:{certificate:U.certificate,privateKey:U.privateKey}});try{await Promise.all([T$.writeFile(A.certPath,B.certificate),T$.writeFile(A.keyPath,B.privateKey),T$.writeFile(A.caCertPath,U.certificate)]),G("ssl","Certificate files saved successfully",$.verbose)}catch(j){throw G("ssl",`Error saving certificate files: ${j}`,$.verbose),Error(`Failed to save certificate files: ${j}`)}if(Z?!1:await Y9(Y.caCertPath,{verbose:$.verbose,regenerateUntrustedCerts:!0})){if(G("ssl","Root CA already trusted, skipping trust store update",$.verbose),$.verbose)R.success("Root CA is already trusted in system trust store");if(Uw={key:B.privateKey,cert:B.certificate,ca:U.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 E=!1;if(Yw.platform==="darwin")try{kZ({caPath:Y.caCertPath,verbose:$.verbose});let j=qY();try{q1(`security add-trusted-cert ${T1} -k "${j}" "${Y.caCertPath}"`,{stdio:"ignore"})}catch{}if(d1(`security add-trusted-cert ${T1} -k ${H1} "${Y.caCertPath}"`),$.verbose)R.success("Successfully added Root CA to system trust store");E=!0;let F=O$(J,"trust-rpx-cert.sh"),f=`#!/bin/bash
170
+ `}return{name:"bunfig-plugin",setup(f){f.onResolve({filter:/^virtual:bunfig-types$/},(X)=>{return{path:X.path,namespace:"bunfig-virtual"}}),f.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:Y(),loader:"ts"}})}}}function n6($,w={}){let A=Sf.cwd();while(A.includes("storage"))A=JT(A,"..");let Y=JT(A,$||"");if(w?.relative)return u6(Sf.cwd(),Y);return Y}function h$(){if(g0.env.NODE_ENV==="test"||g0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function o6(){if(g0.env.NODE_ENV==="test"||g0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof g0<"u"){let $=g0.type;if($==="renderer"||$==="worker")return!1;return!!(g0.versions&&(g0.versions.node||g0.versions.bun))}return!1}class PT{async format($){let w=await o6(),A=await this.getMetadata(w);return JSON.stringify({timestamp:$.timestamp.toISOString(),level:$.level,name:$.name,message:$.message,metadata:A})}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 yw{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={...Lf},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new PT,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 A={...w},Y=w.timestamp!==void 0;if(Y)delete A.timestamp;if(this.config={...this.config,...A,timestamp:Y||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let f=this.generateKeyId(),X=this.generateKey();this.currentKeyId=f,this.keys.set(f,X),this.encryptionKeys.set(f,{key:X,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed($){if(!this.fingersCrossedConfig)return!1;let w={debug:0,info:1,success:2,warning:3,error:4},A=this.fingersCrossedConfig.activationLevel??"error";return w[$]>=w[A]}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...ZU,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...ZU};return{...ZU,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:Lf.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},A={...w,...Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==void 0))};if(!A.level||!["debug","info","success","warning","error"].includes(A.level))A.level=w.level;return A}shouldWriteToFile(){return!h$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let f,X=0,U=3,W=1000;while(X<U)try{try{try{await t6(this.config.logDirectory,jT.F_OK|jT.W_OK)}catch(B){if(B instanceof Error&&"code"in B)if(B.code==="ENOENT")await p6(this.config.logDirectory,{recursive:!0,mode:493});else if(B.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw B;else throw B}}catch(B){throw console.error("Debug: [writeToFile] Failed to create log directory:",B),B}let J=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:m0.from($);try{if(!Bf(this.currentLogFile))await kU(this.currentLogFile,"",{mode:420});if(f=ET(this.currentLogFile,"a",420),g6(f,J,{flag:"a"}),BT(f),f!==void 0)DU(f),f=void 0;if((await K1(this.currentLogFile)).size===0){if(await kU(this.currentLogFile,J,{flag:"w",mode:420}),(await K1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(B){let E=B;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(X<U-1){let j=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${X+1}/${U}:`,j);let T=W*2**X;await new Promise((F)=>setTimeout(F,T)),X++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(f!==void 0)try{DU(f)}catch(B){console.error("Debug: [writeToFile] Error closing file descriptor:",B)}}}catch(J){if(X===U-1){let E=J,j=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",j),J}X++;let B=W*2**(X-1);await new Promise((E)=>setTimeout(E,B))}})();this.pendingOperations.push(A);let Y=this.pendingOperations.length-1;try{await A}catch(f){throw console.error("Debug: [writeToFile] Error in operation:",f),f}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 R1(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 R1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return R1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(h$())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 A=typeof w.interval==="number"?w.interval:60,Y=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((f)=>{console.error("Error rotating keys:",f)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let w=this.config.rotation.keyRotation,A=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=A,this.keys.set(A,Y),this.encryptionKeys.set(A,{key:Y,createdAt:new Date});let f=Array.from(this.encryptionKeys.entries()).sort(([,W],[,J])=>J.createdAt.getTime()-W.createdAt.getTime()),X=typeof w.maxKeys==="number"?w.maxKeys:1,U=Math.max(1,X);if(f.length>U)for(let[W]of f.slice(U))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return _U(16).toString("hex")}generateKey(){return _U(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(),A=_U(16),Y=m6("aes-256-gcm",w,A),f=m0.isBuffer($)?$:m0.from($,"utf8"),X=Y.update(f),U=Y.final(),W=X.length+U.length,J=Y.getAuthTag(),B=m0.allocUnsafe(16+W+16);return A.copy(B,0),X.copy(B,16),U.copy(B,16+X.length),J.copy(B,16+W),{encrypted:B,iv:A}}async compressData($){return new Promise((w,A)=>{let Y=FT(),f=[];Y.on("data",(X)=>f.push(X)),Y.on("end",()=>w(m0.from(m0.concat(f)))),Y.on("error",A),Y.write($),Y.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(h$())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 A=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let f=await Ef(this.config.logDirectory),X=f.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,B)=>{let E=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(B.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),U=X.length>0?Number.parseInt(X[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${U}`;if(await K1(A).catch(()=>null))try{if(await TT(A,W),w.compress)try{let J=`${W}.gz`;await this.compressLogFile(W,J),await jf(W)}catch(J){console.error("Error compressing rotated file:",J)}if(X.length===0&&!f.some((J)=>J.endsWith(".log.1")))try{let J=`${A}.1`;await kU(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let f=new Date().toISOString().replace(/[:.]/g,"-"),X=A.replace(/\.log$/,`-${f}.log`);if(await K1(A).catch(()=>null))await TT(A,X)}if(this.currentLogFile=Y,w.maxFiles){let X=(await Ef(this.config.logDirectory)).filter((U)=>U.startsWith(this.name)).sort((U,W)=>W.localeCompare(U));for(let U of X.slice(w.maxFiles))await jf(R1(this.config.logDirectory,U))}}}async compressLogFile($,w){let A=WT($),Y=l6(w),f=FT();await s6(A,f,Y)}async handleFingersCrossedBuffer($,w){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed($)&&!this.isActivated){this.isActivated=!0;for(let A of this.logBuffer){let Y=await this.formatter.format(A);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}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()})),Bf(this.currentLogFile))try{let $=ET(this.currentLogFile,"r+");BT($),DU($)}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(!h$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await Ef(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await jf(R1(this.config.logDirectory,A))}catch(Y){console.error(`Failed to delete temp file ${A}:`,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||h$())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:A="",tag:Y="",message:f,level:X,showTimestamp:U=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(U)F.push(w);if(X==="warning")F.push("WARN");else if(X==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)F.push(Y.replace(/[[\]]/g,""));return F.push(f),F.join(" ")}let J=D.stdout.columns||120,B="";if(X==="warning"||X==="error")B=`${A} ${f}`;else if(X==="info"||X==="success")B=`${A} ${Y} ${f}`;else B=`${A} ${Y} ${c.cyan(f)}`;if(!U)return B.trim();let E=W(B).trim().length,j=W(w).length,T=Math.max(1,J-2-E-j);return`${B.trim()}${" ".repeat(T)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(X,U)=>{let W=Number.parseInt(U,10);return W<w[0].length?String(w[0][W]):X});let A=/%([sdijfo%])/g,Y=0,f=$.replace(A,(X,U)=>{if(U==="%")return"%";if(Y>=w.length)return X;let W=w[Y++];switch(U){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 X}});if(Y<w.length)f+=` ${w.slice(Y).map((X)=>typeof X==="object"?JSON.stringify(X,null,2):String(X)).join(" ")}`;return f}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,Y,f)=>{let X=c.underline(c.blue(Y)),U=this.toAbsoluteFilePath(f);if(U&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(U)}`,J="\x1B]8;;",B="\x1B\\";return`\x1B]8;;${W}\x1B\\${X}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${f}\x1B\\${X}\x1B]8;;\x1B\\`;return X}),w=w.replace(/`([^`]+)`/g,(A,Y)=>c.bgGray(Y)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,Y)=>c.bold(Y)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,Y)=>c.italic(Y)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,Y)=>c.italic(Y)),w=w.replace(/~([^~]+)~/g,(A,Y)=>c.strikethrough(Y)),w}supportsHyperlinks(){if(h$())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 A=D.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(r6(w)||w.startsWith("./")||w.startsWith("../"))w=a6(w);else return null;return Bf(w)?w:null}catch{return null}}buildOutputTexts($){let w=this.shouldStyleConsole()?this.formatMarkdown($):$,A=$.replace(this.ANSI_PATTERN,"");return{consoleText:w,fileText:A}}async log($,w,...A){if(!this.shouldLog($))return;let Y=new Date,f=this.formatConsoleTimestamp(Y),X=this.formatFileTimestamp(Y),U,W;if(w instanceof Error)U=w.message,W=w.stack;else U=this.formatMessage(w,A);let{consoleText:J,fileText:B}=this.buildOutputTexts(U);if(this.shouldStyleConsole()){let j=this.options.showIcons===!1?"":Y7[$],T=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:c.gray(J),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:c.green(J),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:f,icon:j,tag:T,message:J,level:$}),console.error(F),W){let H=W.split(`
171
+ `);for(let G of H)if(G.trim()&&!G.includes(U))console.error(this.formatConsoleMessage({timestamp:f,message:c.gray(` ${G}`),level:$,showTimestamp:!1}))}break}}else if(!h$()){if(console.error(`${X} ${this.environment}.${$.toUpperCase()}: ${U}`),W)console.error(W)}let E=`${X} ${this.environment}.${$.toUpperCase()}: ${B}
172
+ `;if(W)E+=`${W}
173
+ `;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress($,w=""){let A={update:(W,J)=>{},finish:(W)=>{},interrupt:(W,J)=>{}};if(!this.enabled)return A;let Y=30;if(this.activeProgressBar={total:Math.max(1,$||1),current:0,message:w||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!h$()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(W,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,W),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!h$()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(W)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,W)},interrupt:(W,J="info")=>{if(!h$()&&D.stdout.isTTY)D.stdout.write(`
174
+ `);if(this[J==="warning"?"warn":J](W),this.activeProgressBar&&this.shouldStyleConsole()&&!h$()&&D.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":c.blue("◐"),tag:A,message:`${c.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let Y=performance.now(),f=Math.round(Y-w),X=`${$} completed in ${f}ms`,U=new Date,W=this.formatConsoleTimestamp(U),B=`${this.formatFileTimestamp(U)} ${this.environment}.INFO: ${X}`;if(A)B+=` ${JSON.stringify(A)}`;if(B+=`
175
+ `,B=B.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":c.green("✓"),tag:E,message:`${X}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!h$())console.error(B.trim());if(this.shouldWriteToFile())await this.writeToFile(B)}}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}:${$}`,A=new yw(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(A),A}createReadStream(){if(h$())throw Error("createReadStream is not supported in browser environments");if(!Bf(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return WT(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 A=this.keys.get(this.currentKeyId);try{let Y=m0.isBuffer($)?$:m0.from($,"base64"),f=Y.subarray(0,16),X=Y.subarray(Y.length-16),U=Y.subarray(16,Y.length-16),W=d6("aes-256-gcm",A,f);W.setAuthTag(X);let J=W.update(U),B=W.final(),E=J.length+B.length,j=m0.allocUnsafe(E);return J.copy(j,0),B.copy(j,J.length),j.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return h$()}isServerMode(){return!h$()}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,A=this.formatConsoleTimestamp(w),Y=this.formatFileTimestamp(w),{consoleText:f,fileText:X}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=f.split(`
176
+ `),J=Math.max(...W.map((T)=>T.length))+2,B=`┌${"─".repeat(J)}┐`,E=`└${"─".repeat(J)}┘`,j=W.map((T)=>{return this.formatConsoleMessage({timestamp:A,message:c.cyan(T),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:c.cyan(B),showTimestamp:!1})),j.forEach((T)=>console.error(T)),console.error(this.formatConsoleMessage({timestamp:A,message:c.cyan(E),showTimestamp:!1}))}else if(!h$())console.error(`${Y} ${this.environment}.INFO: [BOX] ${X}`);let U=`${Y} ${this.environment}.INFO: [BOX] ${X}
177
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}async prompt($){if(h$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${c.cyan("?")} ${$} (y/n) `);let A=(Y)=>{let f=Y.toString().trim().toLowerCase();D.stdin.removeListener("data",A);try{if(typeof D.stdin.setRawMode==="function")D.stdin.setRawMode(!1)}catch{}D.stdin.pause(),console.error(""),w(f==="y"||f==="yes")};try{if(typeof D.stdin.setRawMode==="function")D.stdin.setRawMode(!0)}catch{}D.stdin.resume(),D.stdin.once("data",A)})}setFancy($){this.fancy=$}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start($,...w){if(!this.enabled)return;let A=$;if(w&&w.length>0){let J=/%([sdijfo%])/g,B=0;if(A=$.replace(J,(E,j)=>{if(j==="%")return"%";if(B>=w.length)return E;let T=w[B++];switch(j){case"s":return String(T);case"d":case"i":return Number(T).toString();case"j":case"o":return JSON.stringify(T,null,2);default:return E}}),B<w.length)A+=` ${w.slice(B).map((E)=>typeof E==="object"?JSON.stringify(E,null,2):String(E)).join(" ")}`}let{consoleText:Y,fileText:f}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let J=this.options.showTags!==!1&&this.name?c.gray(this.formatTag(this.name)):"",B=this.options.showIcons===!1?"":`${c.blue("◐")} `;console.error(`${B}${J} ${c.cyan(Y)}`)}let W=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${f}
178
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(W)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!D.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),Y=Math.round($.barLength*A/100),f=$.barLength-Y,X=c.green("━".repeat(Y)),U=c.gray("━".repeat(f)),W=`[${X}${U}]`,J=`${A}%`.padStart(4),B=$.message?` ${$.message}`:"",E=this.options.showIcons===!1?"":w||A===100?c.green("✓"):c.blue("▶"),j=this.options.showTags!==!1&&this.name?` ${c.gray(this.formatTag(this.name))}`:"",T=`\r${E}${j} ${W} ${J}${B}`,F=D.stdout.columns||80,H=" ".repeat(Math.max(0,F-T.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${T}${H}`,D.stdout.write($.lastRenderedLine),w)D.stdout.write(`
179
+ `)}finishProgressBar($,w){if(!this.enabled||!this.fancy||h$()||!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(h$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await Ef(this.config.logDirectory),A=[];for(let Y of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let X=R1(this.config.logDirectory,Y);if($.before)try{if((await K1(X)).mtime>=$.before)continue}catch(U){console.error(`Failed to get stats for file ${X}:`,U);continue}A.push(X)}if(A.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${A.length} log file(s)...`);for(let Y of A)try{await jf(Y),console.warn(`Deleted log file: ${Y}`)}catch(f){console.error(`Failed to delete log file ${Y}:`,f)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}var JK,WK=($)=>$,EK=($,w)=>{for(var A in w)JK($,A,{get:w[A],enumerable:!0,configurable:!0,set:BK.bind(w,A)})},jK=($,w)=>()=>($&&(w=$($=0)),w),HT,LT,q1,o1,OT,j6,T6,sj,Ff,bU,_$,p,F6,oj,z6,ej,G6,H6,LU,K6,$T,wT,OU,R6,h6,q6,N6,zf,VT,y6,D$,M6,I6,AT,Gf,cU,R$,x,C6,YT,S6,fT,L6,O6,VU,V6,XT,UT,Q6,QU,_6,D6,k6,Z6,x6,Hf,QT,P6,i6="0.15.6",o$,If,a1,uU,nU,Cf,vU,mU,s1,dU,lU,Ww,_T,DT,q0,t0,kT,ZT,b6,v6,xT,Lf,wC,M$,c,TC,e6,FC,$7,zC,GC,zT,HC,w7,A7,KC,GT,RC,hC,qC,NC,yC,ZU,Y7,MC;var eU=E$(()=>{JK=Object.defineProperty;HT={};EK(HT,{withErrorRecovery:()=>NT,tryLoadConfig:()=>J6,loadConfigWithResult:()=>X6,loadConfig:()=>ST,isRetryableError:()=>eK,isConfigNotFoundError:()=>oK,isBunfigError:()=>yT,globalPerformanceMonitor:()=>o1,globalCache:()=>q1,getEnvOrDefault:()=>$6,generateConfigTypes:()=>W6,defaultGeneratedDir:()=>ZT,defaultConfigDir:()=>kT,deepMergeWithArrayStrategy:()=>aU,deepMerge:()=>MT,createLibraryConfig:()=>B6,config:()=>U6,bunfigPlugin:()=>E6,applyEnvVarsToConfig:()=>p1,TypeGenerationError:()=>mU,SchemaValidationError:()=>s1,PluginError:()=>lU,PerformanceMonitor:()=>tU,FileSystemError:()=>vU,ErrorFactory:()=>Ww,EnvVarError:()=>Cf,EnvProcessor:()=>Of,ConfigValidator:()=>sU,ConfigValidationError:()=>uU,ConfigNotFoundError:()=>If,ConfigMergeError:()=>nU,ConfigLoader:()=>oU,ConfigLoadError:()=>a1,ConfigFileLoader:()=>Vf,ConfigCache:()=>gU,CacheUtils:()=>OT,BunfigError:()=>o$,BrowserConfigError:()=>dU,ArrayMergeStrategies:()=>_T});b6=jK(async()=>{LT=import.meta.require,q1=new gU,o1=new tU,OT={createKey:cK,isEquivalent:uK,estimateMemoryUsage:nK},j6=hf(PU.cwd(),"config"),T6=hf(PU.cwd(),"src/generated"),sj=Rf.env.CLARITY_LOG_DIR||KK(dK(),"logs"),Ff={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:sj,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},bU=await lK(),_$={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"},p=_$,F6=_$.red,oj=_$.green,z6=_$.yellow,ej=_$.blue,G6=_$.magenta,H6=_$.cyan,LU=_$.white,K6=_$.gray,$T=_$.bgRed,wT=_$.bgYellow,OU=_$.bold,R6=_$.dim,h6=_$.italic,q6=_$.underline,N6=_$.reset,zf={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},VT={debug:"\uD83D\uDD0D",info:ej("ℹ"),success:oj("✓"),warning:wT(LU(OU(" WARN "))),error:$T(LU(OU(" ERROR ")))},y6=new Nf("stacks"),D$=new Nf("bunfig",{showTags:!0}),M6=c$(r1.cwd(),"config"),I6=c$(r1.cwd(),"src/generated"),AT=Kf.env.CLARITY_LOG_DIR||GK(rK(),"logs"),Gf={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:AT,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},cU=await aK(),R$={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"},x=R$,C6=R$.red,YT=R$.green,S6=R$.yellow,fT=R$.blue,L6=R$.magenta,O6=R$.cyan,VU=R$.white,V6=R$.gray,XT=R$.bgRed,UT=R$.bgYellow,Q6=R$.bgGray,QU=R$.bold,_6=R$.dim,D6=R$.italic,k6=R$.underline,Z6=R$.strikethrough,x6=R$.reset,Hf={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},QT={debug:"\uD83D\uDD0D",info:fT("ℹ"),success:YT("✓"),warning:UT(VU(QU(" WARN "))),error:XT(VU(QU(" ERROR ")))},P6=new Mf("stacks"),o$=class extends Error{timestamp;context;constructor(w,A={}){super(w);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=A,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(([A,Y])=>`${A}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${w}`}},If=class extends o${code="CONFIG_NOT_FOUND";constructor(w,A,Y){let f=Y?` or alias "${Y}"`:"";super(`Configuration "${w}"${f} not found`,{configName:w,alias:Y,searchPaths:A,searchPathCount:A.length})}},a1=class extends o${code="CONFIG_LOAD_ERROR";constructor(w,A,Y){super(`Failed to load configuration from "${w}": ${A.message}`,{configPath:w,configName:Y,originalError:A.name,originalMessage:A.message});this.cause=A}},uU=class extends o${code="CONFIG_VALIDATION_ERROR";constructor(w,A,Y){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:Y,validationErrors:A,errorCount:A.length})}},nU=class extends o${code="CONFIG_MERGE_ERROR";constructor(w,A,Y,f){super(`Failed to merge configuration from "${w}" with "${A}": ${Y.message}`,{sourcePath:w,targetPath:A,configName:f,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},Cf=class extends o${code="ENV_VAR_ERROR";constructor(w,A,Y,f){super(`Failed to parse environment variable "${w}" with value "${A}" as ${Y}`,{envKey:w,envValue:A,expectedType:Y,configName:f})}},vU=class extends o${code="FILE_SYSTEM_ERROR";constructor(w,A,Y){super(`File system ${w} failed for "${A}": ${Y.message}`,{operation:w,path:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},mU=class extends o${code="TYPE_GENERATION_ERROR";constructor(w,A,Y){super(`Failed to generate types from "${w}" to "${A}": ${Y.message}`,{configDir:w,outputPath:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},s1=class extends o${code="SCHEMA_VALIDATION_ERROR";constructor(w,A,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:w,configName:Y,validationErrors:A,errorCount:A.length})}},dU=class extends o${code="BROWSER_CONFIG_ERROR";constructor(w,A,Y,f){super(`Failed to fetch configuration from "${w}": ${A} ${Y}`,{endpoint:w,status:A,statusText:Y,configName:f})}},lU=class extends o${code="PLUGIN_ERROR";constructor(w,A,Y){super(`Plugin "${w}" failed during ${A}: ${Y.message}`,{pluginName:w,operation:A,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},Ww={configNotFound($,w,A){return new If($,w,A)},configLoad($,w,A){return new a1($,w,A)},configValidation($,w,A){return new uU($,w,A)},configMerge($,w,A,Y){return new nU($,w,A,Y)},envVar($,w,A,Y){return new Cf($,w,A,Y)},fileSystem($,w,A){return new vU($,w,A)},typeGeneration($,w,A){return new mU($,w,A)},schemaValidation($,w,A){return new s1($,w,A)},browserConfig($,w,A,Y){return new dU($,w,A,Y)},plugin($,w,A){return new lU($,w,A)}},_T={replace:"replace",concat:"concat",smart:"smart"},DT=/^https?:\/\//,q0=new Mf("bunfig",{showTags:!0}),t0=new oU,kT=u$(Nw.cwd(),"config"),ZT=u$(Nw.cwd(),"src/generated")});v6=Sf.env.CLARITY_LOG_DIR||c6(n6(),"logs"),xT={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:v6,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},Lf={...xT},wC=(async()=>{try{let{loadConfig:$}=await b6().then(()=>HT),w=await $({name:"clarity",alias:"logging",defaultConfig:xT,cwd:Sf.cwd()});if(w)Object.assign(Lf,w)}catch{}return Lf})();M$={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=M$,TC=M$.red,e6=M$.green,FC=M$.yellow,$7=M$.blue,zC=M$.magenta,GC=M$.cyan,zT=M$.white,HC=M$.gray,w7=M$.bgRed,A7=M$.bgYellow,KC=M$.bgGray,GT=M$.bold,RC=M$.dim,hC=M$.italic,qC=M$.underline,NC=M$.strikethrough,yC=M$.reset,ZU={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Y7={debug:"\uD83D\uDD0D",info:$7("ℹ"),success:e6("✓"),warning:A7(zT(GT(" WARN "))),error:w7(zT(GT(" ERROR ")))};MC=new yw("stacks")});var N1={};dJ(N1,{safeStringify:()=>W0,safeDeleteFile:()=>AJ,resolvePathRewrite:()=>wJ,redactSensitive:()=>Qf,isValidRootCA:()=>$J,isSingleProxyOptions:()=>$A,isSingleProxyConfig:()=>B7,isMultiProxyOptions:()=>Iw,isMultiProxyConfig:()=>uT,getSudoPassword:()=>Mw,getPrimaryDomain:()=>_f,extractHostname:()=>W7,execSudoSync:()=>e1,debugLog:()=>z});import{execSync as iT}from"node:child_process";import*as cT from"node:fs/promises";function Mw(){return process.env.SUDO_PASSWORD}function e1($){let w=Mw(),A=$.replace(/'/g,"'\\''");if(w)return iT(`echo '${w}' | sudo -S sh -c '${A}' 2>/dev/null`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});try{return iT(`sudo -n sh -c '${A}'`,{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 z($,w,A){if(A)f7.debug(`[rpx:${$}] ${w}`)}function J7($){let w=$.toLowerCase();return X7.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function Qf($){if(Array.isArray($))return $.map((A)=>Qf(A));if(typeof $==="string")return U7.test($)?bT:$;if(!$||typeof $!=="object")return $;let w={};for(let[A,Y]of Object.entries($)){if(J7(A)){w[A]=bT;continue}w[A]=Qf(Y)}return w}function W0($,w){return JSON.stringify(Qf($),null,w)}function W7($){if(Iw($))return $.proxies.map((w)=>{let A=w.to||"stacks.localhost";return A.startsWith("http")?new URL(A).hostname:A});if($A($)){let w=$.to||"stacks.localhost";return[w.startsWith("http")?new URL(w).hostname:w]}return["stacks.localhost"]}function $J($){return typeof $==="object"&&$!==null&&"certificate"in $&&"privateKey"in $&&typeof $.certificate==="string"&&typeof $.privateKey==="string"}function _f($){if(!$)return"stacks.localhost";if(Iw($)&&$.proxies.length>0)return $.proxies[0].to||"stacks.localhost";if($A($))return $.to||"stacks.localhost";return"stacks.localhost"}function uT($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}function Iw($){return"proxies"in $&&Array.isArray($.proxies)}function $A($){return"to"in $&&typeof $.to==="string"}function B7($){return!!($&&("to"in $)&&!("proxies"in $))}function wJ($,w){if(!w||w.length===0)return null;for(let A of w)if($===A.from||$.startsWith(`${A.from}/`)){let Y=A.to.startsWith("http")?new URL(A.to).host:A.to,f=A.stripPrefix===!0?$.slice(A.from.length)||"/":$;return{targetHost:Y,targetPath:f}}return null}async function AJ($,w){try{await cT.unlink($),z("certificates",`Successfully deleted: ${$}`,w)}catch(A){if(A.code!=="ENOENT")z("certificates",`Warning: Could not delete ${$}: ${A}`,w)}}var f7,bT="[redacted]",X7,U7;var U$=E$(()=>{eU();f7=new yw("rpx",{showTags:!1});X7=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),U7=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/});import{execSync as Df}from"node:child_process";import{homedir as E7}from"node:os";import{join as j7}from"node:path";function kf(){return j7(E7(),"Library/Keychains/login.keychain-db")}function fJ(){return[M1,kf()]}function nT($,w=YJ){let A=Df(`security find-certificate -a -c "${w}" -Z "${$}" 2>/dev/null || true`,{encoding:"utf8"}),Y=[];for(let f of A.split(`
180
+ `)){let X=f.match(/SHA-256 hash:\s*([A-F0-9]+)/i);if(X)Y.push(X[1].toUpperCase())}return Y}function XJ($){if(process.platform!=="darwin")return;let w=$f($.caPath);if(!w)return;let A=$.commonName??YJ,Y=$.keychains??fJ();for(let f of Y)for(let X of nT(f,A)){if(X===w)continue;try{if(f.startsWith("/Library"))e1(`security delete-certificate -Z ${X} "${f}"`);else Df(`security delete-certificate -Z ${X} "${f}"`,{stdio:"ignore"});z("ssl",`Removed stale Root CA ${X} from ${f}`,$.verbose)}catch{}}}function UJ($,w,A){if(process.platform!=="darwin")return Zf($,A);try{let f=Df(`security verify-cert -c "${$}" -s "${w}" -l -L -R ssl 2>&1`,{encoding:"utf8"}).includes("successful");return z("ssl",`verify-cert ${w}: ${f?"trusted":"not trusted"}`,A?.verbose),f}catch{return!1}}function Zf($,w){let A=$f($);if(!A)return!1;for(let Y of fJ())try{let f=Df(`security find-certificate -a -Z "${Y}" 2>/dev/null || true`,{encoding:"utf8"});for(let X of f.split(`
181
+ `))if(X.toUpperCase().includes("SHA-256")){if(X.split("=").pop().replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase()===A)return z("ssl",`Root CA fingerprint found in ${Y}`,w?.verbose),!0}}catch{}return!1}var y1="-d -r trustRoot -p ssl -p basic",M1="/Library/Keychains/System.keychain",YJ="rpx.localhost";var JJ=E$(()=>{HU();U$()});import{execSync as I1}from"node:child_process";import q$ from"node:fs/promises";import*as WJ from"node:os";import{homedir as xf}from"node:os";import{join as k$}from"node:path";import*as Bw from"node:process";function dT($){return{caCertPath:k$($,F7),caKeyPath:k$($,z7)}}async function G7($,w){try{let[A,Y]=await Promise.all([q$.readFile($.caCertPath,"utf8"),q$.readFile($.caKeyPath,"utf8")]);if(!A.includes("-----BEGIN CERTIFICATE-----")||!Y.includes("PRIVATE KEY-----"))return z("ssl",`Root CA files at ${$.caCertPath} look malformed, will regenerate`,w),null;return{certificate:A,privateKey:Y}}catch(A){return z("ssl",`No existing Root CA at ${$.caCertPath} (${A.code||A}), will create one`,w),null}}function vT($){let w=new Set;w.add($);let A=$.split(".");if(A.length>=2)w.add(`*.${A.slice(1).join(".")}`);return Array.from(w)}function lT($){let A=_f($).replace(/\*/g,"wildcard"),Y=k$(xf(),".stacks","ssl"),f=Y;if(typeof $?.https==="object")return f=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:Y,{caCertPath:$.https.caCertPath||k$(f,`${A}.ca.crt`),certPath:$.https.certPath||k$(f,`${A}.crt`),keyPath:$.https.keyPath||k$(f,`${A}.key`)};return{caCertPath:k$(f,`${A}.ca.crt`),certPath:k$(f,`${A}.crt`),keyPath:k$(f,`${A}.key`)}}function mT($){let w=new Set;if(Iw($))$.proxies.forEach((A)=>{let Y=A.to||"rpx.localhost";vT(Y).forEach((f)=>w.add(f))});else if($A($)){let A=$.to||"rpx.localhost";vT(A).forEach((Y)=>w.add(Y))}else w.add("rpx.localhost");return w.add("localhost"),w.add("*.localhost"),w}async function C1($){if(Ew&&!$.forceRegenerate){z("ssl","Using cached SSL configuration",$.verbose);return}H7();let w=Iw($)?$.proxies.map((E)=>E.to):[$.to];z("ssl",`Generating certificate for domains: ${w.join(", ")}`,$.verbose);let A=wA($,$.verbose),Y=A.basePath||k$(xf(),".stacks","ssl");await q$.mkdir(Y,{recursive:!0});let f=dT(Y),X=await G7(f,$.verbose),U=!1;if(!X){if($.verbose)q.info("Generating Root CA certificate (one-time)...");X=await WU(A);try{await Promise.all([q$.writeFile(f.caCertPath,X.certificate),q$.writeFile(f.caKeyPath,X.privateKey,{mode:384})]),U=!0,z("ssl",`Persisted Root CA at ${f.caCertPath}`,$.verbose)}catch(E){throw z("ssl",`Error saving Root CA files: ${E}`,$.verbose),Error(`Failed to save Root CA files: ${E}`)}}else z("ssl",`Reusing existing Root CA from ${f.caCertPath}`,$.verbose);if($.verbose)q.info(`Generating host certificate for: ${w.join(", ")}`);let W=await BU({...A,rootCA:{certificate:X.certificate,privateKey:X.privateKey}});try{await Promise.all([q$.writeFile(A.certPath,W.certificate),q$.writeFile(A.keyPath,W.privateKey),q$.writeFile(A.caCertPath,X.certificate)]),z("ssl","Certificate files saved successfully",$.verbose)}catch(E){throw z("ssl",`Error saving certificate files: ${E}`,$.verbose),Error(`Failed to save certificate files: ${E}`)}if(U?!1:await tT(f.caCertPath,{verbose:$.verbose,regenerateUntrustedCerts:!0})){if(z("ssl","Root CA already trusted, skipping trust store update",$.verbose),$.verbose)q.success("Root CA is already trusted in system trust store");if(Ew={key:W.privateKey,cert:W.certificate,ca:X.certificate},$.verbose)q.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);return}if($.verbose)q.info("Adding certificate to system trust store (may require sudo permission)...");let B=!1;if(Bw.platform==="darwin")try{XJ({caPath:f.caCertPath,verbose:$.verbose});let E=kf();try{I1(`security add-trusted-cert ${y1} -k "${E}" "${f.caCertPath}"`,{stdio:"ignore"})}catch{}if(e1(`security add-trusted-cert ${y1} -k ${M1} "${f.caCertPath}"`),$.verbose)q.success("Successfully added Root CA to system trust store");B=!0;let j=k$(Y,"trust-rpx-cert.sh"),T=`#!/bin/bash
178
182
  echo "Trusting RPX Root CA"
179
- sudo security add-trusted-cert ${T1} -k ${H1} "${Y.caCertPath}"
183
+ sudo security add-trusted-cert ${y1} -k ${M1} "${f.caCertPath}"
180
184
  echo "Root CA trusted! Please restart your browser."
181
185
  echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
182
- `;await T$.writeFile(F,f,{mode:493})}catch(j){if($.verbose)R.warn(`Could not add Root CA to trust store automatically: ${j}`);let F=O$(J,"trust-rpx-cert.sh"),f=`#!/bin/bash
186
+ `;await q$.writeFile(j,T,{mode:493})}catch(E){if($.verbose)q.warn(`Could not add Root CA to trust store automatically: ${E}`);let j=k$(Y,"trust-rpx-cert.sh"),T=`#!/bin/bash
183
187
  echo "Trusting RPX Root CA"
184
- sudo security add-trusted-cert ${T1} -k ${H1} "${Y.caCertPath}"
188
+ sudo security add-trusted-cert ${y1} -k ${M1} "${f.caCertPath}"
185
189
  echo "Root CA trusted! Please restart your browser."
186
190
  echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
187
- `;if(await T$.writeFile(F,f,{mode:493}),$.verbose)R.info(`Created a trust helper script at: ${F}`),R.info(`If you're still having certificate issues, run: sh ${F}`)}else if(Yw.platform==="linux")try{let{exec:j}=await import("node:child_process"),F="/usr/local/share/ca-certificates/rpx",f=`
191
+ `;if(await q$.writeFile(j,T,{mode:493}),$.verbose)q.info(`Created a trust helper script at: ${j}`),q.info(`If you're still having certificate issues, run: sh ${j}`)}else if(Bw.platform==="linux")try{let{exec:E}=await import("node:child_process"),j="/usr/local/share/ca-certificates/rpx",T=`
188
192
  mkdir -p "/usr/local/share/ca-certificates/rpx" 2>/dev/null || true
189
- cp "${Y.caCertPath}" "/usr/local/share/ca-certificates/rpx/"
193
+ cp "${f.caCertPath}" "/usr/local/share/ca-certificates/rpx/"
190
194
  update-ca-certificates
191
195
  echo "RPX Root CA installed. Please restart your browser."
192
- `,z=O$(bZ.tmpdir(),`rpx-trust-${Date.now()}.sh`);await T$.writeFile(z,f,{mode:493}),await new Promise((H)=>{j(`sudo bash "${z}"`,(T)=>{if(T){if($.verbose)R.warn(`Could not trust certificates: ${T}`);H(!1)}else{if($.verbose)R.success("Successfully added certificates to system trust store");H(!0)}})}),await T$.unlink(z).catch(()=>{}),E=!0}catch(j){if($.verbose)R.warn(`Failed to trust certificates: ${j}`)}else if(Yw.platform==="win32")try{let j=`
193
- $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("${Y.caCertPath.replace(/\//g,"\\")}")
196
+ `,F=k$(WJ.tmpdir(),`rpx-trust-${Date.now()}.sh`);await q$.writeFile(F,T,{mode:493}),await new Promise((H)=>{E(`sudo bash "${F}"`,(G)=>{if(G){if($.verbose)q.warn(`Could not trust certificates: ${G}`);H(!1)}else{if($.verbose)q.success("Successfully added certificates to system trust store");H(!0)}})}),await q$.unlink(F).catch(()=>{}),B=!0}catch(E){if($.verbose)q.warn(`Failed to trust certificates: ${E}`)}else if(Bw.platform==="win32")try{let E=`
197
+ $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("${f.caCertPath.replace(/\//g,"\\")}")
194
198
  $store = New-Object System.Security.Cryptography.X509Certificates.X509Store("ROOT", "LocalMachine")
195
199
  $store.Open("ReadWrite")
196
200
  $store.Add($cert)
197
201
  $store.Close()
198
202
  Write-Host "Root CA trusted successfully!"
199
- `,F=O$(bZ.tmpdir(),"rpx-trust.ps1");if(await T$.writeFile(F,j),q1(`powershell -ExecutionPolicy Bypass -File "${F}"`),$.verbose)R.success("Successfully added certificate to Windows trust store");E=!0}catch(j){if($.verbose)R.warn(`Could not trust certificate: ${j}`)}else try{await c8(B,U.certificate,A),E=!0}catch(j){if($.verbose)R.warn(`Could not add certificate to trust store: ${j}`)}if(Uw={key:B.privateKey,cert:B.certificate,ca:U.certificate},$.verbose)R.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);if(!E&&$.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 j6(){Uw=null}async function g0($){if(!$)return null;if(Uw)return Uw;let w=l1($);try{let[A,J,Y]=await Promise.all([T$.access(w.keyPath).then(()=>!0).catch(()=>!1),T$.access(w.certPath).then(()=>!0).catch(()=>!1),w.caCertPath?T$.access(w.caCertPath).then(()=>!0).catch(()=>!1):Promise.resolve(!1)]);if(!A||!J)return G("ssl",`Certificate files don't exist: key=${A}, cert=${J}, paths: ${w.keyPath}, ${w.certPath}`,$.verbose),null;let U="regenerateUntrustedCerts"in $,Z=$.regenerateUntrustedCerts,B=U?Z!==!1:!0;G("ssl",`Trust check: hasFlag=${U}, flagValue=${Z}, shouldCheckTrust=${B}`,$.verbose);let W=w.basePath||O$(hY(),".stacks","ssl"),E=w9(W);if(!(B?await Y9(E.caCertPath,$):!0))return G("ssl","Root CA exists but is not trusted, will regenerate",$.verbose),null;let[F,f,z]=await Promise.all([T$.readFile(w.keyPath,"utf8"),T$.readFile(w.certPath,"utf8"),Y&&w.caCertPath?T$.readFile(w.caCertPath,"utf8"):Promise.resolve(void 0)]);if(z&&!z.includes("-----BEGIN CERTIFICATE-----"))return G("ssl","Invalid root CA certificate content, will regenerate",$.verbose),null;if(Kw($))try{let{X509Certificate:H}=await import("node:crypto"),q=new H(f).subjectAltName||"",h=$.proxies.map((I)=>I.to).filter((I)=>!q.includes(`DNS:${I}`));if(h.length>0)return G("ssl",`Certificate missing SANs for: ${h.join(", ")}, will regenerate`,$.verbose),null}catch(H){G("ssl",`Could not verify cert SANs: ${H}`,$.verbose)}return G("ssl","Successfully loaded existing certificates",$.verbose),Uw={key:F,cert:f,ca:z},Uw}catch(A){return G("ssl",`Error checking existing certificates: ${A}`,$.verbose),null}}function l1($,w){let A=TY($);G("ssl",`Primary domain: ${A}`,w);let J=A9($),Y=O$(hY(),".stacks","ssl");if(typeof $.https==="object"){let U=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:Y,Z={domain:A,hostCertCN:A,basePath:U,caCertPath:$.https.caCertPath||J.caCertPath,certPath:$.https.certPath||J.certPath,keyPath:$.https.keyPath||J.keyPath,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:$.https.commonName||A,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($9($)).map((B)=>({type:2,value:B}))};if(OZ($.https.rootCA))Z.rootCA=$.https.rootCA;return Z}return{domain:A,hostCertCN:A,basePath:Y,...J,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:A,organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",validityDays:825,verbose:w||!1,subjectAltNames:Array.from($9($)).map((U)=>({type:2,value:U}))}}async function J9($,w){let A=A9({to:$,verbose:w}),J=[A.caCertPath,A.certPath,A.keyPath];G("certificates","Attempting to clean up relating certificates",w),await Promise.all(J.map((Y)=>_Z(Y,w)))}async function Y9($,w){try{if(G("ssl",`Checking if certificate is trusted: ${$}`,w?.verbose),Yw.platform==="darwin"){if(w?.serverName)return xZ($,w.serverName,{verbose:w.verbose});return KY($,{verbose:w.verbose})}else if(Yw.platform==="win32")try{let J=q1(`openssl x509 -noout -subject -in "${$}"`).toString().trim().split("=").slice(1).join("=").trim()||"";if(!J)return G("ssl","Could not extract certificate subject",w?.verbose),!1;let Y=`powershell -Command "Get-ChildItem -Path Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -like '*${J}*' } | Select-Object Subject"`;if(q1(Y).toString().includes(J))return G("ssl","Certificate found in trusted root store",w?.verbose),!0;return G("ssl","Certificate not found in trusted root store",w?.verbose),!1}catch(A){return G("ssl",`Error checking certificate trust on Windows: ${A}`,w?.verbose),!1}else if(Yw.platform==="linux")try{let J=q1(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`).toString().trim().split("=")[1]?.trim()||"",Y=["/etc/ssl/certs","/etc/pki/tls/certs"];for(let U of Y)try{if(q1(`find ${U} -type f -exec openssl x509 -noout -fingerprint -sha256 -in {} \\; 2>/dev/null | grep "${J}"`).toString().includes(J))return G("ssl",`Certificate fingerprint found in ${U}`,w?.verbose),!0}catch{}return G("ssl","Certificate not found in system trust stores",w?.verbose),!1}catch(A){return G("ssl",`Error checking certificate trust on Linux: ${A}`,w?.verbose),!1}return G("ssl",`Platform ${Yw.platform} not supported for certificate trust check`,w?.verbose),!1}catch(A){return G("ssl",`Error checking if certificate is trusted: ${A}`,w?.verbose),!1}}var Uw=null,W6="rpx-root-ca.crt",B6="rpx-root-ca.key";var RY=h$(()=>{vj();o0();d8();PZ();U$();PZ();g8()});import*as U0 from"node:path";function p1($,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 z6($){let w=U0.extname($).toLowerCase();return F6[w]??"application/octet-stream"}function f6($){let w;try{w=decodeURIComponent($)}catch{return null}if(w.includes("\x00")||w.includes("\\"))return null;let A=U0.posix.normalize(`/${w}`);if(A.includes(".."))return null;return A.replace(/^\/+/,"")}function G6($,w){let A=f6($);if(A===null)return null;let J=U0.posix.extname(A);if(w.cleanUrls&&J===".html"){let Y=$.replace(/\/index\.html$/i,"/").replace(/\.html$/i,"");return{filePath:U0.join(w.dir,A),redirectTo:Y||"/"}}if(A===""||$.endsWith("/"))return{filePath:U0.join(w.dir,A,"index.html")};if(J!=="")return{filePath:U0.join(w.dir,A)};if(w.pathRewriteStyle==="flat")return{filePath:U0.join(w.dir,`${A}.html`)};return{filePath:U0.join(w.dir,A,"index.html")}}async function U9($,w){let A=G6($,w);if(!A)return new Response("Forbidden",{status:403});if(A.redirectTo)return new Response(null,{status:301,headers:{Location:A.redirectTo}});let J=w.maxAge>0?`public, max-age=${w.maxAge}`:"no-cache",Y=Bun.file(A.filePath);if(await Y.exists())return new Response(Y,{status:200,headers:{"Content-Type":z6(A.filePath),"Cache-Control":J}});if(w.spa){let U=U0.join(w.dir,"index.html"),Z=Bun.file(U);if(await Z.exists())return new Response(Z,{status:200,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-cache"}})}return new Response("Not Found",{status:404})}var F6;var t1=h$(()=>{F6={".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 H6($){return($.headers.get("host")||"").split(":")[0]}function Z9($,w,A){let J=new URL($.url),Y=w.sourceHost??"",U=J.pathname,Z=XZ(J.pathname,w.pathRewrites);if(Z)Y=Z.targetHost,U=Z.targetPath,G("request",`Path rewrite: ${J.pathname} → ${Y}${U}`,A);return{targetHost:Y,targetPath:U,search:J.search}}function r1($,w){return async(A,J)=>{let Y=new URL(A.url),U=H6(A),Z=$(U);if(!Z)return G("request",`No route found for host: ${U}`,w),new Response(`No proxy configured for ${U}`,{status:404});if(Z.static)return U9(Y.pathname,Z.static);if(A.headers.get("upgrade")?.toLowerCase()==="websocket"){if(!J||!Z.sourceHost)return new Response("WebSocket upgrade not supported here",{status:400});let{targetHost:F,targetPath:f,search:z}=Z9(A,Z,w),H=`ws://${F}${f}${z}`,T={};for(let[h,I]of A.headers)if(!T6.has(h.toLowerCase())&&h.toLowerCase()!=="host")T[h]=I;T.host=F,T["x-forwarded-for"]="127.0.0.1",T["x-forwarded-proto"]="https",T["x-forwarded-host"]=U;let q={targetUrl:H,forwardHeaders:T};if(J.upgrade(A,{data:q})){G("ws",`upgraded ${U}${f} → ${H}`,w);return}return new Response("WebSocket upgrade failed",{status:400})}if(!Z.sourceHost)return new Response(`No upstream configured for ${U}`,{status:502});let{targetHost:B,targetPath:W,search:E}=Z9(A,Z,w),j=`http://${B}${W}${E}`;try{let F=new Headers(A.headers);if(F.set("host",B),Z.changeOrigin)F.set("origin",`http://${Z.sourceHost}`);F.set("x-forwarded-for","127.0.0.1"),F.set("x-forwarded-proto","https"),F.set("x-forwarded-host",U);let f=await fetch(j,{method:A.method,headers:F,body:A.body,redirect:"manual"});if(Z.cleanUrls&&Y.pathname.endsWith(".html")){let H=Y.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:H}})}let z=new Headers(f.headers);return new Response(f.body,{status:f.status,statusText:f.statusText,headers:z})}catch(F){return G("request",`Proxy error for ${U}: ${F}`,w),new Response(`Proxy Error: ${F}`,{status:502})}}}function a1($){let w=new WeakMap;return{open(A){let{targetUrl:J,forwardHeaders:Y}=A.data,U;try{U=new WebSocket(J,{headers:Y})}catch(B){G("ws",`failed to open upstream ${J}: ${B}`,$),A.close(1011,"upstream connect failed");return}U.binaryType="arraybuffer";let Z={upstream:U,upstreamOpen:!1,pending:[]};w.set(A,Z),U.addEventListener("open",()=>{Z.upstreamOpen=!0;for(let B of Z.pending)U.send(B);Z.pending=[]}),U.addEventListener("message",(B)=>{A.send(B.data)}),U.addEventListener("close",(B)=>{try{A.close(B.code||1000,B.reason||"")}catch{}}),U.addEventListener("error",()=>{G("ws",`upstream error for ${J}`,$);try{A.close(1011,"upstream error")}catch{}})},message(A,J){let Y=w.get(A);if(!Y)return;let U=typeof J==="string"?J:new Uint8Array(J);if(Y.upstreamOpen)Y.upstream.send(U);else Y.pending.push(U)},close(A,J,Y){let U=w.get(A);if(!U)return;w.delete(A);try{U.upstream.close(J||1000,Y||"")}catch{}}}}var T6;var NY=h$(()=>{t1();U$();T6=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","sec-websocket-key","sec-websocket-version","sec-websocket-extensions"])});function MY($){return $.startsWith("*.")}function K6($,w){if(!MY(w))return!1;let A=w.slice(1);return $.length>A.length&&$.endsWith(A)}function s1($,w){let A=$.get(w);if(A!==void 0)return A;let J,Y=-1;for(let[U,Z]of $){if(!MY(U))continue;if(K6(w,U)){let B=U.length-1;if(B>Y)Y=B,J=Z}}return J}import*as o1 from"node:fs/promises";import*as iZ from"node:path";function h6($){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 R6($,w,A,J){try{let[Y,U]=await Promise.all([o1.readFile(w,"utf8"),o1.readFile(A,"utf8")]);return{serverName:$,cert:Y,key:U}}catch(Y){return G("sni",`skipping ${$}: ${Y.message}`,J),null}}async function uZ($,w){let A=new Map;if($.certsDir){let Y=[];try{Y=await o1.readdir($.certsDir)}catch(U){G("sni",`certsDir read failed (${$.certsDir}): ${U.message}`,w)}for(let U of Y){let Z=h6(U);if(!Z)continue;let B=U.slice(0,-4);A.set(Z,{certPath:iZ.join($.certsDir,U),keyPath:iZ.join($.certsDir,`${B}.key`)})}}if($.domains)for(let[Y,U]of Object.entries($.domains))A.set(Y,U);let J=[];for(let[Y,U]of A){let Z=await R6(Y,U.certPath,U.keyPath,w);if(Z)J.push(Z)}return J}var cZ=h$(()=>{U$()});import*as IY from"node:fs";import*as i$ from"node:fs/promises";import{homedir as N6}from"node:os";import*as vZ from"node:path";import*as CY from"node:process";function Zw(){return vZ.join(N6(),".stacks","rpx","registry.d")}function e1($){return typeof $==="string"&&$.length>0&&$.length<=128&&M6.test($)}function mZ($,w){if(!e1(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return vZ.join($,`${w}.json`)}function m$($){if(!Number.isInteger($)||$<=0)return!1;try{return CY.kill($,0),!0}catch(w){return w.code==="EPERM"}}function W9($){if(!$||typeof $!=="object")return!1;let w=$,A=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0,J=typeof w.from==="string"&&w.from.length>0,Y=typeof w.static==="string"||!!w.static&&typeof w.static==="object"&&typeof w.static.dir==="string";return typeof w.id==="string"&&e1(w.id)&&(J||Y)&&typeof w.to==="string"&&w.to.length>0&&A&&typeof w.createdAt==="string"}async function I6($){await i$.mkdir($,{recursive:!0})}async function B9($,w=Zw(),A){if(!W9($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await I6(w);let J=mZ(w,$.id),Y=`${J}.tmp.${CY.pid}.${Date.now()}`,U=JSON.stringify($,null,2);try{await i$.writeFile(Y,U,{encoding:"utf8",mode:420}),await i$.rename(Y,J),G("registry",`wrote entry ${$.id} → ${J}`,A)}catch(Z){throw await i$.unlink(Y).catch(()=>{}),Z}}async function nZ($,w=Zw(),A){let J=mZ(w,$);try{await i$.unlink(J),G("registry",`removed entry ${$}`,A)}catch(Y){if(Y.code!=="ENOENT")throw Y}}async function C6($,w=Zw(),A){let J=mZ(w,$);try{let Y=await i$.readFile(J,"utf8"),U=JSON.parse(Y);if(!W9(U))return G("registry",`entry ${$} failed validation, removing`,A),await i$.unlink(J).catch(()=>{}),null;return U}catch(Y){if(Y.code==="ENOENT")return null;if(Y instanceof SyntaxError)return G("registry",`entry ${$} has invalid JSON, removing`,A),await i$.unlink(J).catch(()=>{}),null;throw Y}}async function hw($=Zw(),w){let A;try{A=await i$.readdir($)}catch(Y){if(Y.code==="ENOENT")return[];throw Y}let J=[];for(let Y of A){if(!Y.endsWith(".json"))continue;let U=Y.slice(0,-5);if(!e1(U))continue;let Z=await C6(U,$,w);if(Z)J.push(Z)}return J}async function LY($=Zw(),w){let A=await hw($,w),J=0;for(let Y of A){if(Y.pid===void 0)continue;if(!m$(Y.pid))G("registry",`GC: pid ${Y.pid} for ${Y.id} is dead, removing`,w),await nZ(Y.id,$,w).catch(()=>{}),J++}return J}function dZ($,w={}){let A=w.dir??Zw(),J=w.debounceMs??100,Y=w.pollMs??Math.max(J*2,250),U=w.verbose;IY.mkdirSync(A,{recursive:!0});let Z=null,B=!1,W=null,E=!1,j=(q)=>{return JSON.stringify(q.map((K)=>({id:K.id,from:K.from,to:K.to,pid:K.pid,pathRewrites:K.pathRewrites,cleanUrls:K.cleanUrls,changeOrigin:K.changeOrigin,static:K.static})).sort((K,h)=>K.id.localeCompare(h.id)))},F=()=>{if(Z=null,B)return;hw(A,U).then((q)=>{return W=j(q),$(q)}).catch((q)=>{G("registry",`watcher onChange failed: ${q}`,U)})},f=()=>{if(B)return;if(Z)clearTimeout(Z);Z=setTimeout(F,J)},H=setInterval(()=>{if(B||E)return;E=!0,hw(A,U).then((q)=>{if(j(q)!==W)f()}).catch((q)=>{G("registry",`watcher poll failed: ${q}`,U)}).finally(()=>{E=!1})},Y),T=IY.watch(A,{persistent:!0},(q,K)=>{if(K&&/\.tmp\.\d+\.\d+$/.test(K))return;f()});return T.on("error",(q)=>{G("registry",`watcher error: ${q}`,U)}),f(),{close:()=>{if(B=!0,Z)clearTimeout(Z);clearInterval(H),T.close()}}}var M6;var $A=h$(()=>{U$();M6=/^[a-zA-Z0-9._-]+$/});import{spawn as L6}from"node:child_process";import*as Rw from"node:fs/promises";import{homedir as y6}from"node:os";import*as wA from"node:path";import*as u$ from"node:process";function l0(){return wA.join(y6(),".stacks","rpx")}function j9($=l0()){return wA.join($,"daemon.pid")}async function E9($=l0()){try{let w=await Rw.readFile(j9($),"utf8"),A=Number.parseInt(w.trim(),10);if(!Number.isFinite(A)||A<=0)return null;return A}catch(w){if(w.code==="ENOENT")return null;throw w}}async function V6($=l0()){await Rw.unlink(j9($)).catch(()=>{})}function S6(){let $=u$.execPath,w=wA.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&u$.argv[1])return[$,u$.argv[1],"daemon:start"];return[$,"daemon:start"]}async function F9($={}){let w=$.rpxDir??l0(),A=$.verbose??!1;await Ww({rpxDir:w,verbose:A}).catch((j)=>{G("daemon",`DNS reconcile before ensureDaemonRunning: ${j}`,A)});let J=await E9(w);if(J!==null&&m$(J))return G("daemon",`ensureDaemonRunning: already running pid=${J}`,A),{pid:J,spawned:!1};if(J!==null)G("daemon",`ensureDaemonRunning: clearing stale pid=${J}`,A),await V6(w);await Rw.mkdir(w,{recursive:!0});let Y=$.spawnCommand??S6();if(Y.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");G("daemon",`spawning daemon: ${Y.join(" ")}`,A);let U=L6(Y[0],Y.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??u$.cwd(),env:$.spawnEnv?{...u$.env,...$.spawnEnv}:u$.env});U.unref();let Z=null;U.once("error",(j)=>{Z=j});let B=$.startupTimeoutMs??5000,W=$.pollIntervalMs??50,E=Date.now()+B;while(Date.now()<E){if(Z)throw Z;let j=await E9(w);if(j!==null&&m$(j))return G("daemon",`daemon registered with pid=${j}`,A),{pid:j,spawned:!0};await new Promise((F)=>setTimeout(F,W))}if(Z)throw Z;throw Error(`rpx daemon failed to start within ${B}ms (rpxDir=${w})`)}var gZ=h$(()=>{o0();RY();NY();cZ();t1();$A();h1();U$()});import*as Bw from"node:fs/promises";import{homedir as O6}from"node:os";import*as lZ from"node:path";function f9(){return lZ.join(O6(),".stacks","rpx")}function pZ($=f9()){return lZ.join($,X6)}async function VY($=f9()){try{let w=await Bw.readFile(pZ($),"utf8"),A=JSON.parse(w);if(A.version!==yY||!Array.isArray(A.resolvers))return null;return{version:yY,resolvers:A.resolvers.filter((J)=>typeof J==="string"),domains:Array.isArray(A.domains)?A.domains.filter((J)=>typeof J==="string"):[],ownerPid:typeof A.ownerPid==="number"?A.ownerPid:null,updatedAt:typeof A.updatedAt==="string"?A.updatedAt:""}}catch(w){if(w.code==="ENOENT")return null;throw w}}async function G9($,w){await Bw.mkdir($,{recursive:!0}),await Bw.writeFile(pZ($),`${JSON.stringify(w,null,2)}
200
- `,"utf8")}async function tZ($){await Bw.rm(pZ($),{force:!0})}function T9($){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;return w}function _6($){let w=T9($);if(!w)return null;let A=w.split(".");if(A.length<2)return null;return A.slice(-2).join(".")}function rZ($){let w=new Set;for(let A of $){let J=_6(A);if(J)w.add(J)}return Array.from(w).sort()}function aZ($){let w=new Set;for(let A of $){let J=T9(A);if(J)w.add(J)}return Array.from(w).sort()}var yY=1,X6="dns-state.json",z9;var H9=h$(()=>{z9=["com","test","dev","app","page","local","localhost","example","invalid"]});var _Y={};TW(_Y,{tearDownDevelopmentDns:()=>Nw,syncDevelopmentDnsFromRegistry:()=>AA,stopDnsServer:()=>sZ,startDnsServer:()=>M9,setupResolver:()=>m6,setupDevelopmentDns:()=>wW,resolverFilePath:()=>R1,removeResolver:()=>d6,removeLegacyTldResolvers:()=>$W,reconcileStaleDevelopmentDns:()=>Ww,isDnsServerRunning:()=>b6,contentLooksLikeRpxResolver:()=>I9,RPX_RESOLVER_MARKER:()=>h9,DNS_PORT:()=>XY});import D6 from"node:dgram";import*as q9 from"node:fs/promises";import*as K9 from"node:path";import*as p0 from"node:process";function Q6($){return{id:$.readUInt16BE(0),flags:$.readUInt16BE(2),qdcount:$.readUInt16BE(4),ancount:$.readUInt16BE(6),nscount:$.readUInt16BE(8),arcount:$.readUInt16BE(10)}}function N9($,w){let A=[],J=w;while(!0){let Y=$[J];if(Y===0){J++;break}if((Y&192)===192){let U=$.readUInt16BE(J)&16383,{name:Z}=N9($,U);A.push(Z),J+=2;break}J++,A.push($.subarray(J,J+Y).toString("ascii")),J+=Y}return{name:A.join("."),newOffset:J}}function k6($,w){let{name:A,newOffset:J}=N9($,w),Y=$.readUInt16BE(J),U=$.readUInt16BE(J+2);return{question:{name:A,type:Y,class:U},newOffset:J+4}}function OY($){let w=$.split("."),A=[];for(let J of w)A.push(Buffer.from([J.length])),A.push(Buffer.from(J,"ascii"));return A.push(Buffer.from([0])),Buffer.concat(A)}function x6($,w,A){let J=[],Y=Buffer.alloc(12);Y.writeUInt16BE($,0),Y.writeUInt16BE(33152,2),Y.writeUInt16BE(1,4),Y.writeUInt16BE(1,6),Y.writeUInt16BE(0,8),Y.writeUInt16BE(0,10),J.push(Y),J.push(OY(w.name));let U=Buffer.alloc(4);U.writeUInt16BE(w.type,0),U.writeUInt16BE(w.class,2),J.push(U),J.push(OY(w.name));let Z=Buffer.alloc(10);if(Z.writeUInt16BE(w.type,0),Z.writeUInt16BE(1,2),Z.writeUInt32BE(300,4),w.type===1){Z.writeUInt16BE(4,8),J.push(Z);let B=A.split(".").map((W)=>Number.parseInt(W,10));J.push(Buffer.from(B))}else if(w.type===28)Z.writeUInt16BE(16,8),J.push(Z),J.push(Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]));else return Y.writeUInt16BE(33155,2),Y.writeUInt16BE(0,6),Buffer.concat([Y,OY(w.name),U]);return Buffer.concat(J)}function P6($,w){let A=[],J=Buffer.alloc(12);J.writeUInt16BE($,0),J.writeUInt16BE(33155,2),J.writeUInt16BE(1,4),J.writeUInt16BE(0,6),J.writeUInt16BE(0,8),J.writeUInt16BE(0,10),A.push(J),A.push(OY(w.name));let Y=Buffer.alloc(4);return Y.writeUInt16BE(w.type,0),Y.writeUInt16BE(w.class,2),A.push(Y),Buffer.concat(A)}async function M9($,w){if(p0.platform!=="darwin")return!1;let A=aZ($);if(A.length===0)return!1;if(n$){for(let J of A)SY.add(J);return G("dns","DNS server already running — merged domains",w),!0}return SY=new Set(A),new Promise((J)=>{n$=D6.createSocket("udp4"),n$.on("error",(Y)=>{G("dns",`DNS server error: ${Y.message}`,w),n$?.close(),n$=null,J(!1)}),n$.on("message",(Y,U)=>{try{let Z=Q6(Y),{question:B}=k6(Y,12);G("dns",`Query for ${B.name} type ${B.type} from ${U.address}`,w);let W=B.name.toLowerCase(),E=!1;for(let F of SY)if(W===F||W.endsWith(`.${F}`)){E=!0;break}let j;if(E&&(B.type===1||B.type===28))j=x6(Z.id,B,"127.0.0.1"),G("dns",`Responding with localhost for ${B.name}`,w);else j=P6(Z.id,B),G("dns",`NXDOMAIN for ${B.name}`,w);n$?.send(j,U.port,U.address)}catch(Z){G("dns",`Error processing DNS query: ${Z}`,w)}}),n$.on("listening",()=>{let Y=n$?.address();G("dns",`DNS server listening on ${Y?.address}:${Y?.port}`,w),J(!0)});try{n$.bind(XY,"127.0.0.1")}catch(Y){G("dns",`Failed to bind DNS server: ${Y}`,w),J(!1)}})}function sZ($){if(n$)G("dns","Stopping DNS server",$),n$.close(),n$=null,SY=new Set}function b6(){return n$!==null}function i6(){return`${h9}
203
+ `,j=k$(WJ.tmpdir(),"rpx-trust.ps1");if(await q$.writeFile(j,E),I1(`powershell -ExecutionPolicy Bypass -File "${j}"`),$.verbose)q.success("Successfully added certificate to Windows trust store");B=!0}catch(E){if($.verbose)q.warn(`Could not trust certificate: ${E}`)}else try{await EU(W,X.certificate,A),B=!0}catch(E){if($.verbose)q.warn(`Could not add certificate to trust store: ${E}`)}if(Ew={key:W.privateKey,cert:W.certificate,ca:X.certificate},$.verbose)q.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);if(!B&&$.verbose)q.warn('If you see certificate warnings in Chrome/Arc, type "thisisunsafe" on the warning page'),q.warn("This will bypass the warning and you should only need to do it once")}function H7(){Ew=null}async function p0($){if(!$)return null;if(Ew)return Ew;let w=wA($);try{let[A,Y,f]=await Promise.all([q$.access(w.keyPath).then(()=>!0).catch(()=>!1),q$.access(w.certPath).then(()=>!0).catch(()=>!1),w.caCertPath?q$.access(w.caCertPath).then(()=>!0).catch(()=>!1):Promise.resolve(!1)]);if(!A||!Y)return z("ssl",`Certificate files don't exist: key=${A}, cert=${Y}, paths: ${w.keyPath}, ${w.certPath}`,$.verbose),null;let X="regenerateUntrustedCerts"in $,U=$.regenerateUntrustedCerts,W=X?U!==!1:!0;z("ssl",`Trust check: hasFlag=${X}, flagValue=${U}, shouldCheckTrust=${W}`,$.verbose);let J=w.basePath||k$(xf(),".stacks","ssl"),B=dT(J);if(!(W?await tT(B.caCertPath,$):!0))return z("ssl","Root CA exists but is not trusted, will regenerate",$.verbose),null;let[j,T,F]=await Promise.all([q$.readFile(w.keyPath,"utf8"),q$.readFile(w.certPath,"utf8"),f&&w.caCertPath?q$.readFile(w.caCertPath,"utf8"):Promise.resolve(void 0)]);if(F&&!F.includes("-----BEGIN CERTIFICATE-----"))return z("ssl","Invalid root CA certificate content, will regenerate",$.verbose),null;if(Iw($))try{let{X509Certificate:H}=await import("node:crypto"),K=new H(T).subjectAltName||"",h=$.proxies.map((N)=>N.to).filter((N)=>!K.includes(`DNS:${N}`));if(h.length>0)return z("ssl",`Certificate missing SANs for: ${h.join(", ")}, will regenerate`,$.verbose),null}catch(H){z("ssl",`Could not verify cert SANs: ${H}`,$.verbose)}return z("ssl","Successfully loaded existing certificates",$.verbose),Ew={key:j,cert:T,ca:F},Ew}catch(A){return z("ssl",`Error checking existing certificates: ${A}`,$.verbose),null}}function wA($,w){let A=_f($);z("ssl",`Primary domain: ${A}`,w);let Y=lT($),f=k$(xf(),".stacks","ssl");if(typeof $.https==="object"){let X=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:f,U={domain:A,hostCertCN:A,basePath:X,caCertPath:$.https.caCertPath||Y.caCertPath,certPath:$.https.certPath||Y.certPath,keyPath:$.https.keyPath||Y.keyPath,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:$.https.commonName||A,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(mT($)).map((W)=>({type:2,value:W}))};if($J($.https.rootCA))U.rootCA=$.https.rootCA;return U}return{domain:A,hostCertCN:A,basePath:f,...Y,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:A,organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",validityDays:825,verbose:w||!1,subjectAltNames:Array.from(mT($)).map((X)=>({type:2,value:X}))}}async function gT($,w){let A=lT({to:$,verbose:w}),Y=[A.caCertPath,A.certPath,A.keyPath];z("certificates","Attempting to clean up relating certificates",w),await Promise.all(Y.map((f)=>AJ(f,w)))}async function tT($,w){try{if(z("ssl",`Checking if certificate is trusted: ${$}`,w?.verbose),Bw.platform==="darwin"){if(w?.serverName)return UJ($,w.serverName,{verbose:w.verbose});return Zf($,{verbose:w.verbose})}else if(Bw.platform==="win32")try{let Y=I1(`openssl x509 -noout -subject -in "${$}"`).toString().trim().split("=").slice(1).join("=").trim()||"";if(!Y)return z("ssl","Could not extract certificate subject",w?.verbose),!1;let f=`powershell -Command "Get-ChildItem -Path Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -like '*${Y}*' } | Select-Object Subject"`;if(I1(f).toString().includes(Y))return z("ssl","Certificate found in trusted root store",w?.verbose),!0;return z("ssl","Certificate not found in trusted root store",w?.verbose),!1}catch(A){return z("ssl",`Error checking certificate trust on Windows: ${A}`,w?.verbose),!1}else if(Bw.platform==="linux")try{let Y=I1(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`).toString().trim().split("=")[1]?.trim()||"",f=["/etc/ssl/certs","/etc/pki/tls/certs"];for(let X of f)try{if(I1(`find ${X} -type f -exec openssl x509 -noout -fingerprint -sha256 -in {} \\; 2>/dev/null | grep "${Y}"`).toString().includes(Y))return z("ssl",`Certificate fingerprint found in ${X}`,w?.verbose),!0}catch{}return z("ssl","Certificate not found in system trust stores",w?.verbose),!1}catch(A){return z("ssl",`Error checking certificate trust on Linux: ${A}`,w?.verbose),!1}return z("ssl",`Platform ${Bw.platform} not supported for certificate trust check`,w?.verbose),!1}catch(A){return z("ssl",`Error checking if certificate is trusted: ${A}`,w?.verbose),!1}}var Ew=null,F7="rpx-root-ca.crt",z7="rpx-root-ca.key";var Pf=E$(()=>{jU();Aw();GU();JJ();U$();JJ();HU()});import*as B0 from"node:path";function AA($,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 R7($){let w=B0.extname($).toLowerCase();return K7[w]??"application/octet-stream"}function h7($){let w;try{w=decodeURIComponent($)}catch{return null}if(w.includes("\x00")||w.includes("\\"))return null;let A=B0.posix.normalize(`/${w}`);if(A.includes(".."))return null;return A.replace(/^\/+/,"")}function q7($,w){let A=h7($);if(A===null)return null;let Y=B0.posix.extname(A);if(w.cleanUrls&&Y===".html"){let f=$.replace(/\/index\.html$/i,"/").replace(/\.html$/i,"");return{filePath:B0.join(w.dir,A),redirectTo:f||"/"}}if(A===""||$.endsWith("/"))return{filePath:B0.join(w.dir,A,"index.html")};if(Y!=="")return{filePath:B0.join(w.dir,A)};if(w.pathRewriteStyle==="flat")return{filePath:B0.join(w.dir,`${A}.html`)};return{filePath:B0.join(w.dir,A,"index.html")}}async function pT($,w){let A=q7($,w);if(!A)return new Response("Forbidden",{status:403});if(A.redirectTo)return new Response(null,{status:301,headers:{Location:A.redirectTo}});let Y=w.maxAge>0?`public, max-age=${w.maxAge}`:"no-cache",f=Bun.file(A.filePath);if(await f.exists())return new Response(f,{status:200,headers:{"Content-Type":R7(A.filePath),"Cache-Control":Y}});if(w.spa){let X=B0.join(w.dir,"index.html"),U=Bun.file(X);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 K7;var YA=E$(()=>{K7={".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 y7($){return($.headers.get("host")||"").split(":")[0]}function aT($,w){if(!w||w==="/")return $;if($===w)return"/";if($.startsWith(`${w}/`)){let A=$.slice(w.length);return A===""?"/":A}return $}function rT($,w,A){let Y=new URL($.url),f=w.sourceHost??"",U=w.stripBasePathPrefix??!1?aT(Y.pathname,w.basePath):Y.pathname,W=wJ(U,w.pathRewrites);if(W)f=W.targetHost,U=W.targetPath,z("request",`Path rewrite: ${Y.pathname} → ${f}${U}`,A);return{targetHost:f,targetPath:U,search:Y.search}}function fA($,w){return async(A,Y)=>{let f=new URL(A.url),X=y7(A),U=$(X,f.pathname);if(!U)return z("request",`No route found for host: ${X}`,w),new Response(`No proxy configured for ${X}`,{status:404});if(U.static){let T=U.stripBasePathPrefix??!0?aT(f.pathname,U.basePath):f.pathname;return pT(T,U.static)}if(A.headers.get("upgrade")?.toLowerCase()==="websocket"){if(!Y||!U.sourceHost)return new Response("WebSocket upgrade not supported here",{status:400});let{targetHost:j,targetPath:T,search:F}=rT(A,U,w),H=`ws://${j}${T}${F}`,G={};for(let[h,N]of A.headers)if(!N7.has(h.toLowerCase())&&h.toLowerCase()!=="host")G[h]=N;G.host=j,G["x-forwarded-for"]="127.0.0.1",G["x-forwarded-proto"]="https",G["x-forwarded-host"]=X;let K={targetUrl:H,forwardHeaders:G};if(Y.upgrade(A,{data:K})){z("ws",`upgraded ${X}${T} → ${H}`,w);return}return new Response("WebSocket upgrade failed",{status:400})}if(!U.sourceHost)return new Response(`No upstream configured for ${X}`,{status:502});let{targetHost:W,targetPath:J,search:B}=rT(A,U,w),E=`http://${W}${J}${B}`;try{let j=new Headers(A.headers);if(j.set("host",W),U.changeOrigin)j.set("origin",`http://${U.sourceHost}`);j.set("x-forwarded-for","127.0.0.1"),j.set("x-forwarded-proto","https"),j.set("x-forwarded-host",X);let T=await fetch(E,{method:A.method,headers:j,body:A.body,redirect:"manual"});if(U.cleanUrls&&f.pathname.endsWith(".html")){let H=f.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:H}})}let F=new Headers(T.headers);return new Response(T.body,{status:T.status,statusText:T.statusText,headers:F})}catch(j){return z("request",`Proxy error for ${X}: ${j}`,w),new Response(`Proxy Error: ${j}`,{status:502})}}}function XA($){let w=new WeakMap;return{open(A){let{targetUrl:Y,forwardHeaders:f}=A.data,X;try{X=new WebSocket(Y,{headers:f})}catch(W){z("ws",`failed to open upstream ${Y}: ${W}`,$),A.close(1011,"upstream connect failed");return}X.binaryType="arraybuffer";let U={upstream:X,upstreamOpen:!1,pending:[]};w.set(A,U),X.addEventListener("open",()=>{U.upstreamOpen=!0;for(let W of U.pending)X.send(W);U.pending=[]}),X.addEventListener("message",(W)=>{A.send(W.data)}),X.addEventListener("close",(W)=>{try{A.close(W.code||1000,W.reason||"")}catch{}}),X.addEventListener("error",()=>{z("ws",`upstream error for ${Y}`,$);try{A.close(1011,"upstream error")}catch{}})},message(A,Y){let f=w.get(A);if(!f)return;let X=typeof Y==="string"?Y:new Uint8Array(Y);if(f.upstreamOpen)f.upstream.send(X);else f.pending.push(X)},close(A,Y,f){let X=w.get(A);if(!X)return;w.delete(A);try{X.upstream.close(Y||1000,f||"")}catch{}}}}var N7;var bf=E$(()=>{YA();U$();N7=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade","sec-websocket-key","sec-websocket-version","sec-websocket-extensions"])});function UA($){return $.startsWith("*.")}function sT($,w){if(!UA(w))return!1;let A=w.slice(1);return $.length>A.length&&$.endsWith(A)}function S1($){if(!$||$==="/")return"/";let w=$.trim();if(!w.startsWith("/"))w=`/${w}`;return w=w.replace(/\/+$/,""),w===""?"/":w}function I7($,w){if(w==="/")return!0;if($===w)return!0;return $.startsWith(`${w}/`)}function JA($){let w=new Map;for(let Y of $){let f=S1(Y.path),X=w.get(Y.host);if(!X)X=new Map,w.set(Y.host,X);X.set(f,Y.route)}let A=new Map;for(let[Y,f]of w){let X=[];for(let[U,W]of f)X.push({path:U,route:W});X.sort((U,W)=>W.path.length-U.path.length),A.set(Y,X)}return A}function C7($,w){let A=$.get(w);if(A!==void 0)return A;let Y,f=-1;for(let[X,U]of $){if(!UA(X))continue;if(sT(w,X)){let W=X.length-1;if(W>f)f=W,Y=U}}return Y}function WA($,w,A){let Y=C7($,w);if(!Y)return;for(let f of Y)if(I7(A,f.path))return f.route;return}var cf=()=>{};import*as BA from"node:fs/promises";import*as BJ from"node:path";function S7($){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 L7($,w,A,Y){try{let[f,X]=await Promise.all([BA.readFile(w,"utf8"),BA.readFile(A,"utf8")]);return{serverName:$,cert:f,key:X}}catch(f){return z("sni",`skipping ${$}: ${f.message}`,Y),null}}async function EJ($,w){let A=new Map;if($.certsDir){let f=[];try{f=await BA.readdir($.certsDir)}catch(X){z("sni",`certsDir read failed (${$.certsDir}): ${X.message}`,w)}for(let X of f){let U=S7(X);if(!U)continue;let W=X.slice(0,-4);A.set(U,{certPath:BJ.join($.certsDir,X),keyPath:BJ.join($.certsDir,`${W}.key`)})}}if($.domains)for(let[f,X]of Object.entries($.domains))A.set(f,X);let Y=[];for(let[f,X]of A){let U=await L7(f,X.certPath,X.keyPath,w);if(U)Y.push(U)}return Y}var jJ=E$(()=>{U$()});import*as jw from"node:fs/promises";import*as TJ from"node:path";function V7($,w){if(!w||w.length===0)return!1;return w.some((A)=>{let Y=A.startsWith(".")?A.slice(1):A;return $===Y||$.endsWith(`.${Y}`)})}function Q7($){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 uf{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??pY,this.issuer=$.issuer??p8,this.verbose=$.verbose??!1,this.negativeCacheMs=$.negativeCacheMs??O7;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(!Q7($))return!1;if(V7($,this.config.allowedSuffixes))return!0;if(this.config.ask)try{return await this.config.ask($)}catch(w){return z("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;let w=this.inFlight.get($);if(w)return w;let A=this.negativeCache.get($);if(A!==void 0&&Date.now()<A)return z("on-demand",`${$} negatively cached for ${A-Date.now()}ms`,this.verbose),!1;let Y=this.issue($).finally(()=>{this.inFlight.delete($)});return this.inFlight.set($,Y),Y}async issue($){if(this.certs.has($))return!0;if(await this.loadFromDisk($))return!0;if(!await this.isApproved($))return z("on-demand",`refused issuance for ${$} (not approved)`,this.verbose),!1;try{z("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 A={serverName:$,cert:w.fullChainPem,key:w.keyPem};return this.certs.set($,A),this.negativeCache.delete($),z("on-demand",`issued + installed cert for ${$}`,this.verbose),await this.onCertAdded?.(this.sniEntries()),!0}catch(w){return this.negativeCache.set($,Date.now()+this.negativeCacheMs),z("on-demand",`issuance for ${$} failed: ${w.message}`,this.verbose),!1}}async loadFromDisk($){let{certPath:w,keyPath:A}=this.pathsFor($);try{let[Y,f]=await Promise.all([jw.readFile(w,"utf8"),jw.readFile(A,"utf8")]),X={serverName:$,cert:Y,key:f};return this.certs.set($,X),z("on-demand",`adopted existing on-disk cert for ${$}`,this.verbose),await this.onCertAdded?.(this.sniEntries()),!0}catch{return!1}}pathsFor($){return{certPath:TJ.join(this.certsDir,`${$}.crt`),keyPath:TJ.join(this.certsDir,`${$}.key`)}}async persist($,w,A){await jw.mkdir(this.certsDir,{recursive:!0}).catch(()=>{});let{certPath:Y,keyPath:f}=this.pathsFor($);await Promise.all([jw.writeFile(Y,w,"utf8"),jw.writeFile(f,A,{encoding:"utf8",mode:384})])}}var O7=60000;var FJ=E$(()=>{jU();U$()});import*as nf from"node:fs";import*as n$ from"node:fs/promises";import{homedir as _7}from"node:os";import*as zJ from"node:path";import*as vf from"node:process";function Tw(){return zJ.join(_7(),".stacks","rpx","registry.d")}function EA($){return typeof $==="string"&&$.length>0&&$.length<=128&&D7.test($)}function GJ($,w){if(!EA(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return zJ.join($,`${w}.json`)}function l$($){if(!Number.isInteger($)||$<=0)return!1;try{return vf.kill($,0),!0}catch(w){return w.code==="EPERM"}}function oT($){if(!$||typeof $!=="object")return!1;let w=$,A=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0,Y=typeof w.from==="string"&&w.from.length>0,f=typeof w.static==="string"||!!w.static&&typeof w.static==="object"&&typeof w.static.dir==="string",X=w.path===void 0||typeof w.path==="string";return typeof w.id==="string"&&EA(w.id)&&(Y||f)&&typeof w.to==="string"&&w.to.length>0&&X&&A&&typeof w.createdAt==="string"}async function k7($){await n$.mkdir($,{recursive:!0})}async function eT($,w=Tw(),A){if(!oT($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await k7(w);let Y=GJ(w,$.id),f=`${Y}.tmp.${vf.pid}.${Date.now()}`,X=JSON.stringify($,null,2);try{await n$.writeFile(f,X,{encoding:"utf8",mode:420}),await n$.rename(f,Y),z("registry",`wrote entry ${$.id} → ${Y}`,A)}catch(U){throw await n$.unlink(f).catch(()=>{}),U}}async function HJ($,w=Tw(),A){let Y=GJ(w,$);try{await n$.unlink(Y),z("registry",`removed entry ${$}`,A)}catch(f){if(f.code!=="ENOENT")throw f}}async function Z7($,w=Tw(),A){let Y=GJ(w,$);try{let f=await n$.readFile(Y,"utf8"),X=JSON.parse(f);if(!oT(X))return z("registry",`entry ${$} failed validation, removing`,A),await n$.unlink(Y).catch(()=>{}),null;return X}catch(f){if(f.code==="ENOENT")return null;if(f instanceof SyntaxError)return z("registry",`entry ${$} has invalid JSON, removing`,A),await n$.unlink(Y).catch(()=>{}),null;throw f}}async function Cw($=Tw(),w){let A;try{A=await n$.readdir($)}catch(f){if(f.code==="ENOENT")return[];throw f}let Y=[];for(let f of A){if(!f.endsWith(".json"))continue;let X=f.slice(0,-5);if(!EA(X))continue;let U=await Z7(X,$,w);if(U)Y.push(U)}return Y}async function mf($=Tw(),w){let A=await Cw($,w),Y=0;for(let f of A){if(f.pid===void 0)continue;if(!l$(f.pid))z("registry",`GC: pid ${f.pid} for ${f.id} is dead, removing`,w),await HJ(f.id,$,w).catch(()=>{}),Y++}return Y}function KJ($,w={}){let A=w.dir??Tw(),Y=w.debounceMs??100,f=w.pollMs??Math.max(Y*2,250),X=w.verbose;nf.mkdirSync(A,{recursive:!0});let U=null,W=!1,J=null,B=!1,E=(K)=>{return JSON.stringify(K.map((R)=>({id:R.id,from:R.from,to:R.to,path:R.path,pid:R.pid,pathRewrites:R.pathRewrites,cleanUrls:R.cleanUrls,changeOrigin:R.changeOrigin,static:R.static})).sort((R,h)=>R.id.localeCompare(h.id)))},j=()=>{if(U=null,W)return;Cw(A,X).then((K)=>{return J=E(K),$(K)}).catch((K)=>{z("registry",`watcher onChange failed: ${K}`,X)})},T=()=>{if(W)return;if(U)clearTimeout(U);U=setTimeout(j,Y)},H=setInterval(()=>{if(W||B)return;B=!0,Cw(A,X).then((K)=>{if(E(K)!==J)T()}).catch((K)=>{z("registry",`watcher poll failed: ${K}`,X)}).finally(()=>{B=!1})},f),G=nf.watch(A,{persistent:!0},(K,R)=>{if(R&&/\.tmp\.\d+\.\d+$/.test(R))return;T()});return G.on("error",(K)=>{z("registry",`watcher error: ${K}`,X)}),T(),{close:()=>{if(W=!0,U)clearTimeout(U);clearInterval(H),G.close()}}}var D7;var jA=E$(()=>{U$();D7=/^[a-zA-Z0-9._-]+$/});import{spawn as x7}from"node:child_process";import*as Sw from"node:fs/promises";import{homedir as P7}from"node:os";import*as TA from"node:path";import*as v$ from"node:process";function r0(){return TA.join(P7(),".stacks","rpx")}function wF($=r0()){return TA.join($,"daemon.pid")}async function $F($=r0()){try{let w=await Sw.readFile(wF($),"utf8"),A=Number.parseInt(w.trim(),10);if(!Number.isFinite(A)||A<=0)return null;return A}catch(w){if(w.code==="ENOENT")return null;throw w}}async function i7($=r0()){await Sw.unlink(wF($)).catch(()=>{})}function b7(){let $=v$.execPath,w=TA.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&v$.argv[1])return[$,v$.argv[1],"daemon:start"];return[$,"daemon:start"]}async function AF($={}){let w=$.rpxDir??r0(),A=$.verbose??!1;await Fw({rpxDir:w,verbose:A}).catch((E)=>{z("daemon",`DNS reconcile before ensureDaemonRunning: ${E}`,A)});let Y=await $F(w);if(Y!==null&&l$(Y))return z("daemon",`ensureDaemonRunning: already running pid=${Y}`,A),{pid:Y,spawned:!1};if(Y!==null)z("daemon",`ensureDaemonRunning: clearing stale pid=${Y}`,A),await i7(w);await Sw.mkdir(w,{recursive:!0});let f=$.spawnCommand??b7();if(f.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");z("daemon",`spawning daemon: ${f.join(" ")}`,A);let X=x7(f[0],f.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??v$.cwd(),env:$.spawnEnv?{...v$.env,...$.spawnEnv}:v$.env});X.unref();let U=null;X.once("error",(E)=>{U=E});let W=$.startupTimeoutMs??5000,J=$.pollIntervalMs??50,B=Date.now()+W;while(Date.now()<B){if(U)throw U;let E=await $F(w);if(E!==null&&l$(E))return z("daemon",`daemon registered with pid=${E}`,A),{pid:E,spawned:!0};await new Promise((j)=>setTimeout(j,J))}if(U)throw U;throw Error(`rpx daemon failed to start within ${W}ms (rpxDir=${w})`)}var RJ=E$(()=>{Aw();Pf();bf();cf();jJ();FJ();YA();jA();L1();U$()});import*as zw from"node:fs/promises";import{homedir as c7}from"node:os";import*as hJ from"node:path";function fF(){return hJ.join(c7(),".stacks","rpx")}function qJ($=fF()){return hJ.join($,u7)}async function lf($=fF()){try{let w=await zw.readFile(qJ($),"utf8"),A=JSON.parse(w);if(A.version!==df||!Array.isArray(A.resolvers))return null;return{version:df,resolvers:A.resolvers.filter((Y)=>typeof Y==="string"),domains:Array.isArray(A.domains)?A.domains.filter((Y)=>typeof Y==="string"):[],ownerPid:typeof A.ownerPid==="number"?A.ownerPid:null,updatedAt:typeof A.updatedAt==="string"?A.updatedAt:""}}catch(w){if(w.code==="ENOENT")return null;throw w}}async function XF($,w){await zw.mkdir($,{recursive:!0}),await zw.writeFile(qJ($),`${JSON.stringify(w,null,2)}
204
+ `,"utf8")}async function NJ($){await zw.rm(qJ($),{force:!0})}function UF($){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;return w}function n7($){let w=UF($);if(!w)return null;let A=w.split(".");if(A.length<2)return null;return A.slice(-2).join(".")}function yJ($){let w=new Set;for(let A of $){let Y=n7(A);if(Y)w.add(Y)}return Array.from(w).sort()}function MJ($){let w=new Set;for(let A of $){let Y=UF(A);if(Y)w.add(Y)}return Array.from(w).sort()}var df=1,u7="dns-state.json",YF;var JF=E$(()=>{YF=["com","test","dev","app","page","local","localhost","example","invalid"]});var rf={};dJ(rf,{tearDownDevelopmentDns:()=>Lw,syncDevelopmentDnsFromRegistry:()=>FA,stopDnsServer:()=>IJ,startDnsServer:()=>FF,setupResolver:()=>o7,setupDevelopmentDns:()=>OJ,resolverFilePath:()=>O1,removeResolver:()=>$R,removeLegacyTldResolvers:()=>LJ,reconcileStaleDevelopmentDns:()=>Fw,isDnsServerRunning:()=>t7,contentLooksLikeRpxResolver:()=>zF,RPX_RESOLVER_MARKER:()=>EF,DNS_PORT:()=>pf});import v7 from"node:dgram";import*as WF from"node:fs/promises";import*as BF from"node:path";import*as a0 from"node:process";function m7($){return{id:$.readUInt16BE(0),flags:$.readUInt16BE(2),qdcount:$.readUInt16BE(4),ancount:$.readUInt16BE(6),nscount:$.readUInt16BE(8),arcount:$.readUInt16BE(10)}}function TF($,w){let A=[],Y=w;while(!0){let f=$[Y];if(f===0){Y++;break}if((f&192)===192){let X=$.readUInt16BE(Y)&16383,{name:U}=TF($,X);A.push(U),Y+=2;break}Y++,A.push($.subarray(Y,Y+f).toString("ascii")),Y+=f}return{name:A.join("."),newOffset:Y}}function d7($,w){let{name:A,newOffset:Y}=TF($,w),f=$.readUInt16BE(Y),X=$.readUInt16BE(Y+2);return{question:{name:A,type:f,class:X},newOffset:Y+4}}function tf($){let w=$.split("."),A=[];for(let Y of w)A.push(Buffer.from([Y.length])),A.push(Buffer.from(Y,"ascii"));return A.push(Buffer.from([0])),Buffer.concat(A)}function l7($,w,A){let Y=[],f=Buffer.alloc(12);f.writeUInt16BE($,0),f.writeUInt16BE(33152,2),f.writeUInt16BE(1,4),f.writeUInt16BE(1,6),f.writeUInt16BE(0,8),f.writeUInt16BE(0,10),Y.push(f),Y.push(tf(w.name));let X=Buffer.alloc(4);X.writeUInt16BE(w.type,0),X.writeUInt16BE(w.class,2),Y.push(X),Y.push(tf(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),Y.push(U);let W=A.split(".").map((J)=>Number.parseInt(J,10));Y.push(Buffer.from(W))}else if(w.type===28)U.writeUInt16BE(16,8),Y.push(U),Y.push(Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]));else return f.writeUInt16BE(33155,2),f.writeUInt16BE(0,6),Buffer.concat([f,tf(w.name),X]);return Buffer.concat(Y)}function g7($,w){let A=[],Y=Buffer.alloc(12);Y.writeUInt16BE($,0),Y.writeUInt16BE(33155,2),Y.writeUInt16BE(1,4),Y.writeUInt16BE(0,6),Y.writeUInt16BE(0,8),Y.writeUInt16BE(0,10),A.push(Y),A.push(tf(w.name));let f=Buffer.alloc(4);return f.writeUInt16BE(w.type,0),f.writeUInt16BE(w.class,2),A.push(f),Buffer.concat(A)}async function FF($,w){if(a0.platform!=="darwin")return!1;let A=MJ($);if(A.length===0)return!1;if(g$){for(let Y of A)gf.add(Y);return z("dns","DNS server already running — merged domains",w),!0}return gf=new Set(A),new Promise((Y)=>{g$=v7.createSocket("udp4"),g$.on("error",(f)=>{z("dns",`DNS server error: ${f.message}`,w),g$?.close(),g$=null,Y(!1)}),g$.on("message",(f,X)=>{try{let U=m7(f),{question:W}=d7(f,12);z("dns",`Query for ${W.name} type ${W.type} from ${X.address}`,w);let J=W.name.toLowerCase(),B=!1;for(let j of gf)if(J===j||J.endsWith(`.${j}`)){B=!0;break}let E;if(B&&(W.type===1||W.type===28))E=l7(U.id,W,"127.0.0.1"),z("dns",`Responding with localhost for ${W.name}`,w);else E=g7(U.id,W),z("dns",`NXDOMAIN for ${W.name}`,w);g$?.send(E,X.port,X.address)}catch(U){z("dns",`Error processing DNS query: ${U}`,w)}}),g$.on("listening",()=>{let f=g$?.address();z("dns",`DNS server listening on ${f?.address}:${f?.port}`,w),Y(!0)});try{g$.bind(pf,"127.0.0.1")}catch(f){z("dns",`Failed to bind DNS server: ${f}`,w),Y(!1)}})}function IJ($){if(g$)z("dns","Stopping DNS server",$),g$.close(),g$=null,gf=new Set}function t7(){return g$!==null}function p7(){return`${EF}
201
205
  nameserver 127.0.0.1
202
- port ${XY}
203
- `}function R1($){return K9.join(R9,$)}function I9($){return $.includes("127.0.0.1")&&$.includes(String(XY))}async function u6($){try{return await q9.readFile(R1($),"utf8")}catch(w){if(w.code==="ENOENT")return null;throw w}}async function oZ($){if(p0.platform!=="darwin")return;let{execSudoSync:w,getSudoPassword:A}=await Promise.resolve().then(() => (U$(),G1));if(!A()){G("dns","Cannot flush DNS cache without SUDO_PASSWORD",$);return}try{w("dscacheutil -flushcache"),w("killall -HUP mDNSResponder 2>/dev/null || true"),G("dns","DNS cache flushed",$)}catch(J){G("dns",`Could not flush DNS cache: ${J}`,$)}}async function c6($,w){let{execSudoSync:A}=await Promise.resolve().then(() => (U$(),G1)),J=i6().replace(/\n/g,"\\n"),Y=`bash -c 'mkdir -p ${R9} && printf "%b" "${J}" > ${R1($)}'`;A(Y),G("dns",`Created ${R1($)}`,w)}async function v6($,w){let{execSudoSync:A}=await Promise.resolve().then(() => (U$(),G1));A(`rm -f ${R1($)}`),G("dns",`Removed ${R1($)}`,w)}async function m6($,w){return wW({domains:w??[],verbose:$})}async function n6($,w){if(p0.platform!=="darwin")return!0;let{getSudoPassword:A}=await Promise.resolve().then(() => (U$(),G1));if(!A())return G("dns","SUDO_PASSWORD not set, cannot create resolver files",w),!1;try{for(let J of $)await c6(J,w);return await oZ(w),!0}catch(J){return G("dns",`Failed to create resolver file: ${J}`,w),!1}}async function eZ($,w){if(p0.platform!=="darwin")return;let{getSudoPassword:A}=await Promise.resolve().then(() => (U$(),G1));if(!A())return;try{for(let J of $)await v6(J,w);await oZ(w)}catch(J){G("dns",`Failed to remove resolver files: ${J}`,w)}}async function $W($){if(p0.platform!=="darwin")return[];let w=[];for(let A of z9){let J=await u6(A);if(J&&I9(J))await eZ([A],$),w.push(A)}return w}async function wW($){let w=$.rpxDir??l0(),A=aZ($.domains);if(A.length===0)return!1;let J=rZ(A);if(!await M9(A,$.verbose))return!1;if(!await n6(J,$.verbose))return!1;let Z={version:yY,resolvers:J,domains:A,ownerPid:$.ownerPid??p0.pid,updatedAt:new Date().toISOString()};return await G9(w,Z),!0}async function AA($,w={}){let A=$.map((W)=>W.to).filter(Boolean),J=w.rpxDir??l0(),Y=rZ(A),B=((await VY(J))?.resolvers??[]).filter((W)=>!Y.includes(W));if(B.length>0)await eZ(B,w.verbose);if(Y.length===0){sZ(w.verbose),await tZ(J);return}await wW({domains:A,rpxDir:J,verbose:w.verbose,ownerPid:w.ownerPid??p0.pid})}async function Nw($={}){let w=$.rpxDir??l0();sZ($.verbose);let J=(await VY(w))?.resolvers??[];await eZ(J,$.verbose),await $W($.verbose),await tZ(w)}async function d6($){await Nw({verbose:$})}async function Ww($={}){let w=$.rpxDir??l0(),A=await VY(w),J=A?.ownerPid!=null&&m$(A.ownerPid);if(A&&!J){G("dns",`reconcile: owner pid ${A.ownerPid} is gone — tearing down DNS`,$.verbose),await Nw($);return}let Y=await $W($.verbose);if(Y.length>0)G("dns",`reconcile: removed legacy TLD resolvers: ${Y.join(", ")}`,$.verbose);await oZ($.verbose)}var XY=15353,h9="# managed-by: rpx",R9="/etc/resolver",n$=null,SY;var h1=h$(()=>{gZ();H9();$A();U$();SY=new Set});import{dirname as fq,join as Gq}from"path";import*as v$ from"process";import{fileURLToPath as Tq}from"url";import{existsSync as e9}from"node:fs";import nY from"node:fs/promises";import HW from"node:os";import dY from"node:path";import zw from"node:process";import{EventEmitter as $z}from"node:events";import t0 from"node:process";import qW from"node:process";import tY from"node:process";import FA from"node:process";import L1 from"node:process";import RW from"node:tty";import vz,{stdin as xq,stdout as Pq}from"node:process";import MW,{stdin as dz,stdout as gz}from"node:process";import lz from"node:readline";class CW{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let $=HW.homedir(),w=dY.join($,".config","clapp");this.configPath=dY.join(w,"telemetry.json")}async isEnabled(){if(zw.env.DO_NOT_TRACK==="1"||zw.env.DO_NOT_TRACK==="true")return!1;if(zw.env.NO_TELEMETRY==="1"||zw.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 J={event:$,...w,timestamp:Date.now(),platform:HW.platform(),nodeVersion:zw.version};if(this.events.push(J),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:zw.env.DO_NOT_TRACK==="1"||zw.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:$.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(e9(this.configPath)){let $=await nY.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=dY.dirname(this.configPath);await nY.mkdir(w,{recursive:!0}),await nY.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 Iq=new CW;function wz($,w={}){let A={_:[]},J=w.alias||{},Y=new Set(w.boolean||[]),U={};for(let B of Object.keys(J))for(let W of J[B])U[W]=B;for(let B of Y)if(J[B])for(let W of J[B])Y.add(W);function Z(B,W){let E=U[B]||B;if(A[E]=W,J[E])for(let j of J[E])A[j]=W;if(U[B]&&J[U[B]])for(let j of J[U[B]])A[j]=W;A[B]=W}for(let B=0;B<$.length;B++){let W=$[B];if(W==="--"){A._.push(...$.slice(B+1));break}if(W.startsWith("--")){let E=W.indexOf("=");if(E!==-1){let j=W.slice(2,E),F=W.slice(E+1);Z(j,F)}else{let j=W.slice(2);if(j.startsWith("no-")){let f=j.slice(3);Z(f,!1);continue}let F=U[j]||j;if(Y.has(F)||Y.has(j))Z(j,!0);else{let f=$[B+1];if(f!==void 0&&!f.startsWith("-"))Z(j,f),B++;else Z(j,!0)}}}else if(W.startsWith("-")&&W.length>1){let E=W.slice(1);for(let j=0;j<E.length;j++){let F=E[j],f=U[F]||F;if(j===E.length-1&&!Y.has(f)&&!Y.has(F)){let z=$[B+1];if(z!==void 0&&!z.startsWith("-"))Z(F,z),B++;else Z(F,!0)}else Z(F,!0)}}else A._.push(W)}return A}function pY($){return $.replace(/[<[].+/,"").trim()}function Az($){let w=/<([^>]+)>/g,A=/\[([^\]]+)\]/g,J=[],Y=(B)=>{let W=!1,E=B[1];if(E.startsWith("..."))E=E.slice(3),W=!0;return{required:B[0].startsWith("<"),value:E,variadic:W}},U;while(U=w.exec($))J.push(Y(U));let Z;while(Z=A.exec($))J.push(Y(Z));return J}function Jz($){let w={alias:{},boolean:[]};for(let[A,J]of $.entries()){if(J.names.length>1)w.alias[J.names[0]]=J.names.slice(1);if(J.isBoolean)if(J.negated){if(!$.some((U,Z)=>{return Z!==A&&U.names.some((B)=>J.names.includes(B))&&typeof U.required==="boolean"}))w.boolean.push(J.names[0])}else w.boolean.push(J.names[0])}return w}function KW($){return $.reduce((w,A)=>w.length>=A.length?w:A,"")}function gY($,w){return $.length>=w?$:`${$}${" ".repeat(w-$.length)}`}function Yz($){return $.replace(/([a-z])-([a-z])/g,(w,A,J)=>{return A+J.toUpperCase()})}function Uz($,w,A){let J=0,Y=w.length,U=$,Z;for(;J<Y;++J)Z=U[w[J]],U=U[w[J]]=J===Y-1?A:Z!=null?Z:!!~w[J+1].indexOf(".")||!(+w[J+1]>-1)?{}:[]}function Zz($,w){for(let A of Object.keys(w)){let J=w[A];if(J.shouldTransform){if($[A]=Array.prototype.concat.call([],$[A]),typeof J.transformFunction==="function")$[A]=$[A].map(J.transformFunction)}}}function Wz($){let w=/([^\\/]+)$/.exec($);return w?w[1]:""}function LW($){return $.split(".").map((w,A)=>{return A===0?Yz(w):w}).join(".")}class jA 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}
206
+ port ${pf}
207
+ `}function O1($){return BF.join(jF,$)}function zF($){return $.includes("127.0.0.1")&&$.includes(String(pf))}async function r7($){try{return await WF.readFile(O1($),"utf8")}catch(w){if(w.code==="ENOENT")return null;throw w}}async function CJ($){if(a0.platform!=="darwin")return;let{execSudoSync:w,getSudoPassword:A}=await Promise.resolve().then(() => (U$(),N1));if(!A()){z("dns","Cannot flush DNS cache without SUDO_PASSWORD",$);return}try{w("dscacheutil -flushcache"),w("killall -HUP mDNSResponder 2>/dev/null || true"),z("dns","DNS cache flushed",$)}catch(Y){z("dns",`Could not flush DNS cache: ${Y}`,$)}}async function a7($,w){let{execSudoSync:A}=await Promise.resolve().then(() => (U$(),N1)),Y=p7().replace(/\n/g,"\\n"),f=`bash -c 'mkdir -p ${jF} && printf "%b" "${Y}" > ${O1($)}'`;A(f),z("dns",`Created ${O1($)}`,w)}async function s7($,w){let{execSudoSync:A}=await Promise.resolve().then(() => (U$(),N1));A(`rm -f ${O1($)}`),z("dns",`Removed ${O1($)}`,w)}async function o7($,w){return OJ({domains:w??[],verbose:$})}async function e7($,w){if(a0.platform!=="darwin")return!0;let{getSudoPassword:A}=await Promise.resolve().then(() => (U$(),N1));if(!A())return z("dns","SUDO_PASSWORD not set, cannot create resolver files",w),!1;try{for(let Y of $)await a7(Y,w);return await CJ(w),!0}catch(Y){return z("dns",`Failed to create resolver file: ${Y}`,w),!1}}async function SJ($,w){if(a0.platform!=="darwin")return;let{getSudoPassword:A}=await Promise.resolve().then(() => (U$(),N1));if(!A())return;try{for(let Y of $)await s7(Y,w);await CJ(w)}catch(Y){z("dns",`Failed to remove resolver files: ${Y}`,w)}}async function LJ($){if(a0.platform!=="darwin")return[];let w=[];for(let A of YF){let Y=await r7(A);if(Y&&zF(Y))await SJ([A],$),w.push(A)}return w}async function OJ($){let w=$.rpxDir??r0(),A=MJ($.domains);if(A.length===0)return!1;let Y=yJ(A);if(!await FF(A,$.verbose))return!1;if(!await e7(Y,$.verbose))return!1;let U={version:df,resolvers:Y,domains:A,ownerPid:$.ownerPid??a0.pid,updatedAt:new Date().toISOString()};return await XF(w,U),!0}async function FA($,w={}){let A=$.map((J)=>J.to).filter(Boolean),Y=w.rpxDir??r0(),f=yJ(A),W=((await lf(Y))?.resolvers??[]).filter((J)=>!f.includes(J));if(W.length>0)await SJ(W,w.verbose);if(f.length===0){IJ(w.verbose),await NJ(Y);return}await OJ({domains:A,rpxDir:Y,verbose:w.verbose,ownerPid:w.ownerPid??a0.pid})}async function Lw($={}){let w=$.rpxDir??r0();IJ($.verbose);let Y=(await lf(w))?.resolvers??[];await SJ(Y,$.verbose),await LJ($.verbose),await NJ(w)}async function $R($){await Lw({verbose:$})}async function Fw($={}){let w=$.rpxDir??r0(),A=await lf(w),Y=A?.ownerPid!=null&&l$(A.ownerPid);if(A&&!Y){z("dns",`reconcile: owner pid ${A.ownerPid} is gone — tearing down DNS`,$.verbose),await Lw($);return}let f=await LJ($.verbose);if(f.length>0)z("dns",`reconcile: removed legacy TLD resolvers: ${f.join(", ")}`,$.verbose);await CJ($.verbose)}var pf=15353,EF="# managed-by: rpx",jF="/etc/resolver",g$=null,gf;var L1=E$(()=>{RJ();JF();jA();U$();gf=new Set});import{dirname as MR,join as IR}from"path";import*as d$ from"process";import{fileURLToPath as CR}from"url";import{existsSync as lF}from"node:fs";import JX from"node:fs/promises";import lJ from"node:os";import WX from"node:path";import Kw from"node:process";import{EventEmitter as gF}from"node:events";import o0 from"node:process";import gJ from"node:process";import TX from"node:process";import MA from"node:process";import k1 from"node:process";import rJ from"node:tty";import kz,{stdin as lR,stdout as gR}from"node:process";import sJ,{stdin as Pz,stdout as iz}from"node:process";import bz from"node:readline";class eJ{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let $=lJ.homedir(),w=WX.join($,".config","clapp");this.configPath=WX.join(w,"telemetry.json")}async isEnabled(){if(Kw.env.DO_NOT_TRACK==="1"||Kw.env.DO_NOT_TRACK==="true")return!1;if(Kw.env.NO_TELEMETRY==="1"||Kw.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 Y={event:$,...w,timestamp:Date.now(),platform:lJ.platform(),nodeVersion:Kw.version};if(this.events.push(Y),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:Kw.env.DO_NOT_TRACK==="1"||Kw.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:$.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(lF(this.configPath)){let $=await JX.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=WX.dirname(this.configPath);await JX.mkdir(w,{recursive:!0}),await JX.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 kR=new eJ;function tF($,w={}){let A={_:[]},Y=w.alias||{},f=new Set(w.boolean||[]),X={};for(let W of Object.keys(Y))for(let J of Y[W])X[J]=W;for(let W of f)if(Y[W])for(let J of Y[W])f.add(J);function U(W,J){let B=X[W]||W;if(A[B]=J,Y[B])for(let E of Y[B])A[E]=J;if(X[W]&&Y[X[W]])for(let E of Y[X[W]])A[E]=J;A[W]=J}for(let W=0;W<$.length;W++){let J=$[W];if(J==="--"){A._.push(...$.slice(W+1));break}if(J.startsWith("--")){let B=J.indexOf("=");if(B!==-1){let E=J.slice(2,B),j=J.slice(B+1);U(E,j)}else{let E=J.slice(2);if(E.startsWith("no-")){let T=E.slice(3);U(T,!1);continue}let j=X[E]||E;if(f.has(j)||f.has(E))U(E,!0);else{let T=$[W+1];if(T!==void 0&&!T.startsWith("-"))U(E,T),W++;else U(E,!0)}}}else if(J.startsWith("-")&&J.length>1){let B=J.slice(1);for(let E=0;E<B.length;E++){let j=B[E],T=X[j]||j;if(E===B.length-1&&!f.has(T)&&!f.has(j)){let F=$[W+1];if(F!==void 0&&!F.startsWith("-"))U(j,F),W++;else U(j,!0)}else U(j,!0)}}else A._.push(J)}return A}function jX($){return $.replace(/[<[].+/,"").trim()}function pF($){let w=/<([^>]+)>/g,A=/\[([^\]]+)\]/g,Y=[],f=(W)=>{let J=!1,B=W[1];if(B.startsWith("..."))B=B.slice(3),J=!0;return{required:W[0].startsWith("<"),value:B,variadic:J}},X;while(X=w.exec($))Y.push(f(X));let U;while(U=A.exec($))Y.push(f(U));return Y}function rF($){let w={alias:{},boolean:[]};for(let[A,Y]of $.entries()){if(Y.names.length>1)w.alias[Y.names[0]]=Y.names.slice(1);if(Y.isBoolean)if(Y.negated){if(!$.some((X,U)=>{return U!==A&&X.names.some((W)=>Y.names.includes(W))&&typeof X.required==="boolean"}))w.boolean.push(Y.names[0])}else w.boolean.push(Y.names[0])}return w}function tJ($){return $.reduce((w,A)=>w.length>=A.length?w:A,"")}function BX($,w){return $.length>=w?$:`${$}${" ".repeat(w-$.length)}`}function aF($){return $.replace(/([a-z])-([a-z])/g,(w,A,Y)=>{return A+Y.toUpperCase()})}function sF($,w,A){let Y=0,f=w.length,X=$,U;for(;Y<f;++Y)U=X[w[Y]],X=X[w[Y]]=Y===f-1?A:U!=null?U:!!~w[Y+1].indexOf(".")||!(+w[Y+1]>-1)?{}:[]}function oF($,w){for(let A of Object.keys(w)){let Y=w[A];if(Y.shouldTransform){if($[A]=Array.prototype.concat.call([],$[A]),typeof Y.transformFunction==="function")$[A]=$[A].map(Y.transformFunction)}}}function eF($){let w=/([^\\/]+)$/.exec($);return w?w[1]:""}function $W($){return $.split(".").map((w,A)=>{return A===0?aF(w):w}).join(".")}class yA 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}
204
208
 
205
209
  Stack trace:
206
- ${this.stack}`;return this.message}}function Bz(){let{env:$}=qW,{TERM:w,TERM_PROGRAM:A}=$;if(qW.platform!=="win32")return w!=="linux";return Boolean($.WT_SESSION)||Boolean($.TERMINUS_SUBLIME)||$.ConEmuTask==="{cmd::Cmder}"||A==="Terminus-Sublime"||A==="vscode"||w==="xterm-256color"||w==="alacritty"||w==="rxvt-unicode"||w==="rxvt-unicode-256color"||$.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var GA="\x1B",J$=`${GA}[`;var I0={to($,w){if(!w)return`${J$}${$+1}G`;return`${J$}${w+1};${$+1}H`},move($,w){let A="";if($<0)A+=`${J$}${-$}D`;else if($>0)A+=`${J$}${$}C`;if(w<0)A+=`${J$}${-w}A`;else if(w>0)A+=`${J$}${w}B`;return A},up:($=1)=>`${J$}${$}A`,down:($=1)=>`${J$}${$}B`,forward:($=1)=>`${J$}${$}C`,backward:($=1)=>`${J$}${$}D`,nextLine:($=1)=>`${J$}E`.repeat($),prevLine:($=1)=>`${J$}F`.repeat($),left:`${J$}G`,hide:`${J$}?25l`,show:`${J$}?25h`,save:`${GA}7`,restore:`${GA}8`};var lY={screen:`${J$}2J`,up:($=1)=>`${J$}1J`.repeat($),down:($=1)=>`${J$}J`.repeat($),line:`${J$}2K`,lineEnd:`${J$}K`,lineStart:`${J$}1K`,lines($){let w="";for(let A=0;A<$;A++)w+=this.line+(A<$-1?I0.up():"");if($)w+=I0.left;return w}},Vq={screen:`${GA}c`};function Ez($,w){let A=[];for(let J=0;J<=w.length;J++)A[J]=[J];for(let J=0;J<=$.length;J++)A[0][J]=J;for(let J=1;J<=w.length;J++)for(let Y=1;Y<=$.length;Y++)if(w.charAt(J-1)===$.charAt(Y-1))A[J][Y]=A[J-1][Y-1];else A[J][Y]=Math.min(A[J-1][Y-1]+1,A[J][Y-1]+1,A[J-1][Y]+1);return A[w.length][$.length]}function yW($,w,A=2,J=3){return w.map((Y)=>({cmd:Y,distance:Ez($,Y)})).filter(({distance:Y})=>Y<=A).sort((Y,U)=>Y.distance-U.distance).slice(0,J).map(({cmd:Y})=>Y)}class VW{rawName;description;name;names;isBoolean;required;config;negated;constructor($,w,A){if(this.rawName=$,this.description=w,this.config=Object.assign({},A),$=$.replace(/\.\*/g,""),this.negated=!1,this.names=pY($).split(",").map((J)=>{let Y=J.trim().replace(/^-{1,2}/,"");if(Y.startsWith("no-"))this.negated=!0,Y=Y.replace(/^no-/,"");return LW(Y)}).sort((J,Y)=>J.length>Y.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 Oq=tY.argv,jz=`${tY.platform}-${tY.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,hW=FA.argv,Fz=`${FA.platform}-${FA.arch} node-${FA.version}`;class rY{rawName;description;config;cli;options;aliasNames;name;namespace;args;commandAction;usageText;versionNumber;examples;helpCallback;globalCommand;beforeHooks;afterHooks;middleware;constructor($,w,A,J){this.rawName=$,this.description=w,this.config=A,this.cli=J,this.options=[],this.aliasNames=[],this.name=pY($);let Y=pY($),U=Y.indexOf(":");if(U>0)this.namespace=Y.substring(0,U),this.name=Y.substring(U+1);if(this.args=Az($),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!A)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,A){let J=new VW($,w,A);return this.options.push(J),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 aY}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:A,options:J,helpCallback:Y}=this.cli.globalCommand,U=[{body:`${$}${A?`/${A}`:""}`}];if(U.push({title:"Usage",body:` $ ${$} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&w.length>0){let W=KW(w.map((z)=>z.rawName)),E=new Map,j=[];for(let z of w)if(z.namespace){if(!E.has(z.namespace))E.set(z.namespace,[]);E.get(z.namespace).push(z)}else j.push(z);let F="";if(j.length>0)F+=j.map((z)=>{return` ${gY(z.rawName,W.length)} ${z.description}`}).join(`
207
- `);let f=Array.from(E.keys()).sort();for(let z of f){let H=E.get(z);if(F.length>0)F+=`
210
+ ${this.stack}`;return this.message}}function $z(){let{env:$}=gJ,{TERM:w,TERM_PROGRAM:A}=$;if(gJ.platform!=="win32")return w!=="linux";return Boolean($.WT_SESSION)||Boolean($.TERMINUS_SUBLIME)||$.ConEmuTask==="{cmd::Cmder}"||A==="Terminus-Sublime"||A==="vscode"||w==="xterm-256color"||w==="alacritty"||w==="rxvt-unicode"||w==="rxvt-unicode-256color"||$.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var SA="\x1B",J$=`${SA}[`;var S0={to($,w){if(!w)return`${J$}${$+1}G`;return`${J$}${w+1};${$+1}H`},move($,w){let A="";if($<0)A+=`${J$}${-$}D`;else if($>0)A+=`${J$}${$}C`;if(w<0)A+=`${J$}${-w}A`;else if(w>0)A+=`${J$}${w}B`;return A},up:($=1)=>`${J$}${$}A`,down:($=1)=>`${J$}${$}B`,forward:($=1)=>`${J$}${$}C`,backward:($=1)=>`${J$}${$}D`,nextLine:($=1)=>`${J$}E`.repeat($),prevLine:($=1)=>`${J$}F`.repeat($),left:`${J$}G`,hide:`${J$}?25l`,show:`${J$}?25h`,save:`${SA}7`,restore:`${SA}8`};var EX={screen:`${J$}2J`,up:($=1)=>`${J$}1J`.repeat($),down:($=1)=>`${J$}J`.repeat($),line:`${J$}2K`,lineEnd:`${J$}K`,lineStart:`${J$}1K`,lines($){let w="";for(let A=0;A<$;A++)w+=this.line+(A<$-1?S0.up():"");if($)w+=S0.left;return w}},iR={screen:`${SA}c`};function wz($,w){let A=[];for(let Y=0;Y<=w.length;Y++)A[Y]=[Y];for(let Y=0;Y<=$.length;Y++)A[0][Y]=Y;for(let Y=1;Y<=w.length;Y++)for(let f=1;f<=$.length;f++)if(w.charAt(Y-1)===$.charAt(f-1))A[Y][f]=A[Y-1][f-1];else A[Y][f]=Math.min(A[Y-1][f-1]+1,A[Y][f-1]+1,A[Y-1][f]+1);return A[w.length][$.length]}function wW($,w,A=2,Y=3){return w.map((f)=>({cmd:f,distance:wz($,f)})).filter(({distance:f})=>f<=A).sort((f,X)=>f.distance-X.distance).slice(0,Y).map(({cmd:f})=>f)}class AW{rawName;description;name;names;isBoolean;required;config;negated;constructor($,w,A){if(this.rawName=$,this.description=w,this.config=Object.assign({},A),$=$.replace(/\.\*/g,""),this.negated=!1,this.names=jX($).split(",").map((Y)=>{let f=Y.trim().replace(/^-{1,2}/,"");if(f.startsWith("no-"))this.negated=!0,f=f.replace(/^no-/,"");return $W(f)}).sort((Y,f)=>Y.length>f.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 cR=TX.argv,Az=`${TX.platform}-${TX.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,pJ=MA.argv,Yz=`${MA.platform}-${MA.arch} node-${MA.version}`;class FX{rawName;description;config;cli;options;aliasNames;name;namespace;args;commandAction;usageText;versionNumber;examples;helpCallback;globalCommand;beforeHooks;afterHooks;middleware;constructor($,w,A,Y){this.rawName=$,this.description=w,this.config=A,this.cli=Y,this.options=[],this.aliasNames=[],this.name=jX($);let f=jX($),X=f.indexOf(":");if(X>0)this.namespace=f.substring(0,X),this.name=f.substring(X+1);if(this.args=pF($),this.examples=[],this.beforeHooks=[],this.afterHooks=[],this.middleware=[],!A)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,A){let Y=new AW($,w,A);return this.options.push(Y),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 zX}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:A,options:Y,helpCallback:f}=this.cli.globalCommand,X=[{body:`${$}${A?`/${A}`:""}`}];if(X.push({title:"Usage",body:` $ ${$} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&w.length>0){let J=tJ(w.map((F)=>F.rawName)),B=new Map,E=[];for(let F of w)if(F.namespace){if(!B.has(F.namespace))B.set(F.namespace,[]);B.get(F.namespace).push(F)}else E.push(F);let j="";if(E.length>0)j+=E.map((F)=>{return` ${BX(F.rawName,J.length)} ${F.description}`}).join(`
211
+ `);let T=Array.from(B.keys()).sort();for(let F of T){let H=B.get(F);if(j.length>0)j+=`
208
212
 
209
- `;F+=` ${z}:
210
- `,F+=H.map((T)=>{return` ${gY(T.rawName,W.length-2)} ${T.description}`}).join(`
211
- `)}U.push({title:"Commands",body:F}),U.push({title:"For more info, run any command with the `--help` flag",body:w.map((z)=>` $ ${$}${z.displayName===""?"":` ${z.displayName}`} --help`).join(`
212
- `)})}let B=this.isGlobalCommand?J:[...this.options,...J||[]];if(!this.isGlobalCommand&&!this.isDefaultCommand)B=B.filter((W)=>W.name!=="version");if(B.length>0){let W=KW(B.map((E)=>E.rawName));U.push({title:"Options",body:B.map((E)=>{return` ${gY(E.rawName,W.length)} ${E.description} ${E.config.default===void 0?"":`(default: ${E.config.default})`}`}).join(`
213
- `)})}if(this.examples.length>0)U.push({title:"Examples",body:this.examples.map((W)=>{if(typeof W==="function")return W($);return W}).join(`
214
- `)});if(Y)U=Y(U)||U;console.log(U.map((W)=>{return W.title?`${W.title}:
215
- ${W.body}`:W.body}).join(`
213
+ `;j+=` ${F}:
214
+ `,j+=H.map((G)=>{return` ${BX(G.rawName,J.length-2)} ${G.description}`}).join(`
215
+ `)}X.push({title:"Commands",body:j}),X.push({title:"For more info, run any command with the `--help` flag",body:w.map((F)=>` $ ${$}${F.displayName===""?"":` ${F.displayName}`} --help`).join(`
216
+ `)})}let W=this.isGlobalCommand?Y:[...this.options,...Y||[]];if(!this.isGlobalCommand&&!this.isDefaultCommand)W=W.filter((J)=>J.name!=="version");if(W.length>0){let J=tJ(W.map((B)=>B.rawName));X.push({title:"Options",body:W.map((B)=>{return` ${BX(B.rawName,J.length)} ${B.description} ${B.config.default===void 0?"":`(default: ${B.config.default})`}`}).join(`
217
+ `)})}if(this.examples.length>0)X.push({title:"Examples",body:this.examples.map((J)=>{if(typeof J==="function")return J($);return J}).join(`
218
+ `)});if(f)X=f(X)||X;console.log(X.map((J)=>{return J.title?`${J.title}:
219
+ ${J.body}`:J.body}).join(`
216
220
 
217
- `))}outputVersion(){let{name:$}=this.cli,{versionNumber:w}=this.cli.globalCommand;if(w)console.log(`${$}/${w} ${typeof Bun<"u"?jz:Fz}`)}checkRequiredArgs(){let $=this.args.filter((w)=>w.required).length;if(this.cli.args.length<$){let A=this.args.filter((Y)=>Y.required).slice(this.cli.args.length),J=A.map((Y)=>`<${Y.value}>`).join(" ");throw new jA(`Missing required argument${A.length>1?"s":""}: ${J}
221
+ `))}outputVersion(){let{name:$}=this.cli,{versionNumber:w}=this.cli.globalCommand;if(w)console.log(`${$}/${w} ${typeof Bun<"u"?Az:Yz}`)}checkRequiredArgs(){let $=this.args.filter((w)=>w.required).length;if(this.cli.args.length<$){let A=this.args.filter((f)=>f.required).slice(this.cli.args.length),Y=A.map((f)=>`<${f.value}>`).join(" ");throw new yA(`Missing required argument${A.length>1?"s":""}: ${Y}
218
222
 
219
- Run \`${this.cli.name} ${this.rawName} --help\` for usage information.`)}}checkUnknownOptions(){let{options:$,globalCommand:w}=this.cli;if(!this.config.allowUnknownOptions){for(let A of Object.keys($))if(A!=="--"&&!this.hasOption(A)&&!w.hasOption(A)){let Y=[...w.options,...this.options].flatMap((W)=>W.names),U=A.length>1?`--${A}`:`-${A}`,Z=yW(A,Y),B=`Unknown option \`${U}\``;if(Z.length>0)B+=`
223
+ Run \`${this.cli.name} ${this.rawName} --help\` for usage information.`)}}checkUnknownOptions(){let{options:$,globalCommand:w}=this.cli;if(!this.config.allowUnknownOptions){for(let A of Object.keys($))if(A!=="--"&&!this.hasOption(A)&&!w.hasOption(A)){let f=[...w.options,...this.options].flatMap((J)=>J.names),X=A.length>1?`--${A}`:`-${A}`,U=wW(A,f),W=`Unknown option \`${X}\``;if(U.length>0)W+=`
220
224
 
221
- Did you mean one of these?`,Z.forEach((W)=>{let E=W.length>1?`--${W}`:`-${W}`;B+=`
222
- • ${E}`});throw B+=`
225
+ Did you mean one of these?`,U.forEach((J)=>{let B=J.length>1?`--${J}`:`-${J}`;W+=`
226
+ • ${B}`});throw W+=`
223
227
 
224
- Run \`${this.cli.name} ${this.rawName} --help\` to see available options.`,new jA(B)}}}checkOptionValue(){let{options:$,globalCommand:w}=this.cli,A=[...w.options,...this.options];for(let J of A){let Y=$[J.name.split(".")[0]];if(J.required){let U=A.some((Z)=>Z.negated&&Z.names.includes(J.name));if(Y===!0||Y===!1&&!U)throw new jA(`Option \`${J.rawName}\` requires a value.
228
+ Run \`${this.cli.name} ${this.rawName} --help\` to see available options.`,new yA(W)}}}checkOptionValue(){let{options:$,globalCommand:w}=this.cli,A=[...w.options,...this.options];for(let Y of A){let f=$[Y.name.split(".")[0]];if(Y.required){let X=A.some((U)=>U.negated&&U.names.includes(Y.name));if(f===!0||f===!1&&!X)throw new yA(`Option \`${Y.rawName}\` requires a value.
225
229
 
226
- Example: ${this.cli.name} ${this.rawName} ${J.rawName} <value>`)}}}}class aY extends rY{constructor($){super("@@global@@","",{},$)}}var zz=rY,r0={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 I1={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function fz(){return!0}function Gz(){let $={};$.supportsColor=fz();function w(J,Y=[]){let U=J===""?[]:[...Y,J],Z=function(W){if(!$.supportsColor)return W;let E="",j="";for(let F of U)if(F in I1&&I1[F]in r0){let f=I1[F];E+=r0[f][0],j=r0[f][1]+j}else if(F in r0)E+=r0[F][0],j=r0[F][1]+j;return E+W+j},B=[...Object.keys(r0),...Object.keys(I1)];for(let W of B)if(!(W in Z))Object.defineProperty(Z,W,{get(){return w(W,U)}});return Z}let A=[...Object.keys(r0),...Object.keys(I1)];for(let J of A)if(!(J in $))Object.defineProperty($,J,{get(){return w(J)}});return $}var C1=Gz();class sY extends $z{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 aY(this),this.globalCommand.usage("<command> [options]")}handleSignals($){if(this.signalHandlersSet)return this;let w=async(A)=>{if(console.log(`
230
+ Example: ${this.cli.name} ${this.rawName} ${Y.rawName} <value>`)}}}}class zX extends FX{constructor($){super("@@global@@","",{},$)}}var fz=FX,e0={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 _1={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function Xz(){return!0}function Uz(){let $={};$.supportsColor=Xz();function w(Y,f=[]){let X=Y===""?[]:[...f,Y],U=function(J){if(!$.supportsColor)return J;let B="",E="";for(let j of X)if(j in _1&&_1[j]in e0){let T=_1[j];B+=e0[T][0],E=e0[T][1]+E}else if(j in e0)B+=e0[j][0],E=e0[j][1]+E;return B+J+E},W=[...Object.keys(e0),...Object.keys(_1)];for(let J of W)if(!(J in U))Object.defineProperty(U,J,{get(){return w(J,X)}});return U}let A=[...Object.keys(e0),...Object.keys(_1)];for(let Y of A)if(!(Y in $))Object.defineProperty($,Y,{get(){return w(Y)}});return $}var D1=Uz();class GX extends gF{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 zX(this),this.globalCommand.usage("<command> [options]")}handleSignals($){if(this.signalHandlersSet)return this;let w=async(A)=>{if(console.log(`
227
231
 
228
- Received ${A}, cleaning up...`),$)try{await $()}catch(J){console.error("Error during cleanup:",J)}t0.exit(0)};return t0.on("SIGINT",()=>w("SIGINT")),t0.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,A){if(!A)A={};let J=new zz($,w||"",A,this);return J.globalCommand=this.globalCommand,this.commands.push(J),J}option($,w,A){return this.globalCommand.option($,w,A),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},A,J){if(this.args=$,this.options=w,A)this.matchedCommand=A;if(J)this.matchedCommandName=J;return this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}showCommandNotFound($){if(console.log(C1.red(`
232
+ Received ${A}, cleaning up...`),$)try{await $()}catch(Y){console.error("Error during cleanup:",Y)}o0.exit(0)};return o0.on("SIGINT",()=>w("SIGINT")),o0.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,A){if(!A)A={};let Y=new fz($,w||"",A,this);return Y.globalCommand=this.globalCommand,this.commands.push(Y),Y}option($,w,A){return this.globalCommand.option($,w,A),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},A,Y){if(this.args=$,this.options=w,A)this.matchedCommand=A;if(Y)this.matchedCommandName=Y;return this}unsetMatchedCommand(){this.matchedCommand=void 0,this.matchedCommandName=void 0}showCommandNotFound($){if(console.log(D1.red(`
229
233
  ✗ Command "${$}" not found.
230
- `)),this.enableDidYouMean){let w=[];for(let J of this.commands){if(J.displayName)w.push(J.displayName);if(J.aliasNames)w.push(...J.aliasNames)}let A=yW($,w);if(A.length>0)console.log(C1.yellow("Did you mean one of these?")),A.forEach((J)=>console.log(` ${C1.dim("•")} ${this.name} ${J}`)),console.log("")}console.log(C1.dim("Run"),`${this.name} --help`,C1.dim("to see all available commands")),t0.exit(1)}async parse($=hW,w={}){let{run:A=!0,exitOnError:J=!1}=w;if(J)try{return await this.parse($,{run:A})}catch(W){throw this.handleUsageError(W),W}if(this.rawArgs=$,!this.name)this.name=$[1]?Wz($[1]):"cli";let Y=!0,U=$.slice(2),Z=U[0];if(Z&&!Z.startsWith("-")){for(let W of this.commands)if(W.isMatched(Z)){let E=this.mri(U,W);Y=!1;let j={...E,args:E.args.slice(1)};this.setParsedInfo(j,W,Z),this.emit(`command:${Z}`,W);break}}if(Y){for(let W of this.commands)if(W.name===""){Y=!1;let E=this.mri(U,W);this.setParsedInfo(E,W),this.emit("command:!",W);break}}if(Y){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(),A=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),A=!1,this.unsetMatchedCommand();let B={args:this.args,options:this.options};if(A)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 A=[...this.globalCommand.options,...w?w.options:[]],J=Jz(A),Y=[],U=$.indexOf("--");if(U>-1)Y=$.slice(U+1),$=$.slice(0,U);let Z=wz($,J),B={_:Z._};for(let f of Object.keys(Z))if(f!=="_")B[LW(f)]=Z[f];let W=B._,E={"--":Y},j=w&&w.config.ignoreOptionDefaultValue?w.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,F=Object.create(null);for(let f of A){if(!j&&f.config.default!==void 0)for(let z of f.names)E[z]=f.config.default;if(Array.isArray(f.config.type)){if(F[f.name]===void 0)F[f.name]={shouldTransform:!0,transformFunction:f.config.type[0]}}}for(let f of Object.keys(B))if(f!=="_"){let z=f.split(".");Uz(E,z,B[f]),Zz(E,F)}return{args:W,options:E}}async run($=hW){return this.parse($,{run:!0,exitOnError:!0})}handleUsageError($){if(!(!!$&&typeof $==="object"&&$.name==="ClappError"&&$.isUsageError!==!1))return;let J=$,Y=J.message??"command-line error",U=this.name?`${this.name}: `:"",Z=/--help/.test(Y)?"":`
231
- Run \`${this.name??"cli"} --help\` for usage.`;t0.stderr.write(`${U}${Y}${Z}
232
- `),t0.exit(J.exitCode??2)}async runMatchedCommand(){let{args:$,options:w,matchedCommand:A}=this;if(!A||!A.commandAction)return;A.checkUnknownOptions(),A.checkOptionValue(),A.checkRequiredArgs();let J=[];A.args.forEach((B,W)=>{if(B.variadic)J.push($.slice(W));else J.push($[W])}),J.push(w);let Y={command:A,args:J,options:w};for(let B of A.beforeHooks)await B(Y);let U,Z=async()=>{let B=A.commandAction.apply(this,J);if(B instanceof Promise)U=await B;else U=B;return U};if(A.middleware.length>0){let B=0,W=async()=>{if(B<A.middleware.length){let E=A.middleware[B++];await E({...Y,next:W})}else await Z()};await W()}else await Z();for(let B of A.afterHooks)await B(Y);return U}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return t0.removeAllListeners("SIGINT"),t0.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 SW{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,A=5000){if(!this.enabled)return;this.cache.set($,{value:w,timestamp:Date.now(),ttl:A})}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,A]of this.cache.entries())if($-A.timestamp>A.ttl)this.cache.delete(w)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var _q=new SW;function Tz(){if("FORCE_COLOR"in L1.env)return L1.env.FORCE_COLOR!=="0";if("NO_COLOR"in L1.env||L1.env.TERM==="dumb")return!1;if(L1.platform==="win32")return!0;return RW.isatty(1)&&RW.isatty(2)}var OW=Tz();function o($,w){if(!OW)return(A)=>A;return(A)=>$+A+w}var Hz=o("\x1B[0m","\x1B[0m"),qz=o("\x1B[31m","\x1B[39m"),Kz=o("\x1B[32m","\x1B[39m"),hz=o("\x1B[33m","\x1B[39m"),Rz=o("\x1B[34m","\x1B[39m"),Nz=o("\x1B[35m","\x1B[39m"),Mz=o("\x1B[36m","\x1B[39m"),Iz=o("\x1B[37m","\x1B[39m"),Cz=o("\x1B[90m","\x1B[39m"),Lz=o("\x1B[1m","\x1B[22m"),yz=o("\x1B[3m","\x1B[23m"),Vz=o("\x1B[4m","\x1B[24m"),Sz=o("\x1B[2m","\x1B[22m"),Oz=o("\x1B[7m","\x1B[27m"),Xz=o("\x1B[8m","\x1B[28m"),_z=o("\x1B[9m","\x1B[29m"),Dz=o("\x1B[41m","\x1B[49m"),Qz=o("\x1B[42m","\x1B[49m"),kz=o("\x1B[43m","\x1B[49m"),xz=o("\x1B[44m","\x1B[49m"),Pz=o("\x1B[45m","\x1B[49m"),bz=o("\x1B[46m","\x1B[49m"),iz=o("\x1B[47m","\x1B[49m"),uz=OW,cz={reset:Hz,red:qz,green:Kz,yellow:hz,blue:Rz,magenta:Nz,cyan:Mz,white:Iz,gray:Cz,bold:Lz,italic:yz,underline:Vz,dim:Sz,inverse:Oz,hidden:Xz,strikethrough:_z,bgRed:Dz,bgGreen:Qz,bgYellow:kz,bgBlue:xz,bgMagenta:Pz,bgCyan:bz,bgWhite:iz,isColorSupported:uz},zA=cz,mz=["up","down","left","right","space","enter","cancel"],fA={actions:new Set(mz),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};function XW($,w){if(typeof $==="string")return fA.aliases.get($)===w;for(let A of $){if(A===void 0)continue;if(XW(A,w))return!0}return!1}function nz($,w){if($===w)return[];let A=$.split(`
233
- `),J=w.split(`
234
- `),Y=[];for(let U=0;U<Math.max(A.length,J.length);U++)if(A[U]!==J[U])Y.push(U);return Y}var bq=vz.platform.startsWith("win"),NW=Symbol("clapp:cancel");function EA($,w){let A=$;if(A.isTTY)A.setRawMode(w)}function pz($){return $.replace(/\x1b\[[0-9;]*m/g,"")}function tz($){return pz($).length}function IW($,w,A){if(!w||w<1)return $;let J=A?.hard??!1,Y=A?.trim??!0,U=$.split(`
235
- `),Z=[];for(let B of U){if(tz(B)<=w){Z.push(Y?B.trimEnd():B);continue}if(J){let W="",E=0,j=0;while(j<B.length){let F=B.slice(j).match(/^\x1b\[[0-9;]*m/);if(F){W+=F[0],j+=F[0].length;continue}if(E>=w)Z.push(Y?W.trimEnd():W),W="",E=0;W+=B[j],E++,j++}if(W)Z.push(Y?W.trimEnd():W)}else Z.push(Y?B.trimEnd():B)}return Z.join(`
236
- `)}class oY{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:A=dz,output:J=gz,render:Y,signal:U,...Z}=$;this.opts=Z,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=Y.bind(this),this._track=w,this._abortSignal=U,this.input=A,this.output=J}unsubscribe(){this._subscribers.clear()}setSubscriber($,w){let A=this._subscribers.get($)??[];A.push(w),this._subscribers.set($,A)}on($,w){return this.setSubscriber($,{cb:w}),this}once($,w){return this.setSubscriber($,{cb:w,once:!0}),this}emit($,...w){let A=this._subscribers.get($)??[],J=[];for(let Y of A)if(Y.cb(...w),Y.once)J.push(()=>A.splice(A.indexOf(Y),1));for(let Y of J)Y();return this}prompt(){return new Promise(($)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),$(NW);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}if(this.rl=lz.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),EA(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(I0.show),this.output.off("resize",this.render),EA(this.input,!1),$(this.value)}),this.once("cancel",()=>{this.output.write(I0.show),this.output.off("resize",this.render),EA(this.input,!1),$(NW)})})}_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 A=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($&&!A&&$.length===1&&$>=" ")this._manualLine+=$;else if(w.name==="backspace"&&this._manualLine.length>0)this._manualLine=this._manualLine.slice(0,-1);let J=this._manualLine.length>=(this.rl?.line?.length||0)?this._manualLine:this.rl?.line;this._setUserInput(J)}if(this.state==="error")this.state="active",this.error="";if(w?.name){if(!this._track&&fA.aliases.has(w.name))this.emit("cursor",fA.aliases.get(w.name));if(fA.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 A=this.opts.validate(this.value);if(A)this.error=A instanceof Error?A.message:A,this.state="error"}if(this.state!=="error")this.state="submit"}if(XW([$,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(`
237
- `),EA(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 $=IW(this._prevFrame,MW.stdout.columns,{hard:!0,trim:!1}).split(`
238
- `).length-1;this.output.write(I0.move(-999,$*-1))}render(){let $=IW(this._render(this)??"",MW.stdout.columns,{hard:!0,trim:!1});if($===this._prevFrame)return;if(this.state==="initial")this.output.write(I0.hide);else{let w=nz(this._prevFrame,$);if(this.restoreCursor(),w&&w?.length===1){let A=w[0];this.output.write(I0.move(0,A)),this.output.write(lY.lines(1));let J=$.split(`
239
- `);this.output.write(J[A]),this._prevFrame=$,this.output.write(I0.move(0,J.length-A-1));return}if(w&&w?.length>1){let A=w[0];this.output.write(I0.move(0,A)),this.output.write(lY.down());let Y=$.split(`
240
- `).slice(A);this.output.write(Y.join(`
241
- `)),this._prevFrame=$;return}this.output.write(lY.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function rz($,w){if($===void 0)return 0;if(w.length===0)return 0;let J=w.findIndex((Y)=>Y.value===$);return J!==-1?J:0}function az($,w){return(w.label??String(w.value)).toLowerCase().includes($.toLowerCase())}function sz($,w){if(!w)return;if($)return w;return w[0]}class oz extends oY{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#A="";#J;#w;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return zA.inverse(zA.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let $=this.userInput.slice(0,this._cursor),[w,...A]=this.userInput.slice(this._cursor);return`${$}${zA.inverse(w)}${A.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.#J=$.filter??az;let A;if($.initialValue&&Array.isArray($.initialValue))if(this.multiple)A=$.initialValue;else A=$.initialValue.slice(0,1);else if(!this.multiple&&this.options.length>0)A=[this.options[0].value];if(A)for(let J of A){let Y=w.findIndex((U)=>U.value===J);if(Y!==-1)this.toggleSelected(J),this.#$=Y}this.focusedValue=this.options[this.#$]?.value,this.on("key",(J,Y)=>this.#Y(J,Y)),this.on("userInput",(J)=>this.#U(J))}_isActionKey($,w){return $==="\t"||this.multiple&&this.isNavigating&&w.name==="space"&&$!==void 0&&$!==""}#Y($,w){let A=w.name==="up",J=w.name==="down",Y=w.name==="return";if(A||J){if(this.#$=Math.max(0,Math.min(this.#$+(A?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)this.selectedValues=[this.focusedValue];this.isNavigating=!0}else if(Y)this.value=sz(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=[$]}#U($){if($!==this.#A){this.#A=$;let w=this.options;if($)this.filteredOptions=w.filter((A)=>this.#J($,A));else this.filteredOptions=[...w];if(this.#$=rz(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 ez extends oY{options;cursor=0;#$;getGroupItems($){return this.options.filter((w)=>w.group===$)}isGroupSelected($){let w=this.getGroupItems($),A=this.value;if(A===void 0)return!1;return w.every((J)=>A.includes(J.value))}toggleValue(){let $=this.options[this.cursor];if(this.value===void 0)this.value=[];if($.group===!0){let w=String($.value),A=this.getGroupItems(w);if(this.isGroupSelected(w))this.value=this.value.filter((J)=>A.findIndex((Y)=>Y.value===J)===-1);else this.value=[...this.value,...A.map((J)=>J.value)];this.value=Array.from(new Set(this.value))}else{let w=this.value.includes($.value);this.value=w?this.value.filter((A)=>A!==$.value):[...this.value,$.value]}}constructor($){super($,!1);let{options:w}=$;this.#$=$.selectableGroups!==!1,this.options=Object.entries(w).flatMap(([A,J])=>[{value:A,group:!0,label:A},...J.map((Y)=>({...Y,group:A}))]),this.value=[...$.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:A})=>A===$.cursorAt),this.#$?0:1),this.on("cursor",(A)=>{switch(A){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let J=this.options[this.cursor]?.group===!0;if(!this.#$&&J)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 J=this.options[this.cursor]?.group===!0;if(!this.#$&&J)this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}case"space":this.toggleValue();break}})}}var $f=Bz();var t=($,w)=>$f?$:w,cq=t("◆","*"),vq=t("■","x"),mq=t("▲","x"),nq=t("◇","o"),dq=t("┌","T"),wf=t("│","|"),gq=t("└","—"),lq=t("●",">"),pq=t("○"," "),tq=t("◻","[•]"),rq=t("◼","[+]"),aq=t("◻","[ ]"),sq=t("▪","•"),oq=t("─","-"),eq=t("╮","+"),$K=t("├","+"),wK=t("╯","+"),AK=t("●","•"),JK=t("◆","*"),YK=t("▲","!"),UK=t("■","x");var ZK={light:t("─","-"),heavy:t("━","="),block:t("█","#")};function Af(){return`${zA.gray(wf)} `}var WK=Af();cU();import{homedir as vU}from"node:os";import{join as mU,resolve as ah}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",f2={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:mU(vU(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:mU(vU(),".stacks","ssl","stacks.localhost.crt"),keyPath:mU(vU(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0};var vw=f2;o0();RY();NY();cZ();t1();$A();h1();U$();import{spawn as C9}from"node:child_process";import*as K0 from"node:fs/promises";import{homedir as AW}from"node:os";import*as q0 from"node:path";import*as x from"node:process";var g6=5000;function Z0(){return q0.join(AW(),".stacks","rpx")}function jw($=Z0()){return q0.join($,"daemon.pid")}async function Ew($=Z0()){try{let w=await K0.readFile(jw($),"utf8"),A=Number.parseInt(w.trim(),10);if(!Number.isFinite(A)||A<=0)return null;return A}catch(w){if(w.code==="ENOENT")return null;throw w}}async function DY($=Z0()){let w=await Ew($);return w!==null&&m$(w)}async function l6($=Z0()){await K0.mkdir($,{recursive:!0});let w=jw($);while(!0){try{let J=await K0.open(w,"wx");try{await J.write(`${x.pid}
242
- `)}finally{await J.close()}return w}catch(J){if(J.code!=="EEXIST")throw J}let A=await Ew($);if(A!==null&&m$(A))throw Error(`rpx daemon already running (pid=${A})`);await K0.unlink(w).catch(()=>{})}}async function JA($=Z0()){await K0.unlink(jw($)).catch(()=>{})}function p6($){let w=$.cleanUrls??!1;if($.static)return{static:p1($.static,w),cleanUrls:w};let A=$.from??"localhost:1";return{sourceHost:new URL(A.startsWith("http")?A:`http://${A}`).host,cleanUrls:w,changeOrigin:$.changeOrigin??!1,pathRewrites:$.pathRewrites}}function t6($){return $.find((A)=>!/^api\./.test(A)&&!/^docs\./.test(A)&&!/^dashboard\./.test(A))??$[0]??"rpx.localhost"}async function r6($,w){let A=await hw(w,$.verbose),J=[...new Set(A.map((j)=>j.to))],Y=t6(J),U=[...new Set([Y,...J,"rpx.localhost"])],Z=q0.join(AW(),".stacks","ssl"),B=q0.join(Z,"rpx.localhost.crt"),W={https:typeof $.https==="object"?{...$.https,certPath:B,keyPath:q0.join(Z,"rpx.localhost.key"),commonName:Y}:{certPath:B,keyPath:q0.join(Z,"rpx.localhost.key"),caCertPath:q0.join(Z,"rpx.localhost.ca.crt"),commonName:Y},verbose:$.verbose,regenerateUntrustedCerts:!0,...U.length>1?{proxies:U.map((j)=>({from:"localhost:1",to:j}))}:{to:Y,from:"localhost:1"}},E=await g0(W);if(!E)G("daemon","no usable cert on disk, generating one",$.verbose),await K1(W),E=await g0(W);if(!E)throw Error("failed to bootstrap TLS for rpx daemon");return E}async function a6($,w,A,J){let Y=x.env.SUDO_PASSWORD,U=x.env.HOME??AW(),Z=[x.execPath,...x.argv.slice(1)],B=[`HOME=${U}`,`PATH=${x.env.PATH??""}`];if(J)B.push("RPX_VERBOSE=1");let W=Y?["-S","-p","","env",...B,...Z]:["-n","env",...B,...Z];G("daemon",`elevating daemon via sudo for privileged ports ${w}/${A}`,J);let E=C9("sudo",W,{detached:!0,stdio:["pipe","ignore","ignore"]}),j=null,F=null;if(E.once("error",(H)=>{j=H}),E.once("exit",(H)=>{F=H??0}),Y&&E.stdin)E.stdin.write(`${Y}
243
- `),E.stdin.end();E.unref();let f=jw($),z=Date.now()+15000;while(Date.now()<z){if(j)throw j;let H=await Ew($);if(H!==null&&m$(H)){if(J)R.success(`rpx daemon elevated to root (pid=${H}, https on :${w})`);return{httpsPort:w,httpPort:A,pidPath:f,done:Promise.resolve(),stop:async()=>{try{x.kill(H,"SIGTERM")}catch{}}}}if(F!==null&&F!==0)throw Error(`rpx daemon could not elevate to bind :${w} (sudo exited ${F}). Set SUDO_PASSWORD in .env or run \`sudo -v\` first.`);await new Promise((T)=>setTimeout(T,50))}throw Error(`rpx daemon failed to elevate within 15000ms (rpxDir=${$})`)}async function L9($={}){let w=$.verbose??!1,A=$.rpxDir??Z0(),J=$.registryDir??q0.join(A,"registry.d"),Y=$.httpsPort??443,U=$.httpPort??80,Z=$.hostname??"0.0.0.0",B=$.gcIntervalMs??g6,W=Y>0&&Y<1024||U>0&&U<1024,E=typeof x.getuid==="function"&&x.getuid()===0;if(x.platform!=="win32"&&W&&!E)return a6(A,Y,U,w);let j=await l6(A),F=new Map,f=(y)=>s1(F,y);function z(y){let X$=new Map;for(let M0 of y)X$.set(M0.to,p6(M0));F=X$,G("daemon",`routing table now covers ${X$.size} host(s): ${Array.from(X$.keys()).join(", ")||"<empty>"}`,w)}await LY(J,w).catch((y)=>{G("daemon",`initial gc failed: ${y}`,w)});let H=await hw(J,w);z(H),await Ww({rpxDir:A,verbose:w}).catch((y)=>{G("daemon",`DNS reconcile on start failed: ${y}`,w)}),await AA(H,{rpxDir:A,verbose:w,ownerPid:x.pid}).catch((y)=>{G("daemon",`DNS setup on start failed: ${y}`,w)});let T=[];if($.productionCerts){if(T=await uZ($.productionCerts,w),w&&T.length>0)R.info(`SNI: serving ${T.length} real cert(s): ${T.map((y)=>y.serverName).join(", ")}`)}let q=r1(f,w),K=a1(w),h;if(T.length>0)h=T.map((y)=>({serverName:y.serverName,cert:y.cert,key:y.key}));else{let y=await r6($,J);h={key:y.key,cert:y.cert,ca:y.ca,requestCert:!1,rejectUnauthorized:!1}}let I=Bun.serve({port:Y,hostname:Z,tls:h,fetch(y,X$){return q(y,X$)},websocket:K,error(y){return G("daemon",`https server error: ${y}`,w),new Response(`Server Error: ${y.message}`,{status:500})}}),N=null;if(U>0)N=Bun.serve({port:U,hostname:Z,fetch(y){let X$=new URL(y.url),M0=(y.headers.get("host")??X$.hostname).split(":")[0];return new Response(null,{status:301,headers:{Location:`https://${M0}${X$.pathname}${X$.search}`}})}});if(w)R.success(`rpx daemon listening on https://${Z}:${Y}${N?` (http→https on :${U})`:""}`),R.info(`pid file: ${j}`),R.info(`registry: ${J}`);let M=dZ((y)=>{z(y),AA(y,{rpxDir:A,verbose:w,ownerPid:x.pid}).catch((X$)=>{G("daemon",`DNS sync on registry change failed: ${X$}`,w)})},{dir:J,verbose:w}),V=setInterval(()=>{LY(J,w).then((y)=>{if(y>0)G("daemon",`gc reaped ${y} stale entries`,w)}).catch((y)=>{G("daemon",`periodic gc failed: ${y}`,w)})},B);if(typeof V.unref==="function")V.unref();let g$=!1,B0,N0=new Promise((y)=>{B0=y});async function Fw(){if(g$)return N0;if(g$=!0,clearInterval(V),M.close(),I.stop(!1),N?.stop(!1),await Nw({rpxDir:A,verbose:w}).catch((y)=>{G("daemon",`DNS teardown failed: ${y}`,w)}),await JA(A),w)R.info("rpx daemon stopped");return B0(),N0}let M1=(y)=>{G("daemon",`received ${y}, shutting down`,w),Fw().catch(()=>{})};return x.once("SIGINT",M1),x.once("SIGTERM",M1),{stop:Fw,done:N0,httpsPort:typeof I.port==="number"?I.port:Y,httpPort:N&&typeof N.port==="number"?N.port:U,pidPath:j}}function s6(){let $=x.execPath,w=q0.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&x.argv[1])return[$,x.argv[1],"daemon:start"];return[$,"daemon:start"]}async function y9($={}){let w=$.rpxDir??Z0(),A=$.verbose??!1;await Ww({rpxDir:w,verbose:A}).catch((j)=>{G("daemon",`DNS reconcile before ensureDaemonRunning: ${j}`,A)});let J=await Ew(w);if(J!==null&&m$(J))return G("daemon",`ensureDaemonRunning: already running pid=${J}`,A),{pid:J,spawned:!1};if(J!==null)G("daemon",`ensureDaemonRunning: clearing stale pid=${J}`,A),await JA(w);await K0.mkdir(w,{recursive:!0});let Y=$.spawnCommand??s6();if(Y.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");G("daemon",`spawning daemon: ${Y.join(" ")}`,A);let U=C9(Y[0],Y.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??x.cwd(),env:$.spawnEnv?{...x.env,...$.spawnEnv}:x.env});U.unref();let Z=null;U.once("error",(j)=>{Z=j});let B=$.startupTimeoutMs??5000,W=$.pollIntervalMs??50,E=Date.now()+B;while(Date.now()<E){if(Z)throw Z;let j=await Ew(w);if(j!==null&&m$(j))return G("daemon",`daemon registered with pid=${j}`,A),{pid:j,spawned:!0};await new Promise((F)=>setTimeout(F,W))}if(Z)throw Z;throw Error(`rpx daemon failed to start within ${B}ms (rpxDir=${w})`)}async function V9($={}){let w=$.rpxDir??Z0(),A=$.verbose??!1,J=$.timeoutMs??5000,Y=$.pollIntervalMs??50,U=$.forceAfterTimeout??!0,Z=await Ew(w);if(Z===null||!m$(Z)){if(Z!==null)await JA(w);return await Ww({rpxDir:w,verbose:A}).catch(()=>{}),{stopped:!1,pid:Z,forced:!1}}try{x.kill(Z,"SIGTERM")}catch(W){if(W.code==="ESRCH")return await JA(w),{stopped:!1,pid:Z,forced:!1};throw W}let B=Date.now()+J;while(Date.now()<B){if(!m$(Z))return G("daemon",`daemon pid=${Z} stopped cleanly`,A),{stopped:!0,pid:Z,forced:!1};await new Promise((W)=>setTimeout(W,Y))}if(!U)throw Error(`rpx daemon (pid=${Z}) did not exit within ${J}ms`);G("daemon",`daemon pid=${Z} did not exit, escalating to SIGKILL`,A);try{x.kill(Z,"SIGKILL")}catch(W){if(W.code!=="ESRCH")throw W}return await JA(w),await Nw({rpxDir:w,verbose:A}).catch((W)=>{G("daemon",`DNS teardown after SIGKILL: ${W}`,A)}),{stopped:!0,pid:Z,forced:!0}}async function S9($={}){let w=$.rpxDir??Z0();if(await DY(w))return;await Ww({rpxDir:w,verbose:$.verbose})}o0();U$();import{spawn as o6}from"node:child_process";import*as Mw from"node:process";class O9{processes=new Map;isShuttingDown=!1;async startProcess($,w,A){if(this.processes.has($)){G("start",`Process ${$} is already running`,A);return}let[J,...Y]=w.command.split(" "),U=w.cwd||Mw.cwd();G("start",`Starting process ${$}:`,A),G("start",` Command: ${J} ${Y.join(" ")}`,A),G("start",` Working directory: ${U}`,A),G("start",` Environment variables: ${Y0(w.env)}`,A);let Z=o6(J,Y,{cwd:U,env:{...Mw.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:U,process:Z,env:w.env}),new Promise((B,W)=>{if(Z.on("error",(E)=>{if(!this.isShuttingDown)G("start",`Process ${$} failed to start: ${E}`,A),this.processes.delete($),W(E),Mw.emit("SIGINT")}),Z.on("exit",(E)=>{if(!this.isShuttingDown&&E!==null&&E!==0)G("start",`Process ${$} exited with code ${E}`,A),this.processes.delete($),W(Error(`Process ${$} exited with code ${E}`)),Mw.emit("SIGINT")}),A)Z.stdout?.on("data",(E)=>{G("process",`[${$}] ${E.toString().trim()}`,!0)}),Z.stderr?.on("data",(E)=>{G("process",`[${$}] ERR: ${E.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&Z.killed)this.processes.delete($),W(Error(`Process ${$} was killed during startup`));else G("start",`Process ${$} started successfully`,A),B()},1000)})}async stopProcess($,w){let A=this.processes.get($);if(!A?.process){G("start",`No process found for ${$}`,w);return}return G("start",`Stopping process ${$}`,w),new Promise((J)=>{if(!A.process){J();return}A.process.once("exit",()=>{this.processes.delete($),G("start",`Process ${$} stopped`,w),J()});try{A.process.kill("SIGTERM"),setTimeout(()=>{if(A.process){G("start",`Force killing process ${$}`,w);try{A.process.kill("SIGKILL")}catch(Y){}}},3000)}catch(Y){G("start",`Error stopping process ${$}: ${Y}`,w),this.processes.delete($),J()}})}async stopAll($){if(this.isShuttingDown){G("start","Already shutting down, skipping duplicate stopAll call",$);return}this.isShuttingDown=!0,G("start","Stopping all processes",$);let w=Array.from(this.processes.keys()).map((A)=>this.stopProcess(A,$).catch((J)=>{R.error(`Failed to stop process ${A}:`,J)}));await Promise.allSettled(w),this.processes.clear(),this.isShuttingDown=!1}isRunning($){let w=this.processes.get($);return!!w?.process&&!w.process.killed}}var QY=new O9;U$();import*as c$ from"node:fs/promises";import{homedir as e6}from"node:os";import*as JW from"node:path";import*as YW from"node:process";var $q=/^[a-zA-Z0-9._-]+$/;function Iw(){return JW.join(e6(),".stacks","rpx","registry.d")}function N1($){return typeof $==="string"&&$.length>0&&$.length<=128&&$q.test($)}function UW($,w){if(!N1(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return JW.join($,`${w}.json`)}function X9($){if(!$||typeof $!=="object")return!1;let w=$,A=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0,J=typeof w.from==="string"&&w.from.length>0,Y=typeof w.static==="string"||!!w.static&&typeof w.static==="object"&&typeof w.static.dir==="string";return typeof w.id==="string"&&N1(w.id)&&(J||Y)&&typeof w.to==="string"&&w.to.length>0&&A&&typeof w.createdAt==="string"}async function wq($){await c$.mkdir($,{recursive:!0})}async function _9($,w=Iw(),A){if(!X9($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await wq(w);let J=UW(w,$.id),Y=`${J}.tmp.${YW.pid}.${Date.now()}`,U=JSON.stringify($,null,2);try{await c$.writeFile(Y,U,{encoding:"utf8",mode:420}),await c$.rename(Y,J),G("registry",`wrote entry ${$.id} → ${J}`,A)}catch(Z){throw await c$.unlink(Y).catch(()=>{}),Z}}async function D9($,w=Iw(),A){let J=UW(w,$);try{await c$.unlink(J),G("registry",`removed entry ${$}`,A)}catch(Y){if(Y.code!=="ENOENT")throw Y}}async function ZW($,w=Iw(),A){let J=UW(w,$);try{let Y=await c$.readFile(J,"utf8"),U=JSON.parse(Y);if(!X9(U))return G("registry",`entry ${$} failed validation, removing`,A),await c$.unlink(J).catch(()=>{}),null;return U}catch(Y){if(Y.code==="ENOENT")return null;if(Y instanceof SyntaxError)return G("registry",`entry ${$} has invalid JSON, removing`,A),await c$.unlink(J).catch(()=>{}),null;throw Y}}async function Q9($=Iw(),w){let A;try{A=await c$.readdir($)}catch(Y){if(Y.code==="ENOENT")return[];throw Y}let J=[];for(let Y of A){if(!Y.endsWith(".json"))continue;let U=Y.slice(0,-5);if(!N1(U))continue;let Z=await ZW(U,$,w);if(Z)J.push(Z)}return J}o0();import{execSync as Wq}from"node:child_process";import*as Vw from"node:http";import*as v9 from"node:http2";import*as m9 from"node:net";import*as e from"node:process";var kY=($,w)=>(A)=>`\x1B[${$}m${A}\x1B[${w}m`,h0={bold:kY(1,22),dim:kY(2,22),green:kY(32,39),cyan:kY(36,39)};d8();gZ();o0();$A();U$();import*as k9 from"node:fs";import*as x9 from"node:path";import*as R0 from"node:process";function Aq($){let w=$.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128);return w.length>0?w:"rpx"}async function WW($){if($.proxies.length===0)throw Error("runViaDaemon: no proxies provided");let w=$.verbose??!1,A=$.registryDir,J=new Set,Y=$.proxies.map((f)=>{let z=f.id??Aq(f.to);if(!e1(z))throw Error(`invalid registry id "${z}" derived from to="${f.to}"`);if(J.has(z))throw Error(`duplicate registry id "${z}" — set an explicit \`id\` on one of the proxies`);return J.add(z),{...f,id:z}}),U=new Date().toISOString();for(let f of Y)await B9({id:f.id,from:f.from,to:f.to,pid:$.persistent?void 0:R0.pid,cwd:R0.cwd(),createdAt:U,cleanUrls:f.cleanUrls,changeOrigin:f.changeOrigin,pathRewrites:f.pathRewrites,static:f.static},A,w);let Z=await F9({rpxDir:$.rpxDir,verbose:w,spawnCommand:$.spawnCommand,startupTimeoutMs:$.startupTimeoutMs,spawnEnv:$.spawnEnv});for(let f of Y){let z=f.static?`static ${typeof f.static==="string"?f.static:f.static.dir}`:f.from;R.success(`https://${f.to} → ${z}`)}if(R.info(`(via rpx daemon pid=${Z.pid}; \`rpx daemon:status\` to inspect)`),$.detached)return;let B=!1,W=A??Zw(),E=Y.map((f)=>f.id),j=async()=>{if(B)return;B=!0;for(let f of E)await nZ(f,A,w).catch((z)=>{G("runner",`removeEntry(${f}) failed: ${z}`,w)})},F=(f)=>{G("runner",`received ${f}, unregistering ${E.length} entries`,w),j().finally(()=>R0.exit(0))};R0.once("SIGINT",F),R0.once("SIGTERM",F),R0.once("exit",()=>{if(B)return;for(let f of E)try{k9.unlinkSync(x9.join(W,`${f}.json`))}catch{}}),await new Promise(()=>{})}U$();import{exec as Jq}from"node:child_process";import Cw from"node:fs";import b9 from"node:os";import EW from"node:path";import*as YA from"node:process";import{promisify as Yq}from"node:util";var xY=Yq(Jq);function P9($){let w=$.trim().toLowerCase();return w==="localhost"||w.endsWith(".localhost")||w.endsWith(".localhost.")}var W0=YA.platform==="win32"?EW.join(YA.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",BW=!1;async function PY($){if(YA.platform==="win32")throw Error("Administrator privileges required on Windows");let w=qw(),A=$.replace(/'/g,"'\\''");try{if(w){let{stdout:J}=await xY(`echo '${w}' | sudo -S sh -c '${A}' 2>/dev/null`);return BW=!0,J}if(BW)try{let{stdout:J}=await xY(`sudo -n sh -c '${A}'`);return J}catch(J){G("hosts","Cached sudo privileges expired, requesting again",!0)}try{let{stdout:J}=await xY(`sudo -n sh -c '${A}'`);return BW=!0,J}catch{throw Error("sudo required but no cached credentials (set SUDO_PASSWORD in .env or run sudo -v)")}}catch(J){throw Error(`Failed to execute sudo command: ${J.message}`)}}async function UA($,w){let A=$.filter((Y)=>!P9(Y)),J=$.filter((Y)=>P9(Y));if(J.length>0)G("hosts",`Skipping /etc/hosts for loopback dev names: ${J.join(", ")}`,w);if(A.length===0)return;G("hosts",`Adding hosts: ${A.join(", ")}`,w),G("hosts",`Using hosts file at: ${W0}`,w);try{let Y;try{Y=await Cw.promises.readFile(W0,"utf-8")}catch{G("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{Y=await PY(`cat "${W0}"`)}catch(W){throw console.log(" Could not read hosts file — skipping hosts setup"),G("hosts",`sudo read also failed: ${W}`,w),Error(`Cannot read hosts file: ${W}`)}}let U=A.filter((W)=>{let E=`127.0.0.1 ${W}`,j=`::1 ${W}`;return!Y.includes(E)&&!Y.includes(j)});if(U.length===0){G("hosts","All hosts already exist in hosts file",w);return}let Z=U.map((W)=>`
234
+ `)),this.enableDidYouMean){let w=[];for(let Y of this.commands){if(Y.displayName)w.push(Y.displayName);if(Y.aliasNames)w.push(...Y.aliasNames)}let A=wW($,w);if(A.length>0)console.log(D1.yellow("Did you mean one of these?")),A.forEach((Y)=>console.log(` ${D1.dim("•")} ${this.name} ${Y}`)),console.log("")}console.log(D1.dim("Run"),`${this.name} --help`,D1.dim("to see all available commands")),o0.exit(1)}async parse($=pJ,w={}){let{run:A=!0,exitOnError:Y=!1}=w;if(Y)try{return await this.parse($,{run:A})}catch(J){throw this.handleUsageError(J),J}if(this.rawArgs=$,!this.name)this.name=$[1]?eF($[1]):"cli";let f=!0,X=$.slice(2),U=X[0];if(U&&!U.startsWith("-")){for(let J of this.commands)if(J.isMatched(U)){let B=this.mri(X,J);f=!1;let E={...B,args:B.args.slice(1)};this.setParsedInfo(E,J,U),this.emit(`command:${U}`,J);break}}if(f){for(let J of this.commands)if(J.name===""){f=!1;let B=this.mri(X,J);this.setParsedInfo(B,J),this.emit("command:!",J);break}}if(f){let J=this.mri($.slice(2));this.setParsedInfo(J)}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(),A=!1,this.unsetMatchedCommand();if(this.options.version&&this.showVersionOnExit&&this.matchedCommandName==null)this.outputVersion(),A=!1,this.unsetMatchedCommand();let W={args:this.args,options:this.options};if(A)await this.runMatchedCommand();if(!this.matchedCommand&&this.args[0]){if(this.emit("command:*"),!(this.listenerCount("command:*")>0))this.showCommandNotFound(this.args[0])}return W}mri($,w){let A=[...this.globalCommand.options,...w?w.options:[]],Y=rF(A),f=[],X=$.indexOf("--");if(X>-1)f=$.slice(X+1),$=$.slice(0,X);let U=tF($,Y),W={_:U._};for(let T of Object.keys(U))if(T!=="_")W[$W(T)]=U[T];let J=W._,B={"--":f},E=w&&w.config.ignoreOptionDefaultValue?w.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,j=Object.create(null);for(let T of A){if(!E&&T.config.default!==void 0)for(let F of T.names)B[F]=T.config.default;if(Array.isArray(T.config.type)){if(j[T.name]===void 0)j[T.name]={shouldTransform:!0,transformFunction:T.config.type[0]}}}for(let T of Object.keys(W))if(T!=="_"){let F=T.split(".");sF(B,F,W[T]),oF(B,j)}return{args:J,options:B}}async run($=pJ){return this.parse($,{run:!0,exitOnError:!0})}handleUsageError($){if(!(!!$&&typeof $==="object"&&$.name==="ClappError"&&$.isUsageError!==!1))return;let Y=$,f=Y.message??"command-line error",X=this.name?`${this.name}: `:"",U=/--help/.test(f)?"":`
235
+ Run \`${this.name??"cli"} --help\` for usage.`;o0.stderr.write(`${X}${f}${U}
236
+ `),o0.exit(Y.exitCode??2)}async runMatchedCommand(){let{args:$,options:w,matchedCommand:A}=this;if(!A||!A.commandAction)return;A.checkUnknownOptions(),A.checkOptionValue(),A.checkRequiredArgs();let Y=[];A.args.forEach((W,J)=>{if(W.variadic)Y.push($.slice(J));else Y.push($[J])}),Y.push(w);let f={command:A,args:Y,options:w};for(let W of A.beforeHooks)await W(f);let X,U=async()=>{let W=A.commandAction.apply(this,Y);if(W instanceof Promise)X=await W;else X=W;return X};if(A.middleware.length>0){let W=0,J=async()=>{if(W<A.middleware.length){let B=A.middleware[W++];await B({...f,next:J})}else await U()};await J()}else await U();for(let W of A.afterHooks)await W(f);return X}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return o0.removeAllListeners("SIGINT"),o0.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 YW{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,A=5000){if(!this.enabled)return;this.cache.set($,{value:w,timestamp:Date.now(),ttl:A})}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,A]of this.cache.entries())if($-A.timestamp>A.ttl)this.cache.delete(w)}destroy(){this.stopCleanup(),this.clear(),this.resetStats()}}var nR=new YW;function Jz(){if("FORCE_COLOR"in k1.env)return k1.env.FORCE_COLOR!=="0";if("NO_COLOR"in k1.env||k1.env.TERM==="dumb")return!1;if(k1.platform==="win32")return!0;return rJ.isatty(1)&&rJ.isatty(2)}var fW=Jz();function $$($,w){if(!fW)return(A)=>A;return(A)=>$+A+w}var Wz=$$("\x1B[0m","\x1B[0m"),Bz=$$("\x1B[31m","\x1B[39m"),Ez=$$("\x1B[32m","\x1B[39m"),jz=$$("\x1B[33m","\x1B[39m"),Tz=$$("\x1B[34m","\x1B[39m"),Fz=$$("\x1B[35m","\x1B[39m"),zz=$$("\x1B[36m","\x1B[39m"),Gz=$$("\x1B[37m","\x1B[39m"),Hz=$$("\x1B[90m","\x1B[39m"),Kz=$$("\x1B[1m","\x1B[22m"),Rz=$$("\x1B[3m","\x1B[23m"),hz=$$("\x1B[4m","\x1B[24m"),qz=$$("\x1B[2m","\x1B[22m"),Nz=$$("\x1B[7m","\x1B[27m"),yz=$$("\x1B[8m","\x1B[28m"),Mz=$$("\x1B[9m","\x1B[29m"),Iz=$$("\x1B[41m","\x1B[49m"),Cz=$$("\x1B[42m","\x1B[49m"),Sz=$$("\x1B[43m","\x1B[49m"),Lz=$$("\x1B[44m","\x1B[49m"),Oz=$$("\x1B[45m","\x1B[49m"),Vz=$$("\x1B[46m","\x1B[49m"),Qz=$$("\x1B[47m","\x1B[49m"),_z=fW,Dz={reset:Wz,red:Bz,green:Ez,yellow:jz,blue:Tz,magenta:Fz,cyan:zz,white:Gz,gray:Hz,bold:Kz,italic:Rz,underline:hz,dim:qz,inverse:Nz,hidden:yz,strikethrough:Mz,bgRed:Iz,bgGreen:Cz,bgYellow:Sz,bgBlue:Lz,bgMagenta:Oz,bgCyan:Vz,bgWhite:Qz,isColorSupported:_z},IA=Dz,Zz=["up","down","left","right","space","enter","cancel"],CA={actions:new Set(Zz),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};function XW($,w){if(typeof $==="string")return CA.aliases.get($)===w;for(let A of $){if(A===void 0)continue;if(XW(A,w))return!0}return!1}function xz($,w){if($===w)return[];let A=$.split(`
237
+ `),Y=w.split(`
238
+ `),f=[];for(let X=0;X<Math.max(A.length,Y.length);X++)if(A[X]!==Y[X])f.push(X);return f}var tR=kz.platform.startsWith("win"),aJ=Symbol("clapp:cancel");function NA($,w){let A=$;if(A.isTTY)A.setRawMode(w)}function cz($){return $.replace(/\x1b\[[0-9;]*m/g,"")}function uz($){return cz($).length}function oJ($,w,A){if(!w||w<1)return $;let Y=A?.hard??!1,f=A?.trim??!0,X=$.split(`
239
+ `),U=[];for(let W of X){if(uz(W)<=w){U.push(f?W.trimEnd():W);continue}if(Y){let J="",B=0,E=0;while(E<W.length){let j=W.slice(E).match(/^\x1b\[[0-9;]*m/);if(j){J+=j[0],E+=j[0].length;continue}if(B>=w)U.push(f?J.trimEnd():J),J="",B=0;J+=W[E],B++,E++}if(J)U.push(f?J.trimEnd():J)}else U.push(f?W.trimEnd():W)}return U.join(`
240
+ `)}class HX{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:A=Pz,output:Y=iz,render:f,signal:X,...U}=$;this.opts=U,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=f.bind(this),this._track=w,this._abortSignal=X,this.input=A,this.output=Y}unsubscribe(){this._subscribers.clear()}setSubscriber($,w){let A=this._subscribers.get($)??[];A.push(w),this._subscribers.set($,A)}on($,w){return this.setSubscriber($,{cb:w}),this}once($,w){return this.setSubscriber($,{cb:w,once:!0}),this}emit($,...w){let A=this._subscribers.get($)??[],Y=[];for(let f of A)if(f.cb(...w),f.once)Y.push(()=>A.splice(A.indexOf(f),1));for(let f of Y)f();return this}prompt(){return new Promise(($)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),$(aJ);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}if(this.rl=bz.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),NA(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(S0.show),this.output.off("resize",this.render),NA(this.input,!1),$(this.value)}),this.once("cancel",()=>{this.output.write(S0.show),this.output.off("resize",this.render),NA(this.input,!1),$(aJ)})})}_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 A=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($&&!A&&$.length===1&&$>=" ")this._manualLine+=$;else if(w.name==="backspace"&&this._manualLine.length>0)this._manualLine=this._manualLine.slice(0,-1);let Y=this._manualLine.length>=(this.rl?.line?.length||0)?this._manualLine:this.rl?.line;this._setUserInput(Y)}if(this.state==="error")this.state="active",this.error="";if(w?.name){if(!this._track&&CA.aliases.has(w.name))this.emit("cursor",CA.aliases.get(w.name));if(CA.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 A=this.opts.validate(this.value);if(A)this.error=A instanceof Error?A.message:A,this.state="error"}if(this.state!=="error")this.state="submit"}if(XW([$,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(`
241
+ `),NA(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 $=oJ(this._prevFrame,sJ.stdout.columns,{hard:!0,trim:!1}).split(`
242
+ `).length-1;this.output.write(S0.move(-999,$*-1))}render(){let $=oJ(this._render(this)??"",sJ.stdout.columns,{hard:!0,trim:!1});if($===this._prevFrame)return;if(this.state==="initial")this.output.write(S0.hide);else{let w=xz(this._prevFrame,$);if(this.restoreCursor(),w&&w?.length===1){let A=w[0];this.output.write(S0.move(0,A)),this.output.write(EX.lines(1));let Y=$.split(`
243
+ `);this.output.write(Y[A]),this._prevFrame=$,this.output.write(S0.move(0,Y.length-A-1));return}if(w&&w?.length>1){let A=w[0];this.output.write(S0.move(0,A)),this.output.write(EX.down());let f=$.split(`
244
+ `).slice(A);this.output.write(f.join(`
245
+ `)),this._prevFrame=$;return}this.output.write(EX.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function nz($,w){if($===void 0)return 0;if(w.length===0)return 0;let Y=w.findIndex((f)=>f.value===$);return Y!==-1?Y:0}function vz($,w){return(w.label??String(w.value)).toLowerCase().includes($.toLowerCase())}function mz($,w){if(!w)return;if($)return w;return w[0]}class dz extends HX{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#A="";#Y;#w;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return IA.inverse(IA.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let $=this.userInput.slice(0,this._cursor),[w,...A]=this.userInput.slice(this._cursor);return`${$}${IA.inverse(w)}${A.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.#Y=$.filter??vz;let A;if($.initialValue&&Array.isArray($.initialValue))if(this.multiple)A=$.initialValue;else A=$.initialValue.slice(0,1);else if(!this.multiple&&this.options.length>0)A=[this.options[0].value];if(A)for(let Y of A){let f=w.findIndex((X)=>X.value===Y);if(f!==-1)this.toggleSelected(Y),this.#$=f}this.focusedValue=this.options[this.#$]?.value,this.on("key",(Y,f)=>this.#f(Y,f)),this.on("userInput",(Y)=>this.#X(Y))}_isActionKey($,w){return $==="\t"||this.multiple&&this.isNavigating&&w.name==="space"&&$!==void 0&&$!==""}#f($,w){let A=w.name==="up",Y=w.name==="down",f=w.name==="return";if(A||Y){if(this.#$=Math.max(0,Math.min(this.#$+(A?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)this.selectedValues=[this.focusedValue];this.isNavigating=!0}else if(f)this.value=mz(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=[$]}#X($){if($!==this.#A){this.#A=$;let w=this.options;if($)this.filteredOptions=w.filter((A)=>this.#Y($,A));else this.filteredOptions=[...w];if(this.#$=nz(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 lz extends HX{options;cursor=0;#$;getGroupItems($){return this.options.filter((w)=>w.group===$)}isGroupSelected($){let w=this.getGroupItems($),A=this.value;if(A===void 0)return!1;return w.every((Y)=>A.includes(Y.value))}toggleValue(){let $=this.options[this.cursor];if(this.value===void 0)this.value=[];if($.group===!0){let w=String($.value),A=this.getGroupItems(w);if(this.isGroupSelected(w))this.value=this.value.filter((Y)=>A.findIndex((f)=>f.value===Y)===-1);else this.value=[...this.value,...A.map((Y)=>Y.value)];this.value=Array.from(new Set(this.value))}else{let w=this.value.includes($.value);this.value=w?this.value.filter((A)=>A!==$.value):[...this.value,$.value]}}constructor($){super($,!1);let{options:w}=$;this.#$=$.selectableGroups!==!1,this.options=Object.entries(w).flatMap(([A,Y])=>[{value:A,group:!0,label:A},...Y.map((f)=>({...f,group:A}))]),this.value=[...$.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:A})=>A===$.cursorAt),this.#$?0:1),this.on("cursor",(A)=>{switch(A){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let Y=this.options[this.cursor]?.group===!0;if(!this.#$&&Y)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 Y=this.options[this.cursor]?.group===!0;if(!this.#$&&Y)this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}case"space":this.toggleValue();break}})}}var gz=$z();var a=($,w)=>gz?$:w,aR=a("◆","*"),sR=a("■","x"),oR=a("▲","x"),eR=a("◇","o"),$h=a("┌","T"),tz=a("│","|"),wh=a("└","—"),Ah=a("●",">"),Yh=a("○"," "),fh=a("◻","[•]"),Xh=a("◼","[+]"),Uh=a("◻","[ ]"),Jh=a("▪","•"),Wh=a("─","-"),Bh=a("╮","+"),Eh=a("├","+"),jh=a("╯","+"),Th=a("●","•"),Fh=a("◆","*"),zh=a("▲","!"),Gh=a("■","x");var Hh={light:a("─","-"),heavy:a("━","="),block:a("█","#")};function pz(){return`${IA.gray(tz)} `}var Kh=pz();f8();import{homedir as X8}from"node:os";import{join as U8,resolve as UN}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",fH={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:U8(X8(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:U8(X8(),".stacks","ssl","stacks.localhost.crt"),keyPath:U8(X8(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0};var pw=fH;Aw();Pf();bf();cf();jJ();FJ();YA();jA();L1();U$();import{spawn as GF}from"node:child_process";import*as y0 from"node:fs/promises";import{homedir as VJ}from"node:os";import*as E0 from"node:path";import*as P from"node:process";var wR=5000;function j0(){return E0.join(VJ(),".stacks","rpx")}function Hw($=j0()){return E0.join($,"daemon.pid")}async function Gw($=j0()){try{let w=await y0.readFile(Hw($),"utf8"),A=Number.parseInt(w.trim(),10);if(!Number.isFinite(A)||A<=0)return null;return A}catch(w){if(w.code==="ENOENT")return null;throw w}}async function af($=j0()){let w=await Gw($);return w!==null&&l$(w)}async function AR($=j0()){await y0.mkdir($,{recursive:!0});let w=Hw($);while(!0){try{let Y=await y0.open(w,"wx");try{await Y.write(`${P.pid}
246
+ `)}finally{await Y.close()}return w}catch(Y){if(Y.code!=="EEXIST")throw Y}let A=await Gw($);if(A!==null&&l$(A))throw Error(`rpx daemon already running (pid=${A})`);await y0.unlink(w).catch(()=>{})}}async function zA($=j0()){await y0.unlink(Hw($)).catch(()=>{})}function YR($){let w=$.cleanUrls??!1,A=S1($.path);if($.static)return{static:AA($.static,w),cleanUrls:w,basePath:A};let Y=$.from??"localhost:1";return{sourceHost:new URL(Y.startsWith("http")?Y:`http://${Y}`).host,cleanUrls:w,changeOrigin:$.changeOrigin??!1,pathRewrites:$.pathRewrites,basePath:A}}function fR($){return $.find((A)=>!/^api\./.test(A)&&!/^docs\./.test(A)&&!/^dashboard\./.test(A))??$[0]??"rpx.localhost"}async function XR($,w){let A=await Cw(w,$.verbose),Y=[...new Set(A.map((E)=>E.to))],f=fR(Y),X=[...new Set([f,...Y,"rpx.localhost"])],U=E0.join(VJ(),".stacks","ssl"),W=E0.join(U,"rpx.localhost.crt"),J={https:typeof $.https==="object"?{...$.https,certPath:W,keyPath:E0.join(U,"rpx.localhost.key"),commonName:f}:{certPath:W,keyPath:E0.join(U,"rpx.localhost.key"),caCertPath:E0.join(U,"rpx.localhost.ca.crt"),commonName:f},verbose:$.verbose,regenerateUntrustedCerts:!0,...X.length>1?{proxies:X.map((E)=>({from:"localhost:1",to:E}))}:{to:f,from:"localhost:1"}},B=await p0(J);if(!B)z("daemon","no usable cert on disk, generating one",$.verbose),await C1(J),B=await p0(J);if(!B)throw Error("failed to bootstrap TLS for rpx daemon");return B}async function UR($,w,A,Y){let f=P.env.SUDO_PASSWORD,X=P.env.HOME??VJ(),U=[P.execPath,...P.argv.slice(1)],W=[`HOME=${X}`,`PATH=${P.env.PATH??""}`];if(Y)W.push("RPX_VERBOSE=1");let J=f?["-S","-p","","env",...W,...U]:["-n","env",...W,...U];z("daemon",`elevating daemon via sudo for privileged ports ${w}/${A}`,Y);let B=GF("sudo",J,{detached:!0,stdio:["pipe","ignore","ignore"]}),E=null,j=null;if(B.once("error",(H)=>{E=H}),B.once("exit",(H)=>{j=H??0}),f&&B.stdin)B.stdin.write(`${f}
247
+ `),B.stdin.end();B.unref();let T=Hw($),F=Date.now()+15000;while(Date.now()<F){if(E)throw E;let H=await Gw($);if(H!==null&&l$(H)){if(Y)q.success(`rpx daemon elevated to root (pid=${H}, https on :${w})`);return{httpsPort:w,httpPort:A,pidPath:T,done:Promise.resolve(),stop:async()=>{try{P.kill(H,"SIGTERM")}catch{}},ensureCert:()=>Promise.resolve(!1)}}if(j!==null&&j!==0)throw Error(`rpx daemon could not elevate to bind :${w} (sudo exited ${j}). Set SUDO_PASSWORD in .env or run \`sudo -v\` first.`);await new Promise((G)=>setTimeout(G,50))}throw Error(`rpx daemon failed to elevate within 15000ms (rpxDir=${$})`)}async function HF($={}){let w=$.verbose??!1,A=$.rpxDir??j0(),Y=$.registryDir??E0.join(A,"registry.d"),f=$.httpsPort??443,X=$.httpPort??80,U=$.hostname??"0.0.0.0",W=$.gcIntervalMs??wR,J=f>0&&f<1024||X>0&&X<1024,B=typeof P.getuid==="function"&&P.getuid()===0;if(P.platform!=="win32"&&J&&!B)return UR(A,f,X,w);let E=await AR(A),j=new Map,T=(L,r)=>WA(j,L,r);function F(L){j=JA(L.map((e$)=>({host:e$.to,path:e$.path,route:YR(e$)})));let r=Array.from(j.keys());z("daemon",`routing table now covers ${r.length} host(s): ${r.join(", ")||"<empty>"}`,w)}await mf(Y,w).catch((L)=>{z("daemon",`initial gc failed: ${L}`,w)});let H=await Cw(Y,w);F(H),await Fw({rpxDir:A,verbose:w}).catch((L)=>{z("daemon",`DNS reconcile on start failed: ${L}`,w)}),await FA(H,{rpxDir:A,verbose:w,ownerPid:P.pid}).catch((L)=>{z("daemon",`DNS setup on start failed: ${L}`,w)});let G=[];if($.productionCerts){if(G=await EJ($.productionCerts,w),w&&G.length>0)q.info(`SNI: serving ${G.length} real cert(s): ${G.map((L)=>L.serverName).join(", ")}`)}let K=fA(T,w),R=XA(w),h=null;if(G.length===0)h=await XR($,Y);let N=$.onDemandTls,M=N?.enabled?new uf({config:N,certsDir:N.certsDir??$.productionCerts?.certsDir??E0.join(A,"on-demand-certs"),initial:G,verbose:w,onCertAdded:(L)=>{B$(L)}}):null;function C(L){if(L.length>0)return L.map((r)=>({serverName:r.serverName,cert:r.cert,key:r.key}));return{key:h.key,cert:h.cert,ca:h.ca,requestCert:!1,rejectUnauthorized:!1}}function y(L){return Bun.serve({port:f,hostname:U,tls:C(L),fetch(r,e$){return K(r,e$)},websocket:R,error(r){return z("daemon",`https server error: ${r}`,w),new Response(`Server Error: ${r.message}`,{status:500})}})}let O=y(M?M.sniEntries():G);async function B$(L){if(Zw)return;z("daemon",`rebuilding :443 with ${L.length} SNI cert(s)`,w),O.stop(!1);let r;for(let e$=0;e$<20&&!Zw;e$++)try{O=y(L);return}catch(qA){r=qA,await new Promise((uF)=>setTimeout(uF,25))}q.error(`rpx: failed to rebuild :443 after issuing cert: ${r?.message}`)}let A$=null;if(X>0)A$=Bun.serve({port:X,hostname:U,fetch(L){let r=new URL(L.url),e$=(L.headers.get("host")??r.hostname).split(":")[0];if(M&&r.pathname.startsWith("/.well-known/acme-challenge/")){let qA=M.challengeStore.handlePath(r.pathname);if(qA!==void 0)return new Response(qA,{status:200,headers:{"content-type":"text/plain"}});return new Response("challenge not found",{status:404})}if(M&&!M.hasCert(e$))M.ensureCert(e$).catch(()=>{});return new Response(null,{status:301,headers:{Location:`https://${e$}${r.pathname}${r.search}`}})}});if(w)q.success(`rpx daemon listening on https://${U}:${f}${A$?` (http→https on :${X})`:""}`),q.info(`pid file: ${E}`),q.info(`registry: ${Y}`);let C0=KJ((L)=>{F(L),FA(L,{rpxDir:A,verbose:w,ownerPid:P.pid}).catch((r)=>{z("daemon",`DNS sync on registry change failed: ${r}`,w)})},{dir:Y,verbose:w}),N0=setInterval(()=>{mf(Y,w).then((L)=>{if(L>0)z("daemon",`gc reaped ${L} stale entries`,w)}).catch((L)=>{z("daemon",`periodic gc failed: ${L}`,w)})},W);if(typeof N0.unref==="function")N0.unref();let Zw=!1,Q1,s0=new Promise((L)=>{Q1=L});async function vJ(){if(Zw)return s0;if(Zw=!0,clearInterval(N0),C0.close(),O.stop(!1),A$?.stop(!1),await Lw({rpxDir:A,verbose:w}).catch((L)=>{z("daemon",`DNS teardown failed: ${L}`,w)}),await zA(A),w)q.info("rpx daemon stopped");return Q1(),s0}let mJ=(L)=>{z("daemon",`received ${L}, shutting down`,w),vJ().catch(()=>{})};return P.once("SIGINT",mJ),P.once("SIGTERM",mJ),{stop:vJ,done:s0,httpsPort:typeof O.port==="number"?O.port:f,httpPort:A$&&typeof A$.port==="number"?A$.port:X,pidPath:E,ensureCert:(L)=>M?M.ensureCert(L):Promise.resolve(!1)}}function JR(){let $=P.execPath,w=E0.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&P.argv[1])return[$,P.argv[1],"daemon:start"];return[$,"daemon:start"]}async function KF($={}){let w=$.rpxDir??j0(),A=$.verbose??!1;await Fw({rpxDir:w,verbose:A}).catch((E)=>{z("daemon",`DNS reconcile before ensureDaemonRunning: ${E}`,A)});let Y=await Gw(w);if(Y!==null&&l$(Y))return z("daemon",`ensureDaemonRunning: already running pid=${Y}`,A),{pid:Y,spawned:!1};if(Y!==null)z("daemon",`ensureDaemonRunning: clearing stale pid=${Y}`,A),await zA(w);await y0.mkdir(w,{recursive:!0});let f=$.spawnCommand??JR();if(f.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");z("daemon",`spawning daemon: ${f.join(" ")}`,A);let X=GF(f[0],f.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??P.cwd(),env:$.spawnEnv?{...P.env,...$.spawnEnv}:P.env});X.unref();let U=null;X.once("error",(E)=>{U=E});let W=$.startupTimeoutMs??5000,J=$.pollIntervalMs??50,B=Date.now()+W;while(Date.now()<B){if(U)throw U;let E=await Gw(w);if(E!==null&&l$(E))return z("daemon",`daemon registered with pid=${E}`,A),{pid:E,spawned:!0};await new Promise((j)=>setTimeout(j,J))}if(U)throw U;throw Error(`rpx daemon failed to start within ${W}ms (rpxDir=${w})`)}async function RF($={}){let w=$.rpxDir??j0(),A=$.verbose??!1,Y=$.timeoutMs??5000,f=$.pollIntervalMs??50,X=$.forceAfterTimeout??!0,U=await Gw(w);if(U===null||!l$(U)){if(U!==null)await zA(w);return await Fw({rpxDir:w,verbose:A}).catch(()=>{}),{stopped:!1,pid:U,forced:!1}}try{P.kill(U,"SIGTERM")}catch(J){if(J.code==="ESRCH")return await zA(w),{stopped:!1,pid:U,forced:!1};throw J}let W=Date.now()+Y;while(Date.now()<W){if(!l$(U))return z("daemon",`daemon pid=${U} stopped cleanly`,A),{stopped:!0,pid:U,forced:!1};await new Promise((J)=>setTimeout(J,f))}if(!X)throw Error(`rpx daemon (pid=${U}) did not exit within ${Y}ms`);z("daemon",`daemon pid=${U} did not exit, escalating to SIGKILL`,A);try{P.kill(U,"SIGKILL")}catch(J){if(J.code!=="ESRCH")throw J}return await zA(w),await Lw({rpxDir:w,verbose:A}).catch((J)=>{z("daemon",`DNS teardown after SIGKILL: ${J}`,A)}),{stopped:!0,pid:U,forced:!0}}async function hF($={}){let w=$.rpxDir??j0();if(await af(w))return;await Fw({rpxDir:w,verbose:$.verbose})}Aw();U$();import{spawn as WR}from"node:child_process";import*as Ow from"node:process";class qF{processes=new Map;isShuttingDown=!1;async startProcess($,w,A){if(this.processes.has($)){z("start",`Process ${$} is already running`,A);return}let[Y,...f]=w.command.split(" "),X=w.cwd||Ow.cwd();z("start",`Starting process ${$}:`,A),z("start",` Command: ${Y} ${f.join(" ")}`,A),z("start",` Working directory: ${X}`,A),z("start",` Environment variables: ${W0(w.env)}`,A);let U=WR(Y,f,{cwd:X,env:{...Ow.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:X,process:U,env:w.env}),new Promise((W,J)=>{if(U.on("error",(B)=>{if(!this.isShuttingDown)z("start",`Process ${$} failed to start: ${B}`,A),this.processes.delete($),J(B),Ow.emit("SIGINT")}),U.on("exit",(B)=>{if(!this.isShuttingDown&&B!==null&&B!==0)z("start",`Process ${$} exited with code ${B}`,A),this.processes.delete($),J(Error(`Process ${$} exited with code ${B}`)),Ow.emit("SIGINT")}),A)U.stdout?.on("data",(B)=>{z("process",`[${$}] ${B.toString().trim()}`,!0)}),U.stderr?.on("data",(B)=>{z("process",`[${$}] ERR: ${B.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&U.killed)this.processes.delete($),J(Error(`Process ${$} was killed during startup`));else z("start",`Process ${$} started successfully`,A),W()},1000)})}async stopProcess($,w){let A=this.processes.get($);if(!A?.process){z("start",`No process found for ${$}`,w);return}return z("start",`Stopping process ${$}`,w),new Promise((Y)=>{if(!A.process){Y();return}A.process.once("exit",()=>{this.processes.delete($),z("start",`Process ${$} stopped`,w),Y()});try{A.process.kill("SIGTERM"),setTimeout(()=>{if(A.process){z("start",`Force killing process ${$}`,w);try{A.process.kill("SIGKILL")}catch(f){}}},3000)}catch(f){z("start",`Error stopping process ${$}: ${f}`,w),this.processes.delete($),Y()}})}async stopAll($){if(this.isShuttingDown){z("start","Already shutting down, skipping duplicate stopAll call",$);return}this.isShuttingDown=!0,z("start","Stopping all processes",$);let w=Array.from(this.processes.keys()).map((A)=>this.stopProcess(A,$).catch((Y)=>{q.error(`Failed to stop process ${A}:`,Y)}));await Promise.allSettled(w),this.processes.clear(),this.isShuttingDown=!1}isRunning($){let w=this.processes.get($);return!!w?.process&&!w.process.killed}}var sf=new qF;U$();import*as m$ from"node:fs/promises";import{homedir as BR}from"node:os";import*as QJ from"node:path";import*as _J from"node:process";var ER=/^[a-zA-Z0-9._-]+$/;function Vw(){return QJ.join(BR(),".stacks","rpx","registry.d")}function V1($){return typeof $==="string"&&$.length>0&&$.length<=128&&ER.test($)}function DJ($,w){if(!V1(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return QJ.join($,`${w}.json`)}function NF($){if(!$||typeof $!=="object")return!1;let w=$,A=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0,Y=typeof w.from==="string"&&w.from.length>0,f=typeof w.static==="string"||!!w.static&&typeof w.static==="object"&&typeof w.static.dir==="string",X=w.path===void 0||typeof w.path==="string";return typeof w.id==="string"&&V1(w.id)&&(Y||f)&&typeof w.to==="string"&&w.to.length>0&&X&&A&&typeof w.createdAt==="string"}async function jR($){await m$.mkdir($,{recursive:!0})}async function yF($,w=Vw(),A){if(!NF($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await jR(w);let Y=DJ(w,$.id),f=`${Y}.tmp.${_J.pid}.${Date.now()}`,X=JSON.stringify($,null,2);try{await m$.writeFile(f,X,{encoding:"utf8",mode:420}),await m$.rename(f,Y),z("registry",`wrote entry ${$.id} → ${Y}`,A)}catch(U){throw await m$.unlink(f).catch(()=>{}),U}}async function MF($,w=Vw(),A){let Y=DJ(w,$);try{await m$.unlink(Y),z("registry",`removed entry ${$}`,A)}catch(f){if(f.code!=="ENOENT")throw f}}async function kJ($,w=Vw(),A){let Y=DJ(w,$);try{let f=await m$.readFile(Y,"utf8"),X=JSON.parse(f);if(!NF(X))return z("registry",`entry ${$} failed validation, removing`,A),await m$.unlink(Y).catch(()=>{}),null;return X}catch(f){if(f.code==="ENOENT")return null;if(f instanceof SyntaxError)return z("registry",`entry ${$} has invalid JSON, removing`,A),await m$.unlink(Y).catch(()=>{}),null;throw f}}async function IF($=Vw(),w){let A;try{A=await m$.readdir($)}catch(f){if(f.code==="ENOENT")return[];throw f}let Y=[];for(let f of A){if(!f.endsWith(".json"))continue;let X=f.slice(0,-5);if(!V1(X))continue;let U=await kJ(X,$,w);if(U)Y.push(U)}return Y}Aw();import{execSync as KR}from"node:child_process";import*as kw from"node:http";import*as DF from"node:http2";import*as kF from"node:net";import*as w$ from"node:process";var of=($,w)=>(A)=>`\x1B[${$}m${A}\x1B[${w}m`,M0={bold:of(1,22),dim:of(2,22),green:of(32,39),cyan:of(36,39)};GU();RJ();Aw();jA();U$();import*as CF from"node:fs";import*as SF from"node:path";import*as I0 from"node:process";function TR($,w){let Y=(w&&w!=="/"?`${$}${w}`:$).replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128);return Y.length>0?Y:"rpx"}async function ZJ($){if($.proxies.length===0)throw Error("runViaDaemon: no proxies provided");let w=$.verbose??!1,A=$.registryDir,Y=new Set,f=$.proxies.map((T)=>{let F=T.id??TR(T.to,T.path);if(!EA(F))throw Error(`invalid registry id "${F}" derived from to="${T.to}"`);if(Y.has(F))throw Error(`duplicate registry id "${F}" — set an explicit \`id\` on one of the proxies`);return Y.add(F),{...T,id:F}}),X=new Date().toISOString();for(let T of f)await eT({id:T.id,from:T.from,to:T.to,path:T.path,pid:$.persistent?void 0:I0.pid,cwd:I0.cwd(),createdAt:X,cleanUrls:T.cleanUrls,changeOrigin:T.changeOrigin,pathRewrites:T.pathRewrites,static:T.static},A,w);let U=await AF({rpxDir:$.rpxDir,verbose:w,spawnCommand:$.spawnCommand,startupTimeoutMs:$.startupTimeoutMs,spawnEnv:$.spawnEnv});for(let T of f){let F=T.static?`static ${typeof T.static==="string"?T.static:T.static.dir}`:T.from;q.success(`https://${T.to} → ${F}`)}if(q.info(`(via rpx daemon pid=${U.pid}; \`rpx daemon:status\` to inspect)`),$.detached)return;let W=!1,J=A??Tw(),B=f.map((T)=>T.id),E=async()=>{if(W)return;W=!0;for(let T of B)await HJ(T,A,w).catch((F)=>{z("runner",`removeEntry(${T}) failed: ${F}`,w)})},j=(T)=>{z("runner",`received ${T}, unregistering ${B.length} entries`,w),E().finally(()=>I0.exit(0))};I0.once("SIGINT",j),I0.once("SIGTERM",j),I0.once("exit",()=>{if(W)return;for(let T of B)try{CF.unlinkSync(SF.join(J,`${T}.json`))}catch{}}),await new Promise(()=>{})}U$();import{exec as FR}from"node:child_process";import Qw from"node:fs";import OF from"node:os";import PJ from"node:path";import*as GA from"node:process";import{promisify as zR}from"node:util";var ef=zR(FR);function LF($){let w=$.trim().toLowerCase();return w==="localhost"||w.endsWith(".localhost")||w.endsWith(".localhost.")}var T0=GA.platform==="win32"?PJ.join(GA.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",xJ=!1;async function $X($){if(GA.platform==="win32")throw Error("Administrator privileges required on Windows");let w=Mw(),A=$.replace(/'/g,"'\\''");try{if(w){let{stdout:Y}=await ef(`echo '${w}' | sudo -S sh -c '${A}' 2>/dev/null`);return xJ=!0,Y}if(xJ)try{let{stdout:Y}=await ef(`sudo -n sh -c '${A}'`);return Y}catch(Y){z("hosts","Cached sudo privileges expired, requesting again",!0)}try{let{stdout:Y}=await ef(`sudo -n sh -c '${A}'`);return xJ=!0,Y}catch{throw Error("sudo required but no cached credentials (set SUDO_PASSWORD in .env or run sudo -v)")}}catch(Y){throw Error(`Failed to execute sudo command: ${Y.message}`)}}async function HA($,w){let A=$.filter((f)=>!LF(f)),Y=$.filter((f)=>LF(f));if(Y.length>0)z("hosts",`Skipping /etc/hosts for loopback dev names: ${Y.join(", ")}`,w);if(A.length===0)return;z("hosts",`Adding hosts: ${A.join(", ")}`,w),z("hosts",`Using hosts file at: ${T0}`,w);try{let f;try{f=await Qw.promises.readFile(T0,"utf-8")}catch{z("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{f=await $X(`cat "${T0}"`)}catch(J){throw console.log(" Could not read hosts file — skipping hosts setup"),z("hosts",`sudo read also failed: ${J}`,w),Error(`Cannot read hosts file: ${J}`)}}let X=A.filter((J)=>{let B=`127.0.0.1 ${J}`,E=`::1 ${J}`;return!f.includes(B)&&!f.includes(E)});if(X.length===0){z("hosts","All hosts already exist in hosts file",w);return}let U=X.map((J)=>`
244
248
  # Added by rpx
245
- 127.0.0.1 ${W}
246
- ::1 ${W}`).join(`
247
- `),B=EW.join(b9.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Cw.promises.writeFile(B,Y+Z,"utf8"),await PY(`cat "${B}" | tee "${W0}" > /dev/null`),console.log(` Hosts updated: ${U.join(", ")}`)}catch(W){console.log(" Could not update hosts file automatically"),console.log(" Add these entries to /etc/hosts:"),U.forEach((E)=>{console.log(` 127.0.0.1 ${E}`),console.log(` ::1 ${E}`)}),console.log(` Or run: sudo nano ${W0}`)}finally{try{await Cw.promises.unlink(B)}catch{}}}catch(Y){G("hosts",`Failed to manage hosts file: ${Y.message}`,w)}}async function i9($,w){G("hosts",`Removing hosts: ${$.join(", ")}`,w);try{let A;try{A=await Cw.promises.readFile(W0,"utf-8")}catch{G("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{A=await PY(`cat "${W0}"`)}catch(W){throw G("hosts",`sudo read also failed: ${W}`,w),Error(`Cannot read hosts file: ${W}`)}}let J=A.split(`
248
- `),Y=!1,U=J.filter((W)=>{if($.some((j)=>W.includes(` ${j}`)&&(W.includes("127.0.0.1")||W.includes("::1"))))return Y=!0,!1;if(W.trim()==="# Added by rpx")return Y=!0,!1;return!0});if(!Y){G("hosts","No matching hosts found to remove",w);return}while(U[U.length-1]?.trim()==="")U.pop();let Z=`${U.join(`
249
+ 127.0.0.1 ${J}
250
+ ::1 ${J}`).join(`
251
+ `),W=PJ.join(OF.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Qw.promises.writeFile(W,f+U,"utf8"),await $X(`cat "${W}" | tee "${T0}" > /dev/null`),console.log(` Hosts updated: ${X.join(", ")}`)}catch(J){console.log(" Could not update hosts file automatically"),console.log(" Add these entries to /etc/hosts:"),X.forEach((B)=>{console.log(` 127.0.0.1 ${B}`),console.log(` ::1 ${B}`)}),console.log(` Or run: sudo nano ${T0}`)}finally{try{await Qw.promises.unlink(W)}catch{}}}catch(f){z("hosts",`Failed to manage hosts file: ${f.message}`,w)}}async function VF($,w){z("hosts",`Removing hosts: ${$.join(", ")}`,w);try{let A;try{A=await Qw.promises.readFile(T0,"utf-8")}catch{z("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{A=await $X(`cat "${T0}"`)}catch(J){throw z("hosts",`sudo read also failed: ${J}`,w),Error(`Cannot read hosts file: ${J}`)}}let Y=A.split(`
252
+ `),f=!1,X=Y.filter((J)=>{if($.some((E)=>J.includes(` ${E}`)&&(J.includes("127.0.0.1")||J.includes("::1"))))return f=!0,!1;if(J.trim()==="# Added by rpx")return f=!0,!1;return!0});if(!f){z("hosts","No matching hosts found to remove",w);return}while(X[X.length-1]?.trim()==="")X.pop();let U=`${X.join(`
249
253
  `)}
250
- `,B=EW.join(b9.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Cw.promises.writeFile(B,Z,"utf8"),await PY(`cat "${B}" | tee "${W0}" > /dev/null`),G("hosts","Hosts removed successfully",w)}catch(W){G("hosts","Could not clean up hosts file automatically",w)}finally{try{await Cw.promises.unlink(B)}catch(W){G("hosts",`Failed to remove temporary file: ${W}`,w)}}}catch(A){G("hosts",`Failed to clean up hosts file: ${A.message}`,w)}}async function ZA($,w){G("hosts",`Checking hosts: ${$}`,w);let A;try{A=await Cw.promises.readFile(W0,"utf-8")}catch(J){G("hosts",`Error reading hosts file: ${J}`,w);try{let Y=qw(),U;if(Y)U=`echo '${Y}' | sudo -S cat "${W0}" 2>/dev/null`;else U=`sudo -n cat "${W0}" 2>/dev/null || cat "${W0}" 2>/dev/null || echo ""`;let{stdout:Z}=await xY(U);A=Z}catch(Y){return G("hosts",`Cannot read hosts file, assuming entries don't exist: ${Y}`,w),$.map(()=>!1)}}return $.map((J)=>{let Y=`127.0.0.1 ${J}`,U=`::1 ${J}`;return A.includes(Y)||A.includes(U)})}RY();U$();import*as bY from"node:net";function Lw($,w,A){return G("port",`Checking if port ${$} is in use on ${w}`,A),new Promise((J)=>{let Y=bY.createServer(),U=setTimeout(()=>{G("port",`Checking port ${$} timed out, assuming it's in use`,A),Y.close(),J(!0)},3000);Y.once("error",(Z)=>{if(clearTimeout(U),Z.code==="EADDRINUSE")G("port",`Port ${$} is in use`,A),J(!0);else G("port",`Error checking port ${$}: ${Z.message}`,A),J(!0)}),Y.once("listening",()=>{clearTimeout(U),G("port",`Port ${$} is available`,A),Y.close(),J(!1)});try{Y.listen($,w)}catch(Z){clearTimeout(U),G("port",`Exception checking port ${$}: ${Z}`,A),J(!0)}})}async function Uq($,w,A,J=50){G("port",`Finding available port starting from ${$} (max attempts: ${J})`,A);let Y=$,U=0;while(U<J){if(U++,!await Lw(Y,w,A))return G("port",`Found available port: ${Y} after ${U} attempts`,A),Y;G("port",`Port ${Y} is in use, trying ${Y+1} (attempt ${U}/${J})`,A),Y++}throw Error(`Unable to find available port after ${J} attempts starting from ${$}`)}function u9($,w,A=5000,J){return G("port",`Testing connection to ${w}:${$}`,J),new Promise((Y)=>{let U=bY.connect({host:w,port:$,timeout:A});U.once("connect",()=>{G("port",`Successfully connected to ${w}:${$}`,J),U.end(),Y(!0)}),U.once("timeout",()=>{G("port",`Connection to ${w}:${$} timed out`,J),U.destroy(),Y(!1)}),U.once("error",(Z)=>{G("port",`Failed to connect to ${w}:${$}: ${Z.message}`,J),U.destroy(),Y(!1)})})}class iY{usedPorts=new Set;hostname;verbose;maxRetries;constructor($="0.0.0.0",w,A=50){this.hostname=$,this.verbose=w,this.maxRetries=A}async getNextAvailablePort($,w=!1){if(this.usedPorts.has($))return this.findNextAvailablePort($+1,w);if(await Lw($,this.hostname,this.verbose))return this.findNextAvailablePort($+1,w);if(w){if(!await u9($,this.hostname,3000,this.verbose))return G("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 A=await Uq($,this.hostname,this.verbose,this.maxRetries);if(w){if(!await u9(A,this.hostname,3000,this.verbose))if(A<$+this.maxRetries)return this.findNextAvailablePort(A+1,w);else throw Error(`Unable to find a connectable port after ${this.maxRetries} attempts`)}return this.usedPorts.add(A),A}releasePort($){G("port",`Releasing port ${$}`,this.verbose),this.usedPorts.delete($)}}var iC=new iY;o0();U$();import{spawn as Zq}from"node:child_process";import*as yw from"node:process";class uY{processes=new Map;isShuttingDown=!1;async startProcess($,w,A){if(this.processes.has($)){G("start",`Process ${$} is already running`,A);return}let[J,...Y]=w.command.split(" "),U=w.cwd||yw.cwd();G("start",`Starting process ${$}:`,A),G("start",` Command: ${J} ${Y.join(" ")}`,A),G("start",` Working directory: ${U}`,A),G("start",` Environment variables: ${Y0(w.env)}`,A);let Z=Zq(J,Y,{cwd:U,env:{...yw.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:U,process:Z,env:w.env}),new Promise((B,W)=>{if(Z.on("error",(E)=>{if(!this.isShuttingDown)G("start",`Process ${$} failed to start: ${E}`,A),this.processes.delete($),W(E),yw.emit("SIGINT")}),Z.on("exit",(E)=>{if(!this.isShuttingDown&&E!==null&&E!==0)G("start",`Process ${$} exited with code ${E}`,A),this.processes.delete($),W(Error(`Process ${$} exited with code ${E}`)),yw.emit("SIGINT")}),A)Z.stdout?.on("data",(E)=>{G("process",`[${$}] ${E.toString().trim()}`,!0)}),Z.stderr?.on("data",(E)=>{G("process",`[${$}] ERR: ${E.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&Z.killed)this.processes.delete($),W(Error(`Process ${$} was killed during startup`));else G("start",`Process ${$} started successfully`,A),B()},1000)})}async stopProcess($,w){let A=this.processes.get($);if(!A?.process){G("start",`No process found for ${$}`,w);return}return G("start",`Stopping process ${$}`,w),new Promise((J)=>{if(!A.process){J();return}A.process.once("exit",()=>{this.processes.delete($),G("start",`Process ${$} stopped`,w),J()});try{A.process.kill("SIGTERM"),setTimeout(()=>{if(A.process){G("start",`Force killing process ${$}`,w);try{A.process.kill("SIGKILL")}catch(Y){}}},3000)}catch(Y){G("start",`Error stopping process ${$}: ${Y}`,w),this.processes.delete($),J()}})}async stopAll($){if(this.isShuttingDown){G("start","Already shutting down, skipping duplicate stopAll call",$);return}this.isShuttingDown=!0,G("start","Stopping all processes",$);let w=Array.from(this.processes.keys()).map((A)=>this.stopProcess(A,$).catch((J)=>{R.error(`Failed to stop process ${A}:`,J)}));await Promise.allSettled(w),this.processes.clear(),this.isShuttingDown=!1}isRunning($){let w=this.processes.get($);return!!w?.process&&!w.process.killed}}var nC=new uY;NY();t1();U$();var vY=new uY,Bq="0.12.0",Eq=new iY("0.0.0.0"),WA=new Set,jW=!1,cY=null,FW=null;async function mY($){if(jW)return G("cleanup","Cleanup already in progress, skipping",$?.verbose),FW||Promise.resolve();jW=!0,G("cleanup","Starting cleanup process",$?.verbose),FW=new Promise((w)=>{cY=w});try{await vY.stopAll($?.verbose),R.info("Shutting down proxy servers...");let w=[],A=Array.from(WA).map((J)=>new Promise((Y)=>{J.close(()=>{G("cleanup","Server closed successfully",$?.verbose),Y()})}));if(w.push(...A),$?.hosts&&$.domains?.length){G("cleanup","Cleaning up hosts file entries",$?.verbose),G("cleanup",`Original domains for cleanup: ${JSON.stringify($.domains)}`,$?.verbose);let J=$.domains.filter((Y)=>{if(Y==="test.local")return!0;return Y!=="localhost"&&!Y.startsWith("localhost.")&&Y!=="127.0.0.1"});if(G("cleanup",`Filtered domains for cleanup: ${JSON.stringify(J)}`,$?.verbose),J.length>0)R.info("Cleaning up hosts file entries..."),w.push(i9(J,$?.verbose).then(()=>{G("cleanup",`Removed hosts entries for ${J.join(", ")}`,$?.verbose)}).catch((Y)=>{G("cleanup",`Failed to remove hosts entries: ${Y}`,$?.verbose),R.warn(`Failed to clean up hosts file entries for ${J.join(", ")}:`,Y)}))}if($?.certs&&$.domains?.length){G("cleanup","Cleaning up SSL certificates",$?.verbose),R.info("Cleaning up SSL certificates...");let J=$.domains.map(async(Y)=>{try{await J9(Y,$?.verbose),G("cleanup",`Removed certificates for ${Y}`,$?.verbose)}catch(U){G("cleanup",`Failed to remove certificates for ${Y}: ${U}`,$?.verbose),R.warn(`Failed to clean up certificates for ${Y}:`,U)}});w.push(...J)}await Promise.allSettled(w),G("cleanup","All cleanup tasks completed successfully",$?.verbose),R.success("All cleanup tasks completed successfully")}catch(w){G("cleanup",`Error during cleanup: ${w}`,$?.verbose),R.error("Error during cleanup:",w)}finally{if(cY)cY();cY=null,jW=!1;let w=$&&"vitePluginUsage"in $&&$.vitePluginUsage===!0;if(e.env.NODE_ENV!=="test"&&e.env.BUN_ENV!=="test"&&!w)e.exit(0)}return FW}var zW=!1;function fW($){if(zW){G("signal",`Received second ${$} signal, forcing exit`,!0),e.exit(1);return}zW=!0,G("signal",`Received ${$} signal, initiating cleanup`,!0),mY().catch((w)=>{G("signal",`Cleanup failed after ${$}: ${w}`,!0),e.exit(1)}).finally(()=>{zW=!1})}e.once("SIGINT",()=>fW("SIGINT"));e.once("SIGTERM",()=>fW("SIGTERM"));e.on("uncaughtException",($)=>{G("process",`Uncaught exception: ${$}`,!0),R.error("Uncaught exception:",$),fW("uncaughtException")});async function BA($,w,A,J=5){G("connection",`Testing connection to ${$}:${w} (retries left: ${J})`,A);let Y=15000,U=Date.now();if(e.env.RPX_BYPASS_CONNECTION_TEST==="true"){G("connection",`Bypassing connection test for ${$}:${w} due to RPX_BYPASS_CONNECTION_TEST flag`,A);return}let Z=()=>new Promise((B,W)=>{let E=m9.connect({host:$,port:w,timeout:3000});E.once("connect",()=>{G("connection",`Successfully connected to ${$}:${w}`,A),E.end(),B()}),E.once("timeout",()=>{G("connection",`Connection to ${$}:${w} timed out`,A),E.destroy(),W(Error("Connection timed out"))}),E.once("error",(j)=>{G("connection",`Failed to connect to ${$}:${w}: ${j}`,A),E.destroy(),W(j)})});try{await Z()}catch(B){if(Date.now()-U>Y){G("connection",`Connection test timed out after ${Y}ms, but continuing anyway`,A),R.warn(`Connection test to ${$}:${w} timed out, but RPX will try to proceed anyway.`);return}if(B.code==="ECONNREFUSED"&&J>0)return G("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${J} retries left)`,A),await new Promise((E)=>setTimeout(E,2000)),BA($,w,A,J-1);if(J>0)try{G("connection",`Trying HTTP request to ${$}:${w}`,A),await new Promise((E,j)=>{let F=Vw.request({hostname:$,port:w,path:"/",method:"HEAD",timeout:5000},(f)=>{G("connection",`Received HTTP response with status: ${f.statusCode}`,A),E()});F.on("error",(f)=>j(f)),F.on("timeout",()=>{F.destroy(),j(Error("HTTP request timed out"))}),F.end()}),G("connection",`HTTP request to ${$}:${w} succeeded`,A);return}catch(E){return G("connection",`HTTP request to ${$}:${w} failed: ${E}`,A),G("connection",`Retrying socket connection in 2 seconds... (${J} retries left)`,A),await new Promise((j)=>setTimeout(j,2000)),BA($,w,A,J-1)}let W=`Failed to connect to ${$}:${w} after ${5-J} attempts: ${B.message}`;G("connection",`${W}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,A),R.warn(W),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 n9($){G("server",`Starting server with options: ${Y0($)}`,$.verbose);let w=new URL(($.from?.startsWith("http")?$.from:`http://${$.from}`)||"localhost:5173"),A=new URL(($.to?.startsWith("http")?$.to:`http://${$.to}`)||"rpx.localhost"),J=Number.parseInt(w.port)||(w.protocol.includes("https:")?443:80),Y=[A.hostname];if(GW($)&&!A.hostname.includes("localhost")&&!A.hostname.includes("127.0.0.1")){G("hosts",`Checking if hosts file entry exists for: ${A.hostname}`,$?.verbose);try{if(!(await ZA(Y,$.verbose))[0]){R.info(`Adding ${A.hostname} to hosts file...`),R.info("This may require sudo/administrator privileges");try{await UA(Y,$.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 ${A.hostname}`),R.warn(`::1 ${A.hostname}`),e.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 G("hosts",`Host entry already exists for ${A.hostname}`,$.verbose)}catch(Z){R.error("Failed to check hosts file:",Z.message)}}try{await BA(w.hostname,J,$.verbose)}catch(Z){G("server",`Connection test failed: ${Z}`,$.verbose),R.error(Z.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=l1({...$,to:A.hostname});if(U=await g0({...$,to:A.hostname,https:$.https}),!U){if(G("ssl",`Generating new certificates for ${A.hostname}`,$.verbose),await K1({...$,from:w.toString(),to:A.hostname,https:$.https}),U=await g0({...$,to:A.hostname,https:$.https}),!U)throw Error(`Failed to load SSL configuration after generating certificates for ${A.hostname}`)}}catch(Z){throw G("server",`SSL setup failed: ${Z}`,$.verbose),Z}G("server",`Setting up reverse proxy with SSL config for ${A.hostname}`,$.verbose),await Fq({...$,from:$.from||"localhost:5173",to:A.hostname,fromPort:J,sourceUrl:{hostname:w.hostname,host:w.host},ssl:U})}async function jq($,w,A,J,Y,U,Z,B,W,E,j){G("proxy",`Creating proxy server ${$} -> ${w} with cleanUrls: ${E}`,W);function F(T){let q={};for(let[K,h]of Object.entries(T))if(!K.startsWith(":"))q[K]=h;return q}let f=(T,q)=>{G("request",`Incoming request: ${T.method} ${T.url}`,W);let K=T.url||"/",h=T.method||"GET";if(T instanceof v9.Http2ServerRequest){let V=T.headers;h=V[":method"]||h,K=V[":path"]||K}if(E){if(!K.match(/\.[a-z0-9]+$/i))if(K.endsWith("/"))K=`${K}index.html`;else K=`${K}.html`}let I=F(T.headers);if(j)I.host=`${U.hostname}:${A}`,G("request",`Changed origin: setting host header to ${I.host}`,W);let N={hostname:U.hostname,port:A,path:K,method:h,headers:I};G("request",`Proxy request options: ${Y0(N)}`,W);let M=Vw.request(N,(V)=>{if(G("response",`Proxy response received with status ${V.statusCode}`,W),E&&V.statusCode===404){let B0=[];if(K.endsWith(".html"))B0.push(K.slice(0,-5));else if(!K.match(/\.[a-z0-9]+$/i))B0.push(`${K}.html`);if(!K.endsWith("/"))B0.push(`${K}/index.html`);if(B0.length>0){G("cleanUrls",`Trying alternative paths: ${B0.join(", ")}`,W);let N0=(Fw)=>{if(Fw.length===0){q.writeHead(V.statusCode||404,V.headers),V.pipe(q);return}let M1=Fw[0],y={...N,path:M1},X$=Vw.request(y,(M0)=>{if(M0.statusCode===200)G("cleanUrls",`Found matching path: ${M1}`,W),q.writeHead(M0.statusCode,M0.headers),M0.pipe(q);else N0(Fw.slice(1))});X$.on("error",()=>N0(Fw.slice(1))),X$.end()};N0(B0);return}}let g$={...V.headers,"Strict-Transport-Security":"max-age=31536000; includeSubDomains; preload","X-Content-Type-Options":"nosniff"};q.writeHead(V.statusCode||500,g$),V.pipe(q)});M.on("error",(V)=>{G("request",`Proxy request failed: ${V}`,W),R.error("Proxy request failed:",V),q.writeHead(502),q.end(`Proxy Error: ${V.message}`)}),T.pipe(M)};if(G("server",`Creating server with SSL config: ${!!Z}`,W),Z)return new Promise((T,q)=>{try{let K=Bun.serve({port:J,hostname:Y,tls:{key:Z.key,cert:Z.cert,ca:Z.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(h){let I=new URL(h.url);G("request",`Bun.serve received: ${h.method} ${I.pathname}`,W);let N=`http://${U.host}`,M=new URL(I.pathname+I.search,N);try{let V=new Headers(h.headers);if(V.set("host",U.host),j)V.set("origin",N);V.set("x-forwarded-for","127.0.0.1"),V.set("x-forwarded-proto","https"),V.set("x-forwarded-host",w);let g$=await fetch(M.toString(),{method:h.method,headers:V,body:h.body,redirect:"manual"}),B0=new Headers(g$.headers);if(E&&I.pathname.endsWith(".html")){let N0=I.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:N0}})}return new Response(g$.body,{status:g$.status,statusText:g$.statusText,headers:B0})}catch(V){return G("request",`Proxy error: ${V}`,W),new Response(`Proxy Error: ${V}`,{status:502})}},error(h){return G("server",`Bun.serve error: ${h}`,W),new Response(`Server Error: ${h.message}`,{status:500})}});WA.add(K),c9({from:$,to:w,vitePluginUsage:B,listenPort:J,ssl:!0,cleanUrls:E,verbose:W}),T()}catch(K){q(K)}});let z=Vw.createServer(f);function H(T){return WA.add(T),new Promise((q,K)=>{T.listen(J,Y,()=>{G("server",`Server listening on port ${J}`,W),c9({from:$,to:w,vitePluginUsage:B,listenPort:J,ssl:!!Z,cleanUrls:E,verbose:W}),q()}),T.on("error",(h)=>{G("server",`Server error: ${h}`,W),K(h)})})}return H(z)}async function Fq($){G("setup",`Setting up reverse proxy: ${Y0($)}`,$.verbose);let{from:w,to:A,fromPort:J,sourceUrl:Y,ssl:U,verbose:Z,cleanup:B,vitePluginUsage:W,changeOrigin:E,cleanUrls:j}=$,F=80,f=443,z="0.0.0.0",H=$.portManager||Eq,T=GW($);try{if(T&&A&&!A.includes("localhost")&&!A.includes("127.0.0.1")){if(!(await ZA([A],Z))[0]){R.warn(`The hostname ${A} isn't in your hosts file. Adding it now...`);try{await UA([A],Z),R.success(`Added ${A} to your hosts file.`)}catch(N){R.error(`Failed to add ${A} to your hosts file: ${N}`),R.info(`You may need to manually add '127.0.0.1 ${A}' to your /etc/hosts file.`)}}}else if(T&&e.platform!=="darwin"&&A&&A.includes("localhost")&&!A.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await ZA([A],Z))[0]){G("hosts",`${A} not found in hosts file, adding...`,Z);try{await UA([A],Z)}catch(N){G("hosts",`Failed to add ${A} to hosts file: ${N}`,Z)}}}if(U&&!H.usedPorts.has(F)){if(!await Lw(F,z,Z))G("setup","Starting HTTP redirect server",Z),d9(Z),H.usedPorts.add(F);else if(G("setup","Port 80 is in use, skipping HTTP redirect",Z),Z)R.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let q=U?f:F,K=await Lw(q,z,Z),h;if(K){if(G("setup",`Port ${q} is already in use`,Z),Z)R.warn(`Port ${q} is already in use. This may be another instance of rpx or another service.`);if(q===443){if(h=await H.getNextAvailablePort(3443,!0),G("setup",`Using port ${h} instead of ${q}`,Z),Z)R.info(`Using port ${h} instead. Access your site at https://${A}:${h}`)}else if(h=await H.getNextAvailablePort(q+1000,!0),G("setup",`Using port ${h} instead of ${q}`,Z),Z)R.info(`Using port ${h} instead. Access your site at http://${A}:${h}`)}else h=q,H.usedPorts.add(h),G("setup",`Using standard ${q===443?"HTTPS":"HTTP"} port ${q} for ${A}`,Z);await jq(w,A,J,h,z,Y,U,W,Z,j,E)}catch(q){G("setup",`Setup failed: ${q}`,Z),R.error(`Failed to setup reverse proxy: ${q.message}`),mY({domains:[A],hosts:typeof B==="boolean"?B:B?.hosts,certs:typeof B==="boolean"?B:B?.certs,verbose:Z,vitePluginUsage:W})}}function d9($){G("redirect","Starting HTTP redirect server",$);let w=Vw.createServer((A,J)=>{let Y=A.headers.host||"";G("redirect",`Redirecting request from ${Y}${A.url} to HTTPS`,$),J.writeHead(301,{Location:`https://${Y}${A.url}`}),J.end()}).listen(80);WA.add(w),G("redirect","HTTP redirect server started",$)}function g9($){let w={...n8,...$};if(G("proxy",`Starting proxy with options: ${Y0(w)}`,w?.verbose),w.viaDaemon){if(!w.from||!w.to){R.error("viaDaemon mode requires both `from` and `to`");return}WW({proxies:[{id:w.id,from:w.from,to:w.to,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}],verbose:w.verbose}).catch((W)=>{R.error(`Failed to register with rpx daemon: ${W.message}`),e.exit(1)});return}let A=w.to||"",J=A.split(".").pop()?.toLowerCase()||"",Y=e.platform==="darwin"&&A&&!A.includes("localhost")&&!A.includes("127.0.0.1"),U=["dev","app","page","new","day","foo"],Z=["test","localhost","local","example","invalid"];if(Y&&U.includes(J)&&w?.verbose)R.warn(`The .${J} TLD may not work reliably for local development`),R.info(` Google owns .${J} with HSTS preloading, which can bypass local DNS`),R.info(" Consider using a reserved TLD: .test, .localhost, or .local");if(Y)Promise.resolve().then(() => (h1(),_Y)).then(({setupDevelopmentDns:W})=>{W({domains:[A],verbose:w.verbose}).then((E)=>{if(E)Promise.resolve().then(()=>{if(w.verbose)if(Z.includes(J))R.success(`DNS server started for .${J} domains`);else R.success(`DNS server started for .${J} domains (hosts file entry also added)`)});else G("dns",`Could not start DNS server - ${A} may not resolve in browser`,w.verbose)})}).catch((W)=>{G("dns",`Failed to start DNS server: ${W}`,w.verbose)});let B={from:w.from,to:w.to,cleanUrls:w.cleanUrls,https:l1(w),cleanup:w.cleanup,vitePluginUsage:w.vitePluginUsage,changeOrigin:w.changeOrigin,verbose:w.verbose,regenerateUntrustedCerts:w.regenerateUntrustedCerts};G("proxy",`Server options: ${Y0(B)}`,w.verbose),n9(B).catch((W)=>{G("proxy",`Failed to start proxy: ${W}`,w.verbose),R.error(`Failed to start proxy: ${W.message}`),mY({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 zq($){return $?.verbose||!1}function GW($){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 l9($){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 A=zq(w),J=GW(w);if(G("config",`Starting with config: ${Y0(w,2)}`,A),G("config",`Is multi-proxy? ${"proxies"in w}`,A),G("config",`Hosts management enabled? ${J}`,A),w.viaDaemon){let T="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((q)=>({id:q.id,from:q.from,to:q.to,cleanUrls:q.cleanUrls??w.cleanUrls,changeOrigin:q.changeOrigin??w.changeOrigin,pathRewrites:q.pathRewrites})):[{id:w.id,from:w.from,to:w.to,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}];await WW({proxies:T,verbose:A});return}if("proxies"in w&&Array.isArray(w.proxies)){G("servers",`Found ${w.proxies.length} proxies in config`,A);for(let H of w.proxies)if(H.start){let T=`${H.from}-${H.to}`;try{G("watch",`Starting command for ${T} with command: ${H.start.command}`,A),R.info(`Starting command for ${T}...`),await vY.startProcess(T,H.start,A);let q=new URL(H.from.startsWith("http")?H.from:`http://${H.from}`),K=q.hostname||"localhost",h=Number(q.port)||80;try{await BA(K,h,A),G("watch",`Dev server is ready at ${K}:${h}`,A)}catch(I){G("watch",`Connection check failed, but continuing with proxy setup: ${I}`,A),R.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(q){throw G("watch",`Failed to start command for ${T}: ${q}`,A),Error(`Failed to start command for ${T}: ${q}`)}}else G("watch",`No start command for proxy ${H.from} -> ${H.to}`,A)}else if("start"in w&&w.start){G("watch","Found start command in single proxy config",A);let H=`${w.from}-${w.to}`;try{if(w.start)G("watch",`Starting command: ${w.start.command}`,A),await vY.startProcess(H,w.start,A);let T=new URL(w.from?.startsWith("http")?w.from:`http://${w.from}`),q=T.hostname||"localhost",K=Number(T.port)||80;try{await BA(q,K,A),G("watch",`Dev server is ready at ${q}:${K}`,A)}catch(h){G("watch",`Connection check failed, but continuing with proxy setup: ${h}`,A),R.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(T){throw G("watch",`Failed to run start command: ${T}`,A),Error(`Failed to run start command: ${T}`)}}else G("watch","No start command found in config",A);let Y="proxies"in w&&Array.isArray(w.proxies)?w.proxies[0]?.to:("to"in w)?w.to:"rpx.localhost";if(e.platform!=="win32"&&(w.https||J)){if(!qw())try{G("sudo","Pre-acquiring sudo credentials for privileged operations",A),Wq("sudo -v",{stdio:"inherit"})}catch{G("sudo","Could not pre-acquire sudo credentials",A)}}if(w.https){let H=await g0(w);if(!H){if(G("ssl",`No valid or trusted certificates found for ${Y}, generating new ones`,w.verbose),await K1(w),H=await g0(w),!H)throw Error(`Failed to load SSL certificates after generation for ${Y}`)}else G("ssl",`Using existing and trusted certificates for ${Y}`,w.verbose);w._cachedSSLConfig=H}let U="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((H)=>({...H,https:w.https,cleanup:w.cleanup,cleanUrls:H.cleanUrls??("cleanUrls"in w?w.cleanUrls:!1),vitePluginUsage:w.vitePluginUsage,changeOrigin:H.changeOrigin??w.changeOrigin,verbose:A,_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,verbose:A,_cachedSSLConfig:w._cachedSSLConfig}],Z=U.map((H)=>H.to||"rpx.localhost"),B=w._cachedSSLConfig,W=Z.filter((H)=>H&&!H.includes("localhost")&&!H.includes("127.0.0.1")),E=["dev","app","page","new","day","foo"],j=["test","localhost","local","example","invalid"],F=[...new Set(W.map((H)=>H.split(".").pop()?.toLowerCase()))],f=F.filter((H)=>!!H&&E.includes(H));if(f.length>0&&A)R.warn(`The following TLDs may not work reliably for local development: ${f.map((H)=>`.${H}`).join(", ")}`),R.info(" These TLDs have HSTS preloading which can bypass local DNS"),R.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(J&&e.platform==="darwin"&&W.length>0){let{setupDevelopmentDns:H}=await Promise.resolve().then(() => (h1(),_Y));if(await H({domains:W,verbose:A})){if(A)if(F.every((K)=>!!K&&j.includes(K)))R.success(`DNS server started for ${F.map((K)=>`.${K}`).join(", ")} domains`);else R.success(`DNS server started for ${F.map((K)=>`.${K}`).join(", ")} domains (hosts file entries also added)`)}else G("dns","Could not start DNS server - custom domains may not resolve",A)}let z=async()=>{G("cleanup","Starting cleanup handler",w.verbose);try{let{tearDownDevelopmentDns:H}=await Promise.resolve().then(() => (h1(),_Y));await H({verbose:w.verbose})}catch(H){G("cleanup",`Error stopping DNS server: ${H}`,w.verbose)}try{await vY.stopAll(w.verbose)}catch(H){G("cleanup",`Error stopping processes: ${H}`,w.verbose)}await mY({domains:Z,hosts:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.hosts,certs:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.certs,verbose:w.verbose||!1})};if(e.on("SIGINT",z),e.on("SIGTERM",z),e.on("uncaughtException",(H)=>{G("process",`Uncaught exception: ${H}`,!0),console.error("Uncaught exception:",H),z()}),B&&U.length>1){G("proxies",`Creating shared HTTPS server for ${U.length} domains`,A);let H=new Map;for(let N of U){let M=N.to||"rpx.localhost",V=N.cleanUrls||!1;if(N.static)H.set(M,{static:p1(N.static,V),cleanUrls:V}),G("proxies",`Route: ${M} → static ${typeof N.static==="string"?N.static:N.static.dir}`,A);else{let g$=new URL(N.from?.startsWith("http")?N.from:`http://${N.from}`);H.set(M,{sourceHost:g$.host,cleanUrls:V,changeOrigin:N.changeOrigin||!1,pathRewrites:N.pathRewrites}),G("proxies",`Route: ${M} → ${g$.host}`,A)}if(J&&!MY(M)&&!M.includes("localhost")&&!M.includes("127.0.0.1"))try{if(!(await ZA([M],A))[0])await UA([M],A)}catch{G("hosts",`Could not add hosts entry for ${M}`,A)}}if(!await Lw(80,"0.0.0.0",A))d9(A);let q=443;if(await Lw(q,"0.0.0.0",A)){if(G("proxies",`Port ${q} is already in use, cannot start shared proxy`,A),A)R.warn(`Port ${q} is in use. Shared HTTPS proxy cannot start.`);return}let h=r1((N)=>s1(H,N),A),I=a1(A);try{let N=Bun.serve({port:q,hostname:"0.0.0.0",tls:{key:B.key,cert:B.cert,ca:B.ca,requestCert:!1,rejectUnauthorized:!1},fetch(M,V){return h(M,V)},websocket:I,error(M){return G("server",`Shared proxy server error: ${M}`,A),new Response(`Server Error: ${M.message}`,{status:500})}});WA.add(N),G("proxies",`Shared HTTPS proxy listening on port ${q} for ${H.size} domains`,A)}catch(N){G("proxies",`Failed to start shared proxy: ${N}`,A),console.error("Failed to start shared HTTPS proxy:",N),z()}}else for(let H of U)try{let T=H.to||"rpx.localhost";G("proxy",`Starting proxy for ${T} with SSL config: ${!!B}`,H.verbose),await n9({from:H.from||"localhost:5173",to:T,cleanUrls:H.cleanUrls||!1,https:H.https||!1,cleanup:H.cleanup||!1,vitePluginUsage:H.vitePluginUsage||!1,verbose:H.verbose||!1,_cachedSSLConfig:B,changeOrigin:H.changeOrigin||!1})}catch(T){G("proxies",`Failed to start proxy for ${H.to}: ${T}`,H.verbose),console.error(`Failed to start proxy for ${H.to}:`,T),z()}}function c9($){if($?.vitePluginUsage||!$?.verbose)return;if(console.log(""),console.log(` ${h0.green(h0.bold("rpx"))} ${h0.green(`v${Bq}`)}`),console.log(` ${h0.green("➜")} ${h0.dim($?.from??"")} ${h0.dim("➜")} ${h0.cyan($?.ssl?`https://${$?.to}`:`http://${$?.to}`)}`),$?.listenPort!==($?.ssl?443:80))console.log(` ${h0.green("➜")} Listening on port ${$?.listenPort}`);if($?.cleanUrls)console.log(` ${h0.green("➜")} Clean URLs enabled`)}SZ();var EL=new Hw("rpx",{showTags:!1});function p9($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}v$.chdir(Gq(fq(Tq(import.meta.url)),".."));var d$=new sY("rpx"),t9="0.12.0";d$.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("--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").action(async($)=>{if(!$?.from||!$.to)return l9(vw);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,viaDaemon:$.viaDaemon||!1,id:$.id};if($.startCommand){let A={command:$.startCommand};if($.startCwd)A.cwd=$.startCwd;if($.startEnv)try{A.env=JSON.parse($.startEnv)}catch(J){console.error("Failed to parse start-env JSON:",J),v$.exit(1)}w.start=A}return g9(w)});d$.command("watch:start <proxy>","Start the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{let A=p9(vw)?vw.proxies.find((J)=>J.to===$||`${J.from}-${J.to}`===$):vw.to===$?vw:null;if(!A?.start)console.error(`No watch configuration found for proxy: ${$}`),v$.exit(1);try{await QY.startProcess($,A.start,w.verbose),console.log(`Started dev server for ${$}`)}catch(J){console.error(`Failed to start dev server for ${$}:`,J),v$.exit(1)}});d$.command("watch:stop <proxy>","Stop the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{try{await QY.stopProcess($,w.verbose),console.log(`Stopped dev server for ${$}`)}catch(A){console.error(`Failed to stop dev server for ${$}:`,A),v$.exit(1)}});d$.command("watch:stopall","Stop all running dev servers").option("--verbose","Enable verbose logging").action(async($)=>{try{await QY.stopAll($.verbose),console.log("Stopped all dev servers")}catch(w){console.error("Failed to stop all dev servers:",w),v$.exit(1)}});d$.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("--verbose","Enable verbose logging").action(async($)=>{try{await(await L9({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,verbose:$.verbose??!0})).done,v$.exit(0)}catch(w){console.error(`Failed to start rpx daemon: ${w.message}`),v$.exit(1)}});d$.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,A=await V9({rpxDir:$.rpxDir,timeoutMs:w,forceAfterTimeout:$.force!==!1,verbose:$.verbose});if(!A.stopped&&A.pid===null){console.log("rpx daemon is not running");return}if(!A.stopped){console.log(`rpx daemon pid=${A.pid} was already gone (cleaned stale lock)`);return}console.log(`rpx daemon pid=${A.pid} stopped${A.forced?" (SIGKILL)":""}`)});d$.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??Z0(),A=await Ew(w),J=await DY(w),Y=$.registryDir,U=await Q9(Y).catch(()=>[]);if($.json){console.log(JSON.stringify({running:J,pid:A,pidFile:jw(w),rpxDir:w,registryDir:Y??Iw(),entries:U},null,2));return}if(!J){if(console.log("rpx daemon: not running"),A!==null)console.log(`(stale pid file at ${jw(w)} \u2192 pid ${A})`)}else console.log(`rpx daemon: running (pid=${A})`),console.log(`pid file: ${jw(w)}`);if(console.log(`registry: ${Y??Iw()}`),U.length===0){console.log("no registered hosts");return}console.log(`registered hosts (${U.length}):`);for(let Z of U){let B=Z.pid!==void 0?`, pid=${Z.pid}`:"";console.log(` https://${Z.to} \u2192 ${Z.from} (id=${Z.id}${B})`)}});d$.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"),v$.exit(1);if(!N1($.id))console.error(`invalid id: ${JSON.stringify($.id)} (must match /^[a-zA-Z0-9._-]+$/, \u2264128 chars)`),v$.exit(1);try{await _9({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}`),v$.exit(1)}if($.skipSpawn){console.log(`registered ${$.to} \u2192 ${$.from} (daemon spawn skipped)`);return}try{let w=await y9({rpxDir:$.rpxDir,verbose:$.verbose}),A=w.spawned?"spawned":"attached to";console.log(`registered https://${$.to} \u2192 ${$.from} (${A} 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`"),v$.exit(1)}});d$.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(!N1($))console.error(`invalid id: ${JSON.stringify($)}`),v$.exit(1);let A=await ZW($,w.registryDir,w.verbose);if(!A){console.log(`no registry entry for id=${$}`);return}await D9($,w.registryDir,w.verbose),console.log(`unregistered ${A.to} (id=${$})`)});d$.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??Z0();if(await DY(w)){console.log("rpx daemon is running \u2014 DNS overrides are managed by the daemon");return}await S9({rpxDir:w,verbose:$.verbose}),console.log("DNS reconcile complete")});d$.command("version","Show the version of the Reverse Proxy CLI").action(()=>{console.log(t9)});d$.version(t9);d$.help();d$.run();
254
+ `,W=PJ.join(OF.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Qw.promises.writeFile(W,U,"utf8"),await $X(`cat "${W}" | tee "${T0}" > /dev/null`),z("hosts","Hosts removed successfully",w)}catch(J){z("hosts","Could not clean up hosts file automatically",w)}finally{try{await Qw.promises.unlink(W)}catch(J){z("hosts",`Failed to remove temporary file: ${J}`,w)}}}catch(A){z("hosts",`Failed to clean up hosts file: ${A.message}`,w)}}async function KA($,w){z("hosts",`Checking hosts: ${$}`,w);let A;try{A=await Qw.promises.readFile(T0,"utf-8")}catch(Y){z("hosts",`Error reading hosts file: ${Y}`,w);try{let f=Mw(),X;if(f)X=`echo '${f}' | sudo -S cat "${T0}" 2>/dev/null`;else X=`sudo -n cat "${T0}" 2>/dev/null || cat "${T0}" 2>/dev/null || echo ""`;let{stdout:U}=await ef(X);A=U}catch(f){return z("hosts",`Cannot read hosts file, assuming entries don't exist: ${f}`,w),$.map(()=>!1)}}return $.map((Y)=>{let f=`127.0.0.1 ${Y}`,X=`::1 ${Y}`;return A.includes(f)||A.includes(X)})}Pf();U$();import*as wX from"node:net";function _w($,w,A){return z("port",`Checking if port ${$} is in use on ${w}`,A),new Promise((Y)=>{let f=wX.createServer(),X=setTimeout(()=>{z("port",`Checking port ${$} timed out, assuming it's in use`,A),f.close(),Y(!0)},3000);f.once("error",(U)=>{if(clearTimeout(X),U.code==="EADDRINUSE")z("port",`Port ${$} is in use`,A),Y(!0);else z("port",`Error checking port ${$}: ${U.message}`,A),Y(!0)}),f.once("listening",()=>{clearTimeout(X),z("port",`Port ${$} is available`,A),f.close(),Y(!1)});try{f.listen($,w)}catch(U){clearTimeout(X),z("port",`Exception checking port ${$}: ${U}`,A),Y(!0)}})}async function GR($,w,A,Y=50){z("port",`Finding available port starting from ${$} (max attempts: ${Y})`,A);let f=$,X=0;while(X<Y){if(X++,!await _w(f,w,A))return z("port",`Found available port: ${f} after ${X} attempts`,A),f;z("port",`Port ${f} is in use, trying ${f+1} (attempt ${X}/${Y})`,A),f++}throw Error(`Unable to find available port after ${Y} attempts starting from ${$}`)}function QF($,w,A=5000,Y){return z("port",`Testing connection to ${w}:${$}`,Y),new Promise((f)=>{let X=wX.connect({host:w,port:$,timeout:A});X.once("connect",()=>{z("port",`Successfully connected to ${w}:${$}`,Y),X.end(),f(!0)}),X.once("timeout",()=>{z("port",`Connection to ${w}:${$} timed out`,Y),X.destroy(),f(!1)}),X.once("error",(U)=>{z("port",`Failed to connect to ${w}:${$}: ${U.message}`,Y),X.destroy(),f(!1)})})}class AX{usedPorts=new Set;hostname;verbose;maxRetries;constructor($="0.0.0.0",w,A=50){this.hostname=$,this.verbose=w,this.maxRetries=A}async getNextAvailablePort($,w=!1){if(this.usedPorts.has($))return this.findNextAvailablePort($+1,w);if(await _w($,this.hostname,this.verbose))return this.findNextAvailablePort($+1,w);if(w){if(!await QF($,this.hostname,3000,this.verbose))return z("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 A=await GR($,this.hostname,this.verbose,this.maxRetries);if(w){if(!await QF(A,this.hostname,3000,this.verbose))if(A<$+this.maxRetries)return this.findNextAvailablePort(A+1,w);else throw Error(`Unable to find a connectable port after ${this.maxRetries} attempts`)}return this.usedPorts.add(A),A}releasePort($){z("port",`Releasing port ${$}`,this.verbose),this.usedPorts.delete($)}}var TS=new AX;Aw();U$();import{spawn as HR}from"node:child_process";import*as Dw from"node:process";class YX{processes=new Map;isShuttingDown=!1;async startProcess($,w,A){if(this.processes.has($)){z("start",`Process ${$} is already running`,A);return}let[Y,...f]=w.command.split(" "),X=w.cwd||Dw.cwd();z("start",`Starting process ${$}:`,A),z("start",` Command: ${Y} ${f.join(" ")}`,A),z("start",` Working directory: ${X}`,A),z("start",` Environment variables: ${W0(w.env)}`,A);let U=HR(Y,f,{cwd:X,env:{...Dw.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:X,process:U,env:w.env}),new Promise((W,J)=>{if(U.on("error",(B)=>{if(!this.isShuttingDown)z("start",`Process ${$} failed to start: ${B}`,A),this.processes.delete($),J(B),Dw.emit("SIGINT")}),U.on("exit",(B)=>{if(!this.isShuttingDown&&B!==null&&B!==0)z("start",`Process ${$} exited with code ${B}`,A),this.processes.delete($),J(Error(`Process ${$} exited with code ${B}`)),Dw.emit("SIGINT")}),A)U.stdout?.on("data",(B)=>{z("process",`[${$}] ${B.toString().trim()}`,!0)}),U.stderr?.on("data",(B)=>{z("process",`[${$}] ERR: ${B.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&U.killed)this.processes.delete($),J(Error(`Process ${$} was killed during startup`));else z("start",`Process ${$} started successfully`,A),W()},1000)})}async stopProcess($,w){let A=this.processes.get($);if(!A?.process){z("start",`No process found for ${$}`,w);return}return z("start",`Stopping process ${$}`,w),new Promise((Y)=>{if(!A.process){Y();return}A.process.once("exit",()=>{this.processes.delete($),z("start",`Process ${$} stopped`,w),Y()});try{A.process.kill("SIGTERM"),setTimeout(()=>{if(A.process){z("start",`Force killing process ${$}`,w);try{A.process.kill("SIGKILL")}catch(f){}}},3000)}catch(f){z("start",`Error stopping process ${$}: ${f}`,w),this.processes.delete($),Y()}})}async stopAll($){if(this.isShuttingDown){z("start","Already shutting down, skipping duplicate stopAll call",$);return}this.isShuttingDown=!0,z("start","Stopping all processes",$);let w=Array.from(this.processes.keys()).map((A)=>this.stopProcess(A,$).catch((Y)=>{q.error(`Failed to stop process ${A}:`,Y)}));await Promise.allSettled(w),this.processes.clear(),this.isShuttingDown=!1}isRunning($){let w=this.processes.get($);return!!w?.process&&!w.process.killed}}var KS=new YX;bf();cf();YA();U$();var XX=new YX,RR="0.12.0",hR=new AX("0.0.0.0"),RA=new Set,iJ=!1,fX=null,bJ=null;async function UX($){if(iJ)return z("cleanup","Cleanup already in progress, skipping",$?.verbose),bJ||Promise.resolve();iJ=!0,z("cleanup","Starting cleanup process",$?.verbose),bJ=new Promise((w)=>{fX=w});try{await XX.stopAll($?.verbose),q.info("Shutting down proxy servers...");let w=[],A=Array.from(RA).map((Y)=>new Promise((f)=>{Y.close(()=>{z("cleanup","Server closed successfully",$?.verbose),f()})}));if(w.push(...A),$?.hosts&&$.domains?.length){z("cleanup","Cleaning up hosts file entries",$?.verbose),z("cleanup",`Original domains for cleanup: ${JSON.stringify($.domains)}`,$?.verbose);let Y=$.domains.filter((f)=>{if(f==="test.local")return!0;return f!=="localhost"&&!f.startsWith("localhost.")&&f!=="127.0.0.1"});if(z("cleanup",`Filtered domains for cleanup: ${JSON.stringify(Y)}`,$?.verbose),Y.length>0)q.info("Cleaning up hosts file entries..."),w.push(VF(Y,$?.verbose).then(()=>{z("cleanup",`Removed hosts entries for ${Y.join(", ")}`,$?.verbose)}).catch((f)=>{z("cleanup",`Failed to remove hosts entries: ${f}`,$?.verbose),q.warn(`Failed to clean up hosts file entries for ${Y.join(", ")}:`,f)}))}if($?.certs&&$.domains?.length){z("cleanup","Cleaning up SSL certificates",$?.verbose),q.info("Cleaning up SSL certificates...");let Y=$.domains.map(async(f)=>{try{await gT(f,$?.verbose),z("cleanup",`Removed certificates for ${f}`,$?.verbose)}catch(X){z("cleanup",`Failed to remove certificates for ${f}: ${X}`,$?.verbose),q.warn(`Failed to clean up certificates for ${f}:`,X)}});w.push(...Y)}await Promise.allSettled(w),z("cleanup","All cleanup tasks completed successfully",$?.verbose),q.success("All cleanup tasks completed successfully")}catch(w){z("cleanup",`Error during cleanup: ${w}`,$?.verbose),q.error("Error during cleanup:",w)}finally{if(fX)fX();fX=null,iJ=!1;let w=$&&"vitePluginUsage"in $&&$.vitePluginUsage===!0;if(w$.env.NODE_ENV!=="test"&&w$.env.BUN_ENV!=="test"&&!w)w$.exit(0)}return bJ}var cJ=!1;function uJ($){if(cJ){z("signal",`Received second ${$} signal, forcing exit`,!0),w$.exit(1);return}cJ=!0,z("signal",`Received ${$} signal, initiating cleanup`,!0),UX().catch((w)=>{z("signal",`Cleanup failed after ${$}: ${w}`,!0),w$.exit(1)}).finally(()=>{cJ=!1})}w$.once("SIGINT",()=>uJ("SIGINT"));w$.once("SIGTERM",()=>uJ("SIGTERM"));w$.on("uncaughtException",($)=>{z("process",`Uncaught exception: ${$}`,!0),q.error("Uncaught exception:",$),uJ("uncaughtException")});async function hA($,w,A,Y=5){z("connection",`Testing connection to ${$}:${w} (retries left: ${Y})`,A);let f=15000,X=Date.now();if(w$.env.RPX_BYPASS_CONNECTION_TEST==="true"){z("connection",`Bypassing connection test for ${$}:${w} due to RPX_BYPASS_CONNECTION_TEST flag`,A);return}let U=()=>new Promise((W,J)=>{let B=kF.connect({host:$,port:w,timeout:3000});B.once("connect",()=>{z("connection",`Successfully connected to ${$}:${w}`,A),B.end(),W()}),B.once("timeout",()=>{z("connection",`Connection to ${$}:${w} timed out`,A),B.destroy(),J(Error("Connection timed out"))}),B.once("error",(E)=>{z("connection",`Failed to connect to ${$}:${w}: ${E}`,A),B.destroy(),J(E)})});try{await U()}catch(W){if(Date.now()-X>f){z("connection",`Connection test timed out after ${f}ms, but continuing anyway`,A),q.warn(`Connection test to ${$}:${w} timed out, but RPX will try to proceed anyway.`);return}if(W.code==="ECONNREFUSED"&&Y>0)return z("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${Y} retries left)`,A),await new Promise((B)=>setTimeout(B,2000)),hA($,w,A,Y-1);if(Y>0)try{z("connection",`Trying HTTP request to ${$}:${w}`,A),await new Promise((B,E)=>{let j=kw.request({hostname:$,port:w,path:"/",method:"HEAD",timeout:5000},(T)=>{z("connection",`Received HTTP response with status: ${T.statusCode}`,A),B()});j.on("error",(T)=>E(T)),j.on("timeout",()=>{j.destroy(),E(Error("HTTP request timed out"))}),j.end()}),z("connection",`HTTP request to ${$}:${w} succeeded`,A);return}catch(B){return z("connection",`HTTP request to ${$}:${w} failed: ${B}`,A),z("connection",`Retrying socket connection in 2 seconds... (${Y} retries left)`,A),await new Promise((E)=>setTimeout(E,2000)),hA($,w,A,Y-1)}let J=`Failed to connect to ${$}:${w} after ${5-Y} attempts: ${W.message}`;z("connection",`${J}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,A),q.warn(J),q.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 ZF($){z("server",`Starting server with options: ${W0($)}`,$.verbose);let w=new URL(($.from?.startsWith("http")?$.from:`http://${$.from}`)||"localhost:5173"),A=new URL(($.to?.startsWith("http")?$.to:`http://${$.to}`)||"rpx.localhost"),Y=Number.parseInt(w.port)||(w.protocol.includes("https:")?443:80),f=[A.hostname];if(nJ($)&&!A.hostname.includes("localhost")&&!A.hostname.includes("127.0.0.1")){z("hosts",`Checking if hosts file entry exists for: ${A.hostname}`,$?.verbose);try{if(!(await KA(f,$.verbose))[0]){q.info(`Adding ${A.hostname} to hosts file...`),q.info("This may require sudo/administrator privileges");try{await HA(f,$.verbose)}catch(W){if(q.error("Failed to add hosts entry:",W.message),q.warn("You can manually add this entry to your hosts file:"),q.warn(`127.0.0.1 ${A.hostname}`),q.warn(`::1 ${A.hostname}`),w$.platform==="win32")q.warn("On Windows:"),q.warn("1. Run notepad as administrator"),q.warn("2. Open C:\\Windows\\System32\\drivers\\etc\\hosts");else q.warn("On Unix systems:"),q.warn("sudo nano /etc/hosts")}}else z("hosts",`Host entry already exists for ${A.hostname}`,$.verbose)}catch(U){q.error("Failed to check hosts file:",U.message)}}try{await hA(w.hostname,Y,$.verbose)}catch(U){z("server",`Connection test failed: ${U}`,$.verbose),q.error(U.message),q.warn("Continuing with proxy setup despite connection test failure..."),q.info("If you need to bypass connection testing, set environment variable RPX_BYPASS_CONNECTION_TEST=true")}let X=$._cachedSSLConfig||null;if($.https)try{if($.https===!0)$.https=wA({...$,to:A.hostname});if(X=await p0({...$,to:A.hostname,https:$.https}),!X){if(z("ssl",`Generating new certificates for ${A.hostname}`,$.verbose),await C1({...$,from:w.toString(),to:A.hostname,https:$.https}),X=await p0({...$,to:A.hostname,https:$.https}),!X)throw Error(`Failed to load SSL configuration after generating certificates for ${A.hostname}`)}}catch(U){throw z("server",`SSL setup failed: ${U}`,$.verbose),U}z("server",`Setting up reverse proxy with SSL config for ${A.hostname}`,$.verbose),await NR({...$,from:$.from||"localhost:5173",to:A.hostname,fromPort:Y,sourceUrl:{hostname:w.hostname,host:w.host},ssl:X})}async function qR($,w,A,Y,f,X,U,W,J,B,E){z("proxy",`Creating proxy server ${$} -> ${w} with cleanUrls: ${B}`,J);function j(G){let K={};for(let[R,h]of Object.entries(G))if(!R.startsWith(":"))K[R]=h;return K}let T=(G,K)=>{z("request",`Incoming request: ${G.method} ${G.url}`,J);let R=G.url||"/",h=G.method||"GET";if(G instanceof DF.Http2ServerRequest){let y=G.headers;h=y[":method"]||h,R=y[":path"]||R}if(B){if(!R.match(/\.[a-z0-9]+$/i))if(R.endsWith("/"))R=`${R}index.html`;else R=`${R}.html`}let N=j(G.headers);if(E)N.host=`${X.hostname}:${A}`,z("request",`Changed origin: setting host header to ${N.host}`,J);let M={hostname:X.hostname,port:A,path:R,method:h,headers:N};z("request",`Proxy request options: ${W0(M)}`,J);let C=kw.request(M,(y)=>{if(z("response",`Proxy response received with status ${y.statusCode}`,J),B&&y.statusCode===404){let B$=[];if(R.endsWith(".html"))B$.push(R.slice(0,-5));else if(!R.match(/\.[a-z0-9]+$/i))B$.push(`${R}.html`);if(!R.endsWith("/"))B$.push(`${R}/index.html`);if(B$.length>0){z("cleanUrls",`Trying alternative paths: ${B$.join(", ")}`,J);let A$=(C0)=>{if(C0.length===0){K.writeHead(y.statusCode||404,y.headers),y.pipe(K);return}let N0=C0[0],Zw={...M,path:N0},Q1=kw.request(Zw,(s0)=>{if(s0.statusCode===200)z("cleanUrls",`Found matching path: ${N0}`,J),K.writeHead(s0.statusCode,s0.headers),s0.pipe(K);else A$(C0.slice(1))});Q1.on("error",()=>A$(C0.slice(1))),Q1.end()};A$(B$);return}}let O={...y.headers,"Strict-Transport-Security":"max-age=31536000; includeSubDomains; preload","X-Content-Type-Options":"nosniff"};K.writeHead(y.statusCode||500,O),y.pipe(K)});C.on("error",(y)=>{z("request",`Proxy request failed: ${y}`,J),q.error("Proxy request failed:",y),K.writeHead(502),K.end(`Proxy Error: ${y.message}`)}),G.pipe(C)};if(z("server",`Creating server with SSL config: ${!!U}`,J),U)return new Promise((G,K)=>{try{let R=Bun.serve({port:Y,hostname:f,tls:{key:U.key,cert:U.cert,ca:U.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(h){let N=new URL(h.url);z("request",`Bun.serve received: ${h.method} ${N.pathname}`,J);let M=`http://${X.host}`,C=new URL(N.pathname+N.search,M);try{let y=new Headers(h.headers);if(y.set("host",X.host),E)y.set("origin",M);y.set("x-forwarded-for","127.0.0.1"),y.set("x-forwarded-proto","https"),y.set("x-forwarded-host",w);let O=await fetch(C.toString(),{method:h.method,headers:y,body:h.body,redirect:"manual"}),B$=new Headers(O.headers);if(B&&N.pathname.endsWith(".html")){let A$=N.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:A$}})}return new Response(O.body,{status:O.status,statusText:O.statusText,headers:B$})}catch(y){return z("request",`Proxy error: ${y}`,J),new Response(`Proxy Error: ${y}`,{status:502})}},error(h){return z("server",`Bun.serve error: ${h}`,J),new Response(`Server Error: ${h.message}`,{status:500})}});RA.add(R),_F({from:$,to:w,vitePluginUsage:W,listenPort:Y,ssl:!0,cleanUrls:B,verbose:J}),G()}catch(R){K(R)}});let F=kw.createServer(T);function H(G){return RA.add(G),new Promise((K,R)=>{G.listen(Y,f,()=>{z("server",`Server listening on port ${Y}`,J),_F({from:$,to:w,vitePluginUsage:W,listenPort:Y,ssl:!!U,cleanUrls:B,verbose:J}),K()}),G.on("error",(h)=>{z("server",`Server error: ${h}`,J),R(h)})})}return H(F)}async function NR($){z("setup",`Setting up reverse proxy: ${W0($)}`,$.verbose);let{from:w,to:A,fromPort:Y,sourceUrl:f,ssl:X,verbose:U,cleanup:W,vitePluginUsage:J,changeOrigin:B,cleanUrls:E}=$,j=80,T=443,F="0.0.0.0",H=$.portManager||hR,G=nJ($);try{if(G&&A&&!A.includes("localhost")&&!A.includes("127.0.0.1")){if(!(await KA([A],U))[0]){q.warn(`The hostname ${A} isn't in your hosts file. Adding it now...`);try{await HA([A],U),q.success(`Added ${A} to your hosts file.`)}catch(M){q.error(`Failed to add ${A} to your hosts file: ${M}`),q.info(`You may need to manually add '127.0.0.1 ${A}' to your /etc/hosts file.`)}}}else if(G&&w$.platform!=="darwin"&&A&&A.includes("localhost")&&!A.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await KA([A],U))[0]){z("hosts",`${A} not found in hosts file, adding...`,U);try{await HA([A],U)}catch(M){z("hosts",`Failed to add ${A} to hosts file: ${M}`,U)}}}if(X&&!H.usedPorts.has(j)){if(!await _w(j,F,U))z("setup","Starting HTTP redirect server",U),xF(U),H.usedPorts.add(j);else if(z("setup","Port 80 is in use, skipping HTTP redirect",U),U)q.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let K=X?T:j,R=await _w(K,F,U),h;if(R){if(z("setup",`Port ${K} is already in use`,U),U)q.warn(`Port ${K} is already in use. This may be another instance of rpx or another service.`);if(K===443){if(h=await H.getNextAvailablePort(3443,!0),z("setup",`Using port ${h} instead of ${K}`,U),U)q.info(`Using port ${h} instead. Access your site at https://${A}:${h}`)}else if(h=await H.getNextAvailablePort(K+1000,!0),z("setup",`Using port ${h} instead of ${K}`,U),U)q.info(`Using port ${h} instead. Access your site at http://${A}:${h}`)}else h=K,H.usedPorts.add(h),z("setup",`Using standard ${K===443?"HTTPS":"HTTP"} port ${K} for ${A}`,U);await qR(w,A,Y,h,F,f,X,J,U,E,B)}catch(K){z("setup",`Setup failed: ${K}`,U),q.error(`Failed to setup reverse proxy: ${K.message}`),UX({domains:[A],hosts:typeof W==="boolean"?W:W?.hosts,certs:typeof W==="boolean"?W:W?.certs,verbose:U,vitePluginUsage:J})}}function xF($){z("redirect","Starting HTTP redirect server",$);let w=kw.createServer((A,Y)=>{let f=A.headers.host||"";z("redirect",`Redirecting request from ${f}${A.url} to HTTPS`,$),Y.writeHead(301,{Location:`https://${f}${A.url}`}),Y.end()}).listen(80);RA.add(w),z("redirect","HTTP redirect server started",$)}function PF($){let w={...zU,...$};if(z("proxy",`Starting proxy with options: ${W0(w)}`,w?.verbose),w.viaDaemon){if(!w.from||!w.to){q.error("viaDaemon mode requires both `from` and `to`");return}ZJ({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((J)=>{q.error(`Failed to register with rpx daemon: ${J.message}`),w$.exit(1)});return}let A=w.to||"",Y=A.split(".").pop()?.toLowerCase()||"",f=w$.platform==="darwin"&&A&&!A.includes("localhost")&&!A.includes("127.0.0.1"),X=["dev","app","page","new","day","foo"],U=["test","localhost","local","example","invalid"];if(f&&X.includes(Y)&&w?.verbose)q.warn(`The .${Y} TLD may not work reliably for local development`),q.info(` Google owns .${Y} with HSTS preloading, which can bypass local DNS`),q.info(" Consider using a reserved TLD: .test, .localhost, or .local");if(f)Promise.resolve().then(() => (L1(),rf)).then(({setupDevelopmentDns:J})=>{J({domains:[A],verbose:w.verbose}).then((B)=>{if(B)Promise.resolve().then(()=>{if(w.verbose)if(U.includes(Y))q.success(`DNS server started for .${Y} domains`);else q.success(`DNS server started for .${Y} domains (hosts file entry also added)`)});else z("dns",`Could not start DNS server - ${A} may not resolve in browser`,w.verbose)})}).catch((J)=>{z("dns",`Failed to start DNS server: ${J}`,w.verbose)});let W={from:w.from,to:w.to,cleanUrls:w.cleanUrls,https:wA(w),cleanup:w.cleanup,vitePluginUsage:w.vitePluginUsage,changeOrigin:w.changeOrigin,verbose:w.verbose,regenerateUntrustedCerts:w.regenerateUntrustedCerts};z("proxy",`Server options: ${W0(W)}`,w.verbose),ZF(W).catch((J)=>{z("proxy",`Failed to start proxy: ${J}`,w.verbose),q.error(`Failed to start proxy: ${J.message}`),UX({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 yR($){return $?.verbose||!1}function nJ($){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 iF($){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 A=yR(w),Y=nJ(w);if(z("config",`Starting with config: ${W0(w,2)}`,A),z("config",`Is multi-proxy? ${"proxies"in w}`,A),z("config",`Hosts management enabled? ${Y}`,A),w.viaDaemon){let G="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((K)=>({id:K.id,from:K.from,to:K.to,path:K.path,cleanUrls:K.cleanUrls??w.cleanUrls,changeOrigin:K.changeOrigin??w.changeOrigin,pathRewrites:K.pathRewrites})):[{id:w.id,from:w.from,to:w.to,path:w.path,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}];await ZJ({proxies:G,verbose:A});return}if("proxies"in w&&Array.isArray(w.proxies)){z("servers",`Found ${w.proxies.length} proxies in config`,A);for(let H of w.proxies)if(H.start){let G=`${H.from}-${H.to}`;try{z("watch",`Starting command for ${G} with command: ${H.start.command}`,A),q.info(`Starting command for ${G}...`),await XX.startProcess(G,H.start,A);let K=new URL(H.from.startsWith("http")?H.from:`http://${H.from}`),R=K.hostname||"localhost",h=Number(K.port)||80;try{await hA(R,h,A),z("watch",`Dev server is ready at ${R}:${h}`,A)}catch(N){z("watch",`Connection check failed, but continuing with proxy setup: ${N}`,A),q.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(K){throw z("watch",`Failed to start command for ${G}: ${K}`,A),Error(`Failed to start command for ${G}: ${K}`)}}else z("watch",`No start command for proxy ${H.from} -> ${H.to}`,A)}else if("start"in w&&w.start){z("watch","Found start command in single proxy config",A);let H=`${w.from}-${w.to}`;try{if(w.start)z("watch",`Starting command: ${w.start.command}`,A),await XX.startProcess(H,w.start,A);let G=new URL(w.from?.startsWith("http")?w.from:`http://${w.from}`),K=G.hostname||"localhost",R=Number(G.port)||80;try{await hA(K,R,A),z("watch",`Dev server is ready at ${K}:${R}`,A)}catch(h){z("watch",`Connection check failed, but continuing with proxy setup: ${h}`,A),q.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(G){throw z("watch",`Failed to run start command: ${G}`,A),Error(`Failed to run start command: ${G}`)}}else z("watch","No start command found in config",A);let f="proxies"in w&&Array.isArray(w.proxies)?w.proxies[0]?.to:("to"in w)?w.to:"rpx.localhost";if(w$.platform!=="win32"&&(w.https||Y)){if(!Mw())try{z("sudo","Pre-acquiring sudo credentials for privileged operations",A),KR("sudo -v",{stdio:"inherit"})}catch{z("sudo","Could not pre-acquire sudo credentials",A)}}if(w.https){let H=await p0(w);if(!H){if(z("ssl",`No valid or trusted certificates found for ${f}, generating new ones`,w.verbose),await C1(w),H=await p0(w),!H)throw Error(`Failed to load SSL certificates after generation for ${f}`)}else z("ssl",`Using existing and trusted certificates for ${f}`,w.verbose);w._cachedSSLConfig=H}let X="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((H)=>({...H,https:w.https,cleanup:w.cleanup,cleanUrls:H.cleanUrls??("cleanUrls"in w?w.cleanUrls:!1),vitePluginUsage:w.vitePluginUsage,changeOrigin:H.changeOrigin??w.changeOrigin,verbose:A,_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,verbose:A,_cachedSSLConfig:w._cachedSSLConfig}],U=X.map((H)=>H.to||"rpx.localhost"),W=w._cachedSSLConfig,J=U.filter((H)=>H&&!H.includes("localhost")&&!H.includes("127.0.0.1")),B=["dev","app","page","new","day","foo"],E=["test","localhost","local","example","invalid"],j=[...new Set(J.map((H)=>H.split(".").pop()?.toLowerCase()))],T=j.filter((H)=>!!H&&B.includes(H));if(T.length>0&&A)q.warn(`The following TLDs may not work reliably for local development: ${T.map((H)=>`.${H}`).join(", ")}`),q.info(" These TLDs have HSTS preloading which can bypass local DNS"),q.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(Y&&w$.platform==="darwin"&&J.length>0){let{setupDevelopmentDns:H}=await Promise.resolve().then(() => (L1(),rf));if(await H({domains:J,verbose:A})){if(A)if(j.every((R)=>!!R&&E.includes(R)))q.success(`DNS server started for ${j.map((R)=>`.${R}`).join(", ")} domains`);else q.success(`DNS server started for ${j.map((R)=>`.${R}`).join(", ")} domains (hosts file entries also added)`)}else z("dns","Could not start DNS server - custom domains may not resolve",A)}let F=async()=>{z("cleanup","Starting cleanup handler",w.verbose);try{let{tearDownDevelopmentDns:H}=await Promise.resolve().then(() => (L1(),rf));await H({verbose:w.verbose})}catch(H){z("cleanup",`Error stopping DNS server: ${H}`,w.verbose)}try{await XX.stopAll(w.verbose)}catch(H){z("cleanup",`Error stopping processes: ${H}`,w.verbose)}await UX({domains:U,hosts:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.hosts,certs:typeof w.cleanup==="boolean"?w.cleanup:w.cleanup?.certs,verbose:w.verbose||!1})};if(w$.on("SIGINT",F),w$.on("SIGTERM",F),w$.on("uncaughtException",(H)=>{z("process",`Uncaught exception: ${H}`,!0),console.error("Uncaught exception:",H),F()}),W&&X.length>1){z("proxies",`Creating shared HTTPS server for ${X.length} domains`,A);let H=[],G=new Set;for(let y of X){let O=y.to||"rpx.localhost",B$=y.cleanUrls||!1,A$=y.path,C0=S1(A$);if(y.static)H.push({host:O,path:A$,route:{static:AA(y.static,B$),cleanUrls:B$,basePath:C0}}),z("proxies",`Route: ${O}${A$??""} → static ${typeof y.static==="string"?y.static:y.static.dir}`,A);else{let N0=new URL(y.from?.startsWith("http")?y.from:`http://${y.from}`);H.push({host:O,path:A$,route:{sourceHost:N0.host,cleanUrls:B$,changeOrigin:y.changeOrigin||!1,pathRewrites:y.pathRewrites,basePath:C0}}),z("proxies",`Route: ${O}${A$??""} → ${N0.host}`,A)}if(G.has(O))continue;if(G.add(O),Y&&!UA(O)&&!O.includes("localhost")&&!O.includes("127.0.0.1"))try{if(!(await KA([O],A))[0])await HA([O],A)}catch{z("hosts",`Could not add hosts entry for ${O}`,A)}}if(!await _w(80,"0.0.0.0",A))xF(A);let R=443;if(await _w(R,"0.0.0.0",A)){if(z("proxies",`Port ${R} is already in use, cannot start shared proxy`,A),A)q.warn(`Port ${R} is in use. Shared HTTPS proxy cannot start.`);return}let N=JA(H),M=fA((y,O)=>WA(N,y,O),A),C=XA(A);try{let y=Bun.serve({port:R,hostname:"0.0.0.0",tls:{key:W.key,cert:W.cert,ca:W.ca,requestCert:!1,rejectUnauthorized:!1},fetch(O,B$){return M(O,B$)},websocket:C,error(O){return z("server",`Shared proxy server error: ${O}`,A),new Response(`Server Error: ${O.message}`,{status:500})}});RA.add(y),z("proxies",`Shared HTTPS proxy listening on port ${R} for ${N.size} domains`,A)}catch(y){z("proxies",`Failed to start shared proxy: ${y}`,A),console.error("Failed to start shared HTTPS proxy:",y),F()}}else for(let H of X)try{let G=H.to||"rpx.localhost";z("proxy",`Starting proxy for ${G} with SSL config: ${!!W}`,H.verbose),await ZF({from:H.from||"localhost:5173",to:G,cleanUrls:H.cleanUrls||!1,https:H.https||!1,cleanup:H.cleanup||!1,vitePluginUsage:H.vitePluginUsage||!1,verbose:H.verbose||!1,_cachedSSLConfig:W,changeOrigin:H.changeOrigin||!1})}catch(G){z("proxies",`Failed to start proxy for ${H.to}: ${G}`,H.verbose),console.error(`Failed to start proxy for ${H.to}:`,G),F()}}function _F($){if($?.vitePluginUsage||!$?.verbose)return;if(console.log(""),console.log(` ${M0.green(M0.bold("rpx"))} ${M0.green(`v${RR}`)}`),console.log(` ${M0.green("➜")} ${M0.dim($?.from??"")} ${M0.dim("➜")} ${M0.cyan($?.ssl?`https://${$?.to}`:`http://${$?.to}`)}`),$?.listenPort!==($?.ssl?443:80))console.log(` ${M0.green("➜")} Listening on port ${$?.listenPort}`);if($?.cleanUrls)console.log(` ${M0.green("➜")} Clean URLs enabled`)}eU();var bS=new yw("rpx",{showTags:!1});function bF($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}d$.chdir(IR(MR(CR(import.meta.url)),".."));var t$=new GX("rpx"),cF="0.12.0";t$.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("--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").action(async($)=>{if(!$?.from||!$.to)return iF(pw);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,viaDaemon:$.viaDaemon||!1,id:$.id};if($.startCommand){let A={command:$.startCommand};if($.startCwd)A.cwd=$.startCwd;if($.startEnv)try{A.env=JSON.parse($.startEnv)}catch(Y){console.error("Failed to parse start-env JSON:",Y),d$.exit(1)}w.start=A}return PF(w)});t$.command("watch:start <proxy>","Start the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{let A=bF(pw)?pw.proxies.find((Y)=>Y.to===$||`${Y.from}-${Y.to}`===$):pw.to===$?pw:null;if(!A?.start)console.error(`No watch configuration found for proxy: ${$}`),d$.exit(1);try{await sf.startProcess($,A.start,w.verbose),console.log(`Started dev server for ${$}`)}catch(Y){console.error(`Failed to start dev server for ${$}:`,Y),d$.exit(1)}});t$.command("watch:stop <proxy>","Stop the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{try{await sf.stopProcess($,w.verbose),console.log(`Stopped dev server for ${$}`)}catch(A){console.error(`Failed to stop dev server for ${$}:`,A),d$.exit(1)}});t$.command("watch:stopall","Stop all running dev servers").option("--verbose","Enable verbose logging").action(async($)=>{try{await sf.stopAll($.verbose),console.log("Stopped all dev servers")}catch(w){console.error("Failed to stop all dev servers:",w),d$.exit(1)}});t$.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("--verbose","Enable verbose logging").action(async($)=>{try{await(await HF({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,verbose:$.verbose??!0})).done,d$.exit(0)}catch(w){console.error(`Failed to start rpx daemon: ${w.message}`),d$.exit(1)}});t$.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,A=await RF({rpxDir:$.rpxDir,timeoutMs:w,forceAfterTimeout:$.force!==!1,verbose:$.verbose});if(!A.stopped&&A.pid===null){console.log("rpx daemon is not running");return}if(!A.stopped){console.log(`rpx daemon pid=${A.pid} was already gone (cleaned stale lock)`);return}console.log(`rpx daemon pid=${A.pid} stopped${A.forced?" (SIGKILL)":""}`)});t$.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??j0(),A=await Gw(w),Y=await af(w),f=$.registryDir,X=await IF(f).catch(()=>[]);if($.json){console.log(JSON.stringify({running:Y,pid:A,pidFile:Hw(w),rpxDir:w,registryDir:f??Vw(),entries:X},null,2));return}if(!Y){if(console.log("rpx daemon: not running"),A!==null)console.log(`(stale pid file at ${Hw(w)} \u2192 pid ${A})`)}else console.log(`rpx daemon: running (pid=${A})`),console.log(`pid file: ${Hw(w)}`);if(console.log(`registry: ${f??Vw()}`),X.length===0){console.log("no registered hosts");return}console.log(`registered hosts (${X.length}):`);for(let U of X){let W=U.pid!==void 0?`, pid=${U.pid}`:"";console.log(` https://${U.to} \u2192 ${U.from} (id=${U.id}${W})`)}});t$.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"),d$.exit(1);if(!V1($.id))console.error(`invalid id: ${JSON.stringify($.id)} (must match /^[a-zA-Z0-9._-]+$/, \u2264128 chars)`),d$.exit(1);try{await yF({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}`),d$.exit(1)}if($.skipSpawn){console.log(`registered ${$.to} \u2192 ${$.from} (daemon spawn skipped)`);return}try{let w=await KF({rpxDir:$.rpxDir,verbose:$.verbose}),A=w.spawned?"spawned":"attached to";console.log(`registered https://${$.to} \u2192 ${$.from} (${A} 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`"),d$.exit(1)}});t$.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(!V1($))console.error(`invalid id: ${JSON.stringify($)}`),d$.exit(1);let A=await kJ($,w.registryDir,w.verbose);if(!A){console.log(`no registry entry for id=${$}`);return}await MF($,w.registryDir,w.verbose),console.log(`unregistered ${A.to} (id=${$})`)});t$.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??j0();if(await af(w)){console.log("rpx daemon is running \u2014 DNS overrides are managed by the daemon");return}await hF({rpxDir:w,verbose:$.verbose}),console.log("DNS reconcile complete")});t$.command("version","Show the version of the Reverse Proxy CLI").action(()=>{console.log(cF)});t$.version(cF);t$.help();t$.run();