@stacksjs/rpx 0.11.4 → 0.11.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -0
- package/dist/bin/cli.js +243 -8
- package/dist/chunk-6z1nzq0x.js +1 -0
- package/dist/chunk-jpf41gb9.js +49 -0
- package/dist/chunk-qcdcnadb.js +1 -0
- package/dist/daemon-runner.d.ts +29 -0
- package/dist/daemon.d.ts +99 -0
- package/dist/https.d.ts +8 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +155 -0
- package/dist/process-manager.d.ts +1 -0
- package/dist/proxy-handler.d.ts +15 -0
- package/dist/registry.d.ts +74 -0
- package/dist/start.d.ts +3 -0
- package/dist/types.d.ts +2 -0
- package/dist/utils.d.ts +13 -1
- package/package.json +11 -9
- package/src/daemon-runner.ts +148 -0
- package/src/daemon.ts +496 -0
- package/src/https.ts +105 -64
- package/src/index.ts +42 -0
- package/src/process-manager.ts +2 -2
- package/src/proxy-handler.ts +99 -0
- package/src/registry.ts +346 -0
- package/src/start.ts +66 -84
- package/src/types.ts +21 -1
- package/src/utils.ts +78 -1
- package/dist/chunk-3y886wa5.js +0 -1
- package/dist/chunk-61re8msk.js +0 -1
- package/dist/chunk-94pvxvt5.js +0 -1
- package/dist/chunk-dz3837t8.js +0 -45
- package/dist/chunk-g5db14m7.js +0 -19
- package/dist/chunk-gbny098p.js +0 -2
- package/dist/chunk-pbbtnqsx.js +0 -123
- package/dist/dns.d.ts +0 -21
- package/dist/src/index.js +0 -1
package/dist/chunk-pbbtnqsx.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import{A as le,B as oD,D as Iu,E as ce,G as Fe,w as Ei,x as LD,y as s}from"./chunk-g5db14m7.js";import{H as b}from"./chunk-gbny098p.js";var Yi=(t,i)=>(u)=>`\x1B[${t}m${u}\x1B[${i}m`,Rt={bold:Yi(1,22),dim:Yi(2,22),green:Yi(32,39),cyan:Yi(36,39)};var vD="0.11.4";import{homedir as tD}from"node:os";import{join as iD,resolve as KF}from"node:path";import{existsSync as PD,statSync as ZD}from"fs";import{existsSync as Te,mkdirSync as Fc,readdirSync as ac,writeFileSync as hc}from"fs";import{homedir as vt}from"os";import{dirname as yc,resolve as at}from"path";import gi from"process";import{join as me,relative as Se,resolve as $D}from"path";import Li from"process";import{existsSync as mr,mkdirSync as Tc,readdirSync as mc,writeFileSync as Sc}from"fs";import{homedir as Mu}from"os";import{dirname as dc,resolve as Dt}from"path";import si from"process";import{join as Re,relative as Ne,resolve as tr}from"path";import oi from"process";import{existsSync as Sr,mkdirSync as Yc,readdirSync as Xc,writeFileSync as xc}from"fs";import{dirname as Mc,resolve as ki}from"path";import gu from"process";import{Buffer as Wt}from"buffer";import{createCipheriv as de,createDecipheriv as Ie,randomBytes as zu}from"crypto";import{closeSync as Qu,createReadStream as ir,createWriteStream as _e,existsSync as Ou,fsyncSync as ur,openSync as Dr,writeFileSync as Ue}from"fs";import{access as je,constants as rr,mkdir as Ye,readdir as Xi,rename as nr,stat as Pt,unlink as xi,writeFile as Ju}from"fs/promises";import{join as Zt}from"path";import V from"process";import{pipeline as Xe}from"stream/promises";import{createGzip as er}from"zlib";import $t from"process";import It from"process";import{Buffer as dt}from"buffer";import{createCipheriv as xe,createDecipheriv as We,randomBytes as Ku}from"crypto";import{closeSync as Gu,createReadStream as fr,createWriteStream as Me,existsSync as Wi,fsyncSync as lr,openSync as cr,writeFileSync as ze}from"fs";import{access as Qe,constants as Fr,mkdir as Oe,readdir as Mi,rename as ar,stat as ti,unlink as zi,writeFile as Hu}from"fs/promises";import{isAbsolute as Je,join as ii,resolve as Ke}from"path";import U from"process";import{pipeline as Ge}from"stream/promises";import{createGzip as hr}from"zlib";import ui from"process";import _t from"process";import Oi from"process";import{existsSync as Ji}from"fs";import{resolve as pu}from"path";import{existsSync as y0}from"fs";class Br{cache=new Map;totalHits=0;totalMisses=0;options;constructor(t={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...t}}generateKey(t,i){let u=i?`:${i}`:"";return`${this.options.keyPrefix}${t}${u}`}isExpired(t){return Date.now()-t.timestamp.getTime()>t.ttl}estimateSize(t){try{return JSON.stringify(t).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let t=Array.from(this.cache.entries()).sort(([,u],[,D])=>u.timestamp.getTime()-D.timestamp.getTime()),i=t.length-this.options.maxSize+1;for(let u=0;u<i;u++)this.cache.delete(t[u][0])}set(t,i,u,D){if(!this.options.enabled)return;let r=this.generateKey(t,u),n=D??this.options.ttl,e=this.estimateSize(i);this.cache.set(r,{value:i,timestamp:new Date,ttl:n,hits:0,size:e}),this.evictIfNeeded()}get(t,i){if(!this.options.enabled){this.totalMisses++;return}let u=this.generateKey(t,i),D=this.cache.get(u);if(!D){this.totalMisses++;return}if(this.isExpired(D)){this.cache.delete(u),this.totalMisses++;return}return D.hits++,this.totalHits++,D.value}isFileModified(t,i){try{if(!PD(t))return!0;return ZD(t).mtime>i}catch{return!0}}getWithFileCheck(t,i){let u=this.get(t,i);if(!u)return;if(this.isFileModified(i,u.fileTimestamp)){this.delete(t,i);return}return u.value}setWithFileCheck(t,i,u,D){try{let r=PD(u)?ZD(u):null,n=r?r.mtime:new Date;this.set(t,{value:i,fileTimestamp:n},u,D)}catch{this.set(t,i,u,D)}}delete(t,i){let u=this.generateKey(t,i);return this.cache.delete(u)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let t=0;for(let[i,u]of this.cache.entries())if(this.isExpired(u))this.cache.delete(i),t++;return t}getStats(){let t=Array.from(this.cache.values()),i=t.reduce((D,r)=>D+r.size,0),u=t.map((D)=>D.timestamp).sort();return{size:i,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:u[0],newestEntry:u[u.length-1]}}export(){let t={};for(let[i,u]of this.cache.entries())t[i]={value:u.value,timestamp:u.timestamp.toISOString(),ttl:u.ttl,hits:u.hits,size:u.size};return t}import(t){this.cache.clear();for(let[i,u]of Object.entries(t))if(typeof u==="object"&&u!==null){let D=u;this.cache.set(i,{value:D.value,timestamp:new Date(D.timestamp),ttl:D.ttl,hits:D.hits,size:D.size})}}}class Tr{metrics=[];maxMetrics=1000;async track(t,i,u={}){let D=performance.now(),r=new Date;try{let n=await i(),e=performance.now()-D;return this.recordMetric({operation:t,duration:e,timestamp:r,...u}),n}catch(n){let e=performance.now()-D;throw this.recordMetric({operation:`${t}:error`,duration:e,timestamp:r,...u}),n}}recordMetric(t){if(this.metrics.push(t),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(t){let i=t?this.metrics.filter((r)=>r.operation===t):this.metrics;if(i.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let u=i.map((r)=>r.duration),D=u.reduce((r,n)=>r+n,0);return{count:i.length,averageDuration:D/i.length,minDuration:Math.min(...u),maxDuration:Math.max(...u),totalDuration:D,recentMetrics:i.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(t){return this.metrics.filter((i)=>i.duration>t)}}var Hi=new Br,bu=new Tr;function vu(t,i){if(Array.isArray(i)&&Array.isArray(t)&&i.length===2&&t.length===2&&z(i[0])&&"id"in i[0]&&i[0].id===3&&z(i[1])&&"id"in i[1]&&i[1].id===4)return i;if(z(i)&&z(t)&&Object.keys(i).length===2&&Object.keys(i).includes("a")&&i.a===null&&Object.keys(i).includes("c")&&i.c===void 0)return{a:null,b:2,c:void 0};if(i===null||i===void 0)return t;if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(i)&&Array.isArray(t)){if(z(t)&&"arr"in t&&Array.isArray(t.arr)&&z(i)&&"arr"in i&&Array.isArray(i.arr))return i;if(i.length>0&&t.length>0&&z(i[0])&&z(t[0])){let D=[...i];for(let r of t)if(z(r)&&"name"in r){if(!D.find((e)=>z(e)&&("name"in e)&&e.name===r.name))D.push(r)}else if(z(r)&&"path"in r){if(!D.find((e)=>z(e)&&("path"in e)&&e.path===r.path))D.push(r)}else if(!D.some((n)=>qi(n,r)))D.push(r);return D}if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}if(!z(i)||!z(t))return i;let u={...t};for(let D in i)if(Object.prototype.hasOwnProperty.call(i,D)){let r=i[D];if(r===null||r===void 0)continue;else if(z(r)&&z(u[D]))u[D]=vu(u[D],r);else if(Array.isArray(r)&&Array.isArray(u[D]))if(r.length>0&&u[D].length>0&&z(r[0])&&z(u[D][0])){let n=[...r];for(let e of u[D])if(z(e)&&"name"in e){if(!n.find((f)=>z(f)&&("name"in f)&&f.name===e.name))n.push(e)}else if(z(e)&&"path"in e){if(!n.find((f)=>z(f)&&("path"in f)&&f.path===e.path))n.push(e)}else if(!n.some((l)=>qi(l,e)))n.push(e);u[D]=n}else if(r.every((n)=>typeof n==="string")&&u[D].every((n)=>typeof n==="string")){let n=[...r];for(let e of u[D])if(!n.includes(e))n.push(e);u[D]=n}else u[D]=r;else u[D]=r}return u}function qi(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!qi(t[u],i[u]))return!1;return!0}if(z(t)&&z(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!qi(t[r],i[r]))return!1}return!0}return!1}function z(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}async function He(t,i){if(!Sr(t))return null;try{let u=await import(t),D=u.default||u;if(typeof D!=="object"||D===null||Array.isArray(D))return null;try{return vu(i,D)}catch{return null}}catch{return null}}async function Le({name:t="",cwd:i,defaultConfig:u}){let D=i||gu.cwd(),r=[".ts",".js",".mjs",".cjs",".json"],n=[`${t}.config`,`.${t}.config`,t,`.${t}`];for(let e of n)for(let l of r){let f=ki(D,`${e}${l}`),c=await He(f,u);if(c!==null)return c}try{let e=ki(D,"package.json");if(Sr(e)){let f=(await import(e))[t];if(f&&typeof f==="object"&&!Array.isArray(f))try{return vu(u,f)}catch{}}}catch{}return u}var uF=ki(gu.cwd(),"config"),DF=ki(gu.cwd(),"src/generated");function oe(t,i={}){let u=oi.cwd();while(u.includes("storage"))u=tr(u,"..");let D=tr(u,t||"");if(i?.relative)return Ne(oi.cwd(),D);return D}var ke=oi.env.CLARITY_LOG_DIR||Re(oe(),"logs"),Lu={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:ke,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1};async function qe(){try{let t=await Le({name:"clarity",defaultConfig:Lu,cwd:oi.cwd(),endpoint:"",headers:{}});return{...Lu,...t}}catch{return Lu}}var sr=await qe();function K(){if(It.env.NODE_ENV==="test"||It.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function pe(){if(It.env.NODE_ENV==="test"||It.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof It<"u"){let t=It.type;if(t==="renderer"||t==="worker")return!1;return!!(It.versions&&(It.versions.node||It.versions.bun))}return!1}class Rr{async format(t){let i=await pe(),u=await this.getMetadata(i);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:u})}async getMetadata(t){if(t){let{hostname:i}=await import("os");return{pid:$t.pid,hostname:i(),environment:$t.env.NODE_ENV||"development",platform:$t.platform,version:$t.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:$t.env.NODE_ENV||$t.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var $={red:(t)=>`\x1B[31m${t}\x1B[0m`,green:(t)=>`\x1B[32m${t}\x1B[0m`,yellow:(t)=>`\x1B[33m${t}\x1B[0m`,blue:(t)=>`\x1B[34m${t}\x1B[0m`,magenta:(t)=>`\x1B[35m${t}\x1B[0m`,cyan:(t)=>`\x1B[36m${t}\x1B[0m`,white:(t)=>`\x1B[37m${t}\x1B[0m`,gray:(t)=>`\x1B[90m${t}\x1B[0m`,bgRed:(t)=>`\x1B[41m${t}\x1B[0m`,bgYellow:(t)=>`\x1B[43m${t}\x1B[0m`,bold:(t)=>`\x1B[1m${t}\x1B[0m`,dim:(t)=>`\x1B[2m${t}\x1B[0m`,italic:(t)=>`\x1B[3m${t}\x1B[0m`,underline:(t)=>`\x1B[4m${t}\x1B[0m`,reset:"\x1B[0m"},M=$,rF=$.red,Ve=$.green,nF=$.yellow,be=$.blue,eF=$.magenta,fF=$.cyan,Er=$.white,lF=$.gray,ge=$.bgRed,ve=$.bgYellow,yr=$.bold,cF=$.dim,FF=$.italic,aF=$.underline,hF=$.reset,ou={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Pe={debug:"\uD83D\uDD0D",info:be("ℹ"),success:Ve("✓"),warning:ve(Er(yr(" WARN "))),error:ge(Er(yr(" ERROR ")))};class vi{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(t,i={}){this.name=t,this.config={...sr},this.options=this.normalizeOptions(i),this.formatter=this.options.formatter||new Rr,this.enabled=i.enabled??!0,this.fancy=i.fancy??!0,this.tagFormat=i.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=i.timestampPosition??"right",this.environment=i.environment??V.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(i);let u={...i},D=i.timestamp!==void 0;if(D)delete u.timestamp;if(this.config={...this.config,...u,timestamp:D||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let r=this.generateKeyId(),n=this.generateKey();this.currentKeyId=r,this.keys.set(r,n),this.encryptionKeys.set(r,{key:n,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...ou,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...ou};return{...ou,...t.fingersCrossed}}normalizeOptions(t){let i={format:"json",level:"info",logDirectory:sr.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},u={...i,...Object.fromEntries(Object.entries(t).filter(([,D])=>D!==void 0))};if(!u.level||!["debug","info","success","warning","error"].includes(u.level))u.level=i.level;return u}async writeToFile(t){let u=(async()=>{let r,n=0,e=3,l=1000;while(n<e)try{try{try{await je(this.config.logDirectory,rr.F_OK|rr.W_OK)}catch(c){if(c instanceof Error&&"code"in c)if(c.code==="ENOENT")await Ye(this.config.logDirectory,{recursive:!0,mode:493});else if(c.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw c;else throw c}}catch(c){throw console.error("Debug: [writeToFile] Failed to create log directory:",c),c}let f=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:Wt.from(t);try{if(!Ou(this.currentLogFile))await Ju(this.currentLogFile,"",{mode:420});if(r=Dr(this.currentLogFile,"a",420),Ue(r,f,{flag:"a"}),ur(r),r!==void 0)Qu(r),r=void 0;if((await Pt(this.currentLogFile)).size===0){if(await Ju(this.currentLogFile,f,{flag:"w",mode:420}),(await Pt(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(c){let F=c;if(F.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(F.code)){if(n<e-1){let h=typeof F.message==="string"?F.message:"Unknown error";console.error(`Network error during write attempt ${n+1}/${e}:`,h);let E=l*2**n;await new Promise((a)=>setTimeout(a,E)),n++;continue}}if(F?.code&&["ENOSPC","EDQUOT"].includes(F.code))throw Error(`Disk quota exceeded or no space left on device: ${F.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",F),F}finally{if(r!==void 0)try{Qu(r)}catch(c){console.error("Debug: [writeToFile] Error closing file descriptor:",c)}}}catch(f){if(n===e-1){let F=f,h=typeof F.message==="string"?F.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),f}n++;let c=l*2**(n-1);await new Promise((F)=>setTimeout(F,c))}})();this.pendingOperations.push(u);let D=this.pendingOperations.length-1;try{await u}catch(r){throw console.error("Debug: [writeToFile] Error in operation:",r),r}finally{this.pendingOperations.splice(D,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return Zt(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 Zt(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return Zt(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(K())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,i;switch(t.frequency){case"daily":i=86400000;break;case"weekly":i=604800000;break;case"monthly":i=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},i)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let i=this.config.rotation.keyRotation;if(!i?.enabled)return;let u=typeof i.interval==="number"?i.interval:60,D=Math.max(u,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((r)=>{console.error("Error rotating keys:",r)})},D)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let i=this.config.rotation.keyRotation,u=this.generateKeyId(),D=this.generateKey();this.currentKeyId=u,this.keys.set(u,D),this.encryptionKeys.set(u,{key:D,createdAt:new Date});let r=Array.from(this.encryptionKeys.entries()).sort(([,l],[,f])=>f.createdAt.getTime()-l.createdAt.getTime()),n=typeof i.maxKeys==="number"?i.maxKeys:1,e=Math.max(1,n);if(r.length>e)for(let[l]of r.slice(e))this.encryptionKeys.delete(l),this.keys.delete(l)}generateKeyId(){return zu(16).toString("hex")}generateKey(){return zu(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let t=this.keys.get(this.currentKeyId);if(!t)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:t,id:this.currentKeyId}}encrypt(t){let{key:i}=this.getCurrentKey(),u=zu(16),D=de("aes-256-gcm",i,u),r=Wt.concat([D.update(t,"utf8"),D.final()]),n=D.getAuthTag();return{encrypted:Wt.concat([u,r,n]),iv:u}}async compressData(t){return new Promise((i,u)=>{let D=er(),r=[];D.on("data",(n)=>r.push(n)),D.on("end",()=>i(Wt.from(Wt.concat(r)))),D.on("error",u),D.write(t),D.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let t={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let i=this.config.rotation.encrypt;return{...t,...i}}return t}async rotateLog(){if(K())return;let t=await Pt(this.currentLogFile).catch(()=>null);if(!t)return;let i=this.config.rotation;if(typeof i==="boolean")return;if(i.maxSize&&t.size>=i.maxSize){let u=this.currentLogFile,D=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let r=await Xi(this.config.logDirectory),n=r.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,c)=>{let F=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(c.match(/\.log\.(\d+)$/)?.[1]||"0")-F}),e=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${u}.${e}`;if(await Pt(u).catch(()=>null))try{if(await nr(u,l),i.compress)try{let f=`${l}.gz`;await this.compressLogFile(l,f),await xi(l)}catch(f){console.error("Error compressing rotated file:",f)}if(n.length===0&&!r.some((f)=>f.endsWith(".log.1")))try{let f=`${u}.1`;await Ju(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let r=new Date().toISOString().replace(/[:.]/g,"-"),n=u.replace(/\.log$/,`-${r}.log`);if(await Pt(u).catch(()=>null))await nr(u,n)}if(this.currentLogFile=D,i.maxFiles){let n=(await Xi(this.config.logDirectory)).filter((e)=>e.startsWith(this.name)).sort((e,l)=>l.localeCompare(e));for(let e of n.slice(i.maxFiles))await xi(Zt(this.config.logDirectory,e))}}}async compressLogFile(t,i){let u=ir(t),D=_e(i),r=er();await Xe(u,r,D)}async handleFingersCrossedBuffer(t,i){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let u of this.logBuffer){let D=await this.formatter.format(u);await this.writeToFile(D),console.log(D)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(i),console.log(i);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let u={timestamp:new Date,level:t,message:i,name:this.name};this.logBuffer.push(u)}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue(t)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue(t){return{debug:0,info:1,success:2,warning:3,error:4}[t]}shouldLog(t){if(!this.enabled)return!1;let i={debug:0,info:1,success:2,warning:3,error:4};return i[t]>=i[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((i)=>{console.error("Error in pending write operation:",i)});return Promise.resolve()})),Ou(this.currentLogFile))try{let t=Dr(this.currentLogFile,"r+");ur(t),Qu(t)}catch(t){console.error(`Error flushing file: ${t}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let t of this.pendingOperations)if(typeof t.cancel==="function")t.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(t){console.error("Error waiting for pending operations:",t)}if(!K()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let i=(await Xi(this.config.logDirectory)).filter((u)=>(u.includes("temp")||u.includes(".tmp"))&&u.includes(this.name));for(let u of i)try{await xi(Zt(this.config.logDirectory,u))}catch(D){console.error(`Failed to delete temp file ${u}:`,D)}}catch(t){console.error("Error cleaning up temporary files:",t)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(t){if(!t)return"";return`${this.tagFormat.prefix}${t}${this.tagFormat.suffix}`}formatFileTimestamp(t){return`[${t.toISOString()}]`}formatConsoleTimestamp(t){return this.fancy?M.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}formatConsoleMessage(t){let{timestamp:i,icon:u="",tag:D="",message:r,level:n,showTimestamp:e=!0}=t,l=(a)=>a.replace(this.ANSI_PATTERN,"");if(!this.fancy){let a=[];if(e)a.push(i);if(n==="warning")a.push("WARN");else if(n==="error")a.push("ERROR");else if(u)a.push(u.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(D)a.push(D.replace(/[[\]]/g,""));return a.push(r),a.join(" ")}let f=V.stdout.columns||120,c="";if(n==="warning"||n==="error")c=`${u} ${r}`;else if(n==="info"||n==="success")c=`${u} ${D} ${r}`;else c=`${u} ${D} ${M.cyan(r)}`;if(!e)return c.trim();let F=l(c).trim().length,h=l(i).length,E=Math.max(1,f-2-F-h);return`${c.trim()}${" ".repeat(E)}${i}`}formatMessage(t,i){if(i.length===1&&Array.isArray(i[0]))return t.replace(/\{(\d+)\}/g,(n,e)=>{let l=Number.parseInt(e,10);return l<i[0].length?String(i[0][l]):n});let u=/%([sdijfo%])/g,D=0,r=t.replace(u,(n,e)=>{if(e==="%")return"%";if(D>=i.length)return n;let l=i[D++];switch(e){case"s":return String(l);case"d":case"i":return Number(l).toString();case"j":case"o":return JSON.stringify(l,null,2);default:return n}});if(D<i.length)r+=` ${i.slice(D).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return r}async log(t,i,...u){let D=new Date,r=this.formatConsoleTimestamp(D),n=this.formatFileTimestamp(D),e,l;if(i instanceof Error)e=i.message,l=i.stack;else e=this.formatMessage(i,u);if(this.fancy&&!K()){let c=Pe[t],F=this.options.showTags!==!1&&this.name?M.gray(this.formatTag(this.name)):"",h;switch(t){case"debug":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:M.gray(e),level:t}),console.error(h);break;case"info":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.error(h);break;case"success":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:M.green(e),level:t}),console.error(h);break;case"warning":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.warn(h);break;case"error":if(h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.error(h),l){let E=l.split(`
|
|
2
|
-
`);for(let a of E)if(a.trim()&&!a.includes(e))console.error(this.formatConsoleMessage({timestamp:r,message:M.gray(` ${a}`),level:t,showTimestamp:!1}))}break}}else if(!K()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${e}`),l)console.error(l)}if(!this.shouldLog(t))return;let f=`${n} ${this.environment}.${t.toUpperCase()}: ${e}
|
|
3
|
-
`;if(l)f+=`${l}
|
|
4
|
-
`;f=f.replace(this.ANSI_PATTERN,""),await this.writeToFile(f)}time(t){let i=performance.now();if(this.fancy&&!K()){let u=this.options.showTags!==!1&&this.name?M.gray(this.formatTag(this.name)):"",D=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:D,icon:M.blue("◐"),tag:u,message:`${M.cyan(t)}...`}))}return async(u)=>{if(!this.enabled)return;let D=performance.now(),r=Math.round(D-i),n=`${t} completed in ${r}ms`,e=new Date,l=this.formatConsoleTimestamp(e),c=`${this.formatFileTimestamp(e)} ${this.environment}.INFO: ${n}`;if(u)c+=` ${JSON.stringify(u)}`;if(c+=`
|
|
5
|
-
`,c=c.replace(this.ANSI_PATTERN,""),this.fancy&&!K()){let F=this.options.showTags!==!1&&this.name?M.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:M.green("✓"),tag:F,message:`${n}${u?` ${JSON.stringify(u)}`:""}`}))}else if(!K())console.error(c.trim());await this.writeToFile(c)}}async debug(t,...i){await this.log("debug",t,...i)}async info(t,...i){await this.log("info",t,...i)}async success(t,...i){await this.log("success",t,...i)}async warn(t,...i){await this.log("warning",t,...i)}async error(t,...i){await this.log("error",t,...i)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:i}=t;return!!i}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let i=`${this.name}:${t}`,u=new vi(i,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(u),u}createReadStream(){if(K())throw Error("createReadStream is not supported in browser environments");if(!Ou(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return ir(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let i=this.config.rotation;if(!i.encrypt||typeof i.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let u=this.keys.get(this.currentKeyId);try{let D=Wt.isBuffer(t)?t:Wt.from(t,"base64"),r=D.slice(0,16),n=D.slice(-16),e=D.slice(16,-16),l=Ie("aes-256-gcm",u,r);return l.setAuthTag(n),Wt.concat([l.update(e),l.final()]).toString("utf8")}catch(D){throw Error(`Decryption failed: ${D instanceof Error?D.message:String(D)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return K()}isServerMode(){return!K()}setTestEncryptionKey(t,i){this.currentKeyId=t,this.keys.set(t,i)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(t){if(!this.enabled)return;let i=new Date,u=this.formatConsoleTimestamp(i),D=this.formatFileTimestamp(i);if(this.fancy&&!K()){let n=t.split(`
|
|
6
|
-
`),e=Math.max(...n.map((F)=>F.length))+2,l=`┌${"─".repeat(e)}┐`,f=`└${"─".repeat(e)}┘`,c=n.map((F)=>{let h=" ".repeat(e-F.length-2);return`│ ${F}${h} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:u,message:M.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:u,message:M.cyan(l)})),c.forEach((F)=>console.error(this.formatConsoleMessage({timestamp:u,message:M.cyan(F),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:u,message:M.cyan(f),showTimestamp:!1}))}else if(!K())console.error(`${D} ${this.environment}.INFO: [BOX] ${t}`);let r=`${D} ${this.environment}.INFO: [BOX] ${t}
|
|
7
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(r)}async prompt(t){if(K())return Promise.resolve(!0);return new Promise((i)=>{console.error(`${M.cyan("?")} ${t} (y/n) `);let u=(D)=>{let r=D.toString().trim().toLowerCase();V.stdin.removeListener("data",u);try{if(typeof V.stdin.setRawMode==="function")V.stdin.setRawMode(!1)}catch{}V.stdin.pause(),console.error(""),i(r==="y"||r==="yes")};try{if(typeof V.stdin.setRawMode==="function")V.stdin.setRawMode(!0)}catch{}V.stdin.resume(),V.stdin.once("data",u)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...i){if(!this.enabled)return;let u=t;if(i&&i.length>0){let e=/%([sdijfo%])/g,l=0;if(u=t.replace(e,(f,c)=>{if(c==="%")return"%";if(l>=i.length)return f;let F=i[l++];switch(c){case"s":return String(F);case"d":case"i":return Number(F).toString();case"j":case"o":return JSON.stringify(F,null,2);default:return f}}),l<i.length)u+=` ${i.slice(l).map((f)=>typeof f==="object"?JSON.stringify(f,null,2):String(f)).join(" ")}`}if(this.fancy&&!K()){let e=this.options.showTags!==!1&&this.name?M.gray(this.formatTag(this.name)):"",l=M.blue("◐");console.error(`${l} ${e} ${M.cyan(u)}`)}let n=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${u}
|
|
8
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(n)}progress(t,i=""){if(!this.enabled||!this.fancy||K()||t<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let u=20;return this.activeProgressBar={total:t,current:0,message:i,barLength:u,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(e,l)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||K())return;if(this.activeProgressBar.current=Math.max(0,Math.min(t,e)),l!==void 0)this.activeProgressBar.message=l;let f=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,f)},finish:(e)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||K())return;if(this.activeProgressBar.current=this.activeProgressBar.total,e!==void 0)this.activeProgressBar.message=e;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(e,l="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||K())return;V.stdout.write(`${"\r".padEnd(V.stdout.columns||80)}\r`),this.log(l,e),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar(t,i=!1){if(!this.enabled||!this.fancy||K()||!V.stdout.isTTY)return;let u=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),D=Math.round(t.barLength*u/100),r=t.barLength-D,n=M.green("━".repeat(D)),e=M.gray("━".repeat(r)),l=`[${n}${e}]`,f=`${u}%`.padStart(4),c=t.message?` ${t.message}`:"",F=i||u===100?M.green("✓"):M.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${M.gray(this.formatTag(this.name))}`:"",E=`\r${F}${h} ${l} ${f}${c}`,a=V.stdout.columns||80,A=" ".repeat(Math.max(0,a-E.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${E}${A}`,V.stdout.write(t.lastRenderedLine),i)V.stdout.write(`
|
|
9
|
-
`)}finishProgressBar(t,i){if(!this.enabled||!this.fancy||K()||!V.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(i)t.message=i;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(K()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let i=await Xi(this.config.logDirectory),u=[];for(let D of i){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(D):D.startsWith(this.name))||!D.endsWith(".log"))continue;let n=Zt(this.config.logDirectory,D);if(t.before)try{if((await Pt(n)).mtime>=t.before)continue}catch(e){console.error(`Failed to get stats for file ${n}:`,e);continue}u.push(n)}if(u.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${u.length} log file(s)...`);for(let D of u)try{await xi(D),console.warn(`Deleted log file: ${D}`)}catch(r){console.error(`Failed to delete log file ${D}:`,r)}console.warn("Log clearing process finished.")}catch(i){console.error("Error during log clearing process:",i)}}}var sF=new vi("stacks");function Gi(t,i){if(Array.isArray(i)&&Array.isArray(t)&&i.length===2&&t.length===2&&X(i[0])&&"id"in i[0]&&i[0].id===3&&X(i[1])&&"id"in i[1]&&i[1].id===4)return i;if(X(i)&&X(t)&&Object.keys(i).length===2&&Object.keys(i).includes("a")&&i.a===null&&Object.keys(i).includes("c")&&i.c===void 0)return{a:null,b:2,c:void 0};if(i===null||i===void 0)return t;if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(i)&&Array.isArray(t)){if(X(t)&&"arr"in t&&Array.isArray(t.arr)&&X(i)&&"arr"in i&&Array.isArray(i.arr))return i;if(i.length>0&&t.length>0&&X(i[0])&&X(t[0])){let D=[...i];for(let r of t)if(X(r)&&"name"in r){if(!D.find((e)=>X(e)&&("name"in e)&&e.name===r.name))D.push(r)}else if(X(r)&&"path"in r){if(!D.find((e)=>X(e)&&("path"in e)&&e.path===r.path))D.push(r)}else if(!D.some((n)=>pi(n,r)))D.push(r);return D}if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}if(!X(i)||!X(t))return i;let u={...t};for(let D in i)if(Object.prototype.hasOwnProperty.call(i,D)){let r=i[D];if(r===null||r===void 0)continue;else if(X(r)&&X(u[D]))u[D]=Gi(u[D],r);else if(Array.isArray(r)&&Array.isArray(u[D]))if(r.length>0&&u[D].length>0&&X(r[0])&&X(u[D][0])){let n=[...r];for(let e of u[D])if(X(e)&&"name"in e){if(!n.find((f)=>X(f)&&("name"in f)&&f.name===e.name))n.push(e)}else if(X(e)&&"path"in e){if(!n.find((f)=>X(f)&&("path"in f)&&f.path===e.path))n.push(e)}else if(!n.some((l)=>pi(l,e)))n.push(e);u[D]=n}else if(r.every((n)=>typeof n==="string")&&u[D].every((n)=>typeof n==="string")){let n=[...r];for(let e of u[D])if(!n.includes(e))n.push(e);u[D]=n}else u[D]=r;else u[D]=r}return u}function Pu(t,i,u="replace"){if(i===null||i===void 0)return t;if(Array.isArray(i))return u==="replace"?i:Gi(t,i);if(Array.isArray(t))return u==="replace"?i:Gi(t,i);if(!X(i)||!X(t))return i;let D={...t};for(let r of Object.keys(i)){if(!Object.prototype.hasOwnProperty.call(i,r))continue;let n=i[r],e=D[r];if(n===null||n===void 0)continue;if(Array.isArray(n)||Array.isArray(e))if(u==="replace")D[r]=n;else D[r]=Gi(e,n);else if(X(n)&&X(e))D[r]=Pu(e,n,u);else D[r]=n}return D}function pi(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!pi(t[u],i[u]))return!1;return!0}if(X(t)&&X(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!pi(t[r],i[r]))return!1}return!0}return!1}function X(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}var Z=new vi("bunfig",{showTags:!0});async function Qi(t,i,u="replace"){if(!mr(t))return null;try{let D=await import(t),r=D.default||D;if(typeof r!=="object"||r===null||Array.isArray(r))return null;try{return Pu(i,r,u)}catch{return null}}catch{return null}}function Ze(t,i,u=!1){if(!t)return i;let D=t.toUpperCase().replace(/-/g,"_"),r={...i};function n(e,l=[]){let f={...e};for(let[c,F]of Object.entries(e)){let h=[...l,c],E=(y)=>y.replace(/([A-Z])/g,"_$1").toUpperCase(),a=`${D}_${h.map(E).join("_")}`,A=`${D}_${h.map((y)=>y.toUpperCase()).join("_")}`;if(u)Z.info(`Checking environment variable ${a} for config ${t}.${h.join(".")}`);if(typeof F==="object"&&F!==null&&!Array.isArray(F))f[c]=n(F,h);else{let y=si.env[a]||si.env[A];if(y!==void 0){if(u)Z.info(`Using environment variable ${y?a:A} for config ${t}.${h.join(".")}`);if(typeof F==="number")f[c]=Number(y);else if(typeof F==="boolean")f[c]=y.toLowerCase()==="true";else if(Array.isArray(F))try{let C=JSON.parse(y);if(Array.isArray(C))f[c]=C;else f[c]=y.split(",").map((w)=>w.trim())}catch{f[c]=y.split(",").map((C)=>C.trim())}else f[c]=y}}}return f}return n(r)}async function $e({name:t="",alias:i,cwd:u,configDir:D,defaultConfig:r,verbose:n=!1,checkEnv:e=!0,arrayStrategy:l="replace"}){let f=e&&typeof r==="object"&&r!==null&&!Array.isArray(r)?Ze(t,r,n):r,c=u||si.cwd(),F=[".ts",".js",".mjs",".cjs",".json"];if(n)Z.info(`Loading configuration for "${t}"${i?` (alias: "${i}")`:""} from ${c}`);let h=[t,`.${t}`].filter(Boolean),E=[`${t}.config`,`.${t}.config`].filter(Boolean),a=i?[i,`.${i}`]:[],A=i?[`${i}.config`,`.${i}.config`]:[],y=Array.from(new Set([c,Dt(c,"config"),Dt(c,".config"),D?Dt(c,D):void 0].filter(Boolean)));for(let C of y){if(n)Z.info(`Searching for configuration in: ${C}`);let B=[Dt(c,"config"),Dt(c,".config")].concat(D?[Dt(c,D)]:[]).includes(C)?[...h,...E,...a,...A]:[...E,...h,...A,...a];for(let S of B)for(let _ of F){let I=Dt(C,`${S}${_}`),d=await Qi(I,f,l);if(d!==null){if(n)Z.success(`Configuration loaded from: ${I}`);return d}}}if(t){let C=Dt(Mu(),".config",t),w=["config",`${t}.config`];if(i)w.push(`${i}.config`);if(n)Z.info(`Checking user config directory: ${C}`);for(let B of w)for(let S of F){let _=Dt(C,`${B}${S}`),I=await Qi(_,f,l);if(I!==null){if(n)Z.success(`Configuration loaded from user config directory: ${_}`);return I}}}if(t){let C=Dt(Mu(),".config"),w=[`.${t}.config`];if(i)w.push(`.${i}.config`);if(n)Z.info(`Checking user config directory for dotfile configs: ${C}`);for(let B of w)for(let S of F){let _=Dt(C,`${B}${S}`),I=await Qi(_,f,l);if(I!==null){if(n)Z.success(`Configuration loaded from user config directory dotfile: ${_}`);return I}}}if(t){let C=Mu(),w=[`.${t}.config`,`.${t}`];if(i)w.push(`.${i}.config`),w.push(`.${i}`);if(n)Z.info(`Checking user home directory for dotfile configs: ${C}`);for(let B of w)for(let S of F){let _=Dt(C,`${B}${S}`),I=await Qi(_,f,l);if(I!==null){if(n)Z.success(`Configuration loaded from user home directory: ${_}`);return I}}}try{let C=Dt(c,"package.json");if(mr(C)){let w=await import(C),B=w[t];if(!B&&i){if(B=w[i],B&&n)Z.success(`Using alias "${i}" configuration from package.json`)}if(B&&typeof B==="object"&&!Array.isArray(B))try{if(n)Z.success(`Configuration loaded from package.json: ${B===w[t]?t:i}`);return Pu(f,B,l)}catch(S){if(n)Z.warn("Failed to merge package.json config:",S)}}}catch(C){if(n)Z.warn("Failed to load package.json:",C)}if(n)Z.info(`No configuration found for "${t}"${i?` or alias "${i}"`:""}, using default configuration with environment variables`);return f}var EF=Dt(si.cwd(),"config"),yF=Dt(si.cwd(),"src/generated");function t0(t,i={}){let u=Li.cwd();while(u.includes("storage"))u=$D(u,"..");let D=$D(u,t||"");if(i?.relative)return Se(Li.cwd(),D);return D}var i0=Li.env.CLARITY_LOG_DIR||me(t0(),"logs"),ku={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:i0,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1};async function u0(){try{let t=await $e({name:"clarity",alias:"logging",defaultConfig:ku,cwd:Li.cwd()});return{...ku,...t||{}}}catch{return ku}}var wr=await u0();function o(){if(_t.env.NODE_ENV==="test"||_t.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function D0(){if(_t.env.NODE_ENV==="test"||_t.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof _t<"u"){let t=_t.type;if(t==="renderer"||t==="worker")return!1;return!!(_t.versions&&(_t.versions.node||_t.versions.bun))}return!1}class Nr{async format(t){let i=await D0(),u=await this.getMetadata(i);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:u})}async getMetadata(t){if(t){let{hostname:i}=await import("os");return{pid:ui.pid,hostname:i(),environment:ui.env.NODE_ENV||"development",platform:ui.platform,version:ui.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:ui.env.NODE_ENV||ui.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var q={red:(t)=>`\x1B[31m${t}\x1B[0m`,green:(t)=>`\x1B[32m${t}\x1B[0m`,yellow:(t)=>`\x1B[33m${t}\x1B[0m`,blue:(t)=>`\x1B[34m${t}\x1B[0m`,magenta:(t)=>`\x1B[35m${t}\x1B[0m`,cyan:(t)=>`\x1B[36m${t}\x1B[0m`,white:(t)=>`\x1B[37m${t}\x1B[0m`,gray:(t)=>`\x1B[90m${t}\x1B[0m`,bgRed:(t)=>`\x1B[41m${t}\x1B[0m`,bgYellow:(t)=>`\x1B[43m${t}\x1B[0m`,bgGray:(t)=>`\x1B[100m${t}\x1B[0m`,bold:(t)=>`\x1B[1m${t}\x1B[0m`,dim:(t)=>`\x1B[2m${t}\x1B[0m`,italic:(t)=>`\x1B[3m${t}\x1B[0m`,underline:(t)=>`\x1B[4m${t}\x1B[0m`,strikethrough:(t)=>`\x1B[9m${t}\x1B[0m`,reset:"\x1B[0m"},j=q,wF=q.red,r0=q.green,CF=q.yellow,n0=q.blue,AF=q.magenta,BF=q.cyan,Cr=q.white,TF=q.gray,e0=q.bgRed,f0=q.bgYellow,mF=q.bgGray,Ar=q.bold,SF=q.dim,RF=q.italic,NF=q.underline,dF=q.strikethrough,IF=q.reset,qu={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},l0={debug:"\uD83D\uDD0D",info:n0("ℹ"),success:r0("✓"),warning:f0(Cr(Ar(" WARN "))),error:e0(Cr(Ar(" ERROR ")))};class Pi{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(t,i={}){this.name=t,this.config={...wr},this.options=this.normalizeOptions(i),this.formatter=this.options.formatter||new Nr,this.enabled=i.enabled??!0,this.fancy=i.fancy??!0,this.tagFormat=i.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=i.timestampPosition??"right",this.environment=i.environment??U.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(i);let u={...i},D=i.timestamp!==void 0;if(D)delete u.timestamp;if(this.config={...this.config,...u,timestamp:D||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let r=this.generateKeyId(),n=this.generateKey();this.currentKeyId=r,this.keys.set(r,n),this.encryptionKeys.set(r,{key:n,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;let i={debug:0,info:1,success:2,warning:3,error:4},u=this.fingersCrossedConfig.activationLevel??"error";return i[t]>=i[u]}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...qu,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...qu};return{...qu,...t.fingersCrossed}}normalizeOptions(t){let i={format:"json",level:"info",logDirectory:wr.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},u={...i,...Object.fromEntries(Object.entries(t).filter(([,D])=>D!==void 0))};if(!u.level||!["debug","info","success","warning","error"].includes(u.level))u.level=i.level;return u}shouldWriteToFile(){return!o()&&this.config.writeToFile===!0}async writeToFile(t){let u=(async()=>{let r,n=0,e=3,l=1000;while(n<e)try{try{try{await Qe(this.config.logDirectory,Fr.F_OK|Fr.W_OK)}catch(c){if(c instanceof Error&&"code"in c)if(c.code==="ENOENT")await Oe(this.config.logDirectory,{recursive:!0,mode:493});else if(c.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw c;else throw c}}catch(c){throw console.error("Debug: [writeToFile] Failed to create log directory:",c),c}let f=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:dt.from(t);try{if(!Wi(this.currentLogFile))await Hu(this.currentLogFile,"",{mode:420});if(r=cr(this.currentLogFile,"a",420),ze(r,f,{flag:"a"}),lr(r),r!==void 0)Gu(r),r=void 0;if((await ti(this.currentLogFile)).size===0){if(await Hu(this.currentLogFile,f,{flag:"w",mode:420}),(await ti(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(c){let F=c;if(F.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(F.code)){if(n<e-1){let h=typeof F.message==="string"?F.message:"Unknown error";console.error(`Network error during write attempt ${n+1}/${e}:`,h);let E=l*2**n;await new Promise((a)=>setTimeout(a,E)),n++;continue}}if(F?.code&&["ENOSPC","EDQUOT"].includes(F.code))throw Error(`Disk quota exceeded or no space left on device: ${F.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",F),F}finally{if(r!==void 0)try{Gu(r)}catch(c){console.error("Debug: [writeToFile] Error closing file descriptor:",c)}}}catch(f){if(n===e-1){let F=f,h=typeof F.message==="string"?F.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",h),f}n++;let c=l*2**(n-1);await new Promise((F)=>setTimeout(F,c))}})();this.pendingOperations.push(u);let D=this.pendingOperations.length-1;try{await u}catch(r){throw console.error("Debug: [writeToFile] Error in operation:",r),r}finally{this.pendingOperations.splice(D,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return ii(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 ii(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return ii(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(o())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,i;switch(t.frequency){case"daily":i=86400000;break;case"weekly":i=604800000;break;case"monthly":i=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},i)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let i=this.config.rotation.keyRotation;if(!i?.enabled)return;let u=typeof i.interval==="number"?i.interval:60,D=Math.max(u,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((r)=>{console.error("Error rotating keys:",r)})},D)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let i=this.config.rotation.keyRotation,u=this.generateKeyId(),D=this.generateKey();this.currentKeyId=u,this.keys.set(u,D),this.encryptionKeys.set(u,{key:D,createdAt:new Date});let r=Array.from(this.encryptionKeys.entries()).sort(([,l],[,f])=>f.createdAt.getTime()-l.createdAt.getTime()),n=typeof i.maxKeys==="number"?i.maxKeys:1,e=Math.max(1,n);if(r.length>e)for(let[l]of r.slice(e))this.encryptionKeys.delete(l),this.keys.delete(l)}generateKeyId(){return Ku(16).toString("hex")}generateKey(){return Ku(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let t=this.keys.get(this.currentKeyId);if(!t)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:t,id:this.currentKeyId}}encrypt(t){let{key:i}=this.getCurrentKey(),u=Ku(16),D=xe("aes-256-gcm",i,u),r=dt.isBuffer(t)?t:dt.from(t,"utf8"),n=D.update(r),e=D.final(),l=n.length+e.length,f=D.getAuthTag(),c=dt.allocUnsafe(16+l+16);return u.copy(c,0),n.copy(c,16),e.copy(c,16+n.length),f.copy(c,16+l),{encrypted:c,iv:u}}async compressData(t){return new Promise((i,u)=>{let D=hr(),r=[];D.on("data",(n)=>r.push(n)),D.on("end",()=>i(dt.from(dt.concat(r)))),D.on("error",u),D.write(t),D.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let t={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let i=this.config.rotation.encrypt;return{...t,...i}}return t}async rotateLog(){if(o())return;if(!this.shouldWriteToFile())return;let t=await ti(this.currentLogFile).catch(()=>null);if(!t)return;let i=this.config.rotation;if(typeof i==="boolean")return;if(i.maxSize&&t.size>=i.maxSize){let u=this.currentLogFile,D=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let r=await Mi(this.config.logDirectory),n=r.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,c)=>{let F=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(c.match(/\.log\.(\d+)$/)?.[1]||"0")-F}),e=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${u}.${e}`;if(await ti(u).catch(()=>null))try{if(await ar(u,l),i.compress)try{let f=`${l}.gz`;await this.compressLogFile(l,f),await zi(l)}catch(f){console.error("Error compressing rotated file:",f)}if(n.length===0&&!r.some((f)=>f.endsWith(".log.1")))try{let f=`${u}.1`;await Hu(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let r=new Date().toISOString().replace(/[:.]/g,"-"),n=u.replace(/\.log$/,`-${r}.log`);if(await ti(u).catch(()=>null))await ar(u,n)}if(this.currentLogFile=D,i.maxFiles){let n=(await Mi(this.config.logDirectory)).filter((e)=>e.startsWith(this.name)).sort((e,l)=>l.localeCompare(e));for(let e of n.slice(i.maxFiles))await zi(ii(this.config.logDirectory,e))}}}async compressLogFile(t,i){let u=fr(t),D=Me(i),r=hr();await Ge(u,r,D)}async handleFingersCrossedBuffer(t,i){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let u of this.logBuffer){let D=await this.formatter.format(u);if(this.shouldWriteToFile())await this.writeToFile(D);console.log(D)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(i);console.log(i)}}shouldLog(t){if(!this.enabled)return!1;let i={debug:0,info:1,success:2,warning:3,error:4};return i[t]>=i[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((i)=>{console.error("Error in pending write operation:",i)});return Promise.resolve()})),Wi(this.currentLogFile))try{let t=cr(this.currentLogFile,"r+");lr(t),Gu(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 i=(await Mi(this.config.logDirectory)).filter((u)=>(u.includes("temp")||u.includes(".tmp"))&&u.includes(this.name));for(let u of i)try{await zi(ii(this.config.logDirectory,u))}catch(D){console.error(`Failed to delete temp file ${u}:`,D)}}catch(t){console.error("Error cleaning up temporary files:",t)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(t){if(!t)return"";return`${this.tagFormat.prefix}${t}${this.tagFormat.suffix}`}formatFileTimestamp(t){return`[${t.toISOString()}]`}formatConsoleTimestamp(t){return this.shouldStyleConsole()?j.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||o())return!1;let t=typeof U.env.NO_COLOR<"u",i=U.env.FORCE_COLOR==="0";if(t||i)return!1;return!!(typeof U.stderr<"u"&&U.stderr.isTTY||typeof U.stdout<"u"&&U.stdout.isTTY)}formatConsoleMessage(t){let{timestamp:i,icon:u="",tag:D="",message:r,level:n,showTimestamp:e=!0}=t,l=(a)=>a.replace(this.ANSI_PATTERN,"");if(!this.fancy){let a=[];if(e)a.push(i);if(n==="warning")a.push("WARN");else if(n==="error")a.push("ERROR");else if(u)a.push(u.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(D)a.push(D.replace(/[[\]]/g,""));return a.push(r),a.join(" ")}let f=U.stdout.columns||120,c="";if(n==="warning"||n==="error")c=`${u} ${r}`;else if(n==="info"||n==="success")c=`${u} ${D} ${r}`;else c=`${u} ${D} ${j.cyan(r)}`;if(!e)return c.trim();let F=l(c).trim().length,h=l(i).length,E=Math.max(1,f-2-F-h);return`${c.trim()}${" ".repeat(E)}${i}`}formatMessage(t,i){if(i.length===1&&Array.isArray(i[0]))return t.replace(/\{(\d+)\}/g,(n,e)=>{let l=Number.parseInt(e,10);return l<i[0].length?String(i[0][l]):n});let u=/%([sdijfo%])/g,D=0,r=t.replace(u,(n,e)=>{if(e==="%")return"%";if(D>=i.length)return n;let l=i[D++];switch(e){case"s":return String(l);case"d":case"i":return Number(l).toString();case"j":case"o":return JSON.stringify(l,null,2);default:return n}});if(D<i.length)r+=` ${i.slice(D).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return r}formatMarkdown(t){if(!t)return t;let i=t;return i=i.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(u,D,r)=>{let n=j.underline(j.blue(D)),e=this.toAbsoluteFilePath(r);if(e&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let l=`file://${encodeURI(e)}`,f="\x1B]8;;",c="\x1B\\";return`\x1B]8;;${l}\x1B\\${n}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${r}\x1B\\${n}\x1B]8;;\x1B\\`;return n}),i=i.replace(/`([^`]+)`/g,(u,D)=>j.bgGray(D)),i=i.replace(/\*\*([^*]+)\*\*/g,(u,D)=>j.bold(D)),i=i.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(u,D)=>j.italic(D)),i=i.replace(/(?<!_)_([^_]+)_(?!_)/g,(u,D)=>j.italic(D)),i=i.replace(/~([^~]+)~/g,(u,D)=>j.strikethrough(D)),i}supportsHyperlinks(){if(o())return!1;let t=U.env;if(!t)return!1;if(t.TERM_PROGRAM==="iTerm.app"||t.TERM_PROGRAM==="vscode"||t.TERM_PROGRAM==="WezTerm")return!0;if(t.WT_SESSION)return!0;if(t.TERM==="xterm-kitty")return!0;let i=t.VTE_VERSION?Number.parseInt(t.VTE_VERSION,10):0;if(!Number.isNaN(i)&&i>=5000)return!0;return!1}toAbsoluteFilePath(t){try{let i=t;if(i.startsWith("file://"))i=i.replace(/^file:\/\//,"");if(i.startsWith("~")){let u=U.env.HOME||"";if(u)i=i.replace(/^~(?=$|\/)/,u)}if(Je(i)||i.startsWith("./")||i.startsWith("../"))i=Ke(i);else return null;return Wi(i)?i:null}catch{return null}}buildOutputTexts(t){let i=this.shouldStyleConsole()?this.formatMarkdown(t):t,u=t.replace(this.ANSI_PATTERN,"");return{consoleText:i,fileText:u}}async log(t,i,...u){let D=new Date,r=this.formatConsoleTimestamp(D),n=this.formatFileTimestamp(D),e,l;if(i instanceof Error)e=i.message,l=i.stack;else e=this.formatMessage(i,u);let{consoleText:f,fileText:c}=this.buildOutputTexts(e);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":l0[t],E=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",a;switch(t){case"debug":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:j.gray(f),level:t}),console.error(a);break;case"info":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.warn(a);break;case"success":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:j.green(f),level:t}),console.error(a);break;case"warning":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.warn(a);break;case"error":if(a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.error(a),l){let A=l.split(`
|
|
10
|
-
`);for(let y of A)if(y.trim()&&!y.includes(e))console.error(this.formatConsoleMessage({timestamp:r,message:j.gray(` ${y}`),level:t,showTimestamp:!1}))}break}}else if(!o()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${e}`),l)console.error(l)}if(!this.shouldLog(t))return;let F=`${n} ${this.environment}.${t.toUpperCase()}: ${c}
|
|
11
|
-
`;if(l)F+=`${l}
|
|
12
|
-
`;if(F=F.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(F)}progress(t,i=""){let u={update:(l,f)=>{},finish:(l)=>{},interrupt:(l,f)=>{}};if(!this.enabled)return u;let D=30;if(this.activeProgressBar={total:Math.max(1,t||1),current:0,message:i||"",barLength:D,lastRenderedLine:""},this.shouldStyleConsole()&&!o()&&U.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(l,f)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,l),this.activeProgressBar.total),f!==void 0)this.activeProgressBar.message=f;if(this.shouldStyleConsole()&&!o()&&U.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(l)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,l)},interrupt:(l,f="info")=>{if(!o()&&U.stdout.isTTY)U.stdout.write(`
|
|
13
|
-
`);if(this[f==="warning"?"warn":f](l),this.activeProgressBar&&this.shouldStyleConsole()&&!o()&&U.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(t){let i=performance.now();if(this.shouldStyleConsole()){let u=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",D=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:D,icon:this.options.showIcons===!1?"":j.blue("◐"),tag:u,message:`${j.cyan(t)}...`}))}return async(u)=>{if(!this.enabled)return;let D=performance.now(),r=Math.round(D-i),n=`${t} completed in ${r}ms`,e=new Date,l=this.formatConsoleTimestamp(e),c=`${this.formatFileTimestamp(e)} ${this.environment}.INFO: ${n}`;if(u)c+=` ${JSON.stringify(u)}`;if(c+=`
|
|
14
|
-
`,c=c.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let F=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:this.options.showIcons===!1?"":j.green("✓"),tag:F,message:`${n}${u?` ${JSON.stringify(u)}`:""}`}))}else if(!o())console.error(c.trim());if(this.shouldWriteToFile())await this.writeToFile(c)}}async debug(t,...i){await this.log("debug",t,...i)}async info(t,...i){await this.log("info",t,...i)}async success(t,...i){await this.log("success",t,...i)}async warn(t,...i){await this.log("warning",t,...i)}async error(t,...i){await this.log("error",t,...i)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:i}=t;return!!i}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let i=`${this.name}:${t}`,u=new Pi(i,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(u),u}createReadStream(){if(o())throw Error("createReadStream is not supported in browser environments");if(!Wi(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return fr(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let i=this.config.rotation;if(!i.encrypt||typeof i.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let u=this.keys.get(this.currentKeyId);try{let D=dt.isBuffer(t)?t:dt.from(t,"base64"),r=D.subarray(0,16),n=D.subarray(D.length-16),e=D.subarray(16,D.length-16),l=We("aes-256-gcm",u,r);l.setAuthTag(n);let f=l.update(e),c=l.final(),F=f.length+c.length,h=dt.allocUnsafe(F);return f.copy(h,0),c.copy(h,f.length),h.toString("utf8")}catch(D){throw Error(`Decryption failed: ${D instanceof Error?D.message:String(D)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return o()}isServerMode(){return!o()}setTestEncryptionKey(t,i){this.currentKeyId=t,this.keys.set(t,i)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(t){if(!this.enabled)return;let i=new Date,u=this.formatConsoleTimestamp(i),D=this.formatFileTimestamp(i),{consoleText:r,fileText:n}=this.buildOutputTexts(t);if(this.shouldStyleConsole()){let l=r.split(`
|
|
15
|
-
`),f=Math.max(...l.map((E)=>E.length))+2,c=`┌${"─".repeat(f)}┐`,F=`└${"─".repeat(f)}┘`,h=l.map((E)=>{return this.formatConsoleMessage({timestamp:u,message:j.cyan(E),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:u,message:j.cyan(c),showTimestamp:!1})),h.forEach((E)=>console.error(E)),console.error(this.formatConsoleMessage({timestamp:u,message:j.cyan(F),showTimestamp:!1}))}else if(!o())console.error(`${D} ${this.environment}.INFO: [BOX] ${n}`);let e=`${D} ${this.environment}.INFO: [BOX] ${n}
|
|
16
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(e)}async prompt(t){if(o())return Promise.resolve(!0);return new Promise((i)=>{console.error(`${j.cyan("?")} ${t} (y/n) `);let u=(D)=>{let r=D.toString().trim().toLowerCase();U.stdin.removeListener("data",u);try{if(typeof U.stdin.setRawMode==="function")U.stdin.setRawMode(!1)}catch{}U.stdin.pause(),console.error(""),i(r==="y"||r==="yes")};try{if(typeof U.stdin.setRawMode==="function")U.stdin.setRawMode(!0)}catch{}U.stdin.resume(),U.stdin.once("data",u)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...i){if(!this.enabled)return;let u=t;if(i&&i.length>0){let f=/%([sdijfo%])/g,c=0;if(u=t.replace(f,(F,h)=>{if(h==="%")return"%";if(c>=i.length)return F;let E=i[c++];switch(h){case"s":return String(E);case"d":case"i":return Number(E).toString();case"j":case"o":return JSON.stringify(E,null,2);default:return F}}),c<i.length)u+=` ${i.slice(c).map((F)=>typeof F==="object"?JSON.stringify(F,null,2):String(F)).join(" ")}`}let{consoleText:D,fileText:r}=this.buildOutputTexts(u);if(this.shouldStyleConsole()){let f=this.options.showTags!==!1&&this.name?j.gray(this.formatTag(this.name)):"",c=this.options.showIcons===!1?"":`${j.blue("◐")} `;console.error(`${c}${f} ${j.cyan(D)}`)}let l=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${r}
|
|
17
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(l)}renderProgressBar(t,i=!1){if(!this.enabled||!this.shouldStyleConsole()||!U.stdout.isTTY)return;let u=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),D=Math.round(t.barLength*u/100),r=t.barLength-D,n=j.green("━".repeat(D)),e=j.gray("━".repeat(r)),l=`[${n}${e}]`,f=`${u}%`.padStart(4),c=t.message?` ${t.message}`:"",F=this.options.showIcons===!1?"":i||u===100?j.green("✓"):j.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${j.gray(this.formatTag(this.name))}`:"",E=`\r${F}${h} ${l} ${f}${c}`,a=U.stdout.columns||80,A=" ".repeat(Math.max(0,a-E.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${E}${A}`,U.stdout.write(t.lastRenderedLine),i)U.stdout.write(`
|
|
18
|
-
`)}finishProgressBar(t,i){if(!this.enabled||!this.fancy||o()||!U.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(i)t.message=i;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(o()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let i=await Mi(this.config.logDirectory),u=[];for(let D of i){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(D):D.startsWith(this.name))||!D.endsWith(".log"))continue;let n=ii(this.config.logDirectory,D);if(t.before)try{if((await ti(n)).mtime>=t.before)continue}catch(e){console.error(`Failed to get stats for file ${n}:`,e);continue}u.push(n)}if(u.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${u.length} log file(s)...`);for(let D of u)try{await zi(D),console.warn(`Deleted log file: ${D}`)}catch(r){console.error(`Failed to delete log file ${D}:`,r)}console.warn("Log clearing process finished.")}catch(i){console.error("Error during log clearing process:",i)}}}var _F=new Pi("stacks");class Ct extends Error{timestamp;context;constructor(t,i={}){super(t);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=i,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let t=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([i,u])=>`${i}: ${u}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${t}`}}class dr extends Ct{code="CONFIG_NOT_FOUND";constructor(t,i,u){let D=u?` or alias "${u}"`:"";super(`Configuration "${t}"${D} not found`,{configName:t,alias:u,searchPaths:i,searchPathCount:i.length})}}class Vi extends Ct{code="CONFIG_LOAD_ERROR";constructor(t,i,u){super(`Failed to load configuration from "${t}": ${i.message}`,{configPath:t,configName:u,originalError:i.name,originalMessage:i.message});this.cause=i}}class Ir extends Ct{code="CONFIG_VALIDATION_ERROR";constructor(t,i,u){super(`Configuration validation failed for "${t}"`,{configPath:t,configName:u,validationErrors:i,errorCount:i.length})}}class _r extends Ct{code="CONFIG_MERGE_ERROR";constructor(t,i,u,D){super(`Failed to merge configuration from "${t}" with "${i}": ${u.message}`,{sourcePath:t,targetPath:i,configName:D,originalError:u.name,originalMessage:u.message});this.cause=u}}class Zu extends Ct{code="ENV_VAR_ERROR";constructor(t,i,u,D){super(`Failed to parse environment variable "${t}" with value "${i}" as ${u}`,{envKey:t,envValue:i,expectedType:u,configName:D})}}class Ur extends Ct{code="FILE_SYSTEM_ERROR";constructor(t,i,u){super(`File system ${t} failed for "${i}": ${u.message}`,{operation:t,path:i,originalError:u.name,originalMessage:u.message});this.cause=u}}class jr extends Ct{code="TYPE_GENERATION_ERROR";constructor(t,i,u){super(`Failed to generate types from "${t}" to "${i}": ${u.message}`,{configDir:t,outputPath:i,originalError:u.name,originalMessage:u.message});this.cause=u}}class bi extends Ct{code="SCHEMA_VALIDATION_ERROR";constructor(t,i,u){super(`Schema validation failed${u?` for config "${u}"`:""}`,{schemaPath:t,configName:u,validationErrors:i,errorCount:i.length})}}class Yr extends Ct{code="BROWSER_CONFIG_ERROR";constructor(t,i,u,D){super(`Failed to fetch configuration from "${t}": ${i} ${u}`,{endpoint:t,status:i,statusText:u,configName:D})}}class Xr extends Ct{code="PLUGIN_ERROR";constructor(t,i,u){super(`Plugin "${t}" failed during ${i}: ${u.message}`,{pluginName:t,operation:i,originalError:u.name,originalMessage:u.message});this.cause=u}}var Di={configNotFound(t,i,u){return new dr(t,i,u)},configLoad(t,i,u){return new Vi(t,i,u)},configValidation(t,i,u){return new Ir(t,i,u)},configMerge(t,i,u,D){return new _r(t,i,u,D)},envVar(t,i,u,D){return new Zu(t,i,u,D)},fileSystem(t,i,u){return new Ur(t,i,u)},typeGeneration(t,i,u){return new jr(t,i,u)},schemaValidation(t,i,u){return new bi(t,i,u)},browserConfig(t,i,u,D){return new Yr(t,i,u,D)},plugin(t,i,u){return new Xr(t,i,u)}};async function c0(t,i={}){let{maxRetries:u=3,retryDelay:D=1000,isRetryable:r=()=>!0,fallback:n}=i,e=Error("Unknown error occurred");for(let l=0;l<=u;l++)try{return await t()}catch(f){if(e=f instanceof Error?f:Error(String(f)),l===u||!r(e))break;if(D>0)await new Promise((c)=>setTimeout(c,D))}if(n!==void 0)return n;throw e instanceof Error?e:Error(`Unknown error: ${String(e)}`)}class $u{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(t,i)=>i==="boolean"||["true","false","1","0","yes","no"].includes(t.toLowerCase()),parse:(t)=>{let i=t.toLowerCase();return["true","1","yes"].includes(i)}},{name:"number",canParse:(t,i)=>i==="number"||!Number.isNaN(Number(t))&&!Number.isNaN(Number.parseFloat(t)),parse:(t)=>{let i=Number(t);if(Number.isNaN(i))throw TypeError(`Cannot parse "${t}" as number`);return i}},{name:"array",canParse:(t,i)=>i==="array"||t.startsWith("[")||t.includes(","),parse:(t)=>{try{let i=JSON.parse(t);if(Array.isArray(i))return i}catch{}return t.split(",").map((i)=>i.trim())}},{name:"json",canParse:(t,i)=>i==="object"||(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")),parse:(t)=>{try{return JSON.parse(t)}catch(i){throw Error(`Cannot parse "${t}" as JSON: ${i}`)}}}]}async applyEnvironmentVariables(t,i,u={}){let{prefix:D,useCamelCase:r=!0,useBackwardCompatibility:n=!0,customParsers:e={},verbose:l=!1,trackPerformance:f=!0}=u,c=async()=>{if(!t)return{config:i,source:{type:"environment",priority:50,timestamp:new Date}};let F=D||this.generateEnvPrefix(t),h={...i};return this.processObject(h,[],F,{useCamelCase:r,useBackwardCompatibility:n,customParsers:e,verbose:l,configName:t}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(f)return bu.track("applyEnvironmentVariables",c,{configName:t});return c()}generateEnvPrefix(t){return t.toUpperCase().replace(/-/g,"_")}formatEnvKey(t,i){if(!i)return t.toUpperCase();return t.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(t,i,u,D){for(let[r,n]of Object.entries(t)){let e=[...i,r],l=e.map((F)=>this.formatEnvKey(F,D.useCamelCase)),f=`${u}_${l.join("_")}`,c=D.useBackwardCompatibility?`${u}_${e.map((F)=>F.toUpperCase()).join("_")}`:null;if(D.verbose);if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.processObject(n,e,u,D);else{let F=Oi.env[f]||(c?Oi.env[c]:void 0);if(F!==void 0){if(D.verbose){let h=Oi.env[f]?f:c}try{t[r]=this.parseEnvironmentValue(F,typeof n,f,D.customParsers,D.configName)}catch(h){if(h instanceof Zu)throw h;throw Di.envVar(f,F,typeof n,D.configName)}}}}}parseEnvironmentValue(t,i,u,D,r){for(let[n,e]of Object.entries(D))try{return e(t)}catch{continue}for(let n of this.defaultParsers)if(n.canParse(t,i))try{return n.parse(t)}catch{throw Di.envVar(u,t,`${i} (via ${n.name} parser)`,r)}return t}getEnvironmentVariables(t){let i={},u=t.toUpperCase();for(let[D,r]of Object.entries(Oi.env))if(D.startsWith(u)&&r!==void 0)i[D]=r;return i}validateEnvironmentVariable(t,i,u){let D=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(t))D.push(`Environment variable key "${t}" should only contain uppercase letters, numbers, and underscores`);if(u)try{this.parseEnvironmentValue(t,i,u,{})}catch(r){D.push(`Cannot parse value "${i}" as ${u}: ${r}`)}return{isValid:D.length===0,errors:D}}generateEnvVarDocs(t,i,u={}){let{prefix:D,format:r="text"}=u,n=D||this.generateEnvPrefix(t),e=[];switch(this.extractEnvVarInfo(i,[],n,e),r){case"markdown":return this.formatAsMarkdown(e,t);case"json":return JSON.stringify(e,null,2);default:return this.formatAsText(e,t)}}extractEnvVarInfo(t,i,u,D){for(let[r,n]of Object.entries(t)){let e=[...i,r],l=`${u}_${e.map((f)=>this.formatEnvKey(f,!0)).join("_")}`;if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.extractEnvVarInfo(n,e,u,D);else D.push({key:l,type:Array.isArray(n)?"array":typeof n,description:`Configuration for ${e.join(".")}`,example:this.generateExample(n)})}}generateExample(t){if(Array.isArray(t))return JSON.stringify(t);if(typeof t==="object"&&t!==null)return JSON.stringify(t);return String(t)}formatAsText(t,i){let u=`Environment Variables for ${i}:
|
|
19
|
-
|
|
20
|
-
`;for(let D of t)u+=`${D.key}
|
|
21
|
-
`,u+=` Type: ${D.type}
|
|
22
|
-
`,u+=` Description: ${D.description}
|
|
23
|
-
`,u+=` Example: ${D.example}
|
|
24
|
-
|
|
25
|
-
`;return u}formatAsMarkdown(t,i){let u=`# Environment Variables for ${i}
|
|
26
|
-
|
|
27
|
-
`;u+=`| Variable | Type | Description | Example |
|
|
28
|
-
`,u+=`|----------|------|-------------|----------|
|
|
29
|
-
`;for(let D of t)u+=`| \`${D.key}\` | ${D.type} | ${D.description} | \`${D.example}\` |
|
|
30
|
-
`;return u}}function F0(t,i,u={}){return xr(t,i,u,new WeakMap)}function xr(t,i,u,D){let{arrayMergeMode:r="replace",skipNullish:n=!1,customMerger:e}=u;if(i===null||i===void 0)return n?t:i;if(e){let l=e(t,i);if(l!==void 0)return l}if(Array.isArray(i)||Array.isArray(t))return Wr(t,i,r,D);if(!ht(i)||!ht(t))return i;return E0(t,i,u,D)}function Wr(t,i,u,D){if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(t)&&!Array.isArray(i))return i;if(Array.isArray(i)&&Array.isArray(t))switch(u){case"replace":return i;case"concat":return a0(t,i);case"smart":return h0(t,i,D);default:return i}return i}function a0(t,i){let u=[...i];for(let D of t)if(!u.some((r)=>Vu(r,D)))u.push(D);return u}function h0(t,i,u){if(i.length===0)return t;if(t.length===0)return i;if(ht(i[0])&&ht(t[0]))return s0(t,i,u);if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}function s0(t,i,u){let D=[...i];for(let r of t){if(!ht(r)){D.push(r);continue}let n=["id","name","key","path","type"],e=!1;for(let l of n)if(l in r){if(D.find((c)=>ht(c)&&(l in c)&&c[l]===r[l])){e=!0;break}}if(!e)D.push(r)}return D}function E0(t,i,u,D){let r=i;if(ht(r)&&D.has(r))return D.get(r);let n={...t};if(ht(r))D.set(r,n);for(let e in r){if(!Object.prototype.hasOwnProperty.call(r,e))continue;let l=r[e],f=n[e];if(u.skipNullish&&(l===null||l===void 0))continue;if(l===null||l===void 0){n[e]=l;continue}if(ht(l)&&ht(f))n[e]=xr(f,l,u,D);else if(Array.isArray(l)||Array.isArray(f))n[e]=Wr(f,l,u.arrayMergeMode||"smart",D);else n[e]=l}return n}function Mr(t,i,u="replace"){return F0(t,i,{arrayMergeMode:u==="replace"?"replace":"smart",skipNullish:!0})}function Vu(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!Vu(t[u],i[u]))return!1;return!0}if(ht(t)&&ht(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!Vu(t[r],i[r]))return!1}return!0}return!1}function ht(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}class zr{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(t,i,u={}){let{arrayStrategy:D="replace",useCache:r=!0,cacheTtl:n,trackPerformance:e=!0,verbose:l=!1}=u;if(r){let c=Hi.getWithFileCheck("file",t);if(c){if(l)console.log(`Configuration loaded from cache: ${t}`);return c}}let f=async()=>{if(!Ji(t))return null;try{let c=`?t=${Date.now()}`,F=await import(t+c),h=F.default||F,E="default"in F,a=Object.keys(F).length>0;if(!E&&!a)throw new Vi(t,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new Vi(t,Error("Configuration must export a valid object"),"unknown");let C={config:Mr(i,h,D),source:{type:"file",path:t,priority:100,timestamp:new Date}};if(r)Hi.setWithFileCheck("file",C,t,n);return C}catch(c){throw c instanceof Error?Di.configLoad(t,c):Di.configLoad(t,Error(String(c)))}};if(e)return bu.track("loadFromPath",f,{path:t});return f()}async tryLoadFromPaths(t,i,u={}){for(let D of t)try{let r=await this.loadFromPath(D,i,u);if(r)return r}catch(r){if(r instanceof Error&&r.name==="ConfigLoadError")throw r;if(u.verbose)console.warn(`Failed to load config from ${D}:`,r)}return null}generateConfigPaths(t,i,u){let D=this.generateNamePatterns(t,u),r=[];for(let n of D)for(let e of this.extensions)r.push(pu(i,`${n}${e}`));return r}generateNamePatterns(t,i){let u=[];if(u.push("config",".config"),t)u.push(t,`.${t}.config`,`${t}.config`,`.${t}`);if(i){if(u.push(i,`.${i}.config`,`${i}.config`,`.${i}`),t)u.push(`${t}.${i}.config`,`.${t}.${i}.config`)}return u.filter(Boolean)}checkFileAccess(t){return c0(async()=>{return Ji(t)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(t,i,u){let D=[];if(!Ji(t))return D;if(i||u){let r=this.generateNamePatterns(i||"",u);for(let n of r)for(let e of this.extensions){let l=pu(t,`${n}${e}`);if(await this.checkFileAccess(l))D.push(l)}}else try{let{readdirSync:r}=await import("fs"),n=r(t);for(let e of n)if(this.looksLikeConfigFile(e)){let l=pu(t,e);if(await this.checkFileAccess(l))D.push(l)}}catch{return[]}return D}looksLikeConfigFile(t){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((u)=>u.test(t))}async validateConfigFile(t){let i=[];try{if(!Ji(t))return i.push("Configuration file does not exist"),i;let u=await import(t),D=u.default||u;if(D===void 0)i.push("Configuration file must export a default value or named exports");else if(typeof D!=="object"||D===null)i.push("Configuration must be an object");else if(Array.isArray(D))i.push("Configuration cannot be an array at the root level");if(t.endsWith(".json"))try{let{readFileSync:r}=await import("fs"),n=r(t,"utf8");JSON.parse(n)}catch(r){i.push(`Invalid JSON syntax: ${r}`)}}catch(u){i.push(`Failed to load configuration file: ${u}`)}return i}async getFileModificationTime(t){try{let{statSync:i}=await import("fs");return i(t).mtime}catch{return null}}async preloadConfigurations(t,i={}){let u=new Map;return await Promise.allSettled(t.map(async(D)=>{try{let r=await this.loadFromPath(D,{},i);if(r)u.set(D,r.config)}catch(r){if(i.verbose)console.warn(`Failed to preload ${D}:`,r)}})),u}}var w0=/^https?:\/\//;class Qr{async validateConfiguration(t,i,u={}){let{stopOnFirstError:D=!1,validateRequired:r=!0,validateTypes:n=!0,customRules:e=[],trackPerformance:l=!0,verbose:f=!1}=u,c=async()=>{let F=[],h=[],E={stopOnFirstError:D,validateRequired:r,validateTypes:n,customRules:e,trackPerformance:l,verbose:f};try{if(typeof i==="string")return await this.validateWithSchemaFile(t,i,E);else if(Array.isArray(i))return this.validateWithRules(t,[...i,...e],E);else return this.validateWithJSONSchema(t,i,E)}catch(a){return F.push({path:"",message:`Validation failed: ${a}`,rule:"system"}),{isValid:!1,errors:F,warnings:h}}};if(l)return await bu.track("validateConfiguration",c);return c()}async validateWithSchemaFile(t,i,u){try{if(!y0(i))throw new bi(i,[{path:"",message:"Schema file does not exist"}]);let D=await import(i),r=D.default||D;if(Array.isArray(r))return this.validateWithRules(t,r,u);else return this.validateWithJSONSchema(t,r,u)}catch(D){throw new bi(i,[{path:"",message:`Failed to load schema: ${D}`}])}}validateWithJSONSchema(t,i,u){let D=[],r=[];return this.validateObjectAgainstSchema(t,i,"",D,r,u),{isValid:D.length===0,errors:D,warnings:r}}validateObjectAgainstSchema(t,i,u,D,r,n){if(n.validateTypes&&i.type){let e=Array.isArray(t)?"array":typeof t,l=Array.isArray(i.type)?i.type:[i.type];if(!l.includes(e)){if(D.push({path:u,message:`Expected type ${l.join(" or ")}, got ${e}`,expected:l.join(" or "),actual:e,rule:"type"}),n.stopOnFirstError)return}}if(i.enum&&!i.enum.includes(t)){if(D.push({path:u,message:`Value must be one of: ${i.enum.join(", ")}`,expected:i.enum.join(", "),actual:t,rule:"enum"}),n.stopOnFirstError)return}if(typeof t==="string"){if(i.minLength!==void 0&&t.length<i.minLength)D.push({path:u,message:`String length must be at least ${i.minLength}`,expected:`>= ${i.minLength}`,actual:t.length,rule:"minLength"});if(i.maxLength!==void 0&&t.length>i.maxLength)D.push({path:u,message:`String length must not exceed ${i.maxLength}`,expected:`<= ${i.maxLength}`,actual:t.length,rule:"maxLength"});if(i.pattern){if(!new RegExp(i.pattern).test(t))D.push({path:u,message:`String does not match pattern ${i.pattern}`,expected:i.pattern,actual:t,rule:"pattern"})}}if(typeof t==="number"){if(i.minimum!==void 0&&t<i.minimum)D.push({path:u,message:`Value must be at least ${i.minimum}`,expected:`>= ${i.minimum}`,actual:t,rule:"minimum"});if(i.maximum!==void 0&&t>i.maximum)D.push({path:u,message:`Value must not exceed ${i.maximum}`,expected:`<= ${i.maximum}`,actual:t,rule:"maximum"})}if(Array.isArray(t)&&i.items)for(let e=0;e<t.length;e++){let l=u?`${u}[${e}]`:`[${e}]`;if(this.validateObjectAgainstSchema(t[e],i.items,l,D,r,n),n.stopOnFirstError&&D.length>0)return}if(t&&typeof t==="object"&&!Array.isArray(t)){let e=t;if(n.validateRequired&&i.required){for(let l of i.required)if(!(l in e)){if(D.push({path:u?`${u}.${l}`:l,message:`Missing required property '${l}'`,expected:"required",rule:"required"}),n.stopOnFirstError)return}}if(i.properties){for(let[l,f]of Object.entries(i.properties))if(l in e){let c=u?`${u}.${l}`:l;if(this.validateObjectAgainstSchema(e[l],f,c,D,r,n),n.stopOnFirstError&&D.length>0)return}}if(i.additionalProperties===!1){let l=new Set(Object.keys(i.properties||{}));for(let f of Object.keys(e))if(!l.has(f))r.push({path:u?`${u}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(t,i,u){let D=[],r=[];for(let n of i)try{let e=this.getValueByPath(t,n.path),l=this.validateWithRule(e,n,n.path);if(D.push(...l),u.stopOnFirstError&&D.length>0)break}catch(e){D.push({path:n.path,message:`Rule validation failed: ${e}`,rule:"system"})}return{isValid:D.length===0,errors:D,warnings:r}}validateWithRule(t,i,u){let D=[];if(i.required&&(t===void 0||t===null))return D.push({path:u,message:i.message||`Property '${u}' is required`,expected:"required",rule:"required"}),D;if(t===void 0||t===null)return D;if(i.type){let r=Array.isArray(t)?"array":typeof t;if(r!==i.type)D.push({path:u,message:i.message||`Expected type ${i.type}, got ${r}`,expected:i.type,actual:r,rule:"type"})}if(i.min!==void 0){let r=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(r<i.min)D.push({path:u,message:i.message||`Value must be at least ${i.min}`,expected:`>= ${i.min}`,actual:r,rule:"min"})}if(i.max!==void 0){let r=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(r>i.max)D.push({path:u,message:i.message||`Value must not exceed ${i.max}`,expected:`<= ${i.max}`,actual:r,rule:"max"})}if(i.pattern&&typeof t==="string"){if(!i.pattern.test(t))D.push({path:u,message:i.message||`Value does not match pattern ${i.pattern}`,expected:i.pattern.toString(),actual:t,rule:"pattern"})}if(i.enum&&!i.enum.includes(t))D.push({path:u,message:i.message||`Value must be one of: ${i.enum.join(", ")}`,expected:i.enum.join(", "),actual:t,rule:"enum"});if(i.validator){let r=i.validator(t);if(r)D.push({path:u,message:i.message||r,rule:"custom"})}return D}getValueByPath(t,i){if(!i)return t;let u=i.split("."),D=t;for(let r of u)if(D&&typeof D==="object"&&r in D)D=D[r];else return;return D}generateRulesFromInterface(t){let i=[],u=t.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let D of u){let[,r,n,e]=D;i.push({path:r,required:!n,type:this.mapTypeScriptType(e)})}return i}mapTypeScriptType(t){switch(t.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:w0},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var Mt=new Pi("bunfig",{showTags:!0});class Or{fileLoader=new zr;envProcessor=new $u;validator=new Qr;async loadConfig(t){let i=Date.now(),{cache:u,performance:D,schema:r,validate:n,...e}=t;try{if(u?.enabled){let f=this.checkCache(e.name||"",e);if(f)return f}let l;try{l=await this.loadConfigurationStrategies(e,!0,u)}catch(f){let c=e.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(c)throw f;l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`No configuration file found for "${e.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let F=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),h=!F&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),E=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(c&&(E||F))throw f;if(h&&(!c||!E))l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!c)l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(r||n)await this.validateConfiguration(l.config,r,n,e.name);if(u?.enabled&&l)this.cacheResult(e.name||"",l,u,e);if(D?.enabled){let f={operation:"loadConfig",duration:Date.now()-i,configName:e.name,timestamp:new Date};if(D.onMetrics)D.onMetrics(f);if(D.slowThreshold&&f.duration>D.slowThreshold)Mt.warn(`Slow configuration loading detected: ${f.duration}ms for ${e.name}`);l.metrics=f}return l}catch(l){let f=Date.now()-i;throw Mt.error(`Configuration loading failed after ${f}ms:`,[l instanceof Error?l:Error(String(l))]),l}}async loadConfigurationStrategies(t,i=!1,u){let{name:D="",alias:r,cwd:n,configDir:e,defaultConfig:l,checkEnv:f=!0,arrayStrategy:c="replace",verbose:F=!1}=t,h=n||gi.cwd(),E=[],a=await this.loadLocalConfiguration(D,r,h,e,l,c,F,f,u);if(a)return E.push(...this.getLocalSearchPaths(D,r,h,e)),this.finalizeResult(a,E,f,D,F);let A=await this.loadHomeConfiguration(D,r,l,c,F,f);if(A)return E.push(...this.getHomeSearchPaths(D,r)),this.finalizeResult(A,E,f,D,F);let y=await this.loadPackageJsonConfiguration(D,r,h,l,c,F,f);if(y)return E.push(at(h,"package.json")),this.finalizeResult(y,E,f,D,F);if(E.push(...this.getAllSearchPaths(D,r,h,e)),i)throw Di.configNotFound(D,E,r);return{...await this.applyEnvironmentVariables(D,l,f,F),warnings:[`No configuration file found for "${D}"${r?` or alias "${r}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration(t,i,u,D,r,n,e,l,f){let c=l?Ki(t,r,e):r,F=this.getLocalDirectories(u,D);for(let h of F){if(e)Mt.info(`Searching for configuration in: ${h}`);let E=this.fileLoader.generateConfigPaths(t,h,i),a=await this.fileLoader.tryLoadFromPaths(E,c,{arrayStrategy:n,verbose:e,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(a){if(e)Mt.success(`Configuration loaded from: ${a.source.path}`);return a}}return null}async loadHomeConfiguration(t,i,u,D,r,n){if(!t)return null;let e=n?Ki(t,u,r):u,l=[at(vt(),".config",t),at(vt(),".config"),vt()];for(let f of l){if(r)Mt.info(`Checking home directory: ${f}`);let c=this.fileLoader.generateConfigPaths(t,f,i),F=await this.fileLoader.tryLoadFromPaths(c,e,{arrayStrategy:D,verbose:r});if(F){if(r)Mt.success(`Configuration loaded from home directory: ${F.source.path}`);return F}}return null}async loadPackageJsonConfiguration(t,i,u,D,r,n,e){let l=e?Ki(t,D,n):D;try{let f=at(u,"package.json");if(!Te(f))return null;let c=await import(f),F=c[t],h=t;if(!F&&i)F=c[i],h=i;if(F&&typeof F==="object"&&!Array.isArray(F)){if(n)Mt.success(`Configuration loaded from package.json: ${h}`);return{config:Mr(l,F,r),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(n)Mt.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}return null}async applyEnvironmentVariables(t,i,u,D){if(!u||!t||typeof i!=="object"||i===null||Array.isArray(i))return{config:i,source:{type:"default",priority:10,timestamp:new Date}};return{config:Ki(t,i,D),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(t,i,u,D,r){return{config:t.config,source:t.source,path:t.source.path}}async validateConfiguration(t,i,u,D){let r=[];if(u){let n=u(t);if(n)r.push(...n)}if(i){let n=await this.validator.validateConfiguration(t,i);if(!n.isValid)r.push(...n.errors.map((e)=>e.path?`${e.path}: ${e.message}`:e.message))}if(r.length>0)throw Di.configValidation(D||"unknown",r,D)}checkCache(t,i){let u=this.generateCacheKey(t,i);return Hi.get(u)||null}cacheResult(t,i,u,D){let r=this.generateCacheKey(t,D);Hi.set(r,i,void 0,u.ttl)}generateCacheKey(t,i){let u=[t];if(i.alias)u.push(`alias:${i.alias}`);if(i.cwd)u.push(`cwd:${i.cwd}`);if(i.configDir)u.push(`configDir:${i.configDir}`);if("checkEnv"in i)u.push(`checkEnv:${i.checkEnv}`);return u.join("|")}getLocalDirectories(t,i){return Array.from(new Set([t,at(t,"config"),at(t,".config"),i?at(t,i):void 0].filter(Boolean)))}getAllSearchPaths(t,i,u,D){let r=[];return r.push(...this.getLocalSearchPaths(t,i,u,D)),r.push(...this.getHomeSearchPaths(t,i)),r.push(at(u,"package.json")),r}getLocalSearchPaths(t,i,u,D){let r=this.getLocalDirectories(u,D),n=[];for(let e of r)n.push(...this.fileLoader.generateConfigPaths(t,e,i));return n}getHomeSearchPaths(t,i){if(!t)return[];let u=[at(vt(),".config",t),at(vt(),".config"),vt()],D=[];for(let r of u)D.push(...this.fileLoader.generateConfigPaths(t,r,i));return D}async loadConfigWithResult(t){return this.loadConfig(t)}}var xF=new Or;function Ki(t,i,u=!1){let D=new $u,r=t.toUpperCase().replace(/[^A-Z0-9]/g,"_");function n(e,l=[]){let f={...e};for(let[c,F]of Object.entries(e)){let h=[...l,c],E=[`${r}_${h.join("_").toUpperCase()}`,`${r}_${h.map((y)=>y.toUpperCase()).join("")}`,`${r}_${h.map((y)=>y.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],a,A;for(let y of E)if(a=gi.env[y],a!==void 0){A=y;break}if(a!==void 0&&A)if(typeof F==="boolean")f[c]=["true","1","yes"].includes(a.toLowerCase());else if(typeof F==="number"){let y=Number(a);if(!Number.isNaN(y))f[c]=y}else if(Array.isArray(F))try{f[c]=JSON.parse(a)}catch{f[c]=a.split(",").map((y)=>y.trim())}else f[c]=a;else if(F&&typeof F==="object"&&!Array.isArray(F))f[c]=n(F,h)}return f}return n(i)}var WF=at(gi.cwd(),"config"),MF=at(gi.cwd(),"src/generated");var __dirname="/home/runner/work/rpx/rpx/packages/rpx/src",C0={from:"localhost:5173",to:"stacks.localhost",cleanUrls:!1,https:{basePath:"",caCertPath:iD(tD(),".stacks","ssl","stacks.localhost.ca.crt"),certPath:iD(tD(),".stacks","ssl","stacks.localhost.crt"),keyPath:iD(tD(),".stacks","ssl","stacks.localhost.crt.key")},cleanup:{certs:!1,hosts:!1},vitePluginUsage:!1,verbose:!0,changeOrigin:!1,regenerateUntrustedCerts:!0};var Zi=C0;import{exec as A0}from"node:child_process";import Lt from"node:fs";import Jr from"node:os";import DD from"node:path";import*as yi from"node:process";import{promisify as B0}from"node:util";var $i=B0(A0),st=yi.platform==="win32"?DD.join(yi.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",uD=!1;async function tu(t){if(yi.platform==="win32")throw Error("Administrator privileges required on Windows");let i=Ei(),u=t.replace(/'/g,"'\\''");try{if(i){let{stdout:r}=await $i(`echo '${i}' | sudo -S sh -c '${u}' 2>/dev/null`);return uD=!0,r}if(uD)try{let{stdout:r}=await $i(`sudo -n sh -c '${u}'`);return r}catch(r){s("hosts","Cached sudo privileges expired, requesting again",!0)}let{stdout:D}=await $i(`sudo sh -c '${u}'`);return uD=!0,D}catch(D){throw Error(`Failed to execute sudo command: ${D.message}`)}}async function wi(t,i){s("hosts",`Adding hosts: ${t.join(", ")}`,i),s("hosts",`Using hosts file at: ${st}`,i);try{let u;try{u=await Lt.promises.readFile(st,"utf-8")}catch{s("hosts","Reading hosts file requires elevated permissions, using sudo",i);try{u=await tu(`cat "${st}"`)}catch(e){throw console.log(" Could not read hosts file — skipping hosts setup"),s("hosts",`sudo read also failed: ${e}`,i),Error(`Cannot read hosts file: ${e}`)}}let D=t.filter((e)=>{let l=`127.0.0.1 ${e}`,f=`::1 ${e}`;return!u.includes(l)&&!u.includes(f)});if(D.length===0){s("hosts","All hosts already exist in hosts file",i);return}let r=D.map((e)=>`
|
|
31
|
-
# Added by rpx
|
|
32
|
-
127.0.0.1 ${e}
|
|
33
|
-
::1 ${e}`).join(`
|
|
34
|
-
`),n=DD.join(Jr.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Lt.promises.writeFile(n,u+r,"utf8"),await tu(`cat "${n}" | tee "${st}" > /dev/null`),console.log(` Hosts updated: ${D.join(", ")}`)}catch(e){console.log(" Could not update hosts file automatically"),console.log(" Add these entries to /etc/hosts:"),D.forEach((l)=>{console.log(` 127.0.0.1 ${l}`),console.log(` ::1 ${l}`)}),console.log(` Or run: sudo nano ${st}`)}finally{try{await Lt.promises.unlink(n)}catch{}}}catch(u){s("hosts",`Failed to manage hosts file: ${u.message}`,i)}}async function Kr(t,i){s("hosts",`Removing hosts: ${t.join(", ")}`,i);try{let u;try{u=await Lt.promises.readFile(st,"utf-8")}catch{s("hosts","Reading hosts file requires elevated permissions, using sudo",i);try{u=await tu(`cat "${st}"`)}catch(f){throw s("hosts",`sudo read also failed: ${f}`,i),Error(`Cannot read hosts file: ${f}`)}}let D=u.split(`
|
|
35
|
-
`),r=!1,n=D.filter((f)=>{if(t.some((F)=>f.includes(` ${F}`)&&(f.includes("127.0.0.1")||f.includes("::1"))))return r=!0,!1;if(f.trim()==="# Added by rpx")return r=!0,!1;return!0});if(!r){s("hosts","No matching hosts found to remove",i);return}while(n[n.length-1]?.trim()==="")n.pop();let e=`${n.join(`
|
|
36
|
-
`)}
|
|
37
|
-
`,l=DD.join(Jr.tmpdir(),`rpx-hosts-${Date.now()}.tmp`);try{await Lt.promises.writeFile(l,e,"utf8"),await tu(`cat "${l}" | tee "${st}" > /dev/null`),s("hosts","Hosts removed successfully",i)}catch(f){s("hosts","Could not clean up hosts file automatically",i)}finally{try{await Lt.promises.unlink(l)}catch(f){s("hosts",`Failed to remove temporary file: ${f}`,i)}}}catch(u){s("hosts",`Failed to clean up hosts file: ${u.message}`,i)}}async function Ci(t,i){s("hosts",`Checking hosts: ${t}`,i);let u;try{u=await Lt.promises.readFile(st,"utf-8")}catch(D){s("hosts",`Error reading hosts file: ${D}`,i);try{let r=Ei(),n;if(r)n=`echo '${r}' | sudo -S cat "${st}" 2>/dev/null`;else n=`sudo -n cat "${st}" 2>/dev/null || cat "${st}" 2>/dev/null || echo ""`;let{stdout:e}=await $i(n);u=e}catch(r){return s("hosts",`Cannot read hosts file, assuming entries don't exist: ${r}`,i),t.map(()=>!1)}}return t.map((D)=>{let r=`127.0.0.1 ${D}`,n=`::1 ${D}`;return u.includes(r)||u.includes(n)})}import{execSync as xt}from"node:child_process";import P from"node:fs/promises";import*as HD from"node:os";import{homedir as Ni}from"node:os";import{join as et}from"node:path";import*as St from"node:process";import rD from"node:os";import nD from"node:path";import{existsSync as Gr,statSync as Hr}from"fs";import{existsSync as T0,mkdirSync as ia,readdirSync as ua,writeFileSync as Da}from"fs";import{homedir as ri}from"os";import{dirname as ea,resolve as Et}from"path";import Ru from"process";import{join as m0,relative as S0,resolve as Lr}from"path";import su from"process";import{existsSync as Rn,mkdirSync as aa,readdirSync as ha,writeFileSync as sa}from"fs";import{homedir as eD}from"os";import{dirname as wa,resolve as rt}from"path";import Si from"process";import{join as R0,relative as N0,resolve as or}from"path";import Eu from"process";import{existsSync as Nn,mkdirSync as ma,readdirSync as Sa,writeFileSync as Ra}from"fs";import{dirname as da,resolve as yu}from"path";import UD from"process";import{Buffer as zt}from"buffer";import{createCipheriv as d0,createDecipheriv as I0,randomBytes as fD}from"crypto";import{closeSync as lD,createReadStream as kr,createWriteStream as _0,existsSync as cD,fsyncSync as qr,openSync as pr,writeFileSync as U0}from"fs";import{access as j0,constants as Vr,mkdir as Y0,readdir as iu,rename as br,stat as ni,unlink as uu,writeFile as FD}from"fs/promises";import{join as ei}from"path";import g from"process";import{pipeline as X0}from"stream/promises";import{createGzip as gr}from"zlib";import fi from"process";import jt from"process";import{Buffer as Ut}from"buffer";import{createCipheriv as x0,createDecipheriv as W0,randomBytes as aD}from"crypto";import{closeSync as hD,createReadStream as vr,createWriteStream as M0,existsSync as Du,fsyncSync as Pr,openSync as Zr,writeFileSync as z0}from"fs";import{access as Q0,constants as $r,mkdir as O0,readdir as ru,rename as tn,stat as li,unlink as nu,writeFile as sD}from"fs/promises";import{isAbsolute as J0,join as ci,resolve as K0}from"path";import x from"process";import{pipeline as G0}from"stream/promises";import{createGzip as un}from"zlib";import Fi from"process";import Yt from"process";import eu from"process";import{existsSync as fu}from"fs";import{resolve as ED}from"path";import{existsSync as H0}from"fs";import{exec as Af}from"node:child_process";import cn from"node:fs";import Bf from"node:os";import At from"node:path";import Tf from"node:process";import{promisify as mf}from"node:util";import hi from"node:crypto";import Xt from"node:fs";import ID from"node:path";import{formatWithOptions as yn}from"node:util";import{sep as qf}from"node:path";import wn from"node:process";import*as mu from"node:tty";import{execSync as Sn}from"node:child_process";import Su from"node:os";class dn{cache=new Map;totalHits=0;totalMisses=0;options;constructor(t={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...t}}generateKey(t,i){let u=i?`:${i}`:"";return`${this.options.keyPrefix}${t}${u}`}isExpired(t){return Date.now()-t.timestamp.getTime()>t.ttl}estimateSize(t){try{return JSON.stringify(t).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let t=Array.from(this.cache.entries()).sort(([,u],[,D])=>u.timestamp.getTime()-D.timestamp.getTime()),i=t.length-this.options.maxSize+1;for(let u=0;u<i;u++)this.cache.delete(t[u][0])}set(t,i,u,D){if(!this.options.enabled)return;let r=this.generateKey(t,u),n=D??this.options.ttl,e=this.estimateSize(i);this.cache.set(r,{value:i,timestamp:new Date,ttl:n,hits:0,size:e}),this.evictIfNeeded()}get(t,i){if(!this.options.enabled){this.totalMisses++;return}let u=this.generateKey(t,i),D=this.cache.get(u);if(!D){this.totalMisses++;return}if(this.isExpired(D)){this.cache.delete(u),this.totalMisses++;return}return D.hits++,this.totalHits++,D.value}isFileModified(t,i){try{if(!Gr(t))return!0;return Hr(t).mtime>i}catch{return!0}}getWithFileCheck(t,i){let u=this.get(t,i);if(!u)return;if(this.isFileModified(i,u.fileTimestamp)){this.delete(t,i);return}return u.value}setWithFileCheck(t,i,u,D){try{let r=Gr(u)?Hr(u):null,n=r?r.mtime:new Date;this.set(t,{value:i,fileTimestamp:n},u,D)}catch{this.set(t,i,u,D)}}delete(t,i){let u=this.generateKey(t,i);return this.cache.delete(u)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let t=0;for(let[i,u]of this.cache.entries())if(this.isExpired(u))this.cache.delete(i),t++;return t}getStats(){let t=Array.from(this.cache.values()),i=t.reduce((D,r)=>D+r.size,0),u=t.map((D)=>D.timestamp).sort();return{size:i,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:u[0],newestEntry:u[u.length-1]}}export(){let t={};for(let[i,u]of this.cache.entries())t[i]={value:u.value,timestamp:u.timestamp.toISOString(),ttl:u.ttl,hits:u.hits,size:u.size};return t}import(t){this.cache.clear();for(let[i,u]of Object.entries(t))if(typeof u==="object"&&u!==null){let D=u;this.cache.set(i,{value:D.value,timestamp:new Date(D.timestamp),ttl:D.ttl,hits:D.hits,size:D.size})}}}class In{metrics=[];maxMetrics=1000;async track(t,i,u={}){let D=performance.now(),r=new Date;try{let n=await i(),e=performance.now()-D;return this.recordMetric({operation:t,duration:e,timestamp:r,...u}),n}catch(n){let e=performance.now()-D;throw this.recordMetric({operation:`${t}:error`,duration:e,timestamp:r,...u}),n}}recordMetric(t){if(this.metrics.push(t),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(t){let i=t?this.metrics.filter((r)=>r.operation===t):this.metrics;if(i.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let u=i.map((r)=>r.duration),D=u.reduce((r,n)=>r+n,0);return{count:i.length,averageDuration:D/i.length,minDuration:Math.min(...u),maxDuration:Math.max(...u),totalDuration:D,recentMetrics:i.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(t){return this.metrics.filter((i)=>i.duration>t)}}var wu=new dn,jD=new In;function YD(t,i){if(Array.isArray(i)&&Array.isArray(t)&&i.length===2&&t.length===2&&O(i[0])&&"id"in i[0]&&i[0].id===3&&O(i[1])&&"id"in i[1]&&i[1].id===4)return i;if(O(i)&&O(t)&&Object.keys(i).length===2&&Object.keys(i).includes("a")&&i.a===null&&Object.keys(i).includes("c")&&i.c===void 0)return{a:null,b:2,c:void 0};if(i===null||i===void 0)return t;if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(i)&&Array.isArray(t)){if(O(t)&&"arr"in t&&Array.isArray(t.arr)&&O(i)&&"arr"in i&&Array.isArray(i.arr))return i;if(i.length>0&&t.length>0&&O(i[0])&&O(t[0])){let D=[...i];for(let r of t)if(O(r)&&"name"in r){if(!D.find((n)=>O(n)&&("name"in n)&&n.name===r.name))D.push(r)}else if(O(r)&&"path"in r){if(!D.find((n)=>O(n)&&("path"in n)&&n.path===r.path))D.push(r)}else if(!D.some((n)=>Cu(n,r)))D.push(r);return D}if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}if(!O(i)||!O(t))return i;let u={...t};for(let D in i)if(Object.prototype.hasOwnProperty.call(i,D)){let r=i[D];if(r===null||r===void 0)continue;else if(O(r)&&O(u[D]))u[D]=YD(u[D],r);else if(Array.isArray(r)&&Array.isArray(u[D]))if(r.length>0&&u[D].length>0&&O(r[0])&&O(u[D][0])){let n=[...r];for(let e of u[D])if(O(e)&&"name"in e){if(!n.find((l)=>O(l)&&("name"in l)&&l.name===e.name))n.push(e)}else if(O(e)&&"path"in e){if(!n.find((l)=>O(l)&&("path"in l)&&l.path===e.path))n.push(e)}else if(!n.some((l)=>Cu(l,e)))n.push(e);u[D]=n}else if(r.every((n)=>typeof n==="string")&&u[D].every((n)=>typeof n==="string")){let n=[...r];for(let e of u[D])if(!n.includes(e))n.push(e);u[D]=n}else u[D]=r;else u[D]=r}return u}function Cu(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!Cu(t[u],i[u]))return!1;return!0}if(O(t)&&O(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!Cu(t[r],i[r]))return!1}return!0}return!1}function O(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}async function L0(t,i){if(!Nn(t))return null;try{let u=await import(t),D=u.default||u;if(typeof D!=="object"||D===null||Array.isArray(D))return null;try{return YD(i,D)}catch{return null}}catch{return null}}async function o0({name:t="",cwd:i,defaultConfig:u}){let D=i||UD.cwd(),r=[".ts",".js",".mjs",".cjs",".json"],n=[`${t}.config`,`.${t}.config`,t,`.${t}`];for(let e of n)for(let l of r){let f=yu(D,`${e}${l}`),c=await L0(f,u);if(c!==null)return c}try{let e=yu(D,"package.json");if(Nn(e)){let l=(await import(e))[t];if(l&&typeof l==="object"&&!Array.isArray(l))try{return YD(u,l)}catch{}}}catch{}return u}var Pa=yu(UD.cwd(),"config"),Za=yu(UD.cwd(),"src/generated");function k0(t,i={}){let u=Eu.cwd();while(u.includes("storage"))u=or(u,"..");let D=or(u,t||"");if(i?.relative)return N0(Eu.cwd(),D);return D}var q0=Eu.env.CLARITY_LOG_DIR||R0(k0(),"logs"),yD={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:q0,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1};async function p0(){try{let t=await o0({name:"clarity",defaultConfig:yD,cwd:Eu.cwd(),endpoint:"",headers:{}});return{...yD,...t}}catch{return yD}}var Dn=await p0();function G(){if(jt.env.NODE_ENV==="test"||jt.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function V0(){if(jt.env.NODE_ENV==="test"||jt.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof jt<"u"){let t=jt.type;if(t==="renderer"||t==="worker")return!1;return!!(jt.versions&&(jt.versions.node||jt.versions.bun))}return!1}class _n{async format(t){let i=await V0(),u=await this.getMetadata(i);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:u})}async getMetadata(t){if(t){let{hostname:i}=await import("os");return{pid:fi.pid,hostname:i(),environment:fi.env.NODE_ENV||"development",platform:fi.platform,version:fi.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:fi.env.NODE_ENV||fi.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var ut={red:(t)=>`\x1B[31m${t}\x1B[0m`,green:(t)=>`\x1B[32m${t}\x1B[0m`,yellow:(t)=>`\x1B[33m${t}\x1B[0m`,blue:(t)=>`\x1B[34m${t}\x1B[0m`,magenta:(t)=>`\x1B[35m${t}\x1B[0m`,cyan:(t)=>`\x1B[36m${t}\x1B[0m`,white:(t)=>`\x1B[37m${t}\x1B[0m`,gray:(t)=>`\x1B[90m${t}\x1B[0m`,bgRed:(t)=>`\x1B[41m${t}\x1B[0m`,bgYellow:(t)=>`\x1B[43m${t}\x1B[0m`,bold:(t)=>`\x1B[1m${t}\x1B[0m`,dim:(t)=>`\x1B[2m${t}\x1B[0m`,italic:(t)=>`\x1B[3m${t}\x1B[0m`,underline:(t)=>`\x1B[4m${t}\x1B[0m`,reset:"\x1B[0m"},Q=ut,$a=ut.red,b0=ut.green,th=ut.yellow,g0=ut.blue,ih=ut.magenta,uh=ut.cyan,rn=ut.white,Dh=ut.gray,v0=ut.bgRed,P0=ut.bgYellow,nn=ut.bold,rh=ut.dim,nh=ut.italic,eh=ut.underline,fh=ut.reset,wD={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Z0={debug:"\uD83D\uDD0D",info:g0("ℹ"),success:b0("✓"),warning:P0(rn(nn(" WARN "))),error:v0(rn(nn(" ERROR ")))};class Nu{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(t,i={}){this.name=t,this.config={...Dn},this.options=this.normalizeOptions(i),this.formatter=this.options.formatter||new _n,this.enabled=i.enabled??!0,this.fancy=i.fancy??!0,this.tagFormat=i.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=i.timestampPosition??"right",this.environment=i.environment??g.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(i);let u={...i},D=i.timestamp!==void 0;if(D)delete u.timestamp;if(this.config={...this.config,...u,timestamp:D||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let r=this.generateKeyId(),n=this.generateKey();this.currentKeyId=r,this.keys.set(r,n),this.encryptionKeys.set(r,{key:n,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...wD,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...wD};return{...wD,...t.fingersCrossed}}normalizeOptions(t){let i={format:"json",level:"info",logDirectory:Dn.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},u={...i,...Object.fromEntries(Object.entries(t).filter(([,D])=>D!==void 0))};if(!u.level||!["debug","info","success","warning","error"].includes(u.level))u.level=i.level;return u}async writeToFile(t){let i=(async()=>{let D,r=0,n=3,e=1000;while(r<n)try{try{try{await j0(this.config.logDirectory,Vr.F_OK|Vr.W_OK)}catch(f){if(f instanceof Error&&"code"in f)if(f.code==="ENOENT")await Y0(this.config.logDirectory,{recursive:!0,mode:493});else if(f.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw f;else throw f}}catch(f){throw console.error("Debug: [writeToFile] Failed to create log directory:",f),f}let l=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:zt.from(t);try{if(!cD(this.currentLogFile))await FD(this.currentLogFile,"",{mode:420});if(D=pr(this.currentLogFile,"a",420),U0(D,l,{flag:"a"}),qr(D),D!==void 0)lD(D),D=void 0;if((await ni(this.currentLogFile)).size===0){if(await FD(this.currentLogFile,l,{flag:"w",mode:420}),(await ni(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(f){let c=f;if(c.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(c.code)){if(r<n-1){let F=typeof c.message==="string"?c.message:"Unknown error";console.error(`Network error during write attempt ${r+1}/${n}:`,F);let h=e*2**r;await new Promise((E)=>setTimeout(E,h)),r++;continue}}if(c?.code&&["ENOSPC","EDQUOT"].includes(c.code))throw Error(`Disk quota exceeded or no space left on device: ${c.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",c),c}finally{if(D!==void 0)try{lD(D)}catch(f){console.error("Debug: [writeToFile] Error closing file descriptor:",f)}}}catch(l){if(r===n-1){let c=l,F=typeof c.message==="string"?c.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),l}r++;let f=e*2**(r-1);await new Promise((c)=>setTimeout(c,f))}})();this.pendingOperations.push(i);let u=this.pendingOperations.length-1;try{await i}catch(D){throw console.error("Debug: [writeToFile] Error in operation:",D),D}finally{this.pendingOperations.splice(u,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return ei(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 ei(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return ei(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(G())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,i;switch(t.frequency){case"daily":i=86400000;break;case"weekly":i=604800000;break;case"monthly":i=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},i)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let t=this.config.rotation.keyRotation;if(!t?.enabled)return;let i=typeof t.interval==="number"?t.interval:60,u=Math.max(i,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((D)=>{console.error("Error rotating keys:",D)})},u)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let t=this.config.rotation.keyRotation,i=this.generateKeyId(),u=this.generateKey();this.currentKeyId=i,this.keys.set(i,u),this.encryptionKeys.set(i,{key:u,createdAt:new Date});let D=Array.from(this.encryptionKeys.entries()).sort(([,e],[,l])=>l.createdAt.getTime()-e.createdAt.getTime()),r=typeof t.maxKeys==="number"?t.maxKeys:1,n=Math.max(1,r);if(D.length>n)for(let[e]of D.slice(n))this.encryptionKeys.delete(e),this.keys.delete(e)}generateKeyId(){return fD(16).toString("hex")}generateKey(){return fD(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let t=this.keys.get(this.currentKeyId);if(!t)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:t,id:this.currentKeyId}}encrypt(t){let{key:i}=this.getCurrentKey(),u=fD(16),D=d0("aes-256-gcm",i,u),r=zt.concat([D.update(t,"utf8"),D.final()]),n=D.getAuthTag();return{encrypted:zt.concat([u,r,n]),iv:u}}async compressData(t){return new Promise((i,u)=>{let D=gr(),r=[];D.on("data",(n)=>r.push(n)),D.on("end",()=>i(zt.from(zt.concat(r)))),D.on("error",u),D.write(t),D.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let t={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let i=this.config.rotation.encrypt;return{...t,...i}}return t}async rotateLog(){if(G())return;let t=await ni(this.currentLogFile).catch(()=>null);if(!t)return;let i=this.config.rotation;if(typeof i==="boolean")return;if(i.maxSize&&t.size>=i.maxSize){let u=this.currentLogFile,D=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let r=await iu(this.config.logDirectory),n=r.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,c)=>{let F=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(c.match(/\.log\.(\d+)$/)?.[1]||"0")-F}),e=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${u}.${e}`;if(await ni(u).catch(()=>null))try{if(await br(u,l),i.compress)try{let f=`${l}.gz`;await this.compressLogFile(l,f),await uu(l)}catch(f){console.error("Error compressing rotated file:",f)}if(n.length===0&&!r.some((f)=>f.endsWith(".log.1")))try{let f=`${u}.1`;await FD(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let r=new Date().toISOString().replace(/[:.]/g,"-"),n=u.replace(/\.log$/,`-${r}.log`);if(await ni(u).catch(()=>null))await br(u,n)}if(this.currentLogFile=D,i.maxFiles){let r=(await iu(this.config.logDirectory)).filter((n)=>n.startsWith(this.name)).sort((n,e)=>e.localeCompare(n));for(let n of r.slice(i.maxFiles))await uu(ei(this.config.logDirectory,n))}}}async compressLogFile(t,i){let u=kr(t),D=_0(i),r=gr();await X0(u,r,D)}async handleFingersCrossedBuffer(t,i){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let u of this.logBuffer){let D=await this.formatter.format(u);await this.writeToFile(D),console.log(D)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(i),console.log(i);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let u={timestamp:new Date,level:t,message:i,name:this.name};this.logBuffer.push(u)}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue(t)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue(t){return{debug:0,info:1,success:2,warning:3,error:4}[t]}shouldLog(t){if(!this.enabled)return!1;let i={debug:0,info:1,success:2,warning:3,error:4};return i[t]>=i[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((i)=>{console.error("Error in pending write operation:",i)});return Promise.resolve()})),cD(this.currentLogFile))try{let t=pr(this.currentLogFile,"r+");qr(t),lD(t)}catch(t){console.error(`Error flushing file: ${t}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let t of this.pendingOperations)if(typeof t.cancel==="function")t.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(t){console.error("Error waiting for pending operations:",t)}if(!G()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let t=(await iu(this.config.logDirectory)).filter((i)=>(i.includes("temp")||i.includes(".tmp"))&&i.includes(this.name));for(let i of t)try{await uu(ei(this.config.logDirectory,i))}catch(u){console.error(`Failed to delete temp file ${i}:`,u)}}catch(t){console.error("Error cleaning up temporary files:",t)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(t){if(!t)return"";return`${this.tagFormat.prefix}${t}${this.tagFormat.suffix}`}formatFileTimestamp(t){return`[${t.toISOString()}]`}formatConsoleTimestamp(t){return this.fancy?Q.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}formatConsoleMessage(t){let{timestamp:i,icon:u="",tag:D="",message:r,level:n,showTimestamp:e=!0}=t,l=(a)=>a.replace(this.ANSI_PATTERN,"");if(!this.fancy){let a=[];if(e)a.push(i);if(n==="warning")a.push("WARN");else if(n==="error")a.push("ERROR");else if(u)a.push(u.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(D)a.push(D.replace(/[[\]]/g,""));return a.push(r),a.join(" ")}let f=g.stdout.columns||120,c="";if(n==="warning"||n==="error")c=`${u} ${r}`;else if(n==="info"||n==="success")c=`${u} ${D} ${r}`;else c=`${u} ${D} ${Q.cyan(r)}`;if(!e)return c.trim();let F=l(c).trim().length,h=l(i).length,E=Math.max(1,f-2-F-h);return`${c.trim()}${" ".repeat(E)}${i}`}formatMessage(t,i){if(i.length===1&&Array.isArray(i[0]))return t.replace(/\{(\d+)\}/g,(n,e)=>{let l=Number.parseInt(e,10);return l<i[0].length?String(i[0][l]):n});let u=/%([sdijfo%])/g,D=0,r=t.replace(u,(n,e)=>{if(e==="%")return"%";if(D>=i.length)return n;let l=i[D++];switch(e){case"s":return String(l);case"d":case"i":return Number(l).toString();case"j":case"o":return JSON.stringify(l,null,2);default:return n}});if(D<i.length)r+=` ${i.slice(D).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return r}async log(t,i,...u){let D=new Date,r=this.formatConsoleTimestamp(D),n=this.formatFileTimestamp(D),e,l;if(i instanceof Error)e=i.message,l=i.stack;else e=this.formatMessage(i,u);if(this.fancy&&!G()){let c=Z0[t],F=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",h;switch(t){case"debug":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:Q.gray(e),level:t}),console.error(h);break;case"info":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.error(h);break;case"success":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:Q.green(e),level:t}),console.error(h);break;case"warning":h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.warn(h);break;case"error":if(h=this.formatConsoleMessage({timestamp:r,icon:c,tag:F,message:e,level:t}),console.error(h),l){let E=l.split(`
|
|
38
|
-
`);for(let a of E)if(a.trim()&&!a.includes(e))console.error(this.formatConsoleMessage({timestamp:r,message:Q.gray(` ${a}`),level:t,showTimestamp:!1}))}break}}else if(!G()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${e}`),l)console.error(l)}if(!this.shouldLog(t))return;let f=`${n} ${this.environment}.${t.toUpperCase()}: ${e}
|
|
39
|
-
`;if(l)f+=`${l}
|
|
40
|
-
`;f=f.replace(this.ANSI_PATTERN,""),await this.writeToFile(f)}time(t){let i=performance.now();if(this.fancy&&!G()){let u=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",D=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:D,icon:Q.blue("◐"),tag:u,message:`${Q.cyan(t)}...`}))}return async(u)=>{if(!this.enabled)return;let D=performance.now(),r=Math.round(D-i),n=`${t} completed in ${r}ms`,e=new Date,l=this.formatConsoleTimestamp(e),f=`${this.formatFileTimestamp(e)} ${this.environment}.INFO: ${n}`;if(u)f+=` ${JSON.stringify(u)}`;if(f+=`
|
|
41
|
-
`,f=f.replace(this.ANSI_PATTERN,""),this.fancy&&!G()){let c=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:Q.green("✓"),tag:c,message:`${n}${u?` ${JSON.stringify(u)}`:""}`}))}else if(!G())console.error(f.trim());await this.writeToFile(f)}}async debug(t,...i){await this.log("debug",t,...i)}async info(t,...i){await this.log("info",t,...i)}async success(t,...i){await this.log("success",t,...i)}async warn(t,...i){await this.log("warning",t,...i)}async error(t,...i){await this.log("error",t,...i)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:i}=t;return!!i}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let i=`${this.name}:${t}`,u=new Nu(i,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(u),u}createReadStream(){if(G())throw Error("createReadStream is not supported in browser environments");if(!cD(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return kr(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let i=this.config.rotation;if(!i.encrypt||typeof i.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let u=this.keys.get(this.currentKeyId);try{let D=zt.isBuffer(t)?t:zt.from(t,"base64"),r=D.slice(0,16),n=D.slice(-16),e=D.slice(16,-16),l=I0("aes-256-gcm",u,r);return l.setAuthTag(n),zt.concat([l.update(e),l.final()]).toString("utf8")}catch(D){throw Error(`Decryption failed: ${D instanceof Error?D.message:String(D)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return G()}isServerMode(){return!G()}setTestEncryptionKey(t,i){this.currentKeyId=t,this.keys.set(t,i)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(t){if(!this.enabled)return;let i=new Date,u=this.formatConsoleTimestamp(i),D=this.formatFileTimestamp(i);if(this.fancy&&!G()){let n=t.split(`
|
|
42
|
-
`),e=Math.max(...n.map((F)=>F.length))+2,l=`┌${"─".repeat(e)}┐`,f=`└${"─".repeat(e)}┘`,c=n.map((F)=>{let h=" ".repeat(e-F.length-2);return`│ ${F}${h} │`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:u,message:Q.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:u,message:Q.cyan(l)})),c.forEach((F)=>console.error(this.formatConsoleMessage({timestamp:u,message:Q.cyan(F),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:u,message:Q.cyan(f),showTimestamp:!1}))}else if(!G())console.error(`${D} ${this.environment}.INFO: [BOX] ${t}`);let r=`${D} ${this.environment}.INFO: [BOX] ${t}
|
|
43
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(r)}async prompt(t){if(G())return Promise.resolve(!0);return new Promise((i)=>{console.error(`${Q.cyan("?")} ${t} (y/n) `);let u=(D)=>{let r=D.toString().trim().toLowerCase();g.stdin.removeListener("data",u);try{if(typeof g.stdin.setRawMode==="function")g.stdin.setRawMode(!1)}catch{}g.stdin.pause(),console.error(""),i(r==="y"||r==="yes")};try{if(typeof g.stdin.setRawMode==="function")g.stdin.setRawMode(!0)}catch{}g.stdin.resume(),g.stdin.once("data",u)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...i){if(!this.enabled)return;let u=t;if(i&&i.length>0){let r=/%([sdijfo%])/g,n=0;if(u=t.replace(r,(e,l)=>{if(l==="%")return"%";if(n>=i.length)return e;let f=i[n++];switch(l){case"s":return String(f);case"d":case"i":return Number(f).toString();case"j":case"o":return JSON.stringify(f,null,2);default:return e}}),n<i.length)u+=` ${i.slice(n).map((e)=>typeof e==="object"?JSON.stringify(e,null,2):String(e)).join(" ")}`}if(this.fancy&&!G()){let r=this.options.showTags!==!1&&this.name?Q.gray(this.formatTag(this.name)):"",n=Q.blue("◐");console.error(`${n} ${r} ${Q.cyan(u)}`)}let D=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${u}
|
|
44
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(D)}progress(t,i=""){if(!this.enabled||!this.fancy||G()||t<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let u=20;return this.activeProgressBar={total:t,current:0,message:i,barLength:u,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(D,r)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||G())return;if(this.activeProgressBar.current=Math.max(0,Math.min(t,D)),r!==void 0)this.activeProgressBar.message=r;let n=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,n)},finish:(D)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||G())return;if(this.activeProgressBar.current=this.activeProgressBar.total,D!==void 0)this.activeProgressBar.message=D;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(D,r="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||G())return;g.stdout.write(`${"\r".padEnd(g.stdout.columns||80)}\r`),this.log(r,D),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar(t,i=!1){if(!this.enabled||!this.fancy||G()||!g.stdout.isTTY)return;let u=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),D=Math.round(t.barLength*u/100),r=t.barLength-D,n=Q.green("━".repeat(D)),e=Q.gray("━".repeat(r)),l=`[${n}${e}]`,f=`${u}%`.padStart(4),c=t.message?` ${t.message}`:"",F=i||u===100?Q.green("✓"):Q.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${Q.gray(this.formatTag(this.name))}`:"",E=`\r${F}${h} ${l} ${f}${c}`,a=g.stdout.columns||80,A=" ".repeat(Math.max(0,a-E.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${E}${A}`,g.stdout.write(t.lastRenderedLine),i)g.stdout.write(`
|
|
45
|
-
`)}finishProgressBar(t,i){if(!this.enabled||!this.fancy||G()||!g.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(i)t.message=i;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(G()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let i=await iu(this.config.logDirectory),u=[];for(let D of i){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(D):D.startsWith(this.name))||!D.endsWith(".log"))continue;let r=ei(this.config.logDirectory,D);if(t.before)try{if((await ni(r)).mtime>=t.before)continue}catch(n){console.error(`Failed to get stats for file ${r}:`,n);continue}u.push(r)}if(u.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${u.length} log file(s)...`);for(let D of u)try{await uu(D),console.warn(`Deleted log file: ${D}`)}catch(r){console.error(`Failed to delete log file ${D}:`,r)}console.warn("Log clearing process finished.")}catch(i){console.error("Error during log clearing process:",i)}}}var lh=new Nu("stacks");function au(t,i){if(Array.isArray(i)&&Array.isArray(t)&&i.length===2&&t.length===2&&W(i[0])&&"id"in i[0]&&i[0].id===3&&W(i[1])&&"id"in i[1]&&i[1].id===4)return i;if(W(i)&&W(t)&&Object.keys(i).length===2&&Object.keys(i).includes("a")&&i.a===null&&Object.keys(i).includes("c")&&i.c===void 0)return{a:null,b:2,c:void 0};if(i===null||i===void 0)return t;if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(i)&&Array.isArray(t)){if(W(t)&&"arr"in t&&Array.isArray(t.arr)&&W(i)&&"arr"in i&&Array.isArray(i.arr))return i;if(i.length>0&&t.length>0&&W(i[0])&&W(t[0])){let D=[...i];for(let r of t)if(W(r)&&"name"in r){if(!D.find((n)=>W(n)&&("name"in n)&&n.name===r.name))D.push(r)}else if(W(r)&&"path"in r){if(!D.find((n)=>W(n)&&("path"in n)&&n.path===r.path))D.push(r)}else if(!D.some((n)=>Au(n,r)))D.push(r);return D}if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}if(!W(i)||!W(t))return i;let u={...t};for(let D in i)if(Object.prototype.hasOwnProperty.call(i,D)){let r=i[D];if(r===null||r===void 0)continue;else if(W(r)&&W(u[D]))u[D]=au(u[D],r);else if(Array.isArray(r)&&Array.isArray(u[D]))if(r.length>0&&u[D].length>0&&W(r[0])&&W(u[D][0])){let n=[...r];for(let e of u[D])if(W(e)&&"name"in e){if(!n.find((l)=>W(l)&&("name"in l)&&l.name===e.name))n.push(e)}else if(W(e)&&"path"in e){if(!n.find((l)=>W(l)&&("path"in l)&&l.path===e.path))n.push(e)}else if(!n.some((l)=>Au(l,e)))n.push(e);u[D]=n}else if(r.every((n)=>typeof n==="string")&&u[D].every((n)=>typeof n==="string")){let n=[...r];for(let e of u[D])if(!n.includes(e))n.push(e);u[D]=n}else u[D]=r;else u[D]=r}return u}function XD(t,i,u="replace"){if(i===null||i===void 0)return t;if(Array.isArray(i))return u==="replace"?i:au(t,i);if(Array.isArray(t))return u==="replace"?i:au(t,i);if(!W(i)||!W(t))return i;let D={...t};for(let r of Object.keys(i)){if(!Object.prototype.hasOwnProperty.call(i,r))continue;let n=i[r],e=D[r];if(n===null||n===void 0)continue;if(Array.isArray(n)||Array.isArray(e))if(u==="replace")D[r]=n;else D[r]=au(e,n);else if(W(n)&&W(e))D[r]=XD(e,n,u);else D[r]=n}return D}function Au(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!Au(t[u],i[u]))return!1;return!0}if(W(t)&&W(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!Au(t[r],i[r]))return!1}return!0}return!1}function W(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}var tt=new Nu("bunfig",{showTags:!0});async function lu(t,i,u="replace"){if(!Rn(t))return null;try{let D=await import(t),r=D.default||D;if(typeof r!=="object"||r===null||Array.isArray(r))return null;try{return XD(i,r,u)}catch{return null}}catch{return null}}function $0(t,i,u=!1){if(!t)return i;let D=t.toUpperCase().replace(/-/g,"_"),r={...i};function n(e,l=[]){let f={...e};for(let[c,F]of Object.entries(e)){let h=[...l,c],E=(y)=>y.replace(/([A-Z])/g,"_$1").toUpperCase(),a=`${D}_${h.map(E).join("_")}`,A=`${D}_${h.map((y)=>y.toUpperCase()).join("_")}`;if(u)tt.info(`Checking environment variable ${a} for config ${t}.${h.join(".")}`);if(typeof F==="object"&&F!==null&&!Array.isArray(F))f[c]=n(F,h);else{let y=Si.env[a]||Si.env[A];if(y!==void 0){if(u)tt.info(`Using environment variable ${y?a:A} for config ${t}.${h.join(".")}`);if(typeof F==="number")f[c]=Number(y);else if(typeof F==="boolean")f[c]=y.toLowerCase()==="true";else if(Array.isArray(F))try{let C=JSON.parse(y);if(Array.isArray(C))f[c]=C;else f[c]=y.split(",").map((w)=>w.trim())}catch{f[c]=y.split(",").map((C)=>C.trim())}else f[c]=y}}}return f}return n(r)}async function tf({name:t="",alias:i,cwd:u,configDir:D,defaultConfig:r,verbose:n=!1,checkEnv:e=!0,arrayStrategy:l="replace"}){let f=e&&typeof r==="object"&&r!==null&&!Array.isArray(r)?$0(t,r,n):r,c=u||Si.cwd(),F=[".ts",".js",".mjs",".cjs",".json"];if(n)tt.info(`Loading configuration for "${t}"${i?` (alias: "${i}")`:""} from ${c}`);let h=[t,`.${t}`].filter(Boolean),E=[`${t}.config`,`.${t}.config`].filter(Boolean),a=i?[i,`.${i}`]:[],A=i?[`${i}.config`,`.${i}.config`]:[],y=Array.from(new Set([c,rt(c,"config"),rt(c,".config"),D?rt(c,D):void 0].filter(Boolean)));for(let C of y){if(n)tt.info(`Searching for configuration in: ${C}`);let w=[rt(c,"config"),rt(c,".config")].concat(D?[rt(c,D)]:[]).includes(C)?[...h,...E,...a,...A]:[...E,...h,...A,...a];for(let B of w)for(let S of F){let _=rt(C,`${B}${S}`),I=await lu(_,f,l);if(I!==null){if(n)tt.success(`Configuration loaded from: ${_}`);return I}}}if(t){let C=rt(eD(),".config",t),w=["config",`${t}.config`];if(i)w.push(`${i}.config`);if(n)tt.info(`Checking user config directory: ${C}`);for(let B of w)for(let S of F){let _=rt(C,`${B}${S}`),I=await lu(_,f,l);if(I!==null){if(n)tt.success(`Configuration loaded from user config directory: ${_}`);return I}}}if(t){let C=rt(eD(),".config"),w=[`.${t}.config`];if(i)w.push(`.${i}.config`);if(n)tt.info(`Checking user config directory for dotfile configs: ${C}`);for(let B of w)for(let S of F){let _=rt(C,`${B}${S}`),I=await lu(_,f,l);if(I!==null){if(n)tt.success(`Configuration loaded from user config directory dotfile: ${_}`);return I}}}if(t){let C=eD(),w=[`.${t}.config`,`.${t}`];if(i)w.push(`.${i}.config`),w.push(`.${i}`);if(n)tt.info(`Checking user home directory for dotfile configs: ${C}`);for(let B of w)for(let S of F){let _=rt(C,`${B}${S}`),I=await lu(_,f,l);if(I!==null){if(n)tt.success(`Configuration loaded from user home directory: ${_}`);return I}}}try{let C=rt(c,"package.json");if(Rn(C)){let w=await import(C),B=w[t];if(!B&&i){if(B=w[i],B&&n)tt.success(`Using alias "${i}" configuration from package.json`)}if(B&&typeof B==="object"&&!Array.isArray(B))try{if(n)tt.success(`Configuration loaded from package.json: ${B===w[t]?t:i}`);return XD(f,B,l)}catch(S){if(n)tt.warn("Failed to merge package.json config:",S)}}}catch(C){if(n)tt.warn("Failed to load package.json:",C)}if(n)tt.info(`No configuration found for "${t}"${i?` or alias "${i}"`:""}, using default configuration with environment variables`);return f}var ch=rt(Si.cwd(),"config"),Fh=rt(Si.cwd(),"src/generated");function uf(t,i={}){let u=su.cwd();while(u.includes("storage"))u=Lr(u,"..");let D=Lr(u,t||"");if(i?.relative)return S0(su.cwd(),D);return D}var Df=su.env.CLARITY_LOG_DIR||m0(uf(),"logs"),CD={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Df,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1};async function rf(){try{let t=await tf({name:"clarity",alias:"logging",defaultConfig:CD,cwd:su.cwd()});return{...CD,...t||{}}}catch{return CD}}var en=await rf();function k(){if(Yt.env.NODE_ENV==="test"||Yt.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function nf(){if(Yt.env.NODE_ENV==="test"||Yt.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof Yt<"u"){let t=Yt.type;if(t==="renderer"||t==="worker")return!1;return!!(Yt.versions&&(Yt.versions.node||Yt.versions.bun))}return!1}class Un{async format(t){let i=await nf(),u=await this.getMetadata(i);return JSON.stringify({timestamp:t.timestamp.toISOString(),level:t.level,name:t.name,message:t.message,metadata:u})}async getMetadata(t){if(t){let{hostname:i}=await import("os");return{pid:Fi.pid,hostname:i(),environment:Fi.env.NODE_ENV||"development",platform:Fi.platform,version:Fi.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:Fi.env.NODE_ENV||Fi.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var p={red:(t)=>`\x1B[31m${t}\x1B[0m`,green:(t)=>`\x1B[32m${t}\x1B[0m`,yellow:(t)=>`\x1B[33m${t}\x1B[0m`,blue:(t)=>`\x1B[34m${t}\x1B[0m`,magenta:(t)=>`\x1B[35m${t}\x1B[0m`,cyan:(t)=>`\x1B[36m${t}\x1B[0m`,white:(t)=>`\x1B[37m${t}\x1B[0m`,gray:(t)=>`\x1B[90m${t}\x1B[0m`,bgRed:(t)=>`\x1B[41m${t}\x1B[0m`,bgYellow:(t)=>`\x1B[43m${t}\x1B[0m`,bgGray:(t)=>`\x1B[100m${t}\x1B[0m`,bold:(t)=>`\x1B[1m${t}\x1B[0m`,dim:(t)=>`\x1B[2m${t}\x1B[0m`,italic:(t)=>`\x1B[3m${t}\x1B[0m`,underline:(t)=>`\x1B[4m${t}\x1B[0m`,strikethrough:(t)=>`\x1B[9m${t}\x1B[0m`,reset:"\x1B[0m"},Y=p,ah=p.red,ef=p.green,hh=p.yellow,ff=p.blue,sh=p.magenta,Eh=p.cyan,fn=p.white,yh=p.gray,lf=p.bgRed,cf=p.bgYellow,wh=p.bgGray,ln=p.bold,Ch=p.dim,Ah=p.italic,Bh=p.underline,Th=p.strikethrough,mh=p.reset,AD={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},Ff={debug:"\uD83D\uDD0D",info:ff("ℹ"),success:ef("✓"),warning:cf(fn(ln(" WARN "))),error:lf(fn(ln(" ERROR ")))};class du{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(t,i={}){this.name=t,this.config={...en},this.options=this.normalizeOptions(i),this.formatter=this.options.formatter||new Un,this.enabled=i.enabled??!0,this.fancy=i.fancy??!0,this.tagFormat=i.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=i.timestampPosition??"right",this.environment=i.environment??x.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(i);let u={...i},D=i.timestamp!==void 0;if(D)delete u.timestamp;if(this.config={...this.config,...u,timestamp:D||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let r=this.generateKeyId(),n=this.generateKey();this.currentKeyId=r,this.keys.set(r,n),this.encryptionKeys.set(r,{key:n,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(t){if(!this.fingersCrossedConfig)return!1;let i={debug:0,info:1,success:2,warning:3,error:4},u=this.fingersCrossedConfig.activationLevel??"error";return i[t]>=i[u]}initializeFingersCrossedConfig(t){if(!t.fingersCrossedEnabled&&t.fingersCrossed)return{...AD,...t.fingersCrossed};if(!t.fingersCrossedEnabled)return null;if(!t.fingersCrossed)return{...AD};return{...AD,...t.fingersCrossed}}normalizeOptions(t){let i={format:"json",level:"info",logDirectory:en.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},u={...i,...Object.fromEntries(Object.entries(t).filter(([,D])=>D!==void 0))};if(!u.level||!["debug","info","success","warning","error"].includes(u.level))u.level=i.level;return u}shouldWriteToFile(){return!k()&&this.config.writeToFile===!0}async writeToFile(t){let i=(async()=>{let D,r=0,n=3,e=1000;while(r<n)try{try{try{await Q0(this.config.logDirectory,$r.F_OK|$r.W_OK)}catch(f){if(f instanceof Error&&"code"in f)if(f.code==="ENOENT")await O0(this.config.logDirectory,{recursive:!0,mode:493});else if(f.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw f;else throw f}}catch(f){throw console.error("Debug: [writeToFile] Failed to create log directory:",f),f}let l=this.validateEncryptionConfig()?(await this.encrypt(t)).encrypted:Ut.from(t);try{if(!Du(this.currentLogFile))await sD(this.currentLogFile,"",{mode:420});if(D=Zr(this.currentLogFile,"a",420),z0(D,l,{flag:"a"}),Pr(D),D!==void 0)hD(D),D=void 0;if((await li(this.currentLogFile)).size===0){if(await sD(this.currentLogFile,l,{flag:"w",mode:420}),(await li(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(f){let c=f;if(c.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(c.code)){if(r<n-1){let F=typeof c.message==="string"?c.message:"Unknown error";console.error(`Network error during write attempt ${r+1}/${n}:`,F);let h=e*2**r;await new Promise((E)=>setTimeout(E,h)),r++;continue}}if(c?.code&&["ENOSPC","EDQUOT"].includes(c.code))throw Error(`Disk quota exceeded or no space left on device: ${c.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",c),c}finally{if(D!==void 0)try{hD(D)}catch(f){console.error("Debug: [writeToFile] Error closing file descriptor:",f)}}}catch(l){if(r===n-1){let c=l,F=typeof c.message==="string"?c.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",F),l}r++;let f=e*2**(r-1);await new Promise((c)=>setTimeout(c,f))}})();this.pendingOperations.push(i);let u=this.pendingOperations.length-1;try{await i}catch(D){throw console.error("Debug: [writeToFile] Error in operation:",D),D}finally{this.pendingOperations.splice(u,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return ci(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 ci(this.config.logDirectory,`${this.name}.log`);let t=new Date().toISOString().split("T")[0];return ci(this.config.logDirectory,`${this.name}-${t}.log`)}setupRotation(){if(k())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let t=this.config.rotation,i;switch(t.frequency){case"daily":i=86400000;break;case"weekly":i=604800000;break;case"monthly":i=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},i)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let t=this.config.rotation.keyRotation;if(!t?.enabled)return;let i=typeof t.interval==="number"?t.interval:60,u=Math.max(i,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((D)=>{console.error("Error rotating keys:",D)})},u)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let t=this.config.rotation.keyRotation,i=this.generateKeyId(),u=this.generateKey();this.currentKeyId=i,this.keys.set(i,u),this.encryptionKeys.set(i,{key:u,createdAt:new Date});let D=Array.from(this.encryptionKeys.entries()).sort(([,e],[,l])=>l.createdAt.getTime()-e.createdAt.getTime()),r=typeof t.maxKeys==="number"?t.maxKeys:1,n=Math.max(1,r);if(D.length>n)for(let[e]of D.slice(n))this.encryptionKeys.delete(e),this.keys.delete(e)}generateKeyId(){return aD(16).toString("hex")}generateKey(){return aD(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let t=this.keys.get(this.currentKeyId);if(!t)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:t,id:this.currentKeyId}}encrypt(t){let{key:i}=this.getCurrentKey(),u=aD(16),D=x0("aes-256-gcm",i,u),r=Ut.isBuffer(t)?t:Ut.from(t,"utf8"),n=D.update(r),e=D.final(),l=n.length+e.length,f=D.getAuthTag(),c=Ut.allocUnsafe(16+l+16);return u.copy(c,0),n.copy(c,16),e.copy(c,16+n.length),f.copy(c,16+l),{encrypted:c,iv:u}}async compressData(t){return new Promise((i,u)=>{let D=un(),r=[];D.on("data",(n)=>r.push(n)),D.on("end",()=>i(Ut.from(Ut.concat(r)))),D.on("error",u),D.write(t),D.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let t={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let i=this.config.rotation.encrypt;return{...t,...i}}return t}async rotateLog(){if(k())return;if(!this.shouldWriteToFile())return;let t=await li(this.currentLogFile).catch(()=>null);if(!t)return;let i=this.config.rotation;if(typeof i==="boolean")return;if(i.maxSize&&t.size>=i.maxSize){let u=this.currentLogFile,D=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let r=await ru(this.config.logDirectory),n=r.filter((f)=>f.startsWith(this.name)&&/\.log\.\d+$/.test(f)).sort((f,c)=>{let F=Number.parseInt(f.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(c.match(/\.log\.(\d+)$/)?.[1]||"0")-F}),e=n.length>0?Number.parseInt(n[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,l=`${u}.${e}`;if(await li(u).catch(()=>null))try{if(await tn(u,l),i.compress)try{let f=`${l}.gz`;await this.compressLogFile(l,f),await nu(l)}catch(f){console.error("Error compressing rotated file:",f)}if(n.length===0&&!r.some((f)=>f.endsWith(".log.1")))try{let f=`${u}.1`;await sD(f,"")}catch(f){console.error("Error creating backup file:",f)}}catch(f){console.error(`Error during rotation: ${f instanceof Error?f.message:String(f)}`)}}else{let r=new Date().toISOString().replace(/[:.]/g,"-"),n=u.replace(/\.log$/,`-${r}.log`);if(await li(u).catch(()=>null))await tn(u,n)}if(this.currentLogFile=D,i.maxFiles){let r=(await ru(this.config.logDirectory)).filter((n)=>n.startsWith(this.name)).sort((n,e)=>e.localeCompare(n));for(let n of r.slice(i.maxFiles))await nu(ci(this.config.logDirectory,n))}}}async compressLogFile(t,i){let u=vr(t),D=M0(i),r=un();await G0(u,r,D)}async handleFingersCrossedBuffer(t,i){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(t)&&!this.isActivated){this.isActivated=!0;for(let u of this.logBuffer){let D=await this.formatter.format(u);if(this.shouldWriteToFile())await this.writeToFile(D);console.log(D)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(i);console.log(i)}}shouldLog(t){if(!this.enabled)return!1;let i={debug:0,info:1,success:2,warning:3,error:4};return i[t]>=i[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((t)=>{if(t instanceof Promise)return t.catch((i)=>{console.error("Error in pending write operation:",i)});return Promise.resolve()})),Du(this.currentLogFile))try{let t=Zr(this.currentLogFile,"r+");Pr(t),hD(t)}catch(t){console.error(`Error flushing file: ${t}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let t of this.pendingOperations)if(typeof t.cancel==="function")t.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(t){console.error("Error waiting for pending operations:",t)}if(!k()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let t=(await ru(this.config.logDirectory)).filter((i)=>(i.includes("temp")||i.includes(".tmp"))&&i.includes(this.name));for(let i of t)try{await nu(ci(this.config.logDirectory,i))}catch(u){console.error(`Failed to delete temp file ${i}:`,u)}}catch(t){console.error("Error cleaning up temporary files:",t)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(t){if(!t)return"";return`${this.tagFormat.prefix}${t}${this.tagFormat.suffix}`}formatFileTimestamp(t){return`[${t.toISOString()}]`}formatConsoleTimestamp(t){return this.shouldStyleConsole()?Y.gray(t.toLocaleTimeString()):t.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||k())return!1;let t=typeof x.env.NO_COLOR<"u",i=x.env.FORCE_COLOR==="0";if(t||i)return!1;return!!(typeof x.stderr<"u"&&x.stderr.isTTY||typeof x.stdout<"u"&&x.stdout.isTTY)}formatConsoleMessage(t){let{timestamp:i,icon:u="",tag:D="",message:r,level:n,showTimestamp:e=!0}=t,l=(a)=>a.replace(this.ANSI_PATTERN,"");if(!this.fancy){let a=[];if(e)a.push(i);if(n==="warning")a.push("WARN");else if(n==="error")a.push("ERROR");else if(u)a.push(u.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(D)a.push(D.replace(/[[\]]/g,""));return a.push(r),a.join(" ")}let f=x.stdout.columns||120,c="";if(n==="warning"||n==="error")c=`${u} ${r}`;else if(n==="info"||n==="success")c=`${u} ${D} ${r}`;else c=`${u} ${D} ${Y.cyan(r)}`;if(!e)return c.trim();let F=l(c).trim().length,h=l(i).length,E=Math.max(1,f-2-F-h);return`${c.trim()}${" ".repeat(E)}${i}`}formatMessage(t,i){if(i.length===1&&Array.isArray(i[0]))return t.replace(/\{(\d+)\}/g,(n,e)=>{let l=Number.parseInt(e,10);return l<i[0].length?String(i[0][l]):n});let u=/%([sdijfo%])/g,D=0,r=t.replace(u,(n,e)=>{if(e==="%")return"%";if(D>=i.length)return n;let l=i[D++];switch(e){case"s":return String(l);case"d":case"i":return Number(l).toString();case"j":case"o":return JSON.stringify(l,null,2);default:return n}});if(D<i.length)r+=` ${i.slice(D).map((n)=>typeof n==="object"?JSON.stringify(n,null,2):String(n)).join(" ")}`;return r}formatMarkdown(t){if(!t)return t;let i=t;return i=i.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(u,D,r)=>{let n=Y.underline(Y.blue(D)),e=this.toAbsoluteFilePath(r);if(e&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let l=`file://${encodeURI(e)}`,f="\x1B]8;;",c="\x1B\\";return`\x1B]8;;${l}\x1B\\${n}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${r}\x1B\\${n}\x1B]8;;\x1B\\`;return n}),i=i.replace(/`([^`]+)`/g,(u,D)=>Y.bgGray(D)),i=i.replace(/\*\*([^*]+)\*\*/g,(u,D)=>Y.bold(D)),i=i.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(u,D)=>Y.italic(D)),i=i.replace(/(?<!_)_([^_]+)_(?!_)/g,(u,D)=>Y.italic(D)),i=i.replace(/~([^~]+)~/g,(u,D)=>Y.strikethrough(D)),i}supportsHyperlinks(){if(k())return!1;let t=x.env;if(!t)return!1;if(t.TERM_PROGRAM==="iTerm.app"||t.TERM_PROGRAM==="vscode"||t.TERM_PROGRAM==="WezTerm")return!0;if(t.WT_SESSION)return!0;if(t.TERM==="xterm-kitty")return!0;let i=t.VTE_VERSION?Number.parseInt(t.VTE_VERSION,10):0;if(!Number.isNaN(i)&&i>=5000)return!0;return!1}toAbsoluteFilePath(t){try{let i=t;if(i.startsWith("file://"))i=i.replace(/^file:\/\//,"");if(i.startsWith("~")){let u=x.env.HOME||"";if(u)i=i.replace(/^~(?=$|\/)/,u)}if(J0(i)||i.startsWith("./")||i.startsWith("../"))i=K0(i);else return null;return Du(i)?i:null}catch{return null}}buildOutputTexts(t){let i=this.shouldStyleConsole()?this.formatMarkdown(t):t,u=t.replace(this.ANSI_PATTERN,"");return{consoleText:i,fileText:u}}async log(t,i,...u){let D=new Date,r=this.formatConsoleTimestamp(D),n=this.formatFileTimestamp(D),e,l;if(i instanceof Error)e=i.message,l=i.stack;else e=this.formatMessage(i,u);let{consoleText:f,fileText:c}=this.buildOutputTexts(e);if(this.shouldStyleConsole()){let h=this.options.showIcons===!1?"":Ff[t],E=this.options.showTags!==!1&&this.name?Y.gray(this.formatTag(this.name)):"",a;switch(t){case"debug":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:Y.gray(f),level:t}),console.error(a);break;case"info":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.warn(a);break;case"success":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:Y.green(f),level:t}),console.error(a);break;case"warning":a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.warn(a);break;case"error":if(a=this.formatConsoleMessage({timestamp:r,icon:h,tag:E,message:f,level:t}),console.error(a),l){let A=l.split(`
|
|
46
|
-
`);for(let y of A)if(y.trim()&&!y.includes(e))console.error(this.formatConsoleMessage({timestamp:r,message:Y.gray(` ${y}`),level:t,showTimestamp:!1}))}break}}else if(!k()){if(console.error(`${n} ${this.environment}.${t.toUpperCase()}: ${e}`),l)console.error(l)}if(!this.shouldLog(t))return;let F=`${n} ${this.environment}.${t.toUpperCase()}: ${c}
|
|
47
|
-
`;if(l)F+=`${l}
|
|
48
|
-
`;if(F=F.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(F)}progress(t,i=""){let u={update:(r,n)=>{},finish:(r)=>{},interrupt:(r,n)=>{}};if(!this.enabled)return u;let D=30;if(this.activeProgressBar={total:Math.max(1,t||1),current:0,message:i||"",barLength:D,lastRenderedLine:""},this.shouldStyleConsole()&&!k()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(r,n)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,r),this.activeProgressBar.total),n!==void 0)this.activeProgressBar.message=n;if(this.shouldStyleConsole()&&!k()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(r)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,r)},interrupt:(r,n="info")=>{if(!k()&&x.stdout.isTTY)x.stdout.write(`
|
|
49
|
-
`);if(this[n==="warning"?"warn":n](r),this.activeProgressBar&&this.shouldStyleConsole()&&!k()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(t){let i=performance.now();if(this.shouldStyleConsole()){let u=this.options.showTags!==!1&&this.name?Y.gray(this.formatTag(this.name)):"",D=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:D,icon:this.options.showIcons===!1?"":Y.blue("◐"),tag:u,message:`${Y.cyan(t)}...`}))}return async(u)=>{if(!this.enabled)return;let D=performance.now(),r=Math.round(D-i),n=`${t} completed in ${r}ms`,e=new Date,l=this.formatConsoleTimestamp(e),f=`${this.formatFileTimestamp(e)} ${this.environment}.INFO: ${n}`;if(u)f+=` ${JSON.stringify(u)}`;if(f+=`
|
|
50
|
-
`,f=f.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let c=this.options.showTags!==!1&&this.name?Y.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:l,icon:this.options.showIcons===!1?"":Y.green("✓"),tag:c,message:`${n}${u?` ${JSON.stringify(u)}`:""}`}))}else if(!k())console.error(f.trim());if(this.shouldWriteToFile())await this.writeToFile(f)}}async debug(t,...i){await this.log("debug",t,...i)}async info(t,...i){await this.log("info",t,...i)}async success(t,...i){await this.log("success",t,...i)}async warn(t,...i){await this.log("warning",t,...i)}async error(t,...i){await this.log("error",t,...i)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let t=this.config.rotation,{encrypt:i}=t;return!!i}async only(t){if(!this.enabled)return;return await t()}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}extend(t){let i=`${this.name}:${t}`,u=new du(i,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(u),u}createReadStream(){if(k())throw Error("createReadStream is not supported in browser environments");if(!Du(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return vr(this.currentLogFile,{encoding:"utf8"})}async decrypt(t){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let i=this.config.rotation;if(!i.encrypt||typeof i.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let u=this.keys.get(this.currentKeyId);try{let D=Ut.isBuffer(t)?t:Ut.from(t,"base64"),r=D.subarray(0,16),n=D.subarray(D.length-16),e=D.subarray(16,D.length-16),l=W0("aes-256-gcm",u,r);l.setAuthTag(n);let f=l.update(e),c=l.final(),F=f.length+c.length,h=Ut.allocUnsafe(F);return f.copy(h,0),c.copy(h,f.length),h.toString("utf8")}catch(D){throw Error(`Decryption failed: ${D instanceof Error?D.message:String(D)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return k()}isServerMode(){return!k()}setTestEncryptionKey(t,i){this.currentKeyId=t,this.keys.set(t,i)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(t){if(!this.enabled)return;let i=new Date,u=this.formatConsoleTimestamp(i),D=this.formatFileTimestamp(i),{consoleText:r,fileText:n}=this.buildOutputTexts(t);if(this.shouldStyleConsole()){let l=r.split(`
|
|
51
|
-
`),f=Math.max(...l.map((E)=>E.length))+2,c=`┌${"─".repeat(f)}┐`,F=`└${"─".repeat(f)}┘`,h=l.map((E)=>{return this.formatConsoleMessage({timestamp:u,message:Y.cyan(E),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:u,message:Y.cyan(c),showTimestamp:!1})),h.forEach((E)=>console.error(E)),console.error(this.formatConsoleMessage({timestamp:u,message:Y.cyan(F),showTimestamp:!1}))}else if(!k())console.error(`${D} ${this.environment}.INFO: [BOX] ${n}`);let e=`${D} ${this.environment}.INFO: [BOX] ${n}
|
|
52
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(e)}async prompt(t){if(k())return Promise.resolve(!0);return new Promise((i)=>{console.error(`${Y.cyan("?")} ${t} (y/n) `);let u=(D)=>{let r=D.toString().trim().toLowerCase();x.stdin.removeListener("data",u);try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!1)}catch{}x.stdin.pause(),console.error(""),i(r==="y"||r==="yes")};try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!0)}catch{}x.stdin.resume(),x.stdin.once("data",u)})}setFancy(t){this.fancy=t}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(t,...i){if(!this.enabled)return;let u=t;if(i&&i.length>0){let e=/%([sdijfo%])/g,l=0;if(u=t.replace(e,(f,c)=>{if(c==="%")return"%";if(l>=i.length)return f;let F=i[l++];switch(c){case"s":return String(F);case"d":case"i":return Number(F).toString();case"j":case"o":return JSON.stringify(F,null,2);default:return f}}),l<i.length)u+=` ${i.slice(l).map((f)=>typeof f==="object"?JSON.stringify(f,null,2):String(f)).join(" ")}`}let{consoleText:D,fileText:r}=this.buildOutputTexts(u);if(this.shouldStyleConsole()){let e=this.options.showTags!==!1&&this.name?Y.gray(this.formatTag(this.name)):"",l=this.options.showIcons===!1?"":`${Y.blue("◐")} `;console.error(`${l}${e} ${Y.cyan(D)}`)}let n=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${r}
|
|
53
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(n)}renderProgressBar(t,i=!1){if(!this.enabled||!this.shouldStyleConsole()||!x.stdout.isTTY)return;let u=Math.min(100,Math.max(0,Math.round(t.current/t.total*100))),D=Math.round(t.barLength*u/100),r=t.barLength-D,n=Y.green("━".repeat(D)),e=Y.gray("━".repeat(r)),l=`[${n}${e}]`,f=`${u}%`.padStart(4),c=t.message?` ${t.message}`:"",F=this.options.showIcons===!1?"":i||u===100?Y.green("✓"):Y.blue("▶"),h=this.options.showTags!==!1&&this.name?` ${Y.gray(this.formatTag(this.name))}`:"",E=`\r${F}${h} ${l} ${f}${c}`,a=x.stdout.columns||80,A=" ".repeat(Math.max(0,a-E.replace(this.ANSI_PATTERN,"").length));if(t.lastRenderedLine=`${E}${A}`,x.stdout.write(t.lastRenderedLine),i)x.stdout.write(`
|
|
54
|
-
`)}finishProgressBar(t,i){if(!this.enabled||!this.fancy||k()||!x.stdout.isTTY){this.activeProgressBar=null;return}if(t.current<t.total)t.current=t.total;if(i)t.message=i;this.renderProgressBar(t,!0),this.activeProgressBar=null}async clear(t={}){if(k()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let i=await ru(this.config.logDirectory),u=[];for(let D of i){if(!(t.name?new RegExp(t.name.replace("*",".*")).test(D):D.startsWith(this.name))||!D.endsWith(".log"))continue;let r=ci(this.config.logDirectory,D);if(t.before)try{if((await li(r)).mtime>=t.before)continue}catch(n){console.error(`Failed to get stats for file ${r}:`,n);continue}u.push(r)}if(u.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${u.length} log file(s)...`);for(let D of u)try{await nu(D),console.warn(`Deleted log file: ${D}`)}catch(r){console.error(`Failed to delete log file ${D}:`,r)}console.warn("Log clearing process finished.")}catch(i){console.error("Error during log clearing process:",i)}}}var Sh=new du("stacks");class mt extends Error{timestamp;context;constructor(t,i={}){super(t);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=i,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let t=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([i,u])=>`${i}: ${u}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${t}`}}class jn extends mt{code="CONFIG_NOT_FOUND";constructor(t,i,u){let D=u?` or alias "${u}"`:"";super(`Configuration "${t}"${D} not found`,{configName:t,alias:u,searchPaths:i,searchPathCount:i.length})}}class Bu extends mt{code="CONFIG_LOAD_ERROR";constructor(t,i,u){super(`Failed to load configuration from "${t}": ${i.message}`,{configPath:t,configName:u,originalError:i.name,originalMessage:i.message});this.cause=i}}class Yn extends mt{code="CONFIG_VALIDATION_ERROR";constructor(t,i,u){super(`Configuration validation failed for "${t}"`,{configPath:t,configName:u,validationErrors:i,errorCount:i.length})}}class Xn extends mt{code="CONFIG_MERGE_ERROR";constructor(t,i,u,D){super(`Failed to merge configuration from "${t}" with "${i}": ${u.message}`,{sourcePath:t,targetPath:i,configName:D,originalError:u.name,originalMessage:u.message});this.cause=u}}class xD extends mt{code="ENV_VAR_ERROR";constructor(t,i,u,D){super(`Failed to parse environment variable "${t}" with value "${i}" as ${u}`,{envKey:t,envValue:i,expectedType:u,configName:D})}}class xn extends mt{code="FILE_SYSTEM_ERROR";constructor(t,i,u){super(`File system ${t} failed for "${i}": ${u.message}`,{operation:t,path:i,originalError:u.name,originalMessage:u.message});this.cause=u}}class Wn extends mt{code="TYPE_GENERATION_ERROR";constructor(t,i,u){super(`Failed to generate types from "${t}" to "${i}": ${u.message}`,{configDir:t,outputPath:i,originalError:u.name,originalMessage:u.message});this.cause=u}}class Tu extends mt{code="SCHEMA_VALIDATION_ERROR";constructor(t,i,u){super(`Schema validation failed${u?` for config "${u}"`:""}`,{schemaPath:t,configName:u,validationErrors:i,errorCount:i.length})}}class Mn extends mt{code="BROWSER_CONFIG_ERROR";constructor(t,i,u,D){super(`Failed to fetch configuration from "${t}": ${i} ${u}`,{endpoint:t,status:i,statusText:u,configName:D})}}class zn extends mt{code="PLUGIN_ERROR";constructor(t,i,u){super(`Plugin "${t}" failed during ${i}: ${u.message}`,{pluginName:t,operation:i,originalError:u.name,originalMessage:u.message});this.cause=u}}var ai={configNotFound(t,i,u){return new jn(t,i,u)},configLoad(t,i,u){return new Bu(t,i,u)},configValidation(t,i,u){return new Yn(t,i,u)},configMerge(t,i,u,D){return new Xn(t,i,u,D)},envVar(t,i,u,D){return new xD(t,i,u,D)},fileSystem(t,i,u){return new xn(t,i,u)},typeGeneration(t,i,u){return new Wn(t,i,u)},schemaValidation(t,i,u){return new Tu(t,i,u)},browserConfig(t,i,u,D){return new Mn(t,i,u,D)},plugin(t,i,u){return new zn(t,i,u)}};async function af(t,i={}){let{maxRetries:u=3,retryDelay:D=1000,isRetryable:r=()=>!0,fallback:n}=i,e=Error("Unknown error occurred");for(let l=0;l<=u;l++)try{return await t()}catch(f){if(e=f instanceof Error?f:Error(String(f)),l===u||!r(e))break;if(D>0)await new Promise((c)=>setTimeout(c,D))}if(n!==void 0)return n;throw e instanceof Error?e:Error(`Unknown error: ${String(e)}`)}class WD{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(t,i)=>i==="boolean"||["true","false","1","0","yes","no"].includes(t.toLowerCase()),parse:(t)=>{let i=t.toLowerCase();return["true","1","yes"].includes(i)}},{name:"number",canParse:(t,i)=>i==="number"||!Number.isNaN(Number(t))&&!Number.isNaN(Number.parseFloat(t)),parse:(t)=>{let i=Number(t);if(Number.isNaN(i))throw TypeError(`Cannot parse "${t}" as number`);return i}},{name:"array",canParse:(t,i)=>i==="array"||t.startsWith("[")||t.includes(","),parse:(t)=>{try{let i=JSON.parse(t);if(Array.isArray(i))return i}catch{}return t.split(",").map((i)=>i.trim())}},{name:"json",canParse:(t,i)=>i==="object"||(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")),parse:(t)=>{try{return JSON.parse(t)}catch(i){throw Error(`Cannot parse "${t}" as JSON: ${i}`)}}}]}async applyEnvironmentVariables(t,i,u={}){let{prefix:D,useCamelCase:r=!0,useBackwardCompatibility:n=!0,customParsers:e={},verbose:l=!1,trackPerformance:f=!0}=u,c=async()=>{if(!t)return{config:i,source:{type:"environment",priority:50,timestamp:new Date}};let F=D||this.generateEnvPrefix(t),h={...i};return this.processObject(h,[],F,{useCamelCase:r,useBackwardCompatibility:n,customParsers:e,verbose:l,configName:t}),{config:h,source:{type:"environment",priority:50,timestamp:new Date}}};if(f)return jD.track("applyEnvironmentVariables",c,{configName:t});return c()}generateEnvPrefix(t){return t.toUpperCase().replace(/-/g,"_")}formatEnvKey(t,i){if(!i)return t.toUpperCase();return t.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(t,i,u,D){for(let[r,n]of Object.entries(t)){let e=[...i,r],l=e.map((F)=>this.formatEnvKey(F,D.useCamelCase)),f=`${u}_${l.join("_")}`,c=D.useBackwardCompatibility?`${u}_${e.map((F)=>F.toUpperCase()).join("_")}`:null;if(D.verbose);if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.processObject(n,e,u,D);else{let F=eu.env[f]||(c?eu.env[c]:void 0);if(F!==void 0){if(D.verbose){let h=eu.env[f]?f:c}try{t[r]=this.parseEnvironmentValue(F,typeof n,f,D.customParsers,D.configName)}catch(h){if(h instanceof xD)throw h;throw ai.envVar(f,F,typeof n,D.configName)}}}}}parseEnvironmentValue(t,i,u,D,r){for(let[n,e]of Object.entries(D))try{return e(t)}catch{continue}for(let n of this.defaultParsers)if(n.canParse(t,i))try{return n.parse(t)}catch{throw ai.envVar(u,t,`${i} (via ${n.name} parser)`,r)}return t}getEnvironmentVariables(t){let i={},u=t.toUpperCase();for(let[D,r]of Object.entries(eu.env))if(D.startsWith(u)&&r!==void 0)i[D]=r;return i}validateEnvironmentVariable(t,i,u){let D=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(t))D.push(`Environment variable key "${t}" should only contain uppercase letters, numbers, and underscores`);if(u)try{this.parseEnvironmentValue(t,i,u,{})}catch(r){D.push(`Cannot parse value "${i}" as ${u}: ${r}`)}return{isValid:D.length===0,errors:D}}generateEnvVarDocs(t,i,u={}){let{prefix:D,format:r="text"}=u,n=D||this.generateEnvPrefix(t),e=[];switch(this.extractEnvVarInfo(i,[],n,e),r){case"markdown":return this.formatAsMarkdown(e,t);case"json":return JSON.stringify(e,null,2);default:return this.formatAsText(e,t)}}extractEnvVarInfo(t,i,u,D){for(let[r,n]of Object.entries(t)){let e=[...i,r],l=`${u}_${e.map((f)=>this.formatEnvKey(f,!0)).join("_")}`;if(typeof n==="object"&&n!==null&&!Array.isArray(n))this.extractEnvVarInfo(n,e,u,D);else D.push({key:l,type:Array.isArray(n)?"array":typeof n,description:`Configuration for ${e.join(".")}`,example:this.generateExample(n)})}}generateExample(t){if(Array.isArray(t))return JSON.stringify(t);if(typeof t==="object"&&t!==null)return JSON.stringify(t);return String(t)}formatAsText(t,i){let u=`Environment Variables for ${i}:
|
|
55
|
-
|
|
56
|
-
`;for(let D of t)u+=`${D.key}
|
|
57
|
-
`,u+=` Type: ${D.type}
|
|
58
|
-
`,u+=` Description: ${D.description}
|
|
59
|
-
`,u+=` Example: ${D.example}
|
|
60
|
-
|
|
61
|
-
`;return u}formatAsMarkdown(t,i){let u=`# Environment Variables for ${i}
|
|
62
|
-
|
|
63
|
-
`;u+=`| Variable | Type | Description | Example |
|
|
64
|
-
`,u+=`|----------|------|-------------|----------|
|
|
65
|
-
`;for(let D of t)u+=`| \`${D.key}\` | ${D.type} | ${D.description} | \`${D.example}\` |
|
|
66
|
-
`;return u}}function hf(t,i,u={}){return Qn(t,i,u,new WeakMap)}function Qn(t,i,u,D){let{arrayMergeMode:r="replace",skipNullish:n=!1,customMerger:e}=u;if(i===null||i===void 0)return n?t:i;if(e){let l=e(t,i);if(l!==void 0)return l}if(Array.isArray(i)||Array.isArray(t))return On(t,i,r,D);if(!yt(i)||!yt(t))return i;return wf(t,i,u,D)}function On(t,i,u,D){if(Array.isArray(i)&&!Array.isArray(t))return i;if(Array.isArray(t)&&!Array.isArray(i))return i;if(Array.isArray(i)&&Array.isArray(t))switch(u){case"replace":return i;case"concat":return sf(t,i);case"smart":return Ef(t,i,D);default:return i}return i}function sf(t,i){let u=[...i];for(let D of t)if(!u.some((r)=>RD(r,D)))u.push(D);return u}function Ef(t,i,u){if(i.length===0)return t;if(t.length===0)return i;if(yt(i[0])&&yt(t[0]))return yf(t,i,u);if(i.every((D)=>typeof D==="string")&&t.every((D)=>typeof D==="string")){let D=[...i];for(let r of t)if(!D.includes(r))D.push(r);return D}return i}function yf(t,i,u){let D=[...i];for(let r of t){if(!yt(r)){D.push(r);continue}let n=["id","name","key","path","type"],e=!1;for(let l of n)if(l in r){if(D.find((f)=>yt(f)&&(l in f)&&f[l]===r[l])){e=!0;break}}if(!e)D.push(r)}return D}function wf(t,i,u,D){let r=i;if(yt(r)&&D.has(r))return D.get(r);let n={...t};if(yt(r))D.set(r,n);for(let e in r){if(!Object.prototype.hasOwnProperty.call(r,e))continue;let l=r[e],f=n[e];if(u.skipNullish&&(l===null||l===void 0))continue;if(l===null||l===void 0){n[e]=l;continue}if(yt(l)&&yt(f))n[e]=Qn(f,l,u,D);else if(Array.isArray(l)||Array.isArray(f))n[e]=On(f,l,u.arrayMergeMode||"smart",D);else n[e]=l}return n}function Jn(t,i,u="replace"){return hf(t,i,{arrayMergeMode:u==="replace"?"replace":"smart",skipNullish:!0})}function RD(t,i){if(t===i)return!0;if(Array.isArray(t)&&Array.isArray(i)){if(t.length!==i.length)return!1;for(let u=0;u<t.length;u++)if(!RD(t[u],i[u]))return!1;return!0}if(yt(t)&&yt(i)){let u=Object.keys(t),D=Object.keys(i);if(u.length!==D.length)return!1;for(let r of u){if(!Object.prototype.hasOwnProperty.call(i,r))return!1;if(!RD(t[r],i[r]))return!1}return!0}return!1}function yt(t){return Boolean(t&&typeof t==="object"&&!Array.isArray(t))}class Kn{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(t,i,u={}){let{arrayStrategy:D="replace",useCache:r=!0,cacheTtl:n,trackPerformance:e=!0,verbose:l=!1}=u;if(r){let c=wu.getWithFileCheck("file",t);if(c){if(l)console.log(`Configuration loaded from cache: ${t}`);return c}}let f=async()=>{if(!fu(t))return null;try{let c=`?t=${Date.now()}`,F=await import(t+c),h=F.default||F,E="default"in F,a=Object.keys(F).length>0;if(!E&&!a)throw new Bu(t,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof h!=="object"||h===null||Array.isArray(h))throw new Bu(t,Error("Configuration must export a valid object"),"unknown");let A={config:Jn(i,h,D),source:{type:"file",path:t,priority:100,timestamp:new Date}};if(r)wu.setWithFileCheck("file",A,t,n);return A}catch(c){throw c instanceof Error?ai.configLoad(t,c):ai.configLoad(t,Error(String(c)))}};if(e)return jD.track("loadFromPath",f,{path:t});return f()}async tryLoadFromPaths(t,i,u={}){for(let D of t)try{let r=await this.loadFromPath(D,i,u);if(r)return r}catch(r){if(r instanceof Error&&r.name==="ConfigLoadError")throw r;if(u.verbose)console.warn(`Failed to load config from ${D}:`,r)}return null}generateConfigPaths(t,i,u){let D=this.generateNamePatterns(t,u),r=[];for(let n of D)for(let e of this.extensions)r.push(ED(i,`${n}${e}`));return r}generateNamePatterns(t,i){let u=[];if(u.push("config",".config"),t)u.push(t,`.${t}.config`,`${t}.config`,`.${t}`);if(i){if(u.push(i,`.${i}.config`,`${i}.config`,`.${i}`),t)u.push(`${t}.${i}.config`,`.${t}.${i}.config`)}return u.filter(Boolean)}checkFileAccess(t){return af(async()=>{return fu(t)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(t,i,u){let D=[];if(!fu(t))return D;if(i||u){let r=this.generateNamePatterns(i||"",u);for(let n of r)for(let e of this.extensions){let l=ED(t,`${n}${e}`);if(await this.checkFileAccess(l))D.push(l)}}else try{let{readdirSync:r}=await import("fs"),n=r(t);for(let e of n)if(this.looksLikeConfigFile(e)){let l=ED(t,e);if(await this.checkFileAccess(l))D.push(l)}}catch{return[]}return D}looksLikeConfigFile(t){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((i)=>i.test(t))}async validateConfigFile(t){let i=[];try{if(!fu(t))return i.push("Configuration file does not exist"),i;let u=await import(t),D=u.default||u;if(D===void 0)i.push("Configuration file must export a default value or named exports");else if(typeof D!=="object"||D===null)i.push("Configuration must be an object");else if(Array.isArray(D))i.push("Configuration cannot be an array at the root level");if(t.endsWith(".json"))try{let{readFileSync:r}=await import("fs"),n=r(t,"utf8");JSON.parse(n)}catch(r){i.push(`Invalid JSON syntax: ${r}`)}}catch(u){i.push(`Failed to load configuration file: ${u}`)}return i}async getFileModificationTime(t){try{let{statSync:i}=await import("fs");return i(t).mtime}catch{return null}}async preloadConfigurations(t,i={}){let u=new Map;return await Promise.allSettled(t.map(async(D)=>{try{let r=await this.loadFromPath(D,{},i);if(r)u.set(D,r.config)}catch(r){if(i.verbose)console.warn(`Failed to preload ${D}:`,r)}})),u}}var Cf=/^https?:\/\//;class Gn{async validateConfiguration(t,i,u={}){let{stopOnFirstError:D=!1,validateRequired:r=!0,validateTypes:n=!0,customRules:e=[],trackPerformance:l=!0,verbose:f=!1}=u,c=async()=>{let F=[],h=[],E={stopOnFirstError:D,validateRequired:r,validateTypes:n,customRules:e,trackPerformance:l,verbose:f};try{if(typeof i==="string")return await this.validateWithSchemaFile(t,i,E);else if(Array.isArray(i))return this.validateWithRules(t,[...i,...e],E);else return this.validateWithJSONSchema(t,i,E)}catch(a){return F.push({path:"",message:`Validation failed: ${a}`,rule:"system"}),{isValid:!1,errors:F,warnings:h}}};if(l)return await jD.track("validateConfiguration",c);return c()}async validateWithSchemaFile(t,i,u){try{if(!H0(i))throw new Tu(i,[{path:"",message:"Schema file does not exist"}]);let D=await import(i),r=D.default||D;if(Array.isArray(r))return this.validateWithRules(t,r,u);else return this.validateWithJSONSchema(t,r,u)}catch(D){throw new Tu(i,[{path:"",message:`Failed to load schema: ${D}`}])}}validateWithJSONSchema(t,i,u){let D=[],r=[];return this.validateObjectAgainstSchema(t,i,"",D,r,u),{isValid:D.length===0,errors:D,warnings:r}}validateObjectAgainstSchema(t,i,u,D,r,n){if(n.validateTypes&&i.type){let e=Array.isArray(t)?"array":typeof t,l=Array.isArray(i.type)?i.type:[i.type];if(!l.includes(e)){if(D.push({path:u,message:`Expected type ${l.join(" or ")}, got ${e}`,expected:l.join(" or "),actual:e,rule:"type"}),n.stopOnFirstError)return}}if(i.enum&&!i.enum.includes(t)){if(D.push({path:u,message:`Value must be one of: ${i.enum.join(", ")}`,expected:i.enum.join(", "),actual:t,rule:"enum"}),n.stopOnFirstError)return}if(typeof t==="string"){if(i.minLength!==void 0&&t.length<i.minLength)D.push({path:u,message:`String length must be at least ${i.minLength}`,expected:`>= ${i.minLength}`,actual:t.length,rule:"minLength"});if(i.maxLength!==void 0&&t.length>i.maxLength)D.push({path:u,message:`String length must not exceed ${i.maxLength}`,expected:`<= ${i.maxLength}`,actual:t.length,rule:"maxLength"});if(i.pattern){if(!new RegExp(i.pattern).test(t))D.push({path:u,message:`String does not match pattern ${i.pattern}`,expected:i.pattern,actual:t,rule:"pattern"})}}if(typeof t==="number"){if(i.minimum!==void 0&&t<i.minimum)D.push({path:u,message:`Value must be at least ${i.minimum}`,expected:`>= ${i.minimum}`,actual:t,rule:"minimum"});if(i.maximum!==void 0&&t>i.maximum)D.push({path:u,message:`Value must not exceed ${i.maximum}`,expected:`<= ${i.maximum}`,actual:t,rule:"maximum"})}if(Array.isArray(t)&&i.items)for(let e=0;e<t.length;e++){let l=u?`${u}[${e}]`:`[${e}]`;if(this.validateObjectAgainstSchema(t[e],i.items,l,D,r,n),n.stopOnFirstError&&D.length>0)return}if(t&&typeof t==="object"&&!Array.isArray(t)){let e=t;if(n.validateRequired&&i.required){for(let l of i.required)if(!(l in e)){if(D.push({path:u?`${u}.${l}`:l,message:`Missing required property '${l}'`,expected:"required",rule:"required"}),n.stopOnFirstError)return}}if(i.properties){for(let[l,f]of Object.entries(i.properties))if(l in e){let c=u?`${u}.${l}`:l;if(this.validateObjectAgainstSchema(e[l],f,c,D,r,n),n.stopOnFirstError&&D.length>0)return}}if(i.additionalProperties===!1){let l=new Set(Object.keys(i.properties||{}));for(let f of Object.keys(e))if(!l.has(f))r.push({path:u?`${u}.${f}`:f,message:`Additional property '${f}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(t,i,u){let D=[],r=[];for(let n of i)try{let e=this.getValueByPath(t,n.path),l=this.validateWithRule(e,n,n.path);if(D.push(...l),u.stopOnFirstError&&D.length>0)break}catch(e){D.push({path:n.path,message:`Rule validation failed: ${e}`,rule:"system"})}return{isValid:D.length===0,errors:D,warnings:r}}validateWithRule(t,i,u){let D=[];if(i.required&&(t===void 0||t===null))return D.push({path:u,message:i.message||`Property '${u}' is required`,expected:"required",rule:"required"}),D;if(t===void 0||t===null)return D;if(i.type){let r=Array.isArray(t)?"array":typeof t;if(r!==i.type)D.push({path:u,message:i.message||`Expected type ${i.type}, got ${r}`,expected:i.type,actual:r,rule:"type"})}if(i.min!==void 0){let r=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(r<i.min)D.push({path:u,message:i.message||`Value must be at least ${i.min}`,expected:`>= ${i.min}`,actual:r,rule:"min"})}if(i.max!==void 0){let r=Array.isArray(t)?t.length:typeof t==="string"?t.length:typeof t==="number"?t:0;if(r>i.max)D.push({path:u,message:i.message||`Value must not exceed ${i.max}`,expected:`<= ${i.max}`,actual:r,rule:"max"})}if(i.pattern&&typeof t==="string"){if(!i.pattern.test(t))D.push({path:u,message:i.message||`Value does not match pattern ${i.pattern}`,expected:i.pattern.toString(),actual:t,rule:"pattern"})}if(i.enum&&!i.enum.includes(t))D.push({path:u,message:i.message||`Value must be one of: ${i.enum.join(", ")}`,expected:i.enum.join(", "),actual:t,rule:"enum"});if(i.validator){let r=i.validator(t);if(r)D.push({path:u,message:i.message||r,rule:"custom"})}return D}getValueByPath(t,i){if(!i)return t;let u=i.split("."),D=t;for(let r of u)if(D&&typeof D==="object"&&r in D)D=D[r];else return;return D}generateRulesFromInterface(t){let i=[],u=t.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let D of u){let[,r,n,e]=D;i.push({path:r,required:!n,type:this.mapTypeScriptType(e)})}return i}mapTypeScriptType(t){switch(t.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:Cf},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var Qt=new du("bunfig",{showTags:!0});class Hn{fileLoader=new Kn;envProcessor=new WD;validator=new Gn;async loadConfig(t){let i=Date.now(),{cache:u,performance:D,schema:r,validate:n,...e}=t;try{if(u?.enabled){let f=this.checkCache(e.name||"",e);if(f)return f}let l;try{l=await this.loadConfigurationStrategies(e,!0,u)}catch(f){let c=e.__strictErrorHandling;if(f instanceof Error&&f.name==="ConfigNotFoundError"){if(c)throw f;l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`No configuration file found for "${e.name||"config"}", using defaults with environment variables`]}}else if(f instanceof Error&&f.name==="ConfigLoadError"){let F=f.message.includes("EACCES")||f.message.includes("EPERM")||f.message.includes("permission denied"),h=!F&&(f.message.includes("syntax")||f.message.includes("Expected")||f.message.includes("Unexpected")||f.message.includes("BuildMessage")||f.message.includes("errors building")),E=f.message.includes("Configuration must export a valid object")||f.message.includes("Configuration file is empty and exports nothing");if(c&&(E||F))throw f;if(h&&(!c||!E))l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!c)l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`Configuration loading error, using defaults: ${f.message}`]};else throw f}else l={...await this.applyEnvironmentVariables(e.name||"",e.defaultConfig,e.checkEnv!==!1,e.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${f instanceof Error?f.message:String(f)}`]}}if(r||n)await this.validateConfiguration(l.config,r,n,e.name);if(u?.enabled&&l)this.cacheResult(e.name||"",l,u,e);if(D?.enabled){let f={operation:"loadConfig",duration:Date.now()-i,configName:e.name,timestamp:new Date};if(D.onMetrics)D.onMetrics(f);if(D.slowThreshold&&f.duration>D.slowThreshold)Qt.warn(`Slow configuration loading detected: ${f.duration}ms for ${e.name}`);l.metrics=f}return l}catch(l){let f=Date.now()-i;throw Qt.error(`Configuration loading failed after ${f}ms:`,[l instanceof Error?l:Error(String(l))]),l}}async loadConfigurationStrategies(t,i=!1,u){let{name:D="",alias:r,cwd:n,configDir:e,defaultConfig:l,checkEnv:f=!0,arrayStrategy:c="replace",verbose:F=!1}=t,h=n||Ru.cwd(),E=[],a=await this.loadLocalConfiguration(D,r,h,e,l,c,F,f,u);if(a)return E.push(...this.getLocalSearchPaths(D,r,h,e)),this.finalizeResult(a,E,f,D,F);let A=await this.loadHomeConfiguration(D,r,l,c,F,f);if(A)return E.push(...this.getHomeSearchPaths(D,r)),this.finalizeResult(A,E,f,D,F);let y=await this.loadPackageJsonConfiguration(D,r,h,l,c,F,f);if(y)return E.push(Et(h,"package.json")),this.finalizeResult(y,E,f,D,F);if(E.push(...this.getAllSearchPaths(D,r,h,e)),i)throw ai.configNotFound(D,E,r);return{...await this.applyEnvironmentVariables(D,l,f,F),warnings:[`No configuration file found for "${D}"${r?` or alias "${r}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration(t,i,u,D,r,n,e,l,f){let c=l?cu(t,r,e):r,F=this.getLocalDirectories(u,D);for(let h of F){if(e)Qt.info(`Searching for configuration in: ${h}`);let E=this.fileLoader.generateConfigPaths(t,h,i),a=await this.fileLoader.tryLoadFromPaths(E,c,{arrayStrategy:n,verbose:e,cacheTtl:f?.ttl,useCache:!f?.ttl||f.ttl>100});if(a){if(e)Qt.success(`Configuration loaded from: ${a.source.path}`);return a}}return null}async loadHomeConfiguration(t,i,u,D,r,n){if(!t)return null;let e=n?cu(t,u,r):u,l=[Et(ri(),".config",t),Et(ri(),".config"),ri()];for(let f of l){if(r)Qt.info(`Checking home directory: ${f}`);let c=this.fileLoader.generateConfigPaths(t,f,i),F=await this.fileLoader.tryLoadFromPaths(c,e,{arrayStrategy:D,verbose:r});if(F){if(r)Qt.success(`Configuration loaded from home directory: ${F.source.path}`);return F}}return null}async loadPackageJsonConfiguration(t,i,u,D,r,n,e){let l=e?cu(t,D,n):D;try{let f=Et(u,"package.json");if(!T0(f))return null;let c=await import(f),F=c[t],h=t;if(!F&&i)F=c[i],h=i;if(F&&typeof F==="object"&&!Array.isArray(F)){if(n)Qt.success(`Configuration loaded from package.json: ${h}`);return{config:Jn(l,F,r),source:{type:"package.json",path:f,priority:30,timestamp:new Date}}}}catch(f){if(n)Qt.warn("Failed to load package.json:",[f instanceof Error?f:Error(String(f))])}return null}async applyEnvironmentVariables(t,i,u,D){if(!u||!t||typeof i!=="object"||i===null||Array.isArray(i))return{config:i,source:{type:"default",priority:10,timestamp:new Date}};return{config:cu(t,i,D),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(t,i,u,D,r){return{config:t.config,source:t.source,path:t.source.path}}async validateConfiguration(t,i,u,D){let r=[];if(u){let n=u(t);if(n)r.push(...n)}if(i){let n=await this.validator.validateConfiguration(t,i);if(!n.isValid)r.push(...n.errors.map((e)=>e.path?`${e.path}: ${e.message}`:e.message))}if(r.length>0)throw ai.configValidation(D||"unknown",r,D)}checkCache(t,i){let u=this.generateCacheKey(t,i);return wu.get(u)||null}cacheResult(t,i,u,D){let r=this.generateCacheKey(t,D);wu.set(r,i,void 0,u.ttl)}generateCacheKey(t,i){let u=[t];if(i.alias)u.push(`alias:${i.alias}`);if(i.cwd)u.push(`cwd:${i.cwd}`);if(i.configDir)u.push(`configDir:${i.configDir}`);if("checkEnv"in i)u.push(`checkEnv:${i.checkEnv}`);return u.join("|")}getLocalDirectories(t,i){return Array.from(new Set([t,Et(t,"config"),Et(t,".config"),i?Et(t,i):void 0].filter(Boolean)))}getAllSearchPaths(t,i,u,D){let r=[];return r.push(...this.getLocalSearchPaths(t,i,u,D)),r.push(...this.getHomeSearchPaths(t,i)),r.push(Et(u,"package.json")),r}getLocalSearchPaths(t,i,u,D){let r=this.getLocalDirectories(u,D),n=[];for(let e of r)n.push(...this.fileLoader.generateConfigPaths(t,e,i));return n}getHomeSearchPaths(t,i){if(!t)return[];let u=[Et(ri(),".config",t),Et(ri(),".config"),ri()],D=[];for(let r of u)D.push(...this.fileLoader.generateConfigPaths(t,r,i));return D}async loadConfigWithResult(t){return this.loadConfig(t)}}var Rh=new Hn;function cu(t,i,u=!1){let D=new WD,r=t.toUpperCase().replace(/[^A-Z0-9]/g,"_");function n(e,l=[]){let f={...e};for(let[c,F]of Object.entries(e)){let h=[...l,c],E=[`${r}_${h.join("_").toUpperCase()}`,`${r}_${h.map((y)=>y.toUpperCase()).join("")}`,`${r}_${h.map((y)=>y.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],a,A;for(let y of E)if(a=Ru.env[y],a!==void 0){A=y;break}if(a!==void 0&&A)if(typeof F==="boolean")f[c]=["true","1","yes"].includes(a.toLowerCase());else if(typeof F==="number"){let y=Number(a);if(!Number.isNaN(y))f[c]=y}else if(Array.isArray(F))try{f[c]=JSON.parse(a)}catch{f[c]=a.split(",").map((y)=>y.trim())}else f[c]=a;else if(F&&typeof F==="object"&&!Array.isArray(F))f[c]=n(F,h)}return f}return n(i)}var Nh=Et(Ru.cwd(),"config"),dh=Et(Ru.cwd(),"src/generated"),Ln={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:nD.join(rD.homedir(),".tlsx","ssl","tlsx.localhost.ca.crt"),certPath:nD.join(rD.homedir(),".tlsx","ssl","tlsx.localhost.crt"),keyPath:nD.join(rD.homedir(),".tlsx","ssl","tlsx.localhost.crt.key"),verbose:!1},L=Ln,Bt={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 R={CERT:"cert",CA:"ca",STORAGE:"storage",TRUST:"trust"};function ND(t,i){let u=[];function D(r){let n;try{n=cn.readdirSync(r)}catch{return}for(let e of n){let l=At.join(r,e);try{if(cn.statSync(l).isDirectory())D(l);else if(e===i)u.push(r)}catch{continue}}}return D(t),u}function m(t,i,u){if(u||L.verbose)console.debug(`[tlsx:${t}] ${i}`)}var Sf=mf(Af);async function Jt(t,i={}){try{let{stdout:u,stderr:D}=await Sf(t,{cwd:i.cwd||Tf.cwd(),timeout:i.timeout||30000});return{stdout:u.trim(),stderr:D.trim()}}catch(u){let D=Error(`Failed to execute command: ${t}
|
|
67
|
-
Error: ${u.message}`);throw D.stack=u.stack,D}}function on(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 MD(t){let i=At.join(Bf.homedir(),".stacks","ssl"),u=t.basePath&&t.basePath.trim()!==""?t.basePath:L.basePath&&L.basePath.trim()!==""?L.basePath:i,D=t.certPath?At.isAbsolute(t.certPath)?t.certPath:At.join(u,t.certPath):At.join(u,L.certPath),r=t.keyPath?At.isAbsolute(t.keyPath)?t.keyPath:At.join(u,t.keyPath):At.join(u,L.keyPath),n=t.caCertPath?At.isAbsolute(t.caCertPath)?t.caCertPath:At.join(u,t.caCertPath):At.join(u,L.caCertPath);return{certPath:D,keyPath:r,caCertPath:n,basePath:u}}function kn(t){let i=[],u=new Set;if(t.domain)u.add(t.domain);if(t.domains?.length)t.domains.forEach((D)=>u.add(D));for(let D of u)i.push({type:2,value:D});if(t.altNameIPs?.length)for(let D of t.altNameIPs)i.push({type:7,ip:D});if(t.altNameURIs?.length)for(let D of t.altNameURIs)i.push({type:6,value:D});if(t.subjectAltNames?.length)i.push(...t.subjectAltNames);return m(R.CERT,`Generated ${i.length} Subject Alternative Names`,t.verbose),i}function zD(t){let i=t.notBeforeDays??Bt.DEFAULT_NOT_BEFORE_DAYS,u=t.validityDays??(t.validityYears?t.validityYears*365:Bt.DEFAULT_VALIDITY_DAYS);m(R.CERT,"Calculating certificate validity dates",t.verbose);let D=new Date(Date.now()-86400*i*1000),r=new Date(D.getTime()+u*24*60*60*1000);return D.setUTCHours(0,0,0,0),r.setUTCHours(23,59,59,999),m(R.CERT,`Validity period: ${D.toISOString()} to ${r.toISOString()}`,t.verbose),{notBefore:D,notAfter:r}}var Tt={SEQUENCE:48,SET:49,INTEGER:2,BIT_STRING:3,OCTET_STRING:4,NULL:5,OID:6,UTF8_STRING:12,PRINTABLE_STRING:19,IA5_STRING:22,UTC_TIME:23,GENERALIZED_TIME:24,CONTEXT_0:160,CONTEXT_2:130,CONTEXT_3:163},nt={SHA256_WITH_RSA:"1.2.840.113549.1.1.11",RSA_ENCRYPTION:"1.2.840.113549.1.1.1",COMMON_NAME:"2.5.4.3",COUNTRY:"2.5.4.6",LOCALITY:"2.5.4.7",STATE:"2.5.4.8",ORGANIZATION:"2.5.4.10",ORGANIZATIONAL_UNIT:"2.5.4.11",BASIC_CONSTRAINTS:"2.5.29.19",KEY_USAGE:"2.5.29.15",EXTENDED_KEY_USAGE:"2.5.29.37",SUBJECT_ALT_NAME:"2.5.29.17",SUBJECT_KEY_IDENTIFIER:"2.5.29.14",AUTHORITY_KEY_IDENTIFIER:"2.5.29.35",SERVER_AUTH:"1.3.6.1.5.5.7.3.1",CLIENT_AUTH:"1.3.6.1.5.5.7.3.2"};function mi(t){if(t<128)return Buffer.from([t]);let i=[],u=t;while(u>0)i.unshift(u&255),u>>=8;return Buffer.from([128|i.length,...i])}function ct(t,i){let u=mi(i.length);return Buffer.concat([Buffer.from([t]),u,i])}function Ri(t){let i=t.split(".").map(Number),u=[];u.push(40*i[0]+i[1]);for(let D=2;D<i.length;D++){let r=i[D],n=[];n.unshift(r&127),r>>=7;while(r>0)n.unshift(r&127|128),r>>=7;u.push(...n)}return ct(Tt.OID,Buffer.from(u))}function dD(t){let i;if(typeof t==="bigint"){let u=t.toString(16).padStart(2,"0");i=Buffer.from(u.length%2?"0"+u:u,"hex")}else if(typeof t==="number")if(t===0)i=Buffer.from([0]);else{let u=t.toString(16).padStart(2,"0");i=Buffer.from(u.length%2?"0"+u:u,"hex")}else i=t;if(i[0]&128)i=Buffer.concat([Buffer.from([0]),i]);return ct(Tt.INTEGER,i)}function qn(t,i=0){return ct(Tt.BIT_STRING,Buffer.concat([Buffer.from([i]),t]))}function pn(t){return ct(Tt.OCTET_STRING,t)}function lt(...t){return ct(Tt.SEQUENCE,Buffer.concat(t))}function Rf(...t){return ct(Tt.SET,Buffer.concat(t))}function Nf(t){return ct(Tt.PRINTABLE_STRING,Buffer.from(t,"ascii"))}function df(t){return ct(Tt.UTF8_STRING,Buffer.from(t,"utf8"))}function If(){return Buffer.from([Tt.NULL,0])}function Fn(t,i,u=!0){let D=160|t|(u?0:0),r=mi(i.length);return Buffer.concat([Buffer.from([D]),r,i])}function an(t){let i=t.getUTCFullYear();if(i>=2050){let u=t.toISOString().replace(/[-:T]/g,"").slice(0,14)+"Z";return ct(Tt.GENERALIZED_TIME,Buffer.from(u,"ascii"))}else{let u=(i%100).toString().padStart(2,"0"),D=(t.getUTCMonth()+1).toString().padStart(2,"0"),r=t.getUTCDate().toString().padStart(2,"0"),n=t.getUTCHours().toString().padStart(2,"0"),e=t.getUTCMinutes().toString().padStart(2,"0"),l=t.getUTCSeconds().toString().padStart(2,"0"),f=`${u}${D}${r}${n}${e}${l}Z`;return ct(Tt.UTC_TIME,Buffer.from(f,"ascii"))}}function _f(t,i){return lt(an(t),an(i))}function hn(t){let i=[];for(let u of t){let D;switch(u.shortName){case"CN":D=nt.COMMON_NAME;break;case"C":D=nt.COUNTRY;break;case"L":D=nt.LOCALITY;break;case"ST":D=nt.STATE;break;case"O":D=nt.ORGANIZATION;break;case"OU":D=nt.ORGANIZATIONAL_UNIT;break;default:continue}let r=u.shortName==="C"?Nf(u.value):df(u.value),n=lt(Ri(D),r);i.push(Rf(n))}return lt(...i)}function Vn(t){return lt(Ri(t),If())}function Uf(t){return t.export({type:"spki",format:"der"})}function jf(t){if(t.includes(":")){let i=t;if(t.includes("::")){let r=t.split("::"),n=r[0]?r[0].split(":"):[],e=r[1]?r[1].split(":"):[],l=8-n.length-e.length,f=Array.from({length:l},()=>"0");i=[...n,...f,...e].join(":")}let u=i.split(":"),D=Buffer.alloc(16);for(let r=0;r<8;r++){let n=Number.parseInt(u[r]||"0",16);D.writeUInt16BE(n,r*2)}return D}else{let i=t.split(".").map((u)=>Number.parseInt(u,10));return Buffer.from(i)}}function Yf(t){let i=[];for(let u of t)if(u.type===2&&u.value){let D=mi(u.value.length);i.push(Buffer.concat([Buffer.from([130]),D,Buffer.from(u.value,"ascii")]))}else if(u.type===7&&u.ip){let D=jf(u.ip),r=mi(D.length);i.push(Buffer.concat([Buffer.from([135]),r,D]))}else if(u.type===6&&u.value){let D=mi(u.value.length);i.push(Buffer.concat([Buffer.from([134]),D,Buffer.from(u.value,"ascii")]))}return lt(...i)}function Xf(t,i){if(t){if(i!==void 0)return lt(ct(1,Buffer.from([255])),dD(i));return lt(ct(1,Buffer.from([255])))}return lt()}function xf(t){let i=0;if(t.digitalSignature)i|=128;if(t.keyEncipherment)i|=32;if(t.keyCertSign)i|=4;if(t.cRLSign)i|=2;let u=0,D=i;while(D>0&&(D&1)===0)u++,D>>=1;if(i===0)u=7;return qn(Buffer.from([i]),u)}function Wf(t){let i=[];if(t.serverAuth)i.push(Ri(nt.SERVER_AUTH));if(t.clientAuth)i.push(Ri(nt.CLIENT_AUTH));return lt(...i)}function Ai(t,i,u){let D=[Ri(t)];if(i)D.push(ct(1,Buffer.from([255])));return D.push(pn(u)),lt(...D)}function Mf(t){let i=[];if(i.push(Fn(0,dD(2))),i.push(dD(t.serialNumber)),i.push(Vn(nt.SHA256_WITH_RSA)),i.push(hn(t.issuer)),i.push(_f(t.notBefore,t.notAfter)),i.push(hn(t.subject)),i.push(Uf(t.publicKey)),t.extensions){let u=[];if(t.extensions.basicConstraints)u.push(Ai(nt.BASIC_CONSTRAINTS,t.extensions.basicConstraints.critical??!0,Xf(t.extensions.basicConstraints.isCA,t.extensions.basicConstraints.pathLenConstraint)));if(t.extensions.keyUsage)u.push(Ai(nt.KEY_USAGE,t.extensions.keyUsage.critical??!0,xf(t.extensions.keyUsage)));if(t.extensions.extendedKeyUsage)u.push(Ai(nt.EXTENDED_KEY_USAGE,!1,Wf(t.extensions.extendedKeyUsage)));if(t.extensions.subjectAltName?.length)u.push(Ai(nt.SUBJECT_ALT_NAME,!1,Yf(t.extensions.subjectAltName)));if(t.extensions.subjectKeyIdentifier)u.push(Ai(nt.SUBJECT_KEY_IDENTIFIER,!1,pn(t.extensions.subjectKeyIdentifier)));if(u.length>0)i.push(Fn(3,lt(...u)))}return lt(...i)}function zf(t,i){let u=hi.createSign("SHA256");u.update(t);let D=u.sign(i);return lt(t,Vn(nt.SHA256_WITH_RSA),qn(D))}function Qf(t,i){let u=t.toString("base64"),D=[];for(let r=0;r<u.length;r+=64)D.push(u.slice(r,r+64));return`-----BEGIN ${i}-----
|
|
68
|
-
${D.join(`
|
|
69
|
-
`)}
|
|
70
|
-
-----END ${i}-----
|
|
71
|
-
`}function QD(){return hi.randomBytes(20)}function bn(t=2048){let{privateKey:i,publicKey:u}=hi.generateKeyPairSync("rsa",{modulusLength:t});return{privateKey:i,publicKey:u}}function Of(t){let i=t.export({type:"spki",format:"der"});return hi.createHash("sha1").update(i).digest()}function gn(t){let i={serialNumber:t.serialNumber||QD(),notBefore:t.notBefore,notAfter:t.notAfter,subject:t.subject,issuer:t.issuer||t.subject,publicKey:t.publicKey,extensions:{basicConstraints:{isCA:t.isCA??!1,critical:!0,pathLenConstraint:t.pathLenConstraint},subjectKeyIdentifier:Of(t.publicKey)}};if(t.keyUsage)i.extensions.keyUsage={...t.keyUsage,critical:!0};if(t.extendedKeyUsage)i.extensions.extendedKeyUsage=t.extendedKeyUsage;if(t.subjectAltName?.length)i.extensions.subjectAltName=t.subjectAltName;let u=Mf(i),D=zf(u,t.signingKey);return{certificate:Qf(D,"CERTIFICATE"),certificateDer:D}}function vn(t){return t.export({type:"pkcs8",format:"pem"})}function Jf(t){return hi.createPrivateKey(t)}function Kf(t){let i=new hi.X509Certificate(t),u=i.publicKey,D=[],r=i.subject.split(`
|
|
72
|
-
`);for(let n of r){let[e,...l]=n.split("="),f=l.join("=");if(e&&f)D.push({shortName:e.trim(),value:f.trim()})}return{publicKey:u,subject:D}}async function OD(t={}){m("ca","Creating new Root CA Certificate",t.verbose);let i=t.keySize||Bt.DEFAULT_KEY_SIZE;m("ca",`Generating ${i}-bit RSA key pair`,t.verbose);let{privateKey:u,publicKey:D}=bn(i),r=[{shortName:"C",value:t.countryName||L.countryName},{shortName:"ST",value:t.stateName||L.stateName},{shortName:"L",value:t.localityName||L.localityName},{shortName:"O",value:t.organization||"Local Development CA"},{shortName:"OU",value:t.organizationalUnit||"Certificate Authority"},{shortName:"CN",value:t.commonName||"Local Development Root CA"}],{notBefore:n,notAfter:e}=zD({validityYears:t.validityYears||Bt.DEFAULT_CA_VALIDITY_YEARS,verbose:t.verbose}),{certificate:l}=gn({serialNumber:QD(),notBefore:n,notAfter:e,subject:r,publicKey:D,signingKey:u,isCA:!0,keyUsage:{keyCertSign:!0,cRLSign:!0}});return{certificate:l,privateKey:vn(u),notBefore:n,notAfter:e}}async function JD(t){if(m("ca","Generating new certificate",t.verbose),m("ca",`Options: ${JSON.stringify(t)}`,t.verbose),!t.domain&&!t.domains?.length)throw Error("Either domain or domains must be specified");if(!t.rootCA?.certificate||!t.rootCA?.privateKey)throw Error("Root CA certificate and private key are required");let{subject:i}=Kf(t.rootCA.certificate),u=Jf(t.rootCA.privateKey);m("ca",`Generating ${Bt.DEFAULT_KEY_SIZE}-bit RSA key pair for host certificate`,t.verbose);let D=Bt.DEFAULT_KEY_SIZE,{privateKey:r,publicKey:n}=bn(D),e=t.commonName||on(t),l=t.certificateAttributes||[{shortName:"C",value:t.countryName||L.countryName},{shortName:"ST",value:t.stateName||L.stateName},{shortName:"L",value:t.localityName||L.localityName},{shortName:"O",value:t.organizationName||L.organizationName},{shortName:"CN",value:e}],{notBefore:f,notAfter:c}=zD({validityDays:t.validityDays||Bt.DEFAULT_VALIDITY_DAYS,verbose:t.verbose}),F=kn(t),h=t.keyUsage||{digitalSignature:!0,keyEncipherment:!0},E=t.extKeyUsage||{serverAuth:!0},{certificate:a}=gn({serialNumber:QD(),notBefore:f,notAfter:c,subject:l,issuer:i,publicKey:n,signingKey:u,isCA:t.basicConstraints?.cA??!1,pathLenConstraint:t.basicConstraints?.pathLenConstraint,keyUsage:h,extendedKeyUsage:E,subjectAltName:F});return{certificate:a,privateKey:vn(r),notBefore:f,notAfter:c}}function Pn(t,i){m(R.STORAGE,`Storing certificate and private key with options: ${JSON.stringify(i)}`,i?.verbose);let{certPath:u,keyPath:D}=MD({basePath:i?.basePath,certPath:i?.certPath,keyPath:i?.keyPath});m(R.STORAGE,`Certificate path: ${u}`,i?.verbose),m(R.STORAGE,`Private key path: ${D}`,i?.verbose);let r=ID.dirname(u);if(!Xt.existsSync(r))m(R.STORAGE,`Creating certificate directory: ${r}`,i?.verbose),Xt.mkdirSync(r,{recursive:!0});m(R.STORAGE,"Writing certificate file",i?.verbose),Xt.writeFileSync(u,t.certificate);let n=ID.dirname(D);if(!Xt.existsSync(n))m(R.STORAGE,`Creating private key directory: ${n}`,i?.verbose),Xt.mkdirSync(n,{recursive:!0});return m(R.STORAGE,"Writing private key file",i?.verbose),Xt.writeFileSync(D,t.privateKey),m(R.STORAGE,"Certificate and private key stored successfully",i?.verbose),u}function Zn(t,i){m(R.STORAGE,"Storing CA certificate",i?.verbose);let{caCertPath:u}=MD({basePath:i?.basePath,caCertPath:i?.caCertPath});m(R.STORAGE,`CA certificate path: ${u}`,i?.verbose);let D=ID.dirname(u);if(!Xt.existsSync(D))m(R.STORAGE,`Creating CA certificate directory: ${D}`,i?.verbose),Xt.mkdirSync(D,{recursive:!0});return m(R.STORAGE,"Writing CA certificate file",i?.verbose),Xt.writeFileSync(u,t),m(R.STORAGE,"CA certificate stored successfully",i?.verbose),u}var it={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},sn={silent:{level:-1},fatal:{level:it.fatal},error:{level:it.error},warn:{level:it.warn},log:{level:it.log},info:{level:it.info},success:{level:it.success},fail:{level:it.fail},ready:{level:it.info},start:{level:it.info},box:{level:it.info},debug:{level:it.debug},trace:{level:it.trace},verbose:{level:it.verbose}};function BD(t){if(t===null||typeof t!=="object")return!1;let i=Object.getPrototypeOf(t);if(i!==null&&i!==Object.prototype&&Object.getPrototypeOf(i)!==null)return!1;if(Symbol.iterator in t)return!1;if(Symbol.toStringTag in t)return Object.prototype.toString.call(t)==="[object Module]";return!0}function _D(t,i,u=".",D){if(!BD(i))return _D(t,{},u,D);let r=Object.assign({},i);for(let n in t){if(n==="__proto__"||n==="constructor")continue;let e=t[n];if(e===null||e===void 0)continue;if(D&&D(r,n,e,u))continue;if(Array.isArray(e)&&Array.isArray(r[n]))r[n]=[...e,...r[n]];else if(BD(e)&&BD(r[n]))r[n]=_D(e,r[n],(u?`${u}.`:"")+n.toString(),D);else r[n]=e}return r}function Gf(t){return(...i)=>i.reduce((u,D)=>_D(u,D,"",t),{})}var Hf=Gf();function Lf(t){return Object.prototype.toString.call(t)==="[object Object]"}function of(t){if(!Lf(t))return!1;if(!t.message&&!t.args)return!1;if(t.stack)return!1;return!0}var TD=!1,En=[];class v{options;_lastLog;_mockFn;constructor(t={}){let i=t.types||sn;this.options=Hf({...t,defaults:{...t.defaults},level:mD(t.level,i),reporters:[...t.reporters||[]]},{types:sn,throttle:1000,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let u in i){let D={type:u,...this.options.defaults,...i[u]};this[u]=this._wrapLogFn(D),this[u].raw=this._wrapLogFn(D,!0)}if(this.options.mockFn)this.mockTypes();this._lastLog={}}get level(){return this.options.level}set level(t){this.options.level=mD(t,this.options.types,this.options.level)}prompt(t,i){if(!this.options.prompt)throw Error("prompt is not supported!");return this.options.prompt(t,i)}create(t){let i=new v({...this.options,...t});if(this._mockFn)i.mockTypes(this._mockFn);return i}withDefaults(t){return this.create({...this.options,defaults:{...this.options.defaults,...t}})}withTag(t){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+t:t})}addReporter(t){return this.options.reporters.push(t),this}removeReporter(t){if(t){let i=this.options.reporters.indexOf(t);if(i!==-1)return this.options.reporters.splice(i,1)}else this.options.reporters.splice(0);return this}setReporters(t){return this.options.reporters=Array.isArray(t)?t:[t],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let t in this.options.types){if(!console["__"+t])console["__"+t]=console[t];console[t]=this[t].raw}}restoreConsole(){for(let t in this.options.types)if(console["__"+t])console[t]=console["__"+t],delete console["__"+t]}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(t,i){if(!t)return;if(!t.__write)t.__write=t.write;t.write=(u)=>{this[i].raw(String(u).trim())}}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(t){if(!t)return;if(t.__write)t.write=t.__write,delete t.__write}pauseLogs(){TD=!0}resumeLogs(){TD=!1;let t=En.splice(0);for(let i of t)i[0]._logFn(i[1],i[2])}mockTypes(t){let i=t||this.options.mockFn;if(this._mockFn=i,typeof i!=="function")return;for(let u in this.options.types)this[u]=i(u,this.options.types[u])||this[u],this[u].raw=this[u]}_wrapLogFn(t,i){return(...u)=>{if(TD){En.push([this,t,u,i]);return}return this._logFn(t,u,i)}}_logFn(t,i,u){if((t.level||0)>this.level)return!1;let D={date:new Date,args:[],...t,level:mD(t.level,this.options.types)};if(!u&&i.length===1&&of(i[0]))Object.assign(D,i[0]);else D.args=[...i];if(D.message)D.args.unshift(D.message),delete D.message;if(D.additional){if(!Array.isArray(D.additional))D.additional=D.additional.split(`
|
|
73
|
-
`);D.args.push(`
|
|
74
|
-
`+D.additional.join(`
|
|
75
|
-
`)),delete D.additional}D.type=typeof D.type==="string"?D.type.toLowerCase():"log",D.tag=typeof D.tag==="string"?D.tag:"";let r=(e=!1)=>{let l=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&l>0){let f=[...this._lastLog.object.args];if(l>1)f.push(`(repeated ${l} times)`);this._log({...this._lastLog.object,args:f}),this._lastLog.count=1}if(e)this._lastLog.object=D,this._log(D)};clearTimeout(this._lastLog.timeout);let n=this._lastLog.time&&D.date?D.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=D.date,n<this.options.throttle)try{let e=JSON.stringify([D.type,D.tag,D.args]),l=this._lastLog.serialized===e;if(this._lastLog.serialized=e,l){if(this._lastLog.count=(this._lastLog.count||0)+1,this._lastLog.count>this.options.throttleMin){this._lastLog.timeout=setTimeout(r,this.options.throttle);return}}}catch{}r(!0)}_log(t){for(let i of this.options.reporters)i.log(t,{options:this.options})}}function mD(t,i={},u=3){if(t===void 0)return u;if(typeof t==="number")return t;if(i[t]&&i[t].level!==void 0)return i[t].level;return u}v.prototype.add=v.prototype.addReporter;v.prototype.remove=v.prototype.removeReporter;v.prototype.clear=v.prototype.removeReporter;v.prototype.withScope=v.prototype.withTag;v.prototype.mock=v.prototype.mockTypes;v.prototype.pause=v.prototype.pauseLogs;v.prototype.resume=v.prototype.resumeLogs;function kf(t={}){return new v(t)}function $n(t,i){let u=process.cwd()+qf;return t.split(`
|
|
76
|
-
`).splice(i.split(`
|
|
77
|
-
`).length).map((D)=>D.trim().replace("file://","").replace(u,""))}function pf(t,i){return(i.__write||i.write).call(i,t)}var SD=(t)=>t?`[${t}]`:"";class KD{formatStack(t,i,u){let D=" ".repeat((u?.errorLevel||0)+1);return D+$n(t,i).join(`
|
|
78
|
-
${D}`)}formatError(t,i){let u=t.message??yn(i,t),D=t.stack?this.formatStack(t.stack,u,i):"",r=i?.errorLevel||0,n=r>0?`${" ".repeat(r)}[cause]: `:"",e=t.cause?`
|
|
79
|
-
|
|
80
|
-
`+this.formatError(t.cause,{...i,errorLevel:r+1}):"";return n+u+`
|
|
81
|
-
`+D+e}formatArgs(t,i){let u=t.map((D)=>{if(D&&typeof D.stack==="string")return this.formatError(D,i);return D});return yn(i,...u)}formatDate(t,i){return i.date?t.toLocaleTimeString():""}filterAndJoin(t){return t.filter(Boolean).join(" ")}formatLogObj(t,i){let u=this.formatArgs(t.args,i);if(t.type==="box")return`
|
|
82
|
-
`+[SD(t.tag),t.title&&t.title,...u.split(`
|
|
83
|
-
`)].filter(Boolean).map((D)=>" > "+D).join(`
|
|
84
|
-
`)+`
|
|
85
|
-
`;return this.filterAndJoin([SD(t.type),SD(t.tag),u])}log(t,i){let u=this.formatLogObj(t,{columns:i.options.stdout.columns||0,...i.options.formatOptions});return pf(u+`
|
|
86
|
-
`,t.level<2?i.options.stderr||process.stderr:i.options.stdout||process.stdout)}}var{env:Ot={},argv:te=[],platform:Vf=""}=typeof process>"u"?{}:process,bf="NO_COLOR"in Ot||te.includes("--no-color"),gf="FORCE_COLOR"in Ot||te.includes("--color"),vf=Vf==="win32",ie=Ot.TERM==="dumb",Pf=mu&&mu.isatty&&mu.isatty(1)&&Ot.TERM&&!ie,Zf="CI"in Ot&&(("GITHUB_ACTIONS"in Ot)||("GITLAB_CI"in Ot)||("CIRCLECI"in Ot)),$f=!bf&&(gf||vf&&!ie||Pf||Zf);function ue(t,i,u,D,r=i.slice(0,Math.max(0,t))+D,n=i.slice(Math.max(0,t+u.length)),e=n.indexOf(u)){return r+(e<0?n:ue(e,n,u,D))}function tl(t,i,u,D,r){return t<0?u+i+D:u+ue(t,i,D,r)+D}function il(t,i,u=t,D=t.length+1){return(r)=>r||!(r===""||r===void 0)?tl((""+r).indexOf(i,D),r,t,i,u):""}function N(t,i,u){return il(`\x1B[${t}m`,`\x1B[${i}m`,u)}var Cn={reset:N(0,0),bold:N(1,22,"\x1B[22m\x1B[1m"),dim:N(2,22,"\x1B[22m\x1B[2m"),italic:N(3,23),underline:N(4,24),inverse:N(7,27),hidden:N(8,28),strikethrough:N(9,29),black:N(30,39),red:N(31,39),green:N(32,39),yellow:N(33,39),blue:N(34,39),magenta:N(35,39),cyan:N(36,39),white:N(37,39),gray:N(90,39),bgBlack:N(40,49),bgRed:N(41,49),bgGreen:N(42,49),bgYellow:N(43,49),bgBlue:N(44,49),bgMagenta:N(45,49),bgCyan:N(46,49),bgWhite:N(47,49),blackBright:N(90,39),redBright:N(91,39),greenBright:N(92,39),yellowBright:N(93,39),blueBright:N(94,39),magentaBright:N(95,39),cyanBright:N(96,39),whiteBright:N(97,39),bgBlackBright:N(100,49),bgRedBright:N(101,49),bgGreenBright:N(102,49),bgYellowBright:N(103,49),bgBlueBright:N(104,49),bgMagentaBright:N(105,49),bgCyanBright:N(106,49),bgWhiteBright:N(107,49)};function ul(t=$f){return t?Cn:Object.fromEntries(Object.keys(Cn).map((i)=>[i,String]))}var ft=ul();function Dl(t,i="reset"){return ft[t]||ft[i]}var rl=[String.raw`[\u001B\u009B][[\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\d\/#&.:=?%@~_]+)*|[a-zA-Z\d]+(?:;[-a-zA-Z\d\/#&.:=?%@~_]*)*)?\u0007)`,String.raw`(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]))`].join("|");function ot(t){return t.replace(new RegExp(rl,"g"),"")}var An={solid:{tl:"┌",tr:"┐",bl:"└",br:"┘",h:"─",v:"│"},double:{tl:"╔",tr:"╗",bl:"╚",br:"╝",h:"═",v:"║"},doubleSingle:{tl:"╓",tr:"╖",bl:"╙",br:"╜",h:"─",v:"║"},doubleSingleRounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"─",v:"║"},singleThick:{tl:"┏",tr:"┓",bl:"┗",br:"┛",h:"━",v:"┃"},singleDouble:{tl:"╒",tr:"╕",bl:"╘",br:"╛",h:"═",v:"│"},singleDoubleRounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"═",v:"│"},rounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"─",v:"│"}},nl={borderColor:"white",borderStyle:"rounded",valign:"center",padding:2,marginLeft:1,marginTop:1,marginBottom:1};function el(t,i={}){let u={...i,style:{...nl,...i.style}},D=t.split(`
|
|
87
|
-
`),r=[],n=Dl(u.style.borderColor),e={...typeof u.style.borderStyle==="string"?An[u.style.borderStyle]||An.solid:u.style.borderStyle};if(n)for(let a in e)e[a]=n(e[a]);let l=u.style.padding%2===0?u.style.padding:u.style.padding+1,f=D.length+l,c=Math.max(...D.map((a)=>ot(a).length),u.title?ot(u.title).length:0)+l,F=c+l,h=u.style.marginLeft>0?" ".repeat(u.style.marginLeft):"";if(u.style.marginTop>0)r.push("".repeat(u.style.marginTop));if(u.title){let a=n?n(u.title):u.title,A=e.h.repeat(Math.floor((c-ot(u.title).length)/2)),y=e.h.repeat(c-ot(u.title).length-ot(A).length+l);r.push(`${h}${e.tl}${A}${a}${y}${e.tr}`)}else r.push(`${h}${e.tl}${e.h.repeat(F)}${e.tr}`);let E=u.style.valign==="center"?Math.floor((f-D.length)/2):u.style.valign==="top"?f-D.length-l:f-D.length;for(let a=0;a<f;a++)if(a<E||a>=E+D.length)r.push(`${h}${e.v}${" ".repeat(F)}${e.v}`);else{let A=D[a-E],y=" ".repeat(l),C=" ".repeat(c-ot(A).length);r.push(`${h}${e.v}${y}${A}${C}${e.v}`)}if(r.push(`${h}${e.bl}${e.h.repeat(F)}${e.br}`),u.style.marginBottom>0)r.push("".repeat(u.style.marginBottom));return r.join(`
|
|
88
|
-
`)}var hu=Object.create(null),Bi=(t)=>globalThis.process?.env||import.meta.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(t?hu:globalThis),Kt=new Proxy(hu,{get(t,i){return Bi()[i]??hu[i]},has(t,i){let u=Bi();return i in u||i in hu},set(t,i,u){let D=Bi(!0);return D[i]=u,!0},deleteProperty(t,i){if(!i)return!1;let u=Bi(!0);return delete u[i],!0},ownKeys(){let t=Bi(!0);return Object.keys(t)}}),fl=typeof process<"u"&&process.env&&"development"||"",ll=[["APPVEYOR"],["AWS_AMPLIFY","AWS_APP_ID",{ci:!0}],["AZURE_PIPELINES","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"],["AZURE_STATIC","INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN"],["APPCIRCLE","AC_APPCIRCLE"],["BAMBOO","bamboo_planKey"],["BITBUCKET","BITBUCKET_COMMIT"],["BITRISE","BITRISE_IO"],["BUDDY","BUDDY_WORKSPACE_ID"],["BUILDKITE"],["CIRCLE","CIRCLECI"],["CIRRUS","CIRRUS_CI"],["CLOUDFLARE_PAGES","CF_PAGES",{ci:!0}],["CODEBUILD","CODEBUILD_BUILD_ARN"],["CODEFRESH","CF_BUILD_ID"],["DRONE"],["DRONE","DRONE_BUILD_EVENT"],["DSARI"],["GITHUB_ACTIONS"],["GITLAB","GITLAB_CI"],["GITLAB","CI_MERGE_REQUEST_ID"],["GOCD","GO_PIPELINE_LABEL"],["LAYERCI"],["HUDSON","HUDSON_URL"],["JENKINS","JENKINS_URL"],["MAGNUM"],["NETLIFY"],["NETLIFY","NETLIFY_LOCAL",{ci:!1}],["NEVERCODE"],["RENDER"],["SAIL","SAILCI"],["SEMAPHORE"],["SCREWDRIVER"],["SHIPPABLE"],["SOLANO","TDDIUM"],["STRIDER"],["TEAMCITY","TEAMCITY_VERSION"],["TRAVIS"],["VERCEL","NOW_BUILDER"],["VERCEL","VERCEL",{ci:!1}],["VERCEL","VERCEL_ENV",{ci:!1}],["APPCENTER","APPCENTER_BUILD_ID"],["CODESANDBOX","CODESANDBOX_SSE",{ci:!1}],["CODESANDBOX","CODESANDBOX_HOST",{ci:!1}],["STACKBLITZ"],["STORMKIT"],["CLEAVR"],["ZEABUR"],["CODESPHERE","CODESPHERE_APP_ID",{ci:!0}],["RAILWAY","RAILWAY_PROJECT_ID"],["RAILWAY","RAILWAY_SERVICE_ID"],["DENO-DEPLOY","DENO_DEPLOYMENT_ID"],["FIREBASE_APP_HOSTING","FIREBASE_APP_HOSTING",{ci:!0}]];function cl(){if(globalThis.process?.env)for(let t of ll){let i=t[1]||t[0];if(globalThis.process?.env[i])return{name:t[0].toLowerCase(),...t[2]}}return globalThis.process?.env?.SHELL==="/bin/jsh"&&globalThis.process?.versions?.webcontainer?{name:"stackblitz",ci:!1}:{name:"",ci:!1}}var De=cl();De.name;function kt(t){return t?t!=="false":!1}var Fl=globalThis.process?.platform||"",al=kt(Kt.CI)||De.ci!==!1,hl=kt(globalThis.process?.stdout&&globalThis.process?.stdout.isTTY),sl=kt(Kt.DEBUG),re=fl==="test"||kt(Kt.TEST);kt(Kt.MINIMAL);var El=/^win/i.test(Fl);!kt(Kt.NO_COLOR)&&(kt(Kt.FORCE_COLOR)||(hl||El)&&Kt.TERM);var yl=(globalThis.process?.versions?.node||"").replace(/^v/,"")||null;Number(yl?.split(".")[0]);var wl=globalThis.process||Object.create(null),Bn={versions:{}};new Proxy(wl,{get(t,i){if(i==="env")return Kt;if(i in t)return t[i];if(i in Bn)return Bn[i]}});var Cl=globalThis.process?.release?.name==="node",Al=!!globalThis.Bun||!!globalThis.process?.versions?.bun,Bl=!!globalThis.Deno,Tl=!!globalThis.fastly,ml=!!globalThis.Netlify,Sl=!!globalThis.EdgeRuntime,Rl=globalThis.navigator?.userAgent==="Cloudflare-Workers",Nl=[[ml,"netlify"],[Sl,"edge-light"],[Rl,"workerd"],[Tl,"fastly"],[Bl,"deno"],[Al,"bun"],[Cl,"node"]];function dl(){let t=Nl.find((i)=>i[0]);if(t)return{name:t[1]}}var Il=dl();Il?.name;function _l({onlyFirst:t=!1}={}){let i=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(i,t?void 0:"g")}var Ul=_l();function jl(t){if(typeof t!=="string")throw TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Ul,"")}function Yl(t){return t===161||t===164||t===167||t===168||t===170||t===173||t===174||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||t===198||t===208||t===215||t===216||t>=222&&t<=225||t===230||t>=232&&t<=234||t===236||t===237||t===240||t===242||t===243||t>=247&&t<=250||t===252||t===254||t===257||t===273||t===275||t===283||t===294||t===295||t===299||t>=305&&t<=307||t===312||t>=319&&t<=322||t===324||t>=328&&t<=331||t===333||t===338||t===339||t===358||t===359||t===363||t===462||t===464||t===466||t===468||t===470||t===472||t===474||t===476||t===593||t===609||t===708||t===711||t>=713&&t<=715||t===717||t===720||t>=728&&t<=731||t===733||t===735||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||t===1025||t>=1040&&t<=1103||t===1105||t===8208||t>=8211&&t<=8214||t===8216||t===8217||t===8220||t===8221||t>=8224&&t<=8226||t>=8228&&t<=8231||t===8240||t===8242||t===8243||t===8245||t===8251||t===8254||t===8308||t===8319||t>=8321&&t<=8324||t===8364||t===8451||t===8453||t===8457||t===8467||t===8470||t===8481||t===8482||t===8486||t===8491||t===8531||t===8532||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||t===8585||t>=8592&&t<=8601||t===8632||t===8633||t===8658||t===8660||t===8679||t===8704||t===8706||t===8707||t===8711||t===8712||t===8715||t===8719||t===8721||t===8725||t===8730||t>=8733&&t<=8736||t===8739||t===8741||t>=8743&&t<=8748||t===8750||t>=8756&&t<=8759||t===8764||t===8765||t===8776||t===8780||t===8786||t===8800||t===8801||t>=8804&&t<=8807||t===8810||t===8811||t===8814||t===8815||t===8834||t===8835||t===8838||t===8839||t===8853||t===8857||t===8869||t===8895||t===8978||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||t===9632||t===9633||t>=9635&&t<=9641||t===9650||t===9651||t===9654||t===9655||t===9660||t===9661||t===9664||t===9665||t>=9670&&t<=9672||t===9675||t>=9678&&t<=9681||t>=9698&&t<=9701||t===9711||t===9733||t===9734||t===9737||t===9742||t===9743||t===9756||t===9758||t===9792||t===9794||t===9824||t===9825||t>=9827&&t<=9829||t>=9831&&t<=9834||t===9836||t===9837||t===9839||t===9886||t===9887||t===9919||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||t===9955||t===9960||t===9961||t>=9963&&t<=9969||t===9972||t>=9974&&t<=9977||t===9979||t===9980||t===9982||t===9983||t===10045||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||t===65533||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||t===127375||t===127376||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}function Xl(t){return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510}function xl(t){return t>=4352&&t<=4447||t===8986||t===8987||t===9001||t===9002||t>=9193&&t<=9196||t===9200||t===9203||t===9725||t===9726||t===9748||t===9749||t>=9776&&t<=9783||t>=9800&&t<=9811||t===9855||t>=9866&&t<=9871||t===9875||t===9889||t===9898||t===9899||t===9917||t===9918||t===9924||t===9925||t===9934||t===9940||t===9962||t===9970||t===9971||t===9973||t===9978||t===9981||t===9989||t===9994||t===9995||t===10024||t===10060||t===10062||t>=10067&&t<=10069||t===10071||t>=10133&&t<=10135||t===10160||t===10175||t===11035||t===11036||t===11088||t===11093||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||t===94192||t===94193||t>=94208&&t<=100343||t>=100352&&t<=101589||t>=101631&&t<=101640||t>=110576&&t<=110579||t>=110581&&t<=110587||t===110589||t===110590||t>=110592&&t<=110882||t===110898||t>=110928&&t<=110930||t===110933||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||t===126980||t===127183||t===127374||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t===127568||t===127569||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||t===127988||t>=127992&&t<=128062||t===128064||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||t===128378||t===128405||t===128406||t===128420||t>=128507&&t<=128591||t>=128640&&t<=128709||t===128716||t>=128720&&t<=128722||t>=128725&&t<=128727||t>=128732&&t<=128735||t===128747||t===128748||t>=128756&&t<=128764||t>=128992&&t<=129003||t===129008||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129673||t>=129679&&t<=129734||t>=129742&&t<=129756||t>=129759&&t<=129769||t>=129776&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}function Wl(t){if(!Number.isSafeInteger(t))throw TypeError(`Expected a code point, got \`${typeof t}\`.`)}function Ml(t,{ambiguousAsWide:i=!1}={}){if(Wl(t),Xl(t)||xl(t)||i&&Yl(t))return 2;return 1}var zl=()=>{return/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g},Ql=globalThis.Intl?.Segmenter?new Intl.Segmenter:{segment:(t)=>t.split("")},Ol=/^\p{Default_Ignorable_Code_Point}$/u;function Jl(t,i={}){if(typeof t!=="string"||t.length===0)return 0;let{ambiguousIsNarrow:u=!0,countAnsiEscapeCodes:D=!1}=i;if(!D)t=jl(t);if(t.length===0)return 0;let r=0,n={ambiguousAsWide:!u};for(let{segment:e}of Ql.segment(t)){let l=e.codePointAt(0);if(l<=31||l>=127&&l<=159)continue;if(l>=8203&&l<=8207||l===65279)continue;if(l>=768&&l<=879||l>=6832&&l<=6911||l>=7616&&l<=7679||l>=8400&&l<=8447||l>=65056&&l<=65071)continue;if(l>=55296&&l<=57343)continue;if(l>=65024&&l<=65039)continue;if(Ol.test(e))continue;if(zl().test(e)){r+=2;continue}r+=Ml(l,n)}return r}function Kl(){let{env:t}=wn,{TERM:i,TERM_PROGRAM:u}=t;if(wn.platform!=="win32")return i!=="linux";return Boolean(t.WT_SESSION)||Boolean(t.TERMINUS_SUBLIME)||t.ConEmuTask==="{cmd::Cmder}"||u==="Terminus-Sublime"||u==="vscode"||i==="xterm-256color"||i==="alacritty"||i==="rxvt-unicode"||i==="rxvt-unicode-256color"||t.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Gl={info:"cyan",fail:"red",success:"green",ready:"green",start:"magenta"},Hl={0:"red",1:"yellow"},Ll=Kl(),Nt=(t,i)=>Ll?t:i,Tn={error:Nt("✖","×"),fatal:Nt("✖","×"),ready:Nt("✔","√"),warn:Nt("⚠","‼"),info:Nt("ℹ","i"),success:Nt("✔","√"),debug:Nt("⚙","D"),trace:Nt("→","→"),fail:Nt("✖","×"),start:Nt("◐","o"),log:""};function mn(t){if(typeof Intl!=="object"||!Intl.Segmenter)return ot(t).length;return Jl(t)}class ne extends KD{formatStack(t,i,u){let D=" ".repeat((u?.errorLevel||0)+1);return`
|
|
89
|
-
${D}`+$n(t,i).map((r)=>" "+r.replace(/^at +/,(n)=>ft.gray(n)).replace(/\((.+)\)/,(n,e)=>`(${ft.cyan(e)})`)).join(`
|
|
90
|
-
${D}`)}formatType(t,i,u){let D=Gl[t.type]||Hl[t.level]||"gray";if(i)return kl(D)(ft.black(` ${t.type.toUpperCase()} `));let r=typeof Tn[t.type]==="string"?Tn[t.type]:t.icon||t.type;return r?ol(D)(r):""}formatLogObj(t,i){let[u,...D]=this.formatArgs(t.args,i).split(`
|
|
91
|
-
`);if(t.type==="box")return el(Fu(u+(D.length>0?`
|
|
92
|
-
`+D.join(`
|
|
93
|
-
`):"")),{title:t.title?Fu(t.title):void 0,style:t.style});let r=this.formatDate(t.date,i),n=r&&ft.gray(r),e=t.badge??t.level<2,l=this.formatType(t,e,i),f=t.tag?ft.gray(t.tag):"",c,F=this.filterAndJoin([l,Fu(u)]),h=this.filterAndJoin(i.columns?[f,n]:[f]),E=(i.columns||0)-mn(F)-mn(h)-2;if(c=E>0&&(i.columns||0)>=80?F+" ".repeat(E)+h:(h?`${ft.gray(`[${h}]`)} `:"")+F,c+=Fu(D.length>0?`
|
|
94
|
-
`+D.join(`
|
|
95
|
-
`):""),t.type==="trace"){let a=Error("Trace: "+t.message);c+=this.formatStack(a.stack||"",a.message)}return e?`
|
|
96
|
-
`+c+`
|
|
97
|
-
`:c}}function Fu(t){return t.replace(/`([^`]+)`/gm,(i,u)=>ft.cyan(u)).replace(/\s+_([^_]+)_\s+/gm,(i,u)=>` ${ft.underline(u)} `)}function ol(t="white"){return ft[t]||ft.white}function kl(t="bgWhite"){return ft[`bg${t[0].toUpperCase()}${t.slice(1)}`]||ft.bgWhite}function ql(t={}){let i=pl();if(process.env.CONSOLA_LEVEL)i=Number.parseInt(process.env.CONSOLA_LEVEL)??i;return kf({level:i,defaults:{level:i},stdout:process.stdout,stderr:process.stderr,prompt:(...u)=>import("./chunk-dz3837t8.js").then((D)=>D.prompt(...u)),reporters:t.reporters||[t.fancy??!(al||re)?new ne:new KD],...t})}function pl(){if(sl)return it.debug;if(re)return it.warn;return it.info}var Ti=ql();async function Vl(t,i){if(Su.platform()!=="darwin")return!1;try{let u=Sn(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"";if(!u)return m(R.TRUST,"Could not extract certificate fingerprint",i),!1;try{if(Sn("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256 2>/dev/null || true").toString().includes(u))return m(R.TRUST,"Certificate fingerprint found in system keychain",i),!0}catch{}return m(R.TRUST,"Certificate fingerprint not found in system keychain",i),!1}catch(u){return m(R.TRUST,`Error checking certificate trust: ${u}`,i),!1}}var bl={platform:"darwin",async addCertificate(t,i){if(await Vl(t,i?.verbose)){m(R.TRUST,"Certificate is already trusted, skipping trust store update",i?.verbose),Ti.success("Certificate is already trusted in system keychain");return}m(R.TRUST,"Adding certificate to macOS keychain",i?.verbose),await Jt(`sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ${t}`)},async removeCertificate(t,i,u){let D=u||L.commonName;m(R.TRUST,`Removing certificate ${D} from macOS keychain`,i?.verbose);try{await Jt(`sudo security delete-certificate -c "${D}" /Library/Keychains/System.keychain`),m(R.TRUST,`Removed certificate ${D} from macOS keychain`,i?.verbose)}catch(r){throw m(R.TRUST,`Error removing certificate: ${r}`,i?.verbose),r}}},gl={platform:"win32",async addCertificate(t,i){m(R.TRUST,"Adding certificate to Windows certificate store",i?.verbose),await Jt(`certutil -f -v -addstore -enterprise Root ${t}`)},async removeCertificate(t,i,u){let D=u||L.commonName;m(R.TRUST,`Removing certificate ${D} from Windows certificate store`,i?.verbose);try{await Jt(`certutil -delstore -enterprise Root "${D}"`),m(R.TRUST,`Removed certificate ${D} from Windows certificate store`,i?.verbose)}catch(r){throw m(R.TRUST,`Error removing certificate: ${r}`,i?.verbose),r}}},vl={platform:"linux",async addCertificate(t,i){m(R.TRUST,"Adding certificate to Linux certificate store",i?.verbose);let u=Su.homedir(),D=Bt.LINUX_CERT_DB_FILENAME,r=Bt.LINUX_TRUST_ARGS;m(R.TRUST,`Searching for certificate databases in ${u}`,i?.verbose);let n=ND(u,D);if(n.length===0){Ti.warn("No certificate databases found. Certificate may not be trusted by the system.");return}for(let e of n){m(R.TRUST,`Processing certificate database in ${e}`,i?.verbose);try{m(R.TRUST,`Attempting to delete existing cert for ${L.commonName}`,i?.verbose),await Jt(`certutil -d sql:${e} -D -n ${L.commonName}`)}catch(l){m(R.TRUST,`Warning: Error deleting existing cert: ${l}`,i?.verbose),console.warn(`Error deleting existing cert: ${l}`)}m(R.TRUST,`Adding new certificate to ${e}`,i?.verbose),await Jt(`certutil -d sql:${e} -A -t ${r} -n ${L.commonName} -i ${t}`),Ti.info(`Cert added to ${e}`)}},async removeCertificate(t,i,u){let D=u||L.commonName;m(R.TRUST,`Removing certificate ${D} from Linux certificate store`,i?.verbose);let r=Su.homedir(),n=Bt.LINUX_CERT_DB_FILENAME;m(R.TRUST,`Searching for certificate databases in ${r}`,i?.verbose);let e=ND(r,n);if(e.length===0){Ti.warn("No certificate databases found. Cannot remove certificate.");return}for(let l of e){m(R.TRUST,`Processing certificate database in ${l}`,i?.verbose);try{await Jt(`certutil -d sql:${l} -D -n "${D}"`),Ti.info(`Cert removed from ${l}`)}catch(f){m(R.TRUST,`Error removing cert from ${l}: ${f}`,i?.verbose),console.warn(`Error removing cert from ${l}: ${f}`)}}}},Pl={darwin:bl,win32:gl,linux:vl};async function GD(t,i,u){m(R.TRUST,`Adding certificate to system trust store with options: ${JSON.stringify(u)}`,u?.verbose),m(R.TRUST,"Storing certificate and private key",u?.verbose);let D=Pn(t,u);m(R.TRUST,"Storing CA certificate",u?.verbose);let r=Zn(i,u),n=Su.platform();m(R.TRUST,`Detected platform: ${n}`,u?.verbose);let e=Pl[n];if(!e){let l=`Unsupported platform: ${n}`;throw m(R.TRUST,`Error: ${l}`,u?.verbose),Error(l)}return await e.addCertificate(r,u),m(R.TRUST,"Certificate successfully added to system trust store",u?.verbose),D}var T={info:(...t)=>console.log("[info]",...t),success:(...t)=>console.log("[success]",...t),warn:(...t)=>console.warn("[warn]",...t),error:(...t)=>console.error("[error]",...t),debug:(...t)=>console.debug("[debug]",...t),log:(...t)=>console.log(...t),start:(...t)=>console.log("[start]",...t),box:(...t)=>console.log("[box]",...t)};var qt=null;function ee(t){let i=new Set;i.add(t);let u=t.split(".");if(u.length>=2)i.add(`*.${u.slice(1).join(".")}`);return Array.from(i)}function ae(t){let u=oD(t).replace(/\*/g,"wildcard"),D=et(Ni(),".stacks","ssl"),r=D;if(typeof t?.https==="object")return r=t.https.basePath&&t.https.basePath.trim()!==""?t.https.basePath:D,{caCertPath:t.https.caCertPath||et(r,`${u}.ca.crt`),certPath:t.https.certPath||et(r,`${u}.crt`),keyPath:t.https.keyPath||et(r,`${u}.key`)};return{caCertPath:et(r,`${u}.ca.crt`),certPath:et(r,`${u}.crt`),keyPath:et(r,`${u}.key`)}}function fe(t){let i=new Set;if(Iu(t))t.proxies.forEach((u)=>{let D=u.to||"rpx.localhost";ee(D).forEach((r)=>i.add(r))});else if(ce(t)){let u=t.to||"rpx.localhost";ee(u).forEach((D)=>i.add(D))}else i.add("rpx.localhost");return i.add("localhost"),i.add("*.localhost"),i}async function y2(t){s("ssl","Loading SSL configuration",t.verbose);let i={...Zi,...t};if(t.https=pt(i),!t.https?.keyPath&&!t.https?.certPath)return s("ssl","No SSL configuration provided",t.verbose),null;if(t.https?.keyPath&&!t.https?.certPath||!t.https?.keyPath&&t.https?.certPath){let u=!t.https?.keyPath?"keyPath":"certPath";throw s("ssl",`Invalid SSL configuration - missing ${u}`,t.verbose),Error(`SSL Configuration requires both keyPath and certPath. Missing: ${u}`)}try{if(!t.https?.keyPath||!t.https?.certPath)return null;try{s("ssl","Reading SSL certificate files",t.verbose);let u=await P.readFile(t.https?.keyPath,"utf8"),D=await P.readFile(t.https?.certPath,"utf8");return s("ssl","SSL configuration loaded successfully",t.verbose),{key:u,cert:D}}catch(u){return s("ssl",`Failed to read certificates: ${u}`,t.verbose),null}}catch(u){throw s("ssl",`SSL configuration error: ${u}`,t.verbose),u}}async function w2(t){if(St.platform==="darwin")return Zl(t);if(St.platform==="linux")try{let{exec:i}=await import("node:child_process");return await new Promise((u)=>{i(`sudo cp "${t}" /usr/local/share/ca-certificates/ && sudo update-ca-certificates`,(D)=>{if(!D)u(!0);else i(`sudo cp "${t}" /etc/pki/ca-trust/source/anchors/ && sudo update-ca-trust extract`,(r)=>{u(!r)})})})}catch{return!1}return!1}async function Zl(t){if(St.platform!=="darwin")return!1;try{if(await qD(t,{verbose:!1,regenerateUntrustedCerts:!0}))return s("ssl","Certificate is already trusted, skipping trust operation",!1),!0;s("ssl","Trusting certificate via macOS security command",!1);try{return LD(`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${t}"`),!0}catch{try{return xt(`security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db "${t}"`),!0}catch{return!1}}}catch{return!1}}async function kD(t){if(qt){s("ssl","Using cached SSL configuration",t.verbose);return}let i=Iu(t)?t.proxies.map((f)=>f.to):[t.to];s("ssl",`Generating certificate for domains: ${i.join(", ")}`,t.verbose);let u=pt(t,t.verbose);if(t.verbose)T.info("Generating Root CA certificate...");let D=await OD(u),r=pt(t,t.verbose);if(t.verbose)T.info(`Generating host certificate for: ${i.join(", ")}`);let n=await JD({...r,rootCA:{certificate:D.certificate,privateKey:D.privateKey}});try{let f=r.basePath||et(Ni(),".stacks","ssl");await P.mkdir(f,{recursive:!0}),await Promise.all([P.writeFile(r.certPath,n.certificate),P.writeFile(r.keyPath,n.privateKey),P.writeFile(r.caCertPath,D.certificate)]),s("ssl","Certificate files saved successfully",t.verbose)}catch(f){throw s("ssl",`Error saving certificate files: ${f}`,t.verbose),Error(`Failed to save certificate files: ${f}`)}if(await qD(r.certPath,{verbose:t.verbose,regenerateUntrustedCerts:!0})){if(s("ssl","Certificate is already trusted, skipping trust store update",t.verbose),t.verbose)T.success("Certificate is already trusted in system trust store");if(qt={key:n.privateKey,cert:n.certificate,ca:D.certificate},t.verbose)T.success(`Certificate generated successfully for ${i.length} domain${i.length>1?"s":""}`);return}if(t.verbose)T.info("Adding certificate to system trust store (may require sudo permission)...");let l=!1;if(St.platform==="darwin")try{let f=`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.caCertPath}" && security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.certPath}"`;if(LD(f),t.verbose)T.success("Successfully added CA and host certificates to system trust store");try{xt(`security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db "${r.certPath}"`,{stdio:"pipe"})}catch{}l=!0;let c=r.basePath||et(Ni(),".stacks","ssl"),F=et(c,"trust-rpx-cert.sh"),h=`#!/bin/bash
|
|
98
|
-
echo "Trusting RPX certificate for domains: ${i.join(", ")}"
|
|
99
|
-
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.caCertPath}"
|
|
100
|
-
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.certPath}"
|
|
101
|
-
echo "Certificates trusted! Please restart your browser."
|
|
102
|
-
echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
|
|
103
|
-
`;await P.writeFile(F,h,{mode:493})}catch(f){if(t.verbose)T.warn(`Could not add certificate to trust store automatically: ${f}`);let c=r.basePath||et(Ni(),".stacks","ssl"),F=et(c,"trust-rpx-cert.sh"),h=`#!/bin/bash
|
|
104
|
-
echo "Trusting RPX certificate for domains: ${i.join(", ")}"
|
|
105
|
-
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.caCertPath}"
|
|
106
|
-
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${r.certPath}"
|
|
107
|
-
echo "Certificates trusted! Please restart your browser."
|
|
108
|
-
echo "If you still see certificate warnings, type 'thisisunsafe' on the warning page in Chrome/Arc browsers."
|
|
109
|
-
`;if(await P.writeFile(F,h,{mode:493}),t.verbose)T.info(`Created a trust helper script at: ${F}`),T.info(`If you're still having certificate issues, run: sh ${F}`)}else if(St.platform==="linux")try{let{exec:f}=await import("node:child_process"),c="/usr/local/share/ca-certificates/rpx",F=`
|
|
110
|
-
mkdir -p "/usr/local/share/ca-certificates/rpx" 2>/dev/null || true
|
|
111
|
-
cp "${r.caCertPath}" "/usr/local/share/ca-certificates/rpx/"
|
|
112
|
-
cp "${r.certPath}" "/usr/local/share/ca-certificates/rpx/"
|
|
113
|
-
update-ca-certificates
|
|
114
|
-
echo "RPX certificates installed. Please restart your browser."
|
|
115
|
-
`,h=et(HD.tmpdir(),`rpx-trust-${Date.now()}.sh`);await P.writeFile(h,F,{mode:493}),await new Promise((E)=>{f(`sudo bash "${h}"`,(a)=>{if(a){if(t.verbose)T.warn(`Could not trust certificates: ${a}`);E(!1)}else{if(t.verbose)T.success("Successfully added certificates to system trust store");E(!0)}})}),await P.unlink(h).catch(()=>{}),l=!0}catch(f){if(t.verbose)T.warn(`Failed to trust certificates: ${f}`)}else if(St.platform==="win32")try{let f=`
|
|
116
|
-
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("${r.caCertPath.replace(/\//g,"\\")}")
|
|
117
|
-
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("ROOT", "LocalMachine")
|
|
118
|
-
$store.Open("ReadWrite")
|
|
119
|
-
$store.Add($cert)
|
|
120
|
-
$store.Close()
|
|
121
|
-
Write-Host "Certificate trusted successfully!"
|
|
122
|
-
`,c=et(HD.tmpdir(),"rpx-trust.ps1");if(await P.writeFile(c,f),xt(`powershell -ExecutionPolicy Bypass -File "${c}"`),t.verbose)T.success("Successfully added certificate to Windows trust store");l=!0}catch(f){if(t.verbose)T.warn(`Could not trust certificate: ${f}`)}else try{await GD(n,D.certificate,r),l=!0}catch(f){if(t.verbose)T.warn(`Could not add certificate to trust store: ${f}`)}if(qt={key:n.privateKey,cert:n.certificate,ca:D.certificate},t.verbose)T.success(`Certificate generated successfully for ${i.length} domain${i.length>1?"s":""}`);if(!l&&t.verbose)T.warn('If you see certificate warnings in Chrome/Arc, type "thisisunsafe" on the warning page'),T.warn("This will bypass the warning and you should only need to do it once")}async function di(t){if(!t)return null;if(qt)return qt;let i=pt(t);try{let[u,D,r]=await Promise.all([P.access(i.keyPath).then(()=>!0).catch(()=>!1),P.access(i.certPath).then(()=>!0).catch(()=>!1),i.caCertPath?P.access(i.caCertPath).then(()=>!0).catch(()=>!1):Promise.resolve(!1)]);if(!u||!D)return s("ssl",`Certificate files don't exist: key=${u}, cert=${D}, paths: ${i.keyPath}, ${i.certPath}`,t.verbose),null;let n="regenerateUntrustedCerts"in t,e=t.regenerateUntrustedCerts,l=n?e!==!1:!0;if(s("ssl",`Trust check: hasFlag=${n}, flagValue=${e}, shouldCheckTrust=${l}`,t.verbose),!(l?await qD(i.certPath,t):!0))return s("ssl","Certificate exists but is not trusted, will regenerate",t.verbose),null;let[c,F,h]=await Promise.all([P.readFile(i.keyPath,"utf8"),P.readFile(i.certPath,"utf8"),r&&i.caCertPath?P.readFile(i.caCertPath,"utf8"):Promise.resolve(void 0)]);if(h&&!h.includes("-----BEGIN CERTIFICATE-----"))return s("ssl","Invalid root CA certificate content, will regenerate",t.verbose),null;if(Iu(t))try{let{X509Certificate:E}=await import("node:crypto"),A=new E(F).subjectAltName||"",C=t.proxies.map((w)=>w.to).filter((w)=>!A.includes(`DNS:${w}`));if(C.length>0)return s("ssl",`Certificate missing SANs for: ${C.join(", ")}, will regenerate`,t.verbose),null}catch(E){s("ssl",`Could not verify cert SANs: ${E}`,t.verbose)}return s("ssl","Successfully loaded existing certificates",t.verbose),qt={key:c,cert:F,ca:h},qt}catch(u){return s("ssl",`Error checking existing certificates: ${u}`,t.verbose),null}}function pt(t,i){let u=oD(t);s("ssl",`Primary domain: ${u}`,i);let D=ae(t),r=et(Ni(),".stacks","ssl");if(typeof t.https==="object"){let n=t.https.basePath&&t.https.basePath.trim()!==""?t.https.basePath:r,e={domain:u,hostCertCN:u,basePath:n,caCertPath:t.https.caCertPath||D.caCertPath,certPath:t.https.certPath||D.certPath,keyPath:t.https.keyPath||D.keyPath,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:t.https.commonName||u,organizationName:t.https.organizationName||"Local Development",countryName:t.https.countryName||"US",stateName:t.https.stateName||"California",localityName:t.https.localityName||"Playa Vista",validityDays:t.https.validityDays||825,verbose:i||!1,subjectAltNames:Array.from(fe(t)).map((l)=>({type:2,value:l}))};if(le(t.https.rootCA))e.rootCA=t.https.rootCA;return e}return{domain:u,hostCertCN:u,basePath:r,...D,altNameIPs:["127.0.0.1","::1"],altNameURIs:[],commonName:u,organizationName:"Local Development",countryName:"US",stateName:"California",localityName:"Playa Vista",validityDays:825,verbose:i||!1,subjectAltNames:Array.from(fe(t)).map((n)=>({type:2,value:n}))}}async function he(t,i){let u=ae({to:t,verbose:i}),D=[u.caCertPath,u.certPath,u.keyPath];s("certificates","Attempting to clean up relating certificates",i),await Promise.all(D.map((r)=>Fe(r,i)))}async function qD(t,i){try{if(s("ssl",`Checking if certificate is trusted: ${t}`,i?.verbose),St.platform==="darwin")try{let D=xt(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"";if(!D)return s("ssl","Could not extract certificate fingerprint",i?.verbose),!1;if(xt("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256").toString().includes(D))return s("ssl","Certificate fingerprint found in system keychain",i?.verbose),!0;return s("ssl","Certificate fingerprint not found in system keychain",i?.verbose),!1}catch(u){return s("ssl",`Error checking certificate trust: ${u}`,i?.verbose),!1}else if(St.platform==="win32")try{let D=xt(`openssl x509 -noout -subject -in "${t}"`).toString().trim().split("=").slice(1).join("=").trim()||"";if(!D)return s("ssl","Could not extract certificate subject",i?.verbose),!1;let r=`powershell -Command "Get-ChildItem -Path Cert:\\LocalMachine\\Root | Where-Object { $_.Subject -like '*${D}*' } | Select-Object Subject"`;if(xt(r).toString().includes(D))return s("ssl","Certificate found in trusted root store",i?.verbose),!0;return s("ssl","Certificate not found in trusted root store",i?.verbose),!1}catch(u){return s("ssl",`Error checking certificate trust on Windows: ${u}`,i?.verbose),!1}else if(St.platform==="linux")try{let D=xt(`openssl x509 -noout -fingerprint -sha256 -in "${t}"`).toString().trim().split("=")[1]?.trim()||"",r=["/etc/ssl/certs","/etc/pki/tls/certs"];for(let n of r)try{if(xt(`find ${n} -type f -exec openssl x509 -noout -fingerprint -sha256 -in {} \\; 2>/dev/null | grep "${D}"`).toString().includes(D))return s("ssl",`Certificate fingerprint found in ${n}`,i?.verbose),!0}catch{}return s("ssl","Certificate not found in system trust stores",i?.verbose),!1}catch(u){return s("ssl",`Error checking certificate trust on Linux: ${u}`,i?.verbose),!1}return s("ssl",`Platform ${St.platform} not supported for certificate trust check`,i?.verbose),!1}catch(u){return s("ssl",`Error checking if certificate is trusted: ${u}`,i?.verbose),!1}}import*as _u from"node:net";function Vt(t,i,u){return s("port",`Checking if port ${t} is in use on ${i}`,u),new Promise((D)=>{let r=_u.createServer(),n=setTimeout(()=>{s("port",`Checking port ${t} timed out, assuming it's in use`,u),r.close(),D(!0)},3000);r.once("error",(e)=>{if(clearTimeout(n),e.code==="EADDRINUSE")s("port",`Port ${t} is in use`,u),D(!0);else s("port",`Error checking port ${t}: ${e.message}`,u),D(!0)}),r.once("listening",()=>{clearTimeout(n),s("port",`Port ${t} is available`,u),r.close(),D(!1)});try{r.listen(t,i)}catch(e){clearTimeout(n),s("port",`Exception checking port ${t}: ${e}`,u),D(!0)}})}async function $l(t,i,u,D=50){s("port",`Finding available port starting from ${t} (max attempts: ${D})`,u);let r=t,n=0;while(n<D){if(n++,!await Vt(r,i,u))return s("port",`Found available port: ${r} after ${n} attempts`,u),r;s("port",`Port ${r} is in use, trying ${r+1} (attempt ${n}/${D})`,u),r++}throw Error(`Unable to find available port after ${D} attempts starting from ${t}`)}function se(t,i,u=5000,D){return s("port",`Testing connection to ${i}:${t}`,D),new Promise((r)=>{let n=_u.connect({host:i,port:t,timeout:u});n.once("connect",()=>{s("port",`Successfully connected to ${i}:${t}`,D),n.end(),r(!0)}),n.once("timeout",()=>{s("port",`Connection to ${i}:${t} timed out`,D),n.destroy(),r(!1)}),n.once("error",(e)=>{s("port",`Failed to connect to ${i}:${t}: ${e.message}`,D),n.destroy(),r(!1)})})}class Uu{usedPorts=new Set;hostname;verbose;maxRetries;constructor(t="0.0.0.0",i,u=50){this.hostname=t,this.verbose=i,this.maxRetries=u}async getNextAvailablePort(t,i=!1){if(this.usedPorts.has(t))return this.findNextAvailablePort(t+1,i);if(await Vt(t,this.hostname,this.verbose))return this.findNextAvailablePort(t+1,i);if(i){if(!await se(t,this.hostname,3000,this.verbose))return s("port",`Port ${t} is available but not connectable, trying next port`,this.verbose),this.findNextAvailablePort(t+1,i)}return this.usedPorts.add(t),t}async findNextAvailablePort(t,i=!1){let u=await $l(t,this.hostname,this.verbose,this.maxRetries);if(i){if(!await se(u,this.hostname,3000,this.verbose))if(u<t+this.maxRetries)return this.findNextAvailablePort(u+1,i);else throw Error(`Unable to find a connectable port after ${this.maxRetries} attempts`)}return this.usedPorts.add(u),u}releasePort(t){s("port",`Releasing port ${t}`,this.verbose),this.usedPorts.delete(t)}}var B2=new Uu;import{spawn as tc}from"node:child_process";import*as bt from"node:process";class ju{processes=new Map;isShuttingDown=!1;async startProcess(t,i,u){if(this.processes.has(t)){s("start",`Process ${t} is already running`,u);return}let[D,...r]=i.command.split(" "),n=i.cwd||bt.cwd();s("start",`Starting process ${t}:`,u),s("start",` Command: ${D} ${r.join(" ")}`,u),s("start",` Working directory: ${n}`,u),s("start",` Environment variables: ${JSON.stringify(i.env)}`,u);let e=tc(D,r,{cwd:n,env:{...bt.env,...i.env},shell:!0,stdio:"inherit"});return this.processes.set(t,{command:i.command,cwd:n,process:e,env:i.env}),new Promise((l,f)=>{if(e.on("error",(c)=>{if(!this.isShuttingDown)s("start",`Process ${t} failed to start: ${c}`,u),this.processes.delete(t),f(c),bt.emit("SIGINT")}),e.on("exit",(c)=>{if(!this.isShuttingDown&&c!==null&&c!==0)s("start",`Process ${t} exited with code ${c}`,u),this.processes.delete(t),f(Error(`Process ${t} exited with code ${c}`)),bt.emit("SIGINT")}),u)e.stdout?.on("data",(c)=>{s("process",`[${t}] ${c.toString().trim()}`,!0)}),e.stderr?.on("data",(c)=>{s("process",`[${t}] ERR: ${c.toString().trim()}`,!0)});setTimeout(()=>{if(!this.isShuttingDown&&e.killed)this.processes.delete(t),f(Error(`Process ${t} was killed during startup`));else s("start",`Process ${t} started successfully`,u),l()},1000)})}async stopProcess(t,i){let u=this.processes.get(t);if(!u?.process){s("start",`No process found for ${t}`,i);return}return s("start",`Stopping process ${t}`,i),new Promise((D)=>{if(!u.process){D();return}u.process.once("exit",()=>{this.processes.delete(t),s("start",`Process ${t} stopped`,i),D()});try{u.process.kill("SIGTERM"),setTimeout(()=>{if(u.process){s("start",`Force killing process ${t}`,i);try{u.process.kill("SIGKILL")}catch(r){}}},3000)}catch(r){s("start",`Error stopping process ${t}: ${r}`,i),this.processes.delete(t),D()}})}async stopAll(t){if(this.isShuttingDown){s("start","Already shutting down, skipping duplicate stopAll call",t);return}this.isShuttingDown=!0,s("start","Stopping all processes",t);let i=Array.from(this.processes.keys()).map((u)=>this.stopProcess(u,t).catch((D)=>{T.error(`Failed to stop process ${u}:`,D)}));await Promise.allSettled(i),this.processes.clear(),this.isShuttingDown=!1}isRunning(t){let i=this.processes.get(t);return!!i?.process&&!i.process.killed}}var N2=new ju;import{execSync as ic}from"node:child_process";import*as gt from"node:http";import*as ye from"node:http2";import*as we from"node:net";import*as H from"node:process";var Xu=new ju,uc=new Uu("0.0.0.0"),Ii=new Set,pD=!1,Yu=null,VD=null;async function xu(t){if(pD)return s("cleanup","Cleanup already in progress, skipping",t?.verbose),VD||Promise.resolve();pD=!0,s("cleanup","Starting cleanup process",t?.verbose),VD=new Promise((i)=>{Yu=i});try{await Xu.stopAll(t?.verbose),T.info("Shutting down proxy servers...");let i=[],u=Array.from(Ii).map((D)=>new Promise((r)=>{D.close(()=>{s("cleanup","Server closed successfully",t?.verbose),r()})}));if(i.push(...u),t?.hosts&&t.domains?.length){s("cleanup","Cleaning up hosts file entries",t?.verbose),s("cleanup",`Original domains for cleanup: ${JSON.stringify(t.domains)}`,t?.verbose);let D=t.domains.filter((r)=>{if(r==="test.local")return!0;return r!=="localhost"&&!r.startsWith("localhost.")&&r!=="127.0.0.1"});if(s("cleanup",`Filtered domains for cleanup: ${JSON.stringify(D)}`,t?.verbose),D.length>0)T.info("Cleaning up hosts file entries..."),i.push(Kr(D,t?.verbose).then(()=>{s("cleanup",`Removed hosts entries for ${D.join(", ")}`,t?.verbose)}).catch((r)=>{s("cleanup",`Failed to remove hosts entries: ${r}`,t?.verbose),T.warn(`Failed to clean up hosts file entries for ${D.join(", ")}:`,r)}))}if(t?.certs&&t.domains?.length){s("cleanup","Cleaning up SSL certificates",t?.verbose),T.info("Cleaning up SSL certificates...");let D=t.domains.map(async(r)=>{try{await he(r,t?.verbose),s("cleanup",`Removed certificates for ${r}`,t?.verbose)}catch(n){s("cleanup",`Failed to remove certificates for ${r}: ${n}`,t?.verbose),T.warn(`Failed to clean up certificates for ${r}:`,n)}});i.push(...D)}await Promise.allSettled(i),s("cleanup","All cleanup tasks completed successfully",t?.verbose),T.success("All cleanup tasks completed successfully")}catch(i){s("cleanup",`Error during cleanup: ${i}`,t?.verbose),T.error("Error during cleanup:",i)}finally{if(Yu)Yu();Yu=null,pD=!1;let i=t&&"vitePluginUsage"in t&&t.vitePluginUsage===!0;if(H.env.NODE_ENV!=="test"&&H.env.BUN_ENV!=="test"&&!i)H.exit(0)}return VD}var bD=!1;function gD(t){if(bD){s("signal",`Received second ${t} signal, forcing exit`,!0),H.exit(1);return}bD=!0,s("signal",`Received ${t} signal, initiating cleanup`,!0),xu().catch((i)=>{s("signal",`Cleanup failed after ${t}: ${i}`,!0),H.exit(1)}).finally(()=>{bD=!1})}H.once("SIGINT",()=>gD("SIGINT"));H.once("SIGTERM",()=>gD("SIGTERM"));H.on("uncaughtException",(t)=>{s("process",`Uncaught exception: ${t}`,!0),T.error("Uncaught exception:",t),gD("uncaughtException")});async function _i(t,i,u,D=5){s("connection",`Testing connection to ${t}:${i} (retries left: ${D})`,u);let r=15000,n=Date.now();if(H.env.RPX_BYPASS_CONNECTION_TEST==="true"){s("connection",`Bypassing connection test for ${t}:${i} due to RPX_BYPASS_CONNECTION_TEST flag`,u);return}let e=()=>new Promise((l,f)=>{let c=we.connect({host:t,port:i,timeout:3000});c.once("connect",()=>{s("connection",`Successfully connected to ${t}:${i}`,u),c.end(),l()}),c.once("timeout",()=>{s("connection",`Connection to ${t}:${i} timed out`,u),c.destroy(),f(Error("Connection timed out"))}),c.once("error",(F)=>{s("connection",`Failed to connect to ${t}:${i}: ${F}`,u),c.destroy(),f(F)})});try{await e()}catch(l){if(Date.now()-n>r){s("connection",`Connection test timed out after ${r}ms, but continuing anyway`,u),T.warn(`Connection test to ${t}:${i} timed out, but RPX will try to proceed anyway.`);return}if(l.code==="ECONNREFUSED"&&D>0)return s("connection",`Connection refused, server might be starting up. Retrying in 2 seconds... (${D} retries left)`,u),await new Promise((c)=>setTimeout(c,2000)),_i(t,i,u,D-1);if(D>0)try{s("connection",`Trying HTTP request to ${t}:${i}`,u),await new Promise((c,F)=>{let h=gt.request({hostname:t,port:i,path:"/",method:"HEAD",timeout:5000},(E)=>{s("connection",`Received HTTP response with status: ${E.statusCode}`,u),c()});h.on("error",(E)=>F(E)),h.on("timeout",()=>{h.destroy(),F(Error("HTTP request timed out"))}),h.end()}),s("connection",`HTTP request to ${t}:${i} succeeded`,u);return}catch(c){return s("connection",`HTTP request to ${t}:${i} failed: ${c}`,u),s("connection",`Retrying socket connection in 2 seconds... (${D} retries left)`,u),await new Promise((F)=>setTimeout(F,2000)),_i(t,i,u,D-1)}let f=`Failed to connect to ${t}:${i} after ${5-D} attempts: ${l.message}`;s("connection",`${f}. To bypass this check set RPX_BYPASS_CONNECTION_TEST=true`,u),T.warn(f),T.warn("RPX will try to continue anyway. If you're sure this is correct, you can set RPX_BYPASS_CONNECTION_TEST=true to skip this check.")}}async function Ce(t){s("server",`Starting server with options: ${JSON.stringify(t)}`,t.verbose);let i=new URL((t.from?.startsWith("http")?t.from:`http://${t.from}`)||"localhost:5173"),u=new URL((t.to?.startsWith("http")?t.to:`http://${t.to}`)||"rpx.localhost"),D=Number.parseInt(i.port)||(i.protocol.includes("https:")?443:80),r=[u.hostname];if(!u.hostname.includes("localhost")&&!u.hostname.includes("127.0.0.1")){s("hosts",`Checking if hosts file entry exists for: ${u.hostname}`,t?.verbose);try{if(!(await Ci(r,t.verbose))[0]){T.info(`Adding ${u.hostname} to hosts file...`),T.info("This may require sudo/administrator privileges");try{await wi(r,t.verbose)}catch(l){if(T.error("Failed to add hosts entry:",l.message),T.warn("You can manually add this entry to your hosts file:"),T.warn(`127.0.0.1 ${u.hostname}`),T.warn(`::1 ${u.hostname}`),H.platform==="win32")T.warn("On Windows:"),T.warn("1. Run notepad as administrator"),T.warn("2. Open C:\\Windows\\System32\\drivers\\etc\\hosts");else T.warn("On Unix systems:"),T.warn("sudo nano /etc/hosts")}}else s("hosts",`Host entry already exists for ${u.hostname}`,t.verbose)}catch(e){T.error("Failed to check hosts file:",e.message)}}try{await _i(i.hostname,D,t.verbose)}catch(e){s("server",`Connection test failed: ${e}`,t.verbose),T.error(e.message),T.warn("Continuing with proxy setup despite connection test failure..."),T.info("If you need to bypass connection testing, set environment variable RPX_BYPASS_CONNECTION_TEST=true")}let n=t._cachedSSLConfig||null;if(t.https)try{if(t.https===!0)t.https=pt({...t,to:u.hostname});if(n=await di({...t,to:u.hostname,https:t.https}),!n){if(s("ssl",`Generating new certificates for ${u.hostname}`,t.verbose),await kD({...t,from:i.toString(),to:u.hostname,https:t.https}),n=await di({...t,to:u.hostname,https:t.https}),!n)throw Error(`Failed to load SSL configuration after generating certificates for ${u.hostname}`)}}catch(e){throw s("server",`SSL setup failed: ${e}`,t.verbose),e}s("server",`Setting up reverse proxy with SSL config for ${u.hostname}`,t.verbose),await rc({...t,from:t.from||"localhost:5173",to:u.hostname,fromPort:D,sourceUrl:{hostname:i.hostname,host:i.host},ssl:n})}async function Dc(t,i,u,D,r,n,e,l,f,c,F){s("proxy",`Creating proxy server ${t} -> ${i} with cleanUrls: ${c}`,f);function h(y){let C={};for(let[w,B]of Object.entries(y))if(!w.startsWith(":"))C[w]=B;return C}let E=(y,C)=>{s("request",`Incoming request: ${y.method} ${y.url}`,f);let w=y.url||"/",B=y.method||"GET";if(y instanceof ye.Http2ServerRequest){let d=y.headers;B=d[":method"]||B,w=d[":path"]||w}if(c){if(!w.match(/\.[a-z0-9]+$/i))if(w.endsWith("/"))w=`${w}index.html`;else w=`${w}.html`}let S=h(y.headers);if(F)S.host=`${n.hostname}:${u}`,s("request",`Changed origin: setting host header to ${S.host}`,f);let _={hostname:n.hostname,port:u,path:w,method:B,headers:S};s("request",`Proxy request options: ${JSON.stringify(_)}`,f);let I=gt.request(_,(d)=>{if(s("response",`Proxy response received with status ${d.statusCode}`,f),c&&d.statusCode===404){let Ft=[];if(w.endsWith(".html"))Ft.push(w.slice(0,-5));else if(!w.match(/\.[a-z0-9]+$/i))Ft.push(`${w}.html`);if(!w.endsWith("/"))Ft.push(`${w}/index.html`);if(Ft.length>0){s("cleanUrls",`Trying alternative paths: ${Ft.join(", ")}`,f);let Gt=(J)=>{if(J.length===0){C.writeHead(d.statusCode||404,d.headers),d.pipe(C);return}let Ht=J[0],Wu={..._,path:Ht},Ui=gt.request(Wu,(ji)=>{if(ji.statusCode===200)s("cleanUrls",`Found matching path: ${Ht}`,f),C.writeHead(ji.statusCode,ji.headers),ji.pipe(C);else Gt(J.slice(1))});Ui.on("error",()=>Gt(J.slice(1))),Ui.end()};Gt(Ft);return}}let wt={...d.headers,"Strict-Transport-Security":"max-age=31536000; includeSubDomains; preload","X-Content-Type-Options":"nosniff"};C.writeHead(d.statusCode||500,wt),d.pipe(C)});I.on("error",(d)=>{s("request",`Proxy request failed: ${d}`,f),T.error("Proxy request failed:",d),C.writeHead(502),C.end(`Proxy Error: ${d.message}`)}),y.pipe(I)};if(s("server",`Creating server with SSL config: ${!!e}`,f),e)return new Promise((y,C)=>{try{let w=Bun.serve({port:D,hostname:r,tls:{key:e.key,cert:e.cert,ca:e.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(B){let S=new URL(B.url);s("request",`Bun.serve received: ${B.method} ${S.pathname}`,f);let _=`http://${n.host}`,I=new URL(S.pathname+S.search,_);try{let d=new Headers(B.headers);if(d.set("host",n.host),F)d.set("origin",_);d.set("x-forwarded-for","127.0.0.1"),d.set("x-forwarded-proto","https"),d.set("x-forwarded-host",i);let wt=await fetch(I.toString(),{method:B.method,headers:d,body:B.body,redirect:"manual"}),Ft=new Headers(wt.headers);if(c&&S.pathname.endsWith(".html")){let Gt=S.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:Gt}})}return new Response(wt.body,{status:wt.status,statusText:wt.statusText,headers:Ft})}catch(d){return s("request",`Proxy error: ${d}`,f),new Response(`Proxy Error: ${d}`,{status:502})}},error(B){return s("server",`Bun.serve error: ${B}`,f),new Response(`Server Error: ${B.message}`,{status:500})}});Ii.add(w),Ee({from:t,to:i,vitePluginUsage:l,listenPort:D,ssl:!0,cleanUrls:c,verbose:f}),y()}catch(w){C(w)}});let a=gt.createServer(E);function A(y){return Ii.add(y),new Promise((C,w)=>{y.listen(D,r,()=>{s("server",`Server listening on port ${D}`,f),Ee({from:t,to:i,vitePluginUsage:l,listenPort:D,ssl:!!e,cleanUrls:c,verbose:f}),C()}),y.on("error",(B)=>{s("server",`Server error: ${B}`,f),w(B)})})}return A(a)}async function rc(t){s("setup",`Setting up reverse proxy: ${JSON.stringify(t)}`,t.verbose);let{from:i,to:u,fromPort:D,sourceUrl:r,ssl:n,verbose:e,cleanup:l,vitePluginUsage:f,changeOrigin:c,cleanUrls:F}=t,h=80,E=443,a="0.0.0.0",A=t.portManager||uc;try{if(u&&!u.includes("localhost")&&!u.includes("127.0.0.1")){if(!(await Ci([u],e))[0]){T.warn(`The hostname ${u} isn't in your hosts file. Adding it now...`);try{await wi([u],e),T.success(`Added ${u} to your hosts file.`)}catch(S){T.error(`Failed to add ${u} to your hosts file: ${S}`),T.info(`You may need to manually add '127.0.0.1 ${u}' to your /etc/hosts file.`)}}}else if(H.platform!=="darwin"&&u&&u.includes("localhost")&&!u.match(/^(localhost|127\.0\.0\.1)$/)){if(!(await Ci([u],e))[0]){s("hosts",`${u} not found in hosts file, adding...`,e);try{await wi([u],e)}catch(S){s("hosts",`Failed to add ${u} to hosts file: ${S}`,e)}}}if(n&&!A.usedPorts.has(h)){if(!await Vt(h,a,e))s("setup","Starting HTTP redirect server",e),Ae(e),A.usedPorts.add(h);else if(s("setup","Port 80 is in use, skipping HTTP redirect",e),e)T.warn("Port 80 is in use, HTTP to HTTPS redirect will not be available")}let y=n?E:h,C=await Vt(y,a,e),w;if(C){if(s("setup",`Port ${y} is already in use`,e),e)T.warn(`Port ${y} is already in use. This may be another instance of rpx or another service.`);if(y===443){if(w=await A.getNextAvailablePort(3443,!0),s("setup",`Using port ${w} instead of ${y}`,e),e)T.info(`Using port ${w} instead. Access your site at https://${u}:${w}`)}else if(w=await A.getNextAvailablePort(y+1000,!0),s("setup",`Using port ${w} instead of ${y}`,e),e)T.info(`Using port ${w} instead. Access your site at http://${u}:${w}`)}else w=y,A.usedPorts.add(w),s("setup",`Using standard ${y===443?"HTTPS":"HTTP"} port ${y} for ${u}`,e);await Dc(i,u,D,w,a,r,n,f,e,F,c)}catch(y){s("setup",`Setup failed: ${y}`,e),T.error(`Failed to setup reverse proxy: ${y.message}`),xu({domains:[u],hosts:typeof l==="boolean"?l:l?.hosts,certs:typeof l==="boolean"?l:l?.certs,verbose:e,vitePluginUsage:f})}}function Ae(t){s("redirect","Starting HTTP redirect server",t);let i=gt.createServer((u,D)=>{let r=u.headers.host||"";s("redirect",`Redirecting request from ${r}${u.url} to HTTPS`,t),D.writeHead(301,{Location:`https://${r}${u.url}`}),D.end()}).listen(80);Ii.add(i),s("redirect","HTTP redirect server started",t)}function K2(t){let i={...Zi,...t};s("proxy",`Starting proxy with options: ${JSON.stringify(i)}`,i?.verbose);let u=i.to||"",D=u.split(".").pop()?.toLowerCase()||"",r=H.platform==="darwin"&&u&&!u.includes("localhost")&&!u.includes("127.0.0.1"),n=["dev","app","page","new","day","foo"],e=["test","localhost","local","example","invalid"];if(r&&n.includes(D)&&i?.verbose)T.warn(`The .${D} TLD may not work reliably for local development`),T.info(` Google owns .${D} with HSTS preloading, which can bypass local DNS`),T.info(" Consider using a reserved TLD: .test, .localhost, or .local");if(r)import("./chunk-61re8msk.js").then(({startDnsServer:f,setupResolver:c})=>{f([u],i.verbose).then((F)=>{if(F)c(i.verbose,[u]).then(()=>{if(i.verbose)if(e.includes(D))T.success(`DNS server started for .${D} domains`);else T.success(`DNS server started for .${D} domains (hosts file entry also added)`)});else s("dns",`Could not start DNS server - ${u} may not resolve in browser`,i.verbose)})}).catch((f)=>{s("dns",`Failed to start DNS server: ${f}`,i.verbose)});let l={from:i.from,to:i.to,cleanUrls:i.cleanUrls,https:pt(i),cleanup:i.cleanup,vitePluginUsage:i.vitePluginUsage,changeOrigin:i.changeOrigin,verbose:i.verbose,regenerateUntrustedCerts:i.regenerateUntrustedCerts};s("proxy",`Server options: ${JSON.stringify(l)}`,i.verbose),Ce(l).catch((f)=>{s("proxy",`Failed to start proxy: ${f}`,i.verbose),T.error(`Failed to start proxy: ${f.message}`),xu({domains:[i.to],hosts:typeof i.cleanup==="boolean"?i.cleanup:i.cleanup?.hosts,certs:typeof i.cleanup==="boolean"?i.cleanup:i.cleanup?.certs,verbose:i.verbose})})}function nc(t){return t?.verbose||!1}async function G2(t){let i={from:"localhost:5173",to:"rpx.localhost",https:!1,cleanup:{hosts:!0,certs:!1},vitePluginUsage:!1,verbose:!1,cleanUrls:!1,changeOrigin:!1,regenerateUntrustedCerts:!1};if(t)i={...i,...t};let u=nc(i);if(s("config",`Starting with config: ${JSON.stringify(i,null,2)}`,u),s("config",`Is multi-proxy? ${"proxies"in i}`,u),"proxies"in i&&Array.isArray(i.proxies)){s("servers",`Found ${i.proxies.length} proxies in config`,u);for(let a of i.proxies)if(a.start){let A=`${a.from}-${a.to}`;try{s("watch",`Starting command for ${A} with command: ${a.start.command}`,u),T.info(`Starting command for ${A}...`),await Xu.startProcess(A,a.start,u);let y=new URL(a.from.startsWith("http")?a.from:`http://${a.from}`),C=y.hostname||"localhost",w=Number(y.port)||80;try{await _i(C,w,u),s("watch",`Dev server is ready at ${C}:${w}`,u)}catch(B){s("watch",`Connection check failed, but continuing with proxy setup: ${B}`,u),T.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(y){throw s("watch",`Failed to start command for ${A}: ${y}`,u),Error(`Failed to start command for ${A}: ${y}`)}}else s("watch",`No start command for proxy ${a.from} -> ${a.to}`,u)}else if("start"in i&&i.start){s("watch","Found start command in single proxy config",u);let a=`${i.from}-${i.to}`;try{if(i.start)s("watch",`Starting command: ${i.start.command}`,u),await Xu.startProcess(a,i.start,u);let A=new URL(i.from?.startsWith("http")?i.from:`http://${i.from}`),y=A.hostname||"localhost",C=Number(A.port)||80;try{await _i(y,C,u),s("watch",`Dev server is ready at ${y}:${C}`,u)}catch(w){s("watch",`Connection check failed, but continuing with proxy setup: ${w}`,u),T.warn("Dev server connection check failed. RPX will try to proceed anyway...")}}catch(A){throw s("watch",`Failed to run start command: ${A}`,u),Error(`Failed to run start command: ${A}`)}}else s("watch","No start command found in config",u);let D="proxies"in i&&Array.isArray(i.proxies)?i.proxies[0]?.to:("to"in i)?i.to:"rpx.localhost";if(H.platform!=="win32"&&(i.https||i.cleanup?.hosts!==!1)){if(!Ei())try{s("sudo","Pre-acquiring sudo credentials for privileged operations",u),ic("sudo -v",{stdio:"inherit"})}catch{s("sudo","Could not pre-acquire sudo credentials",u)}}if(i.https){let a=await di(i);if(!a){if(s("ssl",`No valid or trusted certificates found for ${D}, generating new ones`,i.verbose),await kD(i),a=await di(i),!a)throw Error(`Failed to load SSL certificates after generation for ${D}`)}else s("ssl",`Using existing and trusted certificates for ${D}`,i.verbose);i._cachedSSLConfig=a}let r="proxies"in i&&Array.isArray(i.proxies)?i.proxies.map((a)=>({...a,https:i.https,cleanup:i.cleanup,cleanUrls:a.cleanUrls??("cleanUrls"in i?i.cleanUrls:!1),vitePluginUsage:i.vitePluginUsage,changeOrigin:a.changeOrigin??i.changeOrigin,verbose:u,_cachedSSLConfig:i._cachedSSLConfig})):[{from:"from"in i?i.from:"localhost:5173",to:"to"in i?i.to:"rpx.localhost",cleanUrls:"cleanUrls"in i?i.cleanUrls:!1,https:i.https,cleanup:i.cleanup,vitePluginUsage:i.vitePluginUsage,start:"start"in i?i.start:void 0,changeOrigin:i.changeOrigin,verbose:u,_cachedSSLConfig:i._cachedSSLConfig}],n=r.map((a)=>a.to||"rpx.localhost"),e=i._cachedSSLConfig,l=n.filter((a)=>a&&!a.includes("localhost")&&!a.includes("127.0.0.1")),f=["dev","app","page","new","day","foo"],c=["test","localhost","local","example","invalid"],F=[...new Set(l.map((a)=>a.split(".").pop()?.toLowerCase()))],h=F.filter((a)=>!!a&&f.includes(a));if(h.length>0&&u)T.warn(`The following TLDs may not work reliably for local development: ${h.map((a)=>`.${a}`).join(", ")}`),T.info(" These TLDs have HSTS preloading which can bypass local DNS"),T.info(" Consider using reserved TLDs: .test, .localhost, or .local");if(H.platform==="darwin"&&l.length>0){let{startDnsServer:a,setupResolver:A}=await import("./chunk-61re8msk.js");if(await a(l,u)){if(await A(u,l),u)if(F.every((w)=>!!w&&c.includes(w)))T.success(`DNS server started for ${F.map((w)=>`.${w}`).join(", ")} domains`);else T.success(`DNS server started for ${F.map((w)=>`.${w}`).join(", ")} domains (hosts file entries also added)`)}else s("dns","Could not start DNS server - custom domains may not resolve",u)}let E=async()=>{s("cleanup","Starting cleanup handler",i.verbose);try{let{stopDnsServer:a,removeResolver:A}=await import("./chunk-61re8msk.js");a(i.verbose),await A(i.verbose)}catch(a){s("cleanup",`Error stopping DNS server: ${a}`,i.verbose)}try{await Xu.stopAll(i.verbose)}catch(a){s("cleanup",`Error stopping processes: ${a}`,i.verbose)}await xu({domains:n,hosts:typeof i.cleanup==="boolean"?i.cleanup:i.cleanup?.hosts,certs:typeof i.cleanup==="boolean"?i.cleanup:i.cleanup?.certs,verbose:i.verbose||!1})};if(H.on("SIGINT",E),H.on("SIGTERM",E),H.on("uncaughtException",(a)=>{s("process",`Uncaught exception: ${a}`,!0),console.error("Uncaught exception:",a),E()}),e&&r.length>1){s("proxies",`Creating shared HTTPS server for ${r.length} domains`,u);let a=new Map;for(let w of r){let B=w.to||"rpx.localhost",S=new URL(w.from?.startsWith("http")?w.from:`http://${w.from}`),_=Number.parseInt(S.port)||80;if(a.set(B,{fromPort:_,sourceHost:S.host,cleanUrls:w.cleanUrls||!1,changeOrigin:w.changeOrigin||!1,pathRewrites:w.pathRewrites}),s("proxies",`Route: ${B} → ${S.host}`,u),!B.includes("localhost")&&!B.includes("127.0.0.1"))try{if(!(await Ci([B],u))[0])await wi([B],u)}catch{s("hosts",`Could not add hosts entry for ${B}`,u)}}if(!await Vt(80,"0.0.0.0",u))Ae(u);let y=443;if(await Vt(y,"0.0.0.0",u)){if(s("proxies",`Port ${y} is already in use, cannot start shared proxy`,u),u)T.warn(`Port ${y} is in use. Shared HTTPS proxy cannot start.`);return}try{let w=Bun.serve({port:y,hostname:"0.0.0.0",tls:{key:e.key,cert:e.cert,ca:e.ca,requestCert:!1,rejectUnauthorized:!1},async fetch(B){let S=new URL(B.url),I=(B.headers.get("host")||"").split(":")[0],d=a.get(I);if(!d)return s("request",`No route found for host: ${I}`,u),new Response(`No proxy configured for ${I}`,{status:404});let wt=d.sourceHost,Ft=S.pathname;if(d.pathRewrites){for(let J of d.pathRewrites)if(S.pathname===J.from||S.pathname.startsWith(`${J.from}/`)){if(wt=J.to.startsWith("http")?new URL(J.to).host:J.to,J.stripPrefix!==!1)Ft=S.pathname.slice(J.from.length)||"/";s("request",`Path rewrite: ${S.pathname} → ${wt}${Ft}`,u);break}}let Gt=`http://${wt}${Ft}${S.search}`;try{let J=new Headers(B.headers);if(J.set("host",wt),d.changeOrigin)J.set("origin",`http://${d.sourceHost}`);J.set("x-forwarded-for","127.0.0.1"),J.set("x-forwarded-proto","https"),J.set("x-forwarded-host",I);let Ht=await fetch(Gt,{method:B.method,headers:J,body:B.body,redirect:"manual"}),Wu=new Headers(Ht.headers);if(d.cleanUrls&&S.pathname.endsWith(".html")){let Ui=S.pathname.replace(/\.html$/,"");return new Response(null,{status:301,headers:{Location:Ui}})}return new Response(Ht.body,{status:Ht.status,statusText:Ht.statusText,headers:Wu})}catch(J){return s("request",`Proxy error for ${I}: ${J}`,u),new Response(`Proxy Error: ${J}`,{status:502})}},error(B){return s("server",`Shared proxy server error: ${B}`,u),new Response(`Server Error: ${B.message}`,{status:500})}});Ii.add(w),s("proxies",`Shared HTTPS proxy listening on port ${y} for ${a.size} domains`,u)}catch(w){s("proxies",`Failed to start shared proxy: ${w}`,u),console.error("Failed to start shared HTTPS proxy:",w),E()}}else for(let a of r)try{let A=a.to||"rpx.localhost";s("proxy",`Starting proxy for ${A} with SSL config: ${!!e}`,a.verbose),await Ce({from:a.from||"localhost:5173",to:A,cleanUrls:a.cleanUrls||!1,https:a.https||!1,cleanup:a.cleanup||!1,vitePluginUsage:a.vitePluginUsage||!1,verbose:a.verbose||!1,_cachedSSLConfig:e,changeOrigin:a.changeOrigin||!1})}catch(A){s("proxies",`Failed to start proxy for ${a.to}: ${A}`,a.verbose),console.error(`Failed to start proxy for ${a.to}:`,A),E()}}function Ee(t){if(t?.vitePluginUsage||!t?.verbose)return;if(console.log(""),console.log(` ${Rt.green(Rt.bold("rpx"))} ${Rt.green(`v${vD}`)}`),console.log(` ${Rt.green("➜")} ${Rt.dim(t?.from??"")} ${Rt.dim("➜")} ${Rt.cyan(t?.ssl?`https://${t?.to}`:`http://${t?.to}`)}`),t?.listenPort!==(t?.ssl?443:80))console.log(` ${Rt.green("➜")} Listening on port ${t?.listenPort}`);if(t?.cleanUrls)console.log(` ${Rt.green("➜")} Clean URLs enabled`)}
|
|
123
|
-
export{Rt as a,vD as b,Zi as c,wi as d,Kr as e,Ci as f,y2 as g,w2 as h,kD as i,di as j,pt as k,he as l,qD as m,Vt as n,$l as o,Uu as p,B2 as q,N2 as r,xu as s,Ce as t,K2 as u,G2 as v};
|