@stacksjs/rpx 0.11.8 → 0.11.10
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 +167 -162
- package/dist/cert-inspect.d.ts +15 -0
- package/dist/chunk-3yvvmvc0.js +1 -0
- package/dist/{chunk-jpf41gb9.js → chunk-97manwts.js} +1 -1
- package/dist/chunk-krj531r2.js +1 -0
- package/dist/chunk-ppbddztz.js +156 -0
- package/dist/daemon.d.ts +4 -0
- package/dist/dns-state.d.ts +27 -0
- package/dist/dns.d.ts +43 -0
- package/dist/https.d.ts +30 -2
- package/dist/index.d.ts +48 -0
- package/dist/index.js +6 -154
- package/dist/macos-trust.d.ts +40 -0
- package/package.json +1 -1
- package/src/cert-inspect.ts +69 -0
- package/src/daemon.ts +41 -2
- package/src/dns-state.ts +116 -0
- package/src/dns.ts +252 -142
- package/src/https.ts +78 -67
- package/src/index.ts +53 -0
- package/src/macos-trust.ts +175 -0
- package/src/start.ts +7 -9
- package/dist/chunk-6z1nzq0x.js +0 -1
- package/dist/chunk-qcdcnadb.js +0 -1
package/dist/bin/cli.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
3
|
#!/usr/bin/env bun
|
|
4
|
-
import{createRequire as uF}from"node:module";var bF=Object.defineProperty;var iF=($)=>$;function cF($,w){this[$]=iF.bind(null,w)}var G8=($,w)=>{for(var A in w)bF($,A,{get:w[A],enumerable:!0,configurable:!0,set:cF.bind(w,A)})};var FU=($,w)=>()=>($&&(w=$($=0)),w);var b=uF(import.meta.url);import{existsSync as mE,statSync as dE}from"fs";import{existsSync as Oh,mkdirSync as lT,readdirSync as tT,writeFileSync as pT}from"fs";import{homedir as gw}from"os";import{dirname as gE,resolve as x$}from"path";import ww from"process";import{join as rT,relative as aT,resolve as lE}from"path";import _J from"process";import{existsSync as VW,mkdirSync as fK,readdirSync as ZK,writeFileSync as EK}from"fs";import{homedir as Bh}from"os";import{dirname as BK,resolve as Q$}from"path";import M1 from"process";import{join as sT,relative as oT,resolve as tE}from"path";import XJ from"process";import{existsSync as DW,mkdirSync as GK,readdirSync as qK,writeFileSync as RK}from"fs";import{dirname as KK,resolve as kJ}from"path";import _h from"process";import{Buffer as t0}from"buffer";import{createCipheriv as eT,createDecipheriv as $G,randomBytes as jh}from"crypto";import{closeSync as zh,createReadStream as pE,createWriteStream as wG,existsSync as Hh,fsyncSync as rE,openSync as aE,writeFileSync as AG}from"fs";import{access as JG,constants as sE,mkdir as UG,readdir as HJ,rename as oE,stat as lw,unlink as TJ,writeFile as Th}from"fs/promises";import{join as tw}from"path";import y$ from"process";import{pipeline as YG}from"stream/promises";import{createGzip as eE}from"zlib";import pw from"process";import x0 from"process";import{Buffer as k0}from"buffer";import{createCipheriv as hG,createDecipheriv as fG,randomBytes as Gh}from"crypto";import{closeSync as qh,createReadStream as $W,createWriteStream as ZG,existsSync as GJ,fsyncSync as wW,openSync as AW,writeFileSync as EG}from"fs";import{access as WG,constants as JW,mkdir as FG,readdir as qJ,rename as UW,stat as rw,unlink as RJ,writeFile as Rh}from"fs/promises";import{isAbsolute as BG,join as aw,resolve as jG}from"path";import D from"process";import{pipeline as zG}from"stream/promises";import{createGzip as YW}from"zlib";import sw from"process";import P0 from"process";import NJ from"process";import{existsSync as KJ}from"fs";import{resolve as Nh}from"path";import{existsSync as HG}from"fs";import{existsSync as TG,readdirSync as GG}from"fs";import{extname as Kh,resolve as hW}from"path";import qG from"process";import{join as R2,relative as N2,resolve as qW}from"path";import uJ from"process";import{Buffer as Q0}from"buffer";import{createCipheriv as I2,createDecipheriv as y2,randomBytes as Ch}from"crypto";import{closeSync as Sh,createReadStream as RW,createWriteStream as L2,existsSync as IJ,fsyncSync as NW,openSync as KW,writeFileSync as C2}from"fs";import{access as S2,constants as MW,mkdir as V2,readdir as yJ,rename as IW,stat as ow,unlink as LJ,writeFile as Vh}from"fs/promises";import{isAbsolute as D2,join as ew,resolve as O2}from"path";import O from"process";import{pipeline as _2}from"stream/promises";import{createGzip as yW}from"zlib";import $1 from"process";import b0 from"process";function mT($,w){this[$]=vT.bind(null,w)}class nh{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 U=this.generateKey($,A),Y=J??this.options.ttl,h=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:h}),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(!mE($))return!0;return dE($).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 U=mE(A)?dE(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 vh{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),h=performance.now()-J;return this.recordMetric({operation:$,duration:h,timestamp:U,...A}),Y}catch(Y){let h=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:h,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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 RG($,w={}){let J=Object.keys(w).sort().map((U)=>`${U}:${w[U]}`).join("|");return J?`${$}:${J}`:$}function NG($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function KG($){return $.getStats().size*2}function mh($,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 U of $)if(r(U)&&"name"in U){if(!J.find((h)=>r(h)&&("name"in h)&&h.name===U.name))J.push(U)}else if(r(U)&&"path"in U){if(!J.find((h)=>r(h)&&("path"in h)&&h.path===U.path))J.push(U)}else if(!J.some((Y)=>QJ(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);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 U=w[J];if(U===null||U===void 0)continue;else if(r(U)&&r(A[J]))A[J]=mh(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&r(U[0])&&r(A[J][0])){let Y=[...U];for(let h of A[J])if(r(h)&&"name"in h){if(!Y.find((f)=>r(f)&&("name"in f)&&f.name===h.name))Y.push(h)}else if(r(h)&&"path"in h){if(!Y.find((f)=>r(f)&&("path"in f)&&f.path===h.path))Y.push(h)}else if(!Y.some((Z)=>QJ(Z,h)))Y.push(h);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let h of A[J])if(!Y.includes(h))Y.push(h);A[J]=Y}else A[J]=U;else A[J]=U}return A}function QJ($,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(!QJ($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!QJ($[U],w[U]))return!1}return!0}return!1}function r($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function MG($,w){if(!DW($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return mh(w,J)}catch{return null}}catch{return null}}async function IG({name:$="",cwd:w,defaultConfig:A}){let J=w||_h.cwd(),U=[".ts",".js",".mjs",".cjs",".json"],Y=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let h of Y)for(let Z of U){let f=kJ(J,`${h}${Z}`),E=await MG(f,A);if(E!==null)return E}try{let h=kJ(J,"package.json");if(DW(h)){let f=(await import(h))[$];if(f&&typeof f==="object"&&!Array.isArray(f))try{return mh(A,f)}catch{}}}catch{}return A}function yG($,w={}){let A=XJ.cwd();while(A.includes("storage"))A=tE(A,"..");let J=tE(A,$||"");if(w?.relative)return oT(XJ.cwd(),J);return J}async function LG(){try{let $=await IG({name:"clarity",defaultConfig:SJ,cwd:XJ.cwd(),endpoint:"",headers:{}});return{...SJ,...$}}catch{return SJ}}function $$(){if(x0.env.NODE_ENV==="test"||x0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function CG(){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 OW{async format($){let w=await CG(),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:pw.pid,hostname:w(),environment:pw.env.NODE_ENV||"development",platform:pw.platform,version:pw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:pw.env.NODE_ENV||pw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class xJ{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={...kh},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??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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...VJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...VJ};return{...VJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:kh.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 U,Y=0,h=3,Z=1000;while(Y<h)try{try{try{await JG(this.config.logDirectory,sE.F_OK|sE.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await UG(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 f=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:t0.from($);try{if(!Hh(this.currentLogFile))await Th(this.currentLogFile,"",{mode:420});if(U=aE(this.currentLogFile,"a",420),AG(U,f,{flag:"a"}),rE(U),U!==void 0)zh(U),U=void 0;if((await lw(this.currentLogFile)).size===0){if(await Th(this.currentLogFile,f,{flag:"w",mode:420}),(await lw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let W=E;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(Y<h-1){let F=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${h}:`,F);let j=Z*2**Y;await new Promise((B)=>setTimeout(B,j)),Y++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(U!==void 0)try{zh(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(f){if(Y===h-1){let W=f,F=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),f}Y++;let E=Z*2**(Y-1);await new Promise((W)=>setTimeout(W,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 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($$())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((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,f])=>f.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,h=Math.max(1,Y);if(U.length>h)for(let[Z]of U.slice(h))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return jh(16).toString("hex")}generateKey(){return jh(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=jh(16),J=eT("aes-256-gcm",w,A),U=t0.concat([J.update($,"utf8"),J.final()]),Y=J.getAuthTag();return{encrypted:t0.concat([A,U,Y]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=eE(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(t0.from(t0.concat(U)))),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 lw(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 U=await HJ(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await lw(A).catch(()=>null))try{if(await oE(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await TJ(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await Th(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await lw(A).catch(()=>null))await oE(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await HJ(this.config.logDirectory)).filter((h)=>h.startsWith(this.name)).sort((h,Z)=>Z.localeCompare(h));for(let h of Y.slice(w.maxFiles))await TJ(tw(this.config.logDirectory,h))}}}async compressLogFile($,w){let A=pE($),J=wG(w),U=eE();await YG(A,U,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()})),Hh(this.currentLogFile))try{let $=aE(this.currentLogFile,"r+");rE($),zh($)}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 HJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await TJ(tw(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:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=y$.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${g.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}async log($,w,...A){let J=new Date,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);if(this.fancy&&!$$()){let E=uW[$],W=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:g.gray(h),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.error(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:g.green(h),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.error(F),Z){let j=Z.split(`
|
|
5
|
-
`);for(let
|
|
6
|
-
`;if(Z
|
|
7
|
-
`;
|
|
8
|
-
`,E=E.replace(this.ANSI_PATTERN,""),this.fancy
|
|
9
|
-
`),
|
|
10
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(U)}async prompt($){if(
|
|
11
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(Y)}progress($,w=""){if(!this.enabled||!this.fancy
|
|
12
|
-
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||$$()||!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($$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await HJ(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 lw(Y)).mtime>=$.before)continue}catch(h){console.error(`Failed to get stats for file ${Y}:`,h);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 TJ(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function CJ($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&v(w[0])&&"id"in w[0]&&w[0].id===3&&v(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(v(w)&&v($)&&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(v($)&&"arr"in $&&Array.isArray($.arr)&&v(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&v(w[0])&&v($[0])){let J=[...w];for(let U of $)if(v(U)&&"name"in U){if(!J.find((h)=>v(h)&&("name"in h)&&h.name===U.name))J.push(U)}else if(v(U)&&"path"in U){if(!J.find((h)=>v(h)&&("path"in h)&&h.path===U.path))J.push(U)}else if(!J.some((Y)=>PJ(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}if(!v(w)||!v($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let U=w[J];if(U===null||U===void 0)continue;else if(v(U)&&v(A[J]))A[J]=CJ(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&v(U[0])&&v(A[J][0])){let Y=[...U];for(let h of A[J])if(v(h)&&"name"in h){if(!Y.find((f)=>v(f)&&("name"in f)&&f.name===h.name))Y.push(h)}else if(v(h)&&"path"in h){if(!Y.find((f)=>v(f)&&("path"in f)&&f.path===h.path))Y.push(h)}else if(!Y.some((Z)=>PJ(Z,h)))Y.push(h);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let h of A[J])if(!Y.includes(h))Y.push(h);A[J]=Y}else A[J]=U;else A[J]=U}return A}function dh($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:CJ($,w);if(Array.isArray($))return A==="replace"?w:CJ($,w);if(!v(w)||!v($))return w;let J={...$};for(let U of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,U))continue;let Y=w[U],h=J[U];if(Y===null||Y===void 0)continue;if(Array.isArray(Y)||Array.isArray(h))if(A==="replace")J[U]=Y;else J[U]=CJ(h,Y);else if(v(Y)&&v(h))J[U]=dh(h,Y,A);else J[U]=Y}return J}function PJ($,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(!PJ($[A],w[A]))return!1;return!0}if(v($)&&v(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!PJ($[U],w[U]))return!1}return!0}return!1}function v($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function MJ($,w,A="replace"){if(!VW($))return null;try{let J=await import($),U=J.default||J;if(typeof U!=="object"||U===null||Array.isArray(U))return null;try{return dh(w,U,A)}catch{return null}}catch{return null}}function SG($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),U={...w};function Y(h,Z=[]){let f={...h};for(let[E,W]of Object.entries(h)){let F=[...Z,E],j=(H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase(),B=`${J}_${F.map(j).join("_")}`,T=`${J}_${F.map((H)=>H.toUpperCase()).join("_")}`;if(A)C$.info(`Checking environment variable ${B} for config ${$}.${F.join(".")}`);if(typeof W==="object"&&W!==null&&!Array.isArray(W))f[E]=Y(W,F);else{let H=M1.env[B]||M1.env[T];if(H!==void 0){if(A)C$.info(`Using environment variable ${H?B:T} for config ${$}.${F.join(".")}`);if(typeof W==="number")f[E]=Number(H);else if(typeof W==="boolean")f[E]=H.toLowerCase()==="true";else if(Array.isArray(W))try{let q=JSON.parse(H);if(Array.isArray(q))f[E]=q;else f[E]=H.split(",").map((G)=>G.trim())}catch{f[E]=H.split(",").map((q)=>q.trim())}else f[E]=H}}}return f}return Y(U)}async function VG({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:U,verbose:Y=!1,checkEnv:h=!0,arrayStrategy:Z="replace"}){let f=h&&typeof U==="object"&&U!==null&&!Array.isArray(U)?SG($,U,Y):U,E=A||M1.cwd(),W=[".ts",".js",".mjs",".cjs",".json"];if(Y)C$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let F=[$,`.${$}`].filter(Boolean),j=[`${$}.config`,`.${$}.config`].filter(Boolean),B=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],H=Array.from(new Set([E,Q$(E,"config"),Q$(E,".config"),J?Q$(E,J):void 0].filter(Boolean)));for(let q of H){if(Y)C$.info(`Searching for configuration in: ${q}`);let R=[Q$(E,"config"),Q$(E,".config")].concat(J?[Q$(E,J)]:[]).includes(q)?[...F,...j,...B,...T]:[...j,...F,...T,...B];for(let K of R)for(let L of W){let C=Q$(q,`${K}${L}`),M=await MJ(C,f,Z);if(M!==null){if(Y)C$.success(`Configuration loaded from: ${C}`);return M}}}if($){let q=Q$(Bh(),".config",$),G=["config",`${$}.config`];if(w)G.push(`${w}.config`);if(Y)C$.info(`Checking user config directory: ${q}`);for(let R of G)for(let K of W){let L=Q$(q,`${R}${K}`),C=await MJ(L,f,Z);if(C!==null){if(Y)C$.success(`Configuration loaded from user config directory: ${L}`);return C}}}if($){let q=Q$(Bh(),".config"),G=[`.${$}.config`];if(w)G.push(`.${w}.config`);if(Y)C$.info(`Checking user config directory for dotfile configs: ${q}`);for(let R of G)for(let K of W){let L=Q$(q,`${R}${K}`),C=await MJ(L,f,Z);if(C!==null){if(Y)C$.success(`Configuration loaded from user config directory dotfile: ${L}`);return C}}}if($){let q=Bh(),G=[`.${$}.config`,`.${$}`];if(w)G.push(`.${w}.config`),G.push(`.${w}`);if(Y)C$.info(`Checking user home directory for dotfile configs: ${q}`);for(let R of G)for(let K of W){let L=Q$(q,`${R}${K}`),C=await MJ(L,f,Z);if(C!==null){if(Y)C$.success(`Configuration loaded from user home directory: ${L}`);return C}}}try{let q=Q$(E,"package.json");if(VW(q)){let G=await import(q),R=G[$];if(!R&&w){if(R=G[w],R&&Y)C$.success(`Using alias "${w}" configuration from package.json`)}if(R&&typeof R==="object"&&!Array.isArray(R))try{if(Y)C$.success(`Configuration loaded from package.json: ${R===G[$]?$:w}`);return dh(f,R,Z)}catch(K){if(Y)C$.warn("Failed to merge package.json config:",K)}}}catch(q){if(Y)C$.warn("Failed to load package.json:",q)}if(Y)C$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return f}function DG($,w={}){let A=_J.cwd();while(A.includes("storage"))A=lE(A,"..");let J=lE(A,$||"");if(w?.relative)return aT(_J.cwd(),J);return J}async function OG(){try{let $=await VG({name:"clarity",alias:"logging",defaultConfig:DJ,cwd:_J.cwd()});return{...DJ,...$||{}}}catch{return DJ}}function E$(){if(P0.env.NODE_ENV==="test"||P0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function _G(){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 _W{async format($){let w=await _G(),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:sw.pid,hostname:w(),environment:sw.env.NODE_ENV||"development",platform:sw.platform,version:sw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:sw.env.NODE_ENV||sw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class bJ{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={...Qh},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new _W,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},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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...OJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...OJ};return{...OJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:Qh.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 A=(async()=>{let U,Y=0,h=3,Z=1000;while(Y<h)try{try{try{await WG(this.config.logDirectory,JW.F_OK|JW.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await FG(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 f=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:k0.from($);try{if(!GJ(this.currentLogFile))await Rh(this.currentLogFile,"",{mode:420});if(U=AW(this.currentLogFile,"a",420),EG(U,f,{flag:"a"}),wW(U),U!==void 0)qh(U),U=void 0;if((await rw(this.currentLogFile)).size===0){if(await Rh(this.currentLogFile,f,{flag:"w",mode:420}),(await rw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let W=E;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(Y<h-1){let F=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${h}:`,F);let j=Z*2**Y;await new Promise((B)=>setTimeout(B,j)),Y++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(U!==void 0)try{qh(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(f){if(Y===h-1){let W=f,F=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),f}Y++;let E=Z*2**(Y-1);await new Promise((W)=>setTimeout(W,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 aw(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 aw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return aw(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 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((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,f])=>f.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,h=Math.max(1,Y);if(U.length>h)for(let[Z]of U.slice(h))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return Gh(16).toString("hex")}generateKey(){return Gh(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=Gh(16),J=hG("aes-256-gcm",w,A),U=k0.isBuffer($)?$:k0.from($,"utf8"),Y=J.update(U),h=J.final(),Z=Y.length+h.length,f=J.getAuthTag(),E=k0.allocUnsafe(16+Z+16);return A.copy(E,0),Y.copy(E,16),h.copy(E,16+Y.length),f.copy(E,16+Z),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=YW(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(k0.from(k0.concat(U)))),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 rw(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 U=await qJ(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await rw(A).catch(()=>null))try{if(await UW(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await RJ(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await Rh(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await rw(A).catch(()=>null))await UW(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await qJ(this.config.logDirectory)).filter((h)=>h.startsWith(this.name)).sort((h,Z)=>Z.localeCompare(h));for(let h of Y.slice(w.maxFiles))await RJ(aw(this.config.logDirectory,h))}}}async compressLogFile($,w){let A=$W($),J=ZG(w),U=YW();await zG(A,U,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()})),GJ(this.currentLogFile))try{let $=AW(this.currentLogFile,"r+");wW($),qh($)}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 w=(await qJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await RJ(aw(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||E$())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:J="",message:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=D.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${k.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=k.underline(k.blue(J)),h=this.toAbsoluteFilePath(U);if(h&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let Z=`file://${encodeURI(h)}`,f="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${Z}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),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(E$())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(BG(w)||w.startsWith("./")||w.startsWith("../"))w=jG(w);else return null;return GJ(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);let{consoleText:f,fileText:E}=this.buildOutputTexts(h);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":nW[$],j=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",B;switch($){case"debug":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:k.gray(f),level:$}),console.error(B);break;case"info":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"success":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:k.green(f),level:$}),console.error(B);break;case"warning":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"error":if(B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.error(B),Z){let T=Z.split(`
|
|
13
|
-
`);for(let H of T)if(H.trim()&&!H.includes(
|
|
14
|
-
`;if(
|
|
15
|
-
`;if(
|
|
16
|
-
`);if(this[
|
|
17
|
-
`,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let
|
|
18
|
-
`),
|
|
19
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(
|
|
20
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(
|
|
21
|
-
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||
|
|
4
|
+
import{createRequire as iF}from"node:module";var xF=Object.defineProperty;var PF=($)=>$;function bF($,w){this[$]=PF.bind(null,w)}var JZ=($,w)=>{for(var A in w)xF($,A,{get:w[A],enumerable:!0,configurable:!0,set:bF.bind(w,A)})};var X$=($,w)=>()=>($&&(w=$($=0)),w);var i=iF(import.meta.url);import{existsSync as NZ,statSync as RZ}from"fs";import{existsSync as mj,mkdirSync as b5,readdirSync as i5,readFileSync as dj,writeFileSync as c5}from"fs";import{homedir as Iw}from"os";import{dirname as n5,resolve as a$}from"path";import cA from"process";import{existsSync as KZ,statSync as MZ}from"fs";import{existsSync as WY,mkdirSync as gj,readdirSync as lj,writeFileSync as tj}from"fs";import{homedir as Cw}from"os";import{dirname as IZ,resolve as D$}from"path";import fw from"process";import{join as pj,relative as rj,resolve as CZ}from"path";import LA from"process";import{existsSync as ZW,mkdirSync as o5,readdirSync as e5,writeFileSync as $6}from"fs";import{homedir as mU}from"os";import{dirname as J6,resolve as _$}from"path";import K1 from"process";import{join as aj,relative as sj,resolve as yZ}from"path";import SA from"process";import{existsSync as WW,mkdirSync as W6,readdirSync as E6,writeFileSync as B6}from"fs";import{dirname as F6,resolve as VA}from"path";import EY from"process";import{Buffer as l0}from"buffer";import{createCipheriv as oj,createDecipheriv as ej,randomBytes as dU}from"crypto";import{closeSync as gU,createReadStream as LZ,createWriteStream as $z,existsSync as lU,fsyncSync as SZ,openSync as VZ,writeFileSync as wz}from"fs";import{access as Az,constants as OZ,mkdir as Jz,readdir as fA,rename as XZ,stat as yw,unlink as ZA,writeFile as tU}from"fs/promises";import{join as Lw}from"path";import R$ from"process";import{pipeline as Uz}from"stream/promises";import{createGzip as _Z}from"zlib";import Sw from"process";import I0 from"process";import{Buffer as R0}from"buffer";import{createCipheriv as Yz,createDecipheriv as fz,randomBytes as pU}from"crypto";import{closeSync as rU,createReadStream as DZ,createWriteStream as Zz,existsSync as WA,fsyncSync as kZ,openSync as QZ,writeFileSync as Wz}from"fs";import{access as Ez,constants as xZ,mkdir as Bz,readdir as EA,rename as PZ,stat as Vw,unlink as BA,writeFile as aU}from"fs/promises";import{isAbsolute as hz,join as Ow,resolve as Fz}from"path";import V from"process";import{pipeline as jz}from"stream/promises";import{createGzip as bZ}from"zlib";import Xw from"process";import C0 from"process";import hA from"process";import{existsSync as FA}from"fs";import{resolve as sU}from"path";import{existsSync as zz}from"fs";import{existsSync as Hz,readdirSync as Tz}from"fs";import{extname as oU,resolve as iZ}from"path";import Gz from"process";import{join as qz,relative as Nz,resolve as cZ}from"path";import OA from"process";import{Buffer as K0}from"buffer";import{createCipheriv as Rz,createDecipheriv as Kz,randomBytes as eU}from"crypto";import{closeSync as $Y,createReadStream as uZ,createWriteStream as Mz,existsSync as jA,fsyncSync as vZ,openSync as nZ,writeFileSync as Iz}from"fs";import{access as Cz,constants as mZ,mkdir as yz,readdir as zA,rename as dZ,stat as _w,unlink as HA,writeFile as wY}from"fs/promises";import{isAbsolute as Lz,join as Dw,resolve as Sz}from"path";import O from"process";import{pipeline as Vz}from"stream/promises";import{createGzip as gZ}from"zlib";import kw from"process";import y0 from"process";import GA from"process";import{existsSync as qA}from"fs";import{resolve as ZY}from"path";import{existsSync as p9}from"fs";class YW{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 U=this.generateKey($,A),Y=J??this.options.ttl,f=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:f}),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(!NZ($))return!0;return RZ($).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 U=NZ(A)?RZ(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 fW{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),f=performance.now()-J;return this.recordMetric({operation:$,duration:f,timestamp:U,...A}),Y}catch(Y){let f=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:f,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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 _z($,w){this[$]=Xz.bind(null,w)}class KY{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 U=this.generateKey($,A),Y=J??this.options.ttl,f=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:f}),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(!KZ($))return!0;return MZ($).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 U=KZ(A)?MZ(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 MY{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),f=performance.now()-J;return this.recordMetric({operation:$,duration:f,timestamp:U,...A}),Y}catch(Y){let f=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:f,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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 Qz($,w={}){let J=Object.keys(w).sort().map((U)=>`${U}:${w[U]}`).join("|");return J?`${$}:${J}`:$}function xz($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function Pz($){return $.getStats().size*2}function IY($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&p(w[0])&&"id"in w[0]&&w[0].id===3&&p(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(p(w)&&p($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(p($)&&"arr"in $&&Array.isArray($.arr)&&p(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&p(w[0])&&p($[0])){let J=[...w];for(let U of $)if(p(U)&&"name"in U){if(!J.find((f)=>p(f)&&("name"in f)&&f.name===U.name))J.push(U)}else if(p(U)&&"path"in U){if(!J.find((f)=>p(f)&&("path"in f)&&f.path===U.path))J.push(U)}else if(!J.some((Y)=>XA(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}if(!p(w)||!p($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let U=w[J];if(U===null||U===void 0)continue;else if(p(U)&&p(A[J]))A[J]=IY(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&p(U[0])&&p(A[J][0])){let Y=[...U];for(let f of A[J])if(p(f)&&"name"in f){if(!Y.find((Z)=>p(Z)&&("name"in Z)&&Z.name===f.name))Y.push(f)}else if(p(f)&&"path"in f){if(!Y.find((Z)=>p(Z)&&("path"in Z)&&Z.path===f.path))Y.push(f)}else if(!Y.some((W)=>XA(W,f)))Y.push(f);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let f of A[J])if(!Y.includes(f))Y.push(f);A[J]=Y}else A[J]=U;else A[J]=U}return A}function XA($,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(!XA($[A],w[A]))return!1;return!0}if(p($)&&p(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!XA($[U],w[U]))return!1}return!0}return!1}function p($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function bz($,w){if(!WW($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return IY(w,J)}catch{return null}}catch{return null}}async function iz({name:$="",cwd:w,defaultConfig:A}){let J=w||EY.cwd(),U=[".ts",".js",".mjs",".cjs",".json"],Y=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let f of Y)for(let W of U){let Z=VA(J,`${f}${W}`),E=await bz(Z,A);if(E!==null)return E}try{let f=VA(J,"package.json");if(WW(f)){let Z=(await import(f))[$];if(Z&&typeof Z==="object"&&!Array.isArray(Z))try{return IY(A,Z)}catch{}}}catch{}return A}function cz($,w={}){let A=SA.cwd();while(A.includes("storage"))A=yZ(A,"..");let J=yZ(A,$||"");if(w?.relative)return sj(SA.cwd(),J);return J}async function uz(){try{let $=await iz({name:"clarity",defaultConfig:KA,cwd:SA.cwd(),endpoint:"",headers:{}});return{...KA,...$}}catch{return KA}}function e(){if(I0.env.NODE_ENV==="test"||I0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function vz(){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 BW{async format($){let w=await vz(),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:Sw.pid,hostname:w(),environment:Sw.env.NODE_ENV||"development",platform:Sw.platform,version:Sw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Sw.env.NODE_ENV||Sw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class _A{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={...hY},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new BW,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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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:hY.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 U,Y=0,f=3,W=1000;while(Y<f)try{try{try{await Az(this.config.logDirectory,OZ.F_OK|OZ.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await Jz(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 Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:l0.from($);try{if(!lU(this.currentLogFile))await tU(this.currentLogFile,"",{mode:420});if(U=VZ(this.currentLogFile,"a",420),wz(U,Z,{flag:"a"}),SZ(U),U!==void 0)gU(U),U=void 0;if((await yw(this.currentLogFile)).size===0){if(await tU(this.currentLogFile,Z,{flag:"w",mode:420}),(await yw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let B=E;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(Y<f-1){let h=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${f}:`,h);let j=W*2**Y;await new Promise((F)=>setTimeout(F,j)),Y++;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(U!==void 0)try{gU(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(Z){if(Y===f-1){let B=Z,h=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),Z}Y++;let E=W*2**(Y-1);await new Promise((B)=>setTimeout(B,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 Lw(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 Lw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return Lw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(e())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((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,W],[,Z])=>Z.createdAt.getTime()-W.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,f=Math.max(1,Y);if(U.length>f)for(let[W]of U.slice(f))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return dU(16).toString("hex")}generateKey(){return dU(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=dU(16),J=oj("aes-256-gcm",w,A),U=l0.concat([J.update($,"utf8"),J.final()]),Y=J.getAuthTag();return{encrypted:l0.concat([A,U,Y]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=_Z(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(l0.from(l0.concat(U)))),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;let $=await yw(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 U=await fA(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await yw(A).catch(()=>null))try{if(await XZ(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await ZA(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await tU(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await yw(A).catch(()=>null))await XZ(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await fA(this.config.logDirectory)).filter((f)=>f.startsWith(this.name)).sort((f,W)=>W.localeCompare(f));for(let f of Y.slice(w.maxFiles))await ZA(Lw(this.config.logDirectory,f))}}}async compressLogFile($,w){let A=LZ($),J=$z(w),U=_Z();await Uz(A,U,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()})),lU(this.currentLogFile))try{let $=VZ(this.currentLogFile,"r+");SZ($),gU($)}catch($){console.error(`Error flushing file: ${$}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let $ of this.pendingOperations)if(typeof $.cancel==="function")$.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch($){console.error("Error waiting for pending operations:",$)}if(!e()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await fA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await ZA(Lw(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?d.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=R$.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${d.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}async log($,w,...A){let J=new Date,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);if(this.fancy&&!e()){let E=RW[$],B=this.options.showTags!==!1&&this.name?d.gray(this.formatTag(this.name)):"",h;switch($){case"debug":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:d.gray(f),level:$}),console.error(h);break;case"info":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.error(h);break;case"success":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:d.green(f),level:$}),console.error(h);break;case"warning":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.warn(h);break;case"error":if(h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.error(h),W){let j=W.split(`
|
|
5
|
+
`);for(let F of j)if(F.trim()&&!F.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:d.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!e()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}if(!this.shouldLog($))return;let Z=`${Y} ${this.environment}.${$.toUpperCase()}: ${f}
|
|
6
|
+
`;if(W)Z+=`${W}
|
|
7
|
+
`;Z=Z.replace(this.ANSI_PATTERN,""),await this.writeToFile(Z)}time($){let w=performance.now();if(this.fancy&&!e()){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:d.blue("◐"),tag:A,message:`${d.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),E=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
|
|
8
|
+
`,E=E.replace(this.ANSI_PATTERN,""),this.fancy&&!e()){let B=this.options.showTags!==!1&&this.name?d.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:d.green("✓"),tag:B,message:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!e())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 _A(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(!lU(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return LZ(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"),U=J.slice(0,16),Y=J.slice(-16),f=J.slice(16,-16),W=ej("aes-256-gcm",A,U);return W.setAuthTag(Y),l0.concat([W.update(f),W.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 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);if(this.fancy&&!e()){let Y=$.split(`
|
|
9
|
+
`),f=Math.max(...Y.map((B)=>B.length))+2,W=`┌${"─".repeat(f)}┐`,Z=`└${"─".repeat(f)}┘`,E=Y.map((B)=>{let h=" ".repeat(f-B.length-2);return`│ ${B}${h} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:A,message:d.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:A,message:d.cyan(W)})),E.forEach((B)=>console.error(this.formatConsoleMessage({timestamp:A,message:d.cyan(B),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:d.cyan(Z),showTimestamp:!1}))}else if(!e())console.error(`${J} ${this.environment}.INFO: [BOX] ${$}`);let U=`${J} ${this.environment}.INFO: [BOX] ${$}
|
|
10
|
+
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(U)}async prompt($){if(e())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${d.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=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(U==="y"||U==="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 f=/%([sdijfo%])/g,W=0;if(A=$.replace(f,(Z,E)=>{if(E==="%")return"%";if(W>=w.length)return Z;let B=w[W++];switch(E){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 Z}}),W<w.length)A+=` ${w.slice(W).map((Z)=>typeof Z==="object"?JSON.stringify(Z,null,2):String(Z)).join(" ")}`}if(this.fancy&&!e()){let f=this.options.showTags!==!1&&this.name?d.gray(this.formatTag(this.name)):"",W=d.blue("◐");console.error(`${W} ${f} ${d.cyan(A)}`)}let Y=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
|
|
11
|
+
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(Y)}progress($,w=""){if(!this.enabled||!this.fancy||e()||$<=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:(f,W)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||e())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,f)),W!==void 0)this.activeProgressBar.message=W;let Z=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,Z)},finish:(f)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||e())return;if(this.activeProgressBar.current=this.activeProgressBar.total,f!==void 0)this.activeProgressBar.message=f;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(f,W="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||e())return;R$.stdout.write(`${"\r".padEnd(R$.stdout.columns||80)}\r`),this.log(W,f),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||e()||!R$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),U=$.barLength-J,Y=d.green("━".repeat(J)),f=d.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=w||A===100?d.green("✓"):d.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${d.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=R$.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,R$.stdout.write($.lastRenderedLine),w)R$.stdout.write(`
|
|
12
|
+
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||e()||!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(e()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await fA(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=Lw(this.config.logDirectory,J);if($.before)try{if((await yw(Y)).mtime>=$.before)continue}catch(f){console.error(`Failed to get stats for file ${Y}:`,f);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 ZA(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function RA($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&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 U of $)if(c(U)&&"name"in U){if(!J.find((f)=>c(f)&&("name"in f)&&f.name===U.name))J.push(U)}else if(c(U)&&"path"in U){if(!J.find((f)=>c(f)&&("path"in f)&&f.path===U.path))J.push(U)}else if(!J.some((Y)=>DA(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);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 U=w[J];if(U===null||U===void 0)continue;else if(c(U)&&c(A[J]))A[J]=RA(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&c(U[0])&&c(A[J][0])){let Y=[...U];for(let f of A[J])if(c(f)&&"name"in f){if(!Y.find((Z)=>c(Z)&&("name"in Z)&&Z.name===f.name))Y.push(f)}else if(c(f)&&"path"in f){if(!Y.find((Z)=>c(Z)&&("path"in Z)&&Z.path===f.path))Y.push(f)}else if(!Y.some((W)=>DA(W,f)))Y.push(f);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let f of A[J])if(!Y.includes(f))Y.push(f);A[J]=Y}else A[J]=U;else A[J]=U}return A}function CY($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:RA($,w);if(Array.isArray($))return A==="replace"?w:RA($,w);if(!c(w)||!c($))return w;let J={...$};for(let U of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,U))continue;let Y=w[U],f=J[U];if(Y===null||Y===void 0)continue;if(Array.isArray(Y)||Array.isArray(f))if(A==="replace")J[U]=Y;else J[U]=RA(f,Y);else if(c(Y)&&c(f))J[U]=CY(f,Y,A);else J[U]=Y}return J}function DA($,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(!DA($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!DA($[U],w[U]))return!1}return!0}return!1}function c($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function TA($,w,A="replace"){if(!ZW($))return null;try{let J=await import($),U=J.default||J;if(typeof U!=="object"||U===null||Array.isArray(U))return null;try{return CY(w,U,A)}catch{return null}}catch{return null}}function nz($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),U={...w};function Y(f,W=[]){let Z={...f};for(let[E,B]of Object.entries(f)){let h=[...W,E],j=(H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${J}_${h.map(j).join("_")}`,T=`${J}_${h.map((H)=>H.toUpperCase()).join("_")}`;if(A)M$.info(`Checking environment variable ${F} for config ${$}.${h.join(".")}`);if(typeof B==="object"&&B!==null&&!Array.isArray(B))Z[E]=Y(B,h);else{let H=K1.env[F]||K1.env[T];if(H!==void 0){if(A)M$.info(`Using environment variable ${H?F:T} for config ${$}.${h.join(".")}`);if(typeof B==="number")Z[E]=Number(H);else if(typeof B==="boolean")Z[E]=H.toLowerCase()==="true";else if(Array.isArray(B))try{let G=JSON.parse(H);if(Array.isArray(G))Z[E]=G;else Z[E]=H.split(",").map((q)=>q.trim())}catch{Z[E]=H.split(",").map((G)=>G.trim())}else Z[E]=H}}}return Z}return Y(U)}async function mz({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:U,verbose:Y=!1,checkEnv:f=!0,arrayStrategy:W="replace"}){let Z=f&&typeof U==="object"&&U!==null&&!Array.isArray(U)?nz($,U,Y):U,E=A||K1.cwd(),B=[".ts",".js",".mjs",".cjs",".json"];if(Y)M$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let h=[$,`.${$}`].filter(Boolean),j=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],H=Array.from(new Set([E,_$(E,"config"),_$(E,".config"),J?_$(E,J):void 0].filter(Boolean)));for(let G of H){if(Y)M$.info(`Searching for configuration in: ${G}`);let N=[_$(E,"config"),_$(E,".config")].concat(J?[_$(E,J)]:[]).includes(G)?[...h,...j,...F,...T]:[...j,...h,...T,...F];for(let K of N)for(let C of B){let y=_$(G,`${K}${C}`),S=await TA(y,Z,W);if(S!==null){if(Y)M$.success(`Configuration loaded from: ${y}`);return S}}}if($){let G=_$(mU(),".config",$),q=["config",`${$}.config`];if(w)q.push(`${w}.config`);if(Y)M$.info(`Checking user config directory: ${G}`);for(let N of q)for(let K of B){let C=_$(G,`${N}${K}`),y=await TA(C,Z,W);if(y!==null){if(Y)M$.success(`Configuration loaded from user config directory: ${C}`);return y}}}if($){let G=_$(mU(),".config"),q=[`.${$}.config`];if(w)q.push(`.${w}.config`);if(Y)M$.info(`Checking user config directory for dotfile configs: ${G}`);for(let N of q)for(let K of B){let C=_$(G,`${N}${K}`),y=await TA(C,Z,W);if(y!==null){if(Y)M$.success(`Configuration loaded from user config directory dotfile: ${C}`);return y}}}if($){let G=mU(),q=[`.${$}.config`,`.${$}`];if(w)q.push(`.${w}.config`),q.push(`.${w}`);if(Y)M$.info(`Checking user home directory for dotfile configs: ${G}`);for(let N of q)for(let K of B){let C=_$(G,`${N}${K}`),y=await TA(C,Z,W);if(y!==null){if(Y)M$.success(`Configuration loaded from user home directory: ${C}`);return y}}}try{let G=_$(E,"package.json");if(ZW(G)){let q=await import(G),N=q[$];if(!N&&w){if(N=q[w],N&&Y)M$.success(`Using alias "${w}" configuration from package.json`)}if(N&&typeof N==="object"&&!Array.isArray(N))try{if(Y)M$.success(`Configuration loaded from package.json: ${N===q[$]?$:w}`);return CY(Z,N,W)}catch(K){if(Y)M$.warn("Failed to merge package.json config:",K)}}}catch(G){if(Y)M$.warn("Failed to load package.json:",G)}if(Y)M$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return Z}function dz($,w={}){let A=LA.cwd();while(A.includes("storage"))A=CZ(A,"..");let J=CZ(A,$||"");if(w?.relative)return rj(LA.cwd(),J);return J}async function gz(){try{let $=await mz({name:"clarity",alias:"logging",defaultConfig:IA,cwd:LA.cwd()});return{...IA,...$||{}}}catch{return IA}}function Z$(){if(C0.env.NODE_ENV==="test"||C0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function lz(){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 hW{async format($){let w=await lz(),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 kA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...FY},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new hW,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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...CA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...CA};return{...CA,...$.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!Z$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let U,Y=0,f=3,W=1000;while(Y<f)try{try{try{await Ez(this.config.logDirectory,xZ.F_OK|xZ.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await Bz(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 Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:R0.from($);try{if(!WA(this.currentLogFile))await aU(this.currentLogFile,"",{mode:420});if(U=QZ(this.currentLogFile,"a",420),Wz(U,Z,{flag:"a"}),kZ(U),U!==void 0)rU(U),U=void 0;if((await Vw(this.currentLogFile)).size===0){if(await aU(this.currentLogFile,Z,{flag:"w",mode:420}),(await Vw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let B=E;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(Y<f-1){let h=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${f}:`,h);let j=W*2**Y;await new Promise((F)=>setTimeout(F,j)),Y++;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(U!==void 0)try{rU(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(Z){if(Y===f-1){let B=Z,h=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),Z}Y++;let E=W*2**(Y-1);await new Promise((B)=>setTimeout(B,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 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(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((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,W],[,Z])=>Z.createdAt.getTime()-W.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,f=Math.max(1,Y);if(U.length>f)for(let[W]of U.slice(f))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return pU(16).toString("hex")}generateKey(){return pU(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=pU(16),J=Yz("aes-256-gcm",w,A),U=R0.isBuffer($)?$:R0.from($,"utf8"),Y=J.update(U),f=J.final(),W=Y.length+f.length,Z=J.getAuthTag(),E=R0.allocUnsafe(16+W+16);return A.copy(E,0),Y.copy(E,16),f.copy(E,16+Y.length),Z.copy(E,16+W),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=bZ(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(R0.from(R0.concat(U)))),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 Vw(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 U=await EA(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await Vw(A).catch(()=>null))try{if(await PZ(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await BA(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await aU(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await Vw(A).catch(()=>null))await PZ(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await EA(this.config.logDirectory)).filter((f)=>f.startsWith(this.name)).sort((f,W)=>W.localeCompare(f));for(let f of Y.slice(w.maxFiles))await BA(Ow(this.config.logDirectory,f))}}}async compressLogFile($,w){let A=DZ($),J=Zz(w),U=bZ();await jz(A,U,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()})),WA(this.currentLogFile))try{let $=QZ(this.currentLogFile,"r+");kZ($),rU($)}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 EA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await BA(Ow(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 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:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=V.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${D.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=D.underline(D.blue(J)),f=this.toAbsoluteFilePath(U);if(f&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(f)}`,Z="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${W}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),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 $=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(hz(w)||w.startsWith("./")||w.startsWith("../"))w=Fz(w);else return null;return WA(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);let{consoleText:Z,fileText:E}=this.buildOutputTexts(f);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":KW[$],j=this.options.showTags!==!1&&this.name?D.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:D.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:D.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.error(F),W){let T=W.split(`
|
|
13
|
+
`);for(let H of T)if(H.trim()&&!H.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:D.gray(` ${H}`),level:$,showTimestamp:!1}))}break}}else if(!Z$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}if(!this.shouldLog($))return;let B=`${Y} ${this.environment}.${$.toUpperCase()}: ${E}
|
|
14
|
+
`;if(W)B+=`${W}
|
|
15
|
+
`;if(B=B.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(B)}progress($,w=""){let A={update:(W,Z)=>{},finish:(W)=>{},interrupt:(W,Z)=>{}};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$()&&V.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(W,Z)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,W),this.activeProgressBar.total),Z!==void 0)this.activeProgressBar.message=Z;if(this.shouldStyleConsole()&&!Z$()&&V.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(W)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,W)},interrupt:(W,Z="info")=>{if(!Z$()&&V.stdout.isTTY)V.stdout.write(`
|
|
16
|
+
`);if(this[Z==="warning"?"warn":Z](W),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?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(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),E=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
|
|
17
|
+
`,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let B=this.options.showTags!==!1&&this.name?D.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":D.green("✓"),tag:B,message:`${Y}${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 kA(w,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(A),A}createReadStream(){if(Z$())throw Error("createReadStream is not supported in browser environments");if(!WA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return DZ(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=R0.isBuffer($)?$:R0.from($,"base64"),U=J.subarray(0,16),Y=J.subarray(J.length-16),f=J.subarray(16,J.length-16),W=fz("aes-256-gcm",A,U);W.setAuthTag(Y);let Z=W.update(f),E=W.final(),B=Z.length+E.length,h=R0.allocUnsafe(B);return Z.copy(h,0),E.copy(h,Z.length),h.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:U,fileText:Y}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=U.split(`
|
|
18
|
+
`),Z=Math.max(...W.map((j)=>j.length))+2,E=`┌${"─".repeat(Z)}┐`,B=`└${"─".repeat(Z)}┘`,h=W.map((j)=>{return this.formatConsoleMessage({timestamp:A,message:D.cyan(j),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:D.cyan(E),showTimestamp:!1})),h.forEach((j)=>console.error(j)),console.error(this.formatConsoleMessage({timestamp:A,message:D.cyan(B),showTimestamp:!1}))}else if(!Z$())console.error(`${J} ${this.environment}.INFO: [BOX] ${Y}`);let f=`${J} ${this.environment}.INFO: [BOX] ${Y}
|
|
19
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(f)}async prompt($){if(Z$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${D.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=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(U==="y"||U==="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,E=0;if(A=$.replace(Z,(B,h)=>{if(h==="%")return"%";if(E>=w.length)return B;let j=w[E++];switch(h){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 B}}),E<w.length)A+=` ${w.slice(E).map((B)=>typeof B==="object"?JSON.stringify(B,null,2):String(B)).join(" ")}`}let{consoleText:J,fileText:U}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?D.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${D.blue("◐")} `;console.error(`${E}${Z} ${D.cyan(J)}`)}let W=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
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))),J=Math.round($.barLength*A/100),U=$.barLength-J,Y=D.green("━".repeat(J)),f=D.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=this.options.showIcons===!1?"":w||A===100?D.green("✓"):D.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${D.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=V.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,V.stdout.write($.lastRenderedLine),w)V.stdout.write(`
|
|
21
|
+
`)}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 EA(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=Ow(this.config.logDirectory,J);if($.before)try{if((await Vw(Y)).mtime>=$.before)continue}catch(f){console.error(`Failed to get stats for file ${Y}:`,f);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 BA(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function FW($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:U=()=>!0,fallback:Y}=w,f=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(Z){if(f=Z instanceof Error?Z:Error(String(Z)),W===A||!U(f))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(Y!==void 0)return Y;throw f instanceof Error?f:Error(`Unknown error: ${String(f)}`)}function jW($){return $ instanceof n$}function tz($){return $ instanceof QA}function pz($){if(jW($))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 uA{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:U=!0,useBackwardCompatibility:Y=!0,customParsers:f={},verbose:W=!1,trackPerformance:Z=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let B=J||this.generateEnvPrefix($),h={...w};return this.processObject(h,[],B,{useCamelCase:U,useBackwardCompatibility:Y,customParsers:f,verbose:W,configName:$}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(Z)return C1.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[U,Y]of Object.entries($)){let f=[...w,U],W=f.map((B)=>this.formatEnvKey(B,J.useCamelCase)),Z=`${A}_${W.join("_")}`,E=J.useBackwardCompatibility?`${A}_${f.map((B)=>B.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.processObject(Y,f,A,J);else{let B=hA.env[Z]||(E?hA.env[E]:void 0);if(B!==void 0){if(J.verbose){let h=hA.env[Z]?Z:E}try{$[U]=this.parseEnvironmentValue(B,typeof Y,Z,J.customParsers,J.configName)}catch(h){if(h instanceof xA)throw h;throw t0.envVar(Z,B,typeof Y,J.configName)}}}}}parseEnvironmentValue($,w,A,J,U){for(let[Y,f]of Object.entries(J))try{return f($)}catch{continue}for(let Y of this.defaultParsers)if(Y.canParse($,w))try{return Y.parse($)}catch{throw t0.envVar(A,$,`${w} (via ${Y.name} parser)`,U)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,U]of Object.entries(hA.env))if(J.startsWith(A)&&U!==void 0)w[J]=U;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(U){J.push(`Cannot parse value "${w}" as ${A}: ${U}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:U="text"}=A,Y=J||this.generateEnvPrefix($),f=[];switch(this.extractEnvVarInfo(w,[],Y,f),U){case"markdown":return this.formatAsMarkdown(f,$);case"json":return JSON.stringify(f,null,2);default:return this.formatAsText(f,$)}}extractEnvVarInfo($,w,A,J){for(let[U,Y]of Object.entries($)){let f=[...w,U],W=`${A}_${f.map((Z)=>this.formatEnvKey(Z,!0)).join("_")}`;if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.extractEnvVarInfo(Y,f,A,J);else J.push({key:W,type:Array.isArray(Y)?"array":typeof Y,description:`Configuration for ${f.join(".")}`,example:this.generateExample(Y)})}}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
22
|
|
|
23
23
|
`;for(let J of $)A+=`${J.key}
|
|
24
24
|
`,A+=` Type: ${J.type}
|
|
@@ -30,80 +30,25 @@ import{createRequire as uF}from"node:module";var bF=Object.defineProperty;var iF
|
|
|
30
30
|
`;A+=`| Variable | Type | Description | Example |
|
|
31
31
|
`,A+=`|----------|------|-------------|----------|
|
|
32
32
|
`;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
|
|
33
|
-
`;return A}}function QG($,w){let A=iW("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function QW($,w,A={}){return xW($,w,A,new WeakMap)}function xW($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:h}=A;if(w===null||w===void 0)return Y?$:w;if(h){let Z=h($,w);if(Z!==void 0)return Z}if(Array.isArray(w)||Array.isArray($))return PW($,w,U,J);if(!$0(w)||!$0($))return w;return iG($,w,A,J)}function PW($,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 xG($,w);case"smart":return PG($,w,J);default:return w}return w}function xG($,w){let A=[...w];for(let J of $)if(!A.some((U)=>Xh(U,J)))A.push(J);return A}function PG($,w,A){if(w.length===0)return $;if($.length===0)return w;if($0(w[0])&&$0($[0]))return bG($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function bG($,w,A){let J=[...w];for(let U of $){if(!$0(U)){J.push(U);continue}let Y=["id","name","key","path","type"],h=!1;for(let Z of Y)if(Z in U){if(J.find((E)=>$0(E)&&(Z in E)&&E[Z]===U[Z])){h=!0;break}}if(!h)J.push(U)}return J}function iG($,w,A,J){let U=w;if($0(U)&&J.has(U))return J.get(U);let Y={...$};if($0(U))J.set(U,Y);for(let h in U){if(!Object.prototype.hasOwnProperty.call(U,h))continue;let Z=U[h],f=Y[h];if(A.skipNullish&&(Z===null||Z===void 0))continue;if(Z===null||Z===void 0){Y[h]=Z;continue}if($0(Z)&&$0(f))Y[h]=xW(f,Z,A,J);else if(Array.isArray(Z)||Array.isArray(f))Y[h]=PW(f,Z,A.arrayMergeMode||"smart",J);else Y[h]=Z}return Y}function gh($,w,A="replace"){return QW($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function Xh($,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(!Xh($[A],w[A]))return!1;return!0}if($0($)&&$0(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!Xh($[U],w[U]))return!1}return!0}return!1}function $0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class mJ{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:h=!0,verbose:Z=!1}=A;if(U){let E=w1.getWithFileCheck("file",$);if(E){if(Z)console.log(`Configuration loaded from cache: ${$}`);return E}}let f=async()=>{if(!KJ($))return null;try{let E=`?t=${Date.now()}`,W=await import($+E),F=W.default||W,j="default"in W,B=Object.keys(W).length>0;if(!j&&!B)throw new I1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new I1($,Error("Configuration must export a valid object"),"unknown");let q={config:gh(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)w1.setWithFileCheck("file",q,$,Y);return q}catch(E){throw E instanceof Error?p0.configLoad($,E):p0.configLoad($,Error(String(E)))}};if(h)return L1.track("loadFromPath",f,{path:$});return f()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let h of this.extensions)U.push(Nh(w,`${Y}${h}`));return U}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 XW(async()=>{return KJ($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!KJ($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let h of this.extensions){let Z=Nh($,`${Y}${h}`);if(await this.checkFileAccess(Z))J.push(Z)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let h of Y)if(this.looksLikeConfigFile(h)){let Z=Nh($,h);if(await this.checkFileAccess(Z))J.push(Z)}}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(!KJ($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}class lh{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:h=[],trackPerformance:Z=!0,verbose:f=!1}=A,E=async()=>{let W=[],F=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:h,trackPerformance:Z,verbose:f};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...h],j);else return this.validateWithJSONSchema($,w,j)}catch(B){return W.push({path:"",message:`Validation failed: ${B}`,rule:"system"}),{isValid:!1,errors:W,warnings:F}}};if(Z)return await L1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!HG(w))throw new y1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new y1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let h=Array.isArray($)?"array":typeof $,Z=Array.isArray(w.type)?w.type:[w.type];if(!Z.includes(h)){if(J.push({path:A,message:`Expected type ${Z.join(" or ")}, got ${h}`,expected:Z.join(" or "),actual:h,rule:"type"}),Y.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"}),Y.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 h=0;h<$.length;h++){let Z=A?`${A}[${h}]`:`[${h}]`;if(this.validateObjectAgainstSchema($[h],w.items,Z,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let h=$;if(Y.validateRequired&&w.required){for(let Z of w.required)if(!(Z in h)){if(J.push({path:A?`${A}.${Z}`:Z,message:`Missing required property '${Z}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[Z,f]of Object.entries(w.properties))if(Z in h){let E=A?`${A}.${Z}`:Z;if(this.validateObjectAgainstSchema(h[Z],f,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let Z=new Set(Object.keys(w.properties||{}));for(let f of Object.keys(h))if(!Z.has(f))U.push({path:A?`${A}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let h=this.getValueByPath($,Y.path),Z=this.validateWithRule(h,Y,Y.path);if(J.push(...Z),A.stopOnFirstError&&J.length>0)break}catch(h){J.push({path:Y.path,message:`Rule validation failed: ${h}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,h]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(h)})}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:mW},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class th{fileLoader=new mJ;envProcessor=new vJ;validator=new lh;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...h}=$;try{if(A?.enabled){let f=this.checkCache(h.name||"",h);if(f)return f}let Z;try{Z=await this.loadConfigurationStrategies(h,!0,A)}catch(f){let E=h.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(E)throw f;Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`No configuration file found for "${h.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let W=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),F=!W&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),j=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(E&&(j||W))throw f;if(F&&(!E||!j))Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(U||Y)await this.validateConfiguration(Z.config,U,Y,h.name);if(A?.enabled&&Z)this.cacheResult(h.name||"",Z,A,h);if(J?.enabled){let f={operation:"loadConfig",duration:Date.now()-w,configName:h.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(f);if(J.slowThreshold&&f.duration>J.slowThreshold)W0.warn(`Slow configuration loading detected: ${f.duration}ms for ${h.name}`);Z.metrics=f}return Z}catch(Z){let f=Date.now()-w;throw W0.error(`Configuration loading failed after ${f}ms:`,[Z instanceof Error?Z:Error(String(Z))]),Z}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:h,defaultConfig:Z,checkEnv:f=!0,arrayStrategy:E="replace",verbose:W=!1}=$,F=Y||ww.cwd(),j=[],B=await this.loadLocalConfiguration(J,U,F,h,Z,E,W,f,A);if(B)return j.push(...this.getLocalSearchPaths(J,U,F,h)),this.finalizeResult(B,j,f,J,W);let T=await this.loadHomeConfiguration(J,U,Z,E,W,f);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,f,J,W);let H=await this.loadPackageJsonConfiguration(J,U,F,Z,E,W,f);if(H)return j.push(x$(F,"package.json")),this.finalizeResult(H,j,f,J,W);if(j.push(...this.getAllSearchPaths(J,U,F,h)),w)throw p0.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,Z,f,W),warnings:[`No configuration file found for "${J}"${U?` or alias "${U}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,h,Z,f){let E=Z?K1($,U,h):U,W=this.getLocalDirectories(A,J);for(let F of W){if(h)W0.info(`Searching for configuration in: ${F}`);let j=this.fileLoader.generateConfigPaths($,F,w),B=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:h,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(B){if(h)W0.success(`Configuration loaded from: ${B.source.path}`);return B}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let h=Y?K1($,A,U):A,Z=[x$(gw(),".config",$),x$(gw(),".config"),gw()];for(let f of Z){if(U)W0.info(`Checking home directory: ${f}`);let E=this.fileLoader.generateConfigPaths($,f,w),W=await this.fileLoader.tryLoadFromPaths(E,h,{arrayStrategy:J,verbose:U});if(W){if(U)W0.success(`Configuration loaded from home directory: ${W.source.path}`);return W}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,h){let Z=h?K1($,J,Y):J;try{let f=x$(A,"package.json");if(!Oh(f))return null;let E=await import(f),W=E[$],F=$;if(!W&&w)W=E[w],F=w;if(W&&typeof W==="object"&&!Array.isArray(W)){if(Y)W0.success(`Configuration loaded from package.json: ${F}`);return{config:gh(Z,W,U),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(Y)W0.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}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:K1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((h)=>h.path?`${h.path}: ${h.message}`:h.message))}if(U.length>0)throw p0.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return w1.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);w1.set(U,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,J){let U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(x$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let h of U)Y.push(...this.fileLoader.generateConfigPaths($,h,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[x$(gw(),".config",$),x$(gw(),".config"),gw()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function fW($){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 cG($){return i0.loadConfig({...$,__strictErrorHandling:!0})}async function bW($){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 U=J instanceof Error?J.name:"UnknownError",Y=J instanceof Error?J.message:String(J);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||Y.includes("config"))&&$.verbose)W0.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 uG($={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"&&fW(A)))return(await i0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await i0.loadConfig({...$,cwd:$.cwd||ww.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&fW(w)))return(await i0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function nG($,w,A="replace"){let J=new mJ;try{let U=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return U?U.config:null}catch{return null}}function K1($,w,A=!1){let J=new vJ,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(h,Z=[]){let f={...h};for(let[E,W]of Object.entries(h)){let F=[...Z,E],j=[`${U}_${F.join("_").toUpperCase()}`,`${U}_${F.map((H)=>H.toUpperCase()).join("")}`,`${U}_${F.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],B,T;for(let H of j)if(B=ww.env[H],B!==void 0){T=H;break}if(B!==void 0&&T)if(typeof W==="boolean")f[E]=["true","1","yes"].includes(B.toLowerCase());else if(typeof W==="number"){let H=Number(B);if(!Number.isNaN(H))f[E]=H}else if(Array.isArray(W))try{f[E]=JSON.parse(B)}catch{f[E]=B.split(",").map((H)=>H.trim())}else f[E]=B;else if(W&&typeof W==="object"&&!Array.isArray(W))f[E]=Y(W,F)}return f}return Y(w)}function vG($){let w=x$(ww.cwd(),$.configDir),A=x$(ww.cwd(),$.generatedDir),J=x$(A,"config-types.ts");if(!Oh(gE(J)))lT(gE(J),{recursive:!0,mode:511});let U=Oh(w)?tT(w).map((h)=>h.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],Y=`// Generated by bunfig v${G2}
|
|
33
|
+
`;return A}}function rz($,w){let A=qW("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function zW($,w,A={}){return HW($,w,A,new WeakMap)}function HW($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:f}=A;if(w===null||w===void 0)return Y?$:w;if(f){let W=f($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return TW($,w,U,J);if(!s$(w)||!s$($))return w;return ez($,w,A,J)}function TW($,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 az($,w);case"smart":return sz($,w,J);default:return w}return w}function az($,w){let A=[...w];for(let J of $)if(!A.some((U)=>BY(U,J)))A.push(J);return A}function sz($,w,A){if(w.length===0)return $;if($.length===0)return w;if(s$(w[0])&&s$($[0]))return oz($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function oz($,w,A){let J=[...w];for(let U of $){if(!s$(U)){J.push(U);continue}let Y=["id","name","key","path","type"],f=!1;for(let W of Y)if(W in U){if(J.find((E)=>s$(E)&&(W in E)&&E[W]===U[W])){f=!0;break}}if(!f)J.push(U)}return J}function ez($,w,A,J){let U=w;if(s$(U)&&J.has(U))return J.get(U);let Y={...$};if(s$(U))J.set(U,Y);for(let f in U){if(!Object.prototype.hasOwnProperty.call(U,f))continue;let W=U[f],Z=Y[f];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){Y[f]=W;continue}if(s$(W)&&s$(Z))Y[f]=HW(Z,W,A,J);else if(Array.isArray(W)||Array.isArray(Z))Y[f]=TW(Z,W,A.arrayMergeMode||"smart",J);else Y[f]=W}return Y}function yY($,w,A="replace"){return zW($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function BY($,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(!BY($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!BY($[U],w[U]))return!1}return!0}return!1}function s$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class vA{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:f=!0,verbose:W=!1}=A;if(U){let E=Qw.getWithFileCheck("file",$);if(E){if(W)console.log(`Configuration loaded from cache: ${$}`);return E}}let Z=async()=>{if(!FA($))return null;try{let E=`?t=${Date.now()}`,B=await import($+E),h=B.default||B,j="default"in B,F=Object.keys(B).length>0;if(!j&&!F)throw new M1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new M1($,Error("Configuration must export a valid object"),"unknown");let G={config:yY(w,h,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)Qw.setWithFileCheck("file",G,$,Y);return G}catch(E){throw E instanceof Error?t0.configLoad($,E):t0.configLoad($,Error(String(E)))}};if(f)return C1.track("loadFromPath",Z,{path:$});return Z()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let f of this.extensions)U.push(sU(w,`${Y}${f}`));return U}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 FW(async()=>{return FA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!FA($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let f of this.extensions){let W=sU($,`${Y}${f}`);if(await this.checkFileAccess(W))J.push(W)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let f of Y)if(this.looksLikeConfigFile(f)){let W=sU($,f);if(await this.checkFileAccess(W))J.push(W)}}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(!FA($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}class LY{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:f=[],trackPerformance:W=!0,verbose:Z=!1}=A,E=async()=>{let B=[],h=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:f,trackPerformance:W,verbose:Z};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...f],j);else return this.validateWithJSONSchema($,w,j)}catch(F){return B.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:B,warnings:h}}};if(W)return await C1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!zz(w))throw new I1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new I1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let f=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(f)){if(J.push({path:A,message:`Expected type ${W.join(" or ")}, got ${f}`,expected:W.join(" or "),actual:f,rule:"type"}),Y.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"}),Y.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 f=0;f<$.length;f++){let W=A?`${A}[${f}]`:`[${f}]`;if(this.validateObjectAgainstSchema($[f],w.items,W,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let f=$;if(Y.validateRequired&&w.required){for(let W of w.required)if(!(W in f)){if(J.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[W,Z]of Object.entries(w.properties))if(W in f){let E=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(f[W],Z,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let Z of Object.keys(f))if(!W.has(Z))U.push({path:A?`${A}.${Z}`:Z,message:`Additional property '${Z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let f=this.getValueByPath($,Y.path),W=this.validateWithRule(f,Y,Y.path);if(J.push(...W),A.stopOnFirstError&&J.length>0)break}catch(f){J.push({path:Y.path,message:`Rule validation failed: ${f}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,f]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(f)})}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:IW},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class SY{fileLoader=new vA;envProcessor=new uA;validator=new LY;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...f}=$;try{if(A?.enabled){let Z=this.checkCache(f.name||"",f);if(Z)return Z}let W;try{W=await this.loadConfigurationStrategies(f,!0,A)}catch(Z){let E=f.__strictErrorHandling;if(Z instanceof Error&&Z.name==="ConfigNotFoundError"){if(E)throw Z;W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`No configuration file found for "${f.name||"config"}", using defaults with environment variables`]}}else if(Z instanceof Error&&Z.name==="ConfigLoadError"){let B=Z.message.includes("EACCES")||Z.message.includes("EPERM")||Z.message.includes("permission denied"),h=!B&&(Z.message.includes("syntax")||Z.message.includes("Expected")||Z.message.includes("Unexpected")||Z.message.includes("BuildMessage")||Z.message.includes("errors building")),j=Z.message.includes("Configuration must export a valid object")||Z.message.includes("Configuration file is empty and exports nothing");if(E&&(j||B))throw Z;if(h&&(!E||!j))W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading error, using defaults: ${Z.message}`]};else throw Z}else W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${Z instanceof Error?Z.message:String(Z)}`]}}if(U||Y)await this.validateConfiguration(W.config,U,Y,f.name);if(A?.enabled&&W)this.cacheResult(f.name||"",W,A,f);if(J?.enabled){let Z={operation:"loadConfig",duration:Date.now()-w,configName:f.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(Z);if(J.slowThreshold&&Z.duration>J.slowThreshold)f0.warn(`Slow configuration loading detected: ${Z.duration}ms for ${f.name}`);W.metrics=Z}return W}catch(W){let Z=Date.now()-w;throw f0.error(`Configuration loading failed after ${Z}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:f,defaultConfig:W,checkEnv:Z=!0,arrayStrategy:E="replace",verbose:B=!1}=$,h=Y||fw.cwd(),j=[],F=await this.loadLocalConfiguration(J,U,h,f,W,E,B,Z,A);if(F)return j.push(...this.getLocalSearchPaths(J,U,h,f)),this.finalizeResult(F,j,Z,J,B);let T=await this.loadHomeConfiguration(J,U,W,E,B,Z);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,Z,J,B);let H=await this.loadPackageJsonConfiguration(J,U,h,W,E,B,Z);if(H)return j.push(D$(h,"package.json")),this.finalizeResult(H,j,Z,J,B);if(j.push(...this.getAllSearchPaths(J,U,h,f)),w)throw t0.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,W,Z,B),warnings:[`No configuration file found for "${J}"${U?` or alias "${U}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,f,W,Z){let E=W?R1($,U,f):U,B=this.getLocalDirectories(A,J);for(let h of B){if(f)f0.info(`Searching for configuration in: ${h}`);let j=this.fileLoader.generateConfigPaths($,h,w),F=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:f,cacheTtl:Z?.ttl,useCache:!Z?.ttl||Z.ttl>100});if(F){if(f)f0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let f=Y?R1($,A,U):A,W=[D$(Cw(),".config",$),D$(Cw(),".config"),Cw()];for(let Z of W){if(U)f0.info(`Checking home directory: ${Z}`);let E=this.fileLoader.generateConfigPaths($,Z,w),B=await this.fileLoader.tryLoadFromPaths(E,f,{arrayStrategy:J,verbose:U});if(B){if(U)f0.success(`Configuration loaded from home directory: ${B.source.path}`);return B}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,f){let W=f?R1($,J,Y):J;try{let Z=D$(A,"package.json");if(!WY(Z))return null;let E=await import(Z),B=E[$],h=$;if(!B&&w)B=E[w],h=w;if(B&&typeof B==="object"&&!Array.isArray(B)){if(Y)f0.success(`Configuration loaded from package.json: ${h}`);return{config:yY(W,B,U),source:{type:"package.json",path:Z,priority:30,timestamp:new Date}}}}catch(Z){if(Y)f0.warn("Failed to load package.json:",[Z instanceof Error?Z:Error(String(Z))])}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:R1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((f)=>f.path?`${f.path}: ${f.message}`:f.message))}if(U.length>0)throw t0.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return Qw.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);Qw.set(U,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 U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(D$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let f of U)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[D$(Cw(),".config",$),D$(Cw(),".config"),Cw()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function lZ($){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 $9($){return L0.loadConfig({...$,__strictErrorHandling:!0})}async function GW($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let J;if(A)J=await L0.loadConfig($);else J=await L0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return J?.config??w}catch(J){let U=J instanceof Error?J.name:"UnknownError",Y=J instanceof Error?J.message:String(J);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||Y.includes("config"))&&$.verbose)f0.warn("Unexpected error loading config, using defaults:",[J instanceof Error?J:Error(String(J))]);let W=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await L0.applyEnvironmentVariables(W.name||"",w,!0,W.verbose||!1))?.config??w;return w}}async function w9($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await L0.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"&&lZ(A)))return(await L0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await L0.loadConfig({...$,cwd:$.cwd||fw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&lZ(w)))return(await L0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function A9($,w,A="replace"){let J=new vA;try{let U=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return U?U.config:null}catch{return null}}function R1($,w,A=!1){let J=new uA,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(f,W=[]){let Z={...f};for(let[E,B]of Object.entries(f)){let h=[...W,E],j=[`${U}_${h.join("_").toUpperCase()}`,`${U}_${h.map((H)=>H.toUpperCase()).join("")}`,`${U}_${h.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let H of j)if(F=fw.env[H],F!==void 0){T=H;break}if(F!==void 0&&T)if(typeof B==="boolean")Z[E]=["true","1","yes"].includes(F.toLowerCase());else if(typeof B==="number"){let H=Number(F);if(!Number.isNaN(H))Z[E]=H}else if(Array.isArray(B))try{Z[E]=JSON.parse(F)}catch{Z[E]=F.split(",").map((H)=>H.trim())}else Z[E]=F;else if(B&&typeof B==="object"&&!Array.isArray(B))Z[E]=Y(B,h)}return Z}return Y(w)}function J9($){let w=D$(fw.cwd(),$.configDir),A=D$(fw.cwd(),$.generatedDir),J=D$(A,"config-types.ts");if(!WY(IZ(J)))gj(IZ(J),{recursive:!0,mode:511});let U=WY(w)?lj(w).map((f)=>f.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],Y=`// Generated by bunfig v${D9}
|
|
34
34
|
export type ConfigNames = ${U.length?`'${U.join("' | '")}'`:"string"}
|
|
35
|
-
`;
|
|
36
|
-
${U.map((E)=>{let
|
|
35
|
+
`;tj(J,Y,{mode:438})}function U9($){let w=null,A=null,J=()=>{if(!A)A=GW($).then((Y)=>{return w=Y,Y},(Y)=>{let f="defaultConfig"in $?$.defaultConfig:{};if(w=f,"verbose"in $&&$.verbose)f0.warn("Config loading failed, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);return f});return A},U="defaultConfig"in $?$.defaultConfig:{};return w=U,J(),new Proxy({},{get(Y,f){if(w)return w[f];let W=U[f];return J(),W},has(Y,f){return f in(w||U)},ownKeys(){return Object.keys(w||U)},getOwnPropertyDescriptor(Y,f){return Object.getOwnPropertyDescriptor(w||U,f)},set(Y,f,W){if(!w)w={...U};return w[f]=W,!0}})}function Y9($){let w=iZ(Gz.cwd(),$?.configDir||"./config");function A(){if(!Hz(w))return[];let U=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),Y=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],f=Tz(w).filter((Z)=>U.has(oU(Z))).map((Z)=>({base:Z.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:Z})),W=new Map;for(let{base:Z,file:E}of f){let B=oU(E).toLowerCase(),h=W.get(Z);if(!h){W.set(Z,E);continue}let j=oU(h).toLowerCase();if(Y.indexOf(B)<Y.indexOf(j))W.set(Z,E)}return Array.from(W.entries()).map(([Z,E])=>({base:Z,file:E})).sort((Z,E)=>Z.base.localeCompare(E.base))}function J(){let U=A(),Y=U.map((E)=>E.base),f=Y.length?Y.map((E)=>`'${E}'`).join(" | "):"string",W=U.length?`{
|
|
36
|
+
${U.map((E)=>{let B=iZ(w,E.file).replace(/\\/g,"/");return` '${E.base}': typeof import('${B}').default`}).join(`,
|
|
37
37
|
`)}
|
|
38
|
-
}`:"Record<string, any>";return`export type ConfigNames = ${
|
|
39
|
-
export type ConfigByName = ${
|
|
38
|
+
}`:"Record<string, any>";return`export type ConfigNames = ${f}
|
|
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(U){U.onResolve({filter:/^virtual:bunfig-types$/},(Y)=>{return{path:Y.path,namespace:"bunfig-virtual"}}),U.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}function K2($,w={}){let A=uJ.cwd();while(A.includes("storage"))A=qW(A,"..");let J=qW(A,$||"");if(w?.relative)return N2(uJ.cwd(),J);return J}function F$(){if(b0.env.NODE_ENV==="test"||b0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function X2(){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 tW{async format($){let w=await X2(),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:$1.pid,hostname:w(),environment:$1.env.NODE_ENV||"development",platform:$1.platform,version:$1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:$1.env.NODE_ENV||$1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class Aw{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={...nJ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new tW,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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...Dh,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...Dh};return{...Dh,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:nJ.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 A=(async()=>{let U,Y=0,h=3,Z=1000;while(Y<h)try{try{try{await S2(this.config.logDirectory,MW.F_OK|MW.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await V2(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 f=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:Q0.from($);try{if(!IJ(this.currentLogFile))await Vh(this.currentLogFile,"",{mode:420});if(U=KW(this.currentLogFile,"a",420),C2(U,f,{flag:"a"}),NW(U),U!==void 0)Sh(U),U=void 0;if((await ow(this.currentLogFile)).size===0){if(await Vh(this.currentLogFile,f,{flag:"w",mode:420}),(await ow(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let W=E;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(Y<h-1){let F=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${h}:`,F);let j=Z*2**Y;await new Promise((B)=>setTimeout(B,j)),Y++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(U!==void 0)try{Sh(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(f){if(Y===h-1){let W=f,F=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),f}Y++;let E=Z*2**(Y-1);await new Promise((W)=>setTimeout(W,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 ew(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 ew(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return ew(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,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,f])=>f.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,h=Math.max(1,Y);if(U.length>h)for(let[Z]of U.slice(h))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return Ch(16).toString("hex")}generateKey(){return Ch(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=Ch(16),J=I2("aes-256-gcm",w,A),U=Q0.isBuffer($)?$:Q0.from($,"utf8"),Y=J.update(U),h=J.final(),Z=Y.length+h.length,f=J.getAuthTag(),E=Q0.allocUnsafe(16+Z+16);return A.copy(E,0),Y.copy(E,16),h.copy(E,16+Y.length),f.copy(E,16+Z),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=yW(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(Q0.from(Q0.concat(U)))),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 ow(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 U=await yJ(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await ow(A).catch(()=>null))try{if(await IW(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await LJ(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await Vh(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await ow(A).catch(()=>null))await IW(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await yJ(this.config.logDirectory)).filter((h)=>h.startsWith(this.name)).sort((h,Z)=>Z.localeCompare(h));for(let h of Y.slice(w.maxFiles))await LJ(ew(this.config.logDirectory,h))}}}async compressLogFile($,w){let A=RW($),J=L2(w),U=yW();await _2(A,U,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()})),IJ(this.currentLogFile))try{let $=KW(this.currentLogFile,"r+");NW($),Sh($)}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 yJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await LJ(ew(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||F$())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:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=O.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${P.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=P.underline(P.blue(J)),h=this.toAbsoluteFilePath(U);if(h&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let Z=`file://${encodeURI(h)}`,f="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${Z}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),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(F$())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(D2(w)||w.startsWith("./")||w.startsWith("../"))w=O2(w);else return null;return IJ(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);let{consoleText:f,fileText:E}=this.buildOutputTexts(h);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":b2[$],j=this.options.showTags!==!1&&this.name?P.gray(this.formatTag(this.name)):"",B;switch($){case"debug":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:P.gray(f),level:$}),console.error(B);break;case"info":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"success":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:P.green(f),level:$}),console.error(B);break;case"warning":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"error":if(B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.error(B),Z){let T=Z.split(`
|
|
43
|
-
`);for(let H of T)if(H.trim()&&!H.includes(
|
|
44
|
-
`;if(
|
|
45
|
-
`;if(
|
|
46
|
-
`);if(this[
|
|
47
|
-
`,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let
|
|
48
|
-
`),
|
|
49
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(
|
|
50
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(
|
|
51
|
-
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||F$()||!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(F$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await yJ(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=ew(this.config.logDirectory,J);if($.before)try{if((await ow(Y)).mtime>=$.before)continue}catch(h){console.error(`Failed to get stats for file ${Y}:`,h);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 LJ(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}var nT,vT=($)=>$,dT=($,w)=>{for(var A in w)nT($,A,{get:w[A],enumerable:!0,configurable:!0,set:mT.bind(w,A)})},gT=($,w)=>()=>($&&(w=$($=0)),w),SW,iW,w1,L1,cW,gG,lG,ZW,SJ,kh,L$,g,tG,EW,pG,WW,rG,aG,Mh,sG,FW,BW,Ih,oG,eG,$2,w2,VJ,uW,A2,C$,J2,U2,jW,DJ,Qh,W$,k,Y2,zW,h2,HW,f2,Z2,yh,E2,TW,GW,W2,Lh,F2,B2,j2,z2,H2,OJ,nW,T2,G2="0.15.6",d$,iJ,I1,xh,Ph,cJ,bh,ih,y1,ch,uh,p0,vW,mW,W0,i0,dW,gW,q2,M2,lW,nJ,oK,H$,P,EM,k2,WM,Q2,FM,BM,LW,jM,x2,P2,zM,CW,HM,TM,GM,qM,RM,Dh,b2,NM;var ph=FU(()=>{nT=Object.defineProperty;SW={};dT(SW,{withErrorRecovery:()=>XW,tryLoadConfig:()=>nG,loadConfigWithResult:()=>cG,loadConfig:()=>bW,isRetryableError:()=>kG,isConfigNotFoundError:()=>XG,isBunfigError:()=>kW,globalPerformanceMonitor:()=>L1,globalCache:()=>w1,getEnvOrDefault:()=>QG,generateConfigTypes:()=>vG,defaultGeneratedDir:()=>gW,defaultConfigDir:()=>dW,deepMergeWithArrayStrategy:()=>gh,deepMerge:()=>QW,createLibraryConfig:()=>mG,config:()=>uG,bunfigPlugin:()=>dG,applyEnvVarsToConfig:()=>K1,TypeGenerationError:()=>ih,SchemaValidationError:()=>y1,PluginError:()=>uh,PerformanceMonitor:()=>vh,FileSystemError:()=>bh,ErrorFactory:()=>p0,EnvVarError:()=>cJ,EnvProcessor:()=>vJ,ConfigValidator:()=>lh,ConfigValidationError:()=>xh,ConfigNotFoundError:()=>iJ,ConfigMergeError:()=>Ph,ConfigLoader:()=>th,ConfigLoadError:()=>I1,ConfigFileLoader:()=>mJ,ConfigCache:()=>nh,CacheUtils:()=>cW,BunfigError:()=>d$,BrowserConfigError:()=>ch,ArrayMergeStrategies:()=>vW});q2=gT(async()=>{iW=import.meta.require,w1=new nh,L1=new vh,cW={createKey:RG,isEquivalent:NG,estimateMemoryUsage:KG},gG=kJ(_h.cwd(),"config"),lG=kJ(_h.cwd(),"src/generated"),ZW=XJ.env.CLARITY_LOG_DIR||sT(yG(),"logs"),SJ={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},kh=await LG(),L$={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=L$,tG=L$.red,EW=L$.green,pG=L$.yellow,WW=L$.blue,rG=L$.magenta,aG=L$.cyan,Mh=L$.white,sG=L$.gray,FW=L$.bgRed,BW=L$.bgYellow,Ih=L$.bold,oG=L$.dim,eG=L$.italic,$2=L$.underline,w2=L$.reset,VJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},uW={debug:"\uD83D\uDD0D",info:WW("ℹ"),success:EW("✓"),warning:BW(Mh(Ih(" WARN "))),error:FW(Mh(Ih(" ERROR ")))},A2=new xJ("stacks"),C$=new xJ("bunfig",{showTags:!0}),J2=Q$(M1.cwd(),"config"),U2=Q$(M1.cwd(),"src/generated"),jW=_J.env.CLARITY_LOG_DIR||rT(DG(),"logs"),DJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:jW,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},Qh=await OG(),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"},k=W$,Y2=W$.red,zW=W$.green,h2=W$.yellow,HW=W$.blue,f2=W$.magenta,Z2=W$.cyan,yh=W$.white,E2=W$.gray,TW=W$.bgRed,GW=W$.bgYellow,W2=W$.bgGray,Lh=W$.bold,F2=W$.dim,B2=W$.italic,j2=W$.underline,z2=W$.strikethrough,H2=W$.reset,OJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},nW={debug:"\uD83D\uDD0D",info:HW("ℹ"),success:zW("✓"),warning:GW(yh(Lh(" WARN "))),error:TW(yh(Lh(" ERROR ")))},T2=new bJ("stacks"),d$=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}`}},iJ=class extends d${code="CONFIG_NOT_FOUND";constructor(w,A,J){let U=J?` or alias "${J}"`:"";super(`Configuration "${w}"${U} not found`,{configName:w,alias:J,searchPaths:A,searchPathCount:A.length})}},I1=class extends d${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}},xh=class extends d${code="CONFIG_VALIDATION_ERROR";constructor(w,A,J){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:J,validationErrors:A,errorCount:A.length})}},Ph=class extends d${code="CONFIG_MERGE_ERROR";constructor(w,A,J,U){super(`Failed to merge configuration from "${w}" with "${A}": ${J.message}`,{sourcePath:w,targetPath:A,configName:U,originalError:J.name,originalMessage:J.message});this.cause=J}},cJ=class extends d${code="ENV_VAR_ERROR";constructor(w,A,J,U){super(`Failed to parse environment variable "${w}" with value "${A}" as ${J}`,{envKey:w,envValue:A,expectedType:J,configName:U})}},bh=class extends d${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}},ih=class extends d${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}},y1=class extends d${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})}},ch=class extends d${code="BROWSER_CONFIG_ERROR";constructor(w,A,J,U){super(`Failed to fetch configuration from "${w}": ${A} ${J}`,{endpoint:w,status:A,statusText:J,configName:U})}},uh=class extends d${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}},p0={configNotFound($,w,A){return new iJ($,w,A)},configLoad($,w,A){return new I1($,w,A)},configValidation($,w,A){return new xh($,w,A)},configMerge($,w,A,J){return new Ph($,w,A,J)},envVar($,w,A,J){return new cJ($,w,A,J)},fileSystem($,w,A){return new bh($,w,A)},typeGeneration($,w,A){return new ih($,w,A)},schemaValidation($,w,A){return new y1($,w,A)},browserConfig($,w,A,J){return new ch($,w,A,J)},plugin($,w,A){return new uh($,w,A)}},vW={replace:"replace",concat:"concat",smart:"smart"},mW=/^https?:\/\//,W0=new bJ("bunfig",{showTags:!0}),i0=new th,dW=x$(ww.cwd(),"config"),gW=x$(ww.cwd(),"src/generated")});M2=uJ.env.CLARITY_LOG_DIR||R2(K2(),"logs"),lW={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:M2,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},nJ={...lW},oK=(async()=>{try{let{loadConfig:$}=await q2().then(()=>SW),w=await $({name:"clarity",alias:"logging",defaultConfig:lW,cwd:uJ.cwd()});if(w)Object.assign(nJ,w)}catch{}return nJ})();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$,EM=H$.red,k2=H$.green,WM=H$.yellow,Q2=H$.blue,FM=H$.magenta,BM=H$.cyan,LW=H$.white,jM=H$.gray,x2=H$.bgRed,P2=H$.bgYellow,zM=H$.bgGray,CW=H$.bold,HM=H$.dim,TM=H$.italic,GM=H$.underline,qM=H$.strikethrough,RM=H$.reset,Dh={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},b2={debug:"\uD83D\uDD0D",info:Q2("ℹ"),success:k2("✓"),warning:P2(LW(CW(" WARN "))),error:x2(LW(CW(" ERROR ")))};NM=new Aw("stacks")});var lJ={};G8(lJ,{safeStringify:()=>w0,safeDeleteFile:()=>oh,resolvePathRewrite:()=>sh,redactSensitive:()=>dJ,isValidRootCA:()=>ah,isSingleProxyOptions:()=>C1,isSingleProxyConfig:()=>m2,isMultiProxyOptions:()=>Uw,isMultiProxyConfig:()=>sW,getSudoPassword:()=>Jw,getPrimaryDomain:()=>gJ,extractHostname:()=>v2,execSudoSync:()=>rh,debugLog:()=>z});import{execSync as pW}from"node:child_process";import*as aW from"node:fs/promises";function Jw(){return process.env.SUDO_PASSWORD}function rh($){let w=Jw(),A=$.replace(/'/g,"'\\''");if(w)return pW(`echo '${w}' | sudo -S sh -c '${A}' 2>/dev/null`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});return pW(`sudo sh -c '${A}'`,{encoding:"utf-8"})}function z($,w,A){if(A)i2.debug(`[rpx:${$}] ${w}`)}function n2($){let w=$.toLowerCase();return c2.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function dJ($){if(Array.isArray($))return $.map((A)=>dJ(A));if(typeof $==="string")return u2.test($)?rW:$;if(!$||typeof $!=="object")return $;let w={};for(let[A,J]of Object.entries($)){if(n2(A)){w[A]=rW;continue}w[A]=dJ(J)}return w}function w0($,w){return JSON.stringify(dJ($),null,w)}function v2($){if(Uw($))return $.proxies.map((w)=>{let A=w.to||"stacks.localhost";return A.startsWith("http")?new URL(A).hostname:A});if(C1($)){let w=$.to||"stacks.localhost";return[w.startsWith("http")?new URL(w).hostname:w]}return["stacks.localhost"]}function ah($){return typeof $==="object"&&$!==null&&"certificate"in $&&"privateKey"in $&&typeof $.certificate==="string"&&typeof $.privateKey==="string"}function gJ($){if(!$)return"stacks.localhost";if(Uw($)&&$.proxies.length>0)return $.proxies[0].to||"stacks.localhost";if(C1($))return $.to||"stacks.localhost";return"stacks.localhost"}function sW($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}function Uw($){return"proxies"in $&&Array.isArray($.proxies)}function C1($){return"to"in $&&typeof $.to==="string"}function m2($){return!!($&&("to"in $)&&!("proxies"in $))}function sh($,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,U=A.stripPrefix===!0?$.slice(A.from.length)||"/":$;return{targetHost:J,targetPath:U}}return null}async function oh($,w){try{await aW.unlink($),z("certificates",`Successfully deleted: ${$}`,w)}catch(A){if(A.code!=="ENOENT")z("certificates",`Warning: Could not delete ${$}: ${A}`,w)}}var i2,rW="[redacted]",c2,u2;var T$=FU(()=>{ph();i2=new Aw("rpx",{showTags:!1});c2=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),u2=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/});var hU={};G8(hU,{stopDnsServer:()=>y7,startDnsServer:()=>I7,setupResolver:()=>V7,removeResolver:()=>D7,isDnsServerRunning:()=>L7});import q7 from"node:dgram";function R7($){return{id:$.readUInt16BE(0),flags:$.readUInt16BE(2),qdcount:$.readUInt16BE(4),ancount:$.readUInt16BE(6),nscount:$.readUInt16BE(8),arcount:$.readUInt16BE(10)}}function CF($,w){let A=[],J=w;while(!0){let U=$[J];if(U===0){J++;break}if((U&192)===192){let Y=$.readUInt16BE(J)&16383,{name:h}=CF($,Y);A.push(h),J+=2;break}J++,A.push($.subarray(J,J+U).toString("ascii")),J+=U}return{name:A.join("."),newOffset:J}}function N7($,w){let{name:A,newOffset:J}=CF($,w),U=$.readUInt16BE(J),Y=$.readUInt16BE(J+2);return{question:{name:A,type:U,class:Y},newOffset:J+4}}function UU($){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 K7($,w,A){let J=[],U=Buffer.alloc(12);U.writeUInt16BE($,0),U.writeUInt16BE(33152,2),U.writeUInt16BE(1,4),U.writeUInt16BE(1,6),U.writeUInt16BE(0,8),U.writeUInt16BE(0,10),J.push(U),J.push(UU(w.name));let Y=Buffer.alloc(4);Y.writeUInt16BE(w.type,0),Y.writeUInt16BE(w.class,2),J.push(Y),J.push(UU(w.name));let h=Buffer.alloc(10);if(h.writeUInt16BE(w.type,0),h.writeUInt16BE(1,2),h.writeUInt32BE(300,4),w.type===1){h.writeUInt16BE(4,8),J.push(h);let Z=A.split(".").map((f)=>Number.parseInt(f,10));J.push(Buffer.from(Z))}else if(w.type===28)h.writeUInt16BE(16,8),J.push(h),J.push(Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]));else return U.writeUInt16BE(33155,2),U.writeUInt16BE(0,6),Buffer.concat([U,UU(w.name),Y]);return Buffer.concat(J)}function M7($,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(UU(w.name));let U=Buffer.alloc(4);return U.writeUInt16BE(w.type,0),U.writeUInt16BE(w.class,2),A.push(U),Buffer.concat(A)}async function I7($,w){if(i$)return z("dns","DNS server already running",w),!0;return yF=new Set($.map((A)=>A.toLowerCase())),new Promise((A)=>{i$=q7.createSocket("udp4"),i$.on("error",(J)=>{if(z("dns",`DNS server error: ${J.message}`,w),J.message.includes("EACCES")||J.message.includes("permission"))z("dns","DNS server requires root privileges to bind to port 53",w);i$?.close(),i$=null,A(!1)}),i$.on("message",(J,U)=>{try{let Y=R7(J),{question:h}=N7(J,12);z("dns",`Query for ${h.name} type ${h.type} from ${U.address}`,w);let Z=h.name.toLowerCase(),f=!1;for(let W of yF)if(Z===W||Z.endsWith(`.${W}`)){f=!0;break}let E;if(f&&(h.type===1||h.type===28))E=K7(Y.id,h,"127.0.0.1"),z("dns",`Responding with localhost for ${h.name}`,w);else E=M7(Y.id,h),z("dns",`NXDOMAIN for ${h.name}`,w);i$?.send(E,U.port,U.address)}catch(Y){z("dns",`Error processing DNS query: ${Y}`,w)}}),i$.on("listening",()=>{let J=i$?.address();z("dns",`DNS server listening on ${J?.address}:${J?.port}`,w),A(!0)});try{i$.bind(LF,"127.0.0.1")}catch(J){z("dns",`Failed to bind DNS server: ${J}`,w),A(!1)}})}function y7($){if(i$)z("dns","Stopping DNS server",$),i$.close(),i$=null}function L7(){return i$!==null}function C7($){let w=new Set;for(let A of $){let J=A.split(".");if(J.length>=2)w.add(J[J.length-1])}return Array.from(w)}async function S7($){if(process.platform!=="darwin")return;let{execSudoSync:w,getSudoPassword:A}=await Promise.resolve().then(() => (T$(),lJ));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(U){z("dns",`Could not flush DNS cache: ${U}`,$)}}async function V7($,w){if(process.platform!=="darwin")return z("dns","Resolver setup only needed on macOS",$),!0;let{execSudoSync:A,getSudoPassword:J}=await Promise.resolve().then(() => (T$(),lJ));if(!J())return z("dns","SUDO_PASSWORD not set, cannot create resolver files",$),!1;let Y=w?C7(w):["test"];try{for(let h of Y){if(YU.has(h))continue;let Z=`bash -c 'mkdir -p /etc/resolver && echo -e "nameserver 127.0.0.1\\nport ${LF}" > /etc/resolver/${h}'`;A(Z),YU.add(h),z("dns",`Created /etc/resolver/${h} for .${h} TLD`,$)}return await S7($),!0}catch(h){return z("dns",`Failed to create resolver file: ${h}`,$),!1}}async function D7($){if(process.platform!=="darwin")return;let{execSudoSync:w,getSudoPassword:A}=await Promise.resolve().then(() => (T$(),lJ));try{if(A()){for(let U of YU)w(`rm -f /etc/resolver/${U}`),z("dns",`Removed /etc/resolver/${U}`,$);YU.clear()}}catch(J){z("dns",`Failed to remove resolver files: ${J}`,$)}}var LF=15353,i$=null,yF,YU;var fU=FU(()=>{T$();yF=new Set;YU=new Set});import*as l$ from"process";import{existsSync as nF}from"node:fs";import BU from"node:fs/promises";import q8 from"node:os";import jU from"node:path";import o0 from"node:process";import{EventEmitter as vF}from"node:events";import u0 from"node:process";import R8 from"node:process";import GU from"node:process";import v1 from"node:process";import f1 from"node:process";import M8 from"node:tty";import DB,{stdin as w5,stdout as A5}from"node:process";import y8,{stdin as XB,stdout as kB}from"node:process";import QB from"node:readline";class C8{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let $=q8.homedir(),w=jU.join($,".config","clapp");this.configPath=jU.join(w,"telemetry.json")}async isEnabled(){if(o0.env.DO_NOT_TRACK==="1"||o0.env.DO_NOT_TRACK==="true")return!1;if(o0.env.NO_TELEMETRY==="1"||o0.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:q8.platform(),nodeVersion:o0.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:o0.env.DO_NOT_TRACK==="1"||o0.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:$.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(nF(this.configPath)){let $=await BU.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=jU.dirname(this.configPath);await BU.mkdir(w,{recursive:!0}),await BU.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 m7=new C8;function mF($,w={}){let A={_:[]},J=w.alias||{},U=new Set(w.boolean||[]),Y={};for(let Z of Object.keys(J))for(let f of J[Z])Y[f]=Z;for(let Z of U)if(J[Z])for(let f of J[Z])U.add(f);function h(Z,f){let E=Y[Z]||Z;if(A[E]=f,J[E])for(let W of J[E])A[W]=f;if(Y[Z]&&J[Y[Z]])for(let W of J[Y[Z]])A[W]=f;A[Z]=f}for(let Z=0;Z<$.length;Z++){let f=$[Z];if(f==="--"){A._.push(...$.slice(Z+1));break}if(f.startsWith("--")){let E=f.indexOf("=");if(E!==-1){let W=f.slice(2,E),F=f.slice(E+1);h(W,F)}else{let W=f.slice(2);if(W.startsWith("no-")){let j=W.slice(3);h(j,!1);continue}let F=Y[W]||W;if(U.has(F)||U.has(W))h(W,!0);else{let j=$[Z+1];if(j!==void 0&&!j.startsWith("-"))h(W,j),Z++;else h(W,!0)}}}else if(f.startsWith("-")&&f.length>1){let E=f.slice(1);for(let W=0;W<E.length;W++){let F=E[W],j=Y[F]||F;if(W===E.length-1&&!U.has(j)&&!U.has(F)){let B=$[Z+1];if(B!==void 0&&!B.startsWith("-"))h(F,B),Z++;else h(F,!0)}else h(F,!0)}}else A._.push(f)}return A}function TU($){return $.replace(/[<[].+/,"").trim()}function dF($){let w=/<([^>]+)>/g,A=/\[([^\]]+)\]/g,J=[],U=(Z)=>{let f=!1,E=Z[1];if(E.startsWith("..."))E=E.slice(3),f=!0;return{required:Z[0].startsWith("<"),value:E,variadic:f}},Y;while(Y=w.exec($))J.push(U(Y));let h;while(h=A.exec($))J.push(U(h));return J}function gF($){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((Y,h)=>{return h!==A&&Y.names.some((Z)=>J.names.includes(Z))&&typeof Y.required==="boolean"}))w.boolean.push(J.names[0])}else w.boolean.push(J.names[0])}return w}function N8($){return $.reduce((w,A)=>w.length>=A.length?w:A,"")}function zU($,w){return $.length>=w?$:`${$}${" ".repeat(w-$.length)}`}function lF($){return $.replace(/([a-z])-([a-z])/g,(w,A,J)=>{return A+J.toUpperCase()})}function tF($,w,A){let J=0,U=w.length,Y=$,h;for(;J<U;++J)h=Y[w[J]],Y=Y[w[J]]=J===U-1?A:h!=null?h:!!~w[J+1].indexOf(".")||!(+w[J+1]>-1)?{}:[]}function pF($,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 rF($){let w=/([^\\/]+)$/.exec($);return w?w[1]:""}function S8($){return $.split(".").map((w,A)=>{return A===0?lF(w):w}).join(".")}class n1 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}
|
|
52
|
-
|
|
53
|
-
Stack trace:
|
|
54
|
-
${this.stack}`;return this.message}}function aF(){let{env:$}=R8,{TERM:w,TERM_PROGRAM:A}=$;if(R8.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 g1="\x1B",w$=`${g1}[`;var G0={to($,w){if(!w)return`${w$}${$+1}G`;return`${w$}${w+1};${$+1}H`},move($,w){let A="";if($<0)A+=`${w$}${-$}D`;else if($>0)A+=`${w$}${$}C`;if(w<0)A+=`${w$}${-w}A`;else if(w>0)A+=`${w$}${w}B`;return A},up:($=1)=>`${w$}${$}A`,down:($=1)=>`${w$}${$}B`,forward:($=1)=>`${w$}${$}C`,backward:($=1)=>`${w$}${$}D`,nextLine:($=1)=>`${w$}E`.repeat($),prevLine:($=1)=>`${w$}F`.repeat($),left:`${w$}G`,hide:`${w$}?25l`,show:`${w$}?25h`,save:`${g1}7`,restore:`${g1}8`};var HU={screen:`${w$}2J`,up:($=1)=>`${w$}1J`.repeat($),down:($=1)=>`${w$}J`.repeat($),line:`${w$}2K`,lineEnd:`${w$}K`,lineStart:`${w$}1K`,lines($){let w="";for(let A=0;A<$;A++)w+=this.line+(A<$-1?G0.up():"");if($)w+=G0.left;return w}},t7={screen:`${g1}c`};function sF($,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 U=1;U<=$.length;U++)if(w.charAt(J-1)===$.charAt(U-1))A[J][U]=A[J-1][U-1];else A[J][U]=Math.min(A[J-1][U-1]+1,A[J][U-1]+1,A[J-1][U]+1);return A[w.length][$.length]}function V8($,w,A=2,J=3){return w.map((U)=>({cmd:U,distance:sF($,U)})).filter(({distance:U})=>U<=A).sort((U,Y)=>U.distance-Y.distance).slice(0,J).map(({cmd:U})=>U)}class D8{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=TU($).split(",").map((J)=>{let U=J.trim().replace(/^-{1,2}/,"");if(U.startsWith("no-"))this.negated=!0,U=U.replace(/^no-/,"");return S8(U)}).sort((J,U)=>J.length>U.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 r7=GU.argv,oF=`${GU.platform}-${GU.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,K8=v1.argv,eF=`${v1.platform}-${v1.arch} node-${v1.version}`;class qU{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=TU($);let U=TU($),Y=U.indexOf(":");if(Y>0)this.namespace=U.substring(0,Y),this.name=U.substring(Y+1);if(this.args=dF($),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 D8($,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 RU}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:U}=this.cli.globalCommand,Y=[{body:`${$}${A?`/${A}`:""}`}];if(Y.push({title:"Usage",body:` $ ${$} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&w.length>0){let f=N8(w.map((B)=>B.rawName)),E=new Map,W=[];for(let B of w)if(B.namespace){if(!E.has(B.namespace))E.set(B.namespace,[]);E.get(B.namespace).push(B)}else W.push(B);let F="";if(W.length>0)F+=W.map((B)=>{return` ${zU(B.rawName,f.length)} ${B.description}`}).join(`
|
|
55
|
-
`);let j=Array.from(E.keys()).sort();for(let B of j){let T=E.get(B);if(F.length>0)F+=`
|
|
56
|
-
|
|
57
|
-
`;F+=` ${B}:
|
|
58
|
-
`,F+=T.map((H)=>{return` ${zU(H.rawName,f.length-2)} ${H.description}`}).join(`
|
|
59
|
-
`)}Y.push({title:"Commands",body:F}),Y.push({title:"For more info, run any command with the `--help` flag",body:w.map((B)=>` $ ${$}${B.displayName===""?"":` ${B.displayName}`} --help`).join(`
|
|
60
|
-
`)})}let Z=this.isGlobalCommand?J:[...this.options,...J||[]];if(!this.isGlobalCommand&&!this.isDefaultCommand)Z=Z.filter((f)=>f.name!=="version");if(Z.length>0){let f=N8(Z.map((E)=>E.rawName));Y.push({title:"Options",body:Z.map((E)=>{return` ${zU(E.rawName,f.length)} ${E.description} ${E.config.default===void 0?"":`(default: ${E.config.default})`}`}).join(`
|
|
61
|
-
`)})}if(this.examples.length>0)Y.push({title:"Examples",body:this.examples.map((f)=>{if(typeof f==="function")return f($);return f}).join(`
|
|
62
|
-
`)});if(U)Y=U(Y)||Y;console.log(Y.map((f)=>{return f.title?`${f.title}:
|
|
63
|
-
${f.body}`:f.body}).join(`
|
|
64
|
-
|
|
65
|
-
`))}outputVersion(){let{name:$}=this.cli,{versionNumber:w}=this.cli.globalCommand;if(w)console.log(`${$}/${w} ${typeof Bun<"u"?oF:eF}`)}checkRequiredArgs(){let $=this.args.filter((w)=>w.required).length;if(this.cli.args.length<$){let A=this.args.filter((U)=>U.required).slice(this.cli.args.length),J=A.map((U)=>`<${U.value}>`).join(" ");throw new n1(`Missing required argument${A.length>1?"s":""}: ${J}
|
|
66
|
-
|
|
67
|
-
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 U=[...w.options,...this.options].flatMap((f)=>f.names),Y=A.length>1?`--${A}`:`-${A}`,h=V8(A,U),Z=`Unknown option \`${Y}\``;if(h.length>0)Z+=`
|
|
68
|
-
|
|
69
|
-
Did you mean one of these?`,h.forEach((f)=>{let E=f.length>1?`--${f}`:`-${f}`;Z+=`
|
|
70
|
-
• ${E}`});throw Z+=`
|
|
71
|
-
|
|
72
|
-
Run \`${this.cli.name} ${this.rawName} --help\` to see available options.`,new n1(Z)}}}checkOptionValue(){let{options:$,globalCommand:w}=this.cli,A=[...w.options,...this.options];for(let J of A){let U=$[J.name.split(".")[0]];if(J.required){let Y=A.some((h)=>h.negated&&h.names.includes(J.name));if(U===!0||U===!1&&!Y)throw new n1(`Option \`${J.rawName}\` requires a value.
|
|
73
|
-
|
|
74
|
-
Example: ${this.cli.name} ${this.rawName} ${J.rawName} <value>`)}}}}class RU extends qU{constructor($){super("@@global@@","",{},$)}}var $B=qU,n0={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 Y1={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function wB(){return!0}function AB(){let $={};$.supportsColor=wB();function w(J,U=[]){let Y=J===""?[]:[...U,J],h=function(f){if(!$.supportsColor)return f;let E="",W="";for(let F of Y)if(F in Y1&&Y1[F]in n0){let j=Y1[F];E+=n0[j][0],W=n0[j][1]+W}else if(F in n0)E+=n0[F][0],W=n0[F][1]+W;return E+f+W},Z=[...Object.keys(n0),...Object.keys(Y1)];for(let f of Z)if(!(f in h))Object.defineProperty(h,f,{get(){return w(f,Y)}});return h}let A=[...Object.keys(n0),...Object.keys(Y1)];for(let J of A)if(!(J in $))Object.defineProperty($,J,{get(){return w(J)}});return $}var h1=AB();class NU extends vF{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 RU(this),this.globalCommand.usage("<command> [options]")}handleSignals($){if(this.signalHandlersSet)return this;let w=async(A)=>{if(console.log(`
|
|
75
|
-
|
|
76
|
-
Received ${A}, cleaning up...`),$)try{await $()}catch(J){console.error("Error during cleanup:",J)}u0.exit(0)};return u0.on("SIGINT",()=>w("SIGINT")),u0.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 $B($,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(h1.red(`
|
|
77
|
-
✗ Command "${$}" not found.
|
|
78
|
-
`)),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=V8($,w);if(A.length>0)console.log(h1.yellow("Did you mean one of these?")),A.forEach((J)=>console.log(` ${h1.dim("•")} ${this.name} ${J}`)),console.log("")}console.log(h1.dim("Run"),`${this.name} --help`,h1.dim("to see all available commands")),u0.exit(1)}async parse($=K8,w={}){let{run:A=!0,exitOnError:J=!1}=w;if(J)try{return await this.parse($,{run:A})}catch(f){throw this.handleUsageError(f),f}if(this.rawArgs=$,!this.name)this.name=$[1]?rF($[1]):"cli";let U=!0,Y=$.slice(2),h=Y[0];if(h&&!h.startsWith("-")){for(let f of this.commands)if(f.isMatched(h)){let E=this.mri(Y,f);U=!1;let W={...E,args:E.args.slice(1)};this.setParsedInfo(W,f,h),this.emit(`command:${h}`,f);break}}if(U){for(let f of this.commands)if(f.name===""){U=!1;let E=this.mri(Y,f);this.setParsedInfo(E,f),this.emit("command:!",f);break}}if(U){let f=this.mri($.slice(2));this.setParsedInfo(f)}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 Z={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 Z}mri($,w){let A=[...this.globalCommand.options,...w?w.options:[]],J=gF(A),U=[],Y=$.indexOf("--");if(Y>-1)U=$.slice(Y+1),$=$.slice(0,Y);let h=mF($,J),Z={_:h._};for(let j of Object.keys(h))if(j!=="_")Z[S8(j)]=h[j];let f=Z._,E={"--":U},W=w&&w.config.ignoreOptionDefaultValue?w.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,F=Object.create(null);for(let j of A){if(!W&&j.config.default!==void 0)for(let B of j.names)E[B]=j.config.default;if(Array.isArray(j.config.type)){if(F[j.name]===void 0)F[j.name]={shouldTransform:!0,transformFunction:j.config.type[0]}}}for(let j of Object.keys(Z))if(j!=="_"){let B=j.split(".");tF(E,B,Z[j]),pF(E,F)}return{args:f,options:E}}async run($=K8){return this.parse($,{run:!0,exitOnError:!0})}handleUsageError($){if(!(!!$&&typeof $==="object"&&$.name==="ClappError"&&$.isUsageError!==!1))return;let J=$,U=J.message??"command-line error",Y=this.name?`${this.name}: `:"",h=/--help/.test(U)?"":`
|
|
79
|
-
Run \`${this.name??"cli"} --help\` for usage.`;u0.stderr.write(`${Y}${U}${h}
|
|
80
|
-
`),u0.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((Z,f)=>{if(Z.variadic)J.push($.slice(f));else J.push($[f])}),J.push(w);let U={command:A,args:J,options:w};for(let Z of A.beforeHooks)await Z(U);let Y,h=async()=>{let Z=A.commandAction.apply(this,J);if(Z instanceof Promise)Y=await Z;else Y=Z;return Y};if(A.middleware.length>0){let Z=0,f=async()=>{if(Z<A.middleware.length){let E=A.middleware[Z++];await E({...U,next:f})}else await h()};await f()}else await h();for(let Z of A.afterHooks)await Z(U);return Y}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return u0.removeAllListeners("SIGINT"),u0.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 O8{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 s7=new O8;function JB(){if("FORCE_COLOR"in f1.env)return f1.env.FORCE_COLOR!=="0";if("NO_COLOR"in f1.env||f1.env.TERM==="dumb")return!1;if(f1.platform==="win32")return!0;return M8.isatty(1)&&M8.isatty(2)}var _8=JB();function a($,w){if(!_8)return(A)=>A;return(A)=>$+A+w}var UB=a("\x1B[0m","\x1B[0m"),YB=a("\x1B[31m","\x1B[39m"),hB=a("\x1B[32m","\x1B[39m"),fB=a("\x1B[33m","\x1B[39m"),ZB=a("\x1B[34m","\x1B[39m"),EB=a("\x1B[35m","\x1B[39m"),WB=a("\x1B[36m","\x1B[39m"),FB=a("\x1B[37m","\x1B[39m"),BB=a("\x1B[90m","\x1B[39m"),jB=a("\x1B[1m","\x1B[22m"),zB=a("\x1B[3m","\x1B[23m"),HB=a("\x1B[4m","\x1B[24m"),TB=a("\x1B[2m","\x1B[22m"),GB=a("\x1B[7m","\x1B[27m"),qB=a("\x1B[8m","\x1B[28m"),RB=a("\x1B[9m","\x1B[29m"),NB=a("\x1B[41m","\x1B[49m"),KB=a("\x1B[42m","\x1B[49m"),MB=a("\x1B[43m","\x1B[49m"),IB=a("\x1B[44m","\x1B[49m"),yB=a("\x1B[45m","\x1B[49m"),LB=a("\x1B[46m","\x1B[49m"),CB=a("\x1B[47m","\x1B[49m"),SB=_8,VB={reset:UB,red:YB,green:hB,yellow:fB,blue:ZB,magenta:EB,cyan:WB,white:FB,gray:BB,bold:jB,italic:zB,underline:HB,dim:TB,inverse:GB,hidden:qB,strikethrough:RB,bgRed:NB,bgGreen:KB,bgYellow:MB,bgBlue:IB,bgMagenta:yB,bgCyan:LB,bgWhite:CB,isColorSupported:SB},m1=VB,OB=["up","down","left","right","space","enter","cancel"],d1={actions:new Set(OB),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};function X8($,w){if(typeof $==="string")return d1.aliases.get($)===w;for(let A of $){if(A===void 0)continue;if(X8(A,w))return!0}return!1}function _B($,w){if($===w)return[];let A=$.split(`
|
|
81
|
-
`),J=w.split(`
|
|
82
|
-
`),U=[];for(let Y=0;Y<Math.max(A.length,J.length);Y++)if(A[Y]!==J[Y])U.push(Y);return U}var J5=DB.platform.startsWith("win"),I8=Symbol("clapp:cancel");function u1($,w){let A=$;if(A.isTTY)A.setRawMode(w)}function xB($){return $.replace(/\x1b\[[0-9;]*m/g,"")}function PB($){return xB($).length}function L8($,w,A){if(!w||w<1)return $;let J=A?.hard??!1,U=A?.trim??!0,Y=$.split(`
|
|
83
|
-
`),h=[];for(let Z of Y){if(PB(Z)<=w){h.push(U?Z.trimEnd():Z);continue}if(J){let f="",E=0,W=0;while(W<Z.length){let F=Z.slice(W).match(/^\x1b\[[0-9;]*m/);if(F){f+=F[0],W+=F[0].length;continue}if(E>=w)h.push(U?f.trimEnd():f),f="",E=0;f+=Z[W],E++,W++}if(f)h.push(U?f.trimEnd():f)}else h.push(U?Z.trimEnd():Z)}return h.join(`
|
|
84
|
-
`)}class KU{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=XB,output:J=kB,render:U,signal:Y,...h}=$;this.opts=h,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=U.bind(this),this._track=w,this._abortSignal=Y,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 U of A)if(U.cb(...w),U.once)J.push(()=>A.splice(A.indexOf(U),1));for(let U of J)U();return this}prompt(){return new Promise(($)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),$(I8);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}if(this.rl=QB.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),u1(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(G0.show),this.output.off("resize",this.render),u1(this.input,!1),$(this.value)}),this.once("cancel",()=>{this.output.write(G0.show),this.output.off("resize",this.render),u1(this.input,!1),$(I8)})})}_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&&d1.aliases.has(w.name))this.emit("cursor",d1.aliases.get(w.name));if(d1.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(X8([$,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(`
|
|
85
|
-
`),u1(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 $=L8(this._prevFrame,y8.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
86
|
-
`).length-1;this.output.write(G0.move(-999,$*-1))}render(){let $=L8(this._render(this)??"",y8.stdout.columns,{hard:!0,trim:!1});if($===this._prevFrame)return;if(this.state==="initial")this.output.write(G0.hide);else{let w=_B(this._prevFrame,$);if(this.restoreCursor(),w&&w?.length===1){let A=w[0];this.output.write(G0.move(0,A)),this.output.write(HU.lines(1));let J=$.split(`
|
|
87
|
-
`);this.output.write(J[A]),this._prevFrame=$,this.output.write(G0.move(0,J.length-A-1));return}if(w&&w?.length>1){let A=w[0];this.output.write(G0.move(0,A)),this.output.write(HU.down());let U=$.split(`
|
|
88
|
-
`).slice(A);this.output.write(U.join(`
|
|
89
|
-
`)),this._prevFrame=$;return}this.output.write(HU.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function bB($,w){if($===void 0)return 0;if(w.length===0)return 0;let J=w.findIndex((U)=>U.value===$);return J!==-1?J:0}function iB($,w){return(w.label??String(w.value)).toLowerCase().includes($.toLowerCase())}function cB($,w){if(!w)return;if($)return w;return w[0]}class uB extends KU{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#A="";#J;#w;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return m1.inverse(m1.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`${$}${m1.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??iB;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 U=w.findIndex((Y)=>Y.value===J);if(U!==-1)this.toggleSelected(J),this.#$=U}this.focusedValue=this.options[this.#$]?.value,this.on("key",(J,U)=>this.#U(J,U)),this.on("userInput",(J)=>this.#Y(J))}_isActionKey($,w){return $==="\t"||this.multiple&&this.isNavigating&&w.name==="space"&&$!==void 0&&$!==""}#U($,w){let A=w.name==="up",J=w.name==="down",U=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(U)this.value=cB(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=[$]}#Y($){if($!==this.#A){this.#A=$;let w=this.options;if($)this.filteredOptions=w.filter((A)=>this.#J($,A));else this.filteredOptions=[...w];if(this.#$=bB(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 nB extends KU{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((U)=>U.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((U)=>({...U,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 vB=aF();var l=($,w)=>vB?$:w,h5=l("◆","*"),f5=l("■","x"),Z5=l("▲","x"),E5=l("◇","o"),W5=l("┌","T"),mB=l("│","|"),F5=l("└","—"),B5=l("●",">"),j5=l("○"," "),z5=l("◻","[•]"),H5=l("◼","[+]"),T5=l("◻","[ ]"),G5=l("▪","•"),q5=l("─","-"),R5=l("╮","+"),N5=l("├","+"),K5=l("╯","+"),M5=l("●","•"),I5=l("◆","*"),y5=l("▲","!"),L5=l("■","x");var C5={light:l("─","-"),heavy:l("━","="),block:l("█","#")};function dB(){return`${m1.gray(mB)} `}var S5=dB();import{homedir as EY}from"node:os";import{join as WY,resolve as T6}from"node:path";import{existsSync as k8,statSync as Q8}from"fs";import{existsSync as gB,mkdirSync as _5,readdirSync as X5,readFileSync as lB,writeFileSync as k5}from"fs";import{homedir as Tw}from"os";import{dirname as P5,resolve as p$}from"path";import LA from"process";import{existsSync as x8,statSync as P8}from"fs";import{existsSync as nU,mkdirSync as tB,readdirSync as pB,writeFileSync as rB}from"fs";import{homedir as Gw}from"os";import{dirname as b8,resolve as O$}from"path";import e0 from"process";import{join as aB,relative as sB,resolve as i8}from"path";import BA from"process";import{existsSync as Kf,mkdirSync as l5,readdirSync as t5,writeFileSync as p5}from"fs";import{homedir as MU}from"os";import{dirname as s5,resolve as D$}from"path";import E1 from"process";import{join as oB,relative as eB,resolve as c8}from"path";import jA from"process";import{existsSync as Mf,mkdirSync as Aq,readdirSync as Jq,writeFileSync as Uq}from"fs";import{dirname as hq,resolve as zA}from"path";import vU from"process";import{Buffer as v0}from"buffer";import{createCipheriv as $j,createDecipheriv as wj,randomBytes as IU}from"crypto";import{closeSync as yU,createReadStream as u8,createWriteStream as Aj,existsSync as LU,fsyncSync as n8,openSync as v8,writeFileSync as Jj}from"fs";import{access as Uj,constants as m8,mkdir as Yj,readdir as l1,rename as d8,stat as qw,unlink as t1,writeFile as CU}from"fs/promises";import{join as Rw}from"path";import q$ from"process";import{pipeline as hj}from"stream/promises";import{createGzip as g8}from"zlib";import Nw from"process";import K0 from"process";import{Buffer as q0}from"buffer";import{createCipheriv as fj,createDecipheriv as Zj,randomBytes as SU}from"crypto";import{closeSync as VU,createReadStream as l8,createWriteStream as Ej,existsSync as p1,fsyncSync as t8,openSync as p8,writeFileSync as Wj}from"fs";import{access as Fj,constants as r8,mkdir as Bj,readdir as r1,rename as a8,stat as Kw,unlink as a1,writeFile as DU}from"fs/promises";import{isAbsolute as jj,join as Mw,resolve as zj}from"path";import S from"process";import{pipeline as Hj}from"stream/promises";import{createGzip as s8}from"zlib";import Iw from"process";import M0 from"process";import s1 from"process";import{existsSync as o1}from"fs";import{resolve as OU}from"path";import{existsSync as Tj}from"fs";import{existsSync as Gj,readdirSync as qj}from"fs";import{extname as _U,resolve as o8}from"path";import Rj from"process";import{join as Nj,relative as Kj,resolve as e8}from"path";import HA from"process";import{Buffer as R0}from"buffer";import{createCipheriv as Mj,createDecipheriv as Ij,randomBytes as XU}from"crypto";import{closeSync as kU,createReadStream as $f,createWriteStream as yj,existsSync as e1,fsyncSync as wf,openSync as Af,writeFileSync as Lj}from"fs";import{access as Cj,constants as Jf,mkdir as Sj,readdir as $A,rename as Uf,stat as yw,unlink as wA,writeFile as QU}from"fs/promises";import{isAbsolute as Vj,join as Lw,resolve as Dj}from"path";import V from"process";import{pipeline as Oj}from"stream/promises";import{createGzip as Yf}from"zlib";import Cw from"process";import I0 from"process";import JA from"process";import{existsSync as UA}from"fs";import{resolve as uU}from"path";import{existsSync as az}from"fs";class Rf{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 U=this.generateKey($,A),Y=J??this.options.ttl,h=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:h}),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(!k8($))return!0;return Q8($).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 U=k8(A)?Q8(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 Nf{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),h=performance.now()-J;return this.recordMetric({operation:$,duration:h,timestamp:U,...A}),Y}catch(Y){let h=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:h,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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>$)}}var FA=new Rf,eU=new Nf;var _j=Object.defineProperty,Xj=($)=>$;function kj($,w){this[$]=Xj.bind(null,w)}var Qj=($,w)=>{for(var A in w)_j($,A,{get:w[A],enumerable:!0,configurable:!0,set:kj.bind(w,A)})},xj=($,w)=>()=>($&&(w=$($=0)),w),If={};Qj(If,{withErrorRecovery:()=>Cf,tryLoadConfig:()=>Uz,loadConfigWithResult:()=>Az,loadConfig:()=>_f,isRetryableError:()=>aj,isConfigNotFoundError:()=>rj,isBunfigError:()=>Sf,globalPerformanceMonitor:()=>B1,globalCache:()=>Sw,getEnvOrDefault:()=>sj,generateConfigTypes:()=>Yz,defaultGeneratedDir:()=>uf,defaultConfigDir:()=>cf,deepMergeWithArrayStrategy:()=>UY,deepMerge:()=>Vf,createLibraryConfig:()=>hz,config:()=>Jz,bunfigPlugin:()=>fz,applyEnvVarsToConfig:()=>Z1,TypeGenerationError:()=>rU,SchemaValidationError:()=>F1,PluginError:()=>sU,PerformanceMonitor:()=>wY,FileSystemError:()=>pU,ErrorFactory:()=>m0,EnvVarError:()=>KA,EnvProcessor:()=>CA,ConfigValidator:()=>YY,ConfigValidationError:()=>lU,ConfigNotFoundError:()=>NA,ConfigMergeError:()=>tU,ConfigLoader:()=>hY,ConfigLoadError:()=>W1,ConfigFileLoader:()=>SA,ConfigCache:()=>$Y,CacheUtils:()=>kf,BunfigError:()=>u$,BrowserConfigError:()=>aU,ArrayMergeStrategies:()=>Pf});class $Y{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 U=this.generateKey($,A),Y=J??this.options.ttl,h=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:h}),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(!x8($))return!0;return P8($).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 U=x8(A)?P8(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 wY{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),h=performance.now()-J;return this.recordMetric({operation:$,duration:h,timestamp:U,...A}),Y}catch(Y){let h=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:h,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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 Pj($,w={}){let J=Object.keys(w).sort().map((U)=>`${U}:${w[U]}`).join("|");return J?`${$}:${J}`:$}function bj($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function ij($){return $.getStats().size*2}function AY($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&t(w[0])&&"id"in w[0]&&w[0].id===3&&t(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(t(w)&&t($)&&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(t($)&&"arr"in $&&Array.isArray($.arr)&&t(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&t(w[0])&&t($[0])){let J=[...w];for(let U of $)if(t(U)&&"name"in U){if(!J.find((h)=>t(h)&&("name"in h)&&h.name===U.name))J.push(U)}else if(t(U)&&"path"in U){if(!J.find((h)=>t(h)&&("path"in h)&&h.path===U.path))J.push(U)}else if(!J.some((Y)=>TA(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}if(!t(w)||!t($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let U=w[J];if(U===null||U===void 0)continue;else if(t(U)&&t(A[J]))A[J]=AY(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&t(U[0])&&t(A[J][0])){let Y=[...U];for(let h of A[J])if(t(h)&&"name"in h){if(!Y.find((f)=>t(f)&&("name"in f)&&f.name===h.name))Y.push(h)}else if(t(h)&&"path"in h){if(!Y.find((f)=>t(f)&&("path"in f)&&f.path===h.path))Y.push(h)}else if(!Y.some((Z)=>TA(Z,h)))Y.push(h);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let h of A[J])if(!Y.includes(h))Y.push(h);A[J]=Y}else A[J]=U;else A[J]=U}return A}function TA($,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(!TA($[A],w[A]))return!1;return!0}if(t($)&&t(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!TA($[U],w[U]))return!1}return!0}return!1}function t($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function cj($,w){if(!Mf($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return AY(w,J)}catch{return null}}catch{return null}}async function uj({name:$="",cwd:w,defaultConfig:A}){let J=w||vU.cwd(),U=[".ts",".js",".mjs",".cjs",".json"],Y=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let h of Y)for(let Z of U){let f=zA(J,`${h}${Z}`),E=await cj(f,A);if(E!==null)return E}try{let h=zA(J,"package.json");if(Mf(h)){let f=(await import(h))[$];if(f&&typeof f==="object"&&!Array.isArray(f))try{return AY(A,f)}catch{}}}catch{}return A}function nj($,w={}){let A=jA.cwd();while(A.includes("storage"))A=c8(A,"..");let J=c8(A,$||"");if(w?.relative)return eB(jA.cwd(),J);return J}async function vj(){try{let $=await uj({name:"clarity",defaultConfig:fA,cwd:jA.cwd(),endpoint:"",headers:{}});return{...fA,...$}}catch{return fA}}function o(){if(K0.env.NODE_ENV==="test"||K0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function mj(){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 yf{async format($){let w=await mj(),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:Nw.pid,hostname:w(),environment:Nw.env.NODE_ENV||"development",platform:Nw.platform,version:Nw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Nw.env.NODE_ENV||Nw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class GA{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={...dU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new yf,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},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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...ZA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...ZA};return{...ZA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:dU.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 U,Y=0,h=3,Z=1000;while(Y<h)try{try{try{await Uj(this.config.logDirectory,m8.F_OK|m8.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await Yj(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 f=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:v0.from($);try{if(!LU(this.currentLogFile))await CU(this.currentLogFile,"",{mode:420});if(U=v8(this.currentLogFile,"a",420),Jj(U,f,{flag:"a"}),n8(U),U!==void 0)yU(U),U=void 0;if((await qw(this.currentLogFile)).size===0){if(await CU(this.currentLogFile,f,{flag:"w",mode:420}),(await qw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let W=E;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(Y<h-1){let F=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${h}:`,F);let j=Z*2**Y;await new Promise((B)=>setTimeout(B,j)),Y++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(U!==void 0)try{yU(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(f){if(Y===h-1){let W=f,F=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),f}Y++;let E=Z*2**(Y-1);await new Promise((W)=>setTimeout(W,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 Rw(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 Rw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return Rw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(o())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((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,f])=>f.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,h=Math.max(1,Y);if(U.length>h)for(let[Z]of U.slice(h))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return IU(16).toString("hex")}generateKey(){return IU(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=IU(16),J=$j("aes-256-gcm",w,A),U=v0.concat([J.update($,"utf8"),J.final()]),Y=J.getAuthTag();return{encrypted:v0.concat([A,U,Y]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=g8(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(v0.from(v0.concat(U)))),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(o())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 U=await l1(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await qw(A).catch(()=>null))try{if(await d8(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await t1(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await CU(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await qw(A).catch(()=>null))await d8(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await l1(this.config.logDirectory)).filter((h)=>h.startsWith(this.name)).sort((h,Z)=>Z.localeCompare(h));for(let h of Y.slice(w.maxFiles))await t1(Rw(this.config.logDirectory,h))}}}async compressLogFile($,w){let A=u8($),J=Aj(w),U=g8();await hj(A,U,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()})),LU(this.currentLogFile))try{let $=v8(this.currentLogFile,"r+");n8($),yU($)}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(!o()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await l1(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await t1(Rw(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?m.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=q$.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${m.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}async log($,w,...A){let J=new Date,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);if(this.fancy&&!o()){let E=Qf[$],W=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:m.gray(h),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.error(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:m.green(h),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.error(F),Z){let j=Z.split(`
|
|
90
|
-
`);for(let B of j)if(B.trim()&&!B.includes(h))console.error(this.formatConsoleMessage({timestamp:U,message:m.gray(` ${B}`),level:$,showTimestamp:!1}))}break}}else if(!o()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${h}`),Z)console.error(Z)}if(!this.shouldLog($))return;let f=`${Y} ${this.environment}.${$.toUpperCase()}: ${h}
|
|
91
|
-
`;if(Z)f+=`${Z}
|
|
92
|
-
`;f=f.replace(this.ANSI_PATTERN,""),await this.writeToFile(f)}time($){let w=performance.now();if(this.fancy&&!o()){let A=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:m.blue("◐"),tag:A,message:`${m.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,h=new Date,Z=this.formatConsoleTimestamp(h),E=`${this.formatFileTimestamp(h)} ${this.environment}.INFO: ${Y}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
|
|
93
|
-
`,E=E.replace(this.ANSI_PATTERN,""),this.fancy&&!o()){let W=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:Z,icon:m.green("✓"),tag:W,message:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!o())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 GA(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(o())throw Error("createReadStream is not supported in browser environments");if(!LU(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return u8(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=v0.isBuffer($)?$:v0.from($,"base64"),U=J.slice(0,16),Y=J.slice(-16),h=J.slice(16,-16),Z=wj("aes-256-gcm",A,U);return Z.setAuthTag(Y),v0.concat([Z.update(h),Z.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 o()}isServerMode(){return!o()}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&&!o()){let Y=$.split(`
|
|
94
|
-
`),h=Math.max(...Y.map((W)=>W.length))+2,Z=`┌${"─".repeat(h)}┐`,f=`└${"─".repeat(h)}┘`,E=Y.map((W)=>{let F=" ".repeat(h-W.length-2);return`│ ${W}${F} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:A,message:m.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:A,message:m.cyan(Z)})),E.forEach((W)=>console.error(this.formatConsoleMessage({timestamp:A,message:m.cyan(W),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:m.cyan(f),showTimestamp:!1}))}else if(!o())console.error(`${J} ${this.environment}.INFO: [BOX] ${$}`);let U=`${J} ${this.environment}.INFO: [BOX] ${$}
|
|
95
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(U)}async prompt($){if(o())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${m.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=J.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(U==="y"||U==="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 h=/%([sdijfo%])/g,Z=0;if(A=$.replace(h,(f,E)=>{if(E==="%")return"%";if(Z>=w.length)return f;let W=w[Z++];switch(E){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 f}}),Z<w.length)A+=` ${w.slice(Z).map((f)=>typeof f==="object"?JSON.stringify(f,null,2):String(f)).join(" ")}`}if(this.fancy&&!o()){let h=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",Z=m.blue("◐");console.error(`${Z} ${h} ${m.cyan(A)}`)}let Y=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
|
|
96
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(Y)}progress($,w=""){if(!this.enabled||!this.fancy||o()||$<=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:(h,Z)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||o())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,h)),Z!==void 0)this.activeProgressBar.message=Z;let f=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,f)},finish:(h)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||o())return;if(this.activeProgressBar.current=this.activeProgressBar.total,h!==void 0)this.activeProgressBar.message=h;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(h,Z="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||o())return;q$.stdout.write(`${"\r".padEnd(q$.stdout.columns||80)}\r`),this.log(Z,h),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||o()||!q$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),U=$.barLength-J,Y=m.green("━".repeat(J)),h=m.gray("━".repeat(U)),Z=`[${Y}${h}]`,f=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",W=w||A===100?m.green("✓"):m.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${m.gray(this.formatTag(this.name))}`:"",j=`\r${W}${F} ${Z} ${f}${E}`,B=q$.stdout.columns||80,T=" ".repeat(Math.max(0,B-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,q$.stdout.write($.lastRenderedLine),w)q$.stdout.write(`
|
|
97
|
-
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||o()||!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(o()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await l1(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=Rw(this.config.logDirectory,J);if($.before)try{if((await qw(Y)).mtime>=$.before)continue}catch(h){console.error(`Failed to get stats for file ${Y}:`,h);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 t1(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function hA($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&i(w[0])&&"id"in w[0]&&w[0].id===3&&i(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(i(w)&&i($)&&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(i($)&&"arr"in $&&Array.isArray($.arr)&&i(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&i(w[0])&&i($[0])){let J=[...w];for(let U of $)if(i(U)&&"name"in U){if(!J.find((h)=>i(h)&&("name"in h)&&h.name===U.name))J.push(U)}else if(i(U)&&"path"in U){if(!J.find((h)=>i(h)&&("path"in h)&&h.path===U.path))J.push(U)}else if(!J.some((Y)=>qA(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}if(!i(w)||!i($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let U=w[J];if(U===null||U===void 0)continue;else if(i(U)&&i(A[J]))A[J]=hA(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&i(U[0])&&i(A[J][0])){let Y=[...U];for(let h of A[J])if(i(h)&&"name"in h){if(!Y.find((f)=>i(f)&&("name"in f)&&f.name===h.name))Y.push(h)}else if(i(h)&&"path"in h){if(!Y.find((f)=>i(f)&&("path"in f)&&f.path===h.path))Y.push(h)}else if(!Y.some((Z)=>qA(Z,h)))Y.push(h);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let h of A[J])if(!Y.includes(h))Y.push(h);A[J]=Y}else A[J]=U;else A[J]=U}return A}function JY($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:hA($,w);if(Array.isArray($))return A==="replace"?w:hA($,w);if(!i(w)||!i($))return w;let J={...$};for(let U of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,U))continue;let Y=w[U],h=J[U];if(Y===null||Y===void 0)continue;if(Array.isArray(Y)||Array.isArray(h))if(A==="replace")J[U]=Y;else J[U]=hA(h,Y);else if(i(Y)&&i(h))J[U]=JY(h,Y,A);else J[U]=Y}return J}function qA($,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(!qA($[A],w[A]))return!1;return!0}if(i($)&&i(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!qA($[U],w[U]))return!1}return!0}return!1}function i($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function AA($,w,A="replace"){if(!Kf($))return null;try{let J=await import($),U=J.default||J;if(typeof U!=="object"||U===null||Array.isArray(U))return null;try{return JY(w,U,A)}catch{return null}}catch{return null}}function dj($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),U={...w};function Y(h,Z=[]){let f={...h};for(let[E,W]of Object.entries(h)){let F=[...Z,E],j=(H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase(),B=`${J}_${F.map(j).join("_")}`,T=`${J}_${F.map((H)=>H.toUpperCase()).join("_")}`;if(A)N$.info(`Checking environment variable ${B} for config ${$}.${F.join(".")}`);if(typeof W==="object"&&W!==null&&!Array.isArray(W))f[E]=Y(W,F);else{let H=E1.env[B]||E1.env[T];if(H!==void 0){if(A)N$.info(`Using environment variable ${H?B:T} for config ${$}.${F.join(".")}`);if(typeof W==="number")f[E]=Number(H);else if(typeof W==="boolean")f[E]=H.toLowerCase()==="true";else if(Array.isArray(W))try{let q=JSON.parse(H);if(Array.isArray(q))f[E]=q;else f[E]=H.split(",").map((G)=>G.trim())}catch{f[E]=H.split(",").map((q)=>q.trim())}else f[E]=H}}}return f}return Y(U)}async function gj({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:U,verbose:Y=!1,checkEnv:h=!0,arrayStrategy:Z="replace"}){let f=h&&typeof U==="object"&&U!==null&&!Array.isArray(U)?dj($,U,Y):U,E=A||E1.cwd(),W=[".ts",".js",".mjs",".cjs",".json"];if(Y)N$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let F=[$,`.${$}`].filter(Boolean),j=[`${$}.config`,`.${$}.config`].filter(Boolean),B=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],H=Array.from(new Set([E,D$(E,"config"),D$(E,".config"),J?D$(E,J):void 0].filter(Boolean)));for(let q of H){if(Y)N$.info(`Searching for configuration in: ${q}`);let R=[D$(E,"config"),D$(E,".config")].concat(J?[D$(E,J)]:[]).includes(q)?[...F,...j,...B,...T]:[...j,...F,...T,...B];for(let K of R)for(let L of W){let C=D$(q,`${K}${L}`),M=await AA(C,f,Z);if(M!==null){if(Y)N$.success(`Configuration loaded from: ${C}`);return M}}}if($){let q=D$(MU(),".config",$),G=["config",`${$}.config`];if(w)G.push(`${w}.config`);if(Y)N$.info(`Checking user config directory: ${q}`);for(let R of G)for(let K of W){let L=D$(q,`${R}${K}`),C=await AA(L,f,Z);if(C!==null){if(Y)N$.success(`Configuration loaded from user config directory: ${L}`);return C}}}if($){let q=D$(MU(),".config"),G=[`.${$}.config`];if(w)G.push(`.${w}.config`);if(Y)N$.info(`Checking user config directory for dotfile configs: ${q}`);for(let R of G)for(let K of W){let L=D$(q,`${R}${K}`),C=await AA(L,f,Z);if(C!==null){if(Y)N$.success(`Configuration loaded from user config directory dotfile: ${L}`);return C}}}if($){let q=MU(),G=[`.${$}.config`,`.${$}`];if(w)G.push(`.${w}.config`),G.push(`.${w}`);if(Y)N$.info(`Checking user home directory for dotfile configs: ${q}`);for(let R of G)for(let K of W){let L=D$(q,`${R}${K}`),C=await AA(L,f,Z);if(C!==null){if(Y)N$.success(`Configuration loaded from user home directory: ${L}`);return C}}}try{let q=D$(E,"package.json");if(Kf(q)){let G=await import(q),R=G[$];if(!R&&w){if(R=G[w],R&&Y)N$.success(`Using alias "${w}" configuration from package.json`)}if(R&&typeof R==="object"&&!Array.isArray(R))try{if(Y)N$.success(`Configuration loaded from package.json: ${R===G[$]?$:w}`);return JY(f,R,Z)}catch(K){if(Y)N$.warn("Failed to merge package.json config:",K)}}}catch(q){if(Y)N$.warn("Failed to load package.json:",q)}if(Y)N$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return f}function lj($,w={}){let A=BA.cwd();while(A.includes("storage"))A=i8(A,"..");let J=i8(A,$||"");if(w?.relative)return sB(BA.cwd(),J);return J}async function tj(){try{let $=await gj({name:"clarity",alias:"logging",defaultConfig:EA,cwd:BA.cwd()});return{...EA,...$||{}}}catch{return EA}}function J$(){if(M0.env.NODE_ENV==="test"||M0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function pj(){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 Lf{async format($){let w=await pj(),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 RA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...gU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new Lf,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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...WA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...WA};return{...WA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:gU.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},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!J$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let U,Y=0,h=3,Z=1000;while(Y<h)try{try{try{await Fj(this.config.logDirectory,r8.F_OK|r8.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await Bj(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 f=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:q0.from($);try{if(!p1(this.currentLogFile))await DU(this.currentLogFile,"",{mode:420});if(U=p8(this.currentLogFile,"a",420),Wj(U,f,{flag:"a"}),t8(U),U!==void 0)VU(U),U=void 0;if((await Kw(this.currentLogFile)).size===0){if(await DU(this.currentLogFile,f,{flag:"w",mode:420}),(await Kw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let W=E;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(Y<h-1){let F=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${h}:`,F);let j=Z*2**Y;await new Promise((B)=>setTimeout(B,j)),Y++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(U!==void 0)try{VU(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(f){if(Y===h-1){let W=f,F=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),f}Y++;let E=Z*2**(Y-1);await new Promise((W)=>setTimeout(W,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 Mw(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 Mw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return Mw(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,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,f])=>f.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,h=Math.max(1,Y);if(U.length>h)for(let[Z]of U.slice(h))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return SU(16).toString("hex")}generateKey(){return SU(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=SU(16),J=fj("aes-256-gcm",w,A),U=q0.isBuffer($)?$:q0.from($,"utf8"),Y=J.update(U),h=J.final(),Z=Y.length+h.length,f=J.getAuthTag(),E=q0.allocUnsafe(16+Z+16);return A.copy(E,0),Y.copy(E,16),h.copy(E,16+Y.length),f.copy(E,16+Z),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=s8(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(q0.from(q0.concat(U)))),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(J$())return;if(!this.shouldWriteToFile())return;let $=await Kw(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 U=await r1(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await Kw(A).catch(()=>null))try{if(await a8(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await a1(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await DU(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await Kw(A).catch(()=>null))await a8(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await r1(this.config.logDirectory)).filter((h)=>h.startsWith(this.name)).sort((h,Z)=>Z.localeCompare(h));for(let h of Y.slice(w.maxFiles))await a1(Mw(this.config.logDirectory,h))}}}async compressLogFile($,w){let A=l8($),J=Ej(w),U=s8();await Hj(A,U,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()})),p1(this.currentLogFile))try{let $=p8(this.currentLogFile,"r+");t8($),VU($)}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 r1(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await a1(Mw(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()?_.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||J$())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:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=S.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${_.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=_.underline(_.blue(J)),h=this.toAbsoluteFilePath(U);if(h&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let Z=`file://${encodeURI(h)}`,f="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${Z}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),w=w.replace(/`([^`]+)`/g,(A,J)=>_.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>_.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>_.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>_.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>_.strikethrough(J)),w}supportsHyperlinks(){if(J$())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(jj(w)||w.startsWith("./")||w.startsWith("../"))w=zj(w);else return null;return p1(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);let{consoleText:f,fileText:E}=this.buildOutputTexts(h);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":xf[$],j=this.options.showTags!==!1&&this.name?_.gray(this.formatTag(this.name)):"",B;switch($){case"debug":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:_.gray(f),level:$}),console.error(B);break;case"info":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"success":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:_.green(f),level:$}),console.error(B);break;case"warning":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"error":if(B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.error(B),Z){let T=Z.split(`
|
|
98
|
-
`);for(let H of T)if(H.trim()&&!H.includes(h))console.error(this.formatConsoleMessage({timestamp:U,message:_.gray(` ${H}`),level:$,showTimestamp:!1}))}break}}else if(!J$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${h}`),Z)console.error(Z)}if(!this.shouldLog($))return;let W=`${Y} ${this.environment}.${$.toUpperCase()}: ${E}
|
|
99
|
-
`;if(Z)W+=`${Z}
|
|
100
|
-
`;if(W=W.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(W)}progress($,w=""){let A={update:(Z,f)=>{},finish:(Z)=>{},interrupt:(Z,f)=>{}};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()&&!J$()&&S.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(Z,f)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,Z),this.activeProgressBar.total),f!==void 0)this.activeProgressBar.message=f;if(this.shouldStyleConsole()&&!J$()&&S.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(Z)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,Z)},interrupt:(Z,f="info")=>{if(!J$()&&S.stdout.isTTY)S.stdout.write(`
|
|
101
|
-
`);if(this[f==="warning"?"warn":f](Z),this.activeProgressBar&&this.shouldStyleConsole()&&!J$()&&S.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time($){let w=performance.now();if(this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?_.gray(this.formatTag(this.name)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:this.options.showIcons===!1?"":_.blue("◐"),tag:A,message:`${_.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,h=new Date,Z=this.formatConsoleTimestamp(h),E=`${this.formatFileTimestamp(h)} ${this.environment}.INFO: ${Y}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
|
|
102
|
-
`,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?_.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:Z,icon:this.options.showIcons===!1?"":_.green("✓"),tag:W,message:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!J$())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 RA(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(!p1(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return l8(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=q0.isBuffer($)?$:q0.from($,"base64"),U=J.subarray(0,16),Y=J.subarray(J.length-16),h=J.subarray(16,J.length-16),Z=Zj("aes-256-gcm",A,U);Z.setAuthTag(Y);let f=Z.update(h),E=Z.final(),W=f.length+E.length,F=q0.allocUnsafe(W);return f.copy(F,0),E.copy(F,f.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 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),J=this.formatFileTimestamp(w),{consoleText:U,fileText:Y}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let Z=U.split(`
|
|
103
|
-
`),f=Math.max(...Z.map((j)=>j.length))+2,E=`┌${"─".repeat(f)}┐`,W=`└${"─".repeat(f)}┘`,F=Z.map((j)=>{return this.formatConsoleMessage({timestamp:A,message:_.cyan(j),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:_.cyan(E),showTimestamp:!1})),F.forEach((j)=>console.error(j)),console.error(this.formatConsoleMessage({timestamp:A,message:_.cyan(W),showTimestamp:!1}))}else if(!J$())console.error(`${J} ${this.environment}.INFO: [BOX] ${Y}`);let h=`${J} ${this.environment}.INFO: [BOX] ${Y}
|
|
104
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(h)}async prompt($){if(J$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${_.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=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(U==="y"||U==="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 f=/%([sdijfo%])/g,E=0;if(A=$.replace(f,(W,F)=>{if(F==="%")return"%";if(E>=w.length)return W;let j=w[E++];switch(F){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}}),E<w.length)A+=` ${w.slice(E).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:J,fileText:U}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let f=this.options.showTags!==!1&&this.name?_.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${_.blue("◐")} `;console.error(`${E}${f} ${_.cyan(J)}`)}let Z=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
105
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Z)}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),U=$.barLength-J,Y=_.green("━".repeat(J)),h=_.gray("━".repeat(U)),Z=`[${Y}${h}]`,f=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",W=this.options.showIcons===!1?"":w||A===100?_.green("✓"):_.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${_.gray(this.formatTag(this.name))}`:"",j=`\r${W}${F} ${Z} ${f}${E}`,B=S.stdout.columns||80,T=" ".repeat(Math.max(0,B-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,S.stdout.write($.lastRenderedLine),w)S.stdout.write(`
|
|
106
|
-
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||J$()||!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(J$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await r1(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=Mw(this.config.logDirectory,J);if($.before)try{if((await Kw(Y)).mtime>=$.before)continue}catch(h){console.error(`Failed to get stats for file ${Y}:`,h);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 a1(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function Cf($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:U=()=>!0,fallback:Y}=w,h=Error("Unknown error occurred");for(let Z=0;Z<=A;Z++)try{return await $()}catch(f){if(h=f instanceof Error?f:Error(String(f)),Z===A||!U(h))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(Y!==void 0)return Y;throw h instanceof Error?h:Error(`Unknown error: ${String(h)}`)}function Sf($){return $ instanceof u$}function rj($){return $ instanceof NA}function aj($){if(Sf($))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 CA{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,A={}){let{prefix:J,useCamelCase:U=!0,useBackwardCompatibility:Y=!0,customParsers:h={},verbose:Z=!1,trackPerformance:f=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let W=J||this.generateEnvPrefix($),F={...w};return this.processObject(F,[],W,{useCamelCase:U,useBackwardCompatibility:Y,customParsers:h,verbose:Z,configName:$}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(f)return B1.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[U,Y]of Object.entries($)){let h=[...w,U],Z=h.map((W)=>this.formatEnvKey(W,J.useCamelCase)),f=`${A}_${Z.join("_")}`,E=J.useBackwardCompatibility?`${A}_${h.map((W)=>W.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.processObject(Y,h,A,J);else{let W=s1.env[f]||(E?s1.env[E]:void 0);if(W!==void 0){if(J.verbose){let F=s1.env[f]?f:E}try{$[U]=this.parseEnvironmentValue(W,typeof Y,f,J.customParsers,J.configName)}catch(F){if(F instanceof KA)throw F;throw m0.envVar(f,W,typeof Y,J.configName)}}}}}parseEnvironmentValue($,w,A,J,U){for(let[Y,h]of Object.entries(J))try{return h($)}catch{continue}for(let Y of this.defaultParsers)if(Y.canParse($,w))try{return Y.parse($)}catch{throw m0.envVar(A,$,`${w} (via ${Y.name} parser)`,U)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,U]of Object.entries(s1.env))if(J.startsWith(A)&&U!==void 0)w[J]=U;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(U){J.push(`Cannot parse value "${w}" as ${A}: ${U}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:U="text"}=A,Y=J||this.generateEnvPrefix($),h=[];switch(this.extractEnvVarInfo(w,[],Y,h),U){case"markdown":return this.formatAsMarkdown(h,$);case"json":return JSON.stringify(h,null,2);default:return this.formatAsText(h,$)}}extractEnvVarInfo($,w,A,J){for(let[U,Y]of Object.entries($)){let h=[...w,U],Z=`${A}_${h.map((f)=>this.formatEnvKey(f,!0)).join("_")}`;if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.extractEnvVarInfo(Y,h,A,J);else J.push({key:Z,type:Array.isArray(Y)?"array":typeof Y,description:`Configuration for ${h.join(".")}`,example:this.generateExample(Y)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
|
|
42
|
+
`}return{name:"bunfig-plugin",setup(U){U.onResolve({filter:/^virtual:bunfig-types$/},(Y)=>{return{path:Y.path,namespace:"bunfig-virtual"}}),U.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}function Q9($,w={}){let A=OA.cwd();while(A.includes("storage"))A=cZ(A,"..");let J=cZ(A,$||"");if(w?.relative)return Nz(OA.cwd(),J);return J}function E$(){if(y0.env.NODE_ENV==="test"||y0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function P9(){if(y0.env.NODE_ENV==="test"||y0.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof y0<"u"){let $=y0.type;if($==="renderer"||$==="worker")return!1;return!!(y0.versions&&(y0.versions.node||y0.versions.bun))}return!1}class SW{async format($){let w=await P9(),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:kw.pid,hostname:w(),environment:kw.env.NODE_ENV||"development",platform:kw.platform,version:kw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:kw.env.NODE_ENV||kw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class nA{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...PA},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new 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??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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...fY,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...fY};return{...fY,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:PA.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},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 A=(async()=>{let U,Y=0,f=3,W=1000;while(Y<f)try{try{try{await Cz(this.config.logDirectory,mZ.F_OK|mZ.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await yz(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 Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:K0.from($);try{if(!jA(this.currentLogFile))await wY(this.currentLogFile,"",{mode:420});if(U=nZ(this.currentLogFile,"a",420),Iz(U,Z,{flag:"a"}),vZ(U),U!==void 0)$Y(U),U=void 0;if((await _w(this.currentLogFile)).size===0){if(await wY(this.currentLogFile,Z,{flag:"w",mode:420}),(await _w(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let B=E;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(Y<f-1){let h=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${f}:`,h);let j=W*2**Y;await new Promise((F)=>setTimeout(F,j)),Y++;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(U!==void 0)try{$Y(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(Z){if(Y===f-1){let B=Z,h=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),Z}Y++;let E=W*2**(Y-1);await new Promise((B)=>setTimeout(B,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 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(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 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((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,W],[,Z])=>Z.createdAt.getTime()-W.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,f=Math.max(1,Y);if(U.length>f)for(let[W]of U.slice(f))this.encryptionKeys.delete(W),this.keys.delete(W)}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=Rz("aes-256-gcm",w,A),U=K0.isBuffer($)?$:K0.from($,"utf8"),Y=J.update(U),f=J.final(),W=Y.length+f.length,Z=J.getAuthTag(),E=K0.allocUnsafe(16+W+16);return A.copy(E,0),Y.copy(E,16),f.copy(E,16+Y.length),Z.copy(E,16+W),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=gZ(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(K0.from(K0.concat(U)))),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 _w(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 U=await zA(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await _w(A).catch(()=>null))try{if(await dZ(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await HA(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await wY(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await _w(A).catch(()=>null))await dZ(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await zA(this.config.logDirectory)).filter((f)=>f.startsWith(this.name)).sort((f,W)=>W.localeCompare(f));for(let f of Y.slice(w.maxFiles))await HA(Dw(this.config.logDirectory,f))}}}async compressLogFile($,w){let A=uZ($),J=Mz(w),U=gZ();await Vz(A,U,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()})),jA(this.currentLogFile))try{let $=nZ(this.currentLogFile,"r+");vZ($),$Y($)}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 w=(await zA(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await HA(Dw(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()?x.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||E$())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:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=O.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${x.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=x.underline(x.blue(J)),f=this.toAbsoluteFilePath(U);if(f&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(f)}`,Z="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${W}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),w=w.replace(/`([^`]+)`/g,(A,J)=>x.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>x.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>x.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>x.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>x.strikethrough(J)),w}supportsHyperlinks(){if(E$())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(Lz(w)||w.startsWith("./")||w.startsWith("../"))w=Sz(w);else return null;return jA(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);let{consoleText:Z,fileText:E}=this.buildOutputTexts(f);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":v9[$],j=this.options.showTags!==!1&&this.name?x.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:x.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:x.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.error(F),W){let T=W.split(`
|
|
43
|
+
`);for(let H of T)if(H.trim()&&!H.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:x.gray(` ${H}`),level:$,showTimestamp:!1}))}break}}else if(!E$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}let B=`${Y} ${this.environment}.${$.toUpperCase()}: ${E}
|
|
44
|
+
`;if(W)B+=`${W}
|
|
45
|
+
`;if(B=B.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(B)}progress($,w=""){let A={update:(W,Z)=>{},finish:(W)=>{},interrupt:(W,Z)=>{}};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$()&&O.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(W,Z)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,W),this.activeProgressBar.total),Z!==void 0)this.activeProgressBar.message=Z;if(this.shouldStyleConsole()&&!E$()&&O.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(W)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,W)},interrupt:(W,Z="info")=>{if(!E$()&&O.stdout.isTTY)O.stdout.write(`
|
|
46
|
+
`);if(this[Z==="warning"?"warn":Z](W),this.activeProgressBar&&this.shouldStyleConsole()&&!E$()&&O.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)):"",J=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:J,icon:this.options.showIcons===!1?"":x.blue("◐"),tag:A,message:`${x.cyan($)}...`}))}return async(A)=>{if(!this.enabled)return;let J=performance.now(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),E=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
|
|
47
|
+
`,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let B=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:B,message:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!E$())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 nA(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(!jA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return uZ(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=K0.isBuffer($)?$:K0.from($,"base64"),U=J.subarray(0,16),Y=J.subarray(J.length-16),f=J.subarray(16,J.length-16),W=Kz("aes-256-gcm",A,U);W.setAuthTag(Y);let Z=W.update(f),E=W.final(),B=Z.length+E.length,h=K0.allocUnsafe(B);return Z.copy(h,0),E.copy(h,Z.length),h.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:U,fileText:Y}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=U.split(`
|
|
48
|
+
`),Z=Math.max(...W.map((j)=>j.length))+2,E=`┌${"─".repeat(Z)}┐`,B=`└${"─".repeat(Z)}┘`,h=W.map((j)=>{return this.formatConsoleMessage({timestamp:A,message:x.cyan(j),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:x.cyan(E),showTimestamp:!1})),h.forEach((j)=>console.error(j)),console.error(this.formatConsoleMessage({timestamp:A,message:x.cyan(B),showTimestamp:!1}))}else if(!E$())console.error(`${J} ${this.environment}.INFO: [BOX] ${Y}`);let f=`${J} ${this.environment}.INFO: [BOX] ${Y}
|
|
49
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(f)}async prompt($){if(E$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${x.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=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(U==="y"||U==="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 Z=/%([sdijfo%])/g,E=0;if(A=$.replace(Z,(B,h)=>{if(h==="%")return"%";if(E>=w.length)return B;let j=w[E++];switch(h){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 B}}),E<w.length)A+=` ${w.slice(E).map((B)=>typeof B==="object"?JSON.stringify(B,null,2):String(B)).join(" ")}`}let{consoleText:J,fileText:U}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?x.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${x.blue("◐")} `;console.error(`${E}${Z} ${x.cyan(J)}`)}let W=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
50
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(W)}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),U=$.barLength-J,Y=x.green("━".repeat(J)),f=x.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=this.options.showIcons===!1?"":w||A===100?x.green("✓"):x.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${x.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=O.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,O.stdout.write($.lastRenderedLine),w)O.stdout.write(`
|
|
51
|
+
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||E$()||!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(E$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await zA(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=Dw(this.config.logDirectory,J);if($.before)try{if((await _w(Y)).mtime>=$.before)continue}catch(f){console.error(`Failed to get stats for file ${Y}:`,f);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 HA(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function n9($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:U=()=>!0,fallback:Y}=w,f=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(Z){if(f=Z instanceof Error?Z:Error(String(Z)),W===A||!U(f))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(Y!==void 0)return Y;throw f instanceof Error?f:Error(`Unknown error: ${String(f)}`)}class OY{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:U=!0,useBackwardCompatibility:Y=!0,customParsers:f={},verbose:W=!1,trackPerformance:Z=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let B=J||this.generateEnvPrefix($),h={...w};return this.processObject(h,[],B,{useCamelCase:U,useBackwardCompatibility:Y,customParsers:f,verbose:W,configName:$}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(Z)return RY.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[U,Y]of Object.entries($)){let f=[...w,U],W=f.map((B)=>this.formatEnvKey(B,J.useCamelCase)),Z=`${A}_${W.join("_")}`,E=J.useBackwardCompatibility?`${A}_${f.map((B)=>B.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.processObject(Y,f,A,J);else{let B=GA.env[Z]||(E?GA.env[E]:void 0);if(B!==void 0){if(J.verbose){let h=GA.env[Z]?Z:E}try{$[U]=this.parseEnvironmentValue(B,typeof Y,Z,J.customParsers,J.configName)}catch(h){if(h instanceof VY)throw h;throw xw.envVar(Z,B,typeof Y,J.configName)}}}}}parseEnvironmentValue($,w,A,J,U){for(let[Y,f]of Object.entries(J))try{return f($)}catch{continue}for(let Y of this.defaultParsers)if(Y.canParse($,w))try{return Y.parse($)}catch{throw xw.envVar(A,$,`${w} (via ${Y.name} parser)`,U)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,U]of Object.entries(GA.env))if(J.startsWith(A)&&U!==void 0)w[J]=U;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(U){J.push(`Cannot parse value "${w}" as ${A}: ${U}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:U="text"}=A,Y=J||this.generateEnvPrefix($),f=[];switch(this.extractEnvVarInfo(w,[],Y,f),U){case"markdown":return this.formatAsMarkdown(f,$);case"json":return JSON.stringify(f,null,2);default:return this.formatAsText(f,$)}}extractEnvVarInfo($,w,A,J){for(let[U,Y]of Object.entries($)){let f=[...w,U],W=`${A}_${f.map((Z)=>this.formatEnvKey(Z,!0)).join("_")}`;if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.extractEnvVarInfo(Y,f,A,J);else J.push({key:W,type:Array.isArray(Y)?"array":typeof Y,description:`Configuration for ${f.join(".")}`,example:this.generateExample(Y)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
|
|
107
52
|
|
|
108
53
|
`;for(let J of $)A+=`${J.key}
|
|
109
54
|
`,A+=` Type: ${J.type}
|
|
@@ -115,25 +60,24 @@ Run \`${this.name??"cli"} --help\` for usage.`;u0.stderr.write(`${Y}${U}${h}
|
|
|
115
60
|
`;A+=`| Variable | Type | Description | Example |
|
|
116
61
|
`,A+=`|----------|------|-------------|----------|
|
|
117
62
|
`;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
|
|
118
|
-
`;return A}}function sj($,w){let A=Xf("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function Vf($,w,A={}){return Df($,w,A,new WeakMap)}function Df($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:h}=A;if(w===null||w===void 0)return Y?$:w;if(h){let Z=h($,w);if(Z!==void 0)return Z}if(Array.isArray(w)||Array.isArray($))return Of($,w,U,J);if(!r$(w)||!r$($))return w;return wz($,w,A,J)}function Of($,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 oj($,w);case"smart":return ej($,w,J);default:return w}return w}function oj($,w){let A=[...w];for(let J of $)if(!A.some((U)=>mU(U,J)))A.push(J);return A}function ej($,w,A){if(w.length===0)return $;if($.length===0)return w;if(r$(w[0])&&r$($[0]))return $z($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function $z($,w,A){let J=[...w];for(let U of $){if(!r$(U)){J.push(U);continue}let Y=["id","name","key","path","type"],h=!1;for(let Z of Y)if(Z in U){if(J.find((E)=>r$(E)&&(Z in E)&&E[Z]===U[Z])){h=!0;break}}if(!h)J.push(U)}return J}function wz($,w,A,J){let U=w;if(r$(U)&&J.has(U))return J.get(U);let Y={...$};if(r$(U))J.set(U,Y);for(let h in U){if(!Object.prototype.hasOwnProperty.call(U,h))continue;let Z=U[h],f=Y[h];if(A.skipNullish&&(Z===null||Z===void 0))continue;if(Z===null||Z===void 0){Y[h]=Z;continue}if(r$(Z)&&r$(f))Y[h]=Df(f,Z,A,J);else if(Array.isArray(Z)||Array.isArray(f))Y[h]=Of(f,Z,A.arrayMergeMode||"smart",J);else Y[h]=Z}return Y}function UY($,w,A="replace"){return Vf($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function mU($,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(!mU($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!mU($[U],w[U]))return!1}return!0}return!1}function r$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class SA{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:h=!0,verbose:Z=!1}=A;if(U){let E=Sw.getWithFileCheck("file",$);if(E){if(Z)console.log(`Configuration loaded from cache: ${$}`);return E}}let f=async()=>{if(!o1($))return null;try{let E=`?t=${Date.now()}`,W=await import($+E),F=W.default||W,j="default"in W,B=Object.keys(W).length>0;if(!j&&!B)throw new W1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new W1($,Error("Configuration must export a valid object"),"unknown");let q={config:UY(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)Sw.setWithFileCheck("file",q,$,Y);return q}catch(E){throw E instanceof Error?m0.configLoad($,E):m0.configLoad($,Error(String(E)))}};if(h)return B1.track("loadFromPath",f,{path:$});return f()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let h of this.extensions)U.push(OU(w,`${Y}${h}`));return U}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 Cf(async()=>{return o1($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!o1($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let h of this.extensions){let Z=OU($,`${Y}${h}`);if(await this.checkFileAccess(Z))J.push(Z)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let h of Y)if(this.looksLikeConfigFile(h)){let Z=OU($,h);if(await this.checkFileAccess(Z))J.push(Z)}}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(!o1($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}class YY{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:h=[],trackPerformance:Z=!0,verbose:f=!1}=A,E=async()=>{let W=[],F=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:h,trackPerformance:Z,verbose:f};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...h],j);else return this.validateWithJSONSchema($,w,j)}catch(B){return W.push({path:"",message:`Validation failed: ${B}`,rule:"system"}),{isValid:!1,errors:W,warnings:F}}};if(Z)return await B1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!Tj(w))throw new F1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new F1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let h=Array.isArray($)?"array":typeof $,Z=Array.isArray(w.type)?w.type:[w.type];if(!Z.includes(h)){if(J.push({path:A,message:`Expected type ${Z.join(" or ")}, got ${h}`,expected:Z.join(" or "),actual:h,rule:"type"}),Y.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"}),Y.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 h=0;h<$.length;h++){let Z=A?`${A}[${h}]`:`[${h}]`;if(this.validateObjectAgainstSchema($[h],w.items,Z,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let h=$;if(Y.validateRequired&&w.required){for(let Z of w.required)if(!(Z in h)){if(J.push({path:A?`${A}.${Z}`:Z,message:`Missing required property '${Z}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[Z,f]of Object.entries(w.properties))if(Z in h){let E=A?`${A}.${Z}`:Z;if(this.validateObjectAgainstSchema(h[Z],f,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let Z=new Set(Object.keys(w.properties||{}));for(let f of Object.keys(h))if(!Z.has(f))U.push({path:A?`${A}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let h=this.getValueByPath($,Y.path),Z=this.validateWithRule(h,Y,Y.path);if(J.push(...Z),A.stopOnFirstError&&J.length>0)break}catch(h){J.push({path:Y.path,message:`Rule validation failed: ${h}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,h]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(h)})}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:bf},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class hY{fileLoader=new SA;envProcessor=new CA;validator=new YY;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...h}=$;try{if(A?.enabled){let f=this.checkCache(h.name||"",h);if(f)return f}let Z;try{Z=await this.loadConfigurationStrategies(h,!0,A)}catch(f){let E=h.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(E)throw f;Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`No configuration file found for "${h.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let W=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),F=!W&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),j=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(E&&(j||W))throw f;if(F&&(!E||!j))Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(U||Y)await this.validateConfiguration(Z.config,U,Y,h.name);if(A?.enabled&&Z)this.cacheResult(h.name||"",Z,A,h);if(J?.enabled){let f={operation:"loadConfig",duration:Date.now()-w,configName:h.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(f);if(J.slowThreshold&&f.duration>J.slowThreshold)J0.warn(`Slow configuration loading detected: ${f.duration}ms for ${h.name}`);Z.metrics=f}return Z}catch(Z){let f=Date.now()-w;throw J0.error(`Configuration loading failed after ${f}ms:`,[Z instanceof Error?Z:Error(String(Z))]),Z}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:h,defaultConfig:Z,checkEnv:f=!0,arrayStrategy:E="replace",verbose:W=!1}=$,F=Y||e0.cwd(),j=[],B=await this.loadLocalConfiguration(J,U,F,h,Z,E,W,f,A);if(B)return j.push(...this.getLocalSearchPaths(J,U,F,h)),this.finalizeResult(B,j,f,J,W);let T=await this.loadHomeConfiguration(J,U,Z,E,W,f);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,f,J,W);let H=await this.loadPackageJsonConfiguration(J,U,F,Z,E,W,f);if(H)return j.push(O$(F,"package.json")),this.finalizeResult(H,j,f,J,W);if(j.push(...this.getAllSearchPaths(J,U,F,h)),w)throw m0.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,Z,f,W),warnings:[`No configuration file found for "${J}"${U?` or alias "${U}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,h,Z,f){let E=Z?Z1($,U,h):U,W=this.getLocalDirectories(A,J);for(let F of W){if(h)J0.info(`Searching for configuration in: ${F}`);let j=this.fileLoader.generateConfigPaths($,F,w),B=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:h,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(B){if(h)J0.success(`Configuration loaded from: ${B.source.path}`);return B}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let h=Y?Z1($,A,U):A,Z=[O$(Gw(),".config",$),O$(Gw(),".config"),Gw()];for(let f of Z){if(U)J0.info(`Checking home directory: ${f}`);let E=this.fileLoader.generateConfigPaths($,f,w),W=await this.fileLoader.tryLoadFromPaths(E,h,{arrayStrategy:J,verbose:U});if(W){if(U)J0.success(`Configuration loaded from home directory: ${W.source.path}`);return W}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,h){let Z=h?Z1($,J,Y):J;try{let f=O$(A,"package.json");if(!nU(f))return null;let E=await import(f),W=E[$],F=$;if(!W&&w)W=E[w],F=w;if(W&&typeof W==="object"&&!Array.isArray(W)){if(Y)J0.success(`Configuration loaded from package.json: ${F}`);return{config:UY(Z,W,U),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(Y)J0.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}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:Z1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((h)=>h.path?`${h.path}: ${h.message}`:h.message))}if(U.length>0)throw m0.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return Sw.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);Sw.set(U,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([$,O$($,"config"),O$($,".config"),w?O$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(O$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let h of U)Y.push(...this.fileLoader.generateConfigPaths($,h,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[O$(Gw(),".config",$),O$(Gw(),".config"),Gw()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function hf($){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 Az($){return y0.loadConfig({...$,__strictErrorHandling:!0})}async function _f($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let J;if(A)J=await y0.loadConfig($);else J=await y0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return J?.config??w}catch(J){let U=J instanceof Error?J.name:"UnknownError",Y=J instanceof Error?J.message:String(J);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||Y.includes("config"))&&$.verbose)J0.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 y0.applyEnvironmentVariables(Z.name||"",w,!0,Z.verbose||!1))?.config??w;return w}}async function Jz($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await y0.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"&&hf(A)))return(await y0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await y0.loadConfig({...$,cwd:$.cwd||e0.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&hf(w)))return(await y0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function Uz($,w,A="replace"){let J=new SA;try{let U=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return U?U.config:null}catch{return null}}function Z1($,w,A=!1){let J=new CA,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(h,Z=[]){let f={...h};for(let[E,W]of Object.entries(h)){let F=[...Z,E],j=[`${U}_${F.join("_").toUpperCase()}`,`${U}_${F.map((H)=>H.toUpperCase()).join("")}`,`${U}_${F.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],B,T;for(let H of j)if(B=e0.env[H],B!==void 0){T=H;break}if(B!==void 0&&T)if(typeof W==="boolean")f[E]=["true","1","yes"].includes(B.toLowerCase());else if(typeof W==="number"){let H=Number(B);if(!Number.isNaN(H))f[E]=H}else if(Array.isArray(W))try{f[E]=JSON.parse(B)}catch{f[E]=B.split(",").map((H)=>H.trim())}else f[E]=B;else if(W&&typeof W==="object"&&!Array.isArray(W))f[E]=Y(W,F)}return f}return Y(w)}function Yz($){let w=O$(e0.cwd(),$.configDir),A=O$(e0.cwd(),$.generatedDir),J=O$(A,"config-types.ts");if(!nU(b8(J)))tB(b8(J),{recursive:!0,mode:511});let U=nU(w)?pB(w).map((h)=>h.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],Y=`// Generated by bunfig v${Qz}
|
|
119
|
-
|
|
120
|
-
`;
|
|
121
|
-
${
|
|
122
|
-
`)}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
export type ConfigOf = Config
|
|
127
|
-
`}return{name:"bunfig-plugin",setup(U){U.onResolve({filter:/^virtual:bunfig-types$/},(Y)=>{return{path:Y.path,namespace:"bunfig-virtual"}}),U.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}var Xf,Sw,B1,kf,Zz,Ez,ff,fA,dU,R$,m,Wz,Zf,Fz,Ef,Bz,jz,xU,zz,Wf,Ff,PU,Hz,Tz,Gz,qz,ZA,Qf,Rz,N$,Nz,Kz,Bf,EA,gU,U$,_,Mz,jf,Iz,zf,yz,Lz,bU,Cz,Hf,Tf,Sz,iU,Vz,Dz,Oz,_z,Xz,WA,xf,kz,Qz="0.15.6",u$,NA,W1,lU,tU,KA,pU,rU,F1,aU,sU,m0,Pf,bf,J0,y0,cf,uf,xz=xj(async()=>{Xf=import.meta.require,Sw=new $Y,B1=new wY,kf={createKey:Pj,isEquivalent:bj,estimateMemoryUsage:ij},Zz=zA(vU.cwd(),"config"),Ez=zA(vU.cwd(),"src/generated"),ff=jA.env.CLARITY_LOG_DIR||oB(nj(),"logs"),fA={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},dU=await vj(),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`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},m=R$,Wz=R$.red,Zf=R$.green,Fz=R$.yellow,Ef=R$.blue,Bz=R$.magenta,jz=R$.cyan,xU=R$.white,zz=R$.gray,Wf=R$.bgRed,Ff=R$.bgYellow,PU=R$.bold,Hz=R$.dim,Tz=R$.italic,Gz=R$.underline,qz=R$.reset,ZA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Qf={debug:"\uD83D\uDD0D",info:Ef("ℹ"),success:Zf("✓"),warning:Ff(xU(PU(" WARN "))),error:Wf(xU(PU(" ERROR ")))},Rz=new GA("stacks"),N$=new GA("bunfig",{showTags:!0}),Nz=D$(E1.cwd(),"config"),Kz=D$(E1.cwd(),"src/generated"),Bf=BA.env.CLARITY_LOG_DIR||aB(lj(),"logs"),EA={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,writeToFile:!1},gU=await tj(),U$={red:($)=>`\x1B[31m${$}\x1B[0m`,green:($)=>`\x1B[32m${$}\x1B[0m`,yellow:($)=>`\x1B[33m${$}\x1B[0m`,blue:($)=>`\x1B[34m${$}\x1B[0m`,magenta:($)=>`\x1B[35m${$}\x1B[0m`,cyan:($)=>`\x1B[36m${$}\x1B[0m`,white:($)=>`\x1B[37m${$}\x1B[0m`,gray:($)=>`\x1B[90m${$}\x1B[0m`,bgRed:($)=>`\x1B[41m${$}\x1B[0m`,bgYellow:($)=>`\x1B[43m${$}\x1B[0m`,bgGray:($)=>`\x1B[100m${$}\x1B[0m`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,strikethrough:($)=>`\x1B[9m${$}\x1B[0m`,reset:"\x1B[0m"},_=U$,Mz=U$.red,jf=U$.green,Iz=U$.yellow,zf=U$.blue,yz=U$.magenta,Lz=U$.cyan,bU=U$.white,Cz=U$.gray,Hf=U$.bgRed,Tf=U$.bgYellow,Sz=U$.bgGray,iU=U$.bold,Vz=U$.dim,Dz=U$.italic,Oz=U$.underline,_z=U$.strikethrough,Xz=U$.reset,WA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},xf={debug:"\uD83D\uDD0D",info:zf("ℹ"),success:jf("✓"),warning:Tf(bU(iU(" WARN "))),error:Hf(bU(iU(" ERROR ")))},kz=new RA("stacks"),u$=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 u${code="CONFIG_NOT_FOUND";constructor(w,A,J){let U=J?` or alias "${J}"`:"";super(`Configuration "${w}"${U} not found`,{configName:w,alias:J,searchPaths:A,searchPathCount:A.length})}},W1=class extends u${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}},lU=class extends u${code="CONFIG_VALIDATION_ERROR";constructor(w,A,J){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:J,validationErrors:A,errorCount:A.length})}},tU=class extends u${code="CONFIG_MERGE_ERROR";constructor(w,A,J,U){super(`Failed to merge configuration from "${w}" with "${A}": ${J.message}`,{sourcePath:w,targetPath:A,configName:U,originalError:J.name,originalMessage:J.message});this.cause=J}},KA=class extends u${code="ENV_VAR_ERROR";constructor(w,A,J,U){super(`Failed to parse environment variable "${w}" with value "${A}" as ${J}`,{envKey:w,envValue:A,expectedType:J,configName:U})}},pU=class extends u${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}},rU=class extends u${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}},F1=class extends u${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})}},aU=class extends u${code="BROWSER_CONFIG_ERROR";constructor(w,A,J,U){super(`Failed to fetch configuration from "${w}": ${A} ${J}`,{endpoint:w,status:A,statusText:J,configName:U})}},sU=class extends u${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}},m0={configNotFound($,w,A){return new NA($,w,A)},configLoad($,w,A){return new W1($,w,A)},configValidation($,w,A){return new lU($,w,A)},configMerge($,w,A,J){return new tU($,w,A,J)},envVar($,w,A,J){return new KA($,w,A,J)},fileSystem($,w,A){return new pU($,w,A)},typeGeneration($,w,A){return new rU($,w,A)},schemaValidation($,w,A){return new F1($,w,A)},browserConfig($,w,A,J){return new aU($,w,A,J)},plugin($,w,A){return new sU($,w,A)}},Pf={replace:"replace",concat:"concat",smart:"smart"},bf=/^https?:\/\//,J0=new RA("bunfig",{showTags:!0}),y0=new hY,cf=O$(e0.cwd(),"config"),uf=O$(e0.cwd(),"src/generated")});function Pz($,w={}){let A=HA.cwd();while(A.includes("storage"))A=e8(A,"..");let J=e8(A,$||"");if(w?.relative)return Kj(HA.cwd(),J);return J}var bz=HA.env.CLARITY_LOG_DIR||Nj(Pz(),"logs"),nf={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:bz,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},MA={...nf},tq=(async()=>{try{let{loadConfig:$}=await xz().then(()=>If),w=await $({name:"clarity",alias:"logging",defaultConfig:nf,cwd:HA.cwd()});if(w)Object.assign(MA,w)}catch{}return MA})();function Y$(){if(I0.env.NODE_ENV==="test"||I0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function iz(){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 vf{async format($){let w=await iz(),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}}}var 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$,pq=j$.red,cz=j$.green,rq=j$.yellow,uz=j$.blue,aq=j$.magenta,sq=j$.cyan,Gf=j$.white,oq=j$.gray,nz=j$.bgRed,vz=j$.bgYellow,eq=j$.bgGray,qf=j$.bold,$6=j$.dim,w6=j$.italic,A6=j$.underline,J6=j$.strikethrough,U6=j$.reset,cU={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},mz={debug:"\uD83D\uDD0D",info:uz("ℹ"),success:cz("✓"),warning:vz(Gf(qf(" WARN "))),error:nz(Gf(qf(" ERROR ")))};class VA{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={...MA},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new vf,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,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...cU,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...cU};return{...cU,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:MA.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!Y$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let U,Y=0,h=3,Z=1000;while(Y<h)try{try{try{await Cj(this.config.logDirectory,Jf.F_OK|Jf.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await Sj(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 f=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:R0.from($);try{if(!e1(this.currentLogFile))await QU(this.currentLogFile,"",{mode:420});if(U=Af(this.currentLogFile,"a",420),Lj(U,f,{flag:"a"}),wf(U),U!==void 0)kU(U),U=void 0;if((await yw(this.currentLogFile)).size===0){if(await QU(this.currentLogFile,f,{flag:"w",mode:420}),(await yw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let W=E;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(Y<h-1){let F=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${h}:`,F);let j=Z*2**Y;await new Promise((B)=>setTimeout(B,j)),Y++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if(U!==void 0)try{kU(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(f){if(Y===h-1){let W=f,F=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),f}Y++;let E=Z*2**(Y-1);await new Promise((W)=>setTimeout(W,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 Lw(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 Lw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return Lw(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(Y$())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((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,Z],[,f])=>f.createdAt.getTime()-Z.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,h=Math.max(1,Y);if(U.length>h)for(let[Z]of U.slice(h))this.encryptionKeys.delete(Z),this.keys.delete(Z)}generateKeyId(){return XU(16).toString("hex")}generateKey(){return XU(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=XU(16),J=Mj("aes-256-gcm",w,A),U=R0.isBuffer($)?$:R0.from($,"utf8"),Y=J.update(U),h=J.final(),Z=Y.length+h.length,f=J.getAuthTag(),E=R0.allocUnsafe(16+Z+16);return A.copy(E,0),Y.copy(E,16),h.copy(E,16+Y.length),f.copy(E,16+Z),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=Yf(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(R0.from(R0.concat(U)))),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(Y$())return;if(!this.shouldWriteToFile())return;let $=await yw(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 U=await $A(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await yw(A).catch(()=>null))try{if(await Uf(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await wA(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await QU(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await yw(A).catch(()=>null))await Uf(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await $A(this.config.logDirectory)).filter((h)=>h.startsWith(this.name)).sort((h,Z)=>Z.localeCompare(h));for(let h of Y.slice(w.maxFiles))await wA(Lw(this.config.logDirectory,h))}}}async compressLogFile($,w){let A=$f($),J=yj(w),U=Yf();await Oj(A,U,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()})),e1(this.currentLogFile))try{let $=Af(this.currentLogFile,"r+");wf($),kU($)}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 $A(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await wA(Lw(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()?Q.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||Y$())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:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=V.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${Q.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=Q.underline(Q.blue(J)),h=this.toAbsoluteFilePath(U);if(h&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let Z=`file://${encodeURI(h)}`,f="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${Z}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),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(Y$())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(Vj(w)||w.startsWith("./")||w.startsWith("../"))w=Dj(w);else return null;return e1(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);let{consoleText:f,fileText:E}=this.buildOutputTexts(h);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":mz[$],j=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",B;switch($){case"debug":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:Q.gray(f),level:$}),console.error(B);break;case"info":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"success":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:Q.green(f),level:$}),console.error(B);break;case"warning":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"error":if(B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.error(B),Z){let T=Z.split(`
|
|
128
|
-
|
|
129
|
-
`;if(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(
|
|
135
|
-
|
|
136
|
-
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||Y$()||!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(Y$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await $A(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let Y=Lw(this.config.logDirectory,J);if($.before)try{if((await yw(Y)).mtime>=$.before)continue}catch(h){console.error(`Failed to get stats for file ${Y}:`,h);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 wA(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}var Y6=new VA("stacks");class U0 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}${$}`}}class mf extends U0{code="CONFIG_NOT_FOUND";constructor($,w,A){let J=A===void 0?[]:Array.isArray(A)?A.filter(Boolean):[A],U="";if(J.length===1)U=` or alias "${J[0]}"`;else if(J.length>1)U=` or aliases ${J.map((Y)=>`"${Y}"`).join(", ")}`;super(`Configuration "${$}"${U} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}}class IA extends U0{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}}class df extends U0{code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}}class gf extends U0{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}}class fY extends U0{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})}}class lf extends U0{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}}class tf extends U0{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}}class yA extends U0{code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}}class pf extends U0{code="BROWSER_CONFIG_ERROR";constructor($,w,A,J){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:J})}}class rf extends U0{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}}var Vw={configNotFound($,w,A){return new mf($,w,A)},configLoad($,w,A){return new IA($,w,A)},configValidation($,w,A){return new df($,w,A)},configMerge($,w,A,J){return new gf($,w,A,J)},envVar($,w,A,J){return new fY($,w,A,J)},fileSystem($,w,A){return new lf($,w,A)},typeGeneration($,w,A){return new tf($,w,A)},schemaValidation($,w,A){return new yA($,w,A)},browserConfig($,w,A,J){return new pf($,w,A,J)},plugin($,w,A){return new rf($,w,A)}};async function dz($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:U=()=>!0,fallback:Y}=w,h=Error("Unknown error occurred");for(let Z=0;Z<=A;Z++)try{return await $()}catch(f){if(h=f instanceof Error?f:Error(String(f)),Z===A||!U(h))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(Y!==void 0)return Y;throw h instanceof Error?h:Error(`Unknown error: ${String(h)}`)}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:U=!0,useBackwardCompatibility:Y=!0,customParsers:h={},verbose:Z=!1,trackPerformance:f=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let W=J||this.generateEnvPrefix($),F={...w};return this.processObject(F,[],W,{useCamelCase:U,useBackwardCompatibility:Y,customParsers:h,verbose:Z,configName:$}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(f)return eU.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[U,Y]of Object.entries($)){let h=[...w,U],Z=h.map((W)=>this.formatEnvKey(W,J.useCamelCase)),f=`${A}_${Z.join("_")}`,E=J.useBackwardCompatibility?`${A}_${h.map((W)=>W.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.processObject(Y,h,A,J);else{let W=JA.env[f]||(E?JA.env[E]:void 0);if(W!==void 0){if(J.verbose){let F=JA.env[f]?f:E}try{$[U]=this.parseEnvironmentValue(W,typeof Y,f,J.customParsers,J.configName)}catch(F){if(F instanceof fY)throw F;throw Vw.envVar(f,W,typeof Y,J.configName)}}}}}parseEnvironmentValue($,w,A,J,U){for(let[Y,h]of Object.entries(J))try{return h($)}catch{continue}for(let Y of this.defaultParsers)if(Y.canParse($,w))try{return Y.parse($)}catch{throw Vw.envVar(A,$,`${w} (via ${Y.name} parser)`,U)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,U]of Object.entries(JA.env))if(J.startsWith(A)&&U!==void 0)w[J]=U;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(U){J.push(`Cannot parse value "${w}" as ${A}: ${U}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:U="text"}=A,Y=J||this.generateEnvPrefix($),h=[];switch(this.extractEnvVarInfo(w,[],Y,h),U){case"markdown":return this.formatAsMarkdown(h,$);case"json":return JSON.stringify(h,null,2);default:return this.formatAsText(h,$)}}extractEnvVarInfo($,w,A,J){for(let[U,Y]of Object.entries($)){let h=[...w,U],Z=`${A}_${h.map((f)=>this.formatEnvKey(f,!0)).join("_")}`;if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.extractEnvVarInfo(Y,h,A,J);else J.push({key:Z,type:Array.isArray(Y)?"array":typeof Y,description:`Configuration for ${h.join(".")}`,example:this.generateExample(Y)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
|
|
63
|
+
`;return A}}function m9($,w,A={}){return xW($,w,A,new WeakMap)}function xW($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:f}=A;if(w===null||w===void 0)return Y?$:w;if(f){let W=f($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return PW($,w,U,J);if(!o$(w)||!o$($))return w;return t9($,w,A,J)}function PW($,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 d9($,w);case"smart":return g9($,w,J);default:return w}return w}function d9($,w){let A=[...w];for(let J of $)if(!A.some((U)=>NY(U,J)))A.push(J);return A}function g9($,w,A){if(w.length===0)return $;if($.length===0)return w;if(o$(w[0])&&o$($[0]))return l9($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function l9($,w,A){let J=[...w];for(let U of $){if(!o$(U)){J.push(U);continue}let Y=["id","name","key","path","type"],f=!1;for(let W of Y)if(W in U){if(J.find((E)=>o$(E)&&(W in E)&&E[W]===U[W])){f=!0;break}}if(!f)J.push(U)}return J}function t9($,w,A,J){let U=w;if(o$(U)&&J.has(U))return J.get(U);let Y={...$};if(o$(U))J.set(U,Y);for(let f in U){if(!Object.prototype.hasOwnProperty.call(U,f))continue;let W=U[f],Z=Y[f];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){Y[f]=W;continue}if(o$(W)&&o$(Z))Y[f]=xW(Z,W,A,J);else if(Array.isArray(W)||Array.isArray(Z))Y[f]=PW(Z,W,A.arrayMergeMode||"smart",J);else Y[f]=W}return Y}function bW($,w,A="replace"){return m9($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function NY($,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(!NY($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!NY($[U],w[U]))return!1}return!0}return!1}function o$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class iW{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:f=!0,verbose:W=!1}=A;if(U){let E=yA.getWithFileCheck("file",$);if(E){if(W)console.log(`Configuration loaded from cache: ${$}`);return E}}let Z=async()=>{if(!qA($))return null;try{let E=`?t=${Date.now()}`,B=await import($+E),h=B.default||B,j="default"in B,F=Object.keys(B).length>0;if(!j&&!F)throw new bA($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new bA($,Error("Configuration must export a valid object"),"unknown");let G={config:bW(w,h,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)yA.setWithFileCheck("file",G,$,Y);return G}catch(E){throw E instanceof Error?xw.configLoad($,E):xw.configLoad($,Error(String(E)))}};if(f)return RY.track("loadFromPath",Z,{path:$});return Z()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let f of this.extensions)U.push(ZY(w,`${Y}${f}`));return U}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 Y of J){if(!Y)continue;if(A.push(Y,`.${Y}.config`,`${Y}.config`,`.${Y}`),$)A.push(`${$}.${Y}.config`,`.${$}.${Y}.config`)}let U=new Set;return A.filter((Y)=>{if(!Y||U.has(Y))return!1;return U.add(Y),!0})}checkFileAccess($){return n9(async()=>{return qA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!qA($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let f of this.extensions){let W=ZY($,`${Y}${f}`);if(await this.checkFileAccess(W))J.push(W)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let f of Y)if(this.looksLikeConfigFile(f)){let W=ZY($,f);if(await this.checkFileAccess(W))J.push(W)}}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(!qA($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}class cW{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:f=[],trackPerformance:W=!0,verbose:Z=!1}=A,E=async()=>{let B=[],h=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:f,trackPerformance:W,verbose:Z};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...f],j);else return this.validateWithJSONSchema($,w,j)}catch(F){return B.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:B,warnings:h}}};if(W)return await RY.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!p9(w))throw new iA(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new iA(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let f=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(f)){if(J.push({path:A,message:`Expected type ${W.join(" or ")}, got ${f}`,expected:W.join(" or "),actual:f,rule:"type"}),Y.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"}),Y.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 f=0;f<$.length;f++){let W=A?`${A}[${f}]`:`[${f}]`;if(this.validateObjectAgainstSchema($[f],w.items,W,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let f=$;if(Y.validateRequired&&w.required){for(let W of w.required)if(!(W in f)){if(J.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[W,Z]of Object.entries(w.properties))if(W in f){let E=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(f[W],Z,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let Z of Object.keys(f))if(!W.has(Z))U.push({path:A?`${A}.${Z}`:Z,message:`Additional property '${Z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let f=this.getValueByPath($,Y.path),W=this.validateWithRule(f,Y,Y.path);if(J.push(...W),A.stopOnFirstError&&J.length>0)break}catch(f){J.push({path:Y.path,message:`Rule validation failed: ${f}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,f]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(f)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:r9},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function a9($){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 uW{fileLoader=new iW;envProcessor=new OY;validator=new cW;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...f}=$;try{if(A?.enabled){let Z=this.checkCache(f.name||"",f);if(Z)return Z}let W;try{W=await this.loadConfigurationStrategies(f,!0,A)}catch(Z){let E=f.__strictErrorHandling;if(Z instanceof Error&&Z.name==="ConfigNotFoundError"){if(E)throw Z;W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`No configuration file found for "${f.name||"config"}", using defaults with environment variables`]}}else if(Z instanceof Error&&Z.name==="ConfigLoadError"){let B=Z.message.includes("EACCES")||Z.message.includes("EPERM")||Z.message.includes("permission denied"),h=!B&&(Z.message.includes("syntax")||Z.message.includes("Expected")||Z.message.includes("Unexpected")||Z.message.includes("BuildMessage")||Z.message.includes("errors building")),j=Z.message.includes("Configuration must export a valid object")||Z.message.includes("Configuration file is empty and exports nothing");if(E&&(j||B))throw Z;if(h&&(!E||!j))W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading error, using defaults: ${Z.message}`]};else throw Z}else W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${Z instanceof Error?Z.message:String(Z)}`]}}if(U||Y)await this.validateConfiguration(W.config,U,Y,f.name);if(A?.enabled&&W)this.cacheResult(f.name||"",W,A,f);if(J?.enabled){let Z={operation:"loadConfig",duration:Date.now()-w,configName:f.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(Z);if(J.slowThreshold&&Z.duration>J.slowThreshold)M0.warn(`Slow configuration loading detected: ${Z.duration}ms for ${f.name}`);W.metrics=Z}return W}catch(W){if(W instanceof Error&&W.name==="ConfigNotFoundError")throw W;let Z=Date.now()-w;throw M0.error(`Configuration loading failed after ${Z}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:f,defaultConfig:W,checkEnv:Z=!0,arrayStrategy:E="replace",verbose:B=!1}=$,h=Y||cA.cwd(),j=[],F=await this.loadLocalConfiguration(J,U,h,f,W,E,B,Z,A);if(F)return j.push(...this.getLocalSearchPaths(J,U,h,f)),this.finalizeResult(F,j,Z,J,B);let T=await this.loadHomeConfiguration(J,U,W,E,B,Z);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,Z,J,B);let H=await this.loadPackageJsonConfiguration(J,U,h,W,E,B,Z);if(H)return j.push(a$(h,"package.json")),this.finalizeResult(H,j,Z,J,B);if(j.push(...this.getAllSearchPaths(J,U,h,f)),w)throw xw.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,W,Z,B),warnings:[`No configuration file found for "${J}"${a9(U)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,f,W,Z){let E=W?NA($,U,f):U,B=this.getLocalDirectories(A,J);for(let h of B){if(f)M0.info(`Searching for configuration in: ${h}`);let j=this.fileLoader.generateConfigPaths($,h,w),F=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:f,cacheTtl:Z?.ttl,useCache:!Z?.ttl||Z.ttl>100});if(F){if(f)M0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let f=Y?NA($,A,U):A,W=[a$(Iw(),".config",$),a$(Iw(),".config"),Iw()];for(let Z of W){if(U)M0.info(`Checking home directory: ${Z}`);let E=this.fileLoader.generateConfigPaths($,Z,w),B=await this.fileLoader.tryLoadFromPaths(E,f,{arrayStrategy:J,verbose:U});if(B){if(U)M0.success(`Configuration loaded from home directory: ${B.source.path}`);return B}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,f){let W=f?NA($,J,Y):J;try{let Z=a$(A,"package.json");if(!mj(Z))return null;let E={};try{E=JSON.parse(dj(Z,"utf8"))}catch(j){if(Y)M0.warn("Failed to parse package.json:",[j instanceof Error?j:Error(String(j))]);return null}let B=E[$],h=$;if(!B&&w){let j=Array.isArray(w)?w:[w];for(let F of j){if(!F)continue;if(E[F]){B=E[F],h=F;break}}}if(B&&typeof B==="object"&&!Array.isArray(B)){if(Y)M0.success(`Configuration loaded from package.json: ${h}`);return{config:bW(W,B,U),source:{type:"package.json",path:Z,priority:30,timestamp:new Date}}}}catch(Z){if(Y)M0.warn("Failed to load package.json:",[Z instanceof Error?Z:Error(String(Z))])}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:NA($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((f)=>f.path?`${f.path}: ${f.message}`:f.message))}if(U.length>0)throw xw.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return yA.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);yA.set(U,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([$,a$($,"config"),a$($,".config"),w?a$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(a$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let f of U)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[a$(Iw(),".config",$),a$(Iw(),".config"),Iw()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function NA($,w,A=!1){let J=new OY,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(f,W=[]){let Z={...f};for(let[E,B]of Object.entries(f)){let h=[...W,E],j=[`${U}_${h.join("_").toUpperCase()}`,`${U}_${h.map((H)=>H.toUpperCase()).join("")}`,`${U}_${h.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let H of j)if(F=cA.env[H],F!==void 0){T=H;break}if(F!==void 0&&T)if(typeof B==="boolean")Z[E]=["true","1","yes"].includes(F.toLowerCase());else if(typeof B==="number"){let H=Number(F);if(!Number.isNaN(H))Z[E]=H}else if(Array.isArray(B))try{Z[E]=JSON.parse(F)}catch{Z[E]=F.split(",").map((H)=>H.trim())}else Z[E]=F;else if(B&&typeof B==="object"&&!Array.isArray(B))Z[E]=Y(B,h)}return Z}return Y(w)}var yA,RY,Oz,Xz=($)=>$,Dz=($,w)=>{for(var A in w)Oz($,A,{get:w[A],enumerable:!0,configurable:!0,set:_z.bind(w,A)})},kz=($,w)=>()=>($&&(w=$($=0)),w),EW,qW,Qw,C1,NW,f9,Z9,tZ,KA,hY,K$,d,W9,pZ,E9,rZ,B9,h9,AY,F9,aZ,sZ,JY,j9,z9,H9,T9,MA,RW,G9,M$,q9,N9,oZ,IA,FY,W$,D,R9,eZ,K9,$W,M9,I9,UY,C9,wW,AW,y9,YY,L9,S9,V9,O9,X9,CA,KW,_9,D9="0.15.6",n$,QA,M1,jY,zY,xA,HY,TY,I1,GY,qY,t0,MW,IW,f0,L0,CW,yW,k9,x9,LW,PA,e6,G$,x,$N,b9,wN,i9,AN,JN,JW,UN,c9,u9,YN,UW,fN,ZN,WN,EN,BN,fY,v9,hN,Z0,VW,bA,OW,XW,VY,_W,DW,iA,kW,QW,xw,r9,M0,TN,GN,qN;var XY=X$(()=>{yA=new YW,RY=new fW,Oz=Object.defineProperty;EW={};Dz(EW,{withErrorRecovery:()=>FW,tryLoadConfig:()=>A9,loadConfigWithResult:()=>$9,loadConfig:()=>GW,isRetryableError:()=>pz,isConfigNotFoundError:()=>tz,isBunfigError:()=>jW,globalPerformanceMonitor:()=>C1,globalCache:()=>Qw,getEnvOrDefault:()=>rz,generateConfigTypes:()=>J9,defaultGeneratedDir:()=>yW,defaultConfigDir:()=>CW,deepMergeWithArrayStrategy:()=>yY,deepMerge:()=>zW,createLibraryConfig:()=>U9,config:()=>w9,bunfigPlugin:()=>Y9,applyEnvVarsToConfig:()=>R1,TypeGenerationError:()=>TY,SchemaValidationError:()=>I1,PluginError:()=>qY,PerformanceMonitor:()=>MY,FileSystemError:()=>HY,ErrorFactory:()=>t0,EnvVarError:()=>xA,EnvProcessor:()=>uA,ConfigValidator:()=>LY,ConfigValidationError:()=>jY,ConfigNotFoundError:()=>QA,ConfigMergeError:()=>zY,ConfigLoader:()=>SY,ConfigLoadError:()=>M1,ConfigFileLoader:()=>vA,ConfigCache:()=>KY,CacheUtils:()=>NW,BunfigError:()=>n$,BrowserConfigError:()=>GY,ArrayMergeStrategies:()=>MW});k9=kz(async()=>{qW=import.meta.require,Qw=new KY,C1=new MY,NW={createKey:Qz,isEquivalent:xz,estimateMemoryUsage:Pz},f9=VA(EY.cwd(),"config"),Z9=VA(EY.cwd(),"src/generated"),tZ=SA.env.CLARITY_LOG_DIR||aj(cz(),"logs"),KA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:tZ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},hY=await uz(),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`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},d=K$,W9=K$.red,pZ=K$.green,E9=K$.yellow,rZ=K$.blue,B9=K$.magenta,h9=K$.cyan,AY=K$.white,F9=K$.gray,aZ=K$.bgRed,sZ=K$.bgYellow,JY=K$.bold,j9=K$.dim,z9=K$.italic,H9=K$.underline,T9=K$.reset,MA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},RW={debug:"\uD83D\uDD0D",info:rZ("ℹ"),success:pZ("✓"),warning:sZ(AY(JY(" WARN "))),error:aZ(AY(JY(" ERROR ")))},G9=new _A("stacks"),M$=new _A("bunfig",{showTags:!0}),q9=_$(K1.cwd(),"config"),N9=_$(K1.cwd(),"src/generated"),oZ=LA.env.CLARITY_LOG_DIR||pj(dz(),"logs"),IA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:oZ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},FY=await gz(),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$,R9=W$.red,eZ=W$.green,K9=W$.yellow,$W=W$.blue,M9=W$.magenta,I9=W$.cyan,UY=W$.white,C9=W$.gray,wW=W$.bgRed,AW=W$.bgYellow,y9=W$.bgGray,YY=W$.bold,L9=W$.dim,S9=W$.italic,V9=W$.underline,O9=W$.strikethrough,X9=W$.reset,CA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},KW={debug:"\uD83D\uDD0D",info:$W("ℹ"),success:eZ("✓"),warning:AW(UY(YY(" WARN "))),error:wW(UY(YY(" ERROR ")))},_9=new kA("stacks"),n$=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}`}},QA=class extends n${code="CONFIG_NOT_FOUND";constructor(w,A,J){let U=J?` or alias "${J}"`:"";super(`Configuration "${w}"${U} not found`,{configName:w,alias:J,searchPaths:A,searchPathCount:A.length})}},M1=class extends n${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}},jY=class extends n${code="CONFIG_VALIDATION_ERROR";constructor(w,A,J){super(`Configuration validation failed for "${w}"`,{configPath:w,configName:J,validationErrors:A,errorCount:A.length})}},zY=class extends n${code="CONFIG_MERGE_ERROR";constructor(w,A,J,U){super(`Failed to merge configuration from "${w}" with "${A}": ${J.message}`,{sourcePath:w,targetPath:A,configName:U,originalError:J.name,originalMessage:J.message});this.cause=J}},xA=class extends n${code="ENV_VAR_ERROR";constructor(w,A,J,U){super(`Failed to parse environment variable "${w}" with value "${A}" as ${J}`,{envKey:w,envValue:A,expectedType:J,configName:U})}},HY=class extends n${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}},TY=class extends n${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}},I1=class extends n${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})}},GY=class extends n${code="BROWSER_CONFIG_ERROR";constructor(w,A,J,U){super(`Failed to fetch configuration from "${w}": ${A} ${J}`,{endpoint:w,status:A,statusText:J,configName:U})}},qY=class extends n${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}},t0={configNotFound($,w,A){return new QA($,w,A)},configLoad($,w,A){return new M1($,w,A)},configValidation($,w,A){return new jY($,w,A)},configMerge($,w,A,J){return new zY($,w,A,J)},envVar($,w,A,J){return new xA($,w,A,J)},fileSystem($,w,A){return new HY($,w,A)},typeGeneration($,w,A){return new TY($,w,A)},schemaValidation($,w,A){return new I1($,w,A)},browserConfig($,w,A,J){return new GY($,w,A,J)},plugin($,w,A){return new qY($,w,A)}},MW={replace:"replace",concat:"concat",smart:"smart"},IW=/^https?:\/\//,f0=new kA("bunfig",{showTags:!0}),L0=new SY,CW=D$(fw.cwd(),"config"),yW=D$(fw.cwd(),"src/generated")});x9=OA.env.CLARITY_LOG_DIR||qz(Q9(),"logs"),LW={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:x9,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},PA={...LW},e6=(async()=>{try{let{loadConfig:$}=await k9().then(()=>EW),w=await $({name:"clarity",alias:"logging",defaultConfig:LW,cwd:OA.cwd()});if(w)Object.assign(PA,w)}catch{}return PA})();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"},x=G$,$N=G$.red,b9=G$.green,wN=G$.yellow,i9=G$.blue,AN=G$.magenta,JN=G$.cyan,JW=G$.white,UN=G$.gray,c9=G$.bgRed,u9=G$.bgYellow,YN=G$.bgGray,UW=G$.bold,fN=G$.dim,ZN=G$.italic,WN=G$.underline,EN=G$.strikethrough,BN=G$.reset,fY={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},v9={debug:"\uD83D\uDD0D",info:i9("ℹ"),success:b9("✓"),warning:u9(JW(UW(" WARN "))),error:c9(JW(UW(" ERROR ")))};hN=new nA("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}${$}`}};VW=class VW extends Z0{code="CONFIG_NOT_FOUND";constructor($,w,A){let J=A===void 0?[]:Array.isArray(A)?A.filter(Boolean):[A],U="";if(J.length===1)U=` or alias "${J[0]}"`;else if(J.length>1)U=` or aliases ${J.map((Y)=>`"${Y}"`).join(", ")}`;super(`Configuration "${$}"${U} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}};bA=class bA 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}};OW=class OW extends Z0{code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}};XW=class XW extends Z0{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}};VY=class VY extends Z0{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})}};_W=class _W 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}};DW=class DW 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}};iA=class iA 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})}};kW=class kW extends Z0{code="BROWSER_CONFIG_ERROR";constructor($,w,A,J){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:J})}};QW=class QW 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}};xw={configNotFound($,w,A){return new VW($,w,A)},configLoad($,w,A){return new bA($,w,A)},configValidation($,w,A){return new OW($,w,A)},configMerge($,w,A,J){return new XW($,w,A,J)},envVar($,w,A,J){return new VY($,w,A,J)},fileSystem($,w,A){return new _W($,w,A)},typeGeneration($,w,A){return new DW($,w,A)},schemaValidation($,w,A){return new iA($,w,A)},browserConfig($,w,A,J){return new kW($,w,A,J)},plugin($,w,A){return new QW($,w,A)}};r9=/^https?:\/\//;M0=new nA("bunfig",{showTags:!0});TN=new uW;GN=a$(cA.cwd(),"config"),qN=a$(cA.cwd(),"src/generated")});var R;var p0=X$(()=>{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 e9}from"node:module";import kY from"node:os";import QY from"node:path";import{existsSync as vW,statSync as nW}from"fs";import{existsSync as $H,mkdirSync as DN,readdirSync as kN,readFileSync as wH,writeFileSync as QN}from"fs";import{homedir as bw}from"os";import{dirname as bN,resolve as e$}from"path";import CJ from"process";import{existsSync as mW,statSync as dW}from"fs";import{existsSync as $8,mkdirSync as AH,readdirSync as JH,writeFileSync as UH}from"fs";import{homedir as iw}from"os";import{dirname as gW,resolve as Q$}from"path";import Zw from"process";import{join as YH,relative as fH,resolve as lW}from"path";import WJ from"process";import{existsSync as kE,mkdirSync as tN,readdirSync as pN,writeFileSync as rN}from"fs";import{homedir as xY}from"os";import{dirname as oN,resolve as k$}from"path";import V1 from"process";import{join as ZH,relative as WH,resolve as tW}from"path";import EJ from"process";import{existsSync as QE,mkdirSync as JR,readdirSync as UR,writeFileSync as YR}from"fs";import{dirname as ZR,resolve as BJ}from"path";import w8 from"process";import{Buffer as r0}from"buffer";import{createCipheriv as EH,createDecipheriv as BH,randomBytes as PY}from"crypto";import{closeSync as bY,createReadStream as pW,createWriteStream as hH,existsSync as iY,fsyncSync as rW,openSync as aW,writeFileSync as FH}from"fs";import{access as jH,constants as sW,mkdir as zH,readdir as mA,rename as oW,stat as cw,unlink as dA,writeFile as cY}from"fs/promises";import{join as uw}from"path";import I$ from"process";import{pipeline as HH}from"stream/promises";import{createGzip as eW}from"zlib";import vw from"process";import X0 from"process";import{Buffer as S0}from"buffer";import{createCipheriv as TH,createDecipheriv as GH,randomBytes as uY}from"crypto";import{closeSync as vY,createReadStream as $E,createWriteStream as qH,existsSync as gA,fsyncSync as wE,openSync as AE,writeFileSync as NH}from"fs";import{access as RH,constants as JE,mkdir as KH,readdir as lA,rename as UE,stat as nw,unlink as tA,writeFile as nY}from"fs/promises";import{isAbsolute as MH,join as mw,resolve as IH}from"path";import u from"process";import{pipeline as CH}from"stream/promises";import{createGzip as YE}from"zlib";import dw from"process";import _0 from"process";import pA from"process";import{existsSync as rA}from"fs";import{resolve as mY}from"path";import{existsSync as yH}from"fs";import{existsSync as LH,readdirSync as SH}from"fs";import{extname as dY,resolve as fE}from"path";import VH from"process";import{join as OH,relative as XH,resolve as ZE}from"path";import hJ from"process";import{Buffer as V0}from"buffer";import{createCipheriv as _H,createDecipheriv as DH,randomBytes as gY}from"crypto";import{closeSync as lY,createReadStream as WE,createWriteStream as kH,existsSync as aA,fsyncSync as EE,openSync as BE,writeFileSync as QH}from"fs";import{access as xH,constants as hE,mkdir as PH,readdir as sA,rename as FE,stat as gw,unlink as oA,writeFile as tY}from"fs/promises";import{isAbsolute as bH,join as lw,resolve as iH}from"path";import v from"process";import{pipeline as cH}from"stream/promises";import{createGzip as jE}from"zlib";import tw from"process";import D0 from"process";import eA from"process";import{existsSync as $J}from"fs";import{resolve as pY}from"path";import{existsSync as uH}from"fs";import{exec as WG}from"node:child_process";import SE from"node:fs";import EG from"node:os";import W0 from"node:path";import TB from"node:process";import{promisify as BG}from"node:util";import sw from"node:crypto";import k0 from"node:fs";import z8 from"node:path";import{execSync as DE}from"node:child_process";import IJ from"node:os";class xE{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 U=this.generateKey($,A),Y=J??this.options.ttl,f=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:f}),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(!vW($))return!0;return nW($).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 U=vW(A)?nW(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 PE{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),f=performance.now()-J;return this.recordMetric({operation:$,duration:f,timestamp:U,...A}),Y}catch(Y){let f=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:f,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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 mH($,w){this[$]=nH.bind(null,w)}class T8{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 U=this.generateKey($,A),Y=J??this.options.ttl,f=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:f}),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(!mW($))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 U=mW(A)?dW(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 G8{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),f=performance.now()-J;return this.recordMetric({operation:$,duration:f,timestamp:U,...A}),Y}catch(Y){let f=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:f,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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 lH($,w={}){let A=Object.keys(w).sort().map((J)=>`${J}:${w[J]}`).join("|");return A?`${$}:${A}`:$}function tH($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function pH($){return $.getStats().size*2}function q8($,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 U of $)if(r(U)&&"name"in U){if(!J.find((Y)=>r(Y)&&("name"in Y)&&Y.name===U.name))J.push(U)}else if(r(U)&&"path"in U){if(!J.find((Y)=>r(Y)&&("path"in Y)&&Y.path===U.path))J.push(U)}else if(!J.some((Y)=>jJ(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);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 U=w[J];if(U===null||U===void 0)continue;else if(r(U)&&r(A[J]))A[J]=q8(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&r(U[0])&&r(A[J][0])){let Y=[...U];for(let f of A[J])if(r(f)&&"name"in f){if(!Y.find((W)=>r(W)&&("name"in W)&&W.name===f.name))Y.push(f)}else if(r(f)&&"path"in f){if(!Y.find((W)=>r(W)&&("path"in W)&&W.path===f.path))Y.push(f)}else if(!Y.some((W)=>jJ(W,f)))Y.push(f);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let f of A[J])if(!Y.includes(f))Y.push(f);A[J]=Y}else A[J]=U;else A[J]=U}return A}function jJ($,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(!jJ($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!jJ($[U],w[U]))return!1}return!0}return!1}function r($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function rH($,w){if(!QE($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return q8(w,J)}catch{return null}}catch{return null}}async function aH({name:$="",cwd:w,defaultConfig:A}){let J=w||w8.cwd(),U=[".ts",".js",".mjs",".cjs",".json"],Y=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let f of Y)for(let W of U){let Z=BJ(J,`${f}${W}`),E=await rH(Z,A);if(E!==null)return E}try{let f=BJ(J,"package.json");if(QE(f)){let W=(await import(f))[$];if(W&&typeof W==="object"&&!Array.isArray(W))try{return q8(A,W)}catch{}}}catch{}return A}function sH($,w={}){let A=EJ.cwd();while(A.includes("storage"))A=tW(A,"..");let J=tW(A,$||"");if(w?.relative)return WH(EJ.cwd(),J);return J}async function oH(){try{let $=await aH({name:"clarity",defaultConfig:UJ,cwd:EJ.cwd(),endpoint:"",headers:{}});return{...UJ,...$}}catch{return UJ}}function $$(){if(X0.env.NODE_ENV==="test"||X0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function eH(){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 iE{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: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 zJ{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={...J8},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new iE,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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...YJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...YJ};return{...YJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:J8.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,U=0,Y=3,f=1000;while(U<Y)try{try{try{await jH(this.config.logDirectory,sW.F_OK|sW.W_OK)}catch(Z){if(Z instanceof Error&&"code"in Z)if(Z.code==="ENOENT")await zH(this.config.logDirectory,{recursive:!0,mode:493});else if(Z.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw Z;else throw Z}}catch(Z){throw console.error("Debug: [writeToFile] Failed to create log directory:",Z),Z}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:r0.from($);try{if(!iY(this.currentLogFile))await cY(this.currentLogFile,"",{mode:420});if(J=aW(this.currentLogFile,"a",420),FH(J,W,{flag:"a"}),rW(J),J!==void 0)bY(J),J=void 0;if((await cw(this.currentLogFile)).size===0){if(await cY(this.currentLogFile,W,{flag:"w",mode:420}),(await cw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(Z){let E=Z;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(U<Y-1){let B=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Y}:`,B);let h=f*2**U;await new Promise((j)=>setTimeout(j,h)),U++;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{bY(J)}catch(Z){console.error("Debug: [writeToFile] Error closing file descriptor:",Z)}}}catch(W){if(U===Y-1){let E=W,B=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",B),W}U++;let Z=f*2**(U-1);await new Promise((E)=>setTimeout(E,Z))}})();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 uw(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 uw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return uw(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 $=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(([,f],[,W])=>W.createdAt.getTime()-f.createdAt.getTime()),U=typeof $.maxKeys==="number"?$.maxKeys:1,Y=Math.max(1,U);if(J.length>Y)for(let[f]of J.slice(Y))this.encryptionKeys.delete(f),this.keys.delete(f)}generateKeyId(){return PY(16).toString("hex")}generateKey(){return PY(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=PY(16),J=EH("aes-256-gcm",w,A),U=r0.concat([J.update($,"utf8"),J.final()]),Y=J.getAuthTag();return{encrypted:r0.concat([A,U,Y]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=eW(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(r0.from(r0.concat(U)))),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 cw(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 U=await mA(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await cw(A).catch(()=>null))try{if(await oW(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await dA(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await cY(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await cw(A).catch(()=>null))await oW(A,Y)}if(this.currentLogFile=J,w.maxFiles){let U=(await mA(this.config.logDirectory)).filter((Y)=>Y.startsWith(this.name)).sort((Y,f)=>f.localeCompare(Y));for(let Y of U.slice(w.maxFiles))await dA(uw(this.config.logDirectory,Y))}}}async compressLogFile($,w){let A=pW($),J=hH(w),U=eW();await HH(A,U,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()})),iY(this.currentLogFile))try{let $=aW(this.currentLogFile,"r+");rW($),bY($)}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 $=(await mA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await dA(uw(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?g.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=I$.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${g.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}async log($,w,...A){let J=new Date,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);if(this.fancy&&!$$()){let E=pE[$],B=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",h;switch($){case"debug":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:g.gray(f),level:$}),console.error(h);break;case"info":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.error(h);break;case"success":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:g.green(f),level:$}),console.error(h);break;case"warning":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.warn(h);break;case"error":if(h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.error(h),W){let j=W.split(`
|
|
64
|
+
`);for(let F of j)if(F.trim()&&!F.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:g.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!$$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}if(!this.shouldLog($))return;let Z=`${Y} ${this.environment}.${$.toUpperCase()}: ${f}
|
|
65
|
+
`;if(W)Z+=`${W}
|
|
66
|
+
`;Z=Z.replace(this.ANSI_PATTERN,""),await this.writeToFile(Z)}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(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),Z=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)Z+=` ${JSON.stringify(A)}`;if(Z+=`
|
|
67
|
+
`,Z=Z.replace(this.ANSI_PATTERN,""),this.fancy&&!$$()){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:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!$$())console.error(Z.trim());await this.writeToFile(Z)}}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 zJ(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(!iY(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return pW(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=r0.isBuffer($)?$:r0.from($,"base64"),U=J.slice(0,16),Y=J.slice(-16),f=J.slice(16,-16),W=BH("aes-256-gcm",A,U);return W.setAuthTag(Y),r0.concat([W.update(f),W.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 Y=$.split(`
|
|
68
|
+
`),f=Math.max(...Y.map((B)=>B.length))+2,W=`┌${"─".repeat(f)}┐`,Z=`└${"─".repeat(f)}┘`,E=Y.map((B)=>{let h=" ".repeat(f-B.length-2);return`│ ${B}${h} │`});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)})),E.forEach((B)=>console.error(this.formatConsoleMessage({timestamp:A,message:g.cyan(B),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:g.cyan(Z),showTimestamp:!1}))}else if(!$$())console.error(`${J} ${this.environment}.INFO: [BOX] ${$}`);let U=`${J} ${this.environment}.INFO: [BOX] ${$}
|
|
69
|
+
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(U)}async prompt($){if($$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${g.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=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(U==="y"||U==="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,Y=0;if(A=$.replace(U,(f,W)=>{if(W==="%")return"%";if(Y>=w.length)return f;let Z=w[Y++];switch(W){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return f}}),Y<w.length)A+=` ${w.slice(Y).map((f)=>typeof f==="object"?JSON.stringify(f,null,2):String(f)).join(" ")}`}if(this.fancy&&!$$()){let U=this.options.showTags!==!1&&this.name?g.gray(this.formatTag(this.name)):"",Y=g.blue("◐");console.error(`${Y} ${U} ${g.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||$$()||$<=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,U)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||$$())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,J)),U!==void 0)this.activeProgressBar.message=U;let Y=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,Y)},finish:(J)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||$$())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,U="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||$$())return;I$.stdout.write(`${"\r".padEnd(I$.stdout.columns||80)}\r`),this.log(U,J),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||$$()||!I$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),U=$.barLength-J,Y=g.green("━".repeat(J)),f=g.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=w||A===100?g.green("✓"):g.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${g.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=I$.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,I$.stdout.write($.lastRenderedLine),w)I$.stdout.write(`
|
|
71
|
+
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||$$()||!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($$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await mA(this.config.logDirectory),A=[];for(let J of w){if(!($.name?new RegExp($.name.replace("*",".*")).test(J):J.startsWith(this.name))||!J.endsWith(".log"))continue;let U=uw(this.config.logDirectory,J);if($.before)try{if((await cw(U)).mtime>=$.before)continue}catch(Y){console.error(`Failed to get stats for file ${U}:`,Y);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 dA(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function JJ($,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 U of $)if(n(U)&&"name"in U){if(!J.find((Y)=>n(Y)&&("name"in Y)&&Y.name===U.name))J.push(U)}else if(n(U)&&"path"in U){if(!J.find((Y)=>n(Y)&&("path"in Y)&&Y.path===U.path))J.push(U)}else if(!J.some((Y)=>HJ(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);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 U=w[J];if(U===null||U===void 0)continue;else if(n(U)&&n(A[J]))A[J]=JJ(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&n(U[0])&&n(A[J][0])){let Y=[...U];for(let f of A[J])if(n(f)&&"name"in f){if(!Y.find((W)=>n(W)&&("name"in W)&&W.name===f.name))Y.push(f)}else if(n(f)&&"path"in f){if(!Y.find((W)=>n(W)&&("path"in W)&&W.path===f.path))Y.push(f)}else if(!Y.some((W)=>HJ(W,f)))Y.push(f);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let f of A[J])if(!Y.includes(f))Y.push(f);A[J]=Y}else A[J]=U;else A[J]=U}return A}function N8($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:JJ($,w);if(Array.isArray($))return A==="replace"?w:JJ($,w);if(!n(w)||!n($))return w;let J={...$};for(let U of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,U))continue;let Y=w[U],f=J[U];if(Y===null||Y===void 0)continue;if(Array.isArray(Y)||Array.isArray(f))if(A==="replace")J[U]=Y;else J[U]=JJ(f,Y);else if(n(Y)&&n(f))J[U]=N8(f,Y,A);else J[U]=Y}return J}function HJ($,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(!HJ($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!HJ($[U],w[U]))return!1}return!0}return!1}function n($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function wJ($,w,A="replace"){if(!kE($))return null;try{let J=await import($),U=J.default||J;if(typeof U!=="object"||U===null||Array.isArray(U))return null;try{return N8(w,U,A)}catch{return null}}catch{return null}}function $T($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),U={...w};function Y(f,W=[]){let Z={...f};for(let[E,B]of Object.entries(f)){let h=[...W,E],j=(H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${J}_${h.map(j).join("_")}`,T=`${J}_${h.map((H)=>H.toUpperCase()).join("_")}`;if(A)y$.info(`Checking environment variable ${F} for config ${$}.${h.join(".")}`);if(typeof B==="object"&&B!==null&&!Array.isArray(B))Z[E]=Y(B,h);else{let H=V1.env[F]||V1.env[T];if(H!==void 0){if(A)y$.info(`Using environment variable ${H?F:T} for config ${$}.${h.join(".")}`);if(typeof B==="number")Z[E]=Number(H);else if(typeof B==="boolean")Z[E]=H.toLowerCase()==="true";else if(Array.isArray(B))try{let G=JSON.parse(H);if(Array.isArray(G))Z[E]=G;else Z[E]=H.split(",").map((q)=>q.trim())}catch{Z[E]=H.split(",").map((G)=>G.trim())}else Z[E]=H}}}return Z}return Y(U)}async function wT({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:U,verbose:Y=!1,checkEnv:f=!0,arrayStrategy:W="replace"}){let Z=f&&typeof U==="object"&&U!==null&&!Array.isArray(U)?$T($,U,Y):U,E=A||V1.cwd(),B=[".ts",".js",".mjs",".cjs",".json"];if(Y)y$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let h=[$,`.${$}`].filter(Boolean),j=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],H=Array.from(new Set([E,k$(E,"config"),k$(E,".config"),J?k$(E,J):void 0].filter(Boolean)));for(let G of H){if(Y)y$.info(`Searching for configuration in: ${G}`);let q=[k$(E,"config"),k$(E,".config")].concat(J?[k$(E,J)]:[]).includes(G)?[...h,...j,...F,...T]:[...j,...h,...T,...F];for(let N of q)for(let K of B){let C=k$(G,`${N}${K}`),y=await wJ(C,Z,W);if(y!==null){if(Y)y$.success(`Configuration loaded from: ${C}`);return y}}}if($){let G=k$(xY(),".config",$),q=["config",`${$}.config`];if(w)q.push(`${w}.config`);if(Y)y$.info(`Checking user config directory: ${G}`);for(let N of q)for(let K of B){let C=k$(G,`${N}${K}`),y=await wJ(C,Z,W);if(y!==null){if(Y)y$.success(`Configuration loaded from user config directory: ${C}`);return y}}}if($){let G=k$(xY(),".config"),q=[`.${$}.config`];if(w)q.push(`.${w}.config`);if(Y)y$.info(`Checking user config directory for dotfile configs: ${G}`);for(let N of q)for(let K of B){let C=k$(G,`${N}${K}`),y=await wJ(C,Z,W);if(y!==null){if(Y)y$.success(`Configuration loaded from user config directory dotfile: ${C}`);return y}}}if($){let G=xY(),q=[`.${$}.config`,`.${$}`];if(w)q.push(`.${w}.config`),q.push(`.${w}`);if(Y)y$.info(`Checking user home directory for dotfile configs: ${G}`);for(let N of q)for(let K of B){let C=k$(G,`${N}${K}`),y=await wJ(C,Z,W);if(y!==null){if(Y)y$.success(`Configuration loaded from user home directory: ${C}`);return y}}}try{let G=k$(E,"package.json");if(kE(G)){let q=await import(G),N=q[$];if(!N&&w){if(N=q[w],N&&Y)y$.success(`Using alias "${w}" configuration from package.json`)}if(N&&typeof N==="object"&&!Array.isArray(N))try{if(Y)y$.success(`Configuration loaded from package.json: ${N===q[$]?$:w}`);return N8(Z,N,W)}catch(K){if(Y)y$.warn("Failed to merge package.json config:",K)}}}catch(G){if(Y)y$.warn("Failed to load package.json:",G)}if(Y)y$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return Z}function AT($,w={}){let A=WJ.cwd();while(A.includes("storage"))A=lW(A,"..");let J=lW(A,$||"");if(w?.relative)return fH(WJ.cwd(),J);return J}async function JT(){try{let $=await wT({name:"clarity",alias:"logging",defaultConfig:fJ,cwd:WJ.cwd()});return{...fJ,...$||{}}}catch{return fJ}}function B$(){if(_0.env.NODE_ENV==="test"||_0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function UT(){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 cE{async format($){let w=await UT(),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 TJ{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor($,w={}){this.name=$,this.config={...U8},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new cE,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??u.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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...ZJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...ZJ};return{...ZJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:U8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},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 w=(async()=>{let J,U=0,Y=3,f=1000;while(U<Y)try{try{try{await RH(this.config.logDirectory,JE.F_OK|JE.W_OK)}catch(Z){if(Z instanceof Error&&"code"in Z)if(Z.code==="ENOENT")await KH(this.config.logDirectory,{recursive:!0,mode:493});else if(Z.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw Z;else throw Z}}catch(Z){throw console.error("Debug: [writeToFile] Failed to create log directory:",Z),Z}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:S0.from($);try{if(!gA(this.currentLogFile))await nY(this.currentLogFile,"",{mode:420});if(J=AE(this.currentLogFile,"a",420),NH(J,W,{flag:"a"}),wE(J),J!==void 0)vY(J),J=void 0;if((await nw(this.currentLogFile)).size===0){if(await nY(this.currentLogFile,W,{flag:"w",mode:420}),(await nw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(Z){let E=Z;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(U<Y-1){let B=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Y}:`,B);let h=f*2**U;await new Promise((j)=>setTimeout(j,h)),U++;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{vY(J)}catch(Z){console.error("Debug: [writeToFile] Error closing file descriptor:",Z)}}}catch(W){if(U===Y-1){let E=W,B=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",B),W}U++;let Z=f*2**(U-1);await new Promise((E)=>setTimeout(E,Z))}})();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 mw(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 mw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return mw(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 $=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(([,f],[,W])=>W.createdAt.getTime()-f.createdAt.getTime()),U=typeof $.maxKeys==="number"?$.maxKeys:1,Y=Math.max(1,U);if(J.length>Y)for(let[f]of J.slice(Y))this.encryptionKeys.delete(f),this.keys.delete(f)}generateKeyId(){return uY(16).toString("hex")}generateKey(){return uY(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=uY(16),J=TH("aes-256-gcm",w,A),U=S0.isBuffer($)?$:S0.from($,"utf8"),Y=J.update(U),f=J.final(),W=Y.length+f.length,Z=J.getAuthTag(),E=S0.allocUnsafe(16+W+16);return A.copy(E,0),Y.copy(E,16),f.copy(E,16+Y.length),Z.copy(E,16+W),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=YE(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(S0.from(S0.concat(U)))),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 nw(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 U=await lA(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await nw(A).catch(()=>null))try{if(await UE(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await tA(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await nY(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await nw(A).catch(()=>null))await UE(A,Y)}if(this.currentLogFile=J,w.maxFiles){let U=(await lA(this.config.logDirectory)).filter((Y)=>Y.startsWith(this.name)).sort((Y,f)=>f.localeCompare(Y));for(let Y of U.slice(w.maxFiles))await tA(mw(this.config.logDirectory,Y))}}}async compressLogFile($,w){let A=$E($),J=qH(w),U=YE();await CH(A,U,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()})),gA(this.currentLogFile))try{let $=AE(this.currentLogFile,"r+");wE($),vY($)}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 $=(await lA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await tA(mw(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()?k.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||B$())return!1;let $=typeof u.env.NO_COLOR<"u",w=u.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof u.stderr<"u"&&u.stderr.isTTY||typeof u.stdout<"u"&&u.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=u.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${k.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=k.underline(k.blue(J)),f=this.toAbsoluteFilePath(U);if(f&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(f)}`,Z="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${W}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),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(B$())return!1;let $=u.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=u.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(MH(w)||w.startsWith("./")||w.startsWith("../"))w=IH(w);else return null;return gA(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);let{consoleText:Z,fileText:E}=this.buildOutputTexts(f);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":rE[$],j=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:k.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:k.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.error(F),W){let T=W.split(`
|
|
72
|
+
`);for(let H of T)if(H.trim()&&!H.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:k.gray(` ${H}`),level:$,showTimestamp:!1}))}break}}else if(!B$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}if(!this.shouldLog($))return;let B=`${Y} ${this.environment}.${$.toUpperCase()}: ${E}
|
|
73
|
+
`;if(W)B+=`${W}
|
|
74
|
+
`;if(B=B.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(B)}progress($,w=""){let A={update:(U,Y)=>{},finish:(U)=>{},interrupt:(U,Y)=>{}};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$()&&u.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(U,Y)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,U),this.activeProgressBar.total),Y!==void 0)this.activeProgressBar.message=Y;if(this.shouldStyleConsole()&&!B$()&&u.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(U)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,U)},interrupt:(U,Y="info")=>{if(!B$()&&u.stdout.isTTY)u.stdout.write(`
|
|
75
|
+
`);if(this[Y==="warning"?"warn":Y](U),this.activeProgressBar&&this.shouldStyleConsole()&&!B$()&&u.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(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),Z=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)Z+=` ${JSON.stringify(A)}`;if(Z+=`
|
|
76
|
+
`,Z=Z.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:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!B$())console.error(Z.trim());if(this.shouldWriteToFile())await this.writeToFile(Z)}}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 TJ(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(!gA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return $E(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=S0.isBuffer($)?$:S0.from($,"base64"),U=J.subarray(0,16),Y=J.subarray(J.length-16),f=J.subarray(16,J.length-16),W=GH("aes-256-gcm",A,U);W.setAuthTag(Y);let Z=W.update(f),E=W.final(),B=Z.length+E.length,h=S0.allocUnsafe(B);return Z.copy(h,0),E.copy(h,Z.length),h.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:U,fileText:Y}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=U.split(`
|
|
77
|
+
`),Z=Math.max(...W.map((j)=>j.length))+2,E=`┌${"─".repeat(Z)}┐`,B=`└${"─".repeat(Z)}┘`,h=W.map((j)=>{return this.formatConsoleMessage({timestamp:A,message:k.cyan(j),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:k.cyan(E),showTimestamp:!1})),h.forEach((j)=>console.error(j)),console.error(this.formatConsoleMessage({timestamp:A,message:k.cyan(B),showTimestamp:!1}))}else if(!B$())console.error(`${J} ${this.environment}.INFO: [BOX] ${Y}`);let f=`${J} ${this.environment}.INFO: [BOX] ${Y}
|
|
78
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(f)}async prompt($){if(B$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${k.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=J.toString().trim().toLowerCase();u.stdin.removeListener("data",A);try{if(typeof u.stdin.setRawMode==="function")u.stdin.setRawMode(!1)}catch{}u.stdin.pause(),console.error(""),w(U==="y"||U==="yes")};try{if(typeof u.stdin.setRawMode==="function")u.stdin.setRawMode(!0)}catch{}u.stdin.resume(),u.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,W=0;if(A=$.replace(f,(Z,E)=>{if(E==="%")return"%";if(W>=w.length)return Z;let B=w[W++];switch(E){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 Z}}),W<w.length)A+=` ${w.slice(W).map((Z)=>typeof Z==="object"?JSON.stringify(Z,null,2):String(Z)).join(" ")}`}let{consoleText:J,fileText:U}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let f=this.options.showTags!==!1&&this.name?k.gray(this.formatTag(this.name)):"",W=this.options.showIcons===!1?"":`${k.blue("◐")} `;console.error(`${W}${f} ${k.cyan(J)}`)}let Y=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
79
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Y)}renderProgressBar($,w=!1){if(!this.enabled||!this.shouldStyleConsole()||!u.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),U=$.barLength-J,Y=k.green("━".repeat(J)),f=k.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=this.options.showIcons===!1?"":w||A===100?k.green("✓"):k.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${k.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=u.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,u.stdout.write($.lastRenderedLine),w)u.stdout.write(`
|
|
80
|
+
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||B$()||!u.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 lA(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=mw(this.config.logDirectory,J);if($.before)try{if((await nw(U)).mtime>=$.before)continue}catch(Y){console.error(`Failed to get stats for file ${U}:`,Y);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 tA(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function uE($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:U=()=>!0,fallback:Y}=w,f=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(Z){if(f=Z instanceof Error?Z:Error(String(Z)),W===A||!U(f))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(Y!==void 0)return Y;throw f instanceof Error?f:Error(`Unknown error: ${String(f)}`)}function vE($){return $ instanceof m$}function YT($){return $ instanceof GJ}function fT($){if(vE($))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 yJ{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:U=!0,useBackwardCompatibility:Y=!0,customParsers:f={},verbose:W=!1,trackPerformance:Z=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let B=J||this.generateEnvPrefix($),h={...w};return this.processObject(h,[],B,{useCamelCase:U,useBackwardCompatibility:Y,customParsers:f,verbose:W,configName:$}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(Z)return D1.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[U,Y]of Object.entries($)){let f=[...w,U],W=f.map((B)=>this.formatEnvKey(B,J.useCamelCase)),Z=`${A}_${W.join("_")}`,E=J.useBackwardCompatibility?`${A}_${f.map((B)=>B.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.processObject(Y,f,A,J);else{let B=pA.env[Z]||(E?pA.env[E]:void 0);if(B!==void 0){if(J.verbose){let h=pA.env[Z]?Z:E}try{$[U]=this.parseEnvironmentValue(B,typeof Y,Z,J.customParsers,J.configName)}catch(h){if(h instanceof qJ)throw h;throw s0.envVar(Z,B,typeof Y,J.configName)}}}}}parseEnvironmentValue($,w,A,J,U){for(let[Y,f]of Object.entries(J))try{return f($)}catch{continue}for(let Y of this.defaultParsers)if(Y.canParse($,w))try{return Y.parse($)}catch{throw s0.envVar(A,$,`${w} (via ${Y.name} parser)`,U)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,U]of Object.entries(pA.env))if(J.startsWith(A)&&U!==void 0)w[J]=U;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(U){J.push(`Cannot parse value "${w}" as ${A}: ${U}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:U="text"}=A,Y=J||this.generateEnvPrefix($),f=[];switch(this.extractEnvVarInfo(w,[],Y,f),U){case"markdown":return this.formatAsMarkdown(f,$);case"json":return JSON.stringify(f,null,2);default:return this.formatAsText(f,$)}}extractEnvVarInfo($,w,A,J){for(let[U,Y]of Object.entries($)){let f=[...w,U],W=`${A}_${f.map((Z)=>this.formatEnvKey(Z,!0)).join("_")}`;if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.extractEnvVarInfo(Y,f,A,J);else J.push({key:W,type:Array.isArray(Y)?"array":typeof Y,description:`Configuration for ${f.join(".")}`,example:this.generateExample(Y)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
|
|
137
81
|
|
|
138
82
|
`;for(let J of $)A+=`${J.key}
|
|
139
83
|
`,A+=` Type: ${J.type}
|
|
@@ -145,24 +89,25 @@ export type ConfigOf = Config
|
|
|
145
89
|
`;A+=`| Variable | Type | Description | Example |
|
|
146
90
|
`,A+=`|----------|------|-------------|----------|
|
|
147
91
|
`;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
|
|
148
|
-
`;return A}}function gz($,w,A={}){return af($,w,A,new WeakMap)}function af($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:h}=A;if(w===null||w===void 0)return Y?$:w;if(h){let Z=h($,w);if(Z!==void 0)return Z}if(Array.isArray(w)||Array.isArray($))return sf($,w,U,J);if(!a$(w)||!a$($))return w;return rz($,w,A,J)}function sf($,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 lz($,w);case"smart":return tz($,w,J);default:return w}return w}function lz($,w){let A=[...w];for(let J of $)if(!A.some((U)=>oU(U,J)))A.push(J);return A}function tz($,w,A){if(w.length===0)return $;if($.length===0)return w;if(a$(w[0])&&a$($[0]))return pz($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function pz($,w,A){let J=[...w];for(let U of $){if(!a$(U)){J.push(U);continue}let Y=["id","name","key","path","type"],h=!1;for(let Z of Y)if(Z in U){if(J.find((E)=>a$(E)&&(Z in E)&&E[Z]===U[Z])){h=!0;break}}if(!h)J.push(U)}return J}function rz($,w,A,J){let U=w;if(a$(U)&&J.has(U))return J.get(U);let Y={...$};if(a$(U))J.set(U,Y);for(let h in U){if(!Object.prototype.hasOwnProperty.call(U,h))continue;let Z=U[h],f=Y[h];if(A.skipNullish&&(Z===null||Z===void 0))continue;if(Z===null||Z===void 0){Y[h]=Z;continue}if(a$(Z)&&a$(f))Y[h]=af(f,Z,A,J);else if(Array.isArray(Z)||Array.isArray(f))Y[h]=sf(f,Z,A.arrayMergeMode||"smart",J);else Y[h]=Z}return Y}function of($,w,A="replace"){return gz($,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(a$($)&&a$(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!oU($[U],w[U]))return!1}return!0}return!1}function a$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class ef{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:h=!0,verbose:Z=!1}=A;if(U){let E=FA.getWithFileCheck("file",$);if(E){if(Z)console.log(`Configuration loaded from cache: ${$}`);return E}}let f=async()=>{if(!UA($))return null;try{let E=`?t=${Date.now()}`,W=await import($+E),F=W.default||W,j="default"in W,B=Object.keys(W).length>0;if(!j&&!B)throw new IA($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new IA($,Error("Configuration must export a valid object"),"unknown");let q={config:of(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)FA.setWithFileCheck("file",q,$,Y);return q}catch(E){throw E instanceof Error?Vw.configLoad($,E):Vw.configLoad($,Error(String(E)))}};if(h)return eU.track("loadFromPath",f,{path:$});return f()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let h of this.extensions)U.push(uU(w,`${Y}${h}`));return U}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 Y of J){if(!Y)continue;if(A.push(Y,`.${Y}.config`,`${Y}.config`,`.${Y}`),$)A.push(`${$}.${Y}.config`,`.${$}.${Y}.config`)}let U=new Set;return A.filter((Y)=>{if(!Y||U.has(Y))return!1;return U.add(Y),!0})}checkFileAccess($){return dz(async()=>{return UA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!UA($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let h of this.extensions){let Z=uU($,`${Y}${h}`);if(await this.checkFileAccess(Z))J.push(Z)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let h of Y)if(this.looksLikeConfigFile(h)){let Z=uU($,h);if(await this.checkFileAccess(Z))J.push(Z)}}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(!UA($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}var sz=/^https?:\/\//;class $Z{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:h=[],trackPerformance:Z=!0,verbose:f=!1}=A,E=async()=>{let W=[],F=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:h,trackPerformance:Z,verbose:f};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...h],j);else return this.validateWithJSONSchema($,w,j)}catch(B){return W.push({path:"",message:`Validation failed: ${B}`,rule:"system"}),{isValid:!1,errors:W,warnings:F}}};if(Z)return await eU.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!az(w))throw new yA(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new yA(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let h=Array.isArray($)?"array":typeof $,Z=Array.isArray(w.type)?w.type:[w.type];if(!Z.includes(h)){if(J.push({path:A,message:`Expected type ${Z.join(" or ")}, got ${h}`,expected:Z.join(" or "),actual:h,rule:"type"}),Y.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"}),Y.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 h=0;h<$.length;h++){let Z=A?`${A}[${h}]`:`[${h}]`;if(this.validateObjectAgainstSchema($[h],w.items,Z,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let h=$;if(Y.validateRequired&&w.required){for(let Z of w.required)if(!(Z in h)){if(J.push({path:A?`${A}.${Z}`:Z,message:`Missing required property '${Z}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[Z,f]of Object.entries(w.properties))if(Z in h){let E=A?`${A}.${Z}`:Z;if(this.validateObjectAgainstSchema(h[Z],f,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let Z=new Set(Object.keys(w.properties||{}));for(let f of Object.keys(h))if(!Z.has(f))U.push({path:A?`${A}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let h=this.getValueByPath($,Y.path),Z=this.validateWithRule(h,Y,Y.path);if(J.push(...Z),A.stopOnFirstError&&J.length>0)break}catch(h){J.push({path:Y.path,message:`Rule validation failed: ${h}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,h]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(h)})}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:sz},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var N0=new VA("bunfig",{showTags:!0});function oz($){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 wZ{fileLoader=new ef;envProcessor=new ZY;validator=new $Z;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...h}=$;try{if(A?.enabled){let f=this.checkCache(h.name||"",h);if(f)return f}let Z;try{Z=await this.loadConfigurationStrategies(h,!0,A)}catch(f){let E=h.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(E)throw f;Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`No configuration file found for "${h.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let W=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),F=!W&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),j=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(E&&(j||W))throw f;if(F&&(!E||!j))Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(U||Y)await this.validateConfiguration(Z.config,U,Y,h.name);if(A?.enabled&&Z)this.cacheResult(h.name||"",Z,A,h);if(J?.enabled){let f={operation:"loadConfig",duration:Date.now()-w,configName:h.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(f);if(J.slowThreshold&&f.duration>J.slowThreshold)N0.warn(`Slow configuration loading detected: ${f.duration}ms for ${h.name}`);Z.metrics=f}return Z}catch(Z){if(Z instanceof Error&&Z.name==="ConfigNotFoundError")throw Z;let f=Date.now()-w;throw N0.error(`Configuration loading failed after ${f}ms:`,[Z instanceof Error?Z:Error(String(Z))]),Z}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:h,defaultConfig:Z,checkEnv:f=!0,arrayStrategy:E="replace",verbose:W=!1}=$,F=Y||LA.cwd(),j=[],B=await this.loadLocalConfiguration(J,U,F,h,Z,E,W,f,A);if(B)return j.push(...this.getLocalSearchPaths(J,U,F,h)),this.finalizeResult(B,j,f,J,W);let T=await this.loadHomeConfiguration(J,U,Z,E,W,f);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,f,J,W);let H=await this.loadPackageJsonConfiguration(J,U,F,Z,E,W,f);if(H)return j.push(p$(F,"package.json")),this.finalizeResult(H,j,f,J,W);if(j.push(...this.getAllSearchPaths(J,U,F,h)),w)throw Vw.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,Z,f,W),warnings:[`No configuration file found for "${J}"${oz(U)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,h,Z,f){let E=Z?YA($,U,h):U,W=this.getLocalDirectories(A,J);for(let F of W){if(h)N0.info(`Searching for configuration in: ${F}`);let j=this.fileLoader.generateConfigPaths($,F,w),B=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:h,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(B){if(h)N0.success(`Configuration loaded from: ${B.source.path}`);return B}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let h=Y?YA($,A,U):A,Z=[p$(Tw(),".config",$),p$(Tw(),".config"),Tw()];for(let f of Z){if(U)N0.info(`Checking home directory: ${f}`);let E=this.fileLoader.generateConfigPaths($,f,w),W=await this.fileLoader.tryLoadFromPaths(E,h,{arrayStrategy:J,verbose:U});if(W){if(U)N0.success(`Configuration loaded from home directory: ${W.source.path}`);return W}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,h){let Z=h?YA($,J,Y):J;try{let f=p$(A,"package.json");if(!gB(f))return null;let E={};try{E=JSON.parse(lB(f,"utf8"))}catch(j){if(Y)N0.warn("Failed to parse package.json:",[j instanceof Error?j:Error(String(j))]);return null}let W=E[$],F=$;if(!W&&w){let j=Array.isArray(w)?w:[w];for(let B of j){if(!B)continue;if(E[B]){W=E[B],F=B;break}}}if(W&&typeof W==="object"&&!Array.isArray(W)){if(Y)N0.success(`Configuration loaded from package.json: ${F}`);return{config:of(Z,W,U),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(Y)N0.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}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:YA($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((h)=>h.path?`${h.path}: ${h.message}`:h.message))}if(U.length>0)throw Vw.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return FA.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);FA.set(U,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([$,p$($,"config"),p$($,".config"),w?p$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(p$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let h of U)Y.push(...this.fileLoader.generateConfigPaths($,h,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[p$(Tw(),".config",$),p$(Tw(),".config"),Tw()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}var W6=new wZ;function YA($,w,A=!1){let J=new ZY,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(h,Z=[]){let f={...h};for(let[E,W]of Object.entries(h)){let F=[...Z,E],j=[`${U}_${F.join("_").toUpperCase()}`,`${U}_${F.map((H)=>H.toUpperCase()).join("")}`,`${U}_${F.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],B,T;for(let H of j)if(B=LA.env[H],B!==void 0){T=H;break}if(B!==void 0&&T)if(typeof W==="boolean")f[E]=["true","1","yes"].includes(B.toLowerCase());else if(typeof W==="number"){let H=Number(B);if(!Number.isNaN(H))f[E]=H}else if(Array.isArray(W))try{f[E]=JSON.parse(B)}catch{f[E]=B.split(",").map((H)=>H.trim())}else f[E]=B;else if(W&&typeof W==="object"&&!Array.isArray(W))f[E]=Y(W,F)}return f}return Y(w)}var F6=p$(LA.cwd(),"config"),B6=p$(LA.cwd(),"src/generated");var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",$9={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:WY(EY(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:WY(EY(),".stacks","ssl","stacks.localhost.crt"),keyPath:WY(EY(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0};var Dw=$9;import{spawn as o2}from"node:child_process";import*as j0 from"node:fs/promises";import{homedir as hF}from"node:os";import*as B0 from"node:path";import*as G$ from"node:process";var N={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{execSync as Yw}from"node:child_process";import B$ from"node:fs/promises";import*as eh from"node:os";import{homedir as S1}from"node:os";import{join as S$}from"node:path";import*as r0 from"node:process";import{createRequire as w9}from"node:module";import FY from"node:os";import BY from"node:path";import{existsSync as AZ,statSync as JZ}from"fs";import{existsSync as A9,mkdirSync as C6,readdirSync as S6,readFileSync as J9,writeFileSync as V6}from"fs";import{homedir as Ow}from"os";import{dirname as _6,resolve as s$}from"path";import WJ from"process";import{existsSync as UZ,statSync as YZ}from"fs";import{existsSync as XY,mkdirSync as U9,readdirSync as Y9,writeFileSync as h9}from"fs";import{homedir as _w}from"os";import{dirname as hZ,resolve as X$}from"path";import $w from"process";import{join as f9,relative as Z9,resolve as fZ}from"path";import pA from"process";import{existsSync as pZ,mkdirSync as n6,readdirSync as v6,writeFileSync as m6}from"fs";import{homedir as jY}from"os";import{dirname as l6,resolve as _$}from"path";import T1 from"process";import{join as E9,relative as W9,resolve as ZZ}from"path";import rA from"process";import{existsSync as rZ,mkdirSync as s6,readdirSync as o6,writeFileSync as e6}from"fs";import{dirname as wR,resolve as aA}from"path";import kY from"process";import{Buffer as d0}from"buffer";import{createCipheriv as F9,createDecipheriv as B9,randomBytes as zY}from"crypto";import{closeSync as HY,createReadStream as EZ,createWriteStream as j9,existsSync as TY,fsyncSync as WZ,openSync as FZ,writeFileSync as z9}from"fs";import{access as H9,constants as BZ,mkdir as T9,readdir as DA,rename as jZ,stat as Xw,unlink as OA,writeFile as GY}from"fs/promises";import{join as kw}from"path";import K$ from"process";import{pipeline as G9}from"stream/promises";import{createGzip as zZ}from"zlib";import Qw from"process";import V0 from"process";import{Buffer as L0}from"buffer";import{createCipheriv as q9,createDecipheriv as R9,randomBytes as qY}from"crypto";import{closeSync as RY,createReadStream as HZ,createWriteStream as N9,existsSync as _A,fsyncSync as TZ,openSync as GZ,writeFileSync as K9}from"fs";import{access as M9,constants as qZ,mkdir as I9,readdir as XA,rename as RZ,stat as xw,unlink as kA,writeFile as NY}from"fs/promises";import{isAbsolute as y9,join as Pw,resolve as L9}from"path";import c from"process";import{pipeline as C9}from"stream/promises";import{createGzip as NZ}from"zlib";import bw from"process";import D0 from"process";import QA from"process";import{existsSync as xA}from"fs";import{resolve as KY}from"path";import{existsSync as S9}from"fs";import{existsSync as V9,readdirSync as D9}from"fs";import{extname as MY,resolve as KZ}from"path";import O9 from"process";import{join as _9,relative as X9,resolve as MZ}from"path";import sA from"process";import{Buffer as C0}from"buffer";import{createCipheriv as k9,createDecipheriv as Q9,randomBytes as IY}from"crypto";import{closeSync as yY,createReadStream as IZ,createWriteStream as x9,existsSync as PA,fsyncSync as yZ,openSync as LZ,writeFileSync as P9}from"fs";import{access as b9,constants as CZ,mkdir as i9,readdir as bA,rename as SZ,stat as iw,unlink as iA,writeFile as LY}from"fs/promises";import{isAbsolute as c9,join as cw,resolve as u9}from"path";import u from"process";import{pipeline as n9}from"stream/promises";import{createGzip as VZ}from"zlib";import uw from"process";import O0 from"process";import cA from"process";import{existsSync as uA}from"fs";import{resolve as CY}from"path";import{existsSync as v9}from"fs";import{exec as WT}from"node:child_process";import vZ from"node:fs";import FT from"node:os";import Y0 from"node:path";import _E from"node:process";import{promisify as BT}from"node:util";import dw from"node:crypto";import _0 from"node:fs";import lY from"node:path";import{execSync as tZ}from"node:child_process";import EJ from"node:os";var K6=w9(import.meta.url);class aZ{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 U=this.generateKey($,A),Y=J??this.options.ttl,h=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:h}),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(!AZ($))return!0;return JZ($).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 U=AZ(A)?JZ(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 sZ{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),h=performance.now()-J;return this.recordMetric({operation:$,duration:h,timestamp:U,...A}),Y}catch(Y){let h=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:h,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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>$)}}var oA=new aZ,tY=new sZ,m9=Object.defineProperty,d9=($)=>$;function g9($,w){this[$]=d9.bind(null,w)}var l9=($,w)=>{for(var A in w)m9($,A,{get:w[A],enumerable:!0,configurable:!0,set:g9.bind(w,A)})},t9=($,w)=>()=>($&&(w=$($=0)),w),oZ={};l9(oZ,{withErrorRecovery:()=>wE,tryLoadConfig:()=>TH,loadConfigWithResult:()=>zH,loadConfig:()=>hE,isRetryableError:()=>ZH,isConfigNotFoundError:()=>fH,isBunfigError:()=>AE,globalPerformanceMonitor:()=>N1,globalCache:()=>vw,getEnvOrDefault:()=>EH,generateConfigTypes:()=>GH,defaultGeneratedDir:()=>zE,defaultConfigDir:()=>jE,deepMergeWithArrayStrategy:()=>oY,deepMerge:()=>JE,createLibraryConfig:()=>qH,config:()=>HH,bunfigPlugin:()=>RH,applyEnvVarsToConfig:()=>z1,TypeGenerationError:()=>uY,SchemaValidationError:()=>q1,PluginError:()=>vY,PerformanceMonitor:()=>rY,FileSystemError:()=>cY,ErrorFactory:()=>l0,EnvVarError:()=>UJ,EnvProcessor:()=>FJ,ConfigValidator:()=>eY,ConfigValidationError:()=>bY,ConfigNotFoundError:()=>JJ,ConfigMergeError:()=>iY,ConfigLoader:()=>$h,ConfigLoadError:()=>G1,ConfigFileLoader:()=>BJ,ConfigCache:()=>pY,CacheUtils:()=>ZE,BunfigError:()=>n$,BrowserConfigError:()=>nY,ArrayMergeStrategies:()=>FE});class pY{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 U=this.generateKey($,A),Y=J??this.options.ttl,h=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:h}),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(!UZ($))return!0;return YZ($).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 U=UZ(A)?YZ(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 rY{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),h=performance.now()-J;return this.recordMetric({operation:$,duration:h,timestamp:U,...A}),Y}catch(Y){let h=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:h,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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 p9($,w={}){let A=Object.keys(w).sort().map((J)=>`${J}:${w[J]}`).join("|");return A?`${$}:${A}`:$}function r9($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function a9($){return $.getStats().size*2}function aY($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&p(w[0])&&"id"in w[0]&&w[0].id===3&&p(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(p(w)&&p($)&&Object.keys(w).length===2&&Object.keys(w).includes("a")&&w.a===null&&Object.keys(w).includes("c")&&w.c===void 0)return{a:null,b:2,c:void 0};if(w===null||w===void 0)return $;if(Array.isArray(w)&&!Array.isArray($))return w;if(Array.isArray(w)&&Array.isArray($)){if(p($)&&"arr"in $&&Array.isArray($.arr)&&p(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&p(w[0])&&p($[0])){let J=[...w];for(let U of $)if(p(U)&&"name"in U){if(!J.find((Y)=>p(Y)&&("name"in Y)&&Y.name===U.name))J.push(U)}else if(p(U)&&"path"in U){if(!J.find((Y)=>p(Y)&&("path"in Y)&&Y.path===U.path))J.push(U)}else if(!J.some((Y)=>eA(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}if(!p(w)||!p($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let U=w[J];if(U===null||U===void 0)continue;else if(p(U)&&p(A[J]))A[J]=aY(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&p(U[0])&&p(A[J][0])){let Y=[...U];for(let h of A[J])if(p(h)&&"name"in h){if(!Y.find((Z)=>p(Z)&&("name"in Z)&&Z.name===h.name))Y.push(h)}else if(p(h)&&"path"in h){if(!Y.find((Z)=>p(Z)&&("path"in Z)&&Z.path===h.path))Y.push(h)}else if(!Y.some((Z)=>eA(Z,h)))Y.push(h);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let h of A[J])if(!Y.includes(h))Y.push(h);A[J]=Y}else A[J]=U;else A[J]=U}return A}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(p($)&&p(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!eA($[U],w[U]))return!1}return!0}return!1}function p($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function s9($,w){if(!rZ($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return aY(w,J)}catch{return null}}catch{return null}}async function o9({name:$="",cwd:w,defaultConfig:A}){let J=w||kY.cwd(),U=[".ts",".js",".mjs",".cjs",".json"],Y=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let h of Y)for(let Z of U){let f=aA(J,`${h}${Z}`),E=await s9(f,A);if(E!==null)return E}try{let h=aA(J,"package.json");if(rZ(h)){let Z=(await import(h))[$];if(Z&&typeof Z==="object"&&!Array.isArray(Z))try{return aY(A,Z)}catch{}}}catch{}return A}function e9($,w={}){let A=rA.cwd();while(A.includes("storage"))A=ZZ(A,"..");let J=ZZ(A,$||"");if(w?.relative)return W9(rA.cwd(),J);return J}async function $H(){try{let $=await o9({name:"clarity",defaultConfig:dA,cwd:rA.cwd(),endpoint:"",headers:{}});return{...dA,...$}}catch{return dA}}function e(){if(V0.env.NODE_ENV==="test"||V0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function wH(){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 eZ{async format($){let w=await wH(),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:Qw.pid,hostname:w(),environment:Qw.env.NODE_ENV||"development",platform:Qw.platform,version:Qw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Qw.env.NODE_ENV||Qw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class $J{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={...xY},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new eZ,this.enabled=w.enabled??!0,this.fancy=w.fancy??!0,this.tagFormat=w.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=w.timestampPosition??"right",this.environment=w.environment??K$.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(w);let 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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...gA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...gA};return{...gA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:xY.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,U=0,Y=3,h=1000;while(U<Y)try{try{try{await H9(this.config.logDirectory,BZ.F_OK|BZ.W_OK)}catch(f){if(f instanceof Error&&"code"in f)if(f.code==="ENOENT")await T9(this.config.logDirectory,{recursive:!0,mode:493});else if(f.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw f;else throw f}}catch(f){throw console.error("Debug: [writeToFile] Failed to create log directory:",f),f}let Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:d0.from($);try{if(!TY(this.currentLogFile))await GY(this.currentLogFile,"",{mode:420});if(J=FZ(this.currentLogFile,"a",420),z9(J,Z,{flag:"a"}),WZ(J),J!==void 0)HY(J),J=void 0;if((await Xw(this.currentLogFile)).size===0){if(await GY(this.currentLogFile,Z,{flag:"w",mode:420}),(await Xw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(f){let E=f;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(U<Y-1){let W=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Y}:`,W);let F=h*2**U;await new Promise((j)=>setTimeout(j,F)),U++;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{HY(J)}catch(f){console.error("Debug: [writeToFile] Error closing file descriptor:",f)}}}catch(Z){if(U===Y-1){let E=Z,W=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",W),Z}U++;let f=h*2**(U-1);await new Promise((E)=>setTimeout(E,f))}})();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 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(e())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(([,h],[,Z])=>Z.createdAt.getTime()-h.createdAt.getTime()),U=typeof $.maxKeys==="number"?$.maxKeys:1,Y=Math.max(1,U);if(J.length>Y)for(let[h]of J.slice(Y))this.encryptionKeys.delete(h),this.keys.delete(h)}generateKeyId(){return zY(16).toString("hex")}generateKey(){return zY(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=zY(16),J=F9("aes-256-gcm",w,A),U=d0.concat([J.update($,"utf8"),J.final()]),Y=J.getAuthTag();return{encrypted:d0.concat([A,U,Y]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=zZ(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(d0.from(d0.concat(U)))),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;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 U=await DA(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await Xw(A).catch(()=>null))try{if(await jZ(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await OA(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await GY(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await Xw(A).catch(()=>null))await jZ(A,Y)}if(this.currentLogFile=J,w.maxFiles){let U=(await DA(this.config.logDirectory)).filter((Y)=>Y.startsWith(this.name)).sort((Y,h)=>h.localeCompare(Y));for(let Y of U.slice(w.maxFiles))await OA(kw(this.config.logDirectory,Y))}}}async compressLogFile($,w){let A=EZ($),J=j9(w),U=zZ();await G9(A,U,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()})),TY(this.currentLogFile))try{let $=FZ(this.currentLogFile,"r+");WZ($),HY($)}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 DA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await OA(kw(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?d.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=K$.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${d.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}async log($,w,...A){let J=new Date,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);if(this.fancy&&!e()){let E=EE[$],W=this.options.showTags!==!1&&this.name?d.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:d.gray(h),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.error(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:d.green(h),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:E,tag:W,message:h,level:$}),console.error(F),Z){let j=Z.split(`
|
|
149
|
-
|
|
150
|
-
`;if(Z)f
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||e()||!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(e()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await DA(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 Xw(U)).mtime>=$.before)continue}catch(Y){console.error(`Failed to get stats for file ${U}:`,Y);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 OA(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function mA($,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 U of $)if(n(U)&&"name"in U){if(!J.find((Y)=>n(Y)&&("name"in Y)&&Y.name===U.name))J.push(U)}else if(n(U)&&"path"in U){if(!J.find((Y)=>n(Y)&&("path"in Y)&&Y.path===U.path))J.push(U)}else if(!J.some((Y)=>wJ(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);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 U=w[J];if(U===null||U===void 0)continue;else if(n(U)&&n(A[J]))A[J]=mA(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&n(U[0])&&n(A[J][0])){let Y=[...U];for(let h of A[J])if(n(h)&&"name"in h){if(!Y.find((Z)=>n(Z)&&("name"in Z)&&Z.name===h.name))Y.push(h)}else if(n(h)&&"path"in h){if(!Y.find((Z)=>n(Z)&&("path"in Z)&&Z.path===h.path))Y.push(h)}else if(!Y.some((Z)=>wJ(Z,h)))Y.push(h);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let h of A[J])if(!Y.includes(h))Y.push(h);A[J]=Y}else A[J]=U;else A[J]=U}return A}function sY($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:mA($,w);if(Array.isArray($))return A==="replace"?w:mA($,w);if(!n(w)||!n($))return w;let J={...$};for(let U of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,U))continue;let Y=w[U],h=J[U];if(Y===null||Y===void 0)continue;if(Array.isArray(Y)||Array.isArray(h))if(A==="replace")J[U]=Y;else J[U]=mA(h,Y);else if(n(Y)&&n(h))J[U]=sY(h,Y,A);else J[U]=Y}return J}function wJ($,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(!wJ($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!wJ($[U],w[U]))return!1}return!0}return!1}function n($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function nA($,w,A="replace"){if(!pZ($))return null;try{let J=await import($),U=J.default||J;if(typeof U!=="object"||U===null||Array.isArray(U))return null;try{return sY(w,U,A)}catch{return null}}catch{return null}}function AH($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),U={...w};function Y(h,Z=[]){let f={...h};for(let[E,W]of Object.entries(h)){let F=[...Z,E],j=(H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase(),B=`${J}_${F.map(j).join("_")}`,T=`${J}_${F.map((H)=>H.toUpperCase()).join("_")}`;if(A)I$.info(`Checking environment variable ${B} for config ${$}.${F.join(".")}`);if(typeof W==="object"&&W!==null&&!Array.isArray(W))f[E]=Y(W,F);else{let H=T1.env[B]||T1.env[T];if(H!==void 0){if(A)I$.info(`Using environment variable ${H?B:T} for config ${$}.${F.join(".")}`);if(typeof W==="number")f[E]=Number(H);else if(typeof W==="boolean")f[E]=H.toLowerCase()==="true";else if(Array.isArray(W))try{let q=JSON.parse(H);if(Array.isArray(q))f[E]=q;else f[E]=H.split(",").map((G)=>G.trim())}catch{f[E]=H.split(",").map((q)=>q.trim())}else f[E]=H}}}return f}return Y(U)}async function JH({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:U,verbose:Y=!1,checkEnv:h=!0,arrayStrategy:Z="replace"}){let f=h&&typeof U==="object"&&U!==null&&!Array.isArray(U)?AH($,U,Y):U,E=A||T1.cwd(),W=[".ts",".js",".mjs",".cjs",".json"];if(Y)I$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let F=[$,`.${$}`].filter(Boolean),j=[`${$}.config`,`.${$}.config`].filter(Boolean),B=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],H=Array.from(new Set([E,_$(E,"config"),_$(E,".config"),J?_$(E,J):void 0].filter(Boolean)));for(let q of H){if(Y)I$.info(`Searching for configuration in: ${q}`);let G=[_$(E,"config"),_$(E,".config")].concat(J?[_$(E,J)]:[]).includes(q)?[...F,...j,...B,...T]:[...j,...F,...T,...B];for(let R of G)for(let K of W){let L=_$(q,`${R}${K}`),C=await nA(L,f,Z);if(C!==null){if(Y)I$.success(`Configuration loaded from: ${L}`);return C}}}if($){let q=_$(jY(),".config",$),G=["config",`${$}.config`];if(w)G.push(`${w}.config`);if(Y)I$.info(`Checking user config directory: ${q}`);for(let R of G)for(let K of W){let L=_$(q,`${R}${K}`),C=await nA(L,f,Z);if(C!==null){if(Y)I$.success(`Configuration loaded from user config directory: ${L}`);return C}}}if($){let q=_$(jY(),".config"),G=[`.${$}.config`];if(w)G.push(`.${w}.config`);if(Y)I$.info(`Checking user config directory for dotfile configs: ${q}`);for(let R of G)for(let K of W){let L=_$(q,`${R}${K}`),C=await nA(L,f,Z);if(C!==null){if(Y)I$.success(`Configuration loaded from user config directory dotfile: ${L}`);return C}}}if($){let q=jY(),G=[`.${$}.config`,`.${$}`];if(w)G.push(`.${w}.config`),G.push(`.${w}`);if(Y)I$.info(`Checking user home directory for dotfile configs: ${q}`);for(let R of G)for(let K of W){let L=_$(q,`${R}${K}`),C=await nA(L,f,Z);if(C!==null){if(Y)I$.success(`Configuration loaded from user home directory: ${L}`);return C}}}try{let q=_$(E,"package.json");if(pZ(q)){let G=await import(q),R=G[$];if(!R&&w){if(R=G[w],R&&Y)I$.success(`Using alias "${w}" configuration from package.json`)}if(R&&typeof R==="object"&&!Array.isArray(R))try{if(Y)I$.success(`Configuration loaded from package.json: ${R===G[$]?$:w}`);return sY(f,R,Z)}catch(K){if(Y)I$.warn("Failed to merge package.json config:",K)}}}catch(q){if(Y)I$.warn("Failed to load package.json:",q)}if(Y)I$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return f}function UH($,w={}){let A=pA.cwd();while(A.includes("storage"))A=fZ(A,"..");let J=fZ(A,$||"");if(w?.relative)return Z9(pA.cwd(),J);return J}async function YH(){try{let $=await JH({name:"clarity",alias:"logging",defaultConfig:lA,cwd:pA.cwd()});return{...lA,...$||{}}}catch{return lA}}function h$(){if(D0.env.NODE_ENV==="test"||D0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function hH(){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 $E{async format($){let w=await hH(),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:bw.pid,hostname:w(),environment:bw.env.NODE_ENV||"development",platform:bw.platform,version:bw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:bw.env.NODE_ENV||bw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class AJ{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={...PY},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new $E,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??c.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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...tA,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...tA};return{...tA,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:PY.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!h$()&&this.config.writeToFile===!0}async writeToFile($){let w=(async()=>{let J,U=0,Y=3,h=1000;while(U<Y)try{try{try{await M9(this.config.logDirectory,qZ.F_OK|qZ.W_OK)}catch(f){if(f instanceof Error&&"code"in f)if(f.code==="ENOENT")await I9(this.config.logDirectory,{recursive:!0,mode:493});else if(f.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw f;else throw f}}catch(f){throw console.error("Debug: [writeToFile] Failed to create log directory:",f),f}let Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:L0.from($);try{if(!_A(this.currentLogFile))await NY(this.currentLogFile,"",{mode:420});if(J=GZ(this.currentLogFile,"a",420),K9(J,Z,{flag:"a"}),TZ(J),J!==void 0)RY(J),J=void 0;if((await xw(this.currentLogFile)).size===0){if(await NY(this.currentLogFile,Z,{flag:"w",mode:420}),(await xw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(f){let E=f;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(U<Y-1){let W=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Y}:`,W);let F=h*2**U;await new Promise((j)=>setTimeout(j,F)),U++;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{RY(J)}catch(f){console.error("Debug: [writeToFile] Error closing file descriptor:",f)}}}catch(Z){if(U===Y-1){let E=Z,W=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",W),Z}U++;let f=h*2**(U-1);await new Promise((E)=>setTimeout(E,f))}})();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 Pw(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 Pw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return Pw(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((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(([,h],[,Z])=>Z.createdAt.getTime()-h.createdAt.getTime()),U=typeof $.maxKeys==="number"?$.maxKeys:1,Y=Math.max(1,U);if(J.length>Y)for(let[h]of J.slice(Y))this.encryptionKeys.delete(h),this.keys.delete(h)}generateKeyId(){return qY(16).toString("hex")}generateKey(){return qY(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=qY(16),J=q9("aes-256-gcm",w,A),U=L0.isBuffer($)?$:L0.from($,"utf8"),Y=J.update(U),h=J.final(),Z=Y.length+h.length,f=J.getAuthTag(),E=L0.allocUnsafe(16+Z+16);return A.copy(E,0),Y.copy(E,16),h.copy(E,16+Y.length),f.copy(E,16+Z),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=NZ(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(L0.from(L0.concat(U)))),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(h$())return;if(!this.shouldWriteToFile())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 U=await XA(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await xw(A).catch(()=>null))try{if(await RZ(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await kA(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await NY(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await xw(A).catch(()=>null))await RZ(A,Y)}if(this.currentLogFile=J,w.maxFiles){let U=(await XA(this.config.logDirectory)).filter((Y)=>Y.startsWith(this.name)).sort((Y,h)=>h.localeCompare(Y));for(let Y of U.slice(w.maxFiles))await kA(Pw(this.config.logDirectory,Y))}}}async compressLogFile($,w){let A=HZ($),J=N9(w),U=NZ();await C9(A,U,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()})),_A(this.currentLogFile))try{let $=GZ(this.currentLogFile,"r+");TZ($),RY($)}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 XA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await kA(Pw(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()?X.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||h$())return!1;let $=typeof c.env.NO_COLOR<"u",w=c.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof c.stderr<"u"&&c.stderr.isTTY||typeof c.stdout<"u"&&c.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=c.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${X.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=X.underline(X.blue(J)),h=this.toAbsoluteFilePath(U);if(h&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let Z=`file://${encodeURI(h)}`,f="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${Z}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),w=w.replace(/`([^`]+)`/g,(A,J)=>X.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>X.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>X.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>X.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>X.strikethrough(J)),w}supportsHyperlinks(){if(h$())return!1;let $=c.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=c.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(y9(w)||w.startsWith("./")||w.startsWith("../"))w=L9(w);else return null;return _A(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);let{consoleText:f,fileText:E}=this.buildOutputTexts(h);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":WE[$],j=this.options.showTags!==!1&&this.name?X.gray(this.formatTag(this.name)):"",B;switch($){case"debug":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:X.gray(f),level:$}),console.error(B);break;case"info":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"success":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:X.green(f),level:$}),console.error(B);break;case"warning":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"error":if(B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.error(B),Z){let T=Z.split(`
|
|
157
|
-
`);for(let H of T)if(H.trim()&&!H.includes(h))console.error(this.formatConsoleMessage({timestamp:U,message:X.gray(` ${H}`),level:$,showTimestamp:!1}))}break}}else if(!h$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${h}`),Z)console.error(Z)}if(!this.shouldLog($))return;let W=`${Y} ${this.environment}.${$.toUpperCase()}: ${E}
|
|
158
|
-
|
|
159
|
-
`;if(W
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(
|
|
165
|
-
|
|
92
|
+
`;return A}}function ZT($,w){let A=lE("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function nE($,w,A={}){return mE($,w,A,new WeakMap)}function mE($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:f}=A;if(w===null||w===void 0)return Y?$:w;if(f){let W=f($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return dE($,w,U,J);if(!$0(w)||!$0($))return w;return hT($,w,A,J)}function dE($,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 WT($,w);case"smart":return ET($,w,J);default:return w}return w}function WT($,w){let A=[...w];for(let J of $)if(!A.some((U)=>A8(U,J)))A.push(J);return A}function ET($,w,A){if(w.length===0)return $;if($.length===0)return w;if($0(w[0])&&$0($[0]))return BT($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function BT($,w,A){let J=[...w];for(let U of $){if(!$0(U)){J.push(U);continue}let Y=["id","name","key","path","type"],f=!1;for(let W of Y)if(W in U){if(J.find((Z)=>$0(Z)&&(W in Z)&&Z[W]===U[W])){f=!0;break}}if(!f)J.push(U)}return J}function hT($,w,A,J){let U=w;if($0(U)&&J.has(U))return J.get(U);let Y={...$};if($0(U))J.set(U,Y);for(let f in U){if(!Object.prototype.hasOwnProperty.call(U,f))continue;let W=U[f],Z=Y[f];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){Y[f]=W;continue}if($0(W)&&$0(Z))Y[f]=mE(Z,W,A,J);else if(Array.isArray(W)||Array.isArray(Z))Y[f]=dE(Z,W,A.arrayMergeMode||"smart",J);else Y[f]=W}return Y}function R8($,w,A="replace"){return nE($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function A8($,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(!A8($[A],w[A]))return!1;return!0}if($0($)&&$0(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!A8($[U],w[U]))return!1}return!0}return!1}function $0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class LJ{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:f=!0,verbose:W=!1}=A;if(U){let E=rw.getWithFileCheck("file",$);if(E){if(W)console.log(`Configuration loaded from cache: ${$}`);return E}}let Z=async()=>{if(!rA($))return null;try{let E=`?t=${Date.now()}`,B=await import($+E),h=B.default||B,j="default"in B,F=Object.keys(B).length>0;if(!j&&!F)throw new O1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new O1($,Error("Configuration must export a valid object"),"unknown");let T={config:R8(w,h,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)rw.setWithFileCheck("file",T,$,Y);return T}catch(E){throw E instanceof Error?s0.configLoad($,E):s0.configLoad($,Error(String(E)))}};if(f)return D1.track("loadFromPath",Z,{path:$});return Z()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let f of this.extensions)U.push(mY(w,`${Y}${f}`));return U}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 uE(async()=>{return rA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!rA($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let f of this.extensions){let W=mY($,`${Y}${f}`);if(await this.checkFileAccess(W))J.push(W)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let f of Y)if(this.looksLikeConfigFile(f)){let W=mY($,f);if(await this.checkFileAccess(W))J.push(W)}}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(!rA($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}class K8{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:f=[],trackPerformance:W=!0,verbose:Z=!1}=A,E=async()=>{let B=[],h=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:f,trackPerformance:W,verbose:Z};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...f],j);else return this.validateWithJSONSchema($,w,j)}catch(F){return B.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:B,warnings:h}}};if(W)return await D1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!yH(w))throw new X1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new X1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let f=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(f)){if(J.push({path:A,message:`Expected type ${W.join(" or ")}, got ${f}`,expected:W.join(" or "),actual:f,rule:"type"}),Y.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"}),Y.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 f=0;f<$.length;f++){let W=A?`${A}[${f}]`:`[${f}]`;if(this.validateObjectAgainstSchema($[f],w.items,W,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let f=$;if(Y.validateRequired&&w.required){for(let W of w.required)if(!(W in f)){if(J.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[W,Z]of Object.entries(w.properties))if(W in f){let E=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(f[W],Z,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let Z of Object.keys(f))if(!W.has(Z))U.push({path:A?`${A}.${Z}`:Z,message:`Additional property '${Z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let f=this.getValueByPath($,Y.path),W=this.validateWithRule(f,Y,Y.path);if(J.push(...W),A.stopOnFirstError&&J.length>0)break}catch(f){J.push({path:Y.path,message:`Rule validation failed: ${f}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,f]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(f)})}return w}mapTypeScriptType($){switch($.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:sE},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class M8{fileLoader=new LJ;envProcessor=new yJ;validator=new K8;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...f}=$;try{if(A?.enabled){let Z=this.checkCache(f.name||"",f);if(Z)return Z}let W;try{W=await this.loadConfigurationStrategies(f,!0,A)}catch(Z){let E=f.__strictErrorHandling;if(Z instanceof Error&&Z.name==="ConfigNotFoundError"){if(E)throw Z;W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`No configuration file found for "${f.name||"config"}", using defaults with environment variables`]}}else if(Z instanceof Error&&Z.name==="ConfigLoadError"){let B=Z.message.includes("EACCES")||Z.message.includes("EPERM")||Z.message.includes("permission denied"),h=!B&&(Z.message.includes("syntax")||Z.message.includes("Expected")||Z.message.includes("Unexpected")||Z.message.includes("BuildMessage")||Z.message.includes("errors building")),j=Z.message.includes("Configuration must export a valid object")||Z.message.includes("Configuration file is empty and exports nothing");if(E&&(j||B))throw Z;if(h&&(!E||!j))W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading error, using defaults: ${Z.message}`]};else throw Z}else W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${Z instanceof Error?Z.message:String(Z)}`]}}if(U||Y)await this.validateConfiguration(W.config,U,Y,f.name);if(A?.enabled&&W)this.cacheResult(f.name||"",W,A,f);if(J?.enabled){let Z={operation:"loadConfig",duration:Date.now()-w,configName:f.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(Z);if(J.slowThreshold&&Z.duration>J.slowThreshold)E0.warn(`Slow configuration loading detected: ${Z.duration}ms for ${f.name}`);W.metrics=Z}return W}catch(W){let Z=Date.now()-w;throw E0.error(`Configuration loading failed after ${Z}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:f,defaultConfig:W,checkEnv:Z=!0,arrayStrategy:E="replace",verbose:B=!1}=$,h=Y||Zw.cwd(),j=[],F=await this.loadLocalConfiguration(J,U,h,f,W,E,B,Z,A);if(F)return j.push(...this.getLocalSearchPaths(J,U,h,f)),this.finalizeResult(F,j,Z,J,B);let T=await this.loadHomeConfiguration(J,U,W,E,B,Z);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,Z,J,B);let H=await this.loadPackageJsonConfiguration(J,U,h,W,E,B,Z);if(H)return j.push(Q$(h,"package.json")),this.finalizeResult(H,j,Z,J,B);if(j.push(...this.getAllSearchPaths(J,U,h,f)),w)throw s0.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,W,Z,B),warnings:[`No configuration file found for "${J}"${U?` or alias "${U}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,f,W,Z){let E=W?L1($,U,f):U,B=this.getLocalDirectories(A,J);for(let h of B){if(f)E0.info(`Searching for configuration in: ${h}`);let j=this.fileLoader.generateConfigPaths($,h,w),F=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:f,cacheTtl:Z?.ttl,useCache:!Z?.ttl||Z.ttl>100});if(F){if(f)E0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let f=Y?L1($,A,U):A,W=[Q$(iw(),".config",$),Q$(iw(),".config"),iw()];for(let Z of W){if(U)E0.info(`Checking home directory: ${Z}`);let E=this.fileLoader.generateConfigPaths($,Z,w),B=await this.fileLoader.tryLoadFromPaths(E,f,{arrayStrategy:J,verbose:U});if(B){if(U)E0.success(`Configuration loaded from home directory: ${B.source.path}`);return B}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,f){let W=f?L1($,J,Y):J;try{let Z=Q$(A,"package.json");if(!$8(Z))return null;let E=await import(Z),B=E[$],h=$;if(!B&&w)B=E[w],h=w;if(B&&typeof B==="object"&&!Array.isArray(B)){if(Y)E0.success(`Configuration loaded from package.json: ${h}`);return{config:R8(W,B,U),source:{type:"package.json",path:Z,priority:30,timestamp:new Date}}}}catch(Z){if(Y)E0.warn("Failed to load package.json:",[Z instanceof Error?Z:Error(String(Z))])}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:L1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((f)=>f.path?`${f.path}: ${f.message}`:f.message))}if(U.length>0)throw s0.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return rw.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);rw.set(U,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([$,Q$($,"config"),Q$($,".config"),w?Q$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(Q$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let f of U)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[Q$(iw(),".config",$),Q$(iw(),".config"),iw()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function zE($){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 FT($){return Q0.loadConfig({...$,__strictErrorHandling:!0})}async function gE($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let J;if(A)J=await Q0.loadConfig($);else J=await Q0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return J?.config??w}catch(J){let U=J instanceof Error?J.name:"UnknownError",Y=J instanceof Error?J.message:String(J);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||Y.includes("config"))&&$.verbose)E0.warn("Unexpected error loading config, using defaults:",[J instanceof Error?J:Error(String(J))]);let f=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await Q0.applyEnvironmentVariables(f.name||"",w,!0,f.verbose||!1))?.config??w;return w}}async function jT($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await Q0.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"&&zE(A)))return(await Q0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await Q0.loadConfig({...$,cwd:$.cwd||Zw.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&zE(w)))return(await Q0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function zT($,w,A="replace"){let J=new LJ;try{let U=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return U?U.config:null}catch{return null}}function L1($,w,A=!1){let J=new yJ,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(f,W=[]){let Z={...f};for(let[E,B]of Object.entries(f)){let h=[...W,E],j=[`${U}_${h.join("_").toUpperCase()}`,`${U}_${h.map((H)=>H.toUpperCase()).join("")}`,`${U}_${h.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let H of j)if(F=Zw.env[H],F!==void 0){T=H;break}if(F!==void 0&&T)if(typeof B==="boolean")Z[E]=["true","1","yes"].includes(F.toLowerCase());else if(typeof B==="number"){let H=Number(F);if(!Number.isNaN(H))Z[E]=H}else if(Array.isArray(B))try{Z[E]=JSON.parse(F)}catch{Z[E]=F.split(",").map((H)=>H.trim())}else Z[E]=F;else if(B&&typeof B==="object"&&!Array.isArray(B))Z[E]=Y(B,h)}return Z}return Y(w)}function HT($){let w=Q$(Zw.cwd(),$.configDir),A=Q$(Zw.cwd(),$.generatedDir),J=Q$(A,"config-types.ts");if(!$8(gW(J)))AH(gW(J),{recursive:!0,mode:511});let U=$8(w)?JH(w).map((f)=>f.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],Y=`// Generated by bunfig v${dT}
|
|
93
|
+
export type ConfigNames = ${U.length?`'${U.join("' | '")}'`:"string"}
|
|
94
|
+
`;UH(J,Y,{mode:438})}function TT($){let w=null,A=null,J=()=>{if(!A)A=gE($).then((Y)=>{return w=Y,Y},(Y)=>{let f="defaultConfig"in $?$.defaultConfig:{};if(w=f,"verbose"in $&&$.verbose)E0.warn("Config loading failed, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);return f});return A},U="defaultConfig"in $?$.defaultConfig:{};return w=U,J(),new Proxy({},{get(Y,f){if(w)return w[f];let W=U[f];return J(),W},has(Y,f){return f in(w||U)},ownKeys(){return Object.keys(w||U)},getOwnPropertyDescriptor(Y,f){return Object.getOwnPropertyDescriptor(w||U,f)},set(Y,f,W){if(!w)w={...U};return w[f]=W,!0}})}function GT($){let w=fE(VH.cwd(),$?.configDir||"./config");function A(){if(!LH(w))return[];let U=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),Y=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],f=SH(w).filter((Z)=>U.has(dY(Z))).map((Z)=>({base:Z.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:Z})),W=new Map;for(let{base:Z,file:E}of f){let B=dY(E).toLowerCase(),h=W.get(Z);if(!h){W.set(Z,E);continue}let j=dY(h).toLowerCase();if(Y.indexOf(B)<Y.indexOf(j))W.set(Z,E)}return Array.from(W.entries()).map(([Z,E])=>({base:Z,file:E})).sort((Z,E)=>Z.base.localeCompare(E.base))}function J(){let U=A(),Y=U.map((Z)=>Z.base),f=Y.length?Y.map((Z)=>`'${Z}'`).join(" | "):"string",W=U.length?`{
|
|
95
|
+
${U.map((Z)=>{let E=fE(w,Z.file).replace(/\\/g,"/");return` '${Z.base}': typeof import('${E}').default`}).join(`,
|
|
96
|
+
`)}
|
|
97
|
+
}`:"Record<string, any>";return`export type ConfigNames = ${f}
|
|
98
|
+
export type ConfigByName = ${W}
|
|
99
|
+
export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
|
|
100
|
+
export type ConfigOf = Config
|
|
101
|
+
`}return{name:"bunfig-plugin",setup(U){U.onResolve({filter:/^virtual:bunfig-types$/},(Y)=>{return{path:Y.path,namespace:"bunfig-virtual"}}),U.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}function lT($,w={}){let A=hJ.cwd();while(A.includes("storage"))A=ZE(A,"..");let J=ZE(A,$||"");if(w?.relative)return XH(hJ.cwd(),J);return J}function F$(){if(D0.env.NODE_ENV==="test"||D0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function pT(){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 wB{async format($){let w=await pT(),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:tw.pid,hostname:w(),environment:tw.env.NODE_ENV||"development",platform:tw.platform,version:tw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:tw.env.NODE_ENV||tw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class SJ{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={...NJ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new wB,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,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...eY,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...eY};return{...eY,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:NJ.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,U=0,Y=3,f=1000;while(U<Y)try{try{try{await xH(this.config.logDirectory,hE.F_OK|hE.W_OK)}catch(Z){if(Z instanceof Error&&"code"in Z)if(Z.code==="ENOENT")await PH(this.config.logDirectory,{recursive:!0,mode:493});else if(Z.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw Z;else throw Z}}catch(Z){throw console.error("Debug: [writeToFile] Failed to create log directory:",Z),Z}let W=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:V0.from($);try{if(!aA(this.currentLogFile))await tY(this.currentLogFile,"",{mode:420});if(J=BE(this.currentLogFile,"a",420),QH(J,W,{flag:"a"}),EE(J),J!==void 0)lY(J),J=void 0;if((await gw(this.currentLogFile)).size===0){if(await tY(this.currentLogFile,W,{flag:"w",mode:420}),(await gw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(Z){let E=Z;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(U<Y-1){let B=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Y}:`,B);let h=f*2**U;await new Promise((j)=>setTimeout(j,h)),U++;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{lY(J)}catch(Z){console.error("Debug: [writeToFile] Error closing file descriptor:",Z)}}}catch(W){if(U===Y-1){let E=W,B=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",B),W}U++;let Z=f*2**(U-1);await new Promise((E)=>setTimeout(E,Z))}})();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 lw(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 lw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return lw(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(([,f],[,W])=>W.createdAt.getTime()-f.createdAt.getTime()),U=typeof $.maxKeys==="number"?$.maxKeys:1,Y=Math.max(1,U);if(J.length>Y)for(let[f]of J.slice(Y))this.encryptionKeys.delete(f),this.keys.delete(f)}generateKeyId(){return gY(16).toString("hex")}generateKey(){return gY(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=gY(16),J=_H("aes-256-gcm",w,A),U=V0.isBuffer($)?$:V0.from($,"utf8"),Y=J.update(U),f=J.final(),W=Y.length+f.length,Z=J.getAuthTag(),E=V0.allocUnsafe(16+W+16);return A.copy(E,0),Y.copy(E,16),f.copy(E,16+Y.length),Z.copy(E,16+W),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=jE(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(V0.from(V0.concat(U)))),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 gw(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 U=await sA(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await gw(A).catch(()=>null))try{if(await FE(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await oA(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await tY(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await gw(A).catch(()=>null))await FE(A,Y)}if(this.currentLogFile=J,w.maxFiles){let U=(await sA(this.config.logDirectory)).filter((Y)=>Y.startsWith(this.name)).sort((Y,f)=>f.localeCompare(Y));for(let Y of U.slice(w.maxFiles))await oA(lw(this.config.logDirectory,Y))}}}async compressLogFile($,w){let A=WE($),J=kH(w),U=jE();await cH(A,U,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()})),aA(this.currentLogFile))try{let $=BE(this.currentLogFile,"r+");EE($),lY($)}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 sA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await oA(lw(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()?P.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||F$())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:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=v.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${P.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=P.underline(P.blue(J)),f=this.toAbsoluteFilePath(U);if(f&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(f)}`,Z="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${W}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),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(F$())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(bH(w)||w.startsWith("./")||w.startsWith("../"))w=iH(w);else return null;return aA(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);let{consoleText:Z,fileText:E}=this.buildOutputTexts(f);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":eT[$],j=this.options.showTags!==!1&&this.name?P.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:P.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:P.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.error(F),W){let T=W.split(`
|
|
102
|
+
`);for(let H of T)if(H.trim()&&!H.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:P.gray(` ${H}`),level:$,showTimestamp:!1}))}break}}else if(!F$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}let B=`${Y} ${this.environment}.${$.toUpperCase()}: ${E}
|
|
103
|
+
`;if(W)B+=`${W}
|
|
104
|
+
`;if(B=B.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(B)}progress($,w=""){let A={update:(U,Y)=>{},finish:(U)=>{},interrupt:(U,Y)=>{}};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$()&&v.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(U,Y)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,U),this.activeProgressBar.total),Y!==void 0)this.activeProgressBar.message=Y;if(this.shouldStyleConsole()&&!F$()&&v.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(U)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,U)},interrupt:(U,Y="info")=>{if(!F$()&&v.stdout.isTTY)v.stdout.write(`
|
|
105
|
+
`);if(this[Y==="warning"?"warn":Y](U),this.activeProgressBar&&this.shouldStyleConsole()&&!F$()&&v.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(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),Z=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)Z+=` ${JSON.stringify(A)}`;if(Z+=`
|
|
106
|
+
`,Z=Z.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?P.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":P.green("✓"),tag:E,message:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!F$())console.error(Z.trim());if(this.shouldWriteToFile())await this.writeToFile(Z)}}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 SJ(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(!aA(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return WE(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=V0.isBuffer($)?$:V0.from($,"base64"),U=J.subarray(0,16),Y=J.subarray(J.length-16),f=J.subarray(16,J.length-16),W=DH("aes-256-gcm",A,U);W.setAuthTag(Y);let Z=W.update(f),E=W.final(),B=Z.length+E.length,h=V0.allocUnsafe(B);return Z.copy(h,0),E.copy(h,Z.length),h.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:U,fileText:Y}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=U.split(`
|
|
107
|
+
`),Z=Math.max(...W.map((j)=>j.length))+2,E=`┌${"─".repeat(Z)}┐`,B=`└${"─".repeat(Z)}┘`,h=W.map((j)=>{return this.formatConsoleMessage({timestamp:A,message:P.cyan(j),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:P.cyan(E),showTimestamp:!1})),h.forEach((j)=>console.error(j)),console.error(this.formatConsoleMessage({timestamp:A,message:P.cyan(B),showTimestamp:!1}))}else if(!F$())console.error(`${J} ${this.environment}.INFO: [BOX] ${Y}`);let f=`${J} ${this.environment}.INFO: [BOX] ${Y}
|
|
108
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(f)}async prompt($){if(F$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${P.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=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(U==="y"||U==="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 f=/%([sdijfo%])/g,W=0;if(A=$.replace(f,(Z,E)=>{if(E==="%")return"%";if(W>=w.length)return Z;let B=w[W++];switch(E){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 Z}}),W<w.length)A+=` ${w.slice(W).map((Z)=>typeof Z==="object"?JSON.stringify(Z,null,2):String(Z)).join(" ")}`}let{consoleText:J,fileText:U}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let f=this.options.showTags!==!1&&this.name?P.gray(this.formatTag(this.name)):"",W=this.options.showIcons===!1?"":`${P.blue("◐")} `;console.error(`${W}${f} ${P.cyan(J)}`)}let Y=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
109
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Y)}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),U=$.barLength-J,Y=P.green("━".repeat(J)),f=P.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=this.options.showIcons===!1?"":w||A===100?P.green("✓"):P.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${P.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=v.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,v.stdout.write($.lastRenderedLine),w)v.stdout.write(`
|
|
110
|
+
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||F$()||!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(F$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await sA(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=lw(this.config.logDirectory,J);if($.before)try{if((await gw(U)).mtime>=$.before)continue}catch(Y){console.error(`Failed to get stats for file ${U}:`,Y);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 oA(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function $G($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:U=()=>!0,fallback:Y}=w,f=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(Z){if(f=Z instanceof Error?Z:Error(String(Z)),W===A||!U(f))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(Y!==void 0)return Y;throw f instanceof Error?f:Error(`Unknown error: ${String(f)}`)}class C8{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:U=!0,useBackwardCompatibility:Y=!0,customParsers:f={},verbose:W=!1,trackPerformance:Z=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let B=J||this.generateEnvPrefix($),h={...w};return this.processObject(h,[],B,{useCamelCase:U,useBackwardCompatibility:Y,customParsers:f,verbose:W,configName:$}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(Z)return H8.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[U,Y]of Object.entries($)){let f=[...w,U],W=f.map((B)=>this.formatEnvKey(B,J.useCamelCase)),Z=`${A}_${W.join("_")}`,E=J.useBackwardCompatibility?`${A}_${f.map((B)=>B.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.processObject(Y,f,A,J);else{let B=eA.env[Z]||(E?eA.env[E]:void 0);if(B!==void 0){if(J.verbose){let h=eA.env[Z]?Z:E}try{$[U]=this.parseEnvironmentValue(B,typeof Y,Z,J.customParsers,J.configName)}catch(h){if(h instanceof I8)throw h;throw aw.envVar(Z,B,typeof Y,J.configName)}}}}}parseEnvironmentValue($,w,A,J,U){for(let[Y,f]of Object.entries(J))try{return f($)}catch{continue}for(let Y of this.defaultParsers)if(Y.canParse($,w))try{return Y.parse($)}catch{throw aw.envVar(A,$,`${w} (via ${Y.name} parser)`,U)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,U]of Object.entries(eA.env))if(J.startsWith(A)&&U!==void 0)w[J]=U;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(U){J.push(`Cannot parse value "${w}" as ${A}: ${U}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:U="text"}=A,Y=J||this.generateEnvPrefix($),f=[];switch(this.extractEnvVarInfo(w,[],Y,f),U){case"markdown":return this.formatAsMarkdown(f,$);case"json":return JSON.stringify(f,null,2);default:return this.formatAsText(f,$)}}extractEnvVarInfo($,w,A,J){for(let[U,Y]of Object.entries($)){let f=[...w,U],W=`${A}_${f.map((Z)=>this.formatEnvKey(Z,!0)).join("_")}`;if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.extractEnvVarInfo(Y,f,A,J);else J.push({key:W,type:Array.isArray(Y)?"array":typeof Y,description:`Configuration for ${f.join(".")}`,example:this.generateExample(Y)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
|
|
166
111
|
|
|
167
112
|
`;for(let J of $)A+=`${J.key}
|
|
168
113
|
`,A+=` Type: ${J.type}
|
|
@@ -174,25 +119,30 @@ export type ConfigOf = Config
|
|
|
174
119
|
`;A+=`| Variable | Type | Description | Example |
|
|
175
120
|
`,A+=`|----------|------|-------------|----------|
|
|
176
121
|
`;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
|
|
177
|
-
`;return A}}function EH($,w){let A=fE("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function JE($,w,A={}){return UE($,w,A,new WeakMap)}function UE($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:h}=A;if(w===null||w===void 0)return Y?$:w;if(h){let Z=h($,w);if(Z!==void 0)return Z}if(Array.isArray(w)||Array.isArray($))return YE($,w,U,J);if(!o$(w)||!o$($))return w;return jH($,w,A,J)}function YE($,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 WH($,w);case"smart":return FH($,w,J);default:return w}return w}function WH($,w){let A=[...w];for(let J of $)if(!A.some((U)=>QY(U,J)))A.push(J);return A}function FH($,w,A){if(w.length===0)return $;if($.length===0)return w;if(o$(w[0])&&o$($[0]))return BH($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function BH($,w,A){let J=[...w];for(let U of $){if(!o$(U)){J.push(U);continue}let Y=["id","name","key","path","type"],h=!1;for(let Z of Y)if(Z in U){if(J.find((f)=>o$(f)&&(Z in f)&&f[Z]===U[Z])){h=!0;break}}if(!h)J.push(U)}return J}function jH($,w,A,J){let U=w;if(o$(U)&&J.has(U))return J.get(U);let Y={...$};if(o$(U))J.set(U,Y);for(let h in U){if(!Object.prototype.hasOwnProperty.call(U,h))continue;let Z=U[h],f=Y[h];if(A.skipNullish&&(Z===null||Z===void 0))continue;if(Z===null||Z===void 0){Y[h]=Z;continue}if(o$(Z)&&o$(f))Y[h]=UE(f,Z,A,J);else if(Array.isArray(Z)||Array.isArray(f))Y[h]=YE(f,Z,A.arrayMergeMode||"smart",J);else Y[h]=Z}return Y}function oY($,w,A="replace"){return JE($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function QY($,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(!QY($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!QY($[U],w[U]))return!1}return!0}return!1}function o$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class BJ{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:h=!0,verbose:Z=!1}=A;if(U){let E=vw.getWithFileCheck("file",$);if(E){if(Z)console.log(`Configuration loaded from cache: ${$}`);return E}}let f=async()=>{if(!xA($))return null;try{let E=`?t=${Date.now()}`,W=await import($+E),F=W.default||W,j="default"in W,B=Object.keys(W).length>0;if(!j&&!B)throw new G1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new G1($,Error("Configuration must export a valid object"),"unknown");let T={config:oY(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)vw.setWithFileCheck("file",T,$,Y);return T}catch(E){throw E instanceof Error?l0.configLoad($,E):l0.configLoad($,Error(String(E)))}};if(h)return N1.track("loadFromPath",f,{path:$});return f()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let h of this.extensions)U.push(KY(w,`${Y}${h}`));return U}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 wE(async()=>{return xA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!xA($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let h of this.extensions){let Z=KY($,`${Y}${h}`);if(await this.checkFileAccess(Z))J.push(Z)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let h of Y)if(this.looksLikeConfigFile(h)){let Z=KY($,h);if(await this.checkFileAccess(Z))J.push(Z)}}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(!xA($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}class eY{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:h=[],trackPerformance:Z=!0,verbose:f=!1}=A,E=async()=>{let W=[],F=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:h,trackPerformance:Z,verbose:f};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...h],j);else return this.validateWithJSONSchema($,w,j)}catch(B){return W.push({path:"",message:`Validation failed: ${B}`,rule:"system"}),{isValid:!1,errors:W,warnings:F}}};if(Z)return await N1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!S9(w))throw new q1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new q1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let h=Array.isArray($)?"array":typeof $,Z=Array.isArray(w.type)?w.type:[w.type];if(!Z.includes(h)){if(J.push({path:A,message:`Expected type ${Z.join(" or ")}, got ${h}`,expected:Z.join(" or "),actual:h,rule:"type"}),Y.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"}),Y.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 h=0;h<$.length;h++){let Z=A?`${A}[${h}]`:`[${h}]`;if(this.validateObjectAgainstSchema($[h],w.items,Z,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let h=$;if(Y.validateRequired&&w.required){for(let Z of w.required)if(!(Z in h)){if(J.push({path:A?`${A}.${Z}`:Z,message:`Missing required property '${Z}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[Z,f]of Object.entries(w.properties))if(Z in h){let E=A?`${A}.${Z}`:Z;if(this.validateObjectAgainstSchema(h[Z],f,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let Z=new Set(Object.keys(w.properties||{}));for(let f of Object.keys(h))if(!Z.has(f))U.push({path:A?`${A}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let h=this.getValueByPath($,Y.path),Z=this.validateWithRule(h,Y,Y.path);if(J.push(...Z),A.stopOnFirstError&&J.length>0)break}catch(h){J.push({path:Y.path,message:`Rule validation failed: ${h}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,h]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(h)})}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:BE},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class $h{fileLoader=new BJ;envProcessor=new FJ;validator=new eY;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...h}=$;try{if(A?.enabled){let f=this.checkCache(h.name||"",h);if(f)return f}let Z;try{Z=await this.loadConfigurationStrategies(h,!0,A)}catch(f){let E=h.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(E)throw f;Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`No configuration file found for "${h.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let W=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),F=!W&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),j=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(E&&(j||W))throw f;if(F&&(!E||!j))Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(U||Y)await this.validateConfiguration(Z.config,U,Y,h.name);if(A?.enabled&&Z)this.cacheResult(h.name||"",Z,A,h);if(J?.enabled){let f={operation:"loadConfig",duration:Date.now()-w,configName:h.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(f);if(J.slowThreshold&&f.duration>J.slowThreshold)h0.warn(`Slow configuration loading detected: ${f.duration}ms for ${h.name}`);Z.metrics=f}return Z}catch(Z){let f=Date.now()-w;throw h0.error(`Configuration loading failed after ${f}ms:`,[Z instanceof Error?Z:Error(String(Z))]),Z}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:h,defaultConfig:Z,checkEnv:f=!0,arrayStrategy:E="replace",verbose:W=!1}=$,F=Y||$w.cwd(),j=[],B=await this.loadLocalConfiguration(J,U,F,h,Z,E,W,f,A);if(B)return j.push(...this.getLocalSearchPaths(J,U,F,h)),this.finalizeResult(B,j,f,J,W);let T=await this.loadHomeConfiguration(J,U,Z,E,W,f);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,f,J,W);let H=await this.loadPackageJsonConfiguration(J,U,F,Z,E,W,f);if(H)return j.push(X$(F,"package.json")),this.finalizeResult(H,j,f,J,W);if(j.push(...this.getAllSearchPaths(J,U,F,h)),w)throw l0.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,Z,f,W),warnings:[`No configuration file found for "${J}"${U?` or alias "${U}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,h,Z,f){let E=Z?z1($,U,h):U,W=this.getLocalDirectories(A,J);for(let F of W){if(h)h0.info(`Searching for configuration in: ${F}`);let j=this.fileLoader.generateConfigPaths($,F,w),B=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:h,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(B){if(h)h0.success(`Configuration loaded from: ${B.source.path}`);return B}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let h=Y?z1($,A,U):A,Z=[X$(_w(),".config",$),X$(_w(),".config"),_w()];for(let f of Z){if(U)h0.info(`Checking home directory: ${f}`);let E=this.fileLoader.generateConfigPaths($,f,w),W=await this.fileLoader.tryLoadFromPaths(E,h,{arrayStrategy:J,verbose:U});if(W){if(U)h0.success(`Configuration loaded from home directory: ${W.source.path}`);return W}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,h){let Z=h?z1($,J,Y):J;try{let f=X$(A,"package.json");if(!XY(f))return null;let E=await import(f),W=E[$],F=$;if(!W&&w)W=E[w],F=w;if(W&&typeof W==="object"&&!Array.isArray(W)){if(Y)h0.success(`Configuration loaded from package.json: ${F}`);return{config:oY(Z,W,U),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(Y)h0.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}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:z1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((h)=>h.path?`${h.path}: ${h.message}`:h.message))}if(U.length>0)throw l0.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return vw.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);vw.set(U,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,J){let U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(X$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let h of U)Y.push(...this.fileLoader.generateConfigPaths($,h,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[X$(_w(),".config",$),X$(_w(),".config"),_w()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function DZ($){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 zH($){return X0.loadConfig({...$,__strictErrorHandling:!0})}async function hE($){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 U=J instanceof Error?J.name:"UnknownError",Y=J instanceof Error?J.message:String(J);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||Y.includes("config"))&&$.verbose)h0.warn("Unexpected error loading config, using defaults:",[J instanceof Error?J:Error(String(J))]);let h=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await X0.applyEnvironmentVariables(h.name||"",w,!0,h.verbose||!1))?.config??w;return w}}async function HH($={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"&&DZ(A)))return(await X0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await X0.loadConfig({...$,cwd:$.cwd||$w.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&DZ(w)))return(await X0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function TH($,w,A="replace"){let J=new BJ;try{let U=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return U?U.config:null}catch{return null}}function z1($,w,A=!1){let J=new FJ,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(h,Z=[]){let f={...h};for(let[E,W]of Object.entries(h)){let F=[...Z,E],j=[`${U}_${F.join("_").toUpperCase()}`,`${U}_${F.map((H)=>H.toUpperCase()).join("")}`,`${U}_${F.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],B,T;for(let H of j)if(B=$w.env[H],B!==void 0){T=H;break}if(B!==void 0&&T)if(typeof W==="boolean")f[E]=["true","1","yes"].includes(B.toLowerCase());else if(typeof W==="number"){let H=Number(B);if(!Number.isNaN(H))f[E]=H}else if(Array.isArray(W))try{f[E]=JSON.parse(B)}catch{f[E]=B.split(",").map((H)=>H.trim())}else f[E]=B;else if(W&&typeof W==="object"&&!Array.isArray(W))f[E]=Y(W,F)}return f}return Y(w)}function GH($){let w=X$($w.cwd(),$.configDir),A=X$($w.cwd(),$.generatedDir),J=X$(A,"config-types.ts");if(!XY(hZ(J)))U9(hZ(J),{recursive:!0,mode:511});let U=XY(w)?Y9(w).map((h)=>h.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],Y=`// Generated by bunfig v${lH}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
${U.map((f)=>{let E=KZ(w,f.file).replace(/\\/g,"/");return` '${f.base}': typeof import('${E}').default`}).join(`,
|
|
122
|
+
`;return A}}function wG($,w,A={}){return EB($,w,A,new WeakMap)}function EB($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:f}=A;if(w===null||w===void 0)return Y?$:w;if(f){let W=f($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return BB($,w,U,J);if(!w0(w)||!w0($))return w;return YG($,w,A,J)}function BB($,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 AG($,w);case"smart":return JG($,w,J);default:return w}return w}function AG($,w){let A=[...w];for(let J of $)if(!A.some((U)=>h8(U,J)))A.push(J);return A}function JG($,w,A){if(w.length===0)return $;if($.length===0)return w;if(w0(w[0])&&w0($[0]))return UG($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function UG($,w,A){let J=[...w];for(let U of $){if(!w0(U)){J.push(U);continue}let Y=["id","name","key","path","type"],f=!1;for(let W of Y)if(W in U){if(J.find((Z)=>w0(Z)&&(W in Z)&&Z[W]===U[W])){f=!0;break}}if(!f)J.push(U)}return J}function YG($,w,A,J){let U=w;if(w0(U)&&J.has(U))return J.get(U);let Y={...$};if(w0(U))J.set(U,Y);for(let f in U){if(!Object.prototype.hasOwnProperty.call(U,f))continue;let W=U[f],Z=Y[f];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){Y[f]=W;continue}if(w0(W)&&w0(Z))Y[f]=EB(Z,W,A,J);else if(Array.isArray(W)||Array.isArray(Z))Y[f]=BB(Z,W,A.arrayMergeMode||"smart",J);else Y[f]=W}return Y}function hB($,w,A="replace"){return wG($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function h8($,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(!h8($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!h8($[U],w[U]))return!1}return!0}return!1}function w0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class FB{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:f=!0,verbose:W=!1}=A;if(U){let E=FJ.getWithFileCheck("file",$);if(E){if(W)console.log(`Configuration loaded from cache: ${$}`);return E}}let Z=async()=>{if(!$J($))return null;try{let E=`?t=${Date.now()}`,B=await import($+E),h=B.default||B,j="default"in B,F=Object.keys(B).length>0;if(!j&&!F)throw new RJ($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new RJ($,Error("Configuration must export a valid object"),"unknown");let T={config:hB(w,h,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)FJ.setWithFileCheck("file",T,$,Y);return T}catch(E){throw E instanceof Error?aw.configLoad($,E):aw.configLoad($,Error(String(E)))}};if(f)return H8.track("loadFromPath",Z,{path:$});return Z()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let f of this.extensions)U.push(pY(w,`${Y}${f}`));return U}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 Y of J){if(!Y)continue;if(A.push(Y,`.${Y}.config`,`${Y}.config`,`.${Y}`),$)A.push(`${$}.${Y}.config`,`.${$}.${Y}.config`)}let U=new Set;return A.filter((Y)=>{if(!Y||U.has(Y))return!1;return U.add(Y),!0})}checkFileAccess($){return $G(async()=>{return $J($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!$J($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let f of this.extensions){let W=pY($,`${Y}${f}`);if(await this.checkFileAccess(W))J.push(W)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let f of Y)if(this.looksLikeConfigFile(f)){let W=pY($,f);if(await this.checkFileAccess(W))J.push(W)}}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(!$J($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}class jB{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:f=[],trackPerformance:W=!0,verbose:Z=!1}=A,E=async()=>{let B=[],h=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:f,trackPerformance:W,verbose:Z};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...f],j);else return this.validateWithJSONSchema($,w,j)}catch(F){return B.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:B,warnings:h}}};if(W)return await H8.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!uH(w))throw new KJ(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new KJ(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let f=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(f)){if(J.push({path:A,message:`Expected type ${W.join(" or ")}, got ${f}`,expected:W.join(" or "),actual:f,rule:"type"}),Y.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"}),Y.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 f=0;f<$.length;f++){let W=A?`${A}[${f}]`:`[${f}]`;if(this.validateObjectAgainstSchema($[f],w.items,W,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let f=$;if(Y.validateRequired&&w.required){for(let W of w.required)if(!(W in f)){if(J.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[W,Z]of Object.entries(w.properties))if(W in f){let E=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(f[W],Z,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let Z of Object.keys(f))if(!W.has(Z))U.push({path:A?`${A}.${Z}`:Z,message:`Additional property '${Z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let f=this.getValueByPath($,Y.path),W=this.validateWithRule(f,Y,Y.path);if(J.push(...W),A.stopOnFirstError&&J.length>0)break}catch(f){J.push({path:Y.path,message:`Rule validation failed: ${f}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,f]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(f)})}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:fG},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function ZG($){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 zB{fileLoader=new FB;envProcessor=new C8;validator=new jB;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...f}=$;try{if(A?.enabled){let Z=this.checkCache(f.name||"",f);if(Z)return Z}let W;try{W=await this.loadConfigurationStrategies(f,!0,A)}catch(Z){let E=f.__strictErrorHandling;if(Z instanceof Error&&Z.name==="ConfigNotFoundError"){if(E)throw Z;W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`No configuration file found for "${f.name||"config"}", using defaults with environment variables`]}}else if(Z instanceof Error&&Z.name==="ConfigLoadError"){let B=Z.message.includes("EACCES")||Z.message.includes("EPERM")||Z.message.includes("permission denied"),h=!B&&(Z.message.includes("syntax")||Z.message.includes("Expected")||Z.message.includes("Unexpected")||Z.message.includes("BuildMessage")||Z.message.includes("errors building")),j=Z.message.includes("Configuration must export a valid object")||Z.message.includes("Configuration file is empty and exports nothing");if(E&&(j||B))throw Z;if(h&&(!E||!j))W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading error, using defaults: ${Z.message}`]};else throw Z}else W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${Z instanceof Error?Z.message:String(Z)}`]}}if(U||Y)await this.validateConfiguration(W.config,U,Y,f.name);if(A?.enabled&&W)this.cacheResult(f.name||"",W,A,f);if(J?.enabled){let Z={operation:"loadConfig",duration:Date.now()-w,configName:f.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(Z);if(J.slowThreshold&&Z.duration>J.slowThreshold)O0.warn(`Slow configuration loading detected: ${Z.duration}ms for ${f.name}`);W.metrics=Z}return W}catch(W){if(W instanceof Error&&W.name==="ConfigNotFoundError")throw W;let Z=Date.now()-w;throw O0.error(`Configuration loading failed after ${Z}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:f,defaultConfig:W,checkEnv:Z=!0,arrayStrategy:E="replace",verbose:B=!1}=$,h=Y||CJ.cwd(),j=[],F=await this.loadLocalConfiguration(J,U,h,f,W,E,B,Z,A);if(F)return j.push(...this.getLocalSearchPaths(J,U,h,f)),this.finalizeResult(F,j,Z,J,B);let T=await this.loadHomeConfiguration(J,U,W,E,B,Z);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,Z,J,B);let H=await this.loadPackageJsonConfiguration(J,U,h,W,E,B,Z);if(H)return j.push(e$(h,"package.json")),this.finalizeResult(H,j,Z,J,B);if(j.push(...this.getAllSearchPaths(J,U,h,f)),w)throw aw.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,W,Z,B),warnings:[`No configuration file found for "${J}"${ZG(U)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,f,W,Z){let E=W?AJ($,U,f):U,B=this.getLocalDirectories(A,J);for(let h of B){if(f)O0.info(`Searching for configuration in: ${h}`);let j=this.fileLoader.generateConfigPaths($,h,w),F=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:f,cacheTtl:Z?.ttl,useCache:!Z?.ttl||Z.ttl>100});if(F){if(f)O0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let f=Y?AJ($,A,U):A,W=[e$(bw(),".config",$),e$(bw(),".config"),bw()];for(let Z of W){if(U)O0.info(`Checking home directory: ${Z}`);let E=this.fileLoader.generateConfigPaths($,Z,w),B=await this.fileLoader.tryLoadFromPaths(E,f,{arrayStrategy:J,verbose:U});if(B){if(U)O0.success(`Configuration loaded from home directory: ${B.source.path}`);return B}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,f){let W=f?AJ($,J,Y):J;try{let Z=e$(A,"package.json");if(!$H(Z))return null;let E={};try{E=JSON.parse(wH(Z,"utf8"))}catch(j){if(Y)O0.warn("Failed to parse package.json:",[j instanceof Error?j:Error(String(j))]);return null}let B=E[$],h=$;if(!B&&w){let j=Array.isArray(w)?w:[w];for(let F of j){if(!F)continue;if(E[F]){B=E[F],h=F;break}}}if(B&&typeof B==="object"&&!Array.isArray(B)){if(Y)O0.success(`Configuration loaded from package.json: ${h}`);return{config:hB(W,B,U),source:{type:"package.json",path:Z,priority:30,timestamp:new Date}}}}catch(Z){if(Y)O0.warn("Failed to load package.json:",[Z instanceof Error?Z:Error(String(Z))])}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:AJ($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((f)=>f.path?`${f.path}: ${f.message}`:f.message))}if(U.length>0)throw aw.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return FJ.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);FJ.set(U,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([$,e$($,"config"),e$($,".config"),w?e$($,w):void 0].filter(Boolean)))}getAllSearchPaths($,w,A,J){let U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(e$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let f of U)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[e$(bw(),".config",$),e$(bw(),".config"),bw()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function AJ($,w,A=!1){let J=new C8,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(f,W=[]){let Z={...f};for(let[E,B]of Object.entries(f)){let h=[...W,E],j=[`${U}_${h.join("_").toUpperCase()}`,`${U}_${h.map((H)=>H.toUpperCase()).join("")}`,`${U}_${h.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let H of j)if(F=CJ.env[H],F!==void 0){T=H;break}if(F!==void 0&&T)if(typeof B==="boolean")Z[E]=["true","1","yes"].includes(F.toLowerCase());else if(typeof B==="number"){let H=Number(F);if(!Number.isNaN(H))Z[E]=H}else if(Array.isArray(B))try{Z[E]=JSON.parse(F)}catch{Z[E]=F.split(",").map((H)=>H.trim())}else Z[E]=F;else if(B&&typeof B==="object"&&!Array.isArray(B))Z[E]=Y(B,h)}return Z}return Y(w)}function F8($,w){let A=[];function J(U){let Y;try{Y=SE.readdirSync(U)}catch{return}for(let f of Y){let W=W0.join(U,f);try{if(SE.statSync(W).isDirectory())J(W);else if(f===w)A.push(U)}catch{continue}}}return J($),A}function M($,w,A){if(A||J$.verbose)console.debug(`[tlsx:${$}] ${w}`)}function GB(){return TB.env.SUDO_PASSWORD}function zG($){let w=$.toLowerCase();return FG.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function MJ($){if(Array.isArray($))return $.map((A)=>MJ(A));if(typeof $==="string")return jG.test($)?VE:$;if(!$||typeof $!=="object")return $;let w={};for(let[A,J]of Object.entries($)){if(zG(A)){w[A]=VE;continue}w[A]=MJ(J)}return w}function VJ($){return JSON.stringify(MJ($))}function HG($){let w=GB();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 a0($,w={}){let A=HG($);try{let{stdout:J,stderr:U}=await hG(A,{cwd:w.cwd||TB.cwd(),timeout:w.timeout||30000});return{stdout:J.trim(),stderr:U.trim()}}catch(J){let U=Error(`Failed to execute command: ${$}
|
|
123
|
+
Error: ${J.message}`);throw U.stack=J.stack,U}}function qB($){if($.domain)return $.domain;if($.domains?.length)return $.domains[0];throw Error("Either domain or domains must be specified")}function y8($){let w=W0.join(EG.homedir(),".stacks","ssl"),A=$.basePath&&$.basePath.trim()!==""?$.basePath:J$.basePath&&J$.basePath.trim()!==""?J$.basePath:w,J=$.certPath?W0.isAbsolute($.certPath)?$.certPath:W0.join(A,$.certPath):W0.join(A,J$.certPath),U=$.keyPath?W0.isAbsolute($.keyPath)?$.keyPath:W0.join(A,$.keyPath):W0.join(A,J$.keyPath),Y=$.caCertPath?W0.isAbsolute($.caCertPath)?$.caCertPath:W0.join(A,$.caCertPath):W0.join(A,J$.caCertPath);return{certPath:J,keyPath:U,caCertPath:Y,basePath:A}}function NB($){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 M(I.CERT,`Generated ${w.length} Subject Alternative Names`,$.verbose),w}function L8($){let w=$.notBeforeDays??B0.DEFAULT_NOT_BEFORE_DAYS,A=$.validityDays??($.validityYears?$.validityYears*365:B0.DEFAULT_VALIDITY_DAYS);M(I.CERT,"Calculating certificate validity dates",$.verbose);let J=new Date(Date.now()-86400*w*1000),U=new Date(J.getTime()+A*24*60*60*1000);return J.setUTCHours(0,0,0,0),U.setUTCHours(23,59,59,999),M(I.CERT,`Validity period: ${J.toISOString()} to ${U.toISOString()}`,$.verbose),{notBefore:J,notAfter:U}}function S1($){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 g$($,w){let A=S1(w.length);return Buffer.concat([Buffer.from([$]),A,w])}function _1($){let w=$.split(".").map(Number),A=[];A.push(40*w[0]+w[1]);for(let J=2;J<w.length;J++){let U=w[J],Y=[];Y.unshift(U&127),U>>=7;while(U>0)Y.unshift(U&127|128),U>>=7;A.push(...Y)}return g$(h0.OID,Buffer.from(A))}function j8($){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 g$(h0.INTEGER,w)}function RB($,w=0){return g$(h0.BIT_STRING,Buffer.concat([Buffer.from([w]),$]))}function KB($){return g$(h0.OCTET_STRING,$)}function d$(...$){return g$(h0.SEQUENCE,Buffer.concat($))}function TG(...$){return g$(h0.SET,Buffer.concat($))}function GG($){return g$(h0.PRINTABLE_STRING,Buffer.from($,"ascii"))}function qG($){return g$(h0.UTF8_STRING,Buffer.from($,"utf8"))}function NG(){return Buffer.from([h0.NULL,0])}function OE($,w,A=!0){let J=160|$|(A?0:0),U=S1(w.length);return Buffer.concat([Buffer.from([J]),U,w])}function XE($){let w=$.getUTCFullYear();if(w>=2050){let A=$.toISOString().replace(/[-:T]/g,"").slice(0,14)+"Z";return g$(h0.GENERALIZED_TIME,Buffer.from(A,"ascii"))}else{let A=(w%100).toString().padStart(2,"0"),J=($.getUTCMonth()+1).toString().padStart(2,"0"),U=$.getUTCDate().toString().padStart(2,"0"),Y=$.getUTCHours().toString().padStart(2,"0"),f=$.getUTCMinutes().toString().padStart(2,"0"),W=$.getUTCSeconds().toString().padStart(2,"0"),Z=`${A}${J}${U}${Y}${f}${W}Z`;return g$(h0.UTC_TIME,Buffer.from(Z,"ascii"))}}function RG($,w){return d$(XE($),XE(w))}function _E($){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 U=A.shortName==="C"?GG(A.value):qG(A.value),Y=d$(_1(J),U);w.push(TG(Y))}return d$(...w)}function MB($){return d$(_1($),NG())}function KG($){return $.export({type:"spki",format:"der"})}function MG($){if($.includes(":")){let w=$;if($.includes("::")){let U=$.split("::"),Y=U[0]?U[0].split(":"):[],f=U[1]?U[1].split(":"):[],W=8-Y.length-f.length,Z=Array.from({length:W},()=>"0");w=[...Y,...Z,...f].join(":")}let A=w.split(":"),J=Buffer.alloc(16);for(let U=0;U<8;U++){let Y=Number.parseInt(A[U]||"0",16);J.writeUInt16BE(Y,U*2)}return J}else{let w=$.split(".").map((A)=>Number.parseInt(A,10));return Buffer.from(w)}}function IG($){let w=[];for(let A of $)if(A.type===2&&A.value){let J=S1(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=MG(A.ip),U=S1(J.length);w.push(Buffer.concat([Buffer.from([135]),U,J]))}else if(A.type===6&&A.value){let J=S1(A.value.length);w.push(Buffer.concat([Buffer.from([134]),J,Buffer.from(A.value,"ascii")]))}return d$(...w)}function CG($,w){if($){if(w!==void 0)return d$(g$(1,Buffer.from([255])),j8(w));return d$(g$(1,Buffer.from([255])))}return d$()}function yG($){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 RB(Buffer.from([w]),A)}function LG($){let w=[];if($.serverAuth)w.push(_1(x$.SERVER_AUTH));if($.clientAuth)w.push(_1(x$.CLIENT_AUTH));return d$(...w)}function y1($,w,A){let J=[_1($)];if(w)J.push(g$(1,Buffer.from([255])));return J.push(KB(A)),d$(...J)}function SG($){let w=[];if(w.push(OE(0,j8(2))),w.push(j8($.serialNumber)),w.push(MB(x$.SHA256_WITH_RSA)),w.push(_E($.issuer)),w.push(RG($.notBefore,$.notAfter)),w.push(_E($.subject)),w.push(KG($.publicKey)),$.extensions){let A=[];if($.extensions.basicConstraints)A.push(y1(x$.BASIC_CONSTRAINTS,$.extensions.basicConstraints.critical??!0,CG($.extensions.basicConstraints.isCA,$.extensions.basicConstraints.pathLenConstraint)));if($.extensions.keyUsage)A.push(y1(x$.KEY_USAGE,$.extensions.keyUsage.critical??!0,yG($.extensions.keyUsage)));if($.extensions.extendedKeyUsage)A.push(y1(x$.EXTENDED_KEY_USAGE,!1,LG($.extensions.extendedKeyUsage)));if($.extensions.subjectAltName?.length)A.push(y1(x$.SUBJECT_ALT_NAME,!1,IG($.extensions.subjectAltName)));if($.extensions.subjectKeyIdentifier)A.push(y1(x$.SUBJECT_KEY_IDENTIFIER,!1,KB($.extensions.subjectKeyIdentifier)));if(A.length>0)w.push(OE(3,d$(...A)))}return d$(...w)}function VG($,w){let A=sw.createSign("SHA256");A.update($);let J=A.sign(w);return d$($,MB(x$.SHA256_WITH_RSA),RB(J))}function OG($,w){let A=$.toString("base64"),J=[];for(let U=0;U<A.length;U+=64)J.push(A.slice(U,U+64));return`-----BEGIN ${w}-----
|
|
124
|
+
${J.join(`
|
|
181
125
|
`)}
|
|
182
|
-
|
|
183
|
-
export
|
|
184
|
-
export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
|
|
185
|
-
|
|
186
|
-
`}return{name:"bunfig-plugin",setup(U){U.onResolve({filter:/^virtual:bunfig-types$/},(Y)=>{return{path:Y.path,namespace:"bunfig-virtual"}}),U.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}var fE,vw,N1,ZE,NH,KH,OZ,dA,xY,M$,d,MH,_Z,IH,XZ,yH,LH,SY,CH,kZ,QZ,VY,SH,VH,DH,OH,gA,EE,_H,I$,XH,kH,xZ,lA,PY,f$,X,QH,PZ,xH,bZ,PH,bH,DY,iH,iZ,cZ,cH,OY,uH,nH,vH,mH,dH,tA,WE,gH,lH="0.15.6",n$,JJ,G1,bY,iY,UJ,cY,uY,q1,nY,vY,l0,FE,BE,h0,X0,jE,zE,tH=t9(async()=>{fE=import.meta.require,vw=new pY,N1=new rY,ZE={createKey:p9,isEquivalent:r9,estimateMemoryUsage:a9},NH=aA(kY.cwd(),"config"),KH=aA(kY.cwd(),"src/generated"),OZ=rA.env.CLARITY_LOG_DIR||E9(e9(),"logs"),dA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:OZ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},xY=await $H(),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`,bold:($)=>`\x1B[1m${$}\x1B[0m`,dim:($)=>`\x1B[2m${$}\x1B[0m`,italic:($)=>`\x1B[3m${$}\x1B[0m`,underline:($)=>`\x1B[4m${$}\x1B[0m`,reset:"\x1B[0m"},d=M$,MH=M$.red,_Z=M$.green,IH=M$.yellow,XZ=M$.blue,yH=M$.magenta,LH=M$.cyan,SY=M$.white,CH=M$.gray,kZ=M$.bgRed,QZ=M$.bgYellow,VY=M$.bold,SH=M$.dim,VH=M$.italic,DH=M$.underline,OH=M$.reset,gA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},EE={debug:"\uD83D\uDD0D",info:XZ("ℹ"),success:_Z("✓"),warning:QZ(SY(VY(" WARN "))),error:kZ(SY(VY(" ERROR ")))},_H=new $J("stacks"),I$=new $J("bunfig",{showTags:!0}),XH=_$(T1.cwd(),"config"),kH=_$(T1.cwd(),"src/generated"),xZ=pA.env.CLARITY_LOG_DIR||f9(UH(),"logs"),lA={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:xZ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},PY=await YH(),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"},X=f$,QH=f$.red,PZ=f$.green,xH=f$.yellow,bZ=f$.blue,PH=f$.magenta,bH=f$.cyan,DY=f$.white,iH=f$.gray,iZ=f$.bgRed,cZ=f$.bgYellow,cH=f$.bgGray,OY=f$.bold,uH=f$.dim,nH=f$.italic,vH=f$.underline,mH=f$.strikethrough,dH=f$.reset,tA={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},WE={debug:"\uD83D\uDD0D",info:bZ("ℹ"),success:PZ("✓"),warning:cZ(DY(OY(" WARN "))),error:iZ(DY(OY(" ERROR ")))},gH=new AJ("stacks"),n$=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}${$}`}},JJ=class extends n${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})}},G1=class extends n${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}},bY=class extends n${code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}},iY=class extends n${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}},UJ=class extends n${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})}},cY=class extends n${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}},uY=class extends n${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}},q1=class extends n${code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}},nY=class extends n${code="BROWSER_CONFIG_ERROR";constructor($,w,A,J){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:J})}},vY=class extends n${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}},l0={configNotFound($,w,A){return new JJ($,w,A)},configLoad($,w,A){return new G1($,w,A)},configValidation($,w,A){return new bY($,w,A)},configMerge($,w,A,J){return new iY($,w,A,J)},envVar($,w,A,J){return new UJ($,w,A,J)},fileSystem($,w,A){return new cY($,w,A)},typeGeneration($,w,A){return new uY($,w,A)},schemaValidation($,w,A){return new q1($,w,A)},browserConfig($,w,A,J){return new nY($,w,A,J)},plugin($,w,A){return new vY($,w,A)}},FE={replace:"replace",concat:"concat",smart:"smart"},BE=/^https?:\/\//,h0=new AJ("bunfig",{showTags:!0}),X0=new $h,jE=X$($w.cwd(),"config"),zE=X$($w.cwd(),"src/generated")});function pH($,w={}){let A=sA.cwd();while(A.includes("storage"))A=MZ(A,"..");let J=MZ(A,$||"");if(w?.relative)return X9(sA.cwd(),J);return J}var rH=sA.env.CLARITY_LOG_DIR||_9(pH(),"logs"),HE={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:rH,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},YJ={...HE},lR=(async()=>{try{let{loadConfig:$}=await tH().then(()=>oZ),w=await $({name:"clarity",alias:"logging",defaultConfig:HE,cwd:sA.cwd()});if(w)Object.assign(YJ,w)}catch{}return YJ})();function Z$(){if(O0.env.NODE_ENV==="test"||O0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function aH(){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 TE{async format($){let w=await aH(),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:uw.pid,hostname:w(),environment:uw.env.NODE_ENV||"development",platform:uw.platform,version:uw.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:uw.env.NODE_ENV||uw.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var z$={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=z$,tR=z$.red,sH=z$.green,pR=z$.yellow,oH=z$.blue,rR=z$.magenta,aR=z$.cyan,uZ=z$.white,sR=z$.gray,eH=z$.bgRed,$T=z$.bgYellow,oR=z$.bgGray,nZ=z$.bold,eR=z$.dim,$N=z$.italic,wN=z$.underline,AN=z$.strikethrough,JN=z$.reset,_Y={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},wT={debug:"\uD83D\uDD0D",info:oH("ℹ"),success:sH("✓"),warning:$T(uZ(nZ(" WARN "))),error:eH(uZ(nZ(" ERROR ")))};class jJ{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={...YJ},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new TE,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??u.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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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:YJ.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 w=(async()=>{let J,U=0,Y=3,h=1000;while(U<Y)try{try{try{await b9(this.config.logDirectory,CZ.F_OK|CZ.W_OK)}catch(f){if(f instanceof Error&&"code"in f)if(f.code==="ENOENT")await i9(this.config.logDirectory,{recursive:!0,mode:493});else if(f.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw f;else throw f}}catch(f){throw console.error("Debug: [writeToFile] Failed to create log directory:",f),f}let Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:C0.from($);try{if(!PA(this.currentLogFile))await LY(this.currentLogFile,"",{mode:420});if(J=LZ(this.currentLogFile,"a",420),P9(J,Z,{flag:"a"}),yZ(J),J!==void 0)yY(J),J=void 0;if((await iw(this.currentLogFile)).size===0){if(await LY(this.currentLogFile,Z,{flag:"w",mode:420}),(await iw(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(f){let E=f;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(U<Y-1){let W=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${Y}:`,W);let F=h*2**U;await new Promise((j)=>setTimeout(j,F)),U++;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{yY(J)}catch(f){console.error("Debug: [writeToFile] Error closing file descriptor:",f)}}}catch(Z){if(U===Y-1){let E=Z,W=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",W),Z}U++;let f=h*2**(U-1);await new Promise((E)=>setTimeout(E,f))}})();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 cw(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 cw(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return cw(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((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(([,h],[,Z])=>Z.createdAt.getTime()-h.createdAt.getTime()),U=typeof $.maxKeys==="number"?$.maxKeys:1,Y=Math.max(1,U);if(J.length>Y)for(let[h]of J.slice(Y))this.encryptionKeys.delete(h),this.keys.delete(h)}generateKeyId(){return IY(16).toString("hex")}generateKey(){return IY(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=IY(16),J=k9("aes-256-gcm",w,A),U=C0.isBuffer($)?$:C0.from($,"utf8"),Y=J.update(U),h=J.final(),Z=Y.length+h.length,f=J.getAuthTag(),E=C0.allocUnsafe(16+Z+16);return A.copy(E,0),Y.copy(E,16),h.copy(E,16+Y.length),f.copy(E,16+Z),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=VZ(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(C0.from(C0.concat(U)))),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 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,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let U=await bA(this.config.logDirectory),Y=U.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,E)=>{let W=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),h=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,Z=`${A}.${h}`;if(await iw(A).catch(()=>null))try{if(await SZ(A,Z),w.compress)try{let f=`${Z}.gz`;await this.compressLogFile(Z,f),await iA(Z)}catch(f){console.error("Error compressing rotated file:",f)}if(Y.length===0&&!U.some((f)=>f.endsWith(".log.1")))try{let f=`${A}.1`;await LY(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await iw(A).catch(()=>null))await SZ(A,Y)}if(this.currentLogFile=J,w.maxFiles){let U=(await bA(this.config.logDirectory)).filter((Y)=>Y.startsWith(this.name)).sort((Y,h)=>h.localeCompare(Y));for(let Y of U.slice(w.maxFiles))await iA(cw(this.config.logDirectory,Y))}}}async compressLogFile($,w){let A=IZ($),J=x9(w),U=VZ();await n9(A,U,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()})),PA(this.currentLogFile))try{let $=LZ(this.currentLogFile,"r+");yZ($),yY($)}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 bA(this.config.logDirectory)).filter((w)=>(w.includes("temp")||w.includes(".tmp"))&&w.includes(this.name));for(let w of $)try{await iA(cw(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()?x.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||Z$())return!1;let $=typeof u.env.NO_COLOR<"u",w=u.env.FORCE_COLOR==="0";if($||w)return!1;return!!(typeof u.stderr<"u"&&u.stderr.isTTY||typeof u.stdout<"u"&&u.stdout.isTTY)}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:U,level:Y,showTimestamp:h=!0}=$,Z=(B)=>B.replace(this.ANSI_PATTERN,"");if(!this.fancy){let B=[];if(h)B.push(w);if(Y==="warning")B.push("WARN");else if(Y==="error")B.push("ERROR");else if(A)B.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)B.push(J.replace(/[[\]]/g,""));return B.push(U),B.join(" ")}let f=u.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${x.cyan(U)}`;if(!h)return E.trim();let W=Z(E).trim().length,F=Z(w).length,j=Math.max(1,f-2-W-F);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,h)=>{let Z=Number.parseInt(h,10);return Z<w[0].length?String(w[0][Z]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,h)=>{if(h==="%")return"%";if(J>=w.length)return Y;let Z=w[J++];switch(h){case"s":return String(Z);case"d":case"i":return Number(Z).toString();case"j":case"o":return JSON.stringify(Z,null,2);default:return Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=x.underline(x.blue(J)),h=this.toAbsoluteFilePath(U);if(h&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let Z=`file://${encodeURI(h)}`,f="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${Z}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),w=w.replace(/`([^`]+)`/g,(A,J)=>x.bgGray(J)),w=w.replace(/\*\*([^*]+)\*\*/g,(A,J)=>x.bold(J)),w=w.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(A,J)=>x.italic(J)),w=w.replace(/(?<!_)_([^_]+)_(?!_)/g,(A,J)=>x.italic(J)),w=w.replace(/~([^~]+)~/g,(A,J)=>x.strikethrough(J)),w}supportsHyperlinks(){if(Z$())return!1;let $=u.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=u.env.HOME||"";if(A)w=w.replace(/^~(?=$|\/)/,A)}if(c9(w)||w.startsWith("./")||w.startsWith("../"))w=u9(w);else return null;return PA(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),h,Z;if(w instanceof Error)h=w.message,Z=w.stack;else h=this.formatMessage(w,A);let{consoleText:f,fileText:E}=this.buildOutputTexts(h);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":wT[$],j=this.options.showTags!==!1&&this.name?x.gray(this.formatTag(this.name)):"",B;switch($){case"debug":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:x.gray(f),level:$}),console.error(B);break;case"info":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"success":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:x.green(f),level:$}),console.error(B);break;case"warning":B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.warn(B);break;case"error":if(B=this.formatConsoleMessage({timestamp:U,icon:F,tag:j,message:f,level:$}),console.error(B),Z){let T=Z.split(`
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
`),f=Math.max(...Z.map((j)=>j.length))+2,E=`┌${"─".repeat(f)}┐`,W=`└${"─".repeat(f)}┘`,F=Z.map((j)=>{return this.formatConsoleMessage({timestamp:A,message:x.cyan(j),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:x.cyan(E),showTimestamp:!1})),F.forEach((j)=>console.error(j)),console.error(this.formatConsoleMessage({timestamp:A,message:x.cyan(W),showTimestamp:!1}))}else if(!Z$())console.error(`${J} ${this.environment}.INFO: [BOX] ${Y}`);let h=`${J} ${this.environment}.INFO: [BOX] ${Y}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
126
|
+
-----END ${w}-----
|
|
127
|
+
`}function S8(){return sw.randomBytes(20)}function IB($=2048){let{privateKey:w,publicKey:A}=sw.generateKeyPairSync("rsa",{modulusLength:$});return{privateKey:w,publicKey:A}}function XG($){let w=$.export({type:"spki",format:"der"});return sw.createHash("sha1").update(w).digest()}function CB($){let w={serialNumber:$.serialNumber||S8(),notBefore:$.notBefore,notAfter:$.notAfter,subject:$.subject,issuer:$.issuer||$.subject,publicKey:$.publicKey,extensions:{basicConstraints:{isCA:$.isCA??!1,critical:!0,pathLenConstraint:$.pathLenConstraint},subjectKeyIdentifier:XG($.publicKey)}};if($.keyUsage)w.extensions.keyUsage={...$.keyUsage,critical:!0};if($.extendedKeyUsage)w.extensions.extendedKeyUsage=$.extendedKeyUsage;if($.subjectAltName?.length)w.extensions.subjectAltName=$.subjectAltName;let A=SG(w),J=VG(A,$.signingKey);return{certificate:OG(J,"CERTIFICATE"),certificateDer:J}}function yB($){return $.export({type:"pkcs8",format:"pem"})}function _G($){return sw.createPrivateKey($)}function DG($){let w=new sw.X509Certificate($),A=w.publicKey,J=[],U=w.subject.split(`
|
|
128
|
+
`);for(let Y of U){let[f,...W]=Y.split("="),Z=W.join("=");if(f&&Z)J.push({shortName:f.trim(),value:Z.trim()})}return{publicKey:A,subject:J}}async function V8($={}){M("ca","Creating new Root CA Certificate",$.verbose);let w=$.keySize||B0.DEFAULT_KEY_SIZE;M("ca",`Generating ${w}-bit RSA key pair`,$.verbose);let{privateKey:A,publicKey:J}=IB(w),U=[{shortName:"C",value:$.countryName||J$.countryName},{shortName:"ST",value:$.stateName||J$.stateName},{shortName:"L",value:$.localityName||J$.localityName},{shortName:"O",value:$.organization||"Local Development CA"},{shortName:"OU",value:$.organizationalUnit||"Certificate Authority"},{shortName:"CN",value:$.commonName||"Local Development Root CA"}],{notBefore:Y,notAfter:f}=L8({validityYears:$.validityYears||B0.DEFAULT_CA_VALIDITY_YEARS,verbose:$.verbose}),{certificate:W}=CB({serialNumber:S8(),notBefore:Y,notAfter:f,subject:U,publicKey:J,signingKey:A,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:W,privateKey:yB(A),notBefore:Y,notAfter:f}}async function O8($){if(M("ca","Generating new certificate",$.verbose),M("ca",`Options: ${VJ($)}`,$.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}=DG($.rootCA.certificate),A=_G($.rootCA.privateKey);M("ca",`Generating ${B0.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,$.verbose);let J=B0.DEFAULT_KEY_SIZE,{privateKey:U,publicKey:Y}=IB(J),f=$.commonName||qB($),W=$.certificateAttributes||[{shortName:"C",value:$.countryName||J$.countryName},{shortName:"ST",value:$.stateName||J$.stateName},{shortName:"L",value:$.localityName||J$.localityName},{shortName:"O",value:$.organizationName||J$.organizationName},{shortName:"CN",value:f}],{notBefore:Z,notAfter:E}=L8({validityDays:$.validityDays||B0.DEFAULT_VALIDITY_DAYS,verbose:$.verbose}),B=NB($),h=$.keyUsage||{digitalSignature:!0,keyEncipherment:!0},j=$.extKeyUsage||{serverAuth:!0},{certificate:F}=CB({serialNumber:S8(),notBefore:Z,notAfter:E,subject:W,issuer:w,publicKey:Y,signingKey:A,isCA:$.basicConstraints?.cA??!1,pathLenConstraint:$.basicConstraints?.pathLenConstraint,keyUsage:h,extendedKeyUsage:j,subjectAltName:B});return{certificate:F,privateKey:yB(U),notBefore:Z,notAfter:E}}function LB($,w){M(I.STORAGE,`Storing certificate and private key with options: ${VJ(w)}`,w?.verbose);let{certPath:A,keyPath:J}=y8({basePath:w?.basePath,certPath:w?.certPath,keyPath:w?.keyPath});M(I.STORAGE,`Certificate path: ${A}`,w?.verbose),M(I.STORAGE,`Private key path: ${J}`,w?.verbose);let U=z8.dirname(A);if(!k0.existsSync(U))M(I.STORAGE,`Creating certificate directory: ${U}`,w?.verbose),k0.mkdirSync(U,{recursive:!0});M(I.STORAGE,"Writing certificate file",w?.verbose),k0.writeFileSync(A,$.certificate);let Y=z8.dirname(J);if(!k0.existsSync(Y))M(I.STORAGE,`Creating private key directory: ${Y}`,w?.verbose),k0.mkdirSync(Y,{recursive:!0});return M(I.STORAGE,"Writing private key file",w?.verbose),k0.writeFileSync(J,$.privateKey),M(I.STORAGE,"Certificate and private key stored successfully",w?.verbose),A}function SB($,w){M(I.STORAGE,"Storing CA certificate",w?.verbose);let{caCertPath:A}=y8({basePath:w?.basePath,caCertPath:w?.caCertPath});M(I.STORAGE,`CA certificate path: ${A}`,w?.verbose);let J=z8.dirname(A);if(!k0.existsSync(J))M(I.STORAGE,`Creating CA certificate directory: ${J}`,w?.verbose),k0.mkdirSync(J,{recursive:!0});return M(I.STORAGE,"Writing CA certificate file",w?.verbose),k0.writeFileSync(A,$),M(I.STORAGE,"CA certificate stored successfully",w?.verbose),A}async function kG($,w){if(IJ.platform()!=="darwin")return!1;try{let A=DE(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`).toString().trim().split("=")[1]?.trim()||"";if(!A)return M(I.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 M(I.TRUST,"Certificate fingerprint found in system keychain",w),!0}catch{}return M(I.TRUST,"Certificate fingerprint not found in system keychain",w),!1}catch(A){return M(I.TRUST,`Error checking certificate trust: ${A}`,w),!1}}async function X8($,w,A){M(I.TRUST,`Adding certificate to system trust store with options: ${VJ(A)}`,A?.verbose),M(I.TRUST,"Storing certificate and private key",A?.verbose);let J=LB($,A);M(I.TRUST,"Storing CA certificate",A?.verbose);let U=SB(w,A),Y=IJ.platform();M(I.TRUST,`Detected platform: ${Y}`,A?.verbose);let f=bG[Y];if(!f){let W=`Unsupported platform: ${Y}`;throw M(I.TRUST,`Error: ${W}`,A?.verbose),Error(W)}return await f.addCertificate(U,A),M(I.TRUST,"Certificate successfully added to system trust store",A?.verbose),J}var SN,FJ,H8,vH,nH=($)=>$,dH=($,w)=>{for(var A in w)vH($,A,{get:w[A],enumerable:!0,configurable:!0,set:mH.bind(w,A)})},gH=($,w)=>()=>($&&(w=$($=0)),w),bE,lE,rw,D1,tE,qT,NT,HE,UJ,J8,C$,g,RT,TE,KT,GE,MT,IT,rY,CT,qE,NE,aY,yT,LT,ST,VT,YJ,pE,OT,y$,XT,_T,RE,fJ,U8,h$,k,DT,KE,kT,ME,QT,xT,sY,PT,IE,CE,bT,oY,iT,cT,uT,vT,nT,ZJ,rE,mT,dT="0.15.6",m$,GJ,O1,Y8,f8,qJ,Z8,W8,X1,E8,B8,s0,aE,sE,E0,Q0,oE,eE,gT,tT,$B,NJ,oR,q$,P,eR,rT,$K,aT,wK,AK,yE,JK,sT,oT,UK,LE,YK,fK,ZK,WK,EK,eY,eT,BK,F0,AB,RJ,JB,UB,I8,YB,fB,KJ,ZB,WB,aw,fG,O0,hK,FK,jK,HB,J$,B0,I,pw,hG,VE="[redacted]",FG,jG,h0,x$,QG,xG,PG,bG;var VB=X$(()=>{SN=e9(import.meta.url);FJ=new xE,H8=new PE,vH=Object.defineProperty;bE={};dH(bE,{withErrorRecovery:()=>uE,tryLoadConfig:()=>zT,loadConfigWithResult:()=>FT,loadConfig:()=>gE,isRetryableError:()=>fT,isConfigNotFoundError:()=>YT,isBunfigError:()=>vE,globalPerformanceMonitor:()=>D1,globalCache:()=>rw,getEnvOrDefault:()=>ZT,generateConfigTypes:()=>HT,defaultGeneratedDir:()=>eE,defaultConfigDir:()=>oE,deepMergeWithArrayStrategy:()=>R8,deepMerge:()=>nE,createLibraryConfig:()=>TT,config:()=>jT,bunfigPlugin:()=>GT,applyEnvVarsToConfig:()=>L1,TypeGenerationError:()=>W8,SchemaValidationError:()=>X1,PluginError:()=>B8,PerformanceMonitor:()=>G8,FileSystemError:()=>Z8,ErrorFactory:()=>s0,EnvVarError:()=>qJ,EnvProcessor:()=>yJ,ConfigValidator:()=>K8,ConfigValidationError:()=>Y8,ConfigNotFoundError:()=>GJ,ConfigMergeError:()=>f8,ConfigLoader:()=>M8,ConfigLoadError:()=>O1,ConfigFileLoader:()=>LJ,ConfigCache:()=>T8,CacheUtils:()=>tE,BunfigError:()=>m$,BrowserConfigError:()=>E8,ArrayMergeStrategies:()=>aE});gT=gH(async()=>{lE=import.meta.require,rw=new T8,D1=new G8,tE={createKey:lH,isEquivalent:tH,estimateMemoryUsage:pH},qT=BJ(w8.cwd(),"config"),NT=BJ(w8.cwd(),"src/generated"),HE=EJ.env.CLARITY_LOG_DIR||ZH(sH(),"logs"),UJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:HE,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},J8=await oH(),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$,RT=C$.red,TE=C$.green,KT=C$.yellow,GE=C$.blue,MT=C$.magenta,IT=C$.cyan,rY=C$.white,CT=C$.gray,qE=C$.bgRed,NE=C$.bgYellow,aY=C$.bold,yT=C$.dim,LT=C$.italic,ST=C$.underline,VT=C$.reset,YJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},pE={debug:"\uD83D\uDD0D",info:GE("ℹ"),success:TE("✓"),warning:NE(rY(aY(" WARN "))),error:qE(rY(aY(" ERROR ")))},OT=new zJ("stacks"),y$=new zJ("bunfig",{showTags:!0}),XT=k$(V1.cwd(),"config"),_T=k$(V1.cwd(),"src/generated"),RE=WJ.env.CLARITY_LOG_DIR||YH(AT(),"logs"),fJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:RE,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},U8=await JT(),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"},k=h$,DT=h$.red,KE=h$.green,kT=h$.yellow,ME=h$.blue,QT=h$.magenta,xT=h$.cyan,sY=h$.white,PT=h$.gray,IE=h$.bgRed,CE=h$.bgYellow,bT=h$.bgGray,oY=h$.bold,iT=h$.dim,cT=h$.italic,uT=h$.underline,vT=h$.strikethrough,nT=h$.reset,ZJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},rE={debug:"\uD83D\uDD0D",info:ME("ℹ"),success:KE("✓"),warning:CE(sY(oY(" WARN "))),error:IE(sY(oY(" ERROR ")))},mT=new TJ("stacks"),m$=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}${$}`}},GJ=class extends m${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})}},O1=class extends m${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}},Y8=class extends m${code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}},f8=class extends m${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}},qJ=class extends m${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})}},Z8=class extends m${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}},W8=class extends m${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}},X1=class extends m${code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}},E8=class extends m${code="BROWSER_CONFIG_ERROR";constructor($,w,A,J){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:J})}},B8=class extends m${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}},s0={configNotFound($,w,A){return new GJ($,w,A)},configLoad($,w,A){return new O1($,w,A)},configValidation($,w,A){return new Y8($,w,A)},configMerge($,w,A,J){return new f8($,w,A,J)},envVar($,w,A,J){return new qJ($,w,A,J)},fileSystem($,w,A){return new Z8($,w,A)},typeGeneration($,w,A){return new W8($,w,A)},schemaValidation($,w,A){return new X1($,w,A)},browserConfig($,w,A,J){return new E8($,w,A,J)},plugin($,w,A){return new B8($,w,A)}},aE={replace:"replace",concat:"concat",smart:"smart"},sE=/^https?:\/\//,E0=new TJ("bunfig",{showTags:!0}),Q0=new M8,oE=Q$(Zw.cwd(),"config"),eE=Q$(Zw.cwd(),"src/generated")});tT=hJ.env.CLARITY_LOG_DIR||OH(lT(),"logs"),$B={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:tT,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},NJ={...$B},oR=(async()=>{try{let{loadConfig:$}=await gT().then(()=>bE),w=await $({name:"clarity",alias:"logging",defaultConfig:$B,cwd:hJ.cwd()});if(w)Object.assign(NJ,w)}catch{}return NJ})();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"},P=q$,eR=q$.red,rT=q$.green,$K=q$.yellow,aT=q$.blue,wK=q$.magenta,AK=q$.cyan,yE=q$.white,JK=q$.gray,sT=q$.bgRed,oT=q$.bgYellow,UK=q$.bgGray,LE=q$.bold,YK=q$.dim,fK=q$.italic,ZK=q$.underline,WK=q$.strikethrough,EK=q$.reset,eY={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},eT={debug:"\uD83D\uDD0D",info:aT("ℹ"),success:rT("✓"),warning:oT(yE(LE(" WARN "))),error:sT(yE(LE(" ERROR ")))};BK=new SJ("stacks");F0=class F0 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}${$}`}};AB=class AB extends F0{code="CONFIG_NOT_FOUND";constructor($,w,A){let J=A===void 0?[]:Array.isArray(A)?A.filter(Boolean):[A],U="";if(J.length===1)U=` or alias "${J[0]}"`;else if(J.length>1)U=` or aliases ${J.map((Y)=>`"${Y}"`).join(", ")}`;super(`Configuration "${$}"${U} not found`,{configName:$,alias:A,searchPaths:w,searchPathCount:w.length})}};RJ=class RJ extends F0{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}};JB=class JB extends F0{code="CONFIG_VALIDATION_ERROR";constructor($,w,A){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:A,validationErrors:w,errorCount:w.length})}};UB=class UB extends F0{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}};I8=class I8 extends F0{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})}};YB=class YB extends F0{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}};fB=class fB extends F0{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}};KJ=class KJ extends F0{code="SCHEMA_VALIDATION_ERROR";constructor($,w,A){super(`Schema validation failed${A?` for config "${A}"`:""}`,{schemaPath:$,configName:A,validationErrors:w,errorCount:w.length})}};ZB=class ZB extends F0{code="BROWSER_CONFIG_ERROR";constructor($,w,A,J){super(`Failed to fetch configuration from "${$}": ${w} ${A}`,{endpoint:$,status:w,statusText:A,configName:J})}};WB=class WB extends F0{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}};aw={configNotFound($,w,A){return new AB($,w,A)},configLoad($,w,A){return new RJ($,w,A)},configValidation($,w,A){return new JB($,w,A)},configMerge($,w,A,J){return new UB($,w,A,J)},envVar($,w,A,J){return new I8($,w,A,J)},fileSystem($,w,A){return new YB($,w,A)},typeGeneration($,w,A){return new fB($,w,A)},schemaValidation($,w,A){return new KJ($,w,A)},browserConfig($,w,A,J){return new ZB($,w,A,J)},plugin($,w,A){return new WB($,w,A)}};fG=/^https?:\/\//;O0=new SJ("bunfig",{showTags:!0});hK=new zB;FK=e$(CJ.cwd(),"config"),jK=e$(CJ.cwd(),"src/generated"),HB={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:QY.join(kY.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:QY.join(kY.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:QY.join(kY.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},J$=HB,B0={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"},I={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"},pw={info:(...$)=>console.log(...$),warn:(...$)=>console.warn(...$),success:(...$)=>console.log(...$),error:(...$)=>console.error(...$),debug:(...$)=>console.debug(...$)};hG=BG(WG);FG=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),jG=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/;h0={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"};QG={platform:"darwin",async addCertificate($,w){if(await kG($,w?.verbose)){M(I.TRUST,"Certificate is already trusted, skipping trust store update",w?.verbose),pw.success("Certificate is already trusted in system keychain");return}M(I.TRUST,"Adding certificate to macOS keychain",w?.verbose),await a0(`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ${$}`)},async removeCertificate($,w,A){let J=A||J$.commonName;M(I.TRUST,`Removing certificate ${J} from macOS keychain`,w?.verbose);try{await a0(`sudo security delete-certificate -c "${J}" /Library/Keychains/System.keychain`),M(I.TRUST,`Removed certificate ${J} from macOS keychain`,w?.verbose)}catch(U){throw M(I.TRUST,`Error removing certificate: ${U}`,w?.verbose),U}}},xG={platform:"win32",async addCertificate($,w){M(I.TRUST,"Adding certificate to Windows certificate store",w?.verbose),await a0(`certutil -f -v -addstore -enterprise Root ${$}`)},async removeCertificate($,w,A){let J=A||J$.commonName;M(I.TRUST,`Removing certificate ${J} from Windows certificate store`,w?.verbose);try{await a0(`certutil -delstore -enterprise Root "${J}"`),M(I.TRUST,`Removed certificate ${J} from Windows certificate store`,w?.verbose)}catch(U){throw M(I.TRUST,`Error removing certificate: ${U}`,w?.verbose),U}}},PG={platform:"linux",async addCertificate($,w){M(I.TRUST,"Adding certificate to Linux certificate store",w?.verbose);let A=IJ.homedir(),J=B0.LINUX_CERT_DB_FILENAME,U=B0.LINUX_TRUST_ARGS;M(I.TRUST,`Searching for certificate databases in ${A}`,w?.verbose);let Y=F8(A,J);if(Y.length===0){pw.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let f of Y){M(I.TRUST,`Processing certificate database in ${f}`,w?.verbose);try{M(I.TRUST,`Attempting to delete existing cert for ${J$.commonName}`,w?.verbose),await a0(`certutil -d sql:${f} -D -n ${J$.commonName}`)}catch(W){M(I.TRUST,`Warning: Error deleting existing cert: ${W}`,w?.verbose),console.warn(`Error deleting existing cert: ${W}`)}M(I.TRUST,`Adding new certificate to ${f}`,w?.verbose),await a0(`certutil -d sql:${f} -A -t ${U} -n ${J$.commonName} -i ${$}`),pw.info(`Cert added to ${f}`)}},async removeCertificate($,w,A){let J=A||J$.commonName;M(I.TRUST,`Removing certificate ${J} from Linux certificate store`,w?.verbose);let U=IJ.homedir(),Y=B0.LINUX_CERT_DB_FILENAME;M(I.TRUST,`Searching for certificate databases in ${U}`,w?.verbose);let f=F8(U,Y);if(f.length===0){pw.warn("No certificate databases found. Cannot remove certificate.");return}for(let W of f){M(I.TRUST,`Processing certificate database in ${W}`,w?.verbose);try{await a0(`certutil -d sql:${W} -D -n "${J}"`),pw.info(`Cert removed from ${W}`)}catch(Z){M(I.TRUST,`Error removing cert from ${W}: ${Z}`,w?.verbose),console.warn(`Error removing cert from ${W}: ${Z}`)}}}},bG={darwin:QG,win32:xG,linux:PG}});var OB=X$(()=>{VB()});import{homedir as _8}from"node:os";import{join as D8,resolve as AM}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",iG,k8;var Q8=X$(()=>{XY();iG={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:D8(_8(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:D8(_8(),".stacks","ssl","stacks.localhost.crt"),keyPath:D8(_8(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0},k8=iG});import{execSync as cG}from"node:child_process";function XB($){return($.includes("=")?$.split("=").pop():$).replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase()}function OJ($){try{let w=cG(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`,{encoding:"utf8"});return XB(w)}catch{return null}}var x8=()=>{};import{existsSync as _B,statSync as DB}from"fs";import{existsSync as $f,mkdirSync as gG,readdirSync as lG,writeFileSync as tG}from"fs";import{homedir as ow}from"os";import{dirname as kB,resolve as b$}from"path";import Ww from"process";import{join as pG,relative as rG,resolve as QB}from"path";import lJ from"process";import{existsSync as Th,mkdirSync as HM,readdirSync as TM,writeFileSync as GM}from"fs";import{homedir as P8}from"os";import{dirname as RM,resolve as P$}from"path";import Q1 from"process";import{join as aG,relative as sG,resolve as xB}from"path";import tJ from"process";import{existsSync as Gh,mkdirSync as yM,readdirSync as LM,writeFileSync as SM}from"fs";import{dirname as OM,resolve as pJ}from"path";import wf from"process";import{Buffer as o0}from"buffer";import{createCipheriv as oG,createDecipheriv as eG,randomBytes as b8}from"crypto";import{closeSync as i8,createReadStream as PB,createWriteStream as $2,existsSync as c8,fsyncSync as bB,openSync as iB,writeFileSync as w2}from"fs";import{access as A2,constants as cB,mkdir as J2,readdir as XJ,rename as uB,stat as ew,unlink as _J,writeFile as u8}from"fs/promises";import{join as $1}from"path";import L$ from"process";import{pipeline as U2}from"stream/promises";import{createGzip as vB}from"zlib";import w1 from"process";import b0 from"process";import{Buffer as x0}from"buffer";import{createCipheriv as Y2,createDecipheriv as f2,randomBytes as v8}from"crypto";import{closeSync as n8,createReadStream as nB,createWriteStream as Z2,existsSync as DJ,fsyncSync as mB,openSync as dB,writeFileSync as W2}from"fs";import{access as E2,constants as gB,mkdir as B2,readdir as kJ,rename as lB,stat as A1,unlink as QJ,writeFile as m8}from"fs/promises";import{isAbsolute as h2,join as J1,resolve as F2}from"path";import X from"process";import{pipeline as j2}from"stream/promises";import{createGzip as tB}from"zlib";import U1 from"process";import i0 from"process";import xJ from"process";import{existsSync as PJ}from"fs";import{resolve as d8}from"path";import{existsSync as z2}from"fs";import{existsSync as H2,readdirSync as T2}from"fs";import{extname as g8,resolve as pB}from"path";import G2 from"process";import{join as q7,relative as N7,resolve as fh}from"path";import wU from"process";import{Buffer as P0}from"buffer";import{createCipheriv as M7,createDecipheriv as I7,randomBytes as a8}from"crypto";import{closeSync as s8,createReadStream as Zh,createWriteStream as C7,existsSync as iJ,fsyncSync as Wh,openSync as Eh,writeFileSync as y7}from"fs";import{access as L7,constants as Bh,mkdir as S7,readdir as cJ,rename as hh,stat as Y1,unlink as uJ,writeFile as o8}from"fs/promises";import{isAbsolute as V7,join as f1,resolve as O7}from"path";import _ from"process";import{pipeline as X7}from"stream/promises";import{createGzip as Fh}from"zlib";import Z1 from"process";import c0 from"process";function nG($,w){this[$]=vG.bind(null,w)}class hf{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 U=this.generateKey($,A),Y=J??this.options.ttl,f=this.estimateSize(w);this.cache.set(U,{value:w,timestamp:new Date,ttl:Y,hits:0,size:f}),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(!_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,J){try{let U=_B(A)?DB(A):null,Y=U?U.mtime:new Date;this.set($,{value:w,fileTimestamp:Y},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,U)=>J+U.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 Ff{metrics=[];maxMetrics=1000;async track($,w,A={}){let J=performance.now(),U=new Date;try{let Y=await w(),f=performance.now()-J;return this.recordMetric({operation:$,duration:f,timestamp:U,...A}),Y}catch(Y){let f=performance.now()-J;throw this.recordMetric({operation:`${$}:error`,duration:f,timestamp:U,...A}),Y}}recordMetric($){if(this.metrics.push($),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats($){let w=$?this.metrics.filter((U)=>U.operation===$):this.metrics;if(w.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let A=w.map((U)=>U.duration),J=A.reduce((U,Y)=>U+Y,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 q2($,w={}){let J=Object.keys(w).sort().map((U)=>`${U}:${w[U]}`).join("|");return J?`${$}:${J}`:$}function N2($,w){try{return JSON.stringify($)===JSON.stringify(w)}catch{return $===w}}function R2($){return $.getStats().size*2}function jf($,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 U of $)if(a(U)&&"name"in U){if(!J.find((f)=>a(f)&&("name"in f)&&f.name===U.name))J.push(U)}else if(a(U)&&"path"in U){if(!J.find((f)=>a(f)&&("path"in f)&&f.path===U.path))J.push(U)}else if(!J.some((Y)=>rJ(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);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 U=w[J];if(U===null||U===void 0)continue;else if(a(U)&&a(A[J]))A[J]=jf(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&a(U[0])&&a(A[J][0])){let Y=[...U];for(let f of A[J])if(a(f)&&"name"in f){if(!Y.find((Z)=>a(Z)&&("name"in Z)&&Z.name===f.name))Y.push(f)}else if(a(f)&&"path"in f){if(!Y.find((Z)=>a(Z)&&("path"in Z)&&Z.path===f.path))Y.push(f)}else if(!Y.some((W)=>rJ(W,f)))Y.push(f);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let f of A[J])if(!Y.includes(f))Y.push(f);A[J]=Y}else A[J]=U;else A[J]=U}return A}function rJ($,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(!rJ($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!rJ($[U],w[U]))return!1}return!0}return!1}function a($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function K2($,w){if(!Gh($))return null;try{let A=await import($),J=A.default||A;if(typeof J!=="object"||J===null||Array.isArray(J))return null;try{return jf(w,J)}catch{return null}}catch{return null}}async function M2({name:$="",cwd:w,defaultConfig:A}){let J=w||wf.cwd(),U=[".ts",".js",".mjs",".cjs",".json"],Y=[`${$}.config`,`.${$}.config`,$,`.${$}`];for(let f of Y)for(let W of U){let Z=pJ(J,`${f}${W}`),E=await K2(Z,A);if(E!==null)return E}try{let f=pJ(J,"package.json");if(Gh(f)){let Z=(await import(f))[$];if(Z&&typeof Z==="object"&&!Array.isArray(Z))try{return jf(A,Z)}catch{}}}catch{}return A}function I2($,w={}){let A=tJ.cwd();while(A.includes("storage"))A=xB(A,"..");let J=xB(A,$||"");if(w?.relative)return sG(tJ.cwd(),J);return J}async function C2(){try{let $=await M2({name:"clarity",defaultConfig:nJ,cwd:tJ.cwd(),endpoint:"",headers:{}});return{...nJ,...$}}catch{return nJ}}function w$(){if(b0.env.NODE_ENV==="test"||b0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function y2(){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 qh{async format($){let w=await y2(),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:w1.pid,hostname:w(),environment:w1.env.NODE_ENV||"development",platform:w1.platform,version:w1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:w1.env.NODE_ENV||w1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class aJ{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={...Jf},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new qh,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},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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig($){if(!$.fingersCrossedEnabled&&$.fingersCrossed)return{...mJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...mJ};return{...mJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:Jf.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 U,Y=0,f=3,W=1000;while(Y<f)try{try{try{await A2(this.config.logDirectory,cB.F_OK|cB.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await J2(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 Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:o0.from($);try{if(!c8(this.currentLogFile))await u8(this.currentLogFile,"",{mode:420});if(U=iB(this.currentLogFile,"a",420),w2(U,Z,{flag:"a"}),bB(U),U!==void 0)i8(U),U=void 0;if((await ew(this.currentLogFile)).size===0){if(await u8(this.currentLogFile,Z,{flag:"w",mode:420}),(await ew(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let B=E;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(Y<f-1){let h=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${f}:`,h);let j=W*2**Y;await new Promise((F)=>setTimeout(F,j)),Y++;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(U!==void 0)try{i8(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(Z){if(Y===f-1){let B=Z,h=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),Z}Y++;let E=W*2**(Y-1);await new Promise((B)=>setTimeout(B,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 $1(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return $1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return $1(this.config.logDirectory,`${this.name}-${$}.log`)}setupRotation(){if(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 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((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,W],[,Z])=>Z.createdAt.getTime()-W.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,f=Math.max(1,Y);if(U.length>f)for(let[W]of U.slice(f))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return b8(16).toString("hex")}generateKey(){return b8(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=b8(16),J=oG("aes-256-gcm",w,A),U=o0.concat([J.update($,"utf8"),J.final()]),Y=J.getAuthTag();return{encrypted:o0.concat([A,U,Y]),iv:A}}async compressData($){return new Promise((w,A)=>{let J=vB(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(o0.from(o0.concat(U)))),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 ew(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 U=await XJ(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await ew(A).catch(()=>null))try{if(await uB(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await _J(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await u8(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await ew(A).catch(()=>null))await uB(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await XJ(this.config.logDirectory)).filter((f)=>f.startsWith(this.name)).sort((f,W)=>W.localeCompare(f));for(let f of Y.slice(w.maxFiles))await _J($1(this.config.logDirectory,f))}}}async compressLogFile($,w){let A=PB($),J=$2(w),U=vB();await U2(A,U,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()})),c8(this.currentLogFile))try{let $=iB(this.currentLogFile,"r+");bB($),i8($)}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 w=(await XJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await _J($1(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?l.gray($.toLocaleTimeString()):$.toLocaleTimeString()}formatConsoleMessage($){let{timestamp:w,icon:A="",tag:J="",message:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=L$.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${l.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}async log($,w,...A){let J=new Date,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);if(this.fancy&&!w$()){let E=Vh[$],B=this.options.showTags!==!1&&this.name?l.gray(this.formatTag(this.name)):"",h;switch($){case"debug":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:l.gray(f),level:$}),console.error(h);break;case"info":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.error(h);break;case"success":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:l.green(f),level:$}),console.error(h);break;case"warning":h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.warn(h);break;case"error":if(h=this.formatConsoleMessage({timestamp:U,icon:E,tag:B,message:f,level:$}),console.error(h),W){let j=W.split(`
|
|
129
|
+
`);for(let F of j)if(F.trim()&&!F.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:l.gray(` ${F}`),level:$,showTimestamp:!1}))}break}}else if(!w$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}if(!this.shouldLog($))return;let Z=`${Y} ${this.environment}.${$.toUpperCase()}: ${f}
|
|
130
|
+
`;if(W)Z+=`${W}
|
|
131
|
+
`;Z=Z.replace(this.ANSI_PATTERN,""),await this.writeToFile(Z)}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(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),E=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
|
|
132
|
+
`,E=E.replace(this.ANSI_PATTERN,""),this.fancy&&!w$()){let B=this.options.showTags!==!1&&this.name?l.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:l.green("✓"),tag:B,message:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!w$())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 aJ(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(!c8(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 J=o0.isBuffer($)?$:o0.from($,"base64"),U=J.slice(0,16),Y=J.slice(-16),f=J.slice(16,-16),W=eG("aes-256-gcm",A,U);return W.setAuthTag(Y),o0.concat([W.update(f),W.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 Y=$.split(`
|
|
133
|
+
`),f=Math.max(...Y.map((B)=>B.length))+2,W=`┌${"─".repeat(f)}┐`,Z=`└${"─".repeat(f)}┘`,E=Y.map((B)=>{let h=" ".repeat(f-B.length-2);return`│ ${B}${h} │`});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(W)})),E.forEach((B)=>console.error(this.formatConsoleMessage({timestamp:A,message:l.cyan(B),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:A,message:l.cyan(Z),showTimestamp:!1}))}else if(!w$())console.error(`${J} ${this.environment}.INFO: [BOX] ${$}`);let U=`${J} ${this.environment}.INFO: [BOX] ${$}
|
|
134
|
+
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(U)}async prompt($){if(w$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${l.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=J.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(U==="y"||U==="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,W=0;if(A=$.replace(f,(Z,E)=>{if(E==="%")return"%";if(W>=w.length)return Z;let B=w[W++];switch(E){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 Z}}),W<w.length)A+=` ${w.slice(W).map((Z)=>typeof Z==="object"?JSON.stringify(Z,null,2):String(Z)).join(" ")}`}if(this.fancy&&!w$()){let f=this.options.showTags!==!1&&this.name?l.gray(this.formatTag(this.name)):"",W=l.blue("◐");console.error(`${W} ${f} ${l.cyan(A)}`)}let Y=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${A}
|
|
135
|
+
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(Y)}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:(f,W)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||w$())return;if(this.activeProgressBar.current=Math.max(0,Math.min($,f)),W!==void 0)this.activeProgressBar.message=W;let Z=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,Z)},finish:(f)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||w$())return;if(this.activeProgressBar.current=this.activeProgressBar.total,f!==void 0)this.activeProgressBar.message=f;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(f,W="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||w$())return;L$.stdout.write(`${"\r".padEnd(L$.stdout.columns||80)}\r`),this.log(W,f),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar($,w=!1){if(!this.enabled||!this.fancy||w$()||!L$.stdout.isTTY)return;let A=Math.min(100,Math.max(0,Math.round($.current/$.total*100))),J=Math.round($.barLength*A/100),U=$.barLength-J,Y=l.green("━".repeat(J)),f=l.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=w||A===100?l.green("✓"):l.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${l.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=L$.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,L$.stdout.write($.lastRenderedLine),w)L$.stdout.write(`
|
|
136
|
+
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||w$()||!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(w$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await XJ(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=$1(this.config.logDirectory,J);if($.before)try{if((await ew(Y)).mtime>=$.before)continue}catch(f){console.error(`Failed to get stats for file ${Y}:`,f);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 _J(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}function vJ($,w){if(Array.isArray(w)&&Array.isArray($)&&w.length===2&&$.length===2&&m(w[0])&&"id"in w[0]&&w[0].id===3&&m(w[1])&&"id"in w[1]&&w[1].id===4)return w;if(m(w)&&m($)&&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(m($)&&"arr"in $&&Array.isArray($.arr)&&m(w)&&"arr"in w&&Array.isArray(w.arr))return w;if(w.length>0&&$.length>0&&m(w[0])&&m($[0])){let J=[...w];for(let U of $)if(m(U)&&"name"in U){if(!J.find((f)=>m(f)&&("name"in f)&&f.name===U.name))J.push(U)}else if(m(U)&&"path"in U){if(!J.find((f)=>m(f)&&("path"in f)&&f.path===U.path))J.push(U)}else if(!J.some((Y)=>sJ(Y,U)))J.push(U);return J}if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}if(!m(w)||!m($))return w;let A={...$};for(let J in w)if(Object.prototype.hasOwnProperty.call(w,J)){let U=w[J];if(U===null||U===void 0)continue;else if(m(U)&&m(A[J]))A[J]=vJ(A[J],U);else if(Array.isArray(U)&&Array.isArray(A[J]))if(U.length>0&&A[J].length>0&&m(U[0])&&m(A[J][0])){let Y=[...U];for(let f of A[J])if(m(f)&&"name"in f){if(!Y.find((Z)=>m(Z)&&("name"in Z)&&Z.name===f.name))Y.push(f)}else if(m(f)&&"path"in f){if(!Y.find((Z)=>m(Z)&&("path"in Z)&&Z.path===f.path))Y.push(f)}else if(!Y.some((W)=>sJ(W,f)))Y.push(f);A[J]=Y}else if(U.every((Y)=>typeof Y==="string")&&A[J].every((Y)=>typeof Y==="string")){let Y=[...U];for(let f of A[J])if(!Y.includes(f))Y.push(f);A[J]=Y}else A[J]=U;else A[J]=U}return A}function zf($,w,A="replace"){if(w===null||w===void 0)return $;if(Array.isArray(w))return A==="replace"?w:vJ($,w);if(Array.isArray($))return A==="replace"?w:vJ($,w);if(!m(w)||!m($))return w;let J={...$};for(let U of Object.keys(w)){if(!Object.prototype.hasOwnProperty.call(w,U))continue;let Y=w[U],f=J[U];if(Y===null||Y===void 0)continue;if(Array.isArray(Y)||Array.isArray(f))if(A==="replace")J[U]=Y;else J[U]=vJ(f,Y);else if(m(Y)&&m(f))J[U]=zf(f,Y,A);else J[U]=Y}return J}function sJ($,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(!sJ($[A],w[A]))return!1;return!0}if(m($)&&m(w)){let A=Object.keys($),J=Object.keys(w);if(A.length!==J.length)return!1;for(let U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!sJ($[U],w[U]))return!1}return!0}return!1}function m($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}async function bJ($,w,A="replace"){if(!Th($))return null;try{let J=await import($),U=J.default||J;if(typeof U!=="object"||U===null||Array.isArray(U))return null;try{return zf(w,U,A)}catch{return null}}catch{return null}}function L2($,w,A=!1){if(!$)return w;let J=$.toUpperCase().replace(/-/g,"_"),U={...w};function Y(f,W=[]){let Z={...f};for(let[E,B]of Object.entries(f)){let h=[...W,E],j=(H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase(),F=`${J}_${h.map(j).join("_")}`,T=`${J}_${h.map((H)=>H.toUpperCase()).join("_")}`;if(A)V$.info(`Checking environment variable ${F} for config ${$}.${h.join(".")}`);if(typeof B==="object"&&B!==null&&!Array.isArray(B))Z[E]=Y(B,h);else{let H=Q1.env[F]||Q1.env[T];if(H!==void 0){if(A)V$.info(`Using environment variable ${H?F:T} for config ${$}.${h.join(".")}`);if(typeof B==="number")Z[E]=Number(H);else if(typeof B==="boolean")Z[E]=H.toLowerCase()==="true";else if(Array.isArray(B))try{let G=JSON.parse(H);if(Array.isArray(G))Z[E]=G;else Z[E]=H.split(",").map((q)=>q.trim())}catch{Z[E]=H.split(",").map((G)=>G.trim())}else Z[E]=H}}}return Z}return Y(U)}async function S2({name:$="",alias:w,cwd:A,configDir:J,defaultConfig:U,verbose:Y=!1,checkEnv:f=!0,arrayStrategy:W="replace"}){let Z=f&&typeof U==="object"&&U!==null&&!Array.isArray(U)?L2($,U,Y):U,E=A||Q1.cwd(),B=[".ts",".js",".mjs",".cjs",".json"];if(Y)V$.info(`Loading configuration for "${$}"${w?` (alias: "${w}")`:""} from ${E}`);let h=[$,`.${$}`].filter(Boolean),j=[`${$}.config`,`.${$}.config`].filter(Boolean),F=w?[w,`.${w}`]:[],T=w?[`${w}.config`,`.${w}.config`]:[],H=Array.from(new Set([E,P$(E,"config"),P$(E,".config"),J?P$(E,J):void 0].filter(Boolean)));for(let G of H){if(Y)V$.info(`Searching for configuration in: ${G}`);let N=[P$(E,"config"),P$(E,".config")].concat(J?[P$(E,J)]:[]).includes(G)?[...h,...j,...F,...T]:[...j,...h,...T,...F];for(let K of N)for(let C of B){let y=P$(G,`${K}${C}`),S=await bJ(y,Z,W);if(S!==null){if(Y)V$.success(`Configuration loaded from: ${y}`);return S}}}if($){let G=P$(P8(),".config",$),q=["config",`${$}.config`];if(w)q.push(`${w}.config`);if(Y)V$.info(`Checking user config directory: ${G}`);for(let N of q)for(let K of B){let C=P$(G,`${N}${K}`),y=await bJ(C,Z,W);if(y!==null){if(Y)V$.success(`Configuration loaded from user config directory: ${C}`);return y}}}if($){let G=P$(P8(),".config"),q=[`.${$}.config`];if(w)q.push(`.${w}.config`);if(Y)V$.info(`Checking user config directory for dotfile configs: ${G}`);for(let N of q)for(let K of B){let C=P$(G,`${N}${K}`),y=await bJ(C,Z,W);if(y!==null){if(Y)V$.success(`Configuration loaded from user config directory dotfile: ${C}`);return y}}}if($){let G=P8(),q=[`.${$}.config`,`.${$}`];if(w)q.push(`.${w}.config`),q.push(`.${w}`);if(Y)V$.info(`Checking user home directory for dotfile configs: ${G}`);for(let N of q)for(let K of B){let C=P$(G,`${N}${K}`),y=await bJ(C,Z,W);if(y!==null){if(Y)V$.success(`Configuration loaded from user home directory: ${C}`);return y}}}try{let G=P$(E,"package.json");if(Th(G)){let q=await import(G),N=q[$];if(!N&&w){if(N=q[w],N&&Y)V$.success(`Using alias "${w}" configuration from package.json`)}if(N&&typeof N==="object"&&!Array.isArray(N))try{if(Y)V$.success(`Configuration loaded from package.json: ${N===q[$]?$:w}`);return zf(Z,N,W)}catch(K){if(Y)V$.warn("Failed to merge package.json config:",K)}}}catch(G){if(Y)V$.warn("Failed to load package.json:",G)}if(Y)V$.info(`No configuration found for "${$}"${w?` or alias "${w}"`:""}, using default configuration with environment variables`);return Z}function V2($,w={}){let A=lJ.cwd();while(A.includes("storage"))A=QB(A,"..");let J=QB(A,$||"");if(w?.relative)return rG(lJ.cwd(),J);return J}async function O2(){try{let $=await S2({name:"clarity",alias:"logging",defaultConfig:dJ,cwd:lJ.cwd()});return{...dJ,...$||{}}}catch{return dJ}}function j$(){if(i0.env.NODE_ENV==="test"||i0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function X2(){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 Nh{async format($){let w=await X2(),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:U1.pid,hostname:w(),environment:U1.env.NODE_ENV||"development",platform:U1.platform,version:U1.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:U1.env.NODE_ENV||U1.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class oJ{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={...Uf},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new Nh,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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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{...gJ,...$.fingersCrossed};if(!$.fingersCrossedEnabled)return null;if(!$.fingersCrossed)return{...gJ};return{...gJ,...$.fingersCrossed}}normalizeOptions($){let w={format:"json",level:"info",logDirectory:Uf.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!j$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let U,Y=0,f=3,W=1000;while(Y<f)try{try{try{await E2(this.config.logDirectory,gB.F_OK|gB.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await B2(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 Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:x0.from($);try{if(!DJ(this.currentLogFile))await m8(this.currentLogFile,"",{mode:420});if(U=dB(this.currentLogFile,"a",420),W2(U,Z,{flag:"a"}),mB(U),U!==void 0)n8(U),U=void 0;if((await A1(this.currentLogFile)).size===0){if(await m8(this.currentLogFile,Z,{flag:"w",mode:420}),(await A1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let B=E;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(Y<f-1){let h=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${f}:`,h);let j=W*2**Y;await new Promise((F)=>setTimeout(F,j)),Y++;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(U!==void 0)try{n8(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(Z){if(Y===f-1){let B=Z,h=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),Z}Y++;let E=W*2**(Y-1);await new Promise((B)=>setTimeout(B,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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 J1(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 J1(this.config.logDirectory,`${this.name}.log`);let $=new Date().toISOString().split("T")[0];return J1(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,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,W],[,Z])=>Z.createdAt.getTime()-W.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,f=Math.max(1,Y);if(U.length>f)for(let[W]of U.slice(f))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return v8(16).toString("hex")}generateKey(){return v8(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=v8(16),J=Y2("aes-256-gcm",w,A),U=x0.isBuffer($)?$:x0.from($,"utf8"),Y=J.update(U),f=J.final(),W=Y.length+f.length,Z=J.getAuthTag(),E=x0.allocUnsafe(16+W+16);return A.copy(E,0),Y.copy(E,16),f.copy(E,16+Y.length),Z.copy(E,16+W),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=tB(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(x0.from(x0.concat(U)))),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(j$())return;if(!this.shouldWriteToFile())return;let $=await A1(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 U=await kJ(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await A1(A).catch(()=>null))try{if(await lB(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await QJ(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await m8(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await A1(A).catch(()=>null))await lB(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await kJ(this.config.logDirectory)).filter((f)=>f.startsWith(this.name)).sort((f,W)=>W.localeCompare(f));for(let f of Y.slice(w.maxFiles))await QJ(J1(this.config.logDirectory,f))}}}async compressLogFile($,w){let A=nB($),J=Z2(w),U=tB();await j2(A,U,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()})),DJ(this.currentLogFile))try{let $=dB(this.currentLogFile,"r+");mB($),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(!j$()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let w=(await kJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await QJ(J1(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()?Q.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||j$())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:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=X.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${Q.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=Q.underline(Q.blue(J)),f=this.toAbsoluteFilePath(U);if(f&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(f)}`,Z="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${W}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),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(j$())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(h2(w)||w.startsWith("./")||w.startsWith("../"))w=F2(w);else return null;return DJ(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);let{consoleText:Z,fileText:E}=this.buildOutputTexts(f);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":Oh[$],j=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Q.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Q.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.error(F),W){let T=W.split(`
|
|
137
|
+
`);for(let H of T)if(H.trim()&&!H.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:Q.gray(` ${H}`),level:$,showTimestamp:!1}))}break}}else if(!j$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}if(!this.shouldLog($))return;let B=`${Y} ${this.environment}.${$.toUpperCase()}: ${E}
|
|
138
|
+
`;if(W)B+=`${W}
|
|
139
|
+
`;if(B=B.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(B)}progress($,w=""){let A={update:(W,Z)=>{},finish:(W)=>{},interrupt:(W,Z)=>{}};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()&&!j$()&&X.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(W,Z)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,W),this.activeProgressBar.total),Z!==void 0)this.activeProgressBar.message=Z;if(this.shouldStyleConsole()&&!j$()&&X.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(W)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,W)},interrupt:(W,Z="info")=>{if(!j$()&&X.stdout.isTTY)X.stdout.write(`
|
|
140
|
+
`);if(this[Z==="warning"?"warn":Z](W),this.activeProgressBar&&this.shouldStyleConsole()&&!j$()&&X.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(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),E=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
|
|
141
|
+
`,E=E.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let B=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:W,icon:this.options.showIcons===!1?"":Q.green("✓"),tag:B,message:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!j$())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 oJ(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(!DJ(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return nB(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=x0.isBuffer($)?$:x0.from($,"base64"),U=J.subarray(0,16),Y=J.subarray(J.length-16),f=J.subarray(16,J.length-16),W=f2("aes-256-gcm",A,U);W.setAuthTag(Y);let Z=W.update(f),E=W.final(),B=Z.length+E.length,h=x0.allocUnsafe(B);return Z.copy(h,0),E.copy(h,Z.length),h.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 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),J=this.formatFileTimestamp(w),{consoleText:U,fileText:Y}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=U.split(`
|
|
142
|
+
`),Z=Math.max(...W.map((j)=>j.length))+2,E=`┌${"─".repeat(Z)}┐`,B=`└${"─".repeat(Z)}┘`,h=W.map((j)=>{return this.formatConsoleMessage({timestamp:A,message:Q.cyan(j),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:Q.cyan(E),showTimestamp:!1})),h.forEach((j)=>console.error(j)),console.error(this.formatConsoleMessage({timestamp:A,message:Q.cyan(B),showTimestamp:!1}))}else if(!j$())console.error(`${J} ${this.environment}.INFO: [BOX] ${Y}`);let f=`${J} ${this.environment}.INFO: [BOX] ${Y}
|
|
143
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(f)}async prompt($){if(j$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${Q.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=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(U==="y"||U==="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 Z=/%([sdijfo%])/g,E=0;if(A=$.replace(Z,(B,h)=>{if(h==="%")return"%";if(E>=w.length)return B;let j=w[E++];switch(h){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 B}}),E<w.length)A+=` ${w.slice(E).map((B)=>typeof B==="object"?JSON.stringify(B,null,2):String(B)).join(" ")}`}let{consoleText:J,fileText:U}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${Q.blue("◐")} `;console.error(`${E}${Z} ${Q.cyan(J)}`)}let W=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
144
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(W)}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),U=$.barLength-J,Y=Q.green("━".repeat(J)),f=Q.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=this.options.showIcons===!1?"":w||A===100?Q.green("✓"):Q.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${Q.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=X.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,X.stdout.write($.lastRenderedLine),w)X.stdout.write(`
|
|
145
|
+
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||j$()||!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(j$()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let w=await kJ(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=J1(this.config.logDirectory,J);if($.before)try{if((await A1(Y)).mtime>=$.before)continue}catch(f){console.error(`Failed to get stats for file ${Y}:`,f);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 QJ(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}async function Rh($,w={}){let{maxRetries:A=3,retryDelay:J=1000,isRetryable:U=()=>!0,fallback:Y}=w,f=Error("Unknown error occurred");for(let W=0;W<=A;W++)try{return await $()}catch(Z){if(f=Z instanceof Error?Z:Error(String(Z)),W===A||!U(f))break;if(J>0)await new Promise((E)=>setTimeout(E,J))}if(Y!==void 0)return Y;throw f instanceof Error?f:Error(`Unknown error: ${String(f)}`)}function Kh($){return $ instanceof l$}function _2($){return $ instanceof eJ}function D2($){if(Kh($))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 JU{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:($,w)=>w==="boolean"||["true","false","1","0","yes","no"].includes($.toLowerCase()),parse:($)=>{let w=$.toLowerCase();return["true","1","yes"].includes(w)}},{name:"number",canParse:($,w)=>w==="number"||!Number.isNaN(Number($))&&!Number.isNaN(Number.parseFloat($)),parse:($)=>{let w=Number($);if(Number.isNaN(w))throw TypeError(`Cannot parse "${$}" as number`);return w}},{name:"array",canParse:($,w)=>w==="array"||$.startsWith("[")||$.includes(","),parse:($)=>{try{let w=JSON.parse($);if(Array.isArray(w))return w}catch{}return $.split(",").map((w)=>w.trim())}},{name:"json",canParse:($,w)=>w==="object"||($.startsWith("{")&&$.endsWith("}")||$.startsWith("[")&&$.endsWith("]")),parse:($)=>{try{return JSON.parse($)}catch(w){throw Error(`Cannot parse "${$}" as JSON: ${w}`)}}}]}async applyEnvironmentVariables($,w,A={}){let{prefix:J,useCamelCase:U=!0,useBackwardCompatibility:Y=!0,customParsers:f={},verbose:W=!1,trackPerformance:Z=!0}=A,E=async()=>{if(!$)return{config:w,source:{type:"environment",priority:50,timestamp:new Date}};let B=J||this.generateEnvPrefix($),h={...w};return this.processObject(h,[],B,{useCamelCase:U,useBackwardCompatibility:Y,customParsers:f,verbose:W,configName:$}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(Z)return b1.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[U,Y]of Object.entries($)){let f=[...w,U],W=f.map((B)=>this.formatEnvKey(B,J.useCamelCase)),Z=`${A}_${W.join("_")}`,E=J.useBackwardCompatibility?`${A}_${f.map((B)=>B.toUpperCase()).join("_")}`:null;if(J.verbose);if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.processObject(Y,f,A,J);else{let B=xJ.env[Z]||(E?xJ.env[E]:void 0);if(B!==void 0){if(J.verbose){let h=xJ.env[Z]?Z:E}try{$[U]=this.parseEnvironmentValue(B,typeof Y,Z,J.customParsers,J.configName)}catch(h){if(h instanceof $U)throw h;throw e0.envVar(Z,B,typeof Y,J.configName)}}}}}parseEnvironmentValue($,w,A,J,U){for(let[Y,f]of Object.entries(J))try{return f($)}catch{continue}for(let Y of this.defaultParsers)if(Y.canParse($,w))try{return Y.parse($)}catch{throw e0.envVar(A,$,`${w} (via ${Y.name} parser)`,U)}return $}getEnvironmentVariables($){let w={},A=$.toUpperCase();for(let[J,U]of Object.entries(xJ.env))if(J.startsWith(A)&&U!==void 0)w[J]=U;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(U){J.push(`Cannot parse value "${w}" as ${A}: ${U}`)}return{isValid:J.length===0,errors:J}}generateEnvVarDocs($,w,A={}){let{prefix:J,format:U="text"}=A,Y=J||this.generateEnvPrefix($),f=[];switch(this.extractEnvVarInfo(w,[],Y,f),U){case"markdown":return this.formatAsMarkdown(f,$);case"json":return JSON.stringify(f,null,2);default:return this.formatAsText(f,$)}}extractEnvVarInfo($,w,A,J){for(let[U,Y]of Object.entries($)){let f=[...w,U],W=`${A}_${f.map((Z)=>this.formatEnvKey(Z,!0)).join("_")}`;if(typeof Y==="object"&&Y!==null&&!Array.isArray(Y))this.extractEnvVarInfo(Y,f,A,J);else J.push({key:W,type:Array.isArray(Y)?"array":typeof Y,description:`Configuration for ${f.join(".")}`,example:this.generateExample(Y)})}}generateExample($){if(Array.isArray($))return JSON.stringify($);if(typeof $==="object"&&$!==null)return JSON.stringify($);return String($)}formatAsText($,w){let A=`Environment Variables for ${w}:
|
|
196
146
|
|
|
197
147
|
`;for(let J of $)A+=`${J.key}
|
|
198
148
|
`,A+=` Type: ${J.type}
|
|
@@ -204,41 +154,96 @@ export type ConfigOf = Config
|
|
|
204
154
|
`;A+=`| Variable | Type | Description | Example |
|
|
205
155
|
`,A+=`|----------|------|-------------|----------|
|
|
206
156
|
`;for(let J of $)A+=`| \`${J.key}\` | ${J.type} | ${J.description} | \`${J.example}\` |
|
|
207
|
-
`;return A}}function JT($,w,A={}){return yE($,w,A,new WeakMap)}function yE($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:h}=A;if(w===null||w===void 0)return Y?$:w;if(h){let Z=h($,w);if(Z!==void 0)return Z}if(Array.isArray(w)||Array.isArray($))return LE($,w,U,J);if(!e$(w)||!e$($))return w;return fT($,w,A,J)}function LE($,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 UT($,w);case"smart":return YT($,w,J);default:return w}return w}function UT($,w){let A=[...w];for(let J of $)if(!A.some((U)=>mY(U,J)))A.push(J);return A}function YT($,w,A){if(w.length===0)return $;if($.length===0)return w;if(e$(w[0])&&e$($[0]))return hT($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function hT($,w,A){let J=[...w];for(let U of $){if(!e$(U)){J.push(U);continue}let Y=["id","name","key","path","type"],h=!1;for(let Z of Y)if(Z in U){if(J.find((f)=>e$(f)&&(Z in f)&&f[Z]===U[Z])){h=!0;break}}if(!h)J.push(U)}return J}function fT($,w,A,J){let U=w;if(e$(U)&&J.has(U))return J.get(U);let Y={...$};if(e$(U))J.set(U,Y);for(let h in U){if(!Object.prototype.hasOwnProperty.call(U,h))continue;let Z=U[h],f=Y[h];if(A.skipNullish&&(Z===null||Z===void 0))continue;if(Z===null||Z===void 0){Y[h]=Z;continue}if(e$(Z)&&e$(f))Y[h]=yE(f,Z,A,J);else if(Array.isArray(Z)||Array.isArray(f))Y[h]=LE(f,Z,A.arrayMergeMode||"smart",J);else Y[h]=Z}return Y}function CE($,w,A="replace"){return JT($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function mY($,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(!mY($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!mY($[U],w[U]))return!1}return!0}return!1}function e$($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class SE{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:h=!0,verbose:Z=!1}=A;if(U){let E=oA.getWithFileCheck("file",$);if(E){if(Z)console.log(`Configuration loaded from cache: ${$}`);return E}}let f=async()=>{if(!uA($))return null;try{let E=`?t=${Date.now()}`,W=await import($+E),F=W.default||W,j="default"in W,B=Object.keys(W).length>0;if(!j&&!B)throw new hJ($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new hJ($,Error("Configuration must export a valid object"),"unknown");let T={config:CE(w,F,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)oA.setWithFileCheck("file",T,$,Y);return T}catch(E){throw E instanceof Error?mw.configLoad($,E):mw.configLoad($,Error(String(E)))}};if(h)return tY.track("loadFromPath",f,{path:$});return f()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let h of this.extensions)U.push(CY(w,`${Y}${h}`));return U}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 Y of J){if(!Y)continue;if(A.push(Y,`.${Y}.config`,`${Y}.config`,`.${Y}`),$)A.push(`${$}.${Y}.config`,`.${$}.${Y}.config`)}let U=new Set;return A.filter((Y)=>{if(!Y||U.has(Y))return!1;return U.add(Y),!0})}checkFileAccess($){return AT(async()=>{return uA($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!uA($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let h of this.extensions){let Z=CY($,`${Y}${h}`);if(await this.checkFileAccess(Z))J.push(Z)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let h of Y)if(this.looksLikeConfigFile(h)){let Z=CY($,h);if(await this.checkFileAccess(Z))J.push(Z)}}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(!uA($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}var ZT=/^https?:\/\//;class VE{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:h=[],trackPerformance:Z=!0,verbose:f=!1}=A,E=async()=>{let W=[],F=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:h,trackPerformance:Z,verbose:f};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...h],j);else return this.validateWithJSONSchema($,w,j)}catch(B){return W.push({path:"",message:`Validation failed: ${B}`,rule:"system"}),{isValid:!1,errors:W,warnings:F}}};if(Z)return await tY.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!v9(w))throw new fJ(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new fJ(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let h=Array.isArray($)?"array":typeof $,Z=Array.isArray(w.type)?w.type:[w.type];if(!Z.includes(h)){if(J.push({path:A,message:`Expected type ${Z.join(" or ")}, got ${h}`,expected:Z.join(" or "),actual:h,rule:"type"}),Y.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"}),Y.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 h=0;h<$.length;h++){let Z=A?`${A}[${h}]`:`[${h}]`;if(this.validateObjectAgainstSchema($[h],w.items,Z,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let h=$;if(Y.validateRequired&&w.required){for(let Z of w.required)if(!(Z in h)){if(J.push({path:A?`${A}.${Z}`:Z,message:`Missing required property '${Z}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[Z,f]of Object.entries(w.properties))if(Z in h){let E=A?`${A}.${Z}`:Z;if(this.validateObjectAgainstSchema(h[Z],f,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let Z=new Set(Object.keys(w.properties||{}));for(let f of Object.keys(h))if(!Z.has(f))U.push({path:A?`${A}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let h=this.getValueByPath($,Y.path),Z=this.validateWithRule(h,Y,Y.path);if(J.push(...Z),A.stopOnFirstError&&J.length>0)break}catch(h){J.push({path:Y.path,message:`Rule validation failed: ${h}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,h]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(h)})}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:ZT},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var S0=new jJ("bunfig",{showTags:!0});function ET($){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 DE{fileLoader=new SE;envProcessor=new Ah;validator=new VE;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...h}=$;try{if(A?.enabled){let f=this.checkCache(h.name||"",h);if(f)return f}let Z;try{Z=await this.loadConfigurationStrategies(h,!0,A)}catch(f){let E=h.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(E)throw f;Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`No configuration file found for "${h.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let W=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),F=!W&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),j=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(E&&(j||W))throw f;if(F&&(!E||!j))Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else Z={...await this.applyEnvironmentVariables(h.name||"",h.defaultConfig,h.checkEnv!==!1,h.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(U||Y)await this.validateConfiguration(Z.config,U,Y,h.name);if(A?.enabled&&Z)this.cacheResult(h.name||"",Z,A,h);if(J?.enabled){let f={operation:"loadConfig",duration:Date.now()-w,configName:h.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(f);if(J.slowThreshold&&f.duration>J.slowThreshold)S0.warn(`Slow configuration loading detected: ${f.duration}ms for ${h.name}`);Z.metrics=f}return Z}catch(Z){if(Z instanceof Error&&Z.name==="ConfigNotFoundError")throw Z;let f=Date.now()-w;throw S0.error(`Configuration loading failed after ${f}ms:`,[Z instanceof Error?Z:Error(String(Z))]),Z}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:h,defaultConfig:Z,checkEnv:f=!0,arrayStrategy:E="replace",verbose:W=!1}=$,F=Y||WJ.cwd(),j=[],B=await this.loadLocalConfiguration(J,U,F,h,Z,E,W,f,A);if(B)return j.push(...this.getLocalSearchPaths(J,U,F,h)),this.finalizeResult(B,j,f,J,W);let T=await this.loadHomeConfiguration(J,U,Z,E,W,f);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,f,J,W);let H=await this.loadPackageJsonConfiguration(J,U,F,Z,E,W,f);if(H)return j.push(s$(F,"package.json")),this.finalizeResult(H,j,f,J,W);if(j.push(...this.getAllSearchPaths(J,U,F,h)),w)throw mw.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,Z,f,W),warnings:[`No configuration file found for "${J}"${ET(U)}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,h,Z,f){let E=Z?vA($,U,h):U,W=this.getLocalDirectories(A,J);for(let F of W){if(h)S0.info(`Searching for configuration in: ${F}`);let j=this.fileLoader.generateConfigPaths($,F,w),B=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:h,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(B){if(h)S0.success(`Configuration loaded from: ${B.source.path}`);return B}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let h=Y?vA($,A,U):A,Z=[s$(Ow(),".config",$),s$(Ow(),".config"),Ow()];for(let f of Z){if(U)S0.info(`Checking home directory: ${f}`);let E=this.fileLoader.generateConfigPaths($,f,w),W=await this.fileLoader.tryLoadFromPaths(E,h,{arrayStrategy:J,verbose:U});if(W){if(U)S0.success(`Configuration loaded from home directory: ${W.source.path}`);return W}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,h){let Z=h?vA($,J,Y):J;try{let f=s$(A,"package.json");if(!A9(f))return null;let E={};try{E=JSON.parse(J9(f,"utf8"))}catch(j){if(Y)S0.warn("Failed to parse package.json:",[j instanceof Error?j:Error(String(j))]);return null}let W=E[$],F=$;if(!W&&w){let j=Array.isArray(w)?w:[w];for(let B of j){if(!B)continue;if(E[B]){W=E[B],F=B;break}}}if(W&&typeof W==="object"&&!Array.isArray(W)){if(Y)S0.success(`Configuration loaded from package.json: ${F}`);return{config:CE(Z,W,U),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(Y)S0.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}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:vA($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((h)=>h.path?`${h.path}: ${h.message}`:h.message))}if(U.length>0)throw mw.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return oA.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);oA.set(U,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 U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(s$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let h of U)Y.push(...this.fileLoader.generateConfigPaths($,h,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[s$(Ow(),".config",$),s$(Ow(),".config"),Ow()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}var YN=new DE;function vA($,w,A=!1){let J=new Ah,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(h,Z=[]){let f={...h};for(let[E,W]of Object.entries(h)){let F=[...Z,E],j=[`${U}_${F.join("_").toUpperCase()}`,`${U}_${F.map((H)=>H.toUpperCase()).join("")}`,`${U}_${F.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],B,T;for(let H of j)if(B=WJ.env[H],B!==void 0){T=H;break}if(B!==void 0&&T)if(typeof W==="boolean")f[E]=["true","1","yes"].includes(B.toLowerCase());else if(typeof W==="number"){let H=Number(B);if(!Number.isNaN(H))f[E]=H}else if(Array.isArray(W))try{f[E]=JSON.parse(B)}catch{f[E]=B.split(",").map((H)=>H.trim())}else f[E]=B;else if(W&&typeof W==="object"&&!Array.isArray(W))f[E]=Y(W,F)}return f}return Y(w)}var hN=s$(WJ.cwd(),"config"),fN=s$(WJ.cwd(),"src/generated"),OE={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:BY.join(FY.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:BY.join(FY.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:BY.join(FY.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},A$=OE,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"};var y={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"},nw={info:(...$)=>console.log(...$),warn:(...$)=>console.warn(...$),success:(...$)=>console.log(...$),error:(...$)=>console.error(...$),debug:(...$)=>console.debug(...$)};function dY($,w){let A=[];function J(U){let Y;try{Y=vZ.readdirSync(U)}catch{return}for(let h of Y){let Z=Y0.join(U,h);try{if(vZ.statSync(Z).isDirectory())J(Z);else if(h===w)A.push(U)}catch{continue}}}return J($),A}function I($,w,A){if(A||A$.verbose)console.debug(`[tlsx:${$}] ${w}`)}var jT=BT(WT);function XE(){return _E.env.SUDO_PASSWORD}var mZ="[redacted]",zT=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),HT=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/;function TT($){let w=$.toLowerCase();return zT.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function ZJ($){if(Array.isArray($))return $.map((A)=>ZJ(A));if(typeof $==="string")return HT.test($)?mZ:$;if(!$||typeof $!=="object")return $;let w={};for(let[A,J]of Object.entries($)){if(TT(A)){w[A]=mZ;continue}w[A]=ZJ(J)}return w}function zJ($){return JSON.stringify(ZJ($))}function GT($){let w=XE();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 g0($,w={}){let A=GT($);try{let{stdout:J,stderr:U}=await jT(A,{cwd:w.cwd||_E.cwd(),timeout:w.timeout||30000});return{stdout:J.trim(),stderr:U.trim()}}catch(J){let U=Error(`Failed to execute command: ${$}
|
|
208
|
-
|
|
209
|
-
${J.join(
|
|
157
|
+
`;return A}}function k2($,w){let A=Lh("process");if(typeof A>"u"||!A.env)return w;let J=A.env[$];return J!==void 0?J:w}function Mh($,w,A={}){return Ih($,w,A,new WeakMap)}function Ih($,w,A,J){let{arrayMergeMode:U="replace",skipNullish:Y=!1,customMerger:f}=A;if(w===null||w===void 0)return Y?$:w;if(f){let W=f($,w);if(W!==void 0)return W}if(Array.isArray(w)||Array.isArray($))return Ch($,w,U,J);if(!A0(w)||!A0($))return w;return b2($,w,A,J)}function Ch($,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 Q2($,w);case"smart":return x2($,w,J);default:return w}return w}function Q2($,w){let A=[...w];for(let J of $)if(!A.some((U)=>Af(U,J)))A.push(J);return A}function x2($,w,A){if(w.length===0)return $;if($.length===0)return w;if(A0(w[0])&&A0($[0]))return P2($,w,A);if(w.every((J)=>typeof J==="string")&&$.every((J)=>typeof J==="string")){let J=[...w];for(let U of $)if(!J.includes(U))J.push(U);return J}return w}function P2($,w,A){let J=[...w];for(let U of $){if(!A0(U)){J.push(U);continue}let Y=["id","name","key","path","type"],f=!1;for(let W of Y)if(W in U){if(J.find((E)=>A0(E)&&(W in E)&&E[W]===U[W])){f=!0;break}}if(!f)J.push(U)}return J}function b2($,w,A,J){let U=w;if(A0(U)&&J.has(U))return J.get(U);let Y={...$};if(A0(U))J.set(U,Y);for(let f in U){if(!Object.prototype.hasOwnProperty.call(U,f))continue;let W=U[f],Z=Y[f];if(A.skipNullish&&(W===null||W===void 0))continue;if(W===null||W===void 0){Y[f]=W;continue}if(A0(W)&&A0(Z))Y[f]=Ih(Z,W,A,J);else if(Array.isArray(W)||Array.isArray(Z))Y[f]=Ch(Z,W,A.arrayMergeMode||"smart",J);else Y[f]=W}return Y}function Hf($,w,A="replace"){return Mh($,w,{arrayMergeMode:A==="replace"?"replace":"smart",skipNullish:!0})}function Af($,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(!Af($[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 U of A){if(!Object.prototype.hasOwnProperty.call(w,U))return!1;if(!Af($[U],w[U]))return!1}return!0}return!1}function A0($){return Boolean($&&typeof $==="object"&&!Array.isArray($))}class UU{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath($,w,A={}){let{arrayStrategy:J="replace",useCache:U=!0,cacheTtl:Y,trackPerformance:f=!0,verbose:W=!1}=A;if(U){let E=W1.getWithFileCheck("file",$);if(E){if(W)console.log(`Configuration loaded from cache: ${$}`);return E}}let Z=async()=>{if(!PJ($))return null;try{let E=`?t=${Date.now()}`,B=await import($+E),h=B.default||B,j="default"in B,F=Object.keys(B).length>0;if(!j&&!F)throw new x1($,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new x1($,Error("Configuration must export a valid object"),"unknown");let G={config:Hf(w,h,J),source:{type:"file",path:$,priority:100,timestamp:new Date}};if(U)W1.setWithFileCheck("file",G,$,Y);return G}catch(E){throw E instanceof Error?e0.configLoad($,E):e0.configLoad($,Error(String(E)))}};if(f)return b1.track("loadFromPath",Z,{path:$});return Z()}async tryLoadFromPaths($,w,A={}){for(let J of $)try{let U=await this.loadFromPath(J,w,A);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(A.verbose)console.warn(`Failed to load config from ${J}:`,U)}return null}generateConfigPaths($,w,A){let J=this.generateNamePatterns($,A),U=[];for(let Y of J)for(let f of this.extensions)U.push(d8(w,`${Y}${f}`));return U}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 Rh(async()=>{return PJ($)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles($,w,A){let J=[];if(!PJ($))return J;if(w||A){let U=this.generateNamePatterns(w||"",A);for(let Y of U)for(let f of this.extensions){let W=d8($,`${Y}${f}`);if(await this.checkFileAccess(W))J.push(W)}}else try{let{readdirSync:U}=await import("fs"),Y=U($);for(let f of Y)if(this.looksLikeConfigFile(f)){let W=d8($,f);if(await this.checkFileAccess(W))J.push(W)}}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(!PJ($))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:U}=await import("fs"),Y=U($,"utf8");JSON.parse(Y)}catch(U){w.push(`Invalid JSON syntax: ${U}`)}}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 U=await this.loadFromPath(J,{},w);if(U)A.set(J,U.config)}catch(U){if(w.verbose)console.warn(`Failed to preload ${J}:`,U)}})),A}}class Tf{async validateConfiguration($,w,A={}){let{stopOnFirstError:J=!1,validateRequired:U=!0,validateTypes:Y=!0,customRules:f=[],trackPerformance:W=!0,verbose:Z=!1}=A,E=async()=>{let B=[],h=[],j={stopOnFirstError:J,validateRequired:U,validateTypes:Y,customRules:f,trackPerformance:W,verbose:Z};try{if(typeof w==="string")return await this.validateWithSchemaFile($,w,j);else if(Array.isArray(w))return this.validateWithRules($,[...w,...f],j);else return this.validateWithJSONSchema($,w,j)}catch(F){return B.push({path:"",message:`Validation failed: ${F}`,rule:"system"}),{isValid:!1,errors:B,warnings:h}}};if(W)return await b1.track("validateConfiguration",E);return E()}async validateWithSchemaFile($,w,A){try{if(!z2(w))throw new P1(w,[{path:"",message:"Schema file does not exist"}]);let J=await import(w),U=J.default||J;if(Array.isArray(U))return this.validateWithRules($,U,A);else return this.validateWithJSONSchema($,U,A)}catch(J){throw new P1(w,[{path:"",message:`Failed to load schema: ${J}`}])}}validateWithJSONSchema($,w,A){let J=[],U=[];return this.validateObjectAgainstSchema($,w,"",J,U,A),{isValid:J.length===0,errors:J,warnings:U}}validateObjectAgainstSchema($,w,A,J,U,Y){if(Y.validateTypes&&w.type){let f=Array.isArray($)?"array":typeof $,W=Array.isArray(w.type)?w.type:[w.type];if(!W.includes(f)){if(J.push({path:A,message:`Expected type ${W.join(" or ")}, got ${f}`,expected:W.join(" or "),actual:f,rule:"type"}),Y.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"}),Y.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 f=0;f<$.length;f++){let W=A?`${A}[${f}]`:`[${f}]`;if(this.validateObjectAgainstSchema($[f],w.items,W,J,U,Y),Y.stopOnFirstError&&J.length>0)return}if($&&typeof $==="object"&&!Array.isArray($)){let f=$;if(Y.validateRequired&&w.required){for(let W of w.required)if(!(W in f)){if(J.push({path:A?`${A}.${W}`:W,message:`Missing required property '${W}'`,expected:"required",rule:"required"}),Y.stopOnFirstError)return}}if(w.properties){for(let[W,Z]of Object.entries(w.properties))if(W in f){let E=A?`${A}.${W}`:W;if(this.validateObjectAgainstSchema(f[W],Z,E,J,U,Y),Y.stopOnFirstError&&J.length>0)return}}if(w.additionalProperties===!1){let W=new Set(Object.keys(w.properties||{}));for(let Z of Object.keys(f))if(!W.has(Z))U.push({path:A?`${A}.${Z}`:Z,message:`Additional property '${Z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules($,w,A){let J=[],U=[];for(let Y of w)try{let f=this.getValueByPath($,Y.path),W=this.validateWithRule(f,Y,Y.path);if(J.push(...W),A.stopOnFirstError&&J.length>0)break}catch(f){J.push({path:Y.path,message:`Rule validation failed: ${f}`,rule:"system"})}return{isValid:J.length===0,errors:J,warnings:U}}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 U=Array.isArray($)?"array":typeof $;if(U!==w.type)J.push({path:A,message:w.message||`Expected type ${w.type}, got ${U}`,expected:w.type,actual:U,rule:"type"})}if(w.min!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U<w.min)J.push({path:A,message:w.message||`Value must be at least ${w.min}`,expected:`>= ${w.min}`,actual:U,rule:"min"})}if(w.max!==void 0){let U=Array.isArray($)?$.length:typeof $==="string"?$.length:typeof $==="number"?$:0;if(U>w.max)J.push({path:A,message:w.message||`Value must not exceed ${w.max}`,expected:`<= ${w.max}`,actual:U,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 U=w.validator($);if(U)J.push({path:A,message:w.message||U,rule:"custom"})}return J}getValueByPath($,w){if(!w)return $;let A=w.split("."),J=$;for(let U of A)if(J&&typeof J==="object"&&U in J)J=J[U];else return;return J}generateRulesFromInterface($){let w=[],A=$.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let J of A){let[,U,Y,f]=J;w.push({path:U,required:!Y,type:this.mapTypeScriptType(f)})}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:_h},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class Gf{fileLoader=new UU;envProcessor=new JU;validator=new Tf;async loadConfig($){let w=Date.now(),{cache:A,performance:J,schema:U,validate:Y,...f}=$;try{if(A?.enabled){let Z=this.checkCache(f.name||"",f);if(Z)return Z}let W;try{W=await this.loadConfigurationStrategies(f,!0,A)}catch(Z){let E=f.__strictErrorHandling;if(Z instanceof Error&&Z.name==="ConfigNotFoundError"){if(E)throw Z;W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`No configuration file found for "${f.name||"config"}", using defaults with environment variables`]}}else if(Z instanceof Error&&Z.name==="ConfigLoadError"){let B=Z.message.includes("EACCES")||Z.message.includes("EPERM")||Z.message.includes("permission denied"),h=!B&&(Z.message.includes("syntax")||Z.message.includes("Expected")||Z.message.includes("Unexpected")||Z.message.includes("BuildMessage")||Z.message.includes("errors building")),j=Z.message.includes("Configuration must export a valid object")||Z.message.includes("Configuration file is empty and exports nothing");if(E&&(j||B))throw Z;if(h&&(!E||!j))W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!E)W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading error, using defaults: ${Z.message}`]};else throw Z}else W={...await this.applyEnvironmentVariables(f.name||"",f.defaultConfig,f.checkEnv!==!1,f.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${Z instanceof Error?Z.message:String(Z)}`]}}if(U||Y)await this.validateConfiguration(W.config,U,Y,f.name);if(A?.enabled&&W)this.cacheResult(f.name||"",W,A,f);if(J?.enabled){let Z={operation:"loadConfig",duration:Date.now()-w,configName:f.name,timestamp:new Date};if(J.onMetrics)J.onMetrics(Z);if(J.slowThreshold&&Z.duration>J.slowThreshold)j0.warn(`Slow configuration loading detected: ${Z.duration}ms for ${f.name}`);W.metrics=Z}return W}catch(W){let Z=Date.now()-w;throw j0.error(`Configuration loading failed after ${Z}ms:`,[W instanceof Error?W:Error(String(W))]),W}}async loadConfigurationStrategies($,w=!1,A){let{name:J="",alias:U,cwd:Y,configDir:f,defaultConfig:W,checkEnv:Z=!0,arrayStrategy:E="replace",verbose:B=!1}=$,h=Y||Ww.cwd(),j=[],F=await this.loadLocalConfiguration(J,U,h,f,W,E,B,Z,A);if(F)return j.push(...this.getLocalSearchPaths(J,U,h,f)),this.finalizeResult(F,j,Z,J,B);let T=await this.loadHomeConfiguration(J,U,W,E,B,Z);if(T)return j.push(...this.getHomeSearchPaths(J,U)),this.finalizeResult(T,j,Z,J,B);let H=await this.loadPackageJsonConfiguration(J,U,h,W,E,B,Z);if(H)return j.push(b$(h,"package.json")),this.finalizeResult(H,j,Z,J,B);if(j.push(...this.getAllSearchPaths(J,U,h,f)),w)throw e0.configNotFound(J,j,U);return{...await this.applyEnvironmentVariables(J,W,Z,B),warnings:[`No configuration file found for "${J}"${U?` or alias "${U}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration($,w,A,J,U,Y,f,W,Z){let E=W?k1($,U,f):U,B=this.getLocalDirectories(A,J);for(let h of B){if(f)j0.info(`Searching for configuration in: ${h}`);let j=this.fileLoader.generateConfigPaths($,h,w),F=await this.fileLoader.tryLoadFromPaths(j,E,{arrayStrategy:Y,verbose:f,cacheTtl:Z?.ttl,useCache:!Z?.ttl||Z.ttl>100});if(F){if(f)j0.success(`Configuration loaded from: ${F.source.path}`);return F}}return null}async loadHomeConfiguration($,w,A,J,U,Y){if(!$)return null;let f=Y?k1($,A,U):A,W=[b$(ow(),".config",$),b$(ow(),".config"),ow()];for(let Z of W){if(U)j0.info(`Checking home directory: ${Z}`);let E=this.fileLoader.generateConfigPaths($,Z,w),B=await this.fileLoader.tryLoadFromPaths(E,f,{arrayStrategy:J,verbose:U});if(B){if(U)j0.success(`Configuration loaded from home directory: ${B.source.path}`);return B}}return null}async loadPackageJsonConfiguration($,w,A,J,U,Y,f){let W=f?k1($,J,Y):J;try{let Z=b$(A,"package.json");if(!$f(Z))return null;let E=await import(Z),B=E[$],h=$;if(!B&&w)B=E[w],h=w;if(B&&typeof B==="object"&&!Array.isArray(B)){if(Y)j0.success(`Configuration loaded from package.json: ${h}`);return{config:Hf(W,B,U),source:{type:"package.json",path:Z,priority:30,timestamp:new Date}}}}catch(Z){if(Y)j0.warn("Failed to load package.json:",[Z instanceof Error?Z:Error(String(Z))])}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:k1($,w,J),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult($,w,A,J,U){return{config:$.config,source:$.source,path:$.source.path}}async validateConfiguration($,w,A,J){let U=[];if(A){let Y=A($);if(Y)U.push(...Y)}if(w){let Y=await this.validator.validateConfiguration($,w);if(!Y.isValid)U.push(...Y.errors.map((f)=>f.path?`${f.path}: ${f.message}`:f.message))}if(U.length>0)throw e0.configValidation(J||"unknown",U,J)}checkCache($,w){let A=this.generateCacheKey($,w);return W1.get(A)||null}cacheResult($,w,A,J){let U=this.generateCacheKey($,J);W1.set(U,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 U=[];return U.push(...this.getLocalSearchPaths($,w,A,J)),U.push(...this.getHomeSearchPaths($,w)),U.push(b$(A,"package.json")),U}getLocalSearchPaths($,w,A,J){let U=this.getLocalDirectories(A,J),Y=[];for(let f of U)Y.push(...this.fileLoader.generateConfigPaths($,f,w));return Y}getHomeSearchPaths($,w){if(!$)return[];let A=[b$(ow(),".config",$),b$(ow(),".config"),ow()],J=[];for(let U of A)J.push(...this.fileLoader.generateConfigPaths($,U,w));return J}async loadConfigWithResult($){return this.loadConfig($)}}function rB($){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 i2($){return u0.loadConfig({...$,__strictErrorHandling:!0})}async function yh($){let w="defaultConfig"in $&&$.defaultConfig!==void 0?$.defaultConfig:{},A="cache"in $||"performance"in $||"schema"in $||"validate"in $;try{let J;if(A)J=await u0.loadConfig($);else J=await u0.loadConfig({...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}});return J?.config??w}catch(J){let U=J instanceof Error?J.name:"UnknownError",Y=J instanceof Error?J.message:String(J);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||Y.includes("config"))&&$.verbose)j0.warn("Unexpected error loading config, using defaults:",[J instanceof Error?J:Error(String(J))]);let W=A?{...$,defaultConfig:w}:{...$,defaultConfig:w,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in $?$.checkEnv!==!1:!0)return(await u0.applyEnvironmentVariables(W.name||"",w,!0,W.verbose||!1))?.config??w;return w}}async function c2($={defaultConfig:{}}){if(typeof $==="string"){let{cwd:w}=await import("process");try{return(await u0.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"&&rB(A)))return(await u0.applyEnvironmentVariables($,{},!0,!1)).config;throw A}}try{return(await u0.loadConfig({...$,cwd:$.cwd||Ww.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(w){if(w instanceof Error&&(w.name==="ConfigNotFoundError"||w.name==="ConfigLoadError"&&rB(w)))return(await u0.applyEnvironmentVariables($.name||"",$.defaultConfig||{},$.checkEnv!==!1,$.verbose||!1)).config;throw w}}async function u2($,w,A="replace"){let J=new UU;try{let U=await J.loadFromPath($,w,{arrayStrategy:A,useCache:!1,trackPerformance:!1});return U?U.config:null}catch{return null}}function k1($,w,A=!1){let J=new JU,U=$.toUpperCase().replace(/[^A-Z0-9]/g,"_");function Y(f,W=[]){let Z={...f};for(let[E,B]of Object.entries(f)){let h=[...W,E],j=[`${U}_${h.join("_").toUpperCase()}`,`${U}_${h.map((H)=>H.toUpperCase()).join("")}`,`${U}_${h.map((H)=>H.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],F,T;for(let H of j)if(F=Ww.env[H],F!==void 0){T=H;break}if(F!==void 0&&T)if(typeof B==="boolean")Z[E]=["true","1","yes"].includes(F.toLowerCase());else if(typeof B==="number"){let H=Number(F);if(!Number.isNaN(H))Z[E]=H}else if(Array.isArray(B))try{Z[E]=JSON.parse(F)}catch{Z[E]=F.split(",").map((H)=>H.trim())}else Z[E]=F;else if(B&&typeof B==="object"&&!Array.isArray(B))Z[E]=Y(B,h)}return Z}return Y(w)}function v2($){let w=b$(Ww.cwd(),$.configDir),A=b$(Ww.cwd(),$.generatedDir),J=b$(A,"config-types.ts");if(!$f(kB(J)))gG(kB(J),{recursive:!0,mode:511});let U=$f(w)?lG(w).map((f)=>f.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],Y=`// Generated by bunfig v${T7}
|
|
158
|
+
export type ConfigNames = ${U.length?`'${U.join("' | '")}'`:"string"}
|
|
159
|
+
`;tG(J,Y,{mode:438})}function n2($){let w=null,A=null,J=()=>{if(!A)A=yh($).then((Y)=>{return w=Y,Y},(Y)=>{let f="defaultConfig"in $?$.defaultConfig:{};if(w=f,"verbose"in $&&$.verbose)j0.warn("Config loading failed, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);return f});return A},U="defaultConfig"in $?$.defaultConfig:{};return w=U,J(),new Proxy({},{get(Y,f){if(w)return w[f];let W=U[f];return J(),W},has(Y,f){return f in(w||U)},ownKeys(){return Object.keys(w||U)},getOwnPropertyDescriptor(Y,f){return Object.getOwnPropertyDescriptor(w||U,f)},set(Y,f,W){if(!w)w={...U};return w[f]=W,!0}})}function m2($){let w=pB(G2.cwd(),$?.configDir||"./config");function A(){if(!H2(w))return[];let U=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),Y=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],f=T2(w).filter((Z)=>U.has(g8(Z))).map((Z)=>({base:Z.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:Z})),W=new Map;for(let{base:Z,file:E}of f){let B=g8(E).toLowerCase(),h=W.get(Z);if(!h){W.set(Z,E);continue}let j=g8(h).toLowerCase();if(Y.indexOf(B)<Y.indexOf(j))W.set(Z,E)}return Array.from(W.entries()).map(([Z,E])=>({base:Z,file:E})).sort((Z,E)=>Z.base.localeCompare(E.base))}function J(){let U=A(),Y=U.map((E)=>E.base),f=Y.length?Y.map((E)=>`'${E}'`).join(" | "):"string",W=U.length?`{
|
|
160
|
+
${U.map((E)=>{let B=pB(w,E.file).replace(/\\/g,"/");return` '${E.base}': typeof import('${B}').default`}).join(`,
|
|
210
161
|
`)}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
`);for(let Y of U){let[h,...Z]=Y.split("="),f=Z.join("=");if(h&&f)J.push({shortName:h.trim(),value:f.trim()})}return{publicKey:A,subject:J}}async function hh($={}){I("ca","Creating new Root CA Certificate",$.verbose);let w=$.keySize||f0.DEFAULT_KEY_SIZE;I("ca",`Generating ${w}-bit RSA key pair`,$.verbose);let{privateKey:A,publicKey:J}=iE(w),U=[{shortName:"C",value:$.countryName||A$.countryName},{shortName:"ST",value:$.stateName||A$.stateName},{shortName:"L",value:$.localityName||A$.localityName},{shortName:"O",value:$.organization||"Local Development CA"},{shortName:"OU",value:$.organizationalUnit||"Certificate Authority"},{shortName:"CN",value:$.commonName||"Local Development Root CA"}],{notBefore:Y,notAfter:h}=Uh({validityYears:$.validityYears||f0.DEFAULT_CA_VALIDITY_YEARS,verbose:$.verbose}),{certificate:Z}=cE({serialNumber:Yh(),notBefore:Y,notAfter:h,subject:U,publicKey:J,signingKey:A,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:Z,privateKey:uE(A),notBefore:Y,notAfter:h}}async function fh($){if(I("ca","Generating new certificate",$.verbose),I("ca",`Options: ${zJ($)}`,$.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}=QT($.rootCA.certificate),A=kT($.rootCA.privateKey);I("ca",`Generating ${f0.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,$.verbose);let J=f0.DEFAULT_KEY_SIZE,{privateKey:U,publicKey:Y}=iE(J),h=$.commonName||kE($),Z=$.certificateAttributes||[{shortName:"C",value:$.countryName||A$.countryName},{shortName:"ST",value:$.stateName||A$.stateName},{shortName:"L",value:$.localityName||A$.localityName},{shortName:"O",value:$.organizationName||A$.organizationName},{shortName:"CN",value:h}],{notBefore:f,notAfter:E}=Uh({validityDays:$.validityDays||f0.DEFAULT_VALIDITY_DAYS,verbose:$.verbose}),W=QE($),F=$.keyUsage||{digitalSignature:!0,keyEncipherment:!0},j=$.extKeyUsage||{serverAuth:!0},{certificate:B}=cE({serialNumber:Yh(),notBefore:f,notAfter:E,subject:Z,issuer:w,publicKey:Y,signingKey:A,isCA:$.basicConstraints?.cA??!1,pathLenConstraint:$.basicConstraints?.pathLenConstraint,keyUsage:F,extendedKeyUsage:j,subjectAltName:W});return{certificate:B,privateKey:uE(U),notBefore:f,notAfter:E}}function nE($,w){I(y.STORAGE,`Storing certificate and private key with options: ${zJ(w)}`,w?.verbose);let{certPath:A,keyPath:J}=Jh({basePath:w?.basePath,certPath:w?.certPath,keyPath:w?.keyPath});I(y.STORAGE,`Certificate path: ${A}`,w?.verbose),I(y.STORAGE,`Private key path: ${J}`,w?.verbose);let U=lY.dirname(A);if(!_0.existsSync(U))I(y.STORAGE,`Creating certificate directory: ${U}`,w?.verbose),_0.mkdirSync(U,{recursive:!0});I(y.STORAGE,"Writing certificate file",w?.verbose),_0.writeFileSync(A,$.certificate);let Y=lY.dirname(J);if(!_0.existsSync(Y))I(y.STORAGE,`Creating private key directory: ${Y}`,w?.verbose),_0.mkdirSync(Y,{recursive:!0});return I(y.STORAGE,"Writing private key file",w?.verbose),_0.writeFileSync(J,$.privateKey),I(y.STORAGE,"Certificate and private key stored successfully",w?.verbose),A}function vE($,w){I(y.STORAGE,"Storing CA certificate",w?.verbose);let{caCertPath:A}=Jh({basePath:w?.basePath,caCertPath:w?.caCertPath});I(y.STORAGE,`CA certificate path: ${A}`,w?.verbose);let J=lY.dirname(A);if(!_0.existsSync(J))I(y.STORAGE,`Creating CA certificate directory: ${J}`,w?.verbose),_0.mkdirSync(J,{recursive:!0});return I(y.STORAGE,"Writing CA certificate file",w?.verbose),_0.writeFileSync(A,$),I(y.STORAGE,"CA certificate stored successfully",w?.verbose),A}async function xT($,w){if(EJ.platform()!=="darwin")return!1;try{let A=tZ(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`).toString().trim().split("=")[1]?.trim()||"";if(!A)return I(y.TRUST,"Could not extract certificate fingerprint",w),!1;try{if(tZ("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256 2>/dev/null || true").toString().includes(A))return I(y.TRUST,"Certificate fingerprint found in system keychain",w),!0}catch{}return I(y.TRUST,"Certificate fingerprint not found in system keychain",w),!1}catch(A){return I(y.TRUST,`Error checking certificate trust: ${A}`,w),!1}}var PT={platform:"darwin",async addCertificate($,w){if(await xT($,w?.verbose)){I(y.TRUST,"Certificate is already trusted, skipping trust store update",w?.verbose),nw.success("Certificate is already trusted in system keychain");return}I(y.TRUST,"Adding certificate to macOS keychain",w?.verbose),await g0(`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ${$}`)},async removeCertificate($,w,A){let J=A||A$.commonName;I(y.TRUST,`Removing certificate ${J} from macOS keychain`,w?.verbose);try{await g0(`sudo security delete-certificate -c "${J}" /Library/Keychains/System.keychain`),I(y.TRUST,`Removed certificate ${J} from macOS keychain`,w?.verbose)}catch(U){throw I(y.TRUST,`Error removing certificate: ${U}`,w?.verbose),U}}},bT={platform:"win32",async addCertificate($,w){I(y.TRUST,"Adding certificate to Windows certificate store",w?.verbose),await g0(`certutil -f -v -addstore -enterprise Root ${$}`)},async removeCertificate($,w,A){let J=A||A$.commonName;I(y.TRUST,`Removing certificate ${J} from Windows certificate store`,w?.verbose);try{await g0(`certutil -delstore -enterprise Root "${J}"`),I(y.TRUST,`Removed certificate ${J} from Windows certificate store`,w?.verbose)}catch(U){throw I(y.TRUST,`Error removing certificate: ${U}`,w?.verbose),U}}},iT={platform:"linux",async addCertificate($,w){I(y.TRUST,"Adding certificate to Linux certificate store",w?.verbose);let A=EJ.homedir(),J=f0.LINUX_CERT_DB_FILENAME,U=f0.LINUX_TRUST_ARGS;I(y.TRUST,`Searching for certificate databases in ${A}`,w?.verbose);let Y=dY(A,J);if(Y.length===0){nw.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let h of Y){I(y.TRUST,`Processing certificate database in ${h}`,w?.verbose);try{I(y.TRUST,`Attempting to delete existing cert for ${A$.commonName}`,w?.verbose),await g0(`certutil -d sql:${h} -D -n ${A$.commonName}`)}catch(Z){I(y.TRUST,`Warning: Error deleting existing cert: ${Z}`,w?.verbose),console.warn(`Error deleting existing cert: ${Z}`)}I(y.TRUST,`Adding new certificate to ${h}`,w?.verbose),await g0(`certutil -d sql:${h} -A -t ${U} -n ${A$.commonName} -i ${$}`),nw.info(`Cert added to ${h}`)}},async removeCertificate($,w,A){let J=A||A$.commonName;I(y.TRUST,`Removing certificate ${J} from Linux certificate store`,w?.verbose);let U=EJ.homedir(),Y=f0.LINUX_CERT_DB_FILENAME;I(y.TRUST,`Searching for certificate databases in ${U}`,w?.verbose);let h=dY(U,Y);if(h.length===0){nw.warn("No certificate databases found. Cannot remove certificate.");return}for(let Z of h){I(y.TRUST,`Processing certificate database in ${Z}`,w?.verbose);try{await g0(`certutil -d sql:${Z} -D -n "${J}"`),nw.info(`Cert removed from ${Z}`)}catch(f){I(y.TRUST,`Error removing cert from ${Z}: ${f}`,w?.verbose),console.warn(`Error removing cert from ${Z}: ${f}`)}}}},cT={darwin:PT,win32:bT,linux:iT};async function Zh($,w,A){I(y.TRUST,`Adding certificate to system trust store with options: ${zJ(A)}`,A?.verbose),I(y.TRUST,"Storing certificate and private key",A?.verbose);let J=nE($,A);I(y.TRUST,"Storing CA certificate",A?.verbose);let U=vE(w,A),Y=EJ.platform();I(y.TRUST,`Detected platform: ${Y}`,A?.verbose);let h=cT[Y];if(!h){let Z=`Unsupported platform: ${Y}`;throw I(y.TRUST,`Error: ${Z}`,A?.verbose),Error(Z)}return await h.addCertificate(U,A),I(y.TRUST,"Certificate successfully added to system trust store",A?.verbose),J}import{homedir as Eh}from"node:os";import{join as Wh,resolve as aN}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",uT={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:Wh(Eh(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:Wh(Eh(),".stacks","ssl","stacks.localhost.crt"),keyPath:Wh(Eh(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0};var Fh=uT;T$();var a0=null,d2="rpx-root-ca.crt",g2="rpx-root-ca.key";function $F($){return{caCertPath:S$($,d2),caKeyPath:S$($,g2)}}async function l2($,w){try{let[A,J]=await Promise.all([B$.readFile($.caCertPath,"utf8"),B$.readFile($.caKeyPath,"utf8")]);if(!A.includes("-----BEGIN CERTIFICATE-----")||!J.includes("PRIVATE KEY-----"))return z("ssl",`Root CA files at ${$.caCertPath} look malformed, will regenerate`,w),null;return{certificate:A,privateKey:J}}catch(A){return z("ssl",`No existing Root CA at ${$.caCertPath} (${A.code||A}), will create one`,w),null}}function oW($){let w=new Set;w.add($);let A=$.split(".");if(A.length>=2)w.add(`*.${A.slice(1).join(".")}`);return Array.from(w)}function wF($){let A=gJ($).replace(/\*/g,"wildcard"),J=S$(S1(),".stacks","ssl"),U=J;if(typeof $?.https==="object")return U=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:J,{caCertPath:$.https.caCertPath||S$(U,`${A}.ca.crt`),certPath:$.https.certPath||S$(U,`${A}.crt`),keyPath:$.https.keyPath||S$(U,`${A}.key`)};return{caCertPath:S$(U,`${A}.ca.crt`),certPath:S$(U,`${A}.crt`),keyPath:S$(U,`${A}.key`)}}function eW($){let w=new Set;if(Uw($))$.proxies.forEach((A)=>{let J=A.to||"rpx.localhost";oW(J).forEach((U)=>w.add(U))});else if(C1($)){let A=$.to||"rpx.localhost";oW(A).forEach((J)=>w.add(J))}else w.add("rpx.localhost");return w.add("localhost"),w.add("*.localhost"),w}async function A1($){if(a0&&!$.forceRegenerate){z("ssl","Using cached SSL configuration",$.verbose);return}t2();let w=Uw($)?$.proxies.map((W)=>W.to):[$.to];z("ssl",`Generating certificate for domains: ${w.join(", ")}`,$.verbose);let A=V1($,$.verbose),J=A.basePath||S$(S1(),".stacks","ssl");await B$.mkdir(J,{recursive:!0});let U=$F(J),Y=await l2(U,$.verbose),h=!1;if(!Y){if($.verbose)N.info("Generating Root CA certificate (one-time)...");Y=await hh(A);try{await Promise.all([B$.writeFile(U.caCertPath,Y.certificate),B$.writeFile(U.caKeyPath,Y.privateKey,{mode:384})]),h=!0,z("ssl",`Persisted Root CA at ${U.caCertPath}`,$.verbose)}catch(W){throw z("ssl",`Error saving Root CA files: ${W}`,$.verbose),Error(`Failed to save Root CA files: ${W}`)}}else z("ssl",`Reusing existing Root CA from ${U.caCertPath}`,$.verbose);if($.verbose)N.info(`Generating host certificate for: ${w.join(", ")}`);let Z=await fh({...A,rootCA:{certificate:Y.certificate,privateKey:Y.privateKey}});try{await Promise.all([B$.writeFile(A.certPath,Z.certificate),B$.writeFile(A.keyPath,Z.privateKey),B$.writeFile(A.caCertPath,Y.certificate)]),z("ssl","Certificate files saved successfully",$.verbose)}catch(W){throw z("ssl",`Error saving certificate files: ${W}`,$.verbose),Error(`Failed to save certificate files: ${W}`)}if(h?!1:await JF(U.caCertPath,{verbose:$.verbose,regenerateUntrustedCerts:!0})){if(z("ssl","Root CA already trusted, skipping trust store update",$.verbose),$.verbose)N.success("Root CA is already trusted in system trust store");if(a0={key:Z.privateKey,cert:Z.certificate,ca:Y.certificate},$.verbose)N.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);return}if($.verbose)N.info("Adding certificate to system trust store (may require sudo permission)...");let E=!1;if(r0.platform==="darwin")try{if(rh(`security add-trusted-cert -d -r trustRoot -p ssl -p basic -k /Library/Keychains/System.keychain "${U.caCertPath}"`),$.verbose)N.success("Successfully added Root CA to system trust store");E=!0;let W=S$(J,"trust-rpx-cert.sh"),F=`#!/bin/bash
|
|
162
|
+
}`:"Record<string, any>";return`export type ConfigNames = ${f}
|
|
163
|
+
export type ConfigByName = ${W}
|
|
164
|
+
export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
|
|
165
|
+
export type ConfigOf = Config
|
|
166
|
+
`}return{name:"bunfig-plugin",setup(U){U.onResolve({filter:/^virtual:bunfig-types$/},(Y)=>{return{path:Y.path,namespace:"bunfig-virtual"}}),U.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:J(),loader:"ts"}})}}}function R7($,w={}){let A=wU.cwd();while(A.includes("storage"))A=fh(A,"..");let J=fh(A,$||"");if(w?.relative)return N7(wU.cwd(),J);return J}function H$(){if(c0.env.NODE_ENV==="test"||c0.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function _7(){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 xh{async format($){let w=await _7(),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 Ew{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={...AU},this.options=this.normalizeOptions(w),this.formatter=this.options.formatter||new xh,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 U=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=U,this.keys.set(U,Y),this.encryptionKeys.set(U,{key:Y,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:AU.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!H$()&&this.config.writeToFile===!0}async writeToFile($){let A=(async()=>{let U,Y=0,f=3,W=1000;while(Y<f)try{try{try{await L7(this.config.logDirectory,Bh.F_OK|Bh.W_OK)}catch(E){if(E instanceof Error&&"code"in E)if(E.code==="ENOENT")await S7(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 Z=this.validateEncryptionConfig()?(await this.encrypt($)).encrypted:P0.from($);try{if(!iJ(this.currentLogFile))await o8(this.currentLogFile,"",{mode:420});if(U=Eh(this.currentLogFile,"a",420),y7(U,Z,{flag:"a"}),Wh(U),U!==void 0)s8(U),U=void 0;if((await Y1(this.currentLogFile)).size===0){if(await o8(this.currentLogFile,Z,{flag:"w",mode:420}),(await Y1(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(E){let B=E;if(B.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(B.code)){if(Y<f-1){let h=typeof B.message==="string"?B.message:"Unknown error";console.error(`Network error during write attempt ${Y+1}/${f}:`,h);let j=W*2**Y;await new Promise((F)=>setTimeout(F,j)),Y++;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(U!==void 0)try{s8(U)}catch(E){console.error("Debug: [writeToFile] Error closing file descriptor:",E)}}}catch(Z){if(Y===f-1){let B=Z,h=typeof B.message==="string"?B.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),Z}Y++;let E=W*2**(Y-1);await new Promise((B)=>setTimeout(B,E))}})();this.pendingOperations.push(A);let J=this.pendingOperations.length-1;try{await A}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}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(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,J=Math.max(A,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((U)=>{console.error("Error rotating keys:",U)})},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 U=Array.from(this.encryptionKeys.entries()).sort(([,W],[,Z])=>Z.createdAt.getTime()-W.createdAt.getTime()),Y=typeof w.maxKeys==="number"?w.maxKeys:1,f=Math.max(1,Y);if(U.length>f)for(let[W]of U.slice(f))this.encryptionKeys.delete(W),this.keys.delete(W)}generateKeyId(){return a8(16).toString("hex")}generateKey(){return a8(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=a8(16),J=M7("aes-256-gcm",w,A),U=P0.isBuffer($)?$:P0.from($,"utf8"),Y=J.update(U),f=J.final(),W=Y.length+f.length,Z=J.getAuthTag(),E=P0.allocUnsafe(16+W+16);return A.copy(E,0),Y.copy(E,16),f.copy(E,16+Y.length),Z.copy(E,16+W),{encrypted:E,iv:A}}async compressData($){return new Promise((w,A)=>{let J=Fh(),U=[];J.on("data",(Y)=>U.push(Y)),J.on("end",()=>w(P0.from(P0.concat(U)))),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(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,J=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let U=await cJ(this.config.logDirectory),Y=U.filter((Z)=>Z.startsWith(this.name)&&/\.log\.\d+$/.test(Z)).sort((Z,E)=>{let B=Number.parseInt(Z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(E.match(/\.log\.(\d+)$/)?.[1]||"0")-B}),f=Y.length>0?Number.parseInt(Y[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,W=`${A}.${f}`;if(await Y1(A).catch(()=>null))try{if(await hh(A,W),w.compress)try{let Z=`${W}.gz`;await this.compressLogFile(W,Z),await uJ(W)}catch(Z){console.error("Error compressing rotated file:",Z)}if(Y.length===0&&!U.some((Z)=>Z.endsWith(".log.1")))try{let Z=`${A}.1`;await o8(Z,"")}catch(Z){console.error("Error creating backup file:",Z)}}catch(Z){console.error(`Error during rotation: ${Z instanceof Error?Z.message:String(Z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),Y=A.replace(/\.log$/,`-${U}.log`);if(await Y1(A).catch(()=>null))await hh(A,Y)}if(this.currentLogFile=J,w.maxFiles){let Y=(await cJ(this.config.logDirectory)).filter((f)=>f.startsWith(this.name)).sort((f,W)=>W.localeCompare(f));for(let f of Y.slice(w.maxFiles))await uJ(f1(this.config.logDirectory,f))}}}async compressLogFile($,w){let A=Zh($),J=C7(w),U=Fh();await X7(A,U,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()})),iJ(this.currentLogFile))try{let $=Eh(this.currentLogFile,"r+");Wh($),s8($)}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 cJ(this.config.logDirectory)).filter((A)=>(A.includes("temp")||A.includes(".tmp"))&&A.includes(this.name));for(let A of w)try{await uJ(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()?b.gray($.toLocaleTimeString()):$.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||H$())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:U,level:Y,showTimestamp:f=!0}=$,W=(F)=>F.replace(this.ANSI_PATTERN,"");if(!this.fancy){let F=[];if(f)F.push(w);if(Y==="warning")F.push("WARN");else if(Y==="error")F.push("ERROR");else if(A)F.push(A.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(J)F.push(J.replace(/[[\]]/g,""));return F.push(U),F.join(" ")}let Z=_.stdout.columns||120,E="";if(Y==="warning"||Y==="error")E=`${A} ${U}`;else if(Y==="info"||Y==="success")E=`${A} ${J} ${U}`;else E=`${A} ${J} ${b.cyan(U)}`;if(!f)return E.trim();let B=W(E).trim().length,h=W(w).length,j=Math.max(1,Z-2-B-h);return`${E.trim()}${" ".repeat(j)}${w}`}formatMessage($,w){if(w.length===1&&Array.isArray(w[0]))return $.replace(/\{(\d+)\}/g,(Y,f)=>{let W=Number.parseInt(f,10);return W<w[0].length?String(w[0][W]):Y});let A=/%([sdijfo%])/g,J=0,U=$.replace(A,(Y,f)=>{if(f==="%")return"%";if(J>=w.length)return Y;let W=w[J++];switch(f){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 Y}});if(J<w.length)U+=` ${w.slice(J).map((Y)=>typeof Y==="object"?JSON.stringify(Y,null,2):String(Y)).join(" ")}`;return U}formatMarkdown($){if(!$)return $;let w=$;return w=w.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(A,J,U)=>{let Y=b.underline(b.blue(J)),f=this.toAbsoluteFilePath(U);if(f&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let W=`file://${encodeURI(f)}`,Z="\x1B]8;;",E="\x1B\\";return`\x1B]8;;${W}\x1B\\${Y}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${Y}\x1B]8;;\x1B\\`;return Y}),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(H$())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(V7(w)||w.startsWith("./")||w.startsWith("../"))w=O7(w);else return null;return iJ(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,U=this.formatConsoleTimestamp(J),Y=this.formatFileTimestamp(J),f,W;if(w instanceof Error)f=w.message,W=w.stack;else f=this.formatMessage(w,A);let{consoleText:Z,fileText:E}=this.buildOutputTexts(f);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":P7[$],j=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",F;switch($){case"debug":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:b.gray(Z),level:$}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"success":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:b.green(Z),level:$}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:U,icon:h,tag:j,message:Z,level:$}),console.error(F),W){let T=W.split(`
|
|
167
|
+
`);for(let H of T)if(H.trim()&&!H.includes(f))console.error(this.formatConsoleMessage({timestamp:U,message:b.gray(` ${H}`),level:$,showTimestamp:!1}))}break}}else if(!H$()){if(console.error(`${Y} ${this.environment}.${$.toUpperCase()}: ${f}`),W)console.error(W)}let B=`${Y} ${this.environment}.${$.toUpperCase()}: ${E}
|
|
168
|
+
`;if(W)B+=`${W}
|
|
169
|
+
`;if(B=B.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(B)}progress($,w=""){let A={update:(W,Z)=>{},finish:(W)=>{},interrupt:(W,Z)=>{}};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()&&!H$()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(W,Z)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,W),this.activeProgressBar.total),Z!==void 0)this.activeProgressBar.message=Z;if(this.shouldStyleConsole()&&!H$()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(W)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,W)},interrupt:(W,Z="info")=>{if(!H$()&&_.stdout.isTTY)_.stdout.write(`
|
|
170
|
+
`);if(this[Z==="warning"?"warn":Z](W),this.activeProgressBar&&this.shouldStyleConsole()&&!H$()&&_.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(),U=Math.round(J-w),Y=`${$} completed in ${U}ms`,f=new Date,W=this.formatConsoleTimestamp(f),E=`${this.formatFileTimestamp(f)} ${this.environment}.INFO: ${Y}`;if(A)E+=` ${JSON.stringify(A)}`;if(E+=`
|
|
171
|
+
`,E=E.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:`${Y}${A?` ${JSON.stringify(A)}`:""}`}))}else if(!H$())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 Ew(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(!iJ(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Zh(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=P0.isBuffer($)?$:P0.from($,"base64"),U=J.subarray(0,16),Y=J.subarray(J.length-16),f=J.subarray(16,J.length-16),W=I7("aes-256-gcm",A,U);W.setAuthTag(Y);let Z=W.update(f),E=W.final(),B=Z.length+E.length,h=P0.allocUnsafe(B);return Z.copy(h,0),E.copy(h,Z.length),h.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 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),J=this.formatFileTimestamp(w),{consoleText:U,fileText:Y}=this.buildOutputTexts($);if(this.shouldStyleConsole()){let W=U.split(`
|
|
172
|
+
`),Z=Math.max(...W.map((j)=>j.length))+2,E=`┌${"─".repeat(Z)}┐`,B=`└${"─".repeat(Z)}┘`,h=W.map((j)=>{return this.formatConsoleMessage({timestamp:A,message:b.cyan(j),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:A,message:b.cyan(E),showTimestamp:!1})),h.forEach((j)=>console.error(j)),console.error(this.formatConsoleMessage({timestamp:A,message:b.cyan(B),showTimestamp:!1}))}else if(!H$())console.error(`${J} ${this.environment}.INFO: [BOX] ${Y}`);let f=`${J} ${this.environment}.INFO: [BOX] ${Y}
|
|
173
|
+
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(f)}async prompt($){if(H$())return Promise.resolve(!0);return new Promise((w)=>{console.error(`${b.cyan("?")} ${$} (y/n) `);let A=(J)=>{let U=J.toString().trim().toLowerCase();_.stdin.removeListener("data",A);try{if(typeof _.stdin.setRawMode==="function")_.stdin.setRawMode(!1)}catch{}_.stdin.pause(),console.error(""),w(U==="y"||U==="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 Z=/%([sdijfo%])/g,E=0;if(A=$.replace(Z,(B,h)=>{if(h==="%")return"%";if(E>=w.length)return B;let j=w[E++];switch(h){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 B}}),E<w.length)A+=` ${w.slice(E).map((B)=>typeof B==="object"?JSON.stringify(B,null,2):String(B)).join(" ")}`}let{consoleText:J,fileText:U}=this.buildOutputTexts(A);if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",E=this.options.showIcons===!1?"":`${b.blue("◐")} `;console.error(`${E}${Z} ${b.cyan(J)}`)}let W=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
174
|
+
`.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))),J=Math.round($.barLength*A/100),U=$.barLength-J,Y=b.green("━".repeat(J)),f=b.gray("━".repeat(U)),W=`[${Y}${f}]`,Z=`${A}%`.padStart(4),E=$.message?` ${$.message}`:"",B=this.options.showIcons===!1?"":w||A===100?b.green("✓"):b.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${b.gray(this.formatTag(this.name))}`:"",j=`\r${B}${h} ${W} ${Z}${E}`,F=_.stdout.columns||80,T=" ".repeat(Math.max(0,F-j.replace(this.ANSI_PATTERN,"").length));if($.lastRenderedLine=`${j}${T}`,_.stdout.write($.lastRenderedLine),w)_.stdout.write(`
|
|
175
|
+
`)}finishProgressBar($,w){if(!this.enabled||!this.fancy||H$()||!_.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 cJ(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=f1(this.config.logDirectory,J);if($.before)try{if((await Y1(Y)).mtime>=$.before)continue}catch(f){console.error(`Failed to get stats for file ${Y}:`,f);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 uJ(J),console.warn(`Deleted log file: ${J}`)}catch(U){console.error(`Failed to delete log file ${J}:`,U)}console.warn("Log clearing process finished.")}catch(w){console.error("Error during log clearing process:",w)}}}var uG,vG=($)=>$,mG=($,w)=>{for(var A in w)uG($,A,{get:w[A],enumerable:!0,configurable:!0,set:nG.bind(w,A)})},dG=($,w)=>()=>($&&(w=$($=0)),w),Hh,Lh,W1,b1,Sh,d2,g2,aB,nJ,Jf,S$,l,l2,sB,t2,oB,p2,r2,l8,a2,eB,$h,t8,s2,o2,e2,$7,mJ,Vh,w7,V$,A7,J7,wh,dJ,Uf,z$,Q,U7,Ah,Y7,Jh,f7,Z7,p8,W7,Uh,Yh,E7,r8,B7,h7,F7,j7,z7,gJ,Oh,H7,T7="0.15.6",l$,eJ,x1,Yf,ff,$U,Zf,Wf,P1,Ef,Bf,e0,Xh,_h,j0,u0,Dh,kh,G7,K7,Qh,AU,fI,N$,b,GI,D7,qI,k7,NI,RI,jh,KI,Q7,x7,MI,zh,II,CI,yI,LI,SI,e8,P7,VI;var qf=X$(()=>{uG=Object.defineProperty;Hh={};mG(Hh,{withErrorRecovery:()=>Rh,tryLoadConfig:()=>u2,loadConfigWithResult:()=>i2,loadConfig:()=>yh,isRetryableError:()=>D2,isConfigNotFoundError:()=>_2,isBunfigError:()=>Kh,globalPerformanceMonitor:()=>b1,globalCache:()=>W1,getEnvOrDefault:()=>k2,generateConfigTypes:()=>v2,defaultGeneratedDir:()=>kh,defaultConfigDir:()=>Dh,deepMergeWithArrayStrategy:()=>Hf,deepMerge:()=>Mh,createLibraryConfig:()=>n2,config:()=>c2,bunfigPlugin:()=>m2,applyEnvVarsToConfig:()=>k1,TypeGenerationError:()=>Wf,SchemaValidationError:()=>P1,PluginError:()=>Bf,PerformanceMonitor:()=>Ff,FileSystemError:()=>Zf,ErrorFactory:()=>e0,EnvVarError:()=>$U,EnvProcessor:()=>JU,ConfigValidator:()=>Tf,ConfigValidationError:()=>Yf,ConfigNotFoundError:()=>eJ,ConfigMergeError:()=>ff,ConfigLoader:()=>Gf,ConfigLoadError:()=>x1,ConfigFileLoader:()=>UU,ConfigCache:()=>hf,CacheUtils:()=>Sh,BunfigError:()=>l$,BrowserConfigError:()=>Ef,ArrayMergeStrategies:()=>Xh});G7=dG(async()=>{Lh=import.meta.require,W1=new hf,b1=new Ff,Sh={createKey:q2,isEquivalent:N2,estimateMemoryUsage:R2},d2=pJ(wf.cwd(),"config"),g2=pJ(wf.cwd(),"src/generated"),aB=tJ.env.CLARITY_LOG_DIR||aG(I2(),"logs"),nJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:aB,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},Jf=await C2(),S$={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=S$,l2=S$.red,sB=S$.green,t2=S$.yellow,oB=S$.blue,p2=S$.magenta,r2=S$.cyan,l8=S$.white,a2=S$.gray,eB=S$.bgRed,$h=S$.bgYellow,t8=S$.bold,s2=S$.dim,o2=S$.italic,e2=S$.underline,$7=S$.reset,mJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Vh={debug:"\uD83D\uDD0D",info:oB("ℹ"),success:sB("✓"),warning:$h(l8(t8(" WARN "))),error:eB(l8(t8(" ERROR ")))},w7=new aJ("stacks"),V$=new aJ("bunfig",{showTags:!0}),A7=P$(Q1.cwd(),"config"),J7=P$(Q1.cwd(),"src/generated"),wh=lJ.env.CLARITY_LOG_DIR||pG(V2(),"logs"),dJ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:wh,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},Uf=await O2(),z$={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=z$,U7=z$.red,Ah=z$.green,Y7=z$.yellow,Jh=z$.blue,f7=z$.magenta,Z7=z$.cyan,p8=z$.white,W7=z$.gray,Uh=z$.bgRed,Yh=z$.bgYellow,E7=z$.bgGray,r8=z$.bold,B7=z$.dim,h7=z$.italic,F7=z$.underline,j7=z$.strikethrough,z7=z$.reset,gJ={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Oh={debug:"\uD83D\uDD0D",info:Jh("ℹ"),success:Ah("✓"),warning:Yh(p8(r8(" WARN "))),error:Uh(p8(r8(" ERROR ")))},H7=new oJ("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}`}},eJ=class extends l${code="CONFIG_NOT_FOUND";constructor(w,A,J){let U=J?` or alias "${J}"`:"";super(`Configuration "${w}"${U} not found`,{configName:w,alias:J,searchPaths:A,searchPathCount:A.length})}},x1=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}},Yf=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})}},ff=class extends l${code="CONFIG_MERGE_ERROR";constructor(w,A,J,U){super(`Failed to merge configuration from "${w}" with "${A}": ${J.message}`,{sourcePath:w,targetPath:A,configName:U,originalError:J.name,originalMessage:J.message});this.cause=J}},$U=class extends l${code="ENV_VAR_ERROR";constructor(w,A,J,U){super(`Failed to parse environment variable "${w}" with value "${A}" as ${J}`,{envKey:w,envValue:A,expectedType:J,configName:U})}},Zf=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}},Wf=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}},P1=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})}},Ef=class extends l${code="BROWSER_CONFIG_ERROR";constructor(w,A,J,U){super(`Failed to fetch configuration from "${w}": ${A} ${J}`,{endpoint:w,status:A,statusText:J,configName:U})}},Bf=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}},e0={configNotFound($,w,A){return new eJ($,w,A)},configLoad($,w,A){return new x1($,w,A)},configValidation($,w,A){return new Yf($,w,A)},configMerge($,w,A,J){return new ff($,w,A,J)},envVar($,w,A,J){return new $U($,w,A,J)},fileSystem($,w,A){return new Zf($,w,A)},typeGeneration($,w,A){return new Wf($,w,A)},schemaValidation($,w,A){return new P1($,w,A)},browserConfig($,w,A,J){return new Ef($,w,A,J)},plugin($,w,A){return new Bf($,w,A)}},Xh={replace:"replace",concat:"concat",smart:"smart"},_h=/^https?:\/\//,j0=new oJ("bunfig",{showTags:!0}),u0=new Gf,Dh=b$(Ww.cwd(),"config"),kh=b$(Ww.cwd(),"src/generated")});K7=wU.env.CLARITY_LOG_DIR||q7(R7(),"logs"),Qh={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:K7,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},AU={...Qh},fI=(async()=>{try{let{loadConfig:$}=await G7().then(()=>Hh),w=await $({name:"clarity",alias:"logging",defaultConfig:Qh,cwd:wU.cwd()});if(w)Object.assign(AU,w)}catch{}return AU})();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"},b=N$,GI=N$.red,D7=N$.green,qI=N$.yellow,k7=N$.blue,NI=N$.magenta,RI=N$.cyan,jh=N$.white,KI=N$.gray,Q7=N$.bgRed,x7=N$.bgYellow,MI=N$.bgGray,zh=N$.bold,II=N$.dim,CI=N$.italic,yI=N$.underline,LI=N$.strikethrough,SI=N$.reset,e8={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},P7={debug:"\uD83D\uDD0D",info:k7("ℹ"),success:D7("✓"),warning:x7(jh(zh(" WARN "))),error:Q7(jh(zh(" ERROR ")))};VI=new Ew("stacks")});var E1={};JZ(E1,{safeStringify:()=>J0,safeDeleteFile:()=>Kf,resolvePathRewrite:()=>Rf,redactSensitive:()=>YU,isValidRootCA:()=>Nf,isSingleProxyOptions:()=>c1,isSingleProxyConfig:()=>n7,isMultiProxyOptions:()=>hw,isMultiProxyConfig:()=>ch,getSudoPassword:()=>Bw,getPrimaryDomain:()=>fU,extractHostname:()=>v7,execSudoSync:()=>i1,debugLog:()=>z});import{execSync as Ph}from"node:child_process";import*as ih from"node:fs/promises";function Bw(){return process.env.SUDO_PASSWORD}function i1($){let w=Bw(),A=$.replace(/'/g,"'\\''");if(w)return Ph(`echo '${w}' | sudo -S sh -c '${A}' 2>/dev/null`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});return Ph(`sudo sh -c '${A}'`,{encoding:"utf-8"})}function z($,w,A){if(A)b7.debug(`[rpx:${$}] ${w}`)}function u7($){let w=$.toLowerCase();return i7.has(w)||w.endsWith("password")||w.includes("secret")||w.includes("token")}function YU($){if(Array.isArray($))return $.map((A)=>YU(A));if(typeof $==="string")return c7.test($)?bh:$;if(!$||typeof $!=="object")return $;let w={};for(let[A,J]of Object.entries($)){if(u7(A)){w[A]=bh;continue}w[A]=YU(J)}return w}function J0($,w){return JSON.stringify(YU($),null,w)}function v7($){if(hw($))return $.proxies.map((w)=>{let A=w.to||"stacks.localhost";return A.startsWith("http")?new URL(A).hostname:A});if(c1($)){let w=$.to||"stacks.localhost";return[w.startsWith("http")?new URL(w).hostname:w]}return["stacks.localhost"]}function Nf($){return typeof $==="object"&&$!==null&&"certificate"in $&&"privateKey"in $&&typeof $.certificate==="string"&&typeof $.privateKey==="string"}function fU($){if(!$)return"stacks.localhost";if(hw($)&&$.proxies.length>0)return $.proxies[0].to||"stacks.localhost";if(c1($))return $.to||"stacks.localhost";return"stacks.localhost"}function ch($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}function hw($){return"proxies"in $&&Array.isArray($.proxies)}function c1($){return"to"in $&&typeof $.to==="string"}function n7($){return!!($&&("to"in $)&&!("proxies"in $))}function Rf($,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,U=A.stripPrefix===!0?$.slice(A.from.length)||"/":$;return{targetHost:J,targetPath:U}}return null}async function Kf($,w){try{await ih.unlink($),z("certificates",`Successfully deleted: ${$}`,w)}catch(A){if(A.code!=="ENOENT")z("certificates",`Warning: Could not delete ${$}: ${A}`,w)}}var b7,bh="[redacted]",i7,c7;var U$=X$(()=>{qf();b7=new Ew("rpx",{showTags:!1});i7=new Set(["certificate","privatekey","key","cert","ca","rootca","password","sudo_password"]),c7=/-----BEGIN [A-Z ]+-----[\s\S]*?-----END [A-Z ]+-----/});import{execSync as ZU}from"node:child_process";import{homedir as m7}from"node:os";import{join as d7}from"node:path";function WU(){return d7(m7(),"Library/Keychains/login.keychain-db")}function If(){return[h1,WU()]}function uh($,w=Mf){let A=ZU(`security find-certificate -a -c "${w}" -Z "${$}" 2>/dev/null || true`,{encoding:"utf8"}),J=[];for(let U of A.split(`
|
|
176
|
+
`)){let Y=U.match(/SHA-256 hash:\s*([A-F0-9]+)/i);if(Y)J.push(Y[1].toUpperCase())}return J}function Cf($){if(process.platform!=="darwin")return;let w=OJ($.caPath);if(!w)return;let A=$.commonName??Mf,J=$.keychains??If();for(let U of J)for(let Y of uh(U,A)){if(Y===w)continue;try{if(U.startsWith("/Library"))i1(`security delete-certificate -Z ${Y} "${U}"`);else ZU(`security delete-certificate -Z ${Y} "${U}"`,{stdio:"ignore"});z("ssl",`Removed stale Root CA ${Y} from ${U}`,$.verbose)}catch{}}}function yf($,w,A){if(process.platform!=="darwin")return EU($,A);try{let U=ZU(`security verify-cert -c "${$}" -s "${w}" -l -L -R ssl 2>&1`,{encoding:"utf8"}).includes("successful");return z("ssl",`verify-cert ${w}: ${U?"trusted":"not trusted"}`,A?.verbose),U}catch{return!1}}function EU($,w){let A=OJ($);if(!A)return!1;for(let J of If())try{let U=ZU(`security find-certificate -a -Z "${J}" 2>/dev/null || true`,{encoding:"utf8"});for(let Y of U.split(`
|
|
177
|
+
`))if(Y.toUpperCase().includes("SHA-256")){if(Y.split("=").pop().replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase()===A)return z("ssl",`Root CA fingerprint found in ${J}`,w?.verbose),!0}}catch{}return!1}var B1="-d -r trustRoot -p ssl -p basic",h1="/Library/Keychains/System.keychain",Mf="rpx.localhost";var Lf=X$(()=>{x8();U$()});import{execSync as F1}from"node:child_process";import T$ from"node:fs/promises";import*as Sf from"node:os";import{homedir as BU}from"node:os";import{join as O$}from"node:path";import*as $w from"node:process";function mh($){return{caCertPath:O$($,l7),caKeyPath:O$($,t7)}}async function p7($,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 z("ssl",`Root CA files at ${$.caCertPath} look malformed, will regenerate`,w),null;return{certificate:A,privateKey:J}}catch(A){return z("ssl",`No existing Root CA at ${$.caCertPath} (${A.code||A}), will create one`,w),null}}function vh($){let w=new Set;w.add($);let A=$.split(".");if(A.length>=2)w.add(`*.${A.slice(1).join(".")}`);return Array.from(w)}function dh($){let A=fU($).replace(/\*/g,"wildcard"),J=O$(BU(),".stacks","ssl"),U=J;if(typeof $?.https==="object")return U=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:J,{caCertPath:$.https.caCertPath||O$(U,`${A}.ca.crt`),certPath:$.https.certPath||O$(U,`${A}.crt`),keyPath:$.https.keyPath||O$(U,`${A}.key`)};return{caCertPath:O$(U,`${A}.ca.crt`),certPath:O$(U,`${A}.crt`),keyPath:O$(U,`${A}.key`)}}function nh($){let w=new Set;if(hw($))$.proxies.forEach((A)=>{let J=A.to||"rpx.localhost";vh(J).forEach((U)=>w.add(U))});else if(c1($)){let A=$.to||"rpx.localhost";vh(A).forEach((J)=>w.add(J))}else w.add("rpx.localhost");return w.add("localhost"),w.add("*.localhost"),w}async function j1($){if(ww&&!$.forceRegenerate){z("ssl","Using cached SSL configuration",$.verbose);return}r7();let w=hw($)?$.proxies.map((B)=>B.to):[$.to];z("ssl",`Generating certificate for domains: ${w.join(", ")}`,$.verbose);let A=u1($,$.verbose),J=A.basePath||O$(BU(),".stacks","ssl");await T$.mkdir(J,{recursive:!0});let U=mh(J),Y=await p7(U,$.verbose),f=!1;if(!Y){if($.verbose)R.info("Generating Root CA certificate (one-time)...");Y=await V8(A);try{await Promise.all([T$.writeFile(U.caCertPath,Y.certificate),T$.writeFile(U.caKeyPath,Y.privateKey,{mode:384})]),f=!0,z("ssl",`Persisted Root CA at ${U.caCertPath}`,$.verbose)}catch(B){throw z("ssl",`Error saving Root CA files: ${B}`,$.verbose),Error(`Failed to save Root CA files: ${B}`)}}else z("ssl",`Reusing existing Root CA from ${U.caCertPath}`,$.verbose);if($.verbose)R.info(`Generating host certificate for: ${w.join(", ")}`);let W=await O8({...A,rootCA:{certificate:Y.certificate,privateKey:Y.privateKey}});try{await Promise.all([T$.writeFile(A.certPath,W.certificate),T$.writeFile(A.keyPath,W.privateKey),T$.writeFile(A.caCertPath,Y.certificate)]),z("ssl","Certificate files saved successfully",$.verbose)}catch(B){throw z("ssl",`Error saving certificate files: ${B}`,$.verbose),Error(`Failed to save certificate files: ${B}`)}if(f?!1:await lh(U.caCertPath,{verbose:$.verbose,regenerateUntrustedCerts:!0})){if(z("ssl","Root CA already trusted, skipping trust store update",$.verbose),$.verbose)R.success("Root CA is already trusted in system trust store");if(ww={key:W.privateKey,cert:W.certificate,ca:Y.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($w.platform==="darwin")try{Cf({caPath:U.caCertPath,verbose:$.verbose});let B=WU();try{F1(`security add-trusted-cert ${B1} -k "${B}" "${U.caCertPath}"`,{stdio:"ignore"})}catch{}if(i1(`security add-trusted-cert ${B1} -k ${h1} "${U.caCertPath}"`),$.verbose)R.success("Successfully added Root CA to system trust store");E=!0;let h=O$(J,"trust-rpx-cert.sh"),j=`#!/bin/bash
|
|
214
178
|
echo "Trusting RPX Root CA"
|
|
215
|
-
sudo security add-trusted-cert
|
|
179
|
+
sudo security add-trusted-cert ${B1} -k ${h1} "${U.caCertPath}"
|
|
216
180
|
echo "Root CA trusted! Please restart your browser."
|
|
217
181
|
echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
|
|
218
|
-
`;await
|
|
182
|
+
`;await T$.writeFile(h,j,{mode:493})}catch(B){if($.verbose)R.warn(`Could not add Root CA to trust store automatically: ${B}`);let h=O$(J,"trust-rpx-cert.sh"),j=`#!/bin/bash
|
|
219
183
|
echo "Trusting RPX Root CA"
|
|
220
|
-
sudo security add-trusted-cert
|
|
184
|
+
sudo security add-trusted-cert ${B1} -k ${h1} "${U.caCertPath}"
|
|
221
185
|
echo "Root CA trusted! Please restart your browser."
|
|
222
186
|
echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
|
|
223
|
-
`;if(await
|
|
187
|
+
`;if(await T$.writeFile(h,j,{mode:493}),$.verbose)R.info(`Created a trust helper script at: ${h}`),R.info(`If you're still having certificate issues, run: sh ${h}`)}else if($w.platform==="linux")try{let{exec:B}=await import("node:child_process"),h="/usr/local/share/ca-certificates/rpx",j=`
|
|
224
188
|
mkdir -p "/usr/local/share/ca-certificates/rpx" 2>/dev/null || true
|
|
225
189
|
cp "${U.caCertPath}" "/usr/local/share/ca-certificates/rpx/"
|
|
226
190
|
update-ca-certificates
|
|
227
191
|
echo "RPX Root CA installed. Please restart your browser."
|
|
228
|
-
`,
|
|
192
|
+
`,F=O$(Sf.tmpdir(),`rpx-trust-${Date.now()}.sh`);await T$.writeFile(F,j,{mode:493}),await new Promise((T)=>{B(`sudo bash "${F}"`,(H)=>{if(H){if($.verbose)R.warn(`Could not trust certificates: ${H}`);T(!1)}else{if($.verbose)R.success("Successfully added certificates to system trust store");T(!0)}})}),await T$.unlink(F).catch(()=>{}),E=!0}catch(B){if($.verbose)R.warn(`Failed to trust certificates: ${B}`)}else if($w.platform==="win32")try{let B=`
|
|
229
193
|
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("${U.caCertPath.replace(/\//g,"\\")}")
|
|
230
194
|
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("ROOT", "LocalMachine")
|
|
231
195
|
$store.Open("ReadWrite")
|
|
232
196
|
$store.Add($cert)
|
|
233
197
|
$store.Close()
|
|
234
198
|
Write-Host "Root CA trusted successfully!"
|
|
235
|
-
`,F=S$(eh.tmpdir(),"rpx-trust.ps1");if(await B$.writeFile(F,W),Yw(`powershell -ExecutionPolicy Bypass -File "${F}"`),$.verbose)N.success("Successfully added certificate to Windows trust store");E=!0}catch(W){if($.verbose)N.warn(`Could not trust certificate: ${W}`)}else try{await Zh(Z,Y.certificate,A),E=!0}catch(W){if($.verbose)N.warn(`Could not add certificate to trust store: ${W}`)}if(a0={key:Z.privateKey,cert:Z.certificate,ca:Y.certificate},$.verbose)N.success(`Certificate generated successfully for ${w.length} domain${w.length>1?"s":""}`);if(!E&&$.verbose)N.warn('If you see certificate warnings in Chrome/Arc, type "thisisunsafe" on the warning page'),N.warn("This will bypass the warning and you should only need to do it once")}function t2(){a0=null}async function c0($){if(!$)return null;if(a0)return a0;let w=V1($);try{let[A,J,U]=await Promise.all([B$.access(w.keyPath).then(()=>!0).catch(()=>!1),B$.access(w.certPath).then(()=>!0).catch(()=>!1),w.caCertPath?B$.access(w.caCertPath).then(()=>!0).catch(()=>!1):Promise.resolve(!1)]);if(!A||!J)return z("ssl",`Certificate files don't exist: key=${A}, cert=${J}, paths: ${w.keyPath}, ${w.certPath}`,$.verbose),null;let Y="regenerateUntrustedCerts"in $,h=$.regenerateUntrustedCerts,Z=Y?h!==!1:!0;z("ssl",`Trust check: hasFlag=${Y}, flagValue=${h}, shouldCheckTrust=${Z}`,$.verbose);let f=w.basePath||S$(S1(),".stacks","ssl"),E=$F(f);if(!(Z?await JF(E.caCertPath,$):!0))return z("ssl","Root CA exists but is not trusted, will regenerate",$.verbose),null;let[F,j,B]=await Promise.all([B$.readFile(w.keyPath,"utf8"),B$.readFile(w.certPath,"utf8"),U&&w.caCertPath?B$.readFile(w.caCertPath,"utf8"):Promise.resolve(void 0)]);if(B&&!B.includes("-----BEGIN CERTIFICATE-----"))return z("ssl","Invalid root CA certificate content, will regenerate",$.verbose),null;if(Uw($))try{let{X509Certificate:T}=await import("node:crypto"),q=new T(j).subjectAltName||"",R=$.proxies.map((K)=>K.to).filter((K)=>!q.includes(`DNS:${K}`));if(R.length>0)return z("ssl",`Certificate missing SANs for: ${R.join(", ")}, will regenerate`,$.verbose),null}catch(T){z("ssl",`Could not verify cert SANs: ${T}`,$.verbose)}return z("ssl","Successfully loaded existing certificates",$.verbose),a0={key:F,cert:j,ca:B},a0}catch(A){return z("ssl",`Error checking existing certificates: ${A}`,$.verbose),null}}function V1($,w){let A=gJ($);z("ssl",`Primary domain: ${A}`,w);let J=wF($),U=S$(S1(),".stacks","ssl");if(typeof $.https==="object"){let Y=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:U,h={domain:A,hostCertCN:A,basePath:Y,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(eW($)).map((Z)=>({type:2,value:Z}))};if(ah($.https.rootCA))h.rootCA=$.https.rootCA;return h}return{domain:A,hostCertCN:A,basePath:U,...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(eW($)).map((Y)=>({type:2,value:Y}))}}async function AF($,w){let A=wF({to:$,verbose:w}),J=[A.caCertPath,A.certPath,A.keyPath];z("certificates","Attempting to clean up relating certificates",w),await Promise.all(J.map((U)=>oh(U,w)))}async function JF($,w){try{if(z("ssl",`Checking if certificate is trusted: ${$}`,w?.verbose),r0.platform==="darwin")try{let A=Yw(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`).toString().trim(),J=(h)=>h.split("=").pop().replace(/SHA-256\s+hash:\s*/gi,"").replace(/:/g,"").trim().toUpperCase(),U=J(A);if(!U)return z("ssl","Could not extract certificate fingerprint",w?.verbose),!1;let Y=["/Library/Keychains/System.keychain",S$(S1(),"Library/Keychains/login.keychain-db")];for(let h of Y)try{let Z=Yw(`security find-certificate -a -Z "${h}" 2>/dev/null || true`).toString();for(let f of Z.split(`
|
|
236
|
-
|
|
237
|
-
`)}finally{await J.close()}return w}catch(J){if(J.code!=="EEXIST")throw J}let A=await fw($);if(A!==null&&F0(A))throw Error(`rpx daemon already running (pid=${A})`);await j0.unlink(w).catch(()=>{})}}async function _1($=z0()){await j0.unlink(Zw($)).catch(()=>{})}function w7($){return{sourceHost:new URL($.from.startsWith("http")?$.from:`http://${$.from}`).host,cleanUrls:$.cleanUrls??!1,changeOrigin:$.changeOrigin??!1,pathRewrites:$.pathRewrites}}function A7($){return $.find((A)=>!/^api\./.test(A)&&!/^docs\./.test(A)&&!/^dashboard\./.test(A))??$[0]??"rpx.localhost"}async function J7($,w){let A=await hw(w,$.verbose),J=[...new Set(A.map((W)=>W.to))],U=A7(J),Y=[...new Set([U,...J,"rpx.localhost"])],h=B0.join(hF(),".stacks","ssl"),Z=B0.join(h,"rpx.localhost.crt"),f={https:typeof $.https==="object"?{...$.https,certPath:Z,keyPath:B0.join(h,"rpx.localhost.key"),commonName:U}:{certPath:Z,keyPath:B0.join(h,"rpx.localhost.key"),caCertPath:B0.join(h,"rpx.localhost.ca.crt"),commonName:U},verbose:$.verbose,regenerateUntrustedCerts:!0,...Y.length>1?{proxies:Y.map((W)=>({from:"localhost:1",to:W}))}:{to:U,from:"localhost:1"}},E=await c0(f);if(!E)z("daemon","no usable cert on disk, generating one",$.verbose),await A1(f),E=await c0(f);if(!E)throw Error("failed to bootstrap TLS for rpx daemon");return E}async function ZF($={}){let w=$.verbose??!1,A=$.rpxDir??z0(),J=$.registryDir??B0.join(A,"registry.d"),U=$.httpsPort??443,Y=$.httpPort??80,h=$.hostname??"0.0.0.0",Z=$.gcIntervalMs??e2,f=await $7(A),E=new Map,W=(M)=>E.get(M);function F(M){let V$=new Map;for(let c$ of M)V$.set(c$.to,w7(c$));E=V$,z("daemon",`routing table now covers ${V$.size} host(s): ${Array.from(V$.keys()).join(", ")||"<empty>"}`,w)}await rJ(J,w).catch((M)=>{z("daemon",`initial gc failed: ${M}`,w)}),F(await hw(J,w));let j=await J7($,J),B=Bun.serve({port:U,hostname:h,tls:{key:j.key,cert:j.cert,ca:j.ca,requestCert:!1,rejectUnauthorized:!1},fetch:D1(W,w),error(M){return z("daemon",`https server error: ${M}`,w),new Response(`Server Error: ${M.message}`,{status:500})}}),T=null;if(Y>0)T=Bun.serve({port:Y,hostname:h,fetch(M){let V$=new URL(M.url),c$=(M.headers.get("host")??V$.hostname).split(":")[0];return new Response(null,{status:301,headers:{Location:`https://${c$}${V$.pathname}${V$.search}`}})}});if(w)N.success(`rpx daemon listening on https://${h}:${U}${T?` (http→https on :${Y})`:""}`),N.info(`pid file: ${f}`),N.info(`registry: ${J}`);let H=J8((M)=>{F(M)},{dir:J,verbose:w}),q=setInterval(()=>{rJ(J,w).then((M)=>{if(M>0)z("daemon",`gc reaped ${M} stale entries`,w)}).catch((M)=>{z("daemon",`periodic gc failed: ${M}`,w)})},Z);if(typeof q.unref==="function")q.unref();let G=!1,R,K=new Promise((M)=>{R=M});async function L(){if(G)return K;if(G=!0,clearInterval(q),H.close(),B.stop(!1),T?.stop(!1),await _1(A),w)N.info("rpx daemon stopped");return R(),K}let C=(M)=>{z("daemon",`received ${M}, shutting down`,w),L().catch(()=>{})};return G$.once("SIGINT",C),G$.once("SIGTERM",C),{stop:L,done:K,httpsPort:typeof B.port==="number"?B.port:U,httpPort:T&&typeof T.port==="number"?T.port:Y,pidPath:f}}function U7(){let $=G$.execPath,w=B0.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&G$.argv[1])return[$,G$.argv[1],"daemon:start"];return[$,"daemon:start"]}async function EF($={}){let w=$.rpxDir??z0(),A=$.verbose??!1,J=await fw(w);if(J!==null&&F0(J))return z("daemon",`ensureDaemonRunning: already running pid=${J}`,A),{pid:J,spawned:!1};if(J!==null)z("daemon",`ensureDaemonRunning: clearing stale pid=${J}`,A),await _1(w);await j0.mkdir(w,{recursive:!0});let U=$.spawnCommand??U7();if(U.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");z("daemon",`spawning daemon: ${U.join(" ")}`,A);let Y=o2(U[0],U.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??G$.cwd(),env:$.spawnEnv?{...G$.env,...$.spawnEnv}:G$.env});Y.unref();let h=null;Y.once("error",(W)=>{h=W});let Z=$.startupTimeoutMs??5000,f=$.pollIntervalMs??50,E=Date.now()+Z;while(Date.now()<E){if(h)throw h;let W=await fw(w);if(W!==null&&F0(W))return z("daemon",`daemon registered with pid=${W}`,A),{pid:W,spawned:!0};await new Promise((F)=>setTimeout(F,f))}if(h)throw h;throw Error(`rpx daemon failed to start within ${Z}ms (rpxDir=${w})`)}async function WF($={}){let w=$.rpxDir??z0(),A=$.verbose??!1,J=$.timeoutMs??5000,U=$.pollIntervalMs??50,Y=$.forceAfterTimeout??!0,h=await fw(w);if(h===null||!F0(h)){if(h!==null)await _1(w);return{stopped:!1,pid:h,forced:!1}}try{G$.kill(h,"SIGTERM")}catch(f){if(f.code==="ESRCH")return await _1(w),{stopped:!1,pid:h,forced:!1};throw f}let Z=Date.now()+J;while(Date.now()<Z){if(!F0(h))return z("daemon",`daemon pid=${h} stopped cleanly`,A),{stopped:!0,pid:h,forced:!1};await new Promise((f)=>setTimeout(f,U))}if(!Y)throw Error(`rpx daemon (pid=${h}) did not exit within ${J}ms`);z("daemon",`daemon pid=${h} did not exit, escalating to SIGKILL`,A);try{G$.kill(h,"SIGKILL")}catch(f){if(f.code!=="ESRCH")throw f}return await _1(w),{stopped:!0,pid:h,forced:!0}}import{spawn as Y7}from"node:child_process";import*as Ew from"node:process";T$();class FF{processes=new Map;isShuttingDown=!1;async startProcess($,w,A){if(this.processes.has($)){z("start",`Process ${$} is already running`,A);return}let[J,...U]=w.command.split(" "),Y=w.cwd||Ew.cwd();z("start",`Starting process ${$}:`,A),z("start",` Command: ${J} ${U.join(" ")}`,A),z("start",` Working directory: ${Y}`,A),z("start",` Environment variables: ${w0(w.env)}`,A);let h=Y7(J,U,{cwd:Y,env:{...Ew.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:Y,process:h,env:w.env}),new Promise((Z,f)=>{if(h.on("error",(E)=>{if(!this.isShuttingDown)z("start",`Process ${$} failed to start: ${E}`,A),this.processes.delete($),f(E),Ew.emit("SIGINT")}),h.on("exit",(E)=>{if(!this.isShuttingDown&&E!==null&&E!==0)z("start",`Process ${$} exited with code ${E}`,A),this.processes.delete($),f(Error(`Process ${$} exited with code ${E}`)),Ew.emit("SIGINT")}),A)h.stdout?.on("data",(E)=>{z("process",`[${$}] ${E.toString().trim()}`,!0)}),h.stderr?.on("data",(E)=>{z("process",`[${$}] ERR: ${E.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&h.killed)this.processes.delete($),f(Error(`Process ${$} was killed during startup`));else z("start",`Process ${$} started successfully`,A),Z()},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((J)=>{if(!A.process){J();return}A.process.once("exit",()=>{this.processes.delete($),z("start",`Process ${$} stopped`,w),J()});try{A.process.kill("SIGTERM"),setTimeout(()=>{if(A.process){z("start",`Force killing process ${$}`,w);try{A.process.kill("SIGKILL")}catch(U){}}},3000)}catch(U){z("start",`Error stopping process ${$}: ${U}`,w),this.processes.delete($),J()}})}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((J)=>{N.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 aJ=new FF;T$();import*as b$ from"node:fs/promises";import{homedir as h7}from"node:os";import*as U8 from"node:path";import*as Y8 from"node:process";var f7=/^[a-zA-Z0-9._-]+$/;function Ww(){return U8.join(h7(),".stacks","rpx","registry.d")}function J1($){return typeof $==="string"&&$.length>0&&$.length<=128&&f7.test($)}function h8($,w){if(!J1(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return U8.join($,`${w}.json`)}function BF($){if(!$||typeof $!=="object")return!1;let w=$,A=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0;return typeof w.id==="string"&&J1(w.id)&&typeof w.from==="string"&&w.from.length>0&&typeof w.to==="string"&&w.to.length>0&&A&&typeof w.createdAt==="string"}async function Z7($){await b$.mkdir($,{recursive:!0})}async function jF($,w=Ww(),A){if(!BF($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await Z7(w);let J=h8(w,$.id),U=`${J}.tmp.${Y8.pid}.${Date.now()}`,Y=JSON.stringify($,null,2);try{await b$.writeFile(U,Y,{encoding:"utf8",mode:420}),await b$.rename(U,J),z("registry",`wrote entry ${$.id} → ${J}`,A)}catch(h){throw await b$.unlink(U).catch(()=>{}),h}}async function zF($,w=Ww(),A){let J=h8(w,$);try{await b$.unlink(J),z("registry",`removed entry ${$}`,A)}catch(U){if(U.code!=="ENOENT")throw U}}async function f8($,w=Ww(),A){let J=h8(w,$);try{let U=await b$.readFile(J,"utf8"),Y=JSON.parse(U);if(!BF(Y))return z("registry",`entry ${$} failed validation, removing`,A),await b$.unlink(J).catch(()=>{}),null;return Y}catch(U){if(U.code==="ENOENT")return null;if(U instanceof SyntaxError)return z("registry",`entry ${$} has invalid JSON, removing`,A),await b$.unlink(J).catch(()=>{}),null;throw U}}async function HF($=Ww(),w){let A;try{A=await b$.readdir($)}catch(U){if(U.code==="ENOENT")return[];throw U}let J=[];for(let U of A){if(!U.endsWith(".json"))continue;let Y=U.slice(0,-5);if(!J1(Y))continue;let h=await f8(Y,$,w);if(h)J.push(h)}return J}import{execSync as O7}from"node:child_process";import*as Hw from"node:http";import*as VF from"node:http2";import*as DF from"node:net";import*as s from"node:process";var sJ=($,w)=>(A)=>`\x1B[${$}m${A}\x1B[${w}m`,H0={bold:sJ(1,22),dim:sJ(2,22),green:sJ(32,39),cyan:sJ(36,39)};import*as RF from"node:fs";import*as NF from"node:path";import*as T0 from"node:process";import{spawn as E7}from"node:child_process";import*as Fw from"node:fs/promises";import{homedir as W7}from"node:os";import*as X1 from"node:path";import*as g$ from"node:process";T$();function oJ(){return X1.join(W7(),".stacks","rpx")}function GF($=oJ()){return X1.join($,"daemon.pid")}async function TF($=oJ()){try{let w=await Fw.readFile(GF($),"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 F7($=oJ()){await Fw.unlink(GF($)).catch(()=>{})}function B7(){let $=g$.execPath,w=X1.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&g$.argv[1])return[$,g$.argv[1],"daemon:start"];return[$,"daemon:start"]}async function qF($={}){let w=$.rpxDir??oJ(),A=$.verbose??!1,J=await TF(w);if(J!==null&&F0(J))return z("daemon",`ensureDaemonRunning: already running pid=${J}`,A),{pid:J,spawned:!1};if(J!==null)z("daemon",`ensureDaemonRunning: clearing stale pid=${J}`,A),await F7(w);await Fw.mkdir(w,{recursive:!0});let U=$.spawnCommand??B7();if(U.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");z("daemon",`spawning daemon: ${U.join(" ")}`,A);let Y=E7(U[0],U.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??g$.cwd(),env:$.spawnEnv?{...g$.env,...$.spawnEnv}:g$.env});Y.unref();let h=null;Y.once("error",(W)=>{h=W});let Z=$.startupTimeoutMs??5000,f=$.pollIntervalMs??50,E=Date.now()+Z;while(Date.now()<E){if(h)throw h;let W=await TF(w);if(W!==null&&F0(W))return z("daemon",`daemon registered with pid=${W}`,A),{pid:W,spawned:!0};await new Promise((F)=>setTimeout(F,f))}if(h)throw h;throw Error(`rpx daemon failed to start within ${Z}ms (rpxDir=${w})`)}T$();function j7($){let w=$.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128);return w.length>0?w:"rpx"}async function Z8($){if($.proxies.length===0)throw Error("runViaDaemon: no proxies provided");let w=$.verbose??!1,A=$.registryDir,J=new Set,U=$.proxies.map((j)=>{let B=j.id??j7(j.to);if(!O1(B))throw Error(`invalid registry id "${B}" derived from to="${j.to}"`);if(J.has(B))throw Error(`duplicate registry id "${B}" — set an explicit \`id\` on one of the proxies`);return J.add(B),{...j,id:B}}),Y=new Date().toISOString();for(let j of U)await YF({id:j.id,from:j.from,to:j.to,pid:$.persistent?void 0:T0.pid,cwd:T0.cwd(),createdAt:Y,cleanUrls:j.cleanUrls,changeOrigin:j.changeOrigin,pathRewrites:j.pathRewrites},A,w);let h=await qF({rpxDir:$.rpxDir,verbose:w,spawnCommand:$.spawnCommand,startupTimeoutMs:$.startupTimeoutMs,spawnEnv:$.spawnEnv});for(let j of U)N.success(`https://${j.to} → ${j.from}`);if(N.info(`(via rpx daemon pid=${h.pid}; \`rpx daemon:status\` to inspect)`),$.detached)return;let Z=!1,f=A??s0(),E=U.map((j)=>j.id),W=async()=>{if(Z)return;Z=!0;for(let j of E)await A8(j,A,w).catch((B)=>{z("runner",`removeEntry(${j}) failed: ${B}`,w)})},F=(j)=>{z("runner",`received ${j}, unregistering ${E.length} entries`,w),W().finally(()=>T0.exit(0))};T0.once("SIGINT",F),T0.once("SIGTERM",F),T0.once("exit",()=>{if(Z)return;for(let j of E)try{RF.unlinkSync(NF.join(f,`${j}.json`))}catch{}}),await new Promise(()=>{})}T$();import{exec as z7}from"node:child_process";import Bw from"node:fs";import KF from"node:os";import W8 from"node:path";import*as k1 from"node:process";import{promisify as H7}from"node:util";var eJ=H7(z7),A0=k1.platform==="win32"?W8.join(k1.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",E8=!1;async function $U($){if(k1.platform==="win32")throw Error("Administrator privileges required on Windows");let w=Jw(),A=$.replace(/'/g,"'\\''");try{if(w){let{stdout:U}=await eJ(`echo '${w}' | sudo -S sh -c '${A}' 2>/dev/null`);return E8=!0,U}if(E8)try{let{stdout:U}=await eJ(`sudo -n sh -c '${A}'`);return U}catch(U){z("hosts","Cached sudo privileges expired, requesting again",!0)}let{stdout:J}=await eJ(`sudo sh -c '${A}'`);return E8=!0,J}catch(J){throw Error(`Failed to execute sudo command: ${J.message}`)}}async function Q1($,w){z("hosts",`Adding hosts: ${$.join(", ")}`,w),z("hosts",`Using hosts file at: ${A0}`,w);try{let A;try{A=await Bw.promises.readFile(A0,"utf-8")}catch{z("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{A=await $U(`cat "${A0}"`)}catch(h){throw console.log(" Could not read hosts file — skipping hosts setup"),z("hosts",`sudo read also failed: ${h}`,w),Error(`Cannot read hosts file: ${h}`)}}let J=$.filter((h)=>{let Z=`127.0.0.1 ${h}`,f=`::1 ${h}`;return!A.includes(Z)&&!A.includes(f)});if(J.length===0){z("hosts","All hosts already exist in hosts file",w);return}let U=J.map((h)=>`
|
|
199
|
+
`,h=O$(Sf.tmpdir(),"rpx-trust.ps1");if(await T$.writeFile(h,B),F1(`powershell -ExecutionPolicy Bypass -File "${h}"`),$.verbose)R.success("Successfully added certificate to Windows trust store");E=!0}catch(B){if($.verbose)R.warn(`Could not trust certificate: ${B}`)}else try{await X8(W,Y.certificate,A),E=!0}catch(B){if($.verbose)R.warn(`Could not add certificate to trust store: ${B}`)}if(ww={key:W.privateKey,cert:W.certificate,ca:Y.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 r7(){ww=null}async function v0($){if(!$)return null;if(ww)return ww;let w=u1($);try{let[A,J,U]=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 z("ssl",`Certificate files don't exist: key=${A}, cert=${J}, paths: ${w.keyPath}, ${w.certPath}`,$.verbose),null;let Y="regenerateUntrustedCerts"in $,f=$.regenerateUntrustedCerts,W=Y?f!==!1:!0;z("ssl",`Trust check: hasFlag=${Y}, flagValue=${f}, shouldCheckTrust=${W}`,$.verbose);let Z=w.basePath||O$(BU(),".stacks","ssl"),E=mh(Z);if(!(W?await lh(E.caCertPath,$):!0))return z("ssl","Root CA exists but is not trusted, will regenerate",$.verbose),null;let[h,j,F]=await Promise.all([T$.readFile(w.keyPath,"utf8"),T$.readFile(w.certPath,"utf8"),U&&w.caCertPath?T$.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(hw($))try{let{X509Certificate:T}=await import("node:crypto"),G=new T(j).subjectAltName||"",N=$.proxies.map((K)=>K.to).filter((K)=>!G.includes(`DNS:${K}`));if(N.length>0)return z("ssl",`Certificate missing SANs for: ${N.join(", ")}, will regenerate`,$.verbose),null}catch(T){z("ssl",`Could not verify cert SANs: ${T}`,$.verbose)}return z("ssl","Successfully loaded existing certificates",$.verbose),ww={key:h,cert:j,ca:F},ww}catch(A){return z("ssl",`Error checking existing certificates: ${A}`,$.verbose),null}}function u1($,w){let A=fU($);z("ssl",`Primary domain: ${A}`,w);let J=dh($),U=O$(BU(),".stacks","ssl");if(typeof $.https==="object"){let Y=$.https.basePath&&$.https.basePath.trim()!==""?$.https.basePath:U,f={domain:A,hostCertCN:A,basePath:Y,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(nh($)).map((W)=>({type:2,value:W}))};if(Nf($.https.rootCA))f.rootCA=$.https.rootCA;return f}return{domain:A,hostCertCN:A,basePath:U,...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(nh($)).map((Y)=>({type:2,value:Y}))}}async function gh($,w){let A=dh({to:$,verbose:w}),J=[A.caCertPath,A.certPath,A.keyPath];z("certificates","Attempting to clean up relating certificates",w),await Promise.all(J.map((U)=>Kf(U,w)))}async function lh($,w){try{if(z("ssl",`Checking if certificate is trusted: ${$}`,w?.verbose),$w.platform==="darwin"){if(w?.serverName)return yf($,w.serverName,{verbose:w.verbose});return EU($,{verbose:w.verbose})}else if($w.platform==="win32")try{let J=F1(`openssl x509 -noout -subject -in "${$}"`).toString().trim().split("=").slice(1).join("=").trim()||"";if(!J)return z("ssl","Could not extract certificate subject",w?.verbose),!1;let U=`powershell -Command "Get-ChildItem -Path Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -like '*${J}*' } | Select-Object Subject"`;if(F1(U).toString().includes(J))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($w.platform==="linux")try{let J=F1(`openssl x509 -noout -fingerprint -sha256 -in "${$}"`).toString().trim().split("=")[1]?.trim()||"",U=["/etc/ssl/certs","/etc/pki/tls/certs"];for(let Y of U)try{if(F1(`find ${Y} -type f -exec openssl x509 -noout -fingerprint -sha256 -in {} \\; 2>/dev/null | grep "${J}"`).toString().includes(J))return z("ssl",`Certificate fingerprint found in ${Y}`,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 ${$w.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 ww=null,l7="rpx-root-ca.crt",t7="rpx-root-ca.key";var hU=X$(()=>{OB();p0();Q8();Lf();U$();Lf();x8()});function v1($,w){return async(A)=>{let J=new URL(A.url),Y=(A.headers.get("host")||"").split(":")[0],f=$(Y);if(!f)return z("request",`No route found for host: ${Y}`,w),new Response(`No proxy configured for ${Y}`,{status:404});let W=f.sourceHost,Z=J.pathname,E=Rf(J.pathname,f.pathRewrites);if(E)W=E.targetHost,Z=E.targetPath,z("request",`Path rewrite: ${J.pathname} → ${W}${Z}`,w);let B=`http://${W}${Z}${J.search}`;try{let h=new Headers(A.headers);if(h.set("host",W),f.changeOrigin)h.set("origin",`http://${f.sourceHost}`);h.set("x-forwarded-for","127.0.0.1"),h.set("x-forwarded-proto","https"),h.set("x-forwarded-host",Y);let j=await fetch(B,{method:A.method,headers:h,body:A.body,redirect:"manual"});if(f.cleanUrls&&J.pathname.endsWith(".html")){let T=J.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:T}})}let F=new Headers(j.headers);return new Response(j.body,{status:j.status,statusText:j.statusText,headers:F})}catch(h){return z("request",`Proxy error for ${Y}: ${h}`,w),new Response(`Proxy Error: ${h}`,{status:502})}}}var FU=X$(()=>{U$();U$()});import*as jU from"node:fs";import*as i$ from"node:fs/promises";import{homedir as a7}from"node:os";import*as Vf from"node:path";import*as zU from"node:process";function Aw(){return Vf.join(a7(),".stacks","rpx","registry.d")}function n1($){return typeof $==="string"&&$.length>0&&$.length<=128&&s7.test($)}function Of($,w){if(!n1(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return Vf.join($,`${w}.json`)}function t$($){if(!Number.isInteger($)||$<=0)return!1;try{return zU.kill($,0),!0}catch(w){return w.code==="EPERM"}}function th($){if(!$||typeof $!=="object")return!1;let w=$,A=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0;return typeof w.id==="string"&&n1(w.id)&&typeof w.from==="string"&&w.from.length>0&&typeof w.to==="string"&&w.to.length>0&&A&&typeof w.createdAt==="string"}async function o7($){await i$.mkdir($,{recursive:!0})}async function ph($,w=Aw(),A){if(!th($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await o7(w);let J=Of(w,$.id),U=`${J}.tmp.${zU.pid}.${Date.now()}`,Y=JSON.stringify($,null,2);try{await i$.writeFile(U,Y,{encoding:"utf8",mode:420}),await i$.rename(U,J),z("registry",`wrote entry ${$.id} → ${J}`,A)}catch(f){throw await i$.unlink(U).catch(()=>{}),f}}async function Xf($,w=Aw(),A){let J=Of(w,$);try{await i$.unlink(J),z("registry",`removed entry ${$}`,A)}catch(U){if(U.code!=="ENOENT")throw U}}async function e7($,w=Aw(),A){let J=Of(w,$);try{let U=await i$.readFile(J,"utf8"),Y=JSON.parse(U);if(!th(Y))return z("registry",`entry ${$} failed validation, removing`,A),await i$.unlink(J).catch(()=>{}),null;return Y}catch(U){if(U.code==="ENOENT")return null;if(U instanceof SyntaxError)return z("registry",`entry ${$} has invalid JSON, removing`,A),await i$.unlink(J).catch(()=>{}),null;throw U}}async function Fw($=Aw(),w){let A;try{A=await i$.readdir($)}catch(U){if(U.code==="ENOENT")return[];throw U}let J=[];for(let U of A){if(!U.endsWith(".json"))continue;let Y=U.slice(0,-5);if(!n1(Y))continue;let f=await e7(Y,$,w);if(f)J.push(f)}return J}async function HU($=Aw(),w){let A=await Fw($,w),J=0;for(let U of A){if(U.pid===void 0)continue;if(!t$(U.pid))z("registry",`GC: pid ${U.pid} for ${U.id} is dead, removing`,w),await Xf(U.id,$,w).catch(()=>{}),J++}return J}function _f($,w={}){let A=w.dir??Aw(),J=w.debounceMs??100,U=w.pollMs??Math.max(J*2,250),Y=w.verbose;jU.mkdirSync(A,{recursive:!0});let f=null,W=!1,Z=null,E=!1,B=(G)=>{return JSON.stringify(G.map((q)=>({id:q.id,from:q.from,to:q.to,pid:q.pid,pathRewrites:q.pathRewrites,cleanUrls:q.cleanUrls,changeOrigin:q.changeOrigin})).sort((q,N)=>q.id.localeCompare(N.id)))},h=()=>{if(f=null,W)return;Fw(A,Y).then((G)=>{return Z=B(G),$(G)}).catch((G)=>{z("registry",`watcher onChange failed: ${G}`,Y)})},j=()=>{if(W)return;if(f)clearTimeout(f);f=setTimeout(h,J)},T=setInterval(()=>{if(W||E)return;E=!0,Fw(A,Y).then((G)=>{if(B(G)!==Z)j()}).catch((G)=>{z("registry",`watcher poll failed: ${G}`,Y)}).finally(()=>{E=!1})},U),H=jU.watch(A,{persistent:!0},(G,q)=>{if(q&&/\.tmp\.\d+\.\d+$/.test(q))return;j()});return H.on("error",(G)=>{z("registry",`watcher error: ${G}`,Y)}),j(),{close:()=>{if(W=!0,f)clearTimeout(f);clearInterval(T),H.close()}}}var s7;var m1=X$(()=>{U$();s7=/^[a-zA-Z0-9._-]+$/});import{spawn as $q}from"node:child_process";import*as jw from"node:fs/promises";import{homedir as wq}from"node:os";import*as d1 from"node:path";import*as p$ from"node:process";function n0(){return d1.join(wq(),".stacks","rpx")}function ah($=n0()){return d1.join($,"daemon.pid")}async function rh($=n0()){try{let w=await jw.readFile(ah($),"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 Aq($=n0()){await jw.unlink(ah($)).catch(()=>{})}function Jq(){let $=p$.execPath,w=d1.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&p$.argv[1])return[$,p$.argv[1],"daemon:start"];return[$,"daemon:start"]}async function sh($={}){let w=$.rpxDir??n0(),A=$.verbose??!1;await Jw({rpxDir:w,verbose:A}).catch((B)=>{z("daemon",`DNS reconcile before ensureDaemonRunning: ${B}`,A)});let J=await rh(w);if(J!==null&&t$(J))return z("daemon",`ensureDaemonRunning: already running pid=${J}`,A),{pid:J,spawned:!1};if(J!==null)z("daemon",`ensureDaemonRunning: clearing stale pid=${J}`,A),await Aq(w);await jw.mkdir(w,{recursive:!0});let U=$.spawnCommand??Jq();if(U.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");z("daemon",`spawning daemon: ${U.join(" ")}`,A);let Y=$q(U[0],U.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??p$.cwd(),env:$.spawnEnv?{...p$.env,...$.spawnEnv}:p$.env});Y.unref();let f=null;Y.once("error",(B)=>{f=B});let W=$.startupTimeoutMs??5000,Z=$.pollIntervalMs??50,E=Date.now()+W;while(Date.now()<E){if(f)throw f;let B=await rh(w);if(B!==null&&t$(B))return z("daemon",`daemon registered with pid=${B}`,A),{pid:B,spawned:!0};await new Promise((h)=>setTimeout(h,Z))}if(f)throw f;throw Error(`rpx daemon failed to start within ${W}ms (rpxDir=${w})`)}var Df=X$(()=>{p0();hU();FU();m1();z1();U$()});import*as Uw from"node:fs/promises";import{homedir as Uq}from"node:os";import*as kf from"node:path";function eh(){return kf.join(Uq(),".stacks","rpx")}function Qf($=eh()){return kf.join($,Yq)}async function GU($=eh()){try{let w=await Uw.readFile(Qf($),"utf8"),A=JSON.parse(w);if(A.version!==TU||!Array.isArray(A.resolvers))return null;return{version:TU,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 $F($,w){await Uw.mkdir($,{recursive:!0}),await Uw.writeFile(Qf($),`${JSON.stringify(w,null,2)}
|
|
200
|
+
`,"utf8")}async function xf($){await Uw.rm(Qf($),{force:!0})}function wF($){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 fq($){let w=wF($);if(!w)return null;let A=w.split(".");if(A.length<2)return null;return A.slice(-2).join(".")}function Pf($){let w=new Set;for(let A of $){let J=fq(A);if(J)w.add(J)}return Array.from(w).sort()}function bf($){let w=new Set;for(let A of $){let J=wF(A);if(J)w.add(J)}return Array.from(w).sort()}var TU=1,Yq="dns-state.json",oh;var AF=X$(()=>{oh=["com","test","dev","app","page","local","localhost","example","invalid"]});var KU={};JZ(KU,{tearDownDevelopmentDns:()=>zw,syncDevelopmentDnsFromRegistry:()=>g1,stopDnsServer:()=>cf,startDnsServer:()=>WF,setupResolver:()=>Gq,setupDevelopmentDns:()=>mf,resolverFilePath:()=>H1,removeResolver:()=>Nq,removeLegacyTldResolvers:()=>nf,reconcileStaleDevelopmentDns:()=>Jw,isDnsServerRunning:()=>Fq,contentLooksLikeRpxResolver:()=>EF,RPX_RESOLVER_MARKER:()=>YF,DNS_PORT:()=>RU});import Zq from"node:dgram";import*as JF from"node:fs/promises";import*as UF from"node:path";import*as m0 from"node:process";function Wq($){return{id:$.readUInt16BE(0),flags:$.readUInt16BE(2),qdcount:$.readUInt16BE(4),ancount:$.readUInt16BE(6),nscount:$.readUInt16BE(8),arcount:$.readUInt16BE(10)}}function ZF($,w){let A=[],J=w;while(!0){let U=$[J];if(U===0){J++;break}if((U&192)===192){let Y=$.readUInt16BE(J)&16383,{name:f}=ZF($,Y);A.push(f),J+=2;break}J++,A.push($.subarray(J,J+U).toString("ascii")),J+=U}return{name:A.join("."),newOffset:J}}function Eq($,w){let{name:A,newOffset:J}=ZF($,w),U=$.readUInt16BE(J),Y=$.readUInt16BE(J+2);return{question:{name:A,type:U,class:Y},newOffset:J+4}}function NU($){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 Bq($,w,A){let J=[],U=Buffer.alloc(12);U.writeUInt16BE($,0),U.writeUInt16BE(33152,2),U.writeUInt16BE(1,4),U.writeUInt16BE(1,6),U.writeUInt16BE(0,8),U.writeUInt16BE(0,10),J.push(U),J.push(NU(w.name));let Y=Buffer.alloc(4);Y.writeUInt16BE(w.type,0),Y.writeUInt16BE(w.class,2),J.push(Y),J.push(NU(w.name));let f=Buffer.alloc(10);if(f.writeUInt16BE(w.type,0),f.writeUInt16BE(1,2),f.writeUInt32BE(300,4),w.type===1){f.writeUInt16BE(4,8),J.push(f);let W=A.split(".").map((Z)=>Number.parseInt(Z,10));J.push(Buffer.from(W))}else if(w.type===28)f.writeUInt16BE(16,8),J.push(f),J.push(Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]));else return U.writeUInt16BE(33155,2),U.writeUInt16BE(0,6),Buffer.concat([U,NU(w.name),Y]);return Buffer.concat(J)}function hq($,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(NU(w.name));let U=Buffer.alloc(4);return U.writeUInt16BE(w.type,0),U.writeUInt16BE(w.class,2),A.push(U),Buffer.concat(A)}async function WF($,w){if(m0.platform!=="darwin")return!1;let A=bf($);if(A.length===0)return!1;if(u$){for(let J of A)qU.add(J);return z("dns","DNS server already running — merged domains",w),!0}return qU=new Set(A),new Promise((J)=>{u$=Zq.createSocket("udp4"),u$.on("error",(U)=>{z("dns",`DNS server error: ${U.message}`,w),u$?.close(),u$=null,J(!1)}),u$.on("message",(U,Y)=>{try{let f=Wq(U),{question:W}=Eq(U,12);z("dns",`Query for ${W.name} type ${W.type} from ${Y.address}`,w);let Z=W.name.toLowerCase(),E=!1;for(let h of qU)if(Z===h||Z.endsWith(`.${h}`)){E=!0;break}let B;if(E&&(W.type===1||W.type===28))B=Bq(f.id,W,"127.0.0.1"),z("dns",`Responding with localhost for ${W.name}`,w);else B=hq(f.id,W),z("dns",`NXDOMAIN for ${W.name}`,w);u$?.send(B,Y.port,Y.address)}catch(f){z("dns",`Error processing DNS query: ${f}`,w)}}),u$.on("listening",()=>{let U=u$?.address();z("dns",`DNS server listening on ${U?.address}:${U?.port}`,w),J(!0)});try{u$.bind(RU,"127.0.0.1")}catch(U){z("dns",`Failed to bind DNS server: ${U}`,w),J(!1)}})}function cf($){if(u$)z("dns","Stopping DNS server",$),u$.close(),u$=null,qU=new Set}function Fq(){return u$!==null}function jq(){return`${YF}
|
|
201
|
+
nameserver 127.0.0.1
|
|
202
|
+
port ${RU}
|
|
203
|
+
`}function H1($){return UF.join(fF,$)}function EF($){return $.includes("127.0.0.1")&&$.includes(String(RU))}async function zq($){try{return await JF.readFile(H1($),"utf8")}catch(w){if(w.code==="ENOENT")return null;throw w}}async function uf($){if(m0.platform!=="darwin")return;let{execSudoSync:w,getSudoPassword:A}=await Promise.resolve().then(() => (U$(),E1));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(J){z("dns",`Could not flush DNS cache: ${J}`,$)}}async function Hq($,w){let{execSudoSync:A}=await Promise.resolve().then(() => (U$(),E1)),J=jq().replace(/\n/g,"\\n"),U=`bash -c 'mkdir -p ${fF} && printf "%b" "${J}" > ${H1($)}'`;A(U),z("dns",`Created ${H1($)}`,w)}async function Tq($,w){let{execSudoSync:A}=await Promise.resolve().then(() => (U$(),E1));A(`rm -f ${H1($)}`),z("dns",`Removed ${H1($)}`,w)}async function Gq($,w){return mf({domains:w??[],verbose:$})}async function qq($,w){if(m0.platform!=="darwin")return!0;let{getSudoPassword:A}=await Promise.resolve().then(() => (U$(),E1));if(!A())return z("dns","SUDO_PASSWORD not set, cannot create resolver files",w),!1;try{for(let J of $)await Hq(J,w);return await uf(w),!0}catch(J){return z("dns",`Failed to create resolver file: ${J}`,w),!1}}async function vf($,w){if(m0.platform!=="darwin")return;let{getSudoPassword:A}=await Promise.resolve().then(() => (U$(),E1));if(!A())return;try{for(let J of $)await Tq(J,w);await uf(w)}catch(J){z("dns",`Failed to remove resolver files: ${J}`,w)}}async function nf($){if(m0.platform!=="darwin")return[];let w=[];for(let A of oh){let J=await zq(A);if(J&&EF(J))await vf([A],$),w.push(A)}return w}async function mf($){let w=$.rpxDir??n0(),A=bf($.domains);if(A.length===0)return!1;let J=Pf(A);if(!await WF(A,$.verbose))return!1;if(!await qq(J,$.verbose))return!1;let f={version:TU,resolvers:J,domains:A,ownerPid:$.ownerPid??m0.pid,updatedAt:new Date().toISOString()};return await $F(w,f),!0}async function g1($,w={}){let A=$.map((Z)=>Z.to).filter(Boolean),J=w.rpxDir??n0(),U=Pf(A),W=((await GU(J))?.resolvers??[]).filter((Z)=>!U.includes(Z));if(W.length>0)await vf(W,w.verbose);if(U.length===0){cf(w.verbose),await xf(J);return}await mf({domains:A,rpxDir:J,verbose:w.verbose,ownerPid:w.ownerPid??m0.pid})}async function zw($={}){let w=$.rpxDir??n0();cf($.verbose);let J=(await GU(w))?.resolvers??[];await vf(J,$.verbose),await nf($.verbose),await xf(w)}async function Nq($){await zw({verbose:$})}async function Jw($={}){let w=$.rpxDir??n0(),A=await GU(w),J=A?.ownerPid!=null&&t$(A.ownerPid);if(A&&!J){z("dns",`reconcile: owner pid ${A.ownerPid} is gone — tearing down DNS`,$.verbose),await zw($);return}let U=await nf($.verbose);if(U.length>0)z("dns",`reconcile: removed legacy TLD resolvers: ${U.join(", ")}`,$.verbose);await uf($.verbose)}var RU=15353,YF="# managed-by: rpx",fF="/etc/resolver",u$=null,qU;var z1=X$(()=>{Df();AF();m1();U$();qU=new Set});import*as r$ from"process";import{existsSync as cF}from"node:fs";import kU from"node:fs/promises";import UZ from"node:os";import QU from"node:path";import Yw from"node:process";import{EventEmitter as uF}from"node:events";import d0 from"node:process";import YZ from"node:process";import iU from"node:process";import AA from"node:process";import N1 from"node:process";import WZ from"node:tty";import Sj,{stdin as Z5,stdout as W5}from"node:process";import BZ,{stdin as Xj,stdout as _j}from"node:process";import Dj from"node:readline";class FZ{configPath;config=null;events=[];retryCount=0;maxRetries=3;retryDelayMs=1000;constructor(){let $=UZ.homedir(),w=QU.join($,".config","clapp");this.configPath=QU.join(w,"telemetry.json")}async isEnabled(){if(Yw.env.DO_NOT_TRACK==="1"||Yw.env.DO_NOT_TRACK==="true")return!1;if(Yw.env.NO_TELEMETRY==="1"||Yw.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:UZ.platform(),nodeVersion:Yw.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:Yw.env.DO_NOT_TRACK==="1"||Yw.env.DO_NOT_TRACK==="true",eventsQueued:this.events.length,lastSent:$.lastSent}}async loadConfig(){if(this.config)return this.config;try{if(cF(this.configPath)){let $=await kU.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=QU.dirname(this.configPath);await kU.mkdir(w,{recursive:!0}),await kU.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 rq=new FZ;function vF($,w={}){let A={_:[]},J=w.alias||{},U=new Set(w.boolean||[]),Y={};for(let W of Object.keys(J))for(let Z of J[W])Y[Z]=W;for(let W of U)if(J[W])for(let Z of J[W])U.add(Z);function f(W,Z){let E=Y[W]||W;if(A[E]=Z,J[E])for(let B of J[E])A[B]=Z;if(Y[W]&&J[Y[W]])for(let B of J[Y[W]])A[B]=Z;A[W]=Z}for(let W=0;W<$.length;W++){let Z=$[W];if(Z==="--"){A._.push(...$.slice(W+1));break}if(Z.startsWith("--")){let E=Z.indexOf("=");if(E!==-1){let B=Z.slice(2,E),h=Z.slice(E+1);f(B,h)}else{let B=Z.slice(2);if(B.startsWith("no-")){let j=B.slice(3);f(j,!1);continue}let h=Y[B]||B;if(U.has(h)||U.has(B))f(B,!0);else{let j=$[W+1];if(j!==void 0&&!j.startsWith("-"))f(B,j),W++;else f(B,!0)}}}else if(Z.startsWith("-")&&Z.length>1){let E=Z.slice(1);for(let B=0;B<E.length;B++){let h=E[B],j=Y[h]||h;if(B===E.length-1&&!U.has(j)&&!U.has(h)){let F=$[W+1];if(F!==void 0&&!F.startsWith("-"))f(h,F),W++;else f(h,!0)}else f(h,!0)}}else A._.push(Z)}return A}function bU($){return $.replace(/[<[].+/,"").trim()}function nF($){let w=/<([^>]+)>/g,A=/\[([^\]]+)\]/g,J=[],U=(W)=>{let Z=!1,E=W[1];if(E.startsWith("..."))E=E.slice(3),Z=!0;return{required:W[0].startsWith("<"),value:E,variadic:Z}},Y;while(Y=w.exec($))J.push(U(Y));let f;while(f=A.exec($))J.push(U(f));return J}function mF($){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((Y,f)=>{return f!==A&&Y.names.some((W)=>J.names.includes(W))&&typeof Y.required==="boolean"}))w.boolean.push(J.names[0])}else w.boolean.push(J.names[0])}return w}function fZ($){return $.reduce((w,A)=>w.length>=A.length?w:A,"")}function xU($,w){return $.length>=w?$:`${$}${" ".repeat(w-$.length)}`}function dF($){return $.replace(/([a-z])-([a-z])/g,(w,A,J)=>{return A+J.toUpperCase()})}function gF($,w,A){let J=0,U=w.length,Y=$,f;for(;J<U;++J)f=Y[w[J]],Y=Y[w[J]]=J===U-1?A:f!=null?f:!!~w[J+1].indexOf(".")||!(+w[J+1]>-1)?{}:[]}function lF($,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 tF($){let w=/([^\\/]+)$/.exec($);return w?w[1]:""}function jZ($){return $.split(".").map((w,A)=>{return A===0?dF(w):w}).join(".")}class wA extends Error{exitCode=2;isUsageError=!0;constructor($){super($);if(this.name=this.constructor.name,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,this.constructor);else this.stack=Error($).stack}format($=!1){if($&&this.stack)return`${this.message}
|
|
204
|
+
|
|
205
|
+
Stack trace:
|
|
206
|
+
${this.stack}`;return this.message}}function pF(){let{env:$}=YZ,{TERM:w,TERM_PROGRAM:A}=$;if(YZ.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 YA="\x1B",A$=`${YA}[`;var N0={to($,w){if(!w)return`${A$}${$+1}G`;return`${A$}${w+1};${$+1}H`},move($,w){let A="";if($<0)A+=`${A$}${-$}D`;else if($>0)A+=`${A$}${$}C`;if(w<0)A+=`${A$}${-w}A`;else if(w>0)A+=`${A$}${w}B`;return A},up:($=1)=>`${A$}${$}A`,down:($=1)=>`${A$}${$}B`,forward:($=1)=>`${A$}${$}C`,backward:($=1)=>`${A$}${$}D`,nextLine:($=1)=>`${A$}E`.repeat($),prevLine:($=1)=>`${A$}F`.repeat($),left:`${A$}G`,hide:`${A$}?25l`,show:`${A$}?25h`,save:`${YA}7`,restore:`${YA}8`};var PU={screen:`${A$}2J`,up:($=1)=>`${A$}1J`.repeat($),down:($=1)=>`${A$}J`.repeat($),line:`${A$}2K`,lineEnd:`${A$}K`,lineStart:`${A$}1K`,lines($){let w="";for(let A=0;A<$;A++)w+=this.line+(A<$-1?N0.up():"");if($)w+=N0.left;return w}},eq={screen:`${YA}c`};function rF($,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 U=1;U<=$.length;U++)if(w.charAt(J-1)===$.charAt(U-1))A[J][U]=A[J-1][U-1];else A[J][U]=Math.min(A[J-1][U-1]+1,A[J][U-1]+1,A[J-1][U]+1);return A[w.length][$.length]}function zZ($,w,A=2,J=3){return w.map((U)=>({cmd:U,distance:rF($,U)})).filter(({distance:U})=>U<=A).sort((U,Y)=>U.distance-Y.distance).slice(0,J).map(({cmd:U})=>U)}class HZ{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=bU($).split(",").map((J)=>{let U=J.trim().replace(/^-{1,2}/,"");if(U.startsWith("no-"))this.negated=!0,U=U.replace(/^no-/,"");return jZ(U)}).sort((J,U)=>J.length>U.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 w5=iU.argv,aF=`${iU.platform}-${iU.arch} bun-v${typeof Bun<"u"?Bun.version:"unknown"}`,ZZ=AA.argv,sF=`${AA.platform}-${AA.arch} node-${AA.version}`;class cU{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=bU($);let U=bU($),Y=U.indexOf(":");if(Y>0)this.namespace=U.substring(0,Y),this.name=U.substring(Y+1);if(this.args=nF($),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 HZ($,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 uU}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:U}=this.cli.globalCommand,Y=[{body:`${$}${A?`/${A}`:""}`}];if(Y.push({title:"Usage",body:` $ ${$} ${this.usageText||this.rawName}`}),(this.isGlobalCommand||this.isDefaultCommand)&&w.length>0){let Z=fZ(w.map((F)=>F.rawName)),E=new Map,B=[];for(let F of w)if(F.namespace){if(!E.has(F.namespace))E.set(F.namespace,[]);E.get(F.namespace).push(F)}else B.push(F);let h="";if(B.length>0)h+=B.map((F)=>{return` ${xU(F.rawName,Z.length)} ${F.description}`}).join(`
|
|
207
|
+
`);let j=Array.from(E.keys()).sort();for(let F of j){let T=E.get(F);if(h.length>0)h+=`
|
|
208
|
+
|
|
209
|
+
`;h+=` ${F}:
|
|
210
|
+
`,h+=T.map((H)=>{return` ${xU(H.rawName,Z.length-2)} ${H.description}`}).join(`
|
|
211
|
+
`)}Y.push({title:"Commands",body:h}),Y.push({title:"For more info, run any command with the `--help` flag",body:w.map((F)=>` $ ${$}${F.displayName===""?"":` ${F.displayName}`} --help`).join(`
|
|
212
|
+
`)})}let W=this.isGlobalCommand?J:[...this.options,...J||[]];if(!this.isGlobalCommand&&!this.isDefaultCommand)W=W.filter((Z)=>Z.name!=="version");if(W.length>0){let Z=fZ(W.map((E)=>E.rawName));Y.push({title:"Options",body:W.map((E)=>{return` ${xU(E.rawName,Z.length)} ${E.description} ${E.config.default===void 0?"":`(default: ${E.config.default})`}`}).join(`
|
|
213
|
+
`)})}if(this.examples.length>0)Y.push({title:"Examples",body:this.examples.map((Z)=>{if(typeof Z==="function")return Z($);return Z}).join(`
|
|
214
|
+
`)});if(U)Y=U(Y)||Y;console.log(Y.map((Z)=>{return Z.title?`${Z.title}:
|
|
215
|
+
${Z.body}`:Z.body}).join(`
|
|
216
|
+
|
|
217
|
+
`))}outputVersion(){let{name:$}=this.cli,{versionNumber:w}=this.cli.globalCommand;if(w)console.log(`${$}/${w} ${typeof Bun<"u"?aF:sF}`)}checkRequiredArgs(){let $=this.args.filter((w)=>w.required).length;if(this.cli.args.length<$){let A=this.args.filter((U)=>U.required).slice(this.cli.args.length),J=A.map((U)=>`<${U.value}>`).join(" ");throw new wA(`Missing required argument${A.length>1?"s":""}: ${J}
|
|
218
|
+
|
|
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 U=[...w.options,...this.options].flatMap((Z)=>Z.names),Y=A.length>1?`--${A}`:`-${A}`,f=zZ(A,U),W=`Unknown option \`${Y}\``;if(f.length>0)W+=`
|
|
220
|
+
|
|
221
|
+
Did you mean one of these?`,f.forEach((Z)=>{let E=Z.length>1?`--${Z}`:`-${Z}`;W+=`
|
|
222
|
+
• ${E}`});throw W+=`
|
|
223
|
+
|
|
224
|
+
Run \`${this.cli.name} ${this.rawName} --help\` to see available options.`,new wA(W)}}}checkOptionValue(){let{options:$,globalCommand:w}=this.cli,A=[...w.options,...this.options];for(let J of A){let U=$[J.name.split(".")[0]];if(J.required){let Y=A.some((f)=>f.negated&&f.names.includes(J.name));if(U===!0||U===!1&&!Y)throw new wA(`Option \`${J.rawName}\` requires a value.
|
|
225
|
+
|
|
226
|
+
Example: ${this.cli.name} ${this.rawName} ${J.rawName} <value>`)}}}}class uU extends cU{constructor($){super("@@global@@","",{},$)}}var oF=cU,g0={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 G1={primary:"blue",secondary:"cyan",success:"green",warning:"yellow",error:"red",info:"magenta",muted:"gray"};function eF(){return!0}function $j(){let $={};$.supportsColor=eF();function w(J,U=[]){let Y=J===""?[]:[...U,J],f=function(Z){if(!$.supportsColor)return Z;let E="",B="";for(let h of Y)if(h in G1&&G1[h]in g0){let j=G1[h];E+=g0[j][0],B=g0[j][1]+B}else if(h in g0)E+=g0[h][0],B=g0[h][1]+B;return E+Z+B},W=[...Object.keys(g0),...Object.keys(G1)];for(let Z of W)if(!(Z in f))Object.defineProperty(f,Z,{get(){return w(Z,Y)}});return f}let A=[...Object.keys(g0),...Object.keys(G1)];for(let J of A)if(!(J in $))Object.defineProperty($,J,{get(){return w(J)}});return $}var q1=$j();class vU extends uF{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 uU(this),this.globalCommand.usage("<command> [options]")}handleSignals($){if(this.signalHandlersSet)return this;let w=async(A)=>{if(console.log(`
|
|
227
|
+
|
|
228
|
+
Received ${A}, cleaning up...`),$)try{await $()}catch(J){console.error("Error during cleanup:",J)}d0.exit(0)};return d0.on("SIGINT",()=>w("SIGINT")),d0.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 oF($,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(q1.red(`
|
|
229
|
+
✗ 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=zZ($,w);if(A.length>0)console.log(q1.yellow("Did you mean one of these?")),A.forEach((J)=>console.log(` ${q1.dim("•")} ${this.name} ${J}`)),console.log("")}console.log(q1.dim("Run"),`${this.name} --help`,q1.dim("to see all available commands")),d0.exit(1)}async parse($=ZZ,w={}){let{run:A=!0,exitOnError:J=!1}=w;if(J)try{return await this.parse($,{run:A})}catch(Z){throw this.handleUsageError(Z),Z}if(this.rawArgs=$,!this.name)this.name=$[1]?tF($[1]):"cli";let U=!0,Y=$.slice(2),f=Y[0];if(f&&!f.startsWith("-")){for(let Z of this.commands)if(Z.isMatched(f)){let E=this.mri(Y,Z);U=!1;let B={...E,args:E.args.slice(1)};this.setParsedInfo(B,Z,f),this.emit(`command:${f}`,Z);break}}if(U){for(let Z of this.commands)if(Z.name===""){U=!1;let E=this.mri(Y,Z);this.setParsedInfo(E,Z),this.emit("command:!",Z);break}}if(U){let Z=this.mri($.slice(2));this.setParsedInfo(Z)}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:[]],J=mF(A),U=[],Y=$.indexOf("--");if(Y>-1)U=$.slice(Y+1),$=$.slice(0,Y);let f=vF($,J),W={_:f._};for(let j of Object.keys(f))if(j!=="_")W[jZ(j)]=f[j];let Z=W._,E={"--":U},B=w&&w.config.ignoreOptionDefaultValue?w.config.ignoreOptionDefaultValue:this.globalCommand.config.ignoreOptionDefaultValue,h=Object.create(null);for(let j of A){if(!B&&j.config.default!==void 0)for(let F of j.names)E[F]=j.config.default;if(Array.isArray(j.config.type)){if(h[j.name]===void 0)h[j.name]={shouldTransform:!0,transformFunction:j.config.type[0]}}}for(let j of Object.keys(W))if(j!=="_"){let F=j.split(".");gF(E,F,W[j]),lF(E,h)}return{args:Z,options:E}}async run($=ZZ){return this.parse($,{run:!0,exitOnError:!0})}handleUsageError($){if(!(!!$&&typeof $==="object"&&$.name==="ClappError"&&$.isUsageError!==!1))return;let J=$,U=J.message??"command-line error",Y=this.name?`${this.name}: `:"",f=/--help/.test(U)?"":`
|
|
231
|
+
Run \`${this.name??"cli"} --help\` for usage.`;d0.stderr.write(`${Y}${U}${f}
|
|
232
|
+
`),d0.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((W,Z)=>{if(W.variadic)J.push($.slice(Z));else J.push($[Z])}),J.push(w);let U={command:A,args:J,options:w};for(let W of A.beforeHooks)await W(U);let Y,f=async()=>{let W=A.commandAction.apply(this,J);if(W instanceof Promise)Y=await W;else Y=W;return Y};if(A.middleware.length>0){let W=0,Z=async()=>{if(W<A.middleware.length){let E=A.middleware[W++];await E({...U,next:Z})}else await f()};await Z()}else await f();for(let W of A.afterHooks)await W(U);return Y}removeSignalHandlers(){if(!this.signalHandlersSet)return this;return d0.removeAllListeners("SIGINT"),d0.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 TZ{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 J5=new TZ;function wj(){if("FORCE_COLOR"in N1.env)return N1.env.FORCE_COLOR!=="0";if("NO_COLOR"in N1.env||N1.env.TERM==="dumb")return!1;if(N1.platform==="win32")return!0;return WZ.isatty(1)&&WZ.isatty(2)}var GZ=wj();function s($,w){if(!GZ)return(A)=>A;return(A)=>$+A+w}var Aj=s("\x1B[0m","\x1B[0m"),Jj=s("\x1B[31m","\x1B[39m"),Uj=s("\x1B[32m","\x1B[39m"),Yj=s("\x1B[33m","\x1B[39m"),fj=s("\x1B[34m","\x1B[39m"),Zj=s("\x1B[35m","\x1B[39m"),Wj=s("\x1B[36m","\x1B[39m"),Ej=s("\x1B[37m","\x1B[39m"),Bj=s("\x1B[90m","\x1B[39m"),hj=s("\x1B[1m","\x1B[22m"),Fj=s("\x1B[3m","\x1B[23m"),jj=s("\x1B[4m","\x1B[24m"),zj=s("\x1B[2m","\x1B[22m"),Hj=s("\x1B[7m","\x1B[27m"),Tj=s("\x1B[8m","\x1B[28m"),Gj=s("\x1B[9m","\x1B[29m"),qj=s("\x1B[41m","\x1B[49m"),Nj=s("\x1B[42m","\x1B[49m"),Rj=s("\x1B[43m","\x1B[49m"),Kj=s("\x1B[44m","\x1B[49m"),Mj=s("\x1B[45m","\x1B[49m"),Ij=s("\x1B[46m","\x1B[49m"),Cj=s("\x1B[47m","\x1B[49m"),yj=GZ,Lj={reset:Aj,red:Jj,green:Uj,yellow:Yj,blue:fj,magenta:Zj,cyan:Wj,white:Ej,gray:Bj,bold:hj,italic:Fj,underline:jj,dim:zj,inverse:Hj,hidden:Tj,strikethrough:Gj,bgRed:qj,bgGreen:Nj,bgYellow:Rj,bgBlue:Kj,bgMagenta:Mj,bgCyan:Ij,bgWhite:Cj,isColorSupported:yj},JA=Lj,Vj=["up","down","left","right","space","enter","cancel"],UA={actions:new Set(Vj),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"}};function qZ($,w){if(typeof $==="string")return UA.aliases.get($)===w;for(let A of $){if(A===void 0)continue;if(qZ(A,w))return!0}return!1}function Oj($,w){if($===w)return[];let A=$.split(`
|
|
233
|
+
`),J=w.split(`
|
|
234
|
+
`),U=[];for(let Y=0;Y<Math.max(A.length,J.length);Y++)if(A[Y]!==J[Y])U.push(Y);return U}var E5=Sj.platform.startsWith("win"),EZ=Symbol("clapp:cancel");function $A($,w){let A=$;if(A.isTTY)A.setRawMode(w)}function kj($){return $.replace(/\x1b\[[0-9;]*m/g,"")}function Qj($){return kj($).length}function hZ($,w,A){if(!w||w<1)return $;let J=A?.hard??!1,U=A?.trim??!0,Y=$.split(`
|
|
235
|
+
`),f=[];for(let W of Y){if(Qj(W)<=w){f.push(U?W.trimEnd():W);continue}if(J){let Z="",E=0,B=0;while(B<W.length){let h=W.slice(B).match(/^\x1b\[[0-9;]*m/);if(h){Z+=h[0],B+=h[0].length;continue}if(E>=w)f.push(U?Z.trimEnd():Z),Z="",E=0;Z+=W[B],E++,B++}if(Z)f.push(U?Z.trimEnd():Z)}else f.push(U?W.trimEnd():W)}return f.join(`
|
|
236
|
+
`)}class nU{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=Xj,output:J=_j,render:U,signal:Y,...f}=$;this.opts=f,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=U.bind(this),this._track=w,this._abortSignal=Y,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 U of A)if(U.cb(...w),U.once)J.push(()=>A.splice(A.indexOf(U),1));for(let U of J)U();return this}prompt(){return new Promise(($)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),$(EZ);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}if(this.rl=Dj.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0)this._setUserInput(this.opts.initialUserInput,!0);this.input.on("keypress",this.onKeypress),$A(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(N0.show),this.output.off("resize",this.render),$A(this.input,!1),$(this.value)}),this.once("cancel",()=>{this.output.write(N0.show),this.output.off("resize",this.render),$A(this.input,!1),$(EZ)})})}_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&&UA.aliases.has(w.name))this.emit("cursor",UA.aliases.get(w.name));if(UA.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(qZ([$,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
|
+
`),$A(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.state==="cancel")setTimeout(()=>{this.unsubscribe()},10);else this.unsubscribe()}restoreCursor(){let $=hZ(this._prevFrame,BZ.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
238
|
+
`).length-1;this.output.write(N0.move(-999,$*-1))}render(){let $=hZ(this._render(this)??"",BZ.stdout.columns,{hard:!0,trim:!1});if($===this._prevFrame)return;if(this.state==="initial")this.output.write(N0.hide);else{let w=Oj(this._prevFrame,$);if(this.restoreCursor(),w&&w?.length===1){let A=w[0];this.output.write(N0.move(0,A)),this.output.write(PU.lines(1));let J=$.split(`
|
|
239
|
+
`);this.output.write(J[A]),this._prevFrame=$,this.output.write(N0.move(0,J.length-A-1));return}if(w&&w?.length>1){let A=w[0];this.output.write(N0.move(0,A)),this.output.write(PU.down());let U=$.split(`
|
|
240
|
+
`).slice(A);this.output.write(U.join(`
|
|
241
|
+
`)),this._prevFrame=$;return}this.output.write(PU.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function xj($,w){if($===void 0)return 0;if(w.length===0)return 0;let J=w.findIndex((U)=>U.value===$);return J!==-1?J:0}function Pj($,w){return(w.label??String(w.value)).toLowerCase().includes($.toLowerCase())}function bj($,w){if(!w)return;if($)return w;return w[0]}class ij extends nU{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#A="";#J;#w;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return JA.inverse(JA.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`${$}${JA.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??Pj;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 U=w.findIndex((Y)=>Y.value===J);if(U!==-1)this.toggleSelected(J),this.#$=U}this.focusedValue=this.options[this.#$]?.value,this.on("key",(J,U)=>this.#U(J,U)),this.on("userInput",(J)=>this.#Y(J))}_isActionKey($,w){return $==="\t"||this.multiple&&this.isNavigating&&w.name==="space"&&$!==void 0&&$!==""}#U($,w){let A=w.name==="up",J=w.name==="down",U=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(U)this.value=bj(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=[$]}#Y($){if($!==this.#A){this.#A=$;let w=this.options;if($)this.filteredOptions=w.filter((A)=>this.#J($,A));else this.filteredOptions=[...w];if(this.#$=xj(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 cj extends nU{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((U)=>U.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((U)=>({...U,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 uj=pF();var t=($,w)=>uj?$:w,F5=t("◆","*"),j5=t("■","x"),z5=t("▲","x"),H5=t("◇","o"),T5=t("┌","T"),vj=t("│","|"),G5=t("└","—"),q5=t("●",">"),N5=t("○"," "),R5=t("◻","[•]"),K5=t("◼","[+]"),M5=t("◻","[ ]"),I5=t("▪","•"),C5=t("─","-"),y5=t("╮","+"),L5=t("├","+"),S5=t("╯","+"),V5=t("●","•"),O5=t("◆","*"),X5=t("▲","!"),_5=t("■","x");var D5={light:t("─","-"),heavy:t("━","="),block:t("█","#")};function nj(){return`${JA.gray(vj)} `}var k5=nj();XY();import{homedir as _Y}from"node:os";import{join as DY,resolve as MN}from"node:path";var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",o9={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:DY(_Y(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:DY(_Y(),".stacks","ssl","stacks.localhost.crt"),keyPath:DY(_Y(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0};var Pw=o9;p0();hU();FU();m1();z1();U$();import{spawn as Rq}from"node:child_process";import*as T0 from"node:fs/promises";import{homedir as BF}from"node:os";import*as z0 from"node:path";import*as Y$ from"node:process";var Kq=5000;function U0(){return z0.join(BF(),".stacks","rpx")}function Tw($=U0()){return z0.join($,"daemon.pid")}async function Hw($=U0()){try{let w=await T0.readFile(Tw($),"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 MU($=U0()){let w=await Hw($);return w!==null&&t$(w)}async function Mq($=U0()){await T0.mkdir($,{recursive:!0});let w=Tw($);while(!0){try{let J=await T0.open(w,"wx");try{await J.write(`${Y$.pid}
|
|
242
|
+
`)}finally{await J.close()}return w}catch(J){if(J.code!=="EEXIST")throw J}let A=await Hw($);if(A!==null&&t$(A))throw Error(`rpx daemon already running (pid=${A})`);await T0.unlink(w).catch(()=>{})}}async function l1($=U0()){await T0.unlink(Tw($)).catch(()=>{})}function Iq($){return{sourceHost:new URL($.from.startsWith("http")?$.from:`http://${$.from}`).host,cleanUrls:$.cleanUrls??!1,changeOrigin:$.changeOrigin??!1,pathRewrites:$.pathRewrites}}function Cq($){return $.find((A)=>!/^api\./.test(A)&&!/^docs\./.test(A)&&!/^dashboard\./.test(A))??$[0]??"rpx.localhost"}async function yq($,w){let A=await Fw(w,$.verbose),J=[...new Set(A.map((B)=>B.to))],U=Cq(J),Y=[...new Set([U,...J,"rpx.localhost"])],f=z0.join(BF(),".stacks","ssl"),W=z0.join(f,"rpx.localhost.crt"),Z={https:typeof $.https==="object"?{...$.https,certPath:W,keyPath:z0.join(f,"rpx.localhost.key"),commonName:U}:{certPath:W,keyPath:z0.join(f,"rpx.localhost.key"),caCertPath:z0.join(f,"rpx.localhost.ca.crt"),commonName:U},verbose:$.verbose,regenerateUntrustedCerts:!0,...Y.length>1?{proxies:Y.map((B)=>({from:"localhost:1",to:B}))}:{to:U,from:"localhost:1"}},E=await v0(Z);if(!E)z("daemon","no usable cert on disk, generating one",$.verbose),await j1(Z),E=await v0(Z);if(!E)throw Error("failed to bootstrap TLS for rpx daemon");return E}async function hF($={}){let w=$.verbose??!1,A=$.rpxDir??U0(),J=$.registryDir??z0.join(A,"registry.d"),U=$.httpsPort??443,Y=$.httpPort??80,f=$.hostname??"0.0.0.0",W=$.gcIntervalMs??Kq,Z=await Mq(A),E=new Map,B=(L)=>E.get(L);function h(L){let f$=new Map;for(let H0 of L)f$.set(H0.to,Iq(H0));E=f$,z("daemon",`routing table now covers ${f$.size} host(s): ${Array.from(f$.keys()).join(", ")||"<empty>"}`,w)}await HU(J,w).catch((L)=>{z("daemon",`initial gc failed: ${L}`,w)});let j=await Fw(J,w);h(j),await Jw({rpxDir:A,verbose:w}).catch((L)=>{z("daemon",`DNS reconcile on start failed: ${L}`,w)}),await g1(j,{rpxDir:A,verbose:w,ownerPid:Y$.pid}).catch((L)=>{z("daemon",`DNS setup on start failed: ${L}`,w)});let F=await yq($,J),T=Bun.serve({port:U,hostname:f,tls:{key:F.key,cert:F.cert,ca:F.ca,requestCert:!1,rejectUnauthorized:!1},fetch:v1(B,w),error(L){return z("daemon",`https server error: ${L}`,w),new Response(`Server Error: ${L.message}`,{status:500})}}),H=null;if(Y>0)H=Bun.serve({port:Y,hostname:f,fetch(L){let f$=new URL(L.url),H0=(L.headers.get("host")??f$.hostname).split(":")[0];return new Response(null,{status:301,headers:{Location:`https://${H0}${f$.pathname}${f$.search}`}})}});if(w)R.success(`rpx daemon listening on https://${f}:${U}${H?` (http→https on :${Y})`:""}`),R.info(`pid file: ${Z}`),R.info(`registry: ${J}`);let G=_f((L)=>{h(L),g1(L,{rpxDir:A,verbose:w,ownerPid:Y$.pid}).catch((f$)=>{z("daemon",`DNS sync on registry change failed: ${f$}`,w)})},{dir:J,verbose:w}),q=setInterval(()=>{HU(J,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 q.unref==="function")q.unref();let N=!1,K,C=new Promise((L)=>{K=L});async function y(){if(N)return C;if(N=!0,clearInterval(q),G.close(),T.stop(!1),H?.stop(!1),await zw({rpxDir:A,verbose:w}).catch((L)=>{z("daemon",`DNS teardown failed: ${L}`,w)}),await l1(A),w)R.info("rpx daemon stopped");return K(),C}let S=(L)=>{z("daemon",`received ${L}, shutting down`,w),y().catch(()=>{})};return Y$.once("SIGINT",S),Y$.once("SIGTERM",S),{stop:y,done:C,httpsPort:typeof T.port==="number"?T.port:U,httpPort:H&&typeof H.port==="number"?H.port:Y,pidPath:Z}}function Lq(){let $=Y$.execPath,w=z0.basename($).toLowerCase();if((w==="bun"||w==="node"||w.startsWith("bun-"))&&Y$.argv[1])return[$,Y$.argv[1],"daemon:start"];return[$,"daemon:start"]}async function FF($={}){let w=$.rpxDir??U0(),A=$.verbose??!1;await Jw({rpxDir:w,verbose:A}).catch((B)=>{z("daemon",`DNS reconcile before ensureDaemonRunning: ${B}`,A)});let J=await Hw(w);if(J!==null&&t$(J))return z("daemon",`ensureDaemonRunning: already running pid=${J}`,A),{pid:J,spawned:!1};if(J!==null)z("daemon",`ensureDaemonRunning: clearing stale pid=${J}`,A),await l1(w);await T0.mkdir(w,{recursive:!0});let U=$.spawnCommand??Lq();if(U.length===0)throw Error("ensureDaemonRunning: spawnCommand is empty");z("daemon",`spawning daemon: ${U.join(" ")}`,A);let Y=Rq(U[0],U.slice(1),{detached:!0,stdio:"ignore",cwd:$.spawnCwd??Y$.cwd(),env:$.spawnEnv?{...Y$.env,...$.spawnEnv}:Y$.env});Y.unref();let f=null;Y.once("error",(B)=>{f=B});let W=$.startupTimeoutMs??5000,Z=$.pollIntervalMs??50,E=Date.now()+W;while(Date.now()<E){if(f)throw f;let B=await Hw(w);if(B!==null&&t$(B))return z("daemon",`daemon registered with pid=${B}`,A),{pid:B,spawned:!0};await new Promise((h)=>setTimeout(h,Z))}if(f)throw f;throw Error(`rpx daemon failed to start within ${W}ms (rpxDir=${w})`)}async function jF($={}){let w=$.rpxDir??U0(),A=$.verbose??!1,J=$.timeoutMs??5000,U=$.pollIntervalMs??50,Y=$.forceAfterTimeout??!0,f=await Hw(w);if(f===null||!t$(f)){if(f!==null)await l1(w);return await Jw({rpxDir:w,verbose:A}).catch(()=>{}),{stopped:!1,pid:f,forced:!1}}try{Y$.kill(f,"SIGTERM")}catch(Z){if(Z.code==="ESRCH")return await l1(w),{stopped:!1,pid:f,forced:!1};throw Z}let W=Date.now()+J;while(Date.now()<W){if(!t$(f))return z("daemon",`daemon pid=${f} stopped cleanly`,A),{stopped:!0,pid:f,forced:!1};await new Promise((Z)=>setTimeout(Z,U))}if(!Y)throw Error(`rpx daemon (pid=${f}) did not exit within ${J}ms`);z("daemon",`daemon pid=${f} did not exit, escalating to SIGKILL`,A);try{Y$.kill(f,"SIGKILL")}catch(Z){if(Z.code!=="ESRCH")throw Z}return await l1(w),await zw({rpxDir:w,verbose:A}).catch((Z)=>{z("daemon",`DNS teardown after SIGKILL: ${Z}`,A)}),{stopped:!0,pid:f,forced:!0}}async function zF($={}){let w=$.rpxDir??U0();if(await MU(w))return;await Jw({rpxDir:w,verbose:$.verbose})}p0();U$();import{spawn as Sq}from"node:child_process";import*as Gw from"node:process";class HF{processes=new Map;isShuttingDown=!1;async startProcess($,w,A){if(this.processes.has($)){z("start",`Process ${$} is already running`,A);return}let[J,...U]=w.command.split(" "),Y=w.cwd||Gw.cwd();z("start",`Starting process ${$}:`,A),z("start",` Command: ${J} ${U.join(" ")}`,A),z("start",` Working directory: ${Y}`,A),z("start",` Environment variables: ${J0(w.env)}`,A);let f=Sq(J,U,{cwd:Y,env:{...Gw.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:Y,process:f,env:w.env}),new Promise((W,Z)=>{if(f.on("error",(E)=>{if(!this.isShuttingDown)z("start",`Process ${$} failed to start: ${E}`,A),this.processes.delete($),Z(E),Gw.emit("SIGINT")}),f.on("exit",(E)=>{if(!this.isShuttingDown&&E!==null&&E!==0)z("start",`Process ${$} exited with code ${E}`,A),this.processes.delete($),Z(Error(`Process ${$} exited with code ${E}`)),Gw.emit("SIGINT")}),A)f.stdout?.on("data",(E)=>{z("process",`[${$}] ${E.toString().trim()}`,!0)}),f.stderr?.on("data",(E)=>{z("process",`[${$}] ERR: ${E.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&f.killed)this.processes.delete($),Z(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((J)=>{if(!A.process){J();return}A.process.once("exit",()=>{this.processes.delete($),z("start",`Process ${$} stopped`,w),J()});try{A.process.kill("SIGTERM"),setTimeout(()=>{if(A.process){z("start",`Force killing process ${$}`,w);try{A.process.kill("SIGKILL")}catch(U){}}},3000)}catch(U){z("start",`Error stopping process ${$}: ${U}`,w),this.processes.delete($),J()}})}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((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 IU=new HF;U$();import*as c$ from"node:fs/promises";import{homedir as Vq}from"node:os";import*as df from"node:path";import*as gf from"node:process";var Oq=/^[a-zA-Z0-9._-]+$/;function qw(){return df.join(Vq(),".stacks","rpx","registry.d")}function T1($){return typeof $==="string"&&$.length>0&&$.length<=128&&Oq.test($)}function lf($,w){if(!T1(w))throw Error(`invalid registry id: ${JSON.stringify(w)}`);return df.join($,`${w}.json`)}function TF($){if(!$||typeof $!=="object")return!1;let w=$,A=w.pid===void 0||typeof w.pid==="number"&&Number.isInteger(w.pid)&&w.pid>0;return typeof w.id==="string"&&T1(w.id)&&typeof w.from==="string"&&w.from.length>0&&typeof w.to==="string"&&w.to.length>0&&A&&typeof w.createdAt==="string"}async function Xq($){await c$.mkdir($,{recursive:!0})}async function GF($,w=qw(),A){if(!TF($))throw Error(`invalid registry entry: ${JSON.stringify($)}`);await Xq(w);let J=lf(w,$.id),U=`${J}.tmp.${gf.pid}.${Date.now()}`,Y=JSON.stringify($,null,2);try{await c$.writeFile(U,Y,{encoding:"utf8",mode:420}),await c$.rename(U,J),z("registry",`wrote entry ${$.id} → ${J}`,A)}catch(f){throw await c$.unlink(U).catch(()=>{}),f}}async function qF($,w=qw(),A){let J=lf(w,$);try{await c$.unlink(J),z("registry",`removed entry ${$}`,A)}catch(U){if(U.code!=="ENOENT")throw U}}async function tf($,w=qw(),A){let J=lf(w,$);try{let U=await c$.readFile(J,"utf8"),Y=JSON.parse(U);if(!TF(Y))return z("registry",`entry ${$} failed validation, removing`,A),await c$.unlink(J).catch(()=>{}),null;return Y}catch(U){if(U.code==="ENOENT")return null;if(U instanceof SyntaxError)return z("registry",`entry ${$} has invalid JSON, removing`,A),await c$.unlink(J).catch(()=>{}),null;throw U}}async function NF($=qw(),w){let A;try{A=await c$.readdir($)}catch(U){if(U.code==="ENOENT")return[];throw U}let J=[];for(let U of A){if(!U.endsWith(".json"))continue;let Y=U.slice(0,-5);if(!T1(Y))continue;let f=await tf(Y,$,w);if(f)J.push(f)}return J}p0();import{execSync as Pq}from"node:child_process";import*as Mw from"node:http";import*as LF from"node:http2";import*as SF from"node:net";import*as o from"node:process";var CU=($,w)=>(A)=>`\x1B[${$}m${A}\x1B[${w}m`,G0={bold:CU(1,22),dim:CU(2,22),green:CU(32,39),cyan:CU(36,39)};Q8();Df();p0();m1();U$();import*as RF from"node:fs";import*as KF from"node:path";import*as q0 from"node:process";function _q($){let w=$.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128);return w.length>0?w:"rpx"}async function pf($){if($.proxies.length===0)throw Error("runViaDaemon: no proxies provided");let w=$.verbose??!1,A=$.registryDir,J=new Set,U=$.proxies.map((j)=>{let F=j.id??_q(j.to);if(!n1(F))throw Error(`invalid registry id "${F}" derived from to="${j.to}"`);if(J.has(F))throw Error(`duplicate registry id "${F}" — set an explicit \`id\` on one of the proxies`);return J.add(F),{...j,id:F}}),Y=new Date().toISOString();for(let j of U)await ph({id:j.id,from:j.from,to:j.to,pid:$.persistent?void 0:q0.pid,cwd:q0.cwd(),createdAt:Y,cleanUrls:j.cleanUrls,changeOrigin:j.changeOrigin,pathRewrites:j.pathRewrites},A,w);let f=await sh({rpxDir:$.rpxDir,verbose:w,spawnCommand:$.spawnCommand,startupTimeoutMs:$.startupTimeoutMs,spawnEnv:$.spawnEnv});for(let j of U)R.success(`https://${j.to} → ${j.from}`);if(R.info(`(via rpx daemon pid=${f.pid}; \`rpx daemon:status\` to inspect)`),$.detached)return;let W=!1,Z=A??Aw(),E=U.map((j)=>j.id),B=async()=>{if(W)return;W=!0;for(let j of E)await Xf(j,A,w).catch((F)=>{z("runner",`removeEntry(${j}) failed: ${F}`,w)})},h=(j)=>{z("runner",`received ${j}, unregistering ${E.length} entries`,w),B().finally(()=>q0.exit(0))};q0.once("SIGINT",h),q0.once("SIGTERM",h),q0.once("exit",()=>{if(W)return;for(let j of E)try{RF.unlinkSync(KF.join(Z,`${j}.json`))}catch{}}),await new Promise(()=>{})}U$();import{exec as Dq}from"node:child_process";import Nw from"node:fs";import MF from"node:os";import af from"node:path";import*as t1 from"node:process";import{promisify as kq}from"node:util";var yU=kq(Dq),Y0=t1.platform==="win32"?af.join(t1.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",rf=!1;async function LU($){if(t1.platform==="win32")throw Error("Administrator privileges required on Windows");let w=Bw(),A=$.replace(/'/g,"'\\''");try{if(w){let{stdout:U}=await yU(`echo '${w}' | sudo -S sh -c '${A}' 2>/dev/null`);return rf=!0,U}if(rf)try{let{stdout:U}=await yU(`sudo -n sh -c '${A}'`);return U}catch(U){z("hosts","Cached sudo privileges expired, requesting again",!0)}let{stdout:J}=await yU(`sudo sh -c '${A}'`);return rf=!0,J}catch(J){throw Error(`Failed to execute sudo command: ${J.message}`)}}async function p1($,w){z("hosts",`Adding hosts: ${$.join(", ")}`,w),z("hosts",`Using hosts file at: ${Y0}`,w);try{let A;try{A=await Nw.promises.readFile(Y0,"utf-8")}catch{z("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{A=await LU(`cat "${Y0}"`)}catch(f){throw console.log(" Could not read hosts file — skipping hosts setup"),z("hosts",`sudo read also failed: ${f}`,w),Error(`Cannot read hosts file: ${f}`)}}let J=$.filter((f)=>{let W=`127.0.0.1 ${f}`,Z=`::1 ${f}`;return!A.includes(W)&&!A.includes(Z)});if(J.length===0){z("hosts","All hosts already exist in hosts file",w);return}let U=J.map((f)=>`
|
|
238
243
|
# Added by rpx
|
|
239
|
-
127.0.0.1 ${
|
|
240
|
-
::1 ${
|
|
241
|
-
`),Y=
|
|
242
|
-
`),U=!1,Y=J.filter((
|
|
244
|
+
127.0.0.1 ${f}
|
|
245
|
+
::1 ${f}`).join(`
|
|
246
|
+
`),Y=af.join(MF.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Nw.promises.writeFile(Y,A+U,"utf8"),await LU(`cat "${Y}" | tee "${Y0}" > /dev/null`),console.log(` Hosts updated: ${J.join(", ")}`)}catch(f){console.log(" Could not update hosts file automatically"),console.log(" Add these entries to /etc/hosts:"),J.forEach((W)=>{console.log(` 127.0.0.1 ${W}`),console.log(` ::1 ${W}`)}),console.log(` Or run: sudo nano ${Y0}`)}finally{try{await Nw.promises.unlink(Y)}catch{}}}catch(A){z("hosts",`Failed to manage hosts file: ${A.message}`,w)}}async function IF($,w){z("hosts",`Removing hosts: ${$.join(", ")}`,w);try{let A;try{A=await Nw.promises.readFile(Y0,"utf-8")}catch{z("hosts","Reading hosts file requires elevated permissions, using sudo",w);try{A=await LU(`cat "${Y0}"`)}catch(Z){throw z("hosts",`sudo read also failed: ${Z}`,w),Error(`Cannot read hosts file: ${Z}`)}}let J=A.split(`
|
|
247
|
+
`),U=!1,Y=J.filter((Z)=>{if($.some((B)=>Z.includes(` ${B}`)&&(Z.includes("127.0.0.1")||Z.includes("::1"))))return U=!0,!1;if(Z.trim()==="# Added by rpx")return U=!0,!1;return!0});if(!U){z("hosts","No matching hosts found to remove",w);return}while(Y[Y.length-1]?.trim()==="")Y.pop();let f=`${Y.join(`
|
|
243
248
|
`)}
|
|
244
|
-
`,Z=W8.join(KF.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Bw.promises.writeFile(Z,h,"utf8"),await $U(`cat "${Z}" | tee "${A0}" > /dev/null`),z("hosts","Hosts removed successfully",w)}catch(f){z("hosts","Could not clean up hosts file automatically",w)}finally{try{await Bw.promises.unlink(Z)}catch(f){z("hosts",`Failed to remove temporary file: ${f}`,w)}}}catch(A){z("hosts",`Failed to clean up hosts file: ${A.message}`,w)}}async function x1($,w){z("hosts",`Checking hosts: ${$}`,w);let A;try{A=await Bw.promises.readFile(A0,"utf-8")}catch(J){z("hosts",`Error reading hosts file: ${J}`,w);try{let U=Jw(),Y;if(U)Y=`echo '${U}' | sudo -S cat "${A0}" 2>/dev/null`;else Y=`sudo -n cat "${A0}" 2>/dev/null || cat "${A0}" 2>/dev/null || echo ""`;let{stdout:h}=await eJ(Y);A=h}catch(U){return z("hosts",`Cannot read hosts file, assuming entries don't exist: ${U}`,w),$.map(()=>!1)}}return $.map((J)=>{let U=`127.0.0.1 ${J}`,Y=`::1 ${J}`;return A.includes(U)||A.includes(Y)})}T$();import*as wU from"node:net";function jw($,w,A){return z("port",`Checking if port ${$} is in use on ${w}`,A),new Promise((J)=>{let U=wU.createServer(),Y=setTimeout(()=>{z("port",`Checking port ${$} timed out, assuming it's in use`,A),U.close(),J(!0)},3000);U.once("error",(h)=>{if(clearTimeout(Y),h.code==="EADDRINUSE")z("port",`Port ${$} is in use`,A),J(!0);else z("port",`Error checking port ${$}: ${h.message}`,A),J(!0)}),U.once("listening",()=>{clearTimeout(Y),z("port",`Port ${$} is available`,A),U.close(),J(!1)});try{U.listen($,w)}catch(h){clearTimeout(Y),z("port",`Exception checking port ${$}: ${h}`,A),J(!0)}})}async function T7($,w,A,J=50){z("port",`Finding available port starting from ${$} (max attempts: ${J})`,A);let U=$,Y=0;while(Y<J){if(Y++,!await jw(U,w,A))return z("port",`Found available port: ${U} after ${Y} attempts`,A),U;z("port",`Port ${U} is in use, trying ${U+1} (attempt ${Y}/${J})`,A),U++}throw Error(`Unable to find available port after ${J} attempts starting from ${$}`)}function IF($,w,A=5000,J){return z("port",`Testing connection to ${w}:${$}`,J),new Promise((U)=>{let Y=wU.connect({host:w,port:$,timeout:A});Y.once("connect",()=>{z("port",`Successfully connected to ${w}:${$}`,J),Y.end(),U(!0)}),Y.once("timeout",()=>{z("port",`Connection to ${w}:${$} timed out`,J),Y.destroy(),U(!1)}),Y.once("error",(h)=>{z("port",`Failed to connect to ${w}:${$}: ${h.message}`,J),Y.destroy(),U(!1)})})}class AU{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 jw($,this.hostname,this.verbose))return this.findNextAvailablePort($+1,w);if(w){if(!await IF($,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 T7($,this.hostname,this.verbose,this.maxRetries);if(w){if(!await IF(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 yI=new AU;import{spawn as G7}from"node:child_process";import*as zw from"node:process";T$();class JU{processes=new Map;isShuttingDown=!1;async startProcess($,w,A){if(this.processes.has($)){z("start",`Process ${$} is already running`,A);return}let[J,...U]=w.command.split(" "),Y=w.cwd||zw.cwd();z("start",`Starting process ${$}:`,A),z("start",` Command: ${J} ${U.join(" ")}`,A),z("start",` Working directory: ${Y}`,A),z("start",` Environment variables: ${w0(w.env)}`,A);let h=G7(J,U,{cwd:Y,env:{...zw.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:Y,process:h,env:w.env}),new Promise((Z,f)=>{if(h.on("error",(E)=>{if(!this.isShuttingDown)z("start",`Process ${$} failed to start: ${E}`,A),this.processes.delete($),f(E),zw.emit("SIGINT")}),h.on("exit",(E)=>{if(!this.isShuttingDown&&E!==null&&E!==0)z("start",`Process ${$} exited with code ${E}`,A),this.processes.delete($),f(Error(`Process ${$} exited with code ${E}`)),zw.emit("SIGINT")}),A)h.stdout?.on("data",(E)=>{z("process",`[${$}] ${E.toString().trim()}`,!0)}),h.stderr?.on("data",(E)=>{z("process",`[${$}] ERR: ${E.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&h.killed)this.processes.delete($),f(Error(`Process ${$} was killed during startup`));else z("start",`Process ${$} started successfully`,A),Z()},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((J)=>{if(!A.process){J();return}A.process.once("exit",()=>{this.processes.delete($),z("start",`Process ${$} stopped`,w),J()});try{A.process.kill("SIGTERM"),setTimeout(()=>{if(A.process){z("start",`Force killing process ${$}`,w);try{A.process.kill("SIGKILL")}catch(U){}}},3000)}catch(U){z("start",`Error stopping process ${$}: ${U}`,w),this.processes.delete($),J()}})}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((J)=>{N.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 DI=new JU;T$();var EU=new JU,_7="0.12.0",X7=new AU("0.0.0.0"),P1=new Set,F8=!1,ZU=null,B8=null;async function WU($){if(F8)return z("cleanup","Cleanup already in progress, skipping",$?.verbose),B8||Promise.resolve();F8=!0,z("cleanup","Starting cleanup process",$?.verbose),B8=new Promise((w)=>{ZU=w});try{await EU.stopAll($?.verbose),N.info("Shutting down proxy servers...");let w=[],A=Array.from(P1).map((J)=>new Promise((U)=>{J.close(()=>{z("cleanup","Server closed successfully",$?.verbose),U()})}));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 J=$.domains.filter((U)=>{if(U==="test.local")return!0;return U!=="localhost"&&!U.startsWith("localhost.")&&U!=="127.0.0.1"});if(z("cleanup",`Filtered domains for cleanup: ${JSON.stringify(J)}`,$?.verbose),J.length>0)N.info("Cleaning up hosts file entries..."),w.push(MF(J,$?.verbose).then(()=>{z("cleanup",`Removed hosts entries for ${J.join(", ")}`,$?.verbose)}).catch((U)=>{z("cleanup",`Failed to remove hosts entries: ${U}`,$?.verbose),N.warn(`Failed to clean up hosts file entries for ${J.join(", ")}:`,U)}))}if($?.certs&&$.domains?.length){z("cleanup","Cleaning up SSL certificates",$?.verbose),N.info("Cleaning up SSL certificates...");let J=$.domains.map(async(U)=>{try{await AF(U,$?.verbose),z("cleanup",`Removed certificates for ${U}`,$?.verbose)}catch(Y){z("cleanup",`Failed to remove certificates for ${U}: ${Y}`,$?.verbose),N.warn(`Failed to clean up certificates for ${U}:`,Y)}});w.push(...J)}await Promise.allSettled(w),z("cleanup","All cleanup tasks completed successfully",$?.verbose),N.success("All cleanup tasks completed successfully")}catch(w){z("cleanup",`Error during cleanup: ${w}`,$?.verbose),N.error("Error during cleanup:",w)}finally{if(ZU)ZU();ZU=null,F8=!1;let w=$&&"vitePluginUsage"in $&&$.vitePluginUsage===!0;if(s.env.NODE_ENV!=="test"&&s.env.BUN_ENV!=="test"&&!w)s.exit(0)}return B8}var j8=!1;function z8($){if(j8){z("signal",`Received second ${$} signal, forcing exit`,!0),s.exit(1);return}j8=!0,z("signal",`Received ${$} signal, initiating cleanup`,!0),WU().catch((w)=>{z("signal",`Cleanup failed after ${$}: ${w}`,!0),s.exit(1)}).finally(()=>{j8=!1})}s.once("SIGINT",()=>z8("SIGINT"));s.once("SIGTERM",()=>z8("SIGTERM"));s.on("uncaughtException",($)=>{z("process",`Uncaught exception: ${$}`,!0),N.error("Uncaught exception:",$),z8("uncaughtException")});async function b1($,w,A,J=5){z("connection",`Testing connection to ${$}:${w} (retries left: ${J})`,A);let U=15000,Y=Date.now();if(s.env.RPX_BYPASS_CONNECTION_TEST==="true"){z("connection",`Bypassing connection test for ${$}:${w} due to RPX_BYPASS_CONNECTION_TEST flag`,A);return}let h=()=>new Promise((Z,f)=>{let E=DF.connect({host:$,port:w,timeout:3000});E.once("connect",()=>{z("connection",`Successfully connected to ${$}:${w}`,A),E.end(),Z()}),E.once("timeout",()=>{z("connection",`Connection to ${$}:${w} timed out`,A),E.destroy(),f(Error("Connection timed out"))}),E.once("error",(W)=>{z("connection",`Failed to connect to ${$}:${w}: ${W}`,A),E.destroy(),f(W)})});try{await h()}catch(Z){if(Date.now()-Y>U){z("connection",`Connection test timed out after ${U}ms, but continuing anyway`,A),N.warn(`Connection test to ${$}:${w} timed out, but RPX will try to proceed anyway.`);return}if(Z.code==="ECONNREFUSED"&&J>0)return z("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${J} retries left)`,A),await new Promise((E)=>setTimeout(E,2000)),b1($,w,A,J-1);if(J>0)try{z("connection",`Trying HTTP request to ${$}:${w}`,A),await new Promise((E,W)=>{let F=Hw.request({hostname:$,port:w,path:"/",method:"HEAD",timeout:5000},(j)=>{z("connection",`Received HTTP response with status: ${j.statusCode}`,A),E()});F.on("error",(j)=>W(j)),F.on("timeout",()=>{F.destroy(),W(Error("HTTP request timed out"))}),F.end()}),z("connection",`HTTP request to ${$}:${w} succeeded`,A);return}catch(E){return z("connection",`HTTP request to ${$}:${w} failed: ${E}`,A),z("connection",`Retrying socket connection in 2 seconds... (${J} retries left)`,A),await new Promise((W)=>setTimeout(W,2000)),b1($,w,A,J-1)}let f=`Failed to connect to ${$}:${w} after ${5-J} attempts: ${Z.message}`;z("connection",`${f}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,A),N.warn(f),N.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 OF($){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"),J=Number.parseInt(w.port)||(w.protocol.includes("https:")?443:80),U=[A.hostname];if(!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 x1(U,$.verbose))[0]){N.info(`Adding ${A.hostname} to hosts file...`),N.info("This may require sudo/administrator privileges");try{await Q1(U,$.verbose)}catch(Z){if(N.error("Failed to add hosts entry:",Z.message),N.warn("You can manually add this entry to your hosts file:"),N.warn(`127.0.0.1 ${A.hostname}`),N.warn(`::1 ${A.hostname}`),s.platform==="win32")N.warn("On Windows:"),N.warn("1. Run notepad as administrator"),N.warn("2. Open C:\\Windows\\System32\\drivers\\etc\\hosts");else N.warn("On Unix systems:"),N.warn("sudo nano /etc/hosts")}}else z("hosts",`Host entry already exists for ${A.hostname}`,$.verbose)}catch(h){N.error("Failed to check hosts file:",h.message)}}try{await b1(w.hostname,J,$.verbose)}catch(h){z("server",`Connection test failed: ${h}`,$.verbose),N.error(h.message),N.warn("Continuing with proxy setup despite connection test failure..."),N.info("If you need to bypass connection testing, set environment variable RPX_BYPASS_CONNECTION_TEST=true")}let Y=$._cachedSSLConfig||null;if($.https)try{if($.https===!0)$.https=V1({...$,to:A.hostname});if(Y=await c0({...$,to:A.hostname,https:$.https}),!Y){if(z("ssl",`Generating new certificates for ${A.hostname}`,$.verbose),await A1({...$,from:w.toString(),to:A.hostname,https:$.https}),Y=await c0({...$,to:A.hostname,https:$.https}),!Y)throw Error(`Failed to load SSL configuration after generating certificates for ${A.hostname}`)}}catch(h){throw z("server",`SSL setup failed: ${h}`,$.verbose),h}z("server",`Setting up reverse proxy with SSL config for ${A.hostname}`,$.verbose),await Q7({...$,from:$.from||"localhost:5173",to:A.hostname,fromPort:J,sourceUrl:{hostname:w.hostname,host:w.host},ssl:Y})}async function k7($,w,A,J,U,Y,h,Z,f,E,W){z("proxy",`Creating proxy server ${$} -> ${w} with cleanUrls: ${E}`,f);function F(H){let q={};for(let[G,R]of Object.entries(H))if(!G.startsWith(":"))q[G]=R;return q}let j=(H,q)=>{z("request",`Incoming request: ${H.method} ${H.url}`,f);let G=H.url||"/",R=H.method||"GET";if(H instanceof VF.Http2ServerRequest){let M=H.headers;R=M[":method"]||R,G=M[":path"]||G}if(E){if(!G.match(/\.[a-z0-9]+$/i))if(G.endsWith("/"))G=`${G}index.html`;else G=`${G}.html`}let K=F(H.headers);if(W)K.host=`${Y.hostname}:${A}`,z("request",`Changed origin: setting host header to ${K.host}`,f);let L={hostname:Y.hostname,port:A,path:G,method:R,headers:K};z("request",`Proxy request options: ${w0(L)}`,f);let C=Hw.request(L,(M)=>{if(z("response",`Proxy response received with status ${M.statusCode}`,f),E&&M.statusCode===404){let c$=[];if(G.endsWith(".html"))c$.push(G.slice(0,-5));else if(!G.match(/\.[a-z0-9]+$/i))c$.push(`${G}.html`);if(!G.endsWith("/"))c$.push(`${G}/index.html`);if(c$.length>0){z("cleanUrls",`Trying alternative paths: ${c$.join(", ")}`,f);let U1=(i1)=>{if(i1.length===0){q.writeHead(M.statusCode||404,M.headers),M.pipe(q);return}let H8=i1[0],PF={...L,path:H8},T8=Hw.request(PF,(c1)=>{if(c1.statusCode===200)z("cleanUrls",`Found matching path: ${H8}`,f),q.writeHead(c1.statusCode,c1.headers),c1.pipe(q);else U1(i1.slice(1))});T8.on("error",()=>U1(i1.slice(1))),T8.end()};U1(c$);return}}let V$={...M.headers,"Strict-Transport-Security":"max-age=31536000; includeSubDomains; preload","X-Content-Type-Options":"nosniff"};q.writeHead(M.statusCode||500,V$),M.pipe(q)});C.on("error",(M)=>{z("request",`Proxy request failed: ${M}`,f),N.error("Proxy request failed:",M),q.writeHead(502),q.end(`Proxy Error: ${M.message}`)}),H.pipe(C)};if(z("server",`Creating server with SSL config: ${!!h}`,f),h)return new Promise((H,q)=>{try{let G=Bun.serve({port:J,hostname:U,tls:{key:h.key,cert:h.cert,ca:h.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(R){let K=new URL(R.url);z("request",`Bun.serve received: ${R.method} ${K.pathname}`,f);let L=`http://${Y.host}`,C=new URL(K.pathname+K.search,L);try{let M=new Headers(R.headers);if(M.set("host",Y.host),W)M.set("origin",L);M.set("x-forwarded-for","127.0.0.1"),M.set("x-forwarded-proto","https"),M.set("x-forwarded-host",w);let V$=await fetch(C.toString(),{method:R.method,headers:M,body:R.body,redirect:"manual"}),c$=new Headers(V$.headers);if(E&&K.pathname.endsWith(".html")){let U1=K.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:U1}})}return new Response(V$.body,{status:V$.status,statusText:V$.statusText,headers:c$})}catch(M){return z("request",`Proxy error: ${M}`,f),new Response(`Proxy Error: ${M}`,{status:502})}},error(R){return z("server",`Bun.serve error: ${R}`,f),new Response(`Server Error: ${R.message}`,{status:500})}});P1.add(G),SF({from:$,to:w,vitePluginUsage:Z,listenPort:J,ssl:!0,cleanUrls:E,verbose:f}),H()}catch(G){q(G)}});let B=Hw.createServer(j);function T(H){return P1.add(H),new Promise((q,G)=>{H.listen(J,U,()=>{z("server",`Server listening on port ${J}`,f),SF({from:$,to:w,vitePluginUsage:Z,listenPort:J,ssl:!!h,cleanUrls:E,verbose:f}),q()}),H.on("error",(R)=>{z("server",`Server error: ${R}`,f),G(R)})})}return T(B)}async function Q7($){z("setup",`Setting up reverse proxy: ${w0($)}`,$.verbose);let{from:w,to:A,fromPort:J,sourceUrl:U,ssl:Y,verbose:h,cleanup:Z,vitePluginUsage:f,changeOrigin:E,cleanUrls:W}=$,F=80,j=443,B="0.0.0.0",T=$.portManager||X7;try{if(A&&!A.includes("localhost")&&!A.includes("127.0.0.1")){if(!(await x1([A],h))[0]){N.warn(`The hostname ${A} isn't in your hosts file. Adding it now...`);try{await Q1([A],h),N.success(`Added ${A} to your hosts file.`)}catch(K){N.error(`Failed to add ${A} to your hosts file: ${K}`),N.info(`You may need to manually add '127.0.0.1 ${A}' to your /etc/hosts file.`)}}}else if(s.platform!=="darwin"&&A&&A.includes("localhost")&&!A.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await x1([A],h))[0]){z("hosts",`${A} not found in hosts file, adding...`,h);try{await Q1([A],h)}catch(K){z("hosts",`Failed to add ${A} to hosts file: ${K}`,h)}}}if(Y&&!T.usedPorts.has(F)){if(!await jw(F,B,h))z("setup","Starting HTTP redirect server",h),_F(h),T.usedPorts.add(F);else if(z("setup","Port 80 is in use, skipping HTTP redirect",h),h)N.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let H=Y?j:F,q=await jw(H,B,h),G;if(q){if(z("setup",`Port ${H} is already in use`,h),h)N.warn(`Port ${H} is already in use. This may be another instance of rpx or another service.`);if(H===443){if(G=await T.getNextAvailablePort(3443,!0),z("setup",`Using port ${G} instead of ${H}`,h),h)N.info(`Using port ${G} instead. Access your site at https://${A}:${G}`)}else if(G=await T.getNextAvailablePort(H+1000,!0),z("setup",`Using port ${G} instead of ${H}`,h),h)N.info(`Using port ${G} instead. Access your site at http://${A}:${G}`)}else G=H,T.usedPorts.add(G),z("setup",`Using standard ${H===443?"HTTPS":"HTTP"} port ${H} for ${A}`,h);await k7(w,A,J,G,B,U,Y,f,h,W,E)}catch(H){z("setup",`Setup failed: ${H}`,h),N.error(`Failed to setup reverse proxy: ${H.message}`),WU({domains:[A],hosts:typeof Z==="boolean"?Z:Z?.hosts,certs:typeof Z==="boolean"?Z:Z?.certs,verbose:h,vitePluginUsage:f})}}function _F($){z("redirect","Starting HTTP redirect server",$);let w=Hw.createServer((A,J)=>{let U=A.headers.host||"";z("redirect",`Redirecting request from ${U}${A.url} to HTTPS`,$),J.writeHead(301,{Location:`https://${U}${A.url}`}),J.end()}).listen(80);P1.add(w),z("redirect","HTTP redirect server started",$)}function XF($){let w={...Fh,...$};if(z("proxy",`Starting proxy with options: ${w0(w)}`,w?.verbose),w.viaDaemon){if(!w.from||!w.to){N.error("viaDaemon mode requires both `from` and `to`");return}Z8({proxies:[{id:w.id,from:w.from,to:w.to,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}],verbose:w.verbose}).catch((f)=>{N.error(`Failed to register with rpx daemon: ${f.message}`),s.exit(1)});return}let A=w.to||"",J=A.split(".").pop()?.toLowerCase()||"",U=s.platform==="darwin"&&A&&!A.includes("localhost")&&!A.includes("127.0.0.1"),Y=["dev","app","page","new","day","foo"],h=["test","localhost","local","example","invalid"];if(U&&Y.includes(J)&&w?.verbose)N.warn(`The .${J} TLD may not work reliably for local development`),N.info(` Google owns .${J} with HSTS preloading, which can bypass local DNS`),N.info(" Consider using a reserved TLD: .test, .localhost, or .local");if(U)Promise.resolve().then(() => (fU(),hU)).then(({startDnsServer:f,setupResolver:E})=>{f([A],w.verbose).then((W)=>{if(W)E(w.verbose,[A]).then(()=>{if(w.verbose)if(h.includes(J))N.success(`DNS server started for .${J} domains`);else N.success(`DNS server started for .${J} domains (hosts file entry also added)`)});else z("dns",`Could not start DNS server - ${A} may not resolve in browser`,w.verbose)})}).catch((f)=>{z("dns",`Failed to start DNS server: ${f}`,w.verbose)});let Z={from:w.from,to:w.to,cleanUrls:w.cleanUrls,https:V1(w),cleanup:w.cleanup,vitePluginUsage:w.vitePluginUsage,changeOrigin:w.changeOrigin,verbose:w.verbose,regenerateUntrustedCerts:w.regenerateUntrustedCerts};z("proxy",`Server options: ${w0(Z)}`,w.verbose),OF(Z).catch((f)=>{z("proxy",`Failed to start proxy: ${f}`,w.verbose),N.error(`Failed to start proxy: ${f.message}`),WU({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 x7($){return $?.verbose||!1}async function kF($){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=x7(w);if(z("config",`Starting with config: ${w0(w,2)}`,A),z("config",`Is multi-proxy? ${"proxies"in w}`,A),w.viaDaemon){let T="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((H)=>({id:H.id,from:H.from,to:H.to,cleanUrls:H.cleanUrls??w.cleanUrls,changeOrigin:H.changeOrigin??w.changeOrigin,pathRewrites:H.pathRewrites})):[{id:w.id,from:w.from,to:w.to,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}];await Z8({proxies:T,verbose:A});return}if("proxies"in w&&Array.isArray(w.proxies)){z("servers",`Found ${w.proxies.length} proxies in config`,A);for(let B of w.proxies)if(B.start){let T=`${B.from}-${B.to}`;try{z("watch",`Starting command for ${T} with command: ${B.start.command}`,A),N.info(`Starting command for ${T}...`),await EU.startProcess(T,B.start,A);let H=new URL(B.from.startsWith("http")?B.from:`http://${B.from}`),q=H.hostname||"localhost",G=Number(H.port)||80;try{await b1(q,G,A),z("watch",`Dev server is ready at ${q}:${G}`,A)}catch(R){z("watch",`Connection check failed, but continuing with proxy setup: ${R}`,A),N.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(H){throw z("watch",`Failed to start command for ${T}: ${H}`,A),Error(`Failed to start command for ${T}: ${H}`)}}else z("watch",`No start command for proxy ${B.from} -> ${B.to}`,A)}else if("start"in w&&w.start){z("watch","Found start command in single proxy config",A);let B=`${w.from}-${w.to}`;try{if(w.start)z("watch",`Starting command: ${w.start.command}`,A),await EU.startProcess(B,w.start,A);let T=new URL(w.from?.startsWith("http")?w.from:`http://${w.from}`),H=T.hostname||"localhost",q=Number(T.port)||80;try{await b1(H,q,A),z("watch",`Dev server is ready at ${H}:${q}`,A)}catch(G){z("watch",`Connection check failed, but continuing with proxy setup: ${G}`,A),N.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(T){throw z("watch",`Failed to run start command: ${T}`,A),Error(`Failed to run start command: ${T}`)}}else z("watch","No start command found in config",A);let J="proxies"in w&&Array.isArray(w.proxies)?w.proxies[0]?.to:("to"in w)?w.to:"rpx.localhost";if(s.platform!=="win32"&&(w.https||w.cleanup?.hosts!==!1)){if(!Jw())try{z("sudo","Pre-acquiring sudo credentials for privileged operations",A),O7("sudo -v",{stdio:"inherit"})}catch{z("sudo","Could not pre-acquire sudo credentials",A)}}if(w.https){let B=await c0(w);if(!B){if(z("ssl",`No valid or trusted certificates found for ${J}, generating new ones`,w.verbose),await A1(w),B=await c0(w),!B)throw Error(`Failed to load SSL certificates after generation for ${J}`)}else z("ssl",`Using existing and trusted certificates for ${J}`,w.verbose);w._cachedSSLConfig=B}let U="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((B)=>({...B,https:w.https,cleanup:w.cleanup,cleanUrls:B.cleanUrls??("cleanUrls"in w?w.cleanUrls:!1),vitePluginUsage:w.vitePluginUsage,changeOrigin:B.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}],Y=U.map((B)=>B.to||"rpx.localhost"),h=w._cachedSSLConfig,Z=Y.filter((B)=>B&&!B.includes("localhost")&&!B.includes("127.0.0.1")),f=["dev","app","page","new","day","foo"],E=["test","localhost","local","example","invalid"],W=[...new Set(Z.map((B)=>B.split(".").pop()?.toLowerCase()))],F=W.filter((B)=>!!B&&f.includes(B));if(F.length>0&&A)N.warn(`The following TLDs may not work reliably for local development: ${F.map((B)=>`.${B}`).join(", ")}`),N.info(" These TLDs have HSTS preloading which can bypass local DNS"),N.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(s.platform==="darwin"&&Z.length>0){let{startDnsServer:B,setupResolver:T}=await Promise.resolve().then(() => (fU(),hU));if(await B(Z,A)){if(await T(A,Z),A)if(W.every((G)=>!!G&&E.includes(G)))N.success(`DNS server started for ${W.map((G)=>`.${G}`).join(", ")} domains`);else N.success(`DNS server started for ${W.map((G)=>`.${G}`).join(", ")} domains (hosts file entries also added)`)}else z("dns","Could not start DNS server - custom domains may not resolve",A)}let j=async()=>{z("cleanup","Starting cleanup handler",w.verbose);try{let{stopDnsServer:B,removeResolver:T}=await Promise.resolve().then(() => (fU(),hU));B(w.verbose),await T(w.verbose)}catch(B){z("cleanup",`Error stopping DNS server: ${B}`,w.verbose)}try{await EU.stopAll(w.verbose)}catch(B){z("cleanup",`Error stopping processes: ${B}`,w.verbose)}await WU({domains:Y,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(s.on("SIGINT",j),s.on("SIGTERM",j),s.on("uncaughtException",(B)=>{z("process",`Uncaught exception: ${B}`,!0),console.error("Uncaught exception:",B),j()}),h&&U.length>1){z("proxies",`Creating shared HTTPS server for ${U.length} domains`,A);let B=new Map;for(let G of U){let R=G.to||"rpx.localhost",K=new URL(G.from?.startsWith("http")?G.from:`http://${G.from}`);if(B.set(R,{sourceHost:K.host,cleanUrls:G.cleanUrls||!1,changeOrigin:G.changeOrigin||!1,pathRewrites:G.pathRewrites}),z("proxies",`Route: ${R} → ${K.host}`,A),!R.includes("localhost")&&!R.includes("127.0.0.1"))try{if(!(await x1([R],A))[0])await Q1([R],A)}catch{z("hosts",`Could not add hosts entry for ${R}`,A)}}if(!await jw(80,"0.0.0.0",A))_F(A);let H=443;if(await jw(H,"0.0.0.0",A)){if(z("proxies",`Port ${H} is already in use, cannot start shared proxy`,A),A)N.warn(`Port ${H} is in use. Shared HTTPS proxy cannot start.`);return}try{let G=Bun.serve({port:H,hostname:"0.0.0.0",tls:{key:h.key,cert:h.cert,ca:h.ca,requestCert:!1,rejectUnauthorized:!1},fetch:D1((R)=>B.get(R),A),error(R){return z("server",`Shared proxy server error: ${R}`,A),new Response(`Server Error: ${R.message}`,{status:500})}});P1.add(G),z("proxies",`Shared HTTPS proxy listening on port ${H} for ${B.size} domains`,A)}catch(G){z("proxies",`Failed to start shared proxy: ${G}`,A),console.error("Failed to start shared HTTPS proxy:",G),j()}}else for(let B of U)try{let T=B.to||"rpx.localhost";z("proxy",`Starting proxy for ${T} with SSL config: ${!!h}`,B.verbose),await OF({from:B.from||"localhost:5173",to:T,cleanUrls:B.cleanUrls||!1,https:B.https||!1,cleanup:B.cleanup||!1,vitePluginUsage:B.vitePluginUsage||!1,verbose:B.verbose||!1,_cachedSSLConfig:h,changeOrigin:B.changeOrigin||!1})}catch(T){z("proxies",`Failed to start proxy for ${B.to}: ${T}`,B.verbose),console.error(`Failed to start proxy for ${B.to}:`,T),j()}}function SF($){if($?.vitePluginUsage||!$?.verbose)return;if(console.log(""),console.log(` ${H0.green(H0.bold("rpx"))} ${H0.green(`v${_7}`)}`),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`)}ph();var rI=new Aw("rpx",{showTags:!1});function QF($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}var t$=new NU("rpx"),xF="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 kF(Dw);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),l$.exit(1)}w.start=A}return XF(w)});t$.command("watch:start <proxy>","Start the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{let A=QF(Dw)?Dw.proxies.find((J)=>J.to===$||`${J.from}-${J.to}`===$):Dw.to===$?Dw:null;if(!A?.start)console.error(`No watch configuration found for proxy: ${$}`),l$.exit(1);try{await aJ.startProcess($,A.start,w.verbose),console.log(`Started dev server for ${$}`)}catch(J){console.error(`Failed to start dev server for ${$}:`,J),l$.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 aJ.stopProcess($,w.verbose),console.log(`Stopped dev server for ${$}`)}catch(A){console.error(`Failed to stop dev server for ${$}:`,A),l$.exit(1)}});t$.command("watch:stopall","Stop all running dev servers").option("--verbose","Enable verbose logging").action(async($)=>{try{await aJ.stopAll($.verbose),console.log("Stopped all dev servers")}catch(w){console.error("Failed to stop all dev servers:",w),l$.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("--verbose","Enable verbose logging").action(async($)=>{try{await(await ZF({rpxDir:$.rpxDir,registryDir:$.registryDir,httpsPort:typeof $.httpsPort==="string"?Number.parseInt($.httpsPort,10):$.httpsPort,httpPort:typeof $.httpPort==="string"?Number.parseInt($.httpPort,10):$.httpPort,hostname:$.hostname,verbose:$.verbose??!0})).done,l$.exit(0)}catch(w){console.error(`Failed to start rpx daemon: ${w.message}`),l$.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 WF({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??z0(),A=await fw(w),J=await fF(w),U=$.registryDir,Y=await HF(U).catch(()=>[]);if($.json){console.log(JSON.stringify({running:J,pid:A,pidFile:Zw(w),rpxDir:w,registryDir:U??Ww(),entries:Y},null,2));return}if(!J){if(console.log("rpx daemon: not running"),A!==null)console.log(`(stale pid file at ${Zw(w)} \u2192 pid ${A})`)}else console.log(`rpx daemon: running (pid=${A})`),console.log(`pid file: ${Zw(w)}`);if(console.log(`registry: ${U??Ww()}`),Y.length===0){console.log("no registered hosts");return}console.log(`registered hosts (${Y.length}):`);for(let h of Y){let Z=h.pid!==void 0?`, pid=${h.pid}`:"";console.log(` https://${h.to} \u2192 ${h.from} (id=${h.id}${Z})`)}});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"),l$.exit(1);if(!J1($.id))console.error(`invalid id: ${JSON.stringify($.id)} (must match /^[a-zA-Z0-9._-]+$/, \u2264128 chars)`),l$.exit(1);try{await jF({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}`),l$.exit(1)}if($.skipSpawn){console.log(`registered ${$.to} \u2192 ${$.from} (daemon spawn skipped)`);return}try{let w=await EF({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`"),l$.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(!J1($))console.error(`invalid id: ${JSON.stringify($)}`),l$.exit(1);let A=await f8($,w.registryDir,w.verbose);if(!A){console.log(`no registry entry for id=${$}`);return}await zF($,w.registryDir,w.verbose),console.log(`unregistered ${A.to} (id=${$})`)});t$.command("version","Show the version of the Reverse Proxy CLI").action(()=>{console.log(xF)});t$.version(xF);t$.help();t$.run();
|
|
249
|
+
`,W=af.join(MF.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Nw.promises.writeFile(W,f,"utf8"),await LU(`cat "${W}" | tee "${Y0}" > /dev/null`),z("hosts","Hosts removed successfully",w)}catch(Z){z("hosts","Could not clean up hosts file automatically",w)}finally{try{await Nw.promises.unlink(W)}catch(Z){z("hosts",`Failed to remove temporary file: ${Z}`,w)}}}catch(A){z("hosts",`Failed to clean up hosts file: ${A.message}`,w)}}async function r1($,w){z("hosts",`Checking hosts: ${$}`,w);let A;try{A=await Nw.promises.readFile(Y0,"utf-8")}catch(J){z("hosts",`Error reading hosts file: ${J}`,w);try{let U=Bw(),Y;if(U)Y=`echo '${U}' | sudo -S cat "${Y0}" 2>/dev/null`;else Y=`sudo -n cat "${Y0}" 2>/dev/null || cat "${Y0}" 2>/dev/null || echo ""`;let{stdout:f}=await yU(Y);A=f}catch(U){return z("hosts",`Cannot read hosts file, assuming entries don't exist: ${U}`,w),$.map(()=>!1)}}return $.map((J)=>{let U=`127.0.0.1 ${J}`,Y=`::1 ${J}`;return A.includes(U)||A.includes(Y)})}hU();U$();import*as SU from"node:net";function Rw($,w,A){return z("port",`Checking if port ${$} is in use on ${w}`,A),new Promise((J)=>{let U=SU.createServer(),Y=setTimeout(()=>{z("port",`Checking port ${$} timed out, assuming it's in use`,A),U.close(),J(!0)},3000);U.once("error",(f)=>{if(clearTimeout(Y),f.code==="EADDRINUSE")z("port",`Port ${$} is in use`,A),J(!0);else z("port",`Error checking port ${$}: ${f.message}`,A),J(!0)}),U.once("listening",()=>{clearTimeout(Y),z("port",`Port ${$} is available`,A),U.close(),J(!1)});try{U.listen($,w)}catch(f){clearTimeout(Y),z("port",`Exception checking port ${$}: ${f}`,A),J(!0)}})}async function Qq($,w,A,J=50){z("port",`Finding available port starting from ${$} (max attempts: ${J})`,A);let U=$,Y=0;while(Y<J){if(Y++,!await Rw(U,w,A))return z("port",`Found available port: ${U} after ${Y} attempts`,A),U;z("port",`Port ${U} is in use, trying ${U+1} (attempt ${Y}/${J})`,A),U++}throw Error(`Unable to find available port after ${J} attempts starting from ${$}`)}function CF($,w,A=5000,J){return z("port",`Testing connection to ${w}:${$}`,J),new Promise((U)=>{let Y=SU.connect({host:w,port:$,timeout:A});Y.once("connect",()=>{z("port",`Successfully connected to ${w}:${$}`,J),Y.end(),U(!0)}),Y.once("timeout",()=>{z("port",`Connection to ${w}:${$} timed out`,J),Y.destroy(),U(!1)}),Y.once("error",(f)=>{z("port",`Failed to connect to ${w}:${$}: ${f.message}`,J),Y.destroy(),U(!1)})})}class VU{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 Rw($,this.hostname,this.verbose))return this.findNextAvailablePort($+1,w);if(w){if(!await CF($,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 Qq($,this.hostname,this.verbose,this.maxRetries);if(w){if(!await CF(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 $y=new VU;p0();U$();import{spawn as xq}from"node:child_process";import*as Kw from"node:process";class OU{processes=new Map;isShuttingDown=!1;async startProcess($,w,A){if(this.processes.has($)){z("start",`Process ${$} is already running`,A);return}let[J,...U]=w.command.split(" "),Y=w.cwd||Kw.cwd();z("start",`Starting process ${$}:`,A),z("start",` Command: ${J} ${U.join(" ")}`,A),z("start",` Working directory: ${Y}`,A),z("start",` Environment variables: ${J0(w.env)}`,A);let f=xq(J,U,{cwd:Y,env:{...Kw.env,...w.env},shell:!0,stdio:"inherit"});return this.processes.set($,{command:w.command,cwd:Y,process:f,env:w.env}),new Promise((W,Z)=>{if(f.on("error",(E)=>{if(!this.isShuttingDown)z("start",`Process ${$} failed to start: ${E}`,A),this.processes.delete($),Z(E),Kw.emit("SIGINT")}),f.on("exit",(E)=>{if(!this.isShuttingDown&&E!==null&&E!==0)z("start",`Process ${$} exited with code ${E}`,A),this.processes.delete($),Z(Error(`Process ${$} exited with code ${E}`)),Kw.emit("SIGINT")}),A)f.stdout?.on("data",(E)=>{z("process",`[${$}] ${E.toString().trim()}`,!0)}),f.stderr?.on("data",(E)=>{z("process",`[${$}] ERR: ${E.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&f.killed)this.processes.delete($),Z(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((J)=>{if(!A.process){J();return}A.process.once("exit",()=>{this.processes.delete($),z("start",`Process ${$} stopped`,w),J()});try{A.process.kill("SIGTERM"),setTimeout(()=>{if(A.process){z("start",`Force killing process ${$}`,w);try{A.process.kill("SIGKILL")}catch(U){}}},3000)}catch(U){z("start",`Error stopping process ${$}: ${U}`,w),this.processes.delete($),J()}})}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((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 Yy=new OU;FU();U$();var _U=new OU,bq="0.12.0",iq=new VU("0.0.0.0"),a1=new Set,sf=!1,XU=null,of=null;async function DU($){if(sf)return z("cleanup","Cleanup already in progress, skipping",$?.verbose),of||Promise.resolve();sf=!0,z("cleanup","Starting cleanup process",$?.verbose),of=new Promise((w)=>{XU=w});try{await _U.stopAll($?.verbose),R.info("Shutting down proxy servers...");let w=[],A=Array.from(a1).map((J)=>new Promise((U)=>{J.close(()=>{z("cleanup","Server closed successfully",$?.verbose),U()})}));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 J=$.domains.filter((U)=>{if(U==="test.local")return!0;return U!=="localhost"&&!U.startsWith("localhost.")&&U!=="127.0.0.1"});if(z("cleanup",`Filtered domains for cleanup: ${JSON.stringify(J)}`,$?.verbose),J.length>0)R.info("Cleaning up hosts file entries..."),w.push(IF(J,$?.verbose).then(()=>{z("cleanup",`Removed hosts entries for ${J.join(", ")}`,$?.verbose)}).catch((U)=>{z("cleanup",`Failed to remove hosts entries: ${U}`,$?.verbose),R.warn(`Failed to clean up hosts file entries for ${J.join(", ")}:`,U)}))}if($?.certs&&$.domains?.length){z("cleanup","Cleaning up SSL certificates",$?.verbose),R.info("Cleaning up SSL certificates...");let J=$.domains.map(async(U)=>{try{await gh(U,$?.verbose),z("cleanup",`Removed certificates for ${U}`,$?.verbose)}catch(Y){z("cleanup",`Failed to remove certificates for ${U}: ${Y}`,$?.verbose),R.warn(`Failed to clean up certificates for ${U}:`,Y)}});w.push(...J)}await Promise.allSettled(w),z("cleanup","All cleanup tasks completed successfully",$?.verbose),R.success("All cleanup tasks completed successfully")}catch(w){z("cleanup",`Error during cleanup: ${w}`,$?.verbose),R.error("Error during cleanup:",w)}finally{if(XU)XU();XU=null,sf=!1;let w=$&&"vitePluginUsage"in $&&$.vitePluginUsage===!0;if(o.env.NODE_ENV!=="test"&&o.env.BUN_ENV!=="test"&&!w)o.exit(0)}return of}var ef=!1;function $Z($){if(ef){z("signal",`Received second ${$} signal, forcing exit`,!0),o.exit(1);return}ef=!0,z("signal",`Received ${$} signal, initiating cleanup`,!0),DU().catch((w)=>{z("signal",`Cleanup failed after ${$}: ${w}`,!0),o.exit(1)}).finally(()=>{ef=!1})}o.once("SIGINT",()=>$Z("SIGINT"));o.once("SIGTERM",()=>$Z("SIGTERM"));o.on("uncaughtException",($)=>{z("process",`Uncaught exception: ${$}`,!0),R.error("Uncaught exception:",$),$Z("uncaughtException")});async function s1($,w,A,J=5){z("connection",`Testing connection to ${$}:${w} (retries left: ${J})`,A);let U=15000,Y=Date.now();if(o.env.RPX_BYPASS_CONNECTION_TEST==="true"){z("connection",`Bypassing connection test for ${$}:${w} due to RPX_BYPASS_CONNECTION_TEST flag`,A);return}let f=()=>new Promise((W,Z)=>{let E=SF.connect({host:$,port:w,timeout:3000});E.once("connect",()=>{z("connection",`Successfully connected to ${$}:${w}`,A),E.end(),W()}),E.once("timeout",()=>{z("connection",`Connection to ${$}:${w} timed out`,A),E.destroy(),Z(Error("Connection timed out"))}),E.once("error",(B)=>{z("connection",`Failed to connect to ${$}:${w}: ${B}`,A),E.destroy(),Z(B)})});try{await f()}catch(W){if(Date.now()-Y>U){z("connection",`Connection test timed out after ${U}ms, but continuing anyway`,A),R.warn(`Connection test to ${$}:${w} timed out, but RPX will try to proceed anyway.`);return}if(W.code==="ECONNREFUSED"&&J>0)return z("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${J} retries left)`,A),await new Promise((E)=>setTimeout(E,2000)),s1($,w,A,J-1);if(J>0)try{z("connection",`Trying HTTP request to ${$}:${w}`,A),await new Promise((E,B)=>{let h=Mw.request({hostname:$,port:w,path:"/",method:"HEAD",timeout:5000},(j)=>{z("connection",`Received HTTP response with status: ${j.statusCode}`,A),E()});h.on("error",(j)=>B(j)),h.on("timeout",()=>{h.destroy(),B(Error("HTTP request timed out"))}),h.end()}),z("connection",`HTTP request to ${$}:${w} succeeded`,A);return}catch(E){return z("connection",`HTTP request to ${$}:${w} failed: ${E}`,A),z("connection",`Retrying socket connection in 2 seconds... (${J} retries left)`,A),await new Promise((B)=>setTimeout(B,2000)),s1($,w,A,J-1)}let Z=`Failed to connect to ${$}:${w} after ${5-J} attempts: ${W.message}`;z("connection",`${Z}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,A),R.warn(Z),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 VF($){z("server",`Starting server with options: ${J0($)}`,$.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),U=[A.hostname];if(!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 r1(U,$.verbose))[0]){R.info(`Adding ${A.hostname} to hosts file...`),R.info("This may require sudo/administrator privileges");try{await p1(U,$.verbose)}catch(W){if(R.error("Failed to add hosts entry:",W.message),R.warn("You can manually add this entry to your hosts file:"),R.warn(`127.0.0.1 ${A.hostname}`),R.warn(`::1 ${A.hostname}`),o.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 z("hosts",`Host entry already exists for ${A.hostname}`,$.verbose)}catch(f){R.error("Failed to check hosts file:",f.message)}}try{await s1(w.hostname,J,$.verbose)}catch(f){z("server",`Connection test failed: ${f}`,$.verbose),R.error(f.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 Y=$._cachedSSLConfig||null;if($.https)try{if($.https===!0)$.https=u1({...$,to:A.hostname});if(Y=await v0({...$,to:A.hostname,https:$.https}),!Y){if(z("ssl",`Generating new certificates for ${A.hostname}`,$.verbose),await j1({...$,from:w.toString(),to:A.hostname,https:$.https}),Y=await v0({...$,to:A.hostname,https:$.https}),!Y)throw Error(`Failed to load SSL configuration after generating certificates for ${A.hostname}`)}}catch(f){throw z("server",`SSL setup failed: ${f}`,$.verbose),f}z("server",`Setting up reverse proxy with SSL config for ${A.hostname}`,$.verbose),await uq({...$,from:$.from||"localhost:5173",to:A.hostname,fromPort:J,sourceUrl:{hostname:w.hostname,host:w.host},ssl:Y})}async function cq($,w,A,J,U,Y,f,W,Z,E,B){z("proxy",`Creating proxy server ${$} -> ${w} with cleanUrls: ${E}`,Z);function h(H){let G={};for(let[q,N]of Object.entries(H))if(!q.startsWith(":"))G[q]=N;return G}let j=(H,G)=>{z("request",`Incoming request: ${H.method} ${H.url}`,Z);let q=H.url||"/",N=H.method||"GET";if(H instanceof LF.Http2ServerRequest){let S=H.headers;N=S[":method"]||N,q=S[":path"]||q}if(E){if(!q.match(/\.[a-z0-9]+$/i))if(q.endsWith("/"))q=`${q}index.html`;else q=`${q}.html`}let K=h(H.headers);if(B)K.host=`${Y.hostname}:${A}`,z("request",`Changed origin: setting host header to ${K.host}`,Z);let C={hostname:Y.hostname,port:A,path:q,method:N,headers:K};z("request",`Proxy request options: ${J0(C)}`,Z);let y=Mw.request(C,(S)=>{if(z("response",`Proxy response received with status ${S.statusCode}`,Z),E&&S.statusCode===404){let f$=[];if(q.endsWith(".html"))f$.push(q.slice(0,-5));else if(!q.match(/\.[a-z0-9]+$/i))f$.push(`${q}.html`);if(!q.endsWith("/"))f$.push(`${q}/index.html`);if(f$.length>0){z("cleanUrls",`Trying alternative paths: ${f$.join(", ")}`,Z);let H0=(o1)=>{if(o1.length===0){G.writeHead(S.statusCode||404,S.headers),S.pipe(G);return}let wZ=o1[0],QF={...C,path:wZ},AZ=Mw.request(QF,(e1)=>{if(e1.statusCode===200)z("cleanUrls",`Found matching path: ${wZ}`,Z),G.writeHead(e1.statusCode,e1.headers),e1.pipe(G);else H0(o1.slice(1))});AZ.on("error",()=>H0(o1.slice(1))),AZ.end()};H0(f$);return}}let L={...S.headers,"Strict-Transport-Security":"max-age=31536000; includeSubDomains; preload","X-Content-Type-Options":"nosniff"};G.writeHead(S.statusCode||500,L),S.pipe(G)});y.on("error",(S)=>{z("request",`Proxy request failed: ${S}`,Z),R.error("Proxy request failed:",S),G.writeHead(502),G.end(`Proxy Error: ${S.message}`)}),H.pipe(y)};if(z("server",`Creating server with SSL config: ${!!f}`,Z),f)return new Promise((H,G)=>{try{let q=Bun.serve({port:J,hostname:U,tls:{key:f.key,cert:f.cert,ca:f.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(N){let K=new URL(N.url);z("request",`Bun.serve received: ${N.method} ${K.pathname}`,Z);let C=`http://${Y.host}`,y=new URL(K.pathname+K.search,C);try{let S=new Headers(N.headers);if(S.set("host",Y.host),B)S.set("origin",C);S.set("x-forwarded-for","127.0.0.1"),S.set("x-forwarded-proto","https"),S.set("x-forwarded-host",w);let L=await fetch(y.toString(),{method:N.method,headers:S,body:N.body,redirect:"manual"}),f$=new Headers(L.headers);if(E&&K.pathname.endsWith(".html")){let H0=K.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:H0}})}return new Response(L.body,{status:L.status,statusText:L.statusText,headers:f$})}catch(S){return z("request",`Proxy error: ${S}`,Z),new Response(`Proxy Error: ${S}`,{status:502})}},error(N){return z("server",`Bun.serve error: ${N}`,Z),new Response(`Server Error: ${N.message}`,{status:500})}});a1.add(q),yF({from:$,to:w,vitePluginUsage:W,listenPort:J,ssl:!0,cleanUrls:E,verbose:Z}),H()}catch(q){G(q)}});let F=Mw.createServer(j);function T(H){return a1.add(H),new Promise((G,q)=>{H.listen(J,U,()=>{z("server",`Server listening on port ${J}`,Z),yF({from:$,to:w,vitePluginUsage:W,listenPort:J,ssl:!!f,cleanUrls:E,verbose:Z}),G()}),H.on("error",(N)=>{z("server",`Server error: ${N}`,Z),q(N)})})}return T(F)}async function uq($){z("setup",`Setting up reverse proxy: ${J0($)}`,$.verbose);let{from:w,to:A,fromPort:J,sourceUrl:U,ssl:Y,verbose:f,cleanup:W,vitePluginUsage:Z,changeOrigin:E,cleanUrls:B}=$,h=80,j=443,F="0.0.0.0",T=$.portManager||iq;try{if(A&&!A.includes("localhost")&&!A.includes("127.0.0.1")){if(!(await r1([A],f))[0]){R.warn(`The hostname ${A} isn't in your hosts file. Adding it now...`);try{await p1([A],f),R.success(`Added ${A} to your hosts file.`)}catch(K){R.error(`Failed to add ${A} to your hosts file: ${K}`),R.info(`You may need to manually add '127.0.0.1 ${A}' to your /etc/hosts file.`)}}}else if(o.platform!=="darwin"&&A&&A.includes("localhost")&&!A.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await r1([A],f))[0]){z("hosts",`${A} not found in hosts file, adding...`,f);try{await p1([A],f)}catch(K){z("hosts",`Failed to add ${A} to hosts file: ${K}`,f)}}}if(Y&&!T.usedPorts.has(h)){if(!await Rw(h,F,f))z("setup","Starting HTTP redirect server",f),OF(f),T.usedPorts.add(h);else if(z("setup","Port 80 is in use, skipping HTTP redirect",f),f)R.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let H=Y?j:h,G=await Rw(H,F,f),q;if(G){if(z("setup",`Port ${H} is already in use`,f),f)R.warn(`Port ${H} is already in use. This may be another instance of rpx or another service.`);if(H===443){if(q=await T.getNextAvailablePort(3443,!0),z("setup",`Using port ${q} instead of ${H}`,f),f)R.info(`Using port ${q} instead. Access your site at https://${A}:${q}`)}else if(q=await T.getNextAvailablePort(H+1000,!0),z("setup",`Using port ${q} instead of ${H}`,f),f)R.info(`Using port ${q} instead. Access your site at http://${A}:${q}`)}else q=H,T.usedPorts.add(q),z("setup",`Using standard ${H===443?"HTTPS":"HTTP"} port ${H} for ${A}`,f);await cq(w,A,J,q,F,U,Y,Z,f,B,E)}catch(H){z("setup",`Setup failed: ${H}`,f),R.error(`Failed to setup reverse proxy: ${H.message}`),DU({domains:[A],hosts:typeof W==="boolean"?W:W?.hosts,certs:typeof W==="boolean"?W:W?.certs,verbose:f,vitePluginUsage:Z})}}function OF($){z("redirect","Starting HTTP redirect server",$);let w=Mw.createServer((A,J)=>{let U=A.headers.host||"";z("redirect",`Redirecting request from ${U}${A.url} to HTTPS`,$),J.writeHead(301,{Location:`https://${U}${A.url}`}),J.end()}).listen(80);a1.add(w),z("redirect","HTTP redirect server started",$)}function XF($){let w={...k8,...$};if(z("proxy",`Starting proxy with options: ${J0(w)}`,w?.verbose),w.viaDaemon){if(!w.from||!w.to){R.error("viaDaemon mode requires both `from` and `to`");return}pf({proxies:[{id:w.id,from:w.from,to:w.to,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}],verbose:w.verbose}).catch((Z)=>{R.error(`Failed to register with rpx daemon: ${Z.message}`),o.exit(1)});return}let A=w.to||"",J=A.split(".").pop()?.toLowerCase()||"",U=o.platform==="darwin"&&A&&!A.includes("localhost")&&!A.includes("127.0.0.1"),Y=["dev","app","page","new","day","foo"],f=["test","localhost","local","example","invalid"];if(U&&Y.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(U)Promise.resolve().then(() => (z1(),KU)).then(({setupDevelopmentDns:Z})=>{Z({domains:[A],verbose:w.verbose}).then((E)=>{if(E)Promise.resolve().then(()=>{if(w.verbose)if(f.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 z("dns",`Could not start DNS server - ${A} may not resolve in browser`,w.verbose)})}).catch((Z)=>{z("dns",`Failed to start DNS server: ${Z}`,w.verbose)});let W={from:w.from,to:w.to,cleanUrls:w.cleanUrls,https:u1(w),cleanup:w.cleanup,vitePluginUsage:w.vitePluginUsage,changeOrigin:w.changeOrigin,verbose:w.verbose,regenerateUntrustedCerts:w.regenerateUntrustedCerts};z("proxy",`Server options: ${J0(W)}`,w.verbose),VF(W).catch((Z)=>{z("proxy",`Failed to start proxy: ${Z}`,w.verbose),R.error(`Failed to start proxy: ${Z.message}`),DU({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 vq($){return $?.verbose||!1}async function _F($){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=vq(w);if(z("config",`Starting with config: ${J0(w,2)}`,A),z("config",`Is multi-proxy? ${"proxies"in w}`,A),w.viaDaemon){let T="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((H)=>({id:H.id,from:H.from,to:H.to,cleanUrls:H.cleanUrls??w.cleanUrls,changeOrigin:H.changeOrigin??w.changeOrigin,pathRewrites:H.pathRewrites})):[{id:w.id,from:w.from,to:w.to,cleanUrls:w.cleanUrls,changeOrigin:w.changeOrigin,pathRewrites:w.pathRewrites}];await pf({proxies:T,verbose:A});return}if("proxies"in w&&Array.isArray(w.proxies)){z("servers",`Found ${w.proxies.length} proxies in config`,A);for(let F of w.proxies)if(F.start){let T=`${F.from}-${F.to}`;try{z("watch",`Starting command for ${T} with command: ${F.start.command}`,A),R.info(`Starting command for ${T}...`),await _U.startProcess(T,F.start,A);let H=new URL(F.from.startsWith("http")?F.from:`http://${F.from}`),G=H.hostname||"localhost",q=Number(H.port)||80;try{await s1(G,q,A),z("watch",`Dev server is ready at ${G}:${q}`,A)}catch(N){z("watch",`Connection check failed, but continuing with proxy setup: ${N}`,A),R.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(H){throw z("watch",`Failed to start command for ${T}: ${H}`,A),Error(`Failed to start command for ${T}: ${H}`)}}else z("watch",`No start command for proxy ${F.from} -> ${F.to}`,A)}else if("start"in w&&w.start){z("watch","Found start command in single proxy config",A);let F=`${w.from}-${w.to}`;try{if(w.start)z("watch",`Starting command: ${w.start.command}`,A),await _U.startProcess(F,w.start,A);let T=new URL(w.from?.startsWith("http")?w.from:`http://${w.from}`),H=T.hostname||"localhost",G=Number(T.port)||80;try{await s1(H,G,A),z("watch",`Dev server is ready at ${H}:${G}`,A)}catch(q){z("watch",`Connection check failed, but continuing with proxy setup: ${q}`,A),R.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(T){throw z("watch",`Failed to run start command: ${T}`,A),Error(`Failed to run start command: ${T}`)}}else z("watch","No start command found in config",A);let J="proxies"in w&&Array.isArray(w.proxies)?w.proxies[0]?.to:("to"in w)?w.to:"rpx.localhost";if(o.platform!=="win32"&&(w.https||w.cleanup?.hosts!==!1)){if(!Bw())try{z("sudo","Pre-acquiring sudo credentials for privileged operations",A),Pq("sudo -v",{stdio:"inherit"})}catch{z("sudo","Could not pre-acquire sudo credentials",A)}}if(w.https){let F=await v0(w);if(!F){if(z("ssl",`No valid or trusted certificates found for ${J}, generating new ones`,w.verbose),await j1(w),F=await v0(w),!F)throw Error(`Failed to load SSL certificates after generation for ${J}`)}else z("ssl",`Using existing and trusted certificates for ${J}`,w.verbose);w._cachedSSLConfig=F}let U="proxies"in w&&Array.isArray(w.proxies)?w.proxies.map((F)=>({...F,https:w.https,cleanup:w.cleanup,cleanUrls:F.cleanUrls??("cleanUrls"in w?w.cleanUrls:!1),vitePluginUsage:w.vitePluginUsage,changeOrigin:F.changeOrigin??w.changeOrigin,verbose: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}],Y=U.map((F)=>F.to||"rpx.localhost"),f=w._cachedSSLConfig,W=Y.filter((F)=>F&&!F.includes("localhost")&&!F.includes("127.0.0.1")),Z=["dev","app","page","new","day","foo"],E=["test","localhost","local","example","invalid"],B=[...new Set(W.map((F)=>F.split(".").pop()?.toLowerCase()))],h=B.filter((F)=>!!F&&Z.includes(F));if(h.length>0&&A)R.warn(`The following TLDs may not work reliably for local development: ${h.map((F)=>`.${F}`).join(", ")}`),R.info(" These TLDs have HSTS preloading which can bypass local DNS"),R.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(o.platform==="darwin"&&W.length>0){let{setupDevelopmentDns:F}=await Promise.resolve().then(() => (z1(),KU));if(await F({domains:W,verbose:A})){if(A)if(B.every((G)=>!!G&&E.includes(G)))R.success(`DNS server started for ${B.map((G)=>`.${G}`).join(", ")} domains`);else R.success(`DNS server started for ${B.map((G)=>`.${G}`).join(", ")} domains (hosts file entries also added)`)}else z("dns","Could not start DNS server - custom domains may not resolve",A)}let j=async()=>{z("cleanup","Starting cleanup handler",w.verbose);try{let{tearDownDevelopmentDns:F}=await Promise.resolve().then(() => (z1(),KU));await F({verbose:w.verbose})}catch(F){z("cleanup",`Error stopping DNS server: ${F}`,w.verbose)}try{await _U.stopAll(w.verbose)}catch(F){z("cleanup",`Error stopping processes: ${F}`,w.verbose)}await DU({domains:Y,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(o.on("SIGINT",j),o.on("SIGTERM",j),o.on("uncaughtException",(F)=>{z("process",`Uncaught exception: ${F}`,!0),console.error("Uncaught exception:",F),j()}),f&&U.length>1){z("proxies",`Creating shared HTTPS server for ${U.length} domains`,A);let F=new Map;for(let q of U){let N=q.to||"rpx.localhost",K=new URL(q.from?.startsWith("http")?q.from:`http://${q.from}`);if(F.set(N,{sourceHost:K.host,cleanUrls:q.cleanUrls||!1,changeOrigin:q.changeOrigin||!1,pathRewrites:q.pathRewrites}),z("proxies",`Route: ${N} → ${K.host}`,A),!N.includes("localhost")&&!N.includes("127.0.0.1"))try{if(!(await r1([N],A))[0])await p1([N],A)}catch{z("hosts",`Could not add hosts entry for ${N}`,A)}}if(!await Rw(80,"0.0.0.0",A))OF(A);let H=443;if(await Rw(H,"0.0.0.0",A)){if(z("proxies",`Port ${H} is already in use, cannot start shared proxy`,A),A)R.warn(`Port ${H} is in use. Shared HTTPS proxy cannot start.`);return}try{let q=Bun.serve({port:H,hostname:"0.0.0.0",tls:{key:f.key,cert:f.cert,ca:f.ca,requestCert:!1,rejectUnauthorized:!1},fetch:v1((N)=>F.get(N),A),error(N){return z("server",`Shared proxy server error: ${N}`,A),new Response(`Server Error: ${N.message}`,{status:500})}});a1.add(q),z("proxies",`Shared HTTPS proxy listening on port ${H} for ${F.size} domains`,A)}catch(q){z("proxies",`Failed to start shared proxy: ${q}`,A),console.error("Failed to start shared HTTPS proxy:",q),j()}}else for(let F of U)try{let T=F.to||"rpx.localhost";z("proxy",`Starting proxy for ${T} with SSL config: ${!!f}`,F.verbose),await VF({from:F.from||"localhost:5173",to:T,cleanUrls:F.cleanUrls||!1,https:F.https||!1,cleanup:F.cleanup||!1,vitePluginUsage:F.vitePluginUsage||!1,verbose:F.verbose||!1,_cachedSSLConfig:f,changeOrigin:F.changeOrigin||!1})}catch(T){z("proxies",`Failed to start proxy for ${F.to}: ${T}`,F.verbose),console.error(`Failed to start proxy for ${F.to}:`,T),j()}}function yF($){if($?.vitePluginUsage||!$?.verbose)return;if(console.log(""),console.log(` ${G0.green(G0.bold("rpx"))} ${G0.green(`v${bq}`)}`),console.log(` ${G0.green("➜")} ${G0.dim($?.from??"")} ${G0.dim("➜")} ${G0.cyan($?.ssl?`https://${$?.to}`:`http://${$?.to}`)}`),$?.listenPort!==($?.ssl?443:80))console.log(` ${G0.green("➜")} Listening on port ${$?.listenPort}`);if($?.cleanUrls)console.log(` ${G0.green("➜")} Clean URLs enabled`)}qf();var Iy=new Ew("rpx",{showTags:!1});function DF($){return!!($&&("proxies"in $)&&Array.isArray($.proxies))}var v$=new vU("rpx"),kF="0.12.0";v$.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 _F(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(J){console.error("Failed to parse start-env JSON:",J),r$.exit(1)}w.start=A}return XF(w)});v$.command("watch:start <proxy>","Start the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{let A=DF(Pw)?Pw.proxies.find((J)=>J.to===$||`${J.from}-${J.to}`===$):Pw.to===$?Pw:null;if(!A?.start)console.error(`No watch configuration found for proxy: ${$}`),r$.exit(1);try{await IU.startProcess($,A.start,w.verbose),console.log(`Started dev server for ${$}`)}catch(J){console.error(`Failed to start dev server for ${$}:`,J),r$.exit(1)}});v$.command("watch:stop <proxy>","Stop the dev server for a specific proxy").option("--verbose","Enable verbose logging").action(async($,w)=>{try{await IU.stopProcess($,w.verbose),console.log(`Stopped dev server for ${$}`)}catch(A){console.error(`Failed to stop dev server for ${$}:`,A),r$.exit(1)}});v$.command("watch:stopall","Stop all running dev servers").option("--verbose","Enable verbose logging").action(async($)=>{try{await IU.stopAll($.verbose),console.log("Stopped all dev servers")}catch(w){console.error("Failed to stop all dev servers:",w),r$.exit(1)}});v$.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("--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,verbose:$.verbose??!0})).done,r$.exit(0)}catch(w){console.error(`Failed to start rpx daemon: ${w.message}`),r$.exit(1)}});v$.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 jF({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)":""}`)});v$.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??U0(),A=await Hw(w),J=await MU(w),U=$.registryDir,Y=await NF(U).catch(()=>[]);if($.json){console.log(JSON.stringify({running:J,pid:A,pidFile:Tw(w),rpxDir:w,registryDir:U??qw(),entries:Y},null,2));return}if(!J){if(console.log("rpx daemon: not running"),A!==null)console.log(`(stale pid file at ${Tw(w)} \u2192 pid ${A})`)}else console.log(`rpx daemon: running (pid=${A})`),console.log(`pid file: ${Tw(w)}`);if(console.log(`registry: ${U??qw()}`),Y.length===0){console.log("no registered hosts");return}console.log(`registered hosts (${Y.length}):`);for(let f of Y){let W=f.pid!==void 0?`, pid=${f.pid}`:"";console.log(` https://${f.to} \u2192 ${f.from} (id=${f.id}${W})`)}});v$.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"),r$.exit(1);if(!T1($.id))console.error(`invalid id: ${JSON.stringify($.id)} (must match /^[a-zA-Z0-9._-]+$/, \u2264128 chars)`),r$.exit(1);try{await GF({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}`),r$.exit(1)}if($.skipSpawn){console.log(`registered ${$.to} \u2192 ${$.from} (daemon spawn skipped)`);return}try{let w=await FF({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`"),r$.exit(1)}});v$.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(!T1($))console.error(`invalid id: ${JSON.stringify($)}`),r$.exit(1);let A=await tf($,w.registryDir,w.verbose);if(!A){console.log(`no registry entry for id=${$}`);return}await qF($,w.registryDir,w.verbose),console.log(`unregistered ${A.to} (id=${$})`)});v$.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??U0();if(await MU(w)){console.log("rpx daemon is running \u2014 DNS overrides are managed by the daemon");return}await zF({rpxDir:w,verbose:$.verbose}),console.log("DNS reconcile complete")});v$.command("version","Show the version of the Reverse Proxy CLI").action(()=>{console.log(kF)});v$.version(kF);v$.help();v$.run();
|