@stacksjs/actions 0.70.73 → 0.70.75

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 (163) hide show
  1. package/dist/action.d.ts +8 -6
  2. package/dist/action.js +1 -1
  3. package/dist/actions.js +1 -1
  4. package/dist/add.js +1 -1
  5. package/dist/ai/request-model-access.d.ts +1 -1
  6. package/dist/ai/request-model-access.js +1 -1
  7. package/dist/auth/client.d.ts +1 -1
  8. package/dist/auth/prune.d.ts +1 -1
  9. package/dist/auth/setup.d.ts +1 -1
  10. package/dist/auth/token.d.ts +1 -1
  11. package/dist/blog.js +23 -23
  12. package/dist/build/cli.d.ts +1 -1
  13. package/dist/build/component-libs.d.ts +1 -1
  14. package/dist/build/core.d.ts +1 -1
  15. package/dist/build/desktop.d.ts +1 -1
  16. package/dist/build/docs.d.ts +1 -1
  17. package/dist/build/frontend-static.js +1 -1
  18. package/dist/build/server.d.ts +1 -1
  19. package/dist/build/stacks.d.ts +1 -1
  20. package/dist/build/views.d.ts +1 -1
  21. package/dist/build.js +1 -1
  22. package/dist/bump.d.ts +1 -1
  23. package/dist/bump.js +7 -2
  24. package/dist/changelog.d.ts +0 -1
  25. package/dist/changelog.js +2 -1
  26. package/dist/check/ports.d.ts +1 -1
  27. package/dist/{chunk-8tmc78d6.js → chunk-49ry9mgz.js} +1 -1
  28. package/dist/{chunk-qqth0x9w.js → chunk-73y0wp0s.js} +1 -1
  29. package/dist/{chunk-bbd6n9q2.js → chunk-8kvzjd10.js} +1 -1
  30. package/dist/{chunk-vn8sr2rt.js → chunk-dxvgx0r7.js} +1 -1
  31. package/dist/{chunk-jn81jcta.js → chunk-f8z1aft6.js} +1 -1
  32. package/dist/{chunk-29eg94q3.js → chunk-gcjrdkq7.js} +1 -1
  33. package/dist/{chunk-c0cs49hn.js → chunk-heh4x32p.js} +1 -1
  34. package/dist/{chunk-y5k9qbfd.js → chunk-hr9ndn21.js} +1 -1
  35. package/dist/{chunk-b10hy2vq.js → chunk-hv8tkjw2.js} +2 -2
  36. package/dist/{chunk-ckcjsw9a.js → chunk-n057zfgw.js} +1 -1
  37. package/dist/{chunk-j9vajggg.js → chunk-t5j470r2.js} +1 -1
  38. package/dist/chunk-v0hqskdk.js +3 -0
  39. package/dist/{chunk-r3t7shd4.js → chunk-v1dg1jp6.js} +1 -1
  40. package/dist/{chunk-prpycg7f.js → chunk-w4erevzw.js} +1 -1
  41. package/dist/{chunk-m0v346zb.js → chunk-x0cnhg3z.js} +1 -1
  42. package/dist/clean.d.ts +1 -1
  43. package/dist/commit.js +1 -1
  44. package/dist/copy-types.d.ts +1 -1
  45. package/dist/database/seed.d.ts +1 -1
  46. package/dist/deploy/create-receipt-rule.d.ts +1 -1
  47. package/dist/deploy/index.d.ts +1 -1
  48. package/dist/deploy/index.js +2 -2
  49. package/dist/dev/api.d.ts +1 -1
  50. package/dist/dev/api.js +1 -1
  51. package/dist/dev/components.d.ts +1 -1
  52. package/dist/dev/dashboard-globals.js +1 -1
  53. package/dist/dev/dashboard-utils.d.ts +59 -53
  54. package/dist/dev/dashboard-utils.js +1 -1
  55. package/dist/dev/dashboard.d.ts +10 -0
  56. package/dist/dev/dashboard.js +4 -4
  57. package/dist/dev/desktop.d.ts +1 -1
  58. package/dist/dev/docs.d.ts +1 -1
  59. package/dist/dev/docs.js +1 -1
  60. package/dist/dev/index.js +1 -1
  61. package/dist/dev/migrate-watcher.js +1 -1
  62. package/dist/dev/system-tray.d.ts +1 -1
  63. package/dist/dev/views.d.ts +1 -1
  64. package/dist/dev/views.js +1 -1
  65. package/dist/discover-packages.js +1 -1
  66. package/dist/domains/add.d.ts +1 -1
  67. package/dist/domains/remove.d.ts +1 -1
  68. package/dist/examples.js +1 -1
  69. package/dist/find-projects.d.ts +1 -1
  70. package/dist/fresh.d.ts +1 -1
  71. package/dist/generate/action-types.d.ts +1 -1
  72. package/dist/generate/component-meta.d.ts +1 -1
  73. package/dist/generate/component-meta.js +1 -1
  74. package/dist/generate/custom-cli-file.d.ts +1 -1
  75. package/dist/generate/env-files.d.ts +1 -1
  76. package/dist/generate/env-files.js +1 -1
  77. package/dist/generate/ide-helpers.d.ts +1 -1
  78. package/dist/generate/ide-helpers.js +1 -1
  79. package/dist/generate/index.js +1 -1
  80. package/dist/generate/lib-entries.js +1 -1
  81. package/dist/generate/pantry-file.d.ts +1 -1
  82. package/dist/generate/symlink-core.d.ts +1 -1
  83. package/dist/generate/types.d.ts +1 -1
  84. package/dist/generate/vscode-custom-data.d.ts +1 -1
  85. package/dist/generate/vscode-custom-data.js +1 -1
  86. package/dist/helpers/component-meta.js +1 -1
  87. package/dist/helpers/index.js +1 -1
  88. package/dist/helpers/lib-entries.js +1 -1
  89. package/dist/helpers/package-json.js +1 -1
  90. package/dist/helpers/utils.js +1 -1
  91. package/dist/helpers/vscode-custom-data.js +1 -1
  92. package/dist/index.js +1 -1
  93. package/dist/key-generate.d.ts +1 -1
  94. package/dist/lint/fix.d.ts +1 -1
  95. package/dist/lint/fix.js +1 -1
  96. package/dist/lint/index.d.ts +1 -1
  97. package/dist/lint/index.js +1 -1
  98. package/dist/lint/lint.js +1 -1
  99. package/dist/make-command.js +1 -1
  100. package/dist/make-job.js +1 -1
  101. package/dist/make-policy.js +1 -1
  102. package/dist/make-resource.js +1 -1
  103. package/dist/make.js +1 -1
  104. package/dist/migrate/database.d.ts +1 -1
  105. package/dist/migrate/fresh.d.ts +1 -1
  106. package/dist/orm/base.js +1 -1
  107. package/dist/prepublish.d.ts +1 -1
  108. package/dist/queue/clear.d.ts +1 -1
  109. package/dist/queue/dlq-purge.d.ts +1 -1
  110. package/dist/queue/dlq-retry.d.ts +1 -1
  111. package/dist/queue/dlq.d.ts +1 -1
  112. package/dist/queue/failed.d.ts +1 -1
  113. package/dist/queue/flush.d.ts +1 -1
  114. package/dist/queue/inspect.d.ts +1 -1
  115. package/dist/queue/list.d.ts +1 -1
  116. package/dist/queue/monitor.d.ts +1 -1
  117. package/dist/queue/pause.d.ts +1 -1
  118. package/dist/queue/quarantine.d.ts +1 -1
  119. package/dist/queue/resume.d.ts +1 -1
  120. package/dist/queue/retry.d.ts +1 -1
  121. package/dist/queue/schedule-list.d.ts +1 -1
  122. package/dist/queue/schedule.d.ts +1 -1
  123. package/dist/queue/status.d.ts +1 -1
  124. package/dist/queue/table.d.ts +1 -1
  125. package/dist/queue/unquarantine.d.ts +1 -1
  126. package/dist/queue/work.d.ts +1 -1
  127. package/dist/release.d.ts +1 -1
  128. package/dist/release.js +1 -1
  129. package/dist/route/list.d.ts +1 -1
  130. package/dist/run-action.js +1 -1
  131. package/dist/saas/setup.d.ts +1 -1
  132. package/dist/scaffold-crud.js +1 -1
  133. package/dist/schedule/run.d.ts +1 -1
  134. package/dist/search/flush.d.ts +1 -1
  135. package/dist/search/import.d.ts +1 -1
  136. package/dist/search/settings-list.d.ts +1 -1
  137. package/dist/search/settings.d.ts +1 -1
  138. package/dist/serve/api.d.ts +1 -1
  139. package/dist/setup/index.js +1 -1
  140. package/dist/setup/ssl.js +1 -1
  141. package/dist/stacks.js +1 -1
  142. package/dist/templates.d.ts +21 -1
  143. package/dist/templates.js +1 -1
  144. package/dist/test/feature.d.ts +1 -1
  145. package/dist/test/index.d.ts +1 -1
  146. package/dist/test/ui.d.ts +1 -1
  147. package/dist/test/unit.d.ts +1 -1
  148. package/dist/typecheck.d.ts +1 -1
  149. package/dist/types.js +1 -1
  150. package/dist/upgrade/binary.d.ts +1 -1
  151. package/dist/upgrade/dependencies.js +1 -1
  152. package/dist/upgrade/framework-utils.js +1 -1
  153. package/dist/upgrade/framework.d.ts +1 -1
  154. package/dist/upgrade/framework.js +1 -1
  155. package/dist/upgrade/index.d.ts +1 -1
  156. package/dist/upgrade/index.js +1 -1
  157. package/dist/upgrade/packages.js +8 -8
  158. package/dist/upgrade/shell.d.ts +1 -1
  159. package/dist/upgrade.js +1 -1
  160. package/package.json +26 -23
  161. package/dist/chunk-1ebgbeyr.js +0 -920
  162. package/dist/chunk-h3163h5z.js +0 -3
  163. package/dist/chunk-vntz6mtt.js +0 -16
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{a as Y0}from"./chunk-dbz9dp2h.js";import"./chunk-xg9xscqz.js";import{sb as WQ}from"./chunk-h3163h5z.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(`
3
+ import{a as Y0}from"./chunk-dbz9dp2h.js";import"./chunk-xg9xscqz.js";import{qb as WQ}from"./chunk-v0hqskdk.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
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
5
  `;if(_)U+=`${_}
6
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+=`
@@ -219,7 +219,7 @@ export type ConfigOf = Config
219
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
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
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-jn81jcta.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-y5k9qbfd.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(" ")} }
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-f8z1aft6.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-hr9ndn21.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
223
  `;if(S.length)g+=`@media (prefers-color-scheme: dark) { .dark .${I} { ${S.join(" ")} } }
224
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
225
  </head>`);else I=`${S}
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{sb as G}from"./chunk-h3163h5z.js";import{log as x}from"@stacksjs/logging";import*as z from"@stacksjs/path";import{doesExist as H,writeFile as I}from"@stacksjs/storage";async function O(q){let j=q.name;if(!j)return x.error("Resource name is required"),!1;let v=j.endsWith("Resource")?j:`${j}Resource`,A=q.model||v.replace("Resource",""),F=q.collection?K(v,A):J(v,A),B=z.appPath("Resources");if(!H(B)){let{mkdirSync:w}=await import("@stacksjs/storage");w(B,{recursive:!0})}let E=z.appPath(`Resources/${v}.ts`);try{return await I(E,F),x.success(`Created resource: ${E}`),!0}catch(w){return x.error(`Failed to create resource: ${w.message}`),!1}}function J(q,j){return`import type { Request } from '@stacksjs/router'
2
+ import{qb as G}from"./chunk-v0hqskdk.js";import{log as x}from"@stacksjs/logging";import*as z from"@stacksjs/path";import{doesExist as H,writeFile as I}from"@stacksjs/storage";async function O(q){let j=q.name;if(!j)return x.error("Resource name is required"),!1;let v=j.endsWith("Resource")?j:`${j}Resource`,A=q.model||v.replace("Resource",""),F=q.collection?K(v,A):J(v,A),B=z.appPath("Resources");if(!H(B)){let{mkdirSync:w}=await import("@stacksjs/storage");w(B,{recursive:!0})}let E=z.appPath(`Resources/${v}.ts`);try{return await I(E,F),x.success(`Created resource: ${E}`),!0}catch(w){return x.error(`Failed to create resource: ${w.message}`),!1}}function J(q,j){return`import type { Request } from '@stacksjs/router'
3
3
  import { JsonResource } from '@stacksjs/api'
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{sb as H}from"./chunk-h3163h5z.js";import{execSync as M,spawn as j}from"child_process";import Z from"fs";import E from"os";import $ from"path";import Y from"process";import{log as B}from"@stacksjs/cli";var q=Y.platform==="win32"?$.join(Y.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",X=$.join(E.homedir(),".stacks","ssl");function T(){return Y.stdin.isTTY===!0&&Y.stdout.isTTY===!0}function V(){return Y.env.SUDO_PASSWORD}function k(){return T()||!!V()}function F(z){try{let G=Z.readFileSync(q,"utf-8");return G.includes(`127.0.0.1 ${z}`)||G.includes(`::1 ${z}`)}catch{if(Y.platform!=="win32"){let G=V();if(G)try{let J=M(`echo '${G}' | sudo -S cat "${q}" 2>/dev/null`,{encoding:"utf-8"});return J.includes(`127.0.0.1 ${z}`)||J.includes(`::1 ${z}`)}catch{return!1}}return!1}}async function x(z,G){if(F(z)){if(G)B.info(`${z} already in hosts file`);return!0}let J=`
2
+ import{qb as H}from"./chunk-v0hqskdk.js";import{execSync as M,spawn as j}from"child_process";import Z from"fs";import E from"os";import $ from"path";import Y from"process";import{log as B}from"@stacksjs/cli";var q=Y.platform==="win32"?$.join(Y.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",X=$.join(E.homedir(),".stacks","ssl");function T(){return Y.stdin.isTTY===!0&&Y.stdout.isTTY===!0}function V(){return Y.env.SUDO_PASSWORD}function k(){return T()||!!V()}function F(z){try{let G=Z.readFileSync(q,"utf-8");return G.includes(`127.0.0.1 ${z}`)||G.includes(`::1 ${z}`)}catch{if(Y.platform!=="win32"){let G=V();if(G)try{let J=M(`echo '${G}' | sudo -S cat "${q}" 2>/dev/null`,{encoding:"utf-8"});return J.includes(`127.0.0.1 ${z}`)||J.includes(`::1 ${z}`)}catch{return!1}}return!1}}async function x(z,G){if(F(z)){if(G)B.info(`${z} already in hosts file`);return!0}let J=`
3
3
  # Added by Stacks
4
4
  127.0.0.1 ${z}
5
5
  ::1 ${z}
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ var d=Object.defineProperty;var e=(a)=>a;function f(a,b){this[a]=e.bind(null,b)}var g=(a,b)=>{for(var c in b)d(a,c,{get:b[c],enumerable:!0,configurable:!0,set:f.bind(b,c)})};var h=import.meta.require;
3
+ export{g as pb,h as qb};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import"./chunk-h3163h5z.js";var q={type:"aws",useLoadBalancer:!0,app:{name:"app-server-1",domain:"stacksjs.com",region:"us-east-1",type:"app",size:"t3.micro",diskSize:20,serverOS:"ubuntu-20-lts-x86_64",bunVersion:"1.1.26",database:"sqlite",databaseName:"stacks"},app2:{name:"app-server-2",domain:"stacksjs.com",instanceType:"t3.micro",userData:`#!/bin/bash
2
+ import"./chunk-v0hqskdk.js";var q={type:"aws",useLoadBalancer:!0,app:{name:"app-server-1",domain:"stacksjs.com",region:"us-east-1",type:"app",size:"t3.micro",diskSize:20,serverOS:"ubuntu-20-lts-x86_64",bunVersion:"1.1.26",database:"sqlite",databaseName:"stacks"},app2:{name:"app-server-2",domain:"stacksjs.com",instanceType:"t3.micro",userData:`#!/bin/bash
3
3
  echo "Hello World from App Server 2!" > /tmp/test.txt
4
4
  chown ubuntu:ubuntu /tmp/test.txt
5
5
  `},web:{name:"web-server",domain:"ow3.org",region:"us-east-1",type:"web",size:"t3.micro",diskSize:20,serverOS:"ubuntu-20-lts-x86_64",bunVersion:"1.1.26"},cache:{name:"cache-server",domain:"stacksjs.com",region:"us-east-1",type:"cache",size:"t3.micro",diskSize:20,serverOS:"ubuntu-20-lts-x86_64",bunVersion:"1.1.26"}};import{env as m}from"@stacksjs/env";var C={project:{name:"stacks",slug:"stacks",region:"us-east-1"},cloud:{provider:"hetzner"},mode:"server",environments:{production:{type:"production",deployBranch:"main",region:"us-east-1",variables:{NODE_ENV:"production",LOG_LEVEL:"info"}},staging:{type:"staging",deployBranch:"stage",domainPrefix:"staging",region:"us-east-1",variables:{NODE_ENV:"staging",LOG_LEVEL:"debug"}},development:{type:"development",deployBranch:"dev",domainPrefix:"dev",region:"us-east-1",variables:{NODE_ENV:"development",LOG_LEVEL:"debug"}}},infrastructure:{compute:{instances:1,size:"small",disk:{size:20,type:"ssd",encrypted:!0},webServer:"rpx",proxy:{engine:"rpx",onDemandTls:!0,onDemandTlsEmail:"hello@stacksjs.com"}},servers:{app:q.app},containers:{api:{cpu:512,memory:1024,port:3000,healthCheck:"/health",desiredCount:2,autoScaling:{min:1,max:10,targetCpuUtilization:70,targetMemoryUtilization:80}}},loadBalancer:{enabled:!0,type:"application",healthCheck:{path:"/health",interval:30,healthyThreshold:2,unhealthyThreshold:5}},ssl:{enabled:!0,provider:"acm",domains:m.SSL_DOMAINS?.split(",")||["stacksjs.com","www.stacksjs.com"],redirectHttp:!0,letsEncrypt:{email:m.LETSENCRYPT_EMAIL||"admin@stacksjs.com",staging:!1,autoRenew:!0}},dns:{domain:m.APP_DOMAIN||"stacksjs.com",hostedZoneId:m.AWS_HOSTED_ZONE_ID||"Z01455702Q7952O6RCY37"},storage:{public:{public:!0,encryption:!0,versioning:!0,website:{indexDocument:"index.html",errorDocument:"index.html"}},private:{encryption:!0,versioning:!0},docs:{public:!0,encryption:!0,versioning:!0,path:"/docs",pathRewriteStyle:"flat",website:{indexDocument:"index.html",errorDocument:"404.html"}},blog:{public:!0,encryption:!0,versioning:!0,path:"/blog",website:{indexDocument:"index.html",errorDocument:"404.html"}},logs:{encryption:!0,versioning:!1},backups:{encryption:!0,versioning:!0},email:{public:!1,encryption:!0,versioning:!1}},functions:{},queues:{jobs:{visibilityTimeout:120,deadLetterQueue:!0,maxReceiveCount:3}},databases:{},cdn:{},monitoring:{}},sites:{main:{root:".",path:"/",domain:m.APP_DOMAIN||"stacksjs.com",start:"bun --conditions development storage/framework/core/buddy/src/cli.ts serve",port:3000,preStart:["bun install"]},api:{root:".",start:"bun --conditions development storage/framework/core/actions/src/serve/api.ts",port:3008,preStart:["bun install"],env:{HOST:"127.0.0.1",APP_ENV:"production"}},docs:{deploy:"server",root:"dist/docs/.bunpress",path:"/docs",domain:m.APP_DOMAIN||"stacksjs.com",build:"bunx @stacksjs/bunpress build --dir ./docs --outdir ./dist/docs",pathRewriteStyle:"directory"},blog:{deploy:"server",root:"dist/blog",path:"/blog",domain:m.APP_DOMAIN||"stacksjs.com",build:`bun -e "const {buildBlog}=await import('./storage/framework/core/actions/src/blog'); await buildBlog({outDir:'./dist/blog', baseUrl: (process.env.APP_URL?(/^https?:/.test(process.env.APP_URL)?process.env.APP_URL:'https://'+process.env.APP_URL):'https://stacksjs.com')})"`,pathRewriteStyle:"directory"},wwwStacksjs:{domain:"www.stacksjs.com",redirect:"https://stacksjs.com"}}},w={},E=w;export{C as tsCloud,E as default};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{sb as U}from"./chunk-h3163h5z.js";import{frameworkPath as E,join as W,path as R,projectPath as L}from"@stacksjs/path";import{existsSync as T,globSync as j,mkdirSync as I,writeFileSync as F}from"@stacksjs/storage";import{readFileSync as v}from"fs";var $=null;async function P(){if($)return $;try{$=(await import("@stacksjs/ts-md")).parseMarkdown}catch{$=(q)=>q}return $}function M(q){if(!q)return"";return $?$(q):q}async function p(){await P();let q=j(["components/*.stx","components/**/*.stx","resources/components/**/*.stx","storage/framework/defaults/resources/components/**/*.stx"],{cwd:L(),absolute:!0}),G=E("component-meta");if(!T(G))I(G,{recursive:!0});for(let X of q){let Q=R.parse(X).name,H=B(X),z=W(G,`${Q}.json`);F(z,JSON.stringify(H,null,2))}}function B(q){let G=v(q,"utf8"),X=b(G),Q=x(G),H=X?D(X):[],z=X?f(X):[],Z=h(Q);return{props:H,events:z,slots:Z}}function b(q){let G=/<script\b[^>]*\bserver\b[^>]*>([\s\S]*?)<\/script>/i.exec(q);if(G?.[1])return G[1];return/<script\b[^>]*>([\s\S]*?)<\/script>/i.exec(q)?.[1]??null}function x(q){let G=/<template\b[^>]*>([\s\S]*?)<\/template>/i.exec(q);if(G?.[1])return G[1];return q.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,"")}function D(q){let G=w(q),X=S(q,G);if(!X)return[];let Q=k(X,G),H=g(q);return Q.map((z)=>{return{name:z.required?z.name:`${z.name}?`,description:M(z.description),type:z.type,default:H[z.name]??z.default??"unknown",required:z.required}})}function w(q){let G=new Map,X=/(?:export\s+)?interface\s+([A-Z][\w$]*)\s*(?:extends\s+[\w$,\s]+)?\s*\{/g,Q;while((Q=X.exec(q))!==null){let z=Q[1];if(!z)continue;let Z=Q.index+Q[0].length,Y=K(q,Z-1,"{","}");if(Y!==null)G.set(z,Y)}let H=/(?:export\s+)?type\s+([A-Z][\w$]*)\s*=\s*\{/g;while((Q=H.exec(q))!==null){let z=Q[1];if(!z)continue;let Z=Q.index+Q[0].length,Y=K(q,Z-1,"{","}");if(Y!==null)G.set(z,Y)}return G}function S(q,G){let Q=/defineProps\s*<\s*([\s\S]+?)\s*>\s*\(/.exec(q),H=Q?.[1]?.trim();if(!Q||!H)return null;if(H.startsWith("{")){let Z=q.indexOf("{",Q.index);return K(q,Z,"{","}")}let z=H.replace(/[<>(].*$/,"").split("&")[0]?.trim();if(!z)return null;return G.get(z)??null}function k(q,G){let X=[],Q=N(q,[";",`
2
+ import{qb as U}from"./chunk-v0hqskdk.js";import{frameworkPath as E,join as W,path as R,projectPath as L}from"@stacksjs/path";import{existsSync as T,globSync as j,mkdirSync as I,writeFileSync as F}from"@stacksjs/storage";import{readFileSync as v}from"fs";var $=null;async function P(){if($)return $;try{$=(await import("@stacksjs/ts-md")).parseMarkdown}catch{$=(q)=>q}return $}function M(q){if(!q)return"";return $?$(q):q}async function p(){await P();let q=j(["components/*.stx","components/**/*.stx","resources/components/**/*.stx","storage/framework/defaults/resources/components/**/*.stx"],{cwd:L(),absolute:!0}),G=E("component-meta");if(!T(G))I(G,{recursive:!0});for(let X of q){let Q=R.parse(X).name,H=B(X),z=W(G,`${Q}.json`);F(z,JSON.stringify(H,null,2))}}function B(q){let G=v(q,"utf8"),X=b(G),Q=x(G),H=X?D(X):[],z=X?f(X):[],Z=h(Q);return{props:H,events:z,slots:Z}}function b(q){let G=/<script\b[^>]*\bserver\b[^>]*>([\s\S]*?)<\/script>/i.exec(q);if(G?.[1])return G[1];return/<script\b[^>]*>([\s\S]*?)<\/script>/i.exec(q)?.[1]??null}function x(q){let G=/<template\b[^>]*>([\s\S]*?)<\/template>/i.exec(q);if(G?.[1])return G[1];return q.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,"")}function D(q){let G=w(q),X=S(q,G);if(!X)return[];let Q=k(X,G),H=g(q);return Q.map((z)=>{return{name:z.required?z.name:`${z.name}?`,description:M(z.description),type:z.type,default:H[z.name]??z.default??"unknown",required:z.required}})}function w(q){let G=new Map,X=/(?:export\s+)?interface\s+([A-Z][\w$]*)\s*(?:extends\s+[\w$,\s]+)?\s*\{/g,Q;while((Q=X.exec(q))!==null){let z=Q[1];if(!z)continue;let Z=Q.index+Q[0].length,Y=K(q,Z-1,"{","}");if(Y!==null)G.set(z,Y)}let H=/(?:export\s+)?type\s+([A-Z][\w$]*)\s*=\s*\{/g;while((Q=H.exec(q))!==null){let z=Q[1];if(!z)continue;let Z=Q.index+Q[0].length,Y=K(q,Z-1,"{","}");if(Y!==null)G.set(z,Y)}return G}function S(q,G){let Q=/defineProps\s*<\s*([\s\S]+?)\s*>\s*\(/.exec(q),H=Q?.[1]?.trim();if(!Q||!H)return null;if(H.startsWith("{")){let Z=q.indexOf("{",Q.index);return K(q,Z,"{","}")}let z=H.replace(/[<>(].*$/,"").split("&")[0]?.trim();if(!z)return null;return G.get(z)??null}function k(q,G){let X=[],Q=N(q,[";",`
3
3
  `]),H="";for(let z of Q){let Z=z.trim();if(!Z)continue;let Y=/^\/\*\*([\s\S]*?)\*\/\s*([\s\S]*)$/.exec(Z);if(Y){H=(Y[1]??"").split(`
4
4
  `).map((A)=>A.replace(/^\s*\*\s?/,"")).join(`
5
5
  `).trim();let C=(Y[2]??"").trim();if(!C)continue;let J=V(C,H,G);if(J)X.push(J);H="";continue}if(Z.startsWith("//")){H=Z.replace(/^\/\/\s?/,"");continue}let _=V(Z,H,G);if(_)X.push(_);H=""}return X}function V(q,G,X){if(/^[a-zA-Z_$][\w$]*\s*\(/.test(q.trimStart()))return null;let Q=/^([a-zA-Z_$][\w$]*)\s*(\??)\s*:\s*([\s\S]+?)\s*[;,]?\s*$/.exec(q);if(!Q)return null;let H=Q[1],z=Q[2]??"",Z=Q[3];if(!H||!Z)return null;return{name:H,type:O(Z),required:z!=="?",description:G}}function g(q){let G={},X=/const\s*\{\s*([\s\S]*?)\s*\}\s*=\s*(?:withDefaults\s*\(\s*)?defineProps/g,Q;while((Q=X.exec(q))!==null)if(Q[1])y(Q[1],G);let H=q.indexOf("withDefaults(");if(H>=0){let z=q.indexOf("defineProps",H);if(z>0){let Z=q.indexOf(">",z),Y=q.indexOf(")",Z>=0?Z:z);if(Y>0){let _=q.indexOf(",",Y),C=_>=0?q.indexOf("{",_):-1;if(C>0){let J=K(q,C,"{","}");if(J)u(J,G)}}}}return G}function y(q,G){for(let X of N(q,[","])){let Q=/^\s*([a-zA-Z_$][\w$]*)\s*=\s*([\s\S]+?)\s*$/.exec(X),H=Q?.[1],z=Q?.[2];if(H&&z)G[H]=O(z)}}function u(q,G){for(let X of N(q,[","])){let Q=/^\s*([a-zA-Z_$][\w$]*)\s*:\s*([\s\S]+?)\s*$/.exec(X.trim()),H=Q?.[1],z=Q?.[2];if(H&&z)G[H]=O(z)}}function f(q){let G=/defineEmits\s*<\s*\{([\s\S]*?)\}\s*>\s*\(/.exec(q);if(!G?.[1])return[];let X=[];for(let Q of N(G[1],[";",`
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{G as x}from"./chunk-c0cs49hn.js";import{italic as I}from"@stacksjs/cli";import{log as W}from"@stacksjs/logging";import{path as Z}from"@stacksjs/path";import{writeTextFile as L}from"@stacksjs/storage";var P={str:"string",string:"string",varchar:"string",text:"text",longtext:"text",int:"number",integer:"number",number:"number",num:"number",bool:"boolean",boolean:"boolean",date:"date",datetime:"date",json:"json"};function U(G){if(!G)return[];let H=G.split(",").map((q)=>q.trim()).filter(Boolean),J=[];for(let q of H){let[K,O="string"]=q.split(":"),Q=K?.trim();if(!Q)continue;let B=P[O.trim().toLowerCase()]??"string";J.push({name:Q,type:B})}return J}function V(G){if(!G)return G;let H=G.toLowerCase();if(H.endsWith("s")||H.endsWith("x")||H.endsWith("z")||H.endsWith("ch")||H.endsWith("sh"))return`${G}es`;if(H.endsWith("y")&&!/[aeiou]y$/.test(H))return`${G.slice(0,-1)}ies`;return`${G}s`}function v(G){return G.replace(/(^|[-_\s])(\w)/g,(H,J,q)=>String(q).toUpperCase())}function X(G){return G.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}function Y(G){if(G.length===0)return" title: { type: 'string', fillable: true, validation: { rule: schema.string().required() } },";return G.map((H)=>{let J=H.type,q=J==="number"?"schema.number()":J==="boolean"?"schema.boolean()":J==="date"?"schema.date()":J==="json"?"schema.object({})":"schema.string()",K=J==="number"?"number":J==="boolean"?"boolean":J==="date"?"date":J==="json"?"json":"string";return` ${H.name}: { type: '${K}', fillable: true, validation: { rule: ${q} } },`}).join(`
2
+ import{G as x}from"./chunk-heh4x32p.js";import{italic as I}from"@stacksjs/cli";import{log as W}from"@stacksjs/logging";import{path as Z}from"@stacksjs/path";import{writeTextFile as L}from"@stacksjs/storage";var P={str:"string",string:"string",varchar:"string",text:"text",longtext:"text",int:"number",integer:"number",number:"number",num:"number",bool:"boolean",boolean:"boolean",date:"date",datetime:"date",json:"json"};function U(G){if(!G)return[];let H=G.split(",").map((q)=>q.trim()).filter(Boolean),J=[];for(let q of H){let[K,O="string"]=q.split(":"),Q=K?.trim();if(!Q)continue;let B=P[O.trim().toLowerCase()]??"string";J.push({name:Q,type:B})}return J}function V(G){if(!G)return G;let H=G.toLowerCase();if(H.endsWith("s")||H.endsWith("x")||H.endsWith("z")||H.endsWith("ch")||H.endsWith("sh"))return`${G}es`;if(H.endsWith("y")&&!/[aeiou]y$/.test(H))return`${G.slice(0,-1)}ies`;return`${G}s`}function v(G){return G.replace(/(^|[-_\s])(\w)/g,(H,J,q)=>String(q).toUpperCase())}function X(G){return G.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}function Y(G){if(G.length===0)return" title: { type: 'string', fillable: true, validation: { rule: schema.string().required() } },";return G.map((H)=>{let J=H.type,q=J==="number"?"schema.number()":J==="boolean"?"schema.boolean()":J==="date"?"schema.date()":J==="json"?"schema.object({})":"schema.string()",K=J==="number"?"number":J==="boolean"?"boolean":J==="date"?"date":J==="json"?"json":"string";return` ${H.name}: { type: '${K}', fillable: true, validation: { rule: ${q} } },`}).join(`
3
3
  `)}function _(G){if(G.length===0)return" .addColumn('title', 'varchar(255)', col => col.notNull())";return G.map((H)=>{switch(H.type){case"number":return` .addColumn('${H.name}', 'integer')`;case"boolean":return` .addColumn('${H.name}', 'boolean', col => col.defaultTo(false))`;case"text":return` .addColumn('${H.name}', 'text')`;case"date":return` .addColumn('${H.name}', 'timestamp')`;case"json":return` .addColumn('${H.name}', 'text')`;default:return` .addColumn('${H.name}', 'varchar(255)')`}}).join(`
4
4
  `)}function D(G,H,J){let q=v(G);switch(H){case"Index":return`import { Action } from '@stacksjs/actions'
5
5
  import ${q} from '~/app/Models/${q}'
package/dist/clean.d.ts CHANGED
@@ -1 +1 @@
1
-
1
+ export {};
package/dist/commit.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{Pa as a,Qa as b}from"./chunk-h63c1v89.js";import"./chunk-h3163h5z.js";export{a as invoke,b as commit};
2
+ import{Pa as a,Qa as b}from"./chunk-h63c1v89.js";import"./chunk-v0hqskdk.js";export{a as invoke,b as commit};
@@ -1 +1 @@
1
-
1
+ export {};
@@ -1 +1 @@
1
-
1
+ export {};
@@ -1 +1 @@
1
-
1
+ export {};
@@ -1 +1 @@
1
-
1
+ export {};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{sb as Z}from"../chunk-h3163h5z.js";import{existsSync as JJ,readFileSync as BJ,statSync as TJ}from"fs";import T from"process";import{runCommand as KJ,spinner as S}from"@stacksjs/cli";import{config as OJ}from"@stacksjs/config";import{path as X}from"@stacksjs/path";import{storage as RJ}from"@stacksjs/storage";import{ExitCode as EJ}from"@stacksjs/types";var $={debug:(...J)=>{if(T.argv.includes("--verbose")||T.argv.includes("-v"))console.log("\uD83D\uDD0D",...J)},success:(...J)=>console.log("\u2713",...J),error:(...J)=>console.error("\u2717",...J)},GJ="github.com/mail-os/mail",NJ=`${GJ}@0.1.0`,jJ="linux-x86_64",XJ=["mail","mail-x86_64-linux","mail-x86_64-linux-gnu"],V=T.argv.includes("--verbose")||T.argv.includes("-v");async function DJ(J,U,H=8){let{existsSync:Q,readdirSync:_,statSync:b}=await import("fs"),{join:G,basename:y}=await import("path"),c=new Set(U),k=[];if(!Q(J))return k;function N(QJ,UJ){if(UJ>H)return;for(let o of _(QJ)){if(o===".git"||o==="node_modules")continue;let r=G(QJ,o),n=b(r);if(n.isDirectory())N(r,UJ+1);else if(n.isFile()&&c.has(y(r)))k.push(r)}}return N(J,0),k}async function MJ(J){let{readFileSync:U}=await import("fs"),H=U(J).slice(0,4);return H[0]===127&&H[1]===69&&H[2]===76&&H[3]===70}async function IJ(){let{existsSync:J}=await import("fs"),U=`${T.env.HOME}/Code/Tools/pantry/packages/ts-pantry/bin/cli.ts`;if(J(U))return{command:"bun",args:[U]};let H=X.projectPath("pantry/.bin/pantry");if(J(H))return{command:H,args:[]};let Q=`${T.env.HOME}/.local/share/pantry/global/bin/pantry`;if(J(Q))return{command:Q,args:[]};return{command:"pantry",args:[]}}async function PJ(){let{execFileSync:J}=await import("child_process"),U=X.projectPath("pantry"),H=await IJ();J(H.command,[...H.args,"install",NJ,"--install-dir",U,"--platform",jJ,"--quiet"],{cwd:X.projectPath(),stdio:V?"inherit":"pipe",env:T.env})}async function fJ(){let{existsSync:J}=await import("fs"),{join:U}=await import("path"),H=[X.projectPath("pantry"),`${T.env.HOME}/.local/share/pantry`],Q=[...XJ.map((_)=>X.projectPath(`pantry/.bin/${_}`)),...XJ.map((_)=>U(`${T.env.HOME}/.local/share/pantry/global/bin`,_))];for(let _ of Q)if(J(_)&&await MJ(_))return _;for(let _ of H){let b=await DJ(_,XJ);for(let G of b)if(await MJ(G))return G}return null}var bJ={".html":"text/html",".css":"text/css",".js":"application/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject",".otf":"font/otf",".webp":"image/webp",".mp4":"video/mp4",".webm":"video/webm",".mp3":"audio/mpeg",".wav":"audio/wav",".pdf":"application/pdf",".xml":"application/xml",".txt":"text/plain"};function WJ(J){let U=J.lastIndexOf("."),H=U>=0?J.slice(U).toLowerCase():"";return bJ[H]||"application/octet-stream"}async function HJ(J,U,H="",Q=[".DS_Store"]){let{readdirSync:_,statSync:b}=await import("fs"),{join:G}=await import("path"),y=_(J);for(let c of y){if(Q.includes(c))continue;let k=G(J,c),N=H?`${H}/${c}`:c;if(b(k).isDirectory())await HJ(k,U,N,Q);else await U(k,N)}}async function a(J,U="s3 operation"){for(let Q=0;Q<=3;Q++)try{return await J()}catch(_){if(Q>=3)throw _;let b=Math.min(500*2**Q+Math.random()*200,5000);if(V)$.debug(` Retrying ${U} (attempt ${Q+2}/4) in ${Math.round(b)}ms...`);await new Promise((G)=>setTimeout(G,b))}throw Error(`${U} failed after 4 attempts`)}function wJ(J){if(!J)return[];return Array.isArray(J)?J:[J]}function AJ(J,U,H=""){if(U===null||U===void 0)return"";if(typeof U==="boolean")return`${H}<${J}>${U}</${J}>
2
+ import{qb as Z}from"../chunk-v0hqskdk.js";import{existsSync as JJ,readFileSync as BJ,statSync as TJ}from"fs";import T from"process";import{runCommand as KJ,spinner as S}from"@stacksjs/cli";import{config as OJ}from"@stacksjs/config";import{path as X}from"@stacksjs/path";import{storage as RJ}from"@stacksjs/storage";import{ExitCode as EJ}from"@stacksjs/types";var $={debug:(...J)=>{if(T.argv.includes("--verbose")||T.argv.includes("-v"))console.log("\uD83D\uDD0D",...J)},success:(...J)=>console.log("\u2713",...J),error:(...J)=>console.error("\u2717",...J)},GJ="github.com/mail-os/mail",NJ=`${GJ}@0.1.0`,jJ="linux-x86_64",XJ=["mail","mail-x86_64-linux","mail-x86_64-linux-gnu"],V=T.argv.includes("--verbose")||T.argv.includes("-v");async function DJ(J,U,H=8){let{existsSync:Q,readdirSync:_,statSync:b}=await import("fs"),{join:G,basename:y}=await import("path"),c=new Set(U),k=[];if(!Q(J))return k;function N(QJ,UJ){if(UJ>H)return;for(let o of _(QJ)){if(o===".git"||o==="node_modules")continue;let r=G(QJ,o),n=b(r);if(n.isDirectory())N(r,UJ+1);else if(n.isFile()&&c.has(y(r)))k.push(r)}}return N(J,0),k}async function MJ(J){let{readFileSync:U}=await import("fs"),H=U(J).slice(0,4);return H[0]===127&&H[1]===69&&H[2]===76&&H[3]===70}async function IJ(){let{existsSync:J}=await import("fs"),U=`${T.env.HOME}/Code/Tools/pantry/packages/ts-pantry/bin/cli.ts`;if(J(U))return{command:"bun",args:[U]};let H=X.projectPath("pantry/.bin/pantry");if(J(H))return{command:H,args:[]};let Q=`${T.env.HOME}/.local/share/pantry/global/bin/pantry`;if(J(Q))return{command:Q,args:[]};return{command:"pantry",args:[]}}async function PJ(){let{execFileSync:J}=await import("child_process"),U=X.projectPath("pantry"),H=await IJ();J(H.command,[...H.args,"install",NJ,"--install-dir",U,"--platform",jJ,"--quiet"],{cwd:X.projectPath(),stdio:V?"inherit":"pipe",env:T.env})}async function fJ(){let{existsSync:J}=await import("fs"),{join:U}=await import("path"),H=[X.projectPath("pantry"),`${T.env.HOME}/.local/share/pantry`],Q=[...XJ.map((_)=>X.projectPath(`pantry/.bin/${_}`)),...XJ.map((_)=>U(`${T.env.HOME}/.local/share/pantry/global/bin`,_))];for(let _ of Q)if(J(_)&&await MJ(_))return _;for(let _ of H){let b=await DJ(_,XJ);for(let G of b)if(await MJ(G))return G}return null}var bJ={".html":"text/html",".css":"text/css",".js":"application/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject",".otf":"font/otf",".webp":"image/webp",".mp4":"video/mp4",".webm":"video/webm",".mp3":"audio/mpeg",".wav":"audio/wav",".pdf":"application/pdf",".xml":"application/xml",".txt":"text/plain"};function WJ(J){let U=J.lastIndexOf("."),H=U>=0?J.slice(U).toLowerCase():"";return bJ[H]||"application/octet-stream"}async function HJ(J,U,H="",Q=[".DS_Store"]){let{readdirSync:_,statSync:b}=await import("fs"),{join:G}=await import("path"),y=_(J);for(let c of y){if(Q.includes(c))continue;let k=G(J,c),N=H?`${H}/${c}`:c;if(b(k).isDirectory())await HJ(k,U,N,Q);else await U(k,N)}}async function a(J,U="s3 operation"){for(let Q=0;Q<=3;Q++)try{return await J()}catch(_){if(Q>=3)throw _;let b=Math.min(500*2**Q+Math.random()*200,5000);if(V)$.debug(` Retrying ${U} (attempt ${Q+2}/4) in ${Math.round(b)}ms...`);await new Promise((G)=>setTimeout(G,b))}throw Error(`${U} failed after 4 attempts`)}function wJ(J){if(!J)return[];return Array.isArray(J)?J:[J]}function AJ(J,U,H=""){if(U===null||U===void 0)return"";if(typeof U==="boolean")return`${H}<${J}>${U}</${J}>
3
3
  `;if(typeof U==="number"||typeof U==="string")return`${H}<${J}>${U}</${J}>
4
4
  `;if(Array.isArray(U))return U.map((Q)=>AJ(J,Q,H)).join("");if(typeof U==="object"){if(J.startsWith("@_")||J==="?xml")return"";let Q="";for(let[_,b]of Object.entries(U))if(!_.startsWith("@_")&&_!=="#text")Q+=AJ(_,b,`${H} `);if(U["#text"]!==void 0)return`${H}<${J}>${U["#text"]}</${J}>
5
5
  `;return`${H}<${J}>
@@ -8,7 +8,7 @@ ${Q}${H}</${J}>
8
8
  <DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
9
9
  ${Object.entries(J).filter(([U])=>!U.startsWith("@_")).map(([U,H])=>AJ(U,H," ")).join("")}</DistributionConfig>
10
10
  `}function _J(J){let U=[...new Set(J)].filter((Q)=>Number.isFinite(Q)&&Q>0).sort((Q,_)=>Q-_);if(U.length===0)return"true";return`if command -v firewall-cmd >/dev/null 2>&1; then firewall-cmd --permanent ${U.map((Q)=>`--add-port=${Q}/tcp`).join(" ")} && firewall-cmd --reload; fi`}async function CJ(J,U,H){if(!U)return;if(((await J.describeSecurityGroups({GroupIds:[U]}))?.SecurityGroups?.[0]?.IpPermissions||[]).some((G)=>{return G.IpProtocol==="tcp"&&Number(G.FromPort)<=H&&Number(G.ToPort)>=H&&wJ(G.IpRanges).some((y)=>y.CidrIp==="0.0.0.0/0")}))return;try{await J.authorizeSecurityGroupIngress({GroupId:U,IpPermissions:[{IpProtocol:"tcp",FromPort:H,ToPort:H,IpRanges:[{CidrIp:"0.0.0.0/0",Description:`Stacks API port ${H}`}]}]})}catch(G){if(!String(G?.message||"").includes("InvalidPermission.Duplicate"))throw G}}async function kJ(J,U,H){if(!U)return;let Q=await J.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${U}/config`,returnHeaders:!0}),_=Q.headers?.etag||Q.headers?.ETag||"",b=Q.body?.DistributionConfig||Q.DistributionConfig||Q.body;if(!_||!b?.Origins?.Items)return;let y=wJ(b.Origins.Items.Origin).find((c)=>String(c.Id||"").includes("-api"));if(!y?.CustomOriginConfig)return;if(Number(y.CustomOriginConfig.HTTPPort)===H)return;y.CustomOriginConfig.HTTPPort=H,await J.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${U}/config`,body:hJ(b),headers:{"Content-Type":"application/xml","If-Match":_}})}var xJ=S("Building framework...");xJ.start();await KJ("bun run build",{cwd:X.frameworkPath("core"),quiet:!1});xJ.succeed("Framework built");var LJ=X.projectPath("docs"),SJ=X.projectPath("dist/docs/.bunpress");if(RJ.hasFiles(LJ)){let J=S("Building documentation with BunPress...");J.start();try{let{rm:U}=await import("fs/promises"),H=`${T.env.HOME}/Code/Tools/bunpress/packages/bunpress/bin/cli.ts`,Q=X.projectPath("node_modules/@stacksjs/bunpress/dist/bin/cli.js"),_=await Bun.file(H).exists(),b=await Bun.file(Q).exists(),G=_?`bun ${H} build --dir ${LJ} --outdir ${X.projectPath("dist/docs")}`:b?`bun ${Q} build --dir ${LJ} --outdir ${X.projectPath("dist/docs")}`:"bunx @stacksjs/bunpress@0.1.5 build --dir ./docs --outdir ./dist/docs";await U(SJ,{recursive:!0,force:!0}),await KJ(G,{cwd:X.projectPath(),quiet:!V}),J.succeed(`Documentation built with BunPress${_?" (local checkout)":""}`)}catch(U){if(J.stop(),console.log(`\u26A0 Documentation build skipped: ${U.message}`),V)$.debug("To build docs manually: cd ~/Code/Tools/bunpress && bun packages/bunpress/bin/cli.ts build --dir /path/to/docs --outdir /path/to/dist/docs")}}else if(V)$.debug("No docs directory found, skipping documentation build");var vJ=RJ.hasFiles(X.projectPath("dist/blog")),yJ=["CampmateScript-Regular.woff2","SequoiaSans-Regular.woff2","Switchback-Regular.woff2"].every((J)=>JJ(X.projectPath(`dist/blog/assets/fonts/nps/${J}`))),gJ=["topography.svg","park-ridge.svg"].every((J)=>JJ(X.projectPath(`dist/blog/assets/images/${J}`))),ZJ=X.projectPath("dist/blog/index.html"),i=JJ(ZJ)?BJ(ZJ,"utf8"):"",cJ=i.length>0&&!i.includes("woff2-variations"),mJ=i.includes("--on-primary")&&i.includes("--newsletter-bg"),dJ=i.includes("topography.svg")&&i.includes("park-ridge.svg"),pJ=!i.includes("stamp-trail")&&!i.includes("blog-sign-tree.svg"),uJ=X.frameworkPath("core/cms/src/build.ts"),sJ=X.projectPath("config/blog.ts"),lJ=JJ(ZJ)&&[uJ,sJ].filter((J)=>JJ(J)).every((J)=>TJ(ZJ).mtimeMs>=TJ(J).mtimeMs);if(!vJ||!yJ||!gJ||!cJ||!mJ||!dJ||!pJ||!lJ){let J=S("Building blog...");J.start();try{let U=(await import(X.projectPath("config/blog"))).default,{buildBlogSite:H}=await import(X.frameworkPath("core/cms/src/build"));await H({config:U,outDir:X.projectPath("dist/blog")}),J.succeed("Blog built successfully")}catch(U){if(J.stop(),console.log(`\u26A0 Blog build skipped: ${U.message}`),V)$.debug(`Blog build error: ${U.stack}`)}}else if(V)$.debug("Pre-built blog found at dist/blog, skipping build");if(V)$.debug("Skipping views build (vite-config not configured)");var aJ=await import(X.projectPath("config/cloud")),iJ=aJ?.tsCloud?.mode||"server";if(iJ==="serverless"){let J=S("Building server...");J.start(),await KJ("bun build.ts",{cwd:X.frameworkPath("server"),quiet:!V}),J.succeed("Server built");let U=S("Packaging for deployment...");U.start(),await KJ("bun zip.ts",{cwd:X.corePath("cloud"),quiet:!V}),U.succeed("Package ready")}else if(V)$.debug("Skipping server build and packaging (server mode)");if(!T.env.AWS_ACCESS_KEY_ID||!T.env.AWS_SECRET_ACCESS_KEY){let{existsSync:J,readFileSync:U}=await import("fs"),H=T.env.APP_ENV||T.env.NODE_ENV||"production",Q=[X.projectPath(`.env.${H}`),X.projectPath(".env")];for(let _ of Q)if(J(_)){let b=U(_,"utf-8");for(let G of b.split(`
11
- `)){let y=G.trim();if(y.startsWith("#")||!y.includes("="))continue;let c=y.indexOf("="),k=y.slice(0,c).trim(),N=y.slice(c+1).trim();if(N.startsWith('"')&&N.endsWith('"')||N.startsWith("'")&&N.endsWith("'"))N=N.slice(1,-1);if(k==="AWS_ACCESS_KEY_ID"&&N)T.env.AWS_ACCESS_KEY_ID=N;else if(k==="AWS_SECRET_ACCESS_KEY"&&N)T.env.AWS_SECRET_ACCESS_KEY=N;else if(k==="AWS_REGION"&&N&&!T.env.AWS_REGION)T.env.AWS_REGION=N;else if(k==="AWS_ACCOUNT_ID"&&N&&!T.env.AWS_ACCOUNT_ID)T.env.AWS_ACCOUNT_ID=N;else if(k.startsWith("MAIL_PASSWORD_")&&N&&!T.env[k])T.env[k]=N}if(V)$.debug(`Loaded AWS credentials from ${_}`);break}}try{let{deployStack:J,deployFrontend:U}=await import("../chunk-8tmc78d6.js"),H=T.env.APP_ENV||T.env.NODE_ENV||"production",Q=T.env.AWS_REGION||"us-east-1",_=await import(X.projectPath("config/cloud")),b=_?.tsCloud?.mode||"server",G=_?.tsCloud?.project?.name||_?.tsCloud?.project?.slug||"stacks";if(b==="serverless"){console.log(""),console.log("Serverless deployment mode detected"),console.log("Building and pushing container image..."),console.log("");let z=T.env.AWS_ACCOUNT_ID||await y(Q);if(!z||z.length<10)throw Error(`Invalid AWS Account ID: "${z||"(empty)"}"
11
+ `)){let y=G.trim();if(y.startsWith("#")||!y.includes("="))continue;let c=y.indexOf("="),k=y.slice(0,c).trim(),N=y.slice(c+1).trim();if(N.startsWith('"')&&N.endsWith('"')||N.startsWith("'")&&N.endsWith("'"))N=N.slice(1,-1);if(k==="AWS_ACCESS_KEY_ID"&&N)T.env.AWS_ACCESS_KEY_ID=N;else if(k==="AWS_SECRET_ACCESS_KEY"&&N)T.env.AWS_SECRET_ACCESS_KEY=N;else if(k==="AWS_REGION"&&N&&!T.env.AWS_REGION)T.env.AWS_REGION=N;else if(k==="AWS_ACCOUNT_ID"&&N&&!T.env.AWS_ACCOUNT_ID)T.env.AWS_ACCOUNT_ID=N;else if(k.startsWith("MAIL_PASSWORD_")&&N&&!T.env[k])T.env[k]=N}if(V)$.debug(`Loaded AWS credentials from ${_}`);break}}try{let{deployStack:J,deployFrontend:U}=await import("../chunk-49ry9mgz.js"),H=T.env.APP_ENV||T.env.NODE_ENV||"production",Q=T.env.AWS_REGION||"us-east-1",_=await import(X.projectPath("config/cloud")),b=_?.tsCloud?.mode||"server",G=_?.tsCloud?.project?.name||_?.tsCloud?.project?.slug||"stacks";if(b==="serverless"){console.log(""),console.log("Serverless deployment mode detected"),console.log("Building and pushing container image..."),console.log("");let z=T.env.AWS_ACCOUNT_ID||await y(Q);if(!z||z.length<10)throw Error(`Invalid AWS Account ID: "${z||"(empty)"}"
12
12
  Set AWS_ACCOUNT_ID in your .env file or ensure valid AWS credentials are configured.`);let q=`${z}.dkr.ecr.${Q}.amazonaws.com/${G}-${H}-api`,A=`${q}:latest`;if(V)$.debug(`ECR repository: ${q}`);if(V)$.debug("ECR credentials will be validated before push...");let W=S("Building Docker image...");W.start();try{let{exec:Y}=await import("child_process"),{promisify:F}=await import("util"),x=F(Y),E=`docker build --platform linux/amd64 -t ${A} -f Dockerfile .`,{stdout:M,stderr:O}=await x(E,{cwd:X.projectPath(),env:T.env,maxBuffer:10485760,timeout:900000});if(V&&M)$.debug(M);if(V&&O)$.debug(O);W.succeed(`Docker image built: ${A}`)}catch(Y){if(W.fail("Docker build failed"),V)$.debug(`Docker build error: ${Y.message}`);throw Y}let K=S("Checking ECR repository...");K.start();try{let{ECRClient:Y}=await import("@stacksjs/ts-cloud"),F=new Y(Q),x=`${G}-${H}-api`;try{await F.describeRepositories({repositoryNames:[x]}),K.succeed(`ECR repository exists: ${x}`)}catch(E){if(E.code==="RepositoryNotFoundException"||E.message?.includes("RepositoryNotFoundException"))K.text=`Creating ECR repository: ${x}...`,await F.createRepository({repositoryName:x,imageScanningConfiguration:{scanOnPush:!0},imageTagMutability:"MUTABLE"}),K.succeed(`ECR repository created: ${x}`);else throw E}}catch(Y){if(K.fail("ECR repository check failed"),V)$.debug(`ECR repository error: ${Y.message}`);throw Y}let w=S("Authenticating to ECR...");w.start();try{let{ECRClient:Y}=await import("@stacksjs/ts-cloud"),E=(await new Y(Q).getAuthorizationToken()).authorizationData?.[0];if(!E?.authorizationToken)throw Error("No authorization token received from ECR");let M=Buffer.from(E.authorizationToken,"base64").toString("utf-8"),O=M.indexOf(":");if(O===-1)throw Error("ECR authorization token has unexpected format (missing colon separator)");let L=M.slice(O+1),j=Bun.spawnSync(["docker","login","--username","AWS","--password-stdin",`${z}.dkr.ecr.${Q}.amazonaws.com`],{stdin:new TextEncoder().encode(L),stdout:"pipe",stderr:"pipe"});if(j.exitCode!==0){let P=new TextDecoder().decode(j.stderr);throw Error(`Docker login failed: ${P}`)}w.succeed("Authenticated to ECR")}catch(Y){if(w.fail("ECR authentication failed"),V)$.debug(`ECR auth error: ${Y.message}`);throw Y}console.log("");let I=S("Pushing image to ECR...");I.start();try{let{exec:Y}=await import("child_process"),{promisify:F}=await import("util"),x=F(Y),E=`docker push ${A}`;await x(E,{env:T.env}),I.succeed(`Image pushed: ${A}`)}catch(Y){if(I.fail("Docker push failed"),V)$.debug(`Push error: ${Y.message}`);throw Y}console.log(""),console.log("Container image ready in ECR. CloudFormation will use this image."),console.log("")}else console.log(""),console.log("Server deployment mode detected"),console.log("Deploying EC2 infrastructure via CloudFormation..."),console.log("");async function y(z){try{let{STSClient:q}=await import("@stacksjs/ts-cloud"),K=(await new q(z).getCallerIdentity()).Account||T.env.AWS_ACCOUNT_ID||"";if(V)$.debug(`Retrieved AWS Account ID: ${K||"(empty)"}`);return K}catch(q){if(V)$.debug(`Failed to get AWS Account ID: ${q.message}`);return T.env.AWS_ACCOUNT_ID||""}}try{let z=await import(X.projectPath("cloud/deploy-script"));if(typeof z.beforeDeploy==="function")await z.beforeDeploy({environment:H,region:Q})}catch(z){if(z.code==="ERR_MODULE_NOT_FOUND"||z.code==="MODULE_NOT_FOUND"){if(V)$.debug("No beforeDeploy hook found (cloud/deploy-script not found)")}else if(console.warn(`\u26A0 beforeDeploy hook failed: ${z.message}`),V)$.debug(`beforeDeploy error stack: ${z.stack}`)}await J({environment:H,region:Q,waitForCompletion:!0,verbose:V});try{let z=await import(X.projectPath("cloud/deploy-script"));if(typeof z.afterDeploy==="function"){let{CloudFormationClient:q}=await import("@stacksjs/ts-cloud"),A=new q(Q),W=`${G}-cloud`,K={};try{K=await A.getStackOutputs(W)}catch(w){if(V)$.debug(`Failed to get stack outputs: ${w instanceof Error?w.message:String(w)}`)}await z.afterDeploy({environment:H,region:Q,outputs:K})}}catch(z){if(z.code==="ERR_MODULE_NOT_FOUND"||z.code==="MODULE_NOT_FOUND"){if(V)$.debug("No afterDeploy hook found (cloud/deploy-script not found)")}else if(console.warn(`\u26A0 afterDeploy hook failed: ${z.message}`),V)$.debug(`afterDeploy error stack: ${z.stack}`)}let c=S("Running database migrations...");c.start();try{let{generateMigrations:z,runDatabaseMigration:q}=await import("@stacksjs/database");await z(),await q(),c.succeed("Database migrations completed")}catch(z){if(c.stop(),console.log(`\u26A0 Database migrations skipped: ${z.message}`),V)$.debug(`Migration error: ${z.stack}`)}let k=S("Ensuring framework tables (auth, notifications, RBAC)...");k.start();try{let{migrateAuthTables:z,migrateNotificationTables:q,migrateRbacTables:A}=await import("@stacksjs/database"),W=[],K=[["auth",z],["notification",q],["RBAC",A]];for(let[w,I]of K){let Y=await I({verbose:V});if(!Y.success)W.push(`${w}: ${Y.error}`)}if(W.length>0)k.stop(),console.log(`\u26A0 Some framework tables could not be migrated: ${W.join("; ")}`);else k.succeed("Framework tables ensured (auth, notifications, RBAC)")}catch(z){if(k.stop(),console.log(`\u26A0 Framework table migrations skipped: ${z.message}`),V)$.debug(`Framework table migration error: ${z.stack}`)}if(b==="server"){let z=S("Retrieving server instance details...");z.start();try{let{CloudFormationClient:W}=await import("@stacksjs/ts-cloud"),K=new W(Q),w=`${G}-cloud`,I=await K.getStackOutputs(w);z.succeed("Server instances deployed"),console.log(""),console.log("Server instances:");for(let[Y,F]of Object.entries(I)){if(Y.endsWith("PublicIp"))console.log(` ${Y}: ${F}`);if(Y.endsWith("InstanceId"))console.log(` ${Y}: ${F}`)}console.log("")}catch(W){if(z.stop(),console.log(`\u26A0 Could not retrieve server details: ${W.message}`),V)$.debug(`Output retrieval error: ${W.stack}`)}let q=S("Deploying API server to EC2...");q.start();try{let{S3Client:W,CloudFormationClient:K,AWSClient:w}=await import("@stacksjs/ts-cloud"),{readFileSync:I,existsSync:Y}=await import("fs"),{resolve:F}=await import("path"),x=new W(Q),E=new K(Q),M=new w,O=`${G}-cloud`,L=await E.getStackOutputs(O),j=L.FrontendBucketName,P=Number(OJ.ports?.api||3008),C;for(let[g,v]of Object.entries(L))if(g.endsWith("InstanceId")&&typeof v==="string"){C=v;break}let f;if(C){let{EC2Client:g}=await import("@stacksjs/ts-cloud"),v=new g(Q);f=(await v.describeInstances({Filters:[{Name:"instance-id",Values:[C]}]}))?.Reservations?.[0]?.Instances?.[0]?.SecurityGroups?.[0]?.GroupId,await CJ(v,f,P)}if(!C||!j){if(q.stop(),!C)console.log("\u26A0 No EC2 instance found in stack outputs, skipping server deploy");if(!j)console.log("\u26A0 No S3 bucket found for staging server artifacts")}else{let g=L.publicCloudFrontDistributionId||L.CloudFrontDistributionId;await kJ(M,g,P);let v=F(X.projectPath("node_modules/@stacksjs/ts-cloud/dist/index.js"));if(Y(v)){let R=I(v);if(await a(()=>x.putObject({bucket:j,key:"_deploy/ts-cloud-dist.js",body:R,contentType:"application/javascript"}),"upload ts-cloud dist"),V)$.debug(" Uploaded ts-cloud dist to S3")}let m=`import { Database } from "bun:sqlite";
13
13
  import { SESClient } from "./ts-cloud-dist.js";
14
14
 
package/dist/dev/api.d.ts CHANGED
@@ -1 +1 @@
1
-
1
+ export {};
package/dist/dev/api.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{sb as K}from"../chunk-h3163h5z.js";import{existsSync as L}from"fs";import N from"process";import{parseOptions as Q}from"@stacksjs/cli";import{config as T,overridesReady as U}from"@stacksjs/config";import{path as V}from"@stacksjs/path";import{route as X}from"@stacksjs/router";import{generateAutoImportFiles as W,injectGlobalAutoImports as F}from"@stacksjs/server";var x=Q();await U;var $=Number(N.env.PORT_API)||T.ports?.api||3008,R=V.storagePath("framework/auto-imports/models.ts");if(!L(R))await W();await F();try{let z=V.appPath("Lib/typesense-dev.ts");if(L(z)){let B=await import(z);if(typeof B.ensureTypesenseRunning==="function")await B.ensureTypesenseRunning()}}catch(z){let{log:B}=await import("@stacksjs/cli");B.warn(`[api:dev] search engine bootstrap skipped: ${z.message}`)}try{let z=V.appPath("Listener.ts");if(L(z)){let B=await import(z);if(typeof B.handleEvents==="function")await B.handleEvents()}}catch(z){let{log:B}=await import("@stacksjs/cli");B.warn(`[api:dev] failed to bootstrap event listeners \u2014 dispatched events will be ignored: ${z.message}`)}try{let{startModelMigrationWatcher:z}=await import("./migrate-watcher.js");z()}catch(z){let{log:B}=await import("@stacksjs/cli");B.debug(`[api:dev] auto-migrate watcher not started: ${z.message}`)}function _(){let z=V.frameworkPath("defaults/app/Middleware/Cors.ts");if(L(z))return z;try{return`${Bun.resolveSync("@stacksjs/defaults/package.json",N.cwd()).replace(/package\.json$/,"")}app/Middleware/Cors.ts`}catch{return z}}var w=await import(_()),A=w.default;X.use(A.toRouterHandler());var E=/^[a-zA-Z0-9._-]{8,128}$/;X.use(async(z,B)=>{let Y=z?.headers?.get?.("x-request-id")||z?.headers?.get?.("X-Request-ID")||"",Z=typeof Y==="string"&&E.test(Y)?Y:crypto.randomUUID();z._requestId=Z,z._startNs=N.hrtime.bigint();let H=await B();if(H&&H.status===404&&(H.headers.get("content-type")||"").includes("json"))try{let J=await H.clone().json();if(J&&(J.message==="Not Found"||J.error==="Not Found")){let G=new URL(z.url),O={...J,path:G.pathname,method:z.method,request_id:Z},C=new Headers(H.headers);return C.set("X-Request-ID",Z),new Response(JSON.stringify(O),{status:404,headers:C})}}catch{}return H});await X.importRoutes();try{await X.serve({port:$,hostname:"127.0.0.1"}),console.log(`
2
+ import{qb as K}from"../chunk-v0hqskdk.js";import{existsSync as L}from"fs";import N from"process";import{parseOptions as Q}from"@stacksjs/cli";import{config as T,overridesReady as U}from"@stacksjs/config";import{path as V}from"@stacksjs/path";import{route as X}from"@stacksjs/router";import{generateAutoImportFiles as W,injectGlobalAutoImports as F}from"@stacksjs/server";var x=Q();await U;var $=Number(N.env.PORT_API)||T.ports?.api||3008,R=V.storagePath("framework/auto-imports/models.ts");if(!L(R))await W();await F();try{let z=V.appPath("Lib/typesense-dev.ts");if(L(z)){let B=await import(z);if(typeof B.ensureTypesenseRunning==="function")await B.ensureTypesenseRunning()}}catch(z){let{log:B}=await import("@stacksjs/cli");B.warn(`[api:dev] search engine bootstrap skipped: ${z.message}`)}try{let z=V.appPath("Listener.ts");if(L(z)){let B=await import(z);if(typeof B.handleEvents==="function")await B.handleEvents()}}catch(z){let{log:B}=await import("@stacksjs/cli");B.warn(`[api:dev] failed to bootstrap event listeners \u2014 dispatched events will be ignored: ${z.message}`)}try{let{startModelMigrationWatcher:z}=await import("./migrate-watcher.js");z()}catch(z){let{log:B}=await import("@stacksjs/cli");B.debug(`[api:dev] auto-migrate watcher not started: ${z.message}`)}function _(){let z=V.frameworkPath("defaults/app/Middleware/Cors.ts");if(L(z))return z;try{return`${Bun.resolveSync("@stacksjs/defaults/package.json",N.cwd()).replace(/package\.json$/,"")}app/Middleware/Cors.ts`}catch{return z}}var w=await import(_()),A=w.default;X.use(A.toRouterHandler());var E=/^[a-zA-Z0-9._-]{8,128}$/;X.use(async(z,B)=>{let Y=z?.headers?.get?.("x-request-id")||z?.headers?.get?.("X-Request-ID")||"",Z=typeof Y==="string"&&E.test(Y)?Y:crypto.randomUUID();z._requestId=Z,z._startNs=N.hrtime.bigint();let H=await B();if(H&&H.status===404&&(H.headers.get("content-type")||"").includes("json"))try{let J=await H.clone().json();if(J&&(J.message==="Not Found"||J.error==="Not Found")){let G=new URL(z.url),O={...J,path:G.pathname,method:z.method,request_id:Z},C=new Headers(H.headers);return C.set("X-Request-ID",Z),new Response(JSON.stringify(O),{status:404,headers:C})}}catch{}return H});await X.importRoutes();try{await X.serve({port:$,hostname:"127.0.0.1"}),console.log(`
3
3
  \u279C API server ready: http://localhost:${$}
4
4
  `)}catch(z){if((z?.code||z?.errno)==="EADDRINUSE"||String(z?.message||"").includes("EADDRINUSE"))console.error(`
5
5
  [dev/api] Port ${$} is already in use. Kill the other process and re-run \`./buddy dev\`, or set PORT_API to another port.
@@ -1 +1 @@
1
-
1
+ export {};
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import"../chunk-h3163h5z.js";import{existsSync as $,readdirSync as U,statSync as k}from"fs";import{join as V}from"path";import w from"process";import{projectPath as W,storagePath as D}from"@stacksjs/path";var H=[D("framework/defaults/resources/functions/dashboard"),W("resources/functions"),W("app/Helpers")];async function F(q={}){let B=globalThis,C=[],G=0;for(let J of H){if(!$(J))continue;let K;try{K=U(J)}catch{continue}for(let A of K){let z=V(J,A),M;try{M=k(z)}catch{continue}if(M.isDirectory()){let O;try{O=U(z)}catch{continue}for(let Q of O){if(!X(Q))continue;let Z=V(z,Q),T=await Y(Z,B,q.verbose);G+=T.added,C.push(...T.collisions)}continue}if(!X(A))continue;let N=await Y(z,B,q.verbose);G+=N.added,C.push(...N.collisions)}}if(q.verbose)w.stdout.write(`[dashboard] hoisted ${G} helper globals`+(C.length>0?` (skipped ${C.length} collisions: ${C.slice(0,5).join(", ")}\u2026)`:"")+`
2
+ import"../chunk-v0hqskdk.js";import{existsSync as $,readdirSync as U,statSync as k}from"fs";import{join as V}from"path";import w from"process";import{projectPath as W,storagePath as D}from"@stacksjs/path";var H=[D("framework/defaults/resources/functions/dashboard"),W("resources/functions"),W("app/Helpers")];async function F(q={}){let B=globalThis,C=[],G=0;for(let J of H){if(!$(J))continue;let K;try{K=U(J)}catch{continue}for(let A of K){let z=V(J,A),M;try{M=k(z)}catch{continue}if(M.isDirectory()){let O;try{O=U(z)}catch{continue}for(let Q of O){if(!X(Q))continue;let Z=V(z,Q),T=await Y(Z,B,q.verbose);G+=T.added,C.push(...T.collisions)}continue}if(!X(A))continue;let N=await Y(z,B,q.verbose);G+=N.added,C.push(...N.collisions)}}if(q.verbose)w.stdout.write(`[dashboard] hoisted ${G} helper globals`+(C.length>0?` (skipped ${C.length} collisions: ${C.slice(0,5).join(", ")}\u2026)`:"")+`
3
3
  `)}function X(q){if(!/\.(?:ts|tsx|js|mjs)$/.test(q))return!1;if(q.startsWith("_"))return!1;if(q.endsWith(".test.ts")||q.endsWith(".spec.ts"))return!1;if(q.endsWith(".d.ts"))return!1;return!0}async function Y(q,B,C){let G;try{G=await import(q)}catch{return{added:0,collisions:[]}}let J=[],K=0;for(let[A,z]of Object.entries(G)){if(A==="default"||A.startsWith("_"))continue;if(typeof z==="function"||z&&typeof z==="object"){if(B[A]===void 0)B[A]=z,K++;else if(B[A]!==z)J.push(A)}}return{added:K,collisions:J}}export{F as hoistDashboardGlobals};
@@ -24,59 +24,65 @@ export declare function buildSidebarConfig(baseRoute: string, discoveredModels:
24
24
  * NSOutlineView own that 240px column.
25
25
  */
26
26
  export declare function buildDashboardUrl(port: number): string;
27
- // Model name to icon mapping (SF Symbols)
28
- export declare const iconMap: {
29
- user: 'person.fill';
30
- team: 'person.2.fill';
31
- subscriber: 'envelope.open.fill';
32
- subscriberemail: 'envelope.fill';
33
- post: 'doc.text.fill';
34
- page: 'doc.fill';
35
- product: 'cube.box.fill';
36
- productvariant: 'cube.fill';
37
- productunit: 'scalemass.fill';
38
- order: 'list.clipboard.fill';
39
- orderitem: 'list.bullet.clipboard.fill';
40
- customer: 'person.crop.circle.fill';
41
- payment: 'creditcard.fill';
42
- paymentmethod: 'creditcard.and.123';
43
- paymentproduct: 'creditcard.fill';
44
- paymenttransaction: 'creditcard.fill';
45
- category: 'tag.fill';
46
- tag: 'tag';
47
- comment: 'bubble.left.fill';
48
- author: 'person.text.rectangle.fill';
49
- notification: 'bell.fill';
50
- job: 'briefcase.fill';
51
- log: 'list.bullet.rectangle.portrait.fill';
52
- campaign: 'megaphone.fill';
53
- review: 'star.fill';
54
- coupon: 'ticket.fill';
55
- giftcard: 'giftcard.fill';
56
- cart: 'cart.fill';
57
- cartitem: 'cart.badge.plus';
58
- taxrate: 'percent';
59
- transaction: 'arrow.left.arrow.right.circle.fill';
60
- subscription: 'repeat.circle.fill';
61
- emaillist: 'envelope.badge.person.crop';
62
- socialpost: 'bubble.left.and.bubble.right.fill';
63
- manufacturer: 'building.2.fill';
64
- shippingmethod: 'shippingbox.fill';
65
- shippingzone: 'map.fill';
66
- shippingrate: 'dollarsign.circle.fill';
67
- deliveryroute: 'map.fill';
68
- driver: 'car.fill';
69
- digitaldelivery: 'arrow.down.doc.fill';
70
- licensekey: 'key.fill';
71
- loyaltypoint: 'star.circle.fill';
72
- loyaltyreward: 'gift.fill';
73
- printdevice: 'printer.fill';
74
- receipt: 'doc.text.fill';
75
- waitlistproduct: 'clock.fill';
76
- waitlistrestaurant: 'clock.badge.checkmark.fill';
77
- websocket: 'antenna.radiowaves.left.and.right';
78
- default: 'tablecells.fill'
79
- };
27
+ /**
28
+ * Model name to icon mapping (SF Symbols)
29
+ * @defaultValue
30
+ * ```ts
31
+ * {
32
+ * user: 'person.fill',
33
+ * team: 'person.2.fill',
34
+ * subscriber: 'envelope.open.fill',
35
+ * subscriberemail: 'envelope.fill',
36
+ * post: 'doc.text.fill',
37
+ * page: 'doc.fill',
38
+ * product: 'cube.box.fill',
39
+ * productvariant: 'cube.fill',
40
+ * productunit: 'scalemass.fill',
41
+ * order: 'list.clipboard.fill',
42
+ * orderitem: 'list.bullet.clipboard.fill',
43
+ * customer: 'person.crop.circle.fill',
44
+ * payment: 'creditcard.fill',
45
+ * paymentmethod: 'creditcard.and.123',
46
+ * paymentproduct: 'creditcard.fill',
47
+ * paymenttransaction: 'creditcard.fill',
48
+ * category: 'tag.fill',
49
+ * tag: 'tag',
50
+ * comment: 'bubble.left.fill',
51
+ * author: 'person.text.rectangle.fill',
52
+ * notification: 'bell.fill',
53
+ * job: 'briefcase.fill',
54
+ * log: 'list.bullet.rectangle.portrait.fill',
55
+ * campaign: 'megaphone.fill',
56
+ * review: 'star.fill',
57
+ * coupon: 'ticket.fill',
58
+ * giftcard: 'giftcard.fill',
59
+ * cart: 'cart.fill',
60
+ * cartitem: 'cart.badge.plus',
61
+ * taxrate: 'percent',
62
+ * transaction: 'arrow.left.arrow.right.circle.fill',
63
+ * subscription: 'repeat.circle.fill',
64
+ * emaillist: 'envelope.badge.person.crop',
65
+ * socialpost: 'bubble.left.and.bubble.right.fill',
66
+ * manufacturer: 'building.2.fill',
67
+ * shippingmethod: 'shippingbox.fill',
68
+ * shippingzone: 'map.fill',
69
+ * shippingrate: 'dollarsign.circle.fill',
70
+ * deliveryroute: 'map.fill',
71
+ * driver: 'car.fill',
72
+ * digitaldelivery: 'arrow.down.doc.fill',
73
+ * licensekey: 'key.fill',
74
+ * loyaltypoint: 'star.circle.fill',
75
+ * loyaltyreward: 'gift.fill',
76
+ * printdevice: 'printer.fill',
77
+ * receipt: 'doc.text.fill',
78
+ * waitlistproduct: 'clock.fill',
79
+ * waitlistrestaurant: 'clock.badge.checkmark.fill',
80
+ * websocket: 'antenna.radiowaves.left.and.right',
81
+ * default: 'tablecells.fill'
82
+ * }
83
+ * ```
84
+ */
85
+ export declare const iconMap: Record<string, string>;
80
86
  // Models excluded from sidebar (already have dedicated pages)
81
87
  export declare const excludeModels: Set<any>;
82
88
  // Models that have dedicated dashboard pages
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{Aa as h,Ba as i,Ca as j,Da as k,Ea as l,Fa as m,ta as a,ua as b,va as c,wa as d,xa as e,ya as f,za as g}from"../chunk-k7n6c9hm.js";import"../chunk-h3163h5z.js";export{k as waitForServer,f as scanModelsDir,d as modelNameToId,i as isPortAvailable,a as iconMap,e as getModelIcon,j as findAvailablePort,b as excludeModels,g as discoverModels,c as dedicatedPages,l as buildSidebarConfig,h as buildManifest,m as buildDashboardUrl};
2
+ import{Aa as h,Ba as i,Ca as j,Da as k,Ea as l,Fa as m,ta as a,ua as b,va as c,wa as d,xa as e,ya as f,za as g}from"../chunk-k7n6c9hm.js";import"../chunk-v0hqskdk.js";export{k as waitForServer,f as scanModelsDir,d as modelNameToId,i as isPortAvailable,a as iconMap,e as getModelIcon,j as findAvailablePort,b as excludeModels,g as discoverModels,c as dedicatedPages,l as buildSidebarConfig,h as buildManifest,m as buildDashboardUrl};