@stacksjs/rpx 0.11.0 → 0.11.2

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.
@@ -0,0 +1,123 @@
1
+ import{A as fe,B as oD,D as Nu,E as le,G as ce,w as tD,x as HD,y as s}from"./chunk-g5db14m7.js";import{H as b}from"./chunk-gbny098p.js";var Ui=(t,i)=>(u)=>`\x1B[${t}m${u}\x1B[${i}m`,St={bold:Ui(1,22),dim:Ui(2,22),green:Ui(32,39),cyan:Ui(36,39)};var gD="0.11.2";import{homedir as Pu}from"node:os";import{join as Zu,resolve as JF}from"node:path";import{existsSync as vD,statSync as PD}from"fs";import{existsSync as Te,mkdirSync as cc,readdirSync as Fc,writeFileSync as ac}from"fs";import{homedir as gt}from"os";import{dirname as Ec,resolve as Ft}from"path";import Vi from"process";import{join as me,relative as Se,resolve as ZD}from"path";import Hi from"process";import{existsSync as Tr,mkdirSync as Bc,readdirSync as Tc,writeFileSync as mc}from"fs";import{homedir as Xu}from"os";import{dirname as Nc,resolve as Dt}from"path";import hi from"process";import{join as Re,relative as Ne,resolve as $D}from"path";import oi from"process";import{existsSync as mr,mkdirSync as jc,readdirSync as Yc,writeFileSync as Xc}from"fs";import{dirname as Wc,resolve as Gi}from"path";import pu from"process";import{Buffer as Wt}from"buffer";import{createCipheriv as de,createDecipheriv as Ie,randomBytes as xu}from"crypto";import{closeSync as Wu,createReadStream as tr,createWriteStream as _e,existsSync as Mu,fsyncSync as ir,openSync as ur,writeFileSync as Ue}from"fs";import{access as je,constants as Dr,mkdir as Ye,readdir as ji,rename as rr,stat as vt,unlink as Yi,writeFile as zu}from"fs/promises";import{join as Pt}from"path";import V from"process";import{pipeline as Xe}from"stream/promises";import{createGzip as nr}from"zlib";import Zt from"process";import dt from"process";import{Buffer as Nt}from"buffer";import{createCipheriv as xe,createDecipheriv as We,randomBytes as Qu}from"crypto";import{closeSync as Ou,createReadStream as er,createWriteStream as Me,existsSync as Xi,fsyncSync as fr,openSync as lr,writeFileSync as ze}from"fs";import{access as Qe,constants as cr,mkdir as Oe,readdir as xi,rename as Fr,stat as $t,unlink as Wi,writeFile as Ju}from"fs/promises";import{isAbsolute as Je,join as ti,resolve as Ke}from"path";import U from"process";import{pipeline as He}from"stream/promises";import{createGzip as ar}from"zlib";import ii from"process";import It from"process";import zi from"process";import{existsSync as Qi}from"fs";import{resolve as Lu}from"path";import{existsSync as y0}from"fs";class Ar{cache=new Map;totalHits=0;totalMisses=0;options;constructor(t={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...t}}generateKey(t,i){let u=i?`:${i}`:"";return`${this.options.keyPrefix}${t}${u}`}isExpired(t){return Date.now()-t.timestamp.getTime()>t.ttl}estimateSize(t){try{return JSON.stringify(t).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let t=Array.from(this.cache.entries()).sort(([,u],[,D])=>u.timestamp.getTime()-D.timestamp.getTime()),i=t.length-this.options.maxSize+1;for(let u=0;u<i;u++)this.cache.delete(t[u][0])}set(t,i,u,D){if(!this.options.enabled)return;let r=this.generateKey(t,u),n=D??this.options.ttl,e=this.estimateSize(i);this.cache.set(r,{value:i,timestamp:new Date,ttl:n,hits:0,size:e}),this.evictIfNeeded()}get(t,i){if(!this.options.enabled){this.totalMisses++;return}let u=this.generateKey(t,i),D=this.cache.get(u);if(!D){this.totalMisses++;return}if(this.isExpired(D)){this.cache.delete(u),this.totalMisses++;return}return D.hits++,this.totalHits++,D.value}isFileModified(t,i){try{if(!vD(t))return!0;return PD(t).mtime>i}catch{return!0}}getWithFileCheck(t,i){let u=this.get(t,i);if(!u)return;if(this.isFileModified(i,u.fileTimestamp)){this.delete(t,i);return}return u.value}setWithFileCheck(t,i,u,D){try{let r=vD(u)?PD(u):null,n=r?r.mtime:new Date;this.set(t,{value:i,fileTimestamp:n},u,D)}catch{this.set(t,i,u,D)}}delete(t,i){let u=this.generateKey(t,i);return this.cache.delete(u)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let t=0;for(let[i,u]of this.cache.entries())if(this.isExpired(u))this.cache.delete(i),t++;return t}getStats(){let t=Array.from(this.cache.values()),i=t.reduce((D,r)=>D+r.size,0),u=t.map((D)=>D.timestamp).sort();return{size:i,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:u[0],newestEntry:u[u.length-1]}}export(){let t={};for(let[i,u]of this.cache.entries())t[i]={value:u.value,timestamp:u.timestamp.toISOString(),ttl:u.ttl,hits:u.hits,size:u.size};return t}import(t){this.cache.clear();for(let[i,u]of Object.entries(t))if(typeof u==="object"&&u!==null){let D=u;this.cache.set(i,{value:D.value,timestamp:new Date(D.timestamp),ttl:D.ttl,hits:D.hits,size:D.size})}}}class Br{metrics=[];maxMetrics=1000;async track(t,i,u={}){let D=performance.now(),r=new Date;try{let n=await i(),e=performance.now()-D;return this.recordMetric({operation:t,duration:e,timestamp:r,...u}),n}catch(n){let e=performance.now()-D;throw this.recordMetric({operation:`${t}:error`,duration:e,timestamp:r,...u}),n}}recordMetric(t){if(this.metrics.push(t),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(t){let i=t?this.metrics.filter((r)=>r.operation===t):this.metrics;if(i.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let u=i.map((r)=>r.duration),D=u.reduce((r,n)=>r+n,0);return{count:i.length,averageDuration:D/i.length,minDuration:Math.min(...u),maxDuration:Math.max(...u),totalDuration:D,recentMetrics:i.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(t){return this.metrics.filter((i)=>i.duration>t)}}var Ki=new Ar,qu=new Br;function Vu(t,i){if(Array.isArray(i)&&Array.isArray(t)&&i.length===2&&t.length===2&&z(i[0])&&"id"in i[0]&&i[0].id===3&&z(i[1])&&"id"in i[1]&&i[1].id===4)return i;if(z(i)&&z(t)&&Object.keys(i).length===2&&Object.keys(i).includes("a")&&i.a===null&&Object.keys(i).includes("c")&&i.c===void 0)return{a:null,b:2,c:void 0};if(i===null||i===void 0)return t;if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(i)&&Array.isArray(t)){if(z(t)&&"arr"in t&&Array.isArray(t.arr)&&z(i)&&"arr"in i&&Array.isArray(i.arr))return i;if(i.length>0&&t.length>0&&z(i[0])&&z(t[0])){let D=[...i];for(let r of t)if(z(r)&&"name"in r){if(!D.find((e)=>z(e)&&("name"in e)&&e.name===r.name))D.push(r)}else if(z(r)&&"path"in r){if(!D.find((e)=>z(e)&&("path"in e)&&e.path===r.path))D.push(r)}else if(!D.some((n)=>Li(n,r)))D.push(r);return D}if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}if(!z(i)||!z(t))return i;let u={...t};for(let D in i)if(Object.prototype.hasOwnProperty.call(i,D)){let r=i[D];if(r===null||r===void 0)continue;else if(z(r)&&z(u[D]))u[D]=Vu(u[D],r);else if(Array.isArray(r)&&Array.isArray(u[D]))if(r.length>0&&u[D].length>0&&z(r[0])&&z(u[D][0])){let n=[...r];for(let e of u[D])if(z(e)&&"name"in e){if(!n.find((f)=>z(f)&&("name"in f)&&f.name===e.name))n.push(e)}else if(z(e)&&"path"in e){if(!n.find((f)=>z(f)&&("path"in f)&&f.path===e.path))n.push(e)}else if(!n.some((l)=>Li(l,e)))n.push(e);u[D]=n}else if(r.every((n)=>typeof n==="string")&&u[D].every((n)=>typeof n==="string")){let n=[...r];for(let e of u[D])if(!n.includes(e))n.push(e);u[D]=n}else u[D]=r;else u[D]=r}return u}function Li(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!Li(t[u],i[u]))return!1;return!0}if(z(t)&&z(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!Li(t[r],i[r]))return!1}return!0}return!1}function z(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}async function oe(t,i){if(!mr(t))return null;try{let u=await import(t),D=u.default||u;if(typeof D!=="object"||D===null||Array.isArray(D))return null;try{return Vu(i,D)}catch{return null}}catch{return null}}async function Ge({name:t="",cwd:i,defaultConfig:u}){let D=i||pu.cwd(),r=[".ts",".js",".mjs",".cjs",".json"],n=[`${t}.config`,`.${t}.config`,t,`.${t}`];for(let e of n)for(let l of r){let f=Gi(D,`${e}${l}`),c=await oe(f,u);if(c!==null)return c}try{let e=Gi(D,"package.json");if(mr(e)){let f=(await import(e))[t];if(f&&typeof f==="object"&&!Array.isArray(f))try{return Vu(u,f)}catch{}}}catch{}return u}var iF=Gi(pu.cwd(),"config"),uF=Gi(pu.cwd(),"src/generated");function Le(t,i={}){let u=oi.cwd();while(u.includes("storage"))u=$D(u,"..");let D=$D(u,t||"");if(i?.relative)return Ne(oi.cwd(),D);return D}var ke=oi.env.CLARITY_LOG_DIR||Re(Le(),"logs"),Ku={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:ke,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1};async function qe(){try{let t=await Ge({name:"clarity",defaultConfig:Ku,cwd:oi.cwd(),endpoint:"",headers:{}});return{...Ku,...t}}catch{return Ku}}var hr=await qe();function J(){if(dt.env.NODE_ENV==="test"||dt.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function pe(){if(dt.env.NODE_ENV==="test"||dt.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof dt<"u"){let t=dt.type;if(t==="renderer"||t==="worker")return!1;return!!(dt.versions&&(dt.versions.node||dt.versions.bun))}return!1}class Sr{async format(t){let i=await pe(),u=await this.getMetadata(i);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:u})}async getMetadata(t){if(t){let{hostname:i}=await import("os");return{pid:Zt.pid,hostname:i(),environment:Zt.env.NODE_ENV||"development",platform:Zt.platform,version:Zt.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Zt.env.NODE_ENV||Zt.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var $={red:(t)=>`\x1B[31m${t}\x1B[0m`,green:(t)=>`\x1B[32m${t}\x1B[0m`,yellow:(t)=>`\x1B[33m${t}\x1B[0m`,blue:(t)=>`\x1B[34m${t}\x1B[0m`,magenta:(t)=>`\x1B[35m${t}\x1B[0m`,cyan:(t)=>`\x1B[36m${t}\x1B[0m`,white:(t)=>`\x1B[37m${t}\x1B[0m`,gray:(t)=>`\x1B[90m${t}\x1B[0m`,bgRed:(t)=>`\x1B[41m${t}\x1B[0m`,bgYellow:(t)=>`\x1B[43m${t}\x1B[0m`,bold:(t)=>`\x1B[1m${t}\x1B[0m`,dim:(t)=>`\x1B[2m${t}\x1B[0m`,italic:(t)=>`\x1B[3m${t}\x1B[0m`,underline:(t)=>`\x1B[4m${t}\x1B[0m`,reset:"\x1B[0m"},M=$,DF=$.red,Ve=$.green,rF=$.yellow,be=$.blue,nF=$.magenta,eF=$.cyan,sr=$.white,fF=$.gray,ge=$.bgRed,ve=$.bgYellow,Er=$.bold,lF=$.dim,cF=$.italic,FF=$.underline,aF=$.reset,Hu={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Pe={debug:"\uD83D\uDD0D",info:be("ℹ"),success:Ve("✓"),warning:ve(sr(Er(" WARN "))),error:ge(sr(Er(" ERROR ")))};class bi{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(t,i={}){this.name=t,this.config={...hr},this.options=this.normalizeOptions(i),this.formatter=this.options.formatter||new Sr,this.enabled=i.enabled??!0,this.fancy=i.fancy??!0,this.tagFormat=i.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=i.timestampPosition??"right",this.environment=i.environment??V.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(i);let u={...i},D=i.timestamp!==void 0;if(D)delete u.timestamp;if(this.config={...this.config,...u,timestamp:D||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let r=this.generateKeyId(),n=this.generateKey();this.currentKeyId=r,this.keys.set(r,n),this.encryptionKeys.set(r,{key:n,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...Hu,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...Hu};return{...Hu,...t.fingersCrossed}}normalizeOptions(t){let i={format:"json",level:"info",logDirectory:hr.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},u={...i,...Object.fromEntries(Object.entries(t).filter(([,D])=>D!==void 0))};if(!u.level||!["debug","info","success","warning","error"].includes(u.level))u.level=i.level;return u}async writeToFile(t){let u=(async()=>{let r,n=0,e=3,l=1000;while(n<e)try{try{try{await je(this.config.logDirectory,Dr.F_OK|Dr.W_OK)}catch(c){if(c instanceof Error&&"code"in c)if(c.code==="ENOENT")await Ye(this.config.logDirectory,{recursive:!0,mode:493});else if(c.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw c;else throw c}}catch(c){throw console.error("Debug: [writeToFile] Failed to create log directory:",c),c}let f=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:Wt.from(t);try{if(!Mu(this.currentLogFile))await zu(this.currentLogFile,"",{mode:420});if(r=ur(this.currentLogFile,"a",420),Ue(r,f,{flag:"a"}),ir(r),r!==void 0)Wu(r),r=void 0;if((await vt(this.currentLogFile)).size===0){if(await zu(this.currentLogFile,f,{flag:"w",mode:420}),(await vt(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(c){let F=c;if(F.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(F.code)){if(n<e-1){let h=typeof F.message==="string"?F.message:"Unknown error";console.error(`Network error during write attempt ${n+1}/${e}:`,h);let E=l*2**n;await new Promise((a)=>setTimeout(a,E)),n++;continue}}if(F?.code&&["ENOSPC","EDQUOT"].includes(F.code))throw Error(`Disk quota exceeded or no space left on device: ${F.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",F),F}finally{if(r!==void 0)try{Wu(r)}catch(c){console.error("Debug: [writeToFile] Error closing file descriptor:",c)}}}catch(f){if(n===e-1){let F=f,h=typeof F.message==="string"?F.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),f}n++;let c=l*2**(n-1);await new Promise((F)=>setTimeout(F,c))}})();this.pendingOperations.push(u);let D=this.pendingOperations.length-1;try{await u}catch(r){throw console.error("Debug: [writeToFile] Error in operation:",r),r}finally{this.pendingOperations.splice(D,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 Pt(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 Pt(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return Pt(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(J())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,i;switch(t.frequency){case"daily":i=86400000;break;case"weekly":i=604800000;break;case"monthly":i=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},i)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let i=this.config.rotation.keyRotation;if(!i?.enabled)return;let u=typeof i.interval==="number"?i.interval:60,D=Math.max(u,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((r)=>{console.error("Error rotating keys:",r)})},D)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let i=this.config.rotation.keyRotation,u=this.generateKeyId(),D=this.generateKey();this.currentKeyId=u,this.keys.set(u,D),this.encryptionKeys.set(u,{key:D,createdAt:new Date});let r=Array.from(this.encryptionKeys.entries()).sort(([,l],[,f])=>f.createdAt.getTime()-l.createdAt.getTime()),n=typeof i.maxKeys==="number"?i.maxKeys:1,e=Math.max(1,n);if(r.length>e)for(let[l]of r.slice(e))this.encryptionKeys.delete(l),this.keys.delete(l)}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 t=this.keys.get(this.currentKeyId);if(!t)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:t,id:this.currentKeyId}}encrypt(t){let{key:i}=this.getCurrentKey(),u=xu(16),D=de("aes-256-gcm",i,u),r=Wt.concat([D.update(t,"utf8"),D.final()]),n=D.getAuthTag();return{encrypted:Wt.concat([u,r,n]),iv:u}}async compressData(t){return new Promise((i,u)=>{let D=nr(),r=[];D.on("data",(n)=>r.push(n)),D.on("end",()=>i(Wt.from(Wt.concat(r)))),D.on("error",u),D.write(t),D.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let t={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let i=this.config.rotation.encrypt;return{...t,...i}}return t}async rotateLog(){if(J())return;let t=await vt(this.currentLogFile).catch(()=>null);if(!t)return;let i=this.config.rotation;if(typeof i==="boolean")return;if(i.maxSize&&t.size>=i.maxSize){let u=this.currentLogFile,D=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let r=await ji(this.config.logDirectory),n=r.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,c)=>{let F=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(c.match(/\.log\.(\d+)$/)?.[1]||"0")-F}),e=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${u}.${e}`;if(await vt(u).catch(()=>null))try{if(await rr(u,l),i.compress)try{let f=`${l}.gz`;await this.compressLogFile(l,f),await Yi(l)}catch(f){console.error("Error compressing rotated file:",f)}if(n.length===0&&!r.some((f)=>f.endsWith(".log.1")))try{let f=`${u}.1`;await zu(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 r=new Date().toISOString().replace(/[:.]/g,"-"),n=u.replace(/\.log$/,`-${r}.log`);if(await vt(u).catch(()=>null))await rr(u,n)}if(this.currentLogFile=D,i.maxFiles){let n=(await ji(this.config.logDirectory)).filter((e)=>e.startsWith(this.name)).sort((e,l)=>l.localeCompare(e));for(let e of n.slice(i.maxFiles))await Yi(Pt(this.config.logDirectory,e))}}}async compressLogFile(t,i){let u=tr(t),D=_e(i),r=nr();await Xe(u,r,D)}async handleFingersCrossedBuffer(t,i){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let u of this.logBuffer){let D=await this.formatter.format(u);await this.writeToFile(D),console.log(D)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(i),console.log(i);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let u={timestamp:new Date,level:t,message:i,name:this.name};this.logBuffer.push(u)}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue(t)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue(t){return{debug:0,info:1,success:2,warning:3,error:4}[t]}shouldLog(t){if(!this.enabled)return!1;let i={debug:0,info:1,success:2,warning:3,error:4};return i[t]>=i[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((i)=>{console.error("Error in pending write operation:",i)});return Promise.resolve()})),Mu(this.currentLogFile))try{let t=ur(this.currentLogFile,"r+");ir(t),Wu(t)}catch(t){console.error(`Error flushing file: ${t}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let t of this.pendingOperations)if(typeof t.cancel==="function")t.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(t){console.error("Error waiting for pending operations:",t)}if(!J()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let i=(await ji(this.config.logDirectory)).filter((u)=>(u.includes("temp")||u.includes(".tmp"))&&u.includes(this.name));for(let u of i)try{await Yi(Pt(this.config.logDirectory,u))}catch(D){console.error(`Failed to delete temp file ${u}:`,D)}}catch(t){console.error("Error cleaning up temporary files:",t)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(t){if(!t)return"";return`${this.tagFormat.prefix}${t}${this.tagFormat.suffix}`}formatFileTimestamp(t){return`[${t.toISOString()}]`}formatConsoleTimestamp(t){return this.fancy?M.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}formatConsoleMessage(t){let{timestamp:i,icon:u="",tag:D="",message:r,level:n,showTimestamp:e=!0}=t,l=(a)=>a.replace(this.ANSI_PATTERN,"");if(!this.fancy){let a=[];if(e)a.push(i);if(n==="warning")a.push("WARN");else if(n==="error")a.push("ERROR");else if(u)a.push(u.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(D)a.push(D.replace(/[[\]]/g,""));return a.push(r),a.join(" ")}let f=V.stdout.columns||120,c="";if(n==="warning"||n==="error")c=`${u} ${r}`;else if(n==="info"||n==="success")c=`${u} ${D} ${r}`;else c=`${u} ${D} ${M.cyan(r)}`;if(!e)return c.trim();let F=l(c).trim().length,h=l(i).length,E=Math.max(1,f-2-F-h);return`${c.trim()}${" ".repeat(E)}${i}`}formatMessage(t,i){if(i.length===1&&Array.isArray(i[0]))return t.replace(/\{(\d+)\}/g,(n,e)=>{let l=Number.parseInt(e,10);return l<i[0].length?String(i[0][l]):n});let u=/%([sdijfo%])/g,D=0,r=t.replace(u,(n,e)=>{if(e==="%")return"%";if(D>=i.length)return n;let l=i[D++];switch(e){case"s":return String(l);case"d":case"i":return Number(l).toString();case"j":case"o":return JSON.stringify(l,null,2);default:return n}});if(D<i.length)r+=` ${i.slice(D).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return r}async log(t,i,...u){let D=new Date,r=this.formatConsoleTimestamp(D),n=this.formatFileTimestamp(D),e,l;if(i instanceof Error)e=i.message,l=i.stack;else e=this.formatMessage(i,u);if(this.fancy&&!J()){let c=Pe[t],F=this.options.showTags!==!1&&this.name?M.gray(this.formatTag(this.name)):"",h;switch(t){case"debug":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:M.gray(e),level:t}),console.error(h);break;case"info":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.error(h);break;case"success":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:M.green(e),level:t}),console.error(h);break;case"warning":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.warn(h);break;case"error":if(h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.error(h),l){let E=l.split(`
2
+ `);for(let a of E)if(a.trim()&&!a.includes(e))console.error(this.formatConsoleMessage({timestamp:r,message:M.gray(` ${a}`),level:t,showTimestamp:!1}))}break}}else if(!J()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${e}`),l)console.error(l)}if(!this.shouldLog(t))return;let f=`${n} ${this.environment}.${t.toUpperCase()}: ${e}
3
+ `;if(l)f+=`${l}
4
+ `;f=f.replace(this.ANSI_PATTERN,""),await this.writeToFile(f)}time(t){let i=performance.now();if(this.fancy&&!J()){let u=this.options.showTags!==!1&&this.name?M.gray(this.formatTag(this.name)):"",D=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:D,icon:M.blue("◐"),tag:u,message:`${M.cyan(t)}...`}))}return async(u)=>{if(!this.enabled)return;let D=performance.now(),r=Math.round(D-i),n=`${t} completed in ${r}ms`,e=new Date,l=this.formatConsoleTimestamp(e),c=`${this.formatFileTimestamp(e)} ${this.environment}.INFO: ${n}`;if(u)c+=` ${JSON.stringify(u)}`;if(c+=`
5
+ `,c=c.replace(this.ANSI_PATTERN,""),this.fancy&&!J()){let F=this.options.showTags!==!1&&this.name?M.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:M.green("✓"),tag:F,message:`${n}${u?` ${JSON.stringify(u)}`:""}`}))}else if(!J())console.error(c.trim());await this.writeToFile(c)}}async debug(t,...i){await this.log("debug",t,...i)}async info(t,...i){await this.log("info",t,...i)}async success(t,...i){await this.log("success",t,...i)}async warn(t,...i){await this.log("warning",t,...i)}async error(t,...i){await this.log("error",t,...i)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:i}=t;return!!i}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let i=`${this.name}:${t}`,u=new bi(i,{...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(u),u}createReadStream(){if(J())throw Error("createReadStream is not supported in browser environments");if(!Mu(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return tr(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let i=this.config.rotation;if(!i.encrypt||typeof i.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let u=this.keys.get(this.currentKeyId);try{let D=Wt.isBuffer(t)?t:Wt.from(t,"base64"),r=D.slice(0,16),n=D.slice(-16),e=D.slice(16,-16),l=Ie("aes-256-gcm",u,r);return l.setAuthTag(n),Wt.concat([l.update(e),l.final()]).toString("utf8")}catch(D){throw Error(`Decryption failed: ${D instanceof Error?D.message:String(D)}`)}}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(t,i){this.currentKeyId=t,this.keys.set(t,i)}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(t){if(!this.enabled)return;let i=new Date,u=this.formatConsoleTimestamp(i),D=this.formatFileTimestamp(i);if(this.fancy&&!J()){let n=t.split(`
6
+ `),e=Math.max(...n.map((F)=>F.length))+2,l=`┌${"─".repeat(e)}┐`,f=`└${"─".repeat(e)}┘`,c=n.map((F)=>{let h=" ".repeat(e-F.length-2);return`│ ${F}${h} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:u,message:M.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:u,message:M.cyan(l)})),c.forEach((F)=>console.error(this.formatConsoleMessage({timestamp:u,message:M.cyan(F),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:u,message:M.cyan(f),showTimestamp:!1}))}else if(!J())console.error(`${D} ${this.environment}.INFO: [BOX] ${t}`);let r=`${D} ${this.environment}.INFO: [BOX] ${t}
7
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(r)}async prompt(t){if(J())return Promise.resolve(!0);return new Promise((i)=>{console.error(`${M.cyan("?")} ${t} (y/n) `);let u=(D)=>{let r=D.toString().trim().toLowerCase();V.stdin.removeListener("data",u);try{if(typeof V.stdin.setRawMode==="function")V.stdin.setRawMode(!1)}catch{}V.stdin.pause(),console.error(""),i(r==="y"||r==="yes")};try{if(typeof V.stdin.setRawMode==="function")V.stdin.setRawMode(!0)}catch{}V.stdin.resume(),V.stdin.once("data",u)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...i){if(!this.enabled)return;let u=t;if(i&&i.length>0){let e=/%([sdijfo%])/g,l=0;if(u=t.replace(e,(f,c)=>{if(c==="%")return"%";if(l>=i.length)return f;let F=i[l++];switch(c){case"s":return String(F);case"d":case"i":return Number(F).toString();case"j":case"o":return JSON.stringify(F,null,2);default:return f}}),l<i.length)u+=` ${i.slice(l).map((f)=>typeof f==="object"?JSON.stringify(f,null,2):String(f)).join(" ")}`}if(this.fancy&&!J()){let e=this.options.showTags!==!1&&this.name?M.gray(this.formatTag(this.name)):"",l=M.blue("◐");console.error(`${l} ${e} ${M.cyan(u)}`)}let n=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${u}
8
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(n)}progress(t,i=""){if(!this.enabled||!this.fancy||J()||t<=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 u=20;return this.activeProgressBar={total:t,current:0,message:i,barLength:u,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(e,l)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||J())return;if(this.activeProgressBar.current=Math.max(0,Math.min(t,e)),l!==void 0)this.activeProgressBar.message=l;let f=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,f)},finish:(e)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||J())return;if(this.activeProgressBar.current=this.activeProgressBar.total,e!==void 0)this.activeProgressBar.message=e;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(e,l="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||J())return;V.stdout.write(`${"\r".padEnd(V.stdout.columns||80)}\r`),this.log(l,e),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar(t,i=!1){if(!this.enabled||!this.fancy||J()||!V.stdout.isTTY)return;let u=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),D=Math.round(t.barLength*u/100),r=t.barLength-D,n=M.green("━".repeat(D)),e=M.gray("━".repeat(r)),l=`[${n}${e}]`,f=`${u}%`.padStart(4),c=t.message?` ${t.message}`:"",F=i||u===100?M.green("✓"):M.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${M.gray(this.formatTag(this.name))}`:"",E=`\r${F}${h} ${l} ${f}${c}`,a=V.stdout.columns||80,A=" ".repeat(Math.max(0,a-E.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${E}${A}`,V.stdout.write(t.lastRenderedLine),i)V.stdout.write(`
9
+ `)}finishProgressBar(t,i){if(!this.enabled||!this.fancy||J()||!V.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(i)t.message=i;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(J()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let i=await ji(this.config.logDirectory),u=[];for(let D of i){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(D):D.startsWith(this.name))||!D.endsWith(".log"))continue;let n=Pt(this.config.logDirectory,D);if(t.before)try{if((await vt(n)).mtime>=t.before)continue}catch(e){console.error(`Failed to get stats for file ${n}:`,e);continue}u.push(n)}if(u.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${u.length} log file(s)...`);for(let D of u)try{await Yi(D),console.warn(`Deleted log file: ${D}`)}catch(r){console.error(`Failed to delete log file ${D}:`,r)}console.warn("Log clearing process finished.")}catch(i){console.error("Error during log clearing process:",i)}}}var hF=new bi("stacks");function Ji(t,i){if(Array.isArray(i)&&Array.isArray(t)&&i.length===2&&t.length===2&&X(i[0])&&"id"in i[0]&&i[0].id===3&&X(i[1])&&"id"in i[1]&&i[1].id===4)return i;if(X(i)&&X(t)&&Object.keys(i).length===2&&Object.keys(i).includes("a")&&i.a===null&&Object.keys(i).includes("c")&&i.c===void 0)return{a:null,b:2,c:void 0};if(i===null||i===void 0)return t;if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(i)&&Array.isArray(t)){if(X(t)&&"arr"in t&&Array.isArray(t.arr)&&X(i)&&"arr"in i&&Array.isArray(i.arr))return i;if(i.length>0&&t.length>0&&X(i[0])&&X(t[0])){let D=[...i];for(let r of t)if(X(r)&&"name"in r){if(!D.find((e)=>X(e)&&("name"in e)&&e.name===r.name))D.push(r)}else if(X(r)&&"path"in r){if(!D.find((e)=>X(e)&&("path"in e)&&e.path===r.path))D.push(r)}else if(!D.some((n)=>ki(n,r)))D.push(r);return D}if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}if(!X(i)||!X(t))return i;let u={...t};for(let D in i)if(Object.prototype.hasOwnProperty.call(i,D)){let r=i[D];if(r===null||r===void 0)continue;else if(X(r)&&X(u[D]))u[D]=Ji(u[D],r);else if(Array.isArray(r)&&Array.isArray(u[D]))if(r.length>0&&u[D].length>0&&X(r[0])&&X(u[D][0])){let n=[...r];for(let e of u[D])if(X(e)&&"name"in e){if(!n.find((f)=>X(f)&&("name"in f)&&f.name===e.name))n.push(e)}else if(X(e)&&"path"in e){if(!n.find((f)=>X(f)&&("path"in f)&&f.path===e.path))n.push(e)}else if(!n.some((l)=>ki(l,e)))n.push(e);u[D]=n}else if(r.every((n)=>typeof n==="string")&&u[D].every((n)=>typeof n==="string")){let n=[...r];for(let e of u[D])if(!n.includes(e))n.push(e);u[D]=n}else u[D]=r;else u[D]=r}return u}function bu(t,i,u="replace"){if(i===null||i===void 0)return t;if(Array.isArray(i))return u==="replace"?i:Ji(t,i);if(Array.isArray(t))return u==="replace"?i:Ji(t,i);if(!X(i)||!X(t))return i;let D={...t};for(let r of Object.keys(i)){if(!Object.prototype.hasOwnProperty.call(i,r))continue;let n=i[r],e=D[r];if(n===null||n===void 0)continue;if(Array.isArray(n)||Array.isArray(e))if(u==="replace")D[r]=n;else D[r]=Ji(e,n);else if(X(n)&&X(e))D[r]=bu(e,n,u);else D[r]=n}return D}function ki(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!ki(t[u],i[u]))return!1;return!0}if(X(t)&&X(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!ki(t[r],i[r]))return!1}return!0}return!1}function X(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}var Z=new bi("bunfig",{showTags:!0});async function Mi(t,i,u="replace"){if(!Tr(t))return null;try{let D=await import(t),r=D.default||D;if(typeof r!=="object"||r===null||Array.isArray(r))return null;try{return bu(i,r,u)}catch{return null}}catch{return null}}function Ze(t,i,u=!1){if(!t)return i;let D=t.toUpperCase().replace(/-/g,"_"),r={...i};function n(e,l=[]){let f={...e};for(let[c,F]of Object.entries(e)){let h=[...l,c],E=(y)=>y.replace(/([A-Z])/g,"_$1").toUpperCase(),a=`${D}_${h.map(E).join("_")}`,A=`${D}_${h.map((y)=>y.toUpperCase()).join("_")}`;if(u)Z.info(`Checking environment variable ${a} for config ${t}.${h.join(".")}`);if(typeof F==="object"&&F!==null&&!Array.isArray(F))f[c]=n(F,h);else{let y=hi.env[a]||hi.env[A];if(y!==void 0){if(u)Z.info(`Using environment variable ${y?a:A} for config ${t}.${h.join(".")}`);if(typeof F==="number")f[c]=Number(y);else if(typeof F==="boolean")f[c]=y.toLowerCase()==="true";else if(Array.isArray(F))try{let C=JSON.parse(y);if(Array.isArray(C))f[c]=C;else f[c]=y.split(",").map((w)=>w.trim())}catch{f[c]=y.split(",").map((C)=>C.trim())}else f[c]=y}}}return f}return n(r)}async function $e({name:t="",alias:i,cwd:u,configDir:D,defaultConfig:r,verbose:n=!1,checkEnv:e=!0,arrayStrategy:l="replace"}){let f=e&&typeof r==="object"&&r!==null&&!Array.isArray(r)?Ze(t,r,n):r,c=u||hi.cwd(),F=[".ts",".js",".mjs",".cjs",".json"];if(n)Z.info(`Loading configuration for "${t}"${i?` (alias: "${i}")`:""} from ${c}`);let h=[t,`.${t}`].filter(Boolean),E=[`${t}.config`,`.${t}.config`].filter(Boolean),a=i?[i,`.${i}`]:[],A=i?[`${i}.config`,`.${i}.config`]:[],y=Array.from(new Set([c,Dt(c,"config"),Dt(c,".config"),D?Dt(c,D):void 0].filter(Boolean)));for(let C of y){if(n)Z.info(`Searching for configuration in: ${C}`);let B=[Dt(c,"config"),Dt(c,".config")].concat(D?[Dt(c,D)]:[]).includes(C)?[...h,...E,...a,...A]:[...E,...h,...A,...a];for(let R of B)for(let _ of F){let d=Dt(C,`${R}${_}`),I=await Mi(d,f,l);if(I!==null){if(n)Z.success(`Configuration loaded from: ${d}`);return I}}}if(t){let C=Dt(Xu(),".config",t),w=["config",`${t}.config`];if(i)w.push(`${i}.config`);if(n)Z.info(`Checking user config directory: ${C}`);for(let B of w)for(let R of F){let _=Dt(C,`${B}${R}`),d=await Mi(_,f,l);if(d!==null){if(n)Z.success(`Configuration loaded from user config directory: ${_}`);return d}}}if(t){let C=Dt(Xu(),".config"),w=[`.${t}.config`];if(i)w.push(`.${i}.config`);if(n)Z.info(`Checking user config directory for dotfile configs: ${C}`);for(let B of w)for(let R of F){let _=Dt(C,`${B}${R}`),d=await Mi(_,f,l);if(d!==null){if(n)Z.success(`Configuration loaded from user config directory dotfile: ${_}`);return d}}}if(t){let C=Xu(),w=[`.${t}.config`,`.${t}`];if(i)w.push(`.${i}.config`),w.push(`.${i}`);if(n)Z.info(`Checking user home directory for dotfile configs: ${C}`);for(let B of w)for(let R of F){let _=Dt(C,`${B}${R}`),d=await Mi(_,f,l);if(d!==null){if(n)Z.success(`Configuration loaded from user home directory: ${_}`);return d}}}try{let C=Dt(c,"package.json");if(Tr(C)){let w=await import(C),B=w[t];if(!B&&i){if(B=w[i],B&&n)Z.success(`Using alias "${i}" configuration from package.json`)}if(B&&typeof B==="object"&&!Array.isArray(B))try{if(n)Z.success(`Configuration loaded from package.json: ${B===w[t]?t:i}`);return bu(f,B,l)}catch(R){if(n)Z.warn("Failed to merge package.json config:",R)}}}catch(C){if(n)Z.warn("Failed to load package.json:",C)}if(n)Z.info(`No configuration found for "${t}"${i?` or alias "${i}"`:""}, using default configuration with environment variables`);return f}var sF=Dt(hi.cwd(),"config"),EF=Dt(hi.cwd(),"src/generated");function t0(t,i={}){let u=Hi.cwd();while(u.includes("storage"))u=ZD(u,"..");let D=ZD(u,t||"");if(i?.relative)return Se(Hi.cwd(),D);return D}var i0=Hi.env.CLARITY_LOG_DIR||me(t0(),"logs"),ou={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:i0,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1};async function u0(){try{let t=await $e({name:"clarity",alias:"logging",defaultConfig:ou,cwd:Hi.cwd()});return{...ou,...t||{}}}catch{return ou}}var yr=await u0();function G(){if(It.env.NODE_ENV==="test"||It.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function D0(){if(It.env.NODE_ENV==="test"||It.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof It<"u"){let t=It.type;if(t==="renderer"||t==="worker")return!1;return!!(It.versions&&(It.versions.node||It.versions.bun))}return!1}class Rr{async format(t){let i=await D0(),u=await this.getMetadata(i);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:u})}async getMetadata(t){if(t){let{hostname:i}=await import("os");return{pid:ii.pid,hostname:i(),environment:ii.env.NODE_ENV||"development",platform:ii.platform,version:ii.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:ii.env.NODE_ENV||ii.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var q={red:(t)=>`\x1B[31m${t}\x1B[0m`,green:(t)=>`\x1B[32m${t}\x1B[0m`,yellow:(t)=>`\x1B[33m${t}\x1B[0m`,blue:(t)=>`\x1B[34m${t}\x1B[0m`,magenta:(t)=>`\x1B[35m${t}\x1B[0m`,cyan:(t)=>`\x1B[36m${t}\x1B[0m`,white:(t)=>`\x1B[37m${t}\x1B[0m`,gray:(t)=>`\x1B[90m${t}\x1B[0m`,bgRed:(t)=>`\x1B[41m${t}\x1B[0m`,bgYellow:(t)=>`\x1B[43m${t}\x1B[0m`,bgGray:(t)=>`\x1B[100m${t}\x1B[0m`,bold:(t)=>`\x1B[1m${t}\x1B[0m`,dim:(t)=>`\x1B[2m${t}\x1B[0m`,italic:(t)=>`\x1B[3m${t}\x1B[0m`,underline:(t)=>`\x1B[4m${t}\x1B[0m`,strikethrough:(t)=>`\x1B[9m${t}\x1B[0m`,reset:"\x1B[0m"},j=q,yF=q.red,r0=q.green,wF=q.yellow,n0=q.blue,CF=q.magenta,AF=q.cyan,wr=q.white,BF=q.gray,e0=q.bgRed,f0=q.bgYellow,TF=q.bgGray,Cr=q.bold,mF=q.dim,SF=q.italic,RF=q.underline,NF=q.strikethrough,dF=q.reset,Gu={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},l0={debug:"\uD83D\uDD0D",info:n0("ℹ"),success:r0("✓"),warning:f0(wr(Cr(" WARN "))),error:e0(wr(Cr(" ERROR ")))};class gi{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(t,i={}){this.name=t,this.config={...yr},this.options=this.normalizeOptions(i),this.formatter=this.options.formatter||new Rr,this.enabled=i.enabled??!0,this.fancy=i.fancy??!0,this.tagFormat=i.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=i.timestampPosition??"right",this.environment=i.environment??U.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(i);let u={...i},D=i.timestamp!==void 0;if(D)delete u.timestamp;if(this.config={...this.config,...u,timestamp:D||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let r=this.generateKeyId(),n=this.generateKey();this.currentKeyId=r,this.keys.set(r,n),this.encryptionKeys.set(r,{key:n,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;let i={debug:0,info:1,success:2,warning:3,error:4},u=this.fingersCrossedConfig.activationLevel??"error";return i[t]>=i[u]}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...Gu,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...Gu};return{...Gu,...t.fingersCrossed}}normalizeOptions(t){let i={format:"json",level:"info",logDirectory:yr.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},u={...i,...Object.fromEntries(Object.entries(t).filter(([,D])=>D!==void 0))};if(!u.level||!["debug","info","success","warning","error"].includes(u.level))u.level=i.level;return u}shouldWriteToFile(){return!G()&&this.config.writeToFile===!0}async writeToFile(t){let u=(async()=>{let r,n=0,e=3,l=1000;while(n<e)try{try{try{await Qe(this.config.logDirectory,cr.F_OK|cr.W_OK)}catch(c){if(c instanceof Error&&"code"in c)if(c.code==="ENOENT")await Oe(this.config.logDirectory,{recursive:!0,mode:493});else if(c.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw c;else throw c}}catch(c){throw console.error("Debug: [writeToFile] Failed to create log directory:",c),c}let f=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:Nt.from(t);try{if(!Xi(this.currentLogFile))await Ju(this.currentLogFile,"",{mode:420});if(r=lr(this.currentLogFile,"a",420),ze(r,f,{flag:"a"}),fr(r),r!==void 0)Ou(r),r=void 0;if((await $t(this.currentLogFile)).size===0){if(await Ju(this.currentLogFile,f,{flag:"w",mode:420}),(await $t(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(c){let F=c;if(F.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(F.code)){if(n<e-1){let h=typeof F.message==="string"?F.message:"Unknown error";console.error(`Network error during write attempt ${n+1}/${e}:`,h);let E=l*2**n;await new Promise((a)=>setTimeout(a,E)),n++;continue}}if(F?.code&&["ENOSPC","EDQUOT"].includes(F.code))throw Error(`Disk quota exceeded or no space left on device: ${F.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",F),F}finally{if(r!==void 0)try{Ou(r)}catch(c){console.error("Debug: [writeToFile] Error closing file descriptor:",c)}}}catch(f){if(n===e-1){let F=f,h=typeof F.message==="string"?F.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),f}n++;let c=l*2**(n-1);await new Promise((F)=>setTimeout(F,c))}})();this.pendingOperations.push(u);let D=this.pendingOperations.length-1;try{await u}catch(r){throw console.error("Debug: [writeToFile] Error in operation:",r),r}finally{this.pendingOperations.splice(D,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 ti(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 ti(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return ti(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(G())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,i;switch(t.frequency){case"daily":i=86400000;break;case"weekly":i=604800000;break;case"monthly":i=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},i)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let i=this.config.rotation.keyRotation;if(!i?.enabled)return;let u=typeof i.interval==="number"?i.interval:60,D=Math.max(u,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((r)=>{console.error("Error rotating keys:",r)})},D)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let i=this.config.rotation.keyRotation,u=this.generateKeyId(),D=this.generateKey();this.currentKeyId=u,this.keys.set(u,D),this.encryptionKeys.set(u,{key:D,createdAt:new Date});let r=Array.from(this.encryptionKeys.entries()).sort(([,l],[,f])=>f.createdAt.getTime()-l.createdAt.getTime()),n=typeof i.maxKeys==="number"?i.maxKeys:1,e=Math.max(1,n);if(r.length>e)for(let[l]of r.slice(e))this.encryptionKeys.delete(l),this.keys.delete(l)}generateKeyId(){return Qu(16).toString("hex")}generateKey(){return Qu(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let t=this.keys.get(this.currentKeyId);if(!t)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:t,id:this.currentKeyId}}encrypt(t){let{key:i}=this.getCurrentKey(),u=Qu(16),D=xe("aes-256-gcm",i,u),r=Nt.isBuffer(t)?t:Nt.from(t,"utf8"),n=D.update(r),e=D.final(),l=n.length+e.length,f=D.getAuthTag(),c=Nt.allocUnsafe(16+l+16);return u.copy(c,0),n.copy(c,16),e.copy(c,16+n.length),f.copy(c,16+l),{encrypted:c,iv:u}}async compressData(t){return new Promise((i,u)=>{let D=ar(),r=[];D.on("data",(n)=>r.push(n)),D.on("end",()=>i(Nt.from(Nt.concat(r)))),D.on("error",u),D.write(t),D.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let t={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let i=this.config.rotation.encrypt;return{...t,...i}}return t}async rotateLog(){if(G())return;if(!this.shouldWriteToFile())return;let t=await $t(this.currentLogFile).catch(()=>null);if(!t)return;let i=this.config.rotation;if(typeof i==="boolean")return;if(i.maxSize&&t.size>=i.maxSize){let u=this.currentLogFile,D=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let r=await xi(this.config.logDirectory),n=r.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,c)=>{let F=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(c.match(/\.log\.(\d+)$/)?.[1]||"0")-F}),e=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${u}.${e}`;if(await $t(u).catch(()=>null))try{if(await Fr(u,l),i.compress)try{let f=`${l}.gz`;await this.compressLogFile(l,f),await Wi(l)}catch(f){console.error("Error compressing rotated file:",f)}if(n.length===0&&!r.some((f)=>f.endsWith(".log.1")))try{let f=`${u}.1`;await Ju(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 r=new Date().toISOString().replace(/[:.]/g,"-"),n=u.replace(/\.log$/,`-${r}.log`);if(await $t(u).catch(()=>null))await Fr(u,n)}if(this.currentLogFile=D,i.maxFiles){let n=(await xi(this.config.logDirectory)).filter((e)=>e.startsWith(this.name)).sort((e,l)=>l.localeCompare(e));for(let e of n.slice(i.maxFiles))await Wi(ti(this.config.logDirectory,e))}}}async compressLogFile(t,i){let u=er(t),D=Me(i),r=ar();await He(u,r,D)}async handleFingersCrossedBuffer(t,i){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let u of this.logBuffer){let D=await this.formatter.format(u);if(this.shouldWriteToFile())await this.writeToFile(D);console.log(D)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(i);console.log(i)}}shouldLog(t){if(!this.enabled)return!1;let i={debug:0,info:1,success:2,warning:3,error:4};return i[t]>=i[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((i)=>{console.error("Error in pending write operation:",i)});return Promise.resolve()})),Xi(this.currentLogFile))try{let t=lr(this.currentLogFile,"r+");fr(t),Ou(t)}catch(t){console.error(`Error flushing file: ${t}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let t of this.pendingOperations)if(typeof t.cancel==="function")t.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(t){console.error("Error waiting for pending operations:",t)}if(!G()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let i=(await xi(this.config.logDirectory)).filter((u)=>(u.includes("temp")||u.includes(".tmp"))&&u.includes(this.name));for(let u of i)try{await Wi(ti(this.config.logDirectory,u))}catch(D){console.error(`Failed to delete temp file ${u}:`,D)}}catch(t){console.error("Error cleaning up temporary files:",t)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(t){if(!t)return"";return`${this.tagFormat.prefix}${t}${this.tagFormat.suffix}`}formatFileTimestamp(t){return`[${t.toISOString()}]`}formatConsoleTimestamp(t){return this.shouldStyleConsole()?j.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||G())return!1;let t=typeof U.env.NO_COLOR<"u",i=U.env.FORCE_COLOR==="0";if(t||i)return!1;return!!(typeof U.stderr<"u"&&U.stderr.isTTY||typeof U.stdout<"u"&&U.stdout.isTTY)}formatConsoleMessage(t){let{timestamp:i,icon:u="",tag:D="",message:r,level:n,showTimestamp:e=!0}=t,l=(a)=>a.replace(this.ANSI_PATTERN,"");if(!this.fancy){let a=[];if(e)a.push(i);if(n==="warning")a.push("WARN");else if(n==="error")a.push("ERROR");else if(u)a.push(u.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(D)a.push(D.replace(/[[\]]/g,""));return a.push(r),a.join(" ")}let f=U.stdout.columns||120,c="";if(n==="warning"||n==="error")c=`${u} ${r}`;else if(n==="info"||n==="success")c=`${u} ${D} ${r}`;else c=`${u} ${D} ${j.cyan(r)}`;if(!e)return c.trim();let F=l(c).trim().length,h=l(i).length,E=Math.max(1,f-2-F-h);return`${c.trim()}${" ".repeat(E)}${i}`}formatMessage(t,i){if(i.length===1&&Array.isArray(i[0]))return t.replace(/\{(\d+)\}/g,(n,e)=>{let l=Number.parseInt(e,10);return l<i[0].length?String(i[0][l]):n});let u=/%([sdijfo%])/g,D=0,r=t.replace(u,(n,e)=>{if(e==="%")return"%";if(D>=i.length)return n;let l=i[D++];switch(e){case"s":return String(l);case"d":case"i":return Number(l).toString();case"j":case"o":return JSON.stringify(l,null,2);default:return n}});if(D<i.length)r+=` ${i.slice(D).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return r}formatMarkdown(t){if(!t)return t;let i=t;return i=i.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(u,D,r)=>{let n=j.underline(j.blue(D)),e=this.toAbsoluteFilePath(r);if(e&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let l=`file://${encodeURI(e)}`,f="\x1B]8;;",c="\x1B\\";return`\x1B]8;;${l}\x1B\\${n}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${r}\x1B\\${n}\x1B]8;;\x1B\\`;return n}),i=i.replace(/`([^`]+)`/g,(u,D)=>j.bgGray(D)),i=i.replace(/\*\*([^*]+)\*\*/g,(u,D)=>j.bold(D)),i=i.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(u,D)=>j.italic(D)),i=i.replace(/(?<!_)_([^_]+)_(?!_)/g,(u,D)=>j.italic(D)),i=i.replace(/~([^~]+)~/g,(u,D)=>j.strikethrough(D)),i}supportsHyperlinks(){if(G())return!1;let t=U.env;if(!t)return!1;if(t.TERM_PROGRAM==="iTerm.app"||t.TERM_PROGRAM==="vscode"||t.TERM_PROGRAM==="WezTerm")return!0;if(t.WT_SESSION)return!0;if(t.TERM==="xterm-kitty")return!0;let i=t.VTE_VERSION?Number.parseInt(t.VTE_VERSION,10):0;if(!Number.isNaN(i)&&i>=5000)return!0;return!1}toAbsoluteFilePath(t){try{let i=t;if(i.startsWith("file://"))i=i.replace(/^file:\/\//,"");if(i.startsWith("~")){let u=U.env.HOME||"";if(u)i=i.replace(/^~(?=$|\/)/,u)}if(Je(i)||i.startsWith("./")||i.startsWith("../"))i=Ke(i);else return null;return Xi(i)?i:null}catch{return null}}buildOutputTexts(t){let i=this.shouldStyleConsole()?this.formatMarkdown(t):t,u=t.replace(this.ANSI_PATTERN,"");return{consoleText:i,fileText:u}}async log(t,i,...u){let D=new Date,r=this.formatConsoleTimestamp(D),n=this.formatFileTimestamp(D),e,l;if(i instanceof Error)e=i.message,l=i.stack;else e=this.formatMessage(i,u);let{consoleText:f,fileText:c}=this.buildOutputTexts(e);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":l0[t],E=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",a;switch(t){case"debug":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:j.gray(f),level:t}),console.error(a);break;case"info":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.warn(a);break;case"success":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:j.green(f),level:t}),console.error(a);break;case"warning":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.warn(a);break;case"error":if(a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.error(a),l){let A=l.split(`
10
+ `);for(let y of A)if(y.trim()&&!y.includes(e))console.error(this.formatConsoleMessage({timestamp:r,message:j.gray(` ${y}`),level:t,showTimestamp:!1}))}break}}else if(!G()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${e}`),l)console.error(l)}if(!this.shouldLog(t))return;let F=`${n} ${this.environment}.${t.toUpperCase()}: ${c}
11
+ `;if(l)F+=`${l}
12
+ `;if(F=F.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(F)}progress(t,i=""){let u={update:(l,f)=>{},finish:(l)=>{},interrupt:(l,f)=>{}};if(!this.enabled)return u;let D=30;if(this.activeProgressBar={total:Math.max(1,t||1),current:0,message:i||"",barLength:D,lastRenderedLine:""},this.shouldStyleConsole()&&!G()&&U.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(l,f)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,l),this.activeProgressBar.total),f!==void 0)this.activeProgressBar.message=f;if(this.shouldStyleConsole()&&!G()&&U.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(l)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,l)},interrupt:(l,f="info")=>{if(!G()&&U.stdout.isTTY)U.stdout.write(`
13
+ `);if(this[f==="warning"?"warn":f](l),this.activeProgressBar&&this.shouldStyleConsole()&&!G()&&U.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(t){let i=performance.now();if(this.shouldStyleConsole()){let u=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",D=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:D,icon:this.options.showIcons===!1?"":j.blue("◐"),tag:u,message:`${j.cyan(t)}...`}))}return async(u)=>{if(!this.enabled)return;let D=performance.now(),r=Math.round(D-i),n=`${t} completed in ${r}ms`,e=new Date,l=this.formatConsoleTimestamp(e),c=`${this.formatFileTimestamp(e)} ${this.environment}.INFO: ${n}`;if(u)c+=` ${JSON.stringify(u)}`;if(c+=`
14
+ `,c=c.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let F=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:this.options.showIcons===!1?"":j.green("✓"),tag:F,message:`${n}${u?` ${JSON.stringify(u)}`:""}`}))}else if(!G())console.error(c.trim());if(this.shouldWriteToFile())await this.writeToFile(c)}}async debug(t,...i){await this.log("debug",t,...i)}async info(t,...i){await this.log("info",t,...i)}async success(t,...i){await this.log("success",t,...i)}async warn(t,...i){await this.log("warning",t,...i)}async error(t,...i){await this.log("error",t,...i)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:i}=t;return!!i}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let i=`${this.name}:${t}`,u=new gi(i,{...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(u),u}createReadStream(){if(G())throw Error("createReadStream is not supported in browser environments");if(!Xi(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return er(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let i=this.config.rotation;if(!i.encrypt||typeof i.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let u=this.keys.get(this.currentKeyId);try{let D=Nt.isBuffer(t)?t:Nt.from(t,"base64"),r=D.subarray(0,16),n=D.subarray(D.length-16),e=D.subarray(16,D.length-16),l=We("aes-256-gcm",u,r);l.setAuthTag(n);let f=l.update(e),c=l.final(),F=f.length+c.length,h=Nt.allocUnsafe(F);return f.copy(h,0),c.copy(h,f.length),h.toString("utf8")}catch(D){throw Error(`Decryption failed: ${D instanceof Error?D.message:String(D)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return G()}isServerMode(){return!G()}setTestEncryptionKey(t,i){this.currentKeyId=t,this.keys.set(t,i)}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(t){if(!this.enabled)return;let i=new Date,u=this.formatConsoleTimestamp(i),D=this.formatFileTimestamp(i),{consoleText:r,fileText:n}=this.buildOutputTexts(t);if(this.shouldStyleConsole()){let l=r.split(`
15
+ `),f=Math.max(...l.map((E)=>E.length))+2,c=`┌${"─".repeat(f)}┐`,F=`└${"─".repeat(f)}┘`,h=l.map((E)=>{return this.formatConsoleMessage({timestamp:u,message:j.cyan(E),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:u,message:j.cyan(c),showTimestamp:!1})),h.forEach((E)=>console.error(E)),console.error(this.formatConsoleMessage({timestamp:u,message:j.cyan(F),showTimestamp:!1}))}else if(!G())console.error(`${D} ${this.environment}.INFO: [BOX] ${n}`);let e=`${D} ${this.environment}.INFO: [BOX] ${n}
16
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(e)}async prompt(t){if(G())return Promise.resolve(!0);return new Promise((i)=>{console.error(`${j.cyan("?")} ${t} (y/n) `);let u=(D)=>{let r=D.toString().trim().toLowerCase();U.stdin.removeListener("data",u);try{if(typeof U.stdin.setRawMode==="function")U.stdin.setRawMode(!1)}catch{}U.stdin.pause(),console.error(""),i(r==="y"||r==="yes")};try{if(typeof U.stdin.setRawMode==="function")U.stdin.setRawMode(!0)}catch{}U.stdin.resume(),U.stdin.once("data",u)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...i){if(!this.enabled)return;let u=t;if(i&&i.length>0){let f=/%([sdijfo%])/g,c=0;if(u=t.replace(f,(F,h)=>{if(h==="%")return"%";if(c>=i.length)return F;let E=i[c++];switch(h){case"s":return String(E);case"d":case"i":return Number(E).toString();case"j":case"o":return JSON.stringify(E,null,2);default:return F}}),c<i.length)u+=` ${i.slice(c).map((F)=>typeof F==="object"?JSON.stringify(F,null,2):String(F)).join(" ")}`}let{consoleText:D,fileText:r}=this.buildOutputTexts(u);if(this.shouldStyleConsole()){let f=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",c=this.options.showIcons===!1?"":`${j.blue("◐")} `;console.error(`${c}${f} ${j.cyan(D)}`)}let l=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${r}
17
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(l)}renderProgressBar(t,i=!1){if(!this.enabled||!this.shouldStyleConsole()||!U.stdout.isTTY)return;let u=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),D=Math.round(t.barLength*u/100),r=t.barLength-D,n=j.green("━".repeat(D)),e=j.gray("━".repeat(r)),l=`[${n}${e}]`,f=`${u}%`.padStart(4),c=t.message?` ${t.message}`:"",F=this.options.showIcons===!1?"":i||u===100?j.green("✓"):j.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${j.gray(this.formatTag(this.name))}`:"",E=`\r${F}${h} ${l} ${f}${c}`,a=U.stdout.columns||80,A=" ".repeat(Math.max(0,a-E.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${E}${A}`,U.stdout.write(t.lastRenderedLine),i)U.stdout.write(`
18
+ `)}finishProgressBar(t,i){if(!this.enabled||!this.fancy||G()||!U.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(i)t.message=i;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(G()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let i=await xi(this.config.logDirectory),u=[];for(let D of i){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(D):D.startsWith(this.name))||!D.endsWith(".log"))continue;let n=ti(this.config.logDirectory,D);if(t.before)try{if((await $t(n)).mtime>=t.before)continue}catch(e){console.error(`Failed to get stats for file ${n}:`,e);continue}u.push(n)}if(u.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${u.length} log file(s)...`);for(let D of u)try{await Wi(D),console.warn(`Deleted log file: ${D}`)}catch(r){console.error(`Failed to delete log file ${D}:`,r)}console.warn("Log clearing process finished.")}catch(i){console.error("Error during log clearing process:",i)}}}var IF=new gi("stacks");class yt extends Error{timestamp;context;constructor(t,i={}){super(t);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=i,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 t=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([i,u])=>`${i}: ${u}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${t}`}}class Nr extends yt{code="CONFIG_NOT_FOUND";constructor(t,i,u){let D=u?` or alias "${u}"`:"";super(`Configuration "${t}"${D} not found`,{configName:t,alias:u,searchPaths:i,searchPathCount:i.length})}}class qi extends yt{code="CONFIG_LOAD_ERROR";constructor(t,i,u){super(`Failed to load configuration from "${t}": ${i.message}`,{configPath:t,configName:u,originalError:i.name,originalMessage:i.message});this.cause=i}}class dr extends yt{code="CONFIG_VALIDATION_ERROR";constructor(t,i,u){super(`Configuration validation failed for "${t}"`,{configPath:t,configName:u,validationErrors:i,errorCount:i.length})}}class Ir extends yt{code="CONFIG_MERGE_ERROR";constructor(t,i,u,D){super(`Failed to merge configuration from "${t}" with "${i}": ${u.message}`,{sourcePath:t,targetPath:i,configName:D,originalError:u.name,originalMessage:u.message});this.cause=u}}class gu extends yt{code="ENV_VAR_ERROR";constructor(t,i,u,D){super(`Failed to parse environment variable "${t}" with value "${i}" as ${u}`,{envKey:t,envValue:i,expectedType:u,configName:D})}}class _r extends yt{code="FILE_SYSTEM_ERROR";constructor(t,i,u){super(`File system ${t} failed for "${i}": ${u.message}`,{operation:t,path:i,originalError:u.name,originalMessage:u.message});this.cause=u}}class Ur extends yt{code="TYPE_GENERATION_ERROR";constructor(t,i,u){super(`Failed to generate types from "${t}" to "${i}": ${u.message}`,{configDir:t,outputPath:i,originalError:u.name,originalMessage:u.message});this.cause=u}}class pi extends yt{code="SCHEMA_VALIDATION_ERROR";constructor(t,i,u){super(`Schema validation failed${u?` for config "${u}"`:""}`,{schemaPath:t,configName:u,validationErrors:i,errorCount:i.length})}}class jr extends yt{code="BROWSER_CONFIG_ERROR";constructor(t,i,u,D){super(`Failed to fetch configuration from "${t}": ${i} ${u}`,{endpoint:t,status:i,statusText:u,configName:D})}}class Yr extends yt{code="PLUGIN_ERROR";constructor(t,i,u){super(`Plugin "${t}" failed during ${i}: ${u.message}`,{pluginName:t,operation:i,originalError:u.name,originalMessage:u.message});this.cause=u}}var ui={configNotFound(t,i,u){return new Nr(t,i,u)},configLoad(t,i,u){return new qi(t,i,u)},configValidation(t,i,u){return new dr(t,i,u)},configMerge(t,i,u,D){return new Ir(t,i,u,D)},envVar(t,i,u,D){return new gu(t,i,u,D)},fileSystem(t,i,u){return new _r(t,i,u)},typeGeneration(t,i,u){return new Ur(t,i,u)},schemaValidation(t,i,u){return new pi(t,i,u)},browserConfig(t,i,u,D){return new jr(t,i,u,D)},plugin(t,i,u){return new Yr(t,i,u)}};async function c0(t,i={}){let{maxRetries:u=3,retryDelay:D=1000,isRetryable:r=()=>!0,fallback:n}=i,e=Error("Unknown error occurred");for(let l=0;l<=u;l++)try{return await t()}catch(f){if(e=f instanceof Error?f:Error(String(f)),l===u||!r(e))break;if(D>0)await new Promise((c)=>setTimeout(c,D))}if(n!==void 0)return n;throw e instanceof Error?e:Error(`Unknown error: ${String(e)}`)}class vu{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(t,i)=>i==="boolean"||["true","false","1","0","yes","no"].includes(t.toLowerCase()),parse:(t)=>{let i=t.toLowerCase();return["true","1","yes"].includes(i)}},{name:"number",canParse:(t,i)=>i==="number"||!Number.isNaN(Number(t))&&!Number.isNaN(Number.parseFloat(t)),parse:(t)=>{let i=Number(t);if(Number.isNaN(i))throw TypeError(`Cannot parse "${t}" as number`);return i}},{name:"array",canParse:(t,i)=>i==="array"||t.startsWith("[")||t.includes(","),parse:(t)=>{try{let i=JSON.parse(t);if(Array.isArray(i))return i}catch{}return t.split(",").map((i)=>i.trim())}},{name:"json",canParse:(t,i)=>i==="object"||(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")),parse:(t)=>{try{return JSON.parse(t)}catch(i){throw Error(`Cannot parse "${t}" as JSON: ${i}`)}}}]}async applyEnvironmentVariables(t,i,u={}){let{prefix:D,useCamelCase:r=!0,useBackwardCompatibility:n=!0,customParsers:e={},verbose:l=!1,trackPerformance:f=!0}=u,c=async()=>{if(!t)return{config:i,source:{type:"environment",priority:50,timestamp:new Date}};let F=D||this.generateEnvPrefix(t),h={...i};return this.processObject(h,[],F,{useCamelCase:r,useBackwardCompatibility:n,customParsers:e,verbose:l,configName:t}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(f)return qu.track("applyEnvironmentVariables",c,{configName:t});return c()}generateEnvPrefix(t){return t.toUpperCase().replace(/-/g,"_")}formatEnvKey(t,i){if(!i)return t.toUpperCase();return t.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(t,i,u,D){for(let[r,n]of Object.entries(t)){let e=[...i,r],l=e.map((F)=>this.formatEnvKey(F,D.useCamelCase)),f=`${u}_${l.join("_")}`,c=D.useBackwardCompatibility?`${u}_${e.map((F)=>F.toUpperCase()).join("_")}`:null;if(D.verbose);if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.processObject(n,e,u,D);else{let F=zi.env[f]||(c?zi.env[c]:void 0);if(F!==void 0){if(D.verbose){let h=zi.env[f]?f:c}try{t[r]=this.parseEnvironmentValue(F,typeof n,f,D.customParsers,D.configName)}catch(h){if(h instanceof gu)throw h;throw ui.envVar(f,F,typeof n,D.configName)}}}}}parseEnvironmentValue(t,i,u,D,r){for(let[n,e]of Object.entries(D))try{return e(t)}catch{continue}for(let n of this.defaultParsers)if(n.canParse(t,i))try{return n.parse(t)}catch{throw ui.envVar(u,t,`${i} (via ${n.name} parser)`,r)}return t}getEnvironmentVariables(t){let i={},u=t.toUpperCase();for(let[D,r]of Object.entries(zi.env))if(D.startsWith(u)&&r!==void 0)i[D]=r;return i}validateEnvironmentVariable(t,i,u){let D=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(t))D.push(`Environment variable key "${t}" should only contain uppercase letters, numbers, and underscores`);if(u)try{this.parseEnvironmentValue(t,i,u,{})}catch(r){D.push(`Cannot parse value "${i}" as ${u}: ${r}`)}return{isValid:D.length===0,errors:D}}generateEnvVarDocs(t,i,u={}){let{prefix:D,format:r="text"}=u,n=D||this.generateEnvPrefix(t),e=[];switch(this.extractEnvVarInfo(i,[],n,e),r){case"markdown":return this.formatAsMarkdown(e,t);case"json":return JSON.stringify(e,null,2);default:return this.formatAsText(e,t)}}extractEnvVarInfo(t,i,u,D){for(let[r,n]of Object.entries(t)){let e=[...i,r],l=`${u}_${e.map((f)=>this.formatEnvKey(f,!0)).join("_")}`;if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.extractEnvVarInfo(n,e,u,D);else D.push({key:l,type:Array.isArray(n)?"array":typeof n,description:`Configuration for ${e.join(".")}`,example:this.generateExample(n)})}}generateExample(t){if(Array.isArray(t))return JSON.stringify(t);if(typeof t==="object"&&t!==null)return JSON.stringify(t);return String(t)}formatAsText(t,i){let u=`Environment Variables for ${i}:
19
+
20
+ `;for(let D of t)u+=`${D.key}
21
+ `,u+=` Type: ${D.type}
22
+ `,u+=` Description: ${D.description}
23
+ `,u+=` Example: ${D.example}
24
+
25
+ `;return u}formatAsMarkdown(t,i){let u=`# Environment Variables for ${i}
26
+
27
+ `;u+=`| Variable | Type | Description | Example |
28
+ `,u+=`|----------|------|-------------|----------|
29
+ `;for(let D of t)u+=`| \`${D.key}\` | ${D.type} | ${D.description} | \`${D.example}\` |
30
+ `;return u}}function F0(t,i,u={}){return Xr(t,i,u,new WeakMap)}function Xr(t,i,u,D){let{arrayMergeMode:r="replace",skipNullish:n=!1,customMerger:e}=u;if(i===null||i===void 0)return n?t:i;if(e){let l=e(t,i);if(l!==void 0)return l}if(Array.isArray(i)||Array.isArray(t))return xr(t,i,r,D);if(!at(i)||!at(t))return i;return E0(t,i,u,D)}function xr(t,i,u,D){if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(t)&&!Array.isArray(i))return i;if(Array.isArray(i)&&Array.isArray(t))switch(u){case"replace":return i;case"concat":return a0(t,i);case"smart":return h0(t,i,D);default:return i}return i}function a0(t,i){let u=[...i];for(let D of t)if(!u.some((r)=>ku(r,D)))u.push(D);return u}function h0(t,i,u){if(i.length===0)return t;if(t.length===0)return i;if(at(i[0])&&at(t[0]))return s0(t,i,u);if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}function s0(t,i,u){let D=[...i];for(let r of t){if(!at(r)){D.push(r);continue}let n=["id","name","key","path","type"],e=!1;for(let l of n)if(l in r){if(D.find((c)=>at(c)&&(l in c)&&c[l]===r[l])){e=!0;break}}if(!e)D.push(r)}return D}function E0(t,i,u,D){let r=i;if(at(r)&&D.has(r))return D.get(r);let n={...t};if(at(r))D.set(r,n);for(let e in r){if(!Object.prototype.hasOwnProperty.call(r,e))continue;let l=r[e],f=n[e];if(u.skipNullish&&(l===null||l===void 0))continue;if(l===null||l===void 0){n[e]=l;continue}if(at(l)&&at(f))n[e]=Xr(f,l,u,D);else if(Array.isArray(l)||Array.isArray(f))n[e]=xr(f,l,u.arrayMergeMode||"smart",D);else n[e]=l}return n}function Wr(t,i,u="replace"){return F0(t,i,{arrayMergeMode:u==="replace"?"replace":"smart",skipNullish:!0})}function ku(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!ku(t[u],i[u]))return!1;return!0}if(at(t)&&at(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!ku(t[r],i[r]))return!1}return!0}return!1}function at(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}class Mr{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(t,i,u={}){let{arrayStrategy:D="replace",useCache:r=!0,cacheTtl:n,trackPerformance:e=!0,verbose:l=!1}=u;if(r){let c=Ki.getWithFileCheck("file",t);if(c){if(l)console.log(`Configuration loaded from cache: ${t}`);return c}}let f=async()=>{if(!Qi(t))return null;try{let c=`?t=${Date.now()}`,F=await import(t+c),h=F.default||F,E="default"in F,a=Object.keys(F).length>0;if(!E&&!a)throw new qi(t,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new qi(t,Error("Configuration must export a valid object"),"unknown");let C={config:Wr(i,h,D),source:{type:"file",path:t,priority:100,timestamp:new Date}};if(r)Ki.setWithFileCheck("file",C,t,n);return C}catch(c){throw c instanceof Error?ui.configLoad(t,c):ui.configLoad(t,Error(String(c)))}};if(e)return qu.track("loadFromPath",f,{path:t});return f()}async tryLoadFromPaths(t,i,u={}){for(let D of t)try{let r=await this.loadFromPath(D,i,u);if(r)return r}catch(r){if(r instanceof Error&&r.name==="ConfigLoadError")throw r;if(u.verbose)console.warn(`Failed to load config from ${D}:`,r)}return null}generateConfigPaths(t,i,u){let D=this.generateNamePatterns(t,u),r=[];for(let n of D)for(let e of this.extensions)r.push(Lu(i,`${n}${e}`));return r}generateNamePatterns(t,i){let u=[];if(u.push("config",".config"),t)u.push(t,`.${t}.config`,`${t}.config`,`.${t}`);if(i){if(u.push(i,`.${i}.config`,`${i}.config`,`.${i}`),t)u.push(`${t}.${i}.config`,`.${t}.${i}.config`)}return u.filter(Boolean)}checkFileAccess(t){return c0(async()=>{return Qi(t)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(t,i,u){let D=[];if(!Qi(t))return D;if(i||u){let r=this.generateNamePatterns(i||"",u);for(let n of r)for(let e of this.extensions){let l=Lu(t,`${n}${e}`);if(await this.checkFileAccess(l))D.push(l)}}else try{let{readdirSync:r}=await import("fs"),n=r(t);for(let e of n)if(this.looksLikeConfigFile(e)){let l=Lu(t,e);if(await this.checkFileAccess(l))D.push(l)}}catch{return[]}return D}looksLikeConfigFile(t){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((u)=>u.test(t))}async validateConfigFile(t){let i=[];try{if(!Qi(t))return i.push("Configuration file does not exist"),i;let u=await import(t),D=u.default||u;if(D===void 0)i.push("Configuration file must export a default value or named exports");else if(typeof D!=="object"||D===null)i.push("Configuration must be an object");else if(Array.isArray(D))i.push("Configuration cannot be an array at the root level");if(t.endsWith(".json"))try{let{readFileSync:r}=await import("fs"),n=r(t,"utf8");JSON.parse(n)}catch(r){i.push(`Invalid JSON syntax: ${r}`)}}catch(u){i.push(`Failed to load configuration file: ${u}`)}return i}async getFileModificationTime(t){try{let{statSync:i}=await import("fs");return i(t).mtime}catch{return null}}async preloadConfigurations(t,i={}){let u=new Map;return await Promise.allSettled(t.map(async(D)=>{try{let r=await this.loadFromPath(D,{},i);if(r)u.set(D,r.config)}catch(r){if(i.verbose)console.warn(`Failed to preload ${D}:`,r)}})),u}}var w0=/^https?:\/\//;class zr{async validateConfiguration(t,i,u={}){let{stopOnFirstError:D=!1,validateRequired:r=!0,validateTypes:n=!0,customRules:e=[],trackPerformance:l=!0,verbose:f=!1}=u,c=async()=>{let F=[],h=[],E={stopOnFirstError:D,validateRequired:r,validateTypes:n,customRules:e,trackPerformance:l,verbose:f};try{if(typeof i==="string")return await this.validateWithSchemaFile(t,i,E);else if(Array.isArray(i))return this.validateWithRules(t,[...i,...e],E);else return this.validateWithJSONSchema(t,i,E)}catch(a){return F.push({path:"",message:`Validation failed: ${a}`,rule:"system"}),{isValid:!1,errors:F,warnings:h}}};if(l)return await qu.track("validateConfiguration",c);return c()}async validateWithSchemaFile(t,i,u){try{if(!y0(i))throw new pi(i,[{path:"",message:"Schema file does not exist"}]);let D=await import(i),r=D.default||D;if(Array.isArray(r))return this.validateWithRules(t,r,u);else return this.validateWithJSONSchema(t,r,u)}catch(D){throw new pi(i,[{path:"",message:`Failed to load schema: ${D}`}])}}validateWithJSONSchema(t,i,u){let D=[],r=[];return this.validateObjectAgainstSchema(t,i,"",D,r,u),{isValid:D.length===0,errors:D,warnings:r}}validateObjectAgainstSchema(t,i,u,D,r,n){if(n.validateTypes&&i.type){let e=Array.isArray(t)?"array":typeof t,l=Array.isArray(i.type)?i.type:[i.type];if(!l.includes(e)){if(D.push({path:u,message:`Expected type ${l.join(" or ")}, got ${e}`,expected:l.join(" or "),actual:e,rule:"type"}),n.stopOnFirstError)return}}if(i.enum&&!i.enum.includes(t)){if(D.push({path:u,message:`Value must be one of: ${i.enum.join(", ")}`,expected:i.enum.join(", "),actual:t,rule:"enum"}),n.stopOnFirstError)return}if(typeof t==="string"){if(i.minLength!==void 0&&t.length<i.minLength)D.push({path:u,message:`String length must be at least ${i.minLength}`,expected:`>= ${i.minLength}`,actual:t.length,rule:"minLength"});if(i.maxLength!==void 0&&t.length>i.maxLength)D.push({path:u,message:`String length must not exceed ${i.maxLength}`,expected:`<= ${i.maxLength}`,actual:t.length,rule:"maxLength"});if(i.pattern){if(!new RegExp(i.pattern).test(t))D.push({path:u,message:`String does not match pattern ${i.pattern}`,expected:i.pattern,actual:t,rule:"pattern"})}}if(typeof t==="number"){if(i.minimum!==void 0&&t<i.minimum)D.push({path:u,message:`Value must be at least ${i.minimum}`,expected:`>= ${i.minimum}`,actual:t,rule:"minimum"});if(i.maximum!==void 0&&t>i.maximum)D.push({path:u,message:`Value must not exceed ${i.maximum}`,expected:`<= ${i.maximum}`,actual:t,rule:"maximum"})}if(Array.isArray(t)&&i.items)for(let e=0;e<t.length;e++){let l=u?`${u}[${e}]`:`[${e}]`;if(this.validateObjectAgainstSchema(t[e],i.items,l,D,r,n),n.stopOnFirstError&&D.length>0)return}if(t&&typeof t==="object"&&!Array.isArray(t)){let e=t;if(n.validateRequired&&i.required){for(let l of i.required)if(!(l in e)){if(D.push({path:u?`${u}.${l}`:l,message:`Missing required property '${l}'`,expected:"required",rule:"required"}),n.stopOnFirstError)return}}if(i.properties){for(let[l,f]of Object.entries(i.properties))if(l in e){let c=u?`${u}.${l}`:l;if(this.validateObjectAgainstSchema(e[l],f,c,D,r,n),n.stopOnFirstError&&D.length>0)return}}if(i.additionalProperties===!1){let l=new Set(Object.keys(i.properties||{}));for(let f of Object.keys(e))if(!l.has(f))r.push({path:u?`${u}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(t,i,u){let D=[],r=[];for(let n of i)try{let e=this.getValueByPath(t,n.path),l=this.validateWithRule(e,n,n.path);if(D.push(...l),u.stopOnFirstError&&D.length>0)break}catch(e){D.push({path:n.path,message:`Rule validation failed: ${e}`,rule:"system"})}return{isValid:D.length===0,errors:D,warnings:r}}validateWithRule(t,i,u){let D=[];if(i.required&&(t===void 0||t===null))return D.push({path:u,message:i.message||`Property '${u}' is required`,expected:"required",rule:"required"}),D;if(t===void 0||t===null)return D;if(i.type){let r=Array.isArray(t)?"array":typeof t;if(r!==i.type)D.push({path:u,message:i.message||`Expected type ${i.type}, got ${r}`,expected:i.type,actual:r,rule:"type"})}if(i.min!==void 0){let r=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(r<i.min)D.push({path:u,message:i.message||`Value must be at least ${i.min}`,expected:`>= ${i.min}`,actual:r,rule:"min"})}if(i.max!==void 0){let r=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(r>i.max)D.push({path:u,message:i.message||`Value must not exceed ${i.max}`,expected:`<= ${i.max}`,actual:r,rule:"max"})}if(i.pattern&&typeof t==="string"){if(!i.pattern.test(t))D.push({path:u,message:i.message||`Value does not match pattern ${i.pattern}`,expected:i.pattern.toString(),actual:t,rule:"pattern"})}if(i.enum&&!i.enum.includes(t))D.push({path:u,message:i.message||`Value must be one of: ${i.enum.join(", ")}`,expected:i.enum.join(", "),actual:t,rule:"enum"});if(i.validator){let r=i.validator(t);if(r)D.push({path:u,message:i.message||r,rule:"custom"})}return D}getValueByPath(t,i){if(!i)return t;let u=i.split("."),D=t;for(let r of u)if(D&&typeof D==="object"&&r in D)D=D[r];else return;return D}generateRulesFromInterface(t){let i=[],u=t.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let D of u){let[,r,n,e]=D;i.push({path:r,required:!n,type:this.mapTypeScriptType(e)})}return i}mapTypeScriptType(t){switch(t.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:w0},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var Mt=new gi("bunfig",{showTags:!0});class Qr{fileLoader=new Mr;envProcessor=new vu;validator=new zr;async loadConfig(t){let i=Date.now(),{cache:u,performance:D,schema:r,validate:n,...e}=t;try{if(u?.enabled){let f=this.checkCache(e.name||"",e);if(f)return f}let l;try{l=await this.loadConfigurationStrategies(e,!0,u)}catch(f){let c=e.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(c)throw f;l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`No configuration file found for "${e.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let F=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),h=!F&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),E=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(c&&(E||F))throw f;if(h&&(!c||!E))l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!c)l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(r||n)await this.validateConfiguration(l.config,r,n,e.name);if(u?.enabled&&l)this.cacheResult(e.name||"",l,u,e);if(D?.enabled){let f={operation:"loadConfig",duration:Date.now()-i,configName:e.name,timestamp:new Date};if(D.onMetrics)D.onMetrics(f);if(D.slowThreshold&&f.duration>D.slowThreshold)Mt.warn(`Slow configuration loading detected: ${f.duration}ms for ${e.name}`);l.metrics=f}return l}catch(l){let f=Date.now()-i;throw Mt.error(`Configuration loading failed after ${f}ms:`,[l instanceof Error?l:Error(String(l))]),l}}async loadConfigurationStrategies(t,i=!1,u){let{name:D="",alias:r,cwd:n,configDir:e,defaultConfig:l,checkEnv:f=!0,arrayStrategy:c="replace",verbose:F=!1}=t,h=n||Vi.cwd(),E=[],a=await this.loadLocalConfiguration(D,r,h,e,l,c,F,f,u);if(a)return E.push(...this.getLocalSearchPaths(D,r,h,e)),this.finalizeResult(a,E,f,D,F);let A=await this.loadHomeConfiguration(D,r,l,c,F,f);if(A)return E.push(...this.getHomeSearchPaths(D,r)),this.finalizeResult(A,E,f,D,F);let y=await this.loadPackageJsonConfiguration(D,r,h,l,c,F,f);if(y)return E.push(Ft(h,"package.json")),this.finalizeResult(y,E,f,D,F);if(E.push(...this.getAllSearchPaths(D,r,h,e)),i)throw ui.configNotFound(D,E,r);return{...await this.applyEnvironmentVariables(D,l,f,F),warnings:[`No configuration file found for "${D}"${r?` or alias "${r}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration(t,i,u,D,r,n,e,l,f){let c=l?Oi(t,r,e):r,F=this.getLocalDirectories(u,D);for(let h of F){if(e)Mt.info(`Searching for configuration in: ${h}`);let E=this.fileLoader.generateConfigPaths(t,h,i),a=await this.fileLoader.tryLoadFromPaths(E,c,{arrayStrategy:n,verbose:e,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(a){if(e)Mt.success(`Configuration loaded from: ${a.source.path}`);return a}}return null}async loadHomeConfiguration(t,i,u,D,r,n){if(!t)return null;let e=n?Oi(t,u,r):u,l=[Ft(gt(),".config",t),Ft(gt(),".config"),gt()];for(let f of l){if(r)Mt.info(`Checking home directory: ${f}`);let c=this.fileLoader.generateConfigPaths(t,f,i),F=await this.fileLoader.tryLoadFromPaths(c,e,{arrayStrategy:D,verbose:r});if(F){if(r)Mt.success(`Configuration loaded from home directory: ${F.source.path}`);return F}}return null}async loadPackageJsonConfiguration(t,i,u,D,r,n,e){let l=e?Oi(t,D,n):D;try{let f=Ft(u,"package.json");if(!Te(f))return null;let c=await import(f),F=c[t],h=t;if(!F&&i)F=c[i],h=i;if(F&&typeof F==="object"&&!Array.isArray(F)){if(n)Mt.success(`Configuration loaded from package.json: ${h}`);return{config:Wr(l,F,r),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(n)Mt.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}return null}async applyEnvironmentVariables(t,i,u,D){if(!u||!t||typeof i!=="object"||i===null||Array.isArray(i))return{config:i,source:{type:"default",priority:10,timestamp:new Date}};return{config:Oi(t,i,D),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(t,i,u,D,r){return{config:t.config,source:t.source,path:t.source.path}}async validateConfiguration(t,i,u,D){let r=[];if(u){let n=u(t);if(n)r.push(...n)}if(i){let n=await this.validator.validateConfiguration(t,i);if(!n.isValid)r.push(...n.errors.map((e)=>e.path?`${e.path}: ${e.message}`:e.message))}if(r.length>0)throw ui.configValidation(D||"unknown",r,D)}checkCache(t,i){let u=this.generateCacheKey(t,i);return Ki.get(u)||null}cacheResult(t,i,u,D){let r=this.generateCacheKey(t,D);Ki.set(r,i,void 0,u.ttl)}generateCacheKey(t,i){let u=[t];if(i.alias)u.push(`alias:${i.alias}`);if(i.cwd)u.push(`cwd:${i.cwd}`);if(i.configDir)u.push(`configDir:${i.configDir}`);if("checkEnv"in i)u.push(`checkEnv:${i.checkEnv}`);return u.join("|")}getLocalDirectories(t,i){return Array.from(new Set([t,Ft(t,"config"),Ft(t,".config"),i?Ft(t,i):void 0].filter(Boolean)))}getAllSearchPaths(t,i,u,D){let r=[];return r.push(...this.getLocalSearchPaths(t,i,u,D)),r.push(...this.getHomeSearchPaths(t,i)),r.push(Ft(u,"package.json")),r}getLocalSearchPaths(t,i,u,D){let r=this.getLocalDirectories(u,D),n=[];for(let e of r)n.push(...this.fileLoader.generateConfigPaths(t,e,i));return n}getHomeSearchPaths(t,i){if(!t)return[];let u=[Ft(gt(),".config",t),Ft(gt(),".config"),gt()],D=[];for(let r of u)D.push(...this.fileLoader.generateConfigPaths(t,r,i));return D}async loadConfigWithResult(t){return this.loadConfig(t)}}var XF=new Qr;function Oi(t,i,u=!1){let D=new vu,r=t.toUpperCase().replace(/[^A-Z0-9]/g,"_");function n(e,l=[]){let f={...e};for(let[c,F]of Object.entries(e)){let h=[...l,c],E=[`${r}_${h.join("_").toUpperCase()}`,`${r}_${h.map((y)=>y.toUpperCase()).join("")}`,`${r}_${h.map((y)=>y.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],a,A;for(let y of E)if(a=Vi.env[y],a!==void 0){A=y;break}if(a!==void 0&&A)if(typeof F==="boolean")f[c]=["true","1","yes"].includes(a.toLowerCase());else if(typeof F==="number"){let y=Number(a);if(!Number.isNaN(y))f[c]=y}else if(Array.isArray(F))try{f[c]=JSON.parse(a)}catch{f[c]=a.split(",").map((y)=>y.trim())}else f[c]=a;else if(F&&typeof F==="object"&&!Array.isArray(F))f[c]=n(F,h)}return f}return n(i)}var xF=Ft(Vi.cwd(),"config"),WF=Ft(Vi.cwd(),"src/generated");var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",C0={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:Zu(Pu(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:Zu(Pu(),".stacks","ssl","stacks.localhost.crt"),keyPath:Zu(Pu(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0};var vi=C0;import{exec as A0}from"node:child_process";import Ht from"node:fs";import Or from"node:os";import iD from"node:path";import*as si from"node:process";import{promisify as B0}from"node:util";var Pi=B0(A0),ht=si.platform==="win32"?iD.join(si.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",$u=!1;async function Zi(t){if(si.platform==="win32")throw Error("Administrator privileges required on Windows");let i=tD(),u=t.replace(/'/g,"'\\''");try{if(i){let{stdout:r}=await Pi(`echo '${i}' | sudo -S sh -c '${u}' 2>/dev/null`);return $u=!0,r}if($u)try{let{stdout:r}=await Pi(`sudo -n sh -c '${u}'`);return r}catch(r){s("hosts","Cached sudo privileges expired, requesting again",!0)}let{stdout:D}=await Pi(`sudo sh -c '${u}'`);return $u=!0,D}catch(D){throw Error(`Failed to execute sudo command: ${D.message}`)}}async function Ei(t,i){s("hosts",`Adding hosts: ${t.join(", ")}`,i),s("hosts",`Using hosts file at: ${ht}`,i);try{let u;try{u=await Ht.promises.readFile(ht,"utf-8")}catch{s("hosts","Reading hosts file requires elevated permissions, using sudo",i);try{u=await Zi(`cat "${ht}"`)}catch(e){throw console.log(" Could not read hosts file — skipping hosts setup"),s("hosts",`sudo read also failed: ${e}`,i),Error(`Cannot read hosts file: ${e}`)}}let D=t.filter((e)=>{let l=`127.0.0.1 ${e}`,f=`::1 ${e}`;return!u.includes(l)&&!u.includes(f)});if(D.length===0){s("hosts","All hosts already exist in hosts file",i);return}let r=D.map((e)=>`
31
+ # Added by rpx
32
+ 127.0.0.1 ${e}
33
+ ::1 ${e}`).join(`
34
+ `),n=iD.join(Or.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Ht.promises.writeFile(n,u+r,"utf8"),await Zi(`cat "${n}" | tee "${ht}" > /dev/null`),console.log(` Hosts updated: ${D.join(", ")}`)}catch(e){console.log(" Could not update hosts file automatically"),console.log(" Add these entries to /etc/hosts:"),D.forEach((l)=>{console.log(` 127.0.0.1 ${l}`),console.log(` ::1 ${l}`)}),console.log(` Or run: sudo nano ${ht}`)}finally{try{await Ht.promises.unlink(n)}catch{}}}catch(u){s("hosts",`Failed to manage hosts file: ${u.message}`,i)}}async function Jr(t,i){s("hosts",`Removing hosts: ${t.join(", ")}`,i);try{let u;try{u=await Ht.promises.readFile(ht,"utf-8")}catch{s("hosts","Reading hosts file requires elevated permissions, using sudo",i);try{u=await Zi(`cat "${ht}"`)}catch(f){throw s("hosts",`sudo read also failed: ${f}`,i),Error(`Cannot read hosts file: ${f}`)}}let D=u.split(`
35
+ `),r=!1,n=D.filter((f)=>{if(t.some((F)=>f.includes(` ${F}`)&&(f.includes("127.0.0.1")||f.includes("::1"))))return r=!0,!1;if(f.trim()==="# Added by rpx")return r=!0,!1;return!0});if(!r){s("hosts","No matching hosts found to remove",i);return}while(n[n.length-1]?.trim()==="")n.pop();let e=`${n.join(`
36
+ `)}
37
+ `,l=iD.join(Or.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Ht.promises.writeFile(l,e,"utf8"),await Zi(`cat "${l}" | tee "${ht}" > /dev/null`),s("hosts","Hosts removed successfully",i)}catch(f){s("hosts","Could not clean up hosts file automatically",i)}finally{try{await Ht.promises.unlink(l)}catch(f){s("hosts",`Failed to remove temporary file: ${f}`,i)}}}catch(u){s("hosts",`Failed to clean up hosts file: ${u.message}`,i)}}async function yi(t,i){s("hosts",`Checking hosts: ${t}`,i);let u;try{u=await Ht.promises.readFile(ht,"utf-8")}catch(D){s("hosts",`Error reading hosts file: ${D}`,i);try{let r=tD(),n;if(r)n=`echo '${r}' | sudo -S cat "${ht}" 2>/dev/null`;else n=`sudo -n cat "${ht}" 2>/dev/null || cat "${ht}" 2>/dev/null || echo ""`;let{stdout:e}=await Pi(n);u=e}catch(r){return s("hosts",`Cannot read hosts file, assuming entries don't exist: ${r}`,i),t.map(()=>!1)}}return t.map((D)=>{let r=`127.0.0.1 ${D}`,n=`::1 ${D}`;return u.includes(r)||u.includes(n)})}import{execSync as Xt}from"node:child_process";import P from"node:fs/promises";import*as KD from"node:os";import{homedir as Si}from"node:os";import{join as et}from"node:path";import*as Tt from"node:process";import uD from"node:os";import DD from"node:path";import{existsSync as Kr,statSync as Hr}from"fs";import{existsSync as T0,mkdirSync as ta,readdirSync as ia,writeFileSync as ua}from"fs";import{homedir as Di}from"os";import{dirname as na,resolve as st}from"path";import mu from"process";import{join as m0,relative as S0,resolve as or}from"path";import au from"process";import{existsSync as Sn,mkdirSync as Fa,readdirSync as aa,writeFileSync as ha}from"fs";import{homedir as rD}from"os";import{dirname as ya,resolve as rt}from"path";import Ti from"process";import{join as R0,relative as N0,resolve as Gr}from"path";import hu from"process";import{existsSync as Rn,mkdirSync as Ta,readdirSync as ma,writeFileSync as Sa}from"fs";import{dirname as Na,resolve as su}from"path";import ID from"process";import{Buffer as zt}from"buffer";import{createCipheriv as d0,createDecipheriv as I0,randomBytes as nD}from"crypto";import{closeSync as eD,createReadStream as Lr,createWriteStream as _0,existsSync as fD,fsyncSync as kr,openSync as qr,writeFileSync as U0}from"fs";import{access as j0,constants as pr,mkdir as Y0,readdir as $i,rename as Vr,stat as ri,unlink as tu,writeFile as lD}from"fs/promises";import{join as ni}from"path";import g from"process";import{pipeline as X0}from"stream/promises";import{createGzip as br}from"zlib";import ei from"process";import Ut from"process";import{Buffer as _t}from"buffer";import{createCipheriv as x0,createDecipheriv as W0,randomBytes as cD}from"crypto";import{closeSync as FD,createReadStream as gr,createWriteStream as M0,existsSync as iu,fsyncSync as vr,openSync as Pr,writeFileSync as z0}from"fs";import{access as Q0,constants as Zr,mkdir as O0,readdir as uu,rename as $r,stat as fi,unlink as Du,writeFile as aD}from"fs/promises";import{isAbsolute as J0,join as li,resolve as K0}from"path";import x from"process";import{pipeline as H0}from"stream/promises";import{createGzip as tn}from"zlib";import ci from"process";import jt from"process";import ru from"process";import{existsSync as nu}from"fs";import{resolve as hD}from"path";import{existsSync as o0}from"fs";import{exec as Af}from"node:child_process";import ln from"node:fs";import Bf from"node:os";import wt from"node:path";import Tf from"node:process";import{promisify as mf}from"node:util";import ai from"node:crypto";import Yt from"node:fs";import ND from"node:path";import{formatWithOptions as En}from"node:util";import{sep as qf}from"node:path";import yn from"node:process";import*as Bu from"node:tty";import{execSync as mn}from"node:child_process";import Tu from"node:os";class Nn{cache=new Map;totalHits=0;totalMisses=0;options;constructor(t={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...t}}generateKey(t,i){let u=i?`:${i}`:"";return`${this.options.keyPrefix}${t}${u}`}isExpired(t){return Date.now()-t.timestamp.getTime()>t.ttl}estimateSize(t){try{return JSON.stringify(t).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let t=Array.from(this.cache.entries()).sort(([,u],[,D])=>u.timestamp.getTime()-D.timestamp.getTime()),i=t.length-this.options.maxSize+1;for(let u=0;u<i;u++)this.cache.delete(t[u][0])}set(t,i,u,D){if(!this.options.enabled)return;let r=this.generateKey(t,u),n=D??this.options.ttl,e=this.estimateSize(i);this.cache.set(r,{value:i,timestamp:new Date,ttl:n,hits:0,size:e}),this.evictIfNeeded()}get(t,i){if(!this.options.enabled){this.totalMisses++;return}let u=this.generateKey(t,i),D=this.cache.get(u);if(!D){this.totalMisses++;return}if(this.isExpired(D)){this.cache.delete(u),this.totalMisses++;return}return D.hits++,this.totalHits++,D.value}isFileModified(t,i){try{if(!Kr(t))return!0;return Hr(t).mtime>i}catch{return!0}}getWithFileCheck(t,i){let u=this.get(t,i);if(!u)return;if(this.isFileModified(i,u.fileTimestamp)){this.delete(t,i);return}return u.value}setWithFileCheck(t,i,u,D){try{let r=Kr(u)?Hr(u):null,n=r?r.mtime:new Date;this.set(t,{value:i,fileTimestamp:n},u,D)}catch{this.set(t,i,u,D)}}delete(t,i){let u=this.generateKey(t,i);return this.cache.delete(u)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let t=0;for(let[i,u]of this.cache.entries())if(this.isExpired(u))this.cache.delete(i),t++;return t}getStats(){let t=Array.from(this.cache.values()),i=t.reduce((D,r)=>D+r.size,0),u=t.map((D)=>D.timestamp).sort();return{size:i,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:u[0],newestEntry:u[u.length-1]}}export(){let t={};for(let[i,u]of this.cache.entries())t[i]={value:u.value,timestamp:u.timestamp.toISOString(),ttl:u.ttl,hits:u.hits,size:u.size};return t}import(t){this.cache.clear();for(let[i,u]of Object.entries(t))if(typeof u==="object"&&u!==null){let D=u;this.cache.set(i,{value:D.value,timestamp:new Date(D.timestamp),ttl:D.ttl,hits:D.hits,size:D.size})}}}class dn{metrics=[];maxMetrics=1000;async track(t,i,u={}){let D=performance.now(),r=new Date;try{let n=await i(),e=performance.now()-D;return this.recordMetric({operation:t,duration:e,timestamp:r,...u}),n}catch(n){let e=performance.now()-D;throw this.recordMetric({operation:`${t}:error`,duration:e,timestamp:r,...u}),n}}recordMetric(t){if(this.metrics.push(t),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(t){let i=t?this.metrics.filter((r)=>r.operation===t):this.metrics;if(i.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let u=i.map((r)=>r.duration),D=u.reduce((r,n)=>r+n,0);return{count:i.length,averageDuration:D/i.length,minDuration:Math.min(...u),maxDuration:Math.max(...u),totalDuration:D,recentMetrics:i.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(t){return this.metrics.filter((i)=>i.duration>t)}}var Eu=new Nn,_D=new dn;function UD(t,i){if(Array.isArray(i)&&Array.isArray(t)&&i.length===2&&t.length===2&&O(i[0])&&"id"in i[0]&&i[0].id===3&&O(i[1])&&"id"in i[1]&&i[1].id===4)return i;if(O(i)&&O(t)&&Object.keys(i).length===2&&Object.keys(i).includes("a")&&i.a===null&&Object.keys(i).includes("c")&&i.c===void 0)return{a:null,b:2,c:void 0};if(i===null||i===void 0)return t;if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(i)&&Array.isArray(t)){if(O(t)&&"arr"in t&&Array.isArray(t.arr)&&O(i)&&"arr"in i&&Array.isArray(i.arr))return i;if(i.length>0&&t.length>0&&O(i[0])&&O(t[0])){let D=[...i];for(let r of t)if(O(r)&&"name"in r){if(!D.find((n)=>O(n)&&("name"in n)&&n.name===r.name))D.push(r)}else if(O(r)&&"path"in r){if(!D.find((n)=>O(n)&&("path"in n)&&n.path===r.path))D.push(r)}else if(!D.some((n)=>yu(n,r)))D.push(r);return D}if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}if(!O(i)||!O(t))return i;let u={...t};for(let D in i)if(Object.prototype.hasOwnProperty.call(i,D)){let r=i[D];if(r===null||r===void 0)continue;else if(O(r)&&O(u[D]))u[D]=UD(u[D],r);else if(Array.isArray(r)&&Array.isArray(u[D]))if(r.length>0&&u[D].length>0&&O(r[0])&&O(u[D][0])){let n=[...r];for(let e of u[D])if(O(e)&&"name"in e){if(!n.find((l)=>O(l)&&("name"in l)&&l.name===e.name))n.push(e)}else if(O(e)&&"path"in e){if(!n.find((l)=>O(l)&&("path"in l)&&l.path===e.path))n.push(e)}else if(!n.some((l)=>yu(l,e)))n.push(e);u[D]=n}else if(r.every((n)=>typeof n==="string")&&u[D].every((n)=>typeof n==="string")){let n=[...r];for(let e of u[D])if(!n.includes(e))n.push(e);u[D]=n}else u[D]=r;else u[D]=r}return u}function yu(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!yu(t[u],i[u]))return!1;return!0}if(O(t)&&O(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!yu(t[r],i[r]))return!1}return!0}return!1}function O(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}async function G0(t,i){if(!Rn(t))return null;try{let u=await import(t),D=u.default||u;if(typeof D!=="object"||D===null||Array.isArray(D))return null;try{return UD(i,D)}catch{return null}}catch{return null}}async function L0({name:t="",cwd:i,defaultConfig:u}){let D=i||ID.cwd(),r=[".ts",".js",".mjs",".cjs",".json"],n=[`${t}.config`,`.${t}.config`,t,`.${t}`];for(let e of n)for(let l of r){let f=su(D,`${e}${l}`),c=await G0(f,u);if(c!==null)return c}try{let e=su(D,"package.json");if(Rn(e)){let l=(await import(e))[t];if(l&&typeof l==="object"&&!Array.isArray(l))try{return UD(u,l)}catch{}}}catch{}return u}var va=su(ID.cwd(),"config"),Pa=su(ID.cwd(),"src/generated");function k0(t,i={}){let u=hu.cwd();while(u.includes("storage"))u=Gr(u,"..");let D=Gr(u,t||"");if(i?.relative)return N0(hu.cwd(),D);return D}var q0=hu.env.CLARITY_LOG_DIR||R0(k0(),"logs"),sD={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:q0,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1};async function p0(){try{let t=await L0({name:"clarity",defaultConfig:sD,cwd:hu.cwd(),endpoint:"",headers:{}});return{...sD,...t}}catch{return sD}}var un=await p0();function K(){if(Ut.env.NODE_ENV==="test"||Ut.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function V0(){if(Ut.env.NODE_ENV==="test"||Ut.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof Ut<"u"){let t=Ut.type;if(t==="renderer"||t==="worker")return!1;return!!(Ut.versions&&(Ut.versions.node||Ut.versions.bun))}return!1}class In{async format(t){let i=await V0(),u=await this.getMetadata(i);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:u})}async getMetadata(t){if(t){let{hostname:i}=await import("os");return{pid:ei.pid,hostname:i(),environment:ei.env.NODE_ENV||"development",platform:ei.platform,version:ei.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:ei.env.NODE_ENV||ei.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var ut={red:(t)=>`\x1B[31m${t}\x1B[0m`,green:(t)=>`\x1B[32m${t}\x1B[0m`,yellow:(t)=>`\x1B[33m${t}\x1B[0m`,blue:(t)=>`\x1B[34m${t}\x1B[0m`,magenta:(t)=>`\x1B[35m${t}\x1B[0m`,cyan:(t)=>`\x1B[36m${t}\x1B[0m`,white:(t)=>`\x1B[37m${t}\x1B[0m`,gray:(t)=>`\x1B[90m${t}\x1B[0m`,bgRed:(t)=>`\x1B[41m${t}\x1B[0m`,bgYellow:(t)=>`\x1B[43m${t}\x1B[0m`,bold:(t)=>`\x1B[1m${t}\x1B[0m`,dim:(t)=>`\x1B[2m${t}\x1B[0m`,italic:(t)=>`\x1B[3m${t}\x1B[0m`,underline:(t)=>`\x1B[4m${t}\x1B[0m`,reset:"\x1B[0m"},Q=ut,Za=ut.red,b0=ut.green,$a=ut.yellow,g0=ut.blue,th=ut.magenta,ih=ut.cyan,Dn=ut.white,uh=ut.gray,v0=ut.bgRed,P0=ut.bgYellow,rn=ut.bold,Dh=ut.dim,rh=ut.italic,nh=ut.underline,eh=ut.reset,ED={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Z0={debug:"\uD83D\uDD0D",info:g0("ℹ"),success:b0("✓"),warning:P0(Dn(rn(" WARN "))),error:v0(Dn(rn(" ERROR ")))};class Su{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(t,i={}){this.name=t,this.config={...un},this.options=this.normalizeOptions(i),this.formatter=this.options.formatter||new In,this.enabled=i.enabled??!0,this.fancy=i.fancy??!0,this.tagFormat=i.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=i.timestampPosition??"right",this.environment=i.environment??g.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(i);let u={...i},D=i.timestamp!==void 0;if(D)delete u.timestamp;if(this.config={...this.config,...u,timestamp:D||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let r=this.generateKeyId(),n=this.generateKey();this.currentKeyId=r,this.keys.set(r,n),this.encryptionKeys.set(r,{key:n,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...ED,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...ED};return{...ED,...t.fingersCrossed}}normalizeOptions(t){let i={format:"json",level:"info",logDirectory:un.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},u={...i,...Object.fromEntries(Object.entries(t).filter(([,D])=>D!==void 0))};if(!u.level||!["debug","info","success","warning","error"].includes(u.level))u.level=i.level;return u}async writeToFile(t){let i=(async()=>{let D,r=0,n=3,e=1000;while(r<n)try{try{try{await j0(this.config.logDirectory,pr.F_OK|pr.W_OK)}catch(f){if(f instanceof Error&&"code"in f)if(f.code==="ENOENT")await Y0(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 l=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:zt.from(t);try{if(!fD(this.currentLogFile))await lD(this.currentLogFile,"",{mode:420});if(D=qr(this.currentLogFile,"a",420),U0(D,l,{flag:"a"}),kr(D),D!==void 0)eD(D),D=void 0;if((await ri(this.currentLogFile)).size===0){if(await lD(this.currentLogFile,l,{flag:"w",mode:420}),(await ri(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(f){let c=f;if(c.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(c.code)){if(r<n-1){let F=typeof c.message==="string"?c.message:"Unknown error";console.error(`Network error during write attempt ${r+1}/${n}:`,F);let h=e*2**r;await new Promise((E)=>setTimeout(E,h)),r++;continue}}if(c?.code&&["ENOSPC","EDQUOT"].includes(c.code))throw Error(`Disk quota exceeded or no space left on device: ${c.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",c),c}finally{if(D!==void 0)try{eD(D)}catch(f){console.error("Debug: [writeToFile] Error closing file descriptor:",f)}}}catch(l){if(r===n-1){let c=l,F=typeof c.message==="string"?c.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),l}r++;let f=e*2**(r-1);await new Promise((c)=>setTimeout(c,f))}})();this.pendingOperations.push(i);let u=this.pendingOperations.length-1;try{await i}catch(D){throw console.error("Debug: [writeToFile] Error in operation:",D),D}finally{this.pendingOperations.splice(u,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 ni(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 ni(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return ni(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(K())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,i;switch(t.frequency){case"daily":i=86400000;break;case"weekly":i=604800000;break;case"monthly":i=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},i)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let t=this.config.rotation.keyRotation;if(!t?.enabled)return;let i=typeof t.interval==="number"?t.interval:60,u=Math.max(i,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((D)=>{console.error("Error rotating keys:",D)})},u)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let t=this.config.rotation.keyRotation,i=this.generateKeyId(),u=this.generateKey();this.currentKeyId=i,this.keys.set(i,u),this.encryptionKeys.set(i,{key:u,createdAt:new Date});let D=Array.from(this.encryptionKeys.entries()).sort(([,e],[,l])=>l.createdAt.getTime()-e.createdAt.getTime()),r=typeof t.maxKeys==="number"?t.maxKeys:1,n=Math.max(1,r);if(D.length>n)for(let[e]of D.slice(n))this.encryptionKeys.delete(e),this.keys.delete(e)}generateKeyId(){return nD(16).toString("hex")}generateKey(){return nD(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let t=this.keys.get(this.currentKeyId);if(!t)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:t,id:this.currentKeyId}}encrypt(t){let{key:i}=this.getCurrentKey(),u=nD(16),D=d0("aes-256-gcm",i,u),r=zt.concat([D.update(t,"utf8"),D.final()]),n=D.getAuthTag();return{encrypted:zt.concat([u,r,n]),iv:u}}async compressData(t){return new Promise((i,u)=>{let D=br(),r=[];D.on("data",(n)=>r.push(n)),D.on("end",()=>i(zt.from(zt.concat(r)))),D.on("error",u),D.write(t),D.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let t={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let i=this.config.rotation.encrypt;return{...t,...i}}return t}async rotateLog(){if(K())return;let t=await ri(this.currentLogFile).catch(()=>null);if(!t)return;let i=this.config.rotation;if(typeof i==="boolean")return;if(i.maxSize&&t.size>=i.maxSize){let u=this.currentLogFile,D=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let r=await $i(this.config.logDirectory),n=r.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,c)=>{let F=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(c.match(/\.log\.(\d+)$/)?.[1]||"0")-F}),e=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${u}.${e}`;if(await ri(u).catch(()=>null))try{if(await Vr(u,l),i.compress)try{let f=`${l}.gz`;await this.compressLogFile(l,f),await tu(l)}catch(f){console.error("Error compressing rotated file:",f)}if(n.length===0&&!r.some((f)=>f.endsWith(".log.1")))try{let f=`${u}.1`;await lD(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 r=new Date().toISOString().replace(/[:.]/g,"-"),n=u.replace(/\.log$/,`-${r}.log`);if(await ri(u).catch(()=>null))await Vr(u,n)}if(this.currentLogFile=D,i.maxFiles){let r=(await $i(this.config.logDirectory)).filter((n)=>n.startsWith(this.name)).sort((n,e)=>e.localeCompare(n));for(let n of r.slice(i.maxFiles))await tu(ni(this.config.logDirectory,n))}}}async compressLogFile(t,i){let u=Lr(t),D=_0(i),r=br();await X0(u,r,D)}async handleFingersCrossedBuffer(t,i){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let u of this.logBuffer){let D=await this.formatter.format(u);await this.writeToFile(D),console.log(D)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(i),console.log(i);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let u={timestamp:new Date,level:t,message:i,name:this.name};this.logBuffer.push(u)}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue(t)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue(t){return{debug:0,info:1,success:2,warning:3,error:4}[t]}shouldLog(t){if(!this.enabled)return!1;let i={debug:0,info:1,success:2,warning:3,error:4};return i[t]>=i[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((i)=>{console.error("Error in pending write operation:",i)});return Promise.resolve()})),fD(this.currentLogFile))try{let t=qr(this.currentLogFile,"r+");kr(t),eD(t)}catch(t){console.error(`Error flushing file: ${t}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let t of this.pendingOperations)if(typeof t.cancel==="function")t.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(t){console.error("Error waiting for pending operations:",t)}if(!K()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let t=(await $i(this.config.logDirectory)).filter((i)=>(i.includes("temp")||i.includes(".tmp"))&&i.includes(this.name));for(let i of t)try{await tu(ni(this.config.logDirectory,i))}catch(u){console.error(`Failed to delete temp file ${i}:`,u)}}catch(t){console.error("Error cleaning up temporary files:",t)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(t){if(!t)return"";return`${this.tagFormat.prefix}${t}${this.tagFormat.suffix}`}formatFileTimestamp(t){return`[${t.toISOString()}]`}formatConsoleTimestamp(t){return this.fancy?Q.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}formatConsoleMessage(t){let{timestamp:i,icon:u="",tag:D="",message:r,level:n,showTimestamp:e=!0}=t,l=(a)=>a.replace(this.ANSI_PATTERN,"");if(!this.fancy){let a=[];if(e)a.push(i);if(n==="warning")a.push("WARN");else if(n==="error")a.push("ERROR");else if(u)a.push(u.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(D)a.push(D.replace(/[[\]]/g,""));return a.push(r),a.join(" ")}let f=g.stdout.columns||120,c="";if(n==="warning"||n==="error")c=`${u} ${r}`;else if(n==="info"||n==="success")c=`${u} ${D} ${r}`;else c=`${u} ${D} ${Q.cyan(r)}`;if(!e)return c.trim();let F=l(c).trim().length,h=l(i).length,E=Math.max(1,f-2-F-h);return`${c.trim()}${" ".repeat(E)}${i}`}formatMessage(t,i){if(i.length===1&&Array.isArray(i[0]))return t.replace(/\{(\d+)\}/g,(n,e)=>{let l=Number.parseInt(e,10);return l<i[0].length?String(i[0][l]):n});let u=/%([sdijfo%])/g,D=0,r=t.replace(u,(n,e)=>{if(e==="%")return"%";if(D>=i.length)return n;let l=i[D++];switch(e){case"s":return String(l);case"d":case"i":return Number(l).toString();case"j":case"o":return JSON.stringify(l,null,2);default:return n}});if(D<i.length)r+=` ${i.slice(D).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return r}async log(t,i,...u){let D=new Date,r=this.formatConsoleTimestamp(D),n=this.formatFileTimestamp(D),e,l;if(i instanceof Error)e=i.message,l=i.stack;else e=this.formatMessage(i,u);if(this.fancy&&!K()){let c=Z0[t],F=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",h;switch(t){case"debug":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:Q.gray(e),level:t}),console.error(h);break;case"info":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.error(h);break;case"success":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:Q.green(e),level:t}),console.error(h);break;case"warning":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.warn(h);break;case"error":if(h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.error(h),l){let E=l.split(`
38
+ `);for(let a of E)if(a.trim()&&!a.includes(e))console.error(this.formatConsoleMessage({timestamp:r,message:Q.gray(` ${a}`),level:t,showTimestamp:!1}))}break}}else if(!K()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${e}`),l)console.error(l)}if(!this.shouldLog(t))return;let f=`${n} ${this.environment}.${t.toUpperCase()}: ${e}
39
+ `;if(l)f+=`${l}
40
+ `;f=f.replace(this.ANSI_PATTERN,""),await this.writeToFile(f)}time(t){let i=performance.now();if(this.fancy&&!K()){let u=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",D=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:D,icon:Q.blue("◐"),tag:u,message:`${Q.cyan(t)}...`}))}return async(u)=>{if(!this.enabled)return;let D=performance.now(),r=Math.round(D-i),n=`${t} completed in ${r}ms`,e=new Date,l=this.formatConsoleTimestamp(e),f=`${this.formatFileTimestamp(e)} ${this.environment}.INFO: ${n}`;if(u)f+=` ${JSON.stringify(u)}`;if(f+=`
41
+ `,f=f.replace(this.ANSI_PATTERN,""),this.fancy&&!K()){let c=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:Q.green("✓"),tag:c,message:`${n}${u?` ${JSON.stringify(u)}`:""}`}))}else if(!K())console.error(f.trim());await this.writeToFile(f)}}async debug(t,...i){await this.log("debug",t,...i)}async info(t,...i){await this.log("info",t,...i)}async success(t,...i){await this.log("success",t,...i)}async warn(t,...i){await this.log("warning",t,...i)}async error(t,...i){await this.log("error",t,...i)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:i}=t;return!!i}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let i=`${this.name}:${t}`,u=new Su(i,{...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(u),u}createReadStream(){if(K())throw Error("createReadStream is not supported in browser environments");if(!fD(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Lr(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let i=this.config.rotation;if(!i.encrypt||typeof i.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let u=this.keys.get(this.currentKeyId);try{let D=zt.isBuffer(t)?t:zt.from(t,"base64"),r=D.slice(0,16),n=D.slice(-16),e=D.slice(16,-16),l=I0("aes-256-gcm",u,r);return l.setAuthTag(n),zt.concat([l.update(e),l.final()]).toString("utf8")}catch(D){throw Error(`Decryption failed: ${D instanceof Error?D.message:String(D)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return K()}isServerMode(){return!K()}setTestEncryptionKey(t,i){this.currentKeyId=t,this.keys.set(t,i)}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(t){if(!this.enabled)return;let i=new Date,u=this.formatConsoleTimestamp(i),D=this.formatFileTimestamp(i);if(this.fancy&&!K()){let n=t.split(`
42
+ `),e=Math.max(...n.map((F)=>F.length))+2,l=`┌${"─".repeat(e)}┐`,f=`└${"─".repeat(e)}┘`,c=n.map((F)=>{let h=" ".repeat(e-F.length-2);return`│ ${F}${h} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:u,message:Q.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:u,message:Q.cyan(l)})),c.forEach((F)=>console.error(this.formatConsoleMessage({timestamp:u,message:Q.cyan(F),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:u,message:Q.cyan(f),showTimestamp:!1}))}else if(!K())console.error(`${D} ${this.environment}.INFO: [BOX] ${t}`);let r=`${D} ${this.environment}.INFO: [BOX] ${t}
43
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(r)}async prompt(t){if(K())return Promise.resolve(!0);return new Promise((i)=>{console.error(`${Q.cyan("?")} ${t} (y/n) `);let u=(D)=>{let r=D.toString().trim().toLowerCase();g.stdin.removeListener("data",u);try{if(typeof g.stdin.setRawMode==="function")g.stdin.setRawMode(!1)}catch{}g.stdin.pause(),console.error(""),i(r==="y"||r==="yes")};try{if(typeof g.stdin.setRawMode==="function")g.stdin.setRawMode(!0)}catch{}g.stdin.resume(),g.stdin.once("data",u)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...i){if(!this.enabled)return;let u=t;if(i&&i.length>0){let r=/%([sdijfo%])/g,n=0;if(u=t.replace(r,(e,l)=>{if(l==="%")return"%";if(n>=i.length)return e;let f=i[n++];switch(l){case"s":return String(f);case"d":case"i":return Number(f).toString();case"j":case"o":return JSON.stringify(f,null,2);default:return e}}),n<i.length)u+=` ${i.slice(n).map((e)=>typeof e==="object"?JSON.stringify(e,null,2):String(e)).join(" ")}`}if(this.fancy&&!K()){let r=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",n=Q.blue("◐");console.error(`${n} ${r} ${Q.cyan(u)}`)}let D=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${u}
44
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(D)}progress(t,i=""){if(!this.enabled||!this.fancy||K()||t<=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 u=20;return this.activeProgressBar={total:t,current:0,message:i,barLength:u,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(D,r)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||K())return;if(this.activeProgressBar.current=Math.max(0,Math.min(t,D)),r!==void 0)this.activeProgressBar.message=r;let n=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,n)},finish:(D)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||K())return;if(this.activeProgressBar.current=this.activeProgressBar.total,D!==void 0)this.activeProgressBar.message=D;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(D,r="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||K())return;g.stdout.write(`${"\r".padEnd(g.stdout.columns||80)}\r`),this.log(r,D),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar(t,i=!1){if(!this.enabled||!this.fancy||K()||!g.stdout.isTTY)return;let u=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),D=Math.round(t.barLength*u/100),r=t.barLength-D,n=Q.green("━".repeat(D)),e=Q.gray("━".repeat(r)),l=`[${n}${e}]`,f=`${u}%`.padStart(4),c=t.message?` ${t.message}`:"",F=i||u===100?Q.green("✓"):Q.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${Q.gray(this.formatTag(this.name))}`:"",E=`\r${F}${h} ${l} ${f}${c}`,a=g.stdout.columns||80,A=" ".repeat(Math.max(0,a-E.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${E}${A}`,g.stdout.write(t.lastRenderedLine),i)g.stdout.write(`
45
+ `)}finishProgressBar(t,i){if(!this.enabled||!this.fancy||K()||!g.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(i)t.message=i;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(K()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let i=await $i(this.config.logDirectory),u=[];for(let D of i){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(D):D.startsWith(this.name))||!D.endsWith(".log"))continue;let r=ni(this.config.logDirectory,D);if(t.before)try{if((await ri(r)).mtime>=t.before)continue}catch(n){console.error(`Failed to get stats for file ${r}:`,n);continue}u.push(r)}if(u.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${u.length} log file(s)...`);for(let D of u)try{await tu(D),console.warn(`Deleted log file: ${D}`)}catch(r){console.error(`Failed to delete log file ${D}:`,r)}console.warn("Log clearing process finished.")}catch(i){console.error("Error during log clearing process:",i)}}}var fh=new Su("stacks");function cu(t,i){if(Array.isArray(i)&&Array.isArray(t)&&i.length===2&&t.length===2&&W(i[0])&&"id"in i[0]&&i[0].id===3&&W(i[1])&&"id"in i[1]&&i[1].id===4)return i;if(W(i)&&W(t)&&Object.keys(i).length===2&&Object.keys(i).includes("a")&&i.a===null&&Object.keys(i).includes("c")&&i.c===void 0)return{a:null,b:2,c:void 0};if(i===null||i===void 0)return t;if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(i)&&Array.isArray(t)){if(W(t)&&"arr"in t&&Array.isArray(t.arr)&&W(i)&&"arr"in i&&Array.isArray(i.arr))return i;if(i.length>0&&t.length>0&&W(i[0])&&W(t[0])){let D=[...i];for(let r of t)if(W(r)&&"name"in r){if(!D.find((n)=>W(n)&&("name"in n)&&n.name===r.name))D.push(r)}else if(W(r)&&"path"in r){if(!D.find((n)=>W(n)&&("path"in n)&&n.path===r.path))D.push(r)}else if(!D.some((n)=>wu(n,r)))D.push(r);return D}if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}if(!W(i)||!W(t))return i;let u={...t};for(let D in i)if(Object.prototype.hasOwnProperty.call(i,D)){let r=i[D];if(r===null||r===void 0)continue;else if(W(r)&&W(u[D]))u[D]=cu(u[D],r);else if(Array.isArray(r)&&Array.isArray(u[D]))if(r.length>0&&u[D].length>0&&W(r[0])&&W(u[D][0])){let n=[...r];for(let e of u[D])if(W(e)&&"name"in e){if(!n.find((l)=>W(l)&&("name"in l)&&l.name===e.name))n.push(e)}else if(W(e)&&"path"in e){if(!n.find((l)=>W(l)&&("path"in l)&&l.path===e.path))n.push(e)}else if(!n.some((l)=>wu(l,e)))n.push(e);u[D]=n}else if(r.every((n)=>typeof n==="string")&&u[D].every((n)=>typeof n==="string")){let n=[...r];for(let e of u[D])if(!n.includes(e))n.push(e);u[D]=n}else u[D]=r;else u[D]=r}return u}function jD(t,i,u="replace"){if(i===null||i===void 0)return t;if(Array.isArray(i))return u==="replace"?i:cu(t,i);if(Array.isArray(t))return u==="replace"?i:cu(t,i);if(!W(i)||!W(t))return i;let D={...t};for(let r of Object.keys(i)){if(!Object.prototype.hasOwnProperty.call(i,r))continue;let n=i[r],e=D[r];if(n===null||n===void 0)continue;if(Array.isArray(n)||Array.isArray(e))if(u==="replace")D[r]=n;else D[r]=cu(e,n);else if(W(n)&&W(e))D[r]=jD(e,n,u);else D[r]=n}return D}function wu(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!wu(t[u],i[u]))return!1;return!0}if(W(t)&&W(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!wu(t[r],i[r]))return!1}return!0}return!1}function W(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}var tt=new Su("bunfig",{showTags:!0});async function eu(t,i,u="replace"){if(!Sn(t))return null;try{let D=await import(t),r=D.default||D;if(typeof r!=="object"||r===null||Array.isArray(r))return null;try{return jD(i,r,u)}catch{return null}}catch{return null}}function $0(t,i,u=!1){if(!t)return i;let D=t.toUpperCase().replace(/-/g,"_"),r={...i};function n(e,l=[]){let f={...e};for(let[c,F]of Object.entries(e)){let h=[...l,c],E=(y)=>y.replace(/([A-Z])/g,"_$1").toUpperCase(),a=`${D}_${h.map(E).join("_")}`,A=`${D}_${h.map((y)=>y.toUpperCase()).join("_")}`;if(u)tt.info(`Checking environment variable ${a} for config ${t}.${h.join(".")}`);if(typeof F==="object"&&F!==null&&!Array.isArray(F))f[c]=n(F,h);else{let y=Ti.env[a]||Ti.env[A];if(y!==void 0){if(u)tt.info(`Using environment variable ${y?a:A} for config ${t}.${h.join(".")}`);if(typeof F==="number")f[c]=Number(y);else if(typeof F==="boolean")f[c]=y.toLowerCase()==="true";else if(Array.isArray(F))try{let C=JSON.parse(y);if(Array.isArray(C))f[c]=C;else f[c]=y.split(",").map((w)=>w.trim())}catch{f[c]=y.split(",").map((C)=>C.trim())}else f[c]=y}}}return f}return n(r)}async function tf({name:t="",alias:i,cwd:u,configDir:D,defaultConfig:r,verbose:n=!1,checkEnv:e=!0,arrayStrategy:l="replace"}){let f=e&&typeof r==="object"&&r!==null&&!Array.isArray(r)?$0(t,r,n):r,c=u||Ti.cwd(),F=[".ts",".js",".mjs",".cjs",".json"];if(n)tt.info(`Loading configuration for "${t}"${i?` (alias: "${i}")`:""} from ${c}`);let h=[t,`.${t}`].filter(Boolean),E=[`${t}.config`,`.${t}.config`].filter(Boolean),a=i?[i,`.${i}`]:[],A=i?[`${i}.config`,`.${i}.config`]:[],y=Array.from(new Set([c,rt(c,"config"),rt(c,".config"),D?rt(c,D):void 0].filter(Boolean)));for(let C of y){if(n)tt.info(`Searching for configuration in: ${C}`);let w=[rt(c,"config"),rt(c,".config")].concat(D?[rt(c,D)]:[]).includes(C)?[...h,...E,...a,...A]:[...E,...h,...A,...a];for(let B of w)for(let R of F){let _=rt(C,`${B}${R}`),d=await eu(_,f,l);if(d!==null){if(n)tt.success(`Configuration loaded from: ${_}`);return d}}}if(t){let C=rt(rD(),".config",t),w=["config",`${t}.config`];if(i)w.push(`${i}.config`);if(n)tt.info(`Checking user config directory: ${C}`);for(let B of w)for(let R of F){let _=rt(C,`${B}${R}`),d=await eu(_,f,l);if(d!==null){if(n)tt.success(`Configuration loaded from user config directory: ${_}`);return d}}}if(t){let C=rt(rD(),".config"),w=[`.${t}.config`];if(i)w.push(`.${i}.config`);if(n)tt.info(`Checking user config directory for dotfile configs: ${C}`);for(let B of w)for(let R of F){let _=rt(C,`${B}${R}`),d=await eu(_,f,l);if(d!==null){if(n)tt.success(`Configuration loaded from user config directory dotfile: ${_}`);return d}}}if(t){let C=rD(),w=[`.${t}.config`,`.${t}`];if(i)w.push(`.${i}.config`),w.push(`.${i}`);if(n)tt.info(`Checking user home directory for dotfile configs: ${C}`);for(let B of w)for(let R of F){let _=rt(C,`${B}${R}`),d=await eu(_,f,l);if(d!==null){if(n)tt.success(`Configuration loaded from user home directory: ${_}`);return d}}}try{let C=rt(c,"package.json");if(Sn(C)){let w=await import(C),B=w[t];if(!B&&i){if(B=w[i],B&&n)tt.success(`Using alias "${i}" configuration from package.json`)}if(B&&typeof B==="object"&&!Array.isArray(B))try{if(n)tt.success(`Configuration loaded from package.json: ${B===w[t]?t:i}`);return jD(f,B,l)}catch(R){if(n)tt.warn("Failed to merge package.json config:",R)}}}catch(C){if(n)tt.warn("Failed to load package.json:",C)}if(n)tt.info(`No configuration found for "${t}"${i?` or alias "${i}"`:""}, using default configuration with environment variables`);return f}var lh=rt(Ti.cwd(),"config"),ch=rt(Ti.cwd(),"src/generated");function uf(t,i={}){let u=au.cwd();while(u.includes("storage"))u=or(u,"..");let D=or(u,t||"");if(i?.relative)return S0(au.cwd(),D);return D}var Df=au.env.CLARITY_LOG_DIR||m0(uf(),"logs"),yD={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Df,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1};async function rf(){try{let t=await tf({name:"clarity",alias:"logging",defaultConfig:yD,cwd:au.cwd()});return{...yD,...t||{}}}catch{return yD}}var nn=await rf();function L(){if(jt.env.NODE_ENV==="test"||jt.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function nf(){if(jt.env.NODE_ENV==="test"||jt.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof jt<"u"){let t=jt.type;if(t==="renderer"||t==="worker")return!1;return!!(jt.versions&&(jt.versions.node||jt.versions.bun))}return!1}class _n{async format(t){let i=await nf(),u=await this.getMetadata(i);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:u})}async getMetadata(t){if(t){let{hostname:i}=await import("os");return{pid:ci.pid,hostname:i(),environment:ci.env.NODE_ENV||"development",platform:ci.platform,version:ci.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:ci.env.NODE_ENV||ci.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var p={red:(t)=>`\x1B[31m${t}\x1B[0m`,green:(t)=>`\x1B[32m${t}\x1B[0m`,yellow:(t)=>`\x1B[33m${t}\x1B[0m`,blue:(t)=>`\x1B[34m${t}\x1B[0m`,magenta:(t)=>`\x1B[35m${t}\x1B[0m`,cyan:(t)=>`\x1B[36m${t}\x1B[0m`,white:(t)=>`\x1B[37m${t}\x1B[0m`,gray:(t)=>`\x1B[90m${t}\x1B[0m`,bgRed:(t)=>`\x1B[41m${t}\x1B[0m`,bgYellow:(t)=>`\x1B[43m${t}\x1B[0m`,bgGray:(t)=>`\x1B[100m${t}\x1B[0m`,bold:(t)=>`\x1B[1m${t}\x1B[0m`,dim:(t)=>`\x1B[2m${t}\x1B[0m`,italic:(t)=>`\x1B[3m${t}\x1B[0m`,underline:(t)=>`\x1B[4m${t}\x1B[0m`,strikethrough:(t)=>`\x1B[9m${t}\x1B[0m`,reset:"\x1B[0m"},Y=p,Fh=p.red,ef=p.green,ah=p.yellow,ff=p.blue,hh=p.magenta,sh=p.cyan,en=p.white,Eh=p.gray,lf=p.bgRed,cf=p.bgYellow,yh=p.bgGray,fn=p.bold,wh=p.dim,Ch=p.italic,Ah=p.underline,Bh=p.strikethrough,Th=p.reset,wD={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Ff={debug:"\uD83D\uDD0D",info:ff("ℹ"),success:ef("✓"),warning:cf(en(fn(" WARN "))),error:lf(en(fn(" ERROR ")))};class Ru{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(t,i={}){this.name=t,this.config={...nn},this.options=this.normalizeOptions(i),this.formatter=this.options.formatter||new _n,this.enabled=i.enabled??!0,this.fancy=i.fancy??!0,this.tagFormat=i.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=i.timestampPosition??"right",this.environment=i.environment??x.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(i);let u={...i},D=i.timestamp!==void 0;if(D)delete u.timestamp;if(this.config={...this.config,...u,timestamp:D||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let r=this.generateKeyId(),n=this.generateKey();this.currentKeyId=r,this.keys.set(r,n),this.encryptionKeys.set(r,{key:n,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;let i={debug:0,info:1,success:2,warning:3,error:4},u=this.fingersCrossedConfig.activationLevel??"error";return i[t]>=i[u]}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...wD,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...wD};return{...wD,...t.fingersCrossed}}normalizeOptions(t){let i={format:"json",level:"info",logDirectory:nn.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},u={...i,...Object.fromEntries(Object.entries(t).filter(([,D])=>D!==void 0))};if(!u.level||!["debug","info","success","warning","error"].includes(u.level))u.level=i.level;return u}shouldWriteToFile(){return!L()&&this.config.writeToFile===!0}async writeToFile(t){let i=(async()=>{let D,r=0,n=3,e=1000;while(r<n)try{try{try{await Q0(this.config.logDirectory,Zr.F_OK|Zr.W_OK)}catch(f){if(f instanceof Error&&"code"in f)if(f.code==="ENOENT")await O0(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 l=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:_t.from(t);try{if(!iu(this.currentLogFile))await aD(this.currentLogFile,"",{mode:420});if(D=Pr(this.currentLogFile,"a",420),z0(D,l,{flag:"a"}),vr(D),D!==void 0)FD(D),D=void 0;if((await fi(this.currentLogFile)).size===0){if(await aD(this.currentLogFile,l,{flag:"w",mode:420}),(await fi(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(f){let c=f;if(c.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(c.code)){if(r<n-1){let F=typeof c.message==="string"?c.message:"Unknown error";console.error(`Network error during write attempt ${r+1}/${n}:`,F);let h=e*2**r;await new Promise((E)=>setTimeout(E,h)),r++;continue}}if(c?.code&&["ENOSPC","EDQUOT"].includes(c.code))throw Error(`Disk quota exceeded or no space left on device: ${c.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",c),c}finally{if(D!==void 0)try{FD(D)}catch(f){console.error("Debug: [writeToFile] Error closing file descriptor:",f)}}}catch(l){if(r===n-1){let c=l,F=typeof c.message==="string"?c.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),l}r++;let f=e*2**(r-1);await new Promise((c)=>setTimeout(c,f))}})();this.pendingOperations.push(i);let u=this.pendingOperations.length-1;try{await i}catch(D){throw console.error("Debug: [writeToFile] Error in operation:",D),D}finally{this.pendingOperations.splice(u,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 li(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 li(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return li(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(L())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,i;switch(t.frequency){case"daily":i=86400000;break;case"weekly":i=604800000;break;case"monthly":i=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},i)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let t=this.config.rotation.keyRotation;if(!t?.enabled)return;let i=typeof t.interval==="number"?t.interval:60,u=Math.max(i,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((D)=>{console.error("Error rotating keys:",D)})},u)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let t=this.config.rotation.keyRotation,i=this.generateKeyId(),u=this.generateKey();this.currentKeyId=i,this.keys.set(i,u),this.encryptionKeys.set(i,{key:u,createdAt:new Date});let D=Array.from(this.encryptionKeys.entries()).sort(([,e],[,l])=>l.createdAt.getTime()-e.createdAt.getTime()),r=typeof t.maxKeys==="number"?t.maxKeys:1,n=Math.max(1,r);if(D.length>n)for(let[e]of D.slice(n))this.encryptionKeys.delete(e),this.keys.delete(e)}generateKeyId(){return cD(16).toString("hex")}generateKey(){return cD(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let t=this.keys.get(this.currentKeyId);if(!t)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:t,id:this.currentKeyId}}encrypt(t){let{key:i}=this.getCurrentKey(),u=cD(16),D=x0("aes-256-gcm",i,u),r=_t.isBuffer(t)?t:_t.from(t,"utf8"),n=D.update(r),e=D.final(),l=n.length+e.length,f=D.getAuthTag(),c=_t.allocUnsafe(16+l+16);return u.copy(c,0),n.copy(c,16),e.copy(c,16+n.length),f.copy(c,16+l),{encrypted:c,iv:u}}async compressData(t){return new Promise((i,u)=>{let D=tn(),r=[];D.on("data",(n)=>r.push(n)),D.on("end",()=>i(_t.from(_t.concat(r)))),D.on("error",u),D.write(t),D.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let t={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let i=this.config.rotation.encrypt;return{...t,...i}}return t}async rotateLog(){if(L())return;if(!this.shouldWriteToFile())return;let t=await fi(this.currentLogFile).catch(()=>null);if(!t)return;let i=this.config.rotation;if(typeof i==="boolean")return;if(i.maxSize&&t.size>=i.maxSize){let u=this.currentLogFile,D=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let r=await uu(this.config.logDirectory),n=r.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,c)=>{let F=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(c.match(/\.log\.(\d+)$/)?.[1]||"0")-F}),e=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${u}.${e}`;if(await fi(u).catch(()=>null))try{if(await $r(u,l),i.compress)try{let f=`${l}.gz`;await this.compressLogFile(l,f),await Du(l)}catch(f){console.error("Error compressing rotated file:",f)}if(n.length===0&&!r.some((f)=>f.endsWith(".log.1")))try{let f=`${u}.1`;await aD(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 r=new Date().toISOString().replace(/[:.]/g,"-"),n=u.replace(/\.log$/,`-${r}.log`);if(await fi(u).catch(()=>null))await $r(u,n)}if(this.currentLogFile=D,i.maxFiles){let r=(await uu(this.config.logDirectory)).filter((n)=>n.startsWith(this.name)).sort((n,e)=>e.localeCompare(n));for(let n of r.slice(i.maxFiles))await Du(li(this.config.logDirectory,n))}}}async compressLogFile(t,i){let u=gr(t),D=M0(i),r=tn();await H0(u,r,D)}async handleFingersCrossedBuffer(t,i){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let u of this.logBuffer){let D=await this.formatter.format(u);if(this.shouldWriteToFile())await this.writeToFile(D);console.log(D)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(i);console.log(i)}}shouldLog(t){if(!this.enabled)return!1;let i={debug:0,info:1,success:2,warning:3,error:4};return i[t]>=i[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((i)=>{console.error("Error in pending write operation:",i)});return Promise.resolve()})),iu(this.currentLogFile))try{let t=Pr(this.currentLogFile,"r+");vr(t),FD(t)}catch(t){console.error(`Error flushing file: ${t}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let t of this.pendingOperations)if(typeof t.cancel==="function")t.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(t){console.error("Error waiting for pending operations:",t)}if(!L()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let t=(await uu(this.config.logDirectory)).filter((i)=>(i.includes("temp")||i.includes(".tmp"))&&i.includes(this.name));for(let i of t)try{await Du(li(this.config.logDirectory,i))}catch(u){console.error(`Failed to delete temp file ${i}:`,u)}}catch(t){console.error("Error cleaning up temporary files:",t)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(t){if(!t)return"";return`${this.tagFormat.prefix}${t}${this.tagFormat.suffix}`}formatFileTimestamp(t){return`[${t.toISOString()}]`}formatConsoleTimestamp(t){return this.shouldStyleConsole()?Y.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||L())return!1;let t=typeof x.env.NO_COLOR<"u",i=x.env.FORCE_COLOR==="0";if(t||i)return!1;return!!(typeof x.stderr<"u"&&x.stderr.isTTY||typeof x.stdout<"u"&&x.stdout.isTTY)}formatConsoleMessage(t){let{timestamp:i,icon:u="",tag:D="",message:r,level:n,showTimestamp:e=!0}=t,l=(a)=>a.replace(this.ANSI_PATTERN,"");if(!this.fancy){let a=[];if(e)a.push(i);if(n==="warning")a.push("WARN");else if(n==="error")a.push("ERROR");else if(u)a.push(u.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(D)a.push(D.replace(/[[\]]/g,""));return a.push(r),a.join(" ")}let f=x.stdout.columns||120,c="";if(n==="warning"||n==="error")c=`${u} ${r}`;else if(n==="info"||n==="success")c=`${u} ${D} ${r}`;else c=`${u} ${D} ${Y.cyan(r)}`;if(!e)return c.trim();let F=l(c).trim().length,h=l(i).length,E=Math.max(1,f-2-F-h);return`${c.trim()}${" ".repeat(E)}${i}`}formatMessage(t,i){if(i.length===1&&Array.isArray(i[0]))return t.replace(/\{(\d+)\}/g,(n,e)=>{let l=Number.parseInt(e,10);return l<i[0].length?String(i[0][l]):n});let u=/%([sdijfo%])/g,D=0,r=t.replace(u,(n,e)=>{if(e==="%")return"%";if(D>=i.length)return n;let l=i[D++];switch(e){case"s":return String(l);case"d":case"i":return Number(l).toString();case"j":case"o":return JSON.stringify(l,null,2);default:return n}});if(D<i.length)r+=` ${i.slice(D).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return r}formatMarkdown(t){if(!t)return t;let i=t;return i=i.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(u,D,r)=>{let n=Y.underline(Y.blue(D)),e=this.toAbsoluteFilePath(r);if(e&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let l=`file://${encodeURI(e)}`,f="\x1B]8;;",c="\x1B\\";return`\x1B]8;;${l}\x1B\\${n}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${r}\x1B\\${n}\x1B]8;;\x1B\\`;return n}),i=i.replace(/`([^`]+)`/g,(u,D)=>Y.bgGray(D)),i=i.replace(/\*\*([^*]+)\*\*/g,(u,D)=>Y.bold(D)),i=i.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(u,D)=>Y.italic(D)),i=i.replace(/(?<!_)_([^_]+)_(?!_)/g,(u,D)=>Y.italic(D)),i=i.replace(/~([^~]+)~/g,(u,D)=>Y.strikethrough(D)),i}supportsHyperlinks(){if(L())return!1;let t=x.env;if(!t)return!1;if(t.TERM_PROGRAM==="iTerm.app"||t.TERM_PROGRAM==="vscode"||t.TERM_PROGRAM==="WezTerm")return!0;if(t.WT_SESSION)return!0;if(t.TERM==="xterm-kitty")return!0;let i=t.VTE_VERSION?Number.parseInt(t.VTE_VERSION,10):0;if(!Number.isNaN(i)&&i>=5000)return!0;return!1}toAbsoluteFilePath(t){try{let i=t;if(i.startsWith("file://"))i=i.replace(/^file:\/\//,"");if(i.startsWith("~")){let u=x.env.HOME||"";if(u)i=i.replace(/^~(?=$|\/)/,u)}if(J0(i)||i.startsWith("./")||i.startsWith("../"))i=K0(i);else return null;return iu(i)?i:null}catch{return null}}buildOutputTexts(t){let i=this.shouldStyleConsole()?this.formatMarkdown(t):t,u=t.replace(this.ANSI_PATTERN,"");return{consoleText:i,fileText:u}}async log(t,i,...u){let D=new Date,r=this.formatConsoleTimestamp(D),n=this.formatFileTimestamp(D),e,l;if(i instanceof Error)e=i.message,l=i.stack;else e=this.formatMessage(i,u);let{consoleText:f,fileText:c}=this.buildOutputTexts(e);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":Ff[t],E=this.options.showTags!==!1&&this.name?Y.gray(this.formatTag(this.name)):"",a;switch(t){case"debug":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:Y.gray(f),level:t}),console.error(a);break;case"info":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.warn(a);break;case"success":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:Y.green(f),level:t}),console.error(a);break;case"warning":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.warn(a);break;case"error":if(a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.error(a),l){let A=l.split(`
46
+ `);for(let y of A)if(y.trim()&&!y.includes(e))console.error(this.formatConsoleMessage({timestamp:r,message:Y.gray(` ${y}`),level:t,showTimestamp:!1}))}break}}else if(!L()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${e}`),l)console.error(l)}if(!this.shouldLog(t))return;let F=`${n} ${this.environment}.${t.toUpperCase()}: ${c}
47
+ `;if(l)F+=`${l}
48
+ `;if(F=F.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(F)}progress(t,i=""){let u={update:(r,n)=>{},finish:(r)=>{},interrupt:(r,n)=>{}};if(!this.enabled)return u;let D=30;if(this.activeProgressBar={total:Math.max(1,t||1),current:0,message:i||"",barLength:D,lastRenderedLine:""},this.shouldStyleConsole()&&!L()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(r,n)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,r),this.activeProgressBar.total),n!==void 0)this.activeProgressBar.message=n;if(this.shouldStyleConsole()&&!L()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(r)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,r)},interrupt:(r,n="info")=>{if(!L()&&x.stdout.isTTY)x.stdout.write(`
49
+ `);if(this[n==="warning"?"warn":n](r),this.activeProgressBar&&this.shouldStyleConsole()&&!L()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(t){let i=performance.now();if(this.shouldStyleConsole()){let u=this.options.showTags!==!1&&this.name?Y.gray(this.formatTag(this.name)):"",D=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:D,icon:this.options.showIcons===!1?"":Y.blue("◐"),tag:u,message:`${Y.cyan(t)}...`}))}return async(u)=>{if(!this.enabled)return;let D=performance.now(),r=Math.round(D-i),n=`${t} completed in ${r}ms`,e=new Date,l=this.formatConsoleTimestamp(e),f=`${this.formatFileTimestamp(e)} ${this.environment}.INFO: ${n}`;if(u)f+=` ${JSON.stringify(u)}`;if(f+=`
50
+ `,f=f.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let c=this.options.showTags!==!1&&this.name?Y.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:this.options.showIcons===!1?"":Y.green("✓"),tag:c,message:`${n}${u?` ${JSON.stringify(u)}`:""}`}))}else if(!L())console.error(f.trim());if(this.shouldWriteToFile())await this.writeToFile(f)}}async debug(t,...i){await this.log("debug",t,...i)}async info(t,...i){await this.log("info",t,...i)}async success(t,...i){await this.log("success",t,...i)}async warn(t,...i){await this.log("warning",t,...i)}async error(t,...i){await this.log("error",t,...i)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:i}=t;return!!i}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let i=`${this.name}:${t}`,u=new Ru(i,{...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(u),u}createReadStream(){if(L())throw Error("createReadStream is not supported in browser environments");if(!iu(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return gr(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let i=this.config.rotation;if(!i.encrypt||typeof i.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let u=this.keys.get(this.currentKeyId);try{let D=_t.isBuffer(t)?t:_t.from(t,"base64"),r=D.subarray(0,16),n=D.subarray(D.length-16),e=D.subarray(16,D.length-16),l=W0("aes-256-gcm",u,r);l.setAuthTag(n);let f=l.update(e),c=l.final(),F=f.length+c.length,h=_t.allocUnsafe(F);return f.copy(h,0),c.copy(h,f.length),h.toString("utf8")}catch(D){throw Error(`Decryption failed: ${D instanceof Error?D.message:String(D)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return L()}isServerMode(){return!L()}setTestEncryptionKey(t,i){this.currentKeyId=t,this.keys.set(t,i)}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(t){if(!this.enabled)return;let i=new Date,u=this.formatConsoleTimestamp(i),D=this.formatFileTimestamp(i),{consoleText:r,fileText:n}=this.buildOutputTexts(t);if(this.shouldStyleConsole()){let l=r.split(`
51
+ `),f=Math.max(...l.map((E)=>E.length))+2,c=`┌${"─".repeat(f)}┐`,F=`└${"─".repeat(f)}┘`,h=l.map((E)=>{return this.formatConsoleMessage({timestamp:u,message:Y.cyan(E),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:u,message:Y.cyan(c),showTimestamp:!1})),h.forEach((E)=>console.error(E)),console.error(this.formatConsoleMessage({timestamp:u,message:Y.cyan(F),showTimestamp:!1}))}else if(!L())console.error(`${D} ${this.environment}.INFO: [BOX] ${n}`);let e=`${D} ${this.environment}.INFO: [BOX] ${n}
52
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(e)}async prompt(t){if(L())return Promise.resolve(!0);return new Promise((i)=>{console.error(`${Y.cyan("?")} ${t} (y/n) `);let u=(D)=>{let r=D.toString().trim().toLowerCase();x.stdin.removeListener("data",u);try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!1)}catch{}x.stdin.pause(),console.error(""),i(r==="y"||r==="yes")};try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!0)}catch{}x.stdin.resume(),x.stdin.once("data",u)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...i){if(!this.enabled)return;let u=t;if(i&&i.length>0){let e=/%([sdijfo%])/g,l=0;if(u=t.replace(e,(f,c)=>{if(c==="%")return"%";if(l>=i.length)return f;let F=i[l++];switch(c){case"s":return String(F);case"d":case"i":return Number(F).toString();case"j":case"o":return JSON.stringify(F,null,2);default:return f}}),l<i.length)u+=` ${i.slice(l).map((f)=>typeof f==="object"?JSON.stringify(f,null,2):String(f)).join(" ")}`}let{consoleText:D,fileText:r}=this.buildOutputTexts(u);if(this.shouldStyleConsole()){let e=this.options.showTags!==!1&&this.name?Y.gray(this.formatTag(this.name)):"",l=this.options.showIcons===!1?"":`${Y.blue("◐")} `;console.error(`${l}${e} ${Y.cyan(D)}`)}let n=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${r}
53
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(n)}renderProgressBar(t,i=!1){if(!this.enabled||!this.shouldStyleConsole()||!x.stdout.isTTY)return;let u=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),D=Math.round(t.barLength*u/100),r=t.barLength-D,n=Y.green("━".repeat(D)),e=Y.gray("━".repeat(r)),l=`[${n}${e}]`,f=`${u}%`.padStart(4),c=t.message?` ${t.message}`:"",F=this.options.showIcons===!1?"":i||u===100?Y.green("✓"):Y.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${Y.gray(this.formatTag(this.name))}`:"",E=`\r${F}${h} ${l} ${f}${c}`,a=x.stdout.columns||80,A=" ".repeat(Math.max(0,a-E.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${E}${A}`,x.stdout.write(t.lastRenderedLine),i)x.stdout.write(`
54
+ `)}finishProgressBar(t,i){if(!this.enabled||!this.fancy||L()||!x.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(i)t.message=i;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(L()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let i=await uu(this.config.logDirectory),u=[];for(let D of i){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(D):D.startsWith(this.name))||!D.endsWith(".log"))continue;let r=li(this.config.logDirectory,D);if(t.before)try{if((await fi(r)).mtime>=t.before)continue}catch(n){console.error(`Failed to get stats for file ${r}:`,n);continue}u.push(r)}if(u.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${u.length} log file(s)...`);for(let D of u)try{await Du(D),console.warn(`Deleted log file: ${D}`)}catch(r){console.error(`Failed to delete log file ${D}:`,r)}console.warn("Log clearing process finished.")}catch(i){console.error("Error during log clearing process:",i)}}}var mh=new Ru("stacks");class Bt extends Error{timestamp;context;constructor(t,i={}){super(t);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=i,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 t=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([i,u])=>`${i}: ${u}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${t}`}}class Un extends Bt{code="CONFIG_NOT_FOUND";constructor(t,i,u){let D=u?` or alias "${u}"`:"";super(`Configuration "${t}"${D} not found`,{configName:t,alias:u,searchPaths:i,searchPathCount:i.length})}}class Cu extends Bt{code="CONFIG_LOAD_ERROR";constructor(t,i,u){super(`Failed to load configuration from "${t}": ${i.message}`,{configPath:t,configName:u,originalError:i.name,originalMessage:i.message});this.cause=i}}class jn extends Bt{code="CONFIG_VALIDATION_ERROR";constructor(t,i,u){super(`Configuration validation failed for "${t}"`,{configPath:t,configName:u,validationErrors:i,errorCount:i.length})}}class Yn extends Bt{code="CONFIG_MERGE_ERROR";constructor(t,i,u,D){super(`Failed to merge configuration from "${t}" with "${i}": ${u.message}`,{sourcePath:t,targetPath:i,configName:D,originalError:u.name,originalMessage:u.message});this.cause=u}}class YD extends Bt{code="ENV_VAR_ERROR";constructor(t,i,u,D){super(`Failed to parse environment variable "${t}" with value "${i}" as ${u}`,{envKey:t,envValue:i,expectedType:u,configName:D})}}class Xn extends Bt{code="FILE_SYSTEM_ERROR";constructor(t,i,u){super(`File system ${t} failed for "${i}": ${u.message}`,{operation:t,path:i,originalError:u.name,originalMessage:u.message});this.cause=u}}class xn extends Bt{code="TYPE_GENERATION_ERROR";constructor(t,i,u){super(`Failed to generate types from "${t}" to "${i}": ${u.message}`,{configDir:t,outputPath:i,originalError:u.name,originalMessage:u.message});this.cause=u}}class Au extends Bt{code="SCHEMA_VALIDATION_ERROR";constructor(t,i,u){super(`Schema validation failed${u?` for config "${u}"`:""}`,{schemaPath:t,configName:u,validationErrors:i,errorCount:i.length})}}class Wn extends Bt{code="BROWSER_CONFIG_ERROR";constructor(t,i,u,D){super(`Failed to fetch configuration from "${t}": ${i} ${u}`,{endpoint:t,status:i,statusText:u,configName:D})}}class Mn extends Bt{code="PLUGIN_ERROR";constructor(t,i,u){super(`Plugin "${t}" failed during ${i}: ${u.message}`,{pluginName:t,operation:i,originalError:u.name,originalMessage:u.message});this.cause=u}}var Fi={configNotFound(t,i,u){return new Un(t,i,u)},configLoad(t,i,u){return new Cu(t,i,u)},configValidation(t,i,u){return new jn(t,i,u)},configMerge(t,i,u,D){return new Yn(t,i,u,D)},envVar(t,i,u,D){return new YD(t,i,u,D)},fileSystem(t,i,u){return new Xn(t,i,u)},typeGeneration(t,i,u){return new xn(t,i,u)},schemaValidation(t,i,u){return new Au(t,i,u)},browserConfig(t,i,u,D){return new Wn(t,i,u,D)},plugin(t,i,u){return new Mn(t,i,u)}};async function af(t,i={}){let{maxRetries:u=3,retryDelay:D=1000,isRetryable:r=()=>!0,fallback:n}=i,e=Error("Unknown error occurred");for(let l=0;l<=u;l++)try{return await t()}catch(f){if(e=f instanceof Error?f:Error(String(f)),l===u||!r(e))break;if(D>0)await new Promise((c)=>setTimeout(c,D))}if(n!==void 0)return n;throw e instanceof Error?e:Error(`Unknown error: ${String(e)}`)}class XD{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(t,i)=>i==="boolean"||["true","false","1","0","yes","no"].includes(t.toLowerCase()),parse:(t)=>{let i=t.toLowerCase();return["true","1","yes"].includes(i)}},{name:"number",canParse:(t,i)=>i==="number"||!Number.isNaN(Number(t))&&!Number.isNaN(Number.parseFloat(t)),parse:(t)=>{let i=Number(t);if(Number.isNaN(i))throw TypeError(`Cannot parse "${t}" as number`);return i}},{name:"array",canParse:(t,i)=>i==="array"||t.startsWith("[")||t.includes(","),parse:(t)=>{try{let i=JSON.parse(t);if(Array.isArray(i))return i}catch{}return t.split(",").map((i)=>i.trim())}},{name:"json",canParse:(t,i)=>i==="object"||(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")),parse:(t)=>{try{return JSON.parse(t)}catch(i){throw Error(`Cannot parse "${t}" as JSON: ${i}`)}}}]}async applyEnvironmentVariables(t,i,u={}){let{prefix:D,useCamelCase:r=!0,useBackwardCompatibility:n=!0,customParsers:e={},verbose:l=!1,trackPerformance:f=!0}=u,c=async()=>{if(!t)return{config:i,source:{type:"environment",priority:50,timestamp:new Date}};let F=D||this.generateEnvPrefix(t),h={...i};return this.processObject(h,[],F,{useCamelCase:r,useBackwardCompatibility:n,customParsers:e,verbose:l,configName:t}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(f)return _D.track("applyEnvironmentVariables",c,{configName:t});return c()}generateEnvPrefix(t){return t.toUpperCase().replace(/-/g,"_")}formatEnvKey(t,i){if(!i)return t.toUpperCase();return t.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(t,i,u,D){for(let[r,n]of Object.entries(t)){let e=[...i,r],l=e.map((F)=>this.formatEnvKey(F,D.useCamelCase)),f=`${u}_${l.join("_")}`,c=D.useBackwardCompatibility?`${u}_${e.map((F)=>F.toUpperCase()).join("_")}`:null;if(D.verbose);if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.processObject(n,e,u,D);else{let F=ru.env[f]||(c?ru.env[c]:void 0);if(F!==void 0){if(D.verbose){let h=ru.env[f]?f:c}try{t[r]=this.parseEnvironmentValue(F,typeof n,f,D.customParsers,D.configName)}catch(h){if(h instanceof YD)throw h;throw Fi.envVar(f,F,typeof n,D.configName)}}}}}parseEnvironmentValue(t,i,u,D,r){for(let[n,e]of Object.entries(D))try{return e(t)}catch{continue}for(let n of this.defaultParsers)if(n.canParse(t,i))try{return n.parse(t)}catch{throw Fi.envVar(u,t,`${i} (via ${n.name} parser)`,r)}return t}getEnvironmentVariables(t){let i={},u=t.toUpperCase();for(let[D,r]of Object.entries(ru.env))if(D.startsWith(u)&&r!==void 0)i[D]=r;return i}validateEnvironmentVariable(t,i,u){let D=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(t))D.push(`Environment variable key "${t}" should only contain uppercase letters, numbers, and underscores`);if(u)try{this.parseEnvironmentValue(t,i,u,{})}catch(r){D.push(`Cannot parse value "${i}" as ${u}: ${r}`)}return{isValid:D.length===0,errors:D}}generateEnvVarDocs(t,i,u={}){let{prefix:D,format:r="text"}=u,n=D||this.generateEnvPrefix(t),e=[];switch(this.extractEnvVarInfo(i,[],n,e),r){case"markdown":return this.formatAsMarkdown(e,t);case"json":return JSON.stringify(e,null,2);default:return this.formatAsText(e,t)}}extractEnvVarInfo(t,i,u,D){for(let[r,n]of Object.entries(t)){let e=[...i,r],l=`${u}_${e.map((f)=>this.formatEnvKey(f,!0)).join("_")}`;if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.extractEnvVarInfo(n,e,u,D);else D.push({key:l,type:Array.isArray(n)?"array":typeof n,description:`Configuration for ${e.join(".")}`,example:this.generateExample(n)})}}generateExample(t){if(Array.isArray(t))return JSON.stringify(t);if(typeof t==="object"&&t!==null)return JSON.stringify(t);return String(t)}formatAsText(t,i){let u=`Environment Variables for ${i}:
55
+
56
+ `;for(let D of t)u+=`${D.key}
57
+ `,u+=` Type: ${D.type}
58
+ `,u+=` Description: ${D.description}
59
+ `,u+=` Example: ${D.example}
60
+
61
+ `;return u}formatAsMarkdown(t,i){let u=`# Environment Variables for ${i}
62
+
63
+ `;u+=`| Variable | Type | Description | Example |
64
+ `,u+=`|----------|------|-------------|----------|
65
+ `;for(let D of t)u+=`| \`${D.key}\` | ${D.type} | ${D.description} | \`${D.example}\` |
66
+ `;return u}}function hf(t,i,u={}){return zn(t,i,u,new WeakMap)}function zn(t,i,u,D){let{arrayMergeMode:r="replace",skipNullish:n=!1,customMerger:e}=u;if(i===null||i===void 0)return n?t:i;if(e){let l=e(t,i);if(l!==void 0)return l}if(Array.isArray(i)||Array.isArray(t))return Qn(t,i,r,D);if(!Et(i)||!Et(t))return i;return wf(t,i,u,D)}function Qn(t,i,u,D){if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(t)&&!Array.isArray(i))return i;if(Array.isArray(i)&&Array.isArray(t))switch(u){case"replace":return i;case"concat":return sf(t,i);case"smart":return Ef(t,i,D);default:return i}return i}function sf(t,i){let u=[...i];for(let D of t)if(!u.some((r)=>mD(r,D)))u.push(D);return u}function Ef(t,i,u){if(i.length===0)return t;if(t.length===0)return i;if(Et(i[0])&&Et(t[0]))return yf(t,i,u);if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}function yf(t,i,u){let D=[...i];for(let r of t){if(!Et(r)){D.push(r);continue}let n=["id","name","key","path","type"],e=!1;for(let l of n)if(l in r){if(D.find((f)=>Et(f)&&(l in f)&&f[l]===r[l])){e=!0;break}}if(!e)D.push(r)}return D}function wf(t,i,u,D){let r=i;if(Et(r)&&D.has(r))return D.get(r);let n={...t};if(Et(r))D.set(r,n);for(let e in r){if(!Object.prototype.hasOwnProperty.call(r,e))continue;let l=r[e],f=n[e];if(u.skipNullish&&(l===null||l===void 0))continue;if(l===null||l===void 0){n[e]=l;continue}if(Et(l)&&Et(f))n[e]=zn(f,l,u,D);else if(Array.isArray(l)||Array.isArray(f))n[e]=Qn(f,l,u.arrayMergeMode||"smart",D);else n[e]=l}return n}function On(t,i,u="replace"){return hf(t,i,{arrayMergeMode:u==="replace"?"replace":"smart",skipNullish:!0})}function mD(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!mD(t[u],i[u]))return!1;return!0}if(Et(t)&&Et(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!mD(t[r],i[r]))return!1}return!0}return!1}function Et(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}class Jn{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(t,i,u={}){let{arrayStrategy:D="replace",useCache:r=!0,cacheTtl:n,trackPerformance:e=!0,verbose:l=!1}=u;if(r){let c=Eu.getWithFileCheck("file",t);if(c){if(l)console.log(`Configuration loaded from cache: ${t}`);return c}}let f=async()=>{if(!nu(t))return null;try{let c=`?t=${Date.now()}`,F=await import(t+c),h=F.default||F,E="default"in F,a=Object.keys(F).length>0;if(!E&&!a)throw new Cu(t,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new Cu(t,Error("Configuration must export a valid object"),"unknown");let A={config:On(i,h,D),source:{type:"file",path:t,priority:100,timestamp:new Date}};if(r)Eu.setWithFileCheck("file",A,t,n);return A}catch(c){throw c instanceof Error?Fi.configLoad(t,c):Fi.configLoad(t,Error(String(c)))}};if(e)return _D.track("loadFromPath",f,{path:t});return f()}async tryLoadFromPaths(t,i,u={}){for(let D of t)try{let r=await this.loadFromPath(D,i,u);if(r)return r}catch(r){if(r instanceof Error&&r.name==="ConfigLoadError")throw r;if(u.verbose)console.warn(`Failed to load config from ${D}:`,r)}return null}generateConfigPaths(t,i,u){let D=this.generateNamePatterns(t,u),r=[];for(let n of D)for(let e of this.extensions)r.push(hD(i,`${n}${e}`));return r}generateNamePatterns(t,i){let u=[];if(u.push("config",".config"),t)u.push(t,`.${t}.config`,`${t}.config`,`.${t}`);if(i){if(u.push(i,`.${i}.config`,`${i}.config`,`.${i}`),t)u.push(`${t}.${i}.config`,`.${t}.${i}.config`)}return u.filter(Boolean)}checkFileAccess(t){return af(async()=>{return nu(t)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(t,i,u){let D=[];if(!nu(t))return D;if(i||u){let r=this.generateNamePatterns(i||"",u);for(let n of r)for(let e of this.extensions){let l=hD(t,`${n}${e}`);if(await this.checkFileAccess(l))D.push(l)}}else try{let{readdirSync:r}=await import("fs"),n=r(t);for(let e of n)if(this.looksLikeConfigFile(e)){let l=hD(t,e);if(await this.checkFileAccess(l))D.push(l)}}catch{return[]}return D}looksLikeConfigFile(t){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((i)=>i.test(t))}async validateConfigFile(t){let i=[];try{if(!nu(t))return i.push("Configuration file does not exist"),i;let u=await import(t),D=u.default||u;if(D===void 0)i.push("Configuration file must export a default value or named exports");else if(typeof D!=="object"||D===null)i.push("Configuration must be an object");else if(Array.isArray(D))i.push("Configuration cannot be an array at the root level");if(t.endsWith(".json"))try{let{readFileSync:r}=await import("fs"),n=r(t,"utf8");JSON.parse(n)}catch(r){i.push(`Invalid JSON syntax: ${r}`)}}catch(u){i.push(`Failed to load configuration file: ${u}`)}return i}async getFileModificationTime(t){try{let{statSync:i}=await import("fs");return i(t).mtime}catch{return null}}async preloadConfigurations(t,i={}){let u=new Map;return await Promise.allSettled(t.map(async(D)=>{try{let r=await this.loadFromPath(D,{},i);if(r)u.set(D,r.config)}catch(r){if(i.verbose)console.warn(`Failed to preload ${D}:`,r)}})),u}}var Cf=/^https?:\/\//;class Kn{async validateConfiguration(t,i,u={}){let{stopOnFirstError:D=!1,validateRequired:r=!0,validateTypes:n=!0,customRules:e=[],trackPerformance:l=!0,verbose:f=!1}=u,c=async()=>{let F=[],h=[],E={stopOnFirstError:D,validateRequired:r,validateTypes:n,customRules:e,trackPerformance:l,verbose:f};try{if(typeof i==="string")return await this.validateWithSchemaFile(t,i,E);else if(Array.isArray(i))return this.validateWithRules(t,[...i,...e],E);else return this.validateWithJSONSchema(t,i,E)}catch(a){return F.push({path:"",message:`Validation failed: ${a}`,rule:"system"}),{isValid:!1,errors:F,warnings:h}}};if(l)return await _D.track("validateConfiguration",c);return c()}async validateWithSchemaFile(t,i,u){try{if(!o0(i))throw new Au(i,[{path:"",message:"Schema file does not exist"}]);let D=await import(i),r=D.default||D;if(Array.isArray(r))return this.validateWithRules(t,r,u);else return this.validateWithJSONSchema(t,r,u)}catch(D){throw new Au(i,[{path:"",message:`Failed to load schema: ${D}`}])}}validateWithJSONSchema(t,i,u){let D=[],r=[];return this.validateObjectAgainstSchema(t,i,"",D,r,u),{isValid:D.length===0,errors:D,warnings:r}}validateObjectAgainstSchema(t,i,u,D,r,n){if(n.validateTypes&&i.type){let e=Array.isArray(t)?"array":typeof t,l=Array.isArray(i.type)?i.type:[i.type];if(!l.includes(e)){if(D.push({path:u,message:`Expected type ${l.join(" or ")}, got ${e}`,expected:l.join(" or "),actual:e,rule:"type"}),n.stopOnFirstError)return}}if(i.enum&&!i.enum.includes(t)){if(D.push({path:u,message:`Value must be one of: ${i.enum.join(", ")}`,expected:i.enum.join(", "),actual:t,rule:"enum"}),n.stopOnFirstError)return}if(typeof t==="string"){if(i.minLength!==void 0&&t.length<i.minLength)D.push({path:u,message:`String length must be at least ${i.minLength}`,expected:`>= ${i.minLength}`,actual:t.length,rule:"minLength"});if(i.maxLength!==void 0&&t.length>i.maxLength)D.push({path:u,message:`String length must not exceed ${i.maxLength}`,expected:`<= ${i.maxLength}`,actual:t.length,rule:"maxLength"});if(i.pattern){if(!new RegExp(i.pattern).test(t))D.push({path:u,message:`String does not match pattern ${i.pattern}`,expected:i.pattern,actual:t,rule:"pattern"})}}if(typeof t==="number"){if(i.minimum!==void 0&&t<i.minimum)D.push({path:u,message:`Value must be at least ${i.minimum}`,expected:`>= ${i.minimum}`,actual:t,rule:"minimum"});if(i.maximum!==void 0&&t>i.maximum)D.push({path:u,message:`Value must not exceed ${i.maximum}`,expected:`<= ${i.maximum}`,actual:t,rule:"maximum"})}if(Array.isArray(t)&&i.items)for(let e=0;e<t.length;e++){let l=u?`${u}[${e}]`:`[${e}]`;if(this.validateObjectAgainstSchema(t[e],i.items,l,D,r,n),n.stopOnFirstError&&D.length>0)return}if(t&&typeof t==="object"&&!Array.isArray(t)){let e=t;if(n.validateRequired&&i.required){for(let l of i.required)if(!(l in e)){if(D.push({path:u?`${u}.${l}`:l,message:`Missing required property '${l}'`,expected:"required",rule:"required"}),n.stopOnFirstError)return}}if(i.properties){for(let[l,f]of Object.entries(i.properties))if(l in e){let c=u?`${u}.${l}`:l;if(this.validateObjectAgainstSchema(e[l],f,c,D,r,n),n.stopOnFirstError&&D.length>0)return}}if(i.additionalProperties===!1){let l=new Set(Object.keys(i.properties||{}));for(let f of Object.keys(e))if(!l.has(f))r.push({path:u?`${u}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(t,i,u){let D=[],r=[];for(let n of i)try{let e=this.getValueByPath(t,n.path),l=this.validateWithRule(e,n,n.path);if(D.push(...l),u.stopOnFirstError&&D.length>0)break}catch(e){D.push({path:n.path,message:`Rule validation failed: ${e}`,rule:"system"})}return{isValid:D.length===0,errors:D,warnings:r}}validateWithRule(t,i,u){let D=[];if(i.required&&(t===void 0||t===null))return D.push({path:u,message:i.message||`Property '${u}' is required`,expected:"required",rule:"required"}),D;if(t===void 0||t===null)return D;if(i.type){let r=Array.isArray(t)?"array":typeof t;if(r!==i.type)D.push({path:u,message:i.message||`Expected type ${i.type}, got ${r}`,expected:i.type,actual:r,rule:"type"})}if(i.min!==void 0){let r=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(r<i.min)D.push({path:u,message:i.message||`Value must be at least ${i.min}`,expected:`>= ${i.min}`,actual:r,rule:"min"})}if(i.max!==void 0){let r=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(r>i.max)D.push({path:u,message:i.message||`Value must not exceed ${i.max}`,expected:`<= ${i.max}`,actual:r,rule:"max"})}if(i.pattern&&typeof t==="string"){if(!i.pattern.test(t))D.push({path:u,message:i.message||`Value does not match pattern ${i.pattern}`,expected:i.pattern.toString(),actual:t,rule:"pattern"})}if(i.enum&&!i.enum.includes(t))D.push({path:u,message:i.message||`Value must be one of: ${i.enum.join(", ")}`,expected:i.enum.join(", "),actual:t,rule:"enum"});if(i.validator){let r=i.validator(t);if(r)D.push({path:u,message:i.message||r,rule:"custom"})}return D}getValueByPath(t,i){if(!i)return t;let u=i.split("."),D=t;for(let r of u)if(D&&typeof D==="object"&&r in D)D=D[r];else return;return D}generateRulesFromInterface(t){let i=[],u=t.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let D of u){let[,r,n,e]=D;i.push({path:r,required:!n,type:this.mapTypeScriptType(e)})}return i}mapTypeScriptType(t){switch(t.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:Cf},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var Qt=new Ru("bunfig",{showTags:!0});class Hn{fileLoader=new Jn;envProcessor=new XD;validator=new Kn;async loadConfig(t){let i=Date.now(),{cache:u,performance:D,schema:r,validate:n,...e}=t;try{if(u?.enabled){let f=this.checkCache(e.name||"",e);if(f)return f}let l;try{l=await this.loadConfigurationStrategies(e,!0,u)}catch(f){let c=e.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(c)throw f;l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`No configuration file found for "${e.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let F=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),h=!F&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),E=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(c&&(E||F))throw f;if(h&&(!c||!E))l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!c)l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(r||n)await this.validateConfiguration(l.config,r,n,e.name);if(u?.enabled&&l)this.cacheResult(e.name||"",l,u,e);if(D?.enabled){let f={operation:"loadConfig",duration:Date.now()-i,configName:e.name,timestamp:new Date};if(D.onMetrics)D.onMetrics(f);if(D.slowThreshold&&f.duration>D.slowThreshold)Qt.warn(`Slow configuration loading detected: ${f.duration}ms for ${e.name}`);l.metrics=f}return l}catch(l){let f=Date.now()-i;throw Qt.error(`Configuration loading failed after ${f}ms:`,[l instanceof Error?l:Error(String(l))]),l}}async loadConfigurationStrategies(t,i=!1,u){let{name:D="",alias:r,cwd:n,configDir:e,defaultConfig:l,checkEnv:f=!0,arrayStrategy:c="replace",verbose:F=!1}=t,h=n||mu.cwd(),E=[],a=await this.loadLocalConfiguration(D,r,h,e,l,c,F,f,u);if(a)return E.push(...this.getLocalSearchPaths(D,r,h,e)),this.finalizeResult(a,E,f,D,F);let A=await this.loadHomeConfiguration(D,r,l,c,F,f);if(A)return E.push(...this.getHomeSearchPaths(D,r)),this.finalizeResult(A,E,f,D,F);let y=await this.loadPackageJsonConfiguration(D,r,h,l,c,F,f);if(y)return E.push(st(h,"package.json")),this.finalizeResult(y,E,f,D,F);if(E.push(...this.getAllSearchPaths(D,r,h,e)),i)throw Fi.configNotFound(D,E,r);return{...await this.applyEnvironmentVariables(D,l,f,F),warnings:[`No configuration file found for "${D}"${r?` or alias "${r}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration(t,i,u,D,r,n,e,l,f){let c=l?fu(t,r,e):r,F=this.getLocalDirectories(u,D);for(let h of F){if(e)Qt.info(`Searching for configuration in: ${h}`);let E=this.fileLoader.generateConfigPaths(t,h,i),a=await this.fileLoader.tryLoadFromPaths(E,c,{arrayStrategy:n,verbose:e,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(a){if(e)Qt.success(`Configuration loaded from: ${a.source.path}`);return a}}return null}async loadHomeConfiguration(t,i,u,D,r,n){if(!t)return null;let e=n?fu(t,u,r):u,l=[st(Di(),".config",t),st(Di(),".config"),Di()];for(let f of l){if(r)Qt.info(`Checking home directory: ${f}`);let c=this.fileLoader.generateConfigPaths(t,f,i),F=await this.fileLoader.tryLoadFromPaths(c,e,{arrayStrategy:D,verbose:r});if(F){if(r)Qt.success(`Configuration loaded from home directory: ${F.source.path}`);return F}}return null}async loadPackageJsonConfiguration(t,i,u,D,r,n,e){let l=e?fu(t,D,n):D;try{let f=st(u,"package.json");if(!T0(f))return null;let c=await import(f),F=c[t],h=t;if(!F&&i)F=c[i],h=i;if(F&&typeof F==="object"&&!Array.isArray(F)){if(n)Qt.success(`Configuration loaded from package.json: ${h}`);return{config:On(l,F,r),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(n)Qt.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}return null}async applyEnvironmentVariables(t,i,u,D){if(!u||!t||typeof i!=="object"||i===null||Array.isArray(i))return{config:i,source:{type:"default",priority:10,timestamp:new Date}};return{config:fu(t,i,D),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(t,i,u,D,r){return{config:t.config,source:t.source,path:t.source.path}}async validateConfiguration(t,i,u,D){let r=[];if(u){let n=u(t);if(n)r.push(...n)}if(i){let n=await this.validator.validateConfiguration(t,i);if(!n.isValid)r.push(...n.errors.map((e)=>e.path?`${e.path}: ${e.message}`:e.message))}if(r.length>0)throw Fi.configValidation(D||"unknown",r,D)}checkCache(t,i){let u=this.generateCacheKey(t,i);return Eu.get(u)||null}cacheResult(t,i,u,D){let r=this.generateCacheKey(t,D);Eu.set(r,i,void 0,u.ttl)}generateCacheKey(t,i){let u=[t];if(i.alias)u.push(`alias:${i.alias}`);if(i.cwd)u.push(`cwd:${i.cwd}`);if(i.configDir)u.push(`configDir:${i.configDir}`);if("checkEnv"in i)u.push(`checkEnv:${i.checkEnv}`);return u.join("|")}getLocalDirectories(t,i){return Array.from(new Set([t,st(t,"config"),st(t,".config"),i?st(t,i):void 0].filter(Boolean)))}getAllSearchPaths(t,i,u,D){let r=[];return r.push(...this.getLocalSearchPaths(t,i,u,D)),r.push(...this.getHomeSearchPaths(t,i)),r.push(st(u,"package.json")),r}getLocalSearchPaths(t,i,u,D){let r=this.getLocalDirectories(u,D),n=[];for(let e of r)n.push(...this.fileLoader.generateConfigPaths(t,e,i));return n}getHomeSearchPaths(t,i){if(!t)return[];let u=[st(Di(),".config",t),st(Di(),".config"),Di()],D=[];for(let r of u)D.push(...this.fileLoader.generateConfigPaths(t,r,i));return D}async loadConfigWithResult(t){return this.loadConfig(t)}}var Sh=new Hn;function fu(t,i,u=!1){let D=new XD,r=t.toUpperCase().replace(/[^A-Z0-9]/g,"_");function n(e,l=[]){let f={...e};for(let[c,F]of Object.entries(e)){let h=[...l,c],E=[`${r}_${h.join("_").toUpperCase()}`,`${r}_${h.map((y)=>y.toUpperCase()).join("")}`,`${r}_${h.map((y)=>y.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],a,A;for(let y of E)if(a=mu.env[y],a!==void 0){A=y;break}if(a!==void 0&&A)if(typeof F==="boolean")f[c]=["true","1","yes"].includes(a.toLowerCase());else if(typeof F==="number"){let y=Number(a);if(!Number.isNaN(y))f[c]=y}else if(Array.isArray(F))try{f[c]=JSON.parse(a)}catch{f[c]=a.split(",").map((y)=>y.trim())}else f[c]=a;else if(F&&typeof F==="object"&&!Array.isArray(F))f[c]=n(F,h)}return f}return n(i)}var Rh=st(mu.cwd(),"config"),Nh=st(mu.cwd(),"src/generated"),on={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:DD.join(uD.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:DD.join(uD.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:DD.join(uD.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},H=on,Ct={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 S={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"};function SD(t,i){let u=[];function D(r){let n;try{n=ln.readdirSync(r)}catch{return}for(let e of n){let l=wt.join(r,e);try{if(ln.statSync(l).isDirectory())D(l);else if(e===i)u.push(r)}catch{continue}}}return D(t),u}function m(t,i,u){if(u||H.verbose)console.debug(`[tlsx:${t}] ${i}`)}var Sf=mf(Af);async function Jt(t,i={}){try{let{stdout:u,stderr:D}=await Sf(t,{cwd:i.cwd||Tf.cwd(),timeout:i.timeout||30000});return{stdout:u.trim(),stderr:D.trim()}}catch(u){let D=Error(`Failed to execute command: ${t}
67
+ Error: ${u.message}`);throw D.stack=u.stack,D}}function Gn(t){if(t.domain)return t.domain;if(t.domains?.length)return t.domains[0];throw Error("Either domain or domains must be specified")}function xD(t){let i=wt.join(Bf.homedir(),".stacks","ssl"),u=t.basePath&&t.basePath.trim()!==""?t.basePath:H.basePath&&H.basePath.trim()!==""?H.basePath:i,D=t.certPath?wt.isAbsolute(t.certPath)?t.certPath:wt.join(u,t.certPath):wt.join(u,H.certPath),r=t.keyPath?wt.isAbsolute(t.keyPath)?t.keyPath:wt.join(u,t.keyPath):wt.join(u,H.keyPath),n=t.caCertPath?wt.isAbsolute(t.caCertPath)?t.caCertPath:wt.join(u,t.caCertPath):wt.join(u,H.caCertPath);return{certPath:D,keyPath:r,caCertPath:n,basePath:u}}function Ln(t){let i=[],u=new Set;if(t.domain)u.add(t.domain);if(t.domains?.length)t.domains.forEach((D)=>u.add(D));for(let D of u)i.push({type:2,value:D});if(t.altNameIPs?.length)for(let D of t.altNameIPs)i.push({type:7,ip:D});if(t.altNameURIs?.length)for(let D of t.altNameURIs)i.push({type:6,value:D});if(t.subjectAltNames?.length)i.push(...t.subjectAltNames);return m(S.CERT,`Generated ${i.length} Subject Alternative Names`,t.verbose),i}function WD(t){let i=t.notBeforeDays??Ct.DEFAULT_NOT_BEFORE_DAYS,u=t.validityDays??(t.validityYears?t.validityYears*365:Ct.DEFAULT_VALIDITY_DAYS);m(S.CERT,"Calculating certificate validity dates",t.verbose);let D=new Date(Date.now()-86400*i*1000),r=new Date(D.getTime()+u*24*60*60*1000);return D.setUTCHours(0,0,0,0),r.setUTCHours(23,59,59,999),m(S.CERT,`Validity period: ${D.toISOString()} to ${r.toISOString()}`,t.verbose),{notBefore:D,notAfter:r}}var At={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},nt={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"};function Bi(t){if(t<128)return Buffer.from([t]);let i=[],u=t;while(u>0)i.unshift(u&255),u>>=8;return Buffer.from([128|i.length,...i])}function ct(t,i){let u=Bi(i.length);return Buffer.concat([Buffer.from([t]),u,i])}function mi(t){let i=t.split(".").map(Number),u=[];u.push(40*i[0]+i[1]);for(let D=2;D<i.length;D++){let r=i[D],n=[];n.unshift(r&127),r>>=7;while(r>0)n.unshift(r&127|128),r>>=7;u.push(...n)}return ct(At.OID,Buffer.from(u))}function RD(t){let i;if(typeof t==="bigint"){let u=t.toString(16).padStart(2,"0");i=Buffer.from(u.length%2?"0"+u:u,"hex")}else if(typeof t==="number")if(t===0)i=Buffer.from([0]);else{let u=t.toString(16).padStart(2,"0");i=Buffer.from(u.length%2?"0"+u:u,"hex")}else i=t;if(i[0]&128)i=Buffer.concat([Buffer.from([0]),i]);return ct(At.INTEGER,i)}function kn(t,i=0){return ct(At.BIT_STRING,Buffer.concat([Buffer.from([i]),t]))}function qn(t){return ct(At.OCTET_STRING,t)}function lt(...t){return ct(At.SEQUENCE,Buffer.concat(t))}function Rf(...t){return ct(At.SET,Buffer.concat(t))}function Nf(t){return ct(At.PRINTABLE_STRING,Buffer.from(t,"ascii"))}function df(t){return ct(At.UTF8_STRING,Buffer.from(t,"utf8"))}function If(){return Buffer.from([At.NULL,0])}function cn(t,i,u=!0){let D=160|t|(u?0:0),r=Bi(i.length);return Buffer.concat([Buffer.from([D]),r,i])}function Fn(t){let i=t.getUTCFullYear();if(i>=2050){let u=t.toISOString().replace(/[-:T]/g,"").slice(0,14)+"Z";return ct(At.GENERALIZED_TIME,Buffer.from(u,"ascii"))}else{let u=(i%100).toString().padStart(2,"0"),D=(t.getUTCMonth()+1).toString().padStart(2,"0"),r=t.getUTCDate().toString().padStart(2,"0"),n=t.getUTCHours().toString().padStart(2,"0"),e=t.getUTCMinutes().toString().padStart(2,"0"),l=t.getUTCSeconds().toString().padStart(2,"0"),f=`${u}${D}${r}${n}${e}${l}Z`;return ct(At.UTC_TIME,Buffer.from(f,"ascii"))}}function _f(t,i){return lt(Fn(t),Fn(i))}function an(t){let i=[];for(let u of t){let D;switch(u.shortName){case"CN":D=nt.COMMON_NAME;break;case"C":D=nt.COUNTRY;break;case"L":D=nt.LOCALITY;break;case"ST":D=nt.STATE;break;case"O":D=nt.ORGANIZATION;break;case"OU":D=nt.ORGANIZATIONAL_UNIT;break;default:continue}let r=u.shortName==="C"?Nf(u.value):df(u.value),n=lt(mi(D),r);i.push(Rf(n))}return lt(...i)}function pn(t){return lt(mi(t),If())}function Uf(t){return t.export({type:"spki",format:"der"})}function jf(t){if(t.includes(":")){let i=t;if(t.includes("::")){let r=t.split("::"),n=r[0]?r[0].split(":"):[],e=r[1]?r[1].split(":"):[],l=8-n.length-e.length,f=Array.from({length:l},()=>"0");i=[...n,...f,...e].join(":")}let u=i.split(":"),D=Buffer.alloc(16);for(let r=0;r<8;r++){let n=Number.parseInt(u[r]||"0",16);D.writeUInt16BE(n,r*2)}return D}else{let i=t.split(".").map((u)=>Number.parseInt(u,10));return Buffer.from(i)}}function Yf(t){let i=[];for(let u of t)if(u.type===2&&u.value){let D=Bi(u.value.length);i.push(Buffer.concat([Buffer.from([130]),D,Buffer.from(u.value,"ascii")]))}else if(u.type===7&&u.ip){let D=jf(u.ip),r=Bi(D.length);i.push(Buffer.concat([Buffer.from([135]),r,D]))}else if(u.type===6&&u.value){let D=Bi(u.value.length);i.push(Buffer.concat([Buffer.from([134]),D,Buffer.from(u.value,"ascii")]))}return lt(...i)}function Xf(t,i){if(t){if(i!==void 0)return lt(ct(1,Buffer.from([255])),RD(i));return lt(ct(1,Buffer.from([255])))}return lt()}function xf(t){let i=0;if(t.digitalSignature)i|=128;if(t.keyEncipherment)i|=32;if(t.keyCertSign)i|=4;if(t.cRLSign)i|=2;let u=0,D=i;while(D>0&&(D&1)===0)u++,D>>=1;if(i===0)u=7;return kn(Buffer.from([i]),u)}function Wf(t){let i=[];if(t.serverAuth)i.push(mi(nt.SERVER_AUTH));if(t.clientAuth)i.push(mi(nt.CLIENT_AUTH));return lt(...i)}function wi(t,i,u){let D=[mi(t)];if(i)D.push(ct(1,Buffer.from([255])));return D.push(qn(u)),lt(...D)}function Mf(t){let i=[];if(i.push(cn(0,RD(2))),i.push(RD(t.serialNumber)),i.push(pn(nt.SHA256_WITH_RSA)),i.push(an(t.issuer)),i.push(_f(t.notBefore,t.notAfter)),i.push(an(t.subject)),i.push(Uf(t.publicKey)),t.extensions){let u=[];if(t.extensions.basicConstraints)u.push(wi(nt.BASIC_CONSTRAINTS,t.extensions.basicConstraints.critical??!0,Xf(t.extensions.basicConstraints.isCA,t.extensions.basicConstraints.pathLenConstraint)));if(t.extensions.keyUsage)u.push(wi(nt.KEY_USAGE,t.extensions.keyUsage.critical??!0,xf(t.extensions.keyUsage)));if(t.extensions.extendedKeyUsage)u.push(wi(nt.EXTENDED_KEY_USAGE,!1,Wf(t.extensions.extendedKeyUsage)));if(t.extensions.subjectAltName?.length)u.push(wi(nt.SUBJECT_ALT_NAME,!1,Yf(t.extensions.subjectAltName)));if(t.extensions.subjectKeyIdentifier)u.push(wi(nt.SUBJECT_KEY_IDENTIFIER,!1,qn(t.extensions.subjectKeyIdentifier)));if(u.length>0)i.push(cn(3,lt(...u)))}return lt(...i)}function zf(t,i){let u=ai.createSign("SHA256");u.update(t);let D=u.sign(i);return lt(t,pn(nt.SHA256_WITH_RSA),kn(D))}function Qf(t,i){let u=t.toString("base64"),D=[];for(let r=0;r<u.length;r+=64)D.push(u.slice(r,r+64));return`-----BEGIN ${i}-----
68
+ ${D.join(`
69
+ `)}
70
+ -----END ${i}-----
71
+ `}function MD(){return ai.randomBytes(20)}function Vn(t=2048){let{privateKey:i,publicKey:u}=ai.generateKeyPairSync("rsa",{modulusLength:t});return{privateKey:i,publicKey:u}}function Of(t){let i=t.export({type:"spki",format:"der"});return ai.createHash("sha1").update(i).digest()}function bn(t){let i={serialNumber:t.serialNumber||MD(),notBefore:t.notBefore,notAfter:t.notAfter,subject:t.subject,issuer:t.issuer||t.subject,publicKey:t.publicKey,extensions:{basicConstraints:{isCA:t.isCA??!1,critical:!0,pathLenConstraint:t.pathLenConstraint},subjectKeyIdentifier:Of(t.publicKey)}};if(t.keyUsage)i.extensions.keyUsage={...t.keyUsage,critical:!0};if(t.extendedKeyUsage)i.extensions.extendedKeyUsage=t.extendedKeyUsage;if(t.subjectAltName?.length)i.extensions.subjectAltName=t.subjectAltName;let u=Mf(i),D=zf(u,t.signingKey);return{certificate:Qf(D,"CERTIFICATE"),certificateDer:D}}function gn(t){return t.export({type:"pkcs8",format:"pem"})}function Jf(t){return ai.createPrivateKey(t)}function Kf(t){let i=new ai.X509Certificate(t),u=i.publicKey,D=[],r=i.subject.split(`
72
+ `);for(let n of r){let[e,...l]=n.split("="),f=l.join("=");if(e&&f)D.push({shortName:e.trim(),value:f.trim()})}return{publicKey:u,subject:D}}async function zD(t={}){m("ca","Creating new Root CA Certificate",t.verbose);let i=t.keySize||Ct.DEFAULT_KEY_SIZE;m("ca",`Generating ${i}-bit RSA key pair`,t.verbose);let{privateKey:u,publicKey:D}=Vn(i),r=[{shortName:"C",value:t.countryName||H.countryName},{shortName:"ST",value:t.stateName||H.stateName},{shortName:"L",value:t.localityName||H.localityName},{shortName:"O",value:t.organization||"Local Development CA"},{shortName:"OU",value:t.organizationalUnit||"Certificate Authority"},{shortName:"CN",value:t.commonName||"Local Development Root CA"}],{notBefore:n,notAfter:e}=WD({validityYears:t.validityYears||Ct.DEFAULT_CA_VALIDITY_YEARS,verbose:t.verbose}),{certificate:l}=bn({serialNumber:MD(),notBefore:n,notAfter:e,subject:r,publicKey:D,signingKey:u,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:l,privateKey:gn(u),notBefore:n,notAfter:e}}async function QD(t){if(m("ca","Generating new certificate",t.verbose),m("ca",`Options: ${JSON.stringify(t)}`,t.verbose),!t.domain&&!t.domains?.length)throw Error("Either domain or domains must be specified");if(!t.rootCA?.certificate||!t.rootCA?.privateKey)throw Error("Root CA certificate and private key are required");let{subject:i}=Kf(t.rootCA.certificate),u=Jf(t.rootCA.privateKey);m("ca",`Generating ${Ct.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,t.verbose);let D=Ct.DEFAULT_KEY_SIZE,{privateKey:r,publicKey:n}=Vn(D),e=t.commonName||Gn(t),l=t.certificateAttributes||[{shortName:"C",value:t.countryName||H.countryName},{shortName:"ST",value:t.stateName||H.stateName},{shortName:"L",value:t.localityName||H.localityName},{shortName:"O",value:t.organizationName||H.organizationName},{shortName:"CN",value:e}],{notBefore:f,notAfter:c}=WD({validityDays:t.validityDays||Ct.DEFAULT_VALIDITY_DAYS,verbose:t.verbose}),F=Ln(t),h=t.keyUsage||{digitalSignature:!0,keyEncipherment:!0},E=t.extKeyUsage||{serverAuth:!0},{certificate:a}=bn({serialNumber:MD(),notBefore:f,notAfter:c,subject:l,issuer:i,publicKey:n,signingKey:u,isCA:t.basicConstraints?.cA??!1,pathLenConstraint:t.basicConstraints?.pathLenConstraint,keyUsage:h,extendedKeyUsage:E,subjectAltName:F});return{certificate:a,privateKey:gn(r),notBefore:f,notAfter:c}}function vn(t,i){m(S.STORAGE,`Storing certificate and private key with options: ${JSON.stringify(i)}`,i?.verbose);let{certPath:u,keyPath:D}=xD({basePath:i?.basePath,certPath:i?.certPath,keyPath:i?.keyPath});m(S.STORAGE,`Certificate path: ${u}`,i?.verbose),m(S.STORAGE,`Private key path: ${D}`,i?.verbose);let r=ND.dirname(u);if(!Yt.existsSync(r))m(S.STORAGE,`Creating certificate directory: ${r}`,i?.verbose),Yt.mkdirSync(r,{recursive:!0});m(S.STORAGE,"Writing certificate file",i?.verbose),Yt.writeFileSync(u,t.certificate);let n=ND.dirname(D);if(!Yt.existsSync(n))m(S.STORAGE,`Creating private key directory: ${n}`,i?.verbose),Yt.mkdirSync(n,{recursive:!0});return m(S.STORAGE,"Writing private key file",i?.verbose),Yt.writeFileSync(D,t.privateKey),m(S.STORAGE,"Certificate and private key stored successfully",i?.verbose),u}function Pn(t,i){m(S.STORAGE,"Storing CA certificate",i?.verbose);let{caCertPath:u}=xD({basePath:i?.basePath,caCertPath:i?.caCertPath});m(S.STORAGE,`CA certificate path: ${u}`,i?.verbose);let D=ND.dirname(u);if(!Yt.existsSync(D))m(S.STORAGE,`Creating CA certificate directory: ${D}`,i?.verbose),Yt.mkdirSync(D,{recursive:!0});return m(S.STORAGE,"Writing CA certificate file",i?.verbose),Yt.writeFileSync(u,t),m(S.STORAGE,"CA certificate stored successfully",i?.verbose),u}var it={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},hn={silent:{level:-1},fatal:{level:it.fatal},error:{level:it.error},warn:{level:it.warn},log:{level:it.log},info:{level:it.info},success:{level:it.success},fail:{level:it.fail},ready:{level:it.info},start:{level:it.info},box:{level:it.info},debug:{level:it.debug},trace:{level:it.trace},verbose:{level:it.verbose}};function CD(t){if(t===null||typeof t!=="object")return!1;let i=Object.getPrototypeOf(t);if(i!==null&&i!==Object.prototype&&Object.getPrototypeOf(i)!==null)return!1;if(Symbol.iterator in t)return!1;if(Symbol.toStringTag in t)return Object.prototype.toString.call(t)==="[object Module]";return!0}function dD(t,i,u=".",D){if(!CD(i))return dD(t,{},u,D);let r=Object.assign({},i);for(let n in t){if(n==="__proto__"||n==="constructor")continue;let e=t[n];if(e===null||e===void 0)continue;if(D&&D(r,n,e,u))continue;if(Array.isArray(e)&&Array.isArray(r[n]))r[n]=[...e,...r[n]];else if(CD(e)&&CD(r[n]))r[n]=dD(e,r[n],(u?`${u}.`:"")+n.toString(),D);else r[n]=e}return r}function Hf(t){return(...i)=>i.reduce((u,D)=>dD(u,D,"",t),{})}var of=Hf();function Gf(t){return Object.prototype.toString.call(t)==="[object Object]"}function Lf(t){if(!Gf(t))return!1;if(!t.message&&!t.args)return!1;if(t.stack)return!1;return!0}var AD=!1,sn=[];class v{options;_lastLog;_mockFn;constructor(t={}){let i=t.types||hn;this.options=of({...t,defaults:{...t.defaults},level:BD(t.level,i),reporters:[...t.reporters||[]]},{types:hn,throttle:1000,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let u in i){let D={type:u,...this.options.defaults,...i[u]};this[u]=this._wrapLogFn(D),this[u].raw=this._wrapLogFn(D,!0)}if(this.options.mockFn)this.mockTypes();this._lastLog={}}get level(){return this.options.level}set level(t){this.options.level=BD(t,this.options.types,this.options.level)}prompt(t,i){if(!this.options.prompt)throw Error("prompt is not supported!");return this.options.prompt(t,i)}create(t){let i=new v({...this.options,...t});if(this._mockFn)i.mockTypes(this._mockFn);return i}withDefaults(t){return this.create({...this.options,defaults:{...this.options.defaults,...t}})}withTag(t){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+t:t})}addReporter(t){return this.options.reporters.push(t),this}removeReporter(t){if(t){let i=this.options.reporters.indexOf(t);if(i!==-1)return this.options.reporters.splice(i,1)}else this.options.reporters.splice(0);return this}setReporters(t){return this.options.reporters=Array.isArray(t)?t:[t],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let t in this.options.types){if(!console["__"+t])console["__"+t]=console[t];console[t]=this[t].raw}}restoreConsole(){for(let t in this.options.types)if(console["__"+t])console[t]=console["__"+t],delete console["__"+t]}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(t,i){if(!t)return;if(!t.__write)t.__write=t.write;t.write=(u)=>{this[i].raw(String(u).trim())}}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(t){if(!t)return;if(t.__write)t.write=t.__write,delete t.__write}pauseLogs(){AD=!0}resumeLogs(){AD=!1;let t=sn.splice(0);for(let i of t)i[0]._logFn(i[1],i[2])}mockTypes(t){let i=t||this.options.mockFn;if(this._mockFn=i,typeof i!=="function")return;for(let u in this.options.types)this[u]=i(u,this.options.types[u])||this[u],this[u].raw=this[u]}_wrapLogFn(t,i){return(...u)=>{if(AD){sn.push([this,t,u,i]);return}return this._logFn(t,u,i)}}_logFn(t,i,u){if((t.level||0)>this.level)return!1;let D={date:new Date,args:[],...t,level:BD(t.level,this.options.types)};if(!u&&i.length===1&&Lf(i[0]))Object.assign(D,i[0]);else D.args=[...i];if(D.message)D.args.unshift(D.message),delete D.message;if(D.additional){if(!Array.isArray(D.additional))D.additional=D.additional.split(`
73
+ `);D.args.push(`
74
+ `+D.additional.join(`
75
+ `)),delete D.additional}D.type=typeof D.type==="string"?D.type.toLowerCase():"log",D.tag=typeof D.tag==="string"?D.tag:"";let r=(e=!1)=>{let l=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&l>0){let f=[...this._lastLog.object.args];if(l>1)f.push(`(repeated ${l} times)`);this._log({...this._lastLog.object,args:f}),this._lastLog.count=1}if(e)this._lastLog.object=D,this._log(D)};clearTimeout(this._lastLog.timeout);let n=this._lastLog.time&&D.date?D.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=D.date,n<this.options.throttle)try{let e=JSON.stringify([D.type,D.tag,D.args]),l=this._lastLog.serialized===e;if(this._lastLog.serialized=e,l){if(this._lastLog.count=(this._lastLog.count||0)+1,this._lastLog.count>this.options.throttleMin){this._lastLog.timeout=setTimeout(r,this.options.throttle);return}}}catch{}r(!0)}_log(t){for(let i of this.options.reporters)i.log(t,{options:this.options})}}function BD(t,i={},u=3){if(t===void 0)return u;if(typeof t==="number")return t;if(i[t]&&i[t].level!==void 0)return i[t].level;return u}v.prototype.add=v.prototype.addReporter;v.prototype.remove=v.prototype.removeReporter;v.prototype.clear=v.prototype.removeReporter;v.prototype.withScope=v.prototype.withTag;v.prototype.mock=v.prototype.mockTypes;v.prototype.pause=v.prototype.pauseLogs;v.prototype.resume=v.prototype.resumeLogs;function kf(t={}){return new v(t)}function Zn(t,i){let u=process.cwd()+qf;return t.split(`
76
+ `).splice(i.split(`
77
+ `).length).map((D)=>D.trim().replace("file://","").replace(u,""))}function pf(t,i){return(i.__write||i.write).call(i,t)}var TD=(t)=>t?`[${t}]`:"";class OD{formatStack(t,i,u){let D=" ".repeat((u?.errorLevel||0)+1);return D+Zn(t,i).join(`
78
+ ${D}`)}formatError(t,i){let u=t.message??En(i,t),D=t.stack?this.formatStack(t.stack,u,i):"",r=i?.errorLevel||0,n=r>0?`${" ".repeat(r)}[cause]: `:"",e=t.cause?`
79
+
80
+ `+this.formatError(t.cause,{...i,errorLevel:r+1}):"";return n+u+`
81
+ `+D+e}formatArgs(t,i){let u=t.map((D)=>{if(D&&typeof D.stack==="string")return this.formatError(D,i);return D});return En(i,...u)}formatDate(t,i){return i.date?t.toLocaleTimeString():""}filterAndJoin(t){return t.filter(Boolean).join(" ")}formatLogObj(t,i){let u=this.formatArgs(t.args,i);if(t.type==="box")return`
82
+ `+[TD(t.tag),t.title&&t.title,...u.split(`
83
+ `)].filter(Boolean).map((D)=>" > "+D).join(`
84
+ `)+`
85
+ `;return this.filterAndJoin([TD(t.type),TD(t.tag),u])}log(t,i){let u=this.formatLogObj(t,{columns:i.options.stdout.columns||0,...i.options.formatOptions});return pf(u+`
86
+ `,t.level<2?i.options.stderr||process.stderr:i.options.stdout||process.stdout)}}var{env:Ot={},argv:$n=[],platform:Vf=""}=typeof process>"u"?{}:process,bf="NO_COLOR"in Ot||$n.includes("--no-color"),gf="FORCE_COLOR"in Ot||$n.includes("--color"),vf=Vf==="win32",te=Ot.TERM==="dumb",Pf=Bu&&Bu.isatty&&Bu.isatty(1)&&Ot.TERM&&!te,Zf="CI"in Ot&&(("GITHUB_ACTIONS"in Ot)||("GITLAB_CI"in Ot)||("CIRCLECI"in Ot)),$f=!bf&&(gf||vf&&!te||Pf||Zf);function ie(t,i,u,D,r=i.slice(0,Math.max(0,t))+D,n=i.slice(Math.max(0,t+u.length)),e=n.indexOf(u)){return r+(e<0?n:ie(e,n,u,D))}function tl(t,i,u,D,r){return t<0?u+i+D:u+ie(t,i,D,r)+D}function il(t,i,u=t,D=t.length+1){return(r)=>r||!(r===""||r===void 0)?tl((""+r).indexOf(i,D),r,t,i,u):""}function N(t,i,u){return il(`\x1B[${t}m`,`\x1B[${i}m`,u)}var wn={reset:N(0,0),bold:N(1,22,"\x1B[22m\x1B[1m"),dim:N(2,22,"\x1B[22m\x1B[2m"),italic:N(3,23),underline:N(4,24),inverse:N(7,27),hidden:N(8,28),strikethrough:N(9,29),black:N(30,39),red:N(31,39),green:N(32,39),yellow:N(33,39),blue:N(34,39),magenta:N(35,39),cyan:N(36,39),white:N(37,39),gray:N(90,39),bgBlack:N(40,49),bgRed:N(41,49),bgGreen:N(42,49),bgYellow:N(43,49),bgBlue:N(44,49),bgMagenta:N(45,49),bgCyan:N(46,49),bgWhite:N(47,49),blackBright:N(90,39),redBright:N(91,39),greenBright:N(92,39),yellowBright:N(93,39),blueBright:N(94,39),magentaBright:N(95,39),cyanBright:N(96,39),whiteBright:N(97,39),bgBlackBright:N(100,49),bgRedBright:N(101,49),bgGreenBright:N(102,49),bgYellowBright:N(103,49),bgBlueBright:N(104,49),bgMagentaBright:N(105,49),bgCyanBright:N(106,49),bgWhiteBright:N(107,49)};function ul(t=$f){return t?wn:Object.fromEntries(Object.keys(wn).map((i)=>[i,String]))}var ft=ul();function Dl(t,i="reset"){return ft[t]||ft[i]}var rl=[String.raw`[\u001B\u009B][[\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\d\/#&.:=?%@~_]+)*|[a-zA-Z\d]+(?:;[-a-zA-Z\d\/#&.:=?%@~_]*)*)?\u0007)`,String.raw`(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]))`].join("|");function ot(t){return t.replace(new RegExp(rl,"g"),"")}var Cn={solid:{tl:"┌",tr:"┐",bl:"└",br:"┘",h:"─",v:"│"},double:{tl:"╔",tr:"╗",bl:"╚",br:"╝",h:"═",v:"║"},doubleSingle:{tl:"╓",tr:"╖",bl:"╙",br:"╜",h:"─",v:"║"},doubleSingleRounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"─",v:"║"},singleThick:{tl:"┏",tr:"┓",bl:"┗",br:"┛",h:"━",v:"┃"},singleDouble:{tl:"╒",tr:"╕",bl:"╘",br:"╛",h:"═",v:"│"},singleDoubleRounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"═",v:"│"},rounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"─",v:"│"}},nl={borderColor:"white",borderStyle:"rounded",valign:"center",padding:2,marginLeft:1,marginTop:1,marginBottom:1};function el(t,i={}){let u={...i,style:{...nl,...i.style}},D=t.split(`
87
+ `),r=[],n=Dl(u.style.borderColor),e={...typeof u.style.borderStyle==="string"?Cn[u.style.borderStyle]||Cn.solid:u.style.borderStyle};if(n)for(let a in e)e[a]=n(e[a]);let l=u.style.padding%2===0?u.style.padding:u.style.padding+1,f=D.length+l,c=Math.max(...D.map((a)=>ot(a).length),u.title?ot(u.title).length:0)+l,F=c+l,h=u.style.marginLeft>0?" ".repeat(u.style.marginLeft):"";if(u.style.marginTop>0)r.push("".repeat(u.style.marginTop));if(u.title){let a=n?n(u.title):u.title,A=e.h.repeat(Math.floor((c-ot(u.title).length)/2)),y=e.h.repeat(c-ot(u.title).length-ot(A).length+l);r.push(`${h}${e.tl}${A}${a}${y}${e.tr}`)}else r.push(`${h}${e.tl}${e.h.repeat(F)}${e.tr}`);let E=u.style.valign==="center"?Math.floor((f-D.length)/2):u.style.valign==="top"?f-D.length-l:f-D.length;for(let a=0;a<f;a++)if(a<E||a>=E+D.length)r.push(`${h}${e.v}${" ".repeat(F)}${e.v}`);else{let A=D[a-E],y=" ".repeat(l),C=" ".repeat(c-ot(A).length);r.push(`${h}${e.v}${y}${A}${C}${e.v}`)}if(r.push(`${h}${e.bl}${e.h.repeat(F)}${e.br}`),u.style.marginBottom>0)r.push("".repeat(u.style.marginBottom));return r.join(`
88
+ `)}var Fu=Object.create(null),Ci=(t)=>globalThis.process?.env||import.meta.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(t?Fu:globalThis),Kt=new Proxy(Fu,{get(t,i){return Ci()[i]??Fu[i]},has(t,i){let u=Ci();return i in u||i in Fu},set(t,i,u){let D=Ci(!0);return D[i]=u,!0},deleteProperty(t,i){if(!i)return!1;let u=Ci(!0);return delete u[i],!0},ownKeys(){let t=Ci(!0);return Object.keys(t)}}),fl=typeof process<"u"&&process.env&&"development"||"",ll=[["APPVEYOR"],["AWS_AMPLIFY","AWS_APP_ID",{ci:!0}],["AZURE_PIPELINES","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"],["AZURE_STATIC","INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN"],["APPCIRCLE","AC_APPCIRCLE"],["BAMBOO","bamboo_planKey"],["BITBUCKET","BITBUCKET_COMMIT"],["BITRISE","BITRISE_IO"],["BUDDY","BUDDY_WORKSPACE_ID"],["BUILDKITE"],["CIRCLE","CIRCLECI"],["CIRRUS","CIRRUS_CI"],["CLOUDFLARE_PAGES","CF_PAGES",{ci:!0}],["CODEBUILD","CODEBUILD_BUILD_ARN"],["CODEFRESH","CF_BUILD_ID"],["DRONE"],["DRONE","DRONE_BUILD_EVENT"],["DSARI"],["GITHUB_ACTIONS"],["GITLAB","GITLAB_CI"],["GITLAB","CI_MERGE_REQUEST_ID"],["GOCD","GO_PIPELINE_LABEL"],["LAYERCI"],["HUDSON","HUDSON_URL"],["JENKINS","JENKINS_URL"],["MAGNUM"],["NETLIFY"],["NETLIFY","NETLIFY_LOCAL",{ci:!1}],["NEVERCODE"],["RENDER"],["SAIL","SAILCI"],["SEMAPHORE"],["SCREWDRIVER"],["SHIPPABLE"],["SOLANO","TDDIUM"],["STRIDER"],["TEAMCITY","TEAMCITY_VERSION"],["TRAVIS"],["VERCEL","NOW_BUILDER"],["VERCEL","VERCEL",{ci:!1}],["VERCEL","VERCEL_ENV",{ci:!1}],["APPCENTER","APPCENTER_BUILD_ID"],["CODESANDBOX","CODESANDBOX_SSE",{ci:!1}],["CODESANDBOX","CODESANDBOX_HOST",{ci:!1}],["STACKBLITZ"],["STORMKIT"],["CLEAVR"],["ZEABUR"],["CODESPHERE","CODESPHERE_APP_ID",{ci:!0}],["RAILWAY","RAILWAY_PROJECT_ID"],["RAILWAY","RAILWAY_SERVICE_ID"],["DENO-DEPLOY","DENO_DEPLOYMENT_ID"],["FIREBASE_APP_HOSTING","FIREBASE_APP_HOSTING",{ci:!0}]];function cl(){if(globalThis.process?.env)for(let t of ll){let i=t[1]||t[0];if(globalThis.process?.env[i])return{name:t[0].toLowerCase(),...t[2]}}return globalThis.process?.env?.SHELL==="/bin/jsh"&&globalThis.process?.versions?.webcontainer?{name:"stackblitz",ci:!1}:{name:"",ci:!1}}var ue=cl();ue.name;function Gt(t){return t?t!=="false":!1}var Fl=globalThis.process?.platform||"",al=Gt(Kt.CI)||ue.ci!==!1,hl=Gt(globalThis.process?.stdout&&globalThis.process?.stdout.isTTY),sl=Gt(Kt.DEBUG),De=fl==="test"||Gt(Kt.TEST);Gt(Kt.MINIMAL);var El=/^win/i.test(Fl);!Gt(Kt.NO_COLOR)&&(Gt(Kt.FORCE_COLOR)||(hl||El)&&Kt.TERM);var yl=(globalThis.process?.versions?.node||"").replace(/^v/,"")||null;Number(yl?.split(".")[0]);var wl=globalThis.process||Object.create(null),An={versions:{}};new Proxy(wl,{get(t,i){if(i==="env")return Kt;if(i in t)return t[i];if(i in An)return An[i]}});var Cl=globalThis.process?.release?.name==="node",Al=!!globalThis.Bun||!!globalThis.process?.versions?.bun,Bl=!!globalThis.Deno,Tl=!!globalThis.fastly,ml=!!globalThis.Netlify,Sl=!!globalThis.EdgeRuntime,Rl=globalThis.navigator?.userAgent==="Cloudflare-Workers",Nl=[[ml,"netlify"],[Sl,"edge-light"],[Rl,"workerd"],[Tl,"fastly"],[Bl,"deno"],[Al,"bun"],[Cl,"node"]];function dl(){let t=Nl.find((i)=>i[0]);if(t)return{name:t[1]}}var Il=dl();Il?.name;function _l({onlyFirst:t=!1}={}){let i=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(i,t?void 0:"g")}var Ul=_l();function jl(t){if(typeof t!=="string")throw TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Ul,"")}function Yl(t){return t===161||t===164||t===167||t===168||t===170||t===173||t===174||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||t===198||t===208||t===215||t===216||t>=222&&t<=225||t===230||t>=232&&t<=234||t===236||t===237||t===240||t===242||t===243||t>=247&&t<=250||t===252||t===254||t===257||t===273||t===275||t===283||t===294||t===295||t===299||t>=305&&t<=307||t===312||t>=319&&t<=322||t===324||t>=328&&t<=331||t===333||t===338||t===339||t===358||t===359||t===363||t===462||t===464||t===466||t===468||t===470||t===472||t===474||t===476||t===593||t===609||t===708||t===711||t>=713&&t<=715||t===717||t===720||t>=728&&t<=731||t===733||t===735||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||t===1025||t>=1040&&t<=1103||t===1105||t===8208||t>=8211&&t<=8214||t===8216||t===8217||t===8220||t===8221||t>=8224&&t<=8226||t>=8228&&t<=8231||t===8240||t===8242||t===8243||t===8245||t===8251||t===8254||t===8308||t===8319||t>=8321&&t<=8324||t===8364||t===8451||t===8453||t===8457||t===8467||t===8470||t===8481||t===8482||t===8486||t===8491||t===8531||t===8532||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||t===8585||t>=8592&&t<=8601||t===8632||t===8633||t===8658||t===8660||t===8679||t===8704||t===8706||t===8707||t===8711||t===8712||t===8715||t===8719||t===8721||t===8725||t===8730||t>=8733&&t<=8736||t===8739||t===8741||t>=8743&&t<=8748||t===8750||t>=8756&&t<=8759||t===8764||t===8765||t===8776||t===8780||t===8786||t===8800||t===8801||t>=8804&&t<=8807||t===8810||t===8811||t===8814||t===8815||t===8834||t===8835||t===8838||t===8839||t===8853||t===8857||t===8869||t===8895||t===8978||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||t===9632||t===9633||t>=9635&&t<=9641||t===9650||t===9651||t===9654||t===9655||t===9660||t===9661||t===9664||t===9665||t>=9670&&t<=9672||t===9675||t>=9678&&t<=9681||t>=9698&&t<=9701||t===9711||t===9733||t===9734||t===9737||t===9742||t===9743||t===9756||t===9758||t===9792||t===9794||t===9824||t===9825||t>=9827&&t<=9829||t>=9831&&t<=9834||t===9836||t===9837||t===9839||t===9886||t===9887||t===9919||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||t===9955||t===9960||t===9961||t>=9963&&t<=9969||t===9972||t>=9974&&t<=9977||t===9979||t===9980||t===9982||t===9983||t===10045||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||t===65533||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||t===127375||t===127376||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}function Xl(t){return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510}function xl(t){return t>=4352&&t<=4447||t===8986||t===8987||t===9001||t===9002||t>=9193&&t<=9196||t===9200||t===9203||t===9725||t===9726||t===9748||t===9749||t>=9776&&t<=9783||t>=9800&&t<=9811||t===9855||t>=9866&&t<=9871||t===9875||t===9889||t===9898||t===9899||t===9917||t===9918||t===9924||t===9925||t===9934||t===9940||t===9962||t===9970||t===9971||t===9973||t===9978||t===9981||t===9989||t===9994||t===9995||t===10024||t===10060||t===10062||t>=10067&&t<=10069||t===10071||t>=10133&&t<=10135||t===10160||t===10175||t===11035||t===11036||t===11088||t===11093||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||t===94192||t===94193||t>=94208&&t<=100343||t>=100352&&t<=101589||t>=101631&&t<=101640||t>=110576&&t<=110579||t>=110581&&t<=110587||t===110589||t===110590||t>=110592&&t<=110882||t===110898||t>=110928&&t<=110930||t===110933||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||t===126980||t===127183||t===127374||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t===127568||t===127569||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||t===127988||t>=127992&&t<=128062||t===128064||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||t===128378||t===128405||t===128406||t===128420||t>=128507&&t<=128591||t>=128640&&t<=128709||t===128716||t>=128720&&t<=128722||t>=128725&&t<=128727||t>=128732&&t<=128735||t===128747||t===128748||t>=128756&&t<=128764||t>=128992&&t<=129003||t===129008||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129673||t>=129679&&t<=129734||t>=129742&&t<=129756||t>=129759&&t<=129769||t>=129776&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}function Wl(t){if(!Number.isSafeInteger(t))throw TypeError(`Expected a code point, got \`${typeof t}\`.`)}function Ml(t,{ambiguousAsWide:i=!1}={}){if(Wl(t),Xl(t)||xl(t)||i&&Yl(t))return 2;return 1}var zl=()=>{return/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g},Ql=globalThis.Intl?.Segmenter?new Intl.Segmenter:{segment:(t)=>t.split("")},Ol=/^\p{Default_Ignorable_Code_Point}$/u;function Jl(t,i={}){if(typeof t!=="string"||t.length===0)return 0;let{ambiguousIsNarrow:u=!0,countAnsiEscapeCodes:D=!1}=i;if(!D)t=jl(t);if(t.length===0)return 0;let r=0,n={ambiguousAsWide:!u};for(let{segment:e}of Ql.segment(t)){let l=e.codePointAt(0);if(l<=31||l>=127&&l<=159)continue;if(l>=8203&&l<=8207||l===65279)continue;if(l>=768&&l<=879||l>=6832&&l<=6911||l>=7616&&l<=7679||l>=8400&&l<=8447||l>=65056&&l<=65071)continue;if(l>=55296&&l<=57343)continue;if(l>=65024&&l<=65039)continue;if(Ol.test(e))continue;if(zl().test(e)){r+=2;continue}r+=Ml(l,n)}return r}function Kl(){let{env:t}=yn,{TERM:i,TERM_PROGRAM:u}=t;if(yn.platform!=="win32")return i!=="linux";return Boolean(t.WT_SESSION)||Boolean(t.TERMINUS_SUBLIME)||t.ConEmuTask==="{cmd::Cmder}"||u==="Terminus-Sublime"||u==="vscode"||i==="xterm-256color"||i==="alacritty"||i==="rxvt-unicode"||i==="rxvt-unicode-256color"||t.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Hl={info:"cyan",fail:"red",success:"green",ready:"green",start:"magenta"},ol={0:"red",1:"yellow"},Gl=Kl(),Rt=(t,i)=>Gl?t:i,Bn={error:Rt("✖","×"),fatal:Rt("✖","×"),ready:Rt("✔","√"),warn:Rt("⚠","‼"),info:Rt("ℹ","i"),success:Rt("✔","√"),debug:Rt("⚙","D"),trace:Rt("→","→"),fail:Rt("✖","×"),start:Rt("◐","o"),log:""};function Tn(t){if(typeof Intl!=="object"||!Intl.Segmenter)return ot(t).length;return Jl(t)}class re extends OD{formatStack(t,i,u){let D=" ".repeat((u?.errorLevel||0)+1);return`
89
+ ${D}`+Zn(t,i).map((r)=>" "+r.replace(/^at +/,(n)=>ft.gray(n)).replace(/\((.+)\)/,(n,e)=>`(${ft.cyan(e)})`)).join(`
90
+ ${D}`)}formatType(t,i,u){let D=Hl[t.type]||ol[t.level]||"gray";if(i)return kl(D)(ft.black(` ${t.type.toUpperCase()} `));let r=typeof Bn[t.type]==="string"?Bn[t.type]:t.icon||t.type;return r?Ll(D)(r):""}formatLogObj(t,i){let[u,...D]=this.formatArgs(t.args,i).split(`
91
+ `);if(t.type==="box")return el(lu(u+(D.length>0?`
92
+ `+D.join(`
93
+ `):"")),{title:t.title?lu(t.title):void 0,style:t.style});let r=this.formatDate(t.date,i),n=r&&ft.gray(r),e=t.badge??t.level<2,l=this.formatType(t,e,i),f=t.tag?ft.gray(t.tag):"",c,F=this.filterAndJoin([l,lu(u)]),h=this.filterAndJoin(i.columns?[f,n]:[f]),E=(i.columns||0)-Tn(F)-Tn(h)-2;if(c=E>0&&(i.columns||0)>=80?F+" ".repeat(E)+h:(h?`${ft.gray(`[${h}]`)} `:"")+F,c+=lu(D.length>0?`
94
+ `+D.join(`
95
+ `):""),t.type==="trace"){let a=Error("Trace: "+t.message);c+=this.formatStack(a.stack||"",a.message)}return e?`
96
+ `+c+`
97
+ `:c}}function lu(t){return t.replace(/`([^`]+)`/gm,(i,u)=>ft.cyan(u)).replace(/\s+_([^_]+)_\s+/gm,(i,u)=>` ${ft.underline(u)} `)}function Ll(t="white"){return ft[t]||ft.white}function kl(t="bgWhite"){return ft[`bg${t[0].toUpperCase()}${t.slice(1)}`]||ft.bgWhite}function ql(t={}){let i=pl();if(process.env.CONSOLA_LEVEL)i=Number.parseInt(process.env.CONSOLA_LEVEL)??i;return kf({level:i,defaults:{level:i},stdout:process.stdout,stderr:process.stderr,prompt:(...u)=>import("./chunk-dz3837t8.js").then((D)=>D.prompt(...u)),reporters:t.reporters||[t.fancy??!(al||De)?new re:new OD],...t})}function pl(){if(sl)return it.debug;if(De)return it.warn;return it.info}var Ai=ql();async function Vl(t,i){if(Tu.platform()!=="darwin")return!1;try{let u=mn(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"";if(!u)return m(S.TRUST,"Could not extract certificate fingerprint",i),!1;try{if(mn("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256 2>/dev/null || true").toString().includes(u))return m(S.TRUST,"Certificate fingerprint found in system keychain",i),!0}catch{}return m(S.TRUST,"Certificate fingerprint not found in system keychain",i),!1}catch(u){return m(S.TRUST,`Error checking certificate trust: ${u}`,i),!1}}var bl={platform:"darwin",async addCertificate(t,i){if(await Vl(t,i?.verbose)){m(S.TRUST,"Certificate is already trusted, skipping trust store update",i?.verbose),Ai.success("Certificate is already trusted in system keychain");return}m(S.TRUST,"Adding certificate to macOS keychain",i?.verbose),await Jt(`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ${t}`)},async removeCertificate(t,i,u){let D=u||H.commonName;m(S.TRUST,`Removing certificate ${D} from macOS keychain`,i?.verbose);try{await Jt(`sudo security delete-certificate -c "${D}" /Library/Keychains/System.keychain`),m(S.TRUST,`Removed certificate ${D} from macOS keychain`,i?.verbose)}catch(r){throw m(S.TRUST,`Error removing certificate: ${r}`,i?.verbose),r}}},gl={platform:"win32",async addCertificate(t,i){m(S.TRUST,"Adding certificate to Windows certificate store",i?.verbose),await Jt(`certutil -f -v -addstore -enterprise Root ${t}`)},async removeCertificate(t,i,u){let D=u||H.commonName;m(S.TRUST,`Removing certificate ${D} from Windows certificate store`,i?.verbose);try{await Jt(`certutil -delstore -enterprise Root "${D}"`),m(S.TRUST,`Removed certificate ${D} from Windows certificate store`,i?.verbose)}catch(r){throw m(S.TRUST,`Error removing certificate: ${r}`,i?.verbose),r}}},vl={platform:"linux",async addCertificate(t,i){m(S.TRUST,"Adding certificate to Linux certificate store",i?.verbose);let u=Tu.homedir(),D=Ct.LINUX_CERT_DB_FILENAME,r=Ct.LINUX_TRUST_ARGS;m(S.TRUST,`Searching for certificate databases in ${u}`,i?.verbose);let n=SD(u,D);if(n.length===0){Ai.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let e of n){m(S.TRUST,`Processing certificate database in ${e}`,i?.verbose);try{m(S.TRUST,`Attempting to delete existing cert for ${H.commonName}`,i?.verbose),await Jt(`certutil -d sql:${e} -D -n ${H.commonName}`)}catch(l){m(S.TRUST,`Warning: Error deleting existing cert: ${l}`,i?.verbose),console.warn(`Error deleting existing cert: ${l}`)}m(S.TRUST,`Adding new certificate to ${e}`,i?.verbose),await Jt(`certutil -d sql:${e} -A -t ${r} -n ${H.commonName} -i ${t}`),Ai.info(`Cert added to ${e}`)}},async removeCertificate(t,i,u){let D=u||H.commonName;m(S.TRUST,`Removing certificate ${D} from Linux certificate store`,i?.verbose);let r=Tu.homedir(),n=Ct.LINUX_CERT_DB_FILENAME;m(S.TRUST,`Searching for certificate databases in ${r}`,i?.verbose);let e=SD(r,n);if(e.length===0){Ai.warn("No certificate databases found. Cannot remove certificate.");return}for(let l of e){m(S.TRUST,`Processing certificate database in ${l}`,i?.verbose);try{await Jt(`certutil -d sql:${l} -D -n "${D}"`),Ai.info(`Cert removed from ${l}`)}catch(f){m(S.TRUST,`Error removing cert from ${l}: ${f}`,i?.verbose),console.warn(`Error removing cert from ${l}: ${f}`)}}}},Pl={darwin:bl,win32:gl,linux:vl};async function JD(t,i,u){m(S.TRUST,`Adding certificate to system trust store with options: ${JSON.stringify(u)}`,u?.verbose),m(S.TRUST,"Storing certificate and private key",u?.verbose);let D=vn(t,u);m(S.TRUST,"Storing CA certificate",u?.verbose);let r=Pn(i,u),n=Tu.platform();m(S.TRUST,`Detected platform: ${n}`,u?.verbose);let e=Pl[n];if(!e){let l=`Unsupported platform: ${n}`;throw m(S.TRUST,`Error: ${l}`,u?.verbose),Error(l)}return await e.addCertificate(r,u),m(S.TRUST,"Certificate successfully added to system trust store",u?.verbose),D}var T={info:(...t)=>console.log("[info]",...t),success:(...t)=>console.log("[success]",...t),warn:(...t)=>console.warn("[warn]",...t),error:(...t)=>console.error("[error]",...t),debug:(...t)=>console.debug("[debug]",...t),log:(...t)=>console.log(...t),start:(...t)=>console.log("[start]",...t),box:(...t)=>console.log("[box]",...t)};var Lt=null;function ne(t){let i=new Set;i.add(t);let u=t.split(".");if(u.length>=2)i.add(`*.${u.slice(1).join(".")}`);return Array.from(i)}function Fe(t){let u=oD(t).replace(/\*/g,"wildcard"),D=et(Si(),".stacks","ssl"),r=D;if(typeof t?.https==="object")return r=t.https.basePath&&t.https.basePath.trim()!==""?t.https.basePath:D,{caCertPath:t.https.caCertPath||et(r,`${u}.ca.crt`),certPath:t.https.certPath||et(r,`${u}.crt`),keyPath:t.https.keyPath||et(r,`${u}.key`)};return{caCertPath:et(r,`${u}.ca.crt`),certPath:et(r,`${u}.crt`),keyPath:et(r,`${u}.key`)}}function ee(t){let i=new Set;if(Nu(t))t.proxies.forEach((u)=>{let D=u.to||"rpx.localhost";ne(D).forEach((r)=>i.add(r))});else if(le(t)){let u=t.to||"rpx.localhost";ne(u).forEach((D)=>i.add(D))}else i.add("rpx.localhost");return i.add("localhost"),i.add("*.localhost"),i}async function E2(t){s("ssl","Loading SSL configuration",t.verbose);let i={...vi,...t};if(t.https=kt(i),!t.https?.keyPath&&!t.https?.certPath)return s("ssl","No SSL configuration provided",t.verbose),null;if(t.https?.keyPath&&!t.https?.certPath||!t.https?.keyPath&&t.https?.certPath){let u=!t.https?.keyPath?"keyPath":"certPath";throw s("ssl",`Invalid SSL configuration - missing ${u}`,t.verbose),Error(`SSL Configuration requires both keyPath and certPath. Missing: ${u}`)}try{if(!t.https?.keyPath||!t.https?.certPath)return null;try{s("ssl","Reading SSL certificate files",t.verbose);let u=await P.readFile(t.https?.keyPath,"utf8"),D=await P.readFile(t.https?.certPath,"utf8");return s("ssl","SSL configuration loaded successfully",t.verbose),{key:u,cert:D}}catch(u){return s("ssl",`Failed to read certificates: ${u}`,t.verbose),null}}catch(u){throw s("ssl",`SSL configuration error: ${u}`,t.verbose),u}}async function y2(t){if(Tt.platform==="darwin")return Zl(t);if(Tt.platform==="linux")try{let{exec:i}=await import("node:child_process");return await new Promise((u)=>{i(`sudo cp "${t}" /usr/local/share/ca-certificates/ && sudo update-ca-certificates`,(D)=>{if(!D)u(!0);else i(`sudo cp "${t}" /etc/pki/ca-trust/source/anchors/ && sudo update-ca-trust extract`,(r)=>{u(!r)})})})}catch{return!1}return!1}async function Zl(t){if(Tt.platform!=="darwin")return!1;try{if(await LD(t,{verbose:!1,regenerateUntrustedCerts:!0}))return s("ssl","Certificate is already trusted, skipping trust operation",!1),!0;s("ssl","Trusting certificate via macOS security command",!1);try{return HD(`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${t}"`),!0}catch{try{return Xt(`security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db "${t}"`),!0}catch{return!1}}}catch{return!1}}async function GD(t){if(Lt){s("ssl","Using cached SSL configuration",t.verbose);return}let i=Nu(t)?t.proxies.map((f)=>f.to):[t.to];s("ssl",`Generating certificate for domains: ${i.join(", ")}`,t.verbose);let u=kt(t,t.verbose);if(t.verbose)T.info("Generating Root CA certificate...");let D=await zD(u),r=kt(t,t.verbose);if(t.verbose)T.info(`Generating host certificate for: ${i.join(", ")}`);let n=await QD({...r,rootCA:{certificate:D.certificate,privateKey:D.privateKey}});try{let f=r.basePath||et(Si(),".stacks","ssl");await P.mkdir(f,{recursive:!0}),await Promise.all([P.writeFile(r.certPath,n.certificate),P.writeFile(r.keyPath,n.privateKey),P.writeFile(r.caCertPath,D.certificate)]),s("ssl","Certificate files saved successfully",t.verbose)}catch(f){throw s("ssl",`Error saving certificate files: ${f}`,t.verbose),Error(`Failed to save certificate files: ${f}`)}if(await LD(r.certPath,{verbose:t.verbose,regenerateUntrustedCerts:!0})){if(s("ssl","Certificate is already trusted, skipping trust store update",t.verbose),t.verbose)T.success("Certificate is already trusted in system trust store");if(Lt={key:n.privateKey,cert:n.certificate,ca:D.certificate},t.verbose)T.success(`Certificate generated successfully for ${i.length} domain${i.length>1?"s":""}`);return}if(t.verbose)T.info("Adding certificate to system trust store (may require sudo permission)...");let l=!1;if(Tt.platform==="darwin")try{let f=`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.caCertPath}" && security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.certPath}"`;if(HD(f),t.verbose)T.success("Successfully added CA and host certificates to system trust store");try{Xt(`security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db "${r.certPath}"`,{stdio:"pipe"})}catch{}l=!0;let c=r.basePath||et(Si(),".stacks","ssl"),F=et(c,"trust-rpx-cert.sh"),h=`#!/bin/bash
98
+ echo "Trusting RPX certificate for domains: ${i.join(", ")}"
99
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.caCertPath}"
100
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.certPath}"
101
+ echo "Certificates trusted! Please restart your browser."
102
+ echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
103
+ `;await P.writeFile(F,h,{mode:493})}catch(f){if(t.verbose)T.warn(`Could not add certificate to trust store automatically: ${f}`);let c=r.basePath||et(Si(),".stacks","ssl"),F=et(c,"trust-rpx-cert.sh"),h=`#!/bin/bash
104
+ echo "Trusting RPX certificate for domains: ${i.join(", ")}"
105
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.caCertPath}"
106
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.certPath}"
107
+ echo "Certificates trusted! Please restart your browser."
108
+ echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
109
+ `;if(await P.writeFile(F,h,{mode:493}),t.verbose)T.info(`Created a trust helper script at: ${F}`),T.info(`If you're still having certificate issues, run: sh ${F}`)}else if(Tt.platform==="linux")try{let{exec:f}=await import("node:child_process"),c="/usr/local/share/ca-certificates/rpx",F=`
110
+ mkdir -p "/usr/local/share/ca-certificates/rpx" 2>/dev/null || true
111
+ cp "${r.caCertPath}" "/usr/local/share/ca-certificates/rpx/"
112
+ cp "${r.certPath}" "/usr/local/share/ca-certificates/rpx/"
113
+ update-ca-certificates
114
+ echo "RPX certificates installed. Please restart your browser."
115
+ `,h=et(KD.tmpdir(),`rpx-trust-${Date.now()}.sh`);await P.writeFile(h,F,{mode:493}),await new Promise((E)=>{f(`sudo bash "${h}"`,(a)=>{if(a){if(t.verbose)T.warn(`Could not trust certificates: ${a}`);E(!1)}else{if(t.verbose)T.success("Successfully added certificates to system trust store");E(!0)}})}),await P.unlink(h).catch(()=>{}),l=!0}catch(f){if(t.verbose)T.warn(`Failed to trust certificates: ${f}`)}else if(Tt.platform==="win32")try{let f=`
116
+ $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("${r.caCertPath.replace(/\//g,"\\")}")
117
+ $store = New-Object System.Security.Cryptography.X509Certificates.X509Store("ROOT", "LocalMachine")
118
+ $store.Open("ReadWrite")
119
+ $store.Add($cert)
120
+ $store.Close()
121
+ Write-Host "Certificate trusted successfully!"
122
+ `,c=et(KD.tmpdir(),"rpx-trust.ps1");if(await P.writeFile(c,f),Xt(`powershell -ExecutionPolicy Bypass -File "${c}"`),t.verbose)T.success("Successfully added certificate to Windows trust store");l=!0}catch(f){if(t.verbose)T.warn(`Could not trust certificate: ${f}`)}else try{await JD(n,D.certificate,r),l=!0}catch(f){if(t.verbose)T.warn(`Could not add certificate to trust store: ${f}`)}if(Lt={key:n.privateKey,cert:n.certificate,ca:D.certificate},t.verbose)T.success(`Certificate generated successfully for ${i.length} domain${i.length>1?"s":""}`);if(!l&&t.verbose)T.warn('If you see certificate warnings in Chrome/Arc, type "thisisunsafe" on the warning page'),T.warn("This will bypass the warning and you should only need to do it once")}async function Ri(t){if(!t)return null;if(Lt)return Lt;let i=kt(t);try{let[u,D,r]=await Promise.all([P.access(i.keyPath).then(()=>!0).catch(()=>!1),P.access(i.certPath).then(()=>!0).catch(()=>!1),i.caCertPath?P.access(i.caCertPath).then(()=>!0).catch(()=>!1):Promise.resolve(!1)]);if(!u||!D)return s("ssl",`Certificate files don't exist: key=${u}, cert=${D}, paths: ${i.keyPath}, ${i.certPath}`,t.verbose),null;let n="regenerateUntrustedCerts"in t,e=t.regenerateUntrustedCerts,l=n?e!==!1:!0;if(s("ssl",`Trust check: hasFlag=${n}, flagValue=${e}, shouldCheckTrust=${l}`,t.verbose),!(l?await LD(i.certPath,t):!0))return s("ssl","Certificate exists but is not trusted, will regenerate",t.verbose),null;let[c,F,h]=await Promise.all([P.readFile(i.keyPath,"utf8"),P.readFile(i.certPath,"utf8"),r&&i.caCertPath?P.readFile(i.caCertPath,"utf8"):Promise.resolve(void 0)]);if(h&&!h.includes("-----BEGIN CERTIFICATE-----"))return s("ssl","Invalid root CA certificate content, will regenerate",t.verbose),null;if(Nu(t))try{let{X509Certificate:E}=await import("node:crypto"),A=new E(F).subjectAltName||"",C=t.proxies.map((w)=>w.to).filter((w)=>!A.includes(`DNS:${w}`));if(C.length>0)return s("ssl",`Certificate missing SANs for: ${C.join(", ")}, will regenerate`,t.verbose),null}catch(E){s("ssl",`Could not verify cert SANs: ${E}`,t.verbose)}return s("ssl","Successfully loaded existing certificates",t.verbose),Lt={key:c,cert:F,ca:h},Lt}catch(u){return s("ssl",`Error checking existing certificates: ${u}`,t.verbose),null}}function kt(t,i){let u=oD(t);s("ssl",`Primary domain: ${u}`,i);let D=Fe(t),r=et(Si(),".stacks","ssl");if(typeof t.https==="object"){let n=t.https.basePath&&t.https.basePath.trim()!==""?t.https.basePath:r,e={domain:u,hostCertCN:u,basePath:n,caCertPath:t.https.caCertPath||D.caCertPath,certPath:t.https.certPath||D.certPath,keyPath:t.https.keyPath||D.keyPath,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:t.https.commonName||u,organizationName:t.https.organizationName||"Local Development",countryName:t.https.countryName||"US",stateName:t.https.stateName||"California",localityName:t.https.localityName||"Playa Vista",validityDays:t.https.validityDays||825,verbose:i||!1,subjectAltNames:Array.from(ee(t)).map((l)=>({type:2,value:l}))};if(fe(t.https.rootCA))e.rootCA=t.https.rootCA;return e}return{domain:u,hostCertCN:u,basePath:r,...D,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:u,organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",validityDays:825,verbose:i||!1,subjectAltNames:Array.from(ee(t)).map((n)=>({type:2,value:n}))}}async function ae(t,i){let u=Fe({to:t,verbose:i}),D=[u.caCertPath,u.certPath,u.keyPath];s("certificates","Attempting to clean up relating certificates",i),await Promise.all(D.map((r)=>ce(r,i)))}async function LD(t,i){try{if(s("ssl",`Checking if certificate is trusted: ${t}`,i?.verbose),Tt.platform==="darwin")try{let D=Xt(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"";if(!D)return s("ssl","Could not extract certificate fingerprint",i?.verbose),!1;if(Xt("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256").toString().includes(D))return s("ssl","Certificate fingerprint found in system keychain",i?.verbose),!0;return s("ssl","Certificate fingerprint not found in system keychain",i?.verbose),!1}catch(u){return s("ssl",`Error checking certificate trust: ${u}`,i?.verbose),!1}else if(Tt.platform==="win32")try{let D=Xt(`openssl x509 -noout -subject -in "${t}"`).toString().trim().split("=").slice(1).join("=").trim()||"";if(!D)return s("ssl","Could not extract certificate subject",i?.verbose),!1;let r=`powershell -Command "Get-ChildItem -Path Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -like '*${D}*' } | Select-Object Subject"`;if(Xt(r).toString().includes(D))return s("ssl","Certificate found in trusted root store",i?.verbose),!0;return s("ssl","Certificate not found in trusted root store",i?.verbose),!1}catch(u){return s("ssl",`Error checking certificate trust on Windows: ${u}`,i?.verbose),!1}else if(Tt.platform==="linux")try{let D=Xt(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"",r=["/etc/ssl/certs","/etc/pki/tls/certs"];for(let n of r)try{if(Xt(`find ${n} -type f -exec openssl x509 -noout -fingerprint -sha256 -in {} \\; 2>/dev/null | grep "${D}"`).toString().includes(D))return s("ssl",`Certificate fingerprint found in ${n}`,i?.verbose),!0}catch{}return s("ssl","Certificate not found in system trust stores",i?.verbose),!1}catch(u){return s("ssl",`Error checking certificate trust on Linux: ${u}`,i?.verbose),!1}return s("ssl",`Platform ${Tt.platform} not supported for certificate trust check`,i?.verbose),!1}catch(u){return s("ssl",`Error checking if certificate is trusted: ${u}`,i?.verbose),!1}}import*as du from"node:net";function qt(t,i,u){return s("port",`Checking if port ${t} is in use on ${i}`,u),new Promise((D)=>{let r=du.createServer(),n=setTimeout(()=>{s("port",`Checking port ${t} timed out, assuming it's in use`,u),r.close(),D(!0)},3000);r.once("error",(e)=>{if(clearTimeout(n),e.code==="EADDRINUSE")s("port",`Port ${t} is in use`,u),D(!0);else s("port",`Error checking port ${t}: ${e.message}`,u),D(!0)}),r.once("listening",()=>{clearTimeout(n),s("port",`Port ${t} is available`,u),r.close(),D(!1)});try{r.listen(t,i)}catch(e){clearTimeout(n),s("port",`Exception checking port ${t}: ${e}`,u),D(!0)}})}async function $l(t,i,u,D=50){s("port",`Finding available port starting from ${t} (max attempts: ${D})`,u);let r=t,n=0;while(n<D){if(n++,!await qt(r,i,u))return s("port",`Found available port: ${r} after ${n} attempts`,u),r;s("port",`Port ${r} is in use, trying ${r+1} (attempt ${n}/${D})`,u),r++}throw Error(`Unable to find available port after ${D} attempts starting from ${t}`)}function he(t,i,u=5000,D){return s("port",`Testing connection to ${i}:${t}`,D),new Promise((r)=>{let n=du.connect({host:i,port:t,timeout:u});n.once("connect",()=>{s("port",`Successfully connected to ${i}:${t}`,D),n.end(),r(!0)}),n.once("timeout",()=>{s("port",`Connection to ${i}:${t} timed out`,D),n.destroy(),r(!1)}),n.once("error",(e)=>{s("port",`Failed to connect to ${i}:${t}: ${e.message}`,D),n.destroy(),r(!1)})})}class Iu{usedPorts=new Set;hostname;verbose;maxRetries;constructor(t="0.0.0.0",i,u=50){this.hostname=t,this.verbose=i,this.maxRetries=u}async getNextAvailablePort(t,i=!1){if(this.usedPorts.has(t))return this.findNextAvailablePort(t+1,i);if(await qt(t,this.hostname,this.verbose))return this.findNextAvailablePort(t+1,i);if(i){if(!await he(t,this.hostname,3000,this.verbose))return s("port",`Port ${t} is available but not connectable, trying next port`,this.verbose),this.findNextAvailablePort(t+1,i)}return this.usedPorts.add(t),t}async findNextAvailablePort(t,i=!1){let u=await $l(t,this.hostname,this.verbose,this.maxRetries);if(i){if(!await he(u,this.hostname,3000,this.verbose))if(u<t+this.maxRetries)return this.findNextAvailablePort(u+1,i);else throw Error(`Unable to find a connectable port after ${this.maxRetries} attempts`)}return this.usedPorts.add(u),u}releasePort(t){s("port",`Releasing port ${t}`,this.verbose),this.usedPorts.delete(t)}}var A2=new Iu;import{spawn as tc}from"node:child_process";import*as pt from"node:process";class _u{processes=new Map;isShuttingDown=!1;async startProcess(t,i,u){if(this.processes.has(t)){s("start",`Process ${t} is already running`,u);return}let[D,...r]=i.command.split(" "),n=i.cwd||pt.cwd();s("start",`Starting process ${t}:`,u),s("start",` Command: ${D} ${r.join(" ")}`,u),s("start",` Working directory: ${n}`,u),s("start",` Environment variables: ${JSON.stringify(i.env)}`,u);let e=tc(D,r,{cwd:n,env:{...pt.env,...i.env},shell:!0,stdio:"inherit"});return this.processes.set(t,{command:i.command,cwd:n,process:e,env:i.env}),new Promise((l,f)=>{if(e.on("error",(c)=>{if(!this.isShuttingDown)s("start",`Process ${t} failed to start: ${c}`,u),this.processes.delete(t),f(c),pt.emit("SIGINT")}),e.on("exit",(c)=>{if(!this.isShuttingDown&&c!==null&&c!==0)s("start",`Process ${t} exited with code ${c}`,u),this.processes.delete(t),f(Error(`Process ${t} exited with code ${c}`)),pt.emit("SIGINT")}),u)e.stdout?.on("data",(c)=>{s("process",`[${t}] ${c.toString().trim()}`,!0)}),e.stderr?.on("data",(c)=>{s("process",`[${t}] ERR: ${c.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&e.killed)this.processes.delete(t),f(Error(`Process ${t} was killed during startup`));else s("start",`Process ${t} started successfully`,u),l()},1000)})}async stopProcess(t,i){let u=this.processes.get(t);if(!u?.process){s("start",`No process found for ${t}`,i);return}return s("start",`Stopping process ${t}`,i),new Promise((D)=>{if(!u.process){D();return}u.process.once("exit",()=>{this.processes.delete(t),s("start",`Process ${t} stopped`,i),D()});try{u.process.kill("SIGTERM"),setTimeout(()=>{if(u.process){s("start",`Force killing process ${t}`,i);try{u.process.kill("SIGKILL")}catch(r){}}},3000)}catch(r){s("start",`Error stopping process ${t}: ${r}`,i),this.processes.delete(t),D()}})}async stopAll(t){if(this.isShuttingDown){s("start","Already shutting down, skipping duplicate stopAll call",t);return}this.isShuttingDown=!0,s("start","Stopping all processes",t);let i=Array.from(this.processes.keys()).map((u)=>this.stopProcess(u,t).catch((D)=>{T.error(`Failed to stop process ${u}:`,D)}));await Promise.allSettled(i),this.processes.clear(),this.isShuttingDown=!1}isRunning(t){let i=this.processes.get(t);return!!i?.process&&!i.process.killed}}var R2=new _u;import*as Vt from"node:http";import*as Ee from"node:http2";import*as ye from"node:net";import*as o from"node:process";var ju=new _u,ic=new Iu("0.0.0.0"),Ni=new Set,kD=!1,Uu=null,qD=null;async function Yu(t){if(kD)return s("cleanup","Cleanup already in progress, skipping",t?.verbose),qD||Promise.resolve();kD=!0,s("cleanup","Starting cleanup process",t?.verbose),qD=new Promise((i)=>{Uu=i});try{await ju.stopAll(t?.verbose),T.info("Shutting down proxy servers...");let i=[],u=Array.from(Ni).map((D)=>new Promise((r)=>{D.close(()=>{s("cleanup","Server closed successfully",t?.verbose),r()})}));if(i.push(...u),t?.hosts&&t.domains?.length){s("cleanup","Cleaning up hosts file entries",t?.verbose),s("cleanup",`Original domains for cleanup: ${JSON.stringify(t.domains)}`,t?.verbose);let D=t.domains.filter((r)=>{if(r==="test.local")return!0;return r!=="localhost"&&!r.startsWith("localhost.")&&r!=="127.0.0.1"});if(s("cleanup",`Filtered domains for cleanup: ${JSON.stringify(D)}`,t?.verbose),D.length>0)T.info("Cleaning up hosts file entries..."),i.push(Jr(D,t?.verbose).then(()=>{s("cleanup",`Removed hosts entries for ${D.join(", ")}`,t?.verbose)}).catch((r)=>{s("cleanup",`Failed to remove hosts entries: ${r}`,t?.verbose),T.warn(`Failed to clean up hosts file entries for ${D.join(", ")}:`,r)}))}if(t?.certs&&t.domains?.length){s("cleanup","Cleaning up SSL certificates",t?.verbose),T.info("Cleaning up SSL certificates...");let D=t.domains.map(async(r)=>{try{await ae(r,t?.verbose),s("cleanup",`Removed certificates for ${r}`,t?.verbose)}catch(n){s("cleanup",`Failed to remove certificates for ${r}: ${n}`,t?.verbose),T.warn(`Failed to clean up certificates for ${r}:`,n)}});i.push(...D)}await Promise.allSettled(i),s("cleanup","All cleanup tasks completed successfully",t?.verbose),T.success("All cleanup tasks completed successfully")}catch(i){s("cleanup",`Error during cleanup: ${i}`,t?.verbose),T.error("Error during cleanup:",i)}finally{if(Uu)Uu();Uu=null,kD=!1;let i=t&&"vitePluginUsage"in t&&t.vitePluginUsage===!0;if(o.env.NODE_ENV!=="test"&&o.env.BUN_ENV!=="test"&&!i)o.exit(0)}return qD}var pD=!1;function VD(t){if(pD){s("signal",`Received second ${t} signal, forcing exit`,!0),o.exit(1);return}pD=!0,s("signal",`Received ${t} signal, initiating cleanup`,!0),Yu().catch((i)=>{s("signal",`Cleanup failed after ${t}: ${i}`,!0),o.exit(1)}).finally(()=>{pD=!1})}o.once("SIGINT",()=>VD("SIGINT"));o.once("SIGTERM",()=>VD("SIGTERM"));o.on("uncaughtException",(t)=>{s("process",`Uncaught exception: ${t}`,!0),T.error("Uncaught exception:",t),VD("uncaughtException")});async function di(t,i,u,D=5){s("connection",`Testing connection to ${t}:${i} (retries left: ${D})`,u);let r=15000,n=Date.now();if(o.env.RPX_BYPASS_CONNECTION_TEST==="true"){s("connection",`Bypassing connection test for ${t}:${i} due to RPX_BYPASS_CONNECTION_TEST flag`,u);return}let e=()=>new Promise((l,f)=>{let c=ye.connect({host:t,port:i,timeout:3000});c.once("connect",()=>{s("connection",`Successfully connected to ${t}:${i}`,u),c.end(),l()}),c.once("timeout",()=>{s("connection",`Connection to ${t}:${i} timed out`,u),c.destroy(),f(Error("Connection timed out"))}),c.once("error",(F)=>{s("connection",`Failed to connect to ${t}:${i}: ${F}`,u),c.destroy(),f(F)})});try{await e()}catch(l){if(Date.now()-n>r){s("connection",`Connection test timed out after ${r}ms, but continuing anyway`,u),T.warn(`Connection test to ${t}:${i} timed out, but RPX will try to proceed anyway.`);return}if(l.code==="ECONNREFUSED"&&D>0)return s("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${D} retries left)`,u),await new Promise((c)=>setTimeout(c,2000)),di(t,i,u,D-1);if(D>0)try{s("connection",`Trying HTTP request to ${t}:${i}`,u),await new Promise((c,F)=>{let h=Vt.request({hostname:t,port:i,path:"/",method:"HEAD",timeout:5000},(E)=>{s("connection",`Received HTTP response with status: ${E.statusCode}`,u),c()});h.on("error",(E)=>F(E)),h.on("timeout",()=>{h.destroy(),F(Error("HTTP request timed out"))}),h.end()}),s("connection",`HTTP request to ${t}:${i} succeeded`,u);return}catch(c){return s("connection",`HTTP request to ${t}:${i} failed: ${c}`,u),s("connection",`Retrying socket connection in 2 seconds... (${D} retries left)`,u),await new Promise((F)=>setTimeout(F,2000)),di(t,i,u,D-1)}let f=`Failed to connect to ${t}:${i} after ${5-D} attempts: ${l.message}`;s("connection",`${f}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,u),T.warn(f),T.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 we(t){s("server",`Starting server with options: ${JSON.stringify(t)}`,t.verbose);let i=new URL((t.from?.startsWith("http")?t.from:`http://${t.from}`)||"localhost:5173"),u=new URL((t.to?.startsWith("http")?t.to:`http://${t.to}`)||"rpx.localhost"),D=Number.parseInt(i.port)||(i.protocol.includes("https:")?443:80),r=[u.hostname];if(!u.hostname.includes("localhost")&&!u.hostname.includes("127.0.0.1")){s("hosts",`Checking if hosts file entry exists for: ${u.hostname}`,t?.verbose);try{if(!(await yi(r,t.verbose))[0]){T.info(`Adding ${u.hostname} to hosts file...`),T.info("This may require sudo/administrator privileges");try{await Ei(r,t.verbose)}catch(l){if(T.error("Failed to add hosts entry:",l.message),T.warn("You can manually add this entry to your hosts file:"),T.warn(`127.0.0.1 ${u.hostname}`),T.warn(`::1 ${u.hostname}`),o.platform==="win32")T.warn("On Windows:"),T.warn("1. Run notepad as administrator"),T.warn("2. Open C:\\Windows\\System32\\drivers\\etc\\hosts");else T.warn("On Unix systems:"),T.warn("sudo nano /etc/hosts")}}else s("hosts",`Host entry already exists for ${u.hostname}`,t.verbose)}catch(e){T.error("Failed to check hosts file:",e.message)}}try{await di(i.hostname,D,t.verbose)}catch(e){s("server",`Connection test failed: ${e}`,t.verbose),T.error(e.message),T.warn("Continuing with proxy setup despite connection test failure..."),T.info("If you need to bypass connection testing, set environment variable RPX_BYPASS_CONNECTION_TEST=true")}let n=t._cachedSSLConfig||null;if(t.https)try{if(t.https===!0)t.https=kt({...t,to:u.hostname});if(n=await Ri({...t,to:u.hostname,https:t.https}),!n){if(s("ssl",`Generating new certificates for ${u.hostname}`,t.verbose),await GD({...t,from:i.toString(),to:u.hostname,https:t.https}),n=await Ri({...t,to:u.hostname,https:t.https}),!n)throw Error(`Failed to load SSL configuration after generating certificates for ${u.hostname}`)}}catch(e){throw s("server",`SSL setup failed: ${e}`,t.verbose),e}s("server",`Setting up reverse proxy with SSL config for ${u.hostname}`,t.verbose),await Dc({...t,from:t.from||"localhost:5173",to:u.hostname,fromPort:D,sourceUrl:{hostname:i.hostname,host:i.host},ssl:n})}async function uc(t,i,u,D,r,n,e,l,f,c,F){s("proxy",`Creating proxy server ${t} -> ${i} with cleanUrls: ${c}`,f);function h(y){let C={};for(let[w,B]of Object.entries(y))if(!w.startsWith(":"))C[w]=B;return C}let E=(y,C)=>{s("request",`Incoming request: ${y.method} ${y.url}`,f);let w=y.url||"/",B=y.method||"GET";if(y instanceof Ee.Http2ServerRequest){let I=y.headers;B=I[":method"]||B,w=I[":path"]||w}if(c){if(!w.match(/\.[a-z0-9]+$/i))if(w.endsWith("/"))w=`${w}index.html`;else w=`${w}.html`}let R=h(y.headers);if(F)R.host=`${n.hostname}:${u}`,s("request",`Changed origin: setting host header to ${R.host}`,f);let _={hostname:n.hostname,port:u,path:w,method:B,headers:R};s("request",`Proxy request options: ${JSON.stringify(_)}`,f);let d=Vt.request(_,(I)=>{if(s("response",`Proxy response received with status ${I.statusCode}`,f),c&&I.statusCode===404){let k=[];if(w.endsWith(".html"))k.push(w.slice(0,-5));else if(!w.match(/\.[a-z0-9]+$/i))k.push(`${w}.html`);if(!w.endsWith("/"))k.push(`${w}/index.html`);if(k.length>0){s("cleanUrls",`Trying alternative paths: ${k.join(", ")}`,f);let mt=(bt)=>{if(bt.length===0){C.writeHead(I.statusCode||404,I.headers),I.pipe(C);return}let Ii=bt[0],Ae={..._,path:Ii},bD=Vt.request(Ae,(_i)=>{if(_i.statusCode===200)s("cleanUrls",`Found matching path: ${Ii}`,f),C.writeHead(_i.statusCode,_i.headers),_i.pipe(C);else mt(bt.slice(1))});bD.on("error",()=>mt(bt.slice(1))),bD.end()};mt(k);return}}let xt={...I.headers,"Strict-Transport-Security":"max-age=31536000; includeSubDomains; preload","X-Content-Type-Options":"nosniff"};C.writeHead(I.statusCode||500,xt),I.pipe(C)});d.on("error",(I)=>{s("request",`Proxy request failed: ${I}`,f),T.error("Proxy request failed:",I),C.writeHead(502),C.end(`Proxy Error: ${I.message}`)}),y.pipe(d)};if(s("server",`Creating server with SSL config: ${!!e}`,f),e)return new Promise((y,C)=>{try{let w=Bun.serve({port:D,hostname:r,tls:{key:e.key,cert:e.cert,ca:e.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(B){let R=new URL(B.url);s("request",`Bun.serve received: ${B.method} ${R.pathname}`,f);let _=`http://${n.host}`,d=new URL(R.pathname+R.search,_);try{let I=new Headers(B.headers);if(I.set("host",n.host),F)I.set("origin",_);I.set("x-forwarded-for","127.0.0.1"),I.set("x-forwarded-proto","https"),I.set("x-forwarded-host",i);let xt=await fetch(d.toString(),{method:B.method,headers:I,body:B.body,redirect:"manual"}),k=new Headers(xt.headers);if(c&&R.pathname.endsWith(".html")){let mt=R.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:mt}})}return new Response(xt.body,{status:xt.status,statusText:xt.statusText,headers:k})}catch(I){return s("request",`Proxy error: ${I}`,f),new Response(`Proxy Error: ${I}`,{status:502})}},error(B){return s("server",`Bun.serve error: ${B}`,f),new Response(`Server Error: ${B.message}`,{status:500})}});Ni.add(w),se({from:t,to:i,vitePluginUsage:l,listenPort:D,ssl:!0,cleanUrls:c,verbose:f}),y()}catch(w){C(w)}});let a=Vt.createServer(E);function A(y){return Ni.add(y),new Promise((C,w)=>{y.listen(D,r,()=>{s("server",`Server listening on port ${D}`,f),se({from:t,to:i,vitePluginUsage:l,listenPort:D,ssl:!!e,cleanUrls:c,verbose:f}),C()}),y.on("error",(B)=>{s("server",`Server error: ${B}`,f),w(B)})})}return A(a)}async function Dc(t){s("setup",`Setting up reverse proxy: ${JSON.stringify(t)}`,t.verbose);let{from:i,to:u,fromPort:D,sourceUrl:r,ssl:n,verbose:e,cleanup:l,vitePluginUsage:f,changeOrigin:c,cleanUrls:F}=t,h=80,E=443,a="0.0.0.0",A=t.portManager||ic;try{if(u&&!u.includes("localhost")&&!u.includes("127.0.0.1")){if(!(await yi([u],e))[0]){T.warn(`The hostname ${u} isn't in your hosts file. Adding it now...`);try{await Ei([u],e),T.success(`Added ${u} to your hosts file.`)}catch(R){T.error(`Failed to add ${u} to your hosts file: ${R}`),T.info(`You may need to manually add '127.0.0.1 ${u}' to your /etc/hosts file.`)}}}else if(o.platform!=="darwin"&&u&&u.includes("localhost")&&!u.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await yi([u],e))[0]){s("hosts",`${u} not found in hosts file, adding...`,e);try{await Ei([u],e)}catch(R){s("hosts",`Failed to add ${u} to hosts file: ${R}`,e)}}}if(n&&!A.usedPorts.has(h)){if(!await qt(h,a,e))s("setup","Starting HTTP redirect server",e),Ce(e),A.usedPorts.add(h);else if(s("setup","Port 80 is in use, skipping HTTP redirect",e),e)T.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let y=n?E:h,C=await qt(y,a,e),w;if(C){if(s("setup",`Port ${y} is already in use`,e),e)T.warn(`Port ${y} is already in use. This may be another instance of rpx or another service.`);if(y===443){if(w=await A.getNextAvailablePort(3443,!0),s("setup",`Using port ${w} instead of ${y}`,e),e)T.info(`Using port ${w} instead. Access your site at https://${u}:${w}`)}else if(w=await A.getNextAvailablePort(y+1000,!0),s("setup",`Using port ${w} instead of ${y}`,e),e)T.info(`Using port ${w} instead. Access your site at http://${u}:${w}`)}else w=y,A.usedPorts.add(w),s("setup",`Using standard ${y===443?"HTTPS":"HTTP"} port ${y} for ${u}`,e);await uc(i,u,D,w,a,r,n,f,e,F,c)}catch(y){s("setup",`Setup failed: ${y}`,e),T.error(`Failed to setup reverse proxy: ${y.message}`),Yu({domains:[u],hosts:typeof l==="boolean"?l:l?.hosts,certs:typeof l==="boolean"?l:l?.certs,verbose:e,vitePluginUsage:f})}}function Ce(t){s("redirect","Starting HTTP redirect server",t);let i=Vt.createServer((u,D)=>{let r=u.headers.host||"";s("redirect",`Redirecting request from ${r}${u.url} to HTTPS`,t),D.writeHead(301,{Location:`https://${r}${u.url}`}),D.end()}).listen(80);Ni.add(i),s("redirect","HTTP redirect server started",t)}function Q2(t){let i={...vi,...t};s("proxy",`Starting proxy with options: ${JSON.stringify(i)}`,i?.verbose);let u=i.to||"",D=u.split(".").pop()?.toLowerCase()||"",r=o.platform==="darwin"&&u&&!u.includes("localhost")&&!u.includes("127.0.0.1"),n=["dev","app","page","new","day","foo"],e=["test","localhost","local","example","invalid"];if(r&&n.includes(D)&&i?.verbose)T.warn(`The .${D} TLD may not work reliably for local development`),T.info(` Google owns .${D} with HSTS preloading, which can bypass local DNS`),T.info(" Consider using a reserved TLD: .test, .localhost, or .local");if(r)import("./chunk-61re8msk.js").then(({startDnsServer:f,setupResolver:c})=>{f([u],i.verbose).then((F)=>{if(F)c(i.verbose,[u]).then(()=>{if(i.verbose)if(e.includes(D))T.success(`DNS server started for .${D} domains`);else T.success(`DNS server started for .${D} domains (hosts file entry also added)`)});else s("dns",`Could not start DNS server - ${u} may not resolve in browser`,i.verbose)})}).catch((f)=>{s("dns",`Failed to start DNS server: ${f}`,i.verbose)});let l={from:i.from,to:i.to,cleanUrls:i.cleanUrls,https:kt(i),cleanup:i.cleanup,vitePluginUsage:i.vitePluginUsage,changeOrigin:i.changeOrigin,verbose:i.verbose,regenerateUntrustedCerts:i.regenerateUntrustedCerts};s("proxy",`Server options: ${JSON.stringify(l)}`,i.verbose),we(l).catch((f)=>{s("proxy",`Failed to start proxy: ${f}`,i.verbose),T.error(`Failed to start proxy: ${f.message}`),Yu({domains:[i.to],hosts:typeof i.cleanup==="boolean"?i.cleanup:i.cleanup?.hosts,certs:typeof i.cleanup==="boolean"?i.cleanup:i.cleanup?.certs,verbose:i.verbose})})}function rc(t){return t?.verbose||!1}async function O2(t){let i={from:"localhost:5173",to:"rpx.localhost",https:!1,cleanup:{hosts:!0,certs:!1},vitePluginUsage:!1,verbose:!1,cleanUrls:!1,changeOrigin:!1,regenerateUntrustedCerts:!1};if(t)i={...i,...t};let u=rc(i);if(s("config",`Starting with config: ${JSON.stringify(i,null,2)}`,u),s("config",`Is multi-proxy? ${"proxies"in i}`,u),"proxies"in i&&Array.isArray(i.proxies)){s("servers",`Found ${i.proxies.length} proxies in config`,u);for(let a of i.proxies)if(a.start){let A=`${a.from}-${a.to}`;try{s("watch",`Starting command for ${A} with command: ${a.start.command}`,u),T.info(`Starting command for ${A}...`),await ju.startProcess(A,a.start,u);let y=new URL(a.from.startsWith("http")?a.from:`http://${a.from}`),C=y.hostname||"localhost",w=Number(y.port)||80;try{await di(C,w,u),s("watch",`Dev server is ready at ${C}:${w}`,u)}catch(B){s("watch",`Connection check failed, but continuing with proxy setup: ${B}`,u),T.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(y){throw s("watch",`Failed to start command for ${A}: ${y}`,u),Error(`Failed to start command for ${A}: ${y}`)}}else s("watch",`No start command for proxy ${a.from} -> ${a.to}`,u)}else if("start"in i&&i.start){s("watch","Found start command in single proxy config",u);let a=`${i.from}-${i.to}`;try{if(i.start)s("watch",`Starting command: ${i.start.command}`,u),await ju.startProcess(a,i.start,u);let A=new URL(i.from?.startsWith("http")?i.from:`http://${i.from}`),y=A.hostname||"localhost",C=Number(A.port)||80;try{await di(y,C,u),s("watch",`Dev server is ready at ${y}:${C}`,u)}catch(w){s("watch",`Connection check failed, but continuing with proxy setup: ${w}`,u),T.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(A){throw s("watch",`Failed to run start command: ${A}`,u),Error(`Failed to run start command: ${A}`)}}else s("watch","No start command found in config",u);let D="proxies"in i&&Array.isArray(i.proxies)?i.proxies[0]?.to:("to"in i)?i.to:"rpx.localhost";if(i.https){let a=await Ri(i);if(!a){if(s("ssl",`No valid or trusted certificates found for ${D}, generating new ones`,i.verbose),await GD(i),a=await Ri(i),!a)throw Error(`Failed to load SSL certificates after generation for ${D}`)}else s("ssl",`Using existing and trusted certificates for ${D}`,i.verbose);i._cachedSSLConfig=a}let r="proxies"in i&&Array.isArray(i.proxies)?i.proxies.map((a)=>({...a,https:i.https,cleanup:i.cleanup,cleanUrls:a.cleanUrls??("cleanUrls"in i?i.cleanUrls:!1),vitePluginUsage:i.vitePluginUsage,changeOrigin:a.changeOrigin??i.changeOrigin,verbose:u,_cachedSSLConfig:i._cachedSSLConfig})):[{from:"from"in i?i.from:"localhost:5173",to:"to"in i?i.to:"rpx.localhost",cleanUrls:"cleanUrls"in i?i.cleanUrls:!1,https:i.https,cleanup:i.cleanup,vitePluginUsage:i.vitePluginUsage,start:"start"in i?i.start:void 0,changeOrigin:i.changeOrigin,verbose:u,_cachedSSLConfig:i._cachedSSLConfig}],n=r.map((a)=>a.to||"rpx.localhost"),e=i._cachedSSLConfig,l=n.filter((a)=>a&&!a.includes("localhost")&&!a.includes("127.0.0.1")),f=["dev","app","page","new","day","foo"],c=["test","localhost","local","example","invalid"],F=[...new Set(l.map((a)=>a.split(".").pop()?.toLowerCase()))],h=F.filter((a)=>!!a&&f.includes(a));if(h.length>0&&u)T.warn(`The following TLDs may not work reliably for local development: ${h.map((a)=>`.${a}`).join(", ")}`),T.info(" These TLDs have HSTS preloading which can bypass local DNS"),T.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(o.platform==="darwin"&&l.length>0){let{startDnsServer:a,setupResolver:A}=await import("./chunk-61re8msk.js");if(await a(l,u)){if(await A(u,l),u)if(F.every((w)=>!!w&&c.includes(w)))T.success(`DNS server started for ${F.map((w)=>`.${w}`).join(", ")} domains`);else T.success(`DNS server started for ${F.map((w)=>`.${w}`).join(", ")} domains (hosts file entries also added)`)}else s("dns","Could not start DNS server - custom domains may not resolve",u)}let E=async()=>{s("cleanup","Starting cleanup handler",i.verbose);try{let{stopDnsServer:a,removeResolver:A}=await import("./chunk-61re8msk.js");a(i.verbose),await A(i.verbose)}catch(a){s("cleanup",`Error stopping DNS server: ${a}`,i.verbose)}try{await ju.stopAll(i.verbose)}catch(a){s("cleanup",`Error stopping processes: ${a}`,i.verbose)}await Yu({domains:n,hosts:typeof i.cleanup==="boolean"?i.cleanup:i.cleanup?.hosts,certs:typeof i.cleanup==="boolean"?i.cleanup:i.cleanup?.certs,verbose:i.verbose||!1})};if(o.on("SIGINT",E),o.on("SIGTERM",E),o.on("uncaughtException",(a)=>{s("process",`Uncaught exception: ${a}`,!0),console.error("Uncaught exception:",a),E()}),e&&r.length>1){s("proxies",`Creating shared HTTPS server for ${r.length} domains`,u);let a=new Map;for(let w of r){let B=w.to||"rpx.localhost",R=new URL(w.from?.startsWith("http")?w.from:`http://${w.from}`),_=Number.parseInt(R.port)||80;if(a.set(B,{fromPort:_,sourceHost:R.host,cleanUrls:w.cleanUrls||!1,changeOrigin:w.changeOrigin||!1}),s("proxies",`Route: ${B} → ${R.host}`,u),!B.includes("localhost")&&!B.includes("127.0.0.1"))try{if(!(await yi([B],u))[0])await Ei([B],u)}catch{s("hosts",`Could not add hosts entry for ${B}`,u)}}if(!await qt(80,"0.0.0.0",u))Ce(u);let y=443;if(await qt(y,"0.0.0.0",u)){if(s("proxies",`Port ${y} is already in use, cannot start shared proxy`,u),u)T.warn(`Port ${y} is in use. Shared HTTPS proxy cannot start.`);return}try{let w=Bun.serve({port:y,hostname:"0.0.0.0",tls:{key:e.key,cert:e.cert,ca:e.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(B){let R=new URL(B.url),d=(B.headers.get("host")||"").split(":")[0],I=a.get(d);if(!I)return s("request",`No route found for host: ${d}`,u),new Response(`No proxy configured for ${d}`,{status:404});let xt=`http://${I.sourceHost}${R.pathname}${R.search}`;try{let k=new Headers(B.headers);if(k.set("host",I.sourceHost),I.changeOrigin)k.set("origin",`http://${I.sourceHost}`);k.set("x-forwarded-for","127.0.0.1"),k.set("x-forwarded-proto","https"),k.set("x-forwarded-host",d);let mt=await fetch(xt,{method:B.method,headers:k,body:B.body,redirect:"manual"}),bt=new Headers(mt.headers);if(I.cleanUrls&&R.pathname.endsWith(".html")){let Ii=R.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:Ii}})}return new Response(mt.body,{status:mt.status,statusText:mt.statusText,headers:bt})}catch(k){return s("request",`Proxy error for ${d}: ${k}`,u),new Response(`Proxy Error: ${k}`,{status:502})}},error(B){return s("server",`Shared proxy server error: ${B}`,u),new Response(`Server Error: ${B.message}`,{status:500})}});Ni.add(w),s("proxies",`Shared HTTPS proxy listening on port ${y} for ${a.size} domains`,u)}catch(w){s("proxies",`Failed to start shared proxy: ${w}`,u),console.error("Failed to start shared HTTPS proxy:",w),E()}}else for(let a of r)try{let A=a.to||"rpx.localhost";s("proxy",`Starting proxy for ${A} with SSL config: ${!!e}`,a.verbose),await we({from:a.from||"localhost:5173",to:A,cleanUrls:a.cleanUrls||!1,https:a.https||!1,cleanup:a.cleanup||!1,vitePluginUsage:a.vitePluginUsage||!1,verbose:a.verbose||!1,_cachedSSLConfig:e,changeOrigin:a.changeOrigin||!1})}catch(A){s("proxies",`Failed to start proxy for ${a.to}: ${A}`,a.verbose),console.error(`Failed to start proxy for ${a.to}:`,A),E()}}function se(t){if(t?.vitePluginUsage||!t?.verbose)return;if(console.log(""),console.log(` ${St.green(St.bold("rpx"))} ${St.green(`v${gD}`)}`),console.log(` ${St.green("➜")} ${St.dim(t?.from??"")} ${St.dim("➜")} ${St.cyan(t?.ssl?`https://${t?.to}`:`http://${t?.to}`)}`),t?.listenPort!==(t?.ssl?443:80))console.log(` ${St.green("➜")} Listening on port ${t?.listenPort}`);if(t?.cleanUrls)console.log(` ${St.green("➜")} Clean URLs enabled`)}
123
+ export{St as a,gD as b,vi as c,Ei as d,Jr as e,yi as f,E2 as g,y2 as h,GD as i,Ri as j,kt as k,ae as l,LD as m,qt as n,$l as o,Iu as p,A2 as q,R2 as r,Yu as s,we as t,Q2 as u,O2 as v};