alepha 0.22.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 (869) 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 +242 -230
  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 -1109
  58. package/dist/api/users/index.d.ts.map +1 -1
  59. package/dist/api/users/index.js +454 -369
  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 +169 -157
  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 +244 -475
  102. package/dist/cli/core/index.d.ts.map +1 -1
  103. package/dist/cli/core/index.js +308 -383
  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 +20 -39
  110. package/dist/cli/i18n/index.d.ts.map +1 -1
  111. package/dist/cli/i18n/index.js +51 -17
  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 +383 -410
  118. package/dist/cli/platform-lib/index.d.ts.map +1 -1
  119. package/dist/cli/platform-lib/index.js +300 -258
  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 +82 -194
  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 +36 -90
  183. package/dist/mcp/index.d.ts.map +1 -1
  184. package/dist/mcp/index.js +65 -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 -6
  219. package/dist/react/form/index.d.ts.map +1 -1
  220. package/dist/react/form/index.js +107 -71
  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 +47 -5
  227. package/dist/react/i18n/index.d.ts.map +1 -1
  228. package/dist/react/i18n/index.js +116 -12
  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 +188 -29
  234. package/dist/react/router/index.browser.js.map +1 -1
  235. package/dist/react/router/index.d.ts +480 -372
  236. package/dist/react/router/index.d.ts.map +1 -1
  237. package/dist/react/router/index.js +261 -47
  238. package/dist/react/router/index.js.map +1 -1
  239. package/dist/react/sitemap/index.browser.js +35 -0
  240. package/dist/react/sitemap/index.browser.js.map +1 -0
  241. package/dist/react/sitemap/index.d.ts +91 -0
  242. package/dist/react/sitemap/index.d.ts.map +1 -0
  243. package/dist/react/sitemap/index.js +131 -0
  244. package/dist/react/sitemap/index.js.map +1 -0
  245. package/dist/react/testing/index.d.ts +4 -5
  246. package/dist/react/testing/index.d.ts.map +1 -1
  247. package/dist/react/testing/index.js +41 -15
  248. package/dist/react/testing/index.js.map +1 -1
  249. package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
  250. package/dist/react/ui/index.d.ts +35 -34
  251. package/dist/react/ui/index.d.ts.map +1 -1
  252. package/dist/react/ui/index.js +12 -17
  253. package/dist/react/ui/index.js.map +1 -1
  254. package/dist/redis/index.bun.js +5 -5
  255. package/dist/redis/index.bun.js.map +1 -1
  256. package/dist/redis/index.d.ts +6 -7
  257. package/dist/redis/index.d.ts.map +1 -1
  258. package/dist/redis/index.js +6 -6
  259. package/dist/redis/index.js.map +1 -1
  260. package/dist/retry/index.d.ts +0 -1
  261. package/dist/retry/index.d.ts.map +1 -1
  262. package/dist/retry/index.js.map +1 -1
  263. package/dist/router/index.d.ts.map +1 -1
  264. package/dist/router/index.js.map +1 -1
  265. package/dist/scheduler/index.d.ts +4 -12
  266. package/dist/scheduler/index.d.ts.map +1 -1
  267. package/dist/scheduler/index.js +9 -4
  268. package/dist/scheduler/index.js.map +1 -1
  269. package/dist/scheduler/index.workerd.js +9 -4
  270. package/dist/scheduler/index.workerd.js.map +1 -1
  271. package/dist/security/index.browser.js +30 -28
  272. package/dist/security/index.browser.js.map +1 -1
  273. package/dist/security/index.d.ts +113 -44
  274. package/dist/security/index.d.ts.map +1 -1
  275. package/dist/security/index.js +452 -37
  276. package/dist/security/index.js.map +1 -1
  277. package/dist/server/auth/index.browser.js +19 -19
  278. package/dist/server/auth/index.browser.js.map +1 -1
  279. package/dist/server/auth/index.d.ts +215 -187
  280. package/dist/server/auth/index.d.ts.map +1 -1
  281. package/dist/server/auth/index.js +1145 -86
  282. package/dist/server/auth/index.js.map +1 -1
  283. package/dist/server/cookies/index.browser.js +103 -5
  284. package/dist/server/cookies/index.browser.js.map +1 -1
  285. package/dist/server/cookies/index.d.ts +86 -4
  286. package/dist/server/cookies/index.d.ts.map +1 -1
  287. package/dist/server/cookies/index.js +121 -8
  288. package/dist/server/cookies/index.js.map +1 -1
  289. package/dist/server/core/index.browser.js +22 -27
  290. package/dist/server/core/index.browser.js.map +1 -1
  291. package/dist/server/core/index.d.ts +134 -85
  292. package/dist/server/core/index.d.ts.map +1 -1
  293. package/dist/server/core/index.js +130 -118
  294. package/dist/server/core/index.js.map +1 -1
  295. package/dist/server/cors/index.d.ts +9 -10
  296. package/dist/server/cors/index.d.ts.map +1 -1
  297. package/dist/server/cors/index.js +14 -26
  298. package/dist/server/cors/index.js.map +1 -1
  299. package/dist/server/etag/index.d.ts +2 -3
  300. package/dist/server/etag/index.d.ts.map +1 -1
  301. package/dist/server/etag/index.js.map +1 -1
  302. package/dist/server/health/index.d.ts +18 -19
  303. package/dist/server/health/index.d.ts.map +1 -1
  304. package/dist/server/health/index.js +6 -6
  305. package/dist/server/health/index.js.map +1 -1
  306. package/dist/server/links/index.browser.js +15 -18
  307. package/dist/server/links/index.browser.js.map +1 -1
  308. package/dist/server/links/index.d.ts +66 -67
  309. package/dist/server/links/index.d.ts.map +1 -1
  310. package/dist/server/links/index.js +29 -32
  311. package/dist/server/links/index.js.map +1 -1
  312. package/dist/server/metrics/index.d.ts +0 -1
  313. package/dist/server/metrics/index.d.ts.map +1 -1
  314. package/dist/server/metrics/index.js +10 -3
  315. package/dist/server/metrics/index.js.map +1 -1
  316. package/dist/server/proxy/index.d.ts +0 -1
  317. package/dist/server/proxy/index.d.ts.map +1 -1
  318. package/dist/server/proxy/index.js.map +1 -1
  319. package/dist/server/rate-limit/index.d.ts +8 -9
  320. package/dist/server/rate-limit/index.d.ts.map +1 -1
  321. package/dist/server/rate-limit/index.js +6 -12
  322. package/dist/server/rate-limit/index.js.map +1 -1
  323. package/dist/server/static/index.d.ts +0 -1
  324. package/dist/server/static/index.d.ts.map +1 -1
  325. package/dist/server/static/index.js.map +1 -1
  326. package/dist/server/swagger/index.d.ts +4 -4
  327. package/dist/server/swagger/index.d.ts.map +1 -1
  328. package/dist/server/swagger/index.js +37 -25
  329. package/dist/server/swagger/index.js.map +1 -1
  330. package/dist/sms/index.d.ts +0 -1
  331. package/dist/sms/index.d.ts.map +1 -1
  332. package/dist/sms/index.js.map +1 -1
  333. package/dist/system/index.browser.js.map +1 -1
  334. package/dist/system/index.d.ts +0 -1
  335. package/dist/system/index.d.ts.map +1 -1
  336. package/dist/system/index.js +2 -1
  337. package/dist/system/index.js.map +1 -1
  338. package/dist/system/index.workerd.js.map +1 -1
  339. package/dist/topic/core/index.d.ts +19 -20
  340. package/dist/topic/core/index.d.ts.map +1 -1
  341. package/dist/topic/core/index.js +8 -8
  342. package/dist/topic/core/index.js.map +1 -1
  343. package/dist/topic/redis/index.d.ts +3 -4
  344. package/dist/topic/redis/index.d.ts.map +1 -1
  345. package/dist/topic/redis/index.js +2 -2
  346. package/dist/topic/redis/index.js.map +1 -1
  347. package/package.json +36 -36
  348. package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
  349. package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
  350. package/src/api/audits/controllers/AdminAuditController.ts +41 -41
  351. package/src/api/audits/entities/audits.ts +22 -22
  352. package/src/api/audits/index.ts +6 -1
  353. package/src/api/audits/jobs/AuditJobs.ts +29 -0
  354. package/src/api/audits/parameters/AuditParameters.ts +51 -0
  355. package/src/api/audits/primitives/$audit.ts +24 -0
  356. package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
  357. package/src/api/audits/schemas/createAuditSchema.ts +18 -18
  358. package/src/api/audits/services/AuditService.ts +79 -7
  359. package/src/api/files/__tests__/FileController.spec.ts +5 -5
  360. package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
  361. package/src/api/files/controllers/FileController.ts +25 -25
  362. package/src/api/files/entities/files.ts +15 -15
  363. package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
  364. package/src/api/files/schemas/fileQuerySchema.ts +9 -9
  365. package/src/api/files/schemas/fileResourceSchema.ts +7 -9
  366. package/src/api/files/schemas/storageStatsSchema.ts +13 -13
  367. package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
  368. package/src/api/jobs/__tests__/$job.spec.ts +18 -18
  369. package/src/api/jobs/controllers/AdminJobController.ts +8 -8
  370. package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
  371. package/src/api/jobs/providers/JobProvider.ts +128 -12
  372. package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
  373. package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
  374. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
  375. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
  376. package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
  377. package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
  378. package/src/api/jobs/services/JobService.ts +6 -6
  379. package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
  380. package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
  381. package/src/api/keys/entities/apiKeyEntity.ts +15 -15
  382. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
  383. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
  384. package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
  385. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
  386. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
  387. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
  388. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
  389. package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
  390. package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
  391. package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
  392. package/src/api/notifications/primitives/$notification.ts +43 -4
  393. package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
  394. package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
  395. package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
  396. package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
  397. package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
  398. package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
  399. package/src/api/notifications/services/NotificationSenderService.ts +38 -2
  400. package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
  401. package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
  402. package/src/api/oauth/controllers/OAuthController.ts +132 -12
  403. package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
  404. package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
  405. package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
  406. package/src/api/oauth/index.ts +1 -0
  407. package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
  408. package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
  409. package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
  410. package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
  411. package/src/api/oauth/services/OAuthClientService.ts +228 -15
  412. package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
  413. package/src/api/organizations/entities/organizations.ts +6 -6
  414. package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
  415. package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
  416. package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
  417. package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
  418. package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
  419. package/src/api/parameters/entities/parameters.ts +29 -16
  420. package/src/api/parameters/primitives/$parameter.ts +3 -3
  421. package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
  422. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
  423. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
  424. package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
  425. package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
  426. package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
  427. package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
  428. package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
  429. package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
  430. package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
  431. package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
  432. package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
  433. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
  434. package/src/api/parameters/services/ParameterProvider.ts +152 -65
  435. package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
  436. package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
  437. package/src/api/payments/controllers/PaymentController.ts +4 -4
  438. package/src/api/payments/entities/paymentIntents.ts +11 -11
  439. package/src/api/payments/entities/paymentMethods.ts +11 -11
  440. package/src/api/payments/entities/refunds.ts +9 -9
  441. package/src/api/payments/providers/PaymentProvider.ts +18 -0
  442. package/src/api/payments/schemas/intentSchemas.ts +25 -25
  443. package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
  444. package/src/api/payments/services/PaymentService.ts +60 -3
  445. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
  446. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
  447. package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
  448. package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
  449. package/src/api/subscriptions/entities/subscriptions.ts +22 -22
  450. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
  451. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
  452. package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
  453. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
  454. package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
  455. package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
  456. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
  457. package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
  458. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
  459. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
  460. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
  461. package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
  462. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
  463. package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
  464. package/src/api/users/controllers/AdminIdentityController.ts +29 -19
  465. package/src/api/users/controllers/AdminSessionController.ts +37 -27
  466. package/src/api/users/controllers/AdminUserController.ts +75 -53
  467. package/src/api/users/controllers/MySessionController.ts +125 -0
  468. package/src/api/users/controllers/RealmController.ts +9 -9
  469. package/src/api/users/controllers/UserController.ts +55 -55
  470. package/src/api/users/entities/identities.ts +8 -8
  471. package/src/api/users/entities/sessions.ts +17 -17
  472. package/src/api/users/entities/users.ts +17 -17
  473. package/src/api/users/index.ts +3 -0
  474. package/src/api/users/notifications/UserNotifications.ts +76 -24
  475. package/src/api/users/primitives/$realm.ts +12 -0
  476. package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
  477. package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
  478. package/src/api/users/schemas/createUserSchema.ts +2 -2
  479. package/src/api/users/schemas/identityQuerySchema.ts +4 -4
  480. package/src/api/users/schemas/identityResourceSchema.ts +3 -2
  481. package/src/api/users/schemas/loginSchema.ts +4 -4
  482. package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
  483. package/src/api/users/schemas/realmConfigSchema.ts +10 -10
  484. package/src/api/users/schemas/registerQuerySchema.ts +6 -6
  485. package/src/api/users/schemas/registerRequestSchema.ts +21 -43
  486. package/src/api/users/schemas/registerResponseSchema.ts +2 -2
  487. package/src/api/users/schemas/registerSchema.ts +13 -31
  488. package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
  489. package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
  490. package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
  491. package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
  492. package/src/api/users/schemas/updateUserSchema.ts +3 -4
  493. package/src/api/users/schemas/userQuerySchema.ts +7 -7
  494. package/src/api/users/services/RegistrationService.ts +25 -11
  495. package/src/api/users/services/UserService.ts +12 -6
  496. package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
  497. package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
  498. package/src/api/verifications/controllers/VerificationController.ts +13 -27
  499. package/src/api/verifications/entities/verifications.ts +13 -14
  500. package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
  501. package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
  502. package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
  503. package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
  504. package/src/api/verifications/services/VerificationService.ts +12 -0
  505. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
  506. package/src/batch/__tests__/$batch.spec.ts +22 -22
  507. package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
  508. package/src/bin/index.ts +1 -1
  509. package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
  510. package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
  511. package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
  512. package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
  513. package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
  514. package/src/cache/core/primitives/$cache.ts +7 -10
  515. package/src/cache/database/entities/cacheEntries.ts +16 -27
  516. package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
  517. package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
  518. package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
  519. package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
  520. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
  521. package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
  522. package/src/cli/core/atoms/appEntryOptions.ts +5 -5
  523. package/src/cli/core/atoms/buildOptions.ts +76 -88
  524. package/src/cli/core/atoms/changelogOptions.ts +3 -3
  525. package/src/cli/core/atoms/devOptions.ts +3 -3
  526. package/src/cli/core/commands/build.ts +36 -49
  527. package/src/cli/core/commands/db.ts +171 -83
  528. package/src/cli/core/commands/dev.ts +8 -8
  529. package/src/cli/core/commands/gen/changelog.ts +12 -14
  530. package/src/cli/core/commands/gen/env.ts +6 -6
  531. package/src/cli/core/commands/gen/openapi.ts +6 -6
  532. package/src/cli/core/commands/init.ts +28 -33
  533. package/src/cli/core/commands/pack.ts +10 -10
  534. package/src/cli/core/commands/root.ts +7 -8
  535. package/src/cli/core/commands/test.ts +17 -20
  536. package/src/cli/core/index.ts +0 -3
  537. package/src/cli/core/tasks/BuildCloudflareTask.ts +138 -245
  538. package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
  539. package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
  540. package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
  541. package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
  542. package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
  543. package/src/cli/i18n/services/I18nCheckService.ts +65 -11
  544. package/src/cli/platform/commands/SecretsCommand.ts +24 -25
  545. package/src/cli/platform/commands/platform.ts +40 -46
  546. package/src/cli/platform/index.ts +1 -1
  547. package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
  548. package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
  549. package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
  550. package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +141 -50
  551. package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
  552. package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
  553. package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
  554. package/src/cli/platform-lib/schemas/platform.ts +51 -51
  555. package/src/cli/platform-lib/schemas/vercel.ts +28 -28
  556. package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
  557. package/src/cli/platform-lib/services/VercelApi.ts +4 -4
  558. package/src/cli/platform-lib/services/VercelCli.ts +6 -15
  559. package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
  560. package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
  561. package/src/cli/vendor/commands/VendorCommand.ts +11 -12
  562. package/src/command/__tests__/$command.spec.ts +82 -83
  563. package/src/command/__tests__/Asker.spec.ts +6 -13
  564. package/src/command/__tests__/CliProvider.spec.ts +136 -149
  565. package/src/command/__tests__/Runner.spec.ts +86 -110
  566. package/src/command/helpers/Asker.ts +23 -58
  567. package/src/command/helpers/Runner.ts +34 -110
  568. package/src/command/index.ts +4 -9
  569. package/src/command/primitives/$command.ts +10 -10
  570. package/src/command/providers/CliProvider.ts +183 -161
  571. package/src/core/Alepha.ts +62 -13
  572. package/src/core/__tests__/$atom.spec.ts +52 -3
  573. package/src/core/__tests__/$computed.spec.ts +129 -0
  574. package/src/core/__tests__/$env.spec.ts +13 -13
  575. package/src/core/__tests__/$inject.spec.ts +4 -4
  576. package/src/core/__tests__/$module.spec.ts +1 -1
  577. package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
  578. package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
  579. package/src/core/__tests__/Alepha-start.spec.ts +3 -3
  580. package/src/core/__tests__/CodecManager.spec.ts +113 -94
  581. package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
  582. package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
  583. package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
  584. package/src/core/__tests__/StateManager.spec.ts +423 -0
  585. package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
  586. package/src/core/__tests__/TypeProvider.spec.ts +314 -309
  587. package/src/core/__tests__/dump.spec.ts +6 -6
  588. package/src/core/__tests__/pagination.spec.ts +4 -4
  589. package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
  590. package/src/core/errors/TypeBoxError.ts +10 -4
  591. package/src/core/helpers/FileLike.ts +5 -5
  592. package/src/core/helpers/coerceStrings.ts +70 -0
  593. package/src/core/helpers/jsonSchemaToZod.ts +112 -0
  594. package/src/core/index.shared.ts +4 -1
  595. package/src/core/primitives/$atom.ts +95 -27
  596. package/src/core/primitives/$computed.ts +148 -0
  597. package/src/core/primitives/$env.ts +5 -5
  598. package/src/core/primitives/$state.ts +1 -1
  599. package/src/core/providers/AlsProvider.ts +26 -0
  600. package/src/core/providers/CodecManager.ts +1 -2
  601. package/src/core/providers/JsonSchemaCodec.ts +1 -2
  602. package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
  603. package/src/core/providers/SchemaValidator.ts +48 -158
  604. package/src/core/providers/StateManager.ts +383 -9
  605. package/src/core/providers/TypeProvider.ts +80 -734
  606. package/src/core/providers/ZodProvider.ts +380 -0
  607. package/src/core/providers/zodAugment.ts +69 -0
  608. package/src/core/schemas/pageQuerySchema.ts +19 -21
  609. package/src/core/schemas/pageSchema.ts +47 -57
  610. package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
  611. package/src/crypto/providers/SecretProvider.ts +16 -10
  612. package/src/datetime/primitives/$throttle.ts +6 -1
  613. package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
  614. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
  615. package/src/email/core/index.ts +7 -2
  616. package/src/email/core/primitives/$email.ts +5 -1
  617. package/src/email/core/providers/LocalEmailProvider.ts +5 -5
  618. package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
  619. package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
  620. package/src/fake/__tests__/keyName.example.ts +21 -21
  621. package/src/fake/__tests__/keyName.spec.ts +41 -41
  622. package/src/fake/__tests__/module.example.ts +8 -8
  623. package/src/fake/providers/FakeProvider.ts +122 -121
  624. package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
  625. package/src/lock/core/index.ts +1 -0
  626. package/src/lock/core/primitives/$lock.ts +13 -6
  627. package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
  628. package/src/logger/__tests__/Logger.spec.ts +49 -0
  629. package/src/logger/index.ts +25 -18
  630. package/src/logger/providers/CliFormatterProvider.ts +75 -0
  631. package/src/logger/schemas/logEntrySchema.ts +10 -10
  632. package/src/logger/services/Logger.ts +18 -0
  633. package/src/mcp/__tests__/$prompt.spec.ts +21 -23
  634. package/src/mcp/__tests__/$tool.spec.ts +22 -22
  635. package/src/mcp/__tests__/McpServerProvider.spec.ts +82 -11
  636. package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
  637. package/src/mcp/__tests__/integration.spec.ts +33 -33
  638. package/src/mcp/primitives/$prompt.ts +11 -9
  639. package/src/mcp/primitives/$tool.ts +27 -86
  640. package/src/mcp/providers/McpServerProvider.ts +55 -0
  641. package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
  642. package/src/orm/__tests__/$repository-tests.ts +133 -27
  643. package/src/orm/__tests__/$repository.spec.ts +23 -0
  644. package/src/orm/__tests__/$transactional-tests.ts +4 -4
  645. package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
  646. package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
  647. package/src/orm/__tests__/QueryManager.spec.ts +5 -5
  648. package/src/orm/__tests__/delete-returning-tests.ts +11 -11
  649. package/src/orm/__tests__/deletedAt-tests.ts +3 -3
  650. package/src/orm/__tests__/enums.spec.ts +29 -25
  651. package/src/orm/__tests__/execute-tests.ts +8 -8
  652. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
  653. package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
  654. package/src/orm/__tests__/joins-tests.ts +30 -30
  655. package/src/orm/__tests__/organization-tests.ts +105 -3
  656. package/src/orm/__tests__/organization.spec.ts +46 -0
  657. package/src/orm/__tests__/orm-errors.spec.ts +10 -10
  658. package/src/orm/__tests__/orm-next-tests.ts +29 -29
  659. package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
  660. package/src/orm/__tests__/primaryKey.spec.ts +4 -4
  661. package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
  662. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
  663. package/src/orm/__tests__/references.spec.ts +7 -7
  664. package/src/orm/__tests__/security.spec.ts +17 -17
  665. package/src/orm/__tests__/string-operators-tests.ts +5 -5
  666. package/src/orm/__tests__/timestamps-tests.ts +14 -14
  667. package/src/orm/__tests__/validation-tests.ts +5 -5
  668. package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
  669. package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
  670. package/src/orm/core/entities/alephaSequences.ts +8 -8
  671. package/src/orm/core/helpers/pgAttr.ts +4 -4
  672. package/src/orm/core/primitives/$entity.ts +10 -6
  673. package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
  674. package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
  675. package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
  676. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
  677. package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
  678. package/src/orm/core/schemas/insertSchema.ts +14 -18
  679. package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
  680. package/src/orm/core/schemas/updateSchema.ts +10 -16
  681. package/src/orm/core/services/PgRelationManager.ts +2 -2
  682. package/src/orm/core/services/QueryManager.ts +13 -2
  683. package/src/orm/core/services/Repository.ts +88 -33
  684. package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
  685. package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
  686. package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
  687. package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
  688. package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
  689. package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
  690. package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
  691. package/src/queue/core/__tests__/shared.ts +6 -6
  692. package/src/queue/core/primitives/$consumer.ts +5 -5
  693. package/src/queue/core/primitives/$queue.ts +44 -61
  694. package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
  695. package/src/queue/core/providers/WorkerProvider.ts +17 -14
  696. package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
  697. package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
  698. package/src/react/core/__tests__/Router.spec.tsx +4 -4
  699. package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
  700. package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
  701. package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
  702. package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
  703. package/src/react/core/components/ErrorBoundary.tsx +42 -0
  704. package/src/react/core/hooks/useAction.ts +56 -19
  705. package/src/react/core/hooks/useComputed.ts +91 -0
  706. package/src/react/core/hooks/useSelector.ts +67 -0
  707. package/src/react/core/hooks/useStore.ts +36 -17
  708. package/src/react/core/index.ts +3 -0
  709. package/src/react/core/utils/shallowEqual.ts +36 -0
  710. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +71 -0
  711. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +96 -0
  712. package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
  713. package/src/react/form/errors/FormValidationError.ts +0 -2
  714. package/src/react/form/hooks/useForm.ts +19 -4
  715. package/src/react/form/hooks/useFormQuerySync.ts +0 -0
  716. package/src/react/form/services/FormModel.ts +124 -86
  717. package/src/react/form/services/parseField.ts +66 -27
  718. package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
  719. package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
  720. package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
  721. package/src/react/i18n/providers/I18nProvider.ts +173 -14
  722. package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
  723. package/src/react/router/__tests__/$page.spec.tsx +21 -21
  724. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
  725. package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
  726. package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
  727. package/src/react/router/components/NestedView.tsx +11 -3
  728. package/src/react/router/hooks/useQueryParams.ts +1 -1
  729. package/src/react/router/index.browser.ts +4 -0
  730. package/src/react/router/index.shared.ts +1 -0
  731. package/src/react/router/index.ts +9 -0
  732. package/src/react/router/primitives/$page.ts +2 -2
  733. package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
  734. package/src/react/router/providers/ReactBrowserRouterProvider.ts +15 -1
  735. package/src/react/router/providers/ReactPageProvider.ts +38 -13
  736. package/src/react/router/providers/ReactServerProvider.ts +105 -16
  737. package/src/react/router/providers/RootComponentsProvider.ts +13 -0
  738. package/src/react/router/providers/RouterLocaleProvider.ts +125 -0
  739. package/src/react/router/providers/__tests__/RootComponentsProvider.spec.ts +15 -0
  740. package/src/react/router/providers/__tests__/rootComponents.ssr.browser.spec.tsx +67 -0
  741. package/src/react/sitemap/__tests__/$sitemap.spec.ts +131 -0
  742. package/src/react/sitemap/index.browser.ts +21 -0
  743. package/src/react/sitemap/index.ts +25 -0
  744. package/src/react/sitemap/primitives/$sitemap.browser.ts +26 -0
  745. package/src/react/sitemap/primitives/$sitemap.ts +196 -0
  746. package/src/react/ui/atoms/uiAtom.ts +6 -6
  747. package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
  748. package/src/react/ui/hooks/useColorMode.ts +11 -4
  749. package/src/react/ui/services/SchemaControl.ts +4 -4
  750. package/src/redis/providers/BunRedisProvider.ts +19 -11
  751. package/src/redis/providers/NodeRedisProvider.ts +3 -3
  752. package/src/scheduler/primitives/$scheduler.ts +21 -8
  753. package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
  754. package/src/security/atoms/currentTenantAtom.ts +6 -6
  755. package/src/security/atoms/currentUserAtom.ts +2 -2
  756. package/src/security/primitives/$issuer.ts +24 -2
  757. package/src/security/providers/JwtProvider.ts +100 -0
  758. package/src/security/providers/SecurityProvider.ts +43 -2
  759. package/src/security/schemas/permissionSchema.ts +19 -19
  760. package/src/security/schemas/roleSchema.ts +22 -28
  761. package/src/security/schemas/userAccountInfoSchema.ts +47 -37
  762. package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
  763. package/src/server/auth/__tests__/federationRedirectReplay.spec.ts +44 -0
  764. package/src/server/auth/helpers/appleClientSecret.ts +24 -0
  765. package/src/server/auth/helpers/jtiReplayGuard.ts +41 -0
  766. package/src/server/auth/helpers/safeRedirectPath.ts +19 -0
  767. package/src/server/auth/index.ts +1 -0
  768. package/src/server/auth/primitives/$auth.ts +6 -6
  769. package/src/server/auth/primitives/$authApple.ts +10 -10
  770. package/src/server/auth/primitives/$authFacebook.ts +10 -10
  771. package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
  772. package/src/server/auth/primitives/$authGithub.ts +10 -10
  773. package/src/server/auth/primitives/$authGoogle.ts +10 -10
  774. package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
  775. package/src/server/auth/providers/ServerAuthProvider.ts +67 -52
  776. package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
  777. package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
  778. package/src/server/auth/schemas/tokensSchema.ts +16 -16
  779. package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
  780. package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
  781. package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
  782. package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
  783. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +82 -12
  784. package/src/server/cookies/index.browser.ts +4 -1
  785. package/src/server/cookies/index.ts +8 -1
  786. package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
  787. package/src/server/cookies/primitives/$cookie.ts +16 -0
  788. package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
  789. package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
  790. package/src/server/cookies/providers/ServerCookiesProvider.ts +32 -4
  791. package/src/server/cookies/services/CookieParser.ts +6 -1
  792. package/src/server/core/__tests__/$action.spec.ts +13 -13
  793. package/src/server/core/__tests__/$middleware.spec.ts +10 -10
  794. package/src/server/core/__tests__/$route.spec.ts +9 -9
  795. package/src/server/core/__tests__/$sse.spec.ts +26 -26
  796. package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
  797. package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
  798. package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
  799. package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
  800. package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
  801. package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
  802. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
  803. package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
  804. package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
  805. package/src/server/core/errors/ValidationError.ts +6 -3
  806. package/src/server/core/helpers/isMultipart.ts +2 -1
  807. package/src/server/core/index.ts +5 -2
  808. package/src/server/core/interfaces/ServerRequest.ts +14 -14
  809. package/src/server/core/primitives/$action.ts +26 -36
  810. package/src/server/core/primitives/$route.ts +27 -0
  811. package/src/server/core/primitives/$sse.ts +3 -3
  812. package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
  813. package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
  814. package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
  815. package/src/server/core/providers/ServerCompressProvider.ts +9 -10
  816. package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
  817. package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
  818. package/src/server/core/providers/ServerRouterProvider.ts +44 -15
  819. package/src/server/core/schemas/errorSchema.ts +20 -25
  820. package/src/server/core/schemas/okSchema.ts +9 -14
  821. package/src/server/core/services/HttpClient.ts +13 -1
  822. package/src/server/core/services/ServerRequestParser.ts +6 -6
  823. package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
  824. package/src/server/health/schemas/healthSchema.ts +6 -6
  825. package/src/server/links/__tests__/$remote.spec.ts +3 -3
  826. package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
  827. package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
  828. package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
  829. package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
  830. package/src/server/links/atoms/apiLinksAtom.ts +2 -2
  831. package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
  832. package/src/server/links/primitives/$remote.ts +3 -3
  833. package/src/server/links/providers/LinkProvider.ts +3 -3
  834. package/src/server/links/providers/ServerLinksProvider.ts +20 -20
  835. package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
  836. package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
  837. package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
  838. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
  839. package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
  840. package/src/server/swagger/__tests__/ui.spec.ts +3 -3
  841. package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
  842. package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
  843. package/src/system/providers/NodeShellProvider.ts +4 -1
  844. package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
  845. package/src/topic/core/__tests__/shared.ts +8 -8
  846. package/src/topic/core/primitives/$subscriber.ts +5 -5
  847. package/src/topic/core/primitives/$topic.ts +14 -14
  848. package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
  849. package/dist/container/core/index.d.ts +0 -236
  850. package/dist/container/core/index.d.ts.map +0 -1
  851. package/dist/container/core/index.js +0 -231
  852. package/dist/container/core/index.js.map +0 -1
  853. package/dist/container/core/index.workerd.js +0 -192
  854. package/dist/container/core/index.workerd.js.map +0 -1
  855. package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
  856. package/src/command/helpers/PrettyAsker.ts +0 -256
  857. package/src/command/helpers/PrettyPrint.ts +0 -332
  858. package/src/container/core/__tests__/$container.spec.ts +0 -83
  859. package/src/container/core/index.ts +0 -50
  860. package/src/container/core/index.workerd.ts +0 -53
  861. package/src/container/core/interfaces/ContainerOptions.ts +0 -69
  862. package/src/container/core/primitives/$container.ts +0 -100
  863. package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
  864. package/src/container/core/providers/ContainerProvider.ts +0 -92
  865. package/src/container/core/providers/MockContainerProvider.ts +0 -62
  866. package/src/container/core/providers/NodeContainerProvider.ts +0 -53
  867. package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
  868. package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
  869. /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":"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"}