alepha 0.13.7 → 0.14.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 (512) hide show
  1. package/README.md +5 -2
  2. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  3. package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
  4. package/assets/swagger-ui/swagger-ui.css +1 -1
  5. package/dist/{api-audits → api/audits}/index.browser.js +4 -4
  6. package/dist/api/audits/index.browser.js.map +1 -0
  7. package/dist/{api-audits → api/audits}/index.d.ts +10 -9
  8. package/dist/api/audits/index.d.ts.map +1 -0
  9. package/dist/{api-audits → api/audits}/index.js +8 -8
  10. package/dist/api/audits/index.js.map +1 -0
  11. package/dist/{api-files → api/files}/index.browser.js +5 -5
  12. package/dist/api/files/index.browser.js.map +1 -0
  13. package/dist/{api-files → api/files}/index.d.ts +18 -10
  14. package/dist/api/files/index.d.ts.map +1 -0
  15. package/dist/{api-files → api/files}/index.js +10 -10
  16. package/dist/api/files/index.js.map +1 -0
  17. package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
  18. package/dist/api/jobs/index.browser.js.map +1 -0
  19. package/dist/{api-jobs → api/jobs}/index.d.ts +168 -167
  20. package/dist/api/jobs/index.d.ts.map +1 -0
  21. package/dist/{api-jobs → api/jobs}/index.js +9 -9
  22. package/dist/api/jobs/index.js.map +1 -0
  23. package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
  24. package/dist/api/notifications/index.browser.js.map +1 -0
  25. package/dist/api/notifications/index.d.ts +327 -0
  26. package/dist/api/notifications/index.d.ts.map +1 -0
  27. package/dist/{api-notifications → api/notifications}/index.js +11 -11
  28. package/dist/api/notifications/index.js.map +1 -0
  29. package/dist/{api-parameters → api/parameters}/index.browser.js +2 -2
  30. package/dist/api/parameters/index.browser.js.map +1 -0
  31. package/dist/{api-parameters → api/parameters}/index.d.ts +11 -11
  32. package/dist/api/parameters/index.d.ts.map +1 -0
  33. package/dist/{api-parameters → api/parameters}/index.js +7 -7
  34. package/dist/api/parameters/index.js.map +1 -0
  35. package/dist/{api-users → api/users}/index.browser.js +6 -6
  36. package/dist/api/users/index.browser.js.map +1 -0
  37. package/dist/{api-users → api/users}/index.d.ts +836 -836
  38. package/dist/api/users/index.d.ts.map +1 -0
  39. package/dist/{api-users → api/users}/index.js +99 -766
  40. package/dist/api/users/index.js.map +1 -0
  41. package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
  42. package/dist/api/verifications/index.browser.js.map +1 -0
  43. package/dist/api/verifications/index.d.ts +248 -0
  44. package/dist/api/verifications/index.d.ts.map +1 -0
  45. package/dist/{api-verifications → api/verifications}/index.js +11 -11
  46. package/dist/api/verifications/index.js.map +1 -0
  47. package/dist/batch/index.d.ts.map +1 -0
  48. package/dist/bucket/index.d.ts.map +1 -0
  49. package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
  50. package/dist/cache/core/index.d.ts.map +1 -0
  51. package/dist/cache/{index.js → core/index.js} +5 -5
  52. package/dist/cache/core/index.js.map +1 -0
  53. package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
  54. package/dist/cache/redis/index.d.ts.map +1 -0
  55. package/dist/{cache-redis → cache/redis}/index.js +2 -2
  56. package/dist/cache/redis/index.js.map +1 -0
  57. package/dist/cli/index.d.ts +78 -58
  58. package/dist/cli/index.d.ts.map +1 -0
  59. package/dist/cli/index.js +454 -154
  60. package/dist/cli/index.js.map +1 -1
  61. package/dist/command/index.d.ts +15 -5
  62. package/dist/command/index.d.ts.map +1 -0
  63. package/dist/command/index.js +45 -6
  64. package/dist/command/index.js.map +1 -1
  65. package/dist/core/index.browser.js +1334 -1318
  66. package/dist/core/index.browser.js.map +1 -1
  67. package/dist/core/index.d.ts +75 -71
  68. package/dist/core/index.d.ts.map +1 -0
  69. package/dist/core/index.js +1337 -1321
  70. package/dist/core/index.js.map +1 -1
  71. package/dist/core/index.native.js +1337 -1321
  72. package/dist/core/index.native.js.map +1 -1
  73. package/dist/datetime/index.d.ts.map +1 -0
  74. package/dist/email/index.d.ts.map +1 -0
  75. package/dist/fake/index.d.ts.map +1 -0
  76. package/dist/file/index.d.ts.map +1 -0
  77. package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
  78. package/dist/lock/core/index.d.ts.map +1 -0
  79. package/dist/lock/{index.js → core/index.js} +5 -5
  80. package/dist/lock/core/index.js.map +1 -0
  81. package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
  82. package/dist/lock/redis/index.d.ts.map +1 -0
  83. package/dist/{lock-redis → lock/redis}/index.js +2 -2
  84. package/dist/lock/redis/index.js.map +1 -0
  85. package/dist/logger/index.d.ts +1 -0
  86. package/dist/logger/index.d.ts.map +1 -0
  87. package/dist/mcp/index.d.ts +820 -0
  88. package/dist/mcp/index.d.ts.map +1 -0
  89. package/dist/mcp/index.js +978 -0
  90. package/dist/mcp/index.js.map +1 -0
  91. package/dist/orm/index.d.ts +180 -107
  92. package/dist/orm/index.d.ts.map +1 -0
  93. package/dist/orm/index.js +260 -174
  94. package/dist/orm/index.js.map +1 -1
  95. package/dist/queue/core/index.d.ts +548 -0
  96. package/dist/queue/core/index.d.ts.map +1 -0
  97. package/dist/queue/core/index.js +391 -0
  98. package/dist/queue/core/index.js.map +1 -0
  99. package/dist/queue/redis/index.d.ts +28 -0
  100. package/dist/queue/redis/index.d.ts.map +1 -0
  101. package/dist/queue/redis/index.js +43 -0
  102. package/dist/queue/redis/index.js.map +1 -0
  103. package/dist/redis/index.d.ts.map +1 -0
  104. package/dist/retry/index.d.ts.map +1 -0
  105. package/dist/router/index.d.ts.map +1 -0
  106. package/dist/scheduler/index.d.ts +1 -1
  107. package/dist/scheduler/index.d.ts.map +1 -0
  108. package/dist/scheduler/index.js +1 -393
  109. package/dist/scheduler/index.js.map +1 -1
  110. package/dist/security/index.d.ts +1 -1
  111. package/dist/security/index.d.ts.map +1 -0
  112. package/dist/security/index.js +2 -1413
  113. package/dist/security/index.js.map +1 -1
  114. package/dist/{server-auth → server/auth}/index.browser.js +6 -6
  115. package/dist/server/auth/index.browser.js.map +1 -0
  116. package/dist/{server-auth → server/auth}/index.d.ts +167 -167
  117. package/dist/server/auth/index.d.ts.map +1 -0
  118. package/dist/server/auth/index.js +742 -0
  119. package/dist/server/auth/index.js.map +1 -0
  120. package/dist/{server-cache → server/cache}/index.d.ts +2 -2
  121. package/dist/server/cache/index.d.ts.map +1 -0
  122. package/dist/{server-cache → server/cache}/index.js +2 -2
  123. package/dist/server/cache/index.js.map +1 -0
  124. package/dist/{server-compress → server/compress}/index.d.ts +2 -2
  125. package/dist/server/compress/index.d.ts.map +1 -0
  126. package/dist/{server-compress → server/compress}/index.js +2 -2
  127. package/dist/server/compress/index.js.map +1 -0
  128. package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
  129. package/dist/server/cookies/index.browser.js.map +1 -0
  130. package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
  131. package/dist/server/cookies/index.d.ts.map +1 -0
  132. package/dist/{server-cookies → server/cookies}/index.js +4 -4
  133. package/dist/server/cookies/index.js.map +1 -0
  134. package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
  135. package/dist/server/core/index.browser.js.map +1 -0
  136. package/dist/server/{index.d.ts → core/index.d.ts} +36 -36
  137. package/dist/server/core/index.d.ts.map +1 -0
  138. package/dist/server/{index.js → core/index.js} +27 -27
  139. package/dist/server/core/index.js.map +1 -0
  140. package/dist/{server-cors → server/cors}/index.d.ts +3 -3
  141. package/dist/server/cors/index.d.ts.map +1 -0
  142. package/dist/{server-cors → server/cors}/index.js +3 -3
  143. package/dist/server/cors/index.js.map +1 -0
  144. package/dist/{server-health → server/health}/index.d.ts +3 -3
  145. package/dist/server/health/index.d.ts.map +1 -0
  146. package/dist/{server-health → server/health}/index.js +3 -3
  147. package/dist/server/health/index.js.map +1 -0
  148. package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
  149. package/dist/server/helmet/index.d.ts.map +1 -0
  150. package/dist/{server-helmet → server/helmet}/index.js +2 -2
  151. package/dist/server/helmet/index.js.map +1 -0
  152. package/dist/{server-links → server/links}/index.browser.js +5 -5
  153. package/dist/server/links/index.browser.js.map +1 -0
  154. package/dist/{server-links → server/links}/index.d.ts +40 -40
  155. package/dist/server/links/index.d.ts.map +1 -0
  156. package/dist/{server-links → server/links}/index.js +7 -7
  157. package/dist/server/links/index.js.map +1 -0
  158. package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
  159. package/dist/server/metrics/index.d.ts.map +1 -0
  160. package/dist/server/metrics/index.js +74 -0
  161. package/dist/server/metrics/index.js.map +1 -0
  162. package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
  163. package/dist/server/multipart/index.d.ts.map +1 -0
  164. package/dist/{server-multipart → server/multipart}/index.js +2 -2
  165. package/dist/server/multipart/index.js.map +1 -0
  166. package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
  167. package/dist/server/proxy/index.d.ts.map +1 -0
  168. package/dist/{server-proxy → server/proxy}/index.js +3 -3
  169. package/dist/server/proxy/index.js.map +1 -0
  170. package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
  171. package/dist/server/rate-limit/index.d.ts.map +1 -0
  172. package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
  173. package/dist/server/rate-limit/index.js.map +1 -0
  174. package/dist/{server-security → server/security}/index.browser.js +1 -1
  175. package/dist/server/security/index.browser.js.map +1 -0
  176. package/dist/{server-security → server/security}/index.d.ts +4 -4
  177. package/dist/server/security/index.d.ts.map +1 -0
  178. package/dist/{server-security → server/security}/index.js +4 -4
  179. package/dist/server/security/index.js.map +1 -0
  180. package/dist/{server-static → server/static}/index.d.ts +3 -3
  181. package/dist/server/static/index.d.ts.map +1 -0
  182. package/dist/{server-static → server/static}/index.js +3 -3
  183. package/dist/server/static/index.js.map +1 -0
  184. package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
  185. package/dist/server/swagger/index.d.ts.map +1 -0
  186. package/dist/{server-swagger → server/swagger}/index.js +4 -4
  187. package/dist/server/swagger/index.js.map +1 -0
  188. package/dist/sms/index.d.ts.map +1 -0
  189. package/dist/thread/index.d.ts.map +1 -0
  190. package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
  191. package/dist/topic/core/index.d.ts.map +1 -0
  192. package/dist/topic/{index.js → core/index.js} +6 -6
  193. package/dist/topic/core/index.js.map +1 -0
  194. package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
  195. package/dist/topic/redis/index.d.ts.map +1 -0
  196. package/dist/{topic-redis → topic/redis}/index.js +2 -2
  197. package/dist/topic/redis/index.js.map +1 -0
  198. package/dist/vite/index.d.ts +21 -2
  199. package/dist/vite/index.d.ts.map +1 -0
  200. package/dist/vite/index.js +48 -19
  201. package/dist/vite/index.js.map +1 -1
  202. package/dist/websocket/index.d.ts.map +1 -0
  203. package/package.json +162 -158
  204. package/src/{api-files → api/files}/index.ts +1 -0
  205. package/src/{api-parameters → api/parameters}/index.ts +1 -1
  206. package/src/{api-users → api/users}/primitives/$userRealm.ts +1 -1
  207. package/src/{api-users → api/users}/providers/UserRealmProvider.ts +6 -7
  208. package/src/{api-verifications → api/verifications}/index.ts +2 -0
  209. package/src/cli/apps/AlephaCli.ts +2 -0
  210. package/src/cli/apps/AlephaPackageBuilderCli.ts +83 -54
  211. package/src/cli/assets/appRouterTs.ts +1 -1
  212. package/src/cli/assets/biomeJson.ts +1 -1
  213. package/src/cli/assets/indexHtml.ts +1 -1
  214. package/src/cli/assets/mainBrowserTs.ts +1 -1
  215. package/src/cli/assets/mainTs.ts +9 -10
  216. package/src/cli/assets/viteConfigTs.ts +1 -1
  217. package/src/cli/commands/ChangelogCommands.ts +389 -0
  218. package/src/cli/commands/CoreCommands.ts +10 -6
  219. package/src/cli/commands/DrizzleCommands.ts +204 -4
  220. package/src/cli/commands/VerifyCommands.ts +4 -1
  221. package/src/cli/commands/ViteCommands.ts +46 -25
  222. package/src/cli/services/AlephaCliUtils.ts +52 -164
  223. package/src/command/providers/CliProvider.ts +76 -5
  224. package/src/core/providers/SchemaValidator.ts +24 -2
  225. package/src/mcp/errors/McpError.ts +72 -0
  226. package/src/mcp/helpers/jsonrpc.ts +163 -0
  227. package/src/mcp/index.ts +132 -0
  228. package/src/mcp/interfaces/McpTypes.ts +248 -0
  229. package/src/mcp/primitives/$prompt.ts +188 -0
  230. package/src/mcp/primitives/$resource.ts +171 -0
  231. package/src/mcp/primitives/$tool.ts +285 -0
  232. package/src/mcp/providers/McpServerProvider.ts +382 -0
  233. package/src/mcp/transports/SseMcpTransport.ts +172 -0
  234. package/src/mcp/transports/StdioMcpTransport.ts +126 -0
  235. package/src/orm/index.ts +12 -0
  236. package/src/orm/providers/drivers/CloudflareD1Provider.ts +164 -0
  237. package/src/orm/providers/drivers/NodeSqliteProvider.ts +3 -1
  238. package/src/queue/{index.ts → core/index.ts} +2 -3
  239. package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
  240. package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
  241. package/src/queue/core/providers/QueueProvider.ts +23 -0
  242. package/src/queue/core/providers/WorkerProvider.ts +244 -0
  243. package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
  244. package/src/server/{index.ts → core/index.ts} +1 -0
  245. package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
  246. package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
  247. package/src/vite/plugins/viteAlephaBuild.ts +8 -2
  248. package/src/vite/plugins/viteAlephaDev.ts +6 -2
  249. package/src/vite/tasks/buildServer.ts +1 -1
  250. package/src/vite/tasks/copyAssets.ts +32 -8
  251. package/src/vite/tasks/generateCloudflare.ts +43 -15
  252. package/src/vite/tasks/runAlepha.ts +1 -0
  253. package/dist/api-audits/index.browser.js.map +0 -1
  254. package/dist/api-audits/index.js.map +0 -1
  255. package/dist/api-files/index.browser.js.map +0 -1
  256. package/dist/api-files/index.js.map +0 -1
  257. package/dist/api-jobs/index.browser.js.map +0 -1
  258. package/dist/api-jobs/index.js.map +0 -1
  259. package/dist/api-notifications/index.browser.js.map +0 -1
  260. package/dist/api-notifications/index.d.ts +0 -327
  261. package/dist/api-notifications/index.js.map +0 -1
  262. package/dist/api-parameters/index.browser.js.map +0 -1
  263. package/dist/api-parameters/index.js.map +0 -1
  264. package/dist/api-users/index.browser.js.map +0 -1
  265. package/dist/api-users/index.js.map +0 -1
  266. package/dist/api-verifications/index.browser.js.map +0 -1
  267. package/dist/api-verifications/index.d.ts +0 -229
  268. package/dist/api-verifications/index.js.map +0 -1
  269. package/dist/cache/index.js.map +0 -1
  270. package/dist/cache-redis/index.js.map +0 -1
  271. package/dist/lock/index.js.map +0 -1
  272. package/dist/lock-redis/index.js.map +0 -1
  273. package/dist/queue/index.d.ts +0 -1265
  274. package/dist/queue/index.js +0 -1037
  275. package/dist/queue/index.js.map +0 -1
  276. package/dist/queue-redis/index.d.ts +0 -82
  277. package/dist/queue-redis/index.js +0 -872
  278. package/dist/queue-redis/index.js.map +0 -1
  279. package/dist/server/index.browser.js.map +0 -1
  280. package/dist/server/index.js.map +0 -1
  281. package/dist/server-auth/index.browser.js.map +0 -1
  282. package/dist/server-auth/index.js +0 -1973
  283. package/dist/server-auth/index.js.map +0 -1
  284. package/dist/server-cache/index.js.map +0 -1
  285. package/dist/server-compress/index.js.map +0 -1
  286. package/dist/server-cookies/index.browser.js.map +0 -1
  287. package/dist/server-cookies/index.js.map +0 -1
  288. package/dist/server-cors/index.js.map +0 -1
  289. package/dist/server-health/index.js.map +0 -1
  290. package/dist/server-helmet/index.js.map +0 -1
  291. package/dist/server-links/index.browser.js.map +0 -1
  292. package/dist/server-links/index.js.map +0 -1
  293. package/dist/server-metrics/index.js +0 -4532
  294. package/dist/server-metrics/index.js.map +0 -1
  295. package/dist/server-multipart/index.js.map +0 -1
  296. package/dist/server-proxy/index.js.map +0 -1
  297. package/dist/server-rate-limit/index.js.map +0 -1
  298. package/dist/server-security/index.browser.js.map +0 -1
  299. package/dist/server-security/index.js.map +0 -1
  300. package/dist/server-static/index.js.map +0 -1
  301. package/dist/server-swagger/index.js.map +0 -1
  302. package/dist/topic/index.js.map +0 -1
  303. package/dist/topic-redis/index.js.map +0 -1
  304. package/src/queue/interfaces/QueueJob.ts +0 -459
  305. package/src/queue/providers/MemoryQueueProvider.ts +0 -850
  306. package/src/queue/providers/QueueProvider.ts +0 -319
  307. package/src/queue/providers/WorkerProvider.ts +0 -344
  308. package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
  309. /package/src/{api-audits → api/audits}/controllers/AuditController.ts +0 -0
  310. /package/src/{api-audits → api/audits}/entities/audits.ts +0 -0
  311. /package/src/{api-audits → api/audits}/index.browser.ts +0 -0
  312. /package/src/{api-audits → api/audits}/index.ts +0 -0
  313. /package/src/{api-audits → api/audits}/primitives/$audit.ts +0 -0
  314. /package/src/{api-audits → api/audits}/schemas/auditQuerySchema.ts +0 -0
  315. /package/src/{api-audits → api/audits}/schemas/auditResourceSchema.ts +0 -0
  316. /package/src/{api-audits → api/audits}/schemas/createAuditSchema.ts +0 -0
  317. /package/src/{api-audits → api/audits}/services/AuditService.ts +0 -0
  318. /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
  319. /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
  320. /package/src/{api-files → api/files}/entities/files.ts +0 -0
  321. /package/src/{api-files → api/files}/index.browser.ts +0 -0
  322. /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
  323. /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
  324. /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
  325. /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
  326. /package/src/{api-files → api/files}/services/FileService.ts +0 -0
  327. /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
  328. /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
  329. /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
  330. /package/src/{api-jobs → api/jobs}/index.ts +0 -0
  331. /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
  332. /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
  333. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
  334. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
  335. /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
  336. /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
  337. /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
  338. /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
  339. /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
  340. /package/src/{api-notifications → api/notifications}/index.ts +0 -0
  341. /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
  342. /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
  343. /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
  344. /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
  345. /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
  346. /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
  347. /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
  348. /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
  349. /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
  350. /package/src/{api-parameters → api/parameters}/controllers/ConfigController.ts +0 -0
  351. /package/src/{api-parameters → api/parameters}/entities/parameters.ts +0 -0
  352. /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
  353. /package/src/{api-parameters → api/parameters}/primitives/$config.ts +0 -0
  354. /package/src/{api-parameters → api/parameters}/schedulers/ConfigActivationScheduler.ts +0 -0
  355. /package/src/{api-parameters → api/parameters}/services/ConfigStore.ts +0 -0
  356. /package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +0 -0
  357. /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
  358. /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
  359. /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
  360. /package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -0
  361. /package/src/{api-users → api/users}/entities/identities.ts +0 -0
  362. /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
  363. /package/src/{api-users → api/users}/entities/users.ts +0 -0
  364. /package/src/{api-users → api/users}/index.browser.ts +0 -0
  365. /package/src/{api-users → api/users}/index.ts +0 -0
  366. /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
  367. /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
  368. /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
  369. /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
  370. /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
  371. /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
  372. /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
  373. /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
  374. /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
  375. /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
  376. /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
  377. /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
  378. /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
  379. /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
  380. /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
  381. /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
  382. /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
  383. /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
  384. /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
  385. /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
  386. /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
  387. /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
  388. /package/src/{api-users → api/users}/services/RegistrationService.ts +0 -0
  389. /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
  390. /package/src/{api-users → api/users}/services/SessionService.ts +0 -0
  391. /package/src/{api-users → api/users}/services/UserService.ts +0 -0
  392. /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
  393. /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
  394. /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
  395. /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
  396. /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
  397. /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
  398. /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
  399. /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
  400. /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
  401. /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
  402. /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
  403. /package/src/cache/{index.ts → core/index.ts} +0 -0
  404. /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
  405. /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
  406. /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
  407. /package/src/{cache-redis → cache/redis}/index.ts +0 -0
  408. /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
  409. /package/src/lock/{index.ts → core/index.ts} +0 -0
  410. /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
  411. /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
  412. /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
  413. /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
  414. /package/src/{lock-redis → lock/redis}/index.ts +0 -0
  415. /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
  416. /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
  417. /package/src/{queue-redis → queue/redis}/index.ts +0 -0
  418. /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
  419. /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
  420. /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
  421. /package/src/{server-auth → server/auth}/index.ts +0 -0
  422. /package/src/{server-auth → server/auth}/primitives/$auth.ts +0 -0
  423. /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
  424. /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
  425. /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
  426. /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
  427. /package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +0 -0
  428. /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
  429. /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
  430. /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
  431. /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
  432. /package/src/{server-cache → server/cache}/index.ts +0 -0
  433. /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
  434. /package/src/{server-compress → server/compress}/index.ts +0 -0
  435. /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
  436. /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
  437. /package/src/{server-cookies → server/cookies}/index.ts +0 -0
  438. /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
  439. /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
  440. /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
  441. /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
  442. /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
  443. /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
  444. /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
  445. /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
  446. /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
  447. /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
  448. /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
  449. /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
  450. /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
  451. /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
  452. /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
  453. /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
  454. /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
  455. /package/src/server/{primitives → core/primitives}/$action.ts +0 -0
  456. /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
  457. /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
  458. /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
  459. /package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +0 -0
  460. /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
  461. /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
  462. /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
  463. /package/src/server/{providers → core/providers}/ServerRouterProvider.ts +0 -0
  464. /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
  465. /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
  466. /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
  467. /package/src/server/{services → core/services}/HttpClient.ts +0 -0
  468. /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
  469. /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
  470. /package/src/{server-cors → server/cors}/index.ts +0 -0
  471. /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
  472. /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
  473. /package/src/{server-health → server/health}/index.ts +0 -0
  474. /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
  475. /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
  476. /package/src/{server-helmet → server/helmet}/index.ts +0 -0
  477. /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
  478. /package/src/{server-links → server/links}/index.browser.ts +0 -0
  479. /package/src/{server-links → server/links}/index.ts +0 -0
  480. /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
  481. /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
  482. /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
  483. /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
  484. /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
  485. /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
  486. /package/src/{server-metrics → server/metrics}/index.ts +0 -0
  487. /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
  488. /package/src/{server-multipart → server/multipart}/index.ts +0 -0
  489. /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
  490. /package/src/{server-proxy → server/proxy}/index.ts +0 -0
  491. /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
  492. /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
  493. /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
  494. /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
  495. /package/src/{server-security → server/security}/index.browser.ts +0 -0
  496. /package/src/{server-security → server/security}/index.ts +0 -0
  497. /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
  498. /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
  499. /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
  500. /package/src/{server-static → server/static}/index.ts +0 -0
  501. /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
  502. /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
  503. /package/src/{server-swagger → server/swagger}/index.ts +0 -0
  504. /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
  505. /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
  506. /package/src/topic/{index.ts → core/index.ts} +0 -0
  507. /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
  508. /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
  509. /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
  510. /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
  511. /package/src/{topic-redis → topic/redis}/index.ts +0 -0
  512. /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
@@ -0,0 +1,391 @@
1
+ import { $env, $hook, $inject, $module, Alepha, KIND, Primitive, createPrimitive, t } from "alepha";
2
+ import { $logger } from "alepha/logger";
3
+ import { DateTimeProvider } from "alepha/datetime";
4
+
5
+ //#region ../../src/queue/core/primitives/$consumer.ts
6
+ /**
7
+ * Creates a consumer primitive to process messages from a specific queue.
8
+ *
9
+ * Provides a dedicated message consumer that connects to a queue and processes messages
10
+ * with custom handler logic, enabling scalable architectures where multiple consumers
11
+ * can process messages from the same queue.
12
+ *
13
+ * **Key Features**
14
+ * - Seamless integration with any $queue primitive
15
+ * - Full type safety inherited from queue schema
16
+ * - Automatic worker management for background processing
17
+ * - Built-in error handling and retry mechanisms
18
+ * - Support for multiple consumers per queue for horizontal scaling
19
+ *
20
+ * **Common Use Cases**
21
+ * - Email sending and notification services
22
+ * - Image and media processing workers
23
+ * - Data synchronization and background jobs
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * class EmailService {
28
+ * emailQueue = $queue({
29
+ * name: "emails",
30
+ * schema: t.object({
31
+ * to: t.text(),
32
+ * subject: t.text(),
33
+ * body: t.text()
34
+ * })
35
+ * });
36
+ *
37
+ * emailConsumer = $consumer({
38
+ * queue: this.emailQueue,
39
+ * handler: async (message) => {
40
+ * const { to, subject, body } = message.payload;
41
+ * await this.sendEmail(to, subject, body);
42
+ * }
43
+ * });
44
+ *
45
+ * async sendWelcomeEmail(userEmail: string) {
46
+ * await this.emailQueue.push({
47
+ * to: userEmail,
48
+ * subject: "Welcome!",
49
+ * body: "Thanks for joining."
50
+ * });
51
+ * }
52
+ * }
53
+ * ```
54
+ */
55
+ const $consumer = (options) => {
56
+ return createPrimitive(ConsumerPrimitive, options);
57
+ };
58
+ var ConsumerPrimitive = class extends Primitive {};
59
+ $consumer[KIND] = ConsumerPrimitive;
60
+
61
+ //#endregion
62
+ //#region ../../src/queue/core/providers/MemoryQueueProvider.ts
63
+ var MemoryQueueProvider = class {
64
+ log = $logger();
65
+ queueList = {};
66
+ async push(queue, ...messages) {
67
+ if (this.queueList[queue] == null) this.queueList[queue] = [];
68
+ this.queueList[queue].push(...messages);
69
+ }
70
+ async pop(queue) {
71
+ return this.queueList[queue]?.shift();
72
+ }
73
+ };
74
+
75
+ //#endregion
76
+ //#region ../../src/queue/core/providers/QueueProvider.ts
77
+ /**
78
+ * Minimalist Queue interface.
79
+ *
80
+ * Will be probably enhanced in the future to support more advanced features. But for now, it's enough!
81
+ */
82
+ var QueueProvider = class {};
83
+
84
+ //#endregion
85
+ //#region ../../src/queue/core/providers/WorkerProvider.ts
86
+ const envSchema = t.object({
87
+ QUEUE_WORKER_INTERVAL: t.integer({ default: 1e3 }),
88
+ QUEUE_WORKER_MAX_INTERVAL: t.integer({ default: 32e3 }),
89
+ QUEUE_WORKER_CONCURRENCY: t.integer({ default: 1 })
90
+ });
91
+ var WorkerProvider = class {
92
+ log = $logger();
93
+ env = $env(envSchema);
94
+ alepha = $inject(Alepha);
95
+ queueProvider = $inject(QueueProvider);
96
+ dateTimeProvider = $inject(DateTimeProvider);
97
+ workerPromises = [];
98
+ workersRunning = 0;
99
+ abortController = new AbortController();
100
+ workerIntervals = {};
101
+ consumers = [];
102
+ get isRunning() {
103
+ return this.workersRunning > 0;
104
+ }
105
+ start = $hook({
106
+ on: "start",
107
+ priority: "last",
108
+ handler: () => {
109
+ for (const queue of this.alepha.primitives($queue)) {
110
+ const handler = queue.options.handler;
111
+ if (handler) this.consumers.push({
112
+ handler,
113
+ queue
114
+ });
115
+ }
116
+ for (const consumer of this.alepha.primitives($consumer)) this.consumers.push(consumer.options);
117
+ if (this.consumers.length > 0) {
118
+ this.startWorkers();
119
+ this.log.debug(`Watching for ${this.consumers.length} queue${this.consumers.length > 1 ? "s" : ""} with ${this.env.QUEUE_WORKER_CONCURRENCY} worker${this.env.QUEUE_WORKER_CONCURRENCY > 1 ? "s" : ""}.`);
120
+ }
121
+ }
122
+ });
123
+ /**
124
+ * Start the workers.
125
+ * This method will create an endless loop that will check for new messages!
126
+ */
127
+ startWorkers() {
128
+ const workerToStart = this.env.QUEUE_WORKER_CONCURRENCY - this.workersRunning;
129
+ for (let i = 0; i < workerToStart; i++) {
130
+ this.workersRunning += 1;
131
+ this.log.debug(`Starting worker n-${i}`);
132
+ const workerLoop = async () => {
133
+ while (this.workersRunning > 0) {
134
+ this.log.trace(`Worker n-${i} is checking for new messages`);
135
+ const next = await this.getNextMessage();
136
+ if (next) {
137
+ this.workerIntervals[i] = 0;
138
+ await this.processMessage(next);
139
+ } else await this.waitForNextMessage(i);
140
+ }
141
+ this.log.info(`Worker n-${i} has stopped`);
142
+ if (this.workersRunning > 0) this.workersRunning -= 1;
143
+ };
144
+ this.workerPromises.push(workerLoop().catch((e) => {
145
+ this.log.error(`Worker n-${i} has crashed`, e);
146
+ this.workersRunning -= 1;
147
+ }));
148
+ }
149
+ }
150
+ stop = $hook({
151
+ on: "stop",
152
+ handler: async () => {
153
+ if (this.consumers.length > 0) await this.stopWorkers();
154
+ }
155
+ });
156
+ /**
157
+ * Wait for the next message, where `n` is the worker number.
158
+ *
159
+ * This method will wait for a certain amount of time, increasing the wait time again if no message is found.
160
+ */
161
+ async waitForNextMessage(n) {
162
+ const intervals = this.workerIntervals;
163
+ const milliseconds = intervals[n] || this.env.QUEUE_WORKER_INTERVAL;
164
+ this.log.trace(`Worker n-${n} is waiting for ${milliseconds}ms.`);
165
+ if (this.abortController.signal.aborted) {
166
+ this.log.warn(`Worker n-${n} aborted.`);
167
+ return;
168
+ }
169
+ await this.dateTimeProvider.wait(milliseconds, { signal: this.abortController.signal });
170
+ if (intervals[n]) {
171
+ if (intervals[n] < this.env.QUEUE_WORKER_MAX_INTERVAL) intervals[n] = intervals[n] * 2;
172
+ } else intervals[n] = milliseconds;
173
+ }
174
+ /**
175
+ * Get the next message.
176
+ */
177
+ async getNextMessage() {
178
+ for (const consumer of this.consumers) {
179
+ const message = await consumer.queue.provider.pop(consumer.queue.name);
180
+ if (message) return {
181
+ message,
182
+ consumer
183
+ };
184
+ }
185
+ }
186
+ /**
187
+ * Process a message from a queue.
188
+ */
189
+ async processMessage(response) {
190
+ const { message, consumer } = response;
191
+ try {
192
+ const json = JSON.parse(message);
193
+ const payload = this.alepha.codec.decode(consumer.queue.options.schema, json.payload);
194
+ await this.alepha.context.run(() => consumer.handler({ payload }));
195
+ } catch (e) {
196
+ this.log.error("Failed to process message", e);
197
+ }
198
+ }
199
+ /**
200
+ * Stop the workers.
201
+ *
202
+ * This method will stop the workers and wait for them to finish processing.
203
+ */
204
+ async stopWorkers() {
205
+ this.workersRunning = 0;
206
+ this.log.trace("Stopping workers...");
207
+ this.abortController.abort();
208
+ this.log.trace("Waiting for workers to finish...");
209
+ await Promise.all(this.workerPromises);
210
+ }
211
+ /**
212
+ * Force the workers to get back to work.
213
+ */
214
+ wakeUp() {
215
+ this.log.debug("Waking up workers...");
216
+ this.abortController.abort();
217
+ this.abortController = new AbortController();
218
+ this.startWorkers();
219
+ }
220
+ };
221
+
222
+ //#endregion
223
+ //#region ../../src/queue/core/primitives/$queue.ts
224
+ /**
225
+ * Creates a queue primitive for asynchronous message processing with background workers.
226
+ *
227
+ * The $queue primitive enables powerful asynchronous communication patterns in your application.
228
+ * It provides type-safe message queuing with automatic worker processing, making it perfect for
229
+ * decoupling components and handling background tasks efficiently.
230
+ *
231
+ * **Background Processing**
232
+ * - Automatic worker threads for non-blocking message processing
233
+ * - Built-in retry mechanisms and error handling
234
+ * - Dead letter queues for failed message handling
235
+ * - Graceful shutdown and worker lifecycle management
236
+ *
237
+ * **Type Safety**
238
+ * - Full TypeScript support with schema validation using TypeBox
239
+ * - Type-safe message payloads with automatic inference
240
+ * - Runtime validation of all queued messages
241
+ * - Compile-time errors for invalid message structures
242
+ *
243
+ * **Storage Flexibility**
244
+ * - Memory provider for development and testing
245
+ * - Redis provider for production scalability and persistence
246
+ * - Custom provider support for specialized backends
247
+ * - Automatic failover and connection pooling
248
+ *
249
+ * **Performance & Scalability**
250
+ * - Batch processing support for high-throughput scenarios
251
+ * - Horizontal scaling with distributed queue backends
252
+ * - Configurable concurrency and worker pools
253
+ * - Efficient serialization and message routing
254
+ *
255
+ * **Reliability**
256
+ * - Message persistence across application restarts
257
+ * - Automatic retry with exponential backoff
258
+ * - Dead letter handling for permanently failed messages
259
+ * - Comprehensive logging and monitoring integration
260
+ *
261
+ * @example Basic notification queue
262
+ * ```typescript
263
+ * const emailQueue = $queue({
264
+ * name: "email-notifications",
265
+ * schema: t.object({
266
+ * to: t.text(),
267
+ * subject: t.text(),
268
+ * body: t.text(),
269
+ * priority: t.optional(t.enum(["high", "normal"]))
270
+ * }),
271
+ * handler: async (message) => {
272
+ * await emailService.send(message.payload);
273
+ * console.log(`Email sent to ${message.payload.to}`);
274
+ * }
275
+ * });
276
+ *
277
+ * // Push messages for background processing
278
+ * await emailQueue.push({
279
+ * to: "user@example.com",
280
+ * subject: "Welcome!",
281
+ * body: "Welcome to our platform",
282
+ * priority: "high"
283
+ * });
284
+ * ```
285
+ *
286
+ * @example Batch processing with Redis
287
+ * ```typescript
288
+ * const imageQueue = $queue({
289
+ * name: "image-processing",
290
+ * provider: RedisQueueProvider,
291
+ * schema: t.object({
292
+ * imageId: t.text(),
293
+ * operations: t.array(t.enum(["resize", "compress", "thumbnail"]))
294
+ * }),
295
+ * handler: async (message) => {
296
+ * for (const op of message.payload.operations) {
297
+ * await processImage(message.payload.imageId, op);
298
+ * }
299
+ * }
300
+ * });
301
+ *
302
+ * // Batch processing multiple images
303
+ * await imageQueue.push(
304
+ * { imageId: "img1", operations: ["resize", "thumbnail"] },
305
+ * { imageId: "img2", operations: ["compress"] },
306
+ * { imageId: "img3", operations: ["resize", "compress", "thumbnail"] }
307
+ * );
308
+ * ```
309
+ *
310
+ * @example Development with memory provider
311
+ * ```typescript
312
+ * const taskQueue = $queue({
313
+ * name: "dev-tasks",
314
+ * provider: "memory",
315
+ * schema: t.object({
316
+ * taskType: t.enum(["cleanup", "backup", "report"]),
317
+ * data: t.record(t.text(), t.any())
318
+ * }),
319
+ * handler: async (message) => {
320
+ * switch (message.payload.taskType) {
321
+ * case "cleanup":
322
+ * await performCleanup(message.payload.data);
323
+ * break;
324
+ * case "backup":
325
+ * await createBackup(message.payload.data);
326
+ * break;
327
+ * case "report":
328
+ * await generateReport(message.payload.data);
329
+ * break;
330
+ * }
331
+ * }
332
+ * });
333
+ * ```
334
+ */
335
+ const $queue = (options) => {
336
+ return createPrimitive(QueuePrimitive, options);
337
+ };
338
+ var QueuePrimitive = class extends Primitive {
339
+ log = $logger();
340
+ workerProvider = $inject(WorkerProvider);
341
+ provider = this.$provider();
342
+ async push(...payloads) {
343
+ await Promise.all(payloads.map((payload) => this.provider.push(this.name, JSON.stringify({
344
+ headers: {},
345
+ payload: this.alepha.codec.decode(this.options.schema, payload)
346
+ }))));
347
+ this.log.debug(`Pushed to queue ${this.name}`, payloads);
348
+ this.workerProvider.wakeUp();
349
+ }
350
+ get name() {
351
+ return this.options.name || this.config.propertyKey;
352
+ }
353
+ $provider() {
354
+ if (!this.options.provider) return this.alepha.inject(QueueProvider);
355
+ if (this.options.provider === "memory") return this.alepha.inject(MemoryQueueProvider);
356
+ return this.alepha.inject(this.options.provider);
357
+ }
358
+ };
359
+ $queue[KIND] = QueuePrimitive;
360
+
361
+ //#endregion
362
+ //#region ../../src/queue/core/index.ts
363
+ /**
364
+ * Provides asynchronous message queuing and processing capabilities through declarative queue descriptors.
365
+ *
366
+ * The queue module enables reliable background job processing and message passing using the `$queue` descriptor
367
+ * on class properties. It supports schema validation, automatic retries, and multiple queue backends for
368
+ * building scalable, decoupled applications with robust error handling.
369
+ *
370
+ * @see {@link $queue}
371
+ * @see {@link $consumer}
372
+ * @module alepha.queue
373
+ */
374
+ const AlephaQueue = $module({
375
+ name: "alepha.queue",
376
+ primitives: [$queue, $consumer],
377
+ services: [
378
+ QueueProvider,
379
+ MemoryQueueProvider,
380
+ WorkerProvider
381
+ ],
382
+ register: (alepha) => alepha.with({
383
+ optional: true,
384
+ provide: QueueProvider,
385
+ use: MemoryQueueProvider
386
+ }).with(WorkerProvider)
387
+ });
388
+
389
+ //#endregion
390
+ export { $consumer, $queue, AlephaQueue, ConsumerPrimitive, MemoryQueueProvider, QueuePrimitive, QueueProvider, WorkerProvider };
391
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/queue/core/primitives/$consumer.ts","../../../src/queue/core/providers/MemoryQueueProvider.ts","../../../src/queue/core/providers/QueueProvider.ts","../../../src/queue/core/providers/WorkerProvider.ts","../../../src/queue/core/primitives/$queue.ts","../../../src/queue/core/index.ts"],"sourcesContent":["import {\n createPrimitive,\n KIND,\n Primitive,\n type Static,\n type TSchema,\n} from \"alepha\";\nimport type { QueuePrimitive } from \"./$queue.ts\";\n\n/**\n * Creates a consumer primitive to process messages from a specific queue.\n *\n * Provides a dedicated message consumer that connects to a queue and processes messages\n * with custom handler logic, enabling scalable architectures where multiple consumers\n * can process messages from the same queue.\n *\n * **Key Features**\n * - Seamless integration with any $queue primitive\n * - Full type safety inherited from queue schema\n * - Automatic worker management for background processing\n * - Built-in error handling and retry mechanisms\n * - Support for multiple consumers per queue for horizontal scaling\n *\n * **Common Use Cases**\n * - Email sending and notification services\n * - Image and media processing workers\n * - Data synchronization and background jobs\n *\n * @example\n * ```ts\n * class EmailService {\n * emailQueue = $queue({\n * name: \"emails\",\n * schema: t.object({\n * to: t.text(),\n * subject: t.text(),\n * body: t.text()\n * })\n * });\n *\n * emailConsumer = $consumer({\n * queue: this.emailQueue,\n * handler: async (message) => {\n * const { to, subject, body } = message.payload;\n * await this.sendEmail(to, subject, body);\n * }\n * });\n *\n * async sendWelcomeEmail(userEmail: string) {\n * await this.emailQueue.push({\n * to: userEmail,\n * subject: \"Welcome!\",\n * body: \"Thanks for joining.\"\n * });\n * }\n * }\n * ```\n */\nexport const $consumer = <T extends TSchema>(\n options: ConsumerPrimitiveOptions<T>,\n): ConsumerPrimitive<T> => {\n return createPrimitive(ConsumerPrimitive<T>, options);\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface ConsumerPrimitiveOptions<T extends TSchema> {\n /**\n * The queue primitive that this consumer will process messages from.\n *\n * This establishes the connection between the consumer and its source queue:\n * - The consumer inherits the queue's message schema for type safety\n * - Messages pushed to the queue will be automatically routed to this consumer\n * - Multiple consumers can be attached to the same queue for parallel processing\n * - The consumer will use the queue's provider and configuration settings\n *\n * **Queue Integration Benefits**:\n * - Type safety: Consumer handler gets fully typed message payloads\n * - Schema validation: Messages are validated before reaching the consumer\n * - Error handling: Failed messages can be retried or moved to dead letter queues\n * - Monitoring: Queue metrics include consumer processing statistics\n *\n * @example\n * ```ts\n * // First, define a queue\n * emailQueue = $queue({\n * name: \"emails\",\n * schema: t.object({ to: t.text(), subject: t.text() })\n * });\n *\n * // Then, create a consumer for that queue\n * emailConsumer = $consumer({\n * queue: this.emailQueue, // Reference the queue primitive\n * handler: async (message) => { } // process email\n * });\n * ```\n */\n queue: QueuePrimitive<T>;\n\n /**\n * Message handler function that processes individual messages from the queue.\n *\n * This function:\n * - Receives fully typed and validated message payloads from the connected queue\n * - Runs in the background worker system for non-blocking operation\n * - Should implement the core business logic for processing this message type\n * - Can throw errors to trigger the queue's retry mechanisms\n * - Has access to the full Alepha dependency injection container\n * - Should be idempotent to handle potential duplicate deliveries\n *\n * **Handler Design Guidelines**:\n * - Keep handlers focused on a single responsibility\n * - Use proper error handling and meaningful error messages\n * - Log important processing steps for debugging and monitoring\n * - Consider transaction boundaries for data consistency\n * - Make operations idempotent when possible\n * - Validate business rules within the handler logic\n *\n * **Error Handling Strategy**:\n * - Throw errors for temporary failures that should be retried\n * - Log and handle permanent failures gracefully\n * - Use specific error types to control retry behavior\n * - Consider implementing circuit breakers for external service calls\n *\n * @param message - The queue message containing the validated payload\n * @param message.payload - The typed message data based on the queue's schema\n * @returns Promise that resolves when processing is complete\n *\n * @example\n * ```ts\n * handler: async (message) => {\n * const { userId, action, data } = message.payload;\n *\n * try {\n * // Log processing start\n * this.logger.info(`Processing ${action} for user ${userId}`);\n *\n * // Validate business rules\n * if (!await this.userService.exists(userId)) {\n * throw new Error(`User ${userId} not found`);\n * }\n *\n * // Perform the main processing logic\n * switch (action) {\n * case \"create\":\n * await this.processCreation(userId, data);\n * break;\n * case \"update\":\n * await this.processUpdate(userId, data);\n * break;\n * default:\n * throw new Error(`Unknown action: ${action}`);\n * }\n *\n * // Log successful completion\n * this.logger.info(`Successfully processed ${action} for user ${userId}`);\n *\n * } catch (error) {\n * // Log error with context\n * this.logger.error(`Failed to process ${action} for user ${userId}`, {\n * error: error.message,\n * userId,\n * action,\n * data\n * });\n *\n * // Re-throw to trigger queue retry mechanism\n * throw error;\n * }\n * }\n * ```\n */\n handler: (message: { payload: Static<T> }) => Promise<void>;\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport class ConsumerPrimitive<T extends TSchema> extends Primitive<\n ConsumerPrimitiveOptions<T>\n> {}\n\n$consumer[KIND] = ConsumerPrimitive;\n","import { $logger } from \"alepha/logger\";\nimport type { QueueProvider } from \"./QueueProvider.ts\";\n\nexport class MemoryQueueProvider implements QueueProvider {\n protected readonly log = $logger();\n protected queueList: Record<string, string[]> = {};\n\n public async push(queue: string, ...messages: string[]): Promise<void> {\n if (this.queueList[queue] == null) {\n this.queueList[queue] = [];\n }\n\n this.queueList[queue].push(...messages);\n }\n\n public async pop(queue: string): Promise<string | undefined> {\n return this.queueList[queue]?.shift();\n }\n}\n","/**\n * Minimalist Queue interface.\n *\n * Will be probably enhanced in the future to support more advanced features. But for now, it's enough!\n */\nexport abstract class QueueProvider {\n /**\n * Push a message to the queue.\n *\n * @param queue Name of the queue to push the message to.\n * @param message String message to be pushed to the queue. Buffer messages are not supported for now.\n */\n public abstract push(queue: string, message: string): Promise<void>;\n\n /**\n * Pop a message from the queue.\n *\n * @param queue Name of the queue to pop the message from.\n *\n * @returns The message popped or `undefined` if the queue is empty.\n */\n public abstract pop(queue: string): Promise<string | undefined>;\n}\n","import {\n $env,\n $hook,\n $inject,\n Alepha,\n type Static,\n type TSchema,\n t,\n} from \"alepha\";\nimport { DateTimeProvider } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport { $consumer } from \"../primitives/$consumer.ts\";\nimport {\n $queue,\n type QueueMessage,\n type QueuePrimitive,\n} from \"../primitives/$queue.ts\";\nimport { QueueProvider } from \"./QueueProvider.ts\";\n\nconst envSchema = t.object({\n /**\n * The interval in milliseconds to wait before checking for new messages.\n */\n QUEUE_WORKER_INTERVAL: t.integer({\n default: 1000,\n }),\n /**\n * The maximum interval in milliseconds to wait before checking for new messages.\n */\n QUEUE_WORKER_MAX_INTERVAL: t.integer({\n default: 32000,\n }),\n /**\n * The number of workers to run concurrently. Defaults to 1.\n * Useful only if you are doing a lot of I/O.\n */\n QUEUE_WORKER_CONCURRENCY: t.integer({\n default: 1,\n }),\n});\n\ndeclare module \"alepha\" {\n interface Env extends Partial<Static<typeof envSchema>> {}\n}\n\nexport class WorkerProvider {\n protected readonly log = $logger();\n protected readonly env = $env(envSchema);\n protected readonly alepha = $inject(Alepha);\n protected readonly queueProvider = $inject(QueueProvider);\n protected readonly dateTimeProvider = $inject(DateTimeProvider);\n\n protected workerPromises: Array<Promise<void>> = [];\n protected workersRunning = 0;\n protected abortController = new AbortController();\n protected workerIntervals: Record<number, number> = {};\n protected consumers: Array<Consumer> = [];\n\n public get isRunning(): boolean {\n return this.workersRunning > 0;\n }\n\n protected readonly start = $hook({\n on: \"start\",\n priority: \"last\",\n handler: () => {\n for (const queue of this.alepha.primitives($queue)) {\n const handler = queue.options.handler;\n if (handler) {\n this.consumers.push({\n handler,\n queue,\n });\n }\n }\n\n for (const consumer of this.alepha.primitives($consumer)) {\n this.consumers.push(consumer.options);\n }\n\n if (this.consumers.length > 0) {\n this.startWorkers();\n this.log.debug(\n `Watching for ${this.consumers.length} queue${this.consumers.length > 1 ? \"s\" : \"\"} with ${this.env.QUEUE_WORKER_CONCURRENCY} worker${\n this.env.QUEUE_WORKER_CONCURRENCY > 1 ? \"s\" : \"\"\n }.`,\n );\n }\n },\n });\n\n // -------------------------------------------------------------------------------------------------------------------\n\n // Engine part - this is the part that will run the workers and process the messages\n\n /**\n * Start the workers.\n * This method will create an endless loop that will check for new messages!\n */\n protected startWorkers(): void {\n const workerToStart =\n this.env.QUEUE_WORKER_CONCURRENCY - this.workersRunning;\n\n for (let i = 0; i < workerToStart; i++) {\n this.workersRunning += 1;\n this.log.debug(`Starting worker n-${i}`);\n\n const workerLoop = async () => {\n while (this.workersRunning > 0) {\n this.log.trace(`Worker n-${i} is checking for new messages`);\n const next = await this.getNextMessage();\n if (next) {\n this.workerIntervals[i] = 0;\n await this.processMessage(next);\n } else {\n await this.waitForNextMessage(i);\n }\n }\n this.log.info(`Worker n-${i} has stopped`);\n // Only decrement if we're not already at 0 (shutdown case)\n if (this.workersRunning > 0) {\n this.workersRunning -= 1;\n }\n };\n\n this.workerPromises.push(\n workerLoop().catch((e) => {\n this.log.error(`Worker n-${i} has crashed`, e);\n // Always decrement on crash, regardless of shutdown state\n this.workersRunning -= 1;\n }),\n );\n }\n }\n\n protected readonly stop = $hook({\n on: \"stop\",\n handler: async () => {\n if (this.consumers.length > 0) {\n await this.stopWorkers();\n }\n },\n });\n\n /**\n * Wait for the next message, where `n` is the worker number.\n *\n * This method will wait for a certain amount of time, increasing the wait time again if no message is found.\n */\n protected async waitForNextMessage(n: number): Promise<void> {\n const intervals = this.workerIntervals;\n const milliseconds = intervals[n] || this.env.QUEUE_WORKER_INTERVAL;\n\n this.log.trace(`Worker n-${n} is waiting for ${milliseconds}ms.`);\n\n if (this.abortController.signal.aborted) {\n this.log.warn(`Worker n-${n} aborted.`);\n return;\n }\n\n await this.dateTimeProvider.wait(milliseconds, {\n signal: this.abortController.signal,\n });\n\n if (intervals[n]) {\n if (intervals[n] < this.env.QUEUE_WORKER_MAX_INTERVAL) {\n intervals[n] = intervals[n] * 2;\n }\n } else {\n intervals[n] = milliseconds;\n }\n }\n\n /**\n * Get the next message.\n */\n protected async getNextMessage(): Promise<undefined | NextMessage> {\n for (const consumer of this.consumers) {\n const provider = consumer.queue.provider;\n const message = await provider.pop(consumer.queue.name);\n if (message) {\n return { message, consumer };\n }\n }\n }\n\n /**\n * Process a message from a queue.\n */\n protected async processMessage(response: {\n message: any;\n consumer: Consumer;\n }) {\n const { message, consumer } = response;\n\n try {\n const json = JSON.parse(message);\n const payload = this.alepha.codec.decode(\n consumer.queue.options.schema,\n json.payload,\n );\n await this.alepha.context.run(() => consumer.handler({ payload }));\n } catch (e) {\n this.log.error(\"Failed to process message\", e);\n }\n }\n\n /**\n * Stop the workers.\n *\n * This method will stop the workers and wait for them to finish processing.\n */\n protected async stopWorkers() {\n this.workersRunning = 0;\n\n this.log.trace(\"Stopping workers...\");\n this.abortController.abort();\n\n this.log.trace(\"Waiting for workers to finish...\");\n await Promise.all(this.workerPromises);\n }\n\n /**\n * Force the workers to get back to work.\n */\n public wakeUp(): void {\n this.log.debug(\"Waking up workers...\");\n this.abortController.abort();\n this.abortController = new AbortController();\n\n // if no workers are running, start them, (should not happen, but just in case)\n this.startWorkers();\n }\n}\n\nexport interface Consumer<T extends TSchema = TSchema> {\n queue: QueuePrimitive<T>;\n handler: (message: QueueMessage<T>) => Promise<void>;\n}\n\nexport interface NextMessage {\n consumer: Consumer;\n message: string;\n}\n","import {\n $inject,\n createPrimitive,\n KIND,\n Primitive,\n type Service,\n type Static,\n type TSchema,\n} from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport { MemoryQueueProvider } from \"../providers/MemoryQueueProvider.ts\";\nimport { QueueProvider } from \"../providers/QueueProvider.ts\";\nimport { WorkerProvider } from \"../providers/WorkerProvider.ts\";\n\n/**\n * Creates a queue primitive for asynchronous message processing with background workers.\n *\n * The $queue primitive enables powerful asynchronous communication patterns in your application.\n * It provides type-safe message queuing with automatic worker processing, making it perfect for\n * decoupling components and handling background tasks efficiently.\n *\n * **Background Processing**\n * - Automatic worker threads for non-blocking message processing\n * - Built-in retry mechanisms and error handling\n * - Dead letter queues for failed message handling\n * - Graceful shutdown and worker lifecycle management\n *\n * **Type Safety**\n * - Full TypeScript support with schema validation using TypeBox\n * - Type-safe message payloads with automatic inference\n * - Runtime validation of all queued messages\n * - Compile-time errors for invalid message structures\n *\n * **Storage Flexibility**\n * - Memory provider for development and testing\n * - Redis provider for production scalability and persistence\n * - Custom provider support for specialized backends\n * - Automatic failover and connection pooling\n *\n * **Performance & Scalability**\n * - Batch processing support for high-throughput scenarios\n * - Horizontal scaling with distributed queue backends\n * - Configurable concurrency and worker pools\n * - Efficient serialization and message routing\n *\n * **Reliability**\n * - Message persistence across application restarts\n * - Automatic retry with exponential backoff\n * - Dead letter handling for permanently failed messages\n * - Comprehensive logging and monitoring integration\n *\n * @example Basic notification queue\n * ```typescript\n * const emailQueue = $queue({\n * name: \"email-notifications\",\n * schema: t.object({\n * to: t.text(),\n * subject: t.text(),\n * body: t.text(),\n * priority: t.optional(t.enum([\"high\", \"normal\"]))\n * }),\n * handler: async (message) => {\n * await emailService.send(message.payload);\n * console.log(`Email sent to ${message.payload.to}`);\n * }\n * });\n *\n * // Push messages for background processing\n * await emailQueue.push({\n * to: \"user@example.com\",\n * subject: \"Welcome!\",\n * body: \"Welcome to our platform\",\n * priority: \"high\"\n * });\n * ```\n *\n * @example Batch processing with Redis\n * ```typescript\n * const imageQueue = $queue({\n * name: \"image-processing\",\n * provider: RedisQueueProvider,\n * schema: t.object({\n * imageId: t.text(),\n * operations: t.array(t.enum([\"resize\", \"compress\", \"thumbnail\"]))\n * }),\n * handler: async (message) => {\n * for (const op of message.payload.operations) {\n * await processImage(message.payload.imageId, op);\n * }\n * }\n * });\n *\n * // Batch processing multiple images\n * await imageQueue.push(\n * { imageId: \"img1\", operations: [\"resize\", \"thumbnail\"] },\n * { imageId: \"img2\", operations: [\"compress\"] },\n * { imageId: \"img3\", operations: [\"resize\", \"compress\", \"thumbnail\"] }\n * );\n * ```\n *\n * @example Development with memory provider\n * ```typescript\n * const taskQueue = $queue({\n * name: \"dev-tasks\",\n * provider: \"memory\",\n * schema: t.object({\n * taskType: t.enum([\"cleanup\", \"backup\", \"report\"]),\n * data: t.record(t.text(), t.any())\n * }),\n * handler: async (message) => {\n * switch (message.payload.taskType) {\n * case \"cleanup\":\n * await performCleanup(message.payload.data);\n * break;\n * case \"backup\":\n * await createBackup(message.payload.data);\n * break;\n * case \"report\":\n * await generateReport(message.payload.data);\n * break;\n * }\n * }\n * });\n * ```\n */\nexport const $queue = <T extends TSchema>(\n options: QueuePrimitiveOptions<T>,\n): QueuePrimitive<T> => {\n return createPrimitive(QueuePrimitive<T>, options);\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface QueuePrimitiveOptions<T extends TSchema> {\n /**\n * Unique name for the queue.\n *\n * This name is used for:\n * - Queue identification across the system\n * - Storage backend key generation\n * - Logging and monitoring\n * - Worker assignment and routing\n *\n * If not provided, defaults to the property key where the queue is declared.\n *\n * @example \"email-notifications\"\n * @example \"image-processing\"\n * @example \"order-fulfillment\"\n */\n name?: string;\n\n /**\n * Human-readable description of the queue's purpose.\n *\n * Used for:\n * - Documentation generation\n * - Monitoring dashboards\n * - Development team communication\n * - Queue management interfaces\n *\n * @example \"Process user registration emails and welcome sequences\"\n * @example \"Handle image uploads, resizing, and thumbnail generation\"\n * @example \"Manage order processing, payment, and shipping workflows\"\n */\n description?: string;\n\n /**\n * Queue storage provider configuration.\n *\n * Options:\n * - **\"memory\"**: In-memory queue (default for development, lost on restart)\n * - **Service<QueueProvider>**: Custom provider class (e.g., RedisQueueProvider)\n * - **undefined**: Uses the default queue provider from dependency injection\n *\n * **Provider Selection Guidelines**:\n * - Development: Use \"memory\" for fast, simple testing\n * - Production: Use Redis or database-backed providers for persistence\n * - High-throughput: Use specialized providers with connection pooling\n * - Distributed systems: Use Redis or message brokers for scalability\n *\n * @default Uses injected QueueProvider\n * @example \"memory\"\n * @example RedisQueueProvider\n * @example DatabaseQueueProvider\n */\n provider?: \"memory\" | Service<QueueProvider>;\n\n /**\n * TypeBox schema defining the structure of messages in this queue.\n *\n * This schema:\n * - Validates all messages pushed to the queue\n * - Provides full TypeScript type inference\n * - Ensures type safety between producers and consumers\n * - Enables automatic serialization/deserialization\n *\n * **Schema Design Best Practices**:\n * - Keep schemas simple and focused on the specific task\n * - Use optional fields for data that might not always be available\n * - Include version fields for schema evolution\n * - Use union types for different message types in the same queue\n *\n * @example\n * ```ts\n * t.object({\n * userId: t.text(),\n * action: t.enum([\"create\", \"update\"]),\n * data: t.record(t.text(), t.any()),\n * timestamp: t.optional(t.number())\n * })\n * ```\n */\n schema: T;\n\n /**\n * Message handler function that processes queue messages.\n *\n * This function:\n * - Runs in background worker threads for non-blocking processing\n * - Receives type-safe message payloads based on the schema\n * - Should be idempotent to handle potential retries\n * - Can throw errors to trigger retry mechanisms\n * - Has access to the full Alepha dependency injection container\n *\n * **Handler Best Practices**:\n * - Keep handlers focused on a single responsibility\n * - Use proper error handling and logging\n * - Make operations idempotent when possible\n * - Validate critical business logic within handlers\n * - Consider using transactions for data consistency\n *\n * @param message - The queue message with validated payload\n * @returns Promise that resolves when processing is complete\n *\n * @example\n * ```ts\n * handler: async (message) => {\n * const { userId, email, template } = message.payload;\n *\n * try {\n * await this.emailService.send({\n * to: email,\n * template,\n * data: { userId }\n * });\n *\n * await this.userService.markEmailSent(userId, template);\n * } catch (error) {\n * // Log error and let the queue system handle retries\n * this.logger.error(`Failed to send email to ${email}`, error);\n * throw error;\n * }\n * }\n * ```\n */\n handler?: (message: QueueMessage<T>) => Promise<void>;\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport class QueuePrimitive<T extends TSchema> extends Primitive<\n QueuePrimitiveOptions<T>\n> {\n protected readonly log = $logger();\n protected readonly workerProvider = $inject(WorkerProvider);\n public readonly provider = this.$provider();\n\n public async push(...payloads: Array<Static<T>>) {\n await Promise.all(\n payloads.map((payload) =>\n this.provider.push(\n this.name,\n JSON.stringify({\n headers: {},\n payload: this.alepha.codec.decode(this.options.schema, payload),\n }),\n ),\n ),\n );\n\n this.log.debug(`Pushed to queue ${this.name}`, payloads);\n this.workerProvider.wakeUp();\n }\n\n public get name() {\n return this.options.name || this.config.propertyKey;\n }\n\n protected $provider() {\n if (!this.options.provider) {\n return this.alepha.inject(QueueProvider);\n }\n if (this.options.provider === \"memory\") {\n return this.alepha.inject(MemoryQueueProvider);\n }\n return this.alepha.inject(this.options.provider);\n }\n}\n\n$queue[KIND] = QueuePrimitive;\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface QueueMessageSchema {\n payload: TSchema;\n}\n\nexport interface QueueMessage<T extends TSchema> {\n payload: Static<T>;\n}\n","import { $module, type Alepha } from \"alepha\";\nimport { $consumer } from \"./primitives/$consumer.ts\";\nimport { $queue } from \"./primitives/$queue.ts\";\nimport { MemoryQueueProvider } from \"./providers/MemoryQueueProvider.ts\";\nimport { QueueProvider } from \"./providers/QueueProvider.ts\";\nimport { WorkerProvider } from \"./providers/WorkerProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$consumer.ts\";\nexport * from \"./primitives/$queue.ts\";\nexport * from \"./providers/MemoryQueueProvider.ts\";\nexport * from \"./providers/QueueProvider.ts\";\nexport * from \"./providers/WorkerProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Provides asynchronous message queuing and processing capabilities through declarative queue descriptors.\n *\n * The queue module enables reliable background job processing and message passing using the `$queue` descriptor\n * on class properties. It supports schema validation, automatic retries, and multiple queue backends for\n * building scalable, decoupled applications with robust error handling.\n *\n * @see {@link $queue}\n * @see {@link $consumer}\n * @module alepha.queue\n */\nexport const AlephaQueue = $module({\n name: \"alepha.queue\",\n primitives: [$queue, $consumer],\n services: [QueueProvider, MemoryQueueProvider, WorkerProvider],\n register: (alepha: Alepha) =>\n alepha\n .with({\n optional: true,\n provide: QueueProvider,\n use: MemoryQueueProvider,\n })\n .with(WorkerProvider),\n});\n"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import * as alepha1 from "alepha";
2
+ import { Static } from "alepha";
3
+ import { QueueProvider } from "alepha/queue";
4
+ import { RedisProvider } from "alepha/redis";
5
+
6
+ //#region ../../src/queue/redis/providers/RedisQueueProvider.d.ts
7
+ declare const envSchema: alepha1.TObject<{
8
+ REDIS_QUEUE_PREFIX: alepha1.TString;
9
+ }>;
10
+ declare class RedisQueueProvider implements QueueProvider {
11
+ protected readonly env: Static<typeof envSchema>;
12
+ protected readonly redisProvider: RedisProvider;
13
+ prefix(queue: string): string;
14
+ push(queue: string, message: string): Promise<void>;
15
+ pop(queue: string): Promise<string | undefined>;
16
+ }
17
+ //#endregion
18
+ //#region ../../src/queue/redis/index.d.ts
19
+ /**
20
+ * Plugin for Alepha Queue that provides Redis queue capabilities.
21
+ *
22
+ * @see {@link RedisQueueProvider}
23
+ * @module alepha.queue.redis
24
+ */
25
+ declare const AlephaQueueRedis: alepha1.Service<alepha1.Module>;
26
+ //#endregion
27
+ export { AlephaQueueRedis, RedisQueueProvider };
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/redis/providers/RedisQueueProvider.ts","../../../src/queue/redis/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAIM,WAIJ,OAAA,CAJa;sBAIb,OAAA,CAAA;;AAJI,cAMO,kBAAA,YAA8B,aAN5B,CAAA;EAMF,mBAAA,GAAmB,EACN,MADM,CAAA,OACQ,SADR,CAAA;EACQ,mBAAA,aAAA,EACJ,aADI;EAAd,MAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;EACU,IAAA,CAAA,KAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAMiB,OANjB,CAAA,IAAA,CAAA;EAMiB,GAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAIlB,OAJkB,CAAA,MAAA,GAAA,SAAA,CAAA;;;;;;;;;AAhBR;AAQhC,cCMA,gBDNmB,ECMH,OAAA,CAAA,ODNG,CCiB9B,OAAA,CAX2B,MAAA,CDNG"}
@@ -0,0 +1,43 @@
1
+ import { $env, $inject, $module, t } from "alepha";
2
+ import { AlephaQueue, QueueProvider } from "alepha/queue";
3
+ import { RedisProvider } from "alepha/redis";
4
+
5
+ //#region ../../src/queue/redis/providers/RedisQueueProvider.ts
6
+ const envSchema = t.object({ REDIS_QUEUE_PREFIX: t.text({ default: "queue" }) });
7
+ var RedisQueueProvider = class {
8
+ env = $env(envSchema);
9
+ redisProvider = $inject(RedisProvider);
10
+ prefix(queue) {
11
+ return `${this.env.REDIS_QUEUE_PREFIX}:${queue}`;
12
+ }
13
+ async push(queue, message) {
14
+ await this.redisProvider.publisher.LPUSH(this.prefix(queue), message);
15
+ }
16
+ async pop(queue) {
17
+ const value = await this.redisProvider.publisher.RPOP(this.prefix(queue));
18
+ if (value == null) return;
19
+ return String(value);
20
+ }
21
+ };
22
+
23
+ //#endregion
24
+ //#region ../../src/queue/redis/index.ts
25
+ /**
26
+ * Plugin for Alepha Queue that provides Redis queue capabilities.
27
+ *
28
+ * @see {@link RedisQueueProvider}
29
+ * @module alepha.queue.redis
30
+ */
31
+ const AlephaQueueRedis = $module({
32
+ name: "alepha.queue.redis",
33
+ services: [RedisQueueProvider],
34
+ register: (alepha) => alepha.with({
35
+ optional: true,
36
+ provide: QueueProvider,
37
+ use: RedisQueueProvider
38
+ }).with(AlephaQueue)
39
+ });
40
+
41
+ //#endregion
42
+ export { AlephaQueueRedis, RedisQueueProvider };
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/queue/redis/providers/RedisQueueProvider.ts","../../../src/queue/redis/index.ts"],"sourcesContent":["import { $env, $inject, type Static, t } from \"alepha\";\nimport type { QueueProvider } from \"alepha/queue\";\nimport { RedisProvider } from \"alepha/redis\";\n\nconst envSchema = t.object({\n REDIS_QUEUE_PREFIX: t.text({\n default: \"queue\",\n }),\n});\n\nexport class RedisQueueProvider implements QueueProvider {\n protected readonly env: Static<typeof envSchema> = $env(envSchema);\n protected readonly redisProvider: RedisProvider = $inject(RedisProvider);\n\n public prefix(queue: string): string {\n return `${this.env.REDIS_QUEUE_PREFIX}:${queue}`;\n }\n\n public async push(queue: string, message: string): Promise<void> {\n await this.redisProvider.publisher.LPUSH(this.prefix(queue), message);\n }\n\n public async pop(queue: string): Promise<string | undefined> {\n const value = await this.redisProvider.publisher.RPOP(this.prefix(queue));\n if (value == null) {\n return undefined;\n }\n\n return String(value);\n }\n}\n","import { $module, type Alepha } from \"alepha\";\nimport { AlephaQueue, QueueProvider } from \"alepha/queue\";\nimport { RedisQueueProvider } from \"./providers/RedisQueueProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/RedisQueueProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Plugin for Alepha Queue that provides Redis queue capabilities.\n *\n * @see {@link RedisQueueProvider}\n * @module alepha.queue.redis\n */\nexport const AlephaQueueRedis = $module({\n name: \"alepha.queue.redis\",\n services: [RedisQueueProvider],\n register: (alepha: Alepha) =>\n alepha\n .with({\n optional: true,\n provide: QueueProvider,\n use: RedisQueueProvider,\n })\n .with(AlephaQueue),\n});\n"],"mappings":";;;;;AAIA,MAAM,YAAY,EAAE,OAAO,EACzB,oBAAoB,EAAE,KAAK,EACzB,SAAS,SACV,CAAC,EACH,CAAC;AAEF,IAAa,qBAAb,MAAyD;CACvD,AAAmB,MAAgC,KAAK,UAAU;CAClE,AAAmB,gBAA+B,QAAQ,cAAc;CAExE,AAAO,OAAO,OAAuB;AACnC,SAAO,GAAG,KAAK,IAAI,mBAAmB,GAAG;;CAG3C,MAAa,KAAK,OAAe,SAAgC;AAC/D,QAAM,KAAK,cAAc,UAAU,MAAM,KAAK,OAAO,MAAM,EAAE,QAAQ;;CAGvE,MAAa,IAAI,OAA4C;EAC3D,MAAM,QAAQ,MAAM,KAAK,cAAc,UAAU,KAAK,KAAK,OAAO,MAAM,CAAC;AACzE,MAAI,SAAS,KACX;AAGF,SAAO,OAAO,MAAM;;;;;;;;;;;;ACZxB,MAAa,mBAAmB,QAAQ;CACtC,MAAM;CACN,UAAU,CAAC,mBAAmB;CAC9B,WAAW,WACT,OACG,KAAK;EACJ,UAAU;EACV,SAAS;EACT,KAAK;EACN,CAAC,CACD,KAAK,YAAY;CACvB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/redis/providers/RedisProvider.ts","../../src/redis/providers/RedisSubscriberProvider.ts","../../src/redis/index.ts"],"sourcesContent":[],"mappings":";;;;;;cASM,mBAAS;cAQb,OAAA,CAAA;;;AAXoE,CAAA,CAAA;eAWpE,QAAA,CAAA;wBAGsB,QAAQ,cAAc;;KAGlC,WAAA,GAAc,eAdX,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EAAA;EAAA,EAAA,EAmBP,iBAnBO;AAAA,CAAA,CAAA;AAAA,KAqBH,kBAAA,GAAqB,UArBlB,CAAA,OAqBoC,YArBpC,CAAA,CAAA,CAAA,CAAA;AAAA,KAsBH,eAAA,GAAkB,UAtBf;;;;AAWgB,cAgBlB,aAAA,CAhBkB;EAAA,mBAAA,GAAA,EAgBL,cAAA,CACF,MAjBO;EAAA,mBAAA,MAAA,EAkBJ,MAlBI;EAGnB,mBAAW,GAAA,EAAA;IAOX,cAAA,CAAA,EAAkB,MAAA,GAAA,SAAqB;IACvC,UAAA,EAAA,MAAe;IAKd,UAAA,EAAa,MAAA;EAAA,CAAA;EAEC,mBAAA,MAAA,EAEA,WAFA;EAEA,IAAA,SAAA,CAAA,CAAA,EAED,WAFC;EAED,mBAAA,KAAA,EAAW,OAAA,CAQX,aARA,CAAA,OAAA,CAAA;EAAW,mBAQX,IAAA,EAAA,OAAA,CAKD,aALC,CAAA,MAAA,CAAA;EAAA;;;EA4BW,OAAA,CAAA,CAAA,EAfX,OAeW,CAAA,IAAA,CAAA;EAAR;;;EAWI,KAAA,CAAA,CAAA,EAjBT,OAiBS,CAAA,IAAA,CAAA;EAatB,SAAA,CAAA,OAAA,CAAA,EAxBkB,OAwBlB,CAxB0B,kBAwB1B,CAAA,CAAA,EAxBgD,WAwBhD;EACG,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAdmB,OAcnB,CAd2B,MAc3B,GAAA,SAAA,CAAA;EACD,GAAA,CAAA,GAAA,EAAA,MAAA,EAAA,KAAA,EAFF,MAEE,GAAA,MAAA,EAAA,OAAA,CAAA,EADC,eACD,CAAA,EAAR,OAAQ,CAAA,MAAA,CAAA;EAAR,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAW4B,OAX5B,CAAA,OAAA,CAAA;EAW4B,IAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAKK,OALL,CAAA,MAAA,EAAA,CAAA;EAKK,GAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAKF,OALE,CAAA,IAAA,CAAA;EAKF;;;4BAWR;;;;cCnIf,uBAAA;0BAAuB,cAAA,CACZ;6BACG;EDErB,mBAQJ,aAAA,ECTkC,aDSlC;EAAA,mBAAA,MAAA,ECR2B,WDQ3B;oBCNyB;4BAAW,OAAA,CAQZ;2BAAA,OAAA,CAKD;SDfV,CAAA,CAAA,ECoBW,ODpBX,CAAA,IAAA,CAAA;EAAA,KAAA,CAAA,CAAA,EC0BS,OD1BT,CAAA,IAAA,CAAA;EAAA;;;EAW+B,UAAA,YAAA,CAAA,CAAA,ECwBlB,WDxBkB;;;;;;;;AAdwB;;cEWzD,aAAW,OAAA,CAAA,QAItB,OAAA,CAJsB,MAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/retry/errors/RetryCancelError.ts","../../src/retry/errors/RetryTimeoutError.ts","../../src/retry/providers/RetryProvider.ts","../../src/retry/primitives/$retry.ts","../../src/retry/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAEa,gBAAA,SAAyB,WAAA;;;;;cCAzB,iBAAA,SAA0B,WAAA;;;;;UCItB;;;;WAIN;EFRE;;;;ACAb;;;;ACIA;;;;EAiCiB,OAAA,CAAA,EAAA,MAAA,GAdI,mBAcJ;EAMG;;;;;EAWY,WAAA,CAAA,EAxBhB,YAwBgB;EAGf;AAgCjB;;;;EAQa,IAAA,CAAA,EAAA,CAAA,KAAA,EA5DI,KA4DJ,EAAA,GAAA,OAAA;EACW;;;;EACnB,OAAA,CAAA,EAAA,CAAA,KAAA,EAxDe,KAwDf,EAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA,EAxDgD,UAwDhD,CAxD2D,CAwD3D,CAAA,EAAA,GAAA,IAAA;EAgHkB;;;WAnKZ;;ACnCX;;;EAEoB,gBAAA,CAAA,EDuCC,WCvCD;;UD0CH,mBAAA;;;AClCjB;;;EA0BgB,OAAA,CAAA,EAAA,MAAA;EAOC;;;;;EAWK,MAAA,CAAA,EAAA,MAAA;EAKT;;;EAGqB,GAAA,CAAA,EAAA,MAAA;EACD;;;;;EAUZ,MAAA,CAAA,EAAA,OAAA;;;;;;AAcJ,cDXJ,aAAA,CCWoB;EACR,mBAAA,GAAA,EDZC,cAAA,CACF,MCWC;EACF,mBAAA,QAAA,EDXM,gBCWN;EAAX;;;EAAgB,KAAA,CAAA,UAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA,CAAA,CAAA,OAAA,EDLf,YCKe,CDLF,CCKE,CAAA,EAAA,GAAA,IAAA,EDJf,UCIe,CDJJ,CCII,CAAA,CAAA,EDHvB,OCGuB,CDHf,UCGe,CDHJ,CCGI,CAAA,CAAA;EADlB;;;iED8Ga;;;;;;AFnNvB;;cGaa;+CACF,sBAAsB,KAC9B,iBAAiB;EFfP,MAAA,EAAA,qBAAkB;;UEuBd;;ADnBjB;;EAmBqB,OAAA,ECIV,CDJU;EAOL;;;;;EAkBL,GAAA,CAAA,EAAA,MAAA;EAMU;;AAGrB;AAgCA;;;EAQ0B,OAAA,CAAA,EAAA,MAAA,GCvDL,mBDuDK;EAAb;;;;;EAER,WAAA,CAAA,EClDW,YDkDX;EAgHkB;;;;;ECtMV,IAAA,CAAA,EAAA,CAAA,KAMZ,EAqCgB,KArChB,EAAA,GAAA,OAAA;EALgC;;;;oBAgDb,iCAAiC,WAAW;;;AAvChE;EAIW,MAAA,CAAA,EAwCA,WAxCA;;AAsBK,cAuBH,cAvBG,CAAA,UAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA,CAAA,SAyBN,SAzBM,CAyBI,qBAzBJ,CAyB0B,CAzB1B,CAAA,CAAA,CAAA;EAOC,mBAAA,aAAA,EAmBiB,aAnBjB;EAMG,UAAA,kBAAA,CAAA,EAca,eAdb;EAA4C,WAAA,CAAA,IAAA,EAgB5C,aAhB4C,CAgB9B,qBAhB8B,CAgBR,CAhBQ,CAAA,CAAA;EAAX,GAAA,CAAA,GAAA,IAAA,EAwBhC,UAxBgC,CAwBrB,CAxBqB,CAAA,CAAA,EAwBhB,OAxBgB,CAwBR,UAxBQ,CAwBG,CAxBH,CAAA,CAAA;;AAK/B,UAiCL,gBAjCK,CAAA,UAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA,CAAA,SAkCZ,cAlCY,CAkCG,CAlCH,CAAA,CAAA;EAKT,CAAA,GAAA,IAAA,EA8BD,UA9Be,CA8BJ,CA9BI,CAAA,CAAA,EA8BC,OA9BD,CA8BS,UA9BT,CA8BoB,CA9BpB,CAAA,CAAA;;;;;;AHxE3B;;;;ACAa,cGiBA,WHjBkB,EGiBP,OAAA,CAAA,OHjB0B,CGqBhD,OAAA,CAJsB,MAAA,CHjB0B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/router/providers/RouterProvider.ts"],"sourcesContent":[],"mappings":";uBAEsB,yBAAyB,QAAQ;EAAjC,UAAA,cAAc,EACR,MADQ;EAAW,UAAA,IAAA,EAG7B,IAH6B,CAGxB,CAHwB,CAAA;EAAQ,UAAA,KAAA,EAItC,GAJsC,CAAA,MAAA,EAItC,UAJsC,CAItC,CAJsC,CAAA,CAAA;EAC3B,KAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAKE,UALF,CAKa,CALb,CAAA;EAEL,UAAA,IAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAL,UAAA,IAAA,CAAA,KAAA,EAkBM,CAlBN,CAAA,EAAA,IAAA;EACD,UAAA,gBAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EA+E2B,UA/E3B,CA+EsC,CA/EtC,CAAA;EAAA,UAAA,SAAA,CAAA,KAAA,EA2HY,UA3HZ,CA2HuB,CA3HvB,CAAA,CAAA,EA2H4B,UA3H5B,CA2HuC,CA3HvC,CAAA;EAAA,UAAA,WAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,MAAA,EAAA;;AAEa,UAkJb,UAlJa,CAAA,UAkJQ,KAlJR,CAAA,CAAA;EAeN,KAAA,CAAA,EAoId,CApIc;EA8D+B,MAAA,CAAA,EAuE5C,MAvE4C,CAAA,MAAA,EAAA,MAAA,CAAA;;AA4Cf,UA8BvB,KAAA,CA9BuB;EAAX,IAAA,EAAA,MAAA;EAA2B;;;AAyBxD;;;;EAEiB,SAAA,CAAA,EAaH,MAbG,CAAA,MAAA,EAAA,MAAA,CAAA;AAGjB;AAaiB,UAAA,IAAI,CAAA,UAAW,KAAX,CAAA,CAAA;EAAW,KAAA,CAAA,EACtB,CADsB;EACtB,QAAA,EAAA;IAEc,CAAA,GAAA,EAAA,MAAA,CAAA,EAAL,IAAK,CAAA,CAAA,CAAA;EAAL,CAAA;EAGP,KAAA,CAAA,EAAA;IAGc,KAAA,CAAA,EAHd,CAGc;IAAL,IAAA,EAAA,MAAA;IAIV,QAAA,EAAA;MAAC,CAAA,GAAA,EAAA,MAAA,CAAA,EAJS,IAIT,CAJc,CAId,CAAA;;;;WAAD"}
@@ -3,8 +3,8 @@ import { Alepha, Async, KIND, Primitive, Static } from "alepha";
3
3
  import * as alepha_lock0 from "alepha/lock";
4
4
  import { DateTime, DateTimeProvider, DurationLike } from "alepha/datetime";
5
5
  import * as alepha_logger0 from "alepha/logger";
6
- import * as dayjs0 from "dayjs";
7
6
  import { Cron } from "cron-schedule";
7
+ import * as dayjs0 from "dayjs";
8
8
 
9
9
  //#region ../../src/scheduler/constants/CRON.d.ts
10
10
  declare const CRON: {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/scheduler/constants/CRON.ts","../../src/scheduler/providers/CronProvider.ts","../../src/scheduler/primitives/$scheduler.ts","../../src/scheduler/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAAa;;;;;;;;;;cCKA,YAAA;yBACU;6BACI;0BAAA,cAAA,CACH;+BACO,MAAM;iBAEb,MAAM;EDXjB,mBAOZ,KAAA,ECI4B,OAAA,CAIH,aDRzB,CAAA,OAAA,CAAA;2BCQyB,OAAA,CAeD;gCASO;uBAmBF;EArDjB;;;;;EAIkB,aAAA,CAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA;IAED,GAAA,EAsEA,QAtEA;EAAN,CAAA,EAAA,GAsEqB,OAtErB,CAAA,IAAA,CAAA,EAAA,KAAA,CAAA,EAAA,OAAA,CAAA,EAAA,IAAA;EAAK,UAIH,GAAA,CAAA,IAAA,EAqFJ,OArFI,EAAA,GAAA,CAAA,EAqFG,MAAA,CAAK,KArFR,CAAA,EAAA,IAAA;;AAwBM,UA0Gf,OAAA,CA1Ge;EAmBF,IAAA,EAAA,MAAA;EAuBA,UAAA,EAAA,MAAA;EAAe,OAAA,EAAA,CAAA,OAAA,EAAA;IAmBvB,GAAA,EAgDM,QAhDN;EAAO,CAAA,EAAA,GAgDc,OAhDT,CAAA,IAAA,CAAA;EAAgB,IAAA,EAiD1C,IAjD0C;EA6CjC,IAAA,EAAA,OAAO;EAGI,OAAA,CAAA,EAAA,OAAA;EAAe,OAAA,CAAA,EAAA,CAAA,KAAA,EAIvB,KAJuB,EAAA,GAAA,IAAA;EACnC,KAAA,EAIC,eAJD;;;;;;;cC9HK;YACF,4BACR;;AFzBH,CAAA;KE+BY,yBAAA;;;AD1BZ;EACuB,OAAA,EAAA,CAAA,IAAA,EC6BL,yBD7BK,EAAA,GC6ByB,KD7BzB,CAAA,IAAA,CAAA;EACI;;;EAEI,IAAA,CAAA,EAAA,MAAA;EAED;;;EAIJ,WAeD,CAAA,EAAA,MAAA;EASO;;;EA0Ca,IAAA,CAAA,EAAA,MAAA;EAmBvB;;;EA6CL,QAAA,CAAA,EC1FJ,YD0FW;EAGI;;;;;;;;cChFtB,mBAAS;EA7CF,gBAIZ,mBAAA,CA+CC,OAAA,CAAA,OAAA,CA/CD;CAHU,CAAA;eACR,QAAA,CAAA;wBAoDqB,QAAQ,cAAc;;AA9ClC,cAiDC,kBAAA,SAA2B,SAjDH,CAiDa,yBAjDb,CAAA,CAAA;EAInB,mBAAA,GAAA,EA6CyD,cAAA,CACnD,MA9CN;EAA8B,mBAAA,GAAA,EAAA;IAoBnC,gBAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAAY,CAAA;EAanB,mBAMJ,MAAA,EASyB,MATzB;EAAA,mBAAA,gBAAA,EAUmC,gBAVnC;mCAW+B;UAjBlB,CAAA,CAAA,EAAA,MAAA;EAAA,UAAA,MAAA,CAAA,CAAA,EAAA,IAAA;EAAA,OAAA,CAAA,CAAA,EAwCW,OAxCX,CAAA,IAAA,CAAA;EAAA,UAAA,aAAA,EAkHoC,YAAA,CAP1B,aA3GV,CAAA,CAAA,IAAA,EAkHW,yBAlHX,EAAA,GAkHoC,OAlHpC,CAAA,IAAA,CAAA,CAAA;;AAS+B,UAmH7B,yBAAA,CAnH6B;EAAd,GAAA,EAoHzB,QApHyB;;;;;;;;WC3DrB;MHXV,OAAA,EAAA,MAAA;;;;MCFY,OAAY,EAAA,MAAA;IACF,CAAA;IACI,iBAAA,EAAA;MAAA,IACH,EAAA,MAAA;MACa,KAAA,EEiBxB,KFjBwB;MAAN,OAAA,EAAA,MAAA;IAED,CAAA;IAAN,eAAA,EAAA;MAIE,IAAA,EAAA,MAAA;MAeD,OAAA,EAAA,MAAA;IASO,CAAA;EAmBF;;;;;;AAuF9B;;AAG2C,cE1G9B,eF0G8B,EE1Gf,OAAA,CAAA,OF0Ge,CEtGzC,OAAA,CAJ0B,MAAA,CF0Ge"}