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 +1 @@
1
- {"version":3,"file":"index.js","names":["sql","sql","sql","sql","sql","migrate"],"sources":["../../../src/orm/postgres/schemas/postgresEnvSchema.ts","../../../src/orm/postgres/types/byte.ts","../../../src/orm/postgres/services/PostgresModelBuilder.ts","../../../src/orm/postgres/providers/PostgresProvider.ts","../../../src/orm/postgres/providers/BunPostgresProvider.ts","../../../src/orm/postgres/providers/CloudflareHyperdriveProvider.ts","../../../src/orm/postgres/providers/NodePostgresProvider.ts","../../../src/orm/postgres/providers/PglitePostgresProvider.ts","../../../src/orm/postgres/index.ts"],"sourcesContent":["import { type Static, t } from \"alepha\";\n\n/**\n * PostgreSQL-specific environment schema.\n *\n * Additional env vars for PostgreSQL providers on top of `databaseEnvSchema`.\n */\nexport const postgresEnvSchema = t.object({\n /**\n * PostgreSQL schema name (defaults to `\"public\"` when unset).\n */\n POSTGRES_SCHEMA: t.optional(t.text()),\n\n /**\n * Maximum number of connections in the pool.\n */\n POOL_MAX: t.optional(t.integer()),\n\n /**\n * Seconds a connection can be idle before being closed.\n */\n POOL_IDLE_TIMEOUT: t.optional(t.integer()),\n\n /**\n * Seconds to wait when establishing a new connection.\n */\n POOL_CONNECT_TIMEOUT: t.optional(t.integer()),\n});\n\ndeclare module \"alepha\" {\n interface Env extends Partial<Static<typeof postgresEnvSchema>> {}\n}\n","import { customType } from \"drizzle-orm/pg-core\";\n\n/**\n * Postgres bytea type.\n */\nexport const byte = customType<{\n data: Buffer;\n}>({\n dataType: () => \"bytea\",\n});\n","import { AlephaError, type TObject, type TSchema, t } from \"alepha\";\nimport {\n type EntityPrimitive,\n type FromSchema,\n ModelBuilder,\n PG_CREATED_AT,\n PG_GENERATED,\n PG_IDENTITY,\n PG_PRIMARY_KEY,\n PG_REF,\n PG_SERIAL,\n PG_UPDATED_AT,\n type PgGeneratedOptions,\n type PgIdentityOptions,\n type PgRefOptions,\n type SequencePrimitive,\n schema,\n sql,\n} from \"alepha/orm\";\nimport type { BuildExtraConfigColumns } from \"drizzle-orm\";\nimport * as pg from \"drizzle-orm/pg-core\";\nimport {\n check,\n foreignKey,\n index,\n type PgEnum,\n type PgSchema,\n type PgTableExtraConfigValue,\n type PgTableWithColumns,\n pgEnum,\n pgSchema,\n pgSequence,\n pgTable,\n unique,\n uniqueIndex,\n} from \"drizzle-orm/pg-core\";\nimport { byte } from \"../types/byte.ts\";\n\nexport class PostgresModelBuilder extends ModelBuilder {\n protected schemas = new Map<string, PgSchema>();\n\n /**\n * Create a primary key column with UUID v7\n */\n protected getPrimaryKeyUUID(key: string) {\n return pg.uuid(key).default(sql`uuidv7()`);\n }\n\n protected getPgSchema(name: string) {\n if (!this.schemas.has(name) && name !== \"public\") {\n this.schemas.set(name, pgSchema(name));\n }\n\n const nsp =\n name !== \"public\"\n ? this.schemas.get(name)\n : ({\n enum: pgEnum,\n table: pgTable,\n sequence: pgSequence,\n } as any);\n\n if (!nsp) {\n throw new AlephaError(`Postgres schema ${name} not found`);\n }\n\n return nsp;\n }\n\n public buildTable(\n entity: EntityPrimitive<any>,\n options: {\n tables: Map<string, unknown>;\n enums: Map<string, unknown>;\n schemas: Map<string, unknown>;\n schema: string;\n },\n ) {\n const tableName = entity.name;\n if (options.tables.has(tableName)) {\n return;\n }\n\n const nsp = this.getPgSchema(options.schema);\n\n // Register PgSchema so drizzle-kit knows the schema is declared in code.\n // Without this, pushSchema diffs \"schema exists in DB but not in code\" → DROP.\n if (options.schema !== \"public\" && !options.schemas.has(options.schema)) {\n options.schemas.set(options.schema, nsp);\n }\n\n const columns = this.schemaToPgColumns(\n tableName,\n entity.schema,\n nsp,\n options.enums,\n options.tables,\n );\n\n // Build the config function that includes indexes, foreign keys, constraints, and custom config\n const configFn = this.getTableConfig(entity, options.tables);\n\n const table = nsp.table(tableName, columns, configFn);\n\n options.tables.set(tableName, table);\n }\n\n public buildSequence(\n sequence: SequencePrimitive,\n options: {\n sequences: Map<string, unknown>;\n schema: string;\n },\n ) {\n const sequenceName = sequence.name;\n if (options.sequences.has(sequenceName)) {\n return;\n }\n\n const nsp = this.getPgSchema(options.schema);\n\n options.sequences.set(\n sequenceName,\n nsp.sequence(sequenceName, sequence.options),\n );\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n /**\n * Get PostgreSQL-specific config builder for the table.\n */\n protected getTableConfig(\n entity: EntityPrimitive,\n tables: Map<string, unknown>,\n ):\n | ((\n self: BuildExtraConfigColumns<string, any, \"pg\">,\n ) => PgTableExtraConfigValue[])\n | undefined {\n // PostgreSQL-specific builders\n const pgBuilders = {\n index,\n uniqueIndex,\n unique,\n check,\n foreignKey,\n };\n\n // Table resolver function\n const tableResolver = (entityName: string) => {\n return tables.get(entityName) as any;\n };\n\n return this.buildTableConfig<\n PgTableExtraConfigValue,\n BuildExtraConfigColumns<string, any, \"pg\">\n >(entity, pgBuilders as any, tableResolver);\n }\n\n schemaToPgColumns = <T extends TObject>(\n tableName: string,\n schema: T,\n nsp: PgSchema,\n enums: Map<string, unknown>,\n tables: Map<string, unknown>,\n ): FromSchema<T> => {\n return Object.entries(schema.properties).reduce<Partial<FromSchema<T>>>(\n (columns, [key, value]) => {\n let col = this.mapFieldToColumn(tableName, key, value, nsp, enums);\n\n if (\"default\" in value && value.default != null) {\n col = col.default(value.default as any);\n }\n\n if (PG_PRIMARY_KEY in value) {\n col = col.primaryKey();\n }\n\n if (PG_REF in value) {\n const config = value[PG_REF] as PgRefOptions;\n col = col.references(() => {\n const ref = config.ref();\n const table = tables.get(\n ref.entity.name,\n ) as PgTableWithColumns<any>;\n\n if (!table) {\n throw new AlephaError(\n `Referenced table ${ref.entity.name} not found for ${tableName}.${key}`,\n );\n }\n\n const target = table[ref.name];\n if (!target) {\n throw new AlephaError(\n `Referenced column ${ref.name} not found in table ${ref.entity.name} for ${tableName}.${key}`,\n );\n }\n\n return target;\n }, config.actions);\n }\n\n if (PG_GENERATED in value) {\n const gen = value[PG_GENERATED] as PgGeneratedOptions;\n col = col.generatedAlwaysAs(gen.expression);\n }\n\n if (schema.required?.includes(key)) {\n col = col.notNull();\n }\n\n (columns as Record<string, unknown>)[key] = col;\n return columns;\n },\n {},\n ) as FromSchema<T>;\n };\n\n mapFieldToColumn = (\n tableName: string,\n fieldName: string,\n value: TSchema,\n nsp: PgSchema,\n enums: Map<string, any>,\n ) => {\n const key = this.toColumnName(fieldName);\n\n if (\n // is nullish ?\n \"anyOf\" in value &&\n Array.isArray(value.anyOf) &&\n value.anyOf.length === 2 &&\n value.anyOf.some((it: TSchema) => t.schema.isNull(it))\n ) {\n // then, remove nullish\n value = value.anyOf.find((it: TSchema) => !t.schema.isNull(it))!;\n }\n\n if (t.schema.isInteger(value)) {\n if (PG_SERIAL in value) {\n return pg.serial(key);\n }\n\n if (PG_IDENTITY in value) {\n const options = value[PG_IDENTITY] as PgIdentityOptions;\n if (options.mode === \"byDefault\") {\n return pg.integer(key).generatedByDefaultAsIdentity(options);\n }\n return pg.integer(key).generatedAlwaysAsIdentity(options);\n }\n\n return pg.integer(key);\n }\n\n if (t.schema.isBigInt(value)) {\n if (PG_IDENTITY in value) {\n const options = value[PG_IDENTITY] as PgIdentityOptions;\n if (options.mode === \"byDefault\") {\n return pg\n .bigint(key, { mode: \"bigint\" })\n .generatedByDefaultAsIdentity(options);\n }\n return pg\n .bigint(key, { mode: \"bigint\" })\n .generatedAlwaysAsIdentity(options);\n }\n\n return pg.bigint(key, { mode: \"bigint\" });\n }\n\n if (t.schema.isNumber(value)) {\n if (PG_IDENTITY in value) {\n const options = value[PG_IDENTITY] as PgIdentityOptions;\n if (options.mode === \"byDefault\") {\n return pg\n .bigint(key, { mode: \"number\" })\n .generatedByDefaultAsIdentity(options);\n }\n return pg\n .bigint(key, { mode: \"number\" })\n .generatedAlwaysAsIdentity(options);\n }\n\n if (value.format === \"int64\") {\n return pg.bigint(key, { mode: \"number\" });\n }\n\n return pg.numeric(key);\n }\n\n const isTypeEnum = (value: any): value is { enum: any[] } =>\n t.schema.isUnsafe(value) &&\n \"type\" in value &&\n value.type === \"string\" &&\n \"enum\" in value &&\n Array.isArray(value.enum);\n\n if (t.schema.isString(value) && !isTypeEnum(value)) {\n return this.mapStringToColumn(key, value);\n }\n\n if (t.schema.isBoolean(value)) {\n return pg.boolean(key);\n }\n\n if (t.schema.isObject(value)) {\n return schema(key, value);\n }\n\n if (t.schema.isRecord(value)) {\n return schema(key, value);\n }\n\n if (t.schema.isArray(value)) {\n if (t.schema.isObject(value.items)) {\n return schema(key, value);\n }\n if (t.schema.isRecord(value.items)) {\n return schema(key, value);\n }\n if (t.schema.isString(value.items)) {\n return pg.text(key).array();\n }\n if (t.schema.isInteger(value.items)) {\n return pg.integer(key).array();\n }\n if (t.schema.isNumber(value.items)) {\n return pg.numeric(key).array();\n }\n if (t.schema.isBoolean(value.items)) {\n return pg.boolean(key).array();\n }\n if (isTypeEnum(value.items)) {\n return pg.text(key).array();\n }\n }\n\n // Enum handling\n if (isTypeEnum(value)) {\n if (!value.enum.every((it) => typeof it === \"string\")) {\n throw new AlephaError(\n `Enum for ${fieldName} must be an array of strings, got ${JSON.stringify(\n value.enum,\n )}`,\n );\n }\n\n // SQL Enum (default for t.enum unless mode: \"text\")\n if ((value as any).mode !== \"text\") {\n const enumName = (value as any).enumName ?? `${tableName}_${key}_enum`;\n\n if (enums.has(enumName)) {\n const values = (\n enums.get(enumName) as PgEnum<[string]>\n ).enumValues.join(\",\");\n const newValues = value.enum.join(\",\");\n if (values !== newValues) {\n throw new AlephaError(\n `Enum name conflict for ${enumName}: [${values}] vs [${newValues}]`,\n );\n }\n }\n\n enums.set(enumName, nsp.enum(enumName, value.enum as [string]));\n\n return enums.get(enumName)(key);\n }\n\n // else, map to TEXT\n return this.mapStringToColumn(key, value);\n }\n\n throw new AlephaError(\n `Unsupported schema type for ${fieldName} as ${JSON.stringify(value)}`,\n );\n };\n\n /**\n * Map a string to a PG column.\n *\n * @param key The key of the field.\n * @param value The value of the field.\n */\n mapStringToColumn = (key: string, value: TSchema) => {\n if (\"format\" in value) {\n if (value.format === \"uuid\") {\n if (PG_PRIMARY_KEY in value) {\n return this.getPrimaryKeyUUID(key);\n }\n\n return pg.uuid(key);\n }\n\n if (value.format === \"byte\") {\n return byte(key);\n }\n\n if (value.format === \"date-time\") {\n if (PG_CREATED_AT in value) {\n return pg\n .timestamp(key, { mode: \"string\", withTimezone: true })\n .defaultNow();\n }\n if (PG_UPDATED_AT in value) {\n return pg\n .timestamp(key, { mode: \"string\", withTimezone: true })\n .defaultNow();\n }\n return pg.timestamp(key, { mode: \"string\", withTimezone: true });\n }\n\n if (value.format === \"date\") {\n return pg.date(key, { mode: \"string\" });\n }\n }\n\n return pg.text(key);\n };\n}\n","import { $env, $hook, $inject, $pipeline, AlephaError } from \"alepha\";\nimport { $lock } from \"alepha/lock\";\nimport {\n DatabaseProvider,\n DbMigrationError,\n databaseEnvSchema,\n type SQLLike,\n} from \"alepha/orm\";\nimport { sql } from \"drizzle-orm\";\nimport type { PgDatabase } from \"drizzle-orm/pg-core\";\nimport { postgresEnvSchema } from \"../schemas/postgresEnvSchema.ts\";\nimport { PostgresModelBuilder } from \"../services/PostgresModelBuilder.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Abstract base class for PostgreSQL database providers.\n *\n * Provides shared logic for Node.js and Bun PostgreSQL providers:\n * - Environment variable handling (DATABASE_URL, POSTGRES_SCHEMA)\n * - Schema name resolution (with test schema generation)\n * - SQL execution with error wrapping\n * - Lifecycle hooks (start with migration lock, stop with test cleanup)\n *\n * Subclasses must implement `connect()`, `close()`, and `executeMigrations()`.\n */\nexport abstract class PostgresProvider extends DatabaseProvider {\n protected readonly env = $env(databaseEnvSchema);\n protected readonly pgEnv = $env(postgresEnvSchema);\n protected readonly builder = $inject(PostgresModelBuilder);\n\n public override readonly dialect = \"postgresql\";\n\n public get name() {\n return \"postgres\";\n }\n\n /**\n * In testing mode, the schema name will be generated and deleted after the test.\n */\n protected schemaForTesting = this.alepha.isTest()\n ? this.generateTestSchemaName()\n : undefined;\n\n public override get url() {\n if (!this.env.DATABASE_URL) {\n throw new AlephaError(\"DATABASE_URL is not defined in the environment\");\n }\n\n return this.env.DATABASE_URL;\n }\n\n /**\n * Execute a SQL statement.\n */\n public override async execute(\n statement: SQLLike,\n ): Promise<Array<Record<string, unknown>>> {\n return await this.db.execute(statement);\n }\n\n /**\n * Get Postgres schema used by this provider.\n */\n public override get schema(): string {\n if (this.schemaForTesting) {\n return this.schemaForTesting;\n }\n\n if (this.pgEnv.POSTGRES_SCHEMA) {\n return this.pgEnv.POSTGRES_SCHEMA;\n }\n\n return \"public\";\n }\n\n public abstract override get db(): PgDatabase<any>;\n\n /**\n * Establish the database connection.\n */\n public abstract connect(): Promise<void>;\n\n /**\n * Close the database connection.\n */\n public abstract close(): Promise<void>;\n\n // -------------------------------------------------------------------------------------------------------------------\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: async () => {\n await this.connect();\n await this.generateTestSchema();\n\n // never migrate in serverless mode (vercel, netlify, ...)\n if (!this.alepha.isServerless()) {\n try {\n await this.migrateLock.run();\n } catch (error) {\n throw new DbMigrationError(error);\n }\n }\n },\n });\n\n protected readonly onStop = $hook({\n on: \"stop\",\n handler: async () => {\n await this.dropTestSchema();\n await this.close();\n },\n });\n\n protected migrateLock = $pipeline({\n use: [$lock({ name: \"postgres:migrate\" })],\n handler: async () => {\n await this.migrate();\n },\n });\n\n // -------------------------------------------------------------------------------------------------------------------\n // Create unique schema for tests and clean up after. Format: test_alepha_{epoch_seconds}_{random8}\n // -------------------------------------------------------------------------------------------------------------------\n\n protected async generateTestSchema() {\n if (\n this.alepha.isTest() &&\n this.schemaForTesting?.startsWith(\"test_alepha_\")\n ) {\n // Self-healing: drop stale schemas left behind by crashed/failed test runs\n await this.cleanupStaleTestSchemas();\n\n await this.execute(\n sql`CREATE SCHEMA IF NOT EXISTS ${sql.raw(this.schemaForTesting)}`,\n );\n }\n }\n\n /**\n * Drop the current test schema if applicable.\n */\n protected async dropTestSchema(): Promise<void> {\n if (\n this.alepha.isTest() &&\n this.schemaForTesting?.startsWith(\"test_alepha_\")\n ) {\n this.log.info(`Deleting test schema '${this.schemaForTesting}' ...`);\n await this.execute(\n sql`DROP SCHEMA IF EXISTS ${sql.raw(this.schemaForTesting)} CASCADE`,\n );\n this.log.info(`Test schema '${this.schemaForTesting}' deleted`);\n }\n }\n\n /**\n * Remove stale test schemas older than 1 hour.\n *\n * Parses the embedded epoch from schema names (format: test_alepha_{epoch}_{random8})\n * and drops any that exceed the TTL. This handles schemas left behind by crashed tests,\n * killed processes, or failed startups where stop() never fired.\n *\n * Uses a PG advisory lock so only one concurrent test process performs the cleanup.\n */\n protected async cleanupStaleTestSchemas(): Promise<void> {\n try {\n // Non-blocking advisory lock — first process in cleans, others skip\n const [lock] = await this.execute(\n sql`SELECT pg_try_advisory_lock(hashtext('alepha:test:schema:cleanup')) AS acquired`,\n );\n\n if (!lock?.acquired) {\n return;\n }\n\n try {\n const result = await this.execute(\n sql`SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'test_alepha_%'`,\n );\n\n const now = this.dateTime.nowMillis();\n const maxAge = 60 * 60 * 1000; // 1 hour\n\n for (const row of result) {\n const name = row.schema_name as string;\n\n // Skip our own schema (it was just created or is about to be)\n if (name === this.schemaForTesting) {\n continue;\n }\n\n const age = this.parseTestSchemaAge(name, now);\n if (age !== undefined && age > maxAge) {\n this.log.warn(\n `Dropping stale test schema '${name}' (age: ${Math.round(age / 60_000)}min) ...`,\n );\n await this.execute(\n sql`DROP SCHEMA IF EXISTS ${sql.raw(name)} CASCADE`,\n );\n }\n }\n } finally {\n await this.execute(\n sql`SELECT pg_advisory_unlock(hashtext('alepha:test:schema:cleanup'))`,\n );\n }\n } catch (error) {\n // Don't fail test setup if stale cleanup fails\n this.log.warn(\"Failed to clean up stale test schemas\", { error });\n }\n }\n\n /**\n * Parse the age in milliseconds from a test schema name.\n * Format: test_alepha_{epoch_seconds}_{random8}\n * Returns undefined if the name doesn't match the expected format.\n */\n protected parseTestSchemaAge(name: string, now: number): number | undefined {\n const parts = name.split(\"_\");\n // test_alepha_{epoch}_{random} → [\"test\", \"alepha\", epoch, random]\n if (parts.length !== 4 || parts[0] !== \"test\" || parts[1] !== \"alepha\") {\n return undefined;\n }\n\n const epoch = Number(parts[2]);\n if (!Number.isFinite(epoch) || epoch <= 0) {\n return undefined;\n }\n\n return now - epoch * 1000;\n }\n}\n","import { AlephaError } from \"alepha\";\nimport { sql } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { PgDatabase } from \"drizzle-orm/pg-core\";\nimport { PostgresProvider } from \"./PostgresProvider.ts\";\n\n/**\n * Bun PostgreSQL provider using Drizzle ORM with Bun's native SQL client.\n *\n * This provider uses Bun's built-in SQL class for PostgreSQL connections,\n * which provides excellent performance on the Bun runtime.\n *\n * @example\n * ```ts\n * // Set DATABASE_URL environment variable\n * // DATABASE_URL=postgres://user:password@localhost:5432/database\n *\n * // Or configure programmatically\n * alepha.with({\n * provide: DatabaseProvider,\n * use: BunPostgresProvider,\n * });\n * ```\n */\nexport class BunPostgresProvider extends PostgresProvider {\n protected client?: Bun.SQL;\n protected bunDb?: BunSQLDatabase;\n\n /**\n * Get the Drizzle Postgres database instance.\n */\n public override get db(): PgDatabase<any> {\n if (!this.bunDb) {\n throw new AlephaError(\"Database not initialized\");\n }\n\n return this.bunDb as unknown as PgDatabase<any>;\n }\n\n protected override async executeMigrations(\n migrationsFolder: string,\n ): Promise<void> {\n if (this.schema !== \"public\") {\n await this.db.execute(\n sql.raw(`SET search_path TO ${this.schema}, public`),\n );\n }\n const { migrate } = await import(\"drizzle-orm/bun-sql/migrator\");\n await migrate(this.bunDb!, {\n migrationsFolder,\n migrationsTable: this.migrationsTable,\n });\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n public async connect(): Promise<void> {\n this.log.debug(\"Connect ..\");\n\n // Check if we're running in Bun\n if (typeof Bun === \"undefined\") {\n throw new AlephaError(\n \"BunPostgresProvider requires the Bun runtime. Use NodePostgresProvider for Node.js.\",\n );\n }\n\n const { drizzle } = await import(\"drizzle-orm/bun-sql\");\n\n // Create Bun SQL client with pool options\n // Set search_path via connection URL so all pool connections use the correct schema\n let connectionUrl = this.url;\n if (this.schema !== \"public\") {\n const separator = connectionUrl.includes(\"?\") ? \"&\" : \"?\";\n connectionUrl += `${separator}search_path=${this.schema},public`;\n }\n const bunOptions: Record<string, any> = { url: connectionUrl };\n if (this.pgEnv.POOL_MAX != null) {\n bunOptions.max = this.pgEnv.POOL_MAX;\n }\n if (this.pgEnv.POOL_IDLE_TIMEOUT != null) {\n bunOptions.idleTimeout = this.pgEnv.POOL_IDLE_TIMEOUT;\n }\n if (this.pgEnv.POOL_CONNECT_TIMEOUT != null) {\n bunOptions.connectionTimeout = this.pgEnv.POOL_CONNECT_TIMEOUT;\n }\n this.client = new Bun.SQL(bunOptions);\n\n // Test connection\n await this.client.unsafe(\"SELECT 1\");\n\n this.bunDb = drizzle({\n client: this.client,\n logger: {\n logQuery: (query: string, params: unknown[]) => {\n this.log.trace(query, { params });\n },\n },\n });\n\n this.log.info(\"Connection OK\");\n }\n\n public async close(): Promise<void> {\n if (this.client) {\n this.log.debug(\"Close...\");\n\n await this.client.close();\n\n this.client = undefined;\n this.bunDb = undefined;\n\n this.log.info(\"Connection closed\");\n }\n }\n}\n","import { $env, $hook, $inject, AlephaError, t } from \"alepha\";\nimport { DatabaseProvider, type SQLLike } from \"alepha/orm\";\nimport { sql } from \"drizzle-orm\";\nimport type { PgDatabase } from \"drizzle-orm/pg-core\";\nimport { PostgresModelBuilder } from \"../services/PostgresModelBuilder.ts\";\n\n/**\n * Cloudflare Hyperdrive PostgreSQL provider using Drizzle ORM.\n *\n * Connects to an external PostgreSQL database through Cloudflare Hyperdrive,\n * which provides connection pooling and caching at the edge.\n *\n * Creates a fresh connection per request, since Cloudflare Workers\n * cannot reuse I/O objects across request contexts.\n *\n * URL format: hyperdrive://BINDING_NAME\n */\nexport class CloudflareHyperdriveProvider extends DatabaseProvider {\n protected readonly builder = $inject(PostgresModelBuilder);\n protected readonly env = $env(\n t.object({\n DATABASE_URL: t.string({\n description: \"Expect to be 'hyperdrive://BINDING'\",\n }),\n POSTGRES_SCHEMA: t.optional(t.text()),\n }),\n );\n\n public override get schema(): string {\n return this.env.POSTGRES_SCHEMA ?? \"public\";\n }\n\n protected postgresFn?: any;\n protected drizzleFn?: any;\n protected bindingName?: string;\n\n public get name() {\n return \"postgres\";\n }\n\n public get driver() {\n return \"hyperdrive\";\n }\n\n public override readonly dialect = \"postgresql\";\n\n public override get url(): string {\n return this.env.DATABASE_URL;\n }\n\n /**\n * Get a fresh Drizzle instance per request.\n *\n * Reads the current Hyperdrive binding from `cloudflare.env`\n * and creates a new postgres client each time, avoiding the\n * \"Cannot perform I/O on behalf of a different request\" error.\n */\n public override get db(): PgDatabase<any> {\n if (!this.postgresFn || !this.drizzleFn || !this.bindingName) {\n throw new AlephaError(\"Hyperdrive database not initialized\");\n }\n\n const cloudflareEnv = this.alepha.get(\"cloudflare.env\") as\n | Record<string, unknown>\n | undefined;\n if (!cloudflareEnv) {\n throw new AlephaError(\n \"Cloudflare Workers environment not found in Alepha store under 'cloudflare.env'.\",\n );\n }\n\n const binding = cloudflareEnv[this.bindingName] as\n | { connectionString: string }\n | undefined;\n if (!binding?.connectionString) {\n throw new AlephaError(\n `Hyperdrive binding '${this.bindingName}' not found in Cloudflare Workers environment.`,\n );\n }\n\n const pgOptions: Record<string, any> = { prepare: false };\n\n // Set search_path so schema-free migration SQL resolves to the correct schema.\n if (this.schema !== \"public\") {\n pgOptions.connection = { search_path: `${this.schema}, public` };\n }\n\n const client = this.postgresFn(binding.connectionString, pgOptions);\n return this.drizzleFn(client as any) as unknown as PgDatabase<any>;\n }\n\n public override async execute(\n query: SQLLike,\n ): Promise<Array<Record<string, unknown>>> {\n return this.db.execute(query);\n }\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: async () => {\n this.bindingName = this.env.DATABASE_URL.replace(\"hyperdrive://\", \"\");\n\n // Pre-load modules so db getter is synchronous\n const pgModule = await import(\"postgres\");\n const drizzleModule = await import(\"drizzle-orm/postgres-js\");\n this.postgresFn = pgModule.default ?? pgModule;\n this.drizzleFn = drizzleModule.drizzle;\n\n this.log.info(\"Using Cloudflare Hyperdrive (PostgreSQL)\");\n },\n });\n\n protected async executeMigrations(migrationsFolder: string): Promise<void> {\n this.log.debug(`Running Postgres migrations from '${migrationsFolder}'...`);\n try {\n if (this.schema !== \"public\") {\n await this.db.execute(\n sql.raw(`SET search_path TO ${this.schema}, public`),\n );\n }\n const { migrate } = await import(\"drizzle-orm/postgres-js/migrator\");\n await migrate(this.db as any, {\n migrationsFolder,\n migrationsTable: this.migrationsTable,\n });\n this.log.debug(\"Postgres migrations completed successfully\");\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? `${error.name}: ${error.message}`\n : String(error);\n throw new AlephaError(\n `Postgres migration failed from '${migrationsFolder}': ${errorMessage}`,\n { cause: error },\n );\n }\n }\n}\n","import { AlephaError } from \"alepha\";\nimport { sql } from \"drizzle-orm\";\nimport type { PostgresJsDatabase } from \"drizzle-orm/postgres-js\";\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport { migrate } from \"drizzle-orm/postgres-js/migrator\";\nimport postgres from \"postgres\";\nimport { PostgresProvider } from \"./PostgresProvider.ts\";\n\nexport class NodePostgresProvider extends PostgresProvider {\n static readonly SSL_MODES = [\n \"require\",\n \"allow\",\n \"prefer\",\n \"verify-full\",\n ] as const;\n\n protected client?: postgres.Sql;\n protected pg?: PostgresJsDatabase;\n\n /**\n * Get the Drizzle Postgres database instance.\n */\n public override get db(): PostgresJsDatabase {\n if (!this.pg) {\n throw new AlephaError(\"Database not initialized\");\n }\n\n return this.pg;\n }\n\n protected override async executeMigrations(\n migrationsFolder: string,\n ): Promise<void> {\n // Set search_path so schema-free migration SQL resolves to the correct schema.\n // postgres.js doesn't support the `connection` startup parameter with pooled\n // connections (e.g. Neon), so we SET it explicitly before running migrations.\n if (this.schema !== \"public\") {\n await this.db.execute(\n sql.raw(`SET search_path TO ${this.schema}, public`),\n );\n }\n await migrate(this.db, {\n migrationsFolder,\n migrationsTable: this.migrationsTable,\n });\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n public async connect(): Promise<void> {\n const options = this.getClientOptions();\n\n this.log.debug(\"Connect ..\", {\n ...options,\n password: options.password ? \"****\" : undefined, // hide password\n });\n\n const client = postgres(options);\n await client`SELECT 1`; // test connection\n\n this.client = client;\n this.pg = drizzle(client, {\n logger: {\n // forward logs\n logQuery: (query: string, params: unknown[]) => {\n this.log.trace(query, { params });\n },\n },\n });\n\n this.log.info(\"Connection OK\");\n }\n\n public async close(): Promise<void> {\n if (this.client) {\n this.log.debug(\"Close...\");\n\n await this.client.end();\n\n this.client = undefined;\n this.pg = undefined;\n\n this.log.info(\"Connection closed\");\n }\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n /**\n * Map the DATABASE_URL to postgres client options.\n */\n protected getClientOptions(): postgres.Options<any> {\n const url = new URL(this.url);\n\n const options: postgres.Options<any> = {\n host: url.hostname,\n user: decodeURIComponent(url.username),\n database: decodeURIComponent(url.pathname.replace(\"/\", \"\")),\n password: decodeURIComponent(url.password),\n port: Number(url.port || 5432),\n ssl: this.ssl(url),\n onnotice: () => {\n // let drizzle handle logs\n },\n };\n\n // Pool options — only set when explicitly configured via env vars\n if (this.pgEnv.POOL_MAX != null) options.max = this.pgEnv.POOL_MAX;\n if (this.pgEnv.POOL_IDLE_TIMEOUT != null)\n options.idle_timeout = this.pgEnv.POOL_IDLE_TIMEOUT;\n if (this.pgEnv.POOL_CONNECT_TIMEOUT != null)\n options.connect_timeout = this.pgEnv.POOL_CONNECT_TIMEOUT;\n\n // Set search_path at connection level so schema-free migration SQL\n // resolves to the correct PostgreSQL schema across all pool connections.\n if (this.schema !== \"public\") {\n options.connection = { search_path: `${this.schema}, public` };\n }\n\n return options;\n }\n\n protected ssl(\n url: URL,\n ): \"require\" | \"allow\" | \"prefer\" | \"verify-full\" | undefined {\n const mode = url.searchParams.get(\"sslmode\");\n for (const it of NodePostgresProvider.SSL_MODES) {\n if (mode === it) {\n return it;\n }\n }\n }\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport type { PGlite } from \"@electric-sql/pglite\";\nimport { $env, $hook, $inject, AlephaError } from \"alepha\";\nimport { DatabaseProvider, databaseEnvSchema, type SQLLike } from \"alepha/orm\";\nimport { sql } from \"drizzle-orm\";\nimport type { PgliteDatabase } from \"drizzle-orm/pglite\";\nimport { migrate } from \"drizzle-orm/pglite/migrator\";\nimport { postgresEnvSchema } from \"../schemas/postgresEnvSchema.ts\";\nimport { PostgresModelBuilder } from \"../services/PostgresModelBuilder.ts\";\n\nexport interface PgLiteModule {\n PGlite: typeof PGlite;\n}\n\nexport class PglitePostgresProvider extends DatabaseProvider {\n public static importPglite(): PgLiteModule | undefined {\n try {\n return createRequire(import.meta.url)(\"@electric-sql/pglite\");\n } catch {\n // ignored\n }\n }\n\n public override get schema(): string {\n return this.pgEnv.POSTGRES_SCHEMA ?? \"public\";\n }\n\n protected readonly env = $env(databaseEnvSchema);\n protected readonly pgEnv = $env(postgresEnvSchema);\n protected readonly builder = $inject(PostgresModelBuilder);\n\n protected client?: PGlite;\n protected pglite?: PgliteDatabase;\n\n public get name() {\n return \"postgres\";\n }\n\n public get driver() {\n return \"pglite\";\n }\n\n public override readonly dialect = \"postgresql\";\n\n public override get supportsTransactions(): boolean {\n return false;\n }\n\n public override get url(): string {\n let path = this.env.DATABASE_URL;\n\n if (!path) {\n if (this.alepha.isTest()) {\n path = \":memory:\"; // use in-memory database for tests by default\n } else {\n path = \"node_modules/.alepha/pglite\"; // default path for dev\n }\n } else {\n if (path.includes(\":memory:\")) {\n // like postgres://:memory: or pglite://:memory:\n path = \":memory:\";\n } else if (path.startsWith(\"file://\")) {\n path = path.replace(\"file://\", \"\");\n }\n }\n\n return path;\n }\n\n public override get db(): PgliteDatabase {\n if (!this.pglite) {\n throw new AlephaError(\"Database not initialized\");\n }\n\n return this.pglite;\n }\n\n public override async execute(\n statement: SQLLike,\n ): Promise<Array<Record<string, unknown>>> {\n const { rows } = await this.db.execute(statement);\n return rows;\n }\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: async () => {\n if (Object.keys(this.kit.getModels(this)).length === 0) {\n return;\n }\n\n const module = PglitePostgresProvider.importPglite();\n if (!module) {\n throw new AlephaError(\n \"@electric-sql/pglite is not installed. Please install it to use the pglite driver.\",\n );\n }\n\n const { drizzle } = createRequire(import.meta.url)(\"drizzle-orm/pglite\");\n const path = this.url;\n\n if (path !== \":memory:\") {\n await mkdir(path, { recursive: true }).catch(() => null);\n this.client = new module.PGlite(path);\n } else {\n this.client = new module.PGlite();\n }\n\n this.pglite = drizzle({\n client: this.client,\n });\n\n await this.migrate();\n\n this.log.info(`Using PGlite database at ${path}`);\n },\n });\n\n protected readonly onStop = $hook({\n on: \"stop\",\n handler: async () => {\n if (this.client) {\n this.log.debug(\"Closing PGlite connection...\");\n await this.client.close();\n this.client = undefined;\n this.pglite = undefined;\n this.log.info(\"PGlite connection closed\");\n }\n },\n });\n\n protected async executeMigrations(migrationsFolder: string): Promise<void> {\n // Set search_path so schema-free migration SQL resolves to the correct schema.\n // PGlite uses a single connection, so SET persists through the migration.\n if (this.schema !== \"public\") {\n await this.db.execute(\n sql.raw(`SET search_path TO ${this.schema}, public`),\n );\n }\n await migrate(this.db, {\n migrationsFolder,\n migrationsTable: this.migrationsTable,\n });\n }\n}\n","import { $module, type Alepha } from \"alepha\";\nimport { AlephaOrm, DatabaseProvider, databaseEnvSchema } from \"alepha/orm\";\nimport { BunPostgresProvider } from \"./providers/BunPostgresProvider.ts\";\nimport { CloudflareHyperdriveProvider } from \"./providers/CloudflareHyperdriveProvider.ts\";\nimport { NodePostgresProvider } from \"./providers/NodePostgresProvider.ts\";\nimport { PglitePostgresProvider } from \"./providers/PglitePostgresProvider.ts\";\nimport { PostgresProvider } from \"./providers/PostgresProvider.ts\";\nimport { PostgresModelBuilder } from \"./services/PostgresModelBuilder.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/BunPostgresProvider.ts\";\nexport * from \"./providers/CloudflareHyperdriveProvider.ts\";\nexport * from \"./providers/NodePostgresProvider.ts\";\nexport * from \"./providers/PglitePostgresProvider.ts\";\nexport * from \"./providers/PostgresProvider.ts\";\nexport * from \"./schemas/postgresEnvSchema.ts\";\nexport * from \"./services/PostgresModelBuilder.ts\";\nexport * from \"./types/byte.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport const AlephaOrmPostgres = $module({\n name: \"alepha.orm.postgres\",\n services: [PostgresModelBuilder],\n variants: [\n PostgresProvider,\n CloudflareHyperdriveProvider,\n NodePostgresProvider,\n BunPostgresProvider,\n PglitePostgresProvider,\n ],\n register: (alepha: Alepha) => {\n const env = alepha.parseEnv(databaseEnvSchema);\n\n const url = env.DATABASE_URL;\n const isBun = alepha.isBun();\n\n if (url?.startsWith(\"hyperdrive:\")) {\n alepha.with({\n optional: true,\n provide: DatabaseProvider,\n use: CloudflareHyperdriveProvider,\n });\n } else if (url?.startsWith(\"pglite:\")) {\n alepha.with({\n optional: true,\n provide: DatabaseProvider,\n use: PglitePostgresProvider,\n });\n } else if (url?.startsWith(\"postgres:\")) {\n alepha.with({\n optional: true,\n provide: DatabaseProvider,\n use: isBun ? BunPostgresProvider : NodePostgresProvider,\n });\n }\n\n // Chain core ORM module AFTER substitution so its own SQLite default\n // doesn't preempt our Postgres-specific provider choice.\n alepha.with(AlephaOrm);\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["sql","sql","sql","sql","sql","migrate"],"sources":["../../../src/orm/postgres/schemas/postgresEnvSchema.ts","../../../src/orm/postgres/types/byte.ts","../../../src/orm/postgres/services/PostgresModelBuilder.ts","../../../src/orm/postgres/providers/PostgresProvider.ts","../../../src/orm/postgres/providers/BunPostgresProvider.ts","../../../src/orm/postgres/providers/CloudflareHyperdriveProvider.ts","../../../src/orm/postgres/providers/NodePostgresProvider.ts","../../../src/orm/postgres/providers/PglitePostgresProvider.ts","../../../src/orm/postgres/index.ts"],"sourcesContent":["import { type Static, z } from \"alepha\";\n\n/**\n * PostgreSQL-specific environment schema.\n *\n * Additional env vars for PostgreSQL providers on top of `databaseEnvSchema`.\n */\nexport const postgresEnvSchema = z.object({\n /**\n * PostgreSQL schema name (defaults to `\"public\"` when unset).\n */\n POSTGRES_SCHEMA: z.text().optional(),\n\n /**\n * Maximum number of connections in the pool.\n */\n POOL_MAX: z.integer().optional(),\n\n /**\n * Seconds a connection can be idle before being closed.\n */\n POOL_IDLE_TIMEOUT: z.integer().optional(),\n\n /**\n * Seconds to wait when establishing a new connection.\n */\n POOL_CONNECT_TIMEOUT: z.integer().optional(),\n});\n\ndeclare module \"alepha\" {\n interface Env extends Partial<Static<typeof postgresEnvSchema>> {}\n}\n","import { customType } from \"drizzle-orm/pg-core\";\n\n/**\n * Postgres bytea type.\n */\nexport const byte = customType<{\n data: Buffer;\n}>({\n dataType: () => \"bytea\",\n});\n","import { AlephaError, type TObject, z } from \"alepha\";\nimport {\n type EntityPrimitive,\n type FromSchema,\n ModelBuilder,\n PG_CREATED_AT,\n PG_GENERATED,\n PG_IDENTITY,\n PG_PRIMARY_KEY,\n PG_REF,\n PG_SERIAL,\n PG_UPDATED_AT,\n type PgGeneratedOptions,\n type PgIdentityOptions,\n type PgRefOptions,\n type SequencePrimitive,\n schema,\n sql,\n} from \"alepha/orm\";\nimport type { BuildExtraConfigColumns } from \"drizzle-orm\";\nimport * as pg from \"drizzle-orm/pg-core\";\nimport {\n check,\n foreignKey,\n index,\n type PgEnum,\n type PgSchema,\n type PgTableExtraConfigValue,\n type PgTableWithColumns,\n pgEnum,\n pgSchema,\n pgSequence,\n pgTable,\n unique,\n uniqueIndex,\n} from \"drizzle-orm/pg-core\";\nimport { byte } from \"../types/byte.ts\";\n\nexport class PostgresModelBuilder extends ModelBuilder {\n protected schemas = new Map<string, PgSchema>();\n\n /**\n * Create a primary key column with UUID v7\n */\n protected getPrimaryKeyUUID(key: string) {\n return pg.uuid(key).default(sql`uuidv7()`);\n }\n\n protected getPgSchema(name: string) {\n if (!this.schemas.has(name) && name !== \"public\") {\n this.schemas.set(name, pgSchema(name));\n }\n\n const nsp =\n name !== \"public\"\n ? this.schemas.get(name)\n : ({\n enum: pgEnum,\n table: pgTable,\n sequence: pgSequence,\n } as any);\n\n if (!nsp) {\n throw new AlephaError(`Postgres schema ${name} not found`);\n }\n\n return nsp;\n }\n\n public buildTable(\n entity: EntityPrimitive<any>,\n options: {\n tables: Map<string, unknown>;\n enums: Map<string, unknown>;\n schemas: Map<string, unknown>;\n schema: string;\n },\n ) {\n const tableName = entity.name;\n if (options.tables.has(tableName)) {\n return;\n }\n\n const nsp = this.getPgSchema(options.schema);\n\n // Register PgSchema so drizzle-kit knows the schema is declared in code.\n // Without this, pushSchema diffs \"schema exists in DB but not in code\" → DROP.\n if (options.schema !== \"public\" && !options.schemas.has(options.schema)) {\n options.schemas.set(options.schema, nsp);\n }\n\n const columns = this.schemaToPgColumns(\n tableName,\n entity.schema,\n nsp,\n options.enums,\n options.tables,\n );\n\n // Build the config function that includes indexes, foreign keys, constraints, and custom config\n const configFn = this.getTableConfig(entity, options.tables);\n\n const table = nsp.table(tableName, columns, configFn);\n\n options.tables.set(tableName, table);\n }\n\n public buildSequence(\n sequence: SequencePrimitive,\n options: {\n sequences: Map<string, unknown>;\n schema: string;\n },\n ) {\n const sequenceName = sequence.name;\n if (options.sequences.has(sequenceName)) {\n return;\n }\n\n const nsp = this.getPgSchema(options.schema);\n\n options.sequences.set(\n sequenceName,\n nsp.sequence(sequenceName, sequence.options),\n );\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n /**\n * Get PostgreSQL-specific config builder for the table.\n */\n protected getTableConfig(\n entity: EntityPrimitive,\n tables: Map<string, unknown>,\n ):\n | ((\n self: BuildExtraConfigColumns<string, any, \"pg\">,\n ) => PgTableExtraConfigValue[])\n | undefined {\n // PostgreSQL-specific builders\n const pgBuilders = {\n index,\n uniqueIndex,\n unique,\n check,\n foreignKey,\n };\n\n // Table resolver function\n const tableResolver = (entityName: string) => {\n return tables.get(entityName) as any;\n };\n\n return this.buildTableConfig<\n PgTableExtraConfigValue,\n BuildExtraConfigColumns<string, any, \"pg\">\n >(entity, pgBuilders as any, tableResolver);\n }\n\n schemaToPgColumns = <T extends TObject>(\n tableName: string,\n schema: T,\n nsp: PgSchema,\n enums: Map<string, unknown>,\n tables: Map<string, unknown>,\n ): FromSchema<T> => {\n return Object.entries(schema.properties as Record<string, any>).reduce<\n Partial<FromSchema<T>>\n >((columns, [key, value]) => {\n let col = this.mapFieldToColumn(tableName, key, value, nsp, enums);\n\n const defaultValue = z.schema.getDefault(value);\n if (defaultValue != null) {\n col = col.default(defaultValue as any);\n }\n\n if (PG_PRIMARY_KEY in value) {\n col = col.primaryKey();\n }\n\n if (PG_REF in value) {\n const config = value[PG_REF] as PgRefOptions;\n col = col.references(() => {\n const ref = config.ref();\n const table = tables.get(ref.entity.name) as PgTableWithColumns<any>;\n\n if (!table) {\n throw new AlephaError(\n `Referenced table ${ref.entity.name} not found for ${tableName}.${key}`,\n );\n }\n\n const target = table[ref.name];\n if (!target) {\n throw new AlephaError(\n `Referenced column ${ref.name} not found in table ${ref.entity.name} for ${tableName}.${key}`,\n );\n }\n\n return target;\n }, config.actions);\n }\n\n if (PG_GENERATED in value) {\n const gen = value[PG_GENERATED] as PgGeneratedOptions;\n col = col.generatedAlwaysAs(gen.expression);\n }\n\n if (z.schema.requiredKeys(schema).includes(key)) {\n col = col.notNull();\n }\n\n (columns as Record<string, unknown>)[key] = col;\n return columns;\n }, {}) as FromSchema<T>;\n };\n\n mapFieldToColumn = (\n tableName: string,\n fieldName: string,\n value: any,\n nsp: PgSchema,\n enums: Map<string, any>,\n ) => {\n const key = this.toColumnName(fieldName);\n\n // Peel optional / nullable / default wrappers to the underlying type.\n value = z.schema.unwrap(value);\n\n // `z.int64()` is a safe-integer with format \"int64\" → Postgres bigint\n // (stored as a JS number). Must be checked before the plain-integer branch\n // below, otherwise it maps to int4 and overflows past 2_147_483_647.\n if (z.schema.isInteger(value) && z.schema.format(value) === \"int64\") {\n if (PG_IDENTITY in value) {\n const options = value[PG_IDENTITY] as PgIdentityOptions;\n if (options.mode === \"byDefault\") {\n return pg\n .bigint(key, { mode: \"number\" })\n .generatedByDefaultAsIdentity(options);\n }\n return pg\n .bigint(key, { mode: \"number\" })\n .generatedAlwaysAsIdentity(options);\n }\n return pg.bigint(key, { mode: \"number\" });\n }\n\n if (z.schema.isInteger(value)) {\n if (PG_SERIAL in value) {\n return pg.serial(key);\n }\n\n if (PG_IDENTITY in value) {\n const options = value[PG_IDENTITY] as PgIdentityOptions;\n if (options.mode === \"byDefault\") {\n return pg.integer(key).generatedByDefaultAsIdentity(options);\n }\n return pg.integer(key).generatedAlwaysAsIdentity(options);\n }\n\n return pg.integer(key);\n }\n\n if (z.schema.isBigInt(value)) {\n if (PG_IDENTITY in value) {\n const options = value[PG_IDENTITY] as PgIdentityOptions;\n if (options.mode === \"byDefault\") {\n return pg\n .bigint(key, { mode: \"bigint\" })\n .generatedByDefaultAsIdentity(options);\n }\n return pg\n .bigint(key, { mode: \"bigint\" })\n .generatedAlwaysAsIdentity(options);\n }\n\n return pg.bigint(key, { mode: \"bigint\" });\n }\n\n if (z.schema.isNumber(value)) {\n if (PG_IDENTITY in value) {\n const options = value[PG_IDENTITY] as PgIdentityOptions;\n if (options.mode === \"byDefault\") {\n return pg\n .bigint(key, { mode: \"number\" })\n .generatedByDefaultAsIdentity(options);\n }\n return pg\n .bigint(key, { mode: \"number\" })\n .generatedAlwaysAsIdentity(options);\n }\n\n if (z.schema.format(value) === \"int64\") {\n return pg.bigint(key, { mode: \"number\" });\n }\n\n // Native float column — drizzle returns a JS number. `numeric` would\n // hand back a string, which strict `z.number()` validation rejects.\n return pg.doublePrecision(key);\n }\n\n if (z.schema.isString(value) && !z.schema.isEnum(value)) {\n return this.mapStringToColumn(key, value);\n }\n\n if (z.schema.isBoolean(value)) {\n return pg.boolean(key);\n }\n\n if (z.schema.isObject(value)) {\n return schema(key, value);\n }\n\n if (z.schema.isRecord(value)) {\n return schema(key, value);\n }\n\n if (z.schema.isArray(value)) {\n const items = value.items;\n if (z.schema.isObject(items)) {\n return schema(key, value);\n }\n if (z.schema.isRecord(items)) {\n return schema(key, value);\n }\n if (z.schema.isString(items)) {\n return pg.text(key).array();\n }\n if (z.schema.isInteger(items)) {\n return pg.integer(key).array();\n }\n if (z.schema.isNumber(items)) {\n // doublePrecision returns JS numbers; `numeric` hands back strings,\n // which strict `z.number()` element validation rejects (mirrors the\n // scalar-number column choice above).\n return pg.doublePrecision(key).array();\n }\n if (z.schema.isBoolean(items)) {\n return pg.boolean(key).array();\n }\n if (z.schema.isEnum(items)) {\n return pg.text(key).array();\n }\n }\n\n // Enum handling\n if (z.schema.isEnum(value)) {\n const enumVals = z.schema.enumValues(value);\n if (!enumVals.every((it) => typeof it === \"string\")) {\n throw new AlephaError(\n `Enum for ${fieldName} must be an array of strings, got ${JSON.stringify(\n enumVals,\n )}`,\n );\n }\n\n const enumMeta = (value.meta?.() ?? {}) as {\n mode?: string;\n name?: string;\n };\n\n // SQL Enum (default for z.enum unless mode: \"text\")\n if (enumMeta.mode !== \"text\") {\n const enumName = enumMeta.name ?? `${tableName}_${key}_enum`;\n\n if (enums.has(enumName)) {\n const values = (\n enums.get(enumName) as PgEnum<[string]>\n ).enumValues.join(\",\");\n const newValues = enumVals.join(\",\");\n if (values !== newValues) {\n throw new AlephaError(\n `Enum name conflict for ${enumName}: [${values}] vs [${newValues}]`,\n );\n }\n }\n\n enums.set(enumName, nsp.enum(enumName, enumVals as [string]));\n\n return enums.get(enumName)(key);\n }\n\n // else, map to TEXT\n return this.mapStringToColumn(key, value);\n }\n\n throw new AlephaError(\n `Unsupported schema type for ${fieldName} as ${JSON.stringify(value)}`,\n );\n };\n\n /**\n * Map a string to a PG column.\n *\n * @param key The key of the field.\n * @param value The value of the field.\n */\n mapStringToColumn = (key: string, value: any) => {\n const format = z.schema.format(value);\n\n if (format === \"uuid\") {\n if (PG_PRIMARY_KEY in value) {\n return this.getPrimaryKeyUUID(key);\n }\n\n return pg.uuid(key);\n }\n\n if (format === \"binary\") {\n return byte(key);\n }\n\n if (format === \"date-time\") {\n if (PG_CREATED_AT in value) {\n return pg\n .timestamp(key, { mode: \"string\", withTimezone: true })\n .defaultNow();\n }\n if (PG_UPDATED_AT in value) {\n return pg\n .timestamp(key, { mode: \"string\", withTimezone: true })\n .defaultNow();\n }\n return pg.timestamp(key, { mode: \"string\", withTimezone: true });\n }\n\n if (format === \"date\") {\n return pg.date(key, { mode: \"string\" });\n }\n\n return pg.text(key);\n };\n}\n","import { $env, $hook, $inject, $pipeline, AlephaError } from \"alepha\";\nimport { $lock } from \"alepha/lock\";\nimport {\n DatabaseProvider,\n DbMigrationError,\n databaseEnvSchema,\n type SQLLike,\n} from \"alepha/orm\";\nimport { sql } from \"drizzle-orm\";\nimport type { PgDatabase } from \"drizzle-orm/pg-core\";\nimport { postgresEnvSchema } from \"../schemas/postgresEnvSchema.ts\";\nimport { PostgresModelBuilder } from \"../services/PostgresModelBuilder.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Abstract base class for PostgreSQL database providers.\n *\n * Provides shared logic for Node.js and Bun PostgreSQL providers:\n * - Environment variable handling (DATABASE_URL, POSTGRES_SCHEMA)\n * - Schema name resolution (with test schema generation)\n * - SQL execution with error wrapping\n * - Lifecycle hooks (start with migration lock, stop with test cleanup)\n *\n * Subclasses must implement `connect()`, `close()`, and `executeMigrations()`.\n */\nexport abstract class PostgresProvider extends DatabaseProvider {\n protected readonly env = $env(databaseEnvSchema);\n protected readonly pgEnv = $env(postgresEnvSchema);\n protected readonly builder = $inject(PostgresModelBuilder);\n\n public override readonly dialect = \"postgresql\";\n\n public get name() {\n return \"postgres\";\n }\n\n /**\n * In testing mode, the schema name will be generated and deleted after the test.\n */\n protected schemaForTesting = this.alepha.isTest()\n ? this.generateTestSchemaName()\n : undefined;\n\n public override get url() {\n if (!this.env.DATABASE_URL) {\n throw new AlephaError(\"DATABASE_URL is not defined in the environment\");\n }\n\n return this.env.DATABASE_URL;\n }\n\n /**\n * Execute a SQL statement.\n */\n public override async execute(\n statement: SQLLike,\n ): Promise<Array<Record<string, unknown>>> {\n return await this.db.execute(statement);\n }\n\n /**\n * Get Postgres schema used by this provider.\n */\n public override get schema(): string {\n if (this.schemaForTesting) {\n return this.schemaForTesting;\n }\n\n if (this.pgEnv.POSTGRES_SCHEMA) {\n return this.pgEnv.POSTGRES_SCHEMA;\n }\n\n return \"public\";\n }\n\n public abstract override get db(): PgDatabase<any>;\n\n /**\n * Establish the database connection.\n */\n public abstract connect(): Promise<void>;\n\n /**\n * Close the database connection.\n */\n public abstract close(): Promise<void>;\n\n // -------------------------------------------------------------------------------------------------------------------\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: async () => {\n await this.connect();\n await this.generateTestSchema();\n\n // never migrate in serverless mode (vercel, netlify, ...)\n if (!this.alepha.isServerless()) {\n try {\n await this.migrateLock.run();\n } catch (error) {\n throw new DbMigrationError(error);\n }\n }\n },\n });\n\n protected readonly onStop = $hook({\n on: \"stop\",\n handler: async () => {\n await this.dropTestSchema();\n await this.close();\n },\n });\n\n protected migrateLock = $pipeline({\n use: [$lock({ name: \"postgres:migrate\" })],\n handler: async () => {\n await this.migrate();\n },\n });\n\n // -------------------------------------------------------------------------------------------------------------------\n // Create unique schema for tests and clean up after. Format: test_alepha_{epoch_seconds}_{random8}\n // -------------------------------------------------------------------------------------------------------------------\n\n protected async generateTestSchema() {\n if (\n this.alepha.isTest() &&\n this.schemaForTesting?.startsWith(\"test_alepha_\")\n ) {\n // Self-healing: drop stale schemas left behind by crashed/failed test runs\n await this.cleanupStaleTestSchemas();\n\n await this.execute(\n sql`CREATE SCHEMA IF NOT EXISTS ${sql.raw(this.schemaForTesting)}`,\n );\n }\n }\n\n /**\n * Drop the current test schema if applicable.\n */\n protected async dropTestSchema(): Promise<void> {\n if (\n this.alepha.isTest() &&\n this.schemaForTesting?.startsWith(\"test_alepha_\")\n ) {\n this.log.info(`Deleting test schema '${this.schemaForTesting}' ...`);\n await this.execute(\n sql`DROP SCHEMA IF EXISTS ${sql.raw(this.schemaForTesting)} CASCADE`,\n );\n this.log.info(`Test schema '${this.schemaForTesting}' deleted`);\n }\n }\n\n /**\n * Remove stale test schemas older than 1 hour.\n *\n * Parses the embedded epoch from schema names (format: test_alepha_{epoch}_{random8})\n * and drops any that exceed the TTL. This handles schemas left behind by crashed tests,\n * killed processes, or failed startups where stop() never fired.\n *\n * Uses a PG advisory lock so only one concurrent test process performs the cleanup.\n */\n protected async cleanupStaleTestSchemas(): Promise<void> {\n try {\n // Non-blocking advisory lock — first process in cleans, others skip\n const [lock] = await this.execute(\n sql`SELECT pg_try_advisory_lock(hashtext('alepha:test:schema:cleanup')) AS acquired`,\n );\n\n if (!lock?.acquired) {\n return;\n }\n\n try {\n const result = await this.execute(\n sql`SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'test_alepha_%'`,\n );\n\n const now = this.dateTime.nowMillis();\n const maxAge = 60 * 60 * 1000; // 1 hour\n\n for (const row of result) {\n const name = row.schema_name as string;\n\n // Skip our own schema (it was just created or is about to be)\n if (name === this.schemaForTesting) {\n continue;\n }\n\n const age = this.parseTestSchemaAge(name, now);\n if (age !== undefined && age > maxAge) {\n this.log.warn(\n `Dropping stale test schema '${name}' (age: ${Math.round(age / 60_000)}min) ...`,\n );\n await this.execute(\n sql`DROP SCHEMA IF EXISTS ${sql.raw(name)} CASCADE`,\n );\n }\n }\n } finally {\n await this.execute(\n sql`SELECT pg_advisory_unlock(hashtext('alepha:test:schema:cleanup'))`,\n );\n }\n } catch (error) {\n // Don't fail test setup if stale cleanup fails\n this.log.warn(\"Failed to clean up stale test schemas\", { error });\n }\n }\n\n /**\n * Parse the age in milliseconds from a test schema name.\n * Format: test_alepha_{epoch_seconds}_{random8}\n * Returns undefined if the name doesn't match the expected format.\n */\n protected parseTestSchemaAge(name: string, now: number): number | undefined {\n const parts = name.split(\"_\");\n // test_alepha_{epoch}_{random} → [\"test\", \"alepha\", epoch, random]\n if (parts.length !== 4 || parts[0] !== \"test\" || parts[1] !== \"alepha\") {\n return undefined;\n }\n\n const epoch = Number(parts[2]);\n if (!Number.isFinite(epoch) || epoch <= 0) {\n return undefined;\n }\n\n return now - epoch * 1000;\n }\n}\n","import { AlephaError } from \"alepha\";\nimport { sql } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { PgDatabase } from \"drizzle-orm/pg-core\";\nimport { PostgresProvider } from \"./PostgresProvider.ts\";\n\n/**\n * Bun PostgreSQL provider using Drizzle ORM with Bun's native SQL client.\n *\n * This provider uses Bun's built-in SQL class for PostgreSQL connections,\n * which provides excellent performance on the Bun runtime.\n *\n * @example\n * ```ts\n * // Set DATABASE_URL environment variable\n * // DATABASE_URL=postgres://user:password@localhost:5432/database\n *\n * // Or configure programmatically\n * alepha.with({\n * provide: DatabaseProvider,\n * use: BunPostgresProvider,\n * });\n * ```\n */\nexport class BunPostgresProvider extends PostgresProvider {\n protected client?: Bun.SQL;\n protected bunDb?: BunSQLDatabase;\n\n /**\n * Get the Drizzle Postgres database instance.\n */\n public override get db(): PgDatabase<any> {\n if (!this.bunDb) {\n throw new AlephaError(\"Database not initialized\");\n }\n\n return this.bunDb as unknown as PgDatabase<any>;\n }\n\n protected override async executeMigrations(\n migrationsFolder: string,\n ): Promise<void> {\n if (this.schema !== \"public\") {\n await this.db.execute(\n sql.raw(`SET search_path TO ${this.schema}, public`),\n );\n }\n const { migrate } = await import(\"drizzle-orm/bun-sql/migrator\");\n await migrate(this.bunDb!, {\n migrationsFolder,\n migrationsTable: this.migrationsTable,\n });\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n public async connect(): Promise<void> {\n this.log.debug(\"Connect ..\");\n\n // Check if we're running in Bun\n if (typeof Bun === \"undefined\") {\n throw new AlephaError(\n \"BunPostgresProvider requires the Bun runtime. Use NodePostgresProvider for Node.js.\",\n );\n }\n\n const { drizzle } = await import(\"drizzle-orm/bun-sql\");\n\n // Create Bun SQL client with pool options\n // Set search_path via connection URL so all pool connections use the correct schema\n let connectionUrl = this.url;\n if (this.schema !== \"public\") {\n const separator = connectionUrl.includes(\"?\") ? \"&\" : \"?\";\n connectionUrl += `${separator}search_path=${this.schema},public`;\n }\n const bunOptions: Record<string, any> = { url: connectionUrl };\n if (this.pgEnv.POOL_MAX != null) {\n bunOptions.max = this.pgEnv.POOL_MAX;\n }\n if (this.pgEnv.POOL_IDLE_TIMEOUT != null) {\n bunOptions.idleTimeout = this.pgEnv.POOL_IDLE_TIMEOUT;\n }\n if (this.pgEnv.POOL_CONNECT_TIMEOUT != null) {\n bunOptions.connectionTimeout = this.pgEnv.POOL_CONNECT_TIMEOUT;\n }\n this.client = new Bun.SQL(bunOptions);\n\n // Test connection\n await this.client.unsafe(\"SELECT 1\");\n\n this.bunDb = drizzle({\n client: this.client,\n logger: {\n logQuery: (query: string, params: unknown[]) => {\n this.log.trace(query, { params });\n },\n },\n });\n\n this.log.info(\"Connection OK\");\n }\n\n public async close(): Promise<void> {\n if (this.client) {\n this.log.debug(\"Close...\");\n\n await this.client.close();\n\n this.client = undefined;\n this.bunDb = undefined;\n\n this.log.info(\"Connection closed\");\n }\n }\n}\n","import { $env, $hook, $inject, AlephaError, z } from \"alepha\";\nimport { DatabaseProvider, type SQLLike } from \"alepha/orm\";\nimport { sql } from \"drizzle-orm\";\nimport type { PgDatabase } from \"drizzle-orm/pg-core\";\nimport { PostgresModelBuilder } from \"../services/PostgresModelBuilder.ts\";\n\n/**\n * Cloudflare Hyperdrive PostgreSQL provider using Drizzle ORM.\n *\n * Connects to an external PostgreSQL database through Cloudflare Hyperdrive,\n * which provides connection pooling and caching at the edge.\n *\n * Creates a fresh connection per request, since Cloudflare Workers\n * cannot reuse I/O objects across request contexts.\n *\n * URL format: hyperdrive://BINDING_NAME\n */\nexport class CloudflareHyperdriveProvider extends DatabaseProvider {\n protected readonly builder = $inject(PostgresModelBuilder);\n protected readonly env = $env(\n z.object({\n DATABASE_URL: z.string().describe(\"Expect to be 'hyperdrive://BINDING'\"),\n POSTGRES_SCHEMA: z.text().optional(),\n }),\n );\n\n public override get schema(): string {\n return this.env.POSTGRES_SCHEMA ?? \"public\";\n }\n\n protected postgresFn?: any;\n protected drizzleFn?: any;\n protected bindingName?: string;\n\n public get name() {\n return \"postgres\";\n }\n\n public get driver() {\n return \"hyperdrive\";\n }\n\n public override readonly dialect = \"postgresql\";\n\n public override get url(): string {\n return this.env.DATABASE_URL;\n }\n\n /**\n * Get a fresh Drizzle instance per request.\n *\n * Reads the current Hyperdrive binding from `cloudflare.env`\n * and creates a new postgres client each time, avoiding the\n * \"Cannot perform I/O on behalf of a different request\" error.\n */\n public override get db(): PgDatabase<any> {\n if (!this.postgresFn || !this.drizzleFn || !this.bindingName) {\n throw new AlephaError(\"Hyperdrive database not initialized\");\n }\n\n const cloudflareEnv = this.alepha.get(\"cloudflare.env\") as\n | Record<string, unknown>\n | undefined;\n if (!cloudflareEnv) {\n throw new AlephaError(\n \"Cloudflare Workers environment not found in Alepha store under 'cloudflare.env'.\",\n );\n }\n\n const binding = cloudflareEnv[this.bindingName] as\n | { connectionString: string }\n | undefined;\n if (!binding?.connectionString) {\n throw new AlephaError(\n `Hyperdrive binding '${this.bindingName}' not found in Cloudflare Workers environment.`,\n );\n }\n\n const pgOptions: Record<string, any> = { prepare: false };\n\n // Set search_path so schema-free migration SQL resolves to the correct schema.\n if (this.schema !== \"public\") {\n pgOptions.connection = { search_path: `${this.schema}, public` };\n }\n\n const client = this.postgresFn(binding.connectionString, pgOptions);\n return this.drizzleFn(client as any) as unknown as PgDatabase<any>;\n }\n\n public override async execute(\n query: SQLLike,\n ): Promise<Array<Record<string, unknown>>> {\n return this.db.execute(query);\n }\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: async () => {\n this.bindingName = this.env.DATABASE_URL.replace(\"hyperdrive://\", \"\");\n\n // Pre-load modules so db getter is synchronous\n const pgModule = await import(\"postgres\");\n const drizzleModule = await import(\"drizzle-orm/postgres-js\");\n this.postgresFn = pgModule.default ?? pgModule;\n this.drizzleFn = drizzleModule.drizzle;\n\n this.log.info(\"Using Cloudflare Hyperdrive (PostgreSQL)\");\n },\n });\n\n protected async executeMigrations(migrationsFolder: string): Promise<void> {\n this.log.debug(`Running Postgres migrations from '${migrationsFolder}'...`);\n try {\n if (this.schema !== \"public\") {\n await this.db.execute(\n sql.raw(`SET search_path TO ${this.schema}, public`),\n );\n }\n const { migrate } = await import(\"drizzle-orm/postgres-js/migrator\");\n await migrate(this.db as any, {\n migrationsFolder,\n migrationsTable: this.migrationsTable,\n });\n this.log.debug(\"Postgres migrations completed successfully\");\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? `${error.name}: ${error.message}`\n : String(error);\n throw new AlephaError(\n `Postgres migration failed from '${migrationsFolder}': ${errorMessage}`,\n { cause: error },\n );\n }\n }\n}\n","import { AlephaError } from \"alepha\";\nimport { sql } from \"drizzle-orm\";\nimport type { PostgresJsDatabase } from \"drizzle-orm/postgres-js\";\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport { migrate } from \"drizzle-orm/postgres-js/migrator\";\nimport postgres from \"postgres\";\nimport { PostgresProvider } from \"./PostgresProvider.ts\";\n\nexport class NodePostgresProvider extends PostgresProvider {\n static readonly SSL_MODES = [\n \"require\",\n \"allow\",\n \"prefer\",\n \"verify-full\",\n ] as const;\n\n protected client?: postgres.Sql;\n protected pg?: PostgresJsDatabase;\n\n /**\n * Get the Drizzle Postgres database instance.\n */\n public override get db(): PostgresJsDatabase {\n if (!this.pg) {\n throw new AlephaError(\"Database not initialized\");\n }\n\n return this.pg;\n }\n\n protected override async executeMigrations(\n migrationsFolder: string,\n ): Promise<void> {\n // Set search_path so schema-free migration SQL resolves to the correct schema.\n // postgres.js doesn't support the `connection` startup parameter with pooled\n // connections (e.g. Neon), so we SET it explicitly before running migrations.\n if (this.schema !== \"public\") {\n await this.db.execute(\n sql.raw(`SET search_path TO ${this.schema}, public`),\n );\n }\n await migrate(this.db, {\n migrationsFolder,\n migrationsTable: this.migrationsTable,\n });\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n public async connect(): Promise<void> {\n const options = this.getClientOptions();\n\n this.log.debug(\"Connect ..\", {\n ...options,\n password: options.password ? \"****\" : undefined, // hide password\n });\n\n const client = postgres(options);\n await client`SELECT 1`; // test connection\n\n this.client = client;\n this.pg = drizzle(client, {\n logger: {\n // forward logs\n logQuery: (query: string, params: unknown[]) => {\n this.log.trace(query, { params });\n },\n },\n });\n\n this.log.info(\"Connection OK\");\n }\n\n public async close(): Promise<void> {\n if (this.client) {\n this.log.debug(\"Close...\");\n\n await this.client.end();\n\n this.client = undefined;\n this.pg = undefined;\n\n this.log.info(\"Connection closed\");\n }\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n /**\n * Map the DATABASE_URL to postgres client options.\n */\n protected getClientOptions(): postgres.Options<any> {\n const url = new URL(this.url);\n\n const options: postgres.Options<any> = {\n host: url.hostname,\n user: decodeURIComponent(url.username),\n database: decodeURIComponent(url.pathname.replace(\"/\", \"\")),\n password: decodeURIComponent(url.password),\n port: Number(url.port || 5432),\n ssl: this.ssl(url),\n onnotice: () => {\n // let drizzle handle logs\n },\n };\n\n // Pool options — only set when explicitly configured via env vars\n if (this.pgEnv.POOL_MAX != null) options.max = this.pgEnv.POOL_MAX;\n if (this.pgEnv.POOL_IDLE_TIMEOUT != null)\n options.idle_timeout = this.pgEnv.POOL_IDLE_TIMEOUT;\n if (this.pgEnv.POOL_CONNECT_TIMEOUT != null)\n options.connect_timeout = this.pgEnv.POOL_CONNECT_TIMEOUT;\n\n // Set search_path at connection level so schema-free migration SQL\n // resolves to the correct PostgreSQL schema across all pool connections.\n if (this.schema !== \"public\") {\n options.connection = { search_path: `${this.schema}, public` };\n }\n\n return options;\n }\n\n protected ssl(\n url: URL,\n ): \"require\" | \"allow\" | \"prefer\" | \"verify-full\" | undefined {\n const mode = url.searchParams.get(\"sslmode\");\n for (const it of NodePostgresProvider.SSL_MODES) {\n if (mode === it) {\n return it;\n }\n }\n }\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport type { PGlite } from \"@electric-sql/pglite\";\nimport { $env, $hook, $inject, AlephaError } from \"alepha\";\nimport { DatabaseProvider, databaseEnvSchema, type SQLLike } from \"alepha/orm\";\nimport { sql } from \"drizzle-orm\";\nimport type { PgliteDatabase } from \"drizzle-orm/pglite\";\nimport { migrate } from \"drizzle-orm/pglite/migrator\";\nimport { postgresEnvSchema } from \"../schemas/postgresEnvSchema.ts\";\nimport { PostgresModelBuilder } from \"../services/PostgresModelBuilder.ts\";\n\nexport interface PgLiteModule {\n PGlite: typeof PGlite;\n}\n\nexport class PglitePostgresProvider extends DatabaseProvider {\n public static importPglite(): PgLiteModule | undefined {\n try {\n return createRequire(import.meta.url)(\"@electric-sql/pglite\");\n } catch {\n // ignored\n }\n }\n\n public override get schema(): string {\n return this.pgEnv.POSTGRES_SCHEMA ?? \"public\";\n }\n\n protected readonly env = $env(databaseEnvSchema);\n protected readonly pgEnv = $env(postgresEnvSchema);\n protected readonly builder = $inject(PostgresModelBuilder);\n\n protected client?: PGlite;\n protected pglite?: PgliteDatabase;\n\n public get name() {\n return \"postgres\";\n }\n\n public get driver() {\n return \"pglite\";\n }\n\n public override readonly dialect = \"postgresql\";\n\n public override get supportsTransactions(): boolean {\n return false;\n }\n\n public override get url(): string {\n let path = this.env.DATABASE_URL;\n\n if (!path) {\n if (this.alepha.isTest()) {\n path = \":memory:\"; // use in-memory database for tests by default\n } else {\n path = \"node_modules/.alepha/pglite\"; // default path for dev\n }\n } else {\n if (path.includes(\":memory:\")) {\n // like postgres://:memory: or pglite://:memory:\n path = \":memory:\";\n } else if (path.startsWith(\"file://\")) {\n path = path.replace(\"file://\", \"\");\n }\n }\n\n return path;\n }\n\n public override get db(): PgliteDatabase {\n if (!this.pglite) {\n throw new AlephaError(\"Database not initialized\");\n }\n\n return this.pglite;\n }\n\n public override async execute(\n statement: SQLLike,\n ): Promise<Array<Record<string, unknown>>> {\n const { rows } = await this.db.execute(statement);\n return rows;\n }\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: async () => {\n if (Object.keys(this.kit.getModels(this)).length === 0) {\n return;\n }\n\n const module = PglitePostgresProvider.importPglite();\n if (!module) {\n throw new AlephaError(\n \"@electric-sql/pglite is not installed. Please install it to use the pglite driver.\",\n );\n }\n\n const { drizzle } = createRequire(import.meta.url)(\"drizzle-orm/pglite\");\n const path = this.url;\n\n if (path !== \":memory:\") {\n await mkdir(path, { recursive: true }).catch(() => null);\n this.client = new module.PGlite(path);\n } else {\n this.client = new module.PGlite();\n }\n\n this.pglite = drizzle({\n client: this.client,\n });\n\n await this.migrate();\n\n this.log.info(`Using PGlite database at ${path}`);\n },\n });\n\n protected readonly onStop = $hook({\n on: \"stop\",\n handler: async () => {\n if (this.client) {\n this.log.debug(\"Closing PGlite connection...\");\n await this.client.close();\n this.client = undefined;\n this.pglite = undefined;\n this.log.info(\"PGlite connection closed\");\n }\n },\n });\n\n protected async executeMigrations(migrationsFolder: string): Promise<void> {\n // Set search_path so schema-free migration SQL resolves to the correct schema.\n // PGlite uses a single connection, so SET persists through the migration.\n if (this.schema !== \"public\") {\n await this.db.execute(\n sql.raw(`SET search_path TO ${this.schema}, public`),\n );\n }\n await migrate(this.db, {\n migrationsFolder,\n migrationsTable: this.migrationsTable,\n });\n }\n}\n","import { $module, type Alepha } from \"alepha\";\nimport { AlephaOrm, DatabaseProvider, databaseEnvSchema } from \"alepha/orm\";\nimport { BunPostgresProvider } from \"./providers/BunPostgresProvider.ts\";\nimport { CloudflareHyperdriveProvider } from \"./providers/CloudflareHyperdriveProvider.ts\";\nimport { NodePostgresProvider } from \"./providers/NodePostgresProvider.ts\";\nimport { PglitePostgresProvider } from \"./providers/PglitePostgresProvider.ts\";\nimport { PostgresProvider } from \"./providers/PostgresProvider.ts\";\nimport { PostgresModelBuilder } from \"./services/PostgresModelBuilder.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/BunPostgresProvider.ts\";\nexport * from \"./providers/CloudflareHyperdriveProvider.ts\";\nexport * from \"./providers/NodePostgresProvider.ts\";\nexport * from \"./providers/PglitePostgresProvider.ts\";\nexport * from \"./providers/PostgresProvider.ts\";\nexport * from \"./schemas/postgresEnvSchema.ts\";\nexport * from \"./services/PostgresModelBuilder.ts\";\nexport * from \"./types/byte.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport const AlephaOrmPostgres = $module({\n name: \"alepha.orm.postgres\",\n services: [PostgresModelBuilder],\n variants: [\n PostgresProvider,\n CloudflareHyperdriveProvider,\n NodePostgresProvider,\n BunPostgresProvider,\n PglitePostgresProvider,\n ],\n register: (alepha: Alepha) => {\n const env = alepha.parseEnv(databaseEnvSchema);\n\n const url = env.DATABASE_URL;\n const isBun = alepha.isBun();\n\n if (url?.startsWith(\"hyperdrive:\")) {\n alepha.with({\n optional: true,\n provide: DatabaseProvider,\n use: CloudflareHyperdriveProvider,\n });\n } else if (url?.startsWith(\"pglite:\")) {\n alepha.with({\n optional: true,\n provide: DatabaseProvider,\n use: PglitePostgresProvider,\n });\n } else if (url?.startsWith(\"postgres:\")) {\n alepha.with({\n optional: true,\n provide: DatabaseProvider,\n use: isBun ? BunPostgresProvider : NodePostgresProvider,\n });\n }\n\n // Chain core ORM module AFTER substitution so its own SQLite default\n // doesn't preempt our Postgres-specific provider choice.\n alepha.with(AlephaOrm);\n },\n});\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { Alepha, KIND, PipelinePrimitive, PipelinePrimitiveOptions, Primitive, Service, Static, TSchema } from "alepha";
2
2
  import { DateTimeProvider } from "alepha/datetime";
3
-
4
3
  //#region ../../src/queue/core/providers/QueueProvider.d.ts
5
4
  /**
6
5
  * Minimalist Queue interface.
@@ -37,11 +36,11 @@ declare class MemoryQueueProvider implements QueueProvider {
37
36
  /**
38
37
  * Queue worker configuration atom.
39
38
  */
40
- declare const queueWorkerOptions: import("alepha").Atom<import("typebox").TObject<{
41
- interval: import("typebox").TInteger;
42
- maxInterval: import("typebox").TInteger;
43
- concurrency: import("typebox").TInteger;
44
- }>, "alepha.queue.worker.options">;
39
+ declare const queueWorkerOptions: import("alepha").Atom<import("zod").ZodObject<{
40
+ interval: import("zod").ZodDefault<import("zod").ZodInt>;
41
+ maxInterval: import("zod").ZodDefault<import("zod").ZodInt>;
42
+ concurrency: import("zod").ZodDefault<import("zod").ZodInt>;
43
+ }, import("zod/v4/core").$strip>, "alepha.queue.worker.options">;
45
44
  type QueueWorkerOptions = Static<typeof queueWorkerOptions.schema>;
46
45
  declare module "alepha" {
47
46
  interface State {
@@ -113,62 +112,43 @@ interface NextMessage {
113
112
  /**
114
113
  * Creates a queue primitive for asynchronous message processing with background workers.
115
114
  *
116
- * The $queue primitive enables powerful asynchronous communication patterns in your application.
117
- * It provides type-safe message queuing with automatic worker processing, making it perfect for
118
- * decoupling components and handling background tasks efficiently.
115
+ * `$queue` is the **raw transport layer**: it fans messages out to background
116
+ * workers over the configured backend with type-safe payloads. Delivery is
117
+ * **at-most-once** a message is popped from the backend before the handler
118
+ * runs, so a handler error or a process crash loses it. There is no retry,
119
+ * no dead-letter queue, and no delivery guarantee at this layer.
119
120
  *
120
- * **Background Processing**
121
- * - Automatic worker threads for non-blocking message processing
122
- * - Built-in retry mechanisms and error handling
123
- * - Dead letter queues for failed message handling
124
- * - Graceful shutdown and worker lifecycle management
121
+ * **For work that must not be lost, use `$job` (alepha/api/jobs) instead.**
122
+ * It layers a durable, DB-backed outbox over this transport: at-least-once
123
+ * delivery, retries, idempotency keys, priorities, crash recovery via a
124
+ * reconciliation sweep, and failure records.
125
125
  *
126
- * **Type Safety**
127
- * - Full TypeScript support with schema validation using TypeBox
128
- * - Type-safe message payloads with automatic inference
129
- * - Runtime validation of all queued messages
130
- * - Compile-time errors for invalid message structures
126
+ * **What $queue gives you**
127
+ * - Type-safe payloads with schema validation at push and receive
128
+ * - Background workers with graceful shutdown and lifecycle management
129
+ * - Pluggable backends: memory (dev/test), Redis, Cloudflare Queues
130
+ * - Cheap fire-and-forget fan-out where occasional loss is acceptable
131
+ * (cache invalidation, presence pings, metrics, live notifications)
131
132
  *
132
- * **Storage Flexibility**
133
- * - Memory provider for development and testing
134
- * - Redis provider for production scalability and persistence
135
- * - Custom provider support for specialized backends
136
- * - Automatic failover and connection pooling
137
- *
138
- * **Performance & Scalability**
139
- * - Batch processing support for high-throughput scenarios
140
- * - Horizontal scaling with distributed queue backends
141
- * - Configurable concurrency and worker pools
142
- * - Efficient serialization and message routing
143
- *
144
- * **Reliability**
145
- * - Message persistence across application restarts
146
- * - Automatic retry with exponential backoff
147
- * - Dead letter handling for permanently failed messages
148
- * - Comprehensive logging and monitoring integration
149
- *
150
- * @example Basic notification queue
133
+ * @example Loss-tolerant event fan-out
151
134
  * ```typescript
152
- * const emailQueue = $queue({
153
- * name: "email-notifications",
154
- * schema: t.object({
155
- * to: t.text(),
156
- * subject: t.text(),
157
- * body: t.text(),
158
- * priority: t.optional(t.enum(["high", "normal"]))
135
+ * const activityQueue = $queue({
136
+ * name: "activity-events",
137
+ * schema: z.object({
138
+ * userId: z.text(),
139
+ * event: z.text(),
140
+ * at: z.number()
159
141
  * }),
160
142
  * handler: async (message) => {
161
- * await emailService.send(message.payload);
162
- * console.log(`Email sent to ${message.payload.to}`);
143
+ * await metrics.track(message.payload);
163
144
  * }
164
145
  * });
165
146
  *
166
147
  * // Push messages for background processing
167
- * await emailQueue.push({
168
- * to: "user@example.com",
169
- * subject: "Welcome!",
170
- * body: "Welcome to our platform",
171
- * priority: "high"
148
+ * await activityQueue.push({
149
+ * userId: "u1",
150
+ * event: "page-view",
151
+ * at: 1700000000000
172
152
  * });
173
153
  * ```
174
154
  *
@@ -177,9 +157,9 @@ interface NextMessage {
177
157
  * const imageQueue = $queue({
178
158
  * name: "image-processing",
179
159
  * provider: RedisQueueProvider,
180
- * schema: t.object({
181
- * imageId: t.text(),
182
- * operations: t.array(t.enum(["resize", "compress", "thumbnail"]))
160
+ * schema: z.object({
161
+ * imageId: z.text(),
162
+ * operations: z.array(z.enum(["resize", "compress", "thumbnail"]))
183
163
  * }),
184
164
  * handler: async (message) => {
185
165
  * for (const op of message.payload.operations) {
@@ -201,9 +181,9 @@ interface NextMessage {
201
181
  * const taskQueue = $queue({
202
182
  * name: "dev-tasks",
203
183
  * provider: "memory",
204
- * schema: t.object({
205
- * taskType: t.enum(["cleanup", "backup", "report"]),
206
- * data: t.record(t.text(), t.any())
184
+ * schema: z.object({
185
+ * taskType: z.enum(["cleanup", "backup", "report"]),
186
+ * data: z.record(z.text(), z.any())
207
187
  * }),
208
188
  * handler: async (message) => {
209
189
  * switch (message.payload.taskType) {
@@ -266,7 +246,8 @@ interface QueuePrimitiveOptions<T extends TSchema> {
266
246
  *
267
247
  * **Provider Selection Guidelines**:
268
248
  * - Development: Use "memory" for fast, simple testing
269
- * - Production: Use Redis or database-backed providers for persistence
249
+ * - Production: Use Redis so multiple instances share one queue (note:
250
+ * a popped message is gone — the at-most-once caveat above applies)
270
251
  * - High-throughput: Use specialized providers with connection pooling
271
252
  * - Distributed systems: Use Redis or message brokers for scalability
272
253
  *
@@ -293,11 +274,11 @@ interface QueuePrimitiveOptions<T extends TSchema> {
293
274
  *
294
275
  * @example
295
276
  * ```ts
296
- * t.object({
297
- * userId: t.text(),
298
- * action: t.enum(["create", "update"]),
299
- * data: t.record(t.text(), t.any()),
300
- * timestamp: t.optional(t.number())
277
+ * z.object({
278
+ * userId: z.text(),
279
+ * action: z.enum(["create", "update"]),
280
+ * data: z.record(z.text(), z.any()),
281
+ * timestamp: z.number().optional()
301
282
  * })
302
283
  * ```
303
284
  */
@@ -308,9 +289,9 @@ interface QueuePrimitiveOptions<T extends TSchema> {
308
289
  * This function:
309
290
  * - Runs in background worker threads for non-blocking processing
310
291
  * - Receives type-safe message payloads based on the schema
311
- * - Should be idempotent to handle potential retries
312
- * - Can throw errors to trigger retry mechanisms
313
292
  * - Has access to the full Alepha dependency injection container
293
+ * - **Loses the message if it throws** — errors are logged, not retried.
294
+ * Use `$job` when failed work must be retried or recorded.
314
295
  *
315
296
  * **Handler Best Practices**:
316
297
  * - Keep handlers focused on a single responsibility
@@ -336,7 +317,8 @@ interface QueuePrimitiveOptions<T extends TSchema> {
336
317
  *
337
318
  * await this.userService.markEmailSent(userId, template);
338
319
  * } catch (error) {
339
- * // Log error and let the queue system handle retries
320
+ * // The message is NOT redelivered after a throw — record the
321
+ * // failure yourself, or use $job for retryable work.
340
322
  * this.logger.error(`Failed to send email to ${email}`, error);
341
323
  * throw error;
342
324
  * }
@@ -348,10 +330,10 @@ interface QueuePrimitiveOptions<T extends TSchema> {
348
330
  declare class QueuePrimitive<T extends TSchema> extends Primitive<QueuePrimitiveOptions<T>> {
349
331
  protected readonly log: import("alepha/logger").Logger;
350
332
  protected readonly workerProvider: WorkerProvider;
351
- readonly provider: QueueProvider | MemoryQueueProvider;
333
+ readonly provider: MemoryQueueProvider | QueueProvider;
352
334
  push(...payloads: Array<Static<T>>): Promise<void>;
353
335
  get name(): string;
354
- protected $provider(): QueueProvider | MemoryQueueProvider;
336
+ protected $provider(): MemoryQueueProvider | QueueProvider;
355
337
  }
356
338
  interface QueueMessageSchema {
357
339
  payload: TSchema;
@@ -385,10 +367,10 @@ interface QueueMessage<T extends TSchema> {
385
367
  * class EmailService {
386
368
  * emailQueue = $queue({
387
369
  * name: "emails",
388
- * schema: t.object({
389
- * to: t.text(),
390
- * subject: t.text(),
391
- * body: t.text()
370
+ * schema: z.object({
371
+ * to: z.text(),
372
+ * subject: z.text(),
373
+ * body: z.text()
392
374
  * })
393
375
  * });
394
376
  *
@@ -435,7 +417,7 @@ interface ConsumerPrimitiveOptions<T extends TSchema> extends PipelinePrimitiveO
435
417
  * // First, define a queue
436
418
  * emailQueue = $queue({
437
419
  * name: "emails",
438
- * schema: t.object({ to: t.text(), subject: t.text() })
420
+ * schema: z.object({ to: z.text(), subject: z.text() })
439
421
  * });
440
422
  *
441
423
  * // Then, create a consumer for that queue
@@ -539,6 +521,11 @@ interface CloudflareQueue {
539
521
  * Default queue binding name used in wrangler configuration.
540
522
  */
541
523
  declare const QUEUE_DEFAULT_BINDING = "JOBS_QUEUE";
524
+ /**
525
+ * How many times Cloudflare redelivers a message before routing it to the
526
+ * consumer's dead-letter queue. Matches Cloudflare's own default.
527
+ */
528
+ declare const QUEUE_DEFAULT_MAX_RETRIES = 3;
542
529
  /**
543
530
  * Cloudflare Queue provider.
544
531
  *
@@ -587,5 +574,5 @@ declare class CloudflareQueueProvider extends QueueProvider {
587
574
  */
588
575
  declare const AlephaQueue: import("alepha").Service<import("alepha").Module>;
589
576
  //#endregion
590
- export { $consumer, $queue, AlephaQueue, CloudflareQueue, CloudflareQueueProvider, Consumer, ConsumerPrimitive, ConsumerPrimitiveOptions, MemoryQueueProvider, NextMessage, QUEUE_DEFAULT_BINDING, QueueMessage, QueueMessageSchema, QueuePrimitive, QueuePrimitiveOptions, QueueProvider, QueueWorkerOptions, WorkerProvider, queueWorkerOptions };
577
+ export { $consumer, $queue, AlephaQueue, CloudflareQueue, CloudflareQueueProvider, Consumer, ConsumerPrimitive, ConsumerPrimitiveOptions, MemoryQueueProvider, NextMessage, QUEUE_DEFAULT_BINDING, QUEUE_DEFAULT_MAX_RETRIES, QueueMessage, QueueMessageSchema, QueuePrimitive, QueuePrimitiveOptions, QueueProvider, QueueWorkerOptions, WorkerProvider, queueWorkerOptions };
591
578
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/core/providers/QueueProvider.ts","../../../src/queue/core/providers/MemoryQueueProvider.ts","../../../src/queue/core/providers/WorkerProvider.ts","../../../src/queue/core/primitives/$queue.ts","../../../src/queue/core/primitives/$consumer.ts","../../../src/queue/core/providers/CloudflareQueueProvider.ts","../../../src/queue/core/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/core/providers/QueueProvider.ts","../../../src/queue/core/providers/MemoryQueueProvider.ts","../../../src/queue/core/providers/WorkerProvider.ts","../../../src/queue/core/primitives/$queue.ts","../../../src/queue/core/primitives/$consumer.ts","../../../src/queue/core/providers/CloudflareQueueProvider.ts","../../../src/queue/core/index.ts"],"mappings":";;;;;;;;uBAKsB;;;;;;;WAOJ,KAAK,eAAe,kBAAkB;;;;;;;;WAStC,IAAI,gBAAgB;;;;cClBzB,+BAA+B;qBACvB,6BAAG;YACZ,WAAW;EAER,KAAK,kBAAkB,qBAAqB;EAQ5C,IAAI,gBAAgB;;;;;;;cCUtB,qCAAkB,mBAAA;;;;;KA6BnB,qBAAqB,cAAc,mBAAmB;;YAGtD;KACP,mBAAmB,MAAM;;;cAMjB;qBACQ,6BAAG;qBACH,SAAO;;;;;qBACP,QAAM;qBACN,eAAa;qBACb,kBAAgB;YAEzB,gBAAgB,MAAM;YACtB;YACA,iBAAiB;YACjB,iBAAiB;YACjB,WAAW,MAAM;YACjB;MAEC;qBAIQ,wBAAK;;;;;YAwCd;qBAoCS,uBAAI;;;;;;YAcP,mBAAmB,YAAY;;;;YA2B/B,kBAAkB,oBAAoB;;;;YAiBtC,eAAe;IAC7B;IACA,UAAU;MACX;;;;;;YAoBe,eAAW;;;;EAapB;;UAUQ,SAAS,UAAU,UAAU;EAC5C,OAAO,eAAe;EACtB,UAAU,SAAS,aAAa,OAAO;;UAGxB;EACf,UAAU;EACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCnKW;GAAU,UAAU,SAAO,SAC7B,sBAAsB,KAC9B,eAAe;;;UAMD,sBAAsB,UAAU;;;;;;;;;;;;;;;;EAgB/C;;;;;;;;;;;;;;EAeA;;;;;;;;;;;;;;;;;;;;;EAsBA,sBAAsB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B9B,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CR,WAAW,SAAS,aAAa,OAAO;;cAK7B,eAAe,UAAU,iBAAiB,UACrD,sBAAsB;qBAEH,6BAAG;qBACH,gBAAc;WACjB,UAAQ,sBAAA;EAEX,QAAQ,UAAU,MAAM,OAAO,MAAG;MAiBpC;YAID,aAAS,sBAAA;;UAeJ;EACf,SAAS;;UAGM,aAAa,UAAU;EACtC,SAAS,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCxOL;GAAa,UAAU,SAAO,SAChC,yBAAyB,KACjC,kBAAkB;;;UAMJ,yBAAyB,UAAU,iBAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BR,OAAO,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2EtB,UAAU;IAAW,SAAS,OAAO;QAAS;;cAKnC,kBAAkB,UAAU,iBAAiB,kBACxD,yBAAyB;;;;;;UC3KV;EACf,KAAK,mBAAmB;EACxB,UAAU,UAAU;IAAQ;OAAmB;;;;;cAQpC;;;;;cAMA;;;;;;;;;;;;;;;;;;cAqBA,gCAAgC;qBACxB,QAAM;qBACN,6BAAG;YAEZ,QAAQ;qBAEC,0BAAO;EA0Bb,KAAK,eAAe,kBAAkB;;;;EAOtC,IAAI,iBAAiB;YAIxB,YAAY;;;;;;;;;;;;;;;;;;;cCxDX,8BAAW,yBAAA"}