@stacksjs/actions 0.70.23 → 0.70.26

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 (384) hide show
  1. package/dist/chunk-2gh7kgpc.js +3 -0
  2. package/dist/chunk-2kaj93p5.js +3 -0
  3. package/dist/chunk-2qchdrf9.js +3 -0
  4. package/dist/chunk-3086k7zk.js +184 -0
  5. package/dist/chunk-3beht8ja.js +130 -0
  6. package/dist/chunk-60qjz7zb.js +3 -0
  7. package/dist/chunk-67y94dzt.js +658 -0
  8. package/dist/chunk-6x1m5rkr.js +17 -0
  9. package/dist/chunk-7bpdkc40.js +714 -0
  10. package/dist/chunk-96b7fcmd.js +3 -0
  11. package/dist/chunk-aw6d8zr3.js +7 -0
  12. package/dist/chunk-c8qt2xst.js +3 -0
  13. package/dist/chunk-d4srk6ma.js +3 -0
  14. package/dist/chunk-e9tcbk71.js +1 -0
  15. package/dist/chunk-gt77jmb5.js +46 -0
  16. package/dist/chunk-h93n2j40.js +95 -0
  17. package/dist/chunk-jd1yzkq5.js +3 -0
  18. package/dist/chunk-kzhgexj4.js +3 -0
  19. package/dist/chunk-n1y0gpv6.js +3 -0
  20. package/dist/chunk-n2fd1d0m.js +3 -0
  21. package/dist/chunk-n2x7v39b.js +5 -0
  22. package/dist/chunk-rdajkt2s.js +88 -0
  23. package/dist/chunk-s735m9mg.js +1 -0
  24. package/dist/chunk-schcaf73.js +3 -0
  25. package/dist/chunk-tc935b45.js +93 -0
  26. package/dist/chunk-v0wnrnaa.js +7 -0
  27. package/dist/chunk-w418anbq.js +5 -0
  28. package/dist/chunk-wnrgcx3d.js +114 -0
  29. package/dist/chunk-wv5yb5wb.js +101 -0
  30. package/dist/chunk-x471rxrn.js +7 -0
  31. package/dist/chunk-xg9xscqz.js +1 -0
  32. package/dist/src/action.d.ts +60 -0
  33. package/dist/src/action.js +2 -0
  34. package/dist/src/actions.d.ts +2 -0
  35. package/dist/src/actions.js +2 -0
  36. package/dist/src/add.d.ts +6 -0
  37. package/dist/src/add.js +2 -0
  38. package/dist/src/ai/request-model-access.d.ts +1 -0
  39. package/dist/src/ai/request-model-access.js +2 -0
  40. package/dist/src/auth/client.d.ts +1 -0
  41. package/dist/src/auth/client.js +3 -0
  42. package/dist/src/auth/prune.d.ts +1 -0
  43. package/dist/src/auth/prune.js +2 -0
  44. package/dist/src/auth/setup.d.ts +1 -0
  45. package/dist/src/auth/setup.js +148 -0
  46. package/dist/src/auth/token.d.ts +1 -0
  47. package/dist/src/auth/token.js +2 -0
  48. package/dist/src/build/cli.d.ts +1 -0
  49. package/dist/src/build/cli.js +2 -0
  50. package/dist/src/build/component-libs.d.ts +1 -0
  51. package/dist/src/build/component-libs.js +2 -0
  52. package/dist/src/build/core.d.ts +1 -0
  53. package/dist/src/build/core.js +2 -0
  54. package/dist/src/build/desktop.d.ts +1 -0
  55. package/dist/src/build/desktop.js +2 -0
  56. package/dist/src/build/docs.d.ts +1 -0
  57. package/dist/src/build/docs.js +2 -0
  58. package/dist/src/build/server.d.ts +1 -0
  59. package/dist/src/build/server.js +2 -0
  60. package/dist/src/build/stacks.d.ts +1 -0
  61. package/dist/src/build/stacks.js +2 -0
  62. package/dist/src/build/views.d.ts +1 -0
  63. package/dist/src/build/views.js +2 -0
  64. package/dist/{build.d.ts → src/build.d.ts} +1 -2
  65. package/dist/src/build.js +2 -0
  66. package/dist/src/bump.d.ts +1 -0
  67. package/dist/src/bump.js +2 -0
  68. package/dist/src/cdn/invalidate-cache.d.ts +1 -0
  69. package/dist/src/cdn/invalidate-cache.js +1 -0
  70. package/dist/src/changelog.d.ts +1 -0
  71. package/dist/src/changelog.js +2 -0
  72. package/dist/src/check/ports.d.ts +1 -0
  73. package/dist/src/check/ports.js +2 -0
  74. package/dist/src/clean.d.ts +1 -0
  75. package/dist/src/clean.js +2 -0
  76. package/dist/{commit.d.ts → src/commit.d.ts} +1 -2
  77. package/dist/src/commit.js +2 -0
  78. package/dist/src/copy-types.d.ts +1 -0
  79. package/dist/src/copy-types.js +3 -0
  80. package/dist/src/database/seed.d.ts +1 -0
  81. package/dist/src/database/seed.js +2 -0
  82. package/dist/src/deploy/create-receipt-rule.d.ts +1 -0
  83. package/dist/src/deploy/create-receipt-rule.js +2 -0
  84. package/dist/src/deploy/index.d.ts +1 -0
  85. package/dist/src/deploy/index.js +307 -0
  86. package/dist/src/dev/api.d.ts +1 -0
  87. package/dist/src/dev/api.js +6 -0
  88. package/dist/src/dev/components.d.ts +1 -0
  89. package/dist/src/dev/components.js +2 -0
  90. package/dist/src/dev/dashboard-globals.d.ts +4 -0
  91. package/dist/src/dev/dashboard-globals.js +3 -0
  92. package/dist/src/dev/dashboard-utils.d.ts +126 -0
  93. package/dist/src/dev/dashboard-utils.js +2 -0
  94. package/dist/src/dev/dashboard.d.ts +12 -0
  95. package/dist/src/dev/dashboard.js +8 -0
  96. package/dist/src/dev/desktop.d.ts +1 -0
  97. package/dist/src/dev/desktop.js +2 -0
  98. package/dist/src/dev/docs.d.ts +1 -0
  99. package/dist/src/dev/docs.js +2 -0
  100. package/dist/src/dev/index.d.ts +10 -0
  101. package/dist/src/dev/index.js +2 -0
  102. package/dist/src/dev/system-tray.d.ts +1 -0
  103. package/dist/src/dev/system-tray.js +2 -0
  104. package/dist/src/dev/views.d.ts +1 -0
  105. package/dist/src/dev/views.js +2 -0
  106. package/dist/src/discover-packages.d.ts +18 -0
  107. package/dist/src/discover-packages.js +2 -0
  108. package/dist/src/domains/add.d.ts +1 -0
  109. package/dist/src/domains/add.js +2 -0
  110. package/dist/src/domains/purchase.d.ts +1 -0
  111. package/dist/src/domains/purchase.js +2 -0
  112. package/dist/src/domains/remove.d.ts +1 -0
  113. package/dist/src/domains/remove.js +2 -0
  114. package/dist/{examples.d.ts → src/examples.d.ts} +1 -2
  115. package/dist/src/examples.js +2 -0
  116. package/dist/src/find-projects.d.ts +1 -0
  117. package/dist/src/find-projects.js +2 -0
  118. package/dist/src/fresh.d.ts +1 -0
  119. package/dist/src/fresh.js +2 -0
  120. package/dist/src/generate/action-types.d.ts +1 -0
  121. package/dist/src/generate/action-types.js +8 -0
  122. package/dist/src/generate/component-meta.d.ts +1 -0
  123. package/dist/src/generate/component-meta.js +3 -0
  124. package/dist/src/generate/custom-cli-file.d.ts +1 -0
  125. package/dist/src/generate/custom-cli-file.js +4 -0
  126. package/dist/src/generate/env-files.d.ts +1 -0
  127. package/dist/src/generate/env-files.js +26 -0
  128. package/dist/src/generate/ide-helpers.d.ts +1 -0
  129. package/dist/src/generate/ide-helpers.js +3 -0
  130. package/dist/src/generate/index.d.ts +36 -0
  131. package/dist/src/generate/index.js +2 -0
  132. package/dist/src/generate/lib-entries.d.ts +1 -0
  133. package/dist/src/generate/lib-entries.js +3 -0
  134. package/dist/src/generate/pantry-file.d.ts +1 -0
  135. package/dist/src/generate/pantry-file.js +2 -0
  136. package/dist/src/generate/symlink-core.d.ts +1 -0
  137. package/dist/src/generate/symlink-core.js +2 -0
  138. package/dist/src/generate/types.d.ts +1 -0
  139. package/dist/src/generate/types.js +2 -0
  140. package/dist/src/generate/vscode-custom-data.d.ts +1 -0
  141. package/dist/src/generate/vscode-custom-data.js +3 -0
  142. package/dist/src/generate/web-types.d.ts +1 -0
  143. package/dist/src/generate/web-types.js +1 -0
  144. package/dist/src/helpers/component-meta.d.ts +26 -0
  145. package/dist/src/helpers/component-meta.js +2 -0
  146. package/dist/src/helpers/index.d.ts +4 -0
  147. package/dist/src/helpers/index.js +2 -0
  148. package/dist/{lib-entries.d.ts → src/helpers/lib-entries.d.ts} +9 -5
  149. package/dist/src/helpers/lib-entries.js +2 -0
  150. package/dist/src/helpers/package-json.d.ts +2 -0
  151. package/dist/src/helpers/package-json.js +43 -0
  152. package/dist/src/helpers/utils.d.ts +23 -0
  153. package/dist/src/helpers/utils.js +2 -0
  154. package/dist/{vscode-custom-data.d.ts → src/helpers/vscode-custom-data.d.ts} +1 -1
  155. package/dist/src/helpers/vscode-custom-data.js +2 -0
  156. package/dist/src/index.d.ts +42 -0
  157. package/dist/src/index.js +2 -0
  158. package/dist/src/key-generate.d.ts +1 -0
  159. package/dist/src/key-generate.js +2 -0
  160. package/dist/src/lint/fix.d.ts +1 -0
  161. package/dist/src/lint/fix.js +4 -0
  162. package/dist/src/lint/index.d.ts +1 -0
  163. package/dist/src/lint/index.js +3 -0
  164. package/dist/src/make-command.d.ts +10 -0
  165. package/dist/src/make-command.js +2 -0
  166. package/dist/src/make-job.d.ts +5 -0
  167. package/dist/src/make-job.js +2 -0
  168. package/dist/src/make-policy.d.ts +10 -0
  169. package/dist/src/make-policy.js +2 -0
  170. package/dist/src/make-resource.d.ts +10 -0
  171. package/dist/src/make-resource.js +2 -0
  172. package/dist/{make.d.ts → src/make.d.ts} +11 -9
  173. package/dist/src/make.js +2 -0
  174. package/dist/src/migrate/database.d.ts +1 -0
  175. package/dist/src/migrate/database.js +2 -0
  176. package/dist/src/migrate/fresh.d.ts +1 -0
  177. package/dist/src/migrate/fresh.js +2 -0
  178. package/dist/src/orm/base.d.ts +1 -0
  179. package/dist/src/orm/base.js +2 -0
  180. package/dist/src/orm/test.d.ts +1 -0
  181. package/dist/src/orm/test.js +1 -0
  182. package/dist/src/prepublish.d.ts +1 -0
  183. package/dist/src/prepublish.js +2 -0
  184. package/dist/src/queue/clear.d.ts +1 -0
  185. package/dist/src/queue/clear.js +2 -0
  186. package/dist/src/queue/failed.d.ts +1 -0
  187. package/dist/src/queue/failed.js +5 -0
  188. package/dist/src/queue/flush.d.ts +1 -0
  189. package/dist/src/queue/flush.js +3 -0
  190. package/dist/src/queue/inspect.d.ts +1 -0
  191. package/dist/src/queue/inspect.js +8 -0
  192. package/dist/src/queue/monitor.d.ts +1 -0
  193. package/dist/src/queue/monitor.js +7 -0
  194. package/dist/src/queue/retry.d.ts +1 -0
  195. package/dist/src/queue/retry.js +2 -0
  196. package/dist/src/queue/schedule-list.d.ts +1 -0
  197. package/dist/src/queue/schedule-list.js +5 -0
  198. package/dist/src/queue/schedule.d.ts +1 -0
  199. package/dist/src/queue/schedule.js +2 -0
  200. package/dist/src/queue/status.d.ts +1 -0
  201. package/dist/src/queue/status.js +5 -0
  202. package/dist/src/queue/table.d.ts +1 -0
  203. package/dist/src/queue/table.js +2 -0
  204. package/dist/src/queue/work.d.ts +1 -0
  205. package/dist/src/queue/work.js +2 -0
  206. package/dist/src/release.d.ts +1 -0
  207. package/dist/src/release.js +3 -0
  208. package/dist/src/route/list.d.ts +1 -0
  209. package/dist/src/route/list.js +3 -0
  210. package/dist/src/run-action.d.ts +2 -0
  211. package/dist/src/run-action.js +2 -0
  212. package/dist/src/saas/setup.d.ts +1 -0
  213. package/dist/src/saas/setup.js +2 -0
  214. package/dist/src/scaffold-crud.d.ts +25 -0
  215. package/dist/src/scaffold-crud.js +2 -0
  216. package/dist/src/schedule/run.d.ts +1 -0
  217. package/dist/src/schedule/run.js +2 -0
  218. package/dist/src/search/flush.d.ts +1 -0
  219. package/dist/src/search/flush.js +2 -0
  220. package/dist/src/search/import.d.ts +1 -0
  221. package/dist/src/search/import.js +2 -0
  222. package/dist/src/search/settings-list.d.ts +1 -0
  223. package/dist/src/search/settings-list.js +2 -0
  224. package/dist/src/search/settings.d.ts +1 -0
  225. package/dist/src/search/settings.js +2 -0
  226. package/dist/src/serve/api.d.ts +1 -0
  227. package/dist/src/serve/api.js +2 -0
  228. package/dist/src/setup/index.d.ts +1 -0
  229. package/dist/src/setup/index.js +2 -0
  230. package/dist/src/setup/ssl.d.ts +38 -0
  231. package/dist/src/setup/ssl.js +2 -0
  232. package/dist/src/stacks.d.ts +4 -0
  233. package/dist/src/stacks.js +2 -0
  234. package/dist/src/templates.d.ts +8 -0
  235. package/dist/src/templates.js +2 -0
  236. package/dist/src/test/feature.d.ts +1 -0
  237. package/dist/src/test/feature.js +2 -0
  238. package/dist/src/test/index.d.ts +1 -0
  239. package/dist/src/test/index.js +2 -0
  240. package/dist/src/test/ui.d.ts +1 -0
  241. package/dist/src/test/ui.js +2 -0
  242. package/dist/src/test/unit.d.ts +1 -0
  243. package/dist/src/test/unit.js +2 -0
  244. package/dist/src/typecheck.d.ts +1 -0
  245. package/dist/src/typecheck.js +2 -0
  246. package/dist/{types.d.ts → src/types.d.ts} +1 -2
  247. package/dist/src/types.js +2 -0
  248. package/dist/src/upgrade/binary.d.ts +1 -0
  249. package/dist/src/upgrade/binary.js +2 -0
  250. package/dist/src/upgrade/bun.d.ts +1 -0
  251. package/dist/src/upgrade/bun.js +1 -0
  252. package/dist/src/upgrade/dependencies.d.ts +1 -0
  253. package/dist/src/upgrade/dependencies.js +2 -0
  254. package/dist/src/upgrade/framework-utils.d.ts +102 -0
  255. package/dist/src/upgrade/framework-utils.js +2 -0
  256. package/dist/src/upgrade/framework.d.ts +1 -0
  257. package/dist/src/upgrade/framework.js +7 -0
  258. package/dist/src/upgrade/index.d.ts +1 -0
  259. package/dist/src/upgrade/index.js +2 -0
  260. package/dist/src/upgrade/shell.d.ts +1 -0
  261. package/dist/src/upgrade/shell.js +5 -0
  262. package/dist/src/upgrade.d.ts +7 -0
  263. package/dist/src/upgrade.js +2 -0
  264. package/package.json +39 -23
  265. package/dist/action-types.d.ts +0 -9
  266. package/dist/action.d.ts +0 -64
  267. package/dist/actions.d.ts +0 -2
  268. package/dist/add.d.ts +0 -5
  269. package/dist/add.js +0 -33
  270. package/dist/api.d.ts +0 -1
  271. package/dist/binary.d.ts +0 -2
  272. package/dist/build/component-libs.js +0 -9
  273. package/dist/build/core.js +0 -23
  274. package/dist/build/stacks.js +0 -8
  275. package/dist/build.js +0 -108
  276. package/dist/bump.d.ts +0 -2
  277. package/dist/bump.js +0 -17
  278. package/dist/changelog.d.ts +0 -2
  279. package/dist/changelog.js +0 -17
  280. package/dist/chunk-2dvnt46s.js +0 -7657
  281. package/dist/chunk-494jp8d5.js +0 -54
  282. package/dist/chunk-4axj3j8y.js +0 -34
  283. package/dist/chunk-56ar3gp7.js +0 -3823
  284. package/dist/chunk-76zhb40c.js +0 -92
  285. package/dist/chunk-7s5qcjkt.js +0 -105
  286. package/dist/chunk-9v6qtbez.js +0 -45
  287. package/dist/chunk-a13x0e43.js +0 -1180
  288. package/dist/chunk-a7k3cdby.js +0 -2266
  289. package/dist/chunk-b5g5w1hh.js +0 -1482
  290. package/dist/chunk-bf8bq8pc.js +0 -205
  291. package/dist/chunk-ccnf3w1b.js +0 -2228
  292. package/dist/chunk-dvkgakrr.js +0 -1283
  293. package/dist/chunk-frw3va9v.js +0 -69
  294. package/dist/chunk-hvfeg6n6.js +0 -179248
  295. package/dist/chunk-mdj7x1vs.js +0 -790
  296. package/dist/chunk-mdqphqep.js +0 -438
  297. package/dist/chunk-mmskr8ar.js +0 -212
  298. package/dist/chunk-nrr524a7.js +0 -658
  299. package/dist/chunk-p0c688mg.js +0 -729
  300. package/dist/chunk-pacq2bz6.js +0 -902
  301. package/dist/chunk-psa9yf21.js +0 -72
  302. package/dist/chunk-q81mf99q.js +0 -169
  303. package/dist/chunk-q9dmga3k.js +0 -11
  304. package/dist/chunk-qhh0v93n.js +0 -73
  305. package/dist/chunk-qkm8e752.js +0 -51
  306. package/dist/chunk-saqpg5nd.js +0 -118
  307. package/dist/chunk-t5em30ak.js +0 -379
  308. package/dist/chunk-veja9rez.js +0 -5764
  309. package/dist/chunk-w4bfpxhm.js +0 -311
  310. package/dist/chunk-w6fdq4hk.js +0 -14425
  311. package/dist/chunk-wkwtsvym.js +0 -477
  312. package/dist/chunk-xgsmf4cy.js +0 -410
  313. package/dist/chunk-ykb33tkv.js +0 -177
  314. package/dist/chunk-ze46550n.js +0 -0
  315. package/dist/chunk-zzerxbrm.js +0 -107
  316. package/dist/clean.js +0 -6
  317. package/dist/commit.js +0 -22
  318. package/dist/component-meta.d.ts +0 -15
  319. package/dist/components.d.ts +0 -3
  320. package/dist/copy-types.d.ts +0 -1
  321. package/dist/copy-types.js +0 -14
  322. package/dist/core.d.ts +0 -1
  323. package/dist/create-receipt-rule.d.ts +0 -4
  324. package/dist/database/seed.js +0 -30
  325. package/dist/database.d.ts +0 -2
  326. package/dist/deploy/index.js +0 -48
  327. package/dist/dev/components.js +0 -11
  328. package/dist/dev/docs.js +0 -7
  329. package/dist/dev/index.js +0 -58
  330. package/dist/env-files.d.ts +0 -9
  331. package/dist/examples.js +0 -46
  332. package/dist/feature.d.ts +0 -2
  333. package/dist/find-projects.d.ts +0 -1
  334. package/dist/fix.d.ts +0 -1
  335. package/dist/flush.d.ts +0 -2
  336. package/dist/fresh.d.ts +0 -1
  337. package/dist/fresh.js +0 -21
  338. package/dist/generate/component-meta.js +0 -17
  339. package/dist/generate/ide-helpers.js +0 -18
  340. package/dist/generate/index.js +0 -216
  341. package/dist/generate/lib-entries.js +0 -30
  342. package/dist/generate/vscode-custom-data.js +0 -17
  343. package/dist/helpers/component-meta.js +0 -204227
  344. package/dist/helpers/lib-entries.js +0 -122
  345. package/dist/helpers/package-json.js +0 -96
  346. package/dist/helpers/utils.js +0 -76
  347. package/dist/helpers/vscode-custom-data.js +0 -43
  348. package/dist/import.d.ts +0 -2
  349. package/dist/index.d.ts +0 -2
  350. package/dist/index.js +0 -172
  351. package/dist/key-generate.js +0 -15
  352. package/dist/lint/fix.js +0 -18
  353. package/dist/lint/index.js +0 -5
  354. package/dist/list.d.ts +0 -1
  355. package/dist/make.js +0 -349
  356. package/dist/package-json.d.ts +0 -92
  357. package/dist/pkgx-file.d.ts +0 -8
  358. package/dist/ports.d.ts +0 -2
  359. package/dist/prepublish.d.ts +0 -1
  360. package/dist/prepublish.js +0 -17
  361. package/dist/purchase.d.ts +0 -6
  362. package/dist/release.js +0 -49
  363. package/dist/remove.d.ts +0 -6
  364. package/dist/request-model-access.d.ts +0 -1
  365. package/dist/run.d.ts +0 -1
  366. package/dist/settings-list.d.ts +0 -2
  367. package/dist/settings.d.ts +0 -1
  368. package/dist/setup.d.ts +0 -1
  369. package/dist/shell.d.ts +0 -2
  370. package/dist/table.d.ts +0 -1
  371. package/dist/test/feature.js +0 -14
  372. package/dist/test/index.js +0 -14
  373. package/dist/test/ui.js +0 -6
  374. package/dist/test/unit.js +0 -14
  375. package/dist/typecheck.js +0 -6
  376. package/dist/types.js +0 -23
  377. package/dist/unit.d.ts +0 -2
  378. package/dist/upgrade/dependencies.js +0 -8
  379. package/dist/upgrade/index.js +0 -22
  380. package/dist/upgrade.d.ts +0 -5
  381. package/dist/upgrade.js +0 -50
  382. package/dist/utils.d.ts +0 -75
  383. package/dist/work.d.ts +0 -3
  384. /package/dist/{upgrade/framework.js → chunk-cdk2r2jd.js} +0 -0
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env bun
2
+ // @bun
3
+ import"./chunk-xg9xscqz.js";import{gb as $Q}from"./chunk-96b7fcmd.js";import{watch as V0}from"fs";import CQ from"fs/promises";import wQ from"path";import AQ from"process";import{existsSync as pY,statSync as mY}from"fs";import{existsSync as E0,mkdirSync as c9,readdirSync as l9,readFileSync as O0,writeFileSync as n9}from"fs";import{homedir as bQ}from"os";import{dirname as o9,resolve as zQ}from"path";import fX from"process";import{existsSync as gY,statSync as uY}from"fs";import{existsSync as BY,mkdirSync as D0,readdirSync as T0,writeFileSync as S0}from"fs";import{homedir as yQ}from"os";import{dirname as cY,resolve as ZQ}from"path";import kQ from"process";import{join as N0,relative as C0,resolve as lY}from"path";import OX from"process";import{existsSync as SZ,mkdirSync as _$,readdirSync as G$,writeFileSync as J$}from"fs";import{homedir as iX}from"os";import{dirname as W$,resolve as YQ}from"path";import aQ from"process";import{join as k0,relative as x0,resolve as nY}from"path";import DX from"process";import{existsSync as NZ,mkdirSync as L$,readdirSync as K$,writeFileSync as j$}from"fs";import{dirname as R$,resolve as TX}from"path";import qY from"process";import{Buffer as SQ}from"buffer";import{createCipheriv as P0,createDecipheriv as b0,randomBytes as sX}from"crypto";import{closeSync as oX,createReadStream as iY,createWriteStream as y0,existsSync as rX,fsyncSync as sY,openSync as oY,writeFileSync as v0}from"fs";import{access as d0,constants as rY,mkdir as h0,readdir as GX,rename as tY,stat as vQ,unlink as JX,writeFile as tX}from"fs/promises";import{join as dQ}from"path";import a from"process";import{pipeline as f0}from"stream/promises";import{createGzip as aY}from"zlib";import hQ from"process";import MQ from"process";import{Buffer as IQ}from"buffer";import{createCipheriv as p0,createDecipheriv as m0,randomBytes as aX}from"crypto";import{closeSync as eX,createReadStream as eY,createWriteStream as g0,existsSync as UX,fsyncSync as QZ,openSync as XZ,writeFileSync as u0}from"fs";import{access as c0,constants as YZ,mkdir as l0,readdir as HX,rename as ZZ,stat as fQ,unlink as WX,writeFile as QY}from"fs/promises";import{isAbsolute as n0,join as pQ,resolve as i0}from"path";import k from"process";import{pipeline as s0}from"stream/promises";import{createGzip as $Z}from"zlib";import mQ from"process";import VQ from"process";import AX from"process";import{existsSync as zX}from"fs";import{resolve as XY}from"path";import{existsSync as o0}from"fs";import{existsSync as r0,readdirSync as t0}from"fs";import{extname as YY,resolve as _Z}from"path";import a0 from"process";import{join as e0,relative as Q8,resolve as GZ}from"path";import SX from"process";import{Buffer as FQ}from"buffer";import{createCipheriv as X8,createDecipheriv as Y8,randomBytes as ZY}from"crypto";import{closeSync as $Y,createReadStream as JZ,createWriteStream as Z8,existsSync as BX,fsyncSync as UZ,openSync as HZ,writeFileSync as $8}from"fs";import{access as _8,constants as WZ,mkdir as G8,readdir as qX,rename as AZ,stat as gQ,unlink as LX,writeFile as _Y}from"fs/promises";import{isAbsolute as J8,join as uQ,resolve as U8}from"path";import x from"process";import{pipeline as H8}from"stream/promises";import{createGzip as zZ}from"zlib";import cQ from"process";import EQ from"process";import KX from"process";import{existsSync as jX}from"fs";import{resolve as GY}from"path";import{existsSync as W8}from"fs";var{serve:M0,Glob:fY}=globalThis.Bun;class CZ{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),_=Z??this.options.ttl,G=this.estimateSize(X);this.cache.set($,{value:X,timestamp:new Date,ttl:_,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(!pY(Q))return!0;return mY(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 $=pY(Y)?mY(Y):null,_=$?$.mtime:new Date;this.set(Q,{value:X,fileTimestamp:_},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 kZ{metrics=[];maxMetrics=1000;async track(Q,X,Y={}){let Z=performance.now(),$=new Date;try{let _=await X(),G=performance.now()-Z;return this.recordMetric({operation:Q,duration:G,timestamp:$,...Y}),_}catch(_){let G=performance.now()-Z;throw this.recordMetric({operation:`${Q}:error`,duration:G,timestamp:$,...Y}),_}}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(($,_)=>$+_,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 NX=new CZ,OY=new kZ,A8=Object.defineProperty,z8=(Q)=>Q;function B8(Q,X){this[Q]=z8.bind(null,X)}var q8=(Q,X)=>{for(var Y in X)A8(Q,Y,{get:X[Y],enumerable:!0,configurable:!0,set:B8.bind(X,Y)})},L8=(Q,X)=>()=>(Q&&(X=Q(Q=0)),X),xZ={};q8(xZ,{withErrorRecovery:()=>yZ,tryLoadConfig:()=>h8,loadConfigWithResult:()=>v8,loadConfig:()=>pZ,isRetryableError:()=>C8,isConfigNotFoundError:()=>N8,isBunfigError:()=>vZ,globalPerformanceMonitor:()=>XX,globalCache:()=>nQ,getEnvOrDefault:()=>k8,generateConfigTypes:()=>f8,defaultGeneratedDir:()=>sZ,defaultConfigDir:()=>iZ,deepMergeWithArrayStrategy:()=>CY,deepMerge:()=>dZ,createLibraryConfig:()=>p8,config:()=>d8,bunfigPlugin:()=>m8,applyEnvVarsToConfig:()=>tQ,TypeGenerationError:()=>FY,SchemaValidationError:()=>QX,PluginError:()=>VY,PerformanceMonitor:()=>TY,FileSystemError:()=>IY,ErrorFactory:()=>NQ,EnvVarError:()=>yX,EnvProcessor:()=>pX,ConfigValidator:()=>kY,ConfigValidationError:()=>wY,ConfigNotFoundError:()=>bX,ConfigMergeError:()=>RY,ConfigLoader:()=>xY,ConfigLoadError:()=>eQ,ConfigFileLoader:()=>mX,ConfigCache:()=>DY,CacheUtils:()=>gZ,BunfigError:()=>JQ,BrowserConfigError:()=>MY,ArrayMergeStrategies:()=>lZ});class DY{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),_=Z??this.options.ttl,G=this.estimateSize(X);this.cache.set($,{value:X,timestamp:new Date,ttl:_,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(!gY(Q))return!0;return uY(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 $=gY(Y)?uY(Y):null,_=$?$.mtime:new Date;this.set(Q,{value:X,fileTimestamp:_},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 TY{metrics=[];maxMetrics=1000;async track(Q,X,Y={}){let Z=performance.now(),$=new Date;try{let _=await X(),G=performance.now()-Z;return this.recordMetric({operation:Q,duration:G,timestamp:$,...Y}),_}catch(_){let G=performance.now()-Z;throw this.recordMetric({operation:`${Q}:error`,duration:G,timestamp:$,...Y}),_}}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(($,_)=>$+_,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 K8(Q,X={}){let Z=Object.keys(X).sort().map(($)=>`${$}:${X[$]}`).join("|");return Z?`${Q}:${Z}`:Q}function j8(Q,X){try{return JSON.stringify(Q)===JSON.stringify(X)}catch{return Q===X}}function w8(Q){return Q.getStats().size*2}function SY(Q,X){if(Array.isArray(X)&&Array.isArray(Q)&&X.length===2&&Q.length===2&&f(X[0])&&"id"in X[0]&&X[0].id===3&&f(X[1])&&"id"in X[1]&&X[1].id===4)return X;if(f(X)&&f(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(f(Q)&&"arr"in Q&&Array.isArray(Q.arr)&&f(X)&&"arr"in X&&Array.isArray(X.arr))return X;if(X.length>0&&Q.length>0&&f(X[0])&&f(Q[0])){let Z=[...X];for(let $ of Q)if(f($)&&"name"in $){if(!Z.find((G)=>f(G)&&("name"in G)&&G.name===$.name))Z.push($)}else if(f($)&&"path"in $){if(!Z.find((G)=>f(G)&&("path"in G)&&G.path===$.path))Z.push($)}else if(!Z.some((_)=>CX(_,$)))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(!f(X)||!f(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(f($)&&f(Y[Z]))Y[Z]=SY(Y[Z],$);else if(Array.isArray($)&&Array.isArray(Y[Z]))if($.length>0&&Y[Z].length>0&&f($[0])&&f(Y[Z][0])){let _=[...$];for(let G of Y[Z])if(f(G)&&"name"in G){if(!_.find((J)=>f(J)&&("name"in J)&&J.name===G.name))_.push(G)}else if(f(G)&&"path"in G){if(!_.find((J)=>f(J)&&("path"in J)&&J.path===G.path))_.push(G)}else if(!_.some((U)=>CX(U,G)))_.push(G);Y[Z]=_}else if($.every((_)=>typeof _==="string")&&Y[Z].every((_)=>typeof _==="string")){let _=[...$];for(let G of Y[Z])if(!_.includes(G))_.push(G);Y[Z]=_}else Y[Z]=$;else Y[Z]=$}return Y}function CX(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(!CX(Q[Y],X[Y]))return!1;return!0}if(f(Q)&&f(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(!CX(Q[$],X[$]))return!1}return!0}return!1}function f(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}async function R8(Q,X){if(!NZ(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 SY(X,Z)}catch{return null}}catch{return null}}async function I8({name:Q="",cwd:X,defaultConfig:Y}){let Z=X||qY.cwd(),$=[".ts",".js",".mjs",".cjs",".json"],_=[`${Q}.config`,`.${Q}.config`,Q,`.${Q}`];for(let G of _)for(let U of $){let J=TX(Z,`${G}${U}`),H=await R8(J,Y);if(H!==null)return H}try{let G=TX(Z,"package.json");if(NZ(G)){let J=(await import(G))[Q];if(J&&typeof J==="object"&&!Array.isArray(J))try{return SY(Y,J)}catch{}}}catch{}return Y}function F8(Q,X={}){let Y=DX.cwd();while(Y.includes("storage"))Y=nY(Y,"..");let Z=nY(Y,Q||"");if(X?.relative)return x0(DX.cwd(),Z);return Z}async function M8(){try{let Q=await I8({name:"clarity",defaultConfig:FX,cwd:DX.cwd(),endpoint:"",headers:{}});return{...FX,...Q}}catch{return FX}}function g(){if(MQ.env.NODE_ENV==="test"||MQ.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function V8(){if(MQ.env.NODE_ENV==="test"||MQ.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof MQ<"u"){let Q=MQ.type;if(Q==="renderer"||Q==="worker")return!1;return!!(MQ.versions&&(MQ.versions.node||MQ.versions.bun))}return!1}class PZ{async format(Q){let X=await V8(),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:hQ.pid,hostname:X(),environment:hQ.env.NODE_ENV||"development",platform:hQ.platform,version:hQ.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:hQ.env.NODE_ENV||hQ.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class kX{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={...KY},this.options=this.normalizeOptions(X),this.formatter=this.options.formatter||new PZ,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??a.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(),_=this.generateKey();this.currentKeyId=$,this.keys.set($,_),this.encryptionKeys.set($,{key:_,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(Q){if(!Q.fingersCrossedEnabled&&Q.fingersCrossed)return{...MX,...Q.fingersCrossed};if(!Q.fingersCrossedEnabled)return null;if(!Q.fingersCrossed)return{...MX};return{...MX,...Q.fingersCrossed}}normalizeOptions(Q){let X={format:"json",level:"info",logDirectory:KY.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 $,_=0,G=3,U=1000;while(_<G)try{try{try{await d0(this.config.logDirectory,rY.F_OK|rY.W_OK)}catch(H){if(H instanceof Error&&"code"in H)if(H.code==="ENOENT")await h0(this.config.logDirectory,{recursive:!0,mode:493});else if(H.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw H;else throw H}}catch(H){throw console.error("Debug: [writeToFile] Failed to create log directory:",H),H}let J=this.validateEncryptionConfig()?(await this.encrypt(Q)).encrypted:SQ.from(Q);try{if(!rX(this.currentLogFile))await tX(this.currentLogFile,"",{mode:420});if($=oY(this.currentLogFile,"a",420),v0($,J,{flag:"a"}),sY($),$!==void 0)oX($),$=void 0;if((await vQ(this.currentLogFile)).size===0){if(await tX(this.currentLogFile,J,{flag:"w",mode:420}),(await vQ(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(H){let W=H;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(_<G-1){let A=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${_+1}/${G}:`,A);let B=U*2**_;await new Promise((z)=>setTimeout(z,B)),_++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if($!==void 0)try{oX($)}catch(H){console.error("Debug: [writeToFile] Error closing file descriptor:",H)}}}catch(J){if(_===G-1){let W=J,A=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",A),J}_++;let H=U*2**(_-1);await new Promise((W)=>setTimeout(W,H))}})();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 dQ(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 dQ(this.config.logDirectory,`${this.name}.log`);let Q=new Date().toISOString().split("T")[0];return dQ(this.config.logDirectory,`${this.name}-${Q}.log`)}setupRotation(){if(g())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],[,J])=>J.createdAt.getTime()-U.createdAt.getTime()),_=typeof X.maxKeys==="number"?X.maxKeys:1,G=Math.max(1,_);if($.length>G)for(let[U]of $.slice(G))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return sX(16).toString("hex")}generateKey(){return sX(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=sX(16),Z=P0("aes-256-gcm",X,Y),$=SQ.concat([Z.update(Q,"utf8"),Z.final()]),_=Z.getAuthTag();return{encrypted:SQ.concat([Y,$,_]),iv:Y}}async compressData(Q){return new Promise((X,Y)=>{let Z=aY(),$=[];Z.on("data",(_)=>$.push(_)),Z.on("end",()=>X(SQ.from(SQ.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(g())return;let Q=await vQ(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 GX(this.config.logDirectory),_=$.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,H)=>{let W=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(H.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),G=_.length>0?Number.parseInt(_[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,U=`${Y}.${G}`;if(await vQ(Y).catch(()=>null))try{if(await tY(Y,U),X.compress)try{let J=`${U}.gz`;await this.compressLogFile(U,J),await JX(U)}catch(J){console.error("Error compressing rotated file:",J)}if(_.length===0&&!$.some((J)=>J.endsWith(".log.1")))try{let J=`${Y}.1`;await tX(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let $=new Date().toISOString().replace(/[:.]/g,"-"),_=Y.replace(/\.log$/,`-${$}.log`);if(await vQ(Y).catch(()=>null))await tY(Y,_)}if(this.currentLogFile=Z,X.maxFiles){let _=(await GX(this.config.logDirectory)).filter((G)=>G.startsWith(this.name)).sort((G,U)=>U.localeCompare(G));for(let G of _.slice(X.maxFiles))await JX(dQ(this.config.logDirectory,G))}}}async compressLogFile(Q,X){let Y=iY(Q),Z=y0(X),$=aY();await f0(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()})),rX(this.currentLogFile))try{let Q=oY(this.currentLogFile,"r+");sY(Q),oX(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(!g()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await GX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of X)try{await JX(dQ(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?h.gray(Q.toLocaleTimeString()):Q.toLocaleTimeString()}formatConsoleMessage(Q){let{timestamp:X,icon:Y="",tag:Z="",message:$,level:_,showTimestamp:G=!0}=Q,U=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(G)z.push(X);if(_==="warning")z.push("WARN");else if(_==="error")z.push("ERROR");else if(Y)z.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Z)z.push(Z.replace(/[[\]]/g,""));return z.push($),z.join(" ")}let J=a.stdout.columns||120,H="";if(_==="warning"||_==="error")H=`${Y} ${$}`;else if(_==="info"||_==="success")H=`${Y} ${Z} ${$}`;else H=`${Y} ${Z} ${h.cyan($)}`;if(!G)return H.trim();let W=U(H).trim().length,A=U(X).length,B=Math.max(1,J-2-W-A);return`${H.trim()}${" ".repeat(B)}${X}`}formatMessage(Q,X){if(X.length===1&&Array.isArray(X[0]))return Q.replace(/\{(\d+)\}/g,(_,G)=>{let U=Number.parseInt(G,10);return U<X[0].length?String(X[0][U]):_});let Y=/%([sdijfo%])/g,Z=0,$=Q.replace(Y,(_,G)=>{if(G==="%")return"%";if(Z>=X.length)return _;let U=X[Z++];switch(G){case"s":return String(U);case"d":case"i":return Number(U).toString();case"j":case"o":return JSON.stringify(U,null,2);default:return _}});if(Z<X.length)$+=` ${X.slice(Z).map((_)=>typeof _==="object"?JSON.stringify(_,null,2):String(_)).join(" ")}`;return $}async log(Q,X,...Y){let Z=new Date,$=this.formatConsoleTimestamp(Z),_=this.formatFileTimestamp(Z),G,U;if(X instanceof Error)G=X.message,U=X.stack;else G=this.formatMessage(X,Y);if(this.fancy&&!g()){let H=uZ[Q],W=this.options.showTags!==!1&&this.name?h.gray(this.formatTag(this.name)):"",A;switch(Q){case"debug":A=this.formatConsoleMessage({timestamp:$,icon:H,tag:W,message:h.gray(G),level:Q}),console.error(A);break;case"info":A=this.formatConsoleMessage({timestamp:$,icon:H,tag:W,message:G,level:Q}),console.error(A);break;case"success":A=this.formatConsoleMessage({timestamp:$,icon:H,tag:W,message:h.green(G),level:Q}),console.error(A);break;case"warning":A=this.formatConsoleMessage({timestamp:$,icon:H,tag:W,message:G,level:Q}),console.warn(A);break;case"error":if(A=this.formatConsoleMessage({timestamp:$,icon:H,tag:W,message:G,level:Q}),console.error(A),U){let B=U.split(`
4
+ `);for(let z of B)if(z.trim()&&!z.includes(G))console.error(this.formatConsoleMessage({timestamp:$,message:h.gray(` ${z}`),level:Q,showTimestamp:!1}))}break}}else if(!g()){if(console.error(`${_} ${this.environment}.${Q.toUpperCase()}: ${G}`),U)console.error(U)}if(!this.shouldLog(Q))return;let J=`${_} ${this.environment}.${Q.toUpperCase()}: ${G}
5
+ `;if(U)J+=`${U}
6
+ `;J=J.replace(this.ANSI_PATTERN,""),await this.writeToFile(J)}time(Q){let X=performance.now();if(this.fancy&&!g()){let Y=this.options.showTags!==!1&&this.name?h.gray(this.formatTag(this.name)):"",Z=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Z,icon:h.blue("\u25D0"),tag:Y,message:`${h.cyan(Q)}...`}))}return async(Y)=>{if(!this.enabled)return;let Z=performance.now(),$=Math.round(Z-X),_=`${Q} completed in ${$}ms`,G=new Date,U=this.formatConsoleTimestamp(G),H=`${this.formatFileTimestamp(G)} ${this.environment}.INFO: ${_}`;if(Y)H+=` ${JSON.stringify(Y)}`;if(H+=`
7
+ `,H=H.replace(this.ANSI_PATTERN,""),this.fancy&&!g()){let W=this.options.showTags!==!1&&this.name?h.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:U,icon:h.green("\u2713"),tag:W,message:`${_}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!g())console.error(H.trim());await this.writeToFile(H)}}async debug(Q,...X){await this.log("debug",Q,...X)}async info(Q,...X){await this.log("info",Q,...X)}async success(Q,...X){await this.log("success",Q,...X)}async warn(Q,...X){await this.log("warning",Q,...X)}async error(Q,...X){await this.log("error",Q,...X)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let Q=this.config.rotation,{encrypt:X}=Q;return!!X}async only(Q){if(!this.enabled)return;return await Q()}isEnabled(){return this.enabled}setEnabled(Q){this.enabled=Q}extend(Q){let X=`${this.name}:${Q}`,Y=new kX(X,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(g())throw Error("createReadStream is not supported in browser environments");if(!rX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return iY(this.currentLogFile,{encoding:"utf8"})}async decrypt(Q){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let X=this.config.rotation;if(!X.encrypt||typeof X.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let Z=SQ.isBuffer(Q)?Q:SQ.from(Q,"base64"),$=Z.slice(0,16),_=Z.slice(-16),G=Z.slice(16,-16),U=b0("aes-256-gcm",Y,$);return U.setAuthTag(_),SQ.concat([U.update(G),U.final()]).toString("utf8")}catch(Z){throw Error(`Decryption failed: ${Z instanceof Error?Z.message:String(Z)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return g()}isServerMode(){return!g()}setTestEncryptionKey(Q,X){this.currentKeyId=Q,this.keys.set(Q,X)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(Q){if(!this.enabled)return;let X=new Date,Y=this.formatConsoleTimestamp(X),Z=this.formatFileTimestamp(X);if(this.fancy&&!g()){let _=Q.split(`
8
+ `),G=Math.max(..._.map((W)=>W.length))+2,U=`\u250C${"\u2500".repeat(G)}\u2510`,J=`\u2514${"\u2500".repeat(G)}\u2518`,H=_.map((W)=>{let A=" ".repeat(G-W.length-2);return`\u2502 ${W}${A} \u2502`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Y,message:h.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Y,message:h.cyan(U)})),H.forEach((W)=>console.error(this.formatConsoleMessage({timestamp:Y,message:h.cyan(W),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Y,message:h.cyan(J),showTimestamp:!1}))}else if(!g())console.error(`${Z} ${this.environment}.INFO: [BOX] ${Q}`);let $=`${Z} ${this.environment}.INFO: [BOX] ${Q}
9
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile($)}async prompt(Q){if(g())return Promise.resolve(!0);return new Promise((X)=>{console.error(`${h.cyan("?")} ${Q} (y/n) `);let Y=(Z)=>{let $=Z.toString().trim().toLowerCase();a.stdin.removeListener("data",Y);try{if(typeof a.stdin.setRawMode==="function")a.stdin.setRawMode(!1)}catch{}a.stdin.pause(),console.error(""),X($==="y"||$==="yes")};try{if(typeof a.stdin.setRawMode==="function")a.stdin.setRawMode(!0)}catch{}a.stdin.resume(),a.stdin.once("data",Y)})}setFancy(Q){this.fancy=Q}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(Q,...X){if(!this.enabled)return;let Y=Q;if(X&&X.length>0){let G=/%([sdijfo%])/g,U=0;if(Y=Q.replace(G,(J,H)=>{if(H==="%")return"%";if(U>=X.length)return J;let W=X[U++];switch(H){case"s":return String(W);case"d":case"i":return Number(W).toString();case"j":case"o":return JSON.stringify(W,null,2);default:return J}}),U<X.length)Y+=` ${X.slice(U).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`}if(this.fancy&&!g()){let G=this.options.showTags!==!1&&this.name?h.gray(this.formatTag(this.name)):"",U=h.blue("\u25D0");console.error(`${U} ${G} ${h.cyan(Y)}`)}let _=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Y}
10
+ `.replace(this.ANSI_PATTERN,"");await this.writeToFile(_)}progress(Q,X=""){if(!this.enabled||!this.fancy||g()||Q<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let Y=20;return this.activeProgressBar={total:Q,current:0,message:X,barLength:Y,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(G,U)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||g())return;if(this.activeProgressBar.current=Math.max(0,Math.min(Q,G)),U!==void 0)this.activeProgressBar.message=U;let J=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,J)},finish:(G)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||g())return;if(this.activeProgressBar.current=this.activeProgressBar.total,G!==void 0)this.activeProgressBar.message=G;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(G,U="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||g())return;a.stdout.write(`${"\r".padEnd(a.stdout.columns||80)}\r`),this.log(U,G),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar(Q,X=!1){if(!this.enabled||!this.fancy||g()||!a.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round(Q.current/Q.total*100))),Z=Math.round(Q.barLength*Y/100),$=Q.barLength-Z,_=h.green("\u2501".repeat(Z)),G=h.gray("\u2501".repeat($)),U=`[${_}${G}]`,J=`${Y}%`.padStart(4),H=Q.message?` ${Q.message}`:"",W=X||Y===100?h.green("\u2713"):h.blue("\u25B6"),A=this.options.showTags!==!1&&this.name?` ${h.gray(this.formatTag(this.name))}`:"",B=`\r${W}${A} ${U} ${J}${H}`,z=a.stdout.columns||80,S=" ".repeat(Math.max(0,z-B.replace(this.ANSI_PATTERN,"").length));if(Q.lastRenderedLine=`${B}${S}`,a.stdout.write(Q.lastRenderedLine),X)a.stdout.write(`
11
+ `)}finishProgressBar(Q,X){if(!this.enabled||!this.fancy||g()||!a.stdout.isTTY){this.activeProgressBar=null;return}if(Q.current<Q.total)Q.current=Q.total;if(X)Q.message=X;this.renderProgressBar(Q,!0),this.activeProgressBar=null}async clear(Q={}){if(g()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let X=await GX(this.config.logDirectory),Y=[];for(let Z of X){if(!(Q.name?new RegExp(Q.name.replace("*",".*")).test(Z):Z.startsWith(this.name))||!Z.endsWith(".log"))continue;let _=dQ(this.config.logDirectory,Z);if(Q.before)try{if((await vQ(_)).mtime>=Q.before)continue}catch(G){console.error(`Failed to get stats for file ${_}:`,G);continue}Y.push(_)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let Z of Y)try{await JX(Z),console.warn(`Deleted log file: ${Z}`)}catch($){console.error(`Failed to delete log file ${Z}:`,$)}console.warn("Log clearing process finished.")}catch(X){console.error("Error during log clearing process:",X)}}}function IX(Q,X){if(Array.isArray(X)&&Array.isArray(Q)&&X.length===2&&Q.length===2&&d(X[0])&&"id"in X[0]&&X[0].id===3&&d(X[1])&&"id"in X[1]&&X[1].id===4)return X;if(d(X)&&d(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(d(Q)&&"arr"in Q&&Array.isArray(Q.arr)&&d(X)&&"arr"in X&&Array.isArray(X.arr))return X;if(X.length>0&&Q.length>0&&d(X[0])&&d(Q[0])){let Z=[...X];for(let $ of Q)if(d($)&&"name"in $){if(!Z.find((G)=>d(G)&&("name"in G)&&G.name===$.name))Z.push($)}else if(d($)&&"path"in $){if(!Z.find((G)=>d(G)&&("path"in G)&&G.path===$.path))Z.push($)}else if(!Z.some((_)=>xX(_,$)))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(!d(X)||!d(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(d($)&&d(Y[Z]))Y[Z]=IX(Y[Z],$);else if(Array.isArray($)&&Array.isArray(Y[Z]))if($.length>0&&Y[Z].length>0&&d($[0])&&d(Y[Z][0])){let _=[...$];for(let G of Y[Z])if(d(G)&&"name"in G){if(!_.find((J)=>d(J)&&("name"in J)&&J.name===G.name))_.push(G)}else if(d(G)&&"path"in G){if(!_.find((J)=>d(J)&&("path"in J)&&J.path===G.path))_.push(G)}else if(!_.some((U)=>xX(U,G)))_.push(G);Y[Z]=_}else if($.every((_)=>typeof _==="string")&&Y[Z].every((_)=>typeof _==="string")){let _=[...$];for(let G of Y[Z])if(!_.includes(G))_.push(G);Y[Z]=_}else Y[Z]=$;else Y[Z]=$}return Y}function NY(Q,X,Y="replace"){if(X===null||X===void 0)return Q;if(Array.isArray(X))return Y==="replace"?X:IX(Q,X);if(Array.isArray(Q))return Y==="replace"?X:IX(Q,X);if(!d(X)||!d(Q))return X;let Z={...Q};for(let $ of Object.keys(X)){if(!Object.prototype.hasOwnProperty.call(X,$))continue;let _=X[$],G=Z[$];if(_===null||_===void 0)continue;if(Array.isArray(_)||Array.isArray(G))if(Y==="replace")Z[$]=_;else Z[$]=IX(G,_);else if(d(_)&&d(G))Z[$]=NY(G,_,Y);else Z[$]=_}return Z}function xX(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(!xX(Q[Y],X[Y]))return!1;return!0}if(d(Q)&&d(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(!xX(Q[$],X[$]))return!1}return!0}return!1}function d(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}async function wX(Q,X,Y="replace"){if(!SZ(Q))return null;try{let Z=await import(Q),$=Z.default||Z;if(typeof $!=="object"||$===null||Array.isArray($))return null;try{return NY(X,$,Y)}catch{return null}}catch{return null}}function E8(Q,X,Y=!1){if(!Q)return X;let Z=Q.toUpperCase().replace(/-/g,"_"),$={...X};function _(G,U=[]){let J={...G};for(let[H,W]of Object.entries(G)){let A=[...U,H],B=(R)=>R.replace(/([A-Z])/g,"_$1").toUpperCase(),z=`${Z}_${A.map(B).join("_")}`,S=`${Z}_${A.map((R)=>R.toUpperCase()).join("_")}`;if(Y)QQ.info(`Checking environment variable ${z} for config ${Q}.${A.join(".")}`);if(typeof W==="object"&&W!==null&&!Array.isArray(W))J[H]=_(W,A);else{let R=aQ.env[z]||aQ.env[S];if(R!==void 0){if(Y)QQ.info(`Using environment variable ${R?z:S} for config ${Q}.${A.join(".")}`);if(typeof W==="number")J[H]=Number(R);else if(typeof W==="boolean")J[H]=R.toLowerCase()==="true";else if(Array.isArray(W))try{let C=JSON.parse(R);if(Array.isArray(C))J[H]=C;else J[H]=R.split(",").map((s)=>s.trim())}catch{J[H]=R.split(",").map((C)=>C.trim())}else J[H]=R}}}return J}return _($)}async function O8({name:Q="",alias:X,cwd:Y,configDir:Z,defaultConfig:$,verbose:_=!1,checkEnv:G=!0,arrayStrategy:U="replace"}){let J=G&&typeof $==="object"&&$!==null&&!Array.isArray($)?E8(Q,$,_):$,H=Y||aQ.cwd(),W=[".ts",".js",".mjs",".cjs",".json"];if(_)QQ.info(`Loading configuration for "${Q}"${X?` (alias: "${X}")`:""} from ${H}`);let A=[Q,`.${Q}`].filter(Boolean),B=[`${Q}.config`,`.${Q}.config`].filter(Boolean),z=X?[X,`.${X}`]:[],S=X?[`${X}.config`,`.${X}.config`]:[],R=Array.from(new Set([H,YQ(H,"config"),YQ(H,".config"),Z?YQ(H,Z):void 0].filter(Boolean)));for(let C of R){if(_)QQ.info(`Searching for configuration in: ${C}`);let o=[YQ(H,"config"),YQ(H,".config")].concat(Z?[YQ(H,Z)]:[]).includes(C)?[...A,...B,...z,...S]:[...B,...A,...S,...z];for(let LQ of o)for(let UQ of W){let HQ=YQ(C,`${LQ}${UQ}`),DQ=await wX(HQ,J,U);if(DQ!==null){if(_)QQ.success(`Configuration loaded from: ${HQ}`);return DQ}}}if(Q){let C=YQ(iX(),".config",Q),s=["config",`${Q}.config`];if(X)s.push(`${X}.config`);if(_)QQ.info(`Checking user config directory: ${C}`);for(let o of s)for(let LQ of W){let UQ=YQ(C,`${o}${LQ}`),HQ=await wX(UQ,J,U);if(HQ!==null){if(_)QQ.success(`Configuration loaded from user config directory: ${UQ}`);return HQ}}}if(Q){let C=YQ(iX(),".config"),s=[`.${Q}.config`];if(X)s.push(`.${X}.config`);if(_)QQ.info(`Checking user config directory for dotfile configs: ${C}`);for(let o of s)for(let LQ of W){let UQ=YQ(C,`${o}${LQ}`),HQ=await wX(UQ,J,U);if(HQ!==null){if(_)QQ.success(`Configuration loaded from user config directory dotfile: ${UQ}`);return HQ}}}if(Q){let C=iX(),s=[`.${Q}.config`,`.${Q}`];if(X)s.push(`.${X}.config`),s.push(`.${X}`);if(_)QQ.info(`Checking user home directory for dotfile configs: ${C}`);for(let o of s)for(let LQ of W){let UQ=YQ(C,`${o}${LQ}`),HQ=await wX(UQ,J,U);if(HQ!==null){if(_)QQ.success(`Configuration loaded from user home directory: ${UQ}`);return HQ}}}try{let C=YQ(H,"package.json");if(SZ(C)){let s=await import(C),o=s[Q];if(!o&&X){if(o=s[X],o&&_)QQ.success(`Using alias "${X}" configuration from package.json`)}if(o&&typeof o==="object"&&!Array.isArray(o))try{if(_)QQ.success(`Configuration loaded from package.json: ${o===s[Q]?Q:X}`);return NY(J,o,U)}catch(LQ){if(_)QQ.warn("Failed to merge package.json config:",LQ)}}}catch(C){if(_)QQ.warn("Failed to load package.json:",C)}if(_)QQ.info(`No configuration found for "${Q}"${X?` or alias "${X}"`:""}, using default configuration with environment variables`);return J}function D8(Q,X={}){let Y=OX.cwd();while(Y.includes("storage"))Y=lY(Y,"..");let Z=lY(Y,Q||"");if(X?.relative)return C0(OX.cwd(),Z);return Z}async function T8(){try{let Q=await O8({name:"clarity",alias:"logging",defaultConfig:VX,cwd:OX.cwd()});return{...VX,...Q||{}}}catch{return VX}}function l(){if(VQ.env.NODE_ENV==="test"||VQ.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function S8(){if(VQ.env.NODE_ENV==="test"||VQ.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof VQ<"u"){let Q=VQ.type;if(Q==="renderer"||Q==="worker")return!1;return!!(VQ.versions&&(VQ.versions.node||VQ.versions.bun))}return!1}class bZ{async format(Q){let X=await S8(),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:mQ.pid,hostname:X(),environment:mQ.env.NODE_ENV||"development",platform:mQ.platform,version:mQ.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:mQ.env.NODE_ENV||mQ.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class PX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(Q,X={}){this.name=Q,this.config={...jY},this.options=this.normalizeOptions(X),this.formatter=this.options.formatter||new bZ,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??k.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(),_=this.generateKey();this.currentKeyId=$,this.keys.set($,_),this.encryptionKeys.set($,{key:_,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(Q){if(!this.fingersCrossedConfig)return!1;let X={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return X[Q]>=X[Y]}initializeFingersCrossedConfig(Q){if(!Q.fingersCrossedEnabled&&Q.fingersCrossed)return{...EX,...Q.fingersCrossed};if(!Q.fingersCrossedEnabled)return null;if(!Q.fingersCrossed)return{...EX};return{...EX,...Q.fingersCrossed}}normalizeOptions(Q){let X={format:"json",level:"info",logDirectory:jY.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...X,...Object.fromEntries(Object.entries(Q).filter(([,Z])=>Z!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=X.level;return Y}shouldWriteToFile(){return!l()&&this.config.writeToFile===!0}async writeToFile(Q){let Y=(async()=>{let $,_=0,G=3,U=1000;while(_<G)try{try{try{await c0(this.config.logDirectory,YZ.F_OK|YZ.W_OK)}catch(H){if(H instanceof Error&&"code"in H)if(H.code==="ENOENT")await l0(this.config.logDirectory,{recursive:!0,mode:493});else if(H.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw H;else throw H}}catch(H){throw console.error("Debug: [writeToFile] Failed to create log directory:",H),H}let J=this.validateEncryptionConfig()?(await this.encrypt(Q)).encrypted:IQ.from(Q);try{if(!UX(this.currentLogFile))await QY(this.currentLogFile,"",{mode:420});if($=XZ(this.currentLogFile,"a",420),u0($,J,{flag:"a"}),QZ($),$!==void 0)eX($),$=void 0;if((await fQ(this.currentLogFile)).size===0){if(await QY(this.currentLogFile,J,{flag:"w",mode:420}),(await fQ(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(H){let W=H;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(_<G-1){let A=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${_+1}/${G}:`,A);let B=U*2**_;await new Promise((z)=>setTimeout(z,B)),_++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if($!==void 0)try{eX($)}catch(H){console.error("Debug: [writeToFile] Error closing file descriptor:",H)}}}catch(J){if(_===G-1){let W=J,A=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",A),J}_++;let H=U*2**(_-1);await new Promise((W)=>setTimeout(W,H))}})();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 pQ(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 pQ(this.config.logDirectory,`${this.name}.log`);let Q=new Date().toISOString().split("T")[0];return pQ(this.config.logDirectory,`${this.name}-${Q}.log`)}setupRotation(){if(l())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let Q=this.config.rotation,X;switch(Q.frequency){case"daily":X=86400000;break;case"weekly":X=604800000;break;case"monthly":X=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},X)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let X=this.config.rotation.keyRotation;if(!X?.enabled)return;let Y=typeof X.interval==="number"?X.interval:60,Z=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch(($)=>{console.error("Error rotating keys:",$)})},Z)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let X=this.config.rotation.keyRotation,Y=this.generateKeyId(),Z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,Z),this.encryptionKeys.set(Y,{key:Z,createdAt:new Date});let $=Array.from(this.encryptionKeys.entries()).sort(([,U],[,J])=>J.createdAt.getTime()-U.createdAt.getTime()),_=typeof X.maxKeys==="number"?X.maxKeys:1,G=Math.max(1,_);if($.length>G)for(let[U]of $.slice(G))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return aX(16).toString("hex")}generateKey(){return aX(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=aX(16),Z=p0("aes-256-gcm",X,Y),$=IQ.isBuffer(Q)?Q:IQ.from(Q,"utf8"),_=Z.update($),G=Z.final(),U=_.length+G.length,J=Z.getAuthTag(),H=IQ.allocUnsafe(16+U+16);return Y.copy(H,0),_.copy(H,16),G.copy(H,16+_.length),J.copy(H,16+U),{encrypted:H,iv:Y}}async compressData(Q){return new Promise((X,Y)=>{let Z=$Z(),$=[];Z.on("data",(_)=>$.push(_)),Z.on("end",()=>X(IQ.from(IQ.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(l())return;if(!this.shouldWriteToFile())return;let Q=await fQ(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 HX(this.config.logDirectory),_=$.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,H)=>{let W=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(H.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),G=_.length>0?Number.parseInt(_[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,U=`${Y}.${G}`;if(await fQ(Y).catch(()=>null))try{if(await ZZ(Y,U),X.compress)try{let J=`${U}.gz`;await this.compressLogFile(U,J),await WX(U)}catch(J){console.error("Error compressing rotated file:",J)}if(_.length===0&&!$.some((J)=>J.endsWith(".log.1")))try{let J=`${Y}.1`;await QY(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let $=new Date().toISOString().replace(/[:.]/g,"-"),_=Y.replace(/\.log$/,`-${$}.log`);if(await fQ(Y).catch(()=>null))await ZZ(Y,_)}if(this.currentLogFile=Z,X.maxFiles){let _=(await HX(this.config.logDirectory)).filter((G)=>G.startsWith(this.name)).sort((G,U)=>U.localeCompare(G));for(let G of _.slice(X.maxFiles))await WX(pQ(this.config.logDirectory,G))}}}async compressLogFile(Q,X){let Y=eY(Q),Z=g0(X),$=$Z();await s0(Y,$,Z)}async handleFingersCrossedBuffer(Q,X){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(Q)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let Z=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(Z);console.log(Z)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(X);console.log(X)}}shouldLog(Q){if(!this.enabled)return!1;let X={debug:0,info:1,success:2,warning:3,error:4};return X[Q]>=X[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((Q)=>{if(Q instanceof Promise)return Q.catch((X)=>{console.error("Error in pending write operation:",X)});return Promise.resolve()})),UX(this.currentLogFile))try{let Q=XZ(this.currentLogFile,"r+");QZ(Q),eX(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(!l()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await HX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of X)try{await WX(pQ(this.config.logDirectory,Y))}catch(Z){console.error(`Failed to delete temp file ${Y}:`,Z)}}catch(Q){console.error("Error cleaning up temporary files:",Q)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(Q){if(!Q)return"";return`${this.tagFormat.prefix}${Q}${this.tagFormat.suffix}`}formatFileTimestamp(Q){return`[${Q.toISOString()}]`}formatConsoleTimestamp(Q){return this.shouldStyleConsole()?b.gray(Q.toLocaleTimeString()):Q.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||l())return!1;let Q=typeof k.env.NO_COLOR<"u",X=k.env.FORCE_COLOR==="0";if(Q||X)return!1;return!!(typeof k.stderr<"u"&&k.stderr.isTTY||typeof k.stdout<"u"&&k.stdout.isTTY)}formatConsoleMessage(Q){let{timestamp:X,icon:Y="",tag:Z="",message:$,level:_,showTimestamp:G=!0}=Q,U=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(G)z.push(X);if(_==="warning")z.push("WARN");else if(_==="error")z.push("ERROR");else if(Y)z.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Z)z.push(Z.replace(/[[\]]/g,""));return z.push($),z.join(" ")}let J=k.stdout.columns||120,H="";if(_==="warning"||_==="error")H=`${Y} ${$}`;else if(_==="info"||_==="success")H=`${Y} ${Z} ${$}`;else H=`${Y} ${Z} ${b.cyan($)}`;if(!G)return H.trim();let W=U(H).trim().length,A=U(X).length,B=Math.max(1,J-2-W-A);return`${H.trim()}${" ".repeat(B)}${X}`}formatMessage(Q,X){if(X.length===1&&Array.isArray(X[0]))return Q.replace(/\{(\d+)\}/g,(_,G)=>{let U=Number.parseInt(G,10);return U<X[0].length?String(X[0][U]):_});let Y=/%([sdijfo%])/g,Z=0,$=Q.replace(Y,(_,G)=>{if(G==="%")return"%";if(Z>=X.length)return _;let U=X[Z++];switch(G){case"s":return String(U);case"d":case"i":return Number(U).toString();case"j":case"o":return JSON.stringify(U,null,2);default:return _}});if(Z<X.length)$+=` ${X.slice(Z).map((_)=>typeof _==="object"?JSON.stringify(_,null,2):String(_)).join(" ")}`;return $}formatMarkdown(Q){if(!Q)return Q;let X=Q;return X=X.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,Z,$)=>{let _=b.underline(b.blue(Z)),G=this.toAbsoluteFilePath($);if(G&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let U=`file://${encodeURI(G)}`,J="\x1B]8;;",H="\x1B\\";return`\x1B]8;;${U}\x1B\\${_}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${$}\x1B\\${_}\x1B]8;;\x1B\\`;return _}),X=X.replace(/`([^`]+)`/g,(Y,Z)=>b.bgGray(Z)),X=X.replace(/\*\*([^*]+)\*\*/g,(Y,Z)=>b.bold(Z)),X=X.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,Z)=>b.italic(Z)),X=X.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,Z)=>b.italic(Z)),X=X.replace(/~([^~]+)~/g,(Y,Z)=>b.strikethrough(Z)),X}supportsHyperlinks(){if(l())return!1;let Q=k.env;if(!Q)return!1;if(Q.TERM_PROGRAM==="iTerm.app"||Q.TERM_PROGRAM==="vscode"||Q.TERM_PROGRAM==="WezTerm")return!0;if(Q.WT_SESSION)return!0;if(Q.TERM==="xterm-kitty")return!0;let X=Q.VTE_VERSION?Number.parseInt(Q.VTE_VERSION,10):0;if(!Number.isNaN(X)&&X>=5000)return!0;return!1}toAbsoluteFilePath(Q){try{let X=Q;if(X.startsWith("file://"))X=X.replace(/^file:\/\//,"");if(X.startsWith("~")){let Y=k.env.HOME||"";if(Y)X=X.replace(/^~(?=$|\/)/,Y)}if(n0(X)||X.startsWith("./")||X.startsWith("../"))X=i0(X);else return null;return UX(X)?X:null}catch{return null}}buildOutputTexts(Q){let X=this.shouldStyleConsole()?this.formatMarkdown(Q):Q,Y=Q.replace(this.ANSI_PATTERN,"");return{consoleText:X,fileText:Y}}async log(Q,X,...Y){let Z=new Date,$=this.formatConsoleTimestamp(Z),_=this.formatFileTimestamp(Z),G,U;if(X instanceof Error)G=X.message,U=X.stack;else G=this.formatMessage(X,Y);let{consoleText:J,fileText:H}=this.buildOutputTexts(G);if(this.shouldStyleConsole()){let A=this.options.showIcons===!1?"":cZ[Q],B=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",z;switch(Q){case"debug":z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:b.gray(J),level:Q}),console.error(z);break;case"info":z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:J,level:Q}),console.warn(z);break;case"success":z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:b.green(J),level:Q}),console.error(z);break;case"warning":z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:J,level:Q}),console.warn(z);break;case"error":if(z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:J,level:Q}),console.error(z),U){let S=U.split(`
12
+ `);for(let R of S)if(R.trim()&&!R.includes(G))console.error(this.formatConsoleMessage({timestamp:$,message:b.gray(` ${R}`),level:Q,showTimestamp:!1}))}break}}else if(!l()){if(console.error(`${_} ${this.environment}.${Q.toUpperCase()}: ${G}`),U)console.error(U)}if(!this.shouldLog(Q))return;let W=`${_} ${this.environment}.${Q.toUpperCase()}: ${H}
13
+ `;if(U)W+=`${U}
14
+ `;if(W=W.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(W)}progress(Q,X=""){let Y={update:(U,J)=>{},finish:(U)=>{},interrupt:(U,J)=>{}};if(!this.enabled)return Y;let Z=30;if(this.activeProgressBar={total:Math.max(1,Q||1),current:0,message:X||"",barLength:Z,lastRenderedLine:""},this.shouldStyleConsole()&&!l()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(U,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,U),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!l()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(U)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,U)},interrupt:(U,J="info")=>{if(!l()&&k.stdout.isTTY)k.stdout.write(`
15
+ `);if(this[J==="warning"?"warn":J](U),this.activeProgressBar&&this.shouldStyleConsole()&&!l()&&k.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(Q){let X=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",Z=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Z,icon:this.options.showIcons===!1?"":b.blue("\u25D0"),tag:Y,message:`${b.cyan(Q)}...`}))}return async(Y)=>{if(!this.enabled)return;let Z=performance.now(),$=Math.round(Z-X),_=`${Q} completed in ${$}ms`,G=new Date,U=this.formatConsoleTimestamp(G),H=`${this.formatFileTimestamp(G)} ${this.environment}.INFO: ${_}`;if(Y)H+=` ${JSON.stringify(Y)}`;if(H+=`
16
+ `,H=H.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:U,icon:this.options.showIcons===!1?"":b.green("\u2713"),tag:W,message:`${_}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!l())console.error(H.trim());if(this.shouldWriteToFile())await this.writeToFile(H)}}async debug(Q,...X){await this.log("debug",Q,...X)}async info(Q,...X){await this.log("info",Q,...X)}async success(Q,...X){await this.log("success",Q,...X)}async warn(Q,...X){await this.log("warning",Q,...X)}async error(Q,...X){await this.log("error",Q,...X)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let Q=this.config.rotation,{encrypt:X}=Q;return!!X}async only(Q){if(!this.enabled)return;return await Q()}isEnabled(){return this.enabled}setEnabled(Q){this.enabled=Q}extend(Q){let X=`${this.name}:${Q}`,Y=new PX(X,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(l())throw Error("createReadStream is not supported in browser environments");if(!UX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return eY(this.currentLogFile,{encoding:"utf8"})}async decrypt(Q){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let X=this.config.rotation;if(!X.encrypt||typeof X.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let Z=IQ.isBuffer(Q)?Q:IQ.from(Q,"base64"),$=Z.subarray(0,16),_=Z.subarray(Z.length-16),G=Z.subarray(16,Z.length-16),U=m0("aes-256-gcm",Y,$);U.setAuthTag(_);let J=U.update(G),H=U.final(),W=J.length+H.length,A=IQ.allocUnsafe(W);return J.copy(A,0),H.copy(A,J.length),A.toString("utf8")}catch(Z){throw Error(`Decryption failed: ${Z instanceof Error?Z.message:String(Z)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return l()}isServerMode(){return!l()}setTestEncryptionKey(Q,X){this.currentKeyId=Q,this.keys.set(Q,X)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(Q){if(!this.enabled)return;let X=new Date,Y=this.formatConsoleTimestamp(X),Z=this.formatFileTimestamp(X),{consoleText:$,fileText:_}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let U=$.split(`
17
+ `),J=Math.max(...U.map((B)=>B.length))+2,H=`\u250C${"\u2500".repeat(J)}\u2510`,W=`\u2514${"\u2500".repeat(J)}\u2518`,A=U.map((B)=>{return this.formatConsoleMessage({timestamp:Y,message:b.cyan(B),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:b.cyan(H),showTimestamp:!1})),A.forEach((B)=>console.error(B)),console.error(this.formatConsoleMessage({timestamp:Y,message:b.cyan(W),showTimestamp:!1}))}else if(!l())console.error(`${Z} ${this.environment}.INFO: [BOX] ${_}`);let G=`${Z} ${this.environment}.INFO: [BOX] ${_}
18
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(G)}async prompt(Q){if(l())return Promise.resolve(!0);return new Promise((X)=>{console.error(`${b.cyan("?")} ${Q} (y/n) `);let Y=(Z)=>{let $=Z.toString().trim().toLowerCase();k.stdin.removeListener("data",Y);try{if(typeof k.stdin.setRawMode==="function")k.stdin.setRawMode(!1)}catch{}k.stdin.pause(),console.error(""),X($==="y"||$==="yes")};try{if(typeof k.stdin.setRawMode==="function")k.stdin.setRawMode(!0)}catch{}k.stdin.resume(),k.stdin.once("data",Y)})}setFancy(Q){this.fancy=Q}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(Q,...X){if(!this.enabled)return;let Y=Q;if(X&&X.length>0){let J=/%([sdijfo%])/g,H=0;if(Y=Q.replace(J,(W,A)=>{if(A==="%")return"%";if(H>=X.length)return W;let B=X[H++];switch(A){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return W}}),H<X.length)Y+=` ${X.slice(H).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:Z,fileText:$}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let J=this.options.showTags!==!1&&this.name?b.gray(this.formatTag(this.name)):"",H=this.options.showIcons===!1?"":`${b.blue("\u25D0")} `;console.error(`${H}${J} ${b.cyan(Z)}`)}let U=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${$}
19
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}renderProgressBar(Q,X=!1){if(!this.enabled||!this.shouldStyleConsole()||!k.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round(Q.current/Q.total*100))),Z=Math.round(Q.barLength*Y/100),$=Q.barLength-Z,_=b.green("\u2501".repeat(Z)),G=b.gray("\u2501".repeat($)),U=`[${_}${G}]`,J=`${Y}%`.padStart(4),H=Q.message?` ${Q.message}`:"",W=this.options.showIcons===!1?"":X||Y===100?b.green("\u2713"):b.blue("\u25B6"),A=this.options.showTags!==!1&&this.name?` ${b.gray(this.formatTag(this.name))}`:"",B=`\r${W}${A} ${U} ${J}${H}`,z=k.stdout.columns||80,S=" ".repeat(Math.max(0,z-B.replace(this.ANSI_PATTERN,"").length));if(Q.lastRenderedLine=`${B}${S}`,k.stdout.write(Q.lastRenderedLine),X)k.stdout.write(`
20
+ `)}finishProgressBar(Q,X){if(!this.enabled||!this.fancy||l()||!k.stdout.isTTY){this.activeProgressBar=null;return}if(Q.current<Q.total)Q.current=Q.total;if(X)Q.message=X;this.renderProgressBar(Q,!0),this.activeProgressBar=null}async clear(Q={}){if(l()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let X=await HX(this.config.logDirectory),Y=[];for(let Z of X){if(!(Q.name?new RegExp(Q.name.replace("*",".*")).test(Z):Z.startsWith(this.name))||!Z.endsWith(".log"))continue;let _=pQ(this.config.logDirectory,Z);if(Q.before)try{if((await fQ(_)).mtime>=Q.before)continue}catch(G){console.error(`Failed to get stats for file ${_}:`,G);continue}Y.push(_)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let Z of Y)try{await WX(Z),console.warn(`Deleted log file: ${Z}`)}catch($){console.error(`Failed to delete log file ${Z}:`,$)}console.warn("Log clearing process finished.")}catch(X){console.error("Error during log clearing process:",X)}}}async function yZ(Q,X={}){let{maxRetries:Y=3,retryDelay:Z=1000,isRetryable:$=()=>!0,fallback:_}=X,G=Error("Unknown error occurred");for(let U=0;U<=Y;U++)try{return await Q()}catch(J){if(G=J instanceof Error?J:Error(String(J)),U===Y||!$(G))break;if(Z>0)await new Promise((H)=>setTimeout(H,Z))}if(_!==void 0)return _;throw G instanceof Error?G:Error(`Unknown error: ${String(G)}`)}function vZ(Q){return Q instanceof JQ}function N8(Q){return Q instanceof bX}function C8(Q){if(vZ(Q))return Q.code==="FILE_SYSTEM_ERROR"||Q.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((Y)=>Q.message.toLowerCase().includes(Y.toLowerCase()))}class pX{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(Q,X)=>X==="boolean"||["true","false","1","0","yes","no"].includes(Q.toLowerCase()),parse:(Q)=>{let X=Q.toLowerCase();return["true","1","yes"].includes(X)}},{name:"number",canParse:(Q,X)=>X==="number"||!Number.isNaN(Number(Q))&&!Number.isNaN(Number.parseFloat(Q)),parse:(Q)=>{let X=Number(Q);if(Number.isNaN(X))throw TypeError(`Cannot parse "${Q}" as number`);return X}},{name:"array",canParse:(Q,X)=>X==="array"||Q.startsWith("[")||Q.includes(","),parse:(Q)=>{try{let X=JSON.parse(Q);if(Array.isArray(X))return X}catch{}return Q.split(",").map((X)=>X.trim())}},{name:"json",canParse:(Q,X)=>X==="object"||(Q.startsWith("{")&&Q.endsWith("}")||Q.startsWith("[")&&Q.endsWith("]")),parse:(Q)=>{try{return JSON.parse(Q)}catch(X){throw Error(`Cannot parse "${Q}" as JSON: ${X}`)}}}]}async applyEnvironmentVariables(Q,X,Y={}){let{prefix:Z,useCamelCase:$=!0,useBackwardCompatibility:_=!0,customParsers:G={},verbose:U=!1,trackPerformance:J=!0}=Y,H=async()=>{if(!Q)return{config:X,source:{type:"environment",priority:50,timestamp:new Date}};let W=Z||this.generateEnvPrefix(Q),A={...X};return this.processObject(A,[],W,{useCamelCase:$,useBackwardCompatibility:_,customParsers:G,verbose:U,configName:Q}),{config:A,source:{type:"environment",priority:50,timestamp:new Date}}};if(J)return XX.track("applyEnvironmentVariables",H,{configName:Q});return H()}generateEnvPrefix(Q){return Q.toUpperCase().replace(/-/g,"_")}formatEnvKey(Q,X){if(!X)return Q.toUpperCase();return Q.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(Q,X,Y,Z){for(let[$,_]of Object.entries(Q)){let G=[...X,$],U=G.map((W)=>this.formatEnvKey(W,Z.useCamelCase)),J=`${Y}_${U.join("_")}`,H=Z.useBackwardCompatibility?`${Y}_${G.map((W)=>W.toUpperCase()).join("_")}`:null;if(Z.verbose);if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.processObject(_,G,Y,Z);else{let W=AX.env[J]||(H?AX.env[H]:void 0);if(W!==void 0){if(Z.verbose){let A=AX.env[J]?J:H}try{Q[$]=this.parseEnvironmentValue(W,typeof _,J,Z.customParsers,Z.configName)}catch(A){if(A instanceof yX)throw A;throw NQ.envVar(J,W,typeof _,Z.configName)}}}}}parseEnvironmentValue(Q,X,Y,Z,$){for(let[_,G]of Object.entries(Z))try{return G(Q)}catch{continue}for(let _ of this.defaultParsers)if(_.canParse(Q,X))try{return _.parse(Q)}catch{throw NQ.envVar(Y,Q,`${X} (via ${_.name} parser)`,$)}return Q}getEnvironmentVariables(Q){let X={},Y=Q.toUpperCase();for(let[Z,$]of Object.entries(AX.env))if(Z.startsWith(Y)&&$!==void 0)X[Z]=$;return X}validateEnvironmentVariable(Q,X,Y){let Z=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(Q))Z.push(`Environment variable key "${Q}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue(Q,X,Y,{})}catch($){Z.push(`Cannot parse value "${X}" as ${Y}: ${$}`)}return{isValid:Z.length===0,errors:Z}}generateEnvVarDocs(Q,X,Y={}){let{prefix:Z,format:$="text"}=Y,_=Z||this.generateEnvPrefix(Q),G=[];switch(this.extractEnvVarInfo(X,[],_,G),$){case"markdown":return this.formatAsMarkdown(G,Q);case"json":return JSON.stringify(G,null,2);default:return this.formatAsText(G,Q)}}extractEnvVarInfo(Q,X,Y,Z){for(let[$,_]of Object.entries(Q)){let G=[...X,$],U=`${Y}_${G.map((J)=>this.formatEnvKey(J,!0)).join("_")}`;if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.extractEnvVarInfo(_,G,Y,Z);else Z.push({key:U,type:Array.isArray(_)?"array":typeof _,description:`Configuration for ${G.join(".")}`,example:this.generateExample(_)})}}generateExample(Q){if(Array.isArray(Q))return JSON.stringify(Q);if(typeof Q==="object"&&Q!==null)return JSON.stringify(Q);return String(Q)}formatAsText(Q,X){let Y=`Environment Variables for ${X}:
21
+
22
+ `;for(let Z of Q)Y+=`${Z.key}
23
+ `,Y+=` Type: ${Z.type}
24
+ `,Y+=` Description: ${Z.description}
25
+ `,Y+=` Example: ${Z.example}
26
+
27
+ `;return Y}formatAsMarkdown(Q,X){let Y=`# Environment Variables for ${X}
28
+
29
+ `;Y+=`| Variable | Type | Description | Example |
30
+ `,Y+=`|----------|------|-------------|----------|
31
+ `;for(let Z of Q)Y+=`| \`${Z.key}\` | ${Z.type} | ${Z.description} | \`${Z.example}\` |
32
+ `;return Y}}function k8(Q,X){let Y=mZ("process");if(typeof Y>"u"||!Y.env)return X;let Z=Y.env[Q];return Z!==void 0?Z:X}function dZ(Q,X,Y={}){return hZ(Q,X,Y,new WeakMap)}function hZ(Q,X,Y,Z){let{arrayMergeMode:$="replace",skipNullish:_=!1,customMerger:G}=Y;if(X===null||X===void 0)return _?Q:X;if(G){let U=G(Q,X);if(U!==void 0)return U}if(Array.isArray(X)||Array.isArray(Q))return fZ(Q,X,$,Z);if(!BQ(X)||!BQ(Q))return X;return y8(Q,X,Y,Z)}function fZ(Q,X,Y,Z){if(Array.isArray(X)&&!Array.isArray(Q))return X;if(Array.isArray(Q)&&!Array.isArray(X))return X;if(Array.isArray(X)&&Array.isArray(Q))switch(Y){case"replace":return X;case"concat":return x8(Q,X);case"smart":return P8(Q,X,Z);default:return X}return X}function x8(Q,X){let Y=[...X];for(let Z of Q)if(!Y.some(($)=>LY($,Z)))Y.push(Z);return Y}function P8(Q,X,Y){if(X.length===0)return Q;if(Q.length===0)return X;if(BQ(X[0])&&BQ(Q[0]))return b8(Q,X,Y);if(X.every((Z)=>typeof Z==="string")&&Q.every((Z)=>typeof Z==="string")){let Z=[...X];for(let $ of Q)if(!Z.includes($))Z.push($);return Z}return X}function b8(Q,X,Y){let Z=[...X];for(let $ of Q){if(!BQ($)){Z.push($);continue}let _=["id","name","key","path","type"],G=!1;for(let U of _)if(U in $){if(Z.find((H)=>BQ(H)&&(U in H)&&H[U]===$[U])){G=!0;break}}if(!G)Z.push($)}return Z}function y8(Q,X,Y,Z){let $=X;if(BQ($)&&Z.has($))return Z.get($);let _={...Q};if(BQ($))Z.set($,_);for(let G in $){if(!Object.prototype.hasOwnProperty.call($,G))continue;let U=$[G],J=_[G];if(Y.skipNullish&&(U===null||U===void 0))continue;if(U===null||U===void 0){_[G]=U;continue}if(BQ(U)&&BQ(J))_[G]=hZ(J,U,Y,Z);else if(Array.isArray(U)||Array.isArray(J))_[G]=fZ(J,U,Y.arrayMergeMode||"smart",Z);else _[G]=U}return _}function CY(Q,X,Y="replace"){return dZ(Q,X,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function LY(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(!LY(Q[Y],X[Y]))return!1;return!0}if(BQ(Q)&&BQ(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(!LY(Q[$],X[$]))return!1}return!0}return!1}function BQ(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}class mX{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(Q,X,Y={}){let{arrayStrategy:Z="replace",useCache:$=!0,cacheTtl:_,trackPerformance:G=!0,verbose:U=!1}=Y;if($){let H=nQ.getWithFileCheck("file",Q);if(H){if(U)console.log(`Configuration loaded from cache: ${Q}`);return H}}let J=async()=>{if(!zX(Q))return null;try{let H=`?t=${Date.now()}`,W=await import(Q+H),A=W.default||W,B="default"in W,z=Object.keys(W).length>0;if(!B&&!z)throw new eQ(Q,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof A!=="object"||A===null||Array.isArray(A))throw new eQ(Q,Error("Configuration must export a valid object"),"unknown");let C={config:CY(X,A,Z),source:{type:"file",path:Q,priority:100,timestamp:new Date}};if($)nQ.setWithFileCheck("file",C,Q,_);return C}catch(H){throw H instanceof Error?NQ.configLoad(Q,H):NQ.configLoad(Q,Error(String(H)))}};if(G)return XX.track("loadFromPath",J,{path:Q});return J()}async tryLoadFromPaths(Q,X,Y={}){for(let Z of Q)try{let $=await this.loadFromPath(Z,X,Y);if($)return $}catch($){if($ instanceof Error&&$.name==="ConfigLoadError")throw $;if(Y.verbose)console.warn(`Failed to load config from ${Z}:`,$)}return null}generateConfigPaths(Q,X,Y){let Z=this.generateNamePatterns(Q,Y),$=[];for(let _ of Z)for(let G of this.extensions)$.push(XY(X,`${_}${G}`));return $}generateNamePatterns(Q,X){let Y=[];if(Y.push("config",".config"),Q)Y.push(Q,`.${Q}.config`,`${Q}.config`,`.${Q}`);if(X){if(Y.push(X,`.${X}.config`,`${X}.config`,`.${X}`),Q)Y.push(`${Q}.${X}.config`,`.${Q}.${X}.config`)}return Y.filter(Boolean)}checkFileAccess(Q){return yZ(async()=>{return zX(Q)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(Q,X,Y){let Z=[];if(!zX(Q))return Z;if(X||Y){let $=this.generateNamePatterns(X||"",Y);for(let _ of $)for(let G of this.extensions){let U=XY(Q,`${_}${G}`);if(await this.checkFileAccess(U))Z.push(U)}}else try{let{readdirSync:$}=await import("fs"),_=$(Q);for(let G of _)if(this.looksLikeConfigFile(G)){let U=XY(Q,G);if(await this.checkFileAccess(U))Z.push(U)}}catch{return[]}return Z}looksLikeConfigFile(Q){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Y)=>Y.test(Q))}async validateConfigFile(Q){let X=[];try{if(!zX(Q))return X.push("Configuration file does not exist"),X;let Y=await import(Q),Z=Y.default||Y;if(Z===void 0)X.push("Configuration file must export a default value or named exports");else if(typeof Z!=="object"||Z===null)X.push("Configuration must be an object");else if(Array.isArray(Z))X.push("Configuration cannot be an array at the root level");if(Q.endsWith(".json"))try{let{readFileSync:$}=await import("fs"),_=$(Q,"utf8");JSON.parse(_)}catch($){X.push(`Invalid JSON syntax: ${$}`)}}catch(Y){X.push(`Failed to load configuration file: ${Y}`)}return X}async getFileModificationTime(Q){try{let{statSync:X}=await import("fs");return X(Q).mtime}catch{return null}}async preloadConfigurations(Q,X={}){let Y=new Map;return await Promise.allSettled(Q.map(async(Z)=>{try{let $=await this.loadFromPath(Z,{},X);if($)Y.set(Z,$.config)}catch($){if(X.verbose)console.warn(`Failed to preload ${Z}:`,$)}})),Y}}class kY{async validateConfiguration(Q,X,Y={}){let{stopOnFirstError:Z=!1,validateRequired:$=!0,validateTypes:_=!0,customRules:G=[],trackPerformance:U=!0,verbose:J=!1}=Y,H=async()=>{let W=[],A=[],B={stopOnFirstError:Z,validateRequired:$,validateTypes:_,customRules:G,trackPerformance:U,verbose:J};try{if(typeof X==="string")return await this.validateWithSchemaFile(Q,X,B);else if(Array.isArray(X))return this.validateWithRules(Q,[...X,...G],B);else return this.validateWithJSONSchema(Q,X,B)}catch(z){return W.push({path:"",message:`Validation failed: ${z}`,rule:"system"}),{isValid:!1,errors:W,warnings:A}}};if(U)return await XX.track("validateConfiguration",H);return H()}async validateWithSchemaFile(Q,X,Y){try{if(!o0(X))throw new QX(X,[{path:"",message:"Schema file does not exist"}]);let Z=await import(X),$=Z.default||Z;if(Array.isArray($))return this.validateWithRules(Q,$,Y);else return this.validateWithJSONSchema(Q,$,Y)}catch(Z){throw new QX(X,[{path:"",message:`Failed to load schema: ${Z}`}])}}validateWithJSONSchema(Q,X,Y){let Z=[],$=[];return this.validateObjectAgainstSchema(Q,X,"",Z,$,Y),{isValid:Z.length===0,errors:Z,warnings:$}}validateObjectAgainstSchema(Q,X,Y,Z,$,_){if(_.validateTypes&&X.type){let G=Array.isArray(Q)?"array":typeof Q,U=Array.isArray(X.type)?X.type:[X.type];if(!U.includes(G)){if(Z.push({path:Y,message:`Expected type ${U.join(" or ")}, got ${G}`,expected:U.join(" or "),actual:G,rule:"type"}),_.stopOnFirstError)return}}if(X.enum&&!X.enum.includes(Q)){if(Z.push({path:Y,message:`Value must be one of: ${X.enum.join(", ")}`,expected:X.enum.join(", "),actual:Q,rule:"enum"}),_.stopOnFirstError)return}if(typeof Q==="string"){if(X.minLength!==void 0&&Q.length<X.minLength)Z.push({path:Y,message:`String length must be at least ${X.minLength}`,expected:`>= ${X.minLength}`,actual:Q.length,rule:"minLength"});if(X.maxLength!==void 0&&Q.length>X.maxLength)Z.push({path:Y,message:`String length must not exceed ${X.maxLength}`,expected:`<= ${X.maxLength}`,actual:Q.length,rule:"maxLength"});if(X.pattern){if(!new RegExp(X.pattern).test(Q))Z.push({path:Y,message:`String does not match pattern ${X.pattern}`,expected:X.pattern,actual:Q,rule:"pattern"})}}if(typeof Q==="number"){if(X.minimum!==void 0&&Q<X.minimum)Z.push({path:Y,message:`Value must be at least ${X.minimum}`,expected:`>= ${X.minimum}`,actual:Q,rule:"minimum"});if(X.maximum!==void 0&&Q>X.maximum)Z.push({path:Y,message:`Value must not exceed ${X.maximum}`,expected:`<= ${X.maximum}`,actual:Q,rule:"maximum"})}if(Array.isArray(Q)&&X.items)for(let G=0;G<Q.length;G++){let U=Y?`${Y}[${G}]`:`[${G}]`;if(this.validateObjectAgainstSchema(Q[G],X.items,U,Z,$,_),_.stopOnFirstError&&Z.length>0)return}if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let G=Q;if(_.validateRequired&&X.required){for(let U of X.required)if(!(U in G)){if(Z.push({path:Y?`${Y}.${U}`:U,message:`Missing required property '${U}'`,expected:"required",rule:"required"}),_.stopOnFirstError)return}}if(X.properties){for(let[U,J]of Object.entries(X.properties))if(U in G){let H=Y?`${Y}.${U}`:U;if(this.validateObjectAgainstSchema(G[U],J,H,Z,$,_),_.stopOnFirstError&&Z.length>0)return}}if(X.additionalProperties===!1){let U=new Set(Object.keys(X.properties||{}));for(let J of Object.keys(G))if(!U.has(J))$.push({path:Y?`${Y}.${J}`:J,message:`Additional property '${J}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(Q,X,Y){let Z=[],$=[];for(let _ of X)try{let G=this.getValueByPath(Q,_.path),U=this.validateWithRule(G,_,_.path);if(Z.push(...U),Y.stopOnFirstError&&Z.length>0)break}catch(G){Z.push({path:_.path,message:`Rule validation failed: ${G}`,rule:"system"})}return{isValid:Z.length===0,errors:Z,warnings:$}}validateWithRule(Q,X,Y){let Z=[];if(X.required&&(Q===void 0||Q===null))return Z.push({path:Y,message:X.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),Z;if(Q===void 0||Q===null)return Z;if(X.type){let $=Array.isArray(Q)?"array":typeof Q;if($!==X.type)Z.push({path:Y,message:X.message||`Expected type ${X.type}, got ${$}`,expected:X.type,actual:$,rule:"type"})}if(X.min!==void 0){let $=Array.isArray(Q)?Q.length:typeof Q==="string"?Q.length:typeof Q==="number"?Q:0;if($<X.min)Z.push({path:Y,message:X.message||`Value must be at least ${X.min}`,expected:`>= ${X.min}`,actual:$,rule:"min"})}if(X.max!==void 0){let $=Array.isArray(Q)?Q.length:typeof Q==="string"?Q.length:typeof Q==="number"?Q:0;if($>X.max)Z.push({path:Y,message:X.message||`Value must not exceed ${X.max}`,expected:`<= ${X.max}`,actual:$,rule:"max"})}if(X.pattern&&typeof Q==="string"){if(!X.pattern.test(Q))Z.push({path:Y,message:X.message||`Value does not match pattern ${X.pattern}`,expected:X.pattern.toString(),actual:Q,rule:"pattern"})}if(X.enum&&!X.enum.includes(Q))Z.push({path:Y,message:X.message||`Value must be one of: ${X.enum.join(", ")}`,expected:X.enum.join(", "),actual:Q,rule:"enum"});if(X.validator){let $=X.validator(Q);if($)Z.push({path:Y,message:X.message||$,rule:"custom"})}return Z}getValueByPath(Q,X){if(!X)return Q;let Y=X.split("."),Z=Q;for(let $ of Y)if(Z&&typeof Z==="object"&&$ in Z)Z=Z[$];else return;return Z}generateRulesFromInterface(Q){let X=[],Y=Q.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Z of Y){let[,$,_,G]=Z;X.push({path:$,required:!_,type:this.mapTypeScriptType(G)})}return X}mapTypeScriptType(Q){switch(Q.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:nZ},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class xY{fileLoader=new mX;envProcessor=new pX;validator=new kY;async loadConfig(Q){let X=Date.now(),{cache:Y,performance:Z,schema:$,validate:_,...G}=Q;try{if(Y?.enabled){let J=this.checkCache(G.name||"",G);if(J)return J}let U;try{U=await this.loadConfigurationStrategies(G,!0,Y)}catch(J){let H=G.__strictErrorHandling;if(J instanceof Error&&J.name==="ConfigNotFoundError"){if(H)throw J;U={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`No configuration file found for "${G.name||"config"}", using defaults with environment variables`]}}else if(J instanceof Error&&J.name==="ConfigLoadError"){let W=J.message.includes("EACCES")||J.message.includes("EPERM")||J.message.includes("permission denied"),A=!W&&(J.message.includes("syntax")||J.message.includes("Expected")||J.message.includes("Unexpected")||J.message.includes("BuildMessage")||J.message.includes("errors building")),B=J.message.includes("Configuration must export a valid object")||J.message.includes("Configuration file is empty and exports nothing");if(H&&(B||W))throw J;if(A&&(!H||!B))U={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!H)U={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`Configuration loading error, using defaults: ${J.message}`]};else throw J}else U={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${J instanceof Error?J.message:String(J)}`]}}if($||_)await this.validateConfiguration(U.config,$,_,G.name);if(Y?.enabled&&U)this.cacheResult(G.name||"",U,Y,G);if(Z?.enabled){let J={operation:"loadConfig",duration:Date.now()-X,configName:G.name,timestamp:new Date};if(Z.onMetrics)Z.onMetrics(J);if(Z.slowThreshold&&J.duration>Z.slowThreshold)KQ.warn(`Slow configuration loading detected: ${J.duration}ms for ${G.name}`);U.metrics=J}return U}catch(U){let J=Date.now()-X;throw KQ.error(`Configuration loading failed after ${J}ms:`,[U instanceof Error?U:Error(String(U))]),U}}async loadConfigurationStrategies(Q,X=!1,Y){let{name:Z="",alias:$,cwd:_,configDir:G,defaultConfig:U,checkEnv:J=!0,arrayStrategy:H="replace",verbose:W=!1}=Q,A=_||kQ.cwd(),B=[],z=await this.loadLocalConfiguration(Z,$,A,G,U,H,W,J,Y);if(z)return B.push(...this.getLocalSearchPaths(Z,$,A,G)),this.finalizeResult(z,B,J,Z,W);let S=await this.loadHomeConfiguration(Z,$,U,H,W,J);if(S)return B.push(...this.getHomeSearchPaths(Z,$)),this.finalizeResult(S,B,J,Z,W);let R=await this.loadPackageJsonConfiguration(Z,$,A,U,H,W,J);if(R)return B.push(ZQ(A,"package.json")),this.finalizeResult(R,B,J,Z,W);if(B.push(...this.getAllSearchPaths(Z,$,A,G)),X)throw NQ.configNotFound(Z,B,$);return{...await this.applyEnvironmentVariables(Z,U,J,W),warnings:[`No configuration file found for "${Z}"${$?` or alias "${$}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration(Q,X,Y,Z,$,_,G,U,J){let H=U?tQ(Q,$,G):$,W=this.getLocalDirectories(Y,Z);for(let A of W){if(G)KQ.info(`Searching for configuration in: ${A}`);let B=this.fileLoader.generateConfigPaths(Q,A,X),z=await this.fileLoader.tryLoadFromPaths(B,H,{arrayStrategy:_,verbose:G,cacheTtl:J?.ttl,useCache:!J?.ttl||J.ttl>100});if(z){if(G)KQ.success(`Configuration loaded from: ${z.source.path}`);return z}}return null}async loadHomeConfiguration(Q,X,Y,Z,$,_){if(!Q)return null;let G=_?tQ(Q,Y,$):Y,U=[ZQ(yQ(),".config",Q),ZQ(yQ(),".config"),yQ()];for(let J of U){if($)KQ.info(`Checking home directory: ${J}`);let H=this.fileLoader.generateConfigPaths(Q,J,X),W=await this.fileLoader.tryLoadFromPaths(H,G,{arrayStrategy:Z,verbose:$});if(W){if($)KQ.success(`Configuration loaded from home directory: ${W.source.path}`);return W}}return null}async loadPackageJsonConfiguration(Q,X,Y,Z,$,_,G){let U=G?tQ(Q,Z,_):Z;try{let J=ZQ(Y,"package.json");if(!BY(J))return null;let H=await import(J),W=H[Q],A=Q;if(!W&&X)W=H[X],A=X;if(W&&typeof W==="object"&&!Array.isArray(W)){if(_)KQ.success(`Configuration loaded from package.json: ${A}`);return{config:CY(U,W,$),source:{type:"package.json",path:J,priority:30,timestamp:new Date}}}}catch(J){if(_)KQ.warn("Failed to load package.json:",[J instanceof Error?J:Error(String(J))])}return null}async applyEnvironmentVariables(Q,X,Y,Z){if(!Y||!Q||typeof X!=="object"||X===null||Array.isArray(X))return{config:X,source:{type:"default",priority:10,timestamp:new Date}};return{config:tQ(Q,X,Z),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(Q,X,Y,Z,$){return{config:Q.config,source:Q.source,path:Q.source.path}}async validateConfiguration(Q,X,Y,Z){let $=[];if(Y){let _=Y(Q);if(_)$.push(..._)}if(X){let _=await this.validator.validateConfiguration(Q,X);if(!_.isValid)$.push(..._.errors.map((G)=>G.path?`${G.path}: ${G.message}`:G.message))}if($.length>0)throw NQ.configValidation(Z||"unknown",$,Z)}checkCache(Q,X){let Y=this.generateCacheKey(Q,X);return nQ.get(Y)||null}cacheResult(Q,X,Y,Z){let $=this.generateCacheKey(Q,Z);nQ.set($,X,void 0,Y.ttl)}generateCacheKey(Q,X){let Y=[Q];if(X.alias)Y.push(`alias:${X.alias}`);if(X.cwd)Y.push(`cwd:${X.cwd}`);if(X.configDir)Y.push(`configDir:${X.configDir}`);if("checkEnv"in X)Y.push(`checkEnv:${X.checkEnv}`);return Y.join("|")}getLocalDirectories(Q,X){return Array.from(new Set([Q,ZQ(Q,"config"),ZQ(Q,".config"),X?ZQ(Q,X):void 0].filter(Boolean)))}getAllSearchPaths(Q,X,Y,Z){let $=[];return $.push(...this.getLocalSearchPaths(Q,X,Y,Z)),$.push(...this.getHomeSearchPaths(Q,X)),$.push(ZQ(Y,"package.json")),$}getLocalSearchPaths(Q,X,Y,Z){let $=this.getLocalDirectories(Y,Z),_=[];for(let G of $)_.push(...this.fileLoader.generateConfigPaths(Q,G,X));return _}getHomeSearchPaths(Q,X){if(!Q)return[];let Y=[ZQ(yQ(),".config",Q),ZQ(yQ(),".config"),yQ()],Z=[];for(let $ of Y)Z.push(...this.fileLoader.generateConfigPaths(Q,$,X));return Z}async loadConfigWithResult(Q){return this.loadConfig(Q)}}function BZ(Q){let Y=!(Q.message.includes("EACCES")||Q.message.includes("EPERM")||Q.message.includes("permission denied"))&&(Q.message.includes("syntax")||Q.message.includes("Expected")||Q.message.includes("Unexpected")||Q.message.includes("BuildMessage")),Z=Q.message.includes("Configuration must export a valid object")||Q.message.includes("Configuration file is empty and exports nothing");return Y||Z}async function v8(Q){return OQ.loadConfig({...Q,__strictErrorHandling:!0})}async function pZ(Q){let X="defaultConfig"in Q&&Q.defaultConfig!==void 0?Q.defaultConfig:{},Y="cache"in Q||"performance"in Q||"schema"in Q||"validate"in Q;try{let Z;if(Y)Z=await OQ.loadConfig(Q);else Z=await OQ.loadConfig({...Q,defaultConfig:X,cache:{enabled:!0},performance:{enabled:!1}});return Z?.config??X}catch(Z){let $=Z instanceof Error?Z.name:"UnknownError",_=Z instanceof Error?Z.message:String(Z);if(!($==="ConfigNotFoundError"||$==="ConfigLoadError"||$==="ConfigValidationError"||_.includes("config"))&&Q.verbose)KQ.warn("Unexpected error loading config, using defaults:",[Z instanceof Error?Z:Error(String(Z))]);let U=Y?{...Q,defaultConfig:X}:{...Q,defaultConfig:X,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in Q?Q.checkEnv!==!1:!0)return(await OQ.applyEnvironmentVariables(U.name||"",X,!0,U.verbose||!1))?.config??X;return X}}async function d8(Q={defaultConfig:{}}){if(typeof Q==="string"){let{cwd:X}=await import("process");try{return(await OQ.loadConfig({name:Q,cwd:X(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Y){if(Y instanceof Error&&(Y.name==="ConfigNotFoundError"||Y.name==="ConfigLoadError"&&BZ(Y)))return(await OQ.applyEnvironmentVariables(Q,{},!0,!1)).config;throw Y}}try{return(await OQ.loadConfig({...Q,cwd:Q.cwd||kQ.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch(X){if(X instanceof Error&&(X.name==="ConfigNotFoundError"||X.name==="ConfigLoadError"&&BZ(X)))return(await OQ.applyEnvironmentVariables(Q.name||"",Q.defaultConfig||{},Q.checkEnv!==!1,Q.verbose||!1)).config;throw X}}async function h8(Q,X,Y="replace"){let Z=new mX;try{let $=await Z.loadFromPath(Q,X,{arrayStrategy:Y,useCache:!1,trackPerformance:!1});return $?$.config:null}catch{return null}}function tQ(Q,X,Y=!1){let Z=new pX,$=Q.toUpperCase().replace(/[^A-Z0-9]/g,"_");function _(G,U=[]){let J={...G};for(let[H,W]of Object.entries(G)){let A=[...U,H],B=[`${$}_${A.join("_").toUpperCase()}`,`${$}_${A.map((R)=>R.toUpperCase()).join("")}`,`${$}_${A.map((R)=>R.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],z,S;for(let R of B)if(z=kQ.env[R],z!==void 0){S=R;break}if(z!==void 0&&S)if(typeof W==="boolean")J[H]=["true","1","yes"].includes(z.toLowerCase());else if(typeof W==="number"){let R=Number(z);if(!Number.isNaN(R))J[H]=R}else if(Array.isArray(W))try{J[H]=JSON.parse(z)}catch{J[H]=z.split(",").map((R)=>R.trim())}else J[H]=z;else if(W&&typeof W==="object"&&!Array.isArray(W))J[H]=_(W,A)}return J}return _(X)}function f8(Q){let X=ZQ(kQ.cwd(),Q.configDir),Y=ZQ(kQ.cwd(),Q.generatedDir),Z=ZQ(Y,"config-types.ts");if(!BY(cY(Z)))D0(cY(Z),{recursive:!0,mode:511});let $=BY(X)?T0(X).map((G)=>G.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],_=`// Generated by bunfig v${q9}
33
+ export type ConfigNames = ${$.length?`'${$.join("' | '")}'`:"string"}
34
+ `;S0(Z,_,{mode:438})}function p8(Q){let X=null,Y=null,Z=()=>{if(!Y)Y=pZ(Q).then((_)=>{return X=_,_},(_)=>{let G="defaultConfig"in Q?Q.defaultConfig:{};if(X=G,"verbose"in Q&&Q.verbose)KQ.warn("Config loading failed, using defaults:",[_ instanceof Error?_:Error(String(_))]);return G});return Y},$="defaultConfig"in Q?Q.defaultConfig:{};return X=$,Z(),new Proxy({},{get(_,G){if(X)return X[G];let U=$[G];return Z(),U},has(_,G){return G in(X||$)},ownKeys(){return Object.keys(X||$)},getOwnPropertyDescriptor(_,G){return Object.getOwnPropertyDescriptor(X||$,G)},set(_,G,U){if(!X)X={...$};return X[G]=U,!0}})}function m8(Q){let X=_Z(a0.cwd(),Q?.configDir||"./config");function Y(){if(!r0(X))return[];let $=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),_=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],G=t0(X).filter((J)=>$.has(YY(J))).map((J)=>({base:J.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:J})),U=new Map;for(let{base:J,file:H}of G){let W=YY(H).toLowerCase(),A=U.get(J);if(!A){U.set(J,H);continue}let B=YY(A).toLowerCase();if(_.indexOf(W)<_.indexOf(B))U.set(J,H)}return Array.from(U.entries()).map(([J,H])=>({base:J,file:H})).sort((J,H)=>J.base.localeCompare(H.base))}function Z(){let $=Y(),_=$.map((H)=>H.base),G=_.length?_.map((H)=>`'${H}'`).join(" | "):"string",U=$.length?`{
35
+ ${$.map((H)=>{let W=_Z(X,H.file).replace(/\\/g,"/");return` '${H.base}': typeof import('${W}').default`}).join(`,
36
+ `)}
37
+ }`:"Record<string, any>";return`export type ConfigNames = ${G}
38
+ export type ConfigByName = ${U}
39
+ export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
40
+ export type ConfigOf = Config
41
+ `}return{name:"bunfig-plugin",setup($){$.onResolve({filter:/^virtual:bunfig-types$/},(_)=>{return{path:_.path,namespace:"bunfig-virtual"}}),$.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:Z(),loader:"ts"}})}}}var mZ,nQ,XX,gZ,g8,u8,qZ,FX,KY,e,h,c8,LZ,l8,KZ,n8,i8,JY,s8,jZ,wZ,UY,o8,r8,t8,a8,MX,uZ,e8,QQ,Q9,X9,RZ,VX,jY,n,b,Y9,IZ,Z9,FZ,$9,_9,HY,G9,MZ,VZ,J9,WY,U9,H9,W9,A9,z9,EX,cZ,B9,q9="0.15.6",JQ,bX,eQ,wY,RY,yX,IY,FY,QX,MY,VY,NQ,lZ,nZ,KQ,OQ,iZ,sZ,L9=L8(async()=>{mZ=import.meta.require,nQ=new DY,XX=new TY,gZ={createKey:K8,isEquivalent:j8,estimateMemoryUsage:w8},g8=TX(qY.cwd(),"config"),u8=TX(qY.cwd(),"src/generated"),qZ=DX.env.CLARITY_LOG_DIR||k0(F8(),"logs"),FX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:qZ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},KY=await M8(),e={red:(Q)=>`\x1B[31m${Q}\x1B[0m`,green:(Q)=>`\x1B[32m${Q}\x1B[0m`,yellow:(Q)=>`\x1B[33m${Q}\x1B[0m`,blue:(Q)=>`\x1B[34m${Q}\x1B[0m`,magenta:(Q)=>`\x1B[35m${Q}\x1B[0m`,cyan:(Q)=>`\x1B[36m${Q}\x1B[0m`,white:(Q)=>`\x1B[37m${Q}\x1B[0m`,gray:(Q)=>`\x1B[90m${Q}\x1B[0m`,bgRed:(Q)=>`\x1B[41m${Q}\x1B[0m`,bgYellow:(Q)=>`\x1B[43m${Q}\x1B[0m`,bold:(Q)=>`\x1B[1m${Q}\x1B[0m`,dim:(Q)=>`\x1B[2m${Q}\x1B[0m`,italic:(Q)=>`\x1B[3m${Q}\x1B[0m`,underline:(Q)=>`\x1B[4m${Q}\x1B[0m`,reset:"\x1B[0m"},h=e,c8=e.red,LZ=e.green,l8=e.yellow,KZ=e.blue,n8=e.magenta,i8=e.cyan,JY=e.white,s8=e.gray,jZ=e.bgRed,wZ=e.bgYellow,UY=e.bold,o8=e.dim,r8=e.italic,t8=e.underline,a8=e.reset,MX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},uZ={debug:"\uD83D\uDD0D",info:KZ("\u2139"),success:LZ("\u2713"),warning:wZ(JY(UY(" WARN "))),error:jZ(JY(UY(" ERROR ")))},e8=new kX("stacks"),QQ=new kX("bunfig",{showTags:!0}),Q9=YQ(aQ.cwd(),"config"),X9=YQ(aQ.cwd(),"src/generated"),RZ=OX.env.CLARITY_LOG_DIR||N0(D8(),"logs"),VX={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:RZ,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},jY=await T8(),n={red:(Q)=>`\x1B[31m${Q}\x1B[0m`,green:(Q)=>`\x1B[32m${Q}\x1B[0m`,yellow:(Q)=>`\x1B[33m${Q}\x1B[0m`,blue:(Q)=>`\x1B[34m${Q}\x1B[0m`,magenta:(Q)=>`\x1B[35m${Q}\x1B[0m`,cyan:(Q)=>`\x1B[36m${Q}\x1B[0m`,white:(Q)=>`\x1B[37m${Q}\x1B[0m`,gray:(Q)=>`\x1B[90m${Q}\x1B[0m`,bgRed:(Q)=>`\x1B[41m${Q}\x1B[0m`,bgYellow:(Q)=>`\x1B[43m${Q}\x1B[0m`,bgGray:(Q)=>`\x1B[100m${Q}\x1B[0m`,bold:(Q)=>`\x1B[1m${Q}\x1B[0m`,dim:(Q)=>`\x1B[2m${Q}\x1B[0m`,italic:(Q)=>`\x1B[3m${Q}\x1B[0m`,underline:(Q)=>`\x1B[4m${Q}\x1B[0m`,strikethrough:(Q)=>`\x1B[9m${Q}\x1B[0m`,reset:"\x1B[0m"},b=n,Y9=n.red,IZ=n.green,Z9=n.yellow,FZ=n.blue,$9=n.magenta,_9=n.cyan,HY=n.white,G9=n.gray,MZ=n.bgRed,VZ=n.bgYellow,J9=n.bgGray,WY=n.bold,U9=n.dim,H9=n.italic,W9=n.underline,A9=n.strikethrough,z9=n.reset,EX={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},cZ={debug:"\uD83D\uDD0D",info:FZ("\u2139"),success:IZ("\u2713"),warning:VZ(HY(WY(" WARN "))),error:MZ(HY(WY(" ERROR ")))},B9=new PX("stacks"),JQ=class extends Error{timestamp;context;constructor(X,Y={}){super(X);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Y,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let X=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Y,Z])=>`${Y}: ${Z}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${X}`}},bX=class extends JQ{code="CONFIG_NOT_FOUND";constructor(X,Y,Z){let $=Z?` or alias "${Z}"`:"";super(`Configuration "${X}"${$} not found`,{configName:X,alias:Z,searchPaths:Y,searchPathCount:Y.length})}},eQ=class extends JQ{code="CONFIG_LOAD_ERROR";constructor(X,Y,Z){super(`Failed to load configuration from "${X}": ${Y.message}`,{configPath:X,configName:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},wY=class extends JQ{code="CONFIG_VALIDATION_ERROR";constructor(X,Y,Z){super(`Configuration validation failed for "${X}"`,{configPath:X,configName:Z,validationErrors:Y,errorCount:Y.length})}},RY=class extends JQ{code="CONFIG_MERGE_ERROR";constructor(X,Y,Z,$){super(`Failed to merge configuration from "${X}" with "${Y}": ${Z.message}`,{sourcePath:X,targetPath:Y,configName:$,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},yX=class extends JQ{code="ENV_VAR_ERROR";constructor(X,Y,Z,$){super(`Failed to parse environment variable "${X}" with value "${Y}" as ${Z}`,{envKey:X,envValue:Y,expectedType:Z,configName:$})}},IY=class extends JQ{code="FILE_SYSTEM_ERROR";constructor(X,Y,Z){super(`File system ${X} failed for "${Y}": ${Z.message}`,{operation:X,path:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},FY=class extends JQ{code="TYPE_GENERATION_ERROR";constructor(X,Y,Z){super(`Failed to generate types from "${X}" to "${Y}": ${Z.message}`,{configDir:X,outputPath:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},QX=class extends JQ{code="SCHEMA_VALIDATION_ERROR";constructor(X,Y,Z){super(`Schema validation failed${Z?` for config "${Z}"`:""}`,{schemaPath:X,configName:Z,validationErrors:Y,errorCount:Y.length})}},MY=class extends JQ{code="BROWSER_CONFIG_ERROR";constructor(X,Y,Z,$){super(`Failed to fetch configuration from "${X}": ${Y} ${Z}`,{endpoint:X,status:Y,statusText:Z,configName:$})}},VY=class extends JQ{code="PLUGIN_ERROR";constructor(X,Y,Z){super(`Plugin "${X}" failed during ${Y}: ${Z.message}`,{pluginName:X,operation:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},NQ={configNotFound(Q,X,Y){return new bX(Q,X,Y)},configLoad(Q,X,Y){return new eQ(Q,X,Y)},configValidation(Q,X,Y){return new wY(Q,X,Y)},configMerge(Q,X,Y,Z){return new RY(Q,X,Y,Z)},envVar(Q,X,Y,Z){return new yX(Q,X,Y,Z)},fileSystem(Q,X,Y){return new IY(Q,X,Y)},typeGeneration(Q,X,Y){return new FY(Q,X,Y)},schemaValidation(Q,X,Y){return new QX(Q,X,Y)},browserConfig(Q,X,Y,Z){return new MY(Q,X,Y,Z)},plugin(Q,X,Y){return new VY(Q,X,Y)}},lZ={replace:"replace",concat:"concat",smart:"smart"},nZ=/^https?:\/\//,KQ=new PX("bunfig",{showTags:!0}),OQ=new xY,iZ=ZQ(kQ.cwd(),"config"),sZ=ZQ(kQ.cwd(),"src/generated")});function K9(Q,X={}){let Y=SX.cwd();while(Y.includes("storage"))Y=GZ(Y,"..");let Z=GZ(Y,Q||"");if(X?.relative)return Q8(SX.cwd(),Z);return Z}var j9=SX.env.CLARITY_LOG_DIR||e0(K9(),"logs"),oZ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:j9,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},vX={...oZ},W_=(async()=>{try{let{loadConfig:Q}=await L9().then(()=>xZ),X=await Q({name:"clarity",alias:"logging",defaultConfig:oZ,cwd:SX.cwd()});if(X)Object.assign(vX,X)}catch{}return vX})();function i(){if(EQ.env.NODE_ENV==="test"||EQ.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function w9(){if(EQ.env.NODE_ENV==="test"||EQ.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof EQ<"u"){let Q=EQ.type;if(Q==="renderer"||Q==="worker")return!1;return!!(EQ.versions&&(EQ.versions.node||EQ.versions.bun))}return!1}class rZ{async format(Q){let X=await w9(),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:cQ.pid,hostname:X(),environment:cQ.env.NODE_ENV||"development",platform:cQ.platform,version:cQ.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:cQ.env.NODE_ENV||cQ.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}var t={red:(Q)=>`\x1B[31m${Q}\x1B[0m`,green:(Q)=>`\x1B[32m${Q}\x1B[0m`,yellow:(Q)=>`\x1B[33m${Q}\x1B[0m`,blue:(Q)=>`\x1B[34m${Q}\x1B[0m`,magenta:(Q)=>`\x1B[35m${Q}\x1B[0m`,cyan:(Q)=>`\x1B[36m${Q}\x1B[0m`,white:(Q)=>`\x1B[37m${Q}\x1B[0m`,gray:(Q)=>`\x1B[90m${Q}\x1B[0m`,bgRed:(Q)=>`\x1B[41m${Q}\x1B[0m`,bgYellow:(Q)=>`\x1B[43m${Q}\x1B[0m`,bgGray:(Q)=>`\x1B[100m${Q}\x1B[0m`,bold:(Q)=>`\x1B[1m${Q}\x1B[0m`,dim:(Q)=>`\x1B[2m${Q}\x1B[0m`,italic:(Q)=>`\x1B[3m${Q}\x1B[0m`,underline:(Q)=>`\x1B[4m${Q}\x1B[0m`,strikethrough:(Q)=>`\x1B[9m${Q}\x1B[0m`,reset:"\x1B[0m"},v=t,A_=t.red,R9=t.green,z_=t.yellow,I9=t.blue,B_=t.magenta,q_=t.cyan,EZ=t.white,L_=t.gray,F9=t.bgRed,M9=t.bgYellow,K_=t.bgGray,OZ=t.bold,j_=t.dim,w_=t.italic,R_=t.underline,I_=t.strikethrough,F_=t.reset,AY={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},V9={debug:"\uD83D\uDD0D",info:I9("\u2139"),success:R9("\u2713"),warning:M9(EZ(OZ(" WARN "))),error:F9(EZ(OZ(" ERROR ")))};class gX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(Q,X={}){this.name=Q,this.config={...vX},this.options=this.normalizeOptions(X),this.formatter=this.options.formatter||new rZ,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??x.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(X);let Y={...X},Z=X.timestamp!==void 0;if(Z)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:Z||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let $=this.generateKeyId(),_=this.generateKey();this.currentKeyId=$,this.keys.set($,_),this.encryptionKeys.set($,{key:_,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(Q){if(!this.fingersCrossedConfig)return!1;let X={debug:0,info:1,success:2,warning:3,error:4},Y=this.fingersCrossedConfig.activationLevel??"error";return X[Q]>=X[Y]}initializeFingersCrossedConfig(Q){if(!Q.fingersCrossedEnabled&&Q.fingersCrossed)return{...AY,...Q.fingersCrossed};if(!Q.fingersCrossedEnabled)return null;if(!Q.fingersCrossed)return{...AY};return{...AY,...Q.fingersCrossed}}normalizeOptions(Q){let X={format:"json",level:"info",logDirectory:vX.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Y={...X,...Object.fromEntries(Object.entries(Q).filter(([,Z])=>Z!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=X.level;return Y}shouldWriteToFile(){return!i()&&this.config.writeToFile===!0}async writeToFile(Q){let Y=(async()=>{let $,_=0,G=3,U=1000;while(_<G)try{try{try{await _8(this.config.logDirectory,WZ.F_OK|WZ.W_OK)}catch(H){if(H instanceof Error&&"code"in H)if(H.code==="ENOENT")await G8(this.config.logDirectory,{recursive:!0,mode:493});else if(H.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw H;else throw H}}catch(H){throw console.error("Debug: [writeToFile] Failed to create log directory:",H),H}let J=this.validateEncryptionConfig()?(await this.encrypt(Q)).encrypted:FQ.from(Q);try{if(!BX(this.currentLogFile))await _Y(this.currentLogFile,"",{mode:420});if($=HZ(this.currentLogFile,"a",420),$8($,J,{flag:"a"}),UZ($),$!==void 0)$Y($),$=void 0;if((await gQ(this.currentLogFile)).size===0){if(await _Y(this.currentLogFile,J,{flag:"w",mode:420}),(await gQ(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(H){let W=H;if(W.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(W.code)){if(_<G-1){let A=typeof W.message==="string"?W.message:"Unknown error";console.error(`Network error during write attempt ${_+1}/${G}:`,A);let B=U*2**_;await new Promise((z)=>setTimeout(z,B)),_++;continue}}if(W?.code&&["ENOSPC","EDQUOT"].includes(W.code))throw Error(`Disk quota exceeded or no space left on device: ${W.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",W),W}finally{if($!==void 0)try{$Y($)}catch(H){console.error("Debug: [writeToFile] Error closing file descriptor:",H)}}}catch(J){if(_===G-1){let W=J,A=typeof W.message==="string"?W.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",A),J}_++;let H=U*2**(_-1);await new Promise((W)=>setTimeout(W,H))}})();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 uQ(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 uQ(this.config.logDirectory,`${this.name}.log`);let Q=new Date().toISOString().split("T")[0];return uQ(this.config.logDirectory,`${this.name}-${Q}.log`)}setupRotation(){if(i())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let Q=this.config.rotation,X;switch(Q.frequency){case"daily":X=86400000;break;case"weekly":X=604800000;break;case"monthly":X=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},X)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let X=this.config.rotation.keyRotation;if(!X?.enabled)return;let Y=typeof X.interval==="number"?X.interval:60,Z=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch(($)=>{console.error("Error rotating keys:",$)})},Z)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let X=this.config.rotation.keyRotation,Y=this.generateKeyId(),Z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,Z),this.encryptionKeys.set(Y,{key:Z,createdAt:new Date});let $=Array.from(this.encryptionKeys.entries()).sort(([,U],[,J])=>J.createdAt.getTime()-U.createdAt.getTime()),_=typeof X.maxKeys==="number"?X.maxKeys:1,G=Math.max(1,_);if($.length>G)for(let[U]of $.slice(G))this.encryptionKeys.delete(U),this.keys.delete(U)}generateKeyId(){return ZY(16).toString("hex")}generateKey(){return ZY(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=ZY(16),Z=X8("aes-256-gcm",X,Y),$=FQ.isBuffer(Q)?Q:FQ.from(Q,"utf8"),_=Z.update($),G=Z.final(),U=_.length+G.length,J=Z.getAuthTag(),H=FQ.allocUnsafe(16+U+16);return Y.copy(H,0),_.copy(H,16),G.copy(H,16+_.length),J.copy(H,16+U),{encrypted:H,iv:Y}}async compressData(Q){return new Promise((X,Y)=>{let Z=zZ(),$=[];Z.on("data",(_)=>$.push(_)),Z.on("end",()=>X(FQ.from(FQ.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(i())return;if(!this.shouldWriteToFile())return;let Q=await gQ(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 qX(this.config.logDirectory),_=$.filter((J)=>J.startsWith(this.name)&&/\.log\.\d+$/.test(J)).sort((J,H)=>{let W=Number.parseInt(J.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(H.match(/\.log\.(\d+)$/)?.[1]||"0")-W}),G=_.length>0?Number.parseInt(_[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,U=`${Y}.${G}`;if(await gQ(Y).catch(()=>null))try{if(await AZ(Y,U),X.compress)try{let J=`${U}.gz`;await this.compressLogFile(U,J),await LX(U)}catch(J){console.error("Error compressing rotated file:",J)}if(_.length===0&&!$.some((J)=>J.endsWith(".log.1")))try{let J=`${Y}.1`;await _Y(J,"")}catch(J){console.error("Error creating backup file:",J)}}catch(J){console.error(`Error during rotation: ${J instanceof Error?J.message:String(J)}`)}}else{let $=new Date().toISOString().replace(/[:.]/g,"-"),_=Y.replace(/\.log$/,`-${$}.log`);if(await gQ(Y).catch(()=>null))await AZ(Y,_)}if(this.currentLogFile=Z,X.maxFiles){let _=(await qX(this.config.logDirectory)).filter((G)=>G.startsWith(this.name)).sort((G,U)=>U.localeCompare(G));for(let G of _.slice(X.maxFiles))await LX(uQ(this.config.logDirectory,G))}}}async compressLogFile(Q,X){let Y=JZ(Q),Z=Z8(X),$=zZ();await H8(Y,$,Z)}async handleFingersCrossedBuffer(Q,X){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(Q)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let Z=await this.formatter.format(Y);if(this.shouldWriteToFile())await this.writeToFile(Z);console.log(Z)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile(X);console.log(X)}}shouldLog(Q){if(!this.enabled)return!1;let X={debug:0,info:1,success:2,warning:3,error:4};return X[Q]>=X[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((Q)=>{if(Q instanceof Promise)return Q.catch((X)=>{console.error("Error in pending write operation:",X)});return Promise.resolve()})),BX(this.currentLogFile))try{let Q=HZ(this.currentLogFile,"r+");UZ(Q),$Y(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(!i()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await qX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of X)try{await LX(uQ(this.config.logDirectory,Y))}catch(Z){console.error(`Failed to delete temp file ${Y}:`,Z)}}catch(Q){console.error("Error cleaning up temporary files:",Q)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(Q){if(!Q)return"";return`${this.tagFormat.prefix}${Q}${this.tagFormat.suffix}`}formatFileTimestamp(Q){return`[${Q.toISOString()}]`}formatConsoleTimestamp(Q){return this.shouldStyleConsole()?v.gray(Q.toLocaleTimeString()):Q.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||i())return!1;let Q=typeof x.env.NO_COLOR<"u",X=x.env.FORCE_COLOR==="0";if(Q||X)return!1;return!!(typeof x.stderr<"u"&&x.stderr.isTTY||typeof x.stdout<"u"&&x.stdout.isTTY)}formatConsoleMessage(Q){let{timestamp:X,icon:Y="",tag:Z="",message:$,level:_,showTimestamp:G=!0}=Q,U=(z)=>z.replace(this.ANSI_PATTERN,"");if(!this.fancy){let z=[];if(G)z.push(X);if(_==="warning")z.push("WARN");else if(_==="error")z.push("ERROR");else if(Y)z.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Z)z.push(Z.replace(/[[\]]/g,""));return z.push($),z.join(" ")}let J=x.stdout.columns||120,H="";if(_==="warning"||_==="error")H=`${Y} ${$}`;else if(_==="info"||_==="success")H=`${Y} ${Z} ${$}`;else H=`${Y} ${Z} ${v.cyan($)}`;if(!G)return H.trim();let W=U(H).trim().length,A=U(X).length,B=Math.max(1,J-2-W-A);return`${H.trim()}${" ".repeat(B)}${X}`}formatMessage(Q,X){if(X.length===1&&Array.isArray(X[0]))return Q.replace(/\{(\d+)\}/g,(_,G)=>{let U=Number.parseInt(G,10);return U<X[0].length?String(X[0][U]):_});let Y=/%([sdijfo%])/g,Z=0,$=Q.replace(Y,(_,G)=>{if(G==="%")return"%";if(Z>=X.length)return _;let U=X[Z++];switch(G){case"s":return String(U);case"d":case"i":return Number(U).toString();case"j":case"o":return JSON.stringify(U,null,2);default:return _}});if(Z<X.length)$+=` ${X.slice(Z).map((_)=>typeof _==="object"?JSON.stringify(_,null,2):String(_)).join(" ")}`;return $}formatMarkdown(Q){if(!Q)return Q;let X=Q;return X=X.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Y,Z,$)=>{let _=v.underline(v.blue(Z)),G=this.toAbsoluteFilePath($);if(G&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let U=`file://${encodeURI(G)}`,J="\x1B]8;;",H="\x1B\\";return`\x1B]8;;${U}\x1B\\${_}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${$}\x1B\\${_}\x1B]8;;\x1B\\`;return _}),X=X.replace(/`([^`]+)`/g,(Y,Z)=>v.bgGray(Z)),X=X.replace(/\*\*([^*]+)\*\*/g,(Y,Z)=>v.bold(Z)),X=X.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Y,Z)=>v.italic(Z)),X=X.replace(/(?<!_)_([^_]+)_(?!_)/g,(Y,Z)=>v.italic(Z)),X=X.replace(/~([^~]+)~/g,(Y,Z)=>v.strikethrough(Z)),X}supportsHyperlinks(){if(i())return!1;let Q=x.env;if(!Q)return!1;if(Q.TERM_PROGRAM==="iTerm.app"||Q.TERM_PROGRAM==="vscode"||Q.TERM_PROGRAM==="WezTerm")return!0;if(Q.WT_SESSION)return!0;if(Q.TERM==="xterm-kitty")return!0;let X=Q.VTE_VERSION?Number.parseInt(Q.VTE_VERSION,10):0;if(!Number.isNaN(X)&&X>=5000)return!0;return!1}toAbsoluteFilePath(Q){try{let X=Q;if(X.startsWith("file://"))X=X.replace(/^file:\/\//,"");if(X.startsWith("~")){let Y=x.env.HOME||"";if(Y)X=X.replace(/^~(?=$|\/)/,Y)}if(J8(X)||X.startsWith("./")||X.startsWith("../"))X=U8(X);else return null;return BX(X)?X:null}catch{return null}}buildOutputTexts(Q){let X=this.shouldStyleConsole()?this.formatMarkdown(Q):Q,Y=Q.replace(this.ANSI_PATTERN,"");return{consoleText:X,fileText:Y}}async log(Q,X,...Y){if(!this.shouldLog(Q))return;let Z=new Date,$=this.formatConsoleTimestamp(Z),_=this.formatFileTimestamp(Z),G,U;if(X instanceof Error)G=X.message,U=X.stack;else G=this.formatMessage(X,Y);let{consoleText:J,fileText:H}=this.buildOutputTexts(G);if(this.shouldStyleConsole()){let A=this.options.showIcons===!1?"":V9[Q],B=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",z;switch(Q){case"debug":z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:v.gray(J),level:Q}),console.error(z);break;case"info":z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:J,level:Q}),console.warn(z);break;case"success":z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:v.green(J),level:Q}),console.error(z);break;case"warning":z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:J,level:Q}),console.warn(z);break;case"error":if(z=this.formatConsoleMessage({timestamp:$,icon:A,tag:B,message:J,level:Q}),console.error(z),U){let S=U.split(`
42
+ `);for(let R of S)if(R.trim()&&!R.includes(G))console.error(this.formatConsoleMessage({timestamp:$,message:v.gray(` ${R}`),level:Q,showTimestamp:!1}))}break}}else if(!i()){if(console.error(`${_} ${this.environment}.${Q.toUpperCase()}: ${G}`),U)console.error(U)}let W=`${_} ${this.environment}.${Q.toUpperCase()}: ${H}
43
+ `;if(U)W+=`${U}
44
+ `;if(W=W.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(W)}progress(Q,X=""){let Y={update:(U,J)=>{},finish:(U)=>{},interrupt:(U,J)=>{}};if(!this.enabled)return Y;let Z=30;if(this.activeProgressBar={total:Math.max(1,Q||1),current:0,message:X||"",barLength:Z,lastRenderedLine:""},this.shouldStyleConsole()&&!i()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(U,J)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,U),this.activeProgressBar.total),J!==void 0)this.activeProgressBar.message=J;if(this.shouldStyleConsole()&&!i()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(U)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,U)},interrupt:(U,J="info")=>{if(!i()&&x.stdout.isTTY)x.stdout.write(`
45
+ `);if(this[J==="warning"?"warn":J](U),this.activeProgressBar&&this.shouldStyleConsole()&&!i()&&x.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(Q){let X=performance.now();if(this.shouldStyleConsole()){let Y=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",Z=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Z,icon:this.options.showIcons===!1?"":v.blue("\u25D0"),tag:Y,message:`${v.cyan(Q)}...`}))}return async(Y)=>{if(!this.enabled)return;let Z=performance.now(),$=Math.round(Z-X),_=`${Q} completed in ${$}ms`,G=new Date,U=this.formatConsoleTimestamp(G),H=`${this.formatFileTimestamp(G)} ${this.environment}.INFO: ${_}`;if(Y)H+=` ${JSON.stringify(Y)}`;if(H+=`
46
+ `,H=H.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let W=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:U,icon:this.options.showIcons===!1?"":v.green("\u2713"),tag:W,message:`${_}${Y?` ${JSON.stringify(Y)}`:""}`}))}else if(!i())console.error(H.trim());if(this.shouldWriteToFile())await this.writeToFile(H)}}async debug(Q,...X){await this.log("debug",Q,...X)}async info(Q,...X){await this.log("info",Q,...X)}async success(Q,...X){await this.log("success",Q,...X)}async warn(Q,...X){await this.log("warning",Q,...X)}async error(Q,...X){await this.log("error",Q,...X)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let Q=this.config.rotation,{encrypt:X}=Q;return!!X}async only(Q){if(!this.enabled)return;return await Q()}isEnabled(){return this.enabled}setEnabled(Q){this.enabled=Q}extend(Q){let X=`${this.name}:${Q}`,Y=new gX(X,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Y),Y}createReadStream(){if(i())throw Error("createReadStream is not supported in browser environments");if(!BX(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return JZ(this.currentLogFile,{encoding:"utf8"})}async decrypt(Q){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let X=this.config.rotation;if(!X.encrypt||typeof X.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Y=this.keys.get(this.currentKeyId);try{let Z=FQ.isBuffer(Q)?Q:FQ.from(Q,"base64"),$=Z.subarray(0,16),_=Z.subarray(Z.length-16),G=Z.subarray(16,Z.length-16),U=Y8("aes-256-gcm",Y,$);U.setAuthTag(_);let J=U.update(G),H=U.final(),W=J.length+H.length,A=FQ.allocUnsafe(W);return J.copy(A,0),H.copy(A,J.length),A.toString("utf8")}catch(Z){throw Error(`Decryption failed: ${Z instanceof Error?Z.message:String(Z)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return i()}isServerMode(){return!i()}setTestEncryptionKey(Q,X){this.currentKeyId=Q,this.keys.set(Q,X)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(Q){if(!this.enabled)return;let X=new Date,Y=this.formatConsoleTimestamp(X),Z=this.formatFileTimestamp(X),{consoleText:$,fileText:_}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let U=$.split(`
47
+ `),J=Math.max(...U.map((B)=>B.length))+2,H=`\u250C${"\u2500".repeat(J)}\u2510`,W=`\u2514${"\u2500".repeat(J)}\u2518`,A=U.map((B)=>{return this.formatConsoleMessage({timestamp:Y,message:v.cyan(B),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Y,message:v.cyan(H),showTimestamp:!1})),A.forEach((B)=>console.error(B)),console.error(this.formatConsoleMessage({timestamp:Y,message:v.cyan(W),showTimestamp:!1}))}else if(!i())console.error(`${Z} ${this.environment}.INFO: [BOX] ${_}`);let G=`${Z} ${this.environment}.INFO: [BOX] ${_}
48
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(G)}async prompt(Q){if(i())return Promise.resolve(!0);return new Promise((X)=>{console.error(`${v.cyan("?")} ${Q} (y/n) `);let Y=(Z)=>{let $=Z.toString().trim().toLowerCase();x.stdin.removeListener("data",Y);try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!1)}catch{}x.stdin.pause(),console.error(""),X($==="y"||$==="yes")};try{if(typeof x.stdin.setRawMode==="function")x.stdin.setRawMode(!0)}catch{}x.stdin.resume(),x.stdin.once("data",Y)})}setFancy(Q){this.fancy=Q}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(Q,...X){if(!this.enabled)return;let Y=Q;if(X&&X.length>0){let J=/%([sdijfo%])/g,H=0;if(Y=Q.replace(J,(W,A)=>{if(A==="%")return"%";if(H>=X.length)return W;let B=X[H++];switch(A){case"s":return String(B);case"d":case"i":return Number(B).toString();case"j":case"o":return JSON.stringify(B,null,2);default:return W}}),H<X.length)Y+=` ${X.slice(H).map((W)=>typeof W==="object"?JSON.stringify(W,null,2):String(W)).join(" ")}`}let{consoleText:Z,fileText:$}=this.buildOutputTexts(Y);if(this.shouldStyleConsole()){let J=this.options.showTags!==!1&&this.name?v.gray(this.formatTag(this.name)):"",H=this.options.showIcons===!1?"":`${v.blue("\u25D0")} `;console.error(`${H}${J} ${v.cyan(Z)}`)}let U=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${$}
49
+ `.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(U)}renderProgressBar(Q,X=!1){if(!this.enabled||!this.shouldStyleConsole()||!x.stdout.isTTY)return;let Y=Math.min(100,Math.max(0,Math.round(Q.current/Q.total*100))),Z=Math.round(Q.barLength*Y/100),$=Q.barLength-Z,_=v.green("\u2501".repeat(Z)),G=v.gray("\u2501".repeat($)),U=`[${_}${G}]`,J=`${Y}%`.padStart(4),H=Q.message?` ${Q.message}`:"",W=this.options.showIcons===!1?"":X||Y===100?v.green("\u2713"):v.blue("\u25B6"),A=this.options.showTags!==!1&&this.name?` ${v.gray(this.formatTag(this.name))}`:"",B=`\r${W}${A} ${U} ${J}${H}`,z=x.stdout.columns||80,S=" ".repeat(Math.max(0,z-B.replace(this.ANSI_PATTERN,"").length));if(Q.lastRenderedLine=`${B}${S}`,x.stdout.write(Q.lastRenderedLine),X)x.stdout.write(`
50
+ `)}finishProgressBar(Q,X){if(!this.enabled||!this.fancy||i()||!x.stdout.isTTY){this.activeProgressBar=null;return}if(Q.current<Q.total)Q.current=Q.total;if(X)Q.message=X;this.renderProgressBar(Q,!0),this.activeProgressBar=null}async clear(Q={}){if(i()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let X=await qX(this.config.logDirectory),Y=[];for(let Z of X){if(!(Q.name?new RegExp(Q.name.replace("*",".*")).test(Z):Z.startsWith(this.name))||!Z.endsWith(".log"))continue;let _=uQ(this.config.logDirectory,Z);if(Q.before)try{if((await gQ(_)).mtime>=Q.before)continue}catch(G){console.error(`Failed to get stats for file ${_}:`,G);continue}Y.push(_)}if(Y.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Y.length} log file(s)...`);for(let Z of Y)try{await LX(Z),console.warn(`Deleted log file: ${Z}`)}catch($){console.error(`Failed to delete log file ${Z}:`,$)}console.warn("Log clearing process finished.")}catch(X){console.error("Error during log clearing process:",X)}}}var M_=new gX("stacks");class jQ extends Error{timestamp;context;constructor(Q,X={}){super(Q);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=X,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let Q=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([X,Y])=>`${X}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${Q}`}}class tZ extends jQ{code="CONFIG_NOT_FOUND";constructor(Q,X,Y){let Z=Y===void 0?[]:Array.isArray(Y)?Y.filter(Boolean):[Y],$="";if(Z.length===1)$=` or alias "${Z[0]}"`;else if(Z.length>1)$=` or aliases ${Z.map((_)=>`"${_}"`).join(", ")}`;super(`Configuration "${Q}"${$} not found`,{configName:Q,alias:Y,searchPaths:X,searchPathCount:X.length})}}class dX extends jQ{code="CONFIG_LOAD_ERROR";constructor(Q,X,Y){super(`Failed to load configuration from "${Q}": ${X.message}`,{configPath:Q,configName:Y,originalError:X.name,originalMessage:X.message});this.cause=X}}class aZ extends jQ{code="CONFIG_VALIDATION_ERROR";constructor(Q,X,Y){super(`Configuration validation failed for "${Q}"`,{configPath:Q,configName:Y,validationErrors:X,errorCount:X.length})}}class eZ extends jQ{code="CONFIG_MERGE_ERROR";constructor(Q,X,Y,Z){super(`Failed to merge configuration from "${Q}" with "${X}": ${Y.message}`,{sourcePath:Q,targetPath:X,configName:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}}class PY extends jQ{code="ENV_VAR_ERROR";constructor(Q,X,Y,Z){super(`Failed to parse environment variable "${Q}" with value "${X}" as ${Y}`,{envKey:Q,envValue:X,expectedType:Y,configName:Z})}}class Q0 extends jQ{code="FILE_SYSTEM_ERROR";constructor(Q,X,Y){super(`File system ${Q} failed for "${X}": ${Y.message}`,{operation:Q,path:X,originalError:Y.name,originalMessage:Y.message});this.cause=Y}}class X0 extends jQ{code="TYPE_GENERATION_ERROR";constructor(Q,X,Y){super(`Failed to generate types from "${Q}" to "${X}": ${Y.message}`,{configDir:Q,outputPath:X,originalError:Y.name,originalMessage:Y.message});this.cause=Y}}class hX extends jQ{code="SCHEMA_VALIDATION_ERROR";constructor(Q,X,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:Q,configName:Y,validationErrors:X,errorCount:X.length})}}class Y0 extends jQ{code="BROWSER_CONFIG_ERROR";constructor(Q,X,Y,Z){super(`Failed to fetch configuration from "${Q}": ${X} ${Y}`,{endpoint:Q,status:X,statusText:Y,configName:Z})}}class Z0 extends jQ{code="PLUGIN_ERROR";constructor(Q,X,Y){super(`Plugin "${Q}" failed during ${X}: ${Y.message}`,{pluginName:Q,operation:X,originalError:Y.name,originalMessage:Y.message});this.cause=Y}}var iQ={configNotFound(Q,X,Y){return new tZ(Q,X,Y)},configLoad(Q,X,Y){return new dX(Q,X,Y)},configValidation(Q,X,Y){return new aZ(Q,X,Y)},configMerge(Q,X,Y,Z){return new eZ(Q,X,Y,Z)},envVar(Q,X,Y,Z){return new PY(Q,X,Y,Z)},fileSystem(Q,X,Y){return new Q0(Q,X,Y)},typeGeneration(Q,X,Y){return new X0(Q,X,Y)},schemaValidation(Q,X,Y){return new hX(Q,X,Y)},browserConfig(Q,X,Y,Z){return new Y0(Q,X,Y,Z)},plugin(Q,X,Y){return new Z0(Q,X,Y)}};async function E9(Q,X={}){let{maxRetries:Y=3,retryDelay:Z=1000,isRetryable:$=()=>!0,fallback:_}=X,G=Error("Unknown error occurred");for(let U=0;U<=Y;U++)try{return await Q()}catch(J){if(G=J instanceof Error?J:Error(String(J)),U===Y||!$(G))break;if(Z>0)await new Promise((H)=>setTimeout(H,Z))}if(_!==void 0)return _;throw G instanceof Error?G:Error(`Unknown error: ${String(G)}`)}class bY{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(Q,X)=>X==="boolean"||["true","false","1","0","yes","no"].includes(Q.toLowerCase()),parse:(Q)=>{let X=Q.toLowerCase();return["true","1","yes"].includes(X)}},{name:"number",canParse:(Q,X)=>X==="number"||!Number.isNaN(Number(Q))&&!Number.isNaN(Number.parseFloat(Q)),parse:(Q)=>{let X=Number(Q);if(Number.isNaN(X))throw TypeError(`Cannot parse "${Q}" as number`);return X}},{name:"array",canParse:(Q,X)=>X==="array"||Q.startsWith("[")||Q.includes(","),parse:(Q)=>{try{let X=JSON.parse(Q);if(Array.isArray(X))return X}catch{}return Q.split(",").map((X)=>X.trim())}},{name:"json",canParse:(Q,X)=>X==="object"||(Q.startsWith("{")&&Q.endsWith("}")||Q.startsWith("[")&&Q.endsWith("]")),parse:(Q)=>{try{return JSON.parse(Q)}catch(X){throw Error(`Cannot parse "${Q}" as JSON: ${X}`)}}}]}async applyEnvironmentVariables(Q,X,Y={}){let{prefix:Z,useCamelCase:$=!0,useBackwardCompatibility:_=!0,customParsers:G={},verbose:U=!1,trackPerformance:J=!0}=Y,H=async()=>{if(!Q)return{config:X,source:{type:"environment",priority:50,timestamp:new Date}};let W=Z||this.generateEnvPrefix(Q),A={...X};return this.processObject(A,[],W,{useCamelCase:$,useBackwardCompatibility:_,customParsers:G,verbose:U,configName:Q}),{config:A,source:{type:"environment",priority:50,timestamp:new Date}}};if(J)return OY.track("applyEnvironmentVariables",H,{configName:Q});return H()}generateEnvPrefix(Q){return Q.toUpperCase().replace(/-/g,"_")}formatEnvKey(Q,X){if(!X)return Q.toUpperCase();return Q.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(Q,X,Y,Z){for(let[$,_]of Object.entries(Q)){let G=[...X,$],U=G.map((W)=>this.formatEnvKey(W,Z.useCamelCase)),J=`${Y}_${U.join("_")}`,H=Z.useBackwardCompatibility?`${Y}_${G.map((W)=>W.toUpperCase()).join("_")}`:null;if(Z.verbose);if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.processObject(_,G,Y,Z);else{let W=KX.env[J]||(H?KX.env[H]:void 0);if(W!==void 0){if(Z.verbose){let A=KX.env[J]?J:H}try{Q[$]=this.parseEnvironmentValue(W,typeof _,J,Z.customParsers,Z.configName)}catch(A){if(A instanceof PY)throw A;throw iQ.envVar(J,W,typeof _,Z.configName)}}}}}parseEnvironmentValue(Q,X,Y,Z,$){for(let[_,G]of Object.entries(Z))try{return G(Q)}catch{continue}for(let _ of this.defaultParsers)if(_.canParse(Q,X))try{return _.parse(Q)}catch{throw iQ.envVar(Y,Q,`${X} (via ${_.name} parser)`,$)}return Q}getEnvironmentVariables(Q){let X={},Y=Q.toUpperCase();for(let[Z,$]of Object.entries(KX.env))if(Z.startsWith(Y)&&$!==void 0)X[Z]=$;return X}validateEnvironmentVariable(Q,X,Y){let Z=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(Q))Z.push(`Environment variable key "${Q}" should only contain uppercase letters, numbers, and underscores`);if(Y)try{this.parseEnvironmentValue(Q,X,Y,{})}catch($){Z.push(`Cannot parse value "${X}" as ${Y}: ${$}`)}return{isValid:Z.length===0,errors:Z}}generateEnvVarDocs(Q,X,Y={}){let{prefix:Z,format:$="text"}=Y,_=Z||this.generateEnvPrefix(Q),G=[];switch(this.extractEnvVarInfo(X,[],_,G),$){case"markdown":return this.formatAsMarkdown(G,Q);case"json":return JSON.stringify(G,null,2);default:return this.formatAsText(G,Q)}}extractEnvVarInfo(Q,X,Y,Z){for(let[$,_]of Object.entries(Q)){let G=[...X,$],U=`${Y}_${G.map((J)=>this.formatEnvKey(J,!0)).join("_")}`;if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.extractEnvVarInfo(_,G,Y,Z);else Z.push({key:U,type:Array.isArray(_)?"array":typeof _,description:`Configuration for ${G.join(".")}`,example:this.generateExample(_)})}}generateExample(Q){if(Array.isArray(Q))return JSON.stringify(Q);if(typeof Q==="object"&&Q!==null)return JSON.stringify(Q);return String(Q)}formatAsText(Q,X){let Y=`Environment Variables for ${X}:
51
+
52
+ `;for(let Z of Q)Y+=`${Z.key}
53
+ `,Y+=` Type: ${Z.type}
54
+ `,Y+=` Description: ${Z.description}
55
+ `,Y+=` Example: ${Z.example}
56
+
57
+ `;return Y}formatAsMarkdown(Q,X){let Y=`# Environment Variables for ${X}
58
+
59
+ `;Y+=`| Variable | Type | Description | Example |
60
+ `,Y+=`|----------|------|-------------|----------|
61
+ `;for(let Z of Q)Y+=`| \`${Z.key}\` | ${Z.type} | ${Z.description} | \`${Z.example}\` |
62
+ `;return Y}}function O9(Q,X,Y={}){return $0(Q,X,Y,new WeakMap)}function $0(Q,X,Y,Z){let{arrayMergeMode:$="replace",skipNullish:_=!1,customMerger:G}=Y;if(X===null||X===void 0)return _?Q:X;if(G){let U=G(Q,X);if(U!==void 0)return U}if(Array.isArray(X)||Array.isArray(Q))return _0(Q,X,$,Z);if(!qQ(X)||!qQ(Q))return X;return N9(Q,X,Y,Z)}function _0(Q,X,Y,Z){if(Array.isArray(X)&&!Array.isArray(Q))return X;if(Array.isArray(Q)&&!Array.isArray(X))return X;if(Array.isArray(X)&&Array.isArray(Q))switch(Y){case"replace":return X;case"concat":return D9(Q,X);case"smart":return T9(Q,X,Z);default:return X}return X}function D9(Q,X){let Y=[...X];for(let Z of Q)if(!Y.some(($)=>EY($,Z)))Y.push(Z);return Y}function T9(Q,X,Y){if(X.length===0)return Q;if(Q.length===0)return X;if(qQ(X[0])&&qQ(Q[0]))return S9(Q,X,Y);if(X.every((Z)=>typeof Z==="string")&&Q.every((Z)=>typeof Z==="string")){let Z=[...X];for(let $ of Q)if(!Z.includes($))Z.push($);return Z}return X}function S9(Q,X,Y){let Z=[...X];for(let $ of Q){if(!qQ($)){Z.push($);continue}let _=["id","name","key","path","type"],G=!1;for(let U of _)if(U in $){if(Z.find((H)=>qQ(H)&&(U in H)&&H[U]===$[U])){G=!0;break}}if(!G)Z.push($)}return Z}function N9(Q,X,Y,Z){let $=X;if(qQ($)&&Z.has($))return Z.get($);let _={...Q};if(qQ($))Z.set($,_);for(let G in $){if(!Object.prototype.hasOwnProperty.call($,G))continue;let U=$[G],J=_[G];if(Y.skipNullish&&(U===null||U===void 0))continue;if(U===null||U===void 0){_[G]=U;continue}if(qQ(U)&&qQ(J))_[G]=$0(J,U,Y,Z);else if(Array.isArray(U)||Array.isArray(J))_[G]=_0(J,U,Y.arrayMergeMode||"smart",Z);else _[G]=U}return _}function G0(Q,X,Y="replace"){return O9(Q,X,{arrayMergeMode:Y==="replace"?"replace":"smart",skipNullish:!0})}function EY(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(!EY(Q[Y],X[Y]))return!1;return!0}if(qQ(Q)&&qQ(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(!EY(Q[$],X[$]))return!1}return!0}return!1}function qQ(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}class J0{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(Q,X,Y={}){let{arrayStrategy:Z="replace",useCache:$=!0,cacheTtl:_,trackPerformance:G=!0,verbose:U=!1}=Y;if($){let H=NX.getWithFileCheck("file",Q);if(H){if(U)console.log(`Configuration loaded from cache: ${Q}`);return H}}let J=async()=>{if(!jX(Q))return null;try{let H=`?t=${Date.now()}`,W=await import(Q+H),A=W.default||W,B="default"in W,z=Object.keys(W).length>0;if(!B&&!z)throw new dX(Q,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof A!=="object"||A===null||Array.isArray(A))throw new dX(Q,Error("Configuration must export a valid object"),"unknown");let C={config:G0(X,A,Z),source:{type:"file",path:Q,priority:100,timestamp:new Date}};if($)NX.setWithFileCheck("file",C,Q,_);return C}catch(H){throw H instanceof Error?iQ.configLoad(Q,H):iQ.configLoad(Q,Error(String(H)))}};if(G)return OY.track("loadFromPath",J,{path:Q});return J()}async tryLoadFromPaths(Q,X,Y={}){for(let Z of Q)try{let $=await this.loadFromPath(Z,X,Y);if($)return $}catch($){if($ instanceof Error&&$.name==="ConfigLoadError")throw $;if(Y.verbose)console.warn(`Failed to load config from ${Z}:`,$)}return null}generateConfigPaths(Q,X,Y){let Z=this.generateNamePatterns(Q,Y),$=[];for(let _ of Z)for(let G of this.extensions)$.push(GY(X,`${_}${G}`));return $}generateNamePatterns(Q,X){let Y=[];if(Y.push("config",".config"),Q)Y.push(Q,`.${Q}.config`,`${Q}.config`,`.${Q}`);let Z=X===void 0?[]:Array.isArray(X)?X:[X];for(let _ of Z){if(!_)continue;if(Y.push(_,`.${_}.config`,`${_}.config`,`.${_}`),Q)Y.push(`${Q}.${_}.config`,`.${Q}.${_}.config`)}let $=new Set;return Y.filter((_)=>{if(!_||$.has(_))return!1;return $.add(_),!0})}checkFileAccess(Q){return E9(async()=>{return jX(Q)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(Q,X,Y){let Z=[];if(!jX(Q))return Z;if(X||Y){let $=this.generateNamePatterns(X||"",Y);for(let _ of $)for(let G of this.extensions){let U=GY(Q,`${_}${G}`);if(await this.checkFileAccess(U))Z.push(U)}}else try{let{readdirSync:$}=await import("fs"),_=$(Q);for(let G of _)if(this.looksLikeConfigFile(G)){let U=GY(Q,G);if(await this.checkFileAccess(U))Z.push(U)}}catch{return[]}return Z}looksLikeConfigFile(Q){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Y)=>Y.test(Q))}async validateConfigFile(Q){let X=[];try{if(!jX(Q))return X.push("Configuration file does not exist"),X;let Y=await import(Q),Z=Y.default||Y;if(Z===void 0)X.push("Configuration file must export a default value or named exports");else if(typeof Z!=="object"||Z===null)X.push("Configuration must be an object");else if(Array.isArray(Z))X.push("Configuration cannot be an array at the root level");if(Q.endsWith(".json"))try{let{readFileSync:$}=await import("fs"),_=$(Q,"utf8");JSON.parse(_)}catch($){X.push(`Invalid JSON syntax: ${$}`)}}catch(Y){X.push(`Failed to load configuration file: ${Y}`)}return X}async getFileModificationTime(Q){try{let{statSync:X}=await import("fs");return X(Q).mtime}catch{return null}}async preloadConfigurations(Q,X={}){let Y=new Map;return await Promise.allSettled(Q.map(async(Z)=>{try{let $=await this.loadFromPath(Z,{},X);if($)Y.set(Z,$.config)}catch($){if(X.verbose)console.warn(`Failed to preload ${Z}:`,$)}})),Y}}var C9=/^https?:\/\//;class U0{async validateConfiguration(Q,X,Y={}){let{stopOnFirstError:Z=!1,validateRequired:$=!0,validateTypes:_=!0,customRules:G=[],trackPerformance:U=!0,verbose:J=!1}=Y,H=async()=>{let W=[],A=[],B={stopOnFirstError:Z,validateRequired:$,validateTypes:_,customRules:G,trackPerformance:U,verbose:J};try{if(typeof X==="string")return await this.validateWithSchemaFile(Q,X,B);else if(Array.isArray(X))return this.validateWithRules(Q,[...X,...G],B);else return this.validateWithJSONSchema(Q,X,B)}catch(z){return W.push({path:"",message:`Validation failed: ${z}`,rule:"system"}),{isValid:!1,errors:W,warnings:A}}};if(U)return await OY.track("validateConfiguration",H);return H()}async validateWithSchemaFile(Q,X,Y){try{if(!W8(X))throw new hX(X,[{path:"",message:"Schema file does not exist"}]);let Z=await import(X),$=Z.default||Z;if(Array.isArray($))return this.validateWithRules(Q,$,Y);else return this.validateWithJSONSchema(Q,$,Y)}catch(Z){throw new hX(X,[{path:"",message:`Failed to load schema: ${Z}`}])}}validateWithJSONSchema(Q,X,Y){let Z=[],$=[];return this.validateObjectAgainstSchema(Q,X,"",Z,$,Y),{isValid:Z.length===0,errors:Z,warnings:$}}validateObjectAgainstSchema(Q,X,Y,Z,$,_){if(_.validateTypes&&X.type){let G=Array.isArray(Q)?"array":typeof Q,U=Array.isArray(X.type)?X.type:[X.type];if(!U.includes(G)){if(Z.push({path:Y,message:`Expected type ${U.join(" or ")}, got ${G}`,expected:U.join(" or "),actual:G,rule:"type"}),_.stopOnFirstError)return}}if(X.enum&&!X.enum.includes(Q)){if(Z.push({path:Y,message:`Value must be one of: ${X.enum.join(", ")}`,expected:X.enum.join(", "),actual:Q,rule:"enum"}),_.stopOnFirstError)return}if(typeof Q==="string"){if(X.minLength!==void 0&&Q.length<X.minLength)Z.push({path:Y,message:`String length must be at least ${X.minLength}`,expected:`>= ${X.minLength}`,actual:Q.length,rule:"minLength"});if(X.maxLength!==void 0&&Q.length>X.maxLength)Z.push({path:Y,message:`String length must not exceed ${X.maxLength}`,expected:`<= ${X.maxLength}`,actual:Q.length,rule:"maxLength"});if(X.pattern){if(!new RegExp(X.pattern).test(Q))Z.push({path:Y,message:`String does not match pattern ${X.pattern}`,expected:X.pattern,actual:Q,rule:"pattern"})}}if(typeof Q==="number"){if(X.minimum!==void 0&&Q<X.minimum)Z.push({path:Y,message:`Value must be at least ${X.minimum}`,expected:`>= ${X.minimum}`,actual:Q,rule:"minimum"});if(X.maximum!==void 0&&Q>X.maximum)Z.push({path:Y,message:`Value must not exceed ${X.maximum}`,expected:`<= ${X.maximum}`,actual:Q,rule:"maximum"})}if(Array.isArray(Q)&&X.items)for(let G=0;G<Q.length;G++){let U=Y?`${Y}[${G}]`:`[${G}]`;if(this.validateObjectAgainstSchema(Q[G],X.items,U,Z,$,_),_.stopOnFirstError&&Z.length>0)return}if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let G=Q;if(_.validateRequired&&X.required){for(let U of X.required)if(!(U in G)){if(Z.push({path:Y?`${Y}.${U}`:U,message:`Missing required property '${U}'`,expected:"required",rule:"required"}),_.stopOnFirstError)return}}if(X.properties){for(let[U,J]of Object.entries(X.properties))if(U in G){let H=Y?`${Y}.${U}`:U;if(this.validateObjectAgainstSchema(G[U],J,H,Z,$,_),_.stopOnFirstError&&Z.length>0)return}}if(X.additionalProperties===!1){let U=new Set(Object.keys(X.properties||{}));for(let J of Object.keys(G))if(!U.has(J))$.push({path:Y?`${Y}.${J}`:J,message:`Additional property '${J}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(Q,X,Y){let Z=[],$=[];for(let _ of X)try{let G=this.getValueByPath(Q,_.path),U=this.validateWithRule(G,_,_.path);if(Z.push(...U),Y.stopOnFirstError&&Z.length>0)break}catch(G){Z.push({path:_.path,message:`Rule validation failed: ${G}`,rule:"system"})}return{isValid:Z.length===0,errors:Z,warnings:$}}validateWithRule(Q,X,Y){let Z=[];if(X.required&&(Q===void 0||Q===null))return Z.push({path:Y,message:X.message||`Property '${Y}' is required`,expected:"required",rule:"required"}),Z;if(Q===void 0||Q===null)return Z;if(X.type){let $=Array.isArray(Q)?"array":typeof Q;if($!==X.type)Z.push({path:Y,message:X.message||`Expected type ${X.type}, got ${$}`,expected:X.type,actual:$,rule:"type"})}if(X.min!==void 0){let $=Array.isArray(Q)?Q.length:typeof Q==="string"?Q.length:typeof Q==="number"?Q:0;if($<X.min)Z.push({path:Y,message:X.message||`Value must be at least ${X.min}`,expected:`>= ${X.min}`,actual:$,rule:"min"})}if(X.max!==void 0){let $=Array.isArray(Q)?Q.length:typeof Q==="string"?Q.length:typeof Q==="number"?Q:0;if($>X.max)Z.push({path:Y,message:X.message||`Value must not exceed ${X.max}`,expected:`<= ${X.max}`,actual:$,rule:"max"})}if(X.pattern&&typeof Q==="string"){if(!X.pattern.test(Q))Z.push({path:Y,message:X.message||`Value does not match pattern ${X.pattern}`,expected:X.pattern.toString(),actual:Q,rule:"pattern"})}if(X.enum&&!X.enum.includes(Q))Z.push({path:Y,message:X.message||`Value must be one of: ${X.enum.join(", ")}`,expected:X.enum.join(", "),actual:Q,rule:"enum"});if(X.validator){let $=X.validator(Q);if($)Z.push({path:Y,message:X.message||$,rule:"custom"})}return Z}getValueByPath(Q,X){if(!X)return Q;let Y=X.split("."),Z=Q;for(let $ of Y)if(Z&&typeof Z==="object"&&$ in Z)Z=Z[$];else return;return Z}generateRulesFromInterface(Q){let X=[],Y=Q.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Z of Y){let[,$,_,G]=Z;X.push({path:$,required:!_,type:this.mapTypeScriptType(G)})}return X}mapTypeScriptType(Q){switch(Q.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:C9},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}var RQ=new gX("bunfig",{showTags:!0});function k9(Q){if(!Q)return"";let X=Array.isArray(Q)?Q.filter(Boolean):[Q];if(X.length===0)return"";if(X.length===1)return` or alias "${X[0]}"`;return` or aliases ${X.map((Y)=>`"${Y}"`).join(", ")}`}class H0{fileLoader=new J0;envProcessor=new bY;validator=new U0;async loadConfig(Q){let X=Date.now(),{cache:Y,performance:Z,schema:$,validate:_,...G}=Q;try{if(Y?.enabled){let J=this.checkCache(G.name||"",G);if(J)return J}let U;try{U=await this.loadConfigurationStrategies(G,!0,Y)}catch(J){let H=G.__strictErrorHandling;if(J instanceof Error&&J.name==="ConfigNotFoundError"){if(H)throw J;U={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`No configuration file found for "${G.name||"config"}", using defaults with environment variables`]}}else if(J instanceof Error&&J.name==="ConfigLoadError"){let W=J.message.includes("EACCES")||J.message.includes("EPERM")||J.message.includes("permission denied"),A=!W&&(J.message.includes("syntax")||J.message.includes("Expected")||J.message.includes("Unexpected")||J.message.includes("BuildMessage")||J.message.includes("errors building")),B=J.message.includes("Configuration must export a valid object")||J.message.includes("Configuration file is empty and exports nothing");if(H&&(B||W))throw J;if(A&&(!H||!B))U={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!H)U={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`Configuration loading error, using defaults: ${J.message}`]};else throw J}else U={...await this.applyEnvironmentVariables(G.name||"",G.defaultConfig,G.checkEnv!==!1,G.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${J instanceof Error?J.message:String(J)}`]}}if($||_)await this.validateConfiguration(U.config,$,_,G.name);if(Y?.enabled&&U)this.cacheResult(G.name||"",U,Y,G);if(Z?.enabled){let J={operation:"loadConfig",duration:Date.now()-X,configName:G.name,timestamp:new Date};if(Z.onMetrics)Z.onMetrics(J);if(Z.slowThreshold&&J.duration>Z.slowThreshold)RQ.warn(`Slow configuration loading detected: ${J.duration}ms for ${G.name}`);U.metrics=J}return U}catch(U){if(U instanceof Error&&U.name==="ConfigNotFoundError")throw U;let J=Date.now()-X;throw RQ.error(`Configuration loading failed after ${J}ms:`,[U instanceof Error?U:Error(String(U))]),U}}async loadConfigurationStrategies(Q,X=!1,Y){let{name:Z="",alias:$,cwd:_,configDir:G,defaultConfig:U,checkEnv:J=!0,arrayStrategy:H="replace",verbose:W=!1}=Q,A=_||fX.cwd(),B=[],z=await this.loadLocalConfiguration(Z,$,A,G,U,H,W,J,Y);if(z)return B.push(...this.getLocalSearchPaths(Z,$,A,G)),this.finalizeResult(z,B,J,Z,W);let S=await this.loadHomeConfiguration(Z,$,U,H,W,J);if(S)return B.push(...this.getHomeSearchPaths(Z,$)),this.finalizeResult(S,B,J,Z,W);let R=await this.loadPackageJsonConfiguration(Z,$,A,U,H,W,J);if(R)return B.push(zQ(A,"package.json")),this.finalizeResult(R,B,J,Z,W);if(B.push(...this.getAllSearchPaths(Z,$,A,G)),X)throw iQ.configNotFound(Z,B,$);return{...await this.applyEnvironmentVariables(Z,U,J,W),warnings:[`No configuration file found for "${Z}"${k9($)}, using defaults with environment variables`]}}async loadLocalConfiguration(Q,X,Y,Z,$,_,G,U,J){let H=U?RX(Q,$,G):$,W=this.getLocalDirectories(Y,Z);for(let A of W){if(G)RQ.info(`Searching for configuration in: ${A}`);let B=this.fileLoader.generateConfigPaths(Q,A,X),z=await this.fileLoader.tryLoadFromPaths(B,H,{arrayStrategy:_,verbose:G,cacheTtl:J?.ttl,useCache:!J?.ttl||J.ttl>100});if(z){if(G)RQ.success(`Configuration loaded from: ${z.source.path}`);return z}}return null}async loadHomeConfiguration(Q,X,Y,Z,$,_){if(!Q)return null;let G=_?RX(Q,Y,$):Y,U=[zQ(bQ(),".config",Q),zQ(bQ(),".config"),bQ()];for(let J of U){if($)RQ.info(`Checking home directory: ${J}`);let H=this.fileLoader.generateConfigPaths(Q,J,X),W=await this.fileLoader.tryLoadFromPaths(H,G,{arrayStrategy:Z,verbose:$});if(W){if($)RQ.success(`Configuration loaded from home directory: ${W.source.path}`);return W}}return null}async loadPackageJsonConfiguration(Q,X,Y,Z,$,_,G){let U=G?RX(Q,Z,_):Z;try{let J=zQ(Y,"package.json");if(!E0(J))return null;let H={};try{H=JSON.parse(O0(J,"utf8"))}catch(B){if(_)RQ.warn("Failed to parse package.json:",[B instanceof Error?B:Error(String(B))]);return null}let W=H[Q],A=Q;if(!W&&X){let B=Array.isArray(X)?X:[X];for(let z of B){if(!z)continue;if(H[z]){W=H[z],A=z;break}}}if(W&&typeof W==="object"&&!Array.isArray(W)){if(_)RQ.success(`Configuration loaded from package.json: ${A}`);return{config:G0(U,W,$),source:{type:"package.json",path:J,priority:30,timestamp:new Date}}}}catch(J){if(_)RQ.warn("Failed to load package.json:",[J instanceof Error?J:Error(String(J))])}return null}async applyEnvironmentVariables(Q,X,Y,Z){if(!Y||!Q||typeof X!=="object"||X===null||Array.isArray(X))return{config:X,source:{type:"default",priority:10,timestamp:new Date}};return{config:RX(Q,X,Z),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(Q,X,Y,Z,$){return{config:Q.config,source:Q.source,path:Q.source.path}}async validateConfiguration(Q,X,Y,Z){let $=[];if(Y){let _=Y(Q);if(_)$.push(..._)}if(X){let _=await this.validator.validateConfiguration(Q,X);if(!_.isValid)$.push(..._.errors.map((G)=>G.path?`${G.path}: ${G.message}`:G.message))}if($.length>0)throw iQ.configValidation(Z||"unknown",$,Z)}checkCache(Q,X){let Y=this.generateCacheKey(Q,X);return NX.get(Y)||null}cacheResult(Q,X,Y,Z){let $=this.generateCacheKey(Q,Z);NX.set($,X,void 0,Y.ttl)}generateCacheKey(Q,X){let Y=[Q];if(X.alias){let Z=Array.isArray(X.alias)?X.alias.join(","):X.alias;Y.push(`alias:${Z}`)}if(X.cwd)Y.push(`cwd:${X.cwd}`);if(X.configDir)Y.push(`configDir:${X.configDir}`);if("checkEnv"in X)Y.push(`checkEnv:${X.checkEnv}`);return Y.join("|")}getLocalDirectories(Q,X){return Array.from(new Set([Q,zQ(Q,"config"),zQ(Q,".config"),X?zQ(Q,X):void 0].filter(Boolean)))}getAllSearchPaths(Q,X,Y,Z){let $=[];return $.push(...this.getLocalSearchPaths(Q,X,Y,Z)),$.push(...this.getHomeSearchPaths(Q,X)),$.push(zQ(Y,"package.json")),$}getLocalSearchPaths(Q,X,Y,Z){let $=this.getLocalDirectories(Y,Z),_=[];for(let G of $)_.push(...this.fileLoader.generateConfigPaths(Q,G,X));return _}getHomeSearchPaths(Q,X){if(!Q)return[];let Y=[zQ(bQ(),".config",Q),zQ(bQ(),".config"),bQ()],Z=[];for(let $ of Y)Z.push(...this.fileLoader.generateConfigPaths(Q,$,X));return Z}async loadConfigWithResult(Q){return this.loadConfig(Q)}}var zY=new H0;async function DZ(Q){let X="defaultConfig"in Q&&Q.defaultConfig!==void 0?Q.defaultConfig:{},Y="cache"in Q||"performance"in Q||"schema"in Q||"validate"in Q;try{let Z;if(Y)Z=await zY.loadConfig(Q);else Z=await zY.loadConfig({...Q,defaultConfig:X,cache:{enabled:!0},performance:{enabled:!1}});return Z?.config??X}catch(Z){let $=Z instanceof Error?Z.name:"UnknownError",_=Z instanceof Error?Z.message:String(Z);if(!($==="ConfigNotFoundError"||$==="ConfigLoadError"||$==="ConfigValidationError"||_.includes("config"))&&Q.verbose)RQ.warn("Unexpected error loading config, using defaults:",[Z instanceof Error?Z:Error(String(Z))]);let U=Y?{...Q,defaultConfig:X}:{...Q,defaultConfig:X,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in Q?Q.checkEnv!==!1:!0)return(await zY.applyEnvironmentVariables(U.name||"",X,!0,U.verbose||!1))?.config??X;return X}}function RX(Q,X,Y=!1){let Z=new bY,$=Q.toUpperCase().replace(/[^A-Z0-9]/g,"_");function _(G,U=[]){let J={...G};for(let[H,W]of Object.entries(G)){let A=[...U,H],B=[`${$}_${A.join("_").toUpperCase()}`,`${$}_${A.map((R)=>R.toUpperCase()).join("")}`,`${$}_${A.map((R)=>R.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],z,S;for(let R of B)if(z=fX.env[R],z!==void 0){S=R;break}if(z!==void 0&&S)if(typeof W==="boolean")J[H]=["true","1","yes"].includes(z.toLowerCase());else if(typeof W==="number"){let R=Number(z);if(!Number.isNaN(R))J[H]=R}else if(Array.isArray(W))try{J[H]=JSON.parse(z)}catch{J[H]=z.split(",").map((R)=>R.trim())}else J[H]=z;else if(W&&typeof W==="object"&&!Array.isArray(W))J[H]=_(W,A)}return J}return _(X)}var V_=zQ(fX.cwd(),"config"),E_=zQ(fX.cwd(),"src/generated"),x9=import("@stacksjs/stx"),lQ={partialsDir:"partials",componentsDir:"components",layoutsDir:"layouts",publicDir:"public",ssr:!0,defaultTitle:"stx App"},TZ={css:"text/css",js:"application/javascript",mjs:"application/javascript",json:"application/json",html:"text/html; charset=utf-8",txt:"text/plain",xml:"application/xml",pdf:"application/pdf",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",avif:"image/avif",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp",mp4:"video/mp4",webm:"video/webm",ogg:"audio/ogg",mp3:"audio/mpeg",wav:"audio/wav",woff:"font/woff",woff2:"font/woff2",ttf:"font/ttf",otf:"font/otf",eot:"application/vnd.ms-fontobject"};async function O_(Q){let X=await DZ({name:"stx",cwd:AQ.cwd(),defaultConfig:lQ}),Y=Q.componentsDir??X.componentsDir??lQ.componentsDir,Z=Q.layoutsDir??X.layoutsDir??lQ.layoutsDir,$=Q.partialsDir??X.partialsDir??lQ.partialsDir,_=Q.publicDir??X.publicDir??"public",G=Q.stxModule?Promise.resolve(Q.stxModule):x9,{patterns:U,port:J=3456}=Q;if(U.length===0)throw console.error("Usage: serve <files...> [--port 3000]"),console.error(`
63
+ 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(`
64
+ After installing: bun add bun-plugin-stx`),Error("No file patterns provided");let H=new Map,W=null,A=!1,B=new Set,z=(L)=>{if(B.has(L))return;try{V0(L,{recursive:!0},(q,j)=>{if(!j)return;let M=String(j);if(!M.endsWith(".stx")&&!M.endsWith(".md")&&!M.endsWith(".html"))return;W=null,H.clear()}).on("error",()=>{}),B.add(L)}catch{}},S=new Map,R=[];function C(L){let K=[],q=L.split("/").map((j)=>{if(!j)return"";let M=j.match(/^\[\.\.\.(.+)\]$/);if(M)return K.push(M[1]),"(.+)";let I=j.match(/^\[(.+)\]$/);if(I)return K.push(I[1]),"([^/]+)";return j.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("/");return{re:new RegExp(`^${q}/?$`),names:K}}function s(L){let K=L;for(let q of U){let j=q.replace(/\/$/,"");if(K.startsWith(`${j}/`)){K=K.slice(j.length+1);break}}if(K=K.replace(/\.(stx|md|html)$/,""),K==="index"||K.endsWith("/index"))K=K.replace(/\/?index$/,"");return K.startsWith("/")?K:`/${K}`}async function o(L){try{let q=(await CQ.readFile(L,"utf-8")).match(/definePageMeta\s*\(\s*\{[\s\S]*?\}\s*\)/);if(!q)return;let j=q[0].match(/middleware\s*:\s*(\[[^\]]*\]|['"][^'"]+['"])/);if(!j)return;let M=j[1].startsWith("[")?Array.from(j[1].matchAll(/['"]([^'"]+)['"]/g)).map((V)=>V[1]):[j[1].replace(/['"]/g,"")];if(M.length===0)return;let I=s(L);if(I.includes("[")){let{re:V,names:T}=C(I);R.push({re:V,names:T,middleware:M})}else S.set(I,M)}catch{}}function LQ(L){let K=S.get(L);if(K)return{names:K,params:{}};let q=L.replace(/\/$/,"");if(q!==L){let j=S.get(q);if(j)return{names:j,params:{}}}for(let j of R){let M=j.re.exec(L);if(M){let I={};return j.names.forEach((V,T)=>{I[V]=decodeURIComponent(M[T+1]??"")}),{names:j.middleware,params:I}}}return{names:[],params:{}}}function UQ(L){let K={},q=L.headers.get("cookie")||"";if(!q)return K;for(let j of q.split(/;\s*/)){let M=j.indexOf("=");if(M===-1)continue;let I=j.slice(0,M);if(!I)continue;try{K[I]=decodeURIComponent(j.slice(M+1))}catch{K[I]=j.slice(M+1)}}return K}function HQ(L,K,q=""){let j=L.includes("?")?"&":"?",M=encodeURIComponent(K+q);return Response.redirect(`${L}${j}next=${M}`,302)}let DQ=Q.auth===!1?null:Q.auth??{},yY=DQ?.cookieName??"auth-token",W0=DQ?.redirectTo??"/login",A0=DQ?.home??"/",z0=DQ?.protectedPaths??[],B0={...DQ===null?{}:{auth:(L,K)=>{if(!K.cookies[yY])return K.redirect(W0);return null},guest:(L,K)=>{if(K.cookies[yY])return Response.redirect(A0,302);return null}},...Q.middleware??{}};function q0(L){let K=[],q=Q.middlewareGroups??{},j=new Set,M=(I)=>{if(j.has(I))return;j.add(I);let V=q[I];if(V)V.forEach(M);else K.push(I)};return L.forEach(M),K}let L0=Q.globalMiddleware??[];async function uX(){if(W!==null)return W;let L=[],K=[".stx",".md",".html"];for(let q of U)try{if((await CQ.stat(q).catch(()=>null))?.isDirectory()){z(q);let M=["layouts","components","partials"];if(Z)M.push(Z.replace(/^.*\//,""));if(Y)M.push(Y.replace(/^.*\//,""));if($)M.push($.replace(/^.*\//,""));for(let I of[".stx",".md",".html"]){let V=new fY(`**/*${I}`),T=await Array.fromAsync(V.scan({cwd:q,followSymlinks:!0}));L.push(...T.filter((y)=>!M.some((u)=>y.startsWith(`${u}/`))).map((y)=>`${q}/${y}`.replace(/\/+/g,"/")))}}else if(q.includes("*")){let M=new fY(q),I=q.split("*")[0].replace(/\/$/,""),V=await Array.fromAsync(M.scan({cwd:I||".",followSymlinks:!0}));L.push(...V.map((T)=>I?`${I}/${T}`:T))}else if(K.some((M)=>q.endsWith(M)))L.push(q)}catch(j){console.error(`Error processing pattern "${q}":`,j)}W=L,S.clear(),R.length=0,await Promise.all(L.map((q)=>o(q)));try{let{Router:q}=await import("./chunk-7bpdkc40.js"),j=U[0]?.replace(/\/$/,"")||"pages",M=new q(AQ.cwd(),{pagesDir:j});console.log(`[stx] Generated ${M.routes.length} routes \u2192 .stx/routes.ts`)}catch(q){}return L}async function K0(){if(A)return;A=!0;let L="./resources/assets",K="./.stx/assets";try{if(await CQ.stat(L).then(()=>!0).catch(()=>!1))await CQ.rm(K,{recursive:!0,force:!0}),await CQ.cp(L,K,{recursive:!0})}catch{}}let vY=new Map;async function j0(L){for(let[K,q]of L){let j=await CQ.stat(K).catch(()=>null);if(!j||j.mtimeMs!==q)return!1}return!0}async function w0(L,K){let q=new Map,j=[L,...K],M=await Promise.all(j.map((I)=>CQ.stat(I).catch(()=>null)));for(let I=0;I<j.length;I++){let V=M[I];if(V)q.set(j[I],V.mtimeMs)}return q}let sQ=null,dY=!1,cX=null,hY=new Map;async function R0(){if(dY)return sQ;dY=!0;try{let L=await import("./chunk-67y94dzt.js");return sQ={CSSGenerator:L.CSSGenerator,config:L.config},sQ}catch{try{let K=await import(wQ.join(AQ.env.HOME||"","Code/Tools/crosswind/packages/crosswind/src/index.ts"));return sQ={CSSGenerator:K.CSSGenerator,config:K.config},sQ}catch{return null}}}async function b9(L){try{let K=await R0();if(!K)return"";let q=/class\s*=\s*["']([^"']+)["']/gi,j=new Set,M=q.exec(L);while(M!==null){for(let w of M[1].split(/\s+/))if(w.trim())j.add(w.trim());M=q.exec(L)}let I=/(?:x-class|:class)\s*=\s*"([^"]+)"/gi,V=I.exec(L);while(V!==null){let w=V[1].match(/'([^']+)'/g);if(w)for(let p of w){let m=p.slice(1,-1);for(let O of m.split(/\s+/))if(O.trim())j.add(O.trim())}V=I.exec(L)}if(j.size===0)return"";if(!cX)cX=DZ({name:"crosswind",cwd:AQ.cwd(),defaultConfig:{}});let T=await cX;if(T.safelist)for(let w of T.safelist)j.add(w);let y=[...j].sort().join(" "),u=hY.get(y);if(u!==void 0)return u;let c={...K.config,preflight:!0,minify:!1};if(T.shortcuts)c.shortcuts={...c.shortcuts||{},...T.shortcuts};if(T.theme)c.theme={...c.theme||{},...T.theme};let F=new K.CSSGenerator(c);for(let w of j)F.generate(w);let E="",P=c.shortcuts||{};for(let[w,p]of Object.entries(P)){if(!j.has(w))continue;let m=p.split(/\s+/).filter(Boolean);for(let O of m)F.generate(O)}let N=F.toCSS(!0,!1);for(let[w,p]of Object.entries(P)){if(!j.has(w))continue;let m=p.split(/\s+/).filter(Boolean),O=[],_Q=[];for(let XQ of m){let xQ=XQ.startsWith("dark:"),oQ=(xQ?XQ.slice(5):XQ).replace(/[/:.[\]%()]/g,(TQ)=>`\\${TQ}`),r=new RegExp(`\\.${oQ}\\s*\\{([^}]+)\\}`),GQ=N.match(r);if(GQ)if(xQ)_Q.push(GQ[1].trim());else O.push(GQ[1].trim())}if(O.length)E+=`.${w} { ${O.join(" ")} }
65
+ `;if(_Q.length)E+=`@media (prefers-color-scheme: dark) { .dark .${w} { ${_Q.join(" ")} } }
66
+ `}let D=N+E;return hY.set(y,D),D}catch(K){return console.warn("Failed to generate Crosswind CSS:",K),""}}async function lX(L){let K=vY.get(L);if(K&&await j0(K.signature))return K.html;let q=await Bun.file(L).text(),j=/<script\b([^>]*)\bserver\b[^>]*>([\s\S]*?)<\/script>/gi,M=[],I;while((I=j.exec(q))!==null)M.push(I[2]);let V=q.replace(/<script\b[^>]*\bserver\b[^>]*>[\s\S]*?<\/script>/gi,""),T={__filename:L,__dirname:wQ.dirname(L)},{processDirectives:y,extractVariables:u,defaultConfig:c,generateSpaShell:F,injectRouterScript:E,resetHead:P}=await G;P();for(let O of M)await u(O,T,L);T.__stx_head_preset=!0;let N={...c,...Y&&{componentsDir:Y},...Z&&{layoutsDir:Z},...$&&{partialsDir:$},autoShell:!0,ssr:X.ssr??lQ.ssr??!0,app:X.app||{},..."strict"in X&&{strict:X.strict},..."router"in X&&{router:X.router},..."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}};if(N.ssr===!1||X.ssr===!1)return F({template:V,context:T,title:X.defaultTitle??"stx App"});let D=V,w=new Set;D=await y(D,T,L,N,w),D=await E(D);let p=/@for|:for|@if|:if|x-for|x-if/;if(/<template\s[^>]*(?:@for|:for|@if|:if|x-for|x-if)/.test(D))D=D.replace(/<template(?:\s[^>]*)?>|<\/template>/gi,(O)=>{if(p.test(O))return O;if(O==="</template>")return O;return""});else D=D.replace(/<template[^>]*>/gi,"").replace(/<\/template>/gi,"");if(!T.__stx_skip_cache){let O=await w0(L,w);vY.set(L,{html:D,signature:O})}return D}async function YX(L){let K=await uX(),q=L.startsWith("/")?L.slice(1):L,j=[];for(let I of[".stx",".md",".html",""]){let V=q.endsWith(I)?q:`${q}${I}`;j.push(V)}if(q==="")j.push("index.stx"),j.push("index.md"),j.push("index.html");else j.push(`${q}/index.stx`),j.push(`${q}/index.md`),j.push(`${q}/index.html`);let M=wQ.basename(q,wQ.extname(q));if(M&&!q.includes("/"))j.push(`${M}.stx`),j.push(`${M}.md`),j.push(`${M}.html`);for(let I of j)for(let V of K){let T=V.replace(/^\.\//,"").replace(/\\/g,"/"),y=T;for(let u of U){let c=u.replace(/\\/g,"/").replace(/\/$/,"");if(T.startsWith(`${c}/`)){y=T.slice(c.length+1);break}}if(T===I||y===I)return await lX(V)}for(let I of K){let V=I.replace(/^\.\//,"").replace(/\\/g,"/"),T=V;for(let F of U){let E=F.replace(/\\/g,"/").replace(/\/$/,"");if(V.startsWith(`${E}/`)){T=V.slice(E.length+1);break}}let y=T.replace(/\.(stx|md|html)$/,""),u=y==="index"||y.endsWith("/index"),c=L==="/"||q==="";if(`/${y}`===L||y===q||`/${y}.stx`===L||`/${y}.md`===L||`/${y}.html`===L||u&&c){let F=await lX(I);return H.set(L,F),F}if(y.startsWith("pages/")){let F=y.slice(6);if(`/${F}`===L||F===q){let E=await lX(I);return H.set(L,E),E}}}for(let I of K){let V=I.replace(/^\.\//,"").replace(/\\/g,"/");if(!V.includes("["))continue;let T=V;for(let F of U){let E=F.replace(/\\/g,"/").replace(/\/$/,"");if(V.startsWith(`${E}/`)){T=V.slice(E.length+1);break}}let y=T.replace(/\.(stx|md|html)$/,""),u=y.replace(/\[([^\]]+)\]/g,"([^/]+)").replace(/\//g,"\\/"),c=[new RegExp(`^${u}$`)];if(y.startsWith("pages/")){let F=y.slice(6).replace(/\[([^\]]+)\]/g,"([^/]+)").replace(/\//g,"\\/");c.push(new RegExp(`^${F}$`))}for(let F of c){let E=q.match(F);if(E){let P=[...y.matchAll(/\[([^\]]+)\]/g)].map((w)=>w[1]),N=E.slice(1),D=await I0(I,P,N,q);return H.set(L,D),D}}}return null}async function I0(L,K,q,j){let M=await Bun.file(L).text(),I=/<script\b([^>]*)\bserver\b[^>]*>([\s\S]*?)<\/script>/gi,V=[],T;while((T=I.exec(M))!==null)V.push(T[2]);let y=M.replace(/<script\b[^>]*\bserver\b[^>]*>[\s\S]*?<\/script>/gi,""),u={__filename:L,__dirname:wQ.dirname(L),__route:j};for(let O=0;O<K.length;O++)u[K[O]]=q[O];let{processDirectives:c,extractVariables:F,defaultConfig:E,injectRouterScript:P,resetHead:N}=await G;N();for(let O of V)await F(O,u,L);u.__stx_head_preset=!0;let D={...E,...Y&&{componentsDir:Y},...Z&&{layoutsDir:Z},...$&&{partialsDir:$},autoShell:!0,ssr:X.ssr??lQ.ssr??!0,app:X.app||{},..."strict"in X&&{strict:X.strict},..."router"in X&&{router:X.router},..."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}},w=y;if(w=await c(w,u,L,D,new Set),K.length>0){let O={};for(let XQ=0;XQ<K.length;XQ++)O[K[XQ]]=q[XQ];let _Q=`<script>if(window.stx)window.stx._rp=${JSON.stringify(O)};else window.__stx_rp=${JSON.stringify(O)};</script>`;if(w.includes("</head>"))w=w.replace("</head>",`${_Q}
67
+ </head>`);else w=`${_Q}
68
+ ${w}`}w=await P(w);let m=/@for|:for|@if|:if|x-for|x-if/;return w=w.replace(/<template(?:\s[^>]*)?>|<\/template>/gi,(O)=>{if(m.test(O))return O;if(O==="</template>")return O;return""}),w}let F0=performance.now();await uX();let WQ={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},y9=M0({port:J,async fetch(L){let K=new URL(L.url),q=K.pathname;if(L.method==="OPTIONS")return new Response(null,{headers:WQ});if(Q.onRequest){let F=await Q.onRequest(L);if(F)return F}let j=LQ(q),M=z0.some((F)=>q===F||q.startsWith(F.endsWith("/")?F:`${F}/`))?["auth"]:[],I=[...L0,...j.names,...M];if(I.length>0){let F=q0(I),E=UQ(L),P={path:q,url:K,params:j.params,cookies:E,redirect:(N,D=302)=>{let w=N.includes("?")?"&":"?",p=encodeURIComponent(q+(K.search||""));return new Response(null,{status:D,headers:{Location:`${N}${w}next=${p}`}})}};for(let N of F){let D=N.indexOf(":"),w=D===-1?N:N.slice(0,D),p=D===-1?[]:N.slice(D+1).split(","),m=B0[w];if(!m){console.warn(`[stx serve] unknown middleware "${w}" on ${q}`);continue}let O=await m(L,P,...p);if(O instanceof Response)return O}}if(Q.routes){let F=Q.routes[q];if(F)return F(L)}if(q.startsWith("/_stx/component/")){let F=decodeURIComponent(q.slice(16));if(F)try{let{processDirectives:E,defaultConfig:P}=await G,N=`<${F} />`,D={...P,...Y&&{componentsDir:Y},...Z&&{layoutsDir:Z},...$&&{partialsDir:$},autoShell:!1},w=await E(N,{},`${Y}/${F}.stx`,D,new Set);return new Response(w,{headers:{"Content-Type":"text/html; charset=utf-8",...WQ}})}catch(E){return new Response(`<div class="stx-async-error">${E.message}</div>`,{status:500,headers:{"Content-Type":"text/html; charset=utf-8",...WQ}})}}if(q.startsWith("/api/data/")&&L.method==="POST")try{let F=q.replace("/api/data/","").split("/")[0];if(!F)return new Response(JSON.stringify({error:"Table name required"}),{status:400,headers:{"Content-Type":"application/json",...WQ}});if(!/^[a-zA-Z_]\w*$/.test(F))return new Response(JSON.stringify({error:"Invalid table name"}),{status:400,headers:{"Content-Type":"application/json",...WQ}});let E=await L.json(),{Database:P}=await import("bun:sqlite"),N=wQ.resolve(AQ.cwd(),"database/stacks.sqlite"),D=new P(N);try{let w=D.query(`PRAGMA table_info("${F}")`).all(),p=w.map((r)=>r.name).filter((r)=>r!=="id"&&r!=="created_at"&&r!=="updated_at"),m=[],O=[],_Q=[];for(let r of p)if(E[r]!==void 0&&E[r]!=="")m.push(r),O.push("?"),_Q.push(E[r]);let XQ=new Date().toISOString();if(w.some((r)=>r.name==="created_at"))m.push("created_at"),O.push("?"),_Q.push(XQ);if(w.some((r)=>r.name==="updated_at"))m.push("updated_at"),O.push("?"),_Q.push(XQ);if(m.length===0)return new Response(JSON.stringify({error:"No valid fields provided"}),{status:400,headers:{"Content-Type":"application/json",...WQ}});let xQ=`INSERT INTO "${F}" (${m.join(", ")}) VALUES (${O.join(", ")})`,oQ=D.prepare(xQ).run(..._Q);return new Response(JSON.stringify({success:!0,id:oQ.lastInsertRowid,message:"Record created successfully"}),{status:201,headers:{"Content-Type":"application/json",...WQ}})}catch(w){return console.error("API Error:",w),new Response(JSON.stringify({error:w.message||"Failed to create record"}),{status:500,headers:{"Content-Type":"application/json",...WQ}})}finally{D.close()}}catch{}if(q==="/index")q="/";if(q==="/"){if(!await YX("/")){if(await YX("/home"))return new Response(null,{status:302,headers:{Location:"/home",...WQ}})}}let V=await YX(q);if(V){if(L.headers.get("X-STX-Router")==="true"){let N=V.match(/<!-- stx-layout: ([^ ]+) -->/),D=N?N[1]:"default",w=V,p=[],m=V.match(/<head\b[^>]*>([\s\S]*?)<\/head>/i);if(m){let GQ=m[1],TQ,nX=/<style\b[^>]*>[\s\S]*?<\/style>/gi;while((TQ=nX.exec(GQ))!==null){if(TQ[0].includes("data-crosswind")){let rQ=TQ[0].replace(/<style[^>]*>/,"").replace(/<\/style>/,""),ZX=rQ.indexOf("[hidden]");if(ZX!==-1){let $X=rQ.indexOf("}",ZX)+1,_X=rQ.slice($X).trim();if(_X)p.push(`<style data-crosswind="fragment">${_X}</style>`)}continue}p.push(TQ[0])}}let O=w.match(/<main\b[^>]*>/i),_Q=w.lastIndexOf("</main>");if(O&&_Q!==-1){let GQ=V.match(/<body\b[^>]*>/i);if(GQ){let nX=GQ.index+GQ[0].length,rQ=O.index,ZX=V.slice(nX,rQ),$X,_X=/<style\b[^>]*>[\s\S]*?<\/style>/gi;while(($X=_X.exec(ZX))!==null)p.push($X[0])}let TQ=O.index+O[0].length;w=w.slice(TQ,_Q).trim()}let XQ=[],xQ=/<script\b[^>]*data-stx-scoped[^>]*>[\s\S]*?<\/script>/gi,PQ;while((PQ=xQ.exec(V))!==null){let GQ=PQ[0];if(GQ.includes("__stx_early_mounts"))continue;if(GQ.includes("data-stx-reactive")&&GQ.includes("window.__stx_reactive"))continue;XQ.push(GQ)}let oQ=/<script\b[^>]*data-stx-reactive[^>]*>(?![\s\S]*window\.__stx_reactive)[\s\S]*?<\/script>/gi;while((PQ=oQ.exec(V))!==null)XQ.push(PQ[0]);w=w.replace(/<script data-stx-scoped>\s*;?\(function\(\)\s*\{[\s\S]*?<\/script>/g,"");let r="<script data-stx-page>if(window.stx)window.stx._latestSetup=null;</script>";return w=`${p.join(`
69
+ `)}
70
+ ${w}
71
+ ${r}
72
+ ${XQ.join(`
73
+ `)}`,new Response(w,{headers:{"Content-Type":"text/html; charset=utf-8","X-STX-Fragment":"true","X-STX-Layout":D,"Cache-Control":"no-cache",...WQ}})}let E=V,P=0;return E=V.replace(/<script data-stx-scoped>\(function\(\)\{'use strict';var cloakStyle[\s\S]*?<\/script>/g,(N)=>{return P++,P===1?N:""}),new Response(E,{headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-cache",...WQ}})}let T=await YX(`${q}.html`);if(T)return new Response(T,{headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-cache",...WQ}});if(q.startsWith("/chunk-")||q.endsWith(".js")||q.endsWith(".css"))try{let F=Bun.file(`.stx${q}`);if(await F.exists()){let E=q.split(".").pop()?.toLowerCase();return new Response(F,{headers:{"Content-Type":E==="css"?"text/css":E==="js"?"application/javascript":"text/plain","Cache-Control":"no-cache"}})}}catch{}if(q.startsWith("/assets/")||q.startsWith("/resources/assets/")){await K0();let F=[q,q.replace(/^\/assets\//,"/resources/assets/"),q.replace(/^\/resources\/assets\//,"/assets/")];for(let E of F)try{let P=`.${E}`,N=Bun.file(P);if(await N.exists()){let D=E.split(".").pop()?.toLowerCase();if(D==="ts"){let w=new Bun.Transpiler({loader:"ts"}),p=await N.text(),m=w.transformSync(p);return new Response(m,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-cache"}})}return new Response(N,{headers:{"Content-Type":TZ[D||""]||"application/octet-stream","Cache-Control":"public, max-age=31536000"}})}}catch{continue}}if((L.method==="GET"||L.method==="HEAD")&&q!=="/"){let F=wQ.resolve(AQ.cwd(),_),E;try{E=decodeURIComponent(q)}catch{E=q}if(!E.includes("\x00")){let P=wQ.resolve(F,`.${E}`);if(P===F||P.startsWith(`${F}${wQ.sep}`))try{let D=Bun.file(P);if(await D.exists()){let w=await D.stat().catch(()=>null);if(w&&!w.isDirectory()){let p=P.split(".").pop()?.toLowerCase();return new Response(D,{headers:{"Content-Type":TZ[p||""]||"application/octet-stream","Cache-Control":"public, max-age=3600"}})}}}catch{}}}if(q==="/favicon.ico")return new Response(null,{status:204});let y=await uX(),u=[];for(let F of y){let E=F.replace(/^\.\//,"").replace(/\\/g,"/");for(let N of U){let D=N.replace(/\\/g,"/").replace(/\/$/,"");if(E.startsWith(`${D}/`)){E=E.slice(D.length+1);break}}let P=E.replace(/\.(stx|md|html)$/,"");if(P.startsWith("pages/"))P=P.slice(6);u.push(`<li><a href="/${P}">/${P}</a></li>`)}let c=u.join(`
74
+ `);return new Response(`
75
+ <!DOCTYPE html>
76
+ <html>
77
+ <head>
78
+ <title>404 - Not Found</title>
79
+ <style>
80
+ body {
81
+ font-family: system-ui, sans-serif;
82
+ max-width: 800px;
83
+ margin: 4rem auto;
84
+ padding: 2rem;
85
+ text-align: center;
86
+ }
87
+ h1 { color: #e53e3e; }
88
+ ul { list-style: none; padding: 0; margin: 2rem 0; }
89
+ li { margin: 0.5rem 0; }
90
+ a { color: #667eea; text-decoration: none; font-size: 1.1rem; }
91
+ a:hover { text-decoration: underline; }
92
+ </style>
93
+ </head>
94
+ <body>
95
+ <h1>404 - Page Not Found</h1>
96
+ <p>The page "${q}" doesn't exist.</p>
97
+ <h2>Available pages:</h2>
98
+ <ul>${c}</ul>
99
+ </body>
100
+ </html>
101
+ `,{status:404,headers:{"Content-Type":"text/html; charset=utf-8"}})}});if(!Q.quiet){let L=(performance.now()-F0).toFixed(0),K=W?.length||0,q=U.join(", ");if(console.log(),console.log(" \x1B[36m\x1B[1mstx\x1B[0m"),console.log(),console.log(` \x1B[32m\u279C\x1B[0m \x1B[1mLocal\x1B[0m: \x1B[36mhttp://localhost:${J}/\x1B[0m`),console.log(` \x1B[32m\u279C\x1B[0m \x1B[1mRoutes\x1B[0m: \x1B[2m${K} files from ${q}\x1B[0m`),console.log(),console.log(` \x1B[2mready in ${L}ms\x1B[0m`),console.log(),console.log(" \x1B[2mPress\x1B[0m o + Enter \x1B[2mto open in browser\x1B[0m"),console.log(" \x1B[2mPress\x1B[0m q + Enter \x1B[2mto quit\x1B[0m"),console.log(),AQ.stdin.isTTY)AQ.stdin.setRawMode(!1),(await import("readline")).createInterface({input:AQ.stdin}).on("line",(I)=>{let V=I.trim().toLowerCase();if(V==="o"){let T=AQ.platform==="darwin"?"open":AQ.platform==="win32"?"start":"xdg-open";Bun.spawn([T,`http://localhost:${J}/`])}else if(V==="q")AQ.exit(0)})}await Bun.sleep(Number.POSITIVE_INFINITY)}export{O_ as serve};
@@ -0,0 +1,7 @@
1
+ // @bun
2
+ import{gb as H}from"./chunk-96b7fcmd.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
+ # Added by Stacks
4
+ 127.0.0.1 ${z}
5
+ ::1 ${z}
6
+ `;if(Y.platform==="win32")return B.warn("Please add this to your hosts file manually:"),B.warn(`127.0.0.1 ${z}`),B.warn(`::1 ${z}`),B.warn(`File location: ${q}`),!1;if(!k()){if(G)B.warn(`Cannot add ${z} to hosts file (non-interactive mode and no SUDO_PASSWORD set)`),B.info("Run `buddy setup:ssl` in a terminal or set SUDO_PASSWORD environment variable");return!1}let K=V();return new Promise((Q)=>{let N;if(K)N=j("sh",["-c",`echo '${K}' | sudo -S sh -c "echo '${J}' >> '${q}'"`],{stdio:["pipe","inherit","inherit"]});else N=j("sudo",["sh","-c",`echo '${J}' >> "${q}"`],{stdio:"inherit"});N.on("close",(U)=>{if(U===0){if(G)B.success(`Added ${z} to hosts file`);Q(!0)}else{if(G)B.error(`Failed to add ${z} to hosts file`),B.warn(`Manually add: 127.0.0.1 ${z}`);Q(!1)}}),N.on("error",()=>{B.error("Failed to run sudo command"),Q(!1)})})}function O(z){let G=$.join(X,`${z}.crt`),J=$.join(X,`${z}.key`),K=$.join(X,`${z}.ca.crt`);return Z.existsSync(G)&&Z.existsSync(J)&&Z.existsSync(K)}function y(z){if(Y.platform!=="darwin")return!0;let G=$.join(X,`${z}.crt`);if(!Z.existsSync(G))return!1;try{let J=M(`openssl x509 -noout -fingerprint -sha256 -in "${G}"`,{encoding:"utf-8"}),K=J.indexOf("="),Q=K>=0?J.slice(K+1).trim():"";if(!Q)return!1;return M("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256 2>/dev/null || true",{encoding:"utf-8"}).includes(Q)}catch{return!1}}async function D(z,G){let J=$.join(X,`${z}.ca.crt`),K=$.join(X,`${z}.crt`);if(!Z.existsSync(J))return B.error(`CA certificate not found: ${J}`),!1;if(y(z)){if(G)B.info("Certificate is already trusted, skipping trust step");return!0}if(!k()){if(G)B.warn("Cannot trust certificate (non-interactive mode and no SUDO_PASSWORD set)"),B.info("Run `buddy setup:ssl` in a terminal or set SUDO_PASSWORD environment variable");return!1}let Q=V();if(Y.platform==="darwin")return new Promise((N)=>{let U=`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain '${J}' && security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain '${K}'`,W;if(Q)W=j("sh",["-c",`echo '${Q}' | sudo -S sh -c "${U}"`],{stdio:["pipe","inherit","inherit"]});else W=j("sudo",["sh","-c",U],{stdio:"inherit"});W.on("close",(A)=>{if(A===0){try{M(`security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db "${K}" 2>/dev/null || true`)}catch{}N(!0)}else{if(G)B.warn("Could not trust certificate automatically"),B.info(` sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${J}"`);N(!1)}}),W.on("error",()=>{B.error("Failed to run sudo command"),N(!1)})});else if(Y.platform==="linux")return new Promise((N)=>{let U=`mkdir -p /usr/local/share/ca-certificates/stacks && cp '${J}' /usr/local/share/ca-certificates/stacks/ && update-ca-certificates`,W;if(Q)W=j("sh",["-c",`echo '${Q}' | sudo -S sh -c "${U}"`],{stdio:["pipe","inherit","inherit"]});else W=j("sudo",["sh","-c",U],{stdio:"inherit"});W.on("close",(A)=>{if(A===0)B.success("Certificate trusted"),N(!0);else B.warn("Could not trust certificate automatically"),N(!1)}),W.on("error",()=>N(!1))});else if(Y.platform==="win32")return B.warn("Please manually trust the certificate in Windows:"),B.warn(` 1. Double-click: ${J}`),B.warn(' 2. Click "Install Certificate"'),B.warn(' 3. Select "Local Machine" and place in "Trusted Root Certification Authorities"'),!1;return!1}async function R(z,G){try{let J=await import("@stacksjs/tlsx"),{generateCertificate:K,createRootCA:Q}=J,N=J.httpsConfig;if(!Z.existsSync(X))Z.mkdirSync(X,{recursive:!0});let U={domain:z,hostCertCN:z,basePath:X,caCertPath:$.join(X,`${z}.ca.crt`),certPath:$.join(X,`${z}.crt`),keyPath:$.join(X,`${z}.key`),altNameIPs:["127.0.0.1","::1"],altNameURIs:["localhost",z],organizationName:"Stacks Development",countryName:"US",stateName:"California",localityName:"Playa Vista",commonName:z,validityDays:825,verbose:G||!1,subjectAltNames:[{type:2,value:z},{type:2,value:`*.${z.split(".").slice(1).join(".")}`},{type:2,value:"localhost"},{type:2,value:"*.localhost"}]};if(G)B.info("Generating Root CA certificate...");let W=await Q(U);if(G)B.info(`Generating host certificate for ${z}...`);let A=await K({...U,rootCA:{certificate:W.certificate,privateKey:W.privateKey}});if(Z.writeFileSync(U.caCertPath,W.certificate),Z.writeFileSync(U.certPath,A.certificate),Z.writeFileSync(U.keyPath,A.privateKey),G)B.success(`SSL certificates generated for ${z}`);return!0}catch(J){return B.error(`Failed to generate certificates: ${J}`),!1}}async function C(z={}){let G=z.domain||Y.env.APP_URL?.replace(/^https?:\/\//,"")||"stacks.localhost";if(G==="localhost"||G.startsWith("localhost:"))return B.info("Skipping SSL setup for localhost"),!0;let J=!0;if(!z.skipHosts){if(!await x(G,z.verbose)&&z.verbose)B.warn("Hosts file not updated - you may need to add the entry manually")}if(!O(G)){if(z.verbose)B.info("Generating SSL certificates...");if(!await R(G,z.verbose))return B.error("Failed to generate SSL certificates"),!1}if(!z.skipTrust&&!y(G)){if(!await D(G,z.verbose))B.warn("Certificate not trusted - you may see browser warnings"),J=!1}return J}function f(z){return F(z)&&O(z)}
7
+ export{F as l,x as m,O as n,y as o,D as p,R as q,C as r,f as s};
@@ -0,0 +1 @@
1
+ // @bun