@stacksjs/rpx 0.11.4 → 0.11.5

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,124 @@
1
+ import{A as Vn,B as Or,D as Ei,E as qn,G as eD,H as vn,w as Fe,x as pr,y as h}from"./chunk-cvt0dqrv.js";import{I as Q}from"./chunk-sqn04kae.js";var Ne=(t,e)=>(i)=>`\x1B[${t}m${i}\x1B[${e}m`,mt={bold:Ne(1,22),dim:Ne(2,22),green:Ne(32,39),cyan:Ne(36,39)};var Kr="0.11.5";import{homedir as Li}from"node:os";import{join as Hi,resolve as xs}from"node:path";import{existsSync as Qr,statSync as br}from"fs";import{join as ED,relative as mD,resolve as Jr}from"path";import Me from"process";import{Buffer as wt}from"buffer";import{createCipheriv as oD,createDecipheriv as CD,randomBytes as di}from"crypto";import{closeSync as Ti,createReadStream as Lr,createWriteStream as wD,existsSync as _e,fsyncSync as Hr,openSync as Gr,writeFileSync as AD}from"fs";import{access as BD,constants as Vr,mkdir as dD,readdir as Ue,rename as qr,stat as Ht,unlink as je,writeFile as gi}from"fs/promises";import{isAbsolute as TD,join as Gt,resolve as gD}from"path";import R from"process";import{pipeline as SD}from"stream/promises";import{createGzip as vr}from"zlib";import Vt from"process";import At from"process";import xe from"process";import{existsSync as pe}from"fs";import{resolve as Ni}from"path";import{existsSync as PD}from"fs";import{existsSync as ki,mkdirSync as ZD,readdirSync as $D,readFileSync as ta,writeFileSync as ea}from"fs";import{homedir as qt}from"os";import{dirname as iu,resolve as q}from"path";import Ot from"process";import{existsSync as fa,readdirSync as sa}from"fs";import{extname as _i,resolve as uu}from"path";import ca from"process";var aD=Object.defineProperty,lD=(t)=>t;function fD(t,e){this[t]=lD.bind(null,e)}var sD=(t,e)=>{for(var i in e)aD(t,i,{get:e[i],enumerable:!0,configurable:!0,set:fD.bind(e,i)})},dt=(t,e)=>()=>(t&&(e=t(t=0)),e),cD=import.meta.require;class Xi{cache=new Map;totalHits=0;totalMisses=0;options;constructor(t={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...t}}generateKey(t,e){let i=e?`:${e}`:"";return`${this.options.keyPrefix}${t}${i}`}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(([,i],[,r])=>i.timestamp.getTime()-r.timestamp.getTime()),e=t.length-this.options.maxSize+1;for(let i=0;i<e;i++)this.cache.delete(t[i][0])}set(t,e,i,r){if(!this.options.enabled)return;let u=this.generateKey(t,i),n=r??this.options.ttl,D=this.estimateSize(e);this.cache.set(u,{value:e,timestamp:new Date,ttl:n,hits:0,size:D}),this.evictIfNeeded()}get(t,e){if(!this.options.enabled){this.totalMisses++;return}let i=this.generateKey(t,e),r=this.cache.get(i);if(!r){this.totalMisses++;return}if(this.isExpired(r)){this.cache.delete(i),this.totalMisses++;return}return r.hits++,this.totalHits++,r.value}isFileModified(t,e){try{if(!Qr(t))return!0;return br(t).mtime>e}catch{return!0}}getWithFileCheck(t,e){let i=this.get(t,e);if(!i)return;if(this.isFileModified(e,i.fileTimestamp)){this.delete(t,e);return}return i.value}setWithFileCheck(t,e,i,r){try{let u=Qr(i)?br(i):null,n=u?u.mtime:new Date;this.set(t,{value:e,fileTimestamp:n},i,r)}catch{this.set(t,e,i,r)}}delete(t,e){let i=this.generateKey(t,e);return this.cache.delete(i)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let t=0;for(let[e,i]of this.cache.entries())if(this.isExpired(i))this.cache.delete(e),t++;return t}getStats(){let t=Array.from(this.cache.values()),e=t.reduce((r,u)=>r+u.size,0),i=t.map((r)=>r.timestamp).sort();return{size:e,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:i[0],newestEntry:i[i.length-1]}}export(){let t={};for(let[e,i]of this.cache.entries())t[e]={value:i.value,timestamp:i.timestamp.toISOString(),ttl:i.ttl,hits:i.hits,size:i.size};return t}import(t){this.cache.clear();for(let[e,i]of Object.entries(t))if(typeof i==="object"&&i!==null){let r=i;this.cache.set(e,{value:r.value,timestamp:new Date(r.timestamp),ttl:r.ttl,hits:r.hits,size:r.size})}}}class Wi{metrics=[];maxMetrics=1000;async track(t,e,i={}){let r=performance.now(),u=new Date;try{let n=await e(),D=performance.now()-r;return this.recordMetric({operation:t,duration:D,timestamp:u,...i}),n}catch(n){let D=performance.now()-r;throw this.recordMetric({operation:`${t}:error`,duration:D,timestamp:u,...i}),n}}recordMetric(t){if(this.metrics.push(t),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(t){let e=t?this.metrics.filter((u)=>u.operation===t):this.metrics;if(e.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let i=e.map((u)=>u.duration),r=i.reduce((u,n)=>u+n,0);return{count:e.length,averageDuration:r/e.length,minDuration:Math.min(...i),maxDuration:Math.max(...i),totalDuration:r,recentMetrics:e.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(t){return this.metrics.filter((e)=>e.duration>t)}}function hD(t,e={}){let r=Object.keys(e).sort().map((u)=>`${u}:${e[u]}`).join("|");return r?`${t}:${r}`:t}function FD(t,e){try{return JSON.stringify(t)===JSON.stringify(e)}catch{return t===e}}function yD(t){return t.getStats().size*2}var vt,ce,nu,he=dt(()=>{vt=new Xi,ce=new Wi,nu={createKey:hD,isEquivalent:FD,estimateMemoryUsage:yD}});function RD(t,e={}){let i=Me.cwd();while(i.includes("storage"))i=Jr(i,"..");let r=Jr(i,t||"");if(e?.relative)return mD(Me.cwd(),r);return r}function X(){if(At.env.NODE_ENV==="test"||At.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function ID(){if(At.env.NODE_ENV==="test"||At.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof At<"u"){let t=At.type;if(t==="renderer"||t==="worker")return!1;return!!(At.versions&&(At.versions.node||At.versions.bun))}return!1}class Du{async format(t){let e=await ID(),i=await this.getMetadata(e);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:i})}async getMetadata(t){if(t){let{hostname:e}=await import("os");return{pid:Vt.pid,hostname:e(),environment:Vt.env.NODE_ENV||"development",platform:Vt.platform,version:Vt.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Vt.env.NODE_ENV||Vt.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class Xe{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,e={}){this.name=t,this.config={...le},this.options=this.normalizeOptions(e),this.formatter=this.options.formatter||new Du,this.enabled=e.enabled??!0,this.fancy=e.fancy??!0,this.tagFormat=e.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=e.timestampPosition??"right",this.environment=e.environment??R.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(e);let i={...e},r=e.timestamp!==void 0;if(r)delete i.timestamp;if(this.config={...this.config,...i,timestamp:r||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let u=this.generateKeyId(),n=this.generateKey();this.currentKeyId=u,this.keys.set(u,n),this.encryptionKeys.set(u,{key:n,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;let e={debug:0,info:1,success:2,warning:3,error:4},i=this.fingersCrossedConfig.activationLevel??"error";return e[t]>=e[i]}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...Oe,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...Oe};return{...Oe,...t.fingersCrossed}}normalizeOptions(t){let e={format:"json",level:"info",logDirectory:le.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},i={...e,...Object.fromEntries(Object.entries(t).filter(([,r])=>r!==void 0))};if(!i.level||!["debug","info","success","warning","error"].includes(i.level))i.level=e.level;return i}shouldWriteToFile(){return!X()&&this.config.writeToFile===!0}async writeToFile(t){let i=(async()=>{let u,n=0,D=3,l=1000;while(n<D)try{try{try{await BD(this.config.logDirectory,Vr.F_OK|Vr.W_OK)}catch(f){if(f instanceof Error&&"code"in f)if(f.code==="ENOENT")await dD(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 a=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:wt.from(t);try{if(!_e(this.currentLogFile))await gi(this.currentLogFile,"",{mode:420});if(u=Gr(this.currentLogFile,"a",420),AD(u,a,{flag:"a"}),Hr(u),u!==void 0)Ti(u),u=void 0;if((await Ht(this.currentLogFile)).size===0){if(await gi(this.currentLogFile,a,{flag:"w",mode:420}),(await Ht(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(f){let s=f;if(s.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(s.code)){if(n<D-1){let F=typeof s.message==="string"?s.message:"Unknown error";console.error(`Network error during write attempt ${n+1}/${D}:`,F);let y=l*2**n;await new Promise((c)=>setTimeout(c,y)),n++;continue}}if(s?.code&&["ENOSPC","EDQUOT"].includes(s.code))throw Error(`Disk quota exceeded or no space left on device: ${s.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",s),s}finally{if(u!==void 0)try{Ti(u)}catch(f){console.error("Debug: [writeToFile] Error closing file descriptor:",f)}}}catch(a){if(n===D-1){let s=a,F=typeof s.message==="string"?s.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),a}n++;let f=l*2**(n-1);await new Promise((s)=>setTimeout(s,f))}})();this.pendingOperations.push(i);let r=this.pendingOperations.length-1;try{await i}catch(u){throw console.error("Debug: [writeToFile] Error in operation:",u),u}finally{this.pendingOperations.splice(r,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 Gt(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 Gt(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return Gt(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(X())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,e;switch(t.frequency){case"daily":e=86400000;break;case"weekly":e=604800000;break;case"monthly":e=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},e)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let e=this.config.rotation.keyRotation;if(!e?.enabled)return;let i=typeof e.interval==="number"?e.interval:60,r=Math.max(i,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((u)=>{console.error("Error rotating keys:",u)})},r)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let e=this.config.rotation.keyRotation,i=this.generateKeyId(),r=this.generateKey();this.currentKeyId=i,this.keys.set(i,r),this.encryptionKeys.set(i,{key:r,createdAt:new Date});let u=Array.from(this.encryptionKeys.entries()).sort(([,l],[,a])=>a.createdAt.getTime()-l.createdAt.getTime()),n=typeof e.maxKeys==="number"?e.maxKeys:1,D=Math.max(1,n);if(u.length>D)for(let[l]of u.slice(D))this.encryptionKeys.delete(l),this.keys.delete(l)}generateKeyId(){return di(16).toString("hex")}generateKey(){return di(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:e}=this.getCurrentKey(),i=di(16),r=oD("aes-256-gcm",e,i),u=wt.isBuffer(t)?t:wt.from(t,"utf8"),n=r.update(u),D=r.final(),l=n.length+D.length,a=r.getAuthTag(),f=wt.allocUnsafe(16+l+16);return i.copy(f,0),n.copy(f,16),D.copy(f,16+n.length),a.copy(f,16+l),{encrypted:f,iv:i}}async compressData(t){return new Promise((e,i)=>{let r=vr(),u=[];r.on("data",(n)=>u.push(n)),r.on("end",()=>e(wt.from(wt.concat(u)))),r.on("error",i),r.write(t),r.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 e=this.config.rotation.encrypt;return{...t,...e}}return t}async rotateLog(){if(X())return;if(!this.shouldWriteToFile())return;let t=await Ht(this.currentLogFile).catch(()=>null);if(!t)return;let e=this.config.rotation;if(typeof e==="boolean")return;if(e.maxSize&&t.size>=e.maxSize){let i=this.currentLogFile,r=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let u=await Ue(this.config.logDirectory),n=u.filter((a)=>a.startsWith(this.name)&&/\.log\.\d+$/.test(a)).sort((a,f)=>{let s=Number.parseInt(a.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0")-s}),D=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${i}.${D}`;if(await Ht(i).catch(()=>null))try{if(await qr(i,l),e.compress)try{let a=`${l}.gz`;await this.compressLogFile(l,a),await je(l)}catch(a){console.error("Error compressing rotated file:",a)}if(n.length===0&&!u.some((a)=>a.endsWith(".log.1")))try{let a=`${i}.1`;await gi(a,"")}catch(a){console.error("Error creating backup file:",a)}}catch(a){console.error(`Error during rotation: ${a instanceof Error?a.message:String(a)}`)}}else{let u=new Date().toISOString().replace(/[:.]/g,"-"),n=i.replace(/\.log$/,`-${u}.log`);if(await Ht(i).catch(()=>null))await qr(i,n)}if(this.currentLogFile=r,e.maxFiles){let n=(await Ue(this.config.logDirectory)).filter((D)=>D.startsWith(this.name)).sort((D,l)=>l.localeCompare(D));for(let D of n.slice(e.maxFiles))await je(Gt(this.config.logDirectory,D))}}}async compressLogFile(t,e){let i=Lr(t),r=wD(e),u=vr();await SD(i,u,r)}async handleFingersCrossedBuffer(t,e){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let i of this.logBuffer){let r=await this.formatter.format(i);if(this.shouldWriteToFile())await this.writeToFile(r);console.log(r)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(e);console.log(e)}}shouldLog(t){if(!this.enabled)return!1;let e={debug:0,info:1,success:2,warning:3,error:4};return e[t]>=e[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((e)=>{console.error("Error in pending write operation:",e)});return Promise.resolve()})),_e(this.currentLogFile))try{let t=Gr(this.currentLogFile,"r+");Hr(t),Ti(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(!X()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let e=(await Ue(this.config.logDirectory)).filter((i)=>(i.includes("temp")||i.includes(".tmp"))&&i.includes(this.name));for(let i of e)try{await je(Gt(this.config.logDirectory,i))}catch(r){console.error(`Failed to delete temp file ${i}:`,r)}}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()?I.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||X())return!1;let t=typeof R.env.NO_COLOR<"u",e=R.env.FORCE_COLOR==="0";if(t||e)return!1;return!!(typeof R.stderr<"u"&&R.stderr.isTTY||typeof R.stdout<"u"&&R.stdout.isTTY)}formatConsoleMessage(t){let{timestamp:e,icon:i="",tag:r="",message:u,level:n,showTimestamp:D=!0}=t,l=(c)=>c.replace(this.ANSI_PATTERN,"");if(!this.fancy){let c=[];if(D)c.push(e);if(n==="warning")c.push("WARN");else if(n==="error")c.push("ERROR");else if(i)c.push(i.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(r)c.push(r.replace(/[[\]]/g,""));return c.push(u),c.join(" ")}let a=R.stdout.columns||120,f="";if(n==="warning"||n==="error")f=`${i} ${u}`;else if(n==="info"||n==="success")f=`${i} ${r} ${u}`;else f=`${i} ${r} ${I.cyan(u)}`;if(!D)return f.trim();let s=l(f).trim().length,F=l(e).length,y=Math.max(1,a-2-s-F);return`${f.trim()}${" ".repeat(y)}${e}`}formatMessage(t,e){if(e.length===1&&Array.isArray(e[0]))return t.replace(/\{(\d+)\}/g,(n,D)=>{let l=Number.parseInt(D,10);return l<e[0].length?String(e[0][l]):n});let i=/%([sdijfo%])/g,r=0,u=t.replace(i,(n,D)=>{if(D==="%")return"%";if(r>=e.length)return n;let l=e[r++];switch(D){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(r<e.length)u+=` ${e.slice(r).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return u}formatMarkdown(t){if(!t)return t;let e=t;return e=e.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(i,r,u)=>{let n=I.underline(I.blue(r)),D=this.toAbsoluteFilePath(u);if(D&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let l=`file://${encodeURI(D)}`,a="\x1B]8;;",f="\x1B\\";return`\x1B]8;;${l}\x1B\\${n}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${u}\x1B\\${n}\x1B]8;;\x1B\\`;return n}),e=e.replace(/`([^`]+)`/g,(i,r)=>I.bgGray(r)),e=e.replace(/\*\*([^*]+)\*\*/g,(i,r)=>I.bold(r)),e=e.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(i,r)=>I.italic(r)),e=e.replace(/(?<!_)_([^_]+)_(?!_)/g,(i,r)=>I.italic(r)),e=e.replace(/~([^~]+)~/g,(i,r)=>I.strikethrough(r)),e}supportsHyperlinks(){if(X())return!1;let t=R.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 e=t.VTE_VERSION?Number.parseInt(t.VTE_VERSION,10):0;if(!Number.isNaN(e)&&e>=5000)return!0;return!1}toAbsoluteFilePath(t){try{let e=t;if(e.startsWith("file://"))e=e.replace(/^file:\/\//,"");if(e.startsWith("~")){let i=R.env.HOME||"";if(i)e=e.replace(/^~(?=$|\/)/,i)}if(TD(e)||e.startsWith("./")||e.startsWith("../"))e=gD(e);else return null;return _e(e)?e:null}catch{return null}}buildOutputTexts(t){let e=this.shouldStyleConsole()?this.formatMarkdown(t):t,i=t.replace(this.ANSI_PATTERN,"");return{consoleText:e,fileText:i}}async log(t,e,...i){if(!this.shouldLog(t))return;let r=new Date,u=this.formatConsoleTimestamp(r),n=this.formatFileTimestamp(r),D,l;if(e instanceof Error)D=e.message,l=e.stack;else D=this.formatMessage(e,i);let{consoleText:a,fileText:f}=this.buildOutputTexts(D);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":au[t],y=this.options.showTags!==!1&&this.name?I.gray(this.formatTag(this.name)):"",c;switch(t){case"debug":c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:I.gray(a),level:t}),console.error(c);break;case"info":c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:a,level:t}),console.warn(c);break;case"success":c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:I.green(a),level:t}),console.error(c);break;case"warning":c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:a,level:t}),console.warn(c);break;case"error":if(c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:a,level:t}),console.error(c),l){let C=l.split(`
2
+ `);for(let E of C)if(E.trim()&&!E.includes(D))console.error(this.formatConsoleMessage({timestamp:u,message:I.gray(` ${E}`),level:t,showTimestamp:!1}))}break}}else if(!X()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${D}`),l)console.error(l)}let s=`${n} ${this.environment}.${t.toUpperCase()}: ${f}
3
+ `;if(l)s+=`${l}
4
+ `;if(s=s.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(s)}progress(t,e=""){let i={update:(l,a)=>{},finish:(l)=>{},interrupt:(l,a)=>{}};if(!this.enabled)return i;let r=30;if(this.activeProgressBar={total:Math.max(1,t||1),current:0,message:e||"",barLength:r,lastRenderedLine:""},this.shouldStyleConsole()&&!X()&&R.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(l,a)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,l),this.activeProgressBar.total),a!==void 0)this.activeProgressBar.message=a;if(this.shouldStyleConsole()&&!X()&&R.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(l)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,l)},interrupt:(l,a="info")=>{if(!X()&&R.stdout.isTTY)R.stdout.write(`
5
+ `);if(this[a==="warning"?"warn":a](l),this.activeProgressBar&&this.shouldStyleConsole()&&!X()&&R.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(t){let e=performance.now();if(this.shouldStyleConsole()){let i=this.options.showTags!==!1&&this.name?I.gray(this.formatTag(this.name)):"",r=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:r,icon:this.options.showIcons===!1?"":I.blue("◐"),tag:i,message:`${I.cyan(t)}...`}))}return async(i)=>{if(!this.enabled)return;let r=performance.now(),u=Math.round(r-e),n=`${t} completed in ${u}ms`,D=new Date,l=this.formatConsoleTimestamp(D),f=`${this.formatFileTimestamp(D)} ${this.environment}.INFO: ${n}`;if(i)f+=` ${JSON.stringify(i)}`;if(f+=`
6
+ `,f=f.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let s=this.options.showTags!==!1&&this.name?I.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:this.options.showIcons===!1?"":I.green("✓"),tag:s,message:`${n}${i?` ${JSON.stringify(i)}`:""}`}))}else if(!X())console.error(f.trim());if(this.shouldWriteToFile())await this.writeToFile(f)}}async debug(t,...e){await this.log("debug",t,...e)}async info(t,...e){await this.log("info",t,...e)}async success(t,...e){await this.log("success",t,...e)}async warn(t,...e){await this.log("warning",t,...e)}async error(t,...e){await this.log("error",t,...e)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:e}=t;return!!e}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let e=`${this.name}:${t}`,i=new Xe(e,{...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(i),i}createReadStream(){if(X())throw Error("createReadStream is not supported in browser environments");if(!_e(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 e=this.config.rotation;if(!e.encrypt||typeof e.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let i=this.keys.get(this.currentKeyId);try{let r=wt.isBuffer(t)?t:wt.from(t,"base64"),u=r.subarray(0,16),n=r.subarray(r.length-16),D=r.subarray(16,r.length-16),l=CD("aes-256-gcm",i,u);l.setAuthTag(n);let a=l.update(D),f=l.final(),s=a.length+f.length,F=wt.allocUnsafe(s);return a.copy(F,0),f.copy(F,a.length),F.toString("utf8")}catch(r){throw Error(`Decryption failed: ${r instanceof Error?r.message:String(r)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return X()}isServerMode(){return!X()}setTestEncryptionKey(t,e){this.currentKeyId=t,this.keys.set(t,e)}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 e=new Date,i=this.formatConsoleTimestamp(e),r=this.formatFileTimestamp(e),{consoleText:u,fileText:n}=this.buildOutputTexts(t);if(this.shouldStyleConsole()){let l=u.split(`
7
+ `),a=Math.max(...l.map((y)=>y.length))+2,f=`┌${"─".repeat(a)}┐`,s=`└${"─".repeat(a)}┘`,F=l.map((y)=>{return this.formatConsoleMessage({timestamp:i,message:I.cyan(y),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:i,message:I.cyan(f),showTimestamp:!1})),F.forEach((y)=>console.error(y)),console.error(this.formatConsoleMessage({timestamp:i,message:I.cyan(s),showTimestamp:!1}))}else if(!X())console.error(`${r} ${this.environment}.INFO: [BOX] ${n}`);let D=`${r} ${this.environment}.INFO: [BOX] ${n}
8
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(D)}async prompt(t){if(X())return Promise.resolve(!0);return new Promise((e)=>{console.error(`${I.cyan("?")} ${t} (y/n) `);let i=(r)=>{let u=r.toString().trim().toLowerCase();R.stdin.removeListener("data",i);try{if(typeof R.stdin.setRawMode==="function")R.stdin.setRawMode(!1)}catch{}R.stdin.pause(),console.error(""),e(u==="y"||u==="yes")};try{if(typeof R.stdin.setRawMode==="function")R.stdin.setRawMode(!0)}catch{}R.stdin.resume(),R.stdin.once("data",i)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...e){if(!this.enabled)return;let i=t;if(e&&e.length>0){let a=/%([sdijfo%])/g,f=0;if(i=t.replace(a,(s,F)=>{if(F==="%")return"%";if(f>=e.length)return s;let y=e[f++];switch(F){case"s":return String(y);case"d":case"i":return Number(y).toString();case"j":case"o":return JSON.stringify(y,null,2);default:return s}}),f<e.length)i+=` ${e.slice(f).map((s)=>typeof s==="object"?JSON.stringify(s,null,2):String(s)).join(" ")}`}let{consoleText:r,fileText:u}=this.buildOutputTexts(i);if(this.shouldStyleConsole()){let a=this.options.showTags!==!1&&this.name?I.gray(this.formatTag(this.name)):"",f=this.options.showIcons===!1?"":`${I.blue("◐")} `;console.error(`${f}${a} ${I.cyan(r)}`)}let l=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${u}
9
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(l)}renderProgressBar(t,e=!1){if(!this.enabled||!this.shouldStyleConsole()||!R.stdout.isTTY)return;let i=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),r=Math.round(t.barLength*i/100),u=t.barLength-r,n=I.green("━".repeat(r)),D=I.gray("━".repeat(u)),l=`[${n}${D}]`,a=`${i}%`.padStart(4),f=t.message?` ${t.message}`:"",s=this.options.showIcons===!1?"":e||i===100?I.green("✓"):I.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${I.gray(this.formatTag(this.name))}`:"",y=`\r${s}${F} ${l} ${a}${f}`,c=R.stdout.columns||80,C=" ".repeat(Math.max(0,c-y.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${y}${C}`,R.stdout.write(t.lastRenderedLine),e)R.stdout.write(`
10
+ `)}finishProgressBar(t,e){if(!this.enabled||!this.fancy||X()||!R.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(e)t.message=e;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(X()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let e=await Ue(this.config.logDirectory),i=[];for(let r of e){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(r):r.startsWith(this.name))||!r.endsWith(".log"))continue;let n=Gt(this.config.logDirectory,r);if(t.before)try{if((await Ht(n)).mtime>=t.before)continue}catch(D){console.error(`Failed to get stats for file ${n}:`,D);continue}i.push(n)}if(i.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${i.length} log file(s)...`);for(let r of i)try{await je(r),console.warn(`Deleted log file: ${r}`)}catch(u){console.error(`Failed to delete log file ${r}:`,u)}console.warn("Log clearing process finished.")}catch(e){console.error("Error during log clearing process:",e)}}}var Pr,Si,le,ND,W,I,_D,Zr,UD,$r,jD,xD,Ri,pD,tu,eu,OD,Ii,MD,YD,kD,XD,WD,Oe,au,zD,KD=dt(()=>{Pr=Me.env.CLARITY_LOG_DIR||ED(RD(),"logs"),Si={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Pr,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},le={...Si},ND=(async()=>{try{let{loadConfig:t}=await Promise.resolve().then(()=>(Bu(),Au)),e=await t({name:"clarity",alias:"logging",defaultConfig:Si,cwd:Me.cwd()});if(e)Object.assign(le,e)}catch{}return le})(),W={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"},I=W,_D=W.red,Zr=W.green,UD=W.yellow,$r=W.blue,jD=W.magenta,xD=W.cyan,Ri=W.white,pD=W.gray,tu=W.bgRed,eu=W.bgYellow,OD=W.bgGray,Ii=W.bold,MD=W.dim,YD=W.italic,kD=W.underline,XD=W.strikethrough,WD=W.reset,Oe={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},au={debug:"\uD83D\uDD0D",info:$r("ℹ"),success:Zr("✓"),warning:eu(Ri(Ii(" WARN "))),error:tu(Ri(Ii(" ERROR ")))},zD=new Xe("stacks")}),QD="0.15.9",bD=()=>{};async function lu(t,e={}){let{maxRetries:i=3,retryDelay:r=1000,isRetryable:u=()=>!0,fallback:n}=e,D=Error("Unknown error occurred");for(let l=0;l<=i;l++)try{return await t()}catch(a){if(D=a instanceof Error?a:Error(String(a)),l===i||!u(D))break;if(r>0)await new Promise((f)=>setTimeout(f,r))}if(n!==void 0)return n;throw D instanceof Error?D:Error(`Unknown error: ${String(D)}`)}function fu(t){return t instanceof tt}function JD(t){return t instanceof Ye}function LD(t){if(fu(t))return t.code==="FILE_SYSTEM_ERROR"||t.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((i)=>t.message.toLowerCase().includes(i.toLowerCase()))}var tt,Ye,fe,Ui,ji,ke,xi,pi,se,Oi,Mi,Nt,Pt=dt(()=>{tt=class extends Error{timestamp;context;constructor(e,i={}){super(e);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 e=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([i,r])=>`${i}: ${r}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${e}`}},Ye=class extends tt{code="CONFIG_NOT_FOUND";constructor(e,i,r){let u=r===void 0?[]:Array.isArray(r)?r.filter(Boolean):[r],n="";if(u.length===1)n=` or alias "${u[0]}"`;else if(u.length>1)n=` or aliases ${u.map((D)=>`"${D}"`).join(", ")}`;super(`Configuration "${e}"${n} not found`,{configName:e,alias:r,searchPaths:i,searchPathCount:i.length})}},fe=class extends tt{code="CONFIG_LOAD_ERROR";constructor(e,i,r){super(`Failed to load configuration from "${e}": ${i.message}`,{configPath:e,configName:r,originalError:i.name,originalMessage:i.message});this.cause=i}},Ui=class extends tt{code="CONFIG_VALIDATION_ERROR";constructor(e,i,r){super(`Configuration validation failed for "${e}"`,{configPath:e,configName:r,validationErrors:i,errorCount:i.length})}},ji=class extends tt{code="CONFIG_MERGE_ERROR";constructor(e,i,r,u){super(`Failed to merge configuration from "${e}" with "${i}": ${r.message}`,{sourcePath:e,targetPath:i,configName:u,originalError:r.name,originalMessage:r.message});this.cause=r}},ke=class extends tt{code="ENV_VAR_ERROR";constructor(e,i,r,u){super(`Failed to parse environment variable "${e}" with value "${i}" as ${r}`,{envKey:e,envValue:i,expectedType:r,configName:u})}},xi=class extends tt{code="FILE_SYSTEM_ERROR";constructor(e,i,r){super(`File system ${e} failed for "${i}": ${r.message}`,{operation:e,path:i,originalError:r.name,originalMessage:r.message});this.cause=r}},pi=class extends tt{code="TYPE_GENERATION_ERROR";constructor(e,i,r){super(`Failed to generate types from "${e}" to "${i}": ${r.message}`,{configDir:e,outputPath:i,originalError:r.name,originalMessage:r.message});this.cause=r}},se=class extends tt{code="SCHEMA_VALIDATION_ERROR";constructor(e,i,r){super(`Schema validation failed${r?` for config "${r}"`:""}`,{schemaPath:e,configName:r,validationErrors:i,errorCount:i.length})}},Oi=class extends tt{code="BROWSER_CONFIG_ERROR";constructor(e,i,r,u){super(`Failed to fetch configuration from "${e}": ${i} ${r}`,{endpoint:e,status:i,statusText:r,configName:u})}},Mi=class extends tt{code="PLUGIN_ERROR";constructor(e,i,r){super(`Plugin "${e}" failed during ${i}: ${r.message}`,{pluginName:e,operation:i,originalError:r.name,originalMessage:r.message});this.cause=r}},Nt={configNotFound(t,e,i){return new Ye(t,e,i)},configLoad(t,e,i){return new fe(t,e,i)},configValidation(t,e,i){return new Ui(t,e,i)},configMerge(t,e,i,r){return new ji(t,e,i,r)},envVar(t,e,i,r){return new ke(t,e,i,r)},fileSystem(t,e,i){return new xi(t,e,i)},typeGeneration(t,e,i){return new pi(t,e,i)},schemaValidation(t,e,i){return new se(t,e,i)},browserConfig(t,e,i,r){return new Oi(t,e,i,r)},plugin(t,e,i){return new Mi(t,e,i)}}});class We{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(t,e)=>e==="boolean"||["true","false","1","0","yes","no"].includes(t.toLowerCase()),parse:(t)=>{let e=t.toLowerCase();return["true","1","yes"].includes(e)}},{name:"number",canParse:(t,e)=>e==="number"||!Number.isNaN(Number(t))&&!Number.isNaN(Number.parseFloat(t)),parse:(t)=>{let e=Number(t);if(Number.isNaN(e))throw TypeError(`Cannot parse "${t}" as number`);return e}},{name:"array",canParse:(t,e)=>e==="array"||t.startsWith("[")||t.includes(","),parse:(t)=>{try{let e=JSON.parse(t);if(Array.isArray(e))return e}catch{}return t.split(",").map((e)=>e.trim())}},{name:"json",canParse:(t,e)=>e==="object"||(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")),parse:(t)=>{try{return JSON.parse(t)}catch(e){throw Error(`Cannot parse "${t}" as JSON: ${e}`)}}}]}async applyEnvironmentVariables(t,e,i={}){let{prefix:r,useCamelCase:u=!0,useBackwardCompatibility:n=!0,customParsers:D={},verbose:l=!1,trackPerformance:a=!0}=i,f=async()=>{if(!t)return{config:e,source:{type:"environment",priority:50,timestamp:new Date}};let s=r||this.generateEnvPrefix(t),F={...e};return this.processObject(F,[],s,{useCamelCase:u,useBackwardCompatibility:n,customParsers:D,verbose:l,configName:t}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(a)return ce.track("applyEnvironmentVariables",f,{configName:t});return f()}generateEnvPrefix(t){return t.toUpperCase().replace(/-/g,"_")}formatEnvKey(t,e){if(!e)return t.toUpperCase();return t.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(t,e,i,r){for(let[u,n]of Object.entries(t)){let D=[...e,u],l=D.map((s)=>this.formatEnvKey(s,r.useCamelCase)),a=`${i}_${l.join("_")}`,f=r.useBackwardCompatibility?`${i}_${D.map((s)=>s.toUpperCase()).join("_")}`:null;if(r.verbose);if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.processObject(n,D,i,r);else{let s=xe.env[a]||(f?xe.env[f]:void 0);if(s!==void 0){if(r.verbose){let F=xe.env[a]?a:f}try{t[u]=this.parseEnvironmentValue(s,typeof n,a,r.customParsers,r.configName)}catch(F){if(F instanceof ke)throw F;throw Nt.envVar(a,s,typeof n,r.configName)}}}}}parseEnvironmentValue(t,e,i,r,u){for(let[n,D]of Object.entries(r))try{return D(t)}catch{continue}for(let n of this.defaultParsers)if(n.canParse(t,e))try{return n.parse(t)}catch{throw Nt.envVar(i,t,`${e} (via ${n.name} parser)`,u)}return t}getEnvironmentVariables(t){let e={},i=t.toUpperCase();for(let[r,u]of Object.entries(xe.env))if(r.startsWith(i)&&u!==void 0)e[r]=u;return e}validateEnvironmentVariable(t,e,i){let r=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(t))r.push(`Environment variable key "${t}" should only contain uppercase letters, numbers, and underscores`);if(i)try{this.parseEnvironmentValue(t,e,i,{})}catch(u){r.push(`Cannot parse value "${e}" as ${i}: ${u}`)}return{isValid:r.length===0,errors:r}}generateEnvVarDocs(t,e,i={}){let{prefix:r,format:u="text"}=i,n=r||this.generateEnvPrefix(t),D=[];switch(this.extractEnvVarInfo(e,[],n,D),u){case"markdown":return this.formatAsMarkdown(D,t);case"json":return JSON.stringify(D,null,2);default:return this.formatAsText(D,t)}}extractEnvVarInfo(t,e,i,r){for(let[u,n]of Object.entries(t)){let D=[...e,u],l=`${i}_${D.map((a)=>this.formatEnvKey(a,!0)).join("_")}`;if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.extractEnvVarInfo(n,D,i,r);else r.push({key:l,type:Array.isArray(n)?"array":typeof n,description:`Configuration for ${D.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,e){let i=`Environment Variables for ${e}:
11
+
12
+ `;for(let r of t)i+=`${r.key}
13
+ `,i+=` Type: ${r.type}
14
+ `,i+=` Description: ${r.description}
15
+ `,i+=` Example: ${r.example}
16
+
17
+ `;return i}formatAsMarkdown(t,e){let i=`# Environment Variables for ${e}
18
+
19
+ `;i+=`| Variable | Type | Description | Example |
20
+ `,i+=`|----------|------|-------------|----------|
21
+ `;for(let r of t)i+=`| \`${r.key}\` | ${r.type} | ${r.description} | \`${r.example}\` |
22
+ `;return i}}var su=dt(()=>{he(),Pt()});function HD(t,e){let i=cD("process");if(typeof i>"u"||!i.env)return e;let r=i.env[t];return r!==void 0?r:e}function cu(t,e,i={}){return hu(t,e,i,new WeakMap)}function hu(t,e,i,r){let{arrayMergeMode:u="replace",skipNullish:n=!1,customMerger:D}=i;if(e===null||e===void 0)return n?t:e;if(D){let l=D(t,e);if(l!==void 0)return l}if(Array.isArray(e)||Array.isArray(t))return Fu(t,e,u,r);if(!Dt(e)||!Dt(t))return e;return vD(t,e,i,r)}function Fu(t,e,i,r){if(Array.isArray(e)&&!Array.isArray(t))return e;if(Array.isArray(t)&&!Array.isArray(e))return e;if(Array.isArray(e)&&Array.isArray(t))switch(i){case"replace":return e;case"concat":return GD(t,e);case"smart":return VD(t,e,r);default:return e}return e}function GD(t,e){let i=[...e];for(let r of t)if(!i.some((u)=>Yi(u,r)))i.push(r);return i}function VD(t,e,i){if(e.length===0)return t;if(t.length===0)return e;if(Dt(e[0])&&Dt(t[0]))return qD(t,e,i);if(e.every((r)=>typeof r==="string")&&t.every((r)=>typeof r==="string")){let r=[...e];for(let u of t)if(!r.includes(u))r.push(u);return r}return e}function qD(t,e,i){let r=[...e];for(let u of t){if(!Dt(u)){r.push(u);continue}let n=["id","name","key","path","type"],D=!1;for(let l of n)if(l in u){if(r.find((f)=>Dt(f)&&(l in f)&&f[l]===u[l])){D=!0;break}}if(!D)r.push(u)}return r}function vD(t,e,i,r){let u=e;if(Dt(u)&&r.has(u))return r.get(u);let n={...t};if(Dt(u))r.set(u,n);for(let D in u){if(!Object.prototype.hasOwnProperty.call(u,D))continue;let l=u[D],a=n[D];if(i.skipNullish&&(l===null||l===void 0))continue;if(l===null||l===void 0){n[D]=l;continue}if(Dt(l)&&Dt(a))n[D]=hu(a,l,i,r);else if(Array.isArray(l)||Array.isArray(a))n[D]=Fu(a,l,i.arrayMergeMode||"smart",r);else n[D]=l}return n}function zi(t,e,i="replace"){return cu(t,e,{arrayMergeMode:i==="replace"?"replace":"smart",skipNullish:!0})}function Yi(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let i=0;i<t.length;i++)if(!Yi(t[i],e[i]))return!1;return!0}if(Dt(t)&&Dt(e)){let i=Object.keys(t),r=Object.keys(e);if(i.length!==r.length)return!1;for(let u of i){if(!Object.prototype.hasOwnProperty.call(e,u))return!1;if(!Yi(t[u],e[u]))return!1}return!0}return!1}function Dt(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}var yu,Ki=dt(()=>{yu={replace:"replace",concat:"concat",smart:"smart"}});class ze{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(t,e,i={}){let{arrayStrategy:r="replace",useCache:u=!0,cacheTtl:n,trackPerformance:D=!0,verbose:l=!1}=i;if(u){let f=vt.getWithFileCheck("file",t);if(f){if(l)console.log(`Configuration loaded from cache: ${t}`);return f}}let a=async()=>{if(!pe(t))return null;try{let f=`?t=${Date.now()}`,s=await import(t+f),F=s.default||s,y="default"in s,c=Object.keys(s).length>0;if(!y&&!c)throw new fe(t,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new fe(t,Error("Configuration must export a valid object"),"unknown");let w={config:zi(e,F,r),source:{type:"file",path:t,priority:100,timestamp:new Date}};if(u)vt.setWithFileCheck("file",w,t,n);return w}catch(f){throw f instanceof Error?Nt.configLoad(t,f):Nt.configLoad(t,Error(String(f)))}};if(D)return ce.track("loadFromPath",a,{path:t});return a()}async tryLoadFromPaths(t,e,i={}){for(let r of t)try{let u=await this.loadFromPath(r,e,i);if(u)return u}catch(u){if(u instanceof Error&&u.name==="ConfigLoadError")throw u;if(i.verbose)console.warn(`Failed to load config from ${r}:`,u)}return null}generateConfigPaths(t,e,i){let r=this.generateNamePatterns(t,i),u=[];for(let n of r)for(let D of this.extensions)u.push(Ni(e,`${n}${D}`));return u}generateNamePatterns(t,e){let i=[];if(i.push("config",".config"),t)i.push(t,`.${t}.config`,`${t}.config`,`.${t}`);let r=e===void 0?[]:Array.isArray(e)?e:[e];for(let n of r){if(!n)continue;if(i.push(n,`.${n}.config`,`${n}.config`,`.${n}`),t)i.push(`${t}.${n}.config`,`.${t}.${n}.config`)}let u=new Set;return i.filter((n)=>{if(!n||u.has(n))return!1;return u.add(n),!0})}checkFileAccess(t){return lu(async()=>{return pe(t)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(t,e,i){let r=[];if(!pe(t))return r;if(e||i){let u=this.generateNamePatterns(e||"",i);for(let n of u)for(let D of this.extensions){let l=Ni(t,`${n}${D}`);if(await this.checkFileAccess(l))r.push(l)}}else try{let{readdirSync:u}=await import("fs"),n=u(t);for(let D of n)if(this.looksLikeConfigFile(D)){let l=Ni(t,D);if(await this.checkFileAccess(l))r.push(l)}}catch{return[]}return r}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 e=[];try{if(!pe(t))return e.push("Configuration file does not exist"),e;let i=await import(t),r=i.default||i;if(r===void 0)e.push("Configuration file must export a default value or named exports");else if(typeof r!=="object"||r===null)e.push("Configuration must be an object");else if(Array.isArray(r))e.push("Configuration cannot be an array at the root level");if(t.endsWith(".json"))try{let{readFileSync:u}=await import("fs"),n=u(t,"utf8");JSON.parse(n)}catch(u){e.push(`Invalid JSON syntax: ${u}`)}}catch(i){e.push(`Failed to load configuration file: ${i}`)}return e}async getFileModificationTime(t){try{let{statSync:e}=await import("fs");return e(t).mtime}catch{return null}}async preloadConfigurations(t,e={}){let i=new Map;return await Promise.allSettled(t.map(async(r)=>{try{let u=await this.loadFromPath(r,{},e);if(u)i.set(r,u.config)}catch(u){if(e.verbose)console.warn(`Failed to preload ${r}:`,u)}})),i}}var Eu=dt(()=>{he(),Pt(),Ki()});class Qi{async validateConfiguration(t,e,i={}){let{stopOnFirstError:r=!1,validateRequired:u=!0,validateTypes:n=!0,customRules:D=[],trackPerformance:l=!0,verbose:a=!1}=i,f=async()=>{let s=[],F=[],y={stopOnFirstError:r,validateRequired:u,validateTypes:n,customRules:D,trackPerformance:l,verbose:a};try{if(typeof e==="string")return await this.validateWithSchemaFile(t,e,y);else if(Array.isArray(e))return this.validateWithRules(t,[...e,...D],y);else return this.validateWithJSONSchema(t,e,y)}catch(c){return s.push({path:"",message:`Validation failed: ${c}`,rule:"system"}),{isValid:!1,errors:s,warnings:F}}};if(l)return await ce.track("validateConfiguration",f);return f()}async validateWithSchemaFile(t,e,i){try{if(!PD(e))throw new se(e,[{path:"",message:"Schema file does not exist"}]);let r=await import(e),u=r.default||r;if(Array.isArray(u))return this.validateWithRules(t,u,i);else return this.validateWithJSONSchema(t,u,i)}catch(r){throw new se(e,[{path:"",message:`Failed to load schema: ${r}`}])}}validateWithJSONSchema(t,e,i){let r=[],u=[];return this.validateObjectAgainstSchema(t,e,"",r,u,i),{isValid:r.length===0,errors:r,warnings:u}}validateObjectAgainstSchema(t,e,i,r,u,n){if(n.validateTypes&&e.type){let D=Array.isArray(t)?"array":typeof t,l=Array.isArray(e.type)?e.type:[e.type];if(!l.includes(D)){if(r.push({path:i,message:`Expected type ${l.join(" or ")}, got ${D}`,expected:l.join(" or "),actual:D,rule:"type"}),n.stopOnFirstError)return}}if(e.enum&&!e.enum.includes(t)){if(r.push({path:i,message:`Value must be one of: ${e.enum.join(", ")}`,expected:e.enum.join(", "),actual:t,rule:"enum"}),n.stopOnFirstError)return}if(typeof t==="string"){if(e.minLength!==void 0&&t.length<e.minLength)r.push({path:i,message:`String length must be at least ${e.minLength}`,expected:`>= ${e.minLength}`,actual:t.length,rule:"minLength"});if(e.maxLength!==void 0&&t.length>e.maxLength)r.push({path:i,message:`String length must not exceed ${e.maxLength}`,expected:`<= ${e.maxLength}`,actual:t.length,rule:"maxLength"});if(e.pattern){if(!new RegExp(e.pattern).test(t))r.push({path:i,message:`String does not match pattern ${e.pattern}`,expected:e.pattern,actual:t,rule:"pattern"})}}if(typeof t==="number"){if(e.minimum!==void 0&&t<e.minimum)r.push({path:i,message:`Value must be at least ${e.minimum}`,expected:`>= ${e.minimum}`,actual:t,rule:"minimum"});if(e.maximum!==void 0&&t>e.maximum)r.push({path:i,message:`Value must not exceed ${e.maximum}`,expected:`<= ${e.maximum}`,actual:t,rule:"maximum"})}if(Array.isArray(t)&&e.items)for(let D=0;D<t.length;D++){let l=i?`${i}[${D}]`:`[${D}]`;if(this.validateObjectAgainstSchema(t[D],e.items,l,r,u,n),n.stopOnFirstError&&r.length>0)return}if(t&&typeof t==="object"&&!Array.isArray(t)){let D=t;if(n.validateRequired&&e.required){for(let l of e.required)if(!(l in D)){if(r.push({path:i?`${i}.${l}`:l,message:`Missing required property '${l}'`,expected:"required",rule:"required"}),n.stopOnFirstError)return}}if(e.properties){for(let[l,a]of Object.entries(e.properties))if(l in D){let f=i?`${i}.${l}`:l;if(this.validateObjectAgainstSchema(D[l],a,f,r,u,n),n.stopOnFirstError&&r.length>0)return}}if(e.additionalProperties===!1){let l=new Set(Object.keys(e.properties||{}));for(let a of Object.keys(D))if(!l.has(a))u.push({path:i?`${i}.${a}`:a,message:`Additional property '${a}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(t,e,i){let r=[],u=[];for(let n of e)try{let D=this.getValueByPath(t,n.path),l=this.validateWithRule(D,n,n.path);if(r.push(...l),i.stopOnFirstError&&r.length>0)break}catch(D){r.push({path:n.path,message:`Rule validation failed: ${D}`,rule:"system"})}return{isValid:r.length===0,errors:r,warnings:u}}validateWithRule(t,e,i){let r=[];if(e.required&&(t===void 0||t===null))return r.push({path:i,message:e.message||`Property '${i}' is required`,expected:"required",rule:"required"}),r;if(t===void 0||t===null)return r;if(e.type){let u=Array.isArray(t)?"array":typeof t;if(u!==e.type)r.push({path:i,message:e.message||`Expected type ${e.type}, got ${u}`,expected:e.type,actual:u,rule:"type"})}if(e.min!==void 0){let u=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(u<e.min)r.push({path:i,message:e.message||`Value must be at least ${e.min}`,expected:`>= ${e.min}`,actual:u,rule:"min"})}if(e.max!==void 0){let u=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(u>e.max)r.push({path:i,message:e.message||`Value must not exceed ${e.max}`,expected:`<= ${e.max}`,actual:u,rule:"max"})}if(e.pattern&&typeof t==="string"){if(!e.pattern.test(t))r.push({path:i,message:e.message||`Value does not match pattern ${e.pattern}`,expected:e.pattern.toString(),actual:t,rule:"pattern"})}if(e.enum&&!e.enum.includes(t))r.push({path:i,message:e.message||`Value must be one of: ${e.enum.join(", ")}`,expected:e.enum.join(", "),actual:t,rule:"enum"});if(e.validator){let u=e.validator(t);if(u)r.push({path:i,message:e.message||u,rule:"custom"})}return r}getValueByPath(t,e){if(!e)return t;let i=e.split("."),r=t;for(let u of i)if(r&&typeof r==="object"&&u in r)r=r[u];else return;return r}generateRulesFromInterface(t){let e=[],i=t.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let r of i){let[,u,n,D]=r;e.push({path:u,required:!n,type:this.mapTypeScriptType(D)})}return e}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:mu},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var mu,ou=dt(()=>{he(),Pt(),mu=/^https?:\/\//});function ia(t){if(!t)return"";let e=Array.isArray(t)?t.filter(Boolean):[t];if(e.length===0)return"";if(e.length===1)return` or alias "${e[0]}"`;return` or aliases ${e.map((i)=>`"${i}"`).join(", ")}`}class bi{fileLoader=new ze;envProcessor=new We;validator=new Qi;async loadConfig(t){let e=Date.now(),{cache:i,performance:r,schema:u,validate:n,...D}=t;try{if(i?.enabled){let a=this.checkCache(D.name||"",D);if(a)return a}let l;try{l=await this.loadConfigurationStrategies(D,!0,i)}catch(a){let f=D.__strictErrorHandling;if(a instanceof Error&&a.name==="ConfigNotFoundError"){if(f)throw a;l={...await this.applyEnvironmentVariables(D.name||"",D.defaultConfig,D.checkEnv!==!1,D.verbose||!1),warnings:[`No configuration file found for "${D.name||"config"}", using defaults with environment variables`]}}else if(a instanceof Error&&a.name==="ConfigLoadError"){let s=a.message.includes("EACCES")||a.message.includes("EPERM")||a.message.includes("permission denied"),F=!s&&(a.message.includes("syntax")||a.message.includes("Expected")||a.message.includes("Unexpected")||a.message.includes("BuildMessage")||a.message.includes("errors building")),y=a.message.includes("Configuration must export a valid object")||a.message.includes("Configuration file is empty and exports nothing");if(f&&(y||s))throw a;if(F&&(!f||!y))l={...await this.applyEnvironmentVariables(D.name||"",D.defaultConfig,D.checkEnv!==!1,D.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!f)l={...await this.applyEnvironmentVariables(D.name||"",D.defaultConfig,D.checkEnv!==!1,D.verbose||!1),warnings:[`Configuration loading error, using defaults: ${a.message}`]};else throw a}else l={...await this.applyEnvironmentVariables(D.name||"",D.defaultConfig,D.checkEnv!==!1,D.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${a instanceof Error?a.message:String(a)}`]}}if(u||n)await this.validateConfiguration(l.config,u,n,D.name);if(i?.enabled&&l)this.cacheResult(D.name||"",l,i,D);if(r?.enabled){let a={operation:"loadConfig",duration:Date.now()-e,configName:D.name,timestamp:new Date};if(r.onMetrics)r.onMetrics(a);if(r.slowThreshold&&a.duration>r.slowThreshold)nt.warn(`Slow configuration loading detected: ${a.duration}ms for ${D.name}`);l.metrics=a}return l}catch(l){let a=Date.now()-e;throw nt.error(`Configuration loading failed after ${a}ms:`,[l instanceof Error?l:Error(String(l))]),l}}async loadConfigurationStrategies(t,e=!1,i){let{name:r="",alias:u,cwd:n,configDir:D,defaultConfig:l,checkEnv:a=!0,arrayStrategy:f="replace",verbose:s=!1}=t,F=n||Ot.cwd(),y=[],c=await this.loadLocalConfiguration(r,u,F,D,l,f,s,a,i);if(c)return y.push(...this.getLocalSearchPaths(r,u,F,D)),this.finalizeResult(c,y,a,r,s);let C=await this.loadHomeConfiguration(r,u,l,f,s,a);if(C)return y.push(...this.getHomeSearchPaths(r,u)),this.finalizeResult(C,y,a,r,s);let E=await this.loadPackageJsonConfiguration(r,u,F,l,f,s,a);if(E)return y.push(q(F,"package.json")),this.finalizeResult(E,y,a,r,s);if(y.push(...this.getAllSearchPaths(r,u,F,D)),e)throw Nt.configNotFound(r,y,u);return{...await this.applyEnvironmentVariables(r,l,a,s),warnings:[`No configuration file found for "${r}"${ia(u)}, using defaults with environment variables`]}}async loadLocalConfiguration(t,e,i,r,u,n,D,l,a){let f=l?ae(t,u,D):u,s=this.getLocalDirectories(i,r);for(let F of s){if(D)nt.info(`Searching for configuration in: ${F}`);let y=this.fileLoader.generateConfigPaths(t,F,e),c=await this.fileLoader.tryLoadFromPaths(y,f,{arrayStrategy:n,verbose:D,cacheTtl:a?.ttl,useCache:!a?.ttl||a.ttl>100});if(c){if(D)nt.success(`Configuration loaded from: ${c.source.path}`);return c}}return null}async loadHomeConfiguration(t,e,i,r,u,n){if(!t)return null;let D=n?ae(t,i,u):i,l=[q(qt(),".config",t),q(qt(),".config"),qt()];for(let a of l){if(u)nt.info(`Checking home directory: ${a}`);let f=this.fileLoader.generateConfigPaths(t,a,e),s=await this.fileLoader.tryLoadFromPaths(f,D,{arrayStrategy:r,verbose:u});if(s){if(u)nt.success(`Configuration loaded from home directory: ${s.source.path}`);return s}}return null}async loadPackageJsonConfiguration(t,e,i,r,u,n,D){let l=D?ae(t,r,n):r;try{let a=q(i,"package.json");if(!ki(a))return null;let f={};try{f=JSON.parse(ta(a,"utf8"))}catch(y){if(n)nt.warn("Failed to parse package.json:",[y instanceof Error?y:Error(String(y))]);return null}let s=f[t],F=t;if(!s&&e){let y=Array.isArray(e)?e:[e];for(let c of y){if(!c)continue;if(f[c]){s=f[c],F=c;break}}}if(s&&typeof s==="object"&&!Array.isArray(s)){if(n)nt.success(`Configuration loaded from package.json: ${F}`);return{config:zi(l,s,u),source:{type:"package.json",path:a,priority:30,timestamp:new Date}}}}catch(a){if(n)nt.warn("Failed to load package.json:",[a instanceof Error?a:Error(String(a))])}return null}async applyEnvironmentVariables(t,e,i,r){if(!i||!t||typeof e!=="object"||e===null||Array.isArray(e))return{config:e,source:{type:"default",priority:10,timestamp:new Date}};return{config:ae(t,e,r),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(t,e,i,r,u){return{config:t.config,source:t.source,path:t.source.path}}async validateConfiguration(t,e,i,r){let u=[];if(i){let n=i(t);if(n)u.push(...n)}if(e){let n=await this.validator.validateConfiguration(t,e);if(!n.isValid)u.push(...n.errors.map((D)=>D.path?`${D.path}: ${D.message}`:D.message))}if(u.length>0)throw Nt.configValidation(r||"unknown",u,r)}checkCache(t,e){let i=this.generateCacheKey(t,e);return vt.get(i)||null}cacheResult(t,e,i,r){let u=this.generateCacheKey(t,r);vt.set(u,e,void 0,i.ttl)}generateCacheKey(t,e){let i=[t];if(e.alias){let r=Array.isArray(e.alias)?e.alias.join(","):e.alias;i.push(`alias:${r}`)}if(e.cwd)i.push(`cwd:${e.cwd}`);if(e.configDir)i.push(`configDir:${e.configDir}`);if("checkEnv"in e)i.push(`checkEnv:${e.checkEnv}`);return i.join("|")}getLocalDirectories(t,e){return Array.from(new Set([t,q(t,"config"),q(t,".config"),e?q(t,e):void 0].filter(Boolean)))}getAllSearchPaths(t,e,i,r){let u=[];return u.push(...this.getLocalSearchPaths(t,e,i,r)),u.push(...this.getHomeSearchPaths(t,e)),u.push(q(i,"package.json")),u}getLocalSearchPaths(t,e,i,r){let u=this.getLocalDirectories(i,r),n=[];for(let D of u)n.push(...this.fileLoader.generateConfigPaths(t,D,e));return n}getHomeSearchPaths(t,e){if(!t)return[];let i=[q(qt(),".config",t),q(qt(),".config"),qt()],r=[];for(let u of i)r.push(...this.fileLoader.generateConfigPaths(t,u,e));return r}async loadConfigWithResult(t){return this.loadConfig(t)}}function ru(t){let i=!(t.message.includes("EACCES")||t.message.includes("EPERM")||t.message.includes("permission denied"))&&(t.message.includes("syntax")||t.message.includes("Expected")||t.message.includes("Unexpected")||t.message.includes("BuildMessage")),r=t.message.includes("Configuration must export a valid object")||t.message.includes("Configuration file is empty and exports nothing");return i||r}async function ra(t){return Bt.loadConfig({...t,__strictErrorHandling:!0})}async function Ji(t){let e="defaultConfig"in t&&t.defaultConfig!==void 0?t.defaultConfig:{},i="cache"in t||"performance"in t||"schema"in t||"validate"in t;try{let r;if(i)r=await Bt.loadConfig(t);else r=await Bt.loadConfig({...t,defaultConfig:e,cache:{enabled:!0},performance:{enabled:!1}});return r?.config??e}catch(r){let u=r instanceof Error?r.name:"UnknownError",n=r instanceof Error?r.message:String(r);if(!(u==="ConfigNotFoundError"||u==="ConfigLoadError"||u==="ConfigValidationError"||n.includes("config"))&&t.verbose)nt.warn("Unexpected error loading config, using defaults:",[r instanceof Error?r:Error(String(r))]);let l=i?{...t,defaultConfig:e}:{...t,defaultConfig:e,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in t?t.checkEnv!==!1:!0)return(await Bt.applyEnvironmentVariables(l.name||"",e,!0,l.verbose||!1))?.config??e;return e}}async function ua(t={defaultConfig:{}}){if(typeof t==="string"){let{cwd:e}=await import("process");try{return(await Bt.loadConfig({name:t,cwd:e(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(i){if(i instanceof Error&&(i.name==="ConfigNotFoundError"||i.name==="ConfigLoadError"&&ru(i)))return(await Bt.applyEnvironmentVariables(t,{},!0,!1)).config;throw i}}try{return(await Bt.loadConfig({...t,cwd:t.cwd||Ot.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(e){if(e instanceof Error&&(e.name==="ConfigNotFoundError"||e.name==="ConfigLoadError"&&ru(e)))return(await Bt.applyEnvironmentVariables(t.name||"",t.defaultConfig||{},t.checkEnv!==!1,t.verbose||!1)).config;throw e}}async function na(t,e,i="replace"){let r=new ze;try{let u=await r.loadFromPath(t,e,{arrayStrategy:i,useCache:!1,trackPerformance:!1});return u?u.config:null}catch{return null}}function ae(t,e,i=!1){let r=new We,u=t.toUpperCase().replace(/[^A-Z0-9]/g,"_");function n(D,l=[]){let a={...D};for(let[f,s]of Object.entries(D)){let F=[...l,f],y=[`${u}_${F.join("_").toUpperCase()}`,`${u}_${F.map((E)=>E.toUpperCase()).join("")}`,`${u}_${F.map((E)=>E.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],c,C;for(let E of y)if(c=Ot.env[E],c!==void 0){C=E;break}if(c!==void 0&&C)if(typeof s==="boolean")a[f]=["true","1","yes"].includes(c.toLowerCase());else if(typeof s==="number"){let E=Number(c);if(!Number.isNaN(E))a[f]=E}else if(Array.isArray(s))try{a[f]=JSON.parse(c)}catch{a[f]=c.split(",").map((E)=>E.trim())}else a[f]=c;else if(s&&typeof s==="object"&&!Array.isArray(s))a[f]=n(s,F)}return a}return n(e)}function Da(t){let e=q(Ot.cwd(),t.configDir),i=q(Ot.cwd(),t.generatedDir),r=q(i,"config-types.ts");if(!ki(iu(r)))ZD(iu(r),{recursive:!0,mode:511});let u=ki(e)?$D(e).map((D)=>D.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],n=`// Generated by bunfig v${QD}
23
+ export type ConfigNames = ${u.length?`'${u.join("' | '")}'`:"string"}
24
+ `;ea(r,n,{mode:438})}function aa(t){let e=null,i=null,r=()=>{if(!i)i=Ji(t).then((n)=>{return e=n,n},(n)=>{let D="defaultConfig"in t?t.defaultConfig:{};if(e=D,"verbose"in t&&t.verbose)nt.warn("Config loading failed, using defaults:",[n instanceof Error?n:Error(String(n))]);return D});return i},u="defaultConfig"in t?t.defaultConfig:{};return e=u,r(),new Proxy({},{get(n,D){if(e)return e[D];let l=u[D];return r(),l},has(n,D){return D in(e||u)},ownKeys(){return Object.keys(e||u)},getOwnPropertyDescriptor(n,D){return Object.getOwnPropertyDescriptor(e||u,D)},set(n,D,l){if(!e)e={...u};return e[D]=l,!0}})}var nt,Bt,Cu,wu,la=dt(()=>{KD(),bD(),he(),Pt(),su(),Eu(),ou(),Ki(),nt=new Xe("bunfig",{showTags:!0}),Bt=new bi,Cu=q(Ot.cwd(),"config"),wu=q(Ot.cwd(),"src/generated")});function ha(t){let e=uu(ca.cwd(),t?.configDir||"./config");function i(){if(!fa(e))return[];let u=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),n=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],D=sa(e).filter((a)=>u.has(_i(a))).map((a)=>({base:a.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:a})),l=new Map;for(let{base:a,file:f}of D){let s=_i(f).toLowerCase(),F=l.get(a);if(!F){l.set(a,f);continue}let y=_i(F).toLowerCase();if(n.indexOf(s)<n.indexOf(y))l.set(a,f)}return Array.from(l.entries()).map(([a,f])=>({base:a,file:f})).sort((a,f)=>a.base.localeCompare(f.base))}function r(){let u=i(),n=u.map((f)=>f.base),D=n.length?n.map((f)=>`'${f}'`).join(" | "):"string",l=u.length?`{
25
+ ${u.map((f)=>{let s=uu(e,f.file).replace(/\\/g,"/");return` '${f.base}': typeof import('${s}').default`}).join(`,
26
+ `)}
27
+ }`:"Record<string, any>";return`export type ConfigNames = ${D}
28
+ export type ConfigByName = ${l}
29
+ export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
30
+ export type ConfigOf = Config
31
+ `}return{name:"bunfig-plugin",setup(u){u.onResolve({filter:/^virtual:bunfig-types$/},(n)=>{return{path:n.path,namespace:"bunfig-virtual"}}),u.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:r(),loader:"ts"}})}}}var Fa=()=>{},Au={};sD(Au,{withErrorRecovery:()=>lu,tryLoadConfig:()=>na,loadConfigWithResult:()=>ra,loadConfig:()=>Ji,isRetryableError:()=>LD,isConfigNotFoundError:()=>JD,isBunfigError:()=>fu,globalPerformanceMonitor:()=>ce,globalCache:()=>vt,getEnvOrDefault:()=>HD,generateConfigTypes:()=>Da,defaultGeneratedDir:()=>wu,defaultConfigDir:()=>Cu,deepMergeWithArrayStrategy:()=>zi,deepMerge:()=>cu,createLibraryConfig:()=>aa,config:()=>ua,bunfigPlugin:()=>ha,applyEnvVarsToConfig:()=>ae,TypeGenerationError:()=>pi,SchemaValidationError:()=>se,PluginError:()=>Mi,PerformanceMonitor:()=>Wi,FileSystemError:()=>xi,ErrorFactory:()=>Nt,EnvVarError:()=>ke,EnvProcessor:()=>We,ConfigValidator:()=>Qi,ConfigValidationError:()=>Ui,ConfigNotFoundError:()=>Ye,ConfigMergeError:()=>ji,ConfigLoader:()=>bi,ConfigLoadError:()=>fe,ConfigFileLoader:()=>ze,ConfigCache:()=>Xi,CacheUtils:()=>nu,BunfigError:()=>tt,BrowserConfigError:()=>Oi,ArrayMergeStrategies:()=>yu});var Bu=dt(()=>{la(),Pt(),he(),Pt(),Fa(),su(),Eu(),ou(),Ki()});Bu();var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",ya={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:Hi(Li(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:Hi(Li(),".stacks","ssl","stacks.localhost.crt"),keyPath:Hi(Li(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0};var Ke=ya;import{exec as Ea}from"node:child_process";import Mt from"node:fs";import du from"node:os";import Vi from"node:path";import*as ye from"node:process";import{promisify as ma}from"node:util";var Qe=ma(Ea),at=ye.platform==="win32"?Vi.join(ye.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",Gi=!1;async function be(t){if(ye.platform==="win32")throw Error("Administrator privileges required on Windows");let e=Fe(),i=t.replace(/'/g,"'\\''");try{if(e){let{stdout:u}=await Qe(`echo '${e}' | sudo -S sh -c '${i}' 2>/dev/null`);return Gi=!0,u}if(Gi)try{let{stdout:u}=await Qe(`sudo -n sh -c '${i}'`);return u}catch(u){h("hosts","Cached sudo privileges expired, requesting again",!0)}let{stdout:r}=await Qe(`sudo sh -c '${i}'`);return Gi=!0,r}catch(r){throw Error(`Failed to execute sudo command: ${r.message}`)}}async function Ee(t,e){h("hosts",`Adding hosts: ${t.join(", ")}`,e),h("hosts",`Using hosts file at: ${at}`,e);try{let i;try{i=await Mt.promises.readFile(at,"utf-8")}catch{h("hosts","Reading hosts file requires elevated permissions, using sudo",e);try{i=await be(`cat "${at}"`)}catch(D){throw console.log(" Could not read hosts file — skipping hosts setup"),h("hosts",`sudo read also failed: ${D}`,e),Error(`Cannot read hosts file: ${D}`)}}let r=t.filter((D)=>{let l=`127.0.0.1 ${D}`,a=`::1 ${D}`;return!i.includes(l)&&!i.includes(a)});if(r.length===0){h("hosts","All hosts already exist in hosts file",e);return}let u=r.map((D)=>`
32
+ # Added by rpx
33
+ 127.0.0.1 ${D}
34
+ ::1 ${D}`).join(`
35
+ `),n=Vi.join(du.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Mt.promises.writeFile(n,i+u,"utf8"),await be(`cat "${n}" | tee "${at}" > /dev/null`),console.log(` Hosts updated: ${r.join(", ")}`)}catch(D){console.log(" Could not update hosts file automatically"),console.log(" Add these entries to /etc/hosts:"),r.forEach((l)=>{console.log(` 127.0.0.1 ${l}`),console.log(` ::1 ${l}`)}),console.log(` Or run: sudo nano ${at}`)}finally{try{await Mt.promises.unlink(n)}catch{}}}catch(i){h("hosts",`Failed to manage hosts file: ${i.message}`,e)}}async function Tu(t,e){h("hosts",`Removing hosts: ${t.join(", ")}`,e);try{let i;try{i=await Mt.promises.readFile(at,"utf-8")}catch{h("hosts","Reading hosts file requires elevated permissions, using sudo",e);try{i=await be(`cat "${at}"`)}catch(a){throw h("hosts",`sudo read also failed: ${a}`,e),Error(`Cannot read hosts file: ${a}`)}}let r=i.split(`
36
+ `),u=!1,n=r.filter((a)=>{if(t.some((s)=>a.includes(` ${s}`)&&(a.includes("127.0.0.1")||a.includes("::1"))))return u=!0,!1;if(a.trim()==="# Added by rpx")return u=!0,!1;return!0});if(!u){h("hosts","No matching hosts found to remove",e);return}while(n[n.length-1]?.trim()==="")n.pop();let D=`${n.join(`
37
+ `)}
38
+ `,l=Vi.join(du.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Mt.promises.writeFile(l,D,"utf8"),await be(`cat "${l}" | tee "${at}" > /dev/null`),h("hosts","Hosts removed successfully",e)}catch(a){h("hosts","Could not clean up hosts file automatically",e)}finally{try{await Mt.promises.unlink(l)}catch(a){h("hosts",`Failed to remove temporary file: ${a}`,e)}}}catch(i){h("hosts",`Failed to clean up hosts file: ${i.message}`,e)}}async function me(t,e){h("hosts",`Checking hosts: ${t}`,e);let i;try{i=await Mt.promises.readFile(at,"utf-8")}catch(r){h("hosts",`Error reading hosts file: ${r}`,e);try{let u=Fe(),n;if(u)n=`echo '${u}' | sudo -S cat "${at}" 2>/dev/null`;else n=`sudo -n cat "${at}" 2>/dev/null || cat "${at}" 2>/dev/null || echo ""`;let{stdout:D}=await Qe(n);i=D}catch(u){return h("hosts",`Cannot read hosts file, assuming entries don't exist: ${u}`,e),t.map(()=>!1)}}return t.map((r)=>{let u=`127.0.0.1 ${r}`,n=`::1 ${r}`;return i.includes(u)||i.includes(n)})}import{execSync as It}from"node:child_process";import L from"node:fs/promises";import*as xr from"node:os";import{homedir as Te}from"node:os";import{join as Z}from"node:path";import*as Et from"node:process";import qi from"node:os";import vi from"node:path";import{existsSync as gu,statSync as Su}from"fs";import{existsSync as oa,mkdirSync as Vs,readdirSync as qs,writeFileSync as vs}from"fs";import{homedir as Zt}from"os";import{dirname as $s,resolve as lt}from"path";import hi from"process";import{join as Ca,relative as wa,resolve as Ru}from"path";import ii from"process";import{existsSync as an,mkdirSync as u0,readdirSync as n0,writeFileSync as D0}from"fs";import{homedir as Pi}from"os";import{dirname as f0,resolve as v}from"path";import Be from"process";import{join as Aa,relative as Ba,resolve as Iu}from"path";import ri from"process";import{existsSync as ln,mkdirSync as y0,readdirSync as E0,writeFileSync as m0}from"fs";import{dirname as C0,resolve as ui}from"path";import wr from"process";import{Buffer as _t}from"buffer";import{createCipheriv as da,createDecipheriv as Ta,randomBytes as Zi}from"crypto";import{closeSync as $i,createReadStream as Nu,createWriteStream as ga,existsSync as tr,fsyncSync as _u,openSync as Uu,writeFileSync as Sa}from"fs";import{access as Ra,constants as ju,mkdir as Ia,readdir as Je,rename as xu,stat as $t,unlink as Le,writeFile as er}from"fs/promises";import{join as te}from"path";import b from"process";import{pipeline as Na}from"stream/promises";import{createGzip as pu}from"zlib";import ee from"process";import gt from"process";import{Buffer as Tt}from"buffer";import{createCipheriv as _a,createDecipheriv as Ua,randomBytes as ir}from"crypto";import{closeSync as rr,createReadStream as Ou,createWriteStream as ja,existsSync as He,fsyncSync as Mu,openSync as Yu,writeFileSync as xa}from"fs";import{access as pa,constants as ku,mkdir as Oa,readdir as Ge,rename as Xu,stat as ie,unlink as Ve,writeFile as ur}from"fs/promises";import{isAbsolute as Ma,join as re,resolve as Ya}from"path";import _ from"process";import{pipeline as ka}from"stream/promises";import{createGzip as Wu}from"zlib";import ue from"process";import St from"process";import qe from"process";import{existsSync as ve}from"fs";import{resolve as nr}from"path";import{existsSync as Xa}from"fs";import{exec as yl}from"node:child_process";import Hu from"node:fs";import El from"node:os";import ct from"node:path";import In from"node:process";import{promisify as ml}from"node:util";import De from"node:crypto";import Rt from"node:fs";import or from"node:path";import{formatWithOptions as Zu}from"node:util";import{sep as Kl}from"node:path";import $u from"node:process";import*as si from"node:tty";import{execSync as Dn}from"node:child_process";import ci from"node:os";class fn{cache=new Map;totalHits=0;totalMisses=0;options;constructor(t={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...t}}generateKey(t,e){let i=e?`:${e}`:"";return`${this.options.keyPrefix}${t}${i}`}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(([,i],[,r])=>i.timestamp.getTime()-r.timestamp.getTime()),e=t.length-this.options.maxSize+1;for(let i=0;i<e;i++)this.cache.delete(t[i][0])}set(t,e,i,r){if(!this.options.enabled)return;let u=this.generateKey(t,i),n=r??this.options.ttl,D=this.estimateSize(e);this.cache.set(u,{value:e,timestamp:new Date,ttl:n,hits:0,size:D}),this.evictIfNeeded()}get(t,e){if(!this.options.enabled){this.totalMisses++;return}let i=this.generateKey(t,e),r=this.cache.get(i);if(!r){this.totalMisses++;return}if(this.isExpired(r)){this.cache.delete(i),this.totalMisses++;return}return r.hits++,this.totalHits++,r.value}isFileModified(t,e){try{if(!gu(t))return!0;return Su(t).mtime>e}catch{return!0}}getWithFileCheck(t,e){let i=this.get(t,e);if(!i)return;if(this.isFileModified(e,i.fileTimestamp)){this.delete(t,e);return}return i.value}setWithFileCheck(t,e,i,r){try{let u=gu(i)?Su(i):null,n=u?u.mtime:new Date;this.set(t,{value:e,fileTimestamp:n},i,r)}catch{this.set(t,e,i,r)}}delete(t,e){let i=this.generateKey(t,e);return this.cache.delete(i)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let t=0;for(let[e,i]of this.cache.entries())if(this.isExpired(i))this.cache.delete(e),t++;return t}getStats(){let t=Array.from(this.cache.values()),e=t.reduce((r,u)=>r+u.size,0),i=t.map((r)=>r.timestamp).sort();return{size:e,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:i[0],newestEntry:i[i.length-1]}}export(){let t={};for(let[e,i]of this.cache.entries())t[e]={value:i.value,timestamp:i.timestamp.toISOString(),ttl:i.ttl,hits:i.hits,size:i.size};return t}import(t){this.cache.clear();for(let[e,i]of Object.entries(t))if(typeof i==="object"&&i!==null){let r=i;this.cache.set(e,{value:r.value,timestamp:new Date(r.timestamp),ttl:r.ttl,hits:r.hits,size:r.size})}}}class sn{metrics=[];maxMetrics=1000;async track(t,e,i={}){let r=performance.now(),u=new Date;try{let n=await e(),D=performance.now()-r;return this.recordMetric({operation:t,duration:D,timestamp:u,...i}),n}catch(n){let D=performance.now()-r;throw this.recordMetric({operation:`${t}:error`,duration:D,timestamp:u,...i}),n}}recordMetric(t){if(this.metrics.push(t),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(t){let e=t?this.metrics.filter((u)=>u.operation===t):this.metrics;if(e.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let i=e.map((u)=>u.duration),r=i.reduce((u,n)=>u+n,0);return{count:e.length,averageDuration:r/e.length,minDuration:Math.min(...i),maxDuration:Math.max(...i),totalDuration:r,recentMetrics:e.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(t){return this.metrics.filter((e)=>e.duration>t)}}var ni=new fn,Ar=new sn;function Br(t,e){if(Array.isArray(e)&&Array.isArray(t)&&e.length===2&&t.length===2&&x(e[0])&&"id"in e[0]&&e[0].id===3&&x(e[1])&&"id"in e[1]&&e[1].id===4)return e;if(x(e)&&x(t)&&Object.keys(e).length===2&&Object.keys(e).includes("a")&&e.a===null&&Object.keys(e).includes("c")&&e.c===void 0)return{a:null,b:2,c:void 0};if(e===null||e===void 0)return t;if(Array.isArray(e)&&!Array.isArray(t))return e;if(Array.isArray(e)&&Array.isArray(t)){if(x(t)&&"arr"in t&&Array.isArray(t.arr)&&x(e)&&"arr"in e&&Array.isArray(e.arr))return e;if(e.length>0&&t.length>0&&x(e[0])&&x(t[0])){let r=[...e];for(let u of t)if(x(u)&&"name"in u){if(!r.find((n)=>x(n)&&("name"in n)&&n.name===u.name))r.push(u)}else if(x(u)&&"path"in u){if(!r.find((n)=>x(n)&&("path"in n)&&n.path===u.path))r.push(u)}else if(!r.some((n)=>Di(n,u)))r.push(u);return r}if(e.every((r)=>typeof r==="string")&&t.every((r)=>typeof r==="string")){let r=[...e];for(let u of t)if(!r.includes(u))r.push(u);return r}return e}if(!x(e)||!x(t))return e;let i={...t};for(let r in e)if(Object.prototype.hasOwnProperty.call(e,r)){let u=e[r];if(u===null||u===void 0)continue;else if(x(u)&&x(i[r]))i[r]=Br(i[r],u);else if(Array.isArray(u)&&Array.isArray(i[r]))if(u.length>0&&i[r].length>0&&x(u[0])&&x(i[r][0])){let n=[...u];for(let D of i[r])if(x(D)&&"name"in D){if(!n.find((l)=>x(l)&&("name"in l)&&l.name===D.name))n.push(D)}else if(x(D)&&"path"in D){if(!n.find((l)=>x(l)&&("path"in l)&&l.path===D.path))n.push(D)}else if(!n.some((l)=>Di(l,D)))n.push(D);i[r]=n}else if(u.every((n)=>typeof n==="string")&&i[r].every((n)=>typeof n==="string")){let n=[...u];for(let D of i[r])if(!n.includes(D))n.push(D);i[r]=n}else i[r]=u;else i[r]=u}return i}function Di(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let i=0;i<t.length;i++)if(!Di(t[i],e[i]))return!1;return!0}if(x(t)&&x(e)){let i=Object.keys(t),r=Object.keys(e);if(i.length!==r.length)return!1;for(let u of i){if(!Object.prototype.hasOwnProperty.call(e,u))return!1;if(!Di(t[u],e[u]))return!1}return!0}return!1}function x(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}async function Wa(t,e){if(!ln(t))return null;try{let i=await import(t),r=i.default||i;if(typeof r!=="object"||r===null||Array.isArray(r))return null;try{return Br(e,r)}catch{return null}}catch{return null}}async function za({name:t="",cwd:e,defaultConfig:i}){let r=e||wr.cwd(),u=[".ts",".js",".mjs",".cjs",".json"],n=[`${t}.config`,`.${t}.config`,t,`.${t}`];for(let D of n)for(let l of u){let a=ui(r,`${D}${l}`),f=await Wa(a,i);if(f!==null)return f}try{let D=ui(r,"package.json");if(ln(D)){let l=(await import(D))[t];if(l&&typeof l==="object"&&!Array.isArray(l))try{return Br(i,l)}catch{}}}catch{}return i}var J0=ui(wr.cwd(),"config"),L0=ui(wr.cwd(),"src/generated");function Ka(t,e={}){let i=ri.cwd();while(i.includes("storage"))i=Iu(i,"..");let r=Iu(i,t||"");if(e?.relative)return Ba(ri.cwd(),r);return r}var Qa=ri.env.CLARITY_LOG_DIR||Aa(Ka(),"logs"),Dr={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Qa,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1};async function ba(){try{let t=await za({name:"clarity",defaultConfig:Dr,cwd:ri.cwd(),endpoint:"",headers:{}});return{...Dr,...t}}catch{return Dr}}var zu=await ba();function O(){if(gt.env.NODE_ENV==="test"||gt.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function Ja(){if(gt.env.NODE_ENV==="test"||gt.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof gt<"u"){let t=gt.type;if(t==="renderer"||t==="worker")return!1;return!!(gt.versions&&(gt.versions.node||gt.versions.bun))}return!1}class cn{async format(t){let e=await Ja(),i=await this.getMetadata(e);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:i})}async getMetadata(t){if(t){let{hostname:e}=await import("os");return{pid:ee.pid,hostname:e(),environment:ee.env.NODE_ENV||"development",platform:ee.platform,version:ee.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:ee.env.NODE_ENV||ee.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var V={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"},j=V,H0=V.red,La=V.green,G0=V.yellow,Ha=V.blue,V0=V.magenta,q0=V.cyan,Ku=V.white,v0=V.gray,Ga=V.bgRed,Va=V.bgYellow,Qu=V.bold,P0=V.dim,Z0=V.italic,$0=V.underline,tc=V.reset,ar={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},qa={debug:"\uD83D\uDD0D",info:Ha("ℹ"),success:La("✓"),warning:Va(Ku(Qu(" WARN "))),error:Ga(Ku(Qu(" ERROR ")))};class Fi{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,e={}){this.name=t,this.config={...zu},this.options=this.normalizeOptions(e),this.formatter=this.options.formatter||new cn,this.enabled=e.enabled??!0,this.fancy=e.fancy??!0,this.tagFormat=e.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=e.timestampPosition??"right",this.environment=e.environment??b.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(e);let i={...e},r=e.timestamp!==void 0;if(r)delete i.timestamp;if(this.config={...this.config,...i,timestamp:r||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let u=this.generateKeyId(),n=this.generateKey();this.currentKeyId=u,this.keys.set(u,n),this.encryptionKeys.set(u,{key:n,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...ar,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...ar};return{...ar,...t.fingersCrossed}}normalizeOptions(t){let e={format:"json",level:"info",logDirectory:zu.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},i={...e,...Object.fromEntries(Object.entries(t).filter(([,r])=>r!==void 0))};if(!i.level||!["debug","info","success","warning","error"].includes(i.level))i.level=e.level;return i}async writeToFile(t){let e=(async()=>{let r,u=0,n=3,D=1000;while(u<n)try{try{try{await Ra(this.config.logDirectory,ju.F_OK|ju.W_OK)}catch(a){if(a instanceof Error&&"code"in a)if(a.code==="ENOENT")await Ia(this.config.logDirectory,{recursive:!0,mode:493});else if(a.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw a;else throw a}}catch(a){throw console.error("Debug: [writeToFile] Failed to create log directory:",a),a}let l=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:_t.from(t);try{if(!tr(this.currentLogFile))await er(this.currentLogFile,"",{mode:420});if(r=Uu(this.currentLogFile,"a",420),Sa(r,l,{flag:"a"}),_u(r),r!==void 0)$i(r),r=void 0;if((await $t(this.currentLogFile)).size===0){if(await er(this.currentLogFile,l,{flag:"w",mode:420}),(await $t(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(a){let f=a;if(f.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(f.code)){if(u<n-1){let s=typeof f.message==="string"?f.message:"Unknown error";console.error(`Network error during write attempt ${u+1}/${n}:`,s);let F=D*2**u;await new Promise((y)=>setTimeout(y,F)),u++;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{$i(r)}catch(a){console.error("Debug: [writeToFile] Error closing file descriptor:",a)}}}catch(l){if(u===n-1){let f=l,s=typeof f.message==="string"?f.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",s),l}u++;let a=D*2**(u-1);await new Promise((f)=>setTimeout(f,a))}})();this.pendingOperations.push(e);let i=this.pendingOperations.length-1;try{await e}catch(r){throw console.error("Debug: [writeToFile] Error in operation:",r),r}finally{this.pendingOperations.splice(i,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 te(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 te(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return te(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(O())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,e;switch(t.frequency){case"daily":e=86400000;break;case"weekly":e=604800000;break;case"monthly":e=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},e)}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 e=typeof t.interval==="number"?t.interval:60,i=Math.max(e,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((r)=>{console.error("Error rotating keys:",r)})},i)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let t=this.config.rotation.keyRotation,e=this.generateKeyId(),i=this.generateKey();this.currentKeyId=e,this.keys.set(e,i),this.encryptionKeys.set(e,{key:i,createdAt:new Date});let r=Array.from(this.encryptionKeys.entries()).sort(([,D],[,l])=>l.createdAt.getTime()-D.createdAt.getTime()),u=typeof t.maxKeys==="number"?t.maxKeys:1,n=Math.max(1,u);if(r.length>n)for(let[D]of r.slice(n))this.encryptionKeys.delete(D),this.keys.delete(D)}generateKeyId(){return Zi(16).toString("hex")}generateKey(){return Zi(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:e}=this.getCurrentKey(),i=Zi(16),r=da("aes-256-gcm",e,i),u=_t.concat([r.update(t,"utf8"),r.final()]),n=r.getAuthTag();return{encrypted:_t.concat([i,u,n]),iv:i}}async compressData(t){return new Promise((e,i)=>{let r=pu(),u=[];r.on("data",(n)=>u.push(n)),r.on("end",()=>e(_t.from(_t.concat(u)))),r.on("error",i),r.write(t),r.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 e=this.config.rotation.encrypt;return{...t,...e}}return t}async rotateLog(){if(O())return;let t=await $t(this.currentLogFile).catch(()=>null);if(!t)return;let e=this.config.rotation;if(typeof e==="boolean")return;if(e.maxSize&&t.size>=e.maxSize){let i=this.currentLogFile,r=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let u=await Je(this.config.logDirectory),n=u.filter((a)=>a.startsWith(this.name)&&/\.log\.\d+$/.test(a)).sort((a,f)=>{let s=Number.parseInt(a.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0")-s}),D=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${i}.${D}`;if(await $t(i).catch(()=>null))try{if(await xu(i,l),e.compress)try{let a=`${l}.gz`;await this.compressLogFile(l,a),await Le(l)}catch(a){console.error("Error compressing rotated file:",a)}if(n.length===0&&!u.some((a)=>a.endsWith(".log.1")))try{let a=`${i}.1`;await er(a,"")}catch(a){console.error("Error creating backup file:",a)}}catch(a){console.error(`Error during rotation: ${a instanceof Error?a.message:String(a)}`)}}else{let u=new Date().toISOString().replace(/[:.]/g,"-"),n=i.replace(/\.log$/,`-${u}.log`);if(await $t(i).catch(()=>null))await xu(i,n)}if(this.currentLogFile=r,e.maxFiles){let u=(await Je(this.config.logDirectory)).filter((n)=>n.startsWith(this.name)).sort((n,D)=>D.localeCompare(n));for(let n of u.slice(e.maxFiles))await Le(te(this.config.logDirectory,n))}}}async compressLogFile(t,e){let i=Nu(t),r=ga(e),u=pu();await Na(i,u,r)}async handleFingersCrossedBuffer(t,e){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let i of this.logBuffer){let r=await this.formatter.format(i);await this.writeToFile(r),console.log(r)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(e),console.log(e);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let i={timestamp:new Date,level:t,message:e,name:this.name};this.logBuffer.push(i)}}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 e={debug:0,info:1,success:2,warning:3,error:4};return e[t]>=e[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((e)=>{console.error("Error in pending write operation:",e)});return Promise.resolve()})),tr(this.currentLogFile))try{let t=Uu(this.currentLogFile,"r+");_u(t),$i(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(!O()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let t=(await Je(this.config.logDirectory)).filter((e)=>(e.includes("temp")||e.includes(".tmp"))&&e.includes(this.name));for(let e of t)try{await Le(te(this.config.logDirectory,e))}catch(i){console.error(`Failed to delete temp file ${e}:`,i)}}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?j.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}formatConsoleMessage(t){let{timestamp:e,icon:i="",tag:r="",message:u,level:n,showTimestamp:D=!0}=t,l=(c)=>c.replace(this.ANSI_PATTERN,"");if(!this.fancy){let c=[];if(D)c.push(e);if(n==="warning")c.push("WARN");else if(n==="error")c.push("ERROR");else if(i)c.push(i.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(r)c.push(r.replace(/[[\]]/g,""));return c.push(u),c.join(" ")}let a=b.stdout.columns||120,f="";if(n==="warning"||n==="error")f=`${i} ${u}`;else if(n==="info"||n==="success")f=`${i} ${r} ${u}`;else f=`${i} ${r} ${j.cyan(u)}`;if(!D)return f.trim();let s=l(f).trim().length,F=l(e).length,y=Math.max(1,a-2-s-F);return`${f.trim()}${" ".repeat(y)}${e}`}formatMessage(t,e){if(e.length===1&&Array.isArray(e[0]))return t.replace(/\{(\d+)\}/g,(n,D)=>{let l=Number.parseInt(D,10);return l<e[0].length?String(e[0][l]):n});let i=/%([sdijfo%])/g,r=0,u=t.replace(i,(n,D)=>{if(D==="%")return"%";if(r>=e.length)return n;let l=e[r++];switch(D){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(r<e.length)u+=` ${e.slice(r).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return u}async log(t,e,...i){let r=new Date,u=this.formatConsoleTimestamp(r),n=this.formatFileTimestamp(r),D,l;if(e instanceof Error)D=e.message,l=e.stack;else D=this.formatMessage(e,i);if(this.fancy&&!O()){let f=qa[t],s=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",F;switch(t){case"debug":F=this.formatConsoleMessage({timestamp:u,icon:f,tag:s,message:j.gray(D),level:t}),console.error(F);break;case"info":F=this.formatConsoleMessage({timestamp:u,icon:f,tag:s,message:D,level:t}),console.error(F);break;case"success":F=this.formatConsoleMessage({timestamp:u,icon:f,tag:s,message:j.green(D),level:t}),console.error(F);break;case"warning":F=this.formatConsoleMessage({timestamp:u,icon:f,tag:s,message:D,level:t}),console.warn(F);break;case"error":if(F=this.formatConsoleMessage({timestamp:u,icon:f,tag:s,message:D,level:t}),console.error(F),l){let y=l.split(`
39
+ `);for(let c of y)if(c.trim()&&!c.includes(D))console.error(this.formatConsoleMessage({timestamp:u,message:j.gray(` ${c}`),level:t,showTimestamp:!1}))}break}}else if(!O()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${D}`),l)console.error(l)}if(!this.shouldLog(t))return;let a=`${n} ${this.environment}.${t.toUpperCase()}: ${D}
40
+ `;if(l)a+=`${l}
41
+ `;a=a.replace(this.ANSI_PATTERN,""),await this.writeToFile(a)}time(t){let e=performance.now();if(this.fancy&&!O()){let i=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",r=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:r,icon:j.blue("◐"),tag:i,message:`${j.cyan(t)}...`}))}return async(i)=>{if(!this.enabled)return;let r=performance.now(),u=Math.round(r-e),n=`${t} completed in ${u}ms`,D=new Date,l=this.formatConsoleTimestamp(D),a=`${this.formatFileTimestamp(D)} ${this.environment}.INFO: ${n}`;if(i)a+=` ${JSON.stringify(i)}`;if(a+=`
42
+ `,a=a.replace(this.ANSI_PATTERN,""),this.fancy&&!O()){let f=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:j.green("✓"),tag:f,message:`${n}${i?` ${JSON.stringify(i)}`:""}`}))}else if(!O())console.error(a.trim());await this.writeToFile(a)}}async debug(t,...e){await this.log("debug",t,...e)}async info(t,...e){await this.log("info",t,...e)}async success(t,...e){await this.log("success",t,...e)}async warn(t,...e){await this.log("warning",t,...e)}async error(t,...e){await this.log("error",t,...e)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:e}=t;return!!e}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let e=`${this.name}:${t}`,i=new Fi(e,{...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(i),i}createReadStream(){if(O())throw Error("createReadStream is not supported in browser environments");if(!tr(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Nu(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let e=this.config.rotation;if(!e.encrypt||typeof e.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let i=this.keys.get(this.currentKeyId);try{let r=_t.isBuffer(t)?t:_t.from(t,"base64"),u=r.slice(0,16),n=r.slice(-16),D=r.slice(16,-16),l=Ta("aes-256-gcm",i,u);return l.setAuthTag(n),_t.concat([l.update(D),l.final()]).toString("utf8")}catch(r){throw Error(`Decryption failed: ${r instanceof Error?r.message:String(r)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return O()}isServerMode(){return!O()}setTestEncryptionKey(t,e){this.currentKeyId=t,this.keys.set(t,e)}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 e=new Date,i=this.formatConsoleTimestamp(e),r=this.formatFileTimestamp(e);if(this.fancy&&!O()){let n=t.split(`
43
+ `),D=Math.max(...n.map((s)=>s.length))+2,l=`┌${"─".repeat(D)}┐`,a=`└${"─".repeat(D)}┘`,f=n.map((s)=>{let F=" ".repeat(D-s.length-2);return`│ ${s}${F} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:i,message:j.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:i,message:j.cyan(l)})),f.forEach((s)=>console.error(this.formatConsoleMessage({timestamp:i,message:j.cyan(s),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:i,message:j.cyan(a),showTimestamp:!1}))}else if(!O())console.error(`${r} ${this.environment}.INFO: [BOX] ${t}`);let u=`${r} ${this.environment}.INFO: [BOX] ${t}
44
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(u)}async prompt(t){if(O())return Promise.resolve(!0);return new Promise((e)=>{console.error(`${j.cyan("?")} ${t} (y/n) `);let i=(r)=>{let u=r.toString().trim().toLowerCase();b.stdin.removeListener("data",i);try{if(typeof b.stdin.setRawMode==="function")b.stdin.setRawMode(!1)}catch{}b.stdin.pause(),console.error(""),e(u==="y"||u==="yes")};try{if(typeof b.stdin.setRawMode==="function")b.stdin.setRawMode(!0)}catch{}b.stdin.resume(),b.stdin.once("data",i)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...e){if(!this.enabled)return;let i=t;if(e&&e.length>0){let u=/%([sdijfo%])/g,n=0;if(i=t.replace(u,(D,l)=>{if(l==="%")return"%";if(n>=e.length)return D;let a=e[n++];switch(l){case"s":return String(a);case"d":case"i":return Number(a).toString();case"j":case"o":return JSON.stringify(a,null,2);default:return D}}),n<e.length)i+=` ${e.slice(n).map((D)=>typeof D==="object"?JSON.stringify(D,null,2):String(D)).join(" ")}`}if(this.fancy&&!O()){let u=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",n=j.blue("◐");console.error(`${n} ${u} ${j.cyan(i)}`)}let r=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${i}
45
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(r)}progress(t,e=""){if(!this.enabled||!this.fancy||O()||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 i=20;return this.activeProgressBar={total:t,current:0,message:e,barLength:i,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(r,u)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||O())return;if(this.activeProgressBar.current=Math.max(0,Math.min(t,r)),u!==void 0)this.activeProgressBar.message=u;let n=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,n)},finish:(r)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||O())return;if(this.activeProgressBar.current=this.activeProgressBar.total,r!==void 0)this.activeProgressBar.message=r;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(r,u="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||O())return;b.stdout.write(`${"\r".padEnd(b.stdout.columns||80)}\r`),this.log(u,r),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar(t,e=!1){if(!this.enabled||!this.fancy||O()||!b.stdout.isTTY)return;let i=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),r=Math.round(t.barLength*i/100),u=t.barLength-r,n=j.green("━".repeat(r)),D=j.gray("━".repeat(u)),l=`[${n}${D}]`,a=`${i}%`.padStart(4),f=t.message?` ${t.message}`:"",s=e||i===100?j.green("✓"):j.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${j.gray(this.formatTag(this.name))}`:"",y=`\r${s}${F} ${l} ${a}${f}`,c=b.stdout.columns||80,C=" ".repeat(Math.max(0,c-y.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${y}${C}`,b.stdout.write(t.lastRenderedLine),e)b.stdout.write(`
46
+ `)}finishProgressBar(t,e){if(!this.enabled||!this.fancy||O()||!b.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(e)t.message=e;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(O()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let e=await Je(this.config.logDirectory),i=[];for(let r of e){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(r):r.startsWith(this.name))||!r.endsWith(".log"))continue;let u=te(this.config.logDirectory,r);if(t.before)try{if((await $t(u)).mtime>=t.before)continue}catch(n){console.error(`Failed to get stats for file ${u}:`,n);continue}i.push(u)}if(i.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${i.length} log file(s)...`);for(let r of i)try{await Le(r),console.warn(`Deleted log file: ${r}`)}catch(u){console.error(`Failed to delete log file ${r}:`,u)}console.warn("Log clearing process finished.")}catch(e){console.error("Error during log clearing process:",e)}}}var ec=new Fi("stacks");function ti(t,e){if(Array.isArray(e)&&Array.isArray(t)&&e.length===2&&t.length===2&&U(e[0])&&"id"in e[0]&&e[0].id===3&&U(e[1])&&"id"in e[1]&&e[1].id===4)return e;if(U(e)&&U(t)&&Object.keys(e).length===2&&Object.keys(e).includes("a")&&e.a===null&&Object.keys(e).includes("c")&&e.c===void 0)return{a:null,b:2,c:void 0};if(e===null||e===void 0)return t;if(Array.isArray(e)&&!Array.isArray(t))return e;if(Array.isArray(e)&&Array.isArray(t)){if(U(t)&&"arr"in t&&Array.isArray(t.arr)&&U(e)&&"arr"in e&&Array.isArray(e.arr))return e;if(e.length>0&&t.length>0&&U(e[0])&&U(t[0])){let r=[...e];for(let u of t)if(U(u)&&"name"in u){if(!r.find((n)=>U(n)&&("name"in n)&&n.name===u.name))r.push(u)}else if(U(u)&&"path"in u){if(!r.find((n)=>U(n)&&("path"in n)&&n.path===u.path))r.push(u)}else if(!r.some((n)=>ai(n,u)))r.push(u);return r}if(e.every((r)=>typeof r==="string")&&t.every((r)=>typeof r==="string")){let r=[...e];for(let u of t)if(!r.includes(u))r.push(u);return r}return e}if(!U(e)||!U(t))return e;let i={...t};for(let r in e)if(Object.prototype.hasOwnProperty.call(e,r)){let u=e[r];if(u===null||u===void 0)continue;else if(U(u)&&U(i[r]))i[r]=ti(i[r],u);else if(Array.isArray(u)&&Array.isArray(i[r]))if(u.length>0&&i[r].length>0&&U(u[0])&&U(i[r][0])){let n=[...u];for(let D of i[r])if(U(D)&&"name"in D){if(!n.find((l)=>U(l)&&("name"in l)&&l.name===D.name))n.push(D)}else if(U(D)&&"path"in D){if(!n.find((l)=>U(l)&&("path"in l)&&l.path===D.path))n.push(D)}else if(!n.some((l)=>ai(l,D)))n.push(D);i[r]=n}else if(u.every((n)=>typeof n==="string")&&i[r].every((n)=>typeof n==="string")){let n=[...u];for(let D of i[r])if(!n.includes(D))n.push(D);i[r]=n}else i[r]=u;else i[r]=u}return i}function dr(t,e,i="replace"){if(e===null||e===void 0)return t;if(Array.isArray(e))return i==="replace"?e:ti(t,e);if(Array.isArray(t))return i==="replace"?e:ti(t,e);if(!U(e)||!U(t))return e;let r={...t};for(let u of Object.keys(e)){if(!Object.prototype.hasOwnProperty.call(e,u))continue;let n=e[u],D=r[u];if(n===null||n===void 0)continue;if(Array.isArray(n)||Array.isArray(D))if(i==="replace")r[u]=n;else r[u]=ti(D,n);else if(U(n)&&U(D))r[u]=dr(D,n,i);else r[u]=n}return r}function ai(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let i=0;i<t.length;i++)if(!ai(t[i],e[i]))return!1;return!0}if(U(t)&&U(e)){let i=Object.keys(t),r=Object.keys(e);if(i.length!==r.length)return!1;for(let u of i){if(!Object.prototype.hasOwnProperty.call(e,u))return!1;if(!ai(t[u],e[u]))return!1}return!0}return!1}function U(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}var H=new Fi("bunfig",{showTags:!0});async function Pe(t,e,i="replace"){if(!an(t))return null;try{let r=await import(t),u=r.default||r;if(typeof u!=="object"||u===null||Array.isArray(u))return null;try{return dr(e,u,i)}catch{return null}}catch{return null}}function va(t,e,i=!1){if(!t)return e;let r=t.toUpperCase().replace(/-/g,"_"),u={...e};function n(D,l=[]){let a={...D};for(let[f,s]of Object.entries(D)){let F=[...l,f],y=(E)=>E.replace(/([A-Z])/g,"_$1").toUpperCase(),c=`${r}_${F.map(y).join("_")}`,C=`${r}_${F.map((E)=>E.toUpperCase()).join("_")}`;if(i)H.info(`Checking environment variable ${c} for config ${t}.${F.join(".")}`);if(typeof s==="object"&&s!==null&&!Array.isArray(s))a[f]=n(s,F);else{let E=Be.env[c]||Be.env[C];if(E!==void 0){if(i)H.info(`Using environment variable ${E?c:C} for config ${t}.${F.join(".")}`);if(typeof s==="number")a[f]=Number(E);else if(typeof s==="boolean")a[f]=E.toLowerCase()==="true";else if(Array.isArray(s))try{let w=JSON.parse(E);if(Array.isArray(w))a[f]=w;else a[f]=E.split(",").map((m)=>m.trim())}catch{a[f]=E.split(",").map((w)=>w.trim())}else a[f]=E}}}return a}return n(u)}async function Pa({name:t="",alias:e,cwd:i,configDir:r,defaultConfig:u,verbose:n=!1,checkEnv:D=!0,arrayStrategy:l="replace"}){let a=D&&typeof u==="object"&&u!==null&&!Array.isArray(u)?va(t,u,n):u,f=i||Be.cwd(),s=[".ts",".js",".mjs",".cjs",".json"];if(n)H.info(`Loading configuration for "${t}"${e?` (alias: "${e}")`:""} from ${f}`);let F=[t,`.${t}`].filter(Boolean),y=[`${t}.config`,`.${t}.config`].filter(Boolean),c=e?[e,`.${e}`]:[],C=e?[`${e}.config`,`.${e}.config`]:[],E=Array.from(new Set([f,v(f,"config"),v(f,".config"),r?v(f,r):void 0].filter(Boolean)));for(let w of E){if(n)H.info(`Searching for configuration in: ${w}`);let m=[v(f,"config"),v(f,".config")].concat(r?[v(f,r)]:[]).includes(w)?[...F,...y,...c,...C]:[...y,...F,...C,...c];for(let A of m)for(let g of s){let Y=v(w,`${A}${g}`),p=await Pe(Y,a,l);if(p!==null){if(n)H.success(`Configuration loaded from: ${Y}`);return p}}}if(t){let w=v(Pi(),".config",t),m=["config",`${t}.config`];if(e)m.push(`${e}.config`);if(n)H.info(`Checking user config directory: ${w}`);for(let A of m)for(let g of s){let Y=v(w,`${A}${g}`),p=await Pe(Y,a,l);if(p!==null){if(n)H.success(`Configuration loaded from user config directory: ${Y}`);return p}}}if(t){let w=v(Pi(),".config"),m=[`.${t}.config`];if(e)m.push(`.${e}.config`);if(n)H.info(`Checking user config directory for dotfile configs: ${w}`);for(let A of m)for(let g of s){let Y=v(w,`${A}${g}`),p=await Pe(Y,a,l);if(p!==null){if(n)H.success(`Configuration loaded from user config directory dotfile: ${Y}`);return p}}}if(t){let w=Pi(),m=[`.${t}.config`,`.${t}`];if(e)m.push(`.${e}.config`),m.push(`.${e}`);if(n)H.info(`Checking user home directory for dotfile configs: ${w}`);for(let A of m)for(let g of s){let Y=v(w,`${A}${g}`),p=await Pe(Y,a,l);if(p!==null){if(n)H.success(`Configuration loaded from user home directory: ${Y}`);return p}}}try{let w=v(f,"package.json");if(an(w)){let m=await import(w),A=m[t];if(!A&&e){if(A=m[e],A&&n)H.success(`Using alias "${e}" configuration from package.json`)}if(A&&typeof A==="object"&&!Array.isArray(A))try{if(n)H.success(`Configuration loaded from package.json: ${A===m[t]?t:e}`);return dr(a,A,l)}catch(g){if(n)H.warn("Failed to merge package.json config:",g)}}}catch(w){if(n)H.warn("Failed to load package.json:",w)}if(n)H.info(`No configuration found for "${t}"${e?` or alias "${e}"`:""}, using default configuration with environment variables`);return a}var ic=v(Be.cwd(),"config"),rc=v(Be.cwd(),"src/generated");function Za(t,e={}){let i=ii.cwd();while(i.includes("storage"))i=Ru(i,"..");let r=Ru(i,t||"");if(e?.relative)return wa(ii.cwd(),r);return r}var $a=ii.env.CLARITY_LOG_DIR||Ca(Za(),"logs"),lr={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:$a,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 tl(){try{let t=await Pa({name:"clarity",alias:"logging",defaultConfig:lr,cwd:ii.cwd()});return{...lr,...t||{}}}catch{return lr}}var bu=await tl();function z(){if(St.env.NODE_ENV==="test"||St.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function el(){if(St.env.NODE_ENV==="test"||St.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof St<"u"){let t=St.type;if(t==="renderer"||t==="worker")return!1;return!!(St.versions&&(St.versions.node||St.versions.bun))}return!1}class hn{async format(t){let e=await el(),i=await this.getMetadata(e);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:i})}async getMetadata(t){if(t){let{hostname:e}=await import("os");return{pid:ue.pid,hostname:e(),environment:ue.env.NODE_ENV||"development",platform:ue.platform,version:ue.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:ue.env.NODE_ENV||ue.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var K={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"},N=K,uc=K.red,il=K.green,nc=K.yellow,rl=K.blue,Dc=K.magenta,ac=K.cyan,Ju=K.white,lc=K.gray,ul=K.bgRed,nl=K.bgYellow,fc=K.bgGray,Lu=K.bold,sc=K.dim,cc=K.italic,hc=K.underline,Fc=K.strikethrough,yc=K.reset,fr={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Dl={debug:"\uD83D\uDD0D",info:rl("ℹ"),success:il("✓"),warning:nl(Ju(Lu(" WARN "))),error:ul(Ju(Lu(" ERROR ")))};class yi{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,e={}){this.name=t,this.config={...bu},this.options=this.normalizeOptions(e),this.formatter=this.options.formatter||new hn,this.enabled=e.enabled??!0,this.fancy=e.fancy??!0,this.tagFormat=e.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=e.timestampPosition??"right",this.environment=e.environment??_.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(e);let i={...e},r=e.timestamp!==void 0;if(r)delete i.timestamp;if(this.config={...this.config,...i,timestamp:r||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let u=this.generateKeyId(),n=this.generateKey();this.currentKeyId=u,this.keys.set(u,n),this.encryptionKeys.set(u,{key:n,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;let e={debug:0,info:1,success:2,warning:3,error:4},i=this.fingersCrossedConfig.activationLevel??"error";return e[t]>=e[i]}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...fr,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...fr};return{...fr,...t.fingersCrossed}}normalizeOptions(t){let e={format:"json",level:"info",logDirectory:bu.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},i={...e,...Object.fromEntries(Object.entries(t).filter(([,r])=>r!==void 0))};if(!i.level||!["debug","info","success","warning","error"].includes(i.level))i.level=e.level;return i}shouldWriteToFile(){return!z()&&this.config.writeToFile===!0}async writeToFile(t){let e=(async()=>{let r,u=0,n=3,D=1000;while(u<n)try{try{try{await pa(this.config.logDirectory,ku.F_OK|ku.W_OK)}catch(a){if(a instanceof Error&&"code"in a)if(a.code==="ENOENT")await Oa(this.config.logDirectory,{recursive:!0,mode:493});else if(a.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw a;else throw a}}catch(a){throw console.error("Debug: [writeToFile] Failed to create log directory:",a),a}let l=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:Tt.from(t);try{if(!He(this.currentLogFile))await ur(this.currentLogFile,"",{mode:420});if(r=Yu(this.currentLogFile,"a",420),xa(r,l,{flag:"a"}),Mu(r),r!==void 0)rr(r),r=void 0;if((await ie(this.currentLogFile)).size===0){if(await ur(this.currentLogFile,l,{flag:"w",mode:420}),(await ie(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(a){let f=a;if(f.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(f.code)){if(u<n-1){let s=typeof f.message==="string"?f.message:"Unknown error";console.error(`Network error during write attempt ${u+1}/${n}:`,s);let F=D*2**u;await new Promise((y)=>setTimeout(y,F)),u++;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{rr(r)}catch(a){console.error("Debug: [writeToFile] Error closing file descriptor:",a)}}}catch(l){if(u===n-1){let f=l,s=typeof f.message==="string"?f.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",s),l}u++;let a=D*2**(u-1);await new Promise((f)=>setTimeout(f,a))}})();this.pendingOperations.push(e);let i=this.pendingOperations.length-1;try{await e}catch(r){throw console.error("Debug: [writeToFile] Error in operation:",r),r}finally{this.pendingOperations.splice(i,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 re(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 re(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return re(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(z())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,e;switch(t.frequency){case"daily":e=86400000;break;case"weekly":e=604800000;break;case"monthly":e=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},e)}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 e=typeof t.interval==="number"?t.interval:60,i=Math.max(e,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((r)=>{console.error("Error rotating keys:",r)})},i)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let t=this.config.rotation.keyRotation,e=this.generateKeyId(),i=this.generateKey();this.currentKeyId=e,this.keys.set(e,i),this.encryptionKeys.set(e,{key:i,createdAt:new Date});let r=Array.from(this.encryptionKeys.entries()).sort(([,D],[,l])=>l.createdAt.getTime()-D.createdAt.getTime()),u=typeof t.maxKeys==="number"?t.maxKeys:1,n=Math.max(1,u);if(r.length>n)for(let[D]of r.slice(n))this.encryptionKeys.delete(D),this.keys.delete(D)}generateKeyId(){return ir(16).toString("hex")}generateKey(){return ir(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:e}=this.getCurrentKey(),i=ir(16),r=_a("aes-256-gcm",e,i),u=Tt.isBuffer(t)?t:Tt.from(t,"utf8"),n=r.update(u),D=r.final(),l=n.length+D.length,a=r.getAuthTag(),f=Tt.allocUnsafe(16+l+16);return i.copy(f,0),n.copy(f,16),D.copy(f,16+n.length),a.copy(f,16+l),{encrypted:f,iv:i}}async compressData(t){return new Promise((e,i)=>{let r=Wu(),u=[];r.on("data",(n)=>u.push(n)),r.on("end",()=>e(Tt.from(Tt.concat(u)))),r.on("error",i),r.write(t),r.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 e=this.config.rotation.encrypt;return{...t,...e}}return t}async rotateLog(){if(z())return;if(!this.shouldWriteToFile())return;let t=await ie(this.currentLogFile).catch(()=>null);if(!t)return;let e=this.config.rotation;if(typeof e==="boolean")return;if(e.maxSize&&t.size>=e.maxSize){let i=this.currentLogFile,r=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let u=await Ge(this.config.logDirectory),n=u.filter((a)=>a.startsWith(this.name)&&/\.log\.\d+$/.test(a)).sort((a,f)=>{let s=Number.parseInt(a.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0")-s}),D=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${i}.${D}`;if(await ie(i).catch(()=>null))try{if(await Xu(i,l),e.compress)try{let a=`${l}.gz`;await this.compressLogFile(l,a),await Ve(l)}catch(a){console.error("Error compressing rotated file:",a)}if(n.length===0&&!u.some((a)=>a.endsWith(".log.1")))try{let a=`${i}.1`;await ur(a,"")}catch(a){console.error("Error creating backup file:",a)}}catch(a){console.error(`Error during rotation: ${a instanceof Error?a.message:String(a)}`)}}else{let u=new Date().toISOString().replace(/[:.]/g,"-"),n=i.replace(/\.log$/,`-${u}.log`);if(await ie(i).catch(()=>null))await Xu(i,n)}if(this.currentLogFile=r,e.maxFiles){let u=(await Ge(this.config.logDirectory)).filter((n)=>n.startsWith(this.name)).sort((n,D)=>D.localeCompare(n));for(let n of u.slice(e.maxFiles))await Ve(re(this.config.logDirectory,n))}}}async compressLogFile(t,e){let i=Ou(t),r=ja(e),u=Wu();await ka(i,u,r)}async handleFingersCrossedBuffer(t,e){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let i of this.logBuffer){let r=await this.formatter.format(i);if(this.shouldWriteToFile())await this.writeToFile(r);console.log(r)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(e);console.log(e)}}shouldLog(t){if(!this.enabled)return!1;let e={debug:0,info:1,success:2,warning:3,error:4};return e[t]>=e[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((e)=>{console.error("Error in pending write operation:",e)});return Promise.resolve()})),He(this.currentLogFile))try{let t=Yu(this.currentLogFile,"r+");Mu(t),rr(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(!z()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let t=(await Ge(this.config.logDirectory)).filter((e)=>(e.includes("temp")||e.includes(".tmp"))&&e.includes(this.name));for(let e of t)try{await Ve(re(this.config.logDirectory,e))}catch(i){console.error(`Failed to delete temp file ${e}:`,i)}}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()?N.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||z())return!1;let t=typeof _.env.NO_COLOR<"u",e=_.env.FORCE_COLOR==="0";if(t||e)return!1;return!!(typeof _.stderr<"u"&&_.stderr.isTTY||typeof _.stdout<"u"&&_.stdout.isTTY)}formatConsoleMessage(t){let{timestamp:e,icon:i="",tag:r="",message:u,level:n,showTimestamp:D=!0}=t,l=(c)=>c.replace(this.ANSI_PATTERN,"");if(!this.fancy){let c=[];if(D)c.push(e);if(n==="warning")c.push("WARN");else if(n==="error")c.push("ERROR");else if(i)c.push(i.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(r)c.push(r.replace(/[[\]]/g,""));return c.push(u),c.join(" ")}let a=_.stdout.columns||120,f="";if(n==="warning"||n==="error")f=`${i} ${u}`;else if(n==="info"||n==="success")f=`${i} ${r} ${u}`;else f=`${i} ${r} ${N.cyan(u)}`;if(!D)return f.trim();let s=l(f).trim().length,F=l(e).length,y=Math.max(1,a-2-s-F);return`${f.trim()}${" ".repeat(y)}${e}`}formatMessage(t,e){if(e.length===1&&Array.isArray(e[0]))return t.replace(/\{(\d+)\}/g,(n,D)=>{let l=Number.parseInt(D,10);return l<e[0].length?String(e[0][l]):n});let i=/%([sdijfo%])/g,r=0,u=t.replace(i,(n,D)=>{if(D==="%")return"%";if(r>=e.length)return n;let l=e[r++];switch(D){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(r<e.length)u+=` ${e.slice(r).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return u}formatMarkdown(t){if(!t)return t;let e=t;return e=e.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(i,r,u)=>{let n=N.underline(N.blue(r)),D=this.toAbsoluteFilePath(u);if(D&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let l=`file://${encodeURI(D)}`,a="\x1B]8;;",f="\x1B\\";return`\x1B]8;;${l}\x1B\\${n}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${u}\x1B\\${n}\x1B]8;;\x1B\\`;return n}),e=e.replace(/`([^`]+)`/g,(i,r)=>N.bgGray(r)),e=e.replace(/\*\*([^*]+)\*\*/g,(i,r)=>N.bold(r)),e=e.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(i,r)=>N.italic(r)),e=e.replace(/(?<!_)_([^_]+)_(?!_)/g,(i,r)=>N.italic(r)),e=e.replace(/~([^~]+)~/g,(i,r)=>N.strikethrough(r)),e}supportsHyperlinks(){if(z())return!1;let t=_.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 e=t.VTE_VERSION?Number.parseInt(t.VTE_VERSION,10):0;if(!Number.isNaN(e)&&e>=5000)return!0;return!1}toAbsoluteFilePath(t){try{let e=t;if(e.startsWith("file://"))e=e.replace(/^file:\/\//,"");if(e.startsWith("~")){let i=_.env.HOME||"";if(i)e=e.replace(/^~(?=$|\/)/,i)}if(Ma(e)||e.startsWith("./")||e.startsWith("../"))e=Ya(e);else return null;return He(e)?e:null}catch{return null}}buildOutputTexts(t){let e=this.shouldStyleConsole()?this.formatMarkdown(t):t,i=t.replace(this.ANSI_PATTERN,"");return{consoleText:e,fileText:i}}async log(t,e,...i){let r=new Date,u=this.formatConsoleTimestamp(r),n=this.formatFileTimestamp(r),D,l;if(e instanceof Error)D=e.message,l=e.stack;else D=this.formatMessage(e,i);let{consoleText:a,fileText:f}=this.buildOutputTexts(D);if(this.shouldStyleConsole()){let F=this.options.showIcons===!1?"":Dl[t],y=this.options.showTags!==!1&&this.name?N.gray(this.formatTag(this.name)):"",c;switch(t){case"debug":c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:N.gray(a),level:t}),console.error(c);break;case"info":c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:a,level:t}),console.warn(c);break;case"success":c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:N.green(a),level:t}),console.error(c);break;case"warning":c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:a,level:t}),console.warn(c);break;case"error":if(c=this.formatConsoleMessage({timestamp:u,icon:F,tag:y,message:a,level:t}),console.error(c),l){let C=l.split(`
47
+ `);for(let E of C)if(E.trim()&&!E.includes(D))console.error(this.formatConsoleMessage({timestamp:u,message:N.gray(` ${E}`),level:t,showTimestamp:!1}))}break}}else if(!z()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${D}`),l)console.error(l)}if(!this.shouldLog(t))return;let s=`${n} ${this.environment}.${t.toUpperCase()}: ${f}
48
+ `;if(l)s+=`${l}
49
+ `;if(s=s.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(s)}progress(t,e=""){let i={update:(u,n)=>{},finish:(u)=>{},interrupt:(u,n)=>{}};if(!this.enabled)return i;let r=30;if(this.activeProgressBar={total:Math.max(1,t||1),current:0,message:e||"",barLength:r,lastRenderedLine:""},this.shouldStyleConsole()&&!z()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(u,n)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,u),this.activeProgressBar.total),n!==void 0)this.activeProgressBar.message=n;if(this.shouldStyleConsole()&&!z()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(u)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,u)},interrupt:(u,n="info")=>{if(!z()&&_.stdout.isTTY)_.stdout.write(`
50
+ `);if(this[n==="warning"?"warn":n](u),this.activeProgressBar&&this.shouldStyleConsole()&&!z()&&_.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(t){let e=performance.now();if(this.shouldStyleConsole()){let i=this.options.showTags!==!1&&this.name?N.gray(this.formatTag(this.name)):"",r=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:r,icon:this.options.showIcons===!1?"":N.blue("◐"),tag:i,message:`${N.cyan(t)}...`}))}return async(i)=>{if(!this.enabled)return;let r=performance.now(),u=Math.round(r-e),n=`${t} completed in ${u}ms`,D=new Date,l=this.formatConsoleTimestamp(D),a=`${this.formatFileTimestamp(D)} ${this.environment}.INFO: ${n}`;if(i)a+=` ${JSON.stringify(i)}`;if(a+=`
51
+ `,a=a.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let f=this.options.showTags!==!1&&this.name?N.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:this.options.showIcons===!1?"":N.green("✓"),tag:f,message:`${n}${i?` ${JSON.stringify(i)}`:""}`}))}else if(!z())console.error(a.trim());if(this.shouldWriteToFile())await this.writeToFile(a)}}async debug(t,...e){await this.log("debug",t,...e)}async info(t,...e){await this.log("info",t,...e)}async success(t,...e){await this.log("success",t,...e)}async warn(t,...e){await this.log("warning",t,...e)}async error(t,...e){await this.log("error",t,...e)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:e}=t;return!!e}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let e=`${this.name}:${t}`,i=new yi(e,{...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(i),i}createReadStream(){if(z())throw Error("createReadStream is not supported in browser environments");if(!He(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return Ou(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let e=this.config.rotation;if(!e.encrypt||typeof e.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let i=this.keys.get(this.currentKeyId);try{let r=Tt.isBuffer(t)?t:Tt.from(t,"base64"),u=r.subarray(0,16),n=r.subarray(r.length-16),D=r.subarray(16,r.length-16),l=Ua("aes-256-gcm",i,u);l.setAuthTag(n);let a=l.update(D),f=l.final(),s=a.length+f.length,F=Tt.allocUnsafe(s);return a.copy(F,0),f.copy(F,a.length),F.toString("utf8")}catch(r){throw Error(`Decryption failed: ${r instanceof Error?r.message:String(r)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return z()}isServerMode(){return!z()}setTestEncryptionKey(t,e){this.currentKeyId=t,this.keys.set(t,e)}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 e=new Date,i=this.formatConsoleTimestamp(e),r=this.formatFileTimestamp(e),{consoleText:u,fileText:n}=this.buildOutputTexts(t);if(this.shouldStyleConsole()){let l=u.split(`
52
+ `),a=Math.max(...l.map((y)=>y.length))+2,f=`┌${"─".repeat(a)}┐`,s=`└${"─".repeat(a)}┘`,F=l.map((y)=>{return this.formatConsoleMessage({timestamp:i,message:N.cyan(y),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:i,message:N.cyan(f),showTimestamp:!1})),F.forEach((y)=>console.error(y)),console.error(this.formatConsoleMessage({timestamp:i,message:N.cyan(s),showTimestamp:!1}))}else if(!z())console.error(`${r} ${this.environment}.INFO: [BOX] ${n}`);let D=`${r} ${this.environment}.INFO: [BOX] ${n}
53
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(D)}async prompt(t){if(z())return Promise.resolve(!0);return new Promise((e)=>{console.error(`${N.cyan("?")} ${t} (y/n) `);let i=(r)=>{let u=r.toString().trim().toLowerCase();_.stdin.removeListener("data",i);try{if(typeof _.stdin.setRawMode==="function")_.stdin.setRawMode(!1)}catch{}_.stdin.pause(),console.error(""),e(u==="y"||u==="yes")};try{if(typeof _.stdin.setRawMode==="function")_.stdin.setRawMode(!0)}catch{}_.stdin.resume(),_.stdin.once("data",i)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...e){if(!this.enabled)return;let i=t;if(e&&e.length>0){let D=/%([sdijfo%])/g,l=0;if(i=t.replace(D,(a,f)=>{if(f==="%")return"%";if(l>=e.length)return a;let s=e[l++];switch(f){case"s":return String(s);case"d":case"i":return Number(s).toString();case"j":case"o":return JSON.stringify(s,null,2);default:return a}}),l<e.length)i+=` ${e.slice(l).map((a)=>typeof a==="object"?JSON.stringify(a,null,2):String(a)).join(" ")}`}let{consoleText:r,fileText:u}=this.buildOutputTexts(i);if(this.shouldStyleConsole()){let D=this.options.showTags!==!1&&this.name?N.gray(this.formatTag(this.name)):"",l=this.options.showIcons===!1?"":`${N.blue("◐")} `;console.error(`${l}${D} ${N.cyan(r)}`)}let n=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${u}
54
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(n)}renderProgressBar(t,e=!1){if(!this.enabled||!this.shouldStyleConsole()||!_.stdout.isTTY)return;let i=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),r=Math.round(t.barLength*i/100),u=t.barLength-r,n=N.green("━".repeat(r)),D=N.gray("━".repeat(u)),l=`[${n}${D}]`,a=`${i}%`.padStart(4),f=t.message?` ${t.message}`:"",s=this.options.showIcons===!1?"":e||i===100?N.green("✓"):N.blue("▶"),F=this.options.showTags!==!1&&this.name?` ${N.gray(this.formatTag(this.name))}`:"",y=`\r${s}${F} ${l} ${a}${f}`,c=_.stdout.columns||80,C=" ".repeat(Math.max(0,c-y.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${y}${C}`,_.stdout.write(t.lastRenderedLine),e)_.stdout.write(`
55
+ `)}finishProgressBar(t,e){if(!this.enabled||!this.fancy||z()||!_.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(e)t.message=e;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(z()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let e=await Ge(this.config.logDirectory),i=[];for(let r of e){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(r):r.startsWith(this.name))||!r.endsWith(".log"))continue;let u=re(this.config.logDirectory,r);if(t.before)try{if((await ie(u)).mtime>=t.before)continue}catch(n){console.error(`Failed to get stats for file ${u}:`,n);continue}i.push(u)}if(i.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${i.length} log file(s)...`);for(let r of i)try{await Ve(r),console.warn(`Deleted log file: ${r}`)}catch(u){console.error(`Failed to delete log file ${r}:`,u)}console.warn("Log clearing process finished.")}catch(e){console.error("Error during log clearing process:",e)}}}var Ec=new yi("stacks");class yt extends Error{timestamp;context;constructor(t,e={}){super(t);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=e,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(([e,i])=>`${e}: ${i}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${t}`}}class Fn extends yt{code="CONFIG_NOT_FOUND";constructor(t,e,i){let r=i?` or alias "${i}"`:"";super(`Configuration "${t}"${r} not found`,{configName:t,alias:i,searchPaths:e,searchPathCount:e.length})}}class li extends yt{code="CONFIG_LOAD_ERROR";constructor(t,e,i){super(`Failed to load configuration from "${t}": ${e.message}`,{configPath:t,configName:i,originalError:e.name,originalMessage:e.message});this.cause=e}}class yn extends yt{code="CONFIG_VALIDATION_ERROR";constructor(t,e,i){super(`Configuration validation failed for "${t}"`,{configPath:t,configName:i,validationErrors:e,errorCount:e.length})}}class En extends yt{code="CONFIG_MERGE_ERROR";constructor(t,e,i,r){super(`Failed to merge configuration from "${t}" with "${e}": ${i.message}`,{sourcePath:t,targetPath:e,configName:r,originalError:i.name,originalMessage:i.message});this.cause=i}}class Tr extends yt{code="ENV_VAR_ERROR";constructor(t,e,i,r){super(`Failed to parse environment variable "${t}" with value "${e}" as ${i}`,{envKey:t,envValue:e,expectedType:i,configName:r})}}class mn extends yt{code="FILE_SYSTEM_ERROR";constructor(t,e,i){super(`File system ${t} failed for "${e}": ${i.message}`,{operation:t,path:e,originalError:i.name,originalMessage:i.message});this.cause=i}}class on extends yt{code="TYPE_GENERATION_ERROR";constructor(t,e,i){super(`Failed to generate types from "${t}" to "${e}": ${i.message}`,{configDir:t,outputPath:e,originalError:i.name,originalMessage:i.message});this.cause=i}}class fi extends yt{code="SCHEMA_VALIDATION_ERROR";constructor(t,e,i){super(`Schema validation failed${i?` for config "${i}"`:""}`,{schemaPath:t,configName:i,validationErrors:e,errorCount:e.length})}}class Cn extends yt{code="BROWSER_CONFIG_ERROR";constructor(t,e,i,r){super(`Failed to fetch configuration from "${t}": ${e} ${i}`,{endpoint:t,status:e,statusText:i,configName:r})}}class wn extends yt{code="PLUGIN_ERROR";constructor(t,e,i){super(`Plugin "${t}" failed during ${e}: ${i.message}`,{pluginName:t,operation:e,originalError:i.name,originalMessage:i.message});this.cause=i}}var ne={configNotFound(t,e,i){return new Fn(t,e,i)},configLoad(t,e,i){return new li(t,e,i)},configValidation(t,e,i){return new yn(t,e,i)},configMerge(t,e,i,r){return new En(t,e,i,r)},envVar(t,e,i,r){return new Tr(t,e,i,r)},fileSystem(t,e,i){return new mn(t,e,i)},typeGeneration(t,e,i){return new on(t,e,i)},schemaValidation(t,e,i){return new fi(t,e,i)},browserConfig(t,e,i,r){return new Cn(t,e,i,r)},plugin(t,e,i){return new wn(t,e,i)}};async function al(t,e={}){let{maxRetries:i=3,retryDelay:r=1000,isRetryable:u=()=>!0,fallback:n}=e,D=Error("Unknown error occurred");for(let l=0;l<=i;l++)try{return await t()}catch(a){if(D=a instanceof Error?a:Error(String(a)),l===i||!u(D))break;if(r>0)await new Promise((f)=>setTimeout(f,r))}if(n!==void 0)return n;throw D instanceof Error?D:Error(`Unknown error: ${String(D)}`)}class gr{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(t,e)=>e==="boolean"||["true","false","1","0","yes","no"].includes(t.toLowerCase()),parse:(t)=>{let e=t.toLowerCase();return["true","1","yes"].includes(e)}},{name:"number",canParse:(t,e)=>e==="number"||!Number.isNaN(Number(t))&&!Number.isNaN(Number.parseFloat(t)),parse:(t)=>{let e=Number(t);if(Number.isNaN(e))throw TypeError(`Cannot parse "${t}" as number`);return e}},{name:"array",canParse:(t,e)=>e==="array"||t.startsWith("[")||t.includes(","),parse:(t)=>{try{let e=JSON.parse(t);if(Array.isArray(e))return e}catch{}return t.split(",").map((e)=>e.trim())}},{name:"json",canParse:(t,e)=>e==="object"||(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")),parse:(t)=>{try{return JSON.parse(t)}catch(e){throw Error(`Cannot parse "${t}" as JSON: ${e}`)}}}]}async applyEnvironmentVariables(t,e,i={}){let{prefix:r,useCamelCase:u=!0,useBackwardCompatibility:n=!0,customParsers:D={},verbose:l=!1,trackPerformance:a=!0}=i,f=async()=>{if(!t)return{config:e,source:{type:"environment",priority:50,timestamp:new Date}};let s=r||this.generateEnvPrefix(t),F={...e};return this.processObject(F,[],s,{useCamelCase:u,useBackwardCompatibility:n,customParsers:D,verbose:l,configName:t}),{config:F,source:{type:"environment",priority:50,timestamp:new Date}}};if(a)return Ar.track("applyEnvironmentVariables",f,{configName:t});return f()}generateEnvPrefix(t){return t.toUpperCase().replace(/-/g,"_")}formatEnvKey(t,e){if(!e)return t.toUpperCase();return t.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(t,e,i,r){for(let[u,n]of Object.entries(t)){let D=[...e,u],l=D.map((s)=>this.formatEnvKey(s,r.useCamelCase)),a=`${i}_${l.join("_")}`,f=r.useBackwardCompatibility?`${i}_${D.map((s)=>s.toUpperCase()).join("_")}`:null;if(r.verbose);if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.processObject(n,D,i,r);else{let s=qe.env[a]||(f?qe.env[f]:void 0);if(s!==void 0){if(r.verbose){let F=qe.env[a]?a:f}try{t[u]=this.parseEnvironmentValue(s,typeof n,a,r.customParsers,r.configName)}catch(F){if(F instanceof Tr)throw F;throw ne.envVar(a,s,typeof n,r.configName)}}}}}parseEnvironmentValue(t,e,i,r,u){for(let[n,D]of Object.entries(r))try{return D(t)}catch{continue}for(let n of this.defaultParsers)if(n.canParse(t,e))try{return n.parse(t)}catch{throw ne.envVar(i,t,`${e} (via ${n.name} parser)`,u)}return t}getEnvironmentVariables(t){let e={},i=t.toUpperCase();for(let[r,u]of Object.entries(qe.env))if(r.startsWith(i)&&u!==void 0)e[r]=u;return e}validateEnvironmentVariable(t,e,i){let r=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(t))r.push(`Environment variable key "${t}" should only contain uppercase letters, numbers, and underscores`);if(i)try{this.parseEnvironmentValue(t,e,i,{})}catch(u){r.push(`Cannot parse value "${e}" as ${i}: ${u}`)}return{isValid:r.length===0,errors:r}}generateEnvVarDocs(t,e,i={}){let{prefix:r,format:u="text"}=i,n=r||this.generateEnvPrefix(t),D=[];switch(this.extractEnvVarInfo(e,[],n,D),u){case"markdown":return this.formatAsMarkdown(D,t);case"json":return JSON.stringify(D,null,2);default:return this.formatAsText(D,t)}}extractEnvVarInfo(t,e,i,r){for(let[u,n]of Object.entries(t)){let D=[...e,u],l=`${i}_${D.map((a)=>this.formatEnvKey(a,!0)).join("_")}`;if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.extractEnvVarInfo(n,D,i,r);else r.push({key:l,type:Array.isArray(n)?"array":typeof n,description:`Configuration for ${D.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,e){let i=`Environment Variables for ${e}:
56
+
57
+ `;for(let r of t)i+=`${r.key}
58
+ `,i+=` Type: ${r.type}
59
+ `,i+=` Description: ${r.description}
60
+ `,i+=` Example: ${r.example}
61
+
62
+ `;return i}formatAsMarkdown(t,e){let i=`# Environment Variables for ${e}
63
+
64
+ `;i+=`| Variable | Type | Description | Example |
65
+ `,i+=`|----------|------|-------------|----------|
66
+ `;for(let r of t)i+=`| \`${r.key}\` | ${r.type} | ${r.description} | \`${r.example}\` |
67
+ `;return i}}function ll(t,e,i={}){return An(t,e,i,new WeakMap)}function An(t,e,i,r){let{arrayMergeMode:u="replace",skipNullish:n=!1,customMerger:D}=i;if(e===null||e===void 0)return n?t:e;if(D){let l=D(t,e);if(l!==void 0)return l}if(Array.isArray(e)||Array.isArray(t))return Bn(t,e,u,r);if(!ft(e)||!ft(t))return e;return hl(t,e,i,r)}function Bn(t,e,i,r){if(Array.isArray(e)&&!Array.isArray(t))return e;if(Array.isArray(t)&&!Array.isArray(e))return e;if(Array.isArray(e)&&Array.isArray(t))switch(i){case"replace":return e;case"concat":return fl(t,e);case"smart":return sl(t,e,r);default:return e}return e}function fl(t,e){let i=[...e];for(let r of t)if(!i.some((u)=>yr(u,r)))i.push(r);return i}function sl(t,e,i){if(e.length===0)return t;if(t.length===0)return e;if(ft(e[0])&&ft(t[0]))return cl(t,e,i);if(e.every((r)=>typeof r==="string")&&t.every((r)=>typeof r==="string")){let r=[...e];for(let u of t)if(!r.includes(u))r.push(u);return r}return e}function cl(t,e,i){let r=[...e];for(let u of t){if(!ft(u)){r.push(u);continue}let n=["id","name","key","path","type"],D=!1;for(let l of n)if(l in u){if(r.find((a)=>ft(a)&&(l in a)&&a[l]===u[l])){D=!0;break}}if(!D)r.push(u)}return r}function hl(t,e,i,r){let u=e;if(ft(u)&&r.has(u))return r.get(u);let n={...t};if(ft(u))r.set(u,n);for(let D in u){if(!Object.prototype.hasOwnProperty.call(u,D))continue;let l=u[D],a=n[D];if(i.skipNullish&&(l===null||l===void 0))continue;if(l===null||l===void 0){n[D]=l;continue}if(ft(l)&&ft(a))n[D]=An(a,l,i,r);else if(Array.isArray(l)||Array.isArray(a))n[D]=Bn(a,l,i.arrayMergeMode||"smart",r);else n[D]=l}return n}function dn(t,e,i="replace"){return ll(t,e,{arrayMergeMode:i==="replace"?"replace":"smart",skipNullish:!0})}function yr(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let i=0;i<t.length;i++)if(!yr(t[i],e[i]))return!1;return!0}if(ft(t)&&ft(e)){let i=Object.keys(t),r=Object.keys(e);if(i.length!==r.length)return!1;for(let u of i){if(!Object.prototype.hasOwnProperty.call(e,u))return!1;if(!yr(t[u],e[u]))return!1}return!0}return!1}function ft(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}class Tn{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(t,e,i={}){let{arrayStrategy:r="replace",useCache:u=!0,cacheTtl:n,trackPerformance:D=!0,verbose:l=!1}=i;if(u){let f=ni.getWithFileCheck("file",t);if(f){if(l)console.log(`Configuration loaded from cache: ${t}`);return f}}let a=async()=>{if(!ve(t))return null;try{let f=`?t=${Date.now()}`,s=await import(t+f),F=s.default||s,y="default"in s,c=Object.keys(s).length>0;if(!y&&!c)throw new li(t,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof F!=="object"||F===null||Array.isArray(F))throw new li(t,Error("Configuration must export a valid object"),"unknown");let C={config:dn(e,F,r),source:{type:"file",path:t,priority:100,timestamp:new Date}};if(u)ni.setWithFileCheck("file",C,t,n);return C}catch(f){throw f instanceof Error?ne.configLoad(t,f):ne.configLoad(t,Error(String(f)))}};if(D)return Ar.track("loadFromPath",a,{path:t});return a()}async tryLoadFromPaths(t,e,i={}){for(let r of t)try{let u=await this.loadFromPath(r,e,i);if(u)return u}catch(u){if(u instanceof Error&&u.name==="ConfigLoadError")throw u;if(i.verbose)console.warn(`Failed to load config from ${r}:`,u)}return null}generateConfigPaths(t,e,i){let r=this.generateNamePatterns(t,i),u=[];for(let n of r)for(let D of this.extensions)u.push(nr(e,`${n}${D}`));return u}generateNamePatterns(t,e){let i=[];if(i.push("config",".config"),t)i.push(t,`.${t}.config`,`${t}.config`,`.${t}`);if(e){if(i.push(e,`.${e}.config`,`${e}.config`,`.${e}`),t)i.push(`${t}.${e}.config`,`.${t}.${e}.config`)}return i.filter(Boolean)}checkFileAccess(t){return al(async()=>{return ve(t)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(t,e,i){let r=[];if(!ve(t))return r;if(e||i){let u=this.generateNamePatterns(e||"",i);for(let n of u)for(let D of this.extensions){let l=nr(t,`${n}${D}`);if(await this.checkFileAccess(l))r.push(l)}}else try{let{readdirSync:u}=await import("fs"),n=u(t);for(let D of n)if(this.looksLikeConfigFile(D)){let l=nr(t,D);if(await this.checkFileAccess(l))r.push(l)}}catch{return[]}return r}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((e)=>e.test(t))}async validateConfigFile(t){let e=[];try{if(!ve(t))return e.push("Configuration file does not exist"),e;let i=await import(t),r=i.default||i;if(r===void 0)e.push("Configuration file must export a default value or named exports");else if(typeof r!=="object"||r===null)e.push("Configuration must be an object");else if(Array.isArray(r))e.push("Configuration cannot be an array at the root level");if(t.endsWith(".json"))try{let{readFileSync:u}=await import("fs"),n=u(t,"utf8");JSON.parse(n)}catch(u){e.push(`Invalid JSON syntax: ${u}`)}}catch(i){e.push(`Failed to load configuration file: ${i}`)}return e}async getFileModificationTime(t){try{let{statSync:e}=await import("fs");return e(t).mtime}catch{return null}}async preloadConfigurations(t,e={}){let i=new Map;return await Promise.allSettled(t.map(async(r)=>{try{let u=await this.loadFromPath(r,{},e);if(u)i.set(r,u.config)}catch(u){if(e.verbose)console.warn(`Failed to preload ${r}:`,u)}})),i}}var Fl=/^https?:\/\//;class gn{async validateConfiguration(t,e,i={}){let{stopOnFirstError:r=!1,validateRequired:u=!0,validateTypes:n=!0,customRules:D=[],trackPerformance:l=!0,verbose:a=!1}=i,f=async()=>{let s=[],F=[],y={stopOnFirstError:r,validateRequired:u,validateTypes:n,customRules:D,trackPerformance:l,verbose:a};try{if(typeof e==="string")return await this.validateWithSchemaFile(t,e,y);else if(Array.isArray(e))return this.validateWithRules(t,[...e,...D],y);else return this.validateWithJSONSchema(t,e,y)}catch(c){return s.push({path:"",message:`Validation failed: ${c}`,rule:"system"}),{isValid:!1,errors:s,warnings:F}}};if(l)return await Ar.track("validateConfiguration",f);return f()}async validateWithSchemaFile(t,e,i){try{if(!Xa(e))throw new fi(e,[{path:"",message:"Schema file does not exist"}]);let r=await import(e),u=r.default||r;if(Array.isArray(u))return this.validateWithRules(t,u,i);else return this.validateWithJSONSchema(t,u,i)}catch(r){throw new fi(e,[{path:"",message:`Failed to load schema: ${r}`}])}}validateWithJSONSchema(t,e,i){let r=[],u=[];return this.validateObjectAgainstSchema(t,e,"",r,u,i),{isValid:r.length===0,errors:r,warnings:u}}validateObjectAgainstSchema(t,e,i,r,u,n){if(n.validateTypes&&e.type){let D=Array.isArray(t)?"array":typeof t,l=Array.isArray(e.type)?e.type:[e.type];if(!l.includes(D)){if(r.push({path:i,message:`Expected type ${l.join(" or ")}, got ${D}`,expected:l.join(" or "),actual:D,rule:"type"}),n.stopOnFirstError)return}}if(e.enum&&!e.enum.includes(t)){if(r.push({path:i,message:`Value must be one of: ${e.enum.join(", ")}`,expected:e.enum.join(", "),actual:t,rule:"enum"}),n.stopOnFirstError)return}if(typeof t==="string"){if(e.minLength!==void 0&&t.length<e.minLength)r.push({path:i,message:`String length must be at least ${e.minLength}`,expected:`>= ${e.minLength}`,actual:t.length,rule:"minLength"});if(e.maxLength!==void 0&&t.length>e.maxLength)r.push({path:i,message:`String length must not exceed ${e.maxLength}`,expected:`<= ${e.maxLength}`,actual:t.length,rule:"maxLength"});if(e.pattern){if(!new RegExp(e.pattern).test(t))r.push({path:i,message:`String does not match pattern ${e.pattern}`,expected:e.pattern,actual:t,rule:"pattern"})}}if(typeof t==="number"){if(e.minimum!==void 0&&t<e.minimum)r.push({path:i,message:`Value must be at least ${e.minimum}`,expected:`>= ${e.minimum}`,actual:t,rule:"minimum"});if(e.maximum!==void 0&&t>e.maximum)r.push({path:i,message:`Value must not exceed ${e.maximum}`,expected:`<= ${e.maximum}`,actual:t,rule:"maximum"})}if(Array.isArray(t)&&e.items)for(let D=0;D<t.length;D++){let l=i?`${i}[${D}]`:`[${D}]`;if(this.validateObjectAgainstSchema(t[D],e.items,l,r,u,n),n.stopOnFirstError&&r.length>0)return}if(t&&typeof t==="object"&&!Array.isArray(t)){let D=t;if(n.validateRequired&&e.required){for(let l of e.required)if(!(l in D)){if(r.push({path:i?`${i}.${l}`:l,message:`Missing required property '${l}'`,expected:"required",rule:"required"}),n.stopOnFirstError)return}}if(e.properties){for(let[l,a]of Object.entries(e.properties))if(l in D){let f=i?`${i}.${l}`:l;if(this.validateObjectAgainstSchema(D[l],a,f,r,u,n),n.stopOnFirstError&&r.length>0)return}}if(e.additionalProperties===!1){let l=new Set(Object.keys(e.properties||{}));for(let a of Object.keys(D))if(!l.has(a))u.push({path:i?`${i}.${a}`:a,message:`Additional property '${a}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(t,e,i){let r=[],u=[];for(let n of e)try{let D=this.getValueByPath(t,n.path),l=this.validateWithRule(D,n,n.path);if(r.push(...l),i.stopOnFirstError&&r.length>0)break}catch(D){r.push({path:n.path,message:`Rule validation failed: ${D}`,rule:"system"})}return{isValid:r.length===0,errors:r,warnings:u}}validateWithRule(t,e,i){let r=[];if(e.required&&(t===void 0||t===null))return r.push({path:i,message:e.message||`Property '${i}' is required`,expected:"required",rule:"required"}),r;if(t===void 0||t===null)return r;if(e.type){let u=Array.isArray(t)?"array":typeof t;if(u!==e.type)r.push({path:i,message:e.message||`Expected type ${e.type}, got ${u}`,expected:e.type,actual:u,rule:"type"})}if(e.min!==void 0){let u=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(u<e.min)r.push({path:i,message:e.message||`Value must be at least ${e.min}`,expected:`>= ${e.min}`,actual:u,rule:"min"})}if(e.max!==void 0){let u=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(u>e.max)r.push({path:i,message:e.message||`Value must not exceed ${e.max}`,expected:`<= ${e.max}`,actual:u,rule:"max"})}if(e.pattern&&typeof t==="string"){if(!e.pattern.test(t))r.push({path:i,message:e.message||`Value does not match pattern ${e.pattern}`,expected:e.pattern.toString(),actual:t,rule:"pattern"})}if(e.enum&&!e.enum.includes(t))r.push({path:i,message:e.message||`Value must be one of: ${e.enum.join(", ")}`,expected:e.enum.join(", "),actual:t,rule:"enum"});if(e.validator){let u=e.validator(t);if(u)r.push({path:i,message:e.message||u,rule:"custom"})}return r}getValueByPath(t,e){if(!e)return t;let i=e.split("."),r=t;for(let u of i)if(r&&typeof r==="object"&&u in r)r=r[u];else return;return r}generateRulesFromInterface(t){let e=[],i=t.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let r of i){let[,u,n,D]=r;e.push({path:u,required:!n,type:this.mapTypeScriptType(D)})}return e}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:Fl},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var Ut=new yi("bunfig",{showTags:!0});class Sn{fileLoader=new Tn;envProcessor=new gr;validator=new gn;async loadConfig(t){let e=Date.now(),{cache:i,performance:r,schema:u,validate:n,...D}=t;try{if(i?.enabled){let a=this.checkCache(D.name||"",D);if(a)return a}let l;try{l=await this.loadConfigurationStrategies(D,!0,i)}catch(a){let f=D.__strictErrorHandling;if(a instanceof Error&&a.name==="ConfigNotFoundError"){if(f)throw a;l={...await this.applyEnvironmentVariables(D.name||"",D.defaultConfig,D.checkEnv!==!1,D.verbose||!1),warnings:[`No configuration file found for "${D.name||"config"}", using defaults with environment variables`]}}else if(a instanceof Error&&a.name==="ConfigLoadError"){let s=a.message.includes("EACCES")||a.message.includes("EPERM")||a.message.includes("permission denied"),F=!s&&(a.message.includes("syntax")||a.message.includes("Expected")||a.message.includes("Unexpected")||a.message.includes("BuildMessage")||a.message.includes("errors building")),y=a.message.includes("Configuration must export a valid object")||a.message.includes("Configuration file is empty and exports nothing");if(f&&(y||s))throw a;if(F&&(!f||!y))l={...await this.applyEnvironmentVariables(D.name||"",D.defaultConfig,D.checkEnv!==!1,D.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!f)l={...await this.applyEnvironmentVariables(D.name||"",D.defaultConfig,D.checkEnv!==!1,D.verbose||!1),warnings:[`Configuration loading error, using defaults: ${a.message}`]};else throw a}else l={...await this.applyEnvironmentVariables(D.name||"",D.defaultConfig,D.checkEnv!==!1,D.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${a instanceof Error?a.message:String(a)}`]}}if(u||n)await this.validateConfiguration(l.config,u,n,D.name);if(i?.enabled&&l)this.cacheResult(D.name||"",l,i,D);if(r?.enabled){let a={operation:"loadConfig",duration:Date.now()-e,configName:D.name,timestamp:new Date};if(r.onMetrics)r.onMetrics(a);if(r.slowThreshold&&a.duration>r.slowThreshold)Ut.warn(`Slow configuration loading detected: ${a.duration}ms for ${D.name}`);l.metrics=a}return l}catch(l){let a=Date.now()-e;throw Ut.error(`Configuration loading failed after ${a}ms:`,[l instanceof Error?l:Error(String(l))]),l}}async loadConfigurationStrategies(t,e=!1,i){let{name:r="",alias:u,cwd:n,configDir:D,defaultConfig:l,checkEnv:a=!0,arrayStrategy:f="replace",verbose:s=!1}=t,F=n||hi.cwd(),y=[],c=await this.loadLocalConfiguration(r,u,F,D,l,f,s,a,i);if(c)return y.push(...this.getLocalSearchPaths(r,u,F,D)),this.finalizeResult(c,y,a,r,s);let C=await this.loadHomeConfiguration(r,u,l,f,s,a);if(C)return y.push(...this.getHomeSearchPaths(r,u)),this.finalizeResult(C,y,a,r,s);let E=await this.loadPackageJsonConfiguration(r,u,F,l,f,s,a);if(E)return y.push(lt(F,"package.json")),this.finalizeResult(E,y,a,r,s);if(y.push(...this.getAllSearchPaths(r,u,F,D)),e)throw ne.configNotFound(r,y,u);return{...await this.applyEnvironmentVariables(r,l,a,s),warnings:[`No configuration file found for "${r}"${u?` or alias "${u}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration(t,e,i,r,u,n,D,l,a){let f=l?Ze(t,u,D):u,s=this.getLocalDirectories(i,r);for(let F of s){if(D)Ut.info(`Searching for configuration in: ${F}`);let y=this.fileLoader.generateConfigPaths(t,F,e),c=await this.fileLoader.tryLoadFromPaths(y,f,{arrayStrategy:n,verbose:D,cacheTtl:a?.ttl,useCache:!a?.ttl||a.ttl>100});if(c){if(D)Ut.success(`Configuration loaded from: ${c.source.path}`);return c}}return null}async loadHomeConfiguration(t,e,i,r,u,n){if(!t)return null;let D=n?Ze(t,i,u):i,l=[lt(Zt(),".config",t),lt(Zt(),".config"),Zt()];for(let a of l){if(u)Ut.info(`Checking home directory: ${a}`);let f=this.fileLoader.generateConfigPaths(t,a,e),s=await this.fileLoader.tryLoadFromPaths(f,D,{arrayStrategy:r,verbose:u});if(s){if(u)Ut.success(`Configuration loaded from home directory: ${s.source.path}`);return s}}return null}async loadPackageJsonConfiguration(t,e,i,r,u,n,D){let l=D?Ze(t,r,n):r;try{let a=lt(i,"package.json");if(!oa(a))return null;let f=await import(a),s=f[t],F=t;if(!s&&e)s=f[e],F=e;if(s&&typeof s==="object"&&!Array.isArray(s)){if(n)Ut.success(`Configuration loaded from package.json: ${F}`);return{config:dn(l,s,u),source:{type:"package.json",path:a,priority:30,timestamp:new Date}}}}catch(a){if(n)Ut.warn("Failed to load package.json:",[a instanceof Error?a:Error(String(a))])}return null}async applyEnvironmentVariables(t,e,i,r){if(!i||!t||typeof e!=="object"||e===null||Array.isArray(e))return{config:e,source:{type:"default",priority:10,timestamp:new Date}};return{config:Ze(t,e,r),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(t,e,i,r,u){return{config:t.config,source:t.source,path:t.source.path}}async validateConfiguration(t,e,i,r){let u=[];if(i){let n=i(t);if(n)u.push(...n)}if(e){let n=await this.validator.validateConfiguration(t,e);if(!n.isValid)u.push(...n.errors.map((D)=>D.path?`${D.path}: ${D.message}`:D.message))}if(u.length>0)throw ne.configValidation(r||"unknown",u,r)}checkCache(t,e){let i=this.generateCacheKey(t,e);return ni.get(i)||null}cacheResult(t,e,i,r){let u=this.generateCacheKey(t,r);ni.set(u,e,void 0,i.ttl)}generateCacheKey(t,e){let i=[t];if(e.alias)i.push(`alias:${e.alias}`);if(e.cwd)i.push(`cwd:${e.cwd}`);if(e.configDir)i.push(`configDir:${e.configDir}`);if("checkEnv"in e)i.push(`checkEnv:${e.checkEnv}`);return i.join("|")}getLocalDirectories(t,e){return Array.from(new Set([t,lt(t,"config"),lt(t,".config"),e?lt(t,e):void 0].filter(Boolean)))}getAllSearchPaths(t,e,i,r){let u=[];return u.push(...this.getLocalSearchPaths(t,e,i,r)),u.push(...this.getHomeSearchPaths(t,e)),u.push(lt(i,"package.json")),u}getLocalSearchPaths(t,e,i,r){let u=this.getLocalDirectories(i,r),n=[];for(let D of u)n.push(...this.fileLoader.generateConfigPaths(t,D,e));return n}getHomeSearchPaths(t,e){if(!t)return[];let i=[lt(Zt(),".config",t),lt(Zt(),".config"),Zt()],r=[];for(let u of i)r.push(...this.fileLoader.generateConfigPaths(t,u,e));return r}async loadConfigWithResult(t){return this.loadConfig(t)}}var mc=new Sn;function Ze(t,e,i=!1){let r=new gr,u=t.toUpperCase().replace(/[^A-Z0-9]/g,"_");function n(D,l=[]){let a={...D};for(let[f,s]of Object.entries(D)){let F=[...l,f],y=[`${u}_${F.join("_").toUpperCase()}`,`${u}_${F.map((E)=>E.toUpperCase()).join("")}`,`${u}_${F.map((E)=>E.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],c,C;for(let E of y)if(c=hi.env[E],c!==void 0){C=E;break}if(c!==void 0&&C)if(typeof s==="boolean")a[f]=["true","1","yes"].includes(c.toLowerCase());else if(typeof s==="number"){let E=Number(c);if(!Number.isNaN(E))a[f]=E}else if(Array.isArray(s))try{a[f]=JSON.parse(c)}catch{a[f]=c.split(",").map((E)=>E.trim())}else a[f]=c;else if(s&&typeof s==="object"&&!Array.isArray(s))a[f]=n(s,F)}return a}return n(e)}var oc=lt(hi.cwd(),"config"),Cc=lt(hi.cwd(),"src/generated"),Rn={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:vi.join(qi.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:vi.join(qi.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:vi.join(qi.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},k=Rn,ht={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 d={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"};function Er(t,e){let i=[];function r(u){let n;try{n=Hu.readdirSync(u)}catch{return}for(let D of n){let l=ct.join(u,D);try{if(Hu.statSync(l).isDirectory())r(l);else if(D===e)i.push(u)}catch{continue}}}return r(t),i}function B(t,e,i){if(i||k.verbose)console.debug(`[tlsx:${t}] ${e}`)}var ol=ml(yl);function Nn(){return In.env.SUDO_PASSWORD}function Cl(t){let e=Nn();if(!e||!/(^|\|\s*|&&\s*|;\s*)sudo\s/.test(t))return t;let i=e.replace(/'/g,"'\\''"),r=t.replace(/(^|\|\s*|&&\s*|;\s*)sudo(?!\s+-[Sn])(\s+)/g,"$1sudo -S$2");return`echo '${i}' | ${r}`}async function xt(t,e={}){let i=Cl(t);try{let{stdout:r,stderr:u}=await ol(i,{cwd:e.cwd||In.cwd(),timeout:e.timeout||30000});return{stdout:r.trim(),stderr:u.trim()}}catch(r){let u=Error(`Failed to execute command: ${t}
68
+ Error: ${r.message}`);throw u.stack=r.stack,u}}function _n(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 Sr(t){let e=ct.join(El.homedir(),".stacks","ssl"),i=t.basePath&&t.basePath.trim()!==""?t.basePath:k.basePath&&k.basePath.trim()!==""?k.basePath:e,r=t.certPath?ct.isAbsolute(t.certPath)?t.certPath:ct.join(i,t.certPath):ct.join(i,k.certPath),u=t.keyPath?ct.isAbsolute(t.keyPath)?t.keyPath:ct.join(i,t.keyPath):ct.join(i,k.keyPath),n=t.caCertPath?ct.isAbsolute(t.caCertPath)?t.caCertPath:ct.join(i,t.caCertPath):ct.join(i,k.caCertPath);return{certPath:r,keyPath:u,caCertPath:n,basePath:i}}function Un(t){let e=[],i=new Set;if(t.domain)i.add(t.domain);if(t.domains?.length)t.domains.forEach((r)=>i.add(r));for(let r of i)e.push({type:2,value:r});if(t.altNameIPs?.length)for(let r of t.altNameIPs)e.push({type:7,ip:r});if(t.altNameURIs?.length)for(let r of t.altNameURIs)e.push({type:6,value:r});if(t.subjectAltNames?.length)e.push(...t.subjectAltNames);return B(d.CERT,`Generated ${e.length} Subject Alternative Names`,t.verbose),e}function Rr(t){let e=t.notBeforeDays??ht.DEFAULT_NOT_BEFORE_DAYS,i=t.validityDays??(t.validityYears?t.validityYears*365:ht.DEFAULT_VALIDITY_DAYS);B(d.CERT,"Calculating certificate validity dates",t.verbose);let r=new Date(Date.now()-86400*e*1000),u=new Date(r.getTime()+i*24*60*60*1000);return r.setUTCHours(0,0,0,0),u.setUTCHours(23,59,59,999),B(d.CERT,`Validity period: ${r.toISOString()} to ${u.toISOString()}`,t.verbose),{notBefore:r,notAfter:u}}var Ft={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},P={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 Ae(t){if(t<128)return Buffer.from([t]);let e=[],i=t;while(i>0)e.unshift(i&255),i>>=8;return Buffer.from([128|e.length,...e])}function it(t,e){let i=Ae(e.length);return Buffer.concat([Buffer.from([t]),i,e])}function de(t){let e=t.split(".").map(Number),i=[];i.push(40*e[0]+e[1]);for(let r=2;r<e.length;r++){let u=e[r],n=[];n.unshift(u&127),u>>=7;while(u>0)n.unshift(u&127|128),u>>=7;i.push(...n)}return it(Ft.OID,Buffer.from(i))}function mr(t){let e;if(typeof t==="bigint"){let i=t.toString(16).padStart(2,"0");e=Buffer.from(i.length%2?`0${i}`:i,"hex")}else if(typeof t==="number")if(t===0)e=Buffer.from([0]);else{let i=t.toString(16).padStart(2,"0");e=Buffer.from(i.length%2?`0${i}`:i,"hex")}else e=t;if(e[0]&128)e=Buffer.concat([Buffer.from([0]),e]);return it(Ft.INTEGER,e)}function jn(t,e=0){return it(Ft.BIT_STRING,Buffer.concat([Buffer.from([e]),t]))}function xn(t){return it(Ft.OCTET_STRING,t)}function et(...t){return it(Ft.SEQUENCE,Buffer.concat(t))}function wl(...t){return it(Ft.SET,Buffer.concat(t))}function Al(t){return it(Ft.PRINTABLE_STRING,Buffer.from(t,"ascii"))}function Bl(t){return it(Ft.UTF8_STRING,Buffer.from(t,"utf8"))}function dl(){return Buffer.from([Ft.NULL,0])}function Gu(t,e,i=!0){let r=160|t|(i?0:0),u=Ae(e.length);return Buffer.concat([Buffer.from([r]),u,e])}function Vu(t){let e=t.getUTCFullYear();if(e>=2050){let i=t.toISOString().replace(/[-:T]/g,"").slice(0,14)+"Z";return it(Ft.GENERALIZED_TIME,Buffer.from(i,"ascii"))}else{let i=(e%100).toString().padStart(2,"0"),r=(t.getUTCMonth()+1).toString().padStart(2,"0"),u=t.getUTCDate().toString().padStart(2,"0"),n=t.getUTCHours().toString().padStart(2,"0"),D=t.getUTCMinutes().toString().padStart(2,"0"),l=t.getUTCSeconds().toString().padStart(2,"0"),a=`${i}${r}${u}${n}${D}${l}Z`;return it(Ft.UTC_TIME,Buffer.from(a,"ascii"))}}function Tl(t,e){return et(Vu(t),Vu(e))}function qu(t){let e=[];for(let i of t){let r;switch(i.shortName){case"CN":r=P.COMMON_NAME;break;case"C":r=P.COUNTRY;break;case"L":r=P.LOCALITY;break;case"ST":r=P.STATE;break;case"O":r=P.ORGANIZATION;break;case"OU":r=P.ORGANIZATIONAL_UNIT;break;default:continue}let u=i.shortName==="C"?Al(i.value):Bl(i.value),n=et(de(r),u);e.push(wl(n))}return et(...e)}function pn(t){return et(de(t),dl())}function gl(t){return t.export({type:"spki",format:"der"})}function Sl(t){if(t.includes(":")){let e=t;if(t.includes("::")){let u=t.split("::"),n=u[0]?u[0].split(":"):[],D=u[1]?u[1].split(":"):[],l=8-n.length-D.length,a=Array.from({length:l},()=>"0");e=[...n,...a,...D].join(":")}let i=e.split(":"),r=Buffer.alloc(16);for(let u=0;u<8;u++){let n=Number.parseInt(i[u]||"0",16);r.writeUInt16BE(n,u*2)}return r}else{let e=t.split(".").map((i)=>Number.parseInt(i,10));return Buffer.from(e)}}function Rl(t){let e=[];for(let i of t)if(i.type===2&&i.value){let r=Ae(i.value.length);e.push(Buffer.concat([Buffer.from([130]),r,Buffer.from(i.value,"ascii")]))}else if(i.type===7&&i.ip){let r=Sl(i.ip),u=Ae(r.length);e.push(Buffer.concat([Buffer.from([135]),u,r]))}else if(i.type===6&&i.value){let r=Ae(i.value.length);e.push(Buffer.concat([Buffer.from([134]),r,Buffer.from(i.value,"ascii")]))}return et(...e)}function Il(t,e){if(t){if(e!==void 0)return et(it(1,Buffer.from([255])),mr(e));return et(it(1,Buffer.from([255])))}return et()}function Nl(t){let e=0;if(t.digitalSignature)e|=128;if(t.keyEncipherment)e|=32;if(t.keyCertSign)e|=4;if(t.cRLSign)e|=2;let i=0,r=e;while(r>0&&(r&1)===0)i++,r>>=1;if(e===0)i=7;return jn(Buffer.from([e]),i)}function _l(t){let e=[];if(t.serverAuth)e.push(de(P.SERVER_AUTH));if(t.clientAuth)e.push(de(P.CLIENT_AUTH));return et(...e)}function oe(t,e,i){let r=[de(t)];if(e)r.push(it(1,Buffer.from([255])));return r.push(xn(i)),et(...r)}function Ul(t){let e=[];if(e.push(Gu(0,mr(2))),e.push(mr(t.serialNumber)),e.push(pn(P.SHA256_WITH_RSA)),e.push(qu(t.issuer)),e.push(Tl(t.notBefore,t.notAfter)),e.push(qu(t.subject)),e.push(gl(t.publicKey)),t.extensions){let i=[];if(t.extensions.basicConstraints)i.push(oe(P.BASIC_CONSTRAINTS,t.extensions.basicConstraints.critical??!0,Il(t.extensions.basicConstraints.isCA,t.extensions.basicConstraints.pathLenConstraint)));if(t.extensions.keyUsage)i.push(oe(P.KEY_USAGE,t.extensions.keyUsage.critical??!0,Nl(t.extensions.keyUsage)));if(t.extensions.extendedKeyUsage)i.push(oe(P.EXTENDED_KEY_USAGE,!1,_l(t.extensions.extendedKeyUsage)));if(t.extensions.subjectAltName?.length)i.push(oe(P.SUBJECT_ALT_NAME,!1,Rl(t.extensions.subjectAltName)));if(t.extensions.subjectKeyIdentifier)i.push(oe(P.SUBJECT_KEY_IDENTIFIER,!1,xn(t.extensions.subjectKeyIdentifier)));if(i.length>0)e.push(Gu(3,et(...i)))}return et(...e)}function jl(t,e){let i=De.createSign("SHA256");i.update(t);let r=i.sign(e);return et(t,pn(P.SHA256_WITH_RSA),jn(r))}function xl(t,e){let i=t.toString("base64"),r=[];for(let u=0;u<i.length;u+=64)r.push(i.slice(u,u+64));return`-----BEGIN ${e}-----
69
+ ${r.join(`
70
+ `)}
71
+ -----END ${e}-----
72
+ `}function Ir(){return De.randomBytes(20)}function On(t=2048){let{privateKey:e,publicKey:i}=De.generateKeyPairSync("rsa",{modulusLength:t});return{privateKey:e,publicKey:i}}function pl(t){let e=t.export({type:"spki",format:"der"});return De.createHash("sha1").update(e).digest()}function Mn(t){let e={serialNumber:t.serialNumber||Ir(),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:pl(t.publicKey)}};if(t.keyUsage)e.extensions.keyUsage={...t.keyUsage,critical:!0};if(t.extendedKeyUsage)e.extensions.extendedKeyUsage=t.extendedKeyUsage;if(t.subjectAltName?.length)e.extensions.subjectAltName=t.subjectAltName;let i=Ul(e),r=jl(i,t.signingKey);return{certificate:xl(r,"CERTIFICATE"),certificateDer:r}}function Yn(t){return t.export({type:"pkcs8",format:"pem"})}function Ol(t){return De.createPrivateKey(t)}function Ml(t){let e=new De.X509Certificate(t),i=e.publicKey,r=[],u=e.subject.split(`
73
+ `);for(let n of u){let[D,...l]=n.split("="),a=l.join("=");if(D&&a)r.push({shortName:D.trim(),value:a.trim()})}return{publicKey:i,subject:r}}async function Nr(t={}){B("ca","Creating new Root CA Certificate",t.verbose);let e=t.keySize||ht.DEFAULT_KEY_SIZE;B("ca",`Generating ${e}-bit RSA key pair`,t.verbose);let{privateKey:i,publicKey:r}=On(e),u=[{shortName:"C",value:t.countryName||k.countryName},{shortName:"ST",value:t.stateName||k.stateName},{shortName:"L",value:t.localityName||k.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:D}=Rr({validityYears:t.validityYears||ht.DEFAULT_CA_VALIDITY_YEARS,verbose:t.verbose}),{certificate:l}=Mn({serialNumber:Ir(),notBefore:n,notAfter:D,subject:u,publicKey:r,signingKey:i,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:l,privateKey:Yn(i),notBefore:n,notAfter:D}}async function _r(t){if(B("ca","Generating new certificate",t.verbose),B("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:e}=Ml(t.rootCA.certificate),i=Ol(t.rootCA.privateKey);B("ca",`Generating ${ht.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,t.verbose);let r=ht.DEFAULT_KEY_SIZE,{privateKey:u,publicKey:n}=On(r),D=t.commonName||_n(t),l=t.certificateAttributes||[{shortName:"C",value:t.countryName||k.countryName},{shortName:"ST",value:t.stateName||k.stateName},{shortName:"L",value:t.localityName||k.localityName},{shortName:"O",value:t.organizationName||k.organizationName},{shortName:"CN",value:D}],{notBefore:a,notAfter:f}=Rr({validityDays:t.validityDays||ht.DEFAULT_VALIDITY_DAYS,verbose:t.verbose}),s=Un(t),F=t.keyUsage||{digitalSignature:!0,keyEncipherment:!0},y=t.extKeyUsage||{serverAuth:!0},{certificate:c}=Mn({serialNumber:Ir(),notBefore:a,notAfter:f,subject:l,issuer:e,publicKey:n,signingKey:i,isCA:t.basicConstraints?.cA??!1,pathLenConstraint:t.basicConstraints?.pathLenConstraint,keyUsage:F,extendedKeyUsage:y,subjectAltName:s});return{certificate:c,privateKey:Yn(u),notBefore:a,notAfter:f}}function kn(t,e){B(d.STORAGE,`Storing certificate and private key with options: ${JSON.stringify(e)}`,e?.verbose);let{certPath:i,keyPath:r}=Sr({basePath:e?.basePath,certPath:e?.certPath,keyPath:e?.keyPath});B(d.STORAGE,`Certificate path: ${i}`,e?.verbose),B(d.STORAGE,`Private key path: ${r}`,e?.verbose);let u=or.dirname(i);if(!Rt.existsSync(u))B(d.STORAGE,`Creating certificate directory: ${u}`,e?.verbose),Rt.mkdirSync(u,{recursive:!0});B(d.STORAGE,"Writing certificate file",e?.verbose),Rt.writeFileSync(i,t.certificate);let n=or.dirname(r);if(!Rt.existsSync(n))B(d.STORAGE,`Creating private key directory: ${n}`,e?.verbose),Rt.mkdirSync(n,{recursive:!0});return B(d.STORAGE,"Writing private key file",e?.verbose),Rt.writeFileSync(r,t.privateKey),B(d.STORAGE,"Certificate and private key stored successfully",e?.verbose),i}function Xn(t,e){B(d.STORAGE,"Storing CA certificate",e?.verbose);let{caCertPath:i}=Sr({basePath:e?.basePath,caCertPath:e?.caCertPath});B(d.STORAGE,`CA certificate path: ${i}`,e?.verbose);let r=or.dirname(i);if(!Rt.existsSync(r))B(d.STORAGE,`Creating CA certificate directory: ${r}`,e?.verbose),Rt.mkdirSync(r,{recursive:!0});return B(d.STORAGE,"Writing CA certificate file",e?.verbose),Rt.writeFileSync(i,t),B(d.STORAGE,"CA certificate stored successfully",e?.verbose),i}var G={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},vu={silent:{level:-1},fatal:{level:G.fatal},error:{level:G.error},warn:{level:G.warn},log:{level:G.log},info:{level:G.info},success:{level:G.success},fail:{level:G.fail},ready:{level:G.info},start:{level:G.info},box:{level:G.info},debug:{level:G.debug},trace:{level:G.trace},verbose:{level:G.verbose}};function sr(t){if(t===null||typeof t!=="object")return!1;let e=Object.getPrototypeOf(t);if(e!==null&&e!==Object.prototype&&Object.getPrototypeOf(e)!==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 Cr(t,e,i=".",r){if(!sr(e))return Cr(t,{},i,r);let u=Object.assign({},e);for(let n in t){if(n==="__proto__"||n==="constructor")continue;let D=t[n];if(D===null||D===void 0)continue;if(r&&r(u,n,D,i))continue;if(Array.isArray(D)&&Array.isArray(u[n]))u[n]=[...D,...u[n]];else if(sr(D)&&sr(u[n]))u[n]=Cr(D,u[n],(i?`${i}.`:"")+n.toString(),r);else u[n]=D}return u}function Yl(t){return(...e)=>e.reduce((i,r)=>Cr(i,r,"",t),{})}var kl=Yl();function Xl(t){return Object.prototype.toString.call(t)==="[object Object]"}function Wl(t){if(!Xl(t))return!1;if(!t.message&&!t.args)return!1;if(t.stack)return!1;return!0}var cr=!1,Pu=[];class J{options;_lastLog;_mockFn;constructor(t={}){let e=t.types||vu;this.options=kl({...t,defaults:{...t.defaults},level:hr(t.level,e),reporters:[...t.reporters||[]]},{types:vu,throttle:1000,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let i in e){let r={type:i,...this.options.defaults,...e[i]};this[i]=this._wrapLogFn(r),this[i].raw=this._wrapLogFn(r,!0)}if(this.options.mockFn)this.mockTypes();this._lastLog={}}get level(){return this.options.level}set level(t){this.options.level=hr(t,this.options.types,this.options.level)}prompt(t,e){if(!this.options.prompt)throw Error("prompt is not supported!");return this.options.prompt(t,e)}create(t){let e=new J({...this.options,...t});if(this._mockFn)e.mockTypes(this._mockFn);return e}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 e=this.options.reporters.indexOf(t);if(e!==-1)return this.options.reporters.splice(e,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,e){if(!t)return;if(!t.__write)t.__write=t.write;t.write=(i)=>{this[e].raw(String(i).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(){cr=!0}resumeLogs(){cr=!1;let t=Pu.splice(0);for(let e of t)e[0]._logFn(e[1],e[2])}mockTypes(t){let e=t||this.options.mockFn;if(this._mockFn=e,typeof e!=="function")return;for(let i in this.options.types)this[i]=e(i,this.options.types[i])||this[i],this[i].raw=this[i]}_wrapLogFn(t,e){return(...i)=>{if(cr){Pu.push([this,t,i,e]);return}return this._logFn(t,i,e)}}_logFn(t,e,i){if((t.level||0)>this.level)return!1;let r={date:new Date,args:[],...t,level:hr(t.level,this.options.types)};if(!i&&e.length===1&&Wl(e[0]))Object.assign(r,e[0]);else r.args=[...e];if(r.message)r.args.unshift(r.message),delete r.message;if(r.additional){if(!Array.isArray(r.additional))r.additional=r.additional.split(`
74
+ `);r.args.push(`
75
+ `+r.additional.join(`
76
+ `)),delete r.additional}r.type=typeof r.type==="string"?r.type.toLowerCase():"log",r.tag=typeof r.tag==="string"?r.tag:"";let u=(D=!1)=>{let l=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&l>0){let a=[...this._lastLog.object.args];if(l>1)a.push(`(repeated ${l} times)`);this._log({...this._lastLog.object,args:a}),this._lastLog.count=1}if(D)this._lastLog.object=r,this._log(r)};clearTimeout(this._lastLog.timeout);let n=this._lastLog.time&&r.date?r.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=r.date,n<this.options.throttle)try{let D=JSON.stringify([r.type,r.tag,r.args]),l=this._lastLog.serialized===D;if(this._lastLog.serialized=D,l){if(this._lastLog.count=(this._lastLog.count||0)+1,this._lastLog.count>this.options.throttleMin){this._lastLog.timeout=setTimeout(u,this.options.throttle);return}}}catch{}u(!0)}_log(t){for(let e of this.options.reporters)e.log(t,{options:this.options})}}function hr(t,e={},i=3){if(t===void 0)return i;if(typeof t==="number")return t;if(e[t]&&e[t].level!==void 0)return e[t].level;return i}J.prototype.add=J.prototype.addReporter;J.prototype.remove=J.prototype.removeReporter;J.prototype.clear=J.prototype.removeReporter;J.prototype.withScope=J.prototype.withTag;J.prototype.mock=J.prototype.mockTypes;J.prototype.pause=J.prototype.pauseLogs;J.prototype.resume=J.prototype.resumeLogs;function zl(t={}){return new J(t)}function Wn(t,e){let i=process.cwd()+Kl;return t.split(`
77
+ `).splice(e.split(`
78
+ `).length).map((r)=>r.trim().replace("file://","").replace(i,""))}function Ql(t,e){return(e.__write||e.write).call(e,t)}var Fr=(t)=>t?`[${t}]`:"";class Ur{formatStack(t,e,i){let r=" ".repeat((i?.errorLevel||0)+1);return r+Wn(t,e).join(`
79
+ ${r}`)}formatError(t,e){let i=t.message??Zu(e,t),r=t.stack?this.formatStack(t.stack,i,e):"",u=e?.errorLevel||0,n=u>0?`${" ".repeat(u)}[cause]: `:"",D=t.cause?`
80
+
81
+ `+this.formatError(t.cause,{...e,errorLevel:u+1}):"";return n+i+`
82
+ `+r+D}formatArgs(t,e){let i=t.map((r)=>{if(r&&typeof r.stack==="string")return this.formatError(r,e);return r});return Zu(e,...i)}formatDate(t,e){return e.date?t.toLocaleTimeString():""}filterAndJoin(t){return t.filter(Boolean).join(" ")}formatLogObj(t,e){let i=this.formatArgs(t.args,e);if(t.type==="box")return`
83
+ `+[Fr(t.tag),t.title&&t.title,...i.split(`
84
+ `)].filter(Boolean).map((r)=>" > "+r).join(`
85
+ `)+`
86
+ `;return this.filterAndJoin([Fr(t.type),Fr(t.tag),i])}log(t,e){let i=this.formatLogObj(t,{columns:e.options.stdout.columns||0,...e.options.formatOptions});return Ql(i+`
87
+ `,t.level<2?e.options.stderr||process.stderr:e.options.stdout||process.stdout)}}var{env:jt={},argv:zn=[],platform:bl=""}=typeof process>"u"?{}:process,Jl="NO_COLOR"in jt||zn.includes("--no-color"),Ll="FORCE_COLOR"in jt||zn.includes("--color"),Hl=bl==="win32",Kn=jt.TERM==="dumb",Gl=si&&si.isatty&&si.isatty(1)&&jt.TERM&&!Kn,Vl="CI"in jt&&(("GITHUB_ACTIONS"in jt)||("GITLAB_CI"in jt)||("CIRCLECI"in jt)),ql=!Jl&&(Ll||Hl&&!Kn||Gl||Vl);function Qn(t,e,i,r,u=e.slice(0,Math.max(0,t))+r,n=e.slice(Math.max(0,t+i.length)),D=n.indexOf(i)){return u+(D<0?n:Qn(D,n,i,r))}function vl(t,e,i,r,u){return t<0?i+e+r:i+Qn(t,e,r,u)+r}function Pl(t,e,i=t,r=t.length+1){return(u)=>u||!(u===""||u===void 0)?vl((""+u).indexOf(e,r),u,t,e,i):""}function T(t,e,i){return Pl(`\x1B[${t}m`,`\x1B[${e}m`,i)}var tn={reset:T(0,0),bold:T(1,22,"\x1B[22m\x1B[1m"),dim:T(2,22,"\x1B[22m\x1B[2m"),italic:T(3,23),underline:T(4,24),inverse:T(7,27),hidden:T(8,28),strikethrough:T(9,29),black:T(30,39),red:T(31,39),green:T(32,39),yellow:T(33,39),blue:T(34,39),magenta:T(35,39),cyan:T(36,39),white:T(37,39),gray:T(90,39),bgBlack:T(40,49),bgRed:T(41,49),bgGreen:T(42,49),bgYellow:T(43,49),bgBlue:T(44,49),bgMagenta:T(45,49),bgCyan:T(46,49),bgWhite:T(47,49),blackBright:T(90,39),redBright:T(91,39),greenBright:T(92,39),yellowBright:T(93,39),blueBright:T(94,39),magentaBright:T(95,39),cyanBright:T(96,39),whiteBright:T(97,39),bgBlackBright:T(100,49),bgRedBright:T(101,49),bgGreenBright:T(102,49),bgYellowBright:T(103,49),bgBlueBright:T(104,49),bgMagentaBright:T(105,49),bgCyanBright:T(106,49),bgWhiteBright:T(107,49)};function Zl(t=ql){return t?tn:Object.fromEntries(Object.keys(tn).map((e)=>[e,String]))}var $=Zl();function $l(t,e="reset"){return $[t]||$[e]}var tf=[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 Yt(t){return t.replace(new RegExp(tf,"g"),"")}var en={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:"│"}},ef={borderColor:"white",borderStyle:"rounded",valign:"center",padding:2,marginLeft:1,marginTop:1,marginBottom:1};function rf(t,e={}){let i={...e,style:{...ef,...e.style}},r=t.split(`
88
+ `),u=[],n=$l(i.style.borderColor),D={...typeof i.style.borderStyle==="string"?en[i.style.borderStyle]||en.solid:i.style.borderStyle};if(n)for(let c in D)D[c]=n(D[c]);let l=i.style.padding%2===0?i.style.padding:i.style.padding+1,a=r.length+l,f=Math.max(...r.map((c)=>Yt(c).length),i.title?Yt(i.title).length:0)+l,s=f+l,F=i.style.marginLeft>0?" ".repeat(i.style.marginLeft):"";if(i.style.marginTop>0)u.push("".repeat(i.style.marginTop));if(i.title){let c=n?n(i.title):i.title,C=D.h.repeat(Math.floor((f-Yt(i.title).length)/2)),E=D.h.repeat(f-Yt(i.title).length-Yt(C).length+l);u.push(`${F}${D.tl}${C}${c}${E}${D.tr}`)}else u.push(`${F}${D.tl}${D.h.repeat(s)}${D.tr}`);let y=i.style.valign==="center"?Math.floor((a-r.length)/2):i.style.valign==="top"?a-r.length-l:a-r.length;for(let c=0;c<a;c++)if(c<y||c>=y+r.length)u.push(`${F}${D.v}${" ".repeat(s)}${D.v}`);else{let C=r[c-y],E=" ".repeat(l),w=" ".repeat(f-Yt(C).length);u.push(`${F}${D.v}${E}${C}${w}${D.v}`)}if(u.push(`${F}${D.bl}${D.h.repeat(s)}${D.br}`),i.style.marginBottom>0)u.push("".repeat(i.style.marginBottom));return u.join(`
89
+ `)}var ei=Object.create(null),Ce=(t)=>globalThis.process?.env||import.meta.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(t?ei:globalThis),pt=new Proxy(ei,{get(t,e){return Ce()[e]??ei[e]},has(t,e){let i=Ce();return e in i||e in ei},set(t,e,i){let r=Ce(!0);return r[e]=i,!0},deleteProperty(t,e){if(!e)return!1;let i=Ce(!0);return delete i[e],!0},ownKeys(){let t=Ce(!0);return Object.keys(t)}}),uf=typeof process<"u"&&process.env&&"development"||"",nf=[["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 Df(){if(globalThis.process?.env)for(let t of nf){let e=t[1]||t[0];if(globalThis.process?.env[e])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 bn=Df();bn.name;function kt(t){return t?t!=="false":!1}var af=globalThis.process?.platform||"",lf=kt(pt.CI)||bn.ci!==!1,ff=kt(globalThis.process?.stdout&&globalThis.process?.stdout.isTTY),sf=kt(pt.DEBUG),Jn=uf==="test"||kt(pt.TEST);kt(pt.MINIMAL);var cf=/^win/i.test(af);!kt(pt.NO_COLOR)&&(kt(pt.FORCE_COLOR)||(ff||cf)&&pt.TERM);var hf=(globalThis.process?.versions?.node||"").replace(/^v/,"")||null;Number(hf?.split(".")[0]);var Ff=globalThis.process||Object.create(null),rn={versions:{}};new Proxy(Ff,{get(t,e){if(e==="env")return pt;if(e in t)return t[e];if(e in rn)return rn[e]}});var yf=globalThis.process?.release?.name==="node",Ef=!!globalThis.Bun||!!globalThis.process?.versions?.bun,mf=!!globalThis.Deno,of=!!globalThis.fastly,Cf=!!globalThis.Netlify,wf=!!globalThis.EdgeRuntime,Af=globalThis.navigator?.userAgent==="Cloudflare-Workers",Bf=[[Cf,"netlify"],[wf,"edge-light"],[Af,"workerd"],[of,"fastly"],[mf,"deno"],[Ef,"bun"],[yf,"node"]];function df(){let t=Bf.find((e)=>e[0]);if(t)return{name:t[1]}}var Tf=df();Tf?.name;function gf({onlyFirst:t=!1}={}){let e=["[\\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(e,t?void 0:"g")}var Sf=gf();function Rf(t){if(typeof t!=="string")throw TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Sf,"")}function If(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 Nf(t){return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510}function _f(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 Uf(t){if(!Number.isSafeInteger(t))throw TypeError(`Expected a code point, got \`${typeof t}\`.`)}function jf(t,{ambiguousAsWide:e=!1}={}){if(Uf(t),Nf(t)||_f(t)||e&&If(t))return 2;return 1}var xf=()=>{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},pf=globalThis.Intl?.Segmenter?new Intl.Segmenter:{segment:(t)=>t.split("")},Of=/^\p{Default_Ignorable_Code_Point}$/u;function Mf(t,e={}){if(typeof t!=="string"||t.length===0)return 0;let{ambiguousIsNarrow:i=!0,countAnsiEscapeCodes:r=!1}=e;if(!r)t=Rf(t);if(t.length===0)return 0;let u=0,n={ambiguousAsWide:!i};for(let{segment:D}of pf.segment(t)){let l=D.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(Of.test(D))continue;if(xf().test(D)){u+=2;continue}u+=jf(l,n)}return u}function Yf(){let{env:t}=$u,{TERM:e,TERM_PROGRAM:i}=t;if($u.platform!=="win32")return e!=="linux";return Boolean(t.WT_SESSION)||Boolean(t.TERMINUS_SUBLIME)||t.ConEmuTask==="{cmd::Cmder}"||i==="Terminus-Sublime"||i==="vscode"||e==="xterm-256color"||e==="alacritty"||e==="rxvt-unicode"||e==="rxvt-unicode-256color"||t.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var kf={info:"cyan",fail:"red",success:"green",ready:"green",start:"magenta"},Xf={0:"red",1:"yellow"},Wf=Yf(),ot=(t,e)=>Wf?t:e,un={error:ot("✖","×"),fatal:ot("✖","×"),ready:ot("✔","√"),warn:ot("⚠","‼"),info:ot("ℹ","i"),success:ot("✔","√"),debug:ot("⚙","D"),trace:ot("→","→"),fail:ot("✖","×"),start:ot("◐","o"),log:""};function nn(t){if(typeof Intl!=="object"||!Intl.Segmenter)return Yt(t).length;return Mf(t)}class Ln extends Ur{formatStack(t,e,i){let r=" ".repeat((i?.errorLevel||0)+1);return`
90
+ ${r}`+Wn(t,e).map((u)=>" "+u.replace(/^at +/,(n)=>$.gray(n)).replace(/\((.+)\)/,(n,D)=>`(${$.cyan(D)})`)).join(`
91
+ ${r}`)}formatType(t,e,i){let r=kf[t.type]||Xf[t.level]||"gray";if(e)return Kf(r)($.black(` ${t.type.toUpperCase()} `));let u=typeof un[t.type]==="string"?un[t.type]:t.icon||t.type;return u?zf(r)(u):""}formatLogObj(t,e){let[i,...r]=this.formatArgs(t.args,e).split(`
92
+ `);if(t.type==="box")return rf($e(i+(r.length>0?`
93
+ `+r.join(`
94
+ `):"")),{title:t.title?$e(t.title):void 0,style:t.style});let u=this.formatDate(t.date,e),n=u&&$.gray(u),D=t.badge??t.level<2,l=this.formatType(t,D,e),a=t.tag?$.gray(t.tag):"",f,s=this.filterAndJoin([l,$e(i)]),F=this.filterAndJoin(e.columns?[a,n]:[a]),y=(e.columns||0)-nn(s)-nn(F)-2;if(f=y>0&&(e.columns||0)>=80?s+" ".repeat(y)+F:(F?`${$.gray(`[${F}]`)} `:"")+s,f+=$e(r.length>0?`
95
+ `+r.join(`
96
+ `):""),t.type==="trace"){let c=Error("Trace: "+t.message);f+=this.formatStack(c.stack||"",c.message)}return D?`
97
+ `+f+`
98
+ `:f}}function $e(t){return t.replace(/`([^`]+)`/gm,(e,i)=>$.cyan(i)).replace(/\s+_([^_]+)_\s+/gm,(e,i)=>` ${$.underline(i)} `)}function zf(t="white"){return $[t]||$.white}function Kf(t="bgWhite"){return $[`bg${t[0].toUpperCase()}${t.slice(1)}`]||$.bgWhite}function Qf(t={}){let e=bf();if(process.env.CONSOLA_LEVEL)e=Number.parseInt(process.env.CONSOLA_LEVEL)??e;return zl({level:e,defaults:{level:e},stdout:process.stdout,stderr:process.stderr,prompt:(...i)=>import("./chunk-8yenn1z8.js").then((r)=>r.prompt(...i)),reporters:t.reporters||[t.fancy??!(lf||Jn)?new Ln:new Ur],...t})}function bf(){if(sf)return G.debug;if(Jn)return G.warn;return G.info}var we=Qf();async function Jf(t,e){if(ci.platform()!=="darwin")return!1;try{let i=Dn(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"";if(!i)return B(d.TRUST,"Could not extract certificate fingerprint",e),!1;try{if(Dn("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256 2>/dev/null || true").toString().includes(i))return B(d.TRUST,"Certificate fingerprint found in system keychain",e),!0}catch{}return B(d.TRUST,"Certificate fingerprint not found in system keychain",e),!1}catch(i){return B(d.TRUST,`Error checking certificate trust: ${i}`,e),!1}}var Lf={platform:"darwin",async addCertificate(t,e){if(await Jf(t,e?.verbose)){B(d.TRUST,"Certificate is already trusted, skipping trust store update",e?.verbose),we.success("Certificate is already trusted in system keychain");return}B(d.TRUST,"Adding certificate to macOS keychain",e?.verbose),await xt(`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ${t}`)},async removeCertificate(t,e,i){let r=i||k.commonName;B(d.TRUST,`Removing certificate ${r} from macOS keychain`,e?.verbose);try{await xt(`sudo security delete-certificate -c "${r}" /Library/Keychains/System.keychain`),B(d.TRUST,`Removed certificate ${r} from macOS keychain`,e?.verbose)}catch(u){throw B(d.TRUST,`Error removing certificate: ${u}`,e?.verbose),u}}},Hf={platform:"win32",async addCertificate(t,e){B(d.TRUST,"Adding certificate to Windows certificate store",e?.verbose),await xt(`certutil -f -v -addstore -enterprise Root ${t}`)},async removeCertificate(t,e,i){let r=i||k.commonName;B(d.TRUST,`Removing certificate ${r} from Windows certificate store`,e?.verbose);try{await xt(`certutil -delstore -enterprise Root "${r}"`),B(d.TRUST,`Removed certificate ${r} from Windows certificate store`,e?.verbose)}catch(u){throw B(d.TRUST,`Error removing certificate: ${u}`,e?.verbose),u}}},Gf={platform:"linux",async addCertificate(t,e){B(d.TRUST,"Adding certificate to Linux certificate store",e?.verbose);let i=ci.homedir(),r=ht.LINUX_CERT_DB_FILENAME,u=ht.LINUX_TRUST_ARGS;B(d.TRUST,`Searching for certificate databases in ${i}`,e?.verbose);let n=Er(i,r);if(n.length===0){we.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let D of n){B(d.TRUST,`Processing certificate database in ${D}`,e?.verbose);try{B(d.TRUST,`Attempting to delete existing cert for ${k.commonName}`,e?.verbose),await xt(`certutil -d sql:${D} -D -n ${k.commonName}`)}catch(l){B(d.TRUST,`Warning: Error deleting existing cert: ${l}`,e?.verbose),console.warn(`Error deleting existing cert: ${l}`)}B(d.TRUST,`Adding new certificate to ${D}`,e?.verbose),await xt(`certutil -d sql:${D} -A -t ${u} -n ${k.commonName} -i ${t}`),we.info(`Cert added to ${D}`)}},async removeCertificate(t,e,i){let r=i||k.commonName;B(d.TRUST,`Removing certificate ${r} from Linux certificate store`,e?.verbose);let u=ci.homedir(),n=ht.LINUX_CERT_DB_FILENAME;B(d.TRUST,`Searching for certificate databases in ${u}`,e?.verbose);let D=Er(u,n);if(D.length===0){we.warn("No certificate databases found. Cannot remove certificate.");return}for(let l of D){B(d.TRUST,`Processing certificate database in ${l}`,e?.verbose);try{await xt(`certutil -d sql:${l} -D -n "${r}"`),we.info(`Cert removed from ${l}`)}catch(a){B(d.TRUST,`Error removing cert from ${l}: ${a}`,e?.verbose),console.warn(`Error removing cert from ${l}: ${a}`)}}}},Vf={darwin:Lf,win32:Hf,linux:Gf};async function jr(t,e,i){B(d.TRUST,`Adding certificate to system trust store with options: ${JSON.stringify(i)}`,i?.verbose),B(d.TRUST,"Storing certificate and private key",i?.verbose);let r=kn(t,i);B(d.TRUST,"Storing CA certificate",i?.verbose);let u=Xn(e,i),n=ci.platform();B(d.TRUST,`Detected platform: ${n}`,i?.verbose);let D=Vf[n];if(!D){let l=`Unsupported platform: ${n}`;throw B(d.TRUST,`Error: ${l}`,i?.verbose),Error(l)}return await D.addCertificate(u,i),B(d.TRUST,"Certificate successfully added to system trust store",i?.verbose),r}var o={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 Xt=null;function Hn(t){let e=new Set;e.add(t);let i=t.split(".");if(i.length>=2)e.add(`*.${i.slice(1).join(".")}`);return Array.from(e)}function Pn(t){let i=Or(t).replace(/\*/g,"wildcard"),r=Z(Te(),".stacks","ssl"),u=r;if(typeof t?.https==="object")return u=t.https.basePath&&t.https.basePath.trim()!==""?t.https.basePath:r,{caCertPath:t.https.caCertPath||Z(u,`${i}.ca.crt`),certPath:t.https.certPath||Z(u,`${i}.crt`),keyPath:t.https.keyPath||Z(u,`${i}.key`)};return{caCertPath:Z(u,`${i}.ca.crt`),certPath:Z(u,`${i}.crt`),keyPath:Z(u,`${i}.key`)}}function Gn(t){let e=new Set;if(Ei(t))t.proxies.forEach((i)=>{let r=i.to||"rpx.localhost";Hn(r).forEach((u)=>e.add(u))});else if(qn(t)){let i=t.to||"rpx.localhost";Hn(i).forEach((r)=>e.add(r))}else e.add("rpx.localhost");return e.add("localhost"),e.add("*.localhost"),e}async function lh(t){h("ssl","Loading SSL configuration",t.verbose);let e={...Ke,...t};if(t.https=Wt(e),!t.https?.keyPath&&!t.https?.certPath)return h("ssl","No SSL configuration provided",t.verbose),null;if(t.https?.keyPath&&!t.https?.certPath||!t.https?.keyPath&&t.https?.certPath){let i=!t.https?.keyPath?"keyPath":"certPath";throw h("ssl",`Invalid SSL configuration - missing ${i}`,t.verbose),Error(`SSL Configuration requires both keyPath and certPath. Missing: ${i}`)}try{if(!t.https?.keyPath||!t.https?.certPath)return null;try{h("ssl","Reading SSL certificate files",t.verbose);let i=await L.readFile(t.https?.keyPath,"utf8"),r=await L.readFile(t.https?.certPath,"utf8");return h("ssl","SSL configuration loaded successfully",t.verbose),{key:i,cert:r}}catch(i){return h("ssl",`Failed to read certificates: ${i}`,t.verbose),null}}catch(i){throw h("ssl",`SSL configuration error: ${i}`,t.verbose),i}}async function fh(t){if(Et.platform==="darwin")return qf(t);if(Et.platform==="linux")try{let{exec:e}=await import("node:child_process");return await new Promise((i)=>{e(`sudo cp "${t}" /usr/local/share/ca-certificates/ && sudo update-ca-certificates`,(r)=>{if(!r)i(!0);else e(`sudo cp "${t}" /etc/pki/ca-trust/source/anchors/ && sudo update-ca-trust extract`,(u)=>{i(!u)})})})}catch{return!1}return!1}async function qf(t){if(Et.platform!=="darwin")return!1;try{if(await Yr(t,{verbose:!1,regenerateUntrustedCerts:!0}))return h("ssl","Certificate is already trusted, skipping trust operation",!1),!0;h("ssl","Trusting certificate via macOS security command",!1);try{return pr(`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${t}"`),!0}catch{try{return It(`security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db "${t}"`),!0}catch{return!1}}}catch{return!1}}async function Mr(t){if(Xt){h("ssl","Using cached SSL configuration",t.verbose);return}let e=Ei(t)?t.proxies.map((a)=>a.to):[t.to];h("ssl",`Generating certificate for domains: ${e.join(", ")}`,t.verbose);let i=Wt(t,t.verbose);if(t.verbose)o.info("Generating Root CA certificate...");let r=await Nr(i),u=Wt(t,t.verbose);if(t.verbose)o.info(`Generating host certificate for: ${e.join(", ")}`);let n=await _r({...u,rootCA:{certificate:r.certificate,privateKey:r.privateKey}});try{let a=u.basePath||Z(Te(),".stacks","ssl");await L.mkdir(a,{recursive:!0}),await Promise.all([L.writeFile(u.certPath,n.certificate),L.writeFile(u.keyPath,n.privateKey),L.writeFile(u.caCertPath,r.certificate)]),h("ssl","Certificate files saved successfully",t.verbose)}catch(a){throw h("ssl",`Error saving certificate files: ${a}`,t.verbose),Error(`Failed to save certificate files: ${a}`)}if(await Yr(u.certPath,{verbose:t.verbose,regenerateUntrustedCerts:!0})){if(h("ssl","Certificate is already trusted, skipping trust store update",t.verbose),t.verbose)o.success("Certificate is already trusted in system trust store");if(Xt={key:n.privateKey,cert:n.certificate,ca:r.certificate},t.verbose)o.success(`Certificate generated successfully for ${e.length} domain${e.length>1?"s":""}`);return}if(t.verbose)o.info("Adding certificate to system trust store (may require sudo permission)...");let l=!1;if(Et.platform==="darwin")try{let a=`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${u.caCertPath}" && security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${u.certPath}"`;if(pr(a),t.verbose)o.success("Successfully added CA and host certificates to system trust store");try{It(`security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db "${u.certPath}"`,{stdio:"pipe"})}catch{}l=!0;let f=u.basePath||Z(Te(),".stacks","ssl"),s=Z(f,"trust-rpx-cert.sh"),F=`#!/bin/bash
99
+ echo "Trusting RPX certificate for domains: ${e.join(", ")}"
100
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${u.caCertPath}"
101
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${u.certPath}"
102
+ echo "Certificates trusted! Please restart your browser."
103
+ echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
104
+ `;await L.writeFile(s,F,{mode:493})}catch(a){if(t.verbose)o.warn(`Could not add certificate to trust store automatically: ${a}`);let f=u.basePath||Z(Te(),".stacks","ssl"),s=Z(f,"trust-rpx-cert.sh"),F=`#!/bin/bash
105
+ echo "Trusting RPX certificate for domains: ${e.join(", ")}"
106
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${u.caCertPath}"
107
+ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${u.certPath}"
108
+ echo "Certificates trusted! Please restart your browser."
109
+ echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
110
+ `;if(await L.writeFile(s,F,{mode:493}),t.verbose)o.info(`Created a trust helper script at: ${s}`),o.info(`If you're still having certificate issues, run: sh ${s}`)}else if(Et.platform==="linux")try{let{exec:a}=await import("node:child_process"),f="/usr/local/share/ca-certificates/rpx",s=`
111
+ mkdir -p "/usr/local/share/ca-certificates/rpx" 2>/dev/null || true
112
+ cp "${u.caCertPath}" "/usr/local/share/ca-certificates/rpx/"
113
+ cp "${u.certPath}" "/usr/local/share/ca-certificates/rpx/"
114
+ update-ca-certificates
115
+ echo "RPX certificates installed. Please restart your browser."
116
+ `,F=Z(xr.tmpdir(),`rpx-trust-${Date.now()}.sh`);await L.writeFile(F,s,{mode:493}),await new Promise((y)=>{a(`sudo bash "${F}"`,(c)=>{if(c){if(t.verbose)o.warn(`Could not trust certificates: ${c}`);y(!1)}else{if(t.verbose)o.success("Successfully added certificates to system trust store");y(!0)}})}),await L.unlink(F).catch(()=>{}),l=!0}catch(a){if(t.verbose)o.warn(`Failed to trust certificates: ${a}`)}else if(Et.platform==="win32")try{let a=`
117
+ $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("${u.caCertPath.replace(/\//g,"\\")}")
118
+ $store = New-Object System.Security.Cryptography.X509Certificates.X509Store("ROOT", "LocalMachine")
119
+ $store.Open("ReadWrite")
120
+ $store.Add($cert)
121
+ $store.Close()
122
+ Write-Host "Certificate trusted successfully!"
123
+ `,f=Z(xr.tmpdir(),"rpx-trust.ps1");if(await L.writeFile(f,a),It(`powershell -ExecutionPolicy Bypass -File "${f}"`),t.verbose)o.success("Successfully added certificate to Windows trust store");l=!0}catch(a){if(t.verbose)o.warn(`Could not trust certificate: ${a}`)}else try{await jr(n,r.certificate,u),l=!0}catch(a){if(t.verbose)o.warn(`Could not add certificate to trust store: ${a}`)}if(Xt={key:n.privateKey,cert:n.certificate,ca:r.certificate},t.verbose)o.success(`Certificate generated successfully for ${e.length} domain${e.length>1?"s":""}`);if(!l&&t.verbose)o.warn('If you see certificate warnings in Chrome/Arc, type "thisisunsafe" on the warning page'),o.warn("This will bypass the warning and you should only need to do it once")}async function ge(t){if(!t)return null;if(Xt)return Xt;let e=Wt(t);try{let[i,r,u]=await Promise.all([L.access(e.keyPath).then(()=>!0).catch(()=>!1),L.access(e.certPath).then(()=>!0).catch(()=>!1),e.caCertPath?L.access(e.caCertPath).then(()=>!0).catch(()=>!1):Promise.resolve(!1)]);if(!i||!r)return h("ssl",`Certificate files don't exist: key=${i}, cert=${r}, paths: ${e.keyPath}, ${e.certPath}`,t.verbose),null;let n="regenerateUntrustedCerts"in t,D=t.regenerateUntrustedCerts,l=n?D!==!1:!0;if(h("ssl",`Trust check: hasFlag=${n}, flagValue=${D}, shouldCheckTrust=${l}`,t.verbose),!(l?await Yr(e.certPath,t):!0))return h("ssl","Certificate exists but is not trusted, will regenerate",t.verbose),null;let[f,s,F]=await Promise.all([L.readFile(e.keyPath,"utf8"),L.readFile(e.certPath,"utf8"),u&&e.caCertPath?L.readFile(e.caCertPath,"utf8"):Promise.resolve(void 0)]);if(F&&!F.includes("-----BEGIN CERTIFICATE-----"))return h("ssl","Invalid root CA certificate content, will regenerate",t.verbose),null;if(Ei(t))try{let{X509Certificate:y}=await import("node:crypto"),C=new y(s).subjectAltName||"",w=t.proxies.map((m)=>m.to).filter((m)=>!C.includes(`DNS:${m}`));if(w.length>0)return h("ssl",`Certificate missing SANs for: ${w.join(", ")}, will regenerate`,t.verbose),null}catch(y){h("ssl",`Could not verify cert SANs: ${y}`,t.verbose)}return h("ssl","Successfully loaded existing certificates",t.verbose),Xt={key:f,cert:s,ca:F},Xt}catch(i){return h("ssl",`Error checking existing certificates: ${i}`,t.verbose),null}}function Wt(t,e){let i=Or(t);h("ssl",`Primary domain: ${i}`,e);let r=Pn(t),u=Z(Te(),".stacks","ssl");if(typeof t.https==="object"){let n=t.https.basePath&&t.https.basePath.trim()!==""?t.https.basePath:u,D={domain:i,hostCertCN:i,basePath:n,caCertPath:t.https.caCertPath||r.caCertPath,certPath:t.https.certPath||r.certPath,keyPath:t.https.keyPath||r.keyPath,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:t.https.commonName||i,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:e||!1,subjectAltNames:Array.from(Gn(t)).map((l)=>({type:2,value:l}))};if(Vn(t.https.rootCA))D.rootCA=t.https.rootCA;return D}return{domain:i,hostCertCN:i,basePath:u,...r,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:i,organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",validityDays:825,verbose:e||!1,subjectAltNames:Array.from(Gn(t)).map((n)=>({type:2,value:n}))}}async function Zn(t,e){let i=Pn({to:t,verbose:e}),r=[i.caCertPath,i.certPath,i.keyPath];h("certificates","Attempting to clean up relating certificates",e),await Promise.all(r.map((u)=>vn(u,e)))}async function Yr(t,e){try{if(h("ssl",`Checking if certificate is trusted: ${t}`,e?.verbose),Et.platform==="darwin")try{let r=It(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"";if(!r)return h("ssl","Could not extract certificate fingerprint",e?.verbose),!1;if(It("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256").toString().includes(r))return h("ssl","Certificate fingerprint found in system keychain",e?.verbose),!0;return h("ssl","Certificate fingerprint not found in system keychain",e?.verbose),!1}catch(i){return h("ssl",`Error checking certificate trust: ${i}`,e?.verbose),!1}else if(Et.platform==="win32")try{let r=It(`openssl x509 -noout -subject -in "${t}"`).toString().trim().split("=").slice(1).join("=").trim()||"";if(!r)return h("ssl","Could not extract certificate subject",e?.verbose),!1;let u=`powershell -Command "Get-ChildItem -Path Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -like '*${r}*' } | Select-Object Subject"`;if(It(u).toString().includes(r))return h("ssl","Certificate found in trusted root store",e?.verbose),!0;return h("ssl","Certificate not found in trusted root store",e?.verbose),!1}catch(i){return h("ssl",`Error checking certificate trust on Windows: ${i}`,e?.verbose),!1}else if(Et.platform==="linux")try{let r=It(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"",u=["/etc/ssl/certs","/etc/pki/tls/certs"];for(let n of u)try{if(It(`find ${n} -type f -exec openssl x509 -noout -fingerprint -sha256 -in {} \\; 2>/dev/null | grep "${r}"`).toString().includes(r))return h("ssl",`Certificate fingerprint found in ${n}`,e?.verbose),!0}catch{}return h("ssl","Certificate not found in system trust stores",e?.verbose),!1}catch(i){return h("ssl",`Error checking certificate trust on Linux: ${i}`,e?.verbose),!1}return h("ssl",`Platform ${Et.platform} not supported for certificate trust check`,e?.verbose),!1}catch(i){return h("ssl",`Error checking if certificate is trusted: ${i}`,e?.verbose),!1}}import*as mi from"node:net";function zt(t,e,i){return h("port",`Checking if port ${t} is in use on ${e}`,i),new Promise((r)=>{let u=mi.createServer(),n=setTimeout(()=>{h("port",`Checking port ${t} timed out, assuming it's in use`,i),u.close(),r(!0)},3000);u.once("error",(D)=>{if(clearTimeout(n),D.code==="EADDRINUSE")h("port",`Port ${t} is in use`,i),r(!0);else h("port",`Error checking port ${t}: ${D.message}`,i),r(!0)}),u.once("listening",()=>{clearTimeout(n),h("port",`Port ${t} is available`,i),u.close(),r(!1)});try{u.listen(t,e)}catch(D){clearTimeout(n),h("port",`Exception checking port ${t}: ${D}`,i),r(!0)}})}async function vf(t,e,i,r=50){h("port",`Finding available port starting from ${t} (max attempts: ${r})`,i);let u=t,n=0;while(n<r){if(n++,!await zt(u,e,i))return h("port",`Found available port: ${u} after ${n} attempts`,i),u;h("port",`Port ${u} is in use, trying ${u+1} (attempt ${n}/${r})`,i),u++}throw Error(`Unable to find available port after ${r} attempts starting from ${t}`)}function $n(t,e,i=5000,r){return h("port",`Testing connection to ${e}:${t}`,r),new Promise((u)=>{let n=mi.connect({host:e,port:t,timeout:i});n.once("connect",()=>{h("port",`Successfully connected to ${e}:${t}`,r),n.end(),u(!0)}),n.once("timeout",()=>{h("port",`Connection to ${e}:${t} timed out`,r),n.destroy(),u(!1)}),n.once("error",(D)=>{h("port",`Failed to connect to ${e}:${t}: ${D.message}`,r),n.destroy(),u(!1)})})}class oi{usedPorts=new Set;hostname;verbose;maxRetries;constructor(t="0.0.0.0",e,i=50){this.hostname=t,this.verbose=e,this.maxRetries=i}async getNextAvailablePort(t,e=!1){if(this.usedPorts.has(t))return this.findNextAvailablePort(t+1,e);if(await zt(t,this.hostname,this.verbose))return this.findNextAvailablePort(t+1,e);if(e){if(!await $n(t,this.hostname,3000,this.verbose))return h("port",`Port ${t} is available but not connectable, trying next port`,this.verbose),this.findNextAvailablePort(t+1,e)}return this.usedPorts.add(t),t}async findNextAvailablePort(t,e=!1){let i=await vf(t,this.hostname,this.verbose,this.maxRetries);if(e){if(!await $n(i,this.hostname,3000,this.verbose))if(i<t+this.maxRetries)return this.findNextAvailablePort(i+1,e);else throw Error(`Unable to find a connectable port after ${this.maxRetries} attempts`)}return this.usedPorts.add(i),i}releasePort(t){h("port",`Releasing port ${t}`,this.verbose),this.usedPorts.delete(t)}}var hh=new oi;import{spawn as Pf}from"node:child_process";import*as Kt from"node:process";class Ci{processes=new Map;isShuttingDown=!1;async startProcess(t,e,i){if(this.processes.has(t)){h("start",`Process ${t} is already running`,i);return}let[r,...u]=e.command.split(" "),n=e.cwd||Kt.cwd();h("start",`Starting process ${t}:`,i),h("start",` Command: ${r} ${u.join(" ")}`,i),h("start",` Working directory: ${n}`,i),h("start",` Environment variables: ${JSON.stringify(e.env)}`,i);let D=Pf(r,u,{cwd:n,env:{...Kt.env,...e.env},shell:!0,stdio:"inherit"});return this.processes.set(t,{command:e.command,cwd:n,process:D,env:e.env}),new Promise((l,a)=>{if(D.on("error",(f)=>{if(!this.isShuttingDown)h("start",`Process ${t} failed to start: ${f}`,i),this.processes.delete(t),a(f),Kt.emit("SIGINT")}),D.on("exit",(f)=>{if(!this.isShuttingDown&&f!==null&&f!==0)h("start",`Process ${t} exited with code ${f}`,i),this.processes.delete(t),a(Error(`Process ${t} exited with code ${f}`)),Kt.emit("SIGINT")}),i)D.stdout?.on("data",(f)=>{h("process",`[${t}] ${f.toString().trim()}`,!0)}),D.stderr?.on("data",(f)=>{h("process",`[${t}] ERR: ${f.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&D.killed)this.processes.delete(t),a(Error(`Process ${t} was killed during startup`));else h("start",`Process ${t} started successfully`,i),l()},1000)})}async stopProcess(t,e){let i=this.processes.get(t);if(!i?.process){h("start",`No process found for ${t}`,e);return}return h("start",`Stopping process ${t}`,e),new Promise((r)=>{if(!i.process){r();return}i.process.once("exit",()=>{this.processes.delete(t),h("start",`Process ${t} stopped`,e),r()});try{i.process.kill("SIGTERM"),setTimeout(()=>{if(i.process){h("start",`Force killing process ${t}`,e);try{i.process.kill("SIGKILL")}catch(u){}}},3000)}catch(u){h("start",`Error stopping process ${t}: ${u}`,e),this.processes.delete(t),r()}})}async stopAll(t){if(this.isShuttingDown){h("start","Already shutting down, skipping duplicate stopAll call",t);return}this.isShuttingDown=!0,h("start","Stopping all processes",t);let e=Array.from(this.processes.keys()).map((i)=>this.stopProcess(i,t).catch((r)=>{o.error(`Failed to stop process ${i}:`,r)}));await Promise.allSettled(e),this.processes.clear(),this.isShuttingDown=!1}isRunning(t){let e=this.processes.get(t);return!!e?.process&&!e.process.killed}}var oh=new Ci;import{execSync as Zf}from"node:child_process";import*as Qt from"node:http";import*as iD from"node:http2";import*as rD from"node:net";import*as M from"node:process";var Ai=new Ci,$f=new oi("0.0.0.0"),Se=new Set,kr=!1,wi=null,Xr=null;async function Bi(t){if(kr)return h("cleanup","Cleanup already in progress, skipping",t?.verbose),Xr||Promise.resolve();kr=!0,h("cleanup","Starting cleanup process",t?.verbose),Xr=new Promise((e)=>{wi=e});try{await Ai.stopAll(t?.verbose),o.info("Shutting down proxy servers...");let e=[],i=Array.from(Se).map((r)=>new Promise((u)=>{r.close(()=>{h("cleanup","Server closed successfully",t?.verbose),u()})}));if(e.push(...i),t?.hosts&&t.domains?.length){h("cleanup","Cleaning up hosts file entries",t?.verbose),h("cleanup",`Original domains for cleanup: ${JSON.stringify(t.domains)}`,t?.verbose);let r=t.domains.filter((u)=>{if(u==="test.local")return!0;return u!=="localhost"&&!u.startsWith("localhost.")&&u!=="127.0.0.1"});if(h("cleanup",`Filtered domains for cleanup: ${JSON.stringify(r)}`,t?.verbose),r.length>0)o.info("Cleaning up hosts file entries..."),e.push(Tu(r,t?.verbose).then(()=>{h("cleanup",`Removed hosts entries for ${r.join(", ")}`,t?.verbose)}).catch((u)=>{h("cleanup",`Failed to remove hosts entries: ${u}`,t?.verbose),o.warn(`Failed to clean up hosts file entries for ${r.join(", ")}:`,u)}))}if(t?.certs&&t.domains?.length){h("cleanup","Cleaning up SSL certificates",t?.verbose),o.info("Cleaning up SSL certificates...");let r=t.domains.map(async(u)=>{try{await Zn(u,t?.verbose),h("cleanup",`Removed certificates for ${u}`,t?.verbose)}catch(n){h("cleanup",`Failed to remove certificates for ${u}: ${n}`,t?.verbose),o.warn(`Failed to clean up certificates for ${u}:`,n)}});e.push(...r)}await Promise.allSettled(e),h("cleanup","All cleanup tasks completed successfully",t?.verbose),o.success("All cleanup tasks completed successfully")}catch(e){h("cleanup",`Error during cleanup: ${e}`,t?.verbose),o.error("Error during cleanup:",e)}finally{if(wi)wi();wi=null,kr=!1;let e=t&&"vitePluginUsage"in t&&t.vitePluginUsage===!0;if(M.env.NODE_ENV!=="test"&&M.env.BUN_ENV!=="test"&&!e)M.exit(0)}return Xr}var Wr=!1;function zr(t){if(Wr){h("signal",`Received second ${t} signal, forcing exit`,!0),M.exit(1);return}Wr=!0,h("signal",`Received ${t} signal, initiating cleanup`,!0),Bi().catch((e)=>{h("signal",`Cleanup failed after ${t}: ${e}`,!0),M.exit(1)}).finally(()=>{Wr=!1})}M.once("SIGINT",()=>zr("SIGINT"));M.once("SIGTERM",()=>zr("SIGTERM"));M.on("uncaughtException",(t)=>{h("process",`Uncaught exception: ${t}`,!0),o.error("Uncaught exception:",t),zr("uncaughtException")});async function Re(t,e,i,r=5){h("connection",`Testing connection to ${t}:${e} (retries left: ${r})`,i);let u=15000,n=Date.now();if(M.env.RPX_BYPASS_CONNECTION_TEST==="true"){h("connection",`Bypassing connection test for ${t}:${e} due to RPX_BYPASS_CONNECTION_TEST flag`,i);return}let D=()=>new Promise((l,a)=>{let f=rD.connect({host:t,port:e,timeout:3000});f.once("connect",()=>{h("connection",`Successfully connected to ${t}:${e}`,i),f.end(),l()}),f.once("timeout",()=>{h("connection",`Connection to ${t}:${e} timed out`,i),f.destroy(),a(Error("Connection timed out"))}),f.once("error",(s)=>{h("connection",`Failed to connect to ${t}:${e}: ${s}`,i),f.destroy(),a(s)})});try{await D()}catch(l){if(Date.now()-n>u){h("connection",`Connection test timed out after ${u}ms, but continuing anyway`,i),o.warn(`Connection test to ${t}:${e} timed out, but RPX will try to proceed anyway.`);return}if(l.code==="ECONNREFUSED"&&r>0)return h("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${r} retries left)`,i),await new Promise((f)=>setTimeout(f,2000)),Re(t,e,i,r-1);if(r>0)try{h("connection",`Trying HTTP request to ${t}:${e}`,i),await new Promise((f,s)=>{let F=Qt.request({hostname:t,port:e,path:"/",method:"HEAD",timeout:5000},(y)=>{h("connection",`Received HTTP response with status: ${y.statusCode}`,i),f()});F.on("error",(y)=>s(y)),F.on("timeout",()=>{F.destroy(),s(Error("HTTP request timed out"))}),F.end()}),h("connection",`HTTP request to ${t}:${e} succeeded`,i);return}catch(f){return h("connection",`HTTP request to ${t}:${e} failed: ${f}`,i),h("connection",`Retrying socket connection in 2 seconds... (${r} retries left)`,i),await new Promise((s)=>setTimeout(s,2000)),Re(t,e,i,r-1)}let a=`Failed to connect to ${t}:${e} after ${5-r} attempts: ${l.message}`;h("connection",`${a}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,i),o.warn(a),o.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 uD(t){h("server",`Starting server with options: ${JSON.stringify(t)}`,t.verbose);let e=new URL((t.from?.startsWith("http")?t.from:`http://${t.from}`)||"localhost:5173"),i=new URL((t.to?.startsWith("http")?t.to:`http://${t.to}`)||"rpx.localhost"),r=Number.parseInt(e.port)||(e.protocol.includes("https:")?443:80),u=[i.hostname];if(!i.hostname.includes("localhost")&&!i.hostname.includes("127.0.0.1")){h("hosts",`Checking if hosts file entry exists for: ${i.hostname}`,t?.verbose);try{if(!(await me(u,t.verbose))[0]){o.info(`Adding ${i.hostname} to hosts file...`),o.info("This may require sudo/administrator privileges");try{await Ee(u,t.verbose)}catch(l){if(o.error("Failed to add hosts entry:",l.message),o.warn("You can manually add this entry to your hosts file:"),o.warn(`127.0.0.1 ${i.hostname}`),o.warn(`::1 ${i.hostname}`),M.platform==="win32")o.warn("On Windows:"),o.warn("1. Run notepad as administrator"),o.warn("2. Open C:\\Windows\\System32\\drivers\\etc\\hosts");else o.warn("On Unix systems:"),o.warn("sudo nano /etc/hosts")}}else h("hosts",`Host entry already exists for ${i.hostname}`,t.verbose)}catch(D){o.error("Failed to check hosts file:",D.message)}}try{await Re(e.hostname,r,t.verbose)}catch(D){h("server",`Connection test failed: ${D}`,t.verbose),o.error(D.message),o.warn("Continuing with proxy setup despite connection test failure..."),o.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=Wt({...t,to:i.hostname});if(n=await ge({...t,to:i.hostname,https:t.https}),!n){if(h("ssl",`Generating new certificates for ${i.hostname}`,t.verbose),await Mr({...t,from:e.toString(),to:i.hostname,https:t.https}),n=await ge({...t,to:i.hostname,https:t.https}),!n)throw Error(`Failed to load SSL configuration after generating certificates for ${i.hostname}`)}}catch(D){throw h("server",`SSL setup failed: ${D}`,t.verbose),D}h("server",`Setting up reverse proxy with SSL config for ${i.hostname}`,t.verbose),await es({...t,from:t.from||"localhost:5173",to:i.hostname,fromPort:r,sourceUrl:{hostname:e.hostname,host:e.host},ssl:n})}async function ts(t,e,i,r,u,n,D,l,a,f,s){h("proxy",`Creating proxy server ${t} -> ${e} with cleanUrls: ${f}`,a);function F(E){let w={};for(let[m,A]of Object.entries(E))if(!m.startsWith(":"))w[m]=A;return w}let y=(E,w)=>{h("request",`Incoming request: ${E.method} ${E.url}`,a);let m=E.url||"/",A=E.method||"GET";if(E instanceof iD.Http2ServerRequest){let S=E.headers;A=S[":method"]||A,m=S[":path"]||m}if(f){if(!m.match(/\.[a-z0-9]+$/i))if(m.endsWith("/"))m=`${m}index.html`;else m=`${m}.html`}let g=F(E.headers);if(s)g.host=`${n.hostname}:${i}`,h("request",`Changed origin: setting host header to ${g.host}`,a);let Y={hostname:n.hostname,port:i,path:m,method:A,headers:g};h("request",`Proxy request options: ${JSON.stringify(Y)}`,a);let p=Qt.request(Y,(S)=>{if(h("response",`Proxy response received with status ${S.statusCode}`,a),f&&S.statusCode===404){let rt=[];if(m.endsWith(".html"))rt.push(m.slice(0,-5));else if(!m.match(/\.[a-z0-9]+$/i))rt.push(`${m}.html`);if(!m.endsWith("/"))rt.push(`${m}/index.html`);if(rt.length>0){h("cleanUrls",`Trying alternative paths: ${rt.join(", ")}`,a);let Ct=(bt)=>{if(bt.length===0){w.writeHead(S.statusCode||404,S.headers),S.pipe(w);return}let ut=bt[0],Jt={...Y,path:ut},Ie=Qt.request(Jt,(Lt)=>{if(Lt.statusCode===200)h("cleanUrls",`Found matching path: ${ut}`,a),w.writeHead(Lt.statusCode,Lt.headers),Lt.pipe(w);else Ct(bt.slice(1))});Ie.on("error",()=>Ct(bt.slice(1))),Ie.end()};Ct(rt);return}}let st={...S.headers,"Strict-Transport-Security":"max-age=31536000; includeSubDomains; preload","X-Content-Type-Options":"nosniff"};w.writeHead(S.statusCode||500,st),S.pipe(w)});p.on("error",(S)=>{h("request",`Proxy request failed: ${S}`,a),o.error("Proxy request failed:",S),w.writeHead(502),w.end(`Proxy Error: ${S.message}`)}),E.pipe(p)};if(h("server",`Creating server with SSL config: ${!!D}`,a),D)return new Promise((E,w)=>{try{let m=Bun.serve({port:r,hostname:u,tls:{key:D.key,cert:D.cert,ca:D.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(A){let g=new URL(A.url);h("request",`Bun.serve received: ${A.method} ${g.pathname}`,a);let Y=`http://${n.host}`,p=new URL(g.pathname+g.search,Y);try{let S=new Headers(A.headers);if(S.set("host",n.host),s)S.set("origin",Y);S.set("x-forwarded-for","127.0.0.1"),S.set("x-forwarded-proto","https"),S.set("x-forwarded-host",e);let st=await fetch(p.toString(),{method:A.method,headers:S,body:A.body,redirect:"manual"}),rt=new Headers(st.headers);if(f&&g.pathname.endsWith(".html")){let Ct=g.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:Ct}})}return new Response(st.body,{status:st.status,statusText:st.statusText,headers:rt})}catch(S){return h("request",`Proxy error: ${S}`,a),new Response(`Proxy Error: ${S}`,{status:502})}},error(A){return h("server",`Bun.serve error: ${A}`,a),new Response(`Server Error: ${A.message}`,{status:500})}});Se.add(m),tD({from:t,to:e,vitePluginUsage:l,listenPort:r,ssl:!0,cleanUrls:f,verbose:a}),E()}catch(m){w(m)}});let c=Qt.createServer(y);function C(E){return Se.add(E),new Promise((w,m)=>{E.listen(r,u,()=>{h("server",`Server listening on port ${r}`,a),tD({from:t,to:e,vitePluginUsage:l,listenPort:r,ssl:!!D,cleanUrls:f,verbose:a}),w()}),E.on("error",(A)=>{h("server",`Server error: ${A}`,a),m(A)})})}return C(c)}async function es(t){h("setup",`Setting up reverse proxy: ${JSON.stringify(t)}`,t.verbose);let{from:e,to:i,fromPort:r,sourceUrl:u,ssl:n,verbose:D,cleanup:l,vitePluginUsage:a,changeOrigin:f,cleanUrls:s}=t,F=80,y=443,c="0.0.0.0",C=t.portManager||$f;try{if(i&&!i.includes("localhost")&&!i.includes("127.0.0.1")){if(!(await me([i],D))[0]){o.warn(`The hostname ${i} isn't in your hosts file. Adding it now...`);try{await Ee([i],D),o.success(`Added ${i} to your hosts file.`)}catch(g){o.error(`Failed to add ${i} to your hosts file: ${g}`),o.info(`You may need to manually add '127.0.0.1 ${i}' to your /etc/hosts file.`)}}}else if(M.platform!=="darwin"&&i&&i.includes("localhost")&&!i.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await me([i],D))[0]){h("hosts",`${i} not found in hosts file, adding...`,D);try{await Ee([i],D)}catch(g){h("hosts",`Failed to add ${i} to hosts file: ${g}`,D)}}}if(n&&!C.usedPorts.has(F)){if(!await zt(F,c,D))h("setup","Starting HTTP redirect server",D),nD(D),C.usedPorts.add(F);else if(h("setup","Port 80 is in use, skipping HTTP redirect",D),D)o.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let E=n?y:F,w=await zt(E,c,D),m;if(w){if(h("setup",`Port ${E} is already in use`,D),D)o.warn(`Port ${E} is already in use. This may be another instance of rpx or another service.`);if(E===443){if(m=await C.getNextAvailablePort(3443,!0),h("setup",`Using port ${m} instead of ${E}`,D),D)o.info(`Using port ${m} instead. Access your site at https://${i}:${m}`)}else if(m=await C.getNextAvailablePort(E+1000,!0),h("setup",`Using port ${m} instead of ${E}`,D),D)o.info(`Using port ${m} instead. Access your site at http://${i}:${m}`)}else m=E,C.usedPorts.add(m),h("setup",`Using standard ${E===443?"HTTPS":"HTTP"} port ${E} for ${i}`,D);await ts(e,i,r,m,c,u,n,a,D,s,f)}catch(E){h("setup",`Setup failed: ${E}`,D),o.error(`Failed to setup reverse proxy: ${E.message}`),Bi({domains:[i],hosts:typeof l==="boolean"?l:l?.hosts,certs:typeof l==="boolean"?l:l?.certs,verbose:D,vitePluginUsage:a})}}function nD(t){h("redirect","Starting HTTP redirect server",t);let e=Qt.createServer((i,r)=>{let u=i.headers.host||"";h("redirect",`Redirecting request from ${u}${i.url} to HTTPS`,t),r.writeHead(301,{Location:`https://${u}${i.url}`}),r.end()}).listen(80);Se.add(e),h("redirect","HTTP redirect server started",t)}function xh(t){let e={...Ke,...t};h("proxy",`Starting proxy with options: ${JSON.stringify(e)}`,e?.verbose);let i=e.to||"",r=i.split(".").pop()?.toLowerCase()||"",u=M.platform==="darwin"&&i&&!i.includes("localhost")&&!i.includes("127.0.0.1"),n=["dev","app","page","new","day","foo"],D=["test","localhost","local","example","invalid"];if(u&&n.includes(r)&&e?.verbose)o.warn(`The .${r} TLD may not work reliably for local development`),o.info(` Google owns .${r} with HSTS preloading, which can bypass local DNS`),o.info(" Consider using a reserved TLD: .test, .localhost, or .local");if(u)import("./chunk-cy653fq8.js").then(({startDnsServer:a,setupResolver:f})=>{a([i],e.verbose).then((s)=>{if(s)f(e.verbose,[i]).then(()=>{if(e.verbose)if(D.includes(r))o.success(`DNS server started for .${r} domains`);else o.success(`DNS server started for .${r} domains (hosts file entry also added)`)});else h("dns",`Could not start DNS server - ${i} may not resolve in browser`,e.verbose)})}).catch((a)=>{h("dns",`Failed to start DNS server: ${a}`,e.verbose)});let l={from:e.from,to:e.to,cleanUrls:e.cleanUrls,https:Wt(e),cleanup:e.cleanup,vitePluginUsage:e.vitePluginUsage,changeOrigin:e.changeOrigin,verbose:e.verbose,regenerateUntrustedCerts:e.regenerateUntrustedCerts};h("proxy",`Server options: ${JSON.stringify(l)}`,e.verbose),uD(l).catch((a)=>{h("proxy",`Failed to start proxy: ${a}`,e.verbose),o.error(`Failed to start proxy: ${a.message}`),Bi({domains:[e.to],hosts:typeof e.cleanup==="boolean"?e.cleanup:e.cleanup?.hosts,certs:typeof e.cleanup==="boolean"?e.cleanup:e.cleanup?.certs,verbose:e.verbose})})}function is(t){return t?.verbose||!1}async function ph(t){let e={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)e={...e,...t};let i=is(e);if(h("config",`Starting with config: ${JSON.stringify(e,null,2)}`,i),h("config",`Is multi-proxy? ${"proxies"in e}`,i),"proxies"in e&&Array.isArray(e.proxies)){h("servers",`Found ${e.proxies.length} proxies in config`,i);for(let c of e.proxies)if(c.start){let C=`${c.from}-${c.to}`;try{h("watch",`Starting command for ${C} with command: ${c.start.command}`,i),o.info(`Starting command for ${C}...`),await Ai.startProcess(C,c.start,i);let E=new URL(c.from.startsWith("http")?c.from:`http://${c.from}`),w=E.hostname||"localhost",m=Number(E.port)||80;try{await Re(w,m,i),h("watch",`Dev server is ready at ${w}:${m}`,i)}catch(A){h("watch",`Connection check failed, but continuing with proxy setup: ${A}`,i),o.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(E){throw h("watch",`Failed to start command for ${C}: ${E}`,i),Error(`Failed to start command for ${C}: ${E}`)}}else h("watch",`No start command for proxy ${c.from} -> ${c.to}`,i)}else if("start"in e&&e.start){h("watch","Found start command in single proxy config",i);let c=`${e.from}-${e.to}`;try{if(e.start)h("watch",`Starting command: ${e.start.command}`,i),await Ai.startProcess(c,e.start,i);let C=new URL(e.from?.startsWith("http")?e.from:`http://${e.from}`),E=C.hostname||"localhost",w=Number(C.port)||80;try{await Re(E,w,i),h("watch",`Dev server is ready at ${E}:${w}`,i)}catch(m){h("watch",`Connection check failed, but continuing with proxy setup: ${m}`,i),o.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(C){throw h("watch",`Failed to run start command: ${C}`,i),Error(`Failed to run start command: ${C}`)}}else h("watch","No start command found in config",i);let r="proxies"in e&&Array.isArray(e.proxies)?e.proxies[0]?.to:("to"in e)?e.to:"rpx.localhost";if(M.platform!=="win32"&&(e.https||e.cleanup?.hosts!==!1)){if(!Fe())try{h("sudo","Pre-acquiring sudo credentials for privileged operations",i),Zf("sudo -v",{stdio:"inherit"})}catch{h("sudo","Could not pre-acquire sudo credentials",i)}}if(e.https){let c=await ge(e);if(!c){if(h("ssl",`No valid or trusted certificates found for ${r}, generating new ones`,e.verbose),await Mr(e),c=await ge(e),!c)throw Error(`Failed to load SSL certificates after generation for ${r}`)}else h("ssl",`Using existing and trusted certificates for ${r}`,e.verbose);e._cachedSSLConfig=c}let u="proxies"in e&&Array.isArray(e.proxies)?e.proxies.map((c)=>({...c,https:e.https,cleanup:e.cleanup,cleanUrls:c.cleanUrls??("cleanUrls"in e?e.cleanUrls:!1),vitePluginUsage:e.vitePluginUsage,changeOrigin:c.changeOrigin??e.changeOrigin,verbose:i,_cachedSSLConfig:e._cachedSSLConfig})):[{from:"from"in e?e.from:"localhost:5173",to:"to"in e?e.to:"rpx.localhost",cleanUrls:"cleanUrls"in e?e.cleanUrls:!1,https:e.https,cleanup:e.cleanup,vitePluginUsage:e.vitePluginUsage,start:"start"in e?e.start:void 0,changeOrigin:e.changeOrigin,verbose:i,_cachedSSLConfig:e._cachedSSLConfig}],n=u.map((c)=>c.to||"rpx.localhost"),D=e._cachedSSLConfig,l=n.filter((c)=>c&&!c.includes("localhost")&&!c.includes("127.0.0.1")),a=["dev","app","page","new","day","foo"],f=["test","localhost","local","example","invalid"],s=[...new Set(l.map((c)=>c.split(".").pop()?.toLowerCase()))],F=s.filter((c)=>!!c&&a.includes(c));if(F.length>0&&i)o.warn(`The following TLDs may not work reliably for local development: ${F.map((c)=>`.${c}`).join(", ")}`),o.info(" These TLDs have HSTS preloading which can bypass local DNS"),o.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(M.platform==="darwin"&&l.length>0){let{startDnsServer:c,setupResolver:C}=await import("./chunk-cy653fq8.js");if(await c(l,i)){if(await C(i,l),i)if(s.every((m)=>!!m&&f.includes(m)))o.success(`DNS server started for ${s.map((m)=>`.${m}`).join(", ")} domains`);else o.success(`DNS server started for ${s.map((m)=>`.${m}`).join(", ")} domains (hosts file entries also added)`)}else h("dns","Could not start DNS server - custom domains may not resolve",i)}let y=async()=>{h("cleanup","Starting cleanup handler",e.verbose);try{let{stopDnsServer:c,removeResolver:C}=await import("./chunk-cy653fq8.js");c(e.verbose),await C(e.verbose)}catch(c){h("cleanup",`Error stopping DNS server: ${c}`,e.verbose)}try{await Ai.stopAll(e.verbose)}catch(c){h("cleanup",`Error stopping processes: ${c}`,e.verbose)}await Bi({domains:n,hosts:typeof e.cleanup==="boolean"?e.cleanup:e.cleanup?.hosts,certs:typeof e.cleanup==="boolean"?e.cleanup:e.cleanup?.certs,verbose:e.verbose||!1})};if(M.on("SIGINT",y),M.on("SIGTERM",y),M.on("uncaughtException",(c)=>{h("process",`Uncaught exception: ${c}`,!0),console.error("Uncaught exception:",c),y()}),D&&u.length>1){h("proxies",`Creating shared HTTPS server for ${u.length} domains`,i);let c=new Map;for(let m of u){let A=m.to||"rpx.localhost",g=new URL(m.from?.startsWith("http")?m.from:`http://${m.from}`),Y=Number.parseInt(g.port)||80;if(c.set(A,{fromPort:Y,sourceHost:g.host,cleanUrls:m.cleanUrls||!1,changeOrigin:m.changeOrigin||!1,pathRewrites:m.pathRewrites}),h("proxies",`Route: ${A} → ${g.host}`,i),!A.includes("localhost")&&!A.includes("127.0.0.1"))try{if(!(await me([A],i))[0])await Ee([A],i)}catch{h("hosts",`Could not add hosts entry for ${A}`,i)}}if(!await zt(80,"0.0.0.0",i))nD(i);let E=443;if(await zt(E,"0.0.0.0",i)){if(h("proxies",`Port ${E} is already in use, cannot start shared proxy`,i),i)o.warn(`Port ${E} is in use. Shared HTTPS proxy cannot start.`);return}try{let m=Bun.serve({port:E,hostname:"0.0.0.0",tls:{key:D.key,cert:D.cert,ca:D.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(A){let g=new URL(A.url),p=(A.headers.get("host")||"").split(":")[0],S=c.get(p);if(!S)return h("request",`No route found for host: ${p}`,i),new Response(`No proxy configured for ${p}`,{status:404});let st=S.sourceHost,rt=g.pathname,Ct=eD(g.pathname,S.pathRewrites);if(Ct)st=Ct.targetHost,rt=Ct.targetPath,h("request",`Path rewrite: ${g.pathname} → ${st}${rt}`,i);let bt=`http://${st}${rt}${g.search}`;try{let ut=new Headers(A.headers);if(ut.set("host",st),S.changeOrigin)ut.set("origin",`http://${S.sourceHost}`);ut.set("x-forwarded-for","127.0.0.1"),ut.set("x-forwarded-proto","https"),ut.set("x-forwarded-host",p);let Jt=await fetch(bt,{method:A.method,headers:ut,body:A.body,redirect:"manual"}),Ie=new Headers(Jt.headers);if(S.cleanUrls&&g.pathname.endsWith(".html")){let Lt=g.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:Lt}})}return new Response(Jt.body,{status:Jt.status,statusText:Jt.statusText,headers:Ie})}catch(ut){return h("request",`Proxy error for ${p}: ${ut}`,i),new Response(`Proxy Error: ${ut}`,{status:502})}},error(A){return h("server",`Shared proxy server error: ${A}`,i),new Response(`Server Error: ${A.message}`,{status:500})}});Se.add(m),h("proxies",`Shared HTTPS proxy listening on port ${E} for ${c.size} domains`,i)}catch(m){h("proxies",`Failed to start shared proxy: ${m}`,i),console.error("Failed to start shared HTTPS proxy:",m),y()}}else for(let c of u)try{let C=c.to||"rpx.localhost";h("proxy",`Starting proxy for ${C} with SSL config: ${!!D}`,c.verbose),await uD({from:c.from||"localhost:5173",to:C,cleanUrls:c.cleanUrls||!1,https:c.https||!1,cleanup:c.cleanup||!1,vitePluginUsage:c.vitePluginUsage||!1,verbose:c.verbose||!1,_cachedSSLConfig:D,changeOrigin:c.changeOrigin||!1})}catch(C){h("proxies",`Failed to start proxy for ${c.to}: ${C}`,c.verbose),console.error(`Failed to start proxy for ${c.to}:`,C),y()}}function tD(t){if(t?.vitePluginUsage||!t?.verbose)return;if(console.log(""),console.log(` ${mt.green(mt.bold("rpx"))} ${mt.green(`v${Kr}`)}`),console.log(` ${mt.green("➜")} ${mt.dim(t?.from??"")} ${mt.dim("➜")} ${mt.cyan(t?.ssl?`https://${t?.to}`:`http://${t?.to}`)}`),t?.listenPort!==(t?.ssl?443:80))console.log(` ${mt.green("➜")} Listening on port ${t?.listenPort}`);if(t?.cleanUrls)console.log(` ${mt.green("➜")} Clean URLs enabled`)}
124
+ export{mt as a,Kr as b,Ke as c,Ee as d,Tu as e,me as f,lh as g,fh as h,Mr as i,ge as j,Wt as k,Zn as l,Yr as m,zt as n,vf as o,oi as p,hh as q,oh as r,Bi as s,uD as t,xh as u,ph as v};