alepha 0.23.0 → 0.24.0

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 (845) hide show
  1. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  2. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  3. package/dist/api/audits/index.browser.js +49 -52
  4. package/dist/api/audits/index.browser.js.map +1 -1
  5. package/dist/api/audits/index.d.ts +629 -565
  6. package/dist/api/audits/index.d.ts.map +1 -1
  7. package/dist/api/audits/index.js +206 -98
  8. package/dist/api/audits/index.js.map +1 -1
  9. package/dist/api/files/index.browser.js +44 -44
  10. package/dist/api/files/index.browser.js.map +1 -1
  11. package/dist/api/files/index.d.ts +292 -293
  12. package/dist/api/files/index.d.ts.map +1 -1
  13. package/dist/api/files/index.js +61 -64
  14. package/dist/api/files/index.js.map +1 -1
  15. package/dist/api/jobs/index.browser.js +61 -59
  16. package/dist/api/jobs/index.browser.js.map +1 -1
  17. package/dist/api/jobs/index.d.ts +546 -347
  18. package/dist/api/jobs/index.d.ts.map +1 -1
  19. package/dist/api/jobs/index.js +165 -86
  20. package/dist/api/jobs/index.js.map +1 -1
  21. package/dist/api/keys/index.d.ts +247 -235
  22. package/dist/api/keys/index.d.ts.map +1 -1
  23. package/dist/api/keys/index.js +63 -66
  24. package/dist/api/keys/index.js.map +1 -1
  25. package/dist/api/notifications/index.browser.js +40 -38
  26. package/dist/api/notifications/index.browser.js.map +1 -1
  27. package/dist/api/notifications/index.d.ts +339 -209
  28. package/dist/api/notifications/index.d.ts.map +1 -1
  29. package/dist/api/notifications/index.js +108 -60
  30. package/dist/api/notifications/index.js.map +1 -1
  31. package/dist/api/oauth/index.d.ts +190 -78
  32. package/dist/api/oauth/index.d.ts.map +1 -1
  33. package/dist/api/oauth/index.js +290 -68
  34. package/dist/api/oauth/index.js.map +1 -1
  35. package/dist/api/organizations/index.browser.js +14 -14
  36. package/dist/api/organizations/index.browser.js.map +1 -1
  37. package/dist/api/organizations/index.d.ts +158 -134
  38. package/dist/api/organizations/index.d.ts.map +1 -1
  39. package/dist/api/organizations/index.js +18 -18
  40. package/dist/api/organizations/index.js.map +1 -1
  41. package/dist/api/parameters/index.browser.js +74 -53
  42. package/dist/api/parameters/index.browser.js.map +1 -1
  43. package/dist/api/parameters/index.d.ts +607 -513
  44. package/dist/api/parameters/index.d.ts.map +1 -1
  45. package/dist/api/parameters/index.js +205 -127
  46. package/dist/api/parameters/index.js.map +1 -1
  47. package/dist/api/payments/index.d.ts +652 -449
  48. package/dist/api/payments/index.d.ts.map +1 -1
  49. package/dist/api/payments/index.js +159 -93
  50. package/dist/api/payments/index.js.map +1 -1
  51. package/dist/api/subscriptions/index.d.ts +1032 -762
  52. package/dist/api/subscriptions/index.d.ts.map +1 -1
  53. package/dist/api/subscriptions/index.js +166 -185
  54. package/dist/api/subscriptions/index.js.map +1 -1
  55. package/dist/api/users/index.browser.js +48 -71
  56. package/dist/api/users/index.browser.js.map +1 -1
  57. package/dist/api/users/index.d.ts +1297 -1143
  58. package/dist/api/users/index.d.ts.map +1 -1
  59. package/dist/api/users/index.js +456 -392
  60. package/dist/api/users/index.js.map +1 -1
  61. package/dist/api/verifications/index.browser.js +17 -17
  62. package/dist/api/verifications/index.browser.js.map +1 -1
  63. package/dist/api/verifications/index.d.ts +167 -155
  64. package/dist/api/verifications/index.d.ts.map +1 -1
  65. package/dist/api/verifications/index.js +47 -95
  66. package/dist/api/verifications/index.js.map +1 -1
  67. package/dist/background/index.d.ts +0 -1
  68. package/dist/background/index.d.ts.map +1 -1
  69. package/dist/background/index.js.map +1 -1
  70. package/dist/background/index.workerd.js.map +1 -1
  71. package/dist/batch/index.d.ts +0 -1
  72. package/dist/batch/index.d.ts.map +1 -1
  73. package/dist/batch/index.js.map +1 -1
  74. package/dist/bin/index.js +1 -1
  75. package/dist/bin/index.js.map +1 -1
  76. package/dist/bucket/index.d.ts +27 -32
  77. package/dist/bucket/index.d.ts.map +1 -1
  78. package/dist/bucket/index.js +56 -26
  79. package/dist/bucket/index.js.map +1 -1
  80. package/dist/bucket/index.workerd.js +52 -24
  81. package/dist/bucket/index.workerd.js.map +1 -1
  82. package/dist/cache/core/index.d.ts +4 -6
  83. package/dist/cache/core/index.d.ts.map +1 -1
  84. package/dist/cache/core/index.js +4 -10
  85. package/dist/cache/core/index.js.map +1 -1
  86. package/dist/cache/core/index.workerd.js +4 -10
  87. package/dist/cache/core/index.workerd.js.map +1 -1
  88. package/dist/cache/database/index.d.ts +22 -23
  89. package/dist/cache/database/index.d.ts.map +1 -1
  90. package/dist/cache/database/index.js +11 -20
  91. package/dist/cache/database/index.js.map +1 -1
  92. package/dist/cache/redis/index.d.ts +3 -4
  93. package/dist/cache/redis/index.d.ts.map +1 -1
  94. package/dist/cache/redis/index.js +2 -2
  95. package/dist/cache/redis/index.js.map +1 -1
  96. package/dist/captcha/index.d.ts.map +1 -1
  97. package/dist/captcha/index.js +4 -4
  98. package/dist/captcha/index.js.map +1 -1
  99. package/dist/cli/config/index.d.ts +0 -1
  100. package/dist/cli/config/index.d.ts.map +1 -1
  101. package/dist/cli/core/index.d.ts +205 -442
  102. package/dist/cli/core/index.d.ts.map +1 -1
  103. package/dist/cli/core/index.js +259 -284
  104. package/dist/cli/core/index.js.map +1 -1
  105. package/dist/cli/devtools/index.d.ts +3 -9
  106. package/dist/cli/devtools/index.d.ts.map +1 -1
  107. package/dist/cli/devtools/index.js +3 -3
  108. package/dist/cli/devtools/index.js.map +1 -1
  109. package/dist/cli/i18n/index.d.ts +8 -34
  110. package/dist/cli/i18n/index.d.ts.map +1 -1
  111. package/dist/cli/i18n/index.js +6 -6
  112. package/dist/cli/i18n/index.js.map +1 -1
  113. package/dist/cli/platform/index.d.ts +89 -82
  114. package/dist/cli/platform/index.d.ts.map +1 -1
  115. package/dist/cli/platform/index.js +27 -33
  116. package/dist/cli/platform/index.js.map +1 -1
  117. package/dist/cli/platform-lib/index.d.ts +351 -404
  118. package/dist/cli/platform-lib/index.d.ts.map +1 -1
  119. package/dist/cli/platform-lib/index.js +218 -239
  120. package/dist/cli/platform-lib/index.js.map +1 -1
  121. package/dist/cli/vendor/index.d.ts +17 -41
  122. package/dist/cli/vendor/index.d.ts.map +1 -1
  123. package/dist/cli/vendor/index.js +10 -13
  124. package/dist/cli/vendor/index.js.map +1 -1
  125. package/dist/command/index.d.ts +83 -195
  126. package/dist/command/index.d.ts.map +1 -1
  127. package/dist/command/index.js +160 -563
  128. package/dist/command/index.js.map +1 -1
  129. package/dist/core/index.browser.js +845 -859
  130. package/dist/core/index.browser.js.map +1 -1
  131. package/dist/core/index.d.ts +787 -527
  132. package/dist/core/index.d.ts.map +1 -1
  133. package/dist/core/index.js +845 -859
  134. package/dist/core/index.js.map +1 -1
  135. package/dist/core/index.native.js +845 -859
  136. package/dist/core/index.native.js.map +1 -1
  137. package/dist/core/index.workerd.js +845 -859
  138. package/dist/core/index.workerd.js.map +1 -1
  139. package/dist/crypto/index.browser.js +1 -1
  140. package/dist/crypto/index.browser.js.map +1 -1
  141. package/dist/crypto/index.d.ts +3 -4
  142. package/dist/crypto/index.d.ts.map +1 -1
  143. package/dist/crypto/index.js +6 -3
  144. package/dist/crypto/index.js.map +1 -1
  145. package/dist/datetime/index.d.ts +12 -2
  146. package/dist/datetime/index.d.ts.map +1 -1
  147. package/dist/datetime/index.js +6 -1
  148. package/dist/datetime/index.js.map +1 -1
  149. package/dist/email/brevo/index.d.ts +0 -1
  150. package/dist/email/brevo/index.d.ts.map +1 -1
  151. package/dist/email/brevo/index.js +4 -4
  152. package/dist/email/brevo/index.js.map +1 -1
  153. package/dist/email/cloudflare/index.d.ts +0 -1
  154. package/dist/email/cloudflare/index.d.ts.map +1 -1
  155. package/dist/email/cloudflare/index.js +2 -2
  156. package/dist/email/cloudflare/index.js.map +1 -1
  157. package/dist/email/core/index.d.ts +15 -7
  158. package/dist/email/core/index.d.ts.map +1 -1
  159. package/dist/email/core/index.js +14 -5
  160. package/dist/email/core/index.js.map +1 -1
  161. package/dist/email/core/index.workerd.js +5 -1
  162. package/dist/email/core/index.workerd.js.map +1 -1
  163. package/dist/email/smtp/index.d.ts +8 -9
  164. package/dist/email/smtp/index.d.ts.map +1 -1
  165. package/dist/email/smtp/index.js +702 -479
  166. package/dist/email/smtp/index.js.map +1 -1
  167. package/dist/fake/index.d.ts +1580 -1238
  168. package/dist/fake/index.d.ts.map +1 -1
  169. package/dist/fake/index.js +11728 -32131
  170. package/dist/fake/index.js.map +1 -1
  171. package/dist/lock/core/index.d.ts +13 -9
  172. package/dist/lock/core/index.d.ts.map +1 -1
  173. package/dist/lock/core/index.js +5 -5
  174. package/dist/lock/core/index.js.map +1 -1
  175. package/dist/lock/redis/index.d.ts +0 -1
  176. package/dist/lock/redis/index.d.ts.map +1 -1
  177. package/dist/lock/redis/index.js.map +1 -1
  178. package/dist/logger/index.d.ts +81 -69
  179. package/dist/logger/index.d.ts.map +1 -1
  180. package/dist/logger/index.js +123 -56
  181. package/dist/logger/index.js.map +1 -1
  182. package/dist/mcp/index.d.ts +27 -90
  183. package/dist/mcp/index.d.ts.map +1 -1
  184. package/dist/mcp/index.js +42 -70
  185. package/dist/mcp/index.js.map +1 -1
  186. package/dist/orm/core/index.browser.js +54 -40
  187. package/dist/orm/core/index.browser.js.map +1 -1
  188. package/dist/orm/core/index.bun.js +140 -106
  189. package/dist/orm/core/index.bun.js.map +1 -1
  190. package/dist/orm/core/index.d.ts +145 -150
  191. package/dist/orm/core/index.d.ts.map +1 -1
  192. package/dist/orm/core/index.js +144 -109
  193. package/dist/orm/core/index.js.map +1 -1
  194. package/dist/orm/postgres/index.bun.js +64 -54
  195. package/dist/orm/postgres/index.bun.js.map +1 -1
  196. package/dist/orm/postgres/index.d.ts +36 -76
  197. package/dist/orm/postgres/index.d.ts.map +1 -1
  198. package/dist/orm/postgres/index.js +67 -57
  199. package/dist/orm/postgres/index.js.map +1 -1
  200. package/dist/queue/core/index.d.ts +62 -75
  201. package/dist/queue/core/index.d.ts.map +1 -1
  202. package/dist/queue/core/index.js +48 -71
  203. package/dist/queue/core/index.js.map +1 -1
  204. package/dist/queue/core/index.workerd.js +48 -71
  205. package/dist/queue/core/index.workerd.js.map +1 -1
  206. package/dist/queue/redis/index.d.ts +3 -4
  207. package/dist/queue/redis/index.d.ts.map +1 -1
  208. package/dist/queue/redis/index.js +2 -2
  209. package/dist/queue/redis/index.js.map +1 -1
  210. package/dist/react/auth/index.browser.js.map +1 -1
  211. package/dist/react/auth/index.d.ts +7 -4
  212. package/dist/react/auth/index.d.ts.map +1 -1
  213. package/dist/react/auth/index.js.map +1 -1
  214. package/dist/react/core/index.d.ts +87 -5
  215. package/dist/react/core/index.d.ts.map +1 -1
  216. package/dist/react/core/index.js +170 -23
  217. package/dist/react/core/index.js.map +1 -1
  218. package/dist/react/form/index.d.ts +4 -5
  219. package/dist/react/form/index.d.ts.map +1 -1
  220. package/dist/react/form/index.js +91 -56
  221. package/dist/react/form/index.js.map +1 -1
  222. package/dist/react/head/index.browser.js.map +1 -1
  223. package/dist/react/head/index.d.ts +0 -1
  224. package/dist/react/head/index.d.ts.map +1 -1
  225. package/dist/react/head/index.js.map +1 -1
  226. package/dist/react/i18n/index.d.ts +4 -5
  227. package/dist/react/i18n/index.d.ts.map +1 -1
  228. package/dist/react/i18n/index.js +2 -2
  229. package/dist/react/i18n/index.js.map +1 -1
  230. package/dist/react/intro/index.d.ts +1 -4
  231. package/dist/react/intro/index.d.ts.map +1 -1
  232. package/dist/react/intro/index.js.map +1 -1
  233. package/dist/react/router/index.browser.js +60 -24
  234. package/dist/react/router/index.browser.js.map +1 -1
  235. package/dist/react/router/index.d.ts +378 -377
  236. package/dist/react/router/index.d.ts.map +1 -1
  237. package/dist/react/router/index.js +77 -41
  238. package/dist/react/router/index.js.map +1 -1
  239. package/dist/react/sitemap/index.d.ts +0 -1
  240. package/dist/react/sitemap/index.d.ts.map +1 -1
  241. package/dist/react/sitemap/index.js.map +1 -1
  242. package/dist/react/testing/index.d.ts +4 -5
  243. package/dist/react/testing/index.d.ts.map +1 -1
  244. package/dist/react/testing/index.js +41 -15
  245. package/dist/react/testing/index.js.map +1 -1
  246. package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
  247. package/dist/react/ui/index.d.ts +35 -34
  248. package/dist/react/ui/index.d.ts.map +1 -1
  249. package/dist/react/ui/index.js +12 -17
  250. package/dist/react/ui/index.js.map +1 -1
  251. package/dist/redis/index.bun.js +5 -5
  252. package/dist/redis/index.bun.js.map +1 -1
  253. package/dist/redis/index.d.ts +6 -7
  254. package/dist/redis/index.d.ts.map +1 -1
  255. package/dist/redis/index.js +6 -6
  256. package/dist/redis/index.js.map +1 -1
  257. package/dist/retry/index.d.ts +0 -1
  258. package/dist/retry/index.d.ts.map +1 -1
  259. package/dist/retry/index.js.map +1 -1
  260. package/dist/router/index.d.ts.map +1 -1
  261. package/dist/router/index.js.map +1 -1
  262. package/dist/scheduler/index.d.ts +4 -12
  263. package/dist/scheduler/index.d.ts.map +1 -1
  264. package/dist/scheduler/index.js +9 -4
  265. package/dist/scheduler/index.js.map +1 -1
  266. package/dist/scheduler/index.workerd.js +9 -4
  267. package/dist/scheduler/index.workerd.js.map +1 -1
  268. package/dist/security/index.browser.js +30 -28
  269. package/dist/security/index.browser.js.map +1 -1
  270. package/dist/security/index.d.ts +113 -44
  271. package/dist/security/index.d.ts.map +1 -1
  272. package/dist/security/index.js +452 -37
  273. package/dist/security/index.js.map +1 -1
  274. package/dist/server/auth/index.browser.js +19 -19
  275. package/dist/server/auth/index.browser.js.map +1 -1
  276. package/dist/server/auth/index.d.ts +198 -274
  277. package/dist/server/auth/index.d.ts.map +1 -1
  278. package/dist/server/auth/index.js +83 -621
  279. package/dist/server/auth/index.js.map +1 -1
  280. package/dist/server/cookies/index.browser.js +103 -5
  281. package/dist/server/cookies/index.browser.js.map +1 -1
  282. package/dist/server/cookies/index.d.ts +72 -5
  283. package/dist/server/cookies/index.d.ts.map +1 -1
  284. package/dist/server/cookies/index.js +103 -9
  285. package/dist/server/cookies/index.js.map +1 -1
  286. package/dist/server/core/index.browser.js +22 -27
  287. package/dist/server/core/index.browser.js.map +1 -1
  288. package/dist/server/core/index.d.ts +116 -85
  289. package/dist/server/core/index.d.ts.map +1 -1
  290. package/dist/server/core/index.js +105 -118
  291. package/dist/server/core/index.js.map +1 -1
  292. package/dist/server/cors/index.d.ts +9 -10
  293. package/dist/server/cors/index.d.ts.map +1 -1
  294. package/dist/server/cors/index.js +14 -26
  295. package/dist/server/cors/index.js.map +1 -1
  296. package/dist/server/etag/index.d.ts +2 -3
  297. package/dist/server/etag/index.d.ts.map +1 -1
  298. package/dist/server/etag/index.js.map +1 -1
  299. package/dist/server/health/index.d.ts +18 -19
  300. package/dist/server/health/index.d.ts.map +1 -1
  301. package/dist/server/health/index.js +6 -6
  302. package/dist/server/health/index.js.map +1 -1
  303. package/dist/server/links/index.browser.js +15 -18
  304. package/dist/server/links/index.browser.js.map +1 -1
  305. package/dist/server/links/index.d.ts +66 -67
  306. package/dist/server/links/index.d.ts.map +1 -1
  307. package/dist/server/links/index.js +29 -32
  308. package/dist/server/links/index.js.map +1 -1
  309. package/dist/server/metrics/index.d.ts +0 -1
  310. package/dist/server/metrics/index.d.ts.map +1 -1
  311. package/dist/server/metrics/index.js +10 -3
  312. package/dist/server/metrics/index.js.map +1 -1
  313. package/dist/server/proxy/index.d.ts +0 -1
  314. package/dist/server/proxy/index.d.ts.map +1 -1
  315. package/dist/server/proxy/index.js.map +1 -1
  316. package/dist/server/rate-limit/index.d.ts +8 -9
  317. package/dist/server/rate-limit/index.d.ts.map +1 -1
  318. package/dist/server/rate-limit/index.js +6 -12
  319. package/dist/server/rate-limit/index.js.map +1 -1
  320. package/dist/server/static/index.d.ts +0 -1
  321. package/dist/server/static/index.d.ts.map +1 -1
  322. package/dist/server/static/index.js.map +1 -1
  323. package/dist/server/swagger/index.d.ts +4 -4
  324. package/dist/server/swagger/index.d.ts.map +1 -1
  325. package/dist/server/swagger/index.js +37 -25
  326. package/dist/server/swagger/index.js.map +1 -1
  327. package/dist/sms/index.d.ts +0 -1
  328. package/dist/sms/index.d.ts.map +1 -1
  329. package/dist/sms/index.js.map +1 -1
  330. package/dist/system/index.browser.js.map +1 -1
  331. package/dist/system/index.d.ts +0 -1
  332. package/dist/system/index.d.ts.map +1 -1
  333. package/dist/system/index.js +2 -1
  334. package/dist/system/index.js.map +1 -1
  335. package/dist/system/index.workerd.js.map +1 -1
  336. package/dist/topic/core/index.d.ts +19 -20
  337. package/dist/topic/core/index.d.ts.map +1 -1
  338. package/dist/topic/core/index.js +8 -8
  339. package/dist/topic/core/index.js.map +1 -1
  340. package/dist/topic/redis/index.d.ts +3 -4
  341. package/dist/topic/redis/index.d.ts.map +1 -1
  342. package/dist/topic/redis/index.js +2 -2
  343. package/dist/topic/redis/index.js.map +1 -1
  344. package/package.json +22 -35
  345. package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
  346. package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
  347. package/src/api/audits/controllers/AdminAuditController.ts +41 -41
  348. package/src/api/audits/entities/audits.ts +22 -22
  349. package/src/api/audits/index.ts +6 -1
  350. package/src/api/audits/jobs/AuditJobs.ts +29 -0
  351. package/src/api/audits/parameters/AuditParameters.ts +51 -0
  352. package/src/api/audits/primitives/$audit.ts +24 -0
  353. package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
  354. package/src/api/audits/schemas/createAuditSchema.ts +18 -18
  355. package/src/api/audits/services/AuditService.ts +79 -7
  356. package/src/api/files/__tests__/FileController.spec.ts +5 -5
  357. package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
  358. package/src/api/files/controllers/FileController.ts +25 -25
  359. package/src/api/files/entities/files.ts +15 -15
  360. package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
  361. package/src/api/files/schemas/fileQuerySchema.ts +9 -9
  362. package/src/api/files/schemas/fileResourceSchema.ts +7 -9
  363. package/src/api/files/schemas/storageStatsSchema.ts +13 -13
  364. package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
  365. package/src/api/jobs/__tests__/$job.spec.ts +18 -18
  366. package/src/api/jobs/controllers/AdminJobController.ts +8 -8
  367. package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
  368. package/src/api/jobs/providers/JobProvider.ts +128 -12
  369. package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
  370. package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
  371. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
  372. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
  373. package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
  374. package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
  375. package/src/api/jobs/services/JobService.ts +6 -6
  376. package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
  377. package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
  378. package/src/api/keys/entities/apiKeyEntity.ts +15 -15
  379. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
  380. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
  381. package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
  382. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
  383. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
  384. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
  385. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
  386. package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
  387. package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
  388. package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
  389. package/src/api/notifications/primitives/$notification.ts +43 -4
  390. package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
  391. package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
  392. package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
  393. package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
  394. package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
  395. package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
  396. package/src/api/notifications/services/NotificationSenderService.ts +38 -2
  397. package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
  398. package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
  399. package/src/api/oauth/controllers/OAuthController.ts +132 -12
  400. package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
  401. package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
  402. package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
  403. package/src/api/oauth/index.ts +1 -0
  404. package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
  405. package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
  406. package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
  407. package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
  408. package/src/api/oauth/services/OAuthClientService.ts +228 -15
  409. package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
  410. package/src/api/organizations/entities/organizations.ts +6 -6
  411. package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
  412. package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
  413. package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
  414. package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
  415. package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
  416. package/src/api/parameters/entities/parameters.ts +29 -16
  417. package/src/api/parameters/primitives/$parameter.ts +3 -3
  418. package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
  419. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
  420. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
  421. package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
  422. package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
  423. package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
  424. package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
  425. package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
  426. package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
  427. package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
  428. package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
  429. package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
  430. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
  431. package/src/api/parameters/services/ParameterProvider.ts +152 -65
  432. package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
  433. package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
  434. package/src/api/payments/controllers/PaymentController.ts +4 -4
  435. package/src/api/payments/entities/paymentIntents.ts +11 -11
  436. package/src/api/payments/entities/paymentMethods.ts +11 -11
  437. package/src/api/payments/entities/refunds.ts +9 -9
  438. package/src/api/payments/providers/PaymentProvider.ts +18 -0
  439. package/src/api/payments/schemas/intentSchemas.ts +25 -25
  440. package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
  441. package/src/api/payments/services/PaymentService.ts +60 -3
  442. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
  443. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
  444. package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
  445. package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
  446. package/src/api/subscriptions/entities/subscriptions.ts +22 -22
  447. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
  448. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
  449. package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
  450. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
  451. package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
  452. package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
  453. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
  454. package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
  455. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
  456. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
  457. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
  458. package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
  459. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
  460. package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
  461. package/src/api/users/controllers/AdminIdentityController.ts +29 -19
  462. package/src/api/users/controllers/AdminSessionController.ts +37 -27
  463. package/src/api/users/controllers/AdminUserController.ts +75 -53
  464. package/src/api/users/controllers/MySessionController.ts +125 -0
  465. package/src/api/users/controllers/RealmController.ts +9 -10
  466. package/src/api/users/controllers/UserController.ts +55 -55
  467. package/src/api/users/entities/identities.ts +8 -8
  468. package/src/api/users/entities/sessions.ts +17 -17
  469. package/src/api/users/entities/users.ts +17 -17
  470. package/src/api/users/index.ts +3 -0
  471. package/src/api/users/notifications/UserNotifications.ts +76 -24
  472. package/src/api/users/primitives/$realm.ts +12 -26
  473. package/src/api/users/providers/RealmProvider.ts +0 -15
  474. package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
  475. package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
  476. package/src/api/users/schemas/createUserSchema.ts +2 -2
  477. package/src/api/users/schemas/identityQuerySchema.ts +4 -4
  478. package/src/api/users/schemas/identityResourceSchema.ts +3 -2
  479. package/src/api/users/schemas/loginSchema.ts +4 -4
  480. package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
  481. package/src/api/users/schemas/realmConfigSchema.ts +10 -24
  482. package/src/api/users/schemas/registerQuerySchema.ts +6 -6
  483. package/src/api/users/schemas/registerRequestSchema.ts +21 -43
  484. package/src/api/users/schemas/registerResponseSchema.ts +2 -2
  485. package/src/api/users/schemas/registerSchema.ts +13 -31
  486. package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
  487. package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
  488. package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
  489. package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
  490. package/src/api/users/schemas/updateUserSchema.ts +3 -4
  491. package/src/api/users/schemas/userQuerySchema.ts +7 -7
  492. package/src/api/users/services/RegistrationService.ts +25 -11
  493. package/src/api/users/services/UserService.ts +12 -6
  494. package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
  495. package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
  496. package/src/api/verifications/controllers/VerificationController.ts +13 -27
  497. package/src/api/verifications/entities/verifications.ts +13 -14
  498. package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
  499. package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
  500. package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
  501. package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
  502. package/src/api/verifications/services/VerificationService.ts +12 -0
  503. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
  504. package/src/batch/__tests__/$batch.spec.ts +22 -22
  505. package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
  506. package/src/bin/index.ts +1 -1
  507. package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
  508. package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
  509. package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
  510. package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
  511. package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
  512. package/src/cache/core/primitives/$cache.ts +7 -10
  513. package/src/cache/database/entities/cacheEntries.ts +16 -27
  514. package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
  515. package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
  516. package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
  517. package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
  518. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
  519. package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
  520. package/src/cli/core/atoms/appEntryOptions.ts +5 -5
  521. package/src/cli/core/atoms/buildOptions.ts +76 -76
  522. package/src/cli/core/atoms/changelogOptions.ts +3 -3
  523. package/src/cli/core/atoms/devOptions.ts +3 -3
  524. package/src/cli/core/commands/build.ts +36 -39
  525. package/src/cli/core/commands/db.ts +171 -83
  526. package/src/cli/core/commands/dev.ts +8 -8
  527. package/src/cli/core/commands/gen/changelog.ts +12 -14
  528. package/src/cli/core/commands/gen/env.ts +6 -6
  529. package/src/cli/core/commands/gen/openapi.ts +6 -6
  530. package/src/cli/core/commands/init.ts +28 -33
  531. package/src/cli/core/commands/pack.ts +10 -10
  532. package/src/cli/core/commands/root.ts +7 -8
  533. package/src/cli/core/commands/test.ts +17 -20
  534. package/src/cli/core/tasks/BuildCloudflareTask.ts +103 -230
  535. package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
  536. package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
  537. package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
  538. package/src/cli/platform/commands/SecretsCommand.ts +24 -25
  539. package/src/cli/platform/commands/platform.ts +40 -46
  540. package/src/cli/platform/index.ts +1 -1
  541. package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
  542. package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
  543. package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
  544. package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +13 -14
  545. package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
  546. package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
  547. package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
  548. package/src/cli/platform-lib/schemas/platform.ts +51 -51
  549. package/src/cli/platform-lib/schemas/vercel.ts +28 -28
  550. package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
  551. package/src/cli/platform-lib/services/VercelApi.ts +4 -4
  552. package/src/cli/platform-lib/services/VercelCli.ts +6 -15
  553. package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
  554. package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
  555. package/src/cli/vendor/commands/VendorCommand.ts +11 -12
  556. package/src/command/__tests__/$command.spec.ts +82 -83
  557. package/src/command/__tests__/Asker.spec.ts +6 -13
  558. package/src/command/__tests__/CliProvider.spec.ts +136 -149
  559. package/src/command/__tests__/Runner.spec.ts +86 -110
  560. package/src/command/helpers/Asker.ts +23 -58
  561. package/src/command/helpers/Runner.ts +34 -110
  562. package/src/command/index.ts +4 -9
  563. package/src/command/primitives/$command.ts +10 -10
  564. package/src/command/providers/CliProvider.ts +183 -161
  565. package/src/core/Alepha.ts +62 -13
  566. package/src/core/__tests__/$atom.spec.ts +52 -3
  567. package/src/core/__tests__/$computed.spec.ts +129 -0
  568. package/src/core/__tests__/$env.spec.ts +13 -13
  569. package/src/core/__tests__/$inject.spec.ts +4 -4
  570. package/src/core/__tests__/$module.spec.ts +1 -1
  571. package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
  572. package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
  573. package/src/core/__tests__/Alepha-start.spec.ts +3 -3
  574. package/src/core/__tests__/CodecManager.spec.ts +113 -94
  575. package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
  576. package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
  577. package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
  578. package/src/core/__tests__/StateManager.spec.ts +423 -0
  579. package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
  580. package/src/core/__tests__/TypeProvider.spec.ts +314 -309
  581. package/src/core/__tests__/dump.spec.ts +6 -6
  582. package/src/core/__tests__/pagination.spec.ts +4 -4
  583. package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
  584. package/src/core/errors/TypeBoxError.ts +10 -4
  585. package/src/core/helpers/FileLike.ts +5 -5
  586. package/src/core/helpers/coerceStrings.ts +70 -0
  587. package/src/core/helpers/jsonSchemaToZod.ts +112 -0
  588. package/src/core/index.shared.ts +4 -1
  589. package/src/core/primitives/$atom.ts +95 -27
  590. package/src/core/primitives/$computed.ts +148 -0
  591. package/src/core/primitives/$env.ts +5 -5
  592. package/src/core/primitives/$state.ts +1 -1
  593. package/src/core/providers/AlsProvider.ts +26 -0
  594. package/src/core/providers/CodecManager.ts +1 -2
  595. package/src/core/providers/JsonSchemaCodec.ts +1 -2
  596. package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
  597. package/src/core/providers/SchemaValidator.ts +48 -158
  598. package/src/core/providers/StateManager.ts +383 -9
  599. package/src/core/providers/TypeProvider.ts +80 -734
  600. package/src/core/providers/ZodProvider.ts +380 -0
  601. package/src/core/providers/zodAugment.ts +69 -0
  602. package/src/core/schemas/pageQuerySchema.ts +19 -21
  603. package/src/core/schemas/pageSchema.ts +47 -57
  604. package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
  605. package/src/crypto/providers/SecretProvider.ts +16 -10
  606. package/src/datetime/primitives/$throttle.ts +6 -1
  607. package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
  608. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
  609. package/src/email/core/index.ts +7 -2
  610. package/src/email/core/primitives/$email.ts +5 -1
  611. package/src/email/core/providers/LocalEmailProvider.ts +5 -5
  612. package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
  613. package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
  614. package/src/fake/__tests__/keyName.example.ts +21 -21
  615. package/src/fake/__tests__/keyName.spec.ts +41 -41
  616. package/src/fake/__tests__/module.example.ts +8 -8
  617. package/src/fake/providers/FakeProvider.ts +122 -121
  618. package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
  619. package/src/lock/core/index.ts +1 -0
  620. package/src/lock/core/primitives/$lock.ts +13 -6
  621. package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
  622. package/src/logger/__tests__/Logger.spec.ts +49 -0
  623. package/src/logger/index.ts +25 -18
  624. package/src/logger/providers/CliFormatterProvider.ts +75 -0
  625. package/src/logger/schemas/logEntrySchema.ts +10 -10
  626. package/src/logger/services/Logger.ts +18 -0
  627. package/src/mcp/__tests__/$prompt.spec.ts +21 -23
  628. package/src/mcp/__tests__/$tool.spec.ts +22 -22
  629. package/src/mcp/__tests__/McpServerProvider.spec.ts +11 -11
  630. package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
  631. package/src/mcp/__tests__/integration.spec.ts +33 -33
  632. package/src/mcp/primitives/$prompt.ts +11 -9
  633. package/src/mcp/primitives/$tool.ts +27 -86
  634. package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
  635. package/src/orm/__tests__/$repository-tests.ts +133 -27
  636. package/src/orm/__tests__/$repository.spec.ts +23 -0
  637. package/src/orm/__tests__/$transactional-tests.ts +4 -4
  638. package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
  639. package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
  640. package/src/orm/__tests__/QueryManager.spec.ts +5 -5
  641. package/src/orm/__tests__/delete-returning-tests.ts +11 -11
  642. package/src/orm/__tests__/deletedAt-tests.ts +3 -3
  643. package/src/orm/__tests__/enums.spec.ts +29 -25
  644. package/src/orm/__tests__/execute-tests.ts +8 -8
  645. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
  646. package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
  647. package/src/orm/__tests__/joins-tests.ts +30 -30
  648. package/src/orm/__tests__/organization-tests.ts +105 -3
  649. package/src/orm/__tests__/organization.spec.ts +46 -0
  650. package/src/orm/__tests__/orm-errors.spec.ts +10 -10
  651. package/src/orm/__tests__/orm-next-tests.ts +29 -29
  652. package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
  653. package/src/orm/__tests__/primaryKey.spec.ts +4 -4
  654. package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
  655. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
  656. package/src/orm/__tests__/references.spec.ts +7 -7
  657. package/src/orm/__tests__/security.spec.ts +17 -17
  658. package/src/orm/__tests__/string-operators-tests.ts +5 -5
  659. package/src/orm/__tests__/timestamps-tests.ts +14 -14
  660. package/src/orm/__tests__/validation-tests.ts +5 -5
  661. package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
  662. package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
  663. package/src/orm/core/entities/alephaSequences.ts +8 -8
  664. package/src/orm/core/helpers/pgAttr.ts +4 -4
  665. package/src/orm/core/primitives/$entity.ts +10 -6
  666. package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
  667. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
  668. package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
  669. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
  670. package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
  671. package/src/orm/core/schemas/insertSchema.ts +14 -18
  672. package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
  673. package/src/orm/core/schemas/updateSchema.ts +10 -16
  674. package/src/orm/core/services/PgRelationManager.ts +2 -2
  675. package/src/orm/core/services/QueryManager.ts +13 -2
  676. package/src/orm/core/services/Repository.ts +88 -33
  677. package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
  678. package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
  679. package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
  680. package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
  681. package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
  682. package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
  683. package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
  684. package/src/queue/core/__tests__/shared.ts +6 -6
  685. package/src/queue/core/primitives/$consumer.ts +5 -5
  686. package/src/queue/core/primitives/$queue.ts +44 -61
  687. package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
  688. package/src/queue/core/providers/WorkerProvider.ts +17 -14
  689. package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
  690. package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
  691. package/src/react/core/__tests__/Router.spec.tsx +4 -4
  692. package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
  693. package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
  694. package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
  695. package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
  696. package/src/react/core/components/ErrorBoundary.tsx +42 -0
  697. package/src/react/core/hooks/useAction.ts +56 -19
  698. package/src/react/core/hooks/useComputed.ts +91 -0
  699. package/src/react/core/hooks/useSelector.ts +67 -0
  700. package/src/react/core/hooks/useStore.ts +36 -17
  701. package/src/react/core/index.ts +3 -0
  702. package/src/react/core/utils/shallowEqual.ts +36 -0
  703. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +2 -2
  704. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +5 -5
  705. package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
  706. package/src/react/form/errors/FormValidationError.ts +0 -2
  707. package/src/react/form/hooks/useForm.ts +19 -4
  708. package/src/react/form/hooks/useFormQuerySync.ts +0 -0
  709. package/src/react/form/services/FormModel.ts +67 -47
  710. package/src/react/form/services/parseField.ts +66 -27
  711. package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
  712. package/src/react/i18n/providers/I18nProvider.ts +2 -2
  713. package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
  714. package/src/react/router/__tests__/$page.spec.tsx +21 -21
  715. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
  716. package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
  717. package/src/react/router/components/NestedView.tsx +11 -3
  718. package/src/react/router/hooks/useQueryParams.ts +1 -1
  719. package/src/react/router/primitives/$page.ts +2 -2
  720. package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
  721. package/src/react/router/providers/ReactPageProvider.ts +26 -12
  722. package/src/react/router/providers/ReactServerProvider.ts +13 -15
  723. package/src/react/sitemap/__tests__/$sitemap.spec.ts +2 -2
  724. package/src/react/ui/atoms/uiAtom.ts +6 -6
  725. package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
  726. package/src/react/ui/hooks/useColorMode.ts +11 -4
  727. package/src/react/ui/services/SchemaControl.ts +4 -4
  728. package/src/redis/providers/BunRedisProvider.ts +19 -11
  729. package/src/redis/providers/NodeRedisProvider.ts +3 -3
  730. package/src/scheduler/primitives/$scheduler.ts +21 -8
  731. package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
  732. package/src/security/atoms/currentTenantAtom.ts +6 -6
  733. package/src/security/atoms/currentUserAtom.ts +2 -2
  734. package/src/security/primitives/$issuer.ts +24 -2
  735. package/src/security/providers/JwtProvider.ts +100 -0
  736. package/src/security/providers/SecurityProvider.ts +43 -2
  737. package/src/security/schemas/permissionSchema.ts +19 -19
  738. package/src/security/schemas/roleSchema.ts +22 -28
  739. package/src/security/schemas/userAccountInfoSchema.ts +47 -37
  740. package/src/server/auth/index.ts +0 -3
  741. package/src/server/auth/primitives/$auth.ts +6 -6
  742. package/src/server/auth/primitives/$authApple.ts +10 -10
  743. package/src/server/auth/primitives/$authFacebook.ts +10 -10
  744. package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
  745. package/src/server/auth/primitives/$authGithub.ts +10 -10
  746. package/src/server/auth/primitives/$authGoogle.ts +10 -10
  747. package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
  748. package/src/server/auth/providers/ServerAuthProvider.ts +49 -48
  749. package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
  750. package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
  751. package/src/server/auth/schemas/tokensSchema.ts +16 -16
  752. package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
  753. package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
  754. package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
  755. package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
  756. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +14 -14
  757. package/src/server/cookies/index.browser.ts +4 -1
  758. package/src/server/cookies/index.ts +8 -1
  759. package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
  760. package/src/server/cookies/primitives/$cookie.ts +16 -0
  761. package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
  762. package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
  763. package/src/server/cookies/providers/ServerCookiesProvider.ts +13 -5
  764. package/src/server/cookies/services/CookieParser.ts +6 -1
  765. package/src/server/core/__tests__/$action.spec.ts +13 -13
  766. package/src/server/core/__tests__/$middleware.spec.ts +10 -10
  767. package/src/server/core/__tests__/$route.spec.ts +9 -9
  768. package/src/server/core/__tests__/$sse.spec.ts +26 -26
  769. package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
  770. package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
  771. package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
  772. package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
  773. package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
  774. package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
  775. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
  776. package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
  777. package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
  778. package/src/server/core/errors/ValidationError.ts +6 -3
  779. package/src/server/core/helpers/isMultipart.ts +2 -1
  780. package/src/server/core/index.ts +5 -2
  781. package/src/server/core/interfaces/ServerRequest.ts +6 -14
  782. package/src/server/core/primitives/$action.ts +26 -36
  783. package/src/server/core/primitives/$sse.ts +3 -3
  784. package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
  785. package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
  786. package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
  787. package/src/server/core/providers/ServerCompressProvider.ts +9 -10
  788. package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
  789. package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
  790. package/src/server/core/providers/ServerRouterProvider.ts +44 -15
  791. package/src/server/core/schemas/errorSchema.ts +20 -25
  792. package/src/server/core/schemas/okSchema.ts +9 -14
  793. package/src/server/core/services/HttpClient.ts +13 -1
  794. package/src/server/core/services/ServerRequestParser.ts +6 -6
  795. package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
  796. package/src/server/health/schemas/healthSchema.ts +6 -6
  797. package/src/server/links/__tests__/$remote.spec.ts +3 -3
  798. package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
  799. package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
  800. package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
  801. package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
  802. package/src/server/links/atoms/apiLinksAtom.ts +2 -2
  803. package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
  804. package/src/server/links/primitives/$remote.ts +3 -3
  805. package/src/server/links/providers/LinkProvider.ts +3 -3
  806. package/src/server/links/providers/ServerLinksProvider.ts +20 -20
  807. package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
  808. package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
  809. package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
  810. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
  811. package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
  812. package/src/server/swagger/__tests__/ui.spec.ts +3 -3
  813. package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
  814. package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
  815. package/src/system/providers/NodeShellProvider.ts +4 -1
  816. package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
  817. package/src/topic/core/__tests__/shared.ts +8 -8
  818. package/src/topic/core/primitives/$subscriber.ts +5 -5
  819. package/src/topic/core/primitives/$topic.ts +14 -14
  820. package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
  821. package/dist/container/core/index.d.ts +0 -236
  822. package/dist/container/core/index.d.ts.map +0 -1
  823. package/dist/container/core/index.js +0 -231
  824. package/dist/container/core/index.js.map +0 -1
  825. package/dist/container/core/index.workerd.js +0 -192
  826. package/dist/container/core/index.workerd.js.map +0 -1
  827. package/src/command/helpers/PrettyAsker.ts +0 -256
  828. package/src/command/helpers/PrettyPrint.ts +0 -332
  829. package/src/container/core/__tests__/$container.spec.ts +0 -83
  830. package/src/container/core/index.ts +0 -50
  831. package/src/container/core/index.workerd.ts +0 -53
  832. package/src/container/core/interfaces/ContainerOptions.ts +0 -69
  833. package/src/container/core/primitives/$container.ts +0 -100
  834. package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
  835. package/src/container/core/providers/ContainerProvider.ts +0 -92
  836. package/src/container/core/providers/MockContainerProvider.ts +0 -62
  837. package/src/container/core/providers/NodeContainerProvider.ts +0 -53
  838. package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
  839. package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
  840. package/src/server/auth/__tests__/authFederationClient.spec.ts +0 -40
  841. package/src/server/auth/__tests__/federationAssertion.spec.ts +0 -146
  842. package/src/server/auth/helpers/federationAssertion.ts +0 -74
  843. package/src/server/auth/primitives/$authFederationBroker.ts +0 -273
  844. package/src/server/auth/primitives/$authFederationClient.ts +0 -89
  845. /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
@@ -1,37 +1,5 @@
1
- import { $context, $inject, $module, Alepha, AlephaError, KIND, t } from "alepha";
1
+ import { $context, $inject, $module, Alepha, AlephaError, KIND, z } from "alepha";
2
2
  import { DateTimeProvider } from "alepha/datetime";
3
- //#region ../../src/logger/providers/LogFormatterProvider.ts
4
- var LogFormatterProvider = class {};
5
- //#endregion
6
- //#region ../../src/logger/providers/JsonFormatterProvider.ts
7
- var JsonFormatterProvider = class extends LogFormatterProvider {
8
- format(entry) {
9
- const json = {
10
- level: entry.level,
11
- message: entry.message,
12
- context: entry.context,
13
- service: entry.service,
14
- module: entry.module,
15
- app: entry.app,
16
- time: entry.timestamp
17
- };
18
- if (entry.data instanceof Error) json.error = this.formatJsonError(entry.data);
19
- else json.data = entry.data;
20
- return JSON.stringify(json);
21
- }
22
- formatJsonError(error) {
23
- return {
24
- name: error.name,
25
- message: error.message,
26
- stack: error.stack,
27
- cause: error.cause instanceof Error ? this.formatJsonError(error.cause) : void 0
28
- };
29
- }
30
- };
31
- //#endregion
32
- //#region ../../src/logger/providers/LogDestinationProvider.ts
33
- var LogDestinationProvider = class {};
34
- //#endregion
35
3
  //#region ../../src/logger/providers/ConsoleColorProvider.ts
36
4
  var ConsoleColorProvider = class ConsoleColorProvider {
37
5
  static COLORS = {
@@ -76,6 +44,9 @@ var ConsoleColorProvider = class ConsoleColorProvider {
76
44
  }
77
45
  };
78
46
  //#endregion
47
+ //#region ../../src/logger/providers/LogFormatterProvider.ts
48
+ var LogFormatterProvider = class {};
49
+ //#endregion
79
50
  //#region ../../src/logger/providers/PrettyFormatterProvider.ts
80
51
  var PrettyFormatterProvider = class extends LogFormatterProvider {
81
52
  color = $inject(ConsoleColorProvider);
@@ -159,6 +130,85 @@ var PrettyFormatterProvider = class extends LogFormatterProvider {
159
130
  }
160
131
  };
161
132
  //#endregion
133
+ //#region ../../src/logger/providers/CliFormatterProvider.ts
134
+ /**
135
+ * Compact formatter for CLI output.
136
+ *
137
+ * Renders `HH:MM:SS L message {json}` — a short clock time, a single-letter
138
+ * level colored by severity, the message, and any structured data appended
139
+ * dim. Deliberately drops the `<module.service>`, app name and context UUID
140
+ * that {@link PrettyFormatterProvider} prints: in an interactive CLI session
141
+ * those are noise. Use `pretty` (or `--verbose`) when you need them, `raw`
142
+ * when you want the bare message for piping, and `json` for aggregation.
143
+ */
144
+ var CliFormatterProvider = class extends PrettyFormatterProvider {
145
+ format(entry) {
146
+ const { data, timestamp, level } = entry;
147
+ const isError = data instanceof Error;
148
+ let details = "";
149
+ if (isError) details = this.formatError(data);
150
+ else if (data) {
151
+ let error = "";
152
+ let jsonData = data;
153
+ if ("error" in data && data.error instanceof Error) {
154
+ error = this.formatError(data.error);
155
+ const { error: _, ...rest } = data;
156
+ jsonData = rest;
157
+ }
158
+ if (Object.keys(jsonData).length > 0) try {
159
+ details = JSON.stringify(jsonData);
160
+ } catch {
161
+ details = "[Unserializable Object]";
162
+ }
163
+ if (error) details += `\n${error}`;
164
+ }
165
+ let output = "";
166
+ output += this.color.set("GREY_DARK", this.formatClockTime(timestamp));
167
+ output += " ";
168
+ output += this.color.set(level, level.charAt(0).toUpperCase());
169
+ if (entry.message) output += ` ${entry.message}`;
170
+ if (details) if (isError) output += ` \n${details}`;
171
+ else output += ` ${this.color.set("GREY_DARK", details)}`;
172
+ return output;
173
+ }
174
+ /**
175
+ * Short clock time without milliseconds (HH:MM:SS).
176
+ */
177
+ formatClockTime(timestamp) {
178
+ const d = new Date(timestamp);
179
+ return `${this.pad2(d.getHours())}:${this.pad2(d.getMinutes())}:${this.pad2(d.getSeconds())}`;
180
+ }
181
+ };
182
+ //#endregion
183
+ //#region ../../src/logger/providers/JsonFormatterProvider.ts
184
+ var JsonFormatterProvider = class extends LogFormatterProvider {
185
+ format(entry) {
186
+ const json = {
187
+ level: entry.level,
188
+ message: entry.message,
189
+ context: entry.context,
190
+ service: entry.service,
191
+ module: entry.module,
192
+ app: entry.app,
193
+ time: entry.timestamp
194
+ };
195
+ if (entry.data instanceof Error) json.error = this.formatJsonError(entry.data);
196
+ else json.data = entry.data;
197
+ return JSON.stringify(json);
198
+ }
199
+ formatJsonError(error) {
200
+ return {
201
+ name: error.name,
202
+ message: error.message,
203
+ stack: error.stack,
204
+ cause: error.cause instanceof Error ? this.formatJsonError(error.cause) : void 0
205
+ };
206
+ }
207
+ };
208
+ //#endregion
209
+ //#region ../../src/logger/providers/LogDestinationProvider.ts
210
+ var LogDestinationProvider = class {};
211
+ //#endregion
162
212
  //#region ../../src/logger/providers/RawFormatterProvider.ts
163
213
  var RawFormatterProvider = class extends LogFormatterProvider {
164
214
  format(entry) {
@@ -188,6 +238,7 @@ var Logger = class {
188
238
  jsonFormatter = $inject(JsonFormatterProvider);
189
239
  prettyFormatter = $inject(PrettyFormatterProvider);
190
240
  rawFormatter = $inject(RawFormatterProvider);
241
+ cliFormatter = $inject(CliFormatterProvider);
191
242
  destination = $inject(LogDestinationProvider);
192
243
  dateTimeProvider = $inject(DateTimeProvider);
193
244
  levels = {
@@ -230,6 +281,7 @@ var Logger = class {
230
281
  case "json": return this.jsonFormatter;
231
282
  case "pretty": return this.prettyFormatter;
232
283
  case "raw": return this.rawFormatter;
284
+ case "cli": return this.cliFormatter;
233
285
  default: return this.defaultFormatter;
234
286
  }
235
287
  }
@@ -273,6 +325,19 @@ var Logger = class {
273
325
  if (this.levels[level] !== void 0) return level;
274
326
  throw new AlephaError(`Invalid log level: ${something}`);
275
327
  }
328
+ /**
329
+ * Whether a message at `level` would actually be emitted given the current
330
+ * active level (read live from state). Mirrors the threshold used by
331
+ * {@link log}: a level is enabled when it sits at or above the active one.
332
+ *
333
+ * @example
334
+ * // active level = INFO
335
+ * log.isLevelEnabled("DEBUG"); // false
336
+ * log.isLevelEnabled("WARN"); // true
337
+ */
338
+ isLevelEnabled(level) {
339
+ return this.levels[level] <= this.levels[this.level];
340
+ }
276
341
  error(message, data) {
277
342
  this.log("ERROR", message, data);
278
343
  }
@@ -377,8 +442,8 @@ var MemoryDestinationProvider = class extends LogDestinationProvider {
377
442
  };
378
443
  //#endregion
379
444
  //#region ../../src/logger/schemas/logEntrySchema.ts
380
- const logEntrySchema = t.object({
381
- level: t.enum([
445
+ const logEntrySchema = z.object({
446
+ level: z.enum([
382
447
  "SILENT",
383
448
  "TRACE",
384
449
  "DEBUG",
@@ -386,13 +451,13 @@ const logEntrySchema = t.object({
386
451
  "WARN",
387
452
  "ERROR"
388
453
  ]),
389
- message: t.text({ size: "rich" }),
390
- service: t.text(),
391
- module: t.text(),
392
- context: t.optional(t.text()),
393
- app: t.optional(t.text()),
394
- data: t.optional(t.any()),
395
- timestamp: t.number()
454
+ message: z.text({ size: "rich" }),
455
+ service: z.text(),
456
+ module: z.text(),
457
+ context: z.text().optional(),
458
+ app: z.text().optional(),
459
+ data: z.any().optional(),
460
+ timestamp: z.number()
396
461
  });
397
462
  //#endregion
398
463
  //#region ../../src/logger/index.ts
@@ -403,6 +468,7 @@ const logEntrySchema = t.object({
403
468
  * - Global logger access
404
469
  * - JSON format
405
470
  * - Pretty colored output
471
+ * - Compact CLI format
406
472
  * - Raw text format
407
473
  * - Console destination
408
474
  * - Memory destination (for devtools)
@@ -420,7 +486,8 @@ const AlephaLogger = $module({
420
486
  MemoryDestinationProvider,
421
487
  JsonFormatterProvider,
422
488
  PrettyFormatterProvider,
423
- RawFormatterProvider
489
+ RawFormatterProvider,
490
+ CliFormatterProvider
424
491
  ],
425
492
  register: (alepha) => {
426
493
  const env = alepha.parseEnv(envSchema);
@@ -454,6 +521,7 @@ const AlephaLogger = $module({
454
521
  if (logFormat) {
455
522
  if (logFormat === "json") return JsonFormatterProvider;
456
523
  if (logFormat === "raw") return RawFormatterProvider;
524
+ if (logFormat === "cli") return CliFormatterProvider;
457
525
  return PrettyFormatterProvider;
458
526
  }
459
527
  if (alepha.isProduction() && !alepha.isBrowser()) return JsonFormatterProvider;
@@ -476,7 +544,7 @@ const AlephaLogger = $module({
476
544
  alepha.store.set("alepha.logger.level", logLevel ?? (alepha.isTest() ? "trace" : alepha.isProduction() && alepha.isBrowser() ? "warn" : "info"));
477
545
  }
478
546
  });
479
- const envSchema = t.object({
547
+ const envSchema = z.object({
480
548
  /**
481
549
  * Enable debug logging for specific modules using the `debug` package convention.
482
550
  *
@@ -486,7 +554,7 @@ const envSchema = t.object({
486
554
  * DEBUG=alepha:orm:* # Enable debug logging for alepha.orm modules
487
555
  * DEBUG=* # Enable debug logging for all modules
488
556
  */
489
- DEBUG: t.optional(t.text({ description: "Enable debug logging for specific modules using the debug package convention. Example: DEBUG=alepha:*" })),
557
+ DEBUG: z.text({ description: "Enable debug logging for specific modules using the debug package convention. Example: DEBUG=alepha:*" }).optional(),
490
558
  /**
491
559
  * Default log level for the application.
492
560
  *
@@ -503,30 +571,29 @@ const envSchema = t.object({
503
571
  * LOG_LEVEL=my.module.name:debug,info # Set debug level for my.module.name and info for all other modules
504
572
  * LOG_LEVEL=alepha:trace, info # Set trace level for all alepha modules and info for all other modules
505
573
  */
506
- LOG_LEVEL: t.optional(t.text({
574
+ LOG_LEVEL: z.text({
507
575
  description: `Application log level on startup.
508
576
  Levels are: trace, debug, info, warn, error, silent
509
577
  Level can be set for a specific module:
510
578
  "my.module.name:debug,info" -> Set debug level for my.module.name and info for all other modules
511
579
  "alepha:trace,info" -> Set trace level for all alepha modules and info for all other modules`,
512
580
  lowercase: true
513
- })),
581
+ }).optional(),
514
582
  /**
515
583
  * Built-in log formats.
516
584
  * - "json" - JSON format, useful for structured logging and log aggregation. {@link JsonFormatterProvider}
517
- * - "pretty" - Simple text format, human-readable, with colors. {@link PrettyFormatterProvider}
518
- * - "raw" - Raw format, no formatting, just the message. {@link RawFormatterProvider}
585
+ * - "pretty" - Full text format, human-readable, with colors and module/context. {@link PrettyFormatterProvider}
586
+ * - "cli" - Compact format for CLI sessions: time, level initial, message, json. {@link CliFormatterProvider}
587
+ * - "raw" - Raw format, no formatting, just the message (best for piping). {@link RawFormatterProvider}
519
588
  */
520
- LOG_FORMAT: t.optional(t.enum([
589
+ LOG_FORMAT: z.enum([
521
590
  "json",
522
591
  "pretty",
523
- "raw"
524
- ], {
525
- description: "Default log format for the application.",
526
- lowercase: true
527
- }))
592
+ "raw",
593
+ "cli"
594
+ ]).meta({ lowercase: true }).describe("Default log format for the application.").optional()
528
595
  });
529
596
  //#endregion
530
- export { $logger, AlephaLogger, ConsoleColorProvider, ConsoleDestinationProvider, JsonFormatterProvider, LogDestinationProvider, LogFormatterProvider, Logger, MemoryDestinationProvider, PrettyFormatterProvider, RawFormatterProvider, logEntrySchema };
597
+ export { $logger, AlephaLogger, CliFormatterProvider, ConsoleColorProvider, ConsoleDestinationProvider, JsonFormatterProvider, LogDestinationProvider, LogFormatterProvider, Logger, MemoryDestinationProvider, PrettyFormatterProvider, RawFormatterProvider, logEntrySchema };
531
598
 
532
599
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/logger/providers/LogFormatterProvider.ts","../../src/logger/providers/JsonFormatterProvider.ts","../../src/logger/providers/LogDestinationProvider.ts","../../src/logger/providers/ConsoleColorProvider.ts","../../src/logger/providers/PrettyFormatterProvider.ts","../../src/logger/providers/RawFormatterProvider.ts","../../src/logger/services/Logger.ts","../../src/logger/primitives/$logger.ts","../../src/logger/providers/ConsoleDestinationProvider.ts","../../src/logger/providers/MemoryDestinationProvider.ts","../../src/logger/schemas/logEntrySchema.ts","../../src/logger/index.ts"],"sourcesContent":["import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport abstract class LogFormatterProvider {\n public abstract format(entry: LogEntry): string;\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class JsonFormatterProvider extends LogFormatterProvider {\n public format(entry: LogEntry): string {\n const json: Record<string, any> = {\n level: entry.level,\n message: entry.message,\n context: entry.context,\n service: entry.service,\n module: entry.module,\n app: entry.app,\n time: entry.timestamp,\n };\n\n if (entry.data instanceof Error) {\n json.error = this.formatJsonError(entry.data);\n } else {\n json.data = entry.data;\n }\n\n return JSON.stringify(json);\n }\n\n public formatJsonError(error: Error): object {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n cause:\n error.cause instanceof Error\n ? this.formatJsonError(error.cause)\n : undefined,\n };\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport abstract class LogDestinationProvider {\n public abstract write(message: string, entry: LogEntry): void;\n}\n","import { $inject, Alepha } from \"alepha\";\n\nexport class ConsoleColorProvider {\n static readonly COLORS = {\n RESET: \"\\x1b[0m\",\n BLACK: \"\\x1b[30m\",\n RED: \"\\x1b[31m\",\n GREEN: \"\\x1b[32m\",\n ORANGE: \"\\x1b[33m\", // using yellow for orange-ish\n BLUE: \"\\x1b[34m\",\n PURPLE: \"\\x1b[35m\",\n CYAN: \"\\x1b[36m\",\n GREY_LIGHT: \"\\x1b[37m\",\n GREY_LIGHT_BOLD: \"\\x1b[1;37m\",\n GREY_DARK: \"\\x1b[90m\",\n GREY_DARK_BOLD: \"\\x1b[1;90m\",\n WHITE: \"\\x1b[97m\",\n WHITE_BOLD: \"\\x1b[1;97m\",\n // modifiers\n DIM: \"\\x1b[2m\",\n BOLD: \"\\x1b[1m\",\n INVERSE: \"\\x1b[7m\",\n // levels\n SILENT: \"\",\n ERROR: \"\\x1b[31m\",\n WARN: \"\\x1b[33m\",\n INFO: \"\\x1b[32m\",\n DEBUG: \"\\x1b[34m\",\n TRACE: \"\\x1b[90m\",\n };\n\n protected readonly alepha = $inject(Alepha);\n\n protected enabled = true;\n\n constructor() {\n this.enabled = this.isEnabled();\n }\n\n public isEnabled(): boolean {\n if (this.alepha.env.NO_COLOR) {\n return false;\n }\n\n if (this.alepha.env.FORCE_COLOR) {\n return true;\n }\n\n if (this.alepha.isBrowser() && !navigator.userAgent.includes(\"Chrome\")) {\n return false;\n }\n\n return !this.alepha.isProduction();\n }\n\n public set(\n color: keyof typeof ConsoleColorProvider.COLORS,\n text: string,\n reset: string = ConsoleColorProvider.COLORS.RESET,\n ): string {\n if (!this.enabled) {\n return text;\n }\n\n return `${ConsoleColorProvider.COLORS[color]}${text}${reset}`;\n }\n}\n","import { $inject, Alepha } from \"alepha\";\nimport type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { ConsoleColorProvider } from \"./ConsoleColorProvider.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class PrettyFormatterProvider extends LogFormatterProvider {\n protected color = $inject(ConsoleColorProvider);\n protected alepha = $inject(Alepha);\n\n public format(entry: LogEntry): string {\n const { data, timestamp } = entry;\n\n let output = \"\";\n let details = \"\";\n\n const isError = data instanceof Error;\n if (isError) {\n details = this.formatError(data);\n } else if (data) {\n let error = \"\";\n let jsonData = data;\n if (\"error\" in data && data.error instanceof Error) {\n error = this.formatError(data.error);\n const { error: _, ...rest } = data;\n jsonData = rest;\n }\n\n if (Object.keys(jsonData).length > 0) {\n try {\n details = JSON.stringify(jsonData);\n } catch {\n details = \"[Unserializable Object]\";\n }\n }\n\n if (error) {\n details += `\\n${error}`;\n }\n }\n\n output += this.color.set(\n \"GREY_DARK\",\n `[${this.formatTimestamp(timestamp)}]`,\n );\n output += \" \";\n\n output += this.color.set(entry.level, entry.level.toUpperCase());\n output += \" \";\n\n if (entry.app) {\n output += this.color.set(\"GREY_DARK\", `${entry.app}`);\n output += \" \";\n }\n\n if (entry.context) {\n output += this.color.set(\n \"GREY_DARK\",\n `(${this.formatContext(entry.context)})`,\n );\n output += \" \";\n }\n\n const module = this.color.set(\"GREY_LIGHT\", `${entry.module}.`);\n const service = this.color.set(\n this.alepha.isBrowser() ? \"RESET\" : \"WHITE\",\n entry.service,\n );\n\n output += `<${module}${service}>`;\n\n if (entry.message) {\n output += `: ${this.color.set(\"CYAN\", entry.message)}`;\n } else {\n output += \":\";\n }\n\n if (details) {\n if (isError) {\n output += ` \\n${details}`;\n } else {\n output += ` ${this.color.set(\"GREY_DARK\", details)}`;\n }\n }\n\n return output;\n }\n\n public formatTimestamp(timestamp: number): string {\n const d = new Date(timestamp);\n const h = d.getHours();\n const m = d.getMinutes();\n const s = d.getSeconds();\n const ms = d.getMilliseconds();\n\n return `${this.pad2(h)}:${this.pad2(m)}:${this.pad2(s)}.${this.pad3(ms)}`;\n }\n\n protected pad2 = (n: number) => (n < 10 ? \"0\" : \"\") + n;\n protected pad3 = (n: number) =>\n n < 10 ? `00${n}` : n < 100 ? `0${n}` : `${n}`;\n\n /**\n * Avoid to display the whole UUID in development mode\n */\n protected formatContext(context: string): string {\n if (this.alepha.isProduction()) {\n return context;\n }\n\n return context.slice(0, 8);\n }\n\n protected formatError(error: Error): string {\n // Chrome does not like stack traces with ASCII colors\n // so we remove the stack trace from log and just print with console.error\n if (this.alepha.isBrowser()) {\n // call console.error in a separate tick to avoid messing with log order\n setTimeout(() => {\n console.error(error);\n });\n return \"\";\n }\n\n // hack: use vite's stack trace formatter if available\n const vite = this.alepha.store.get(\"alepha.vite.server\") as\n | {\n ssrFixStacktrace: (error: Error) => void;\n }\n | undefined;\n\n vite?.ssrFixStacktrace(error);\n\n let str = error.stack ?? error.message;\n\n let currentCause = (error as any).cause;\n while (currentCause && currentCause instanceof Error) {\n vite?.ssrFixStacktrace(currentCause);\n\n str += `\\nCaused by: ${currentCause.stack ?? currentCause.message}`;\n currentCause = currentCause.cause;\n }\n\n return str;\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class RawFormatterProvider extends LogFormatterProvider {\n public format(entry: LogEntry): string {\n let output = \"\";\n\n output += `${entry.message}`;\n\n if (entry.data instanceof Error) {\n output += `\\n${entry.data.message}`;\n let cause = entry.data.cause;\n while (cause instanceof Error) {\n output += `\\nCaused by: ${cause.message}`;\n cause = cause.cause;\n }\n }\n\n return output;\n }\n}\n","import {\n $inject,\n Alepha,\n AlephaError,\n type LoggerInterface,\n type LogLevel,\n} from \"alepha\";\nimport { DateTimeProvider } from \"alepha/datetime\";\nimport { JsonFormatterProvider } from \"../providers/JsonFormatterProvider.ts\";\nimport { LogDestinationProvider } from \"../providers/LogDestinationProvider.ts\";\nimport { LogFormatterProvider } from \"../providers/LogFormatterProvider.ts\";\nimport { PrettyFormatterProvider } from \"../providers/PrettyFormatterProvider.ts\";\nimport { RawFormatterProvider } from \"../providers/RawFormatterProvider.ts\";\nimport type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport class Logger implements LoggerInterface {\n protected readonly alepha = $inject(Alepha);\n /**\n * Formatter chosen at register time (from `LOG_FORMAT`, honoring any\n * custom `LogFormatterProvider` substitution). Used unless a runtime\n * `alepha.logger.format` override is set — see {@link formatter}.\n */\n protected readonly defaultFormatter = $inject(LogFormatterProvider);\n protected readonly jsonFormatter = $inject(JsonFormatterProvider);\n protected readonly prettyFormatter = $inject(PrettyFormatterProvider);\n protected readonly rawFormatter = $inject(RawFormatterProvider);\n protected readonly destination = $inject(LogDestinationProvider);\n protected readonly dateTimeProvider = $inject(DateTimeProvider);\n\n protected readonly levels: Record<string, number> = {\n SILENT: -1,\n ERROR: 0,\n WARN: 1,\n INFO: 2,\n DEBUG: 3,\n TRACE: 4,\n };\n\n protected readonly service: string;\n protected readonly module: string;\n protected readonly app?: string;\n\n protected appLogLevel: string = \"INFO\";\n protected logLevel: LogLevel = \"INFO\";\n\n constructor(service: string, module: string) {\n this.service = service;\n this.module = module;\n this.app = this.alepha.env.APP_NAME;\n }\n\n public get context(): string | undefined {\n return this.alepha.context.get<string>(\"context\");\n }\n\n public get level(): string {\n const stateLogLevel = this.alepha.store.get(\"alepha.logger.level\");\n if (stateLogLevel && stateLogLevel !== this.appLogLevel) {\n this.appLogLevel = stateLogLevel;\n this.logLevel = this.parseLevel(this.appLogLevel, this.module);\n }\n return this.logLevel;\n }\n\n /**\n * Active formatter. Honors a runtime `alepha.logger.format` override\n * (read live, like {@link level}); otherwise falls back to the\n * register-time {@link defaultFormatter} so custom substitutions and the\n * `LOG_FORMAT` default keep working.\n */\n protected get formatter(): LogFormatterProvider {\n switch (this.alepha.store.get(\"alepha.logger.format\")) {\n case \"json\":\n return this.jsonFormatter;\n case \"pretty\":\n return this.prettyFormatter;\n case \"raw\":\n return this.rawFormatter;\n default:\n return this.defaultFormatter;\n }\n }\n\n public parseLevel(level: string, app: string): LogLevel {\n const parts = level.toLowerCase().split(/[,;]/);\n\n // First pass: check for module-specific configurations\n for (const part of parts) {\n const trimmedPart = part.trim();\n if (!trimmedPart) continue; // Skip empty parts\n\n if (trimmedPart.includes(\":\") || trimmedPart.includes(\"=\")) {\n const [modulePattern, levelValue] = trimmedPart.split(/[:=]/);\n const trimmedModule = modulePattern.trim();\n const trimmedLevel = levelValue?.trim();\n\n if (!trimmedLevel) continue; // Skip if no level specified\n\n if (this.matchesPattern(app, trimmedModule)) {\n try {\n return this.asLogLevel(trimmedLevel);\n } catch (error) {\n throw new AlephaError(\n `Invalid log level '${levelValue?.trim()}' for module pattern '${trimmedModule}'`,\n );\n }\n }\n }\n }\n\n // Second pass: look for global level\n for (const part of parts) {\n const trimmedPart = part.trim();\n if (!trimmedPart) continue; // Skip empty parts\n\n if (!trimmedPart.includes(\":\") && !trimmedPart.includes(\"=\")) {\n try {\n return this.asLogLevel(trimmedPart);\n } catch (error) {\n throw new AlephaError(`Invalid global log level \"${trimmedPart}\"`);\n }\n }\n }\n\n return \"INFO\";\n }\n\n protected matchesPattern(moduleName: string, pattern: string): boolean {\n if (pattern.includes(\"*\")) {\n // Convert wildcard pattern to regex\n const regexPattern = pattern.replace(/\\./g, \"\\\\.\").replace(/\\*/g, \".*\");\n return new RegExp(`^${regexPattern}`).test(moduleName);\n }\n\n // Exact prefix match (existing behavior)\n return moduleName.startsWith(pattern);\n }\n\n public asLogLevel(something: string): LogLevel {\n const level = something.trim().toUpperCase();\n if (this.levels[level] !== undefined) {\n return level as LogLevel;\n }\n\n throw new AlephaError(`Invalid log level: ${something}`);\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n public error(message: string, data?: unknown): void {\n this.log(\"ERROR\", message, data);\n }\n\n public warn(message: string, data?: unknown): void {\n this.log(\"WARN\", message, data);\n }\n\n public info(message: string, data?: unknown): void {\n this.log(\"INFO\", message, data);\n }\n\n public debug(message: string, data?: unknown): void {\n this.log(\"DEBUG\", message, data);\n }\n\n public trace(message: string, data?: unknown): void {\n this.log(\"TRACE\", message, data);\n }\n\n protected log(level: LogLevel, message: string, data?: unknown): void {\n let _message = \"\";\n if (typeof message === \"string\") {\n _message = message;\n } else if (typeof data === \"string\") {\n _message = data;\n }\n\n let _data: object | Error | undefined;\n if (typeof data === \"object\" && data) {\n _data = data;\n } else if (typeof message === \"object\" && message) {\n _data = message;\n }\n\n const logEntry: LogEntry = {\n level,\n message: _message,\n data: _data,\n context: this.context,\n service: this.service,\n module: this.module,\n app: this.app,\n timestamp: this.dateTimeProvider.nowMillis(),\n };\n\n if (this.levels[level] > this.levels[this.level]) {\n this.emit(logEntry);\n return;\n }\n\n const formatted = this.formatter.format(logEntry);\n\n this.emit(logEntry, formatted);\n\n this.destination.write(formatted, logEntry);\n }\n\n protected emit(entry: LogEntry, message?: string) {\n this.alepha.events\n .emit(\n \"log\",\n {\n message,\n entry,\n },\n {\n catch: true,\n },\n )\n .catch(() => null);\n }\n}\n","import { $context, $inject, KIND } from \"alepha\";\nimport { Logger } from \"../services/Logger.ts\";\n\n/**\n * Create a logger.\n *\n * `name` is optional, by default it will use the name of the service.\n *\n * @example\n * ```ts\n * import { $logger } from \"alepha\";\n *\n * class MyService {\n * \tlog = $logger();\n *\n * constructor() {\n * this.log.info(\"Service initialized\");\n * // print something like '[23:45:53.326] INFO <app.MyService>: Service initialized'\n * }\n * }\n * ```\n */\nexport const $logger = (options: LoggerPrimitiveOptions = {}): Logger => {\n const { alepha, service, module } = $context();\n\n return $inject(Logger, {\n lifetime: \"transient\",\n args: [\n options.name ?? service?.name ?? \"Func\",\n module?.name ?? alepha.env.MODULE_NAME ?? \"app\",\n ],\n });\n};\n\nexport interface LoggerPrimitiveOptions {\n name?: string;\n}\n\n$logger[KIND] = Logger;\n","import { LogDestinationProvider } from \"./LogDestinationProvider.ts\";\n\nexport class ConsoleDestinationProvider extends LogDestinationProvider {\n public write(message: string): void {\n console.log(message);\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogDestinationProvider } from \"./LogDestinationProvider.ts\";\n\nexport class MemoryDestinationProvider extends LogDestinationProvider {\n protected entries: Array<LogEntry & { formatted: string }> = [];\n\n public readonly options = {\n maxEntries: 10_000,\n };\n\n public write(formatted: string, entry: LogEntry): void {\n this.entries.push({ ...entry, formatted });\n\n if (this.entries.length > this.options.maxEntries) {\n this.entries = this.entries.slice(\n -Math.floor(this.options.maxEntries * 0.8),\n );\n }\n }\n\n public get logs() {\n return [...this.entries];\n }\n\n public clear(): void {\n this.entries = [];\n }\n}\n","import { type Static, t } from \"alepha\";\n\nexport const logEntrySchema = t.object({\n level: t.enum([\"SILENT\", \"TRACE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n message: t.text({\n size: \"rich\",\n }),\n service: t.text(),\n module: t.text(),\n context: t.optional(t.text()),\n app: t.optional(t.text()),\n data: t.optional(t.any()),\n timestamp: t.number(),\n});\n\nexport type LogEntry = Static<typeof logEntrySchema>;\n","import { $module, type Static, t } from \"alepha\";\nimport { $logger } from \"./primitives/$logger.ts\";\nimport { ConsoleColorProvider } from \"./providers/ConsoleColorProvider.ts\";\nimport { ConsoleDestinationProvider } from \"./providers/ConsoleDestinationProvider.ts\";\nimport { JsonFormatterProvider } from \"./providers/JsonFormatterProvider.ts\";\nimport { LogDestinationProvider } from \"./providers/LogDestinationProvider.ts\";\nimport { LogFormatterProvider } from \"./providers/LogFormatterProvider.ts\";\nimport { MemoryDestinationProvider } from \"./providers/MemoryDestinationProvider.ts\";\nimport { PrettyFormatterProvider } from \"./providers/PrettyFormatterProvider.ts\";\nimport { RawFormatterProvider } from \"./providers/RawFormatterProvider.ts\";\nimport type { LogEntry } from \"./schemas/logEntrySchema.ts\";\nimport { Logger } from \"./services/Logger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$logger.ts\";\nexport * from \"./providers/ConsoleColorProvider.ts\";\nexport * from \"./providers/ConsoleDestinationProvider.ts\";\nexport * from \"./providers/JsonFormatterProvider.ts\";\nexport * from \"./providers/LogDestinationProvider.ts\";\nexport * from \"./providers/LogFormatterProvider.ts\";\nexport * from \"./providers/MemoryDestinationProvider.ts\";\nexport * from \"./providers/PrettyFormatterProvider.ts\";\nexport * from \"./providers/RawFormatterProvider.ts\";\nexport * from \"./schemas/logEntrySchema.ts\";\nexport * from \"./services/Logger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Configurable logging with multiple outputs.\n *\n * **Features:**\n * - Global logger access\n * - JSON format\n * - Pretty colored output\n * - Raw text format\n * - Console destination\n * - Memory destination (for devtools)\n * - Custom handlers\n * - Configuration via `LOG_LEVEL`, `LOG_FORMAT`, and `DEBUG`\n *\n * @module alepha.logger\n */\nexport const AlephaLogger = $module({\n name: \"alepha.logger\",\n primitives: [$logger],\n services: [Logger, ConsoleColorProvider],\n variants: [\n ConsoleDestinationProvider,\n MemoryDestinationProvider,\n JsonFormatterProvider,\n PrettyFormatterProvider,\n RawFormatterProvider,\n ],\n register: (alepha) => {\n const env = alepha.parseEnv(envSchema);\n\n // Support DEBUG env var (debug package convention) as shorthand for LOG_LEVEL/LOG_FORMAT.\n // DEBUG=1 → LOG_LEVEL=trace LOG_FORMAT=pretty\n // DEBUG=alepha:* → LOG_LEVEL=alepha.*:debug,info LOG_FORMAT=pretty\n let logLevel = env.LOG_LEVEL;\n let logFormat = env.LOG_FORMAT;\n if (env.DEBUG) {\n if (env.DEBUG === \"1\" || env.DEBUG === \"true\") {\n logLevel ??= \"trace\";\n } else {\n const patterns = env.DEBUG.split(\",\")\n .map((p) => p.trim().replaceAll(\":\", \".\"))\n .filter(Boolean);\n logLevel ??= `${patterns.map((p) => `${p}:debug`).join(\",\")},info`;\n }\n logFormat ??= \"pretty\";\n }\n\n const getLogDestinationProvider = () => {\n // in test mode, if no LOG_LEVEL is set, use MemoryDestinationProvider to capture logs for inspection.\n // logs will be printed to console only if the test fails.\n if (alepha.isTest() && !logLevel) {\n const printOnError = (ev: any) => {\n if (ev.task?.result?.state === \"fail\") {\n const output = alepha.inject(MemoryDestinationProvider);\n for (const log of output.logs) {\n console.log(log.formatted);\n }\n }\n };\n\n try {\n alepha.store.get(\"alepha.test.afterEach\")?.(printOnError);\n alepha.store.get(\"alepha.test.onTestFinished\")?.(printOnError);\n } catch {\n // ignore\n }\n\n return MemoryDestinationProvider;\n }\n\n return ConsoleDestinationProvider;\n };\n\n const getLogFormatterProvider = () => {\n if (logFormat) {\n if (logFormat === \"json\") {\n return JsonFormatterProvider;\n }\n if (logFormat === \"raw\") {\n return RawFormatterProvider;\n }\n return PrettyFormatterProvider;\n }\n\n if (alepha.isProduction() && !alepha.isBrowser()) {\n return JsonFormatterProvider;\n }\n\n return PrettyFormatterProvider;\n };\n\n alepha.with({\n optional: true,\n provide: LogDestinationProvider,\n use: getLogDestinationProvider(),\n });\n\n alepha.with({\n optional: true,\n provide: LogFormatterProvider,\n use: getLogFormatterProvider(),\n });\n\n alepha.store.set(\n \"alepha.logger\",\n alepha.inject(Logger, {\n lifetime: \"transient\",\n args: [\"Alepha\", \"alepha.core\"],\n }),\n );\n\n alepha.store.set(\n \"alepha.logger.level\",\n logLevel ??\n (alepha.isTest()\n ? \"trace\"\n : alepha.isProduction() && alepha.isBrowser()\n ? \"warn\"\n : \"info\"),\n );\n },\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst envSchema = t.object({\n /**\n * Enable debug logging for specific modules using the `debug` package convention.\n *\n * @example\n * DEBUG=1 # Shorthand for LOG_LEVEL=trace LOG_FORMAT=pretty\n * DEBUG=alepha:* # Enable debug logging for all alepha modules\n * DEBUG=alepha:orm:* # Enable debug logging for alepha.orm modules\n * DEBUG=* # Enable debug logging for all modules\n */\n DEBUG: t.optional(\n t.text({\n description:\n \"Enable debug logging for specific modules using the debug package convention. Example: DEBUG=alepha:*\",\n }),\n ),\n\n /**\n * Default log level for the application.\n *\n * Default by environment:\n * - dev = info\n * - prod = info\n * - test = error\n *\n * Levels are: \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\"\n *\n * Level can be set for a specific module:\n *\n * @example\n * LOG_LEVEL=my.module.name:debug,info # Set debug level for my.module.name and info for all other modules\n * LOG_LEVEL=alepha:trace, info # Set trace level for all alepha modules and info for all other modules\n */\n LOG_LEVEL: t.optional(\n t.text({\n description: `Application log level on startup.\nLevels are: trace, debug, info, warn, error, silent\nLevel can be set for a specific module:\n\"my.module.name:debug,info\" -> Set debug level for my.module.name and info for all other modules\n\"alepha:trace,info\" -> Set trace level for all alepha modules and info for all other modules`,\n lowercase: true,\n }),\n ),\n\n /**\n * Built-in log formats.\n * - \"json\" - JSON format, useful for structured logging and log aggregation. {@link JsonFormatterProvider}\n * - \"pretty\" - Simple text format, human-readable, with colors. {@link PrettyFormatterProvider}\n * - \"raw\" - Raw format, no formatting, just the message. {@link RawFormatterProvider}\n */\n LOG_FORMAT: t.optional(\n t.enum([\"json\", \"pretty\", \"raw\"], {\n description: \"Default log format for the application.\",\n lowercase: true,\n }),\n ),\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha\" {\n export interface Env extends Partial<Static<typeof envSchema>> {}\n\n export interface State {\n /**\n * Current log level for the application or specific modules.\n */\n \"alepha.logger.level\"?: string;\n\n /**\n * Runtime override for the log format (`json` | `pretty` | `raw`).\n *\n * Unset → the formatter chosen at register time from `LOG_FORMAT`\n * (honoring any custom `LogFormatterProvider` substitution) is used.\n * When set, it overrides both the active formatter and the CLI's\n * dynamic/\"stylish\" task UI (which is enabled only for `raw`). Set it\n * to flip output at runtime — e.g. the CLI `--verbose` flag forces\n * `pretty`.\n */\n \"alepha.logger.format\"?: string;\n }\n\n export interface Hooks {\n log: {\n message?: string;\n entry: LogEntry;\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/logger/providers/ConsoleColorProvider.ts","../../src/logger/providers/LogFormatterProvider.ts","../../src/logger/providers/PrettyFormatterProvider.ts","../../src/logger/providers/CliFormatterProvider.ts","../../src/logger/providers/JsonFormatterProvider.ts","../../src/logger/providers/LogDestinationProvider.ts","../../src/logger/providers/RawFormatterProvider.ts","../../src/logger/services/Logger.ts","../../src/logger/primitives/$logger.ts","../../src/logger/providers/ConsoleDestinationProvider.ts","../../src/logger/providers/MemoryDestinationProvider.ts","../../src/logger/schemas/logEntrySchema.ts","../../src/logger/index.ts"],"sourcesContent":["import { $inject, Alepha } from \"alepha\";\n\nexport class ConsoleColorProvider {\n static readonly COLORS = {\n RESET: \"\\x1b[0m\",\n BLACK: \"\\x1b[30m\",\n RED: \"\\x1b[31m\",\n GREEN: \"\\x1b[32m\",\n ORANGE: \"\\x1b[33m\", // using yellow for orange-ish\n BLUE: \"\\x1b[34m\",\n PURPLE: \"\\x1b[35m\",\n CYAN: \"\\x1b[36m\",\n GREY_LIGHT: \"\\x1b[37m\",\n GREY_LIGHT_BOLD: \"\\x1b[1;37m\",\n GREY_DARK: \"\\x1b[90m\",\n GREY_DARK_BOLD: \"\\x1b[1;90m\",\n WHITE: \"\\x1b[97m\",\n WHITE_BOLD: \"\\x1b[1;97m\",\n // modifiers\n DIM: \"\\x1b[2m\",\n BOLD: \"\\x1b[1m\",\n INVERSE: \"\\x1b[7m\",\n // levels\n SILENT: \"\",\n ERROR: \"\\x1b[31m\",\n WARN: \"\\x1b[33m\",\n INFO: \"\\x1b[32m\",\n DEBUG: \"\\x1b[34m\",\n TRACE: \"\\x1b[90m\",\n };\n\n protected readonly alepha = $inject(Alepha);\n\n protected enabled = true;\n\n constructor() {\n this.enabled = this.isEnabled();\n }\n\n public isEnabled(): boolean {\n if (this.alepha.env.NO_COLOR) {\n return false;\n }\n\n if (this.alepha.env.FORCE_COLOR) {\n return true;\n }\n\n if (this.alepha.isBrowser() && !navigator.userAgent.includes(\"Chrome\")) {\n return false;\n }\n\n return !this.alepha.isProduction();\n }\n\n public set(\n color: keyof typeof ConsoleColorProvider.COLORS,\n text: string,\n reset: string = ConsoleColorProvider.COLORS.RESET,\n ): string {\n if (!this.enabled) {\n return text;\n }\n\n return `${ConsoleColorProvider.COLORS[color]}${text}${reset}`;\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport abstract class LogFormatterProvider {\n public abstract format(entry: LogEntry): string;\n}\n","import { $inject, Alepha } from \"alepha\";\nimport type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { ConsoleColorProvider } from \"./ConsoleColorProvider.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class PrettyFormatterProvider extends LogFormatterProvider {\n protected color = $inject(ConsoleColorProvider);\n protected alepha = $inject(Alepha);\n\n public format(entry: LogEntry): string {\n const { data, timestamp } = entry;\n\n let output = \"\";\n let details = \"\";\n\n const isError = data instanceof Error;\n if (isError) {\n details = this.formatError(data);\n } else if (data) {\n let error = \"\";\n let jsonData = data;\n if (\"error\" in data && data.error instanceof Error) {\n error = this.formatError(data.error);\n const { error: _, ...rest } = data;\n jsonData = rest;\n }\n\n if (Object.keys(jsonData).length > 0) {\n try {\n details = JSON.stringify(jsonData);\n } catch {\n details = \"[Unserializable Object]\";\n }\n }\n\n if (error) {\n details += `\\n${error}`;\n }\n }\n\n output += this.color.set(\n \"GREY_DARK\",\n `[${this.formatTimestamp(timestamp)}]`,\n );\n output += \" \";\n\n output += this.color.set(entry.level, entry.level.toUpperCase());\n output += \" \";\n\n if (entry.app) {\n output += this.color.set(\"GREY_DARK\", `${entry.app}`);\n output += \" \";\n }\n\n if (entry.context) {\n output += this.color.set(\n \"GREY_DARK\",\n `(${this.formatContext(entry.context)})`,\n );\n output += \" \";\n }\n\n const module = this.color.set(\"GREY_LIGHT\", `${entry.module}.`);\n const service = this.color.set(\n this.alepha.isBrowser() ? \"RESET\" : \"WHITE\",\n entry.service,\n );\n\n output += `<${module}${service}>`;\n\n if (entry.message) {\n output += `: ${this.color.set(\"CYAN\", entry.message)}`;\n } else {\n output += \":\";\n }\n\n if (details) {\n if (isError) {\n output += ` \\n${details}`;\n } else {\n output += ` ${this.color.set(\"GREY_DARK\", details)}`;\n }\n }\n\n return output;\n }\n\n public formatTimestamp(timestamp: number): string {\n const d = new Date(timestamp);\n const h = d.getHours();\n const m = d.getMinutes();\n const s = d.getSeconds();\n const ms = d.getMilliseconds();\n\n return `${this.pad2(h)}:${this.pad2(m)}:${this.pad2(s)}.${this.pad3(ms)}`;\n }\n\n protected pad2 = (n: number) => (n < 10 ? \"0\" : \"\") + n;\n protected pad3 = (n: number) =>\n n < 10 ? `00${n}` : n < 100 ? `0${n}` : `${n}`;\n\n /**\n * Avoid to display the whole UUID in development mode\n */\n protected formatContext(context: string): string {\n if (this.alepha.isProduction()) {\n return context;\n }\n\n return context.slice(0, 8);\n }\n\n protected formatError(error: Error): string {\n // Chrome does not like stack traces with ASCII colors\n // so we remove the stack trace from log and just print with console.error\n if (this.alepha.isBrowser()) {\n // call console.error in a separate tick to avoid messing with log order\n setTimeout(() => {\n console.error(error);\n });\n return \"\";\n }\n\n // hack: use vite's stack trace formatter if available\n const vite = this.alepha.store.get(\"alepha.vite.server\") as\n | {\n ssrFixStacktrace: (error: Error) => void;\n }\n | undefined;\n\n vite?.ssrFixStacktrace(error);\n\n let str = error.stack ?? error.message;\n\n let currentCause = (error as any).cause;\n while (currentCause && currentCause instanceof Error) {\n vite?.ssrFixStacktrace(currentCause);\n\n str += `\\nCaused by: ${currentCause.stack ?? currentCause.message}`;\n currentCause = currentCause.cause;\n }\n\n return str;\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { PrettyFormatterProvider } from \"./PrettyFormatterProvider.ts\";\n\n/**\n * Compact formatter for CLI output.\n *\n * Renders `HH:MM:SS L message {json}` — a short clock time, a single-letter\n * level colored by severity, the message, and any structured data appended\n * dim. Deliberately drops the `<module.service>`, app name and context UUID\n * that {@link PrettyFormatterProvider} prints: in an interactive CLI session\n * those are noise. Use `pretty` (or `--verbose`) when you need them, `raw`\n * when you want the bare message for piping, and `json` for aggregation.\n */\nexport class CliFormatterProvider extends PrettyFormatterProvider {\n public override format(entry: LogEntry): string {\n const { data, timestamp, level } = entry;\n\n const isError = data instanceof Error;\n let details = \"\";\n\n if (isError) {\n details = this.formatError(data);\n } else if (data) {\n let error = \"\";\n let jsonData = data;\n if (\"error\" in data && data.error instanceof Error) {\n error = this.formatError(data.error);\n const { error: _, ...rest } = data;\n jsonData = rest;\n }\n\n if (Object.keys(jsonData).length > 0) {\n try {\n details = JSON.stringify(jsonData);\n } catch {\n details = \"[Unserializable Object]\";\n }\n }\n\n if (error) {\n details += `\\n${error}`;\n }\n }\n\n let output = \"\";\n\n output += this.color.set(\"GREY_DARK\", this.formatClockTime(timestamp));\n output += \" \";\n output += this.color.set(level, level.charAt(0).toUpperCase());\n\n if (entry.message) {\n output += ` ${entry.message}`;\n }\n\n if (details) {\n if (isError) {\n output += ` \\n${details}`;\n } else {\n output += ` ${this.color.set(\"GREY_DARK\", details)}`;\n }\n }\n\n return output;\n }\n\n /**\n * Short clock time without milliseconds (HH:MM:SS).\n */\n protected formatClockTime(timestamp: number): string {\n const d = new Date(timestamp);\n return `${this.pad2(d.getHours())}:${this.pad2(d.getMinutes())}:${this.pad2(\n d.getSeconds(),\n )}`;\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class JsonFormatterProvider extends LogFormatterProvider {\n public format(entry: LogEntry): string {\n const json: Record<string, any> = {\n level: entry.level,\n message: entry.message,\n context: entry.context,\n service: entry.service,\n module: entry.module,\n app: entry.app,\n time: entry.timestamp,\n };\n\n if (entry.data instanceof Error) {\n json.error = this.formatJsonError(entry.data);\n } else {\n json.data = entry.data;\n }\n\n return JSON.stringify(json);\n }\n\n public formatJsonError(error: Error): object {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n cause:\n error.cause instanceof Error\n ? this.formatJsonError(error.cause)\n : undefined,\n };\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport abstract class LogDestinationProvider {\n public abstract write(message: string, entry: LogEntry): void;\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class RawFormatterProvider extends LogFormatterProvider {\n public format(entry: LogEntry): string {\n let output = \"\";\n\n output += `${entry.message}`;\n\n if (entry.data instanceof Error) {\n output += `\\n${entry.data.message}`;\n let cause = entry.data.cause;\n while (cause instanceof Error) {\n output += `\\nCaused by: ${cause.message}`;\n cause = cause.cause;\n }\n }\n\n return output;\n }\n}\n","import {\n $inject,\n Alepha,\n AlephaError,\n type LoggerInterface,\n type LogLevel,\n} from \"alepha\";\nimport { DateTimeProvider } from \"alepha/datetime\";\nimport { CliFormatterProvider } from \"../providers/CliFormatterProvider.ts\";\nimport { JsonFormatterProvider } from \"../providers/JsonFormatterProvider.ts\";\nimport { LogDestinationProvider } from \"../providers/LogDestinationProvider.ts\";\nimport { LogFormatterProvider } from \"../providers/LogFormatterProvider.ts\";\nimport { PrettyFormatterProvider } from \"../providers/PrettyFormatterProvider.ts\";\nimport { RawFormatterProvider } from \"../providers/RawFormatterProvider.ts\";\nimport type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport class Logger implements LoggerInterface {\n protected readonly alepha = $inject(Alepha);\n /**\n * Formatter chosen at register time (from `LOG_FORMAT`, honoring any\n * custom `LogFormatterProvider` substitution). Used unless a runtime\n * `alepha.logger.format` override is set — see {@link formatter}.\n */\n protected readonly defaultFormatter = $inject(LogFormatterProvider);\n protected readonly jsonFormatter = $inject(JsonFormatterProvider);\n protected readonly prettyFormatter = $inject(PrettyFormatterProvider);\n protected readonly rawFormatter = $inject(RawFormatterProvider);\n protected readonly cliFormatter = $inject(CliFormatterProvider);\n protected readonly destination = $inject(LogDestinationProvider);\n protected readonly dateTimeProvider = $inject(DateTimeProvider);\n\n protected readonly levels: Record<string, number> = {\n SILENT: -1,\n ERROR: 0,\n WARN: 1,\n INFO: 2,\n DEBUG: 3,\n TRACE: 4,\n };\n\n protected readonly service: string;\n protected readonly module: string;\n protected readonly app?: string;\n\n protected appLogLevel: string = \"INFO\";\n protected logLevel: LogLevel = \"INFO\";\n\n constructor(service: string, module: string) {\n this.service = service;\n this.module = module;\n this.app = this.alepha.env.APP_NAME;\n }\n\n public get context(): string | undefined {\n return this.alepha.context.get<string>(\"context\");\n }\n\n public get level(): string {\n const stateLogLevel = this.alepha.store.get(\"alepha.logger.level\");\n if (stateLogLevel && stateLogLevel !== this.appLogLevel) {\n this.appLogLevel = stateLogLevel;\n this.logLevel = this.parseLevel(this.appLogLevel, this.module);\n }\n return this.logLevel;\n }\n\n /**\n * Active formatter. Honors a runtime `alepha.logger.format` override\n * (read live, like {@link level}); otherwise falls back to the\n * register-time {@link defaultFormatter} so custom substitutions and the\n * `LOG_FORMAT` default keep working.\n */\n protected get formatter(): LogFormatterProvider {\n switch (this.alepha.store.get(\"alepha.logger.format\")) {\n case \"json\":\n return this.jsonFormatter;\n case \"pretty\":\n return this.prettyFormatter;\n case \"raw\":\n return this.rawFormatter;\n case \"cli\":\n return this.cliFormatter;\n default:\n return this.defaultFormatter;\n }\n }\n\n public parseLevel(level: string, app: string): LogLevel {\n const parts = level.toLowerCase().split(/[,;]/);\n\n // First pass: check for module-specific configurations\n for (const part of parts) {\n const trimmedPart = part.trim();\n if (!trimmedPart) continue; // Skip empty parts\n\n if (trimmedPart.includes(\":\") || trimmedPart.includes(\"=\")) {\n const [modulePattern, levelValue] = trimmedPart.split(/[:=]/);\n const trimmedModule = modulePattern.trim();\n const trimmedLevel = levelValue?.trim();\n\n if (!trimmedLevel) continue; // Skip if no level specified\n\n if (this.matchesPattern(app, trimmedModule)) {\n try {\n return this.asLogLevel(trimmedLevel);\n } catch (error) {\n throw new AlephaError(\n `Invalid log level '${levelValue?.trim()}' for module pattern '${trimmedModule}'`,\n );\n }\n }\n }\n }\n\n // Second pass: look for global level\n for (const part of parts) {\n const trimmedPart = part.trim();\n if (!trimmedPart) continue; // Skip empty parts\n\n if (!trimmedPart.includes(\":\") && !trimmedPart.includes(\"=\")) {\n try {\n return this.asLogLevel(trimmedPart);\n } catch (error) {\n throw new AlephaError(`Invalid global log level \"${trimmedPart}\"`);\n }\n }\n }\n\n return \"INFO\";\n }\n\n protected matchesPattern(moduleName: string, pattern: string): boolean {\n if (pattern.includes(\"*\")) {\n // Convert wildcard pattern to regex\n const regexPattern = pattern.replace(/\\./g, \"\\\\.\").replace(/\\*/g, \".*\");\n return new RegExp(`^${regexPattern}`).test(moduleName);\n }\n\n // Exact prefix match (existing behavior)\n return moduleName.startsWith(pattern);\n }\n\n public asLogLevel(something: string): LogLevel {\n const level = something.trim().toUpperCase();\n if (this.levels[level] !== undefined) {\n return level as LogLevel;\n }\n\n throw new AlephaError(`Invalid log level: ${something}`);\n }\n\n /**\n * Whether a message at `level` would actually be emitted given the current\n * active level (read live from state). Mirrors the threshold used by\n * {@link log}: a level is enabled when it sits at or above the active one.\n *\n * @example\n * // active level = INFO\n * log.isLevelEnabled(\"DEBUG\"); // false\n * log.isLevelEnabled(\"WARN\"); // true\n */\n public isLevelEnabled(level: LogLevel): boolean {\n return this.levels[level] <= this.levels[this.level];\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n public error(message: string, data?: unknown): void {\n this.log(\"ERROR\", message, data);\n }\n\n public warn(message: string, data?: unknown): void {\n this.log(\"WARN\", message, data);\n }\n\n public info(message: string, data?: unknown): void {\n this.log(\"INFO\", message, data);\n }\n\n public debug(message: string, data?: unknown): void {\n this.log(\"DEBUG\", message, data);\n }\n\n public trace(message: string, data?: unknown): void {\n this.log(\"TRACE\", message, data);\n }\n\n protected log(level: LogLevel, message: string, data?: unknown): void {\n let _message = \"\";\n if (typeof message === \"string\") {\n _message = message;\n } else if (typeof data === \"string\") {\n _message = data;\n }\n\n let _data: object | Error | undefined;\n if (typeof data === \"object\" && data) {\n _data = data;\n } else if (typeof message === \"object\" && message) {\n _data = message;\n }\n\n const logEntry: LogEntry = {\n level,\n message: _message,\n data: _data,\n context: this.context,\n service: this.service,\n module: this.module,\n app: this.app,\n timestamp: this.dateTimeProvider.nowMillis(),\n };\n\n if (this.levels[level] > this.levels[this.level]) {\n this.emit(logEntry);\n return;\n }\n\n const formatted = this.formatter.format(logEntry);\n\n this.emit(logEntry, formatted);\n\n this.destination.write(formatted, logEntry);\n }\n\n protected emit(entry: LogEntry, message?: string) {\n this.alepha.events\n .emit(\n \"log\",\n {\n message,\n entry,\n },\n {\n catch: true,\n },\n )\n .catch(() => null);\n }\n}\n","import { $context, $inject, KIND } from \"alepha\";\nimport { Logger } from \"../services/Logger.ts\";\n\n/**\n * Create a logger.\n *\n * `name` is optional, by default it will use the name of the service.\n *\n * @example\n * ```ts\n * import { $logger } from \"alepha\";\n *\n * class MyService {\n * \tlog = $logger();\n *\n * constructor() {\n * this.log.info(\"Service initialized\");\n * // print something like '[23:45:53.326] INFO <app.MyService>: Service initialized'\n * }\n * }\n * ```\n */\nexport const $logger = (options: LoggerPrimitiveOptions = {}): Logger => {\n const { alepha, service, module } = $context();\n\n return $inject(Logger, {\n lifetime: \"transient\",\n args: [\n options.name ?? service?.name ?? \"Func\",\n module?.name ?? alepha.env.MODULE_NAME ?? \"app\",\n ],\n });\n};\n\nexport interface LoggerPrimitiveOptions {\n name?: string;\n}\n\n$logger[KIND] = Logger;\n","import { LogDestinationProvider } from \"./LogDestinationProvider.ts\";\n\nexport class ConsoleDestinationProvider extends LogDestinationProvider {\n public write(message: string): void {\n console.log(message);\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogDestinationProvider } from \"./LogDestinationProvider.ts\";\n\nexport class MemoryDestinationProvider extends LogDestinationProvider {\n protected entries: Array<LogEntry & { formatted: string }> = [];\n\n public readonly options = {\n maxEntries: 10_000,\n };\n\n public write(formatted: string, entry: LogEntry): void {\n this.entries.push({ ...entry, formatted });\n\n if (this.entries.length > this.options.maxEntries) {\n this.entries = this.entries.slice(\n -Math.floor(this.options.maxEntries * 0.8),\n );\n }\n }\n\n public get logs() {\n return [...this.entries];\n }\n\n public clear(): void {\n this.entries = [];\n }\n}\n","import { type Static, z } from \"alepha\";\n\nexport const logEntrySchema = z.object({\n level: z.enum([\"SILENT\", \"TRACE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n message: z.text({\n size: \"rich\",\n }),\n service: z.text(),\n module: z.text(),\n context: z.text().optional(),\n app: z.text().optional(),\n data: z.any().optional(),\n timestamp: z.number(),\n});\n\nexport type LogEntry = Static<typeof logEntrySchema>;\n","import { $module, type Static, z } from \"alepha\";\nimport { $logger } from \"./primitives/$logger.ts\";\nimport { CliFormatterProvider } from \"./providers/CliFormatterProvider.ts\";\nimport { ConsoleColorProvider } from \"./providers/ConsoleColorProvider.ts\";\nimport { ConsoleDestinationProvider } from \"./providers/ConsoleDestinationProvider.ts\";\nimport { JsonFormatterProvider } from \"./providers/JsonFormatterProvider.ts\";\nimport { LogDestinationProvider } from \"./providers/LogDestinationProvider.ts\";\nimport { LogFormatterProvider } from \"./providers/LogFormatterProvider.ts\";\nimport { MemoryDestinationProvider } from \"./providers/MemoryDestinationProvider.ts\";\nimport { PrettyFormatterProvider } from \"./providers/PrettyFormatterProvider.ts\";\nimport { RawFormatterProvider } from \"./providers/RawFormatterProvider.ts\";\nimport type { LogEntry } from \"./schemas/logEntrySchema.ts\";\nimport { Logger } from \"./services/Logger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$logger.ts\";\nexport * from \"./providers/CliFormatterProvider.ts\";\nexport * from \"./providers/ConsoleColorProvider.ts\";\nexport * from \"./providers/ConsoleDestinationProvider.ts\";\nexport * from \"./providers/JsonFormatterProvider.ts\";\nexport * from \"./providers/LogDestinationProvider.ts\";\nexport * from \"./providers/LogFormatterProvider.ts\";\nexport * from \"./providers/MemoryDestinationProvider.ts\";\nexport * from \"./providers/PrettyFormatterProvider.ts\";\nexport * from \"./providers/RawFormatterProvider.ts\";\nexport * from \"./schemas/logEntrySchema.ts\";\nexport * from \"./services/Logger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Configurable logging with multiple outputs.\n *\n * **Features:**\n * - Global logger access\n * - JSON format\n * - Pretty colored output\n * - Compact CLI format\n * - Raw text format\n * - Console destination\n * - Memory destination (for devtools)\n * - Custom handlers\n * - Configuration via `LOG_LEVEL`, `LOG_FORMAT`, and `DEBUG`\n *\n * @module alepha.logger\n */\nexport const AlephaLogger = $module({\n name: \"alepha.logger\",\n primitives: [$logger],\n services: [Logger, ConsoleColorProvider],\n variants: [\n ConsoleDestinationProvider,\n MemoryDestinationProvider,\n JsonFormatterProvider,\n PrettyFormatterProvider,\n RawFormatterProvider,\n CliFormatterProvider,\n ],\n register: (alepha) => {\n const env = alepha.parseEnv(envSchema);\n\n // Support DEBUG env var (debug package convention) as shorthand for LOG_LEVEL/LOG_FORMAT.\n // DEBUG=1 → LOG_LEVEL=trace LOG_FORMAT=pretty\n // DEBUG=alepha:* → LOG_LEVEL=alepha.*:debug,info LOG_FORMAT=pretty\n let logLevel = env.LOG_LEVEL;\n let logFormat = env.LOG_FORMAT;\n if (env.DEBUG) {\n if (env.DEBUG === \"1\" || env.DEBUG === \"true\") {\n logLevel ??= \"trace\";\n } else {\n const patterns = env.DEBUG.split(\",\")\n .map((p) => p.trim().replaceAll(\":\", \".\"))\n .filter(Boolean);\n logLevel ??= `${patterns.map((p) => `${p}:debug`).join(\",\")},info`;\n }\n logFormat ??= \"pretty\";\n }\n\n const getLogDestinationProvider = () => {\n // in test mode, if no LOG_LEVEL is set, use MemoryDestinationProvider to capture logs for inspection.\n // logs will be printed to console only if the test fails.\n if (alepha.isTest() && !logLevel) {\n const printOnError = (ev: any) => {\n if (ev.task?.result?.state === \"fail\") {\n const output = alepha.inject(MemoryDestinationProvider);\n for (const log of output.logs) {\n console.log(log.formatted);\n }\n }\n };\n\n try {\n alepha.store.get(\"alepha.test.afterEach\")?.(printOnError);\n alepha.store.get(\"alepha.test.onTestFinished\")?.(printOnError);\n } catch {\n // ignore\n }\n\n return MemoryDestinationProvider;\n }\n\n return ConsoleDestinationProvider;\n };\n\n const getLogFormatterProvider = () => {\n if (logFormat) {\n if (logFormat === \"json\") {\n return JsonFormatterProvider;\n }\n if (logFormat === \"raw\") {\n return RawFormatterProvider;\n }\n if (logFormat === \"cli\") {\n return CliFormatterProvider;\n }\n return PrettyFormatterProvider;\n }\n\n if (alepha.isProduction() && !alepha.isBrowser()) {\n return JsonFormatterProvider;\n }\n\n return PrettyFormatterProvider;\n };\n\n alepha.with({\n optional: true,\n provide: LogDestinationProvider,\n use: getLogDestinationProvider(),\n });\n\n alepha.with({\n optional: true,\n provide: LogFormatterProvider,\n use: getLogFormatterProvider(),\n });\n\n alepha.store.set(\n \"alepha.logger\",\n alepha.inject(Logger, {\n lifetime: \"transient\",\n args: [\"Alepha\", \"alepha.core\"],\n }),\n );\n\n alepha.store.set(\n \"alepha.logger.level\",\n logLevel ??\n (alepha.isTest()\n ? \"trace\"\n : alepha.isProduction() && alepha.isBrowser()\n ? \"warn\"\n : \"info\"),\n );\n },\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst envSchema = z.object({\n /**\n * Enable debug logging for specific modules using the `debug` package convention.\n *\n * @example\n * DEBUG=1 # Shorthand for LOG_LEVEL=trace LOG_FORMAT=pretty\n * DEBUG=alepha:* # Enable debug logging for all alepha modules\n * DEBUG=alepha:orm:* # Enable debug logging for alepha.orm modules\n * DEBUG=* # Enable debug logging for all modules\n */\n DEBUG: z\n .text({\n description:\n \"Enable debug logging for specific modules using the debug package convention. Example: DEBUG=alepha:*\",\n })\n .optional(),\n\n /**\n * Default log level for the application.\n *\n * Default by environment:\n * - dev = info\n * - prod = info\n * - test = error\n *\n * Levels are: \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\"\n *\n * Level can be set for a specific module:\n *\n * @example\n * LOG_LEVEL=my.module.name:debug,info # Set debug level for my.module.name and info for all other modules\n * LOG_LEVEL=alepha:trace, info # Set trace level for all alepha modules and info for all other modules\n */\n LOG_LEVEL: z\n .text({\n description: `Application log level on startup.\nLevels are: trace, debug, info, warn, error, silent\nLevel can be set for a specific module:\n\"my.module.name:debug,info\" -> Set debug level for my.module.name and info for all other modules\n\"alepha:trace,info\" -> Set trace level for all alepha modules and info for all other modules`,\n lowercase: true,\n })\n .optional(),\n\n /**\n * Built-in log formats.\n * - \"json\" - JSON format, useful for structured logging and log aggregation. {@link JsonFormatterProvider}\n * - \"pretty\" - Full text format, human-readable, with colors and module/context. {@link PrettyFormatterProvider}\n * - \"cli\" - Compact format for CLI sessions: time, level initial, message, json. {@link CliFormatterProvider}\n * - \"raw\" - Raw format, no formatting, just the message (best for piping). {@link RawFormatterProvider}\n */\n LOG_FORMAT: z\n .enum([\"json\", \"pretty\", \"raw\", \"cli\"])\n .meta({ lowercase: true })\n .describe(\"Default log format for the application.\")\n .optional(),\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha\" {\n export interface Env extends Partial<Static<typeof envSchema>> {}\n\n export interface State {\n /**\n * Current log level for the application or specific modules.\n */\n \"alepha.logger.level\"?: string;\n\n /**\n * Runtime override for the log format (`json` | `pretty` | `raw`).\n *\n * Unset → the formatter chosen at register time from `LOG_FORMAT`\n * (honoring any custom `LogFormatterProvider` substitution) is used.\n * When set, it overrides both the active formatter and the CLI's\n * dynamic/\"stylish\" task UI (which is enabled only for `raw`). Set it\n * to flip output at runtime — e.g. the CLI `--verbose` flag forces\n * `pretty`.\n */\n \"alepha.logger.format\"?: string;\n }\n\n export interface Hooks {\n log: {\n message?: string;\n entry: LogEntry;\n };\n }\n}\n"],"mappings":";;;AAEA,IAAa,uBAAb,MAAa,qBAAqB;CAChC,OAAgB,SAAS;EACvB,OAAO;EACP,OAAO;EACP,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;EACN,QAAQ;EACR,MAAM;EACN,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,gBAAgB;EAChB,OAAO;EACP,YAAY;EAEZ,KAAK;EACL,MAAM;EACN,SAAS;EAET,QAAQ;EACR,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;CACT;CAEA,SAA4B,QAAQ,MAAM;CAE1C,UAAoB;CAEpB,cAAc;EACZ,KAAK,UAAU,KAAK,UAAU;CAChC;CAEA,YAA4B;EAC1B,IAAI,KAAK,OAAO,IAAI,UAClB,OAAO;EAGT,IAAI,KAAK,OAAO,IAAI,aAClB,OAAO;EAGT,IAAI,KAAK,OAAO,UAAU,KAAK,CAAC,UAAU,UAAU,SAAS,QAAQ,GACnE,OAAO;EAGT,OAAO,CAAC,KAAK,OAAO,aAAa;CACnC;CAEA,IACE,OACA,MACA,QAAgB,qBAAqB,OAAO,OACpC;EACR,IAAI,CAAC,KAAK,SACR,OAAO;EAGT,OAAO,GAAG,qBAAqB,OAAO,SAAS,OAAO;CACxD;AACF;;;AChEA,IAAsB,uBAAtB,MAA2C,CAE3C;;;ACCA,IAAa,0BAAb,cAA6C,qBAAqB;CAChE,QAAkB,QAAQ,oBAAoB;CAC9C,SAAmB,QAAQ,MAAM;CAEjC,OAAc,OAAyB;EACrC,MAAM,EAAE,MAAM,cAAc;EAE5B,IAAI,SAAS;EACb,IAAI,UAAU;EAEd,MAAM,UAAU,gBAAgB;EAChC,IAAI,SACF,UAAU,KAAK,YAAY,IAAI;OAC1B,IAAI,MAAM;GACf,IAAI,QAAQ;GACZ,IAAI,WAAW;GACf,IAAI,WAAW,QAAQ,KAAK,iBAAiB,OAAO;IAClD,QAAQ,KAAK,YAAY,KAAK,KAAK;IACnC,MAAM,EAAE,OAAO,GAAG,GAAG,SAAS;IAC9B,WAAW;GACb;GAEA,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAC,SAAS,GACjC,IAAI;IACF,UAAU,KAAK,UAAU,QAAQ;GACnC,QAAQ;IACN,UAAU;GACZ;GAGF,IAAI,OACF,WAAW,KAAK;EAEpB;EAEA,UAAU,KAAK,MAAM,IACnB,aACA,IAAI,KAAK,gBAAgB,SAAS,EAAE,EACtC;EACA,UAAU;EAEV,UAAU,KAAK,MAAM,IAAI,MAAM,OAAO,MAAM,MAAM,YAAY,CAAC;EAC/D,UAAU;EAEV,IAAI,MAAM,KAAK;GACb,UAAU,KAAK,MAAM,IAAI,aAAa,GAAG,MAAM,KAAK;GACpD,UAAU;EACZ;EAEA,IAAI,MAAM,SAAS;GACjB,UAAU,KAAK,MAAM,IACnB,aACA,IAAI,KAAK,cAAc,MAAM,OAAO,EAAE,EACxC;GACA,UAAU;EACZ;EAEA,MAAM,SAAS,KAAK,MAAM,IAAI,cAAc,GAAG,MAAM,OAAO,EAAE;EAC9D,MAAM,UAAU,KAAK,MAAM,IACzB,KAAK,OAAO,UAAU,IAAI,UAAU,SACpC,MAAM,OACR;EAEA,UAAU,IAAI,SAAS,QAAQ;EAE/B,IAAI,MAAM,SACR,UAAU,KAAK,KAAK,MAAM,IAAI,QAAQ,MAAM,OAAO;OAEnD,UAAU;EAGZ,IAAI,SACF,IAAI,SACF,UAAU,MAAM;OAEhB,UAAU,IAAI,KAAK,MAAM,IAAI,aAAa,OAAO;EAIrD,OAAO;CACT;CAEA,gBAAuB,WAA2B;EAChD,MAAM,IAAI,IAAI,KAAK,SAAS;EAC5B,MAAM,IAAI,EAAE,SAAS;EACrB,MAAM,IAAI,EAAE,WAAW;EACvB,MAAM,IAAI,EAAE,WAAW;EACvB,MAAM,KAAK,EAAE,gBAAgB;EAE7B,OAAO,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,EAAE;CACxE;CAEA,QAAkB,OAAe,IAAI,KAAK,MAAM,MAAM;CACtD,QAAkB,MAChB,IAAI,KAAK,KAAK,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG;;;;CAK7C,cAAwB,SAAyB;EAC/C,IAAI,KAAK,OAAO,aAAa,GAC3B,OAAO;EAGT,OAAO,QAAQ,MAAM,GAAG,CAAC;CAC3B;CAEA,YAAsB,OAAsB;EAG1C,IAAI,KAAK,OAAO,UAAU,GAAG;GAE3B,iBAAiB;IACf,QAAQ,MAAM,KAAK;GACrB,CAAC;GACD,OAAO;EACT;EAGA,MAAM,OAAO,KAAK,OAAO,MAAM,IAAI,oBAAoB;EAMvD,MAAM,iBAAiB,KAAK;EAE5B,IAAI,MAAM,MAAM,SAAS,MAAM;EAE/B,IAAI,eAAgB,MAAc;EAClC,OAAO,gBAAgB,wBAAwB,OAAO;GACpD,MAAM,iBAAiB,YAAY;GAEnC,OAAO,gBAAgB,aAAa,SAAS,aAAa;GAC1D,eAAe,aAAa;EAC9B;EAEA,OAAO;CACT;AACF;;;;;;;;;;;;;ACnIA,IAAa,uBAAb,cAA0C,wBAAwB;CAChE,OAAuB,OAAyB;EAC9C,MAAM,EAAE,MAAM,WAAW,UAAU;EAEnC,MAAM,UAAU,gBAAgB;EAChC,IAAI,UAAU;EAEd,IAAI,SACF,UAAU,KAAK,YAAY,IAAI;OAC1B,IAAI,MAAM;GACf,IAAI,QAAQ;GACZ,IAAI,WAAW;GACf,IAAI,WAAW,QAAQ,KAAK,iBAAiB,OAAO;IAClD,QAAQ,KAAK,YAAY,KAAK,KAAK;IACnC,MAAM,EAAE,OAAO,GAAG,GAAG,SAAS;IAC9B,WAAW;GACb;GAEA,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAC,SAAS,GACjC,IAAI;IACF,UAAU,KAAK,UAAU,QAAQ;GACnC,QAAQ;IACN,UAAU;GACZ;GAGF,IAAI,OACF,WAAW,KAAK;EAEpB;EAEA,IAAI,SAAS;EAEb,UAAU,KAAK,MAAM,IAAI,aAAa,KAAK,gBAAgB,SAAS,CAAC;EACrE,UAAU;EACV,UAAU,KAAK,MAAM,IAAI,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;EAE7D,IAAI,MAAM,SACR,UAAU,IAAI,MAAM;EAGtB,IAAI,SACF,IAAI,SACF,UAAU,MAAM;OAEhB,UAAU,IAAI,KAAK,MAAM,IAAI,aAAa,OAAO;EAIrD,OAAO;CACT;;;;CAKA,gBAA0B,WAA2B;EACnD,MAAM,IAAI,IAAI,KAAK,SAAS;EAC5B,OAAO,GAAG,KAAK,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK,KAAK,EAAE,WAAW,CAAC,EAAE,GAAG,KAAK,KACrE,EAAE,WAAW,CACf;CACF;AACF;;;ACvEA,IAAa,wBAAb,cAA2C,qBAAqB;CAC9D,OAAc,OAAyB;EACrC,MAAM,OAA4B;GAChC,OAAO,MAAM;GACb,SAAS,MAAM;GACf,SAAS,MAAM;GACf,SAAS,MAAM;GACf,QAAQ,MAAM;GACd,KAAK,MAAM;GACX,MAAM,MAAM;EACd;EAEA,IAAI,MAAM,gBAAgB,OACxB,KAAK,QAAQ,KAAK,gBAAgB,MAAM,IAAI;OAE5C,KAAK,OAAO,MAAM;EAGpB,OAAO,KAAK,UAAU,IAAI;CAC5B;CAEA,gBAAuB,OAAsB;EAC3C,OAAO;GACL,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,OAAO,MAAM;GACb,OACE,MAAM,iBAAiB,QACnB,KAAK,gBAAgB,MAAM,KAAK,IAChC,KAAA;EACR;CACF;AACF;;;ACjCA,IAAsB,yBAAtB,MAA6C,CAE7C;;;ACDA,IAAa,uBAAb,cAA0C,qBAAqB;CAC7D,OAAc,OAAyB;EACrC,IAAI,SAAS;EAEb,UAAU,GAAG,MAAM;EAEnB,IAAI,MAAM,gBAAgB,OAAO;GAC/B,UAAU,KAAK,MAAM,KAAK;GAC1B,IAAI,QAAQ,MAAM,KAAK;GACvB,OAAO,iBAAiB,OAAO;IAC7B,UAAU,gBAAgB,MAAM;IAChC,QAAQ,MAAM;GAChB;EACF;EAEA,OAAO;CACT;AACF;;;ACJA,IAAa,SAAb,MAA+C;CAC7C,SAA4B,QAAQ,MAAM;;;;;;CAM1C,mBAAsC,QAAQ,oBAAoB;CAClE,gBAAmC,QAAQ,qBAAqB;CAChE,kBAAqC,QAAQ,uBAAuB;CACpE,eAAkC,QAAQ,oBAAoB;CAC9D,eAAkC,QAAQ,oBAAoB;CAC9D,cAAiC,QAAQ,sBAAsB;CAC/D,mBAAsC,QAAQ,gBAAgB;CAE9D,SAAoD;EAClD,QAAQ;EACR,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;CACT;CAEA;CACA;CACA;CAEA,cAAgC;CAChC,WAA+B;CAE/B,YAAY,SAAiB,QAAgB;EAC3C,KAAK,UAAU;EACf,KAAK,SAAS;EACd,KAAK,MAAM,KAAK,OAAO,IAAI;CAC7B;CAEA,IAAW,UAA8B;EACvC,OAAO,KAAK,OAAO,QAAQ,IAAY,SAAS;CAClD;CAEA,IAAW,QAAgB;EACzB,MAAM,gBAAgB,KAAK,OAAO,MAAM,IAAI,qBAAqB;EACjE,IAAI,iBAAiB,kBAAkB,KAAK,aAAa;GACvD,KAAK,cAAc;GACnB,KAAK,WAAW,KAAK,WAAW,KAAK,aAAa,KAAK,MAAM;EAC/D;EACA,OAAO,KAAK;CACd;;;;;;;CAQA,IAAc,YAAkC;EAC9C,QAAQ,KAAK,OAAO,MAAM,IAAI,sBAAsB,GAApD;GACE,KAAK,QACH,OAAO,KAAK;GACd,KAAK,UACH,OAAO,KAAK;GACd,KAAK,OACH,OAAO,KAAK;GACd,KAAK,OACH,OAAO,KAAK;GACd,SACE,OAAO,KAAK;EAChB;CACF;CAEA,WAAkB,OAAe,KAAuB;EACtD,MAAM,QAAQ,MAAM,YAAY,CAAC,CAAC,MAAM,MAAM;EAG9C,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,cAAc,KAAK,KAAK;GAC9B,IAAI,CAAC,aAAa;GAElB,IAAI,YAAY,SAAS,GAAG,KAAK,YAAY,SAAS,GAAG,GAAG;IAC1D,MAAM,CAAC,eAAe,cAAc,YAAY,MAAM,MAAM;IAC5D,MAAM,gBAAgB,cAAc,KAAK;IACzC,MAAM,eAAe,YAAY,KAAK;IAEtC,IAAI,CAAC,cAAc;IAEnB,IAAI,KAAK,eAAe,KAAK,aAAa,GACxC,IAAI;KACF,OAAO,KAAK,WAAW,YAAY;IACrC,SAAS,OAAO;KACd,MAAM,IAAI,YACR,sBAAsB,YAAY,KAAK,EAAE,wBAAwB,cAAc,EACjF;IACF;GAEJ;EACF;EAGA,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,cAAc,KAAK,KAAK;GAC9B,IAAI,CAAC,aAAa;GAElB,IAAI,CAAC,YAAY,SAAS,GAAG,KAAK,CAAC,YAAY,SAAS,GAAG,GACzD,IAAI;IACF,OAAO,KAAK,WAAW,WAAW;GACpC,SAAS,OAAO;IACd,MAAM,IAAI,YAAY,6BAA6B,YAAY,EAAE;GACnE;EAEJ;EAEA,OAAO;CACT;CAEA,eAAyB,YAAoB,SAA0B;EACrE,IAAI,QAAQ,SAAS,GAAG,GAAG;GAEzB,MAAM,eAAe,QAAQ,QAAQ,OAAO,KAAK,CAAC,CAAC,QAAQ,OAAO,IAAI;GACtE,OAAO,IAAI,OAAO,IAAI,cAAc,CAAC,CAAC,KAAK,UAAU;EACvD;EAGA,OAAO,WAAW,WAAW,OAAO;CACtC;CAEA,WAAkB,WAA6B;EAC7C,MAAM,QAAQ,UAAU,KAAK,CAAC,CAAC,YAAY;EAC3C,IAAI,KAAK,OAAO,WAAW,KAAA,GACzB,OAAO;EAGT,MAAM,IAAI,YAAY,sBAAsB,WAAW;CACzD;;;;;;;;;;;CAYA,eAAsB,OAA0B;EAC9C,OAAO,KAAK,OAAO,UAAU,KAAK,OAAO,KAAK;CAChD;CAIA,MAAa,SAAiB,MAAsB;EAClD,KAAK,IAAI,SAAS,SAAS,IAAI;CACjC;CAEA,KAAY,SAAiB,MAAsB;EACjD,KAAK,IAAI,QAAQ,SAAS,IAAI;CAChC;CAEA,KAAY,SAAiB,MAAsB;EACjD,KAAK,IAAI,QAAQ,SAAS,IAAI;CAChC;CAEA,MAAa,SAAiB,MAAsB;EAClD,KAAK,IAAI,SAAS,SAAS,IAAI;CACjC;CAEA,MAAa,SAAiB,MAAsB;EAClD,KAAK,IAAI,SAAS,SAAS,IAAI;CACjC;CAEA,IAAc,OAAiB,SAAiB,MAAsB;EACpE,IAAI,WAAW;EACf,IAAI,OAAO,YAAY,UACrB,WAAW;OACN,IAAI,OAAO,SAAS,UACzB,WAAW;EAGb,IAAI;EACJ,IAAI,OAAO,SAAS,YAAY,MAC9B,QAAQ;OACH,IAAI,OAAO,YAAY,YAAY,SACxC,QAAQ;EAGV,MAAM,WAAqB;GACzB;GACA,SAAS;GACT,MAAM;GACN,SAAS,KAAK;GACd,SAAS,KAAK;GACd,QAAQ,KAAK;GACb,KAAK,KAAK;GACV,WAAW,KAAK,iBAAiB,UAAU;EAC7C;EAEA,IAAI,KAAK,OAAO,SAAS,KAAK,OAAO,KAAK,QAAQ;GAChD,KAAK,KAAK,QAAQ;GAClB;EACF;EAEA,MAAM,YAAY,KAAK,UAAU,OAAO,QAAQ;EAEhD,KAAK,KAAK,UAAU,SAAS;EAE7B,KAAK,YAAY,MAAM,WAAW,QAAQ;CAC5C;CAEA,KAAe,OAAiB,SAAkB;EAChD,KAAK,OAAO,OACT,KACC,OACA;GACE;GACA;EACF,GACA,EACE,OAAO,KACT,CACF,CAAC,CACA,YAAY,IAAI;CACrB;AACF;;;;;;;;;;;;;;;;;;;;;;ACzNA,MAAa,WAAW,UAAkC,CAAC,MAAc;CACvE,MAAM,EAAE,QAAQ,SAAS,WAAW,SAAS;CAE7C,OAAO,QAAQ,QAAQ;EACrB,UAAU;EACV,MAAM,CACJ,QAAQ,QAAQ,SAAS,QAAQ,QACjC,QAAQ,QAAQ,OAAO,IAAI,eAAe,KAC5C;CACF,CAAC;AACH;AAMA,QAAQ,QAAQ;;;ACpChB,IAAa,6BAAb,cAAgD,uBAAuB;CACrE,MAAa,SAAuB;EAClC,QAAQ,IAAI,OAAO;CACrB;AACF;;;ACHA,IAAa,4BAAb,cAA+C,uBAAuB;CACpE,UAA6D,CAAC;CAE9D,UAA0B,EACxB,YAAY,IACd;CAEA,MAAa,WAAmB,OAAuB;EACrD,KAAK,QAAQ,KAAK;GAAE,GAAG;GAAO;EAAU,CAAC;EAEzC,IAAI,KAAK,QAAQ,SAAS,KAAK,QAAQ,YACrC,KAAK,UAAU,KAAK,QAAQ,MAC1B,CAAC,KAAK,MAAM,KAAK,QAAQ,aAAa,EAAG,CAC3C;CAEJ;CAEA,IAAW,OAAO;EAChB,OAAO,CAAC,GAAG,KAAK,OAAO;CACzB;CAEA,QAAqB;EACnB,KAAK,UAAU,CAAC;CAClB;AACF;;;ACzBA,MAAa,iBAAiB,EAAE,OAAO;CACrC,OAAO,EAAE,KAAK;EAAC;EAAU;EAAS;EAAS;EAAQ;EAAQ;CAAO,CAAC;CACnE,SAAS,EAAE,KAAK,EACd,MAAM,OACR,CAAC;CACD,SAAS,EAAE,KAAK;CAChB,QAAQ,EAAE,KAAK;CACf,SAAS,EAAE,KAAK,CAAC,CAAC,SAAS;CAC3B,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS;CACvB,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS;CACvB,WAAW,EAAE,OAAO;AACtB,CAAC;;;;;;;;;;;;;;;;;;;ACkCD,MAAa,eAAe,QAAQ;CAClC,MAAM;CACN,YAAY,CAAC,OAAO;CACpB,UAAU,CAAC,QAAQ,oBAAoB;CACvC,UAAU;EACR;EACA;EACA;EACA;EACA;EACA;CACF;CACA,WAAW,WAAW;EACpB,MAAM,MAAM,OAAO,SAAS,SAAS;EAKrC,IAAI,WAAW,IAAI;EACnB,IAAI,YAAY,IAAI;EACpB,IAAI,IAAI,OAAO;GACb,IAAI,IAAI,UAAU,OAAO,IAAI,UAAU,QACrC,aAAa;QACR;IACL,MAAM,WAAW,IAAI,MAAM,MAAM,GAAG,CAAC,CAClC,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CACzC,OAAO,OAAO;IACjB,aAAa,GAAG,SAAS,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,GAAG,EAAE;GAC9D;GACA,cAAc;EAChB;EAEA,MAAM,kCAAkC;GAGtC,IAAI,OAAO,OAAO,KAAK,CAAC,UAAU;IAChC,MAAM,gBAAgB,OAAY;KAChC,IAAI,GAAG,MAAM,QAAQ,UAAU,QAAQ;MACrC,MAAM,SAAS,OAAO,OAAO,yBAAyB;MACtD,KAAK,MAAM,OAAO,OAAO,MACvB,QAAQ,IAAI,IAAI,SAAS;KAE7B;IACF;IAEA,IAAI;KACF,OAAO,MAAM,IAAI,uBAAuB,CAAC,GAAG,YAAY;KACxD,OAAO,MAAM,IAAI,4BAA4B,CAAC,GAAG,YAAY;IAC/D,QAAQ,CAER;IAEA,OAAO;GACT;GAEA,OAAO;EACT;EAEA,MAAM,gCAAgC;GACpC,IAAI,WAAW;IACb,IAAI,cAAc,QAChB,OAAO;IAET,IAAI,cAAc,OAChB,OAAO;IAET,IAAI,cAAc,OAChB,OAAO;IAET,OAAO;GACT;GAEA,IAAI,OAAO,aAAa,KAAK,CAAC,OAAO,UAAU,GAC7C,OAAO;GAGT,OAAO;EACT;EAEA,OAAO,KAAK;GACV,UAAU;GACV,SAAS;GACT,KAAK,0BAA0B;EACjC,CAAC;EAED,OAAO,KAAK;GACV,UAAU;GACV,SAAS;GACT,KAAK,wBAAwB;EAC/B,CAAC;EAED,OAAO,MAAM,IACX,iBACA,OAAO,OAAO,QAAQ;GACpB,UAAU;GACV,MAAM,CAAC,UAAU,aAAa;EAChC,CAAC,CACH;EAEA,OAAO,MAAM,IACX,uBACA,aACG,OAAO,OAAO,IACX,UACA,OAAO,aAAa,KAAK,OAAO,UAAU,IACxC,SACA,OACV;CACF;AACF,CAAC;AAID,MAAM,YAAY,EAAE,OAAO;;;;;;;;;;CAUzB,OAAO,EACJ,KAAK,EACJ,aACE,wGACJ,CAAC,CAAC,CACD,SAAS;;;;;;;;;;;;;;;;;CAkBZ,WAAW,EACR,KAAK;EACJ,aAAa;;;;;EAKb,WAAW;CACb,CAAC,CAAC,CACD,SAAS;;;;;;;;CASZ,YAAY,EACT,KAAK;EAAC;EAAQ;EAAU;EAAO;CAAK,CAAC,CAAC,CACtC,KAAK,EAAE,WAAW,KAAK,CAAC,CAAC,CACzB,SAAS,yCAAyC,CAAC,CACnD,SAAS;AACd,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import { Alepha, AlephaError, Async, KIND, Primitive, Static, TObject, TSchema } from "alepha";
2
-
3
2
  //#region ../../src/mcp/errors/McpError.d.ts
4
3
  /**
5
4
  * MCP-specific error codes (application-specific codes in the -32000 to -32099 range).
@@ -478,11 +477,11 @@ declare class ResourcePrimitive extends Primitive<ResourcePrimitiveOptions> {
478
477
  * add = $tool({
479
478
  * description: "Add two numbers together",
480
479
  * schema: {
481
- * params: t.object({
482
- * a: t.number(),
483
- * b: t.number(),
480
+ * params: z.object({
481
+ * a: z.number(),
482
+ * b: z.number(),
484
483
  * }),
485
- * result: t.number(),
484
+ * result: z.number(),
486
485
  * },
487
486
  * handler: async ({ params }) => {
488
487
  * return params.a + params.b;
@@ -492,10 +491,10 @@ declare class ResourcePrimitive extends Primitive<ResourcePrimitiveOptions> {
492
491
  * greet = $tool({
493
492
  * description: "Generate a greeting message",
494
493
  * schema: {
495
- * params: t.object({
496
- * name: t.text(),
494
+ * params: z.object({
495
+ * name: z.text(),
497
496
  * }),
498
- * result: t.text(),
497
+ * result: z.text(),
499
498
  * },
500
499
  * handler: async ({ params }) => {
501
500
  * return `Hello, ${params.name}!`;
@@ -615,7 +614,7 @@ declare class ToolPrimitive<T extends ToolPrimitiveSchema> extends Primitive<Too
615
614
  root?: boolean;
616
615
  }): McpJsonSchema;
617
616
  /**
618
- * Convert a single property schema to JSON Schema format.
617
+ * Convert a single property schema to JSON Schema format (zod-native).
619
618
  */
620
619
  protected propertyToJsonSchema(schema: TSchema): Record<string, unknown>;
621
620
  }
@@ -744,9 +743,9 @@ declare class McpServerProvider {
744
743
  * class Prompts {
745
744
  * greeting = $prompt({
746
745
  * description: "Generate a personalized greeting",
747
- * args: t.object({
748
- * name: t.text({ description: "Name of the person to greet" }),
749
- * style: t.optional(t.enum(["formal", "casual"])),
746
+ * args: z.object({
747
+ * name: z.text({ description: "Name of the person to greet" }),
748
+ * style: z.enum(["formal", "casual"]).optional(),
750
749
  * }),
751
750
  * handler: async ({ args }) => [
752
751
  * {
@@ -760,9 +759,9 @@ declare class McpServerProvider {
760
759
  *
761
760
  * codeReview = $prompt({
762
761
  * description: "Request a code review",
763
- * args: t.object({
764
- * code: t.text({ description: "The code to review" }),
765
- * language: t.text({ description: "Programming language" }),
762
+ * args: z.object({
763
+ * code: z.text({ description: "The code to review" }),
764
+ * language: z.text({ description: "Programming language" }),
766
765
  * }),
767
766
  * handler: async ({ args }) => [
768
767
  * {
@@ -852,80 +851,18 @@ declare class PromptPrimitive<T extends TObject> extends Primitive<PromptPrimiti
852
851
  }
853
852
  //#endregion
854
853
  //#region ../../src/mcp/transports/StreamableHttpMcpTransport.d.ts
855
- declare const mcpStreamableHttpOptions: import("alepha").Atom<import("typebox").TObject<{
856
- /**
857
- * Path for the MCP endpoint. Single endpoint for both requests and
858
- * (optional) server-streamed responses, per spec 2025-03-26+.
859
- */
860
- path: import("typebox").TString;
861
- /**
862
- * Allow-list of `Origin` header values accepted on incoming requests.
863
- * Empty array (default) means "allow any". When set, browser-originated
864
- * requests with a non-matching `Origin` are rejected with 403 Forbidden,
865
- * blocking DNS-rebinding attacks against localhost MCP servers.
866
- *
867
- * Server-to-server callers (no `Origin` header) are always allowed.
868
- *
869
- * Spec 2025-11-25, PR #1439.
870
- */
871
- allowedOrigins: import("typebox").TArray<import("typebox").TString>;
872
- /**
873
- * When true, an unauthenticated POST to the MCP endpoint is rejected
874
- * with `401 Unauthorized` and an RFC 9728 `WWW-Authenticate` challenge
875
- * instead of being dispatched. MCP clients (Claude, etc.) rely on that
876
- * challenge to discover the OAuth authorization server.
877
- *
878
- * The transport stays OAuth-agnostic: it only knows "auth is required".
879
- * `$realm({ features: { oauth: true } })` flips this on automatically.
880
- *
881
- * @default false
882
- */
883
- requireAuth: import("typebox").TBoolean;
884
- /**
885
- * Path of the RFC 9728 protected-resource metadata document, advertised
886
- * (as an absolute URL, resolved against the request origin) in the
887
- * `WWW-Authenticate` challenge emitted when {@link requireAuth} rejects
888
- * a request.
889
- */
890
- resourceMetadataPath: import("typebox").TString;
891
- }>, "alepha.mcp.streamableHttp.options">;
892
- declare const mcpSseOptions: import("alepha").Atom<import("typebox").TObject<{
893
- /**
894
- * Path for the MCP endpoint. Single endpoint for both requests and
895
- * (optional) server-streamed responses, per spec 2025-03-26+.
896
- */
897
- path: import("typebox").TString;
898
- /**
899
- * Allow-list of `Origin` header values accepted on incoming requests.
900
- * Empty array (default) means "allow any". When set, browser-originated
901
- * requests with a non-matching `Origin` are rejected with 403 Forbidden,
902
- * blocking DNS-rebinding attacks against localhost MCP servers.
903
- *
904
- * Server-to-server callers (no `Origin` header) are always allowed.
905
- *
906
- * Spec 2025-11-25, PR #1439.
907
- */
908
- allowedOrigins: import("typebox").TArray<import("typebox").TString>;
909
- /**
910
- * When true, an unauthenticated POST to the MCP endpoint is rejected
911
- * with `401 Unauthorized` and an RFC 9728 `WWW-Authenticate` challenge
912
- * instead of being dispatched. MCP clients (Claude, etc.) rely on that
913
- * challenge to discover the OAuth authorization server.
914
- *
915
- * The transport stays OAuth-agnostic: it only knows "auth is required".
916
- * `$realm({ features: { oauth: true } })` flips this on automatically.
917
- *
918
- * @default false
919
- */
920
- requireAuth: import("typebox").TBoolean;
921
- /**
922
- * Path of the RFC 9728 protected-resource metadata document, advertised
923
- * (as an absolute URL, resolved against the request origin) in the
924
- * `WWW-Authenticate` challenge emitted when {@link requireAuth} rejects
925
- * a request.
926
- */
927
- resourceMetadataPath: import("typebox").TString;
928
- }>, "alepha.mcp.streamableHttp.options">;
854
+ declare const mcpStreamableHttpOptions: import("alepha").Atom<import("zod").ZodObject<{
855
+ path: import("zod").ZodString;
856
+ allowedOrigins: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
857
+ requireAuth: import("zod").ZodDefault<import("zod").ZodBoolean>;
858
+ resourceMetadataPath: import("zod").ZodString;
859
+ }, import("zod/v4/core").$strip>, "alepha.mcp.streamableHttp.options">;
860
+ declare const mcpSseOptions: import("alepha").Atom<import("zod").ZodObject<{
861
+ path: import("zod").ZodString;
862
+ allowedOrigins: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
863
+ requireAuth: import("zod").ZodDefault<import("zod").ZodBoolean>;
864
+ resourceMetadataPath: import("zod").ZodString;
865
+ }, import("zod/v4/core").$strip>, "alepha.mcp.streamableHttp.options">;
929
866
  /**
930
867
  * Streamable HTTP transport for MCP communication.
931
868
  *
@@ -988,7 +925,7 @@ declare class StreamableHttpMcpTransport {
988
925
  * concrete need exists).
989
926
  */
990
927
  message: import("alepha/server").RoutePrimitive<{
991
- body: import("typebox").TRecord<string, import("typebox").TAny>;
928
+ body: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodAny>;
992
929
  }>;
993
930
  }
994
931
  /**