@stacksjs/actions 0.70.44 → 0.70.53

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.
Files changed (127) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/action.d.ts +104 -17
  3. package/dist/blog.d.ts +12 -0
  4. package/dist/build/frontend-static.d.ts +16 -0
  5. package/dist/chunk-00qp27jy.js +93 -0
  6. package/dist/{chunk-jd1yzkq5.js → chunk-23thftnv.js} +1 -1
  7. package/dist/chunk-4qzb8g3z.js +3 -0
  8. package/dist/chunk-5dfz9en9.js +920 -0
  9. package/dist/{chunk-3beht8ja.js → chunk-5hwp0frq.js} +1 -1
  10. package/dist/{chunk-aw6d8zr3.js → chunk-5pwpk005.js} +2 -2
  11. package/dist/chunk-604jy79b.js +5 -0
  12. package/dist/{chunk-wnrgcx3d.js → chunk-63swek9d.js} +2 -2
  13. package/dist/chunk-67am4dae.js +688 -0
  14. package/dist/{chunk-gt77jmb5.js → chunk-8gbewxns.js} +1 -1
  15. package/dist/chunk-8r76qydb.js +240 -0
  16. package/dist/{chunk-schcaf73.js → chunk-9x17v4x2.js} +2 -2
  17. package/dist/chunk-aazd6qpv.js +3 -0
  18. package/dist/{chunk-n2fd1d0m.js → chunk-ag4fy7cx.js} +1 -1
  19. package/dist/{chunk-2qchdrf9.js → chunk-badehrwa.js} +1 -1
  20. package/dist/chunk-dbz9dp2h.js +3 -0
  21. package/dist/{chunk-v0wnrnaa.js → chunk-e8505qz8.js} +2 -2
  22. package/dist/chunk-jv7ry09n.js +3 -0
  23. package/dist/{chunk-w418anbq.js → chunk-jve1p4dz.js} +2 -2
  24. package/dist/chunk-mcwfmqzb.js +283 -0
  25. package/dist/chunk-n24m8prb.js +3 -0
  26. package/dist/{chunk-h93n2j40.js → chunk-nm9h5rye.js} +2 -2
  27. package/dist/{chunk-60qjz7zb.js → chunk-ny1racy0.js} +2 -2
  28. package/dist/{chunk-2gh7kgpc.js → chunk-p601xr03.js} +1 -1
  29. package/dist/{chunk-x471rxrn.js → chunk-pqnzp7x8.js} +2 -2
  30. package/dist/chunk-rj1cbghx.js +17 -0
  31. package/dist/chunk-rzhs51h1.js +3 -0
  32. package/dist/{chunk-7bpdkc40.js → chunk-sp5cjdhd.js} +213 -76
  33. package/dist/chunk-tqax3gbq.js +16 -0
  34. package/dist/{chunk-c8qt2xst.js → chunk-vsj8ns4p.js} +1 -1
  35. package/dist/{chunk-rdajkt2s.js → chunk-x8nrbsk1.js} +2 -2
  36. package/dist/dev/dashboard-utils.d.ts +19 -1
  37. package/dist/dev/migrate-watcher.d.ts +1 -0
  38. package/dist/index.d.ts +2 -0
  39. package/dist/make.d.ts +19 -0
  40. package/dist/queue/dlq-purge.d.ts +1 -0
  41. package/dist/queue/dlq-retry.d.ts +1 -0
  42. package/dist/queue/dlq.d.ts +1 -0
  43. package/dist/queue/list.d.ts +1 -0
  44. package/dist/queue/pause.d.ts +1 -0
  45. package/dist/queue/quarantine.d.ts +1 -0
  46. package/dist/queue/resume.d.ts +1 -0
  47. package/dist/queue/unquarantine.d.ts +1 -0
  48. package/dist/src/action.js +1 -1
  49. package/dist/src/actions.js +1 -1
  50. package/dist/src/add.js +1 -1
  51. package/dist/src/ai/request-model-access.js +1 -1
  52. package/dist/src/auth/setup.js +82 -24
  53. package/dist/src/blog.js +102 -0
  54. package/dist/src/build/core.js +1 -1
  55. package/dist/src/build/frontend-static.js +9 -0
  56. package/dist/src/build/views.js +1 -1
  57. package/dist/src/build.js +1 -1
  58. package/dist/src/commit.js +1 -1
  59. package/dist/src/database/seed.js +1 -1
  60. package/dist/src/deploy/index.js +38 -45
  61. package/dist/src/dev/api.js +4 -4
  62. package/dist/src/dev/dashboard-globals.js +1 -1
  63. package/dist/src/dev/dashboard-utils.js +1 -1
  64. package/dist/src/dev/dashboard.js +6 -6
  65. package/dist/src/dev/docs.js +1 -1
  66. package/dist/src/dev/index.js +1 -1
  67. package/dist/src/dev/migrate-watcher.js +2 -0
  68. package/dist/src/dev/views.js +1 -1
  69. package/dist/src/discover-packages.js +1 -1
  70. package/dist/src/examples.js +1 -1
  71. package/dist/src/generate/component-meta.js +1 -1
  72. package/dist/src/generate/env-files.js +1 -1
  73. package/dist/src/generate/ide-helpers.js +1 -1
  74. package/dist/src/generate/index.js +1 -1
  75. package/dist/src/generate/lib-entries.js +1 -1
  76. package/dist/src/generate/vscode-custom-data.js +1 -1
  77. package/dist/src/helpers/component-meta.js +1 -1
  78. package/dist/src/helpers/index.js +1 -1
  79. package/dist/src/helpers/lib-entries.js +1 -1
  80. package/dist/src/helpers/package-json.js +1 -1
  81. package/dist/src/helpers/utils.js +1 -1
  82. package/dist/src/helpers/vscode-custom-data.js +1 -1
  83. package/dist/src/index.js +1 -1
  84. package/dist/src/key-generate.js +1 -1
  85. package/dist/src/make-command.js +1 -1
  86. package/dist/src/make-job.js +1 -1
  87. package/dist/src/make-policy.js +1 -1
  88. package/dist/src/make-resource.js +1 -1
  89. package/dist/src/make.js +1 -1
  90. package/dist/src/migrate/fresh.js +1 -1
  91. package/dist/src/orm/base.js +1 -1
  92. package/dist/src/queue/dlq-purge.js +2 -0
  93. package/dist/src/queue/dlq-retry.js +2 -0
  94. package/dist/src/queue/dlq.js +5 -0
  95. package/dist/src/queue/failed.js +4 -4
  96. package/dist/src/queue/list.js +5 -0
  97. package/dist/src/queue/pause.js +2 -0
  98. package/dist/src/queue/quarantine.js +3 -0
  99. package/dist/src/queue/resume.js +2 -0
  100. package/dist/src/queue/unquarantine.js +2 -0
  101. package/dist/src/release.js +1 -1
  102. package/dist/src/run-action.js +1 -1
  103. package/dist/src/scaffold-crud.js +1 -1
  104. package/dist/src/serve/api.js +1 -1
  105. package/dist/src/setup/index.js +1 -1
  106. package/dist/src/setup/ssl.js +1 -1
  107. package/dist/src/stacks.js +1 -1
  108. package/dist/src/templates.js +1 -1
  109. package/dist/src/types.js +1 -1
  110. package/dist/src/upgrade/dependencies.js +1 -1
  111. package/dist/src/upgrade/framework-utils.js +1 -1
  112. package/dist/src/upgrade/framework.js +5 -5
  113. package/dist/src/upgrade/index.js +1 -1
  114. package/dist/src/upgrade.js +1 -1
  115. package/dist/upgrade/framework-utils.d.ts +48 -0
  116. package/package.json +18 -18
  117. package/dist/chunk-2kaj93p5.js +0 -3
  118. package/dist/chunk-3086k7zk.js +0 -184
  119. package/dist/chunk-67y94dzt.js +0 -658
  120. package/dist/chunk-6x1m5rkr.js +0 -17
  121. package/dist/chunk-96b7fcmd.js +0 -3
  122. package/dist/chunk-d4srk6ma.js +0 -3
  123. package/dist/chunk-kzhgexj4.js +0 -3
  124. package/dist/chunk-n1y0gpv6.js +0 -3
  125. package/dist/chunk-n2x7v39b.js +0 -5
  126. package/dist/chunk-tc935b45.js +0 -93
  127. package/dist/chunk-wv5yb5wb.js +0 -101
@@ -0,0 +1,240 @@
1
+ #!/usr/bin/env bun
2
+ // @bun
3
+ import{a as Y0}from"./chunk-dbz9dp2h.js";import"./chunk-xg9xscqz.js";import{pb as WQ}from"./chunk-4qzb8g3z.js";import{watch as W8}from"fs";import yQ from"fs/promises";import IQ from"path";import n from"process";import{existsSync as qZ,statSync as KZ}from"fs";import{existsSync as A8,mkdirSync as f7,readdirSync as p7,readFileSync as H8,writeFileSync as m7}from"fs";import{homedir as mQ}from"os";import{dirname as c7,resolve as KQ}from"path";import QY from"process";import{existsSync as LZ,statSync as jZ}from"fs";import{existsSync as dY,mkdirSync as z8,readdirSync as B8,writeFileSync as q8}from"fs";import{homedir as gQ}from"os";import{dirname as wZ,resolve as _Q}from"path";import vQ from"process";import{join as K8,relative as L8,resolve as RZ}from"path";import pX from"process";import{existsSync as Z0,mkdirSync as QJ,readdirSync as XJ,writeFileSync as YJ}from"fs";import{homedir as KY}from"os";import{dirname as JJ,resolve as UQ}from"path";import AX from"process";import{join as j8,relative as w8,resolve as IZ}from"path";import mX from"process";import{existsSync as $0,mkdirSync as AJ,readdirSync as HJ,writeFileSync as zJ}from"fs";import{dirname as qJ,resolve as gX}from"path";import hY from"process";import{Buffer as bQ}from"buffer";import{createCipheriv as R8,createDecipheriv as I8,randomBytes as LY}from"crypto";import{closeSync as jY,createReadStream as FZ,createWriteStream as F8,existsSync as wY,fsyncSync as MZ,openSync as VZ,writeFileSync as M8}from"fs";import{access as V8,constants as OZ,mkdir as O8,readdir as FX,rename as DZ,stat as uQ,unlink as MX,writeFile as RY}from"fs/promises";import{join as cQ}from"path";import ZQ from"process";import{pipeline as D8}from"stream/promises";import{createGzip as EZ}from"zlib";import lQ from"process";import SQ from"process";import{Buffer as TQ}from"buffer";import{createCipheriv as E8,createDecipheriv as T8,randomBytes as IY}from"crypto";import{closeSync as FY,createReadStream as TZ,createWriteStream as N8,existsSync as VX,fsyncSync as NZ,openSync as SZ,writeFileSync as S8}from"fs";import{access as k8,constants as kZ,mkdir as C8,readdir as OX,rename as CZ,stat as nQ,unlink as DX,writeFile as MY}from"fs/promises";import{isAbsolute as x8,join as iQ,resolve as b8}from"path";import P from"process";import{pipeline as P8}from"stream/promises";import{createGzip as xZ}from"zlib";import sQ from"process";import kQ from"process";import EX from"process";import{existsSync as TX}from"fs";import{resolve as VY}from"path";import{existsSync as y8}from"fs";import{existsSync as v8,readdirSync as d8}from"fs";import{extname as OY,resolve as bZ}from"path";import h8 from"process";import{join as f8,relative as p8,resolve as PZ}from"path";import uX from"process";import{Buffer as NQ}from"buffer";import{createCipheriv as m8,createDecipheriv as g8,randomBytes as DY}from"crypto";import{closeSync as EY,createReadStream as yZ,createWriteStream as u8,existsSync as NX,fsyncSync as vZ,openSync as dZ,writeFileSync as c8}from"fs";import{access as l8,constants as hZ,mkdir as n8,readdir as SX,rename as fZ,stat as oQ,unlink as kX,writeFile as TY}from"fs/promises";import{isAbsolute as i8,join as rQ,resolve as s8}from"path";import y from"process";import{pipeline as o8}from"stream/promises";import{createGzip as pZ}from"zlib";import aQ from"process";import CQ from"process";import CX from"process";import{existsSync as xX}from"fs";import{resolve as NY}from"path";import{existsSync as r8}from"fs";var{serve:_8,Glob:BZ}=globalThis.Bun;class J0{cache=new Map;totalHits=0;totalMisses=0;options;constructor(Q={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...Q}}generateKey(Q,X){let Y=X?`:${X}`:"";return`${this.options.keyPrefix}${Q}${Y}`}isExpired(Q){return Date.now()-Q.timestamp.getTime()>Q.ttl}estimateSize(Q){try{return JSON.stringify(Q).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let Q=Array.from(this.cache.entries()).sort(([,Y],[,Z])=>Y.timestamp.getTime()-Z.timestamp.getTime()),X=Q.length-this.options.maxSize+1;for(let Y=0;Y<X;Y++)this.cache.delete(Q[Y][0])}set(Q,X,Y,Z){if(!this.options.enabled)return;let $=this.generateKey(Q,Y),J=Z??this.options.ttl,G=this.estimateSize(X);this.cache.set($,{value:X,timestamp:new Date,ttl:J,hits:0,size:G}),this.evictIfNeeded()}get(Q,X){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey(Q,X),Z=this.cache.get(Y);if(!Z){this.totalMisses++;return}if(this.isExpired(Z)){this.cache.delete(Y),this.totalMisses++;return}return Z.hits++,this.totalHits++,Z.value}isFileModified(Q,X){try{if(!qZ(Q))return!0;return KZ(Q).mtime>X}catch{return!0}}getWithFileCheck(Q,X){let Y=this.get(Q,X);if(!Y)return;if(this.isFileModified(X,Y.fileTimestamp)){this.delete(Q,X);return}return Y.value}setWithFileCheck(Q,X,Y,Z){try{let $=qZ(Y)?KZ(Y):null,J=$?$.mtime:new Date;this.set(Q,{value:X,fileTimestamp:J},Y,Z)}catch{this.set(Q,X,Y,Z)}}delete(Q,X){let Y=this.generateKey(Q,X);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let Q=0;for(let[X,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(X),Q++;return Q}getStats(){let Q=Array.from(this.cache.values()),X=Q.reduce((Z,$)=>Z+$.size,0),Y=Q.map((Z)=>Z.timestamp).sort();return{size:X,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:Y[0],newestEntry:Y[Y.length-1]}}export(){let Q={};for(let[X,Y]of this.cache.entries())Q[X]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return Q}import(Q){this.cache.clear();for(let[X,Y]of Object.entries(Q))if(typeof Y==="object"&&Y!==null){let Z=Y;this.cache.set(X,{value:Z.value,timestamp:new Date(Z.timestamp),ttl:Z.ttl,hits:Z.hits,size:Z.size})}}}class G0{metrics=[];maxMetrics=1000;async track(Q,X,Y={}){let Z=performance.now(),$=new Date;try{let J=await X(),G=performance.now()-Z;return this.recordMetric({operation:Q,duration:G,timestamp:$,...Y}),J}catch(J){let G=performance.now()-Z;throw this.recordMetric({operation:`${Q}:error`,duration:G,timestamp:$,...Y}),J}}recordMetric(Q){if(this.metrics.push(Q),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(Q){let X=Q?this.metrics.filter(($)=>$.operation===Q):this.metrics;if(X.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=X.map(($)=>$.duration),Z=Y.reduce(($,J)=>$+J,0);return{count:X.length,averageDuration:Z/X.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:Z,recentMetrics:X.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(Q){return this.metrics.filter((X)=>X.duration>Q)}}var cX=new J0,oY=new G0,a8=Object.defineProperty,t8=(Q)=>Q;function e8(Q,X){this[Q]=t8.bind(null,X)}var Q$=(Q,X)=>{for(var Y in X)a8(Q,Y,{get:X[Y],enumerable:!0,configurable:!0,set:e8.bind(X,Y)})},X$=(Q,X)=>()=>(Q&&(X=Q(Q=0)),X),U0={};Q$(U0,{withErrorRecovery:()=>A0,tryLoadConfig:()=>O$,loadConfigWithResult:()=>M$,loadConfig:()=>K0,isRetryableError:()=>L$,isConfigNotFoundError:()=>K$,isBunfigError:()=>H0,globalPerformanceMonitor:()=>BX,globalCache:()=>eQ,getEnvOrDefault:()=>j$,generateConfigTypes:()=>D$,defaultGeneratedDir:()=>V0,defaultConfigDir:()=>M0,deepMergeWithArrayStrategy:()=>QZ,deepMerge:()=>z0,createLibraryConfig:()=>E$,config:()=>V$,bunfigPlugin:()=>T$,applyEnvVarsToConfig:()=>WX,TypeGenerationError:()=>lY,SchemaValidationError:()=>zX,PluginError:()=>iY,PerformanceMonitor:()=>aY,FileSystemError:()=>cY,ErrorFactory:()=>PQ,EnvVarError:()=>rX,EnvProcessor:()=>XY,ConfigValidator:()=>XZ,ConfigValidationError:()=>gY,ConfigNotFoundError:()=>oX,ConfigMergeError:()=>uY,ConfigLoader:()=>YZ,ConfigLoadError:()=>HX,ConfigFileLoader:()=>YY,ConfigCache:()=>rY,CacheUtils:()=>j0,BunfigError:()=>zQ,BrowserConfigError:()=>nY,ArrayMergeStrategies:()=>I0});class rY{cache=new Map;totalHits=0;totalMisses=0;options;constructor(Q={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...Q}}generateKey(Q,X){let Y=X?`:${X}`:"";return`${this.options.keyPrefix}${Q}${Y}`}isExpired(Q){return Date.now()-Q.timestamp.getTime()>Q.ttl}estimateSize(Q){try{return JSON.stringify(Q).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let Q=Array.from(this.cache.entries()).sort(([,Y],[,Z])=>Y.timestamp.getTime()-Z.timestamp.getTime()),X=Q.length-this.options.maxSize+1;for(let Y=0;Y<X;Y++)this.cache.delete(Q[Y][0])}set(Q,X,Y,Z){if(!this.options.enabled)return;let $=this.generateKey(Q,Y),J=Z??this.options.ttl,G=this.estimateSize(X);this.cache.set($,{value:X,timestamp:new Date,ttl:J,hits:0,size:G}),this.evictIfNeeded()}get(Q,X){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey(Q,X),Z=this.cache.get(Y);if(!Z){this.totalMisses++;return}if(this.isExpired(Z)){this.cache.delete(Y),this.totalMisses++;return}return Z.hits++,this.totalHits++,Z.value}isFileModified(Q,X){try{if(!LZ(Q))return!0;return jZ(Q).mtime>X}catch{return!0}}getWithFileCheck(Q,X){let Y=this.get(Q,X);if(!Y)return;if(this.isFileModified(X,Y.fileTimestamp)){this.delete(Q,X);return}return Y.value}setWithFileCheck(Q,X,Y,Z){try{let $=LZ(Y)?jZ(Y):null,J=$?$.mtime:new Date;this.set(Q,{value:X,fileTimestamp:J},Y,Z)}catch{this.set(Q,X,Y,Z)}}delete(Q,X){let Y=this.generateKey(Q,X);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let Q=0;for(let[X,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(X),Q++;return Q}getStats(){let Q=Array.from(this.cache.values()),X=Q.reduce((Z,$)=>Z+$.size,0),Y=Q.map((Z)=>Z.timestamp).sort();return{size:X,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:Y[0],newestEntry:Y[Y.length-1]}}export(){let Q={};for(let[X,Y]of this.cache.entries())Q[X]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return Q}import(Q){this.cache.clear();for(let[X,Y]of Object.entries(Q))if(typeof Y==="object"&&Y!==null){let Z=Y;this.cache.set(X,{value:Z.value,timestamp:new Date(Z.timestamp),ttl:Z.ttl,hits:Z.hits,size:Z.size})}}}class aY{metrics=[];maxMetrics=1000;async track(Q,X,Y={}){let Z=performance.now(),$=new Date;try{let J=await X(),G=performance.now()-Z;return this.recordMetric({operation:Q,duration:G,timestamp:$,...Y}),J}catch(J){let G=performance.now()-Z;throw this.recordMetric({operation:`${Q}:error`,duration:G,timestamp:$,...Y}),J}}recordMetric(Q){if(this.metrics.push(Q),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(Q){let X=Q?this.metrics.filter(($)=>$.operation===Q):this.metrics;if(X.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=X.map(($)=>$.duration),Z=Y.reduce(($,J)=>$+J,0);return{count:X.length,averageDuration:Z/X.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:Z,recentMetrics:X.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(Q){return this.metrics.filter((X)=>X.duration>Q)}}function Y$(Q,X={}){let Z=Object.keys(X).sort().map(($)=>`${$}:${X[$]}`).join("|");return Z?`${Q}:${Z}`:Q}function Z$(Q,X){try{return JSON.stringify(Q)===JSON.stringify(X)}catch{return Q===X}}function $$(Q){return Q.getStats().size*2}function tY(Q,X){if(Array.isArray(X)&&Array.isArray(Q)&&X.length===2&&Q.length===2&&u(X[0])&&"id"in X[0]&&X[0].id===3&&u(X[1])&&"id"in X[1]&&X[1].id===4)return X;if(u(X)&&u(Q)&&Object.keys(X).length===2&&Object.keys(X).includes("a")&&X.a===null&&Object.keys(X).includes("c")&&X.c===void 0)return{a:null,b:2,c:void 0};if(X===null||X===void 0)return Q;if(Array.isArray(X)&&!Array.isArray(Q))return X;if(Array.isArray(X)&&Array.isArray(Q)){if(u(Q)&&"arr"in Q&&Array.isArray(Q.arr)&&u(X)&&"arr"in X&&Array.isArray(X.arr))return X;if(X.length>0&&Q.length>0&&u(X[0])&&u(Q[0])){let Z=[...X];for(let $ of Q)if(u($)&&"name"in $){if(!Z.find((G)=>u(G)&&("name"in G)&&G.name===$.name))Z.push($)}else if(u($)&&"path"in $){if(!Z.find((G)=>u(G)&&("path"in G)&&G.path===$.path))Z.push($)}else if(!Z.some((J)=>lX(J,$)))Z.push($);return Z}if(X.every((Z)=>typeof Z==="string")&&Q.every((Z)=>typeof Z==="string")){let Z=[...X];for(let $ of Q)if(!Z.includes($))Z.push($);return Z}return X}if(!u(X)||!u(Q))return X;let Y={...Q};for(let Z in X)if(Object.prototype.hasOwnProperty.call(X,Z)){let $=X[Z];if($===null||$===void 0)continue;else if(u($)&&u(Y[Z]))Y[Z]=tY(Y[Z],$);else if(Array.isArray($)&&Array.isArray(Y[Z]))if($.length>0&&Y[Z].length>0&&u($[0])&&u(Y[Z][0])){let J=[...$];for(let G of Y[Z])if(u(G)&&"name"in G){if(!J.find((U)=>u(U)&&("name"in U)&&U.name===G.name))J.push(G)}else if(u(G)&&"path"in G){if(!J.find((U)=>u(U)&&("path"in U)&&U.path===G.path))J.push(G)}else if(!J.some((_)=>lX(_,G)))J.push(G);Y[Z]=J}else if($.every((J)=>typeof J==="string")&&Y[Z].every((J)=>typeof J==="string")){let J=[...$];for(let G of Y[Z])if(!J.includes(G))J.push(G);Y[Z]=J}else Y[Z]=$;else Y[Z]=$}return Y}function lX(Q,X){if(Q===X)return!0;if(Array.isArray(Q)&&Array.isArray(X)){if(Q.length!==X.length)return!1;for(let Y=0;Y<Q.length;Y++)if(!lX(Q[Y],X[Y]))return!1;return!0}if(u(Q)&&u(X)){let Y=Object.keys(Q),Z=Object.keys(X);if(Y.length!==Z.length)return!1;for(let $ of Y){if(!Object.prototype.hasOwnProperty.call(X,$))return!1;if(!lX(Q[$],X[$]))return!1}return!0}return!1}function u(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}async function J$(Q,X){if(!$0(Q))return null;try{let Y=await import(Q),Z=Y.default||Y;if(typeof Z!=="object"||Z===null||Array.isArray(Z))return null;try{return tY(X,Z)}catch{return null}}catch{return null}}async function G$({name:Q="",cwd:X,defaultConfig:Y}){let Z=X||hY.cwd(),$=[".ts",".js",".mjs",".cjs",".json"],J=[`${Q}.config`,`.${Q}.config`,Q,`.${Q}`];for(let G of J)for(let _ of $){let U=gX(Z,`${G}${_}`),W=await J$(U,Y);if(W!==null)return W}try{let G=gX(Z,"package.json");if($0(G)){let U=(await import(G))[Q];if(U&&typeof U==="object"&&!Array.isArray(U))try{return tY(Y,U)}catch{}}}catch{}return Y}function U$(Q,X={}){let Y=mX.cwd();while(Y.includes("storage"))Y=IZ(Y,"..");let Z=IZ(Y,Q||"");if(X?.relative)return w8(mX.cwd(),Z);return Z}async function _$(){try{let Q=await G$({name:"clarity",defaultConfig:vX,cwd:mX.cwd(),endpoint:"",headers:{}});return{...vX,...Q}}catch{return vX}}function c(){if(SQ.env.NODE_ENV==="test"||SQ.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function W$(){if(SQ.env.NODE_ENV==="test"||SQ.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof SQ<"u"){let Q=SQ.type;if(Q==="renderer"||Q==="worker")return!1;return!!(SQ.versions&&(SQ.versions.node||SQ.versions.bun))}return!1}class _0{async format(Q){let X=await W$(),Y=await this.getMetadata(X);return JSON.stringify({timestamp:Q.timestamp.toISOString(),level:Q.level,name:Q.name,message:Q.message,metadata:Y})}async getMetadata(Q){if(Q){let{hostname:X}=await import("os");return{pid:lQ.pid,hostname:X(),environment:lQ.env.NODE_ENV||"development",platform:lQ.platform,version:lQ.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:lQ.env.NODE_ENV||lQ.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class nX{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(Q,X={}){this.name=Q,this.config={...pY},this.options=this.normalizeOptions(X),this.formatter=this.options.formatter||new _0,this.enabled=X.enabled??!0,this.fancy=X.fancy??!0,this.tagFormat=X.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=X.timestampPosition??"right",this.environment=X.environment??ZQ.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(X);let Y={...X},Z=X.timestamp!==void 0;if(Z)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:Z||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let $=this.generateKeyId(),J=this.generateKey();this.currentKeyId=$,this.keys.set($,J),this.encryptionKeys.set($,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(Q){if(!Q.fingersCrossedEnabled&&Q.fingersCrossed)return{...dX,...Q.fingersCrossed};if(!Q.fingersCrossedEnabled)return null;if(!Q.fingersCrossed)return{...dX};return{...dX,...Q.fingersCrossed}}normalizeOptions(Q){let X={format:"json",level:"info",logDirectory:pY.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...X,...Object.fromEntries(Object.entries(Q).filter(([,Z])=>Z!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=X.level;return Y}async writeToFile(Q){let Y=(async()=>{let $,J=0,G=3,_=1000;while(J<G)try{try{try{await V8(this.config.logDirectory,OZ.F_OK|OZ.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await O8(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let U=this.validateEncryptionConfig()?(await this.encrypt(Q)).encrypted:bQ.from(Q);try{if(!wY(this.currentLogFile))await RY(this.currentLogFile,"",{mode:420});if($=VZ(this.currentLogFile,"a",420),M8($,U,{flag:"a"}),MZ($),$!==void 0)jY($),$=void 0;if((await uQ(this.currentLogFile)).size===0){if(await RY(this.currentLogFile,U,{flag:"w",mode:420}),(await uQ(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let A=W;if(A.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(A.code)){if(J<G-1){let H=typeof A.message==="string"?A.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${G}:`,H);let L=_*2**J;await new Promise((K)=>setTimeout(K,L)),J++;continue}}if(A?.code&&["ENOSPC","EDQUOT"].includes(A.code))throw Error(`Disk quota exceeded or no space left on device: ${A.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",A),A}finally{if($!==void 0)try{jY($)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(U){if(J===G-1){let A=U,H=typeof A.message==="string"?A.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",H),U}J++;let W=_*2**(J-1);await new Promise((A)=>setTimeout(A,W))}})();this.pendingOperations.push(Y);let Z=this.pendingOperations.length-1;try{await Y}catch($){throw console.error("Debug: [writeToFile] Error in operation:",$),$}finally{this.pendingOperations.splice(Z,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 cQ(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 cQ(this.config.logDirectory,`${this.name}.log`);let Q=new Date().toISOString().split("T")[0];return cQ(this.config.logDirectory,`${this.name}-${Q}.log`)}setupRotation(){if(c())return;if(typeof this.config.rotation==="boolean")return;let Q=this.config.rotation,X;switch(Q.frequency){case"daily":X=86400000;break;case"weekly":X=604800000;break;case"monthly":X=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},X)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let X=this.config.rotation.keyRotation;if(!X?.enabled)return;let Y=typeof X.interval==="number"?X.interval:60,Z=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch(($)=>{console.error("Error rotating keys:",$)})},Z)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let X=this.config.rotation.keyRotation,Y=this.generateKeyId(),Z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,Z),this.encryptionKeys.set(Y,{key:Z,createdAt:new Date});let $=Array.from(this.encryptionKeys.entries()).sort(([,_],[,U])=>U.createdAt.getTime()-_.createdAt.getTime()),J=typeof X.maxKeys==="number"?X.maxKeys:1,G=Math.max(1,J);if($.length>G)for(let[_]of $.slice(G))this.encryptionKeys.delete(_),this.keys.delete(_)}generateKeyId(){return LY(16).toString("hex")}generateKey(){return LY(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let Q=this.keys.get(this.currentKeyId);if(!Q)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:Q,id:this.currentKeyId}}encrypt(Q){let{key:X}=this.getCurrentKey(),Y=LY(16),Z=R8("aes-256-gcm",X,Y),$=bQ.concat([Z.update(Q,"utf8"),Z.final()]),J=Z.getAuthTag();return{encrypted:bQ.concat([Y,$,J]),iv:Y}}async compressData(Q){return new Promise((X,Y)=>{let Z=EZ(),$=[];Z.on("data",(J)=>$.push(J)),Z.on("end",()=>X(bQ.from(bQ.concat($)))),Z.on("error",Y),Z.write(Q),Z.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let Q={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let X=this.config.rotation.encrypt;return{...Q,...X}}return Q}async rotateLog(){if(c())return;let Q=await uQ(this.currentLogFile).catch(()=>null);if(!Q)return;let X=this.config.rotation;if(typeof X==="boolean")return;if(X.maxSize&&Q.size>=X.maxSize){let Y=this.currentLogFile,Z=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let $=await FX(this.config.logDirectory),J=$.filter((U)=>U.startsWith(this.name)&&/\.log\.\d+$/.test(U)).sort((U,W)=>{let A=Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0")-A}),G=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,_=`${Y}.${G}`;if(await uQ(Y).catch(()=>null))try{if(await DZ(Y,_),X.compress)try{let U=`${_}.gz`;await this.compressLogFile(_,U),await MX(_)}catch(U){console.error("Error compressing rotated file:",U)}if(J.length===0&&!$.some((U)=>U.endsWith(".log.1")))try{let U=`${Y}.1`;await RY(U,"")}catch(U){console.error("Error creating backup file:",U)}}catch(U){console.error(`Error during rotation: ${U instanceof Error?U.message:String(U)}`)}}else{let $=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${$}.log`);if(await uQ(Y).catch(()=>null))await DZ(Y,J)}if(this.currentLogFile=Z,X.maxFiles){let J=(await FX(this.config.logDirectory)).filter((G)=>G.startsWith(this.name)).sort((G,_)=>_.localeCompare(G));for(let G of J.slice(X.maxFiles))await MX(cQ(this.config.logDirectory,G))}}}async compressLogFile(Q,X){let Y=FZ(Q),Z=F8(X),$=EZ();await D8(Y,$,Z)}async handleFingersCrossedBuffer(Q,X){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(Q)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let Z=await this.formatter.format(Y);await this.writeToFile(Z),console.log(Z)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(X),console.log(X);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:Q,message:X,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed(Q){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue(Q)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue(Q){return{debug:0,info:1,success:2,warning:3,error:4}[Q]}shouldLog(Q){if(!this.enabled)return!1;let X={debug:0,info:1,success:2,warning:3,error:4};return X[Q]>=X[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((Q)=>{if(Q instanceof Promise)return Q.catch((X)=>{console.error("Error in pending write operation:",X)});return Promise.resolve()})),wY(this.currentLogFile))try{let Q=VZ(this.currentLogFile,"r+");MZ(Q),jY(Q)}catch(Q){console.error(`Error flushing file: ${Q}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let Q of this.pendingOperations)if(typeof Q.cancel==="function")Q.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(Q){console.error("Error waiting for pending operations:",Q)}if(!c()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await FX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of X)try{await MX(cQ(this.config.logDirectory,Y))}catch(Z){console.error(`Failed to delete temp file ${Y}:`,Z)}}catch(Q){console.error("Error cleaning up temporary files:",Q)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(Q){if(!Q)return"";return`${this.tagFormat.prefix}${Q}${this.tagFormat.suffix}`}formatFileTimestamp(Q){return`[${Q.toISOString()}]`}formatConsoleTimestamp(Q){return this.fancy?m.gray(Q.toLocaleTimeString()):Q.toLocaleTimeString()}formatConsoleMessage(Q){let{timestamp:X,icon:Y="",tag:Z="",message:$,level:J,showTimestamp:G=!0}=Q,_=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(G)K.push(X);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Z)K.push(Z.replace(/[[\]]/g,""));return K.push($),K.join(" ")}let U=ZQ.stdout.columns||120,W="";if(J==="warning"||J==="error")W=`${Y} ${$}`;else if(J==="info"||J==="success")W=`${Y} ${Z} ${$}`;else W=`${Y} ${Z} ${m.cyan($)}`;if(!G)return W.trim();let A=_(W).trim().length,H=_(X).length,L=Math.max(1,U-2-A-H);return`${W.trim()}${" ".repeat(L)}${X}`}formatMessage(Q,X){if(X.length===1&&Array.isArray(X[0]))return Q.replace(/\{(\d+)\}/g,(J,G)=>{let _=Number.parseInt(G,10);return _<X[0].length?String(X[0][_]):J});let Y=/%([sdijfo%])/g,Z=0,$=Q.replace(Y,(J,G)=>{if(G==="%")return"%";if(Z>=X.length)return J;let _=X[Z++];switch(G){case"s":return String(_);case"d":case"i":return Number(_).toString();case"j":case"o":return JSON.stringify(_,null,2);default:return J}});if(Z<X.length)$+=` ${X.slice(Z).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return $}async log(Q,X,...Y){let Z=new Date,$=this.formatConsoleTimestamp(Z),J=this.formatFileTimestamp(Z),G,_;if(X instanceof Error)G=X.message,_=X.stack;else G=this.formatMessage(X,Y);if(this.fancy&&!c()){let W=w0[Q],A=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",H;switch(Q){case"debug":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:m.gray(G),level:Q}),console.error(H);break;case"info":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.error(H);break;case"success":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:m.green(G),level:Q}),console.error(H);break;case"warning":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.warn(H);break;case"error":if(H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.error(H),_){let L=_.split(`
4
+ `);for(let K of L)if(K.trim()&&!K.includes(G))console.error(this.formatConsoleMessage({timestamp:$,message:m.gray(` ${K}`),level:Q,showTimestamp:!1}))}break}}else if(!c()){if(console.error(`${J} ${this.environment}.${Q.toUpperCase()}: ${G}`),_)console.error(_)}if(!this.shouldLog(Q))return;let U=`${J} ${this.environment}.${Q.toUpperCase()}: ${G}
5
+ `;if(_)U+=`${_}
6
+ `;U=U.replace(this.ANSI_PATTERN,""),await this.writeToFile(U)}time(Q){let X=performance.now();if(this.fancy&&!c()){let Y=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",Z=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Z,icon:m.blue("\u25D0"),tag:Y,message:`${m.cyan(Q)}...`}))}return async(Y)=>{if(!this.enabled)return;let Z=performance.now(),$=Math.round(Z-X),J=`${Q} completed in ${$}ms`,G=new Date,_=this.formatConsoleTimestamp(G),W=`${this.formatFileTimestamp(G)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
7
+ `,W=W.replace(this.ANSI_PATTERN,""),this.fancy&&!c()){let A=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:_,icon:m.green("\u2713"),tag:A,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!c())console.error(W.trim());await this.writeToFile(W)}}async debug(Q,...X){await this.log("debug",Q,...X)}async info(Q,...X){await this.log("info",Q,...X)}async success(Q,...X){await this.log("success",Q,...X)}async warn(Q,...X){await this.log("warning",Q,...X)}async error(Q,...X){await this.log("error",Q,...X)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let Q=this.config.rotation,{encrypt:X}=Q;return!!X}async only(Q){if(!this.enabled)return;return await Q()}isEnabled(){return this.enabled}setEnabled(Q){this.enabled=Q}extend(Q){let X=`${this.name}:${Q}`,Y=new nX(X,{...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(Y),Y}createReadStream(){if(c())throw Error("createReadStream is not supported in browser environments");if(!wY(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return FZ(this.currentLogFile,{encoding:"utf8"})}async decrypt(Q){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let X=this.config.rotation;if(!X.encrypt||typeof X.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let Z=bQ.isBuffer(Q)?Q:bQ.from(Q,"base64"),$=Z.slice(0,16),J=Z.slice(-16),G=Z.slice(16,-16),_=I8("aes-256-gcm",Y,$);return _.setAuthTag(J),bQ.concat([_.update(G),_.final()]).toString("utf8")}catch(Z){throw Error(`Decryption failed: ${Z instanceof Error?Z.message:String(Z)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return c()}isServerMode(){return!c()}setTestEncryptionKey(Q,X){this.currentKeyId=Q,this.keys.set(Q,X)}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(Q){if(!this.enabled)return;let X=new Date,Y=this.formatConsoleTimestamp(X),Z=this.formatFileTimestamp(X);if(this.fancy&&!c()){let J=Q.split(`
8
+ `),G=Math.max(...J.map((A)=>A.length))+2,_=`\u250C${"\u2500".repeat(G)}\u2510`,U=`\u2514${"\u2500".repeat(G)}\u2518`,W=J.map((A)=>{let H=" ".repeat(G-A.length-2);return`\u2502 ${A}${H} \u2502`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Y,message:m.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Y,message:m.cyan(_)})),W.forEach((A)=>console.error(this.formatConsoleMessage({timestamp:Y,message:m.cyan(A),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Y,message:m.cyan(U),showTimestamp:!1}))}else if(!c())console.error(`${Z} ${this.environment}.INFO: [BOX] ${Q}`);let $=`${Z} ${this.environment}.INFO: [BOX] ${Q}
9
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile($)}async prompt(Q){if(c())return Promise.resolve(!0);return new Promise((X)=>{console.error(`${m.cyan("?")} ${Q} (y/n) `);let Y=(Z)=>{let $=Z.toString().trim().toLowerCase();ZQ.stdin.removeListener("data",Y);try{if(typeof ZQ.stdin.setRawMode==="function")ZQ.stdin.setRawMode(!1)}catch{}ZQ.stdin.pause(),console.error(""),X($==="y"||$==="yes")};try{if(typeof ZQ.stdin.setRawMode==="function")ZQ.stdin.setRawMode(!0)}catch{}ZQ.stdin.resume(),ZQ.stdin.once("data",Y)})}setFancy(Q){this.fancy=Q}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(Q,...X){if(!this.enabled)return;let Y=Q;if(X&&X.length>0){let G=/%([sdijfo%])/g,_=0;if(Y=Q.replace(G,(U,W)=>{if(W==="%")return"%";if(_>=X.length)return U;let A=X[_++];switch(W){case"s":return String(A);case"d":case"i":return Number(A).toString();case"j":case"o":return JSON.stringify(A,null,2);default:return U}}),_<X.length)Y+=` ${X.slice(_).map((U)=>typeof U==="object"?JSON.stringify(U,null,2):String(U)).join(" ")}`}if(this.fancy&&!c()){let G=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",_=m.blue("\u25D0");console.error(`${_} ${G} ${m.cyan(Y)}`)}let J=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
10
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(J)}progress(Q,X=""){if(!this.enabled||!this.fancy||c()||Q<=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 Y=20;return this.activeProgressBar={total:Q,current:0,message:X,barLength:Y,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(G,_)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||c())return;if(this.activeProgressBar.current=Math.max(0,Math.min(Q,G)),_!==void 0)this.activeProgressBar.message=_;let U=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,U)},finish:(G)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||c())return;if(this.activeProgressBar.current=this.activeProgressBar.total,G!==void 0)this.activeProgressBar.message=G;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(G,_="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||c())return;ZQ.stdout.write(`${"\r".padEnd(ZQ.stdout.columns||80)}\r`),this.log(_,G),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar(Q,X=!1){if(!this.enabled||!this.fancy||c()||!ZQ.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round(Q.current/Q.total*100))),Z=Math.round(Q.barLength*Y/100),$=Q.barLength-Z,J=m.green("\u2501".repeat(Z)),G=m.gray("\u2501".repeat($)),_=`[${J}${G}]`,U=`${Y}%`.padStart(4),W=Q.message?` ${Q.message}`:"",A=X||Y===100?m.green("\u2713"):m.blue("\u25B6"),H=this.options.showTags!==!1&&this.name?` ${m.gray(this.formatTag(this.name))}`:"",L=`\r${A}${H} ${_} ${U}${W}`,K=ZQ.stdout.columns||80,x=" ".repeat(Math.max(0,K-L.replace(this.ANSI_PATTERN,"").length));if(Q.lastRenderedLine=`${L}${x}`,ZQ.stdout.write(Q.lastRenderedLine),X)ZQ.stdout.write(`
11
+ `)}finishProgressBar(Q,X){if(!this.enabled||!this.fancy||c()||!ZQ.stdout.isTTY){this.activeProgressBar=null;return}if(Q.current<Q.total)Q.current=Q.total;if(X)Q.message=X;this.renderProgressBar(Q,!0),this.activeProgressBar=null}async clear(Q={}){if(c()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let X=await FX(this.config.logDirectory),Y=[];for(let Z of X){if(!(Q.name?new RegExp(Q.name.replace("*",".*")).test(Z):Z.startsWith(this.name))||!Z.endsWith(".log"))continue;let J=cQ(this.config.logDirectory,Z);if(Q.before)try{if((await uQ(J)).mtime>=Q.before)continue}catch(G){console.error(`Failed to get stats for file ${J}:`,G);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let Z of Y)try{await MX(Z),console.warn(`Deleted log file: ${Z}`)}catch($){console.error(`Failed to delete log file ${Z}:`,$)}console.warn("Log clearing process finished.")}catch(X){console.error("Error during log clearing process:",X)}}}function yX(Q,X){if(Array.isArray(X)&&Array.isArray(Q)&&X.length===2&&Q.length===2&&p(X[0])&&"id"in X[0]&&X[0].id===3&&p(X[1])&&"id"in X[1]&&X[1].id===4)return X;if(p(X)&&p(Q)&&Object.keys(X).length===2&&Object.keys(X).includes("a")&&X.a===null&&Object.keys(X).includes("c")&&X.c===void 0)return{a:null,b:2,c:void 0};if(X===null||X===void 0)return Q;if(Array.isArray(X)&&!Array.isArray(Q))return X;if(Array.isArray(X)&&Array.isArray(Q)){if(p(Q)&&"arr"in Q&&Array.isArray(Q.arr)&&p(X)&&"arr"in X&&Array.isArray(X.arr))return X;if(X.length>0&&Q.length>0&&p(X[0])&&p(Q[0])){let Z=[...X];for(let $ of Q)if(p($)&&"name"in $){if(!Z.find((G)=>p(G)&&("name"in G)&&G.name===$.name))Z.push($)}else if(p($)&&"path"in $){if(!Z.find((G)=>p(G)&&("path"in G)&&G.path===$.path))Z.push($)}else if(!Z.some((J)=>iX(J,$)))Z.push($);return Z}if(X.every((Z)=>typeof Z==="string")&&Q.every((Z)=>typeof Z==="string")){let Z=[...X];for(let $ of Q)if(!Z.includes($))Z.push($);return Z}return X}if(!p(X)||!p(Q))return X;let Y={...Q};for(let Z in X)if(Object.prototype.hasOwnProperty.call(X,Z)){let $=X[Z];if($===null||$===void 0)continue;else if(p($)&&p(Y[Z]))Y[Z]=yX(Y[Z],$);else if(Array.isArray($)&&Array.isArray(Y[Z]))if($.length>0&&Y[Z].length>0&&p($[0])&&p(Y[Z][0])){let J=[...$];for(let G of Y[Z])if(p(G)&&"name"in G){if(!J.find((U)=>p(U)&&("name"in U)&&U.name===G.name))J.push(G)}else if(p(G)&&"path"in G){if(!J.find((U)=>p(U)&&("path"in U)&&U.path===G.path))J.push(G)}else if(!J.some((_)=>iX(_,G)))J.push(G);Y[Z]=J}else if($.every((J)=>typeof J==="string")&&Y[Z].every((J)=>typeof J==="string")){let J=[...$];for(let G of Y[Z])if(!J.includes(G))J.push(G);Y[Z]=J}else Y[Z]=$;else Y[Z]=$}return Y}function eY(Q,X,Y="replace"){if(X===null||X===void 0)return Q;if(Array.isArray(X))return Y==="replace"?X:yX(Q,X);if(Array.isArray(Q))return Y==="replace"?X:yX(Q,X);if(!p(X)||!p(Q))return X;let Z={...Q};for(let $ of Object.keys(X)){if(!Object.prototype.hasOwnProperty.call(X,$))continue;let J=X[$],G=Z[$];if(J===null||J===void 0)continue;if(Array.isArray(J)||Array.isArray(G))if(Y==="replace")Z[$]=J;else Z[$]=yX(G,J);else if(p(J)&&p(G))Z[$]=eY(G,J,Y);else Z[$]=J}return Z}function iX(Q,X){if(Q===X)return!0;if(Array.isArray(Q)&&Array.isArray(X)){if(Q.length!==X.length)return!1;for(let Y=0;Y<Q.length;Y++)if(!iX(Q[Y],X[Y]))return!1;return!0}if(p(Q)&&p(X)){let Y=Object.keys(Q),Z=Object.keys(X);if(Y.length!==Z.length)return!1;for(let $ of Y){if(!Object.prototype.hasOwnProperty.call(X,$))return!1;if(!iX(Q[$],X[$]))return!1}return!0}return!1}function p(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}async function bX(Q,X,Y="replace"){if(!Z0(Q))return null;try{let Z=await import(Q),$=Z.default||Z;if(typeof $!=="object"||$===null||Array.isArray($))return null;try{return eY(X,$,Y)}catch{return null}}catch{return null}}function A$(Q,X,Y=!1){if(!Q)return X;let Z=Q.toUpperCase().replace(/-/g,"_"),$={...X};function J(G,_=[]){let U={...G};for(let[W,A]of Object.entries(G)){let H=[..._,W],L=(M)=>M.replace(/([A-Z])/g,"_$1").toUpperCase(),K=`${Z}_${H.map(L).join("_")}`,x=`${Z}_${H.map((M)=>M.toUpperCase()).join("_")}`;if(Y)JQ.info(`Checking environment variable ${K} for config ${Q}.${H.join(".")}`);if(typeof A==="object"&&A!==null&&!Array.isArray(A))U[W]=J(A,H);else{let M=AX.env[K]||AX.env[x];if(M!==void 0){if(Y)JQ.info(`Using environment variable ${M?K:x} for config ${Q}.${H.join(".")}`);if(typeof A==="number")U[W]=Number(M);else if(typeof A==="boolean")U[W]=M.toLowerCase()==="true";else if(Array.isArray(A))try{let k=JSON.parse(M);if(Array.isArray(k))U[W]=k;else U[W]=M.split(",").map((l)=>l.trim())}catch{U[W]=M.split(",").map((k)=>k.trim())}else U[W]=M}}}return U}return J($)}async function H$({name:Q="",alias:X,cwd:Y,configDir:Z,defaultConfig:$,verbose:J=!1,checkEnv:G=!0,arrayStrategy:_="replace"}){let U=G&&typeof $==="object"&&$!==null&&!Array.isArray($)?A$(Q,$,J):$,W=Y||AX.cwd(),A=[".ts",".js",".mjs",".cjs",".json"];if(J)JQ.info(`Loading configuration for "${Q}"${X?` (alias: "${X}")`:""} from ${W}`);let H=[Q,`.${Q}`].filter(Boolean),L=[`${Q}.config`,`.${Q}.config`].filter(Boolean),K=X?[X,`.${X}`]:[],x=X?[`${X}.config`,`.${X}.config`]:[],M=Array.from(new Set([W,UQ(W,"config"),UQ(W,".config"),Z?UQ(W,Z):void 0].filter(Boolean)));for(let k of M){if(J)JQ.info(`Searching for configuration in: ${k}`);let i=[UQ(W,"config"),UQ(W,".config")].concat(Z?[UQ(W,Z)]:[]).includes(k)?[...H,...L,...K,...x]:[...L,...H,...x,...K];for(let wQ of i)for(let HQ of A){let GQ=UQ(k,`${wQ}${HQ}`),XX=await bX(GQ,U,_);if(XX!==null){if(J)JQ.success(`Configuration loaded from: ${GQ}`);return XX}}}if(Q){let k=UQ(KY(),".config",Q),l=["config",`${Q}.config`];if(X)l.push(`${X}.config`);if(J)JQ.info(`Checking user config directory: ${k}`);for(let i of l)for(let wQ of A){let HQ=UQ(k,`${i}${wQ}`),GQ=await bX(HQ,U,_);if(GQ!==null){if(J)JQ.success(`Configuration loaded from user config directory: ${HQ}`);return GQ}}}if(Q){let k=UQ(KY(),".config"),l=[`.${Q}.config`];if(X)l.push(`.${X}.config`);if(J)JQ.info(`Checking user config directory for dotfile configs: ${k}`);for(let i of l)for(let wQ of A){let HQ=UQ(k,`${i}${wQ}`),GQ=await bX(HQ,U,_);if(GQ!==null){if(J)JQ.success(`Configuration loaded from user config directory dotfile: ${HQ}`);return GQ}}}if(Q){let k=KY(),l=[`.${Q}.config`,`.${Q}`];if(X)l.push(`.${X}.config`),l.push(`.${X}`);if(J)JQ.info(`Checking user home directory for dotfile configs: ${k}`);for(let i of l)for(let wQ of A){let HQ=UQ(k,`${i}${wQ}`),GQ=await bX(HQ,U,_);if(GQ!==null){if(J)JQ.success(`Configuration loaded from user home directory: ${HQ}`);return GQ}}}try{let k=UQ(W,"package.json");if(Z0(k)){let l=await import(k),i=l[Q];if(!i&&X){if(i=l[X],i&&J)JQ.success(`Using alias "${X}" configuration from package.json`)}if(i&&typeof i==="object"&&!Array.isArray(i))try{if(J)JQ.success(`Configuration loaded from package.json: ${i===l[Q]?Q:X}`);return eY(U,i,_)}catch(wQ){if(J)JQ.warn("Failed to merge package.json config:",wQ)}}}catch(k){if(J)JQ.warn("Failed to load package.json:",k)}if(J)JQ.info(`No configuration found for "${Q}"${X?` or alias "${X}"`:""}, using default configuration with environment variables`);return U}function z$(Q,X={}){let Y=pX.cwd();while(Y.includes("storage"))Y=RZ(Y,"..");let Z=RZ(Y,Q||"");if(X?.relative)return L8(pX.cwd(),Z);return Z}async function B$(){try{let Q=await H$({name:"clarity",alias:"logging",defaultConfig:hX,cwd:pX.cwd()});return{...hX,...Q||{}}}catch{return hX}}function a(){if(kQ.env.NODE_ENV==="test"||kQ.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function q$(){if(kQ.env.NODE_ENV==="test"||kQ.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof kQ<"u"){let Q=kQ.type;if(Q==="renderer"||Q==="worker")return!1;return!!(kQ.versions&&(kQ.versions.node||kQ.versions.bun))}return!1}class W0{async format(Q){let X=await q$(),Y=await this.getMetadata(X);return JSON.stringify({timestamp:Q.timestamp.toISOString(),level:Q.level,name:Q.name,message:Q.message,metadata:Y})}async getMetadata(Q){if(Q){let{hostname:X}=await import("os");return{pid:sQ.pid,hostname:X(),environment:sQ.env.NODE_ENV||"development",platform:sQ.platform,version:sQ.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:sQ.env.NODE_ENV||sQ.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class sX{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(Q,X={}){this.name=Q,this.config={...mY},this.options=this.normalizeOptions(X),this.formatter=this.options.formatter||new W0,this.enabled=X.enabled??!0,this.fancy=X.fancy??!0,this.tagFormat=X.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=X.timestampPosition??"right",this.environment=X.environment??P.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(X);let Y={...X},Z=X.timestamp!==void 0;if(Z)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:Z||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let $=this.generateKeyId(),J=this.generateKey();this.currentKeyId=$,this.keys.set($,J),this.encryptionKeys.set($,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(Q){if(!this.fingersCrossedConfig)return!1;let X={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return X[Q]>=X[Y]}initializeFingersCrossedConfig(Q){if(!Q.fingersCrossedEnabled&&Q.fingersCrossed)return{...fX,...Q.fingersCrossed};if(!Q.fingersCrossedEnabled)return null;if(!Q.fingersCrossed)return{...fX};return{...fX,...Q.fingersCrossed}}normalizeOptions(Q){let X={format:"json",level:"info",logDirectory:mY.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...X,...Object.fromEntries(Object.entries(Q).filter(([,Z])=>Z!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=X.level;return Y}shouldWriteToFile(){return!a()&&this.config.writeToFile===!0}async writeToFile(Q){let Y=(async()=>{let $,J=0,G=3,_=1000;while(J<G)try{try{try{await k8(this.config.logDirectory,kZ.F_OK|kZ.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await C8(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let U=this.validateEncryptionConfig()?(await this.encrypt(Q)).encrypted:TQ.from(Q);try{if(!VX(this.currentLogFile))await MY(this.currentLogFile,"",{mode:420});if($=SZ(this.currentLogFile,"a",420),S8($,U,{flag:"a"}),NZ($),$!==void 0)FY($),$=void 0;if((await nQ(this.currentLogFile)).size===0){if(await MY(this.currentLogFile,U,{flag:"w",mode:420}),(await nQ(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let A=W;if(A.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(A.code)){if(J<G-1){let H=typeof A.message==="string"?A.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${G}:`,H);let L=_*2**J;await new Promise((K)=>setTimeout(K,L)),J++;continue}}if(A?.code&&["ENOSPC","EDQUOT"].includes(A.code))throw Error(`Disk quota exceeded or no space left on device: ${A.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",A),A}finally{if($!==void 0)try{FY($)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(U){if(J===G-1){let A=U,H=typeof A.message==="string"?A.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",H),U}J++;let W=_*2**(J-1);await new Promise((A)=>setTimeout(A,W))}})();this.pendingOperations.push(Y);let Z=this.pendingOperations.length-1;try{await Y}catch($){throw console.error("Debug: [writeToFile] Error in operation:",$),$}finally{this.pendingOperations.splice(Z,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 iQ(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 iQ(this.config.logDirectory,`${this.name}.log`);let Q=new Date().toISOString().split("T")[0];return iQ(this.config.logDirectory,`${this.name}-${Q}.log`)}setupRotation(){if(a())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let Q=this.config.rotation,X;switch(Q.frequency){case"daily":X=86400000;break;case"weekly":X=604800000;break;case"monthly":X=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},X)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let X=this.config.rotation.keyRotation;if(!X?.enabled)return;let Y=typeof X.interval==="number"?X.interval:60,Z=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch(($)=>{console.error("Error rotating keys:",$)})},Z)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let X=this.config.rotation.keyRotation,Y=this.generateKeyId(),Z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,Z),this.encryptionKeys.set(Y,{key:Z,createdAt:new Date});let $=Array.from(this.encryptionKeys.entries()).sort(([,_],[,U])=>U.createdAt.getTime()-_.createdAt.getTime()),J=typeof X.maxKeys==="number"?X.maxKeys:1,G=Math.max(1,J);if($.length>G)for(let[_]of $.slice(G))this.encryptionKeys.delete(_),this.keys.delete(_)}generateKeyId(){return IY(16).toString("hex")}generateKey(){return IY(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let Q=this.keys.get(this.currentKeyId);if(!Q)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:Q,id:this.currentKeyId}}encrypt(Q){let{key:X}=this.getCurrentKey(),Y=IY(16),Z=E8("aes-256-gcm",X,Y),$=TQ.isBuffer(Q)?Q:TQ.from(Q,"utf8"),J=Z.update($),G=Z.final(),_=J.length+G.length,U=Z.getAuthTag(),W=TQ.allocUnsafe(16+_+16);return Y.copy(W,0),J.copy(W,16),G.copy(W,16+J.length),U.copy(W,16+_),{encrypted:W,iv:Y}}async compressData(Q){return new Promise((X,Y)=>{let Z=xZ(),$=[];Z.on("data",(J)=>$.push(J)),Z.on("end",()=>X(TQ.from(TQ.concat($)))),Z.on("error",Y),Z.write(Q),Z.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let Q={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let X=this.config.rotation.encrypt;return{...Q,...X}}return Q}async rotateLog(){if(a())return;if(!this.shouldWriteToFile())return;let Q=await nQ(this.currentLogFile).catch(()=>null);if(!Q)return;let X=this.config.rotation;if(typeof X==="boolean")return;if(X.maxSize&&Q.size>=X.maxSize){let Y=this.currentLogFile,Z=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let $=await OX(this.config.logDirectory),J=$.filter((U)=>U.startsWith(this.name)&&/\.log\.\d+$/.test(U)).sort((U,W)=>{let A=Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0")-A}),G=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,_=`${Y}.${G}`;if(await nQ(Y).catch(()=>null))try{if(await CZ(Y,_),X.compress)try{let U=`${_}.gz`;await this.compressLogFile(_,U),await DX(_)}catch(U){console.error("Error compressing rotated file:",U)}if(J.length===0&&!$.some((U)=>U.endsWith(".log.1")))try{let U=`${Y}.1`;await MY(U,"")}catch(U){console.error("Error creating backup file:",U)}}catch(U){console.error(`Error during rotation: ${U instanceof Error?U.message:String(U)}`)}}else{let $=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${$}.log`);if(await nQ(Y).catch(()=>null))await CZ(Y,J)}if(this.currentLogFile=Z,X.maxFiles){let J=(await OX(this.config.logDirectory)).filter((G)=>G.startsWith(this.name)).sort((G,_)=>_.localeCompare(G));for(let G of J.slice(X.maxFiles))await DX(iQ(this.config.logDirectory,G))}}}async compressLogFile(Q,X){let Y=TZ(Q),Z=N8(X),$=xZ();await P8(Y,$,Z)}async handleFingersCrossedBuffer(Q,X){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(Q)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let Z=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(Z);console.log(Z)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(X);console.log(X)}}shouldLog(Q){if(!this.enabled)return!1;let X={debug:0,info:1,success:2,warning:3,error:4};return X[Q]>=X[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((Q)=>{if(Q instanceof Promise)return Q.catch((X)=>{console.error("Error in pending write operation:",X)});return Promise.resolve()})),VX(this.currentLogFile))try{let Q=SZ(this.currentLogFile,"r+");NZ(Q),FY(Q)}catch(Q){console.error(`Error flushing file: ${Q}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let Q of this.pendingOperations)if(typeof Q.cancel==="function")Q.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(Q){console.error("Error waiting for pending operations:",Q)}if(!a()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await OX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of X)try{await DX(iQ(this.config.logDirectory,Y))}catch(Z){console.error(`Failed to delete temp file ${Y}:`,Z)}}catch(Q){console.error("Error cleaning up temporary files:",Q)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(Q){if(!Q)return"";return`${this.tagFormat.prefix}${Q}${this.tagFormat.suffix}`}formatFileTimestamp(Q){return`[${Q.toISOString()}]`}formatConsoleTimestamp(Q){return this.shouldStyleConsole()?v.gray(Q.toLocaleTimeString()):Q.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||a())return!1;let Q=typeof P.env.NO_COLOR<"u",X=P.env.FORCE_COLOR==="0";if(Q||X)return!1;return!!(typeof P.stderr<"u"&&P.stderr.isTTY||typeof P.stdout<"u"&&P.stdout.isTTY)}formatConsoleMessage(Q){let{timestamp:X,icon:Y="",tag:Z="",message:$,level:J,showTimestamp:G=!0}=Q,_=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(G)K.push(X);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Z)K.push(Z.replace(/[[\]]/g,""));return K.push($),K.join(" ")}let U=P.stdout.columns||120,W="";if(J==="warning"||J==="error")W=`${Y} ${$}`;else if(J==="info"||J==="success")W=`${Y} ${Z} ${$}`;else W=`${Y} ${Z} ${v.cyan($)}`;if(!G)return W.trim();let A=_(W).trim().length,H=_(X).length,L=Math.max(1,U-2-A-H);return`${W.trim()}${" ".repeat(L)}${X}`}formatMessage(Q,X){if(X.length===1&&Array.isArray(X[0]))return Q.replace(/\{(\d+)\}/g,(J,G)=>{let _=Number.parseInt(G,10);return _<X[0].length?String(X[0][_]):J});let Y=/%([sdijfo%])/g,Z=0,$=Q.replace(Y,(J,G)=>{if(G==="%")return"%";if(Z>=X.length)return J;let _=X[Z++];switch(G){case"s":return String(_);case"d":case"i":return Number(_).toString();case"j":case"o":return JSON.stringify(_,null,2);default:return J}});if(Z<X.length)$+=` ${X.slice(Z).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return $}formatMarkdown(Q){if(!Q)return Q;let X=Q;return X=X.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,Z,$)=>{let J=v.underline(v.blue(Z)),G=this.toAbsoluteFilePath($);if(G&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let _=`file://${encodeURI(G)}`,U="\x1B]8;;",W="\x1B\\";return`\x1B]8;;${_}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${$}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),X=X.replace(/`([^`]+)`/g,(Y,Z)=>v.bgGray(Z)),X=X.replace(/\*\*([^*]+)\*\*/g,(Y,Z)=>v.bold(Z)),X=X.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,Z)=>v.italic(Z)),X=X.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,Z)=>v.italic(Z)),X=X.replace(/~([^~]+)~/g,(Y,Z)=>v.strikethrough(Z)),X}supportsHyperlinks(){if(a())return!1;let Q=P.env;if(!Q)return!1;if(Q.TERM_PROGRAM==="iTerm.app"||Q.TERM_PROGRAM==="vscode"||Q.TERM_PROGRAM==="WezTerm")return!0;if(Q.WT_SESSION)return!0;if(Q.TERM==="xterm-kitty")return!0;let X=Q.VTE_VERSION?Number.parseInt(Q.VTE_VERSION,10):0;if(!Number.isNaN(X)&&X>=5000)return!0;return!1}toAbsoluteFilePath(Q){try{let X=Q;if(X.startsWith("file://"))X=X.replace(/^file:\/\//,"");if(X.startsWith("~")){let Y=P.env.HOME||"";if(Y)X=X.replace(/^~(?=$|\/)/,Y)}if(x8(X)||X.startsWith("./")||X.startsWith("../"))X=b8(X);else return null;return VX(X)?X:null}catch{return null}}buildOutputTexts(Q){let X=this.shouldStyleConsole()?this.formatMarkdown(Q):Q,Y=Q.replace(this.ANSI_PATTERN,"");return{consoleText:X,fileText:Y}}async log(Q,X,...Y){let Z=new Date,$=this.formatConsoleTimestamp(Z),J=this.formatFileTimestamp(Z),G,_;if(X instanceof Error)G=X.message,_=X.stack;else G=this.formatMessage(X,Y);let{consoleText:U,fileText:W}=this.buildOutputTexts(G);if(this.shouldStyleConsole()){let H=this.options.showIcons===!1?"":R0[Q],L=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",K;switch(Q){case"debug":K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:v.gray(U),level:Q}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:U,level:Q}),console.warn(K);break;case"success":K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:v.green(U),level:Q}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:U,level:Q}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:U,level:Q}),console.error(K),_){let x=_.split(`
12
+ `);for(let M of x)if(M.trim()&&!M.includes(G))console.error(this.formatConsoleMessage({timestamp:$,message:v.gray(` ${M}`),level:Q,showTimestamp:!1}))}break}}else if(!a()){if(console.error(`${J} ${this.environment}.${Q.toUpperCase()}: ${G}`),_)console.error(_)}if(!this.shouldLog(Q))return;let A=`${J} ${this.environment}.${Q.toUpperCase()}: ${W}
13
+ `;if(_)A+=`${_}
14
+ `;if(A=A.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(A)}progress(Q,X=""){let Y={update:(_,U)=>{},finish:(_)=>{},interrupt:(_,U)=>{}};if(!this.enabled)return Y;let Z=30;if(this.activeProgressBar={total:Math.max(1,Q||1),current:0,message:X||"",barLength:Z,lastRenderedLine:""},this.shouldStyleConsole()&&!a()&&P.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(_,U)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,_),this.activeProgressBar.total),U!==void 0)this.activeProgressBar.message=U;if(this.shouldStyleConsole()&&!a()&&P.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(_)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,_)},interrupt:(_,U="info")=>{if(!a()&&P.stdout.isTTY)P.stdout.write(`
15
+ `);if(this[U==="warning"?"warn":U](_),this.activeProgressBar&&this.shouldStyleConsole()&&!a()&&P.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(Q){let X=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",Z=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Z,icon:this.options.showIcons===!1?"":v.blue("\u25D0"),tag:Y,message:`${v.cyan(Q)}...`}))}return async(Y)=>{if(!this.enabled)return;let Z=performance.now(),$=Math.round(Z-X),J=`${Q} completed in ${$}ms`,G=new Date,_=this.formatConsoleTimestamp(G),W=`${this.formatFileTimestamp(G)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
16
+ `,W=W.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:_,icon:this.options.showIcons===!1?"":v.green("\u2713"),tag:A,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!a())console.error(W.trim());if(this.shouldWriteToFile())await this.writeToFile(W)}}async debug(Q,...X){await this.log("debug",Q,...X)}async info(Q,...X){await this.log("info",Q,...X)}async success(Q,...X){await this.log("success",Q,...X)}async warn(Q,...X){await this.log("warning",Q,...X)}async error(Q,...X){await this.log("error",Q,...X)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let Q=this.config.rotation,{encrypt:X}=Q;return!!X}async only(Q){if(!this.enabled)return;return await Q()}isEnabled(){return this.enabled}setEnabled(Q){this.enabled=Q}extend(Q){let X=`${this.name}:${Q}`,Y=new sX(X,{...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(Y),Y}createReadStream(){if(a())throw Error("createReadStream is not supported in browser environments");if(!VX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return TZ(this.currentLogFile,{encoding:"utf8"})}async decrypt(Q){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let X=this.config.rotation;if(!X.encrypt||typeof X.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let Z=TQ.isBuffer(Q)?Q:TQ.from(Q,"base64"),$=Z.subarray(0,16),J=Z.subarray(Z.length-16),G=Z.subarray(16,Z.length-16),_=T8("aes-256-gcm",Y,$);_.setAuthTag(J);let U=_.update(G),W=_.final(),A=U.length+W.length,H=TQ.allocUnsafe(A);return U.copy(H,0),W.copy(H,U.length),H.toString("utf8")}catch(Z){throw Error(`Decryption failed: ${Z instanceof Error?Z.message:String(Z)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return a()}isServerMode(){return!a()}setTestEncryptionKey(Q,X){this.currentKeyId=Q,this.keys.set(Q,X)}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(Q){if(!this.enabled)return;let X=new Date,Y=this.formatConsoleTimestamp(X),Z=this.formatFileTimestamp(X),{consoleText:$,fileText:J}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let _=$.split(`
17
+ `),U=Math.max(..._.map((L)=>L.length))+2,W=`\u250C${"\u2500".repeat(U)}\u2510`,A=`\u2514${"\u2500".repeat(U)}\u2518`,H=_.map((L)=>{return this.formatConsoleMessage({timestamp:Y,message:v.cyan(L),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:v.cyan(W),showTimestamp:!1})),H.forEach((L)=>console.error(L)),console.error(this.formatConsoleMessage({timestamp:Y,message:v.cyan(A),showTimestamp:!1}))}else if(!a())console.error(`${Z} ${this.environment}.INFO: [BOX] ${J}`);let G=`${Z} ${this.environment}.INFO: [BOX] ${J}
18
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(G)}async prompt(Q){if(a())return Promise.resolve(!0);return new Promise((X)=>{console.error(`${v.cyan("?")} ${Q} (y/n) `);let Y=(Z)=>{let $=Z.toString().trim().toLowerCase();P.stdin.removeListener("data",Y);try{if(typeof P.stdin.setRawMode==="function")P.stdin.setRawMode(!1)}catch{}P.stdin.pause(),console.error(""),X($==="y"||$==="yes")};try{if(typeof P.stdin.setRawMode==="function")P.stdin.setRawMode(!0)}catch{}P.stdin.resume(),P.stdin.once("data",Y)})}setFancy(Q){this.fancy=Q}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(Q,...X){if(!this.enabled)return;let Y=Q;if(X&&X.length>0){let U=/%([sdijfo%])/g,W=0;if(Y=Q.replace(U,(A,H)=>{if(H==="%")return"%";if(W>=X.length)return A;let L=X[W++];switch(H){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 A}}),W<X.length)Y+=` ${X.slice(W).map((A)=>typeof A==="object"?JSON.stringify(A,null,2):String(A)).join(" ")}`}let{consoleText:Z,fileText:$}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let U=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",W=this.options.showIcons===!1?"":`${v.blue("\u25D0")} `;console.error(`${W}${U} ${v.cyan(Z)}`)}let _=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${$}
19
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(_)}renderProgressBar(Q,X=!1){if(!this.enabled||!this.shouldStyleConsole()||!P.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round(Q.current/Q.total*100))),Z=Math.round(Q.barLength*Y/100),$=Q.barLength-Z,J=v.green("\u2501".repeat(Z)),G=v.gray("\u2501".repeat($)),_=`[${J}${G}]`,U=`${Y}%`.padStart(4),W=Q.message?` ${Q.message}`:"",A=this.options.showIcons===!1?"":X||Y===100?v.green("\u2713"):v.blue("\u25B6"),H=this.options.showTags!==!1&&this.name?` ${v.gray(this.formatTag(this.name))}`:"",L=`\r${A}${H} ${_} ${U}${W}`,K=P.stdout.columns||80,x=" ".repeat(Math.max(0,K-L.replace(this.ANSI_PATTERN,"").length));if(Q.lastRenderedLine=`${L}${x}`,P.stdout.write(Q.lastRenderedLine),X)P.stdout.write(`
20
+ `)}finishProgressBar(Q,X){if(!this.enabled||!this.fancy||a()||!P.stdout.isTTY){this.activeProgressBar=null;return}if(Q.current<Q.total)Q.current=Q.total;if(X)Q.message=X;this.renderProgressBar(Q,!0),this.activeProgressBar=null}async clear(Q={}){if(a()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let X=await OX(this.config.logDirectory),Y=[];for(let Z of X){if(!(Q.name?new RegExp(Q.name.replace("*",".*")).test(Z):Z.startsWith(this.name))||!Z.endsWith(".log"))continue;let J=iQ(this.config.logDirectory,Z);if(Q.before)try{if((await nQ(J)).mtime>=Q.before)continue}catch(G){console.error(`Failed to get stats for file ${J}:`,G);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let Z of Y)try{await DX(Z),console.warn(`Deleted log file: ${Z}`)}catch($){console.error(`Failed to delete log file ${Z}:`,$)}console.warn("Log clearing process finished.")}catch(X){console.error("Error during log clearing process:",X)}}}async function A0(Q,X={}){let{maxRetries:Y=3,retryDelay:Z=1000,isRetryable:$=()=>!0,fallback:J}=X,G=Error("Unknown error occurred");for(let _=0;_<=Y;_++)try{return await Q()}catch(U){if(G=U instanceof Error?U:Error(String(U)),_===Y||!$(G))break;if(Z>0)await new Promise((W)=>setTimeout(W,Z))}if(J!==void 0)return J;throw G instanceof Error?G:Error(`Unknown error: ${String(G)}`)}function H0(Q){return Q instanceof zQ}function K$(Q){return Q instanceof oX}function L$(Q){if(H0(Q))return Q.code==="FILE_SYSTEM_ERROR"||Q.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((Y)=>Q.message.toLowerCase().includes(Y.toLowerCase()))}class XY{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(Q,X)=>X==="boolean"||["true","false","1","0","yes","no"].includes(Q.toLowerCase()),parse:(Q)=>{let X=Q.toLowerCase();return["true","1","yes"].includes(X)}},{name:"number",canParse:(Q,X)=>X==="number"||!Number.isNaN(Number(Q))&&!Number.isNaN(Number.parseFloat(Q)),parse:(Q)=>{let X=Number(Q);if(Number.isNaN(X))throw TypeError(`Cannot parse "${Q}" as number`);return X}},{name:"array",canParse:(Q,X)=>X==="array"||Q.startsWith("[")||Q.includes(","),parse:(Q)=>{try{let X=JSON.parse(Q);if(Array.isArray(X))return X}catch{}return Q.split(",").map((X)=>X.trim())}},{name:"json",canParse:(Q,X)=>X==="object"||(Q.startsWith("{")&&Q.endsWith("}")||Q.startsWith("[")&&Q.endsWith("]")),parse:(Q)=>{try{return JSON.parse(Q)}catch(X){throw Error(`Cannot parse "${Q}" as JSON: ${X}`)}}}]}async applyEnvironmentVariables(Q,X,Y={}){let{prefix:Z,useCamelCase:$=!0,useBackwardCompatibility:J=!0,customParsers:G={},verbose:_=!1,trackPerformance:U=!0}=Y,W=async()=>{if(!Q)return{config:X,source:{type:"environment",priority:50,timestamp:new Date}};let A=Z||this.generateEnvPrefix(Q),H={...X};return this.processObject(H,[],A,{useCamelCase:$,useBackwardCompatibility:J,customParsers:G,verbose:_,configName:Q}),{config:H,source:{type:"environment",priority:50,timestamp:new Date}}};if(U)return BX.track("applyEnvironmentVariables",W,{configName:Q});return W()}generateEnvPrefix(Q){return Q.toUpperCase().replace(/-/g,"_")}formatEnvKey(Q,X){if(!X)return Q.toUpperCase();return Q.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(Q,X,Y,Z){for(let[$,J]of Object.entries(Q)){let G=[...X,$],_=G.map((A)=>this.formatEnvKey(A,Z.useCamelCase)),U=`${Y}_${_.join("_")}`,W=Z.useBackwardCompatibility?`${Y}_${G.map((A)=>A.toUpperCase()).join("_")}`:null;if(Z.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,G,Y,Z);else{let A=EX.env[U]||(W?EX.env[W]:void 0);if(A!==void 0){if(Z.verbose){let H=EX.env[U]?U:W}try{Q[$]=this.parseEnvironmentValue(A,typeof J,U,Z.customParsers,Z.configName)}catch(H){if(H instanceof rX)throw H;throw PQ.envVar(U,A,typeof J,Z.configName)}}}}}parseEnvironmentValue(Q,X,Y,Z,$){for(let[J,G]of Object.entries(Z))try{return G(Q)}catch{continue}for(let J of this.defaultParsers)if(J.canParse(Q,X))try{return J.parse(Q)}catch{throw PQ.envVar(Y,Q,`${X} (via ${J.name} parser)`,$)}return Q}getEnvironmentVariables(Q){let X={},Y=Q.toUpperCase();for(let[Z,$]of Object.entries(EX.env))if(Z.startsWith(Y)&&$!==void 0)X[Z]=$;return X}validateEnvironmentVariable(Q,X,Y){let Z=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(Q))Z.push(`Environment variable key "${Q}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue(Q,X,Y,{})}catch($){Z.push(`Cannot parse value "${X}" as ${Y}: ${$}`)}return{isValid:Z.length===0,errors:Z}}generateEnvVarDocs(Q,X,Y={}){let{prefix:Z,format:$="text"}=Y,J=Z||this.generateEnvPrefix(Q),G=[];switch(this.extractEnvVarInfo(X,[],J,G),$){case"markdown":return this.formatAsMarkdown(G,Q);case"json":return JSON.stringify(G,null,2);default:return this.formatAsText(G,Q)}}extractEnvVarInfo(Q,X,Y,Z){for(let[$,J]of Object.entries(Q)){let G=[...X,$],_=`${Y}_${G.map((U)=>this.formatEnvKey(U,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,G,Y,Z);else Z.push({key:_,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${G.join(".")}`,example:this.generateExample(J)})}}generateExample(Q){if(Array.isArray(Q))return JSON.stringify(Q);if(typeof Q==="object"&&Q!==null)return JSON.stringify(Q);return String(Q)}formatAsText(Q,X){let Y=`Environment Variables for ${X}:
21
+
22
+ `;for(let Z of Q)Y+=`${Z.key}
23
+ `,Y+=` Type: ${Z.type}
24
+ `,Y+=` Description: ${Z.description}
25
+ `,Y+=` Example: ${Z.example}
26
+
27
+ `;return Y}formatAsMarkdown(Q,X){let Y=`# Environment Variables for ${X}
28
+
29
+ `;Y+=`| Variable | Type | Description | Example |
30
+ `,Y+=`|----------|------|-------------|----------|
31
+ `;for(let Z of Q)Y+=`| \`${Z.key}\` | ${Z.type} | ${Z.description} | \`${Z.example}\` |
32
+ `;return Y}}function j$(Q,X){let Y=L0("process");if(typeof Y>"u"||!Y.env)return X;let Z=Y.env[Q];return Z!==void 0?Z:X}function z0(Q,X,Y={}){return B0(Q,X,Y,new WeakMap)}function B0(Q,X,Y,Z){let{arrayMergeMode:$="replace",skipNullish:J=!1,customMerger:G}=Y;if(X===null||X===void 0)return J?Q:X;if(G){let _=G(Q,X);if(_!==void 0)return _}if(Array.isArray(X)||Array.isArray(Q))return q0(Q,X,$,Z);if(!LQ(X)||!LQ(Q))return X;return F$(Q,X,Y,Z)}function q0(Q,X,Y,Z){if(Array.isArray(X)&&!Array.isArray(Q))return X;if(Array.isArray(Q)&&!Array.isArray(X))return X;if(Array.isArray(X)&&Array.isArray(Q))switch(Y){case"replace":return X;case"concat":return w$(Q,X);case"smart":return R$(Q,X,Z);default:return X}return X}function w$(Q,X){let Y=[...X];for(let Z of Q)if(!Y.some(($)=>fY($,Z)))Y.push(Z);return Y}function R$(Q,X,Y){if(X.length===0)return Q;if(Q.length===0)return X;if(LQ(X[0])&&LQ(Q[0]))return I$(Q,X,Y);if(X.every((Z)=>typeof Z==="string")&&Q.every((Z)=>typeof Z==="string")){let Z=[...X];for(let $ of Q)if(!Z.includes($))Z.push($);return Z}return X}function I$(Q,X,Y){let Z=[...X];for(let $ of Q){if(!LQ($)){Z.push($);continue}let J=["id","name","key","path","type"],G=!1;for(let _ of J)if(_ in $){if(Z.find((W)=>LQ(W)&&(_ in W)&&W[_]===$[_])){G=!0;break}}if(!G)Z.push($)}return Z}function F$(Q,X,Y,Z){let $=X;if(LQ($)&&Z.has($))return Z.get($);let J={...Q};if(LQ($))Z.set($,J);for(let G in $){if(!Object.prototype.hasOwnProperty.call($,G))continue;let _=$[G],U=J[G];if(Y.skipNullish&&(_===null||_===void 0))continue;if(_===null||_===void 0){J[G]=_;continue}if(LQ(_)&&LQ(U))J[G]=B0(U,_,Y,Z);else if(Array.isArray(_)||Array.isArray(U))J[G]=q0(U,_,Y.arrayMergeMode||"smart",Z);else J[G]=_}return J}function QZ(Q,X,Y="replace"){return z0(Q,X,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function fY(Q,X){if(Q===X)return!0;if(Array.isArray(Q)&&Array.isArray(X)){if(Q.length!==X.length)return!1;for(let Y=0;Y<Q.length;Y++)if(!fY(Q[Y],X[Y]))return!1;return!0}if(LQ(Q)&&LQ(X)){let Y=Object.keys(Q),Z=Object.keys(X);if(Y.length!==Z.length)return!1;for(let $ of Y){if(!Object.prototype.hasOwnProperty.call(X,$))return!1;if(!fY(Q[$],X[$]))return!1}return!0}return!1}function LQ(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}class YY{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(Q,X,Y={}){let{arrayStrategy:Z="replace",useCache:$=!0,cacheTtl:J,trackPerformance:G=!0,verbose:_=!1}=Y;if($){let W=eQ.getWithFileCheck("file",Q);if(W){if(_)console.log(`Configuration loaded from cache: ${Q}`);return W}}let U=async()=>{if(!TX(Q))return null;try{let W=`?t=${Date.now()}`,A=await import(Q+W),H=A.default||A,L="default"in A,K=Object.keys(A).length>0;if(!L&&!K)throw new HX(Q,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof H!=="object"||H===null||Array.isArray(H))throw new HX(Q,Error("Configuration must export a valid object"),"unknown");let k={config:QZ(X,H,Z),source:{type:"file",path:Q,priority:100,timestamp:new Date}};if($)eQ.setWithFileCheck("file",k,Q,J);return k}catch(W){throw W instanceof Error?PQ.configLoad(Q,W):PQ.configLoad(Q,Error(String(W)))}};if(G)return BX.track("loadFromPath",U,{path:Q});return U()}async tryLoadFromPaths(Q,X,Y={}){for(let Z of Q)try{let $=await this.loadFromPath(Z,X,Y);if($)return $}catch($){if($ instanceof Error&&$.name==="ConfigLoadError")throw $;if(Y.verbose)console.warn(`Failed to load config from ${Z}:`,$)}return null}generateConfigPaths(Q,X,Y){let Z=this.generateNamePatterns(Q,Y),$=[];for(let J of Z)for(let G of this.extensions)$.push(VY(X,`${J}${G}`));return $}generateNamePatterns(Q,X){let Y=[];if(Y.push("config",".config"),Q)Y.push(Q,`.${Q}.config`,`${Q}.config`,`.${Q}`);if(X){if(Y.push(X,`.${X}.config`,`${X}.config`,`.${X}`),Q)Y.push(`${Q}.${X}.config`,`.${Q}.${X}.config`)}return Y.filter(Boolean)}checkFileAccess(Q){return A0(async()=>{return TX(Q)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(Q,X,Y){let Z=[];if(!TX(Q))return Z;if(X||Y){let $=this.generateNamePatterns(X||"",Y);for(let J of $)for(let G of this.extensions){let _=VY(Q,`${J}${G}`);if(await this.checkFileAccess(_))Z.push(_)}}else try{let{readdirSync:$}=await import("fs"),J=$(Q);for(let G of J)if(this.looksLikeConfigFile(G)){let _=VY(Q,G);if(await this.checkFileAccess(_))Z.push(_)}}catch{return[]}return Z}looksLikeConfigFile(Q){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((Y)=>Y.test(Q))}async validateConfigFile(Q){let X=[];try{if(!TX(Q))return X.push("Configuration file does not exist"),X;let Y=await import(Q),Z=Y.default||Y;if(Z===void 0)X.push("Configuration file must export a default value or named exports");else if(typeof Z!=="object"||Z===null)X.push("Configuration must be an object");else if(Array.isArray(Z))X.push("Configuration cannot be an array at the root level");if(Q.endsWith(".json"))try{let{readFileSync:$}=await import("fs"),J=$(Q,"utf8");JSON.parse(J)}catch($){X.push(`Invalid JSON syntax: ${$}`)}}catch(Y){X.push(`Failed to load configuration file: ${Y}`)}return X}async getFileModificationTime(Q){try{let{statSync:X}=await import("fs");return X(Q).mtime}catch{return null}}async preloadConfigurations(Q,X={}){let Y=new Map;return await Promise.allSettled(Q.map(async(Z)=>{try{let $=await this.loadFromPath(Z,{},X);if($)Y.set(Z,$.config)}catch($){if(X.verbose)console.warn(`Failed to preload ${Z}:`,$)}})),Y}}class XZ{async validateConfiguration(Q,X,Y={}){let{stopOnFirstError:Z=!1,validateRequired:$=!0,validateTypes:J=!0,customRules:G=[],trackPerformance:_=!0,verbose:U=!1}=Y,W=async()=>{let A=[],H=[],L={stopOnFirstError:Z,validateRequired:$,validateTypes:J,customRules:G,trackPerformance:_,verbose:U};try{if(typeof X==="string")return await this.validateWithSchemaFile(Q,X,L);else if(Array.isArray(X))return this.validateWithRules(Q,[...X,...G],L);else return this.validateWithJSONSchema(Q,X,L)}catch(K){return A.push({path:"",message:`Validation failed: ${K}`,rule:"system"}),{isValid:!1,errors:A,warnings:H}}};if(_)return await BX.track("validateConfiguration",W);return W()}async validateWithSchemaFile(Q,X,Y){try{if(!y8(X))throw new zX(X,[{path:"",message:"Schema file does not exist"}]);let Z=await import(X),$=Z.default||Z;if(Array.isArray($))return this.validateWithRules(Q,$,Y);else return this.validateWithJSONSchema(Q,$,Y)}catch(Z){throw new zX(X,[{path:"",message:`Failed to load schema: ${Z}`}])}}validateWithJSONSchema(Q,X,Y){let Z=[],$=[];return this.validateObjectAgainstSchema(Q,X,"",Z,$,Y),{isValid:Z.length===0,errors:Z,warnings:$}}validateObjectAgainstSchema(Q,X,Y,Z,$,J){if(J.validateTypes&&X.type){let G=Array.isArray(Q)?"array":typeof Q,_=Array.isArray(X.type)?X.type:[X.type];if(!_.includes(G)){if(Z.push({path:Y,message:`Expected type ${_.join(" or ")}, got ${G}`,expected:_.join(" or "),actual:G,rule:"type"}),J.stopOnFirstError)return}}if(X.enum&&!X.enum.includes(Q)){if(Z.push({path:Y,message:`Value must be one of: ${X.enum.join(", ")}`,expected:X.enum.join(", "),actual:Q,rule:"enum"}),J.stopOnFirstError)return}if(typeof Q==="string"){if(X.minLength!==void 0&&Q.length<X.minLength)Z.push({path:Y,message:`String length must be at least ${X.minLength}`,expected:`>= ${X.minLength}`,actual:Q.length,rule:"minLength"});if(X.maxLength!==void 0&&Q.length>X.maxLength)Z.push({path:Y,message:`String length must not exceed ${X.maxLength}`,expected:`<= ${X.maxLength}`,actual:Q.length,rule:"maxLength"});if(X.pattern){if(!new RegExp(X.pattern).test(Q))Z.push({path:Y,message:`String does not match pattern ${X.pattern}`,expected:X.pattern,actual:Q,rule:"pattern"})}}if(typeof Q==="number"){if(X.minimum!==void 0&&Q<X.minimum)Z.push({path:Y,message:`Value must be at least ${X.minimum}`,expected:`>= ${X.minimum}`,actual:Q,rule:"minimum"});if(X.maximum!==void 0&&Q>X.maximum)Z.push({path:Y,message:`Value must not exceed ${X.maximum}`,expected:`<= ${X.maximum}`,actual:Q,rule:"maximum"})}if(Array.isArray(Q)&&X.items)for(let G=0;G<Q.length;G++){let _=Y?`${Y}[${G}]`:`[${G}]`;if(this.validateObjectAgainstSchema(Q[G],X.items,_,Z,$,J),J.stopOnFirstError&&Z.length>0)return}if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let G=Q;if(J.validateRequired&&X.required){for(let _ of X.required)if(!(_ in G)){if(Z.push({path:Y?`${Y}.${_}`:_,message:`Missing required property '${_}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(X.properties){for(let[_,U]of Object.entries(X.properties))if(_ in G){let W=Y?`${Y}.${_}`:_;if(this.validateObjectAgainstSchema(G[_],U,W,Z,$,J),J.stopOnFirstError&&Z.length>0)return}}if(X.additionalProperties===!1){let _=new Set(Object.keys(X.properties||{}));for(let U of Object.keys(G))if(!_.has(U))$.push({path:Y?`${Y}.${U}`:U,message:`Additional property '${U}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(Q,X,Y){let Z=[],$=[];for(let J of X)try{let G=this.getValueByPath(Q,J.path),_=this.validateWithRule(G,J,J.path);if(Z.push(..._),Y.stopOnFirstError&&Z.length>0)break}catch(G){Z.push({path:J.path,message:`Rule validation failed: ${G}`,rule:"system"})}return{isValid:Z.length===0,errors:Z,warnings:$}}validateWithRule(Q,X,Y){let Z=[];if(X.required&&(Q===void 0||Q===null))return Z.push({path:Y,message:X.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),Z;if(Q===void 0||Q===null)return Z;if(X.type){let $=Array.isArray(Q)?"array":typeof Q;if($!==X.type)Z.push({path:Y,message:X.message||`Expected type ${X.type}, got ${$}`,expected:X.type,actual:$,rule:"type"})}if(X.min!==void 0){let $=Array.isArray(Q)?Q.length:typeof Q==="string"?Q.length:typeof Q==="number"?Q:0;if($<X.min)Z.push({path:Y,message:X.message||`Value must be at least ${X.min}`,expected:`>= ${X.min}`,actual:$,rule:"min"})}if(X.max!==void 0){let $=Array.isArray(Q)?Q.length:typeof Q==="string"?Q.length:typeof Q==="number"?Q:0;if($>X.max)Z.push({path:Y,message:X.message||`Value must not exceed ${X.max}`,expected:`<= ${X.max}`,actual:$,rule:"max"})}if(X.pattern&&typeof Q==="string"){if(!X.pattern.test(Q))Z.push({path:Y,message:X.message||`Value does not match pattern ${X.pattern}`,expected:X.pattern.toString(),actual:Q,rule:"pattern"})}if(X.enum&&!X.enum.includes(Q))Z.push({path:Y,message:X.message||`Value must be one of: ${X.enum.join(", ")}`,expected:X.enum.join(", "),actual:Q,rule:"enum"});if(X.validator){let $=X.validator(Q);if($)Z.push({path:Y,message:X.message||$,rule:"custom"})}return Z}getValueByPath(Q,X){if(!X)return Q;let Y=X.split("."),Z=Q;for(let $ of Y)if(Z&&typeof Z==="object"&&$ in Z)Z=Z[$];else return;return Z}generateRulesFromInterface(Q){let X=[],Y=Q.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Z of Y){let[,$,J,G]=Z;X.push({path:$,required:!J,type:this.mapTypeScriptType(G)})}return X}mapTypeScriptType(Q){switch(Q.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:F0},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class YZ{fileLoader=new YY;envProcessor=new XY;validator=new XZ;async loadConfig(Q){let X=Date.now(),{cache:Y,performance:Z,schema:$,validate:J,...G}=Q;try{if(Y?.enabled){let U=this.checkCache(G.name||"",G);if(U)return U}let _;try{_=await this.loadConfigurationStrategies(G,!0,Y)}catch(U){let W=G.__strictErrorHandling;if(U instanceof Error&&U.name==="ConfigNotFoundError"){if(W)throw U;_={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`No configuration file found for "${G.name||"config"}", using defaults with environment variables`]}}else if(U instanceof Error&&U.name==="ConfigLoadError"){let A=U.message.includes("EACCES")||U.message.includes("EPERM")||U.message.includes("permission denied"),H=!A&&(U.message.includes("syntax")||U.message.includes("Expected")||U.message.includes("Unexpected")||U.message.includes("BuildMessage")||U.message.includes("errors building")),L=U.message.includes("Configuration must export a valid object")||U.message.includes("Configuration file is empty and exports nothing");if(W&&(L||A))throw U;if(H&&(!W||!L))_={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!W)_={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`Configuration loading error, using defaults: ${U.message}`]};else throw U}else _={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${U instanceof Error?U.message:String(U)}`]}}if($||J)await this.validateConfiguration(_.config,$,J,G.name);if(Y?.enabled&&_)this.cacheResult(G.name||"",_,Y,G);if(Z?.enabled){let U={operation:"loadConfig",duration:Date.now()-X,configName:G.name,timestamp:new Date};if(Z.onMetrics)Z.onMetrics(U);if(Z.slowThreshold&&U.duration>Z.slowThreshold)FQ.warn(`Slow configuration loading detected: ${U.duration}ms for ${G.name}`);_.metrics=U}return _}catch(_){let U=Date.now()-X;throw FQ.error(`Configuration loading failed after ${U}ms:`,[_ instanceof Error?_:Error(String(_))]),_}}async loadConfigurationStrategies(Q,X=!1,Y){let{name:Z="",alias:$,cwd:J,configDir:G,defaultConfig:_,checkEnv:U=!0,arrayStrategy:W="replace",verbose:A=!1}=Q,H=J||vQ.cwd(),L=[],K=await this.loadLocalConfiguration(Z,$,H,G,_,W,A,U,Y);if(K)return L.push(...this.getLocalSearchPaths(Z,$,H,G)),this.finalizeResult(K,L,U,Z,A);let x=await this.loadHomeConfiguration(Z,$,_,W,A,U);if(x)return L.push(...this.getHomeSearchPaths(Z,$)),this.finalizeResult(x,L,U,Z,A);let M=await this.loadPackageJsonConfiguration(Z,$,H,_,W,A,U);if(M)return L.push(_Q(H,"package.json")),this.finalizeResult(M,L,U,Z,A);if(L.push(...this.getAllSearchPaths(Z,$,H,G)),X)throw PQ.configNotFound(Z,L,$);return{...await this.applyEnvironmentVariables(Z,_,U,A),warnings:[`No configuration file found for "${Z}"${$?` or alias "${$}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration(Q,X,Y,Z,$,J,G,_,U){let W=_?WX(Q,$,G):$,A=this.getLocalDirectories(Y,Z);for(let H of A){if(G)FQ.info(`Searching for configuration in: ${H}`);let L=this.fileLoader.generateConfigPaths(Q,H,X),K=await this.fileLoader.tryLoadFromPaths(L,W,{arrayStrategy:J,verbose:G,cacheTtl:U?.ttl,useCache:!U?.ttl||U.ttl>100});if(K){if(G)FQ.success(`Configuration loaded from: ${K.source.path}`);return K}}return null}async loadHomeConfiguration(Q,X,Y,Z,$,J){if(!Q)return null;let G=J?WX(Q,Y,$):Y,_=[_Q(gQ(),".config",Q),_Q(gQ(),".config"),gQ()];for(let U of _){if($)FQ.info(`Checking home directory: ${U}`);let W=this.fileLoader.generateConfigPaths(Q,U,X),A=await this.fileLoader.tryLoadFromPaths(W,G,{arrayStrategy:Z,verbose:$});if(A){if($)FQ.success(`Configuration loaded from home directory: ${A.source.path}`);return A}}return null}async loadPackageJsonConfiguration(Q,X,Y,Z,$,J,G){let _=G?WX(Q,Z,J):Z;try{let U=_Q(Y,"package.json");if(!dY(U))return null;let W=await import(U),A=W[Q],H=Q;if(!A&&X)A=W[X],H=X;if(A&&typeof A==="object"&&!Array.isArray(A)){if(J)FQ.success(`Configuration loaded from package.json: ${H}`);return{config:QZ(_,A,$),source:{type:"package.json",path:U,priority:30,timestamp:new Date}}}}catch(U){if(J)FQ.warn("Failed to load package.json:",[U instanceof Error?U:Error(String(U))])}return null}async applyEnvironmentVariables(Q,X,Y,Z){if(!Y||!Q||typeof X!=="object"||X===null||Array.isArray(X))return{config:X,source:{type:"default",priority:10,timestamp:new Date}};return{config:WX(Q,X,Z),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(Q,X,Y,Z,$){return{config:Q.config,source:Q.source,path:Q.source.path}}async validateConfiguration(Q,X,Y,Z){let $=[];if(Y){let J=Y(Q);if(J)$.push(...J)}if(X){let J=await this.validator.validateConfiguration(Q,X);if(!J.isValid)$.push(...J.errors.map((G)=>G.path?`${G.path}: ${G.message}`:G.message))}if($.length>0)throw PQ.configValidation(Z||"unknown",$,Z)}checkCache(Q,X){let Y=this.generateCacheKey(Q,X);return eQ.get(Y)||null}cacheResult(Q,X,Y,Z){let $=this.generateCacheKey(Q,Z);eQ.set($,X,void 0,Y.ttl)}generateCacheKey(Q,X){let Y=[Q];if(X.alias)Y.push(`alias:${X.alias}`);if(X.cwd)Y.push(`cwd:${X.cwd}`);if(X.configDir)Y.push(`configDir:${X.configDir}`);if("checkEnv"in X)Y.push(`checkEnv:${X.checkEnv}`);return Y.join("|")}getLocalDirectories(Q,X){return Array.from(new Set([Q,_Q(Q,"config"),_Q(Q,".config"),X?_Q(Q,X):void 0].filter(Boolean)))}getAllSearchPaths(Q,X,Y,Z){let $=[];return $.push(...this.getLocalSearchPaths(Q,X,Y,Z)),$.push(...this.getHomeSearchPaths(Q,X)),$.push(_Q(Y,"package.json")),$}getLocalSearchPaths(Q,X,Y,Z){let $=this.getLocalDirectories(Y,Z),J=[];for(let G of $)J.push(...this.fileLoader.generateConfigPaths(Q,G,X));return J}getHomeSearchPaths(Q,X){if(!Q)return[];let Y=[_Q(gQ(),".config",Q),_Q(gQ(),".config"),gQ()],Z=[];for(let $ of Y)Z.push(...this.fileLoader.generateConfigPaths(Q,$,X));return Z}async loadConfigWithResult(Q){return this.loadConfig(Q)}}function mZ(Q){let Y=!(Q.message.includes("EACCES")||Q.message.includes("EPERM")||Q.message.includes("permission denied"))&&(Q.message.includes("syntax")||Q.message.includes("Expected")||Q.message.includes("Unexpected")||Q.message.includes("BuildMessage")),Z=Q.message.includes("Configuration must export a valid object")||Q.message.includes("Configuration file is empty and exports nothing");return Y||Z}async function M$(Q){return xQ.loadConfig({...Q,__strictErrorHandling:!0})}async function K0(Q){let X="defaultConfig"in Q&&Q.defaultConfig!==void 0?Q.defaultConfig:{},Y="cache"in Q||"performance"in Q||"schema"in Q||"validate"in Q;try{let Z;if(Y)Z=await xQ.loadConfig(Q);else Z=await xQ.loadConfig({...Q,defaultConfig:X,cache:{enabled:!0},performance:{enabled:!1}});return Z?.config??X}catch(Z){let $=Z instanceof Error?Z.name:"UnknownError",J=Z instanceof Error?Z.message:String(Z);if(!($==="ConfigNotFoundError"||$==="ConfigLoadError"||$==="ConfigValidationError"||J.includes("config"))&&Q.verbose)FQ.warn("Unexpected error loading config, using defaults:",[Z instanceof Error?Z:Error(String(Z))]);let _=Y?{...Q,defaultConfig:X}:{...Q,defaultConfig:X,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in Q?Q.checkEnv!==!1:!0)return(await xQ.applyEnvironmentVariables(_.name||"",X,!0,_.verbose||!1))?.config??X;return X}}async function V$(Q={defaultConfig:{}}){if(typeof Q==="string"){let{cwd:X}=await import("process");try{return(await xQ.loadConfig({name:Q,cwd:X(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Y){if(Y instanceof Error&&(Y.name==="ConfigNotFoundError"||Y.name==="ConfigLoadError"&&mZ(Y)))return(await xQ.applyEnvironmentVariables(Q,{},!0,!1)).config;throw Y}}try{return(await xQ.loadConfig({...Q,cwd:Q.cwd||vQ.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(X){if(X instanceof Error&&(X.name==="ConfigNotFoundError"||X.name==="ConfigLoadError"&&mZ(X)))return(await xQ.applyEnvironmentVariables(Q.name||"",Q.defaultConfig||{},Q.checkEnv!==!1,Q.verbose||!1)).config;throw X}}async function O$(Q,X,Y="replace"){let Z=new YY;try{let $=await Z.loadFromPath(Q,X,{arrayStrategy:Y,useCache:!1,trackPerformance:!1});return $?$.config:null}catch{return null}}function WX(Q,X,Y=!1){let Z=new XY,$=Q.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(G,_=[]){let U={...G};for(let[W,A]of Object.entries(G)){let H=[..._,W],L=[`${$}_${H.join("_").toUpperCase()}`,`${$}_${H.map((M)=>M.toUpperCase()).join("")}`,`${$}_${H.map((M)=>M.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],K,x;for(let M of L)if(K=vQ.env[M],K!==void 0){x=M;break}if(K!==void 0&&x)if(typeof A==="boolean")U[W]=["true","1","yes"].includes(K.toLowerCase());else if(typeof A==="number"){let M=Number(K);if(!Number.isNaN(M))U[W]=M}else if(Array.isArray(A))try{U[W]=JSON.parse(K)}catch{U[W]=K.split(",").map((M)=>M.trim())}else U[W]=K;else if(A&&typeof A==="object"&&!Array.isArray(A))U[W]=J(A,H)}return U}return J(X)}function D$(Q){let X=_Q(vQ.cwd(),Q.configDir),Y=_Q(vQ.cwd(),Q.generatedDir),Z=_Q(Y,"config-types.ts");if(!dY(wZ(Z)))z8(wZ(Z),{recursive:!0,mode:511});let $=dY(X)?B8(X).map((G)=>G.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],J=`// Generated by bunfig v${Q7}
33
+ export type ConfigNames = ${$.length?`'${$.join("' | '")}'`:"string"}
34
+ `;q8(Z,J,{mode:438})}function E$(Q){let X=null,Y=null,Z=()=>{if(!Y)Y=K0(Q).then((J)=>{return X=J,J},(J)=>{let G="defaultConfig"in Q?Q.defaultConfig:{};if(X=G,"verbose"in Q&&Q.verbose)FQ.warn("Config loading failed, using defaults:",[J instanceof Error?J:Error(String(J))]);return G});return Y},$="defaultConfig"in Q?Q.defaultConfig:{};return X=$,Z(),new Proxy({},{get(J,G){if(X)return X[G];let _=$[G];return Z(),_},has(J,G){return G in(X||$)},ownKeys(){return Object.keys(X||$)},getOwnPropertyDescriptor(J,G){return Object.getOwnPropertyDescriptor(X||$,G)},set(J,G,_){if(!X)X={...$};return X[G]=_,!0}})}function T$(Q){let X=bZ(h8.cwd(),Q?.configDir||"./config");function Y(){if(!v8(X))return[];let $=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),J=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],G=d8(X).filter((U)=>$.has(OY(U))).map((U)=>({base:U.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:U})),_=new Map;for(let{base:U,file:W}of G){let A=OY(W).toLowerCase(),H=_.get(U);if(!H){_.set(U,W);continue}let L=OY(H).toLowerCase();if(J.indexOf(A)<J.indexOf(L))_.set(U,W)}return Array.from(_.entries()).map(([U,W])=>({base:U,file:W})).sort((U,W)=>U.base.localeCompare(W.base))}function Z(){let $=Y(),J=$.map((W)=>W.base),G=J.length?J.map((W)=>`'${W}'`).join(" | "):"string",_=$.length?`{
35
+ ${$.map((W)=>{let A=bZ(X,W.file).replace(/\\/g,"/");return` '${W.base}': typeof import('${A}').default`}).join(`,
36
+ `)}
37
+ }`:"Record<string, any>";return`export type ConfigNames = ${G}
38
+ export type ConfigByName = ${_}
39
+ export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
40
+ export type ConfigOf = Config
41
+ `}return{name:"bunfig-plugin",setup($){$.onResolve({filter:/^virtual:bunfig-types$/},(J)=>{return{path:J.path,namespace:"bunfig-virtual"}}),$.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:Z(),loader:"ts"}})}}}var L0,eQ,BX,j0,N$,S$,gZ,vX,pY,$Q,m,k$,uZ,C$,cZ,x$,b$,SY,P$,lZ,nZ,kY,y$,v$,d$,h$,dX,w0,f$,JQ,p$,m$,iZ,hX,mY,t,v,g$,sZ,u$,oZ,c$,l$,CY,n$,rZ,aZ,i$,xY,s$,o$,r$,a$,t$,fX,R0,e$,Q7="0.15.6",zQ,oX,HX,gY,uY,rX,cY,lY,zX,nY,iY,PQ,I0,F0,FQ,xQ,M0,V0,X7=X$(async()=>{L0=import.meta.require,eQ=new rY,BX=new aY,j0={createKey:Y$,isEquivalent:Z$,estimateMemoryUsage:$$},N$=gX(hY.cwd(),"config"),S$=gX(hY.cwd(),"src/generated"),gZ=mX.env.CLARITY_LOG_DIR||j8(U$(),"logs"),vX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:gZ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},pY=await _$(),$Q={red:(Q)=>`\x1B[31m${Q}\x1B[0m`,green:(Q)=>`\x1B[32m${Q}\x1B[0m`,yellow:(Q)=>`\x1B[33m${Q}\x1B[0m`,blue:(Q)=>`\x1B[34m${Q}\x1B[0m`,magenta:(Q)=>`\x1B[35m${Q}\x1B[0m`,cyan:(Q)=>`\x1B[36m${Q}\x1B[0m`,white:(Q)=>`\x1B[37m${Q}\x1B[0m`,gray:(Q)=>`\x1B[90m${Q}\x1B[0m`,bgRed:(Q)=>`\x1B[41m${Q}\x1B[0m`,bgYellow:(Q)=>`\x1B[43m${Q}\x1B[0m`,bold:(Q)=>`\x1B[1m${Q}\x1B[0m`,dim:(Q)=>`\x1B[2m${Q}\x1B[0m`,italic:(Q)=>`\x1B[3m${Q}\x1B[0m`,underline:(Q)=>`\x1B[4m${Q}\x1B[0m`,reset:"\x1B[0m"},m=$Q,k$=$Q.red,uZ=$Q.green,C$=$Q.yellow,cZ=$Q.blue,x$=$Q.magenta,b$=$Q.cyan,SY=$Q.white,P$=$Q.gray,lZ=$Q.bgRed,nZ=$Q.bgYellow,kY=$Q.bold,y$=$Q.dim,v$=$Q.italic,d$=$Q.underline,h$=$Q.reset,dX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},w0={debug:"\uD83D\uDD0D",info:cZ("\u2139"),success:uZ("\u2713"),warning:nZ(SY(kY(" WARN "))),error:lZ(SY(kY(" ERROR ")))},f$=new nX("stacks"),JQ=new nX("bunfig",{showTags:!0}),p$=UQ(AX.cwd(),"config"),m$=UQ(AX.cwd(),"src/generated"),iZ=pX.env.CLARITY_LOG_DIR||K8(z$(),"logs"),hX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:iZ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},mY=await B$(),t={red:(Q)=>`\x1B[31m${Q}\x1B[0m`,green:(Q)=>`\x1B[32m${Q}\x1B[0m`,yellow:(Q)=>`\x1B[33m${Q}\x1B[0m`,blue:(Q)=>`\x1B[34m${Q}\x1B[0m`,magenta:(Q)=>`\x1B[35m${Q}\x1B[0m`,cyan:(Q)=>`\x1B[36m${Q}\x1B[0m`,white:(Q)=>`\x1B[37m${Q}\x1B[0m`,gray:(Q)=>`\x1B[90m${Q}\x1B[0m`,bgRed:(Q)=>`\x1B[41m${Q}\x1B[0m`,bgYellow:(Q)=>`\x1B[43m${Q}\x1B[0m`,bgGray:(Q)=>`\x1B[100m${Q}\x1B[0m`,bold:(Q)=>`\x1B[1m${Q}\x1B[0m`,dim:(Q)=>`\x1B[2m${Q}\x1B[0m`,italic:(Q)=>`\x1B[3m${Q}\x1B[0m`,underline:(Q)=>`\x1B[4m${Q}\x1B[0m`,strikethrough:(Q)=>`\x1B[9m${Q}\x1B[0m`,reset:"\x1B[0m"},v=t,g$=t.red,sZ=t.green,u$=t.yellow,oZ=t.blue,c$=t.magenta,l$=t.cyan,CY=t.white,n$=t.gray,rZ=t.bgRed,aZ=t.bgYellow,i$=t.bgGray,xY=t.bold,s$=t.dim,o$=t.italic,r$=t.underline,a$=t.strikethrough,t$=t.reset,fX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},R0={debug:"\uD83D\uDD0D",info:oZ("\u2139"),success:sZ("\u2713"),warning:aZ(CY(xY(" WARN "))),error:rZ(CY(xY(" ERROR ")))},e$=new sX("stacks"),zQ=class extends Error{timestamp;context;constructor(X,Y={}){super(X);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Y,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 X=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Y,Z])=>`${Y}: ${Z}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${X}`}},oX=class extends zQ{code="CONFIG_NOT_FOUND";constructor(X,Y,Z){let $=Z?` or alias "${Z}"`:"";super(`Configuration "${X}"${$} not found`,{configName:X,alias:Z,searchPaths:Y,searchPathCount:Y.length})}},HX=class extends zQ{code="CONFIG_LOAD_ERROR";constructor(X,Y,Z){super(`Failed to load configuration from "${X}": ${Y.message}`,{configPath:X,configName:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},gY=class extends zQ{code="CONFIG_VALIDATION_ERROR";constructor(X,Y,Z){super(`Configuration validation failed for "${X}"`,{configPath:X,configName:Z,validationErrors:Y,errorCount:Y.length})}},uY=class extends zQ{code="CONFIG_MERGE_ERROR";constructor(X,Y,Z,$){super(`Failed to merge configuration from "${X}" with "${Y}": ${Z.message}`,{sourcePath:X,targetPath:Y,configName:$,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},rX=class extends zQ{code="ENV_VAR_ERROR";constructor(X,Y,Z,$){super(`Failed to parse environment variable "${X}" with value "${Y}" as ${Z}`,{envKey:X,envValue:Y,expectedType:Z,configName:$})}},cY=class extends zQ{code="FILE_SYSTEM_ERROR";constructor(X,Y,Z){super(`File system ${X} failed for "${Y}": ${Z.message}`,{operation:X,path:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},lY=class extends zQ{code="TYPE_GENERATION_ERROR";constructor(X,Y,Z){super(`Failed to generate types from "${X}" to "${Y}": ${Z.message}`,{configDir:X,outputPath:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},zX=class extends zQ{code="SCHEMA_VALIDATION_ERROR";constructor(X,Y,Z){super(`Schema validation failed${Z?` for config "${Z}"`:""}`,{schemaPath:X,configName:Z,validationErrors:Y,errorCount:Y.length})}},nY=class extends zQ{code="BROWSER_CONFIG_ERROR";constructor(X,Y,Z,$){super(`Failed to fetch configuration from "${X}": ${Y} ${Z}`,{endpoint:X,status:Y,statusText:Z,configName:$})}},iY=class extends zQ{code="PLUGIN_ERROR";constructor(X,Y,Z){super(`Plugin "${X}" failed during ${Y}: ${Z.message}`,{pluginName:X,operation:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},PQ={configNotFound(Q,X,Y){return new oX(Q,X,Y)},configLoad(Q,X,Y){return new HX(Q,X,Y)},configValidation(Q,X,Y){return new gY(Q,X,Y)},configMerge(Q,X,Y,Z){return new uY(Q,X,Y,Z)},envVar(Q,X,Y,Z){return new rX(Q,X,Y,Z)},fileSystem(Q,X,Y){return new cY(Q,X,Y)},typeGeneration(Q,X,Y){return new lY(Q,X,Y)},schemaValidation(Q,X,Y){return new zX(Q,X,Y)},browserConfig(Q,X,Y,Z){return new nY(Q,X,Y,Z)},plugin(Q,X,Y){return new iY(Q,X,Y)}},I0={replace:"replace",concat:"concat",smart:"smart"},F0=/^https?:\/\//,FQ=new sX("bunfig",{showTags:!0}),xQ=new YZ,M0=_Q(vQ.cwd(),"config"),V0=_Q(vQ.cwd(),"src/generated")});function Y7(Q,X={}){let Y=uX.cwd();while(Y.includes("storage"))Y=PZ(Y,"..");let Z=PZ(Y,Q||"");if(X?.relative)return p8(uX.cwd(),Z);return Z}var Z7=uX.env.CLARITY_LOG_DIR||f8(Y7(),"logs"),O0={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Z7,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},aX={...O0},JG=(async()=>{try{let{loadConfig:Q}=await X7().then(()=>U0),X=await Q({name:"clarity",alias:"logging",defaultConfig:O0,cwd:uX.cwd()});if(X)Object.assign(aX,X)}catch{}return aX})();function e(){if(CQ.env.NODE_ENV==="test"||CQ.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function $7(){if(CQ.env.NODE_ENV==="test"||CQ.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof CQ<"u"){let Q=CQ.type;if(Q==="renderer"||Q==="worker")return!1;return!!(CQ.versions&&(CQ.versions.node||CQ.versions.bun))}return!1}class D0{async format(Q){let X=await $7(),Y=await this.getMetadata(X);return JSON.stringify({timestamp:Q.timestamp.toISOString(),level:Q.level,name:Q.name,message:Q.message,metadata:Y})}async getMetadata(Q){if(Q){let{hostname:X}=await import("os");return{pid:aQ.pid,hostname:X(),environment:aQ.env.NODE_ENV||"development",platform:aQ.platform,version:aQ.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:aQ.env.NODE_ENV||aQ.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var XQ={red:(Q)=>`\x1B[31m${Q}\x1B[0m`,green:(Q)=>`\x1B[32m${Q}\x1B[0m`,yellow:(Q)=>`\x1B[33m${Q}\x1B[0m`,blue:(Q)=>`\x1B[34m${Q}\x1B[0m`,magenta:(Q)=>`\x1B[35m${Q}\x1B[0m`,cyan:(Q)=>`\x1B[36m${Q}\x1B[0m`,white:(Q)=>`\x1B[37m${Q}\x1B[0m`,gray:(Q)=>`\x1B[90m${Q}\x1B[0m`,bgRed:(Q)=>`\x1B[41m${Q}\x1B[0m`,bgYellow:(Q)=>`\x1B[43m${Q}\x1B[0m`,bgGray:(Q)=>`\x1B[100m${Q}\x1B[0m`,bold:(Q)=>`\x1B[1m${Q}\x1B[0m`,dim:(Q)=>`\x1B[2m${Q}\x1B[0m`,italic:(Q)=>`\x1B[3m${Q}\x1B[0m`,underline:(Q)=>`\x1B[4m${Q}\x1B[0m`,strikethrough:(Q)=>`\x1B[9m${Q}\x1B[0m`,reset:"\x1B[0m"},h=XQ,GG=XQ.red,J7=XQ.green,UG=XQ.yellow,G7=XQ.blue,_G=XQ.magenta,WG=XQ.cyan,tZ=XQ.white,AG=XQ.gray,U7=XQ.bgRed,_7=XQ.bgYellow,HG=XQ.bgGray,eZ=XQ.bold,zG=XQ.dim,BG=XQ.italic,qG=XQ.underline,KG=XQ.strikethrough,LG=XQ.reset,bY={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},W7={debug:"\uD83D\uDD0D",info:G7("\u2139"),success:J7("\u2713"),warning:_7(tZ(eZ(" WARN "))),error:U7(tZ(eZ(" ERROR ")))};class ZY{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(Q,X={}){this.name=Q,this.config={...aX},this.options=this.normalizeOptions(X),this.formatter=this.options.formatter||new D0,this.enabled=X.enabled??!0,this.fancy=X.fancy??!0,this.tagFormat=X.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=X.timestampPosition??"right",this.environment=X.environment??y.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(X);let Y={...X},Z=X.timestamp!==void 0;if(Z)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:Z||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let $=this.generateKeyId(),J=this.generateKey();this.currentKeyId=$,this.keys.set($,J),this.encryptionKeys.set($,{key:J,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(Q){if(!this.fingersCrossedConfig)return!1;let X={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return X[Q]>=X[Y]}initializeFingersCrossedConfig(Q){if(!Q.fingersCrossedEnabled&&Q.fingersCrossed)return{...bY,...Q.fingersCrossed};if(!Q.fingersCrossedEnabled)return null;if(!Q.fingersCrossed)return{...bY};return{...bY,...Q.fingersCrossed}}normalizeOptions(Q){let X={format:"json",level:"info",logDirectory:aX.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...X,...Object.fromEntries(Object.entries(Q).filter(([,Z])=>Z!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=X.level;return Y}shouldWriteToFile(){return!e()&&this.config.writeToFile===!0}async writeToFile(Q){let Y=(async()=>{let $,J=0,G=3,_=1000;while(J<G)try{try{try{await l8(this.config.logDirectory,hZ.F_OK|hZ.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await n8(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let U=this.validateEncryptionConfig()?(await this.encrypt(Q)).encrypted:NQ.from(Q);try{if(!NX(this.currentLogFile))await TY(this.currentLogFile,"",{mode:420});if($=dZ(this.currentLogFile,"a",420),c8($,U,{flag:"a"}),vZ($),$!==void 0)EY($),$=void 0;if((await oQ(this.currentLogFile)).size===0){if(await TY(this.currentLogFile,U,{flag:"w",mode:420}),(await oQ(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let A=W;if(A.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(A.code)){if(J<G-1){let H=typeof A.message==="string"?A.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${G}:`,H);let L=_*2**J;await new Promise((K)=>setTimeout(K,L)),J++;continue}}if(A?.code&&["ENOSPC","EDQUOT"].includes(A.code))throw Error(`Disk quota exceeded or no space left on device: ${A.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",A),A}finally{if($!==void 0)try{EY($)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(U){if(J===G-1){let A=U,H=typeof A.message==="string"?A.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",H),U}J++;let W=_*2**(J-1);await new Promise((A)=>setTimeout(A,W))}})();this.pendingOperations.push(Y);let Z=this.pendingOperations.length-1;try{await Y}catch($){throw console.error("Debug: [writeToFile] Error in operation:",$),$}finally{this.pendingOperations.splice(Z,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 rQ(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 rQ(this.config.logDirectory,`${this.name}.log`);let Q=new Date().toISOString().split("T")[0];return rQ(this.config.logDirectory,`${this.name}-${Q}.log`)}setupRotation(){if(e())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let Q=this.config.rotation,X;switch(Q.frequency){case"daily":X=86400000;break;case"weekly":X=604800000;break;case"monthly":X=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},X)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let X=this.config.rotation.keyRotation;if(!X?.enabled)return;let Y=typeof X.interval==="number"?X.interval:60,Z=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch(($)=>{console.error("Error rotating keys:",$)})},Z)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let X=this.config.rotation.keyRotation,Y=this.generateKeyId(),Z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,Z),this.encryptionKeys.set(Y,{key:Z,createdAt:new Date});let $=Array.from(this.encryptionKeys.entries()).sort(([,_],[,U])=>U.createdAt.getTime()-_.createdAt.getTime()),J=typeof X.maxKeys==="number"?X.maxKeys:1,G=Math.max(1,J);if($.length>G)for(let[_]of $.slice(G))this.encryptionKeys.delete(_),this.keys.delete(_)}generateKeyId(){return DY(16).toString("hex")}generateKey(){return DY(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let Q=this.keys.get(this.currentKeyId);if(!Q)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:Q,id:this.currentKeyId}}encrypt(Q){let{key:X}=this.getCurrentKey(),Y=DY(16),Z=m8("aes-256-gcm",X,Y),$=NQ.isBuffer(Q)?Q:NQ.from(Q,"utf8"),J=Z.update($),G=Z.final(),_=J.length+G.length,U=Z.getAuthTag(),W=NQ.allocUnsafe(16+_+16);return Y.copy(W,0),J.copy(W,16),G.copy(W,16+J.length),U.copy(W,16+_),{encrypted:W,iv:Y}}async compressData(Q){return new Promise((X,Y)=>{let Z=pZ(),$=[];Z.on("data",(J)=>$.push(J)),Z.on("end",()=>X(NQ.from(NQ.concat($)))),Z.on("error",Y),Z.write(Q),Z.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let Q={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let X=this.config.rotation.encrypt;return{...Q,...X}}return Q}async rotateLog(){if(e())return;if(!this.shouldWriteToFile())return;let Q=await oQ(this.currentLogFile).catch(()=>null);if(!Q)return;let X=this.config.rotation;if(typeof X==="boolean")return;if(X.maxSize&&Q.size>=X.maxSize){let Y=this.currentLogFile,Z=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let $=await SX(this.config.logDirectory),J=$.filter((U)=>U.startsWith(this.name)&&/\.log\.\d+$/.test(U)).sort((U,W)=>{let A=Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0")-A}),G=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,_=`${Y}.${G}`;if(await oQ(Y).catch(()=>null))try{if(await fZ(Y,_),X.compress)try{let U=`${_}.gz`;await this.compressLogFile(_,U),await kX(_)}catch(U){console.error("Error compressing rotated file:",U)}if(J.length===0&&!$.some((U)=>U.endsWith(".log.1")))try{let U=`${Y}.1`;await TY(U,"")}catch(U){console.error("Error creating backup file:",U)}}catch(U){console.error(`Error during rotation: ${U instanceof Error?U.message:String(U)}`)}}else{let $=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${$}.log`);if(await oQ(Y).catch(()=>null))await fZ(Y,J)}if(this.currentLogFile=Z,X.maxFiles){let J=(await SX(this.config.logDirectory)).filter((G)=>G.startsWith(this.name)).sort((G,_)=>_.localeCompare(G));for(let G of J.slice(X.maxFiles))await kX(rQ(this.config.logDirectory,G))}}}async compressLogFile(Q,X){let Y=yZ(Q),Z=u8(X),$=pZ();await o8(Y,$,Z)}async handleFingersCrossedBuffer(Q,X){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(Q)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let Z=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(Z);console.log(Z)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(X);console.log(X)}}shouldLog(Q){if(!this.enabled)return!1;let X={debug:0,info:1,success:2,warning:3,error:4};return X[Q]>=X[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((Q)=>{if(Q instanceof Promise)return Q.catch((X)=>{console.error("Error in pending write operation:",X)});return Promise.resolve()})),NX(this.currentLogFile))try{let Q=dZ(this.currentLogFile,"r+");vZ(Q),EY(Q)}catch(Q){console.error(`Error flushing file: ${Q}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let Q of this.pendingOperations)if(typeof Q.cancel==="function")Q.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(Q){console.error("Error waiting for pending operations:",Q)}if(!e()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await SX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of X)try{await kX(rQ(this.config.logDirectory,Y))}catch(Z){console.error(`Failed to delete temp file ${Y}:`,Z)}}catch(Q){console.error("Error cleaning up temporary files:",Q)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(Q){if(!Q)return"";return`${this.tagFormat.prefix}${Q}${this.tagFormat.suffix}`}formatFileTimestamp(Q){return`[${Q.toISOString()}]`}formatConsoleTimestamp(Q){return this.shouldStyleConsole()?h.gray(Q.toLocaleTimeString()):Q.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||e())return!1;let Q=typeof y.env.NO_COLOR<"u",X=y.env.FORCE_COLOR==="0";if(Q||X)return!1;return!!(typeof y.stderr<"u"&&y.stderr.isTTY||typeof y.stdout<"u"&&y.stdout.isTTY)}formatConsoleMessage(Q){let{timestamp:X,icon:Y="",tag:Z="",message:$,level:J,showTimestamp:G=!0}=Q,_=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(G)K.push(X);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Z)K.push(Z.replace(/[[\]]/g,""));return K.push($),K.join(" ")}let U=y.stdout.columns||120,W="";if(J==="warning"||J==="error")W=`${Y} ${$}`;else if(J==="info"||J==="success")W=`${Y} ${Z} ${$}`;else W=`${Y} ${Z} ${h.cyan($)}`;if(!G)return W.trim();let A=_(W).trim().length,H=_(X).length,L=Math.max(1,U-2-A-H);return`${W.trim()}${" ".repeat(L)}${X}`}formatMessage(Q,X){if(X.length===1&&Array.isArray(X[0]))return Q.replace(/\{(\d+)\}/g,(J,G)=>{let _=Number.parseInt(G,10);return _<X[0].length?String(X[0][_]):J});let Y=/%([sdijfo%])/g,Z=0,$=Q.replace(Y,(J,G)=>{if(G==="%")return"%";if(Z>=X.length)return J;let _=X[Z++];switch(G){case"s":return String(_);case"d":case"i":return Number(_).toString();case"j":case"o":return JSON.stringify(_,null,2);default:return J}});if(Z<X.length)$+=` ${X.slice(Z).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return $}formatMarkdown(Q){if(!Q)return Q;let X=Q;return X=X.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,Z,$)=>{let J=h.underline(h.blue(Z)),G=this.toAbsoluteFilePath($);if(G&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let _=`file://${encodeURI(G)}`,U="\x1B]8;;",W="\x1B\\";return`\x1B]8;;${_}\x1B\\${J}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${$}\x1B\\${J}\x1B]8;;\x1B\\`;return J}),X=X.replace(/`([^`]+)`/g,(Y,Z)=>h.bgGray(Z)),X=X.replace(/\*\*([^*]+)\*\*/g,(Y,Z)=>h.bold(Z)),X=X.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,Z)=>h.italic(Z)),X=X.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,Z)=>h.italic(Z)),X=X.replace(/~([^~]+)~/g,(Y,Z)=>h.strikethrough(Z)),X}supportsHyperlinks(){if(e())return!1;let Q=y.env;if(!Q)return!1;if(Q.TERM_PROGRAM==="iTerm.app"||Q.TERM_PROGRAM==="vscode"||Q.TERM_PROGRAM==="WezTerm")return!0;if(Q.WT_SESSION)return!0;if(Q.TERM==="xterm-kitty")return!0;let X=Q.VTE_VERSION?Number.parseInt(Q.VTE_VERSION,10):0;if(!Number.isNaN(X)&&X>=5000)return!0;return!1}toAbsoluteFilePath(Q){try{let X=Q;if(X.startsWith("file://"))X=X.replace(/^file:\/\//,"");if(X.startsWith("~")){let Y=y.env.HOME||"";if(Y)X=X.replace(/^~(?=$|\/)/,Y)}if(i8(X)||X.startsWith("./")||X.startsWith("../"))X=s8(X);else return null;return NX(X)?X:null}catch{return null}}buildOutputTexts(Q){let X=this.shouldStyleConsole()?this.formatMarkdown(Q):Q,Y=Q.replace(this.ANSI_PATTERN,"");return{consoleText:X,fileText:Y}}async log(Q,X,...Y){if(!this.shouldLog(Q))return;let Z=new Date,$=this.formatConsoleTimestamp(Z),J=this.formatFileTimestamp(Z),G,_;if(X instanceof Error)G=X.message,_=X.stack;else G=this.formatMessage(X,Y);let{consoleText:U,fileText:W}=this.buildOutputTexts(G);if(this.shouldStyleConsole()){let H=this.options.showIcons===!1?"":W7[Q],L=this.options.showTags!==!1&&this.name?h.gray(this.formatTag(this.name)):"",K;switch(Q){case"debug":K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:h.gray(U),level:Q}),console.error(K);break;case"info":K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:U,level:Q}),console.warn(K);break;case"success":K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:h.green(U),level:Q}),console.error(K);break;case"warning":K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:U,level:Q}),console.warn(K);break;case"error":if(K=this.formatConsoleMessage({timestamp:$,icon:H,tag:L,message:U,level:Q}),console.error(K),_){let x=_.split(`
42
+ `);for(let M of x)if(M.trim()&&!M.includes(G))console.error(this.formatConsoleMessage({timestamp:$,message:h.gray(` ${M}`),level:Q,showTimestamp:!1}))}break}}else if(!e()){if(console.error(`${J} ${this.environment}.${Q.toUpperCase()}: ${G}`),_)console.error(_)}let A=`${J} ${this.environment}.${Q.toUpperCase()}: ${W}
43
+ `;if(_)A+=`${_}
44
+ `;if(A=A.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(A)}progress(Q,X=""){let Y={update:(_,U)=>{},finish:(_)=>{},interrupt:(_,U)=>{}};if(!this.enabled)return Y;let Z=30;if(this.activeProgressBar={total:Math.max(1,Q||1),current:0,message:X||"",barLength:Z,lastRenderedLine:""},this.shouldStyleConsole()&&!e()&&y.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(_,U)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,_),this.activeProgressBar.total),U!==void 0)this.activeProgressBar.message=U;if(this.shouldStyleConsole()&&!e()&&y.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(_)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,_)},interrupt:(_,U="info")=>{if(!e()&&y.stdout.isTTY)y.stdout.write(`
45
+ `);if(this[U==="warning"?"warn":U](_),this.activeProgressBar&&this.shouldStyleConsole()&&!e()&&y.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(Q){let X=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?h.gray(this.formatTag(this.name)):"",Z=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Z,icon:this.options.showIcons===!1?"":h.blue("\u25D0"),tag:Y,message:`${h.cyan(Q)}...`}))}return async(Y)=>{if(!this.enabled)return;let Z=performance.now(),$=Math.round(Z-X),J=`${Q} completed in ${$}ms`,G=new Date,_=this.formatConsoleTimestamp(G),W=`${this.formatFileTimestamp(G)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
46
+ `,W=W.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let A=this.options.showTags!==!1&&this.name?h.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:_,icon:this.options.showIcons===!1?"":h.green("\u2713"),tag:A,message:`${J}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!e())console.error(W.trim());if(this.shouldWriteToFile())await this.writeToFile(W)}}async debug(Q,...X){await this.log("debug",Q,...X)}async info(Q,...X){await this.log("info",Q,...X)}async success(Q,...X){await this.log("success",Q,...X)}async warn(Q,...X){await this.log("warning",Q,...X)}async error(Q,...X){await this.log("error",Q,...X)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let Q=this.config.rotation,{encrypt:X}=Q;return!!X}async only(Q){if(!this.enabled)return;return await Q()}isEnabled(){return this.enabled}setEnabled(Q){this.enabled=Q}extend(Q){let X=`${this.name}:${Q}`,Y=new ZY(X,{...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(Y),Y}createReadStream(){if(e())throw Error("createReadStream is not supported in browser environments");if(!NX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return yZ(this.currentLogFile,{encoding:"utf8"})}async decrypt(Q){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let X=this.config.rotation;if(!X.encrypt||typeof X.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let Z=NQ.isBuffer(Q)?Q:NQ.from(Q,"base64"),$=Z.subarray(0,16),J=Z.subarray(Z.length-16),G=Z.subarray(16,Z.length-16),_=g8("aes-256-gcm",Y,$);_.setAuthTag(J);let U=_.update(G),W=_.final(),A=U.length+W.length,H=NQ.allocUnsafe(A);return U.copy(H,0),W.copy(H,U.length),H.toString("utf8")}catch(Z){throw Error(`Decryption failed: ${Z instanceof Error?Z.message:String(Z)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return e()}isServerMode(){return!e()}setTestEncryptionKey(Q,X){this.currentKeyId=Q,this.keys.set(Q,X)}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(Q){if(!this.enabled)return;let X=new Date,Y=this.formatConsoleTimestamp(X),Z=this.formatFileTimestamp(X),{consoleText:$,fileText:J}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let _=$.split(`
47
+ `),U=Math.max(..._.map((L)=>L.length))+2,W=`\u250C${"\u2500".repeat(U)}\u2510`,A=`\u2514${"\u2500".repeat(U)}\u2518`,H=_.map((L)=>{return this.formatConsoleMessage({timestamp:Y,message:h.cyan(L),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:h.cyan(W),showTimestamp:!1})),H.forEach((L)=>console.error(L)),console.error(this.formatConsoleMessage({timestamp:Y,message:h.cyan(A),showTimestamp:!1}))}else if(!e())console.error(`${Z} ${this.environment}.INFO: [BOX] ${J}`);let G=`${Z} ${this.environment}.INFO: [BOX] ${J}
48
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(G)}async prompt(Q){if(e())return Promise.resolve(!0);return new Promise((X)=>{console.error(`${h.cyan("?")} ${Q} (y/n) `);let Y=(Z)=>{let $=Z.toString().trim().toLowerCase();y.stdin.removeListener("data",Y);try{if(typeof y.stdin.setRawMode==="function")y.stdin.setRawMode(!1)}catch{}y.stdin.pause(),console.error(""),X($==="y"||$==="yes")};try{if(typeof y.stdin.setRawMode==="function")y.stdin.setRawMode(!0)}catch{}y.stdin.resume(),y.stdin.once("data",Y)})}setFancy(Q){this.fancy=Q}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(Q,...X){if(!this.enabled)return;let Y=Q;if(X&&X.length>0){let U=/%([sdijfo%])/g,W=0;if(Y=Q.replace(U,(A,H)=>{if(H==="%")return"%";if(W>=X.length)return A;let L=X[W++];switch(H){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 A}}),W<X.length)Y+=` ${X.slice(W).map((A)=>typeof A==="object"?JSON.stringify(A,null,2):String(A)).join(" ")}`}let{consoleText:Z,fileText:$}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let U=this.options.showTags!==!1&&this.name?h.gray(this.formatTag(this.name)):"",W=this.options.showIcons===!1?"":`${h.blue("\u25D0")} `;console.error(`${W}${U} ${h.cyan(Z)}`)}let _=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${$}
49
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(_)}renderProgressBar(Q,X=!1){if(!this.enabled||!this.shouldStyleConsole()||!y.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round(Q.current/Q.total*100))),Z=Math.round(Q.barLength*Y/100),$=Q.barLength-Z,J=h.green("\u2501".repeat(Z)),G=h.gray("\u2501".repeat($)),_=`[${J}${G}]`,U=`${Y}%`.padStart(4),W=Q.message?` ${Q.message}`:"",A=this.options.showIcons===!1?"":X||Y===100?h.green("\u2713"):h.blue("\u25B6"),H=this.options.showTags!==!1&&this.name?` ${h.gray(this.formatTag(this.name))}`:"",L=`\r${A}${H} ${_} ${U}${W}`,K=y.stdout.columns||80,x=" ".repeat(Math.max(0,K-L.replace(this.ANSI_PATTERN,"").length));if(Q.lastRenderedLine=`${L}${x}`,y.stdout.write(Q.lastRenderedLine),X)y.stdout.write(`
50
+ `)}finishProgressBar(Q,X){if(!this.enabled||!this.fancy||e()||!y.stdout.isTTY){this.activeProgressBar=null;return}if(Q.current<Q.total)Q.current=Q.total;if(X)Q.message=X;this.renderProgressBar(Q,!0),this.activeProgressBar=null}async clear(Q={}){if(e()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let X=await SX(this.config.logDirectory),Y=[];for(let Z of X){if(!(Q.name?new RegExp(Q.name.replace("*",".*")).test(Z):Z.startsWith(this.name))||!Z.endsWith(".log"))continue;let J=rQ(this.config.logDirectory,Z);if(Q.before)try{if((await oQ(J)).mtime>=Q.before)continue}catch(G){console.error(`Failed to get stats for file ${J}:`,G);continue}Y.push(J)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let Z of Y)try{await kX(Z),console.warn(`Deleted log file: ${Z}`)}catch($){console.error(`Failed to delete log file ${Z}:`,$)}console.warn("Log clearing process finished.")}catch(X){console.error("Error during log clearing process:",X)}}}var jG=new ZY("stacks");class MQ extends Error{timestamp;context;constructor(Q,X={}){super(Q);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=X,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 Q=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([X,Y])=>`${X}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${Q}`}}class E0 extends MQ{code="CONFIG_NOT_FOUND";constructor(Q,X,Y){let Z=Y===void 0?[]:Array.isArray(Y)?Y.filter(Boolean):[Y],$="";if(Z.length===1)$=` or alias "${Z[0]}"`;else if(Z.length>1)$=` or aliases ${Z.map((J)=>`"${J}"`).join(", ")}`;super(`Configuration "${Q}"${$} not found`,{configName:Q,alias:Y,searchPaths:X,searchPathCount:X.length})}}class tX extends MQ{code="CONFIG_LOAD_ERROR";constructor(Q,X,Y){super(`Failed to load configuration from "${Q}": ${X.message}`,{configPath:Q,configName:Y,originalError:X.name,originalMessage:X.message});this.cause=X}}class T0 extends MQ{code="CONFIG_VALIDATION_ERROR";constructor(Q,X,Y){super(`Configuration validation failed for "${Q}"`,{configPath:Q,configName:Y,validationErrors:X,errorCount:X.length})}}class N0 extends MQ{code="CONFIG_MERGE_ERROR";constructor(Q,X,Y,Z){super(`Failed to merge configuration from "${Q}" with "${X}": ${Y.message}`,{sourcePath:Q,targetPath:X,configName:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}}class ZZ extends MQ{code="ENV_VAR_ERROR";constructor(Q,X,Y,Z){super(`Failed to parse environment variable "${Q}" with value "${X}" as ${Y}`,{envKey:Q,envValue:X,expectedType:Y,configName:Z})}}class S0 extends MQ{code="FILE_SYSTEM_ERROR";constructor(Q,X,Y){super(`File system ${Q} failed for "${X}": ${Y.message}`,{operation:Q,path:X,originalError:Y.name,originalMessage:Y.message});this.cause=Y}}class k0 extends MQ{code="TYPE_GENERATION_ERROR";constructor(Q,X,Y){super(`Failed to generate types from "${Q}" to "${X}": ${Y.message}`,{configDir:Q,outputPath:X,originalError:Y.name,originalMessage:Y.message});this.cause=Y}}class eX extends MQ{code="SCHEMA_VALIDATION_ERROR";constructor(Q,X,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:Q,configName:Y,validationErrors:X,errorCount:X.length})}}class C0 extends MQ{code="BROWSER_CONFIG_ERROR";constructor(Q,X,Y,Z){super(`Failed to fetch configuration from "${Q}": ${X} ${Y}`,{endpoint:Q,status:X,statusText:Y,configName:Z})}}class x0 extends MQ{code="PLUGIN_ERROR";constructor(Q,X,Y){super(`Plugin "${Q}" failed during ${X}: ${Y.message}`,{pluginName:Q,operation:X,originalError:Y.name,originalMessage:Y.message});this.cause=Y}}var QX={configNotFound(Q,X,Y){return new E0(Q,X,Y)},configLoad(Q,X,Y){return new tX(Q,X,Y)},configValidation(Q,X,Y){return new T0(Q,X,Y)},configMerge(Q,X,Y,Z){return new N0(Q,X,Y,Z)},envVar(Q,X,Y,Z){return new ZZ(Q,X,Y,Z)},fileSystem(Q,X,Y){return new S0(Q,X,Y)},typeGeneration(Q,X,Y){return new k0(Q,X,Y)},schemaValidation(Q,X,Y){return new eX(Q,X,Y)},browserConfig(Q,X,Y,Z){return new C0(Q,X,Y,Z)},plugin(Q,X,Y){return new x0(Q,X,Y)}};async function A7(Q,X={}){let{maxRetries:Y=3,retryDelay:Z=1000,isRetryable:$=()=>!0,fallback:J}=X,G=Error("Unknown error occurred");for(let _=0;_<=Y;_++)try{return await Q()}catch(U){if(G=U instanceof Error?U:Error(String(U)),_===Y||!$(G))break;if(Z>0)await new Promise((W)=>setTimeout(W,Z))}if(J!==void 0)return J;throw G instanceof Error?G:Error(`Unknown error: ${String(G)}`)}class $Z{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(Q,X)=>X==="boolean"||["true","false","1","0","yes","no"].includes(Q.toLowerCase()),parse:(Q)=>{let X=Q.toLowerCase();return["true","1","yes"].includes(X)}},{name:"number",canParse:(Q,X)=>X==="number"||!Number.isNaN(Number(Q))&&!Number.isNaN(Number.parseFloat(Q)),parse:(Q)=>{let X=Number(Q);if(Number.isNaN(X))throw TypeError(`Cannot parse "${Q}" as number`);return X}},{name:"array",canParse:(Q,X)=>X==="array"||Q.startsWith("[")||Q.includes(","),parse:(Q)=>{try{let X=JSON.parse(Q);if(Array.isArray(X))return X}catch{}return Q.split(",").map((X)=>X.trim())}},{name:"json",canParse:(Q,X)=>X==="object"||(Q.startsWith("{")&&Q.endsWith("}")||Q.startsWith("[")&&Q.endsWith("]")),parse:(Q)=>{try{return JSON.parse(Q)}catch(X){throw Error(`Cannot parse "${Q}" as JSON: ${X}`)}}}]}async applyEnvironmentVariables(Q,X,Y={}){let{prefix:Z,useCamelCase:$=!0,useBackwardCompatibility:J=!0,customParsers:G={},verbose:_=!1,trackPerformance:U=!0}=Y,W=async()=>{if(!Q)return{config:X,source:{type:"environment",priority:50,timestamp:new Date}};let A=Z||this.generateEnvPrefix(Q),H={...X};return this.processObject(H,[],A,{useCamelCase:$,useBackwardCompatibility:J,customParsers:G,verbose:_,configName:Q}),{config:H,source:{type:"environment",priority:50,timestamp:new Date}}};if(U)return oY.track("applyEnvironmentVariables",W,{configName:Q});return W()}generateEnvPrefix(Q){return Q.toUpperCase().replace(/-/g,"_")}formatEnvKey(Q,X){if(!X)return Q.toUpperCase();return Q.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(Q,X,Y,Z){for(let[$,J]of Object.entries(Q)){let G=[...X,$],_=G.map((A)=>this.formatEnvKey(A,Z.useCamelCase)),U=`${Y}_${_.join("_")}`,W=Z.useBackwardCompatibility?`${Y}_${G.map((A)=>A.toUpperCase()).join("_")}`:null;if(Z.verbose);if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.processObject(J,G,Y,Z);else{let A=CX.env[U]||(W?CX.env[W]:void 0);if(A!==void 0){if(Z.verbose){let H=CX.env[U]?U:W}try{Q[$]=this.parseEnvironmentValue(A,typeof J,U,Z.customParsers,Z.configName)}catch(H){if(H instanceof ZZ)throw H;throw QX.envVar(U,A,typeof J,Z.configName)}}}}}parseEnvironmentValue(Q,X,Y,Z,$){for(let[J,G]of Object.entries(Z))try{return G(Q)}catch{continue}for(let J of this.defaultParsers)if(J.canParse(Q,X))try{return J.parse(Q)}catch{throw QX.envVar(Y,Q,`${X} (via ${J.name} parser)`,$)}return Q}getEnvironmentVariables(Q){let X={},Y=Q.toUpperCase();for(let[Z,$]of Object.entries(CX.env))if(Z.startsWith(Y)&&$!==void 0)X[Z]=$;return X}validateEnvironmentVariable(Q,X,Y){let Z=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(Q))Z.push(`Environment variable key "${Q}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue(Q,X,Y,{})}catch($){Z.push(`Cannot parse value "${X}" as ${Y}: ${$}`)}return{isValid:Z.length===0,errors:Z}}generateEnvVarDocs(Q,X,Y={}){let{prefix:Z,format:$="text"}=Y,J=Z||this.generateEnvPrefix(Q),G=[];switch(this.extractEnvVarInfo(X,[],J,G),$){case"markdown":return this.formatAsMarkdown(G,Q);case"json":return JSON.stringify(G,null,2);default:return this.formatAsText(G,Q)}}extractEnvVarInfo(Q,X,Y,Z){for(let[$,J]of Object.entries(Q)){let G=[...X,$],_=`${Y}_${G.map((U)=>this.formatEnvKey(U,!0)).join("_")}`;if(typeof J==="object"&&J!==null&&!Array.isArray(J))this.extractEnvVarInfo(J,G,Y,Z);else Z.push({key:_,type:Array.isArray(J)?"array":typeof J,description:`Configuration for ${G.join(".")}`,example:this.generateExample(J)})}}generateExample(Q){if(Array.isArray(Q))return JSON.stringify(Q);if(typeof Q==="object"&&Q!==null)return JSON.stringify(Q);return String(Q)}formatAsText(Q,X){let Y=`Environment Variables for ${X}:
51
+
52
+ `;for(let Z of Q)Y+=`${Z.key}
53
+ `,Y+=` Type: ${Z.type}
54
+ `,Y+=` Description: ${Z.description}
55
+ `,Y+=` Example: ${Z.example}
56
+
57
+ `;return Y}formatAsMarkdown(Q,X){let Y=`# Environment Variables for ${X}
58
+
59
+ `;Y+=`| Variable | Type | Description | Example |
60
+ `,Y+=`|----------|------|-------------|----------|
61
+ `;for(let Z of Q)Y+=`| \`${Z.key}\` | ${Z.type} | ${Z.description} | \`${Z.example}\` |
62
+ `;return Y}}function H7(Q,X,Y={}){return b0(Q,X,Y,new WeakMap)}function b0(Q,X,Y,Z){let{arrayMergeMode:$="replace",skipNullish:J=!1,customMerger:G}=Y;if(X===null||X===void 0)return J?Q:X;if(G){let _=G(Q,X);if(_!==void 0)return _}if(Array.isArray(X)||Array.isArray(Q))return P0(Q,X,$,Z);if(!jQ(X)||!jQ(Q))return X;return K7(Q,X,Y,Z)}function P0(Q,X,Y,Z){if(Array.isArray(X)&&!Array.isArray(Q))return X;if(Array.isArray(Q)&&!Array.isArray(X))return X;if(Array.isArray(X)&&Array.isArray(Q))switch(Y){case"replace":return X;case"concat":return z7(Q,X);case"smart":return B7(Q,X,Z);default:return X}return X}function z7(Q,X){let Y=[...X];for(let Z of Q)if(!Y.some(($)=>sY($,Z)))Y.push(Z);return Y}function B7(Q,X,Y){if(X.length===0)return Q;if(Q.length===0)return X;if(jQ(X[0])&&jQ(Q[0]))return q7(Q,X,Y);if(X.every((Z)=>typeof Z==="string")&&Q.every((Z)=>typeof Z==="string")){let Z=[...X];for(let $ of Q)if(!Z.includes($))Z.push($);return Z}return X}function q7(Q,X,Y){let Z=[...X];for(let $ of Q){if(!jQ($)){Z.push($);continue}let J=["id","name","key","path","type"],G=!1;for(let _ of J)if(_ in $){if(Z.find((W)=>jQ(W)&&(_ in W)&&W[_]===$[_])){G=!0;break}}if(!G)Z.push($)}return Z}function K7(Q,X,Y,Z){let $=X;if(jQ($)&&Z.has($))return Z.get($);let J={...Q};if(jQ($))Z.set($,J);for(let G in $){if(!Object.prototype.hasOwnProperty.call($,G))continue;let _=$[G],U=J[G];if(Y.skipNullish&&(_===null||_===void 0))continue;if(_===null||_===void 0){J[G]=_;continue}if(jQ(_)&&jQ(U))J[G]=b0(U,_,Y,Z);else if(Array.isArray(_)||Array.isArray(U))J[G]=P0(U,_,Y.arrayMergeMode||"smart",Z);else J[G]=_}return J}function y0(Q,X,Y="replace"){return H7(Q,X,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function sY(Q,X){if(Q===X)return!0;if(Array.isArray(Q)&&Array.isArray(X)){if(Q.length!==X.length)return!1;for(let Y=0;Y<Q.length;Y++)if(!sY(Q[Y],X[Y]))return!1;return!0}if(jQ(Q)&&jQ(X)){let Y=Object.keys(Q),Z=Object.keys(X);if(Y.length!==Z.length)return!1;for(let $ of Y){if(!Object.prototype.hasOwnProperty.call(X,$))return!1;if(!sY(Q[$],X[$]))return!1}return!0}return!1}function jQ(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}class v0{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(Q,X,Y={}){let{arrayStrategy:Z="replace",useCache:$=!0,cacheTtl:J,trackPerformance:G=!0,verbose:_=!1}=Y;if($){let W=cX.getWithFileCheck("file",Q);if(W){if(_)console.log(`Configuration loaded from cache: ${Q}`);return W}}let U=async()=>{if(!xX(Q))return null;try{let W=`?t=${Date.now()}`,A=await import(Q+W),H=A.default||A,L="default"in A,K=Object.keys(A).length>0;if(!L&&!K)throw new tX(Q,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof H!=="object"||H===null||Array.isArray(H))throw new tX(Q,Error("Configuration must export a valid object"),"unknown");let k={config:y0(X,H,Z),source:{type:"file",path:Q,priority:100,timestamp:new Date}};if($)cX.setWithFileCheck("file",k,Q,J);return k}catch(W){throw W instanceof Error?QX.configLoad(Q,W):QX.configLoad(Q,Error(String(W)))}};if(G)return oY.track("loadFromPath",U,{path:Q});return U()}async tryLoadFromPaths(Q,X,Y={}){for(let Z of Q)try{let $=await this.loadFromPath(Z,X,Y);if($)return $}catch($){if($ instanceof Error&&$.name==="ConfigLoadError")throw $;if(Y.verbose)console.warn(`Failed to load config from ${Z}:`,$)}return null}generateConfigPaths(Q,X,Y){let Z=this.generateNamePatterns(Q,Y),$=[];for(let J of Z)for(let G of this.extensions)$.push(NY(X,`${J}${G}`));return $}generateNamePatterns(Q,X){let Y=[];if(Y.push("config",".config"),Q)Y.push(Q,`.${Q}.config`,`${Q}.config`,`.${Q}`);let Z=X===void 0?[]:Array.isArray(X)?X:[X];for(let J of Z){if(!J)continue;if(Y.push(J,`.${J}.config`,`${J}.config`,`.${J}`),Q)Y.push(`${Q}.${J}.config`,`.${Q}.${J}.config`)}let $=new Set;return Y.filter((J)=>{if(!J||$.has(J))return!1;return $.add(J),!0})}checkFileAccess(Q){return A7(async()=>{return xX(Q)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(Q,X,Y){let Z=[];if(!xX(Q))return Z;if(X||Y){let $=this.generateNamePatterns(X||"",Y);for(let J of $)for(let G of this.extensions){let _=NY(Q,`${J}${G}`);if(await this.checkFileAccess(_))Z.push(_)}}else try{let{readdirSync:$}=await import("fs"),J=$(Q);for(let G of J)if(this.looksLikeConfigFile(G)){let _=NY(Q,G);if(await this.checkFileAccess(_))Z.push(_)}}catch{return[]}return Z}looksLikeConfigFile(Q){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((Y)=>Y.test(Q))}async validateConfigFile(Q){let X=[];try{if(!xX(Q))return X.push("Configuration file does not exist"),X;let Y=await import(Q),Z=Y.default||Y;if(Z===void 0)X.push("Configuration file must export a default value or named exports");else if(typeof Z!=="object"||Z===null)X.push("Configuration must be an object");else if(Array.isArray(Z))X.push("Configuration cannot be an array at the root level");if(Q.endsWith(".json"))try{let{readFileSync:$}=await import("fs"),J=$(Q,"utf8");JSON.parse(J)}catch($){X.push(`Invalid JSON syntax: ${$}`)}}catch(Y){X.push(`Failed to load configuration file: ${Y}`)}return X}async getFileModificationTime(Q){try{let{statSync:X}=await import("fs");return X(Q).mtime}catch{return null}}async preloadConfigurations(Q,X={}){let Y=new Map;return await Promise.allSettled(Q.map(async(Z)=>{try{let $=await this.loadFromPath(Z,{},X);if($)Y.set(Z,$.config)}catch($){if(X.verbose)console.warn(`Failed to preload ${Z}:`,$)}})),Y}}var L7=/^https?:\/\//;class d0{async validateConfiguration(Q,X,Y={}){let{stopOnFirstError:Z=!1,validateRequired:$=!0,validateTypes:J=!0,customRules:G=[],trackPerformance:_=!0,verbose:U=!1}=Y,W=async()=>{let A=[],H=[],L={stopOnFirstError:Z,validateRequired:$,validateTypes:J,customRules:G,trackPerformance:_,verbose:U};try{if(typeof X==="string")return await this.validateWithSchemaFile(Q,X,L);else if(Array.isArray(X))return this.validateWithRules(Q,[...X,...G],L);else return this.validateWithJSONSchema(Q,X,L)}catch(K){return A.push({path:"",message:`Validation failed: ${K}`,rule:"system"}),{isValid:!1,errors:A,warnings:H}}};if(_)return await oY.track("validateConfiguration",W);return W()}async validateWithSchemaFile(Q,X,Y){try{if(!r8(X))throw new eX(X,[{path:"",message:"Schema file does not exist"}]);let Z=await import(X),$=Z.default||Z;if(Array.isArray($))return this.validateWithRules(Q,$,Y);else return this.validateWithJSONSchema(Q,$,Y)}catch(Z){throw new eX(X,[{path:"",message:`Failed to load schema: ${Z}`}])}}validateWithJSONSchema(Q,X,Y){let Z=[],$=[];return this.validateObjectAgainstSchema(Q,X,"",Z,$,Y),{isValid:Z.length===0,errors:Z,warnings:$}}validateObjectAgainstSchema(Q,X,Y,Z,$,J){if(J.validateTypes&&X.type){let G=Array.isArray(Q)?"array":typeof Q,_=Array.isArray(X.type)?X.type:[X.type];if(!_.includes(G)){if(Z.push({path:Y,message:`Expected type ${_.join(" or ")}, got ${G}`,expected:_.join(" or "),actual:G,rule:"type"}),J.stopOnFirstError)return}}if(X.enum&&!X.enum.includes(Q)){if(Z.push({path:Y,message:`Value must be one of: ${X.enum.join(", ")}`,expected:X.enum.join(", "),actual:Q,rule:"enum"}),J.stopOnFirstError)return}if(typeof Q==="string"){if(X.minLength!==void 0&&Q.length<X.minLength)Z.push({path:Y,message:`String length must be at least ${X.minLength}`,expected:`>= ${X.minLength}`,actual:Q.length,rule:"minLength"});if(X.maxLength!==void 0&&Q.length>X.maxLength)Z.push({path:Y,message:`String length must not exceed ${X.maxLength}`,expected:`<= ${X.maxLength}`,actual:Q.length,rule:"maxLength"});if(X.pattern){if(!new RegExp(X.pattern).test(Q))Z.push({path:Y,message:`String does not match pattern ${X.pattern}`,expected:X.pattern,actual:Q,rule:"pattern"})}}if(typeof Q==="number"){if(X.minimum!==void 0&&Q<X.minimum)Z.push({path:Y,message:`Value must be at least ${X.minimum}`,expected:`>= ${X.minimum}`,actual:Q,rule:"minimum"});if(X.maximum!==void 0&&Q>X.maximum)Z.push({path:Y,message:`Value must not exceed ${X.maximum}`,expected:`<= ${X.maximum}`,actual:Q,rule:"maximum"})}if(Array.isArray(Q)&&X.items)for(let G=0;G<Q.length;G++){let _=Y?`${Y}[${G}]`:`[${G}]`;if(this.validateObjectAgainstSchema(Q[G],X.items,_,Z,$,J),J.stopOnFirstError&&Z.length>0)return}if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let G=Q;if(J.validateRequired&&X.required){for(let _ of X.required)if(!(_ in G)){if(Z.push({path:Y?`${Y}.${_}`:_,message:`Missing required property '${_}'`,expected:"required",rule:"required"}),J.stopOnFirstError)return}}if(X.properties){for(let[_,U]of Object.entries(X.properties))if(_ in G){let W=Y?`${Y}.${_}`:_;if(this.validateObjectAgainstSchema(G[_],U,W,Z,$,J),J.stopOnFirstError&&Z.length>0)return}}if(X.additionalProperties===!1){let _=new Set(Object.keys(X.properties||{}));for(let U of Object.keys(G))if(!_.has(U))$.push({path:Y?`${Y}.${U}`:U,message:`Additional property '${U}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(Q,X,Y){let Z=[],$=[];for(let J of X)try{let G=this.getValueByPath(Q,J.path),_=this.validateWithRule(G,J,J.path);if(Z.push(..._),Y.stopOnFirstError&&Z.length>0)break}catch(G){Z.push({path:J.path,message:`Rule validation failed: ${G}`,rule:"system"})}return{isValid:Z.length===0,errors:Z,warnings:$}}validateWithRule(Q,X,Y){let Z=[];if(X.required&&(Q===void 0||Q===null))return Z.push({path:Y,message:X.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),Z;if(Q===void 0||Q===null)return Z;if(X.type){let $=Array.isArray(Q)?"array":typeof Q;if($!==X.type)Z.push({path:Y,message:X.message||`Expected type ${X.type}, got ${$}`,expected:X.type,actual:$,rule:"type"})}if(X.min!==void 0){let $=Array.isArray(Q)?Q.length:typeof Q==="string"?Q.length:typeof Q==="number"?Q:0;if($<X.min)Z.push({path:Y,message:X.message||`Value must be at least ${X.min}`,expected:`>= ${X.min}`,actual:$,rule:"min"})}if(X.max!==void 0){let $=Array.isArray(Q)?Q.length:typeof Q==="string"?Q.length:typeof Q==="number"?Q:0;if($>X.max)Z.push({path:Y,message:X.message||`Value must not exceed ${X.max}`,expected:`<= ${X.max}`,actual:$,rule:"max"})}if(X.pattern&&typeof Q==="string"){if(!X.pattern.test(Q))Z.push({path:Y,message:X.message||`Value does not match pattern ${X.pattern}`,expected:X.pattern.toString(),actual:Q,rule:"pattern"})}if(X.enum&&!X.enum.includes(Q))Z.push({path:Y,message:X.message||`Value must be one of: ${X.enum.join(", ")}`,expected:X.enum.join(", "),actual:Q,rule:"enum"});if(X.validator){let $=X.validator(Q);if($)Z.push({path:Y,message:X.message||$,rule:"custom"})}return Z}getValueByPath(Q,X){if(!X)return Q;let Y=X.split("."),Z=Q;for(let $ of Y)if(Z&&typeof Z==="object"&&$ in Z)Z=Z[$];else return;return Z}generateRulesFromInterface(Q){let X=[],Y=Q.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Z of Y){let[,$,J,G]=Z;X.push({path:$,required:!J,type:this.mapTypeScriptType(G)})}return X}mapTypeScriptType(Q){switch(Q.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:L7},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var OQ=new ZY("bunfig",{showTags:!0});function j7(Q){if(!Q)return"";let X=Array.isArray(Q)?Q.filter(Boolean):[Q];if(X.length===0)return"";if(X.length===1)return` or alias "${X[0]}"`;return` or aliases ${X.map((Y)=>`"${Y}"`).join(", ")}`}class h0{fileLoader=new v0;envProcessor=new $Z;validator=new d0;async loadConfig(Q){let X=Date.now(),{cache:Y,performance:Z,schema:$,validate:J,...G}=Q;try{if(Y?.enabled){let U=this.checkCache(G.name||"",G);if(U)return U}let _;try{_=await this.loadConfigurationStrategies(G,!0,Y)}catch(U){let W=G.__strictErrorHandling;if(U instanceof Error&&U.name==="ConfigNotFoundError"){if(W)throw U;_={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`No configuration file found for "${G.name||"config"}", using defaults with environment variables`]}}else if(U instanceof Error&&U.name==="ConfigLoadError"){let A=U.message.includes("EACCES")||U.message.includes("EPERM")||U.message.includes("permission denied"),H=!A&&(U.message.includes("syntax")||U.message.includes("Expected")||U.message.includes("Unexpected")||U.message.includes("BuildMessage")||U.message.includes("errors building")),L=U.message.includes("Configuration must export a valid object")||U.message.includes("Configuration file is empty and exports nothing");if(W&&(L||A))throw U;if(H&&(!W||!L))_={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!W)_={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`Configuration loading error, using defaults: ${U.message}`]};else throw U}else _={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${U instanceof Error?U.message:String(U)}`]}}if($||J)await this.validateConfiguration(_.config,$,J,G.name);if(Y?.enabled&&_)this.cacheResult(G.name||"",_,Y,G);if(Z?.enabled){let U={operation:"loadConfig",duration:Date.now()-X,configName:G.name,timestamp:new Date};if(Z.onMetrics)Z.onMetrics(U);if(Z.slowThreshold&&U.duration>Z.slowThreshold)OQ.warn(`Slow configuration loading detected: ${U.duration}ms for ${G.name}`);_.metrics=U}return _}catch(_){if(_ instanceof Error&&_.name==="ConfigNotFoundError")throw _;let U=Date.now()-X;throw OQ.error(`Configuration loading failed after ${U}ms:`,[_ instanceof Error?_:Error(String(_))]),_}}async loadConfigurationStrategies(Q,X=!1,Y){let{name:Z="",alias:$,cwd:J,configDir:G,defaultConfig:_,checkEnv:U=!0,arrayStrategy:W="replace",verbose:A=!1}=Q,H=J||QY.cwd(),L=[],K=await this.loadLocalConfiguration(Z,$,H,G,_,W,A,U,Y);if(K)return L.push(...this.getLocalSearchPaths(Z,$,H,G)),this.finalizeResult(K,L,U,Z,A);let x=await this.loadHomeConfiguration(Z,$,_,W,A,U);if(x)return L.push(...this.getHomeSearchPaths(Z,$)),this.finalizeResult(x,L,U,Z,A);let M=await this.loadPackageJsonConfiguration(Z,$,H,_,W,A,U);if(M)return L.push(KQ(H,"package.json")),this.finalizeResult(M,L,U,Z,A);if(L.push(...this.getAllSearchPaths(Z,$,H,G)),X)throw QX.configNotFound(Z,L,$);return{...await this.applyEnvironmentVariables(Z,_,U,A),warnings:[`No configuration file found for "${Z}"${j7($)}, using defaults with environment variables`]}}async loadLocalConfiguration(Q,X,Y,Z,$,J,G,_,U){let W=_?PX(Q,$,G):$,A=this.getLocalDirectories(Y,Z);for(let H of A){if(G)OQ.info(`Searching for configuration in: ${H}`);let L=this.fileLoader.generateConfigPaths(Q,H,X),K=await this.fileLoader.tryLoadFromPaths(L,W,{arrayStrategy:J,verbose:G,cacheTtl:U?.ttl,useCache:!U?.ttl||U.ttl>100});if(K){if(G)OQ.success(`Configuration loaded from: ${K.source.path}`);return K}}return null}async loadHomeConfiguration(Q,X,Y,Z,$,J){if(!Q)return null;let G=J?PX(Q,Y,$):Y,_=[KQ(mQ(),".config",Q),KQ(mQ(),".config"),mQ()];for(let U of _){if($)OQ.info(`Checking home directory: ${U}`);let W=this.fileLoader.generateConfigPaths(Q,U,X),A=await this.fileLoader.tryLoadFromPaths(W,G,{arrayStrategy:Z,verbose:$});if(A){if($)OQ.success(`Configuration loaded from home directory: ${A.source.path}`);return A}}return null}async loadPackageJsonConfiguration(Q,X,Y,Z,$,J,G){let _=G?PX(Q,Z,J):Z;try{let U=KQ(Y,"package.json");if(!A8(U))return null;let W={};try{W=JSON.parse(H8(U,"utf8"))}catch(L){if(J)OQ.warn("Failed to parse package.json:",[L instanceof Error?L:Error(String(L))]);return null}let A=W[Q],H=Q;if(!A&&X){let L=Array.isArray(X)?X:[X];for(let K of L){if(!K)continue;if(W[K]){A=W[K],H=K;break}}}if(A&&typeof A==="object"&&!Array.isArray(A)){if(J)OQ.success(`Configuration loaded from package.json: ${H}`);return{config:y0(_,A,$),source:{type:"package.json",path:U,priority:30,timestamp:new Date}}}}catch(U){if(J)OQ.warn("Failed to load package.json:",[U instanceof Error?U:Error(String(U))])}return null}async applyEnvironmentVariables(Q,X,Y,Z){if(!Y||!Q||typeof X!=="object"||X===null||Array.isArray(X))return{config:X,source:{type:"default",priority:10,timestamp:new Date}};return{config:PX(Q,X,Z),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(Q,X,Y,Z,$){return{config:Q.config,source:Q.source,path:Q.source.path}}async validateConfiguration(Q,X,Y,Z){let $=[];if(Y){let J=Y(Q);if(J)$.push(...J)}if(X){let J=await this.validator.validateConfiguration(Q,X);if(!J.isValid)$.push(...J.errors.map((G)=>G.path?`${G.path}: ${G.message}`:G.message))}if($.length>0)throw QX.configValidation(Z||"unknown",$,Z)}checkCache(Q,X){let Y=this.generateCacheKey(Q,X);return cX.get(Y)||null}cacheResult(Q,X,Y,Z){let $=this.generateCacheKey(Q,Z);cX.set($,X,void 0,Y.ttl)}generateCacheKey(Q,X){let Y=[Q];if(X.alias){let Z=Array.isArray(X.alias)?X.alias.join(","):X.alias;Y.push(`alias:${Z}`)}if(X.cwd)Y.push(`cwd:${X.cwd}`);if(X.configDir)Y.push(`configDir:${X.configDir}`);if("checkEnv"in X)Y.push(`checkEnv:${X.checkEnv}`);return Y.join("|")}getLocalDirectories(Q,X){return Array.from(new Set([Q,KQ(Q,"config"),KQ(Q,".config"),X?KQ(Q,X):void 0].filter(Boolean)))}getAllSearchPaths(Q,X,Y,Z){let $=[];return $.push(...this.getLocalSearchPaths(Q,X,Y,Z)),$.push(...this.getHomeSearchPaths(Q,X)),$.push(KQ(Y,"package.json")),$}getLocalSearchPaths(Q,X,Y,Z){let $=this.getLocalDirectories(Y,Z),J=[];for(let G of $)J.push(...this.fileLoader.generateConfigPaths(Q,G,X));return J}getHomeSearchPaths(Q,X){if(!Q)return[];let Y=[KQ(mQ(),".config",Q),KQ(mQ(),".config"),mQ()],Z=[];for(let $ of Y)Z.push(...this.fileLoader.generateConfigPaths(Q,$,X));return Z}async loadConfigWithResult(Q){return this.loadConfig(Q)}}var PY=new h0;async function Q0(Q){let X="defaultConfig"in Q&&Q.defaultConfig!==void 0?Q.defaultConfig:{},Y="cache"in Q||"performance"in Q||"schema"in Q||"validate"in Q;try{let Z;if(Y)Z=await PY.loadConfig(Q);else Z=await PY.loadConfig({...Q,defaultConfig:X,cache:{enabled:!0},performance:{enabled:!1}});return Z?.config??X}catch(Z){let $=Z instanceof Error?Z.name:"UnknownError",J=Z instanceof Error?Z.message:String(Z);if(!($==="ConfigNotFoundError"||$==="ConfigLoadError"||$==="ConfigValidationError"||J.includes("config"))&&Q.verbose)OQ.warn("Unexpected error loading config, using defaults:",[Z instanceof Error?Z:Error(String(Z))]);let _=Y?{...Q,defaultConfig:X}:{...Q,defaultConfig:X,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in Q?Q.checkEnv!==!1:!0)return(await PY.applyEnvironmentVariables(_.name||"",X,!0,_.verbose||!1))?.config??X;return X}}function PX(Q,X,Y=!1){let Z=new $Z,$=Q.toUpperCase().replace(/[^A-Z0-9]/g,"_");function J(G,_=[]){let U={...G};for(let[W,A]of Object.entries(G)){let H=[..._,W],L=[`${$}_${H.join("_").toUpperCase()}`,`${$}_${H.map((M)=>M.toUpperCase()).join("")}`,`${$}_${H.map((M)=>M.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],K,x;for(let M of L)if(K=QY.env[M],K!==void 0){x=M;break}if(K!==void 0&&x)if(typeof A==="boolean")U[W]=["true","1","yes"].includes(K.toLowerCase());else if(typeof A==="number"){let M=Number(K);if(!Number.isNaN(M))U[W]=M}else if(Array.isArray(A))try{U[W]=JSON.parse(K)}catch{U[W]=K.split(",").map((M)=>M.trim())}else U[W]=K;else if(A&&typeof A==="object"&&!Array.isArray(A))U[W]=J(A,H)}return U}return J(X)}var wG=KQ(QY.cwd(),"config"),RG=KQ(QY.cwd(),"src/generated"),yY=import("@stacksjs/stx");function w7(Q){let X=($)=>$.replace(/\[([^\]]+)\]/g,"([^/]+)").replace(/\//g,"\\/"),Y=[new RegExp(`^${X(Q)}$`)],Z=Q.replace(/\/index$/,"");if(Z!==Q)Y.push(new RegExp(`^${X(Z)}$`));if(Q.startsWith("pages/")){let $=Q.slice(6);Y.push(new RegExp(`^${X($)}$`));let J=$.replace(/\/index$/,"");if(J!==$)Y.push(new RegExp(`^${X(J)}$`))}return Y}function vY(Q){return Q.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function R7(){let Q=(n.env.NODE_ENV||"").toLowerCase(),X=(n.env.APP_ENV||"").toLowerCase(),Y=new Set(["development","dev","local","test","testing"]);return!(Y.has(Q)||Y.has(X))}function I7(Q){let{path:X,routes:Y=[],isProduction:Z}=Q,$=`
63
+ *, *::before, *::after { box-sizing: border-box; }
64
+ body {
65
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
66
+ margin: 0;
67
+ min-height: 100vh;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ padding: 2rem;
72
+ background: #ffffff;
73
+ color: #1a202c;
74
+ line-height: 1.5;
75
+ }
76
+ main { max-width: 32rem; width: 100%; text-align: center; }
77
+ .code { font-size: 3.5rem; font-weight: 700; letter-spacing: -0.02em; margin: 0; }
78
+ h1 { font-size: 1.25rem; font-weight: 600; margin: 0.75rem 0 0.5rem; }
79
+ p { margin: 0.5rem 0; color: #4a5568; }
80
+ a { color: #4a5568; }
81
+ .home {
82
+ display: inline-block;
83
+ margin-top: 1.5rem;
84
+ padding: 0.6rem 1.25rem;
85
+ border-radius: 0.5rem;
86
+ background: #1a202c;
87
+ color: #ffffff;
88
+ text-decoration: none;
89
+ font-weight: 500;
90
+ font-size: 0.95rem;
91
+ }
92
+ .home:hover { opacity: 0.85; }
93
+ @media (prefers-color-scheme: dark) {
94
+ body { background: #0f1115; color: #e2e8f0; }
95
+ p { color: #a0aec0; }
96
+ a { color: #a0aec0; }
97
+ .home { background: #e2e8f0; color: #0f1115; }
98
+ }`;if(Z)return`<!DOCTYPE html>
99
+ <html lang="en">
100
+ <head>
101
+ <meta charset="utf-8">
102
+ <meta name="viewport" content="width=device-width, initial-scale=1">
103
+ <meta name="robots" content="noindex">
104
+ <title>404 - Page Not Found</title>
105
+ <style>
106
+ *, *::before, *::after { box-sizing: border-box; }
107
+ body {
108
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
109
+ margin: 0;
110
+ min-height: 100vh;
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: center;
114
+ padding: 2rem;
115
+ background: #ffffff;
116
+ color: #1a202c;
117
+ line-height: 1.5;
118
+ }
119
+ main { max-width: 32rem; width: 100%; text-align: center; }
120
+ .code { font-size: 3.5rem; font-weight: 700; letter-spacing: -0.02em; margin: 0; }
121
+ h1 { font-size: 1.25rem; font-weight: 600; margin: 0.75rem 0 0.5rem; }
122
+ p { margin: 0.5rem 0; color: #4a5568; }
123
+ a { color: #4a5568; }
124
+ .home {
125
+ display: inline-block;
126
+ margin-top: 1.5rem;
127
+ padding: 0.6rem 1.25rem;
128
+ border-radius: 0.5rem;
129
+ background: #1a202c;
130
+ color: #ffffff;
131
+ text-decoration: none;
132
+ font-weight: 500;
133
+ font-size: 0.95rem;
134
+ }
135
+ .home:hover { opacity: 0.85; }
136
+ @media (prefers-color-scheme: dark) {
137
+ body { background: #0f1115; color: #e2e8f0; }
138
+ p { color: #a0aec0; }
139
+ a { color: #a0aec0; }
140
+ .home { background: #e2e8f0; color: #0f1115; }
141
+ }
142
+ </style>
143
+ </head>
144
+ <body>
145
+ <main>
146
+ <p class="code">404</p>
147
+ <h1>Page not found</h1>
148
+ <p>The page you're looking for doesn't exist or may have moved.</p>
149
+ <a class="home" href="/">Go to homepage</a>
150
+ </main>
151
+ </body>
152
+ </html>`;let J=Y.map((G)=>`<li><a href="/${vY(G)}">/${vY(G)}</a></li>`).join(`
153
+ `);return`<!DOCTYPE html>
154
+ <html lang="en">
155
+ <head>
156
+ <meta charset="utf-8">
157
+ <meta name="viewport" content="width=device-width, initial-scale=1">
158
+ <title>404 - Not Found</title>
159
+ <style>
160
+ *, *::before, *::after { box-sizing: border-box; }
161
+ body {
162
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
163
+ margin: 0;
164
+ min-height: 100vh;
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: center;
168
+ padding: 2rem;
169
+ background: #ffffff;
170
+ color: #1a202c;
171
+ line-height: 1.5;
172
+ }
173
+ main { max-width: 32rem; width: 100%; text-align: center; }
174
+ .code { font-size: 3.5rem; font-weight: 700; letter-spacing: -0.02em; margin: 0; }
175
+ h1 { font-size: 1.25rem; font-weight: 600; margin: 0.75rem 0 0.5rem; }
176
+ p { margin: 0.5rem 0; color: #4a5568; }
177
+ a { color: #4a5568; }
178
+ .home {
179
+ display: inline-block;
180
+ margin-top: 1.5rem;
181
+ padding: 0.6rem 1.25rem;
182
+ border-radius: 0.5rem;
183
+ background: #1a202c;
184
+ color: #ffffff;
185
+ text-decoration: none;
186
+ font-weight: 500;
187
+ font-size: 0.95rem;
188
+ }
189
+ .home:hover { opacity: 0.85; }
190
+ @media (prefers-color-scheme: dark) {
191
+ body { background: #0f1115; color: #e2e8f0; }
192
+ p { color: #a0aec0; }
193
+ a { color: #a0aec0; }
194
+ .home { background: #e2e8f0; color: #0f1115; }
195
+ }
196
+ main { max-width: 40rem; }
197
+ .routes { list-style: none; padding: 0; margin: 2rem 0 0; text-align: left; }
198
+ .routes li { margin: 0.35rem 0; }
199
+ .routes a { color: #667eea; text-decoration: none; font-size: 1.05rem; }
200
+ .routes a:hover { text-decoration: underline; }
201
+ .dev-note { font-size: 0.85rem; margin-top: 1.5rem; opacity: 0.7; }
202
+ @media (prefers-color-scheme: dark) { .routes a { color: #9aa8ff; } }
203
+ </style>
204
+ </head>
205
+ <body>
206
+ <main>
207
+ <p class="code">404</p>
208
+ <h1>Page not found</h1>
209
+ <p>The page "${vY(X)}" doesn't exist.</p>
210
+ <h2 style="font-size:1rem;margin-top:2rem;">Available pages</h2>
211
+ <ul class="routes">${J?`
212
+ ${J}
213
+ `:""}</ul>
214
+ <p class="dev-note">This route list is shown in development only.</p>
215
+ </main>
216
+ </body>
217
+ </html>`}var tQ={partialsDir:"partials",componentsDir:"components",layoutsDir:"layouts",publicDir:"public",ssr:!0,defaultTitle:"stx App"},X0={css:"text/css",js:"application/javascript",mjs:"application/javascript",json:"application/json",html:"text/html; charset=utf-8",txt:"text/plain",xml:"application/xml",pdf:"application/pdf",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",avif:"image/avif",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",mp4:"video/mp4",webm:"video/webm",ogg:"audio/ogg",mp3:"audio/mpeg",wav:"audio/wav",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",otf:"font/otf",eot:"application/vnd.ms-fontobject"},F7=new Set(["ts","tsx","mts","cts"]);function M7(Q){return Boolean(Q&&F7.has(Q))}function V7(Q){return Q.split(".").pop()?.toLowerCase()}function O7(Q){if(Q.includes("\x00"))return!1;return!Q.split("/").some((X)=>X==="..")}function D7(Q){let X=[Q,Q.replace(/^\/assets\//,"/resources/assets/"),Q.replace(/^\/resources\/assets\//,"/assets/")];return[...new Set(X)]}async function E7(Q){let X=await Bun.build({entrypoints:[Q],format:"esm",minify:!1,packages:"bundle",sourcemap:"inline",target:"browser"});if(!X.success){let Y=X.logs.map((Z)=>Z.message).join(`
218
+ `)||"Unable to build TypeScript asset";return new Response(Y,{status:500,headers:{"Content-Type":"text/plain; charset=utf-8","Cache-Control":"no-store"}})}return new Response(await X.outputs[0].text(),{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store"}})}async function IG(Q){let X=await Q0({name:"stx",alias:["ui"],cwd:n.cwd(),defaultConfig:tQ,checkEnv:!1,verbose:!1});try{let B=Q.stxModule?Q.stxModule:await yY;if(B&&typeof B.loadStxConfig==="function"){let z=await B.loadStxConfig();if(z?._pluginComponentDirs)X._pluginComponentDirs=z._pluginComponentDirs;if(z?._pluginPageDirs)X._pluginPageDirs=z._pluginPageDirs;if(z?.analytics)X.analytics=z.analytics}if(B&&typeof B.preloadIconCollection==="function")await B.preloadIconCollection("lucide")}catch{}let Y=Q.componentsDir??X.componentsDir??tQ.componentsDir,Z=Q.layoutsDir??X.layoutsDir??tQ.layoutsDir,$=Q.partialsDir??X.partialsDir??tQ.partialsDir,J=Q.publicDir??X.publicDir??"public",G=Q.stxModule?Promise.resolve(Q.stxModule):yY,_=null;Promise.resolve(G).then((B)=>{_=B}).catch(()=>{});let{patterns:U,port:W=3456}=Q;if(U.length===0)throw console.error("Usage: serve <files...> [--port 3000]"),console.error(`
219
+ Examples:`),console.error(" serve pages/*.stx"),console.error(" serve pages/*.md"),console.error(" serve pages/*.html"),console.error(" serve pages/ --port 3000"),console.error(" serve index.stx about.md page.html"),console.error(`
220
+ After installing: bun add bun-plugin-stx`),Error("No file patterns provided");let A=new Map,H=null,L=null,K=!1,x=new Map,M=!1,k=new Map,l=new Set,i=new TextEncoder;function wQ(B){let z=i.encode(`data: ${JSON.stringify(B)}
221
+
222
+ `);for(let w of l)try{w.enqueue(z)}catch{l.delete(w)}}let HQ=`<script data-stx-hmr>(()=>{if(window.__stxHmr)return;window.__stxHmr=1;function bust(){var ls=document.querySelectorAll('link[rel="stylesheet"]');for(var i=0;i<ls.length;i++){var l=ls[i];var u=new URL(l.href,location.href);u.searchParams.set('v',Date.now().toString(36));l.href=u.toString()}}var es=new EventSource('/_stx/hmr');es.onmessage=function(e){try{var m=JSON.parse(e.data);if(m.type==='reload')location.reload();else if(m.type==='css')bust()}catch(_){}};es.onerror=function(){if(es.readyState===2){setTimeout(function(){location.reload()},400)}}})()</script>`;function GQ(B){if(!B)return B;let z=B.lastIndexOf("</body>");if(z===-1)return B+HQ;return B.slice(0,z)+HQ+B.slice(z)}let XX=new Set,JZ=(B)=>{if(XX.has(B))return;try{W8(B,{recursive:!0},(w,j)=>{if(!j)return;let q=String(j),R=q.endsWith(".stx")||q.endsWith(".md")||q.endsWith(".html"),V=q.endsWith(".css"),D=V||q.endsWith(".js")||q.endsWith(".ts")||q.endsWith(".tsx")||q.endsWith(".mts")||q.endsWith(".cts")||q.endsWith(".jpg")||q.endsWith(".jpeg")||q.endsWith(".png")||q.endsWith(".gif")||q.endsWith(".svg")||q.endsWith(".webp")||q.endsWith(".avif")||q.endsWith(".woff")||q.endsWith(".woff2")||q.endsWith(".ttf")||q.endsWith(".otf");if(!R&&!D)return;if(R)H=null,A.clear(),x.clear(),k.clear(),_?.clearDevCaches?.();wQ(V&&!R?{type:"css",file:q}:{type:"reload",file:q})}).on("error",()=>{}),XX.add(B)}catch{}};for(let B of[Y,Z,$,J,"resources/assets"]){if(!B)continue;JZ(B)}let qX=new Map,$Y=[];function f0(B){let z=[],w=B.split("/").map((j)=>{if(!j)return"";let q=j.match(/^\[\.\.\.(.+)\]$/);if(q)return z.push(q[1]),"(.+)";let R=j.match(/^\[(.+)\]$/);if(R)return z.push(R[1]),"([^/]+)";return j.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("/");return{re:new RegExp(`^${w}/?$`),names:z}}function p0(B){let z=B;for(let w of U){let j=w.replace(/\/$/,"");if(z.startsWith(`${j}/`)){z=z.slice(j.length+1);break}}if(z=z.replace(/\.(stx|md|html)$/,""),z==="index"||z.endsWith("/index"))z=z.replace(/\/?index$/,"");return z.startsWith("/")?z:`/${z}`}async function m0(B){try{let w=(await yQ.readFile(B,"utf-8")).match(/definePageMeta\s*\(\s*\{[\s\S]*?\}\s*\)/);if(!w)return;let j=w[0].match(/middleware\s*:\s*(\[[^\]]*\]|['"][^'"]+['"])/);if(!j)return;let q=j[1].startsWith("[")?Array.from(j[1].matchAll(/['"]([^'"]+)['"]/g)).map((V)=>V[1]):[j[1].replace(/['"]/g,"")];if(q.length===0)return;let R=p0(B);if(R.includes("[")){let{re:V,names:D}=f0(R);$Y.push({re:V,names:D,middleware:q})}else qX.set(R,q)}catch{}}function g0(B){let z=qX.get(B);if(z)return{names:z,params:{}};let w=B.replace(/\/$/,"");if(w!==B){let j=qX.get(w);if(j)return{names:j,params:{}}}for(let j of $Y){let q=j.re.exec(B);if(q){let R={};return j.names.forEach((V,D)=>{R[V]=decodeURIComponent(q[D+1]??"")}),{names:j.middleware,params:R}}}return{names:[],params:{}}}function GZ(B){let z={},w=B.headers.get("cookie")||"";if(!w)return z;for(let j of w.split(/;\s*/)){let q=j.indexOf("=");if(q===-1)continue;let R=j.slice(0,q);if(!R)continue;try{z[R]=decodeURIComponent(j.slice(q+1))}catch{z[R]=j.slice(q+1)}}return z}function T7(B,z,w=""){let j=B.includes("?")?"&":"?",q=encodeURIComponent(z+w);return Response.redirect(`${B}${j}next=${q}`,302)}let YX=Q.auth===!1?null:Q.auth??{},UZ=YX?.cookieName??"auth-token",u0=YX?.redirectTo??"/login",c0=YX?.home??"/",l0=YX?.protectedPaths??[],ZX=null,dQ="",$X="",JY={},GY="",KX="";function _Z(B){if(!ZX)return;let z=ZX;B.locale=z,B.t=(w,j)=>{let q=globalThis.t;return typeof q==="function"?q(w,j,z):w}}function WZ(B){if(dQ)B.__stxServeSearch=dQ,globalThis.__stxServeSearch=dQ;if($X)B.host=$X;if(B.cookies=JY,KX)B.ip=KX}function AZ(B){let z=YQ?ZX??YQ.defaultLocale:"",w=dQ||"",j=$X||"",q=GY;if(!z&&!w&&!j&&!q)return B;return`${B}\x00${z}\x00${w}\x00${j}\x00${q}`}let n0={...YX===null?{}:{auth:(B,z)=>{if(!z.cookies[UZ])return z.redirect(u0);return null},guest:(B,z)=>{if(z.cookies[UZ])return Response.redirect(c0,302);return null}},...Q.middleware??{}};function i0(B){let z=[],w=Q.middlewareGroups??{},j=new Set,q=(R)=>{if(j.has(R))return;j.add(R);let V=w[R];if(V)V.forEach(q);else z.push(R)};return B.forEach(q),z}let s0=Q.globalMiddleware??[];function o0(B){let z=B.replace(/\\/g,"/");for(let w of U){let j=w.replace(/\\/g,"/").replace(/\/$/,"");if(!z.startsWith(`${j}/`))continue;let q=z.slice(j.length+1).replace(/\.(stx|md|html)$/,"");if(q.includes("["))return null;if(q==="index"||q==="")return"/";if(q.endsWith("/index"))q=q.slice(0,-6)||"index";return q==="index"?"/":`/${q}`}return null}function r0(B){let z=new Set(["/"]);for(let j of B){let q=o0(j);if(q)z.add(q)}let w=Q.site?.pages;if(w)for(let j of Object.keys(w))z.add(j.startsWith("/")?j:`/${j}`);L=z}async function UY(){if(H!==null)return H;let B=[],z=[".stx",".md",".html"];for(let w of U)try{if((await yQ.stat(w).catch(()=>null))?.isDirectory()){JZ(w);let q=["layouts","components","partials"];if(Z)q.push(Z.replace(/^.*\//,""));if(Y)q.push(Y.replace(/^.*\//,""));if($)q.push($.replace(/^.*\//,""));for(let R of[".stx",".md",".html"]){let V=new BZ(`**/*${R}`),D=await Array.fromAsync(V.scan({cwd:w,followSymlinks:!0}));B.push(...D.filter((O)=>!q.some((C)=>O.startsWith(`${C}/`))).map((O)=>`${w}/${O}`.replace(/\/+/g,"/")))}}else if(w.includes("*")){let q=new BZ(w),R=w.split("*")[0].replace(/\/$/,""),V=await Array.fromAsync(q.scan({cwd:R||".",followSymlinks:!0}));B.push(...V.map((D)=>R?`${R}/${D}`:D))}else if(z.some((q)=>w.endsWith(q)))B.push(w)}catch(j){console.error(`Error processing pattern "${w}":`,j)}H=B,r0(B),qX.clear(),$Y.length=0,await Promise.all(B.map((w)=>m0(w)));try{let{Router:w}=await import("./chunk-sp5cjdhd.js"),j=U.map((R)=>R.replace(/\/$/,"")).filter(Boolean),q=new w(n.cwd(),{pagesDirs:j});if(!Q.quiet)console.log(`[stx] Generated ${q.routes.length} routes \u2192 .stx/routes.ts`)}catch(w){}return B}async function a0(){if(K)return;K=!0;let B="./resources/assets",z="./.stx/assets";try{if(await yQ.stat(B).then(()=>!0).catch(()=>!1))await yQ.rm(z,{recursive:!0,force:!0}),await yQ.cp(B,z,{recursive:!0})}catch{}}async function t0(B){for(let[z,w]of B){let j=await yQ.stat(z).catch(()=>null);if(!j||j.mtimeMs!==w)return!1}return!0}async function e0(B,z){let w=new Map,j=[B,...z],q=await Promise.all(j.map((R)=>yQ.stat(R).catch(()=>null)));for(let R=0;R<j.length;R++){let V=q[R];if(V)w.set(j[R],V.mtimeMs)}return w}let JX=null,HZ=!1,_Y=null;async function Q8(){if(HZ)return JX;HZ=!0;try{let B=await import("./chunk-67am4dae.js");return JX={CSSGenerator:B.CSSGenerator,config:B.config},JX}catch{try{let z=await import(IQ.join(n.env.HOME||"","Code/Tools/crosswind/packages/crosswind/src/index.ts"));return JX={CSSGenerator:z.CSSGenerator,config:z.config},JX}catch{return null}}}async function S7(B){try{let z=await Q8();if(!z)return"";let w=/class\s*=\s*["']([^"']+)["']/gi,j=new Set,q=w.exec(B);while(q!==null){for(let I of q[1].split(/\s+/))if(I.trim())j.add(I.trim());q=w.exec(B)}let R=/(?:x-class|:class)\s*=\s*"([^"]+)"/gi,V=R.exec(B);while(V!==null){let I=V[1].match(/'([^']+)'/g);if(I)for(let E of I){let b=E.slice(1,-1);for(let F of b.split(/\s+/))if(F.trim())j.add(F.trim())}V=R.exec(B)}if(j.size===0)return"";if(!_Y)_Y=Q0({name:"crosswind",cwd:n.cwd(),defaultConfig:{},checkEnv:!1,verbose:!1});let D=await _Y;if(D.safelist)for(let I of D.safelist)j.add(I);let O=[...j].sort().join(" "),C=k.get(O);if(C!==void 0)return C;let T={...z.config,preflight:!0,minify:!1};if(D.shortcuts)T.shortcuts={...T.shortcuts||{},...D.shortcuts};if(D.theme)T.theme={...T.theme||{},...D.theme};let N=new z.CSSGenerator(T);for(let I of j)N.generate(I);let g="",QQ=T.shortcuts||{};for(let[I,E]of Object.entries(QQ)){if(!j.has(I))continue;let b=E.split(/\s+/).filter(Boolean);for(let F of b)N.generate(F)}let s=N.toCSS(!0,!1);for(let[I,E]of Object.entries(QQ)){if(!j.has(I))continue;let b=E.split(/\s+/).filter(Boolean),F=[],S=[];for(let d of b){let qQ=d.startsWith("dark:"),AQ=(qQ?d.slice(5):d).replace(/[/:.[\]%()]/g,(fQ)=>`\\${fQ}`),EQ=new RegExp(`\\.${AQ}\\s*\\{([^}]+)\\}`),RQ=s.match(EQ);if(RQ)if(qQ)S.push(RQ[1].trim());else F.push(RQ[1].trim())}if(F.length)g+=`.${I} { ${F.join(" ")} }
223
+ `;if(S.length)g+=`@media (prefers-color-scheme: dark) { .dark .${I} { ${S.join(" ")} } }
224
+ `}let f=s+g;return k.set(O,f),f}catch(z){return console.warn("Failed to generate Crosswind CSS:",z),""}}async function WY(B){let z=await Bun.file(B).text(),w=/(?:^|[^\w$])__stx_skip_cache\s*=\s*true/.test(z);if(M&&!w){let F=AZ(B),S=x.get(F);if(S&&await t0(S.signature))return S.html}let j=/<script\b([^>]*)\bserver\b[^>]*>([\s\S]*?)<\/script>/gi,q=[],R;while((R=j.exec(z))!==null)q.push(R[2]);let V=z.replace(/<script\b[^>]*\bserver\b[^>]*>[\s\S]*?<\/script>/gi,""),D={__filename:B,__dirname:IQ.dirname(B)},{processDirectives:O,extractVariables:C,defaultConfig:T,generateSpaShell:N,injectRouterScript:g,resetHead:QQ}=await G;QQ(),_Z(D),WZ(D);for(let F of q)await C(F,D,B);D.__stx_head_preset=!0;let s={...T,root:n.cwd(),...Y&&{componentsDir:Y},...Z&&{layoutsDir:Z},...$&&{partialsDir:$},autoShell:!0,ssr:X.ssr??tQ.ssr??!0,app:X.app||{},..."strict"in X&&{strict:X.strict},..."router"in X&&{router:X.router},..."debug"in X&&{debug:X.debug},..."skipDefaultSeoTags"in X&&{skipDefaultSeoTags:X.skipDefaultSeoTags},..."defaultTitle"in X&&{defaultTitle:X.defaultTitle},..."defaultDescription"in X&&{defaultDescription:X.defaultDescription},..."defaultImage"in X&&{defaultImage:X.defaultImage},..."seo"in X&&{seo:X.seo},..."analytics"in X&&{analytics:X.analytics},..."_pluginComponentDirs"in X&&{_pluginComponentDirs:X._pluginComponentDirs},..."_pluginPageDirs"in X&&{_pluginPageDirs:X._pluginPageDirs}};if(s.ssr===!1||X.ssr===!1)return N({template:V,context:D,title:X.defaultTitle??"stx App"});let f=V,I=new Set;f=await O(f,D,B,s,I),f=await g(f,AY());let E=/@for|:for|@if|:if|x-for|x-if/;if(/<template\s[^>]*(?:@for|:for|@if|:if|x-for|x-if)/.test(f))f=f.replace(/<template(?:\s[^>]*)?>|<\/template>/gi,(F)=>{if(E.test(F))return F;if(F==="</template>")return F;return""});else f=f.replace(/<template[^>]*>/gi,"").replace(/<\/template>/gi,"");if(M&&!D.__stx_skip_cache&&!w){let F=await e0(B,I);x.set(AZ(B),{html:f,signature:F})}return f}async function GX(B){let z=await UY(),w=B.startsWith("/")?B.slice(1):B,j=[];for(let R of[".stx",".md",".html",""]){let V=w.endsWith(R)?w:`${w}${R}`;j.push(V)}if(w==="")j.push("index.stx"),j.push("index.md"),j.push("index.html");else j.push(`${w}/index.stx`),j.push(`${w}/index.md`),j.push(`${w}/index.html`);let q=IQ.basename(w,IQ.extname(w));if(q&&!w.includes("/"))j.push(`${q}.stx`),j.push(`${q}.md`),j.push(`${q}.html`);for(let R of j)for(let V of z){let D=V.replace(/^\.\//,"").replace(/\\/g,"/"),O=D;for(let C of U){let T=C.replace(/\\/g,"/").replace(/\/$/,"");if(D.startsWith(`${T}/`)){O=D.slice(T.length+1);break}}if(D===R||O===R)return await WY(V)}for(let R of z){let V=R.replace(/^\.\//,"").replace(/\\/g,"/"),D=V;for(let N of U){let g=N.replace(/\\/g,"/").replace(/\/$/,"");if(V.startsWith(`${g}/`)){D=V.slice(g.length+1);break}}let O=D.replace(/\.(stx|md|html)$/,""),C=O==="index"||O.endsWith("/index"),T=B==="/"||w==="";if(`/${O}`===B||O===w||`/${O}.stx`===B||`/${O}.md`===B||`/${O}.html`===B||C&&T){let N=await WY(R);return A.set(B,N),N}if(O.startsWith("pages/")){let N=O.slice(6);if(`/${N}`===B||N===w){let g=await WY(R);return A.set(B,g),g}}}for(let R of z){let V=R.replace(/^\.\//,"").replace(/\\/g,"/");if(!V.includes("["))continue;let D=V;for(let T of U){let N=T.replace(/\\/g,"/").replace(/\/$/,"");if(V.startsWith(`${N}/`)){D=V.slice(N.length+1);break}}let O=D.replace(/\.(stx|md|html)$/,""),C=w7(O);for(let T of C){let N=w.match(T);if(N){let g=[...O.matchAll(/\[([^\]]+)\]/g)].map((f)=>f[1]),QQ=N.slice(1),s=await X8(R,g,QQ,w);return A.set(B,s),s}}}return null}async function X8(B,z,w,j){let q=await Bun.file(B).text(),R=/<script\b([^>]*)\bserver\b[^>]*>([\s\S]*?)<\/script>/gi,V=[],D;while((D=R.exec(q))!==null)V.push(D[2]);let O=q.replace(/<script\b[^>]*\bserver\b[^>]*>[\s\S]*?<\/script>/gi,""),C={__filename:B,__dirname:IQ.dirname(B),__route:j};for(let F=0;F<z.length;F++)C[z[F]]=w[F];let{processDirectives:T,extractVariables:N,defaultConfig:g,injectRouterScript:QQ,resetHead:s}=await G;s(),_Z(C),WZ(C);for(let F of V)await N(F,C,B);C.__stx_head_preset=!0;let f={...g,root:n.cwd(),...Y&&{componentsDir:Y},...Z&&{layoutsDir:Z},...$&&{partialsDir:$},autoShell:!0,ssr:X.ssr??tQ.ssr??!0,app:X.app||{},..."strict"in X&&{strict:X.strict},..."router"in X&&{router:X.router},..."debug"in X&&{debug:X.debug},..."skipDefaultSeoTags"in X&&{skipDefaultSeoTags:X.skipDefaultSeoTags},..."defaultTitle"in X&&{defaultTitle:X.defaultTitle},..."defaultDescription"in X&&{defaultDescription:X.defaultDescription},..."defaultImage"in X&&{defaultImage:X.defaultImage},..."seo"in X&&{seo:X.seo},..."analytics"in X&&{analytics:X.analytics},..."_pluginComponentDirs"in X&&{_pluginComponentDirs:X._pluginComponentDirs},..."_pluginPageDirs"in X&&{_pluginPageDirs:X._pluginPageDirs}},I=O;if(I=await T(I,C,B,f,new Set),z.length>0){let F={};for(let d=0;d<z.length;d++)F[z[d]]=w[d];let S=`<script>if(window.stx)window.stx._rp=${JSON.stringify(F)};else window.__stx_rp=${JSON.stringify(F)};</script>`;if(I.includes("</head>"))I=I.replace("</head>",`${S}
225
+ </head>`);else I=`${S}
226
+ ${I}`}I=await QQ(I,AY());let b=/@for|:for|@if|:if|x-for|x-if/;return I=I.replace(/<template(?:\s[^>]*)?>|<\/template>/gi,(F)=>{if(b.test(F))return F;if(F==="</template>")return F;return""}),I}let Y8=performance.now();await UY();let BQ={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},DQ=Q.site,LX=DQ||Q.i18n?Q.stxModule?Promise.resolve(Q.stxModule):yY:null,YQ=Q.i18n??null;if(!YQ&&DQ&&LX)try{let{resolveI18n:B}=await LX;YQ=B(DQ)??null}catch{}function Z8(B){if(!YQ)return{locale:"en",path:B};for(let z of YQ.locales){if(B===`/${z}`||B===`/${z}/`)return{locale:z,path:"/"};if(B.startsWith(`/${z}/`))return{locale:z,path:B.slice(z.length+1)}}return{locale:YQ.defaultLocale,path:B}}function AY(){return{router:{interceptAllLinks:!0,container:"main",...DQ?.router??{},...X.router??{}}}}function $8(B){let z=AY().router,w=`<script>window.__stxRouterConfig=${JSON.stringify(z)};</script>
227
+ `,j=/<script>window\.__stxRouterConfig=\{[^<]*\}<\/script>\s*/i;if(j.test(B))return B.replace(j,w);if(/<\/body>/i.test(B))return B.replace(/<\/body>/i,`${w}</body>`);return`${B}
228
+ ${w}`}async function J8(B,z,w){if(!LX)return B;if(!(B.headers.get("content-type")||"").includes("text/html"))return B;let q=await LX,R=await B.text();if(DQ&&q.injectThemeBootstrap)R=q.injectThemeBootstrap(R,DQ);if(DQ&&q.injectSeo){let O=(DQ.pages??{})[w]??{};R=q.injectSeo(R,DQ,O,w)}if(YQ&&q.buildLangPickerScript){let O=q.buildLangPickerScript(YQ,z);R=/<\/body>/i.test(R)?R.replace(/<\/body>/i,`${O}
229
+ </body>`):R+O}if(YQ){let O=`<meta name="stx-layout-group" content="i18n:${z}">`;if(/<meta name="stx-layout-group"[^>]*>/i.test(R))R=R.replace(/<meta name="stx-layout-group"[^>]*>/i,O);else if(/<\/head>/i.test(R))R=R.replace(/<\/head>/i,`${O}
230
+ </head>`);else R=`${O}
231
+ ${R}`}let V=L??new Set;if(YQ&&z!==YQ.defaultLocale&&V.size>0)R=R.replace(/<a\b([^>]*?)\bhref="(\/[^"]*)"([^>]*)>/gi,(O,C,T,N)=>{if(T.startsWith("//"))return O;if(T===`/${z}`||T===`/${z}/`||T.startsWith(`/${z}/`))return O;let g=T.match(/^(\/[^?#]*)(.*)$/);if(!g)return O;let[,QQ,s]=g,f=QQ==="/"?"/":QQ.replace(/\/$/,"");if(!V.has(f))return O;let I=f==="/"?`/${z}/`:`/${z}${f}`;return`<a${C}href="${I}${s}"${N}>`});if(YQ&&q.applyTranslations)R=q.applyTranslations(R,YQ,z);R=$8(R);let D=new Headers(B.headers);return D.delete("content-length"),new Response(R,{status:B.status,statusText:B.statusText,headers:D})}let HY=Q.autoIncrementPort??!0,UX=HY===!1?1:typeof HY==="number"?Math.max(1,HY):10,hQ=W,zY,zZ;for(let B=0;B<UX;B++)try{zY=_8({port:hQ,reusePort:Q.reusePort??!1,idleTimeout:0,async fetch(z,w){let j=new URL(z.url),q=j.pathname,R=X.server?.proxy;if(R)for(let[O,C]of Object.entries(R)){if(q!==O&&!q.startsWith(O))continue;let T=typeof C==="string"?{target:C}:C,N=T.rewrite?T.rewrite(q):q,g=new URL(T.target),QQ=new URL(N+j.search,g),s=new Headers(z.headers);if(T.changeOrigin!==!1)s.set("host",g.host);try{return await fetch(QQ,{method:z.method,headers:s,body:z.body,redirect:"manual",...z.body?{duplex:"half"}:{}})}catch(f){return new Response(`[stx dev proxy] ${O} \u2192 ${T.target} failed: ${f instanceof Error?f.message:String(f)}`,{status:502})}}let V=null;if(YQ&&!j.pathname.startsWith("/api/")){let O=Z8(j.pathname);if(V=O.locale,O.path!==j.pathname){let C=new URL(z.url);C.pathname=O.path;let T=new Headers(z.headers);T.set("x-stx-locale",O.locale),z=new Request(C,{headers:T,method:z.method,body:z.body,redirect:z.redirect,duplex:"half"}),q=O.path}else if(V){let C=new Headers(z.headers);C.set("x-stx-locale",V),z=new Request(z,{headers:C})}}let D=await(async()=>{ZX=V,dQ=j.search,$X=z.headers.get("host")||"",GY=z.headers.get("cookie")||"",JY=GZ(z),KX=w.requestIP(z)?.address||(z.headers.get("x-forwarded-for")||"").split(",")[0].trim();try{if(z.method==="OPTIONS")return new Response(null,{headers:BQ});if(q==="/_stx/hmr"){let I,E,b=new ReadableStream({start(F){I=F,l.add(F),F.enqueue(i.encode(`data: {"type":"connected"}
232
+
233
+ `)),E=setInterval(()=>{try{F.enqueue(i.encode(`: keepalive
234
+
235
+ `))}catch{}},15000)},cancel(){if(E)clearInterval(E);if(I)l.delete(I)}});return new Response(b,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"}})}if(Q.onRequest){let I=await Q.onRequest(z);if(I)return I}let O=g0(q),C=l0.some((I)=>q===I||q.startsWith(I.endsWith("/")?I:`${I}/`))?["auth"]:[],T=[...s0,...O.names,...C];if(T.length>0){let I=i0(T),E=GZ(z),b={path:q,url:j,params:O.params,cookies:E,redirect:(F,S=302)=>{let d=F.includes("?")?"&":"?",qQ=encodeURIComponent(q+(j.search||""));return new Response(null,{status:S,headers:{Location:`${F}${d}next=${qQ}`}})}};for(let F of I){let S=F.indexOf(":"),d=S===-1?F:F.slice(0,S),qQ=S===-1?[]:F.slice(S+1).split(","),o=n0[d];if(!o){console.warn(`[stx serve] unknown middleware "${d}" on ${q}`);continue}let AQ=await o(z,b,...qQ);if(AQ instanceof Response)return AQ}}if(Q.routes){let I=Q.routes[q];if(I)return I(z)}if(q.startsWith("/_stx/component/")){let I=decodeURIComponent(q.slice(16));if(I)try{let{processDirectives:E,defaultConfig:b}=await G,F=`<${I} />`,S={...b,...Y&&{componentsDir:Y},...Z&&{layoutsDir:Z},...$&&{partialsDir:$},autoShell:!1},d=await E(F,{},`${Y}/${I}.stx`,S,new Set);return new Response(d,{headers:{"Content-Type":"text/html; charset=utf-8",...BQ}})}catch(E){return new Response(`<div class="stx-async-error">${E.message}</div>`,{status:500,headers:{"Content-Type":"text/html; charset=utf-8",...BQ}})}}if(q.startsWith("/api/data/")&&z.method==="POST")try{let I=q.replace("/api/data/","").split("/")[0];if(!I)return new Response(JSON.stringify({error:"Table name required"}),{status:400,headers:{"Content-Type":"application/json",...BQ}});if(!/^[a-zA-Z_]\w*$/.test(I))return new Response(JSON.stringify({error:"Invalid table name"}),{status:400,headers:{"Content-Type":"application/json",...BQ}});let E=await z.json(),{Database:b}=await import("bun:sqlite"),F=IQ.resolve(n.cwd(),"database/stacks.sqlite"),S=new b(F);try{let d=S.query(`PRAGMA table_info("${I}")`).all(),qQ=d.map((r)=>r.name).filter((r)=>r!=="id"&&r!=="created_at"&&r!=="updated_at"),o=[],AQ=[],EQ=[];for(let r of qQ)if(E[r]!==void 0&&E[r]!=="")o.push(r),AQ.push("?"),EQ.push(E[r]);let RQ=new Date().toISOString();if(d.some((r)=>r.name==="created_at"))o.push("created_at"),AQ.push("?"),EQ.push(RQ);if(d.some((r)=>r.name==="updated_at"))o.push("updated_at"),AQ.push("?"),EQ.push(RQ);if(o.length===0)return new Response(JSON.stringify({error:"No valid fields provided"}),{status:400,headers:{"Content-Type":"application/json",...BQ}});let fQ=`INSERT INTO "${I}" (${o.join(", ")}) VALUES (${AQ.join(", ")})`,BY=S.prepare(fQ).run(...EQ);return new Response(JSON.stringify({success:!0,id:BY.lastInsertRowid,message:"Record created successfully"}),{status:201,headers:{"Content-Type":"application/json",...BQ}})}catch(d){return console.error("API Error:",d),new Response(JSON.stringify({error:d.message||"Failed to create record"}),{status:500,headers:{"Content-Type":"application/json",...BQ}})}finally{S.close()}}catch{}if(q==="/index")q="/";if(q==="/"){if(!await GX("/")){if(await GX("/home"))return new Response(null,{status:302,headers:{Location:"/home",...BQ}})}}let N=await GX(q);if(N){if(z.headers.get("X-STX-Router")==="true"){let F=N.match(/<!-- stx-layout: ([^ ]+) -->/),S=F?F[1]:"default",d=N.match(/<meta\b[^>]*name=["']stx-layout-group["'][^>]*content=["']([^"']+)["'][^>]*>/i),qQ=YQ&&V?`i18n:${V}`:d?.[1]||Y0(S),o=N,AQ=[],EQ=N.match(/<head\b[^>]*>([\s\S]*?)<\/head>/i);if(EQ){let VQ=EQ[1],pQ,qY=/<style\b[^>]*>[\s\S]*?<\/style>/gi;while((pQ=qY.exec(VQ))!==null){if(pQ[0].includes("data-crosswind")){let _X=pQ[0].replace(/<style[^>]*>/,"").replace(/<\/style>/,""),wX=_X.indexOf("[hidden]");if(wX!==-1){let RX=_X.indexOf("}",wX)+1,IX=_X.slice(RX).trim();if(IX)AQ.push(`<style data-crosswind="fragment">${IX}</style>`)}continue}AQ.push(pQ[0])}}let RQ=o.match(/<main\b[^>]*>/i),fQ=o.lastIndexOf("</main>");if(RQ&&fQ!==-1){let VQ=N.match(/<body\b[^>]*>/i);if(VQ){let qY=VQ.index+VQ[0].length,_X=RQ.index,wX=N.slice(qY,_X),RX,IX=/<style\b[^>]*>[\s\S]*?<\/style>/gi;while((RX=IX.exec(wX))!==null)AQ.push(RX[0])}let pQ=RQ.index+RQ[0].length;o=o.slice(pQ,fQ).trim()}let jX=[],BY=/<script\b[^>]*data-stx-scoped[^>]*>[\s\S]*?<\/script>/gi,r;while((r=BY.exec(N))!==null){let VQ=r[0];if(VQ.includes("__stx_early_mounts"))continue;if(VQ.includes("data-stx-reactive")&&VQ.includes("window.__stx_reactive"))continue;jX.push(VQ)}let G8=/<script\b[^>]*data-stx-reactive[^>]*>(?![\s\S]*window\.__stx_reactive)[\s\S]*?<\/script>/gi;while((r=G8.exec(N))!==null)jX.push(r[0]);o=o.replace(/<script data-stx-scoped>\s*;?\(function\(\)\s*\{[\s\S]*?<\/script>/g,"");let U8="<script data-stx-page>if(window.stx)window.stx._latestSetup=null;</script>";return o=`${AQ.join(`
236
+ `)}
237
+ ${o}
238
+ ${U8}
239
+ ${jX.join(`
240
+ `)}`,new Response(o,{headers:{"Content-Type":"text/html; charset=utf-8","X-STX-Fragment":"true","X-STX-Layout":S,"X-STX-Layout-Group":qQ,"Cache-Control":"no-store",...BQ}})}let E=N,b=0;return E=N.replace(/<script data-stx-scoped>\(function\(\)\{'use strict';var cloakStyle[\s\S]*?<\/script>/g,(F)=>{return b++,b===1?F:""}),new Response(GQ(E),{headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store",...BQ}})}let g=await GX(`${q}.html`);if(g)return new Response(GQ(g),{headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store",...BQ}});if(q.startsWith("/chunk-")||q.endsWith(".js")||q.endsWith(".css"))try{let I=Bun.file(`.stx${q}`);if(await I.exists()){let E=q.split(".").pop()?.toLowerCase();return new Response(I,{headers:{"Content-Type":E==="css"?"text/css":E==="js"?"application/javascript":"text/plain","Cache-Control":"no-store"}})}}catch{}if(q.startsWith("/assets/")||q.startsWith("/resources/assets/")){await a0();let I;try{I=decodeURIComponent(q)}catch{return new Response("Invalid asset path",{status:400})}if(!O7(I))return new Response("Invalid asset path",{status:400});for(let E of D7(I))try{let b=IQ.resolve(n.cwd(),`.${E}`),F=Bun.file(b);if(await F.exists()){let S=V7(E);if(M7(S))return E7(b);return new Response(F,{headers:{"Content-Type":X0[S||""]||"application/octet-stream","Cache-Control":"no-store"}})}}catch{continue}}if((z.method==="GET"||z.method==="HEAD")&&q!=="/"){let I=IQ.resolve(n.cwd(),J),E;try{E=decodeURIComponent(q)}catch{E=q}if(!E.includes("\x00")){let b=IQ.resolve(I,`.${E}`);if(b===I||b.startsWith(`${I}${IQ.sep}`))try{let S=Bun.file(b);if(await S.exists()){let d=await S.stat().catch(()=>null);if(d&&!d.isDirectory()){let qQ=b.split(".").pop()?.toLowerCase();return new Response(S,{headers:{"Content-Type":X0[qQ||""]||"application/octet-stream","Cache-Control":"no-store"}})}}}catch{}}}if(q==="/favicon.ico")return new Response(null,{status:204});let QQ=R7();for(let I of["/404","/errors/404"])try{let E=await GX(I);if(E)return new Response(QQ?E:GQ(E),{status:404,headers:{"Content-Type":"text/html; charset=utf-8"}})}catch{}let s;if(!QQ){let I=await UY();s=[];for(let E of I){let b=E.replace(/^\.\//,"").replace(/\\/g,"/");for(let S of U){let d=S.replace(/\\/g,"/").replace(/\/$/,"");if(b.startsWith(`${d}/`)){b=b.slice(d.length+1);break}}let F=b.replace(/\.(stx|md|html)$/,"");if(F.startsWith("pages/"))F=F.slice(6);s.push(F)}}let f=I7({path:q,routes:s,isProduction:QQ});return new Response(QQ?f:GQ(f),{status:404,headers:{"Content-Type":"text/html; charset=utf-8"}})}finally{ZX=null,dQ="",$X="",GY="",JY={},KX=""}})();return J8(D,V??(YQ?.defaultLocale??"en"),q)}});break}catch(z){zZ=z;let w=z?.code,j=String(z?.message??z??"");if((w==="EADDRINUSE"||/EADDRINUSE/i.test(j)||/port \d+ (?:is |already )?in use/i.test(j)||/Failed to start server\. Is port \d+ in use\?/i.test(j))&&B<UX-1){hQ+=1;continue}throw z}if(!zY){let B=UX===1?`port ${W}`:`ports ${W}..${W+UX-1}`;throw console.error(`\x1B[31m[stx]\x1B[0m no free port available (tried ${B}).`),console.error(`\x1B[2m set autoIncrementPort to a larger value, or free the port (lsof -nP -i :${W})\x1B[0m`),zZ??Error(`stx serve: no free port in range ${W}..${W+UX-1}`)}if(hQ!==W&&!Q.quiet)console.warn(`\x1B[33m[stx]\x1B[0m port ${W} in use \u2014 using \x1B[1m${hQ}\x1B[0m instead`);if(Q.reusePort){let B=Number(n.env.SHUTDOWN_GRACE_MS)||15000;n.once("SIGTERM",()=>{setTimeout(()=>n.exit(0),B).unref(),Promise.resolve(zY?.stop()).then(()=>n.exit(0))})}if(!Q.quiet){let B=(performance.now()-Y8).toFixed(0),z=H?.length||0,w=U.join(", ");if(console.log(),console.log(" \x1B[36m\x1B[1mstx\x1B[0m"),console.log(),console.log(` \x1B[32m\u279C\x1B[0m \x1B[1mLocal\x1B[0m: \x1B[36mhttp://localhost:${hQ}/\x1B[0m`),console.log(` \x1B[32m\u279C\x1B[0m \x1B[1mRoutes\x1B[0m: \x1B[2m${z} files from ${w}\x1B[0m`),console.log(),console.log(` \x1B[2mready in ${B}ms\x1B[0m`),console.log(),console.log(" \x1B[2mPress\x1B[0m o + Enter \x1B[2mto open in browser\x1B[0m"),console.log(" \x1B[2mPress\x1B[0m q + Enter \x1B[2mto quit\x1B[0m"),console.log(),n.stdin.isTTY)n.stdin.setRawMode(!1),(await import("readline")).createInterface({input:n.stdin}).on("line",(R)=>{let V=R.trim().toLowerCase();if(V==="o"){let D=n.platform==="darwin"?"open":n.platform==="win32"?"start":"xdg-open";Bun.spawn([D,`http://localhost:${hQ}/`])}else if(V==="q")n.exit(0)})}await Bun.sleep(Number.POSITIVE_INFINITY)}export{IG as serve,I7 as render404Page,R7 as isProductionServe,E7 as bundleBrowserAsset,w7 as buildDynamicRouteRegexes};