alepha 0.13.7 → 0.13.8

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 (424) 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 +8 -8
  8. package/dist/{api-audits → api/audits}/index.js +8 -8
  9. package/dist/api/audits/index.js.map +1 -0
  10. package/dist/{api-files → api/files}/index.browser.js +5 -5
  11. package/dist/api/files/index.browser.js.map +1 -0
  12. package/dist/{api-files → api/files}/index.d.ts +16 -9
  13. package/dist/{api-files → api/files}/index.js +10 -10
  14. package/dist/api/files/index.js.map +1 -0
  15. package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
  16. package/dist/api/jobs/index.browser.js.map +1 -0
  17. package/dist/{api-jobs → api/jobs}/index.d.ts +35 -35
  18. package/dist/{api-jobs → api/jobs}/index.js +9 -9
  19. package/dist/api/jobs/index.js.map +1 -0
  20. package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
  21. package/dist/api/notifications/index.browser.js.map +1 -0
  22. package/dist/api/notifications/index.d.ts +327 -0
  23. package/dist/{api-notifications → api/notifications}/index.js +11 -11
  24. package/dist/api/notifications/index.js.map +1 -0
  25. package/dist/{api-parameters → api/parameters}/index.browser.js +2 -2
  26. package/dist/api/parameters/index.browser.js.map +1 -0
  27. package/dist/{api-parameters → api/parameters}/index.d.ts +7 -7
  28. package/dist/{api-parameters → api/parameters}/index.js +7 -7
  29. package/dist/api/parameters/index.js.map +1 -0
  30. package/dist/{api-users → api/users}/index.browser.js +6 -6
  31. package/dist/api/users/index.browser.js.map +1 -0
  32. package/dist/{api-users → api/users}/index.d.ts +844 -845
  33. package/dist/{api-users → api/users}/index.js +99 -766
  34. package/dist/api/users/index.js.map +1 -0
  35. package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
  36. package/dist/api/verifications/index.browser.js.map +1 -0
  37. package/dist/api/verifications/index.d.ts +248 -0
  38. package/dist/{api-verifications → api/verifications}/index.js +11 -11
  39. package/dist/api/verifications/index.js.map +1 -0
  40. package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
  41. package/dist/cache/{index.js → core/index.js} +5 -5
  42. package/dist/cache/core/index.js.map +1 -0
  43. package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
  44. package/dist/{cache-redis → cache/redis}/index.js +2 -2
  45. package/dist/cache/redis/index.js.map +1 -0
  46. package/dist/cli/index.d.ts +34 -26
  47. package/dist/cli/index.js +75 -46
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/command/index.d.ts +4 -4
  50. package/dist/core/index.browser.js.map +1 -1
  51. package/dist/core/index.js.map +1 -1
  52. package/dist/core/index.native.js.map +1 -1
  53. package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
  54. package/dist/lock/{index.js → core/index.js} +5 -5
  55. package/dist/lock/core/index.js.map +1 -0
  56. package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
  57. package/dist/{lock-redis → lock/redis}/index.js +2 -2
  58. package/dist/lock/redis/index.js.map +1 -0
  59. package/dist/queue/core/index.d.ts +548 -0
  60. package/dist/queue/core/index.js +391 -0
  61. package/dist/queue/core/index.js.map +1 -0
  62. package/dist/queue/redis/index.d.ts +28 -0
  63. package/dist/queue/redis/index.js +43 -0
  64. package/dist/queue/redis/index.js.map +1 -0
  65. package/dist/scheduler/index.d.ts +1 -1
  66. package/dist/scheduler/index.js +1 -393
  67. package/dist/scheduler/index.js.map +1 -1
  68. package/dist/security/index.d.ts +1 -1
  69. package/dist/security/index.js +2 -1413
  70. package/dist/security/index.js.map +1 -1
  71. package/dist/{server-auth → server/auth}/index.browser.js +6 -6
  72. package/dist/server/auth/index.browser.js.map +1 -0
  73. package/dist/{server-auth → server/auth}/index.d.ts +167 -167
  74. package/dist/server/auth/index.js +742 -0
  75. package/dist/server/auth/index.js.map +1 -0
  76. package/dist/{server-cache → server/cache}/index.d.ts +2 -2
  77. package/dist/{server-cache → server/cache}/index.js +2 -2
  78. package/dist/server/cache/index.js.map +1 -0
  79. package/dist/{server-compress → server/compress}/index.d.ts +2 -2
  80. package/dist/{server-compress → server/compress}/index.js +2 -2
  81. package/dist/server/compress/index.js.map +1 -0
  82. package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
  83. package/dist/server/cookies/index.browser.js.map +1 -0
  84. package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
  85. package/dist/{server-cookies → server/cookies}/index.js +4 -4
  86. package/dist/server/cookies/index.js.map +1 -0
  87. package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
  88. package/dist/server/core/index.browser.js.map +1 -0
  89. package/dist/server/{index.d.ts → core/index.d.ts} +36 -36
  90. package/dist/server/{index.js → core/index.js} +27 -27
  91. package/dist/server/core/index.js.map +1 -0
  92. package/dist/{server-cors → server/cors}/index.d.ts +3 -3
  93. package/dist/{server-cors → server/cors}/index.js +3 -3
  94. package/dist/server/cors/index.js.map +1 -0
  95. package/dist/{server-health → server/health}/index.d.ts +3 -3
  96. package/dist/{server-health → server/health}/index.js +3 -3
  97. package/dist/server/health/index.js.map +1 -0
  98. package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
  99. package/dist/{server-helmet → server/helmet}/index.js +2 -2
  100. package/dist/server/helmet/index.js.map +1 -0
  101. package/dist/{server-links → server/links}/index.browser.js +5 -5
  102. package/dist/server/links/index.browser.js.map +1 -0
  103. package/dist/{server-links → server/links}/index.d.ts +7 -7
  104. package/dist/{server-links → server/links}/index.js +7 -7
  105. package/dist/server/links/index.js.map +1 -0
  106. package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
  107. package/dist/server/metrics/index.js +74 -0
  108. package/dist/server/metrics/index.js.map +1 -0
  109. package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
  110. package/dist/{server-multipart → server/multipart}/index.js +2 -2
  111. package/dist/server/multipart/index.js.map +1 -0
  112. package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
  113. package/dist/{server-proxy → server/proxy}/index.js +3 -3
  114. package/dist/server/proxy/index.js.map +1 -0
  115. package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
  116. package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
  117. package/dist/server/rate-limit/index.js.map +1 -0
  118. package/dist/{server-security → server/security}/index.browser.js +1 -1
  119. package/dist/server/security/index.browser.js.map +1 -0
  120. package/dist/{server-security → server/security}/index.d.ts +13 -13
  121. package/dist/{server-security → server/security}/index.js +4 -4
  122. package/dist/server/security/index.js.map +1 -0
  123. package/dist/{server-static → server/static}/index.d.ts +3 -3
  124. package/dist/{server-static → server/static}/index.js +3 -3
  125. package/dist/server/static/index.js.map +1 -0
  126. package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
  127. package/dist/{server-swagger → server/swagger}/index.js +4 -4
  128. package/dist/server/swagger/index.js.map +1 -0
  129. package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
  130. package/dist/topic/{index.js → core/index.js} +6 -6
  131. package/dist/topic/core/index.js.map +1 -0
  132. package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
  133. package/dist/{topic-redis → topic/redis}/index.js +2 -2
  134. package/dist/topic/redis/index.js.map +1 -0
  135. package/dist/vite/index.d.ts +11 -0
  136. package/dist/vite/index.js +12 -5
  137. package/dist/vite/index.js.map +1 -1
  138. package/package.json +156 -157
  139. package/src/{api-files → api/files}/index.ts +1 -0
  140. package/src/{api-parameters → api/parameters}/index.ts +1 -1
  141. package/src/{api-users → api/users}/primitives/$userRealm.ts +1 -1
  142. package/src/{api-users → api/users}/providers/UserRealmProvider.ts +6 -7
  143. package/src/{api-verifications → api/verifications}/index.ts +2 -0
  144. package/src/cli/apps/AlephaPackageBuilderCli.ts +73 -48
  145. package/src/cli/assets/appRouterTs.ts +1 -1
  146. package/src/cli/assets/biomeJson.ts +1 -1
  147. package/src/cli/assets/indexHtml.ts +1 -1
  148. package/src/cli/assets/mainBrowserTs.ts +1 -1
  149. package/src/cli/assets/viteConfigTs.ts +1 -1
  150. package/src/cli/commands/CoreCommands.ts +10 -6
  151. package/src/cli/commands/VerifyCommands.ts +4 -1
  152. package/src/cli/commands/ViteCommands.ts +20 -9
  153. package/src/cli/services/AlephaCliUtils.ts +29 -14
  154. package/src/core/providers/SchemaValidator.ts +1 -1
  155. package/src/queue/{index.ts → core/index.ts} +2 -3
  156. package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
  157. package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
  158. package/src/queue/core/providers/QueueProvider.ts +23 -0
  159. package/src/queue/core/providers/WorkerProvider.ts +244 -0
  160. package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
  161. package/src/server/{index.ts → core/index.ts} +1 -0
  162. package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
  163. package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
  164. package/src/vite/tasks/copyAssets.ts +32 -8
  165. package/dist/api-audits/index.browser.js.map +0 -1
  166. package/dist/api-audits/index.js.map +0 -1
  167. package/dist/api-files/index.browser.js.map +0 -1
  168. package/dist/api-files/index.js.map +0 -1
  169. package/dist/api-jobs/index.browser.js.map +0 -1
  170. package/dist/api-jobs/index.js.map +0 -1
  171. package/dist/api-notifications/index.browser.js.map +0 -1
  172. package/dist/api-notifications/index.d.ts +0 -327
  173. package/dist/api-notifications/index.js.map +0 -1
  174. package/dist/api-parameters/index.browser.js.map +0 -1
  175. package/dist/api-parameters/index.js.map +0 -1
  176. package/dist/api-users/index.browser.js.map +0 -1
  177. package/dist/api-users/index.js.map +0 -1
  178. package/dist/api-verifications/index.browser.js.map +0 -1
  179. package/dist/api-verifications/index.d.ts +0 -229
  180. package/dist/api-verifications/index.js.map +0 -1
  181. package/dist/cache/index.js.map +0 -1
  182. package/dist/cache-redis/index.js.map +0 -1
  183. package/dist/lock/index.js.map +0 -1
  184. package/dist/lock-redis/index.js.map +0 -1
  185. package/dist/queue/index.d.ts +0 -1265
  186. package/dist/queue/index.js +0 -1037
  187. package/dist/queue/index.js.map +0 -1
  188. package/dist/queue-redis/index.d.ts +0 -82
  189. package/dist/queue-redis/index.js +0 -872
  190. package/dist/queue-redis/index.js.map +0 -1
  191. package/dist/server/index.browser.js.map +0 -1
  192. package/dist/server/index.js.map +0 -1
  193. package/dist/server-auth/index.browser.js.map +0 -1
  194. package/dist/server-auth/index.js +0 -1973
  195. package/dist/server-auth/index.js.map +0 -1
  196. package/dist/server-cache/index.js.map +0 -1
  197. package/dist/server-compress/index.js.map +0 -1
  198. package/dist/server-cookies/index.browser.js.map +0 -1
  199. package/dist/server-cookies/index.js.map +0 -1
  200. package/dist/server-cors/index.js.map +0 -1
  201. package/dist/server-health/index.js.map +0 -1
  202. package/dist/server-helmet/index.js.map +0 -1
  203. package/dist/server-links/index.browser.js.map +0 -1
  204. package/dist/server-links/index.js.map +0 -1
  205. package/dist/server-metrics/index.js +0 -4532
  206. package/dist/server-metrics/index.js.map +0 -1
  207. package/dist/server-multipart/index.js.map +0 -1
  208. package/dist/server-proxy/index.js.map +0 -1
  209. package/dist/server-rate-limit/index.js.map +0 -1
  210. package/dist/server-security/index.browser.js.map +0 -1
  211. package/dist/server-security/index.js.map +0 -1
  212. package/dist/server-static/index.js.map +0 -1
  213. package/dist/server-swagger/index.js.map +0 -1
  214. package/dist/topic/index.js.map +0 -1
  215. package/dist/topic-redis/index.js.map +0 -1
  216. package/src/queue/interfaces/QueueJob.ts +0 -459
  217. package/src/queue/providers/MemoryQueueProvider.ts +0 -850
  218. package/src/queue/providers/QueueProvider.ts +0 -319
  219. package/src/queue/providers/WorkerProvider.ts +0 -344
  220. package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
  221. /package/src/{api-audits → api/audits}/controllers/AuditController.ts +0 -0
  222. /package/src/{api-audits → api/audits}/entities/audits.ts +0 -0
  223. /package/src/{api-audits → api/audits}/index.browser.ts +0 -0
  224. /package/src/{api-audits → api/audits}/index.ts +0 -0
  225. /package/src/{api-audits → api/audits}/primitives/$audit.ts +0 -0
  226. /package/src/{api-audits → api/audits}/schemas/auditQuerySchema.ts +0 -0
  227. /package/src/{api-audits → api/audits}/schemas/auditResourceSchema.ts +0 -0
  228. /package/src/{api-audits → api/audits}/schemas/createAuditSchema.ts +0 -0
  229. /package/src/{api-audits → api/audits}/services/AuditService.ts +0 -0
  230. /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
  231. /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
  232. /package/src/{api-files → api/files}/entities/files.ts +0 -0
  233. /package/src/{api-files → api/files}/index.browser.ts +0 -0
  234. /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
  235. /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
  236. /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
  237. /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
  238. /package/src/{api-files → api/files}/services/FileService.ts +0 -0
  239. /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
  240. /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
  241. /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
  242. /package/src/{api-jobs → api/jobs}/index.ts +0 -0
  243. /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
  244. /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
  245. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
  246. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
  247. /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
  248. /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
  249. /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
  250. /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
  251. /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
  252. /package/src/{api-notifications → api/notifications}/index.ts +0 -0
  253. /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
  254. /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
  255. /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
  256. /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
  257. /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
  258. /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
  259. /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
  260. /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
  261. /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
  262. /package/src/{api-parameters → api/parameters}/controllers/ConfigController.ts +0 -0
  263. /package/src/{api-parameters → api/parameters}/entities/parameters.ts +0 -0
  264. /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
  265. /package/src/{api-parameters → api/parameters}/primitives/$config.ts +0 -0
  266. /package/src/{api-parameters → api/parameters}/schedulers/ConfigActivationScheduler.ts +0 -0
  267. /package/src/{api-parameters → api/parameters}/services/ConfigStore.ts +0 -0
  268. /package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +0 -0
  269. /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
  270. /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
  271. /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
  272. /package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -0
  273. /package/src/{api-users → api/users}/entities/identities.ts +0 -0
  274. /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
  275. /package/src/{api-users → api/users}/entities/users.ts +0 -0
  276. /package/src/{api-users → api/users}/index.browser.ts +0 -0
  277. /package/src/{api-users → api/users}/index.ts +0 -0
  278. /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
  279. /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
  280. /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
  281. /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
  282. /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
  283. /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
  284. /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
  285. /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
  286. /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
  287. /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
  288. /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
  289. /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
  290. /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
  291. /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
  292. /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
  293. /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
  294. /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
  295. /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
  296. /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
  297. /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
  298. /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
  299. /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
  300. /package/src/{api-users → api/users}/services/RegistrationService.ts +0 -0
  301. /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
  302. /package/src/{api-users → api/users}/services/SessionService.ts +0 -0
  303. /package/src/{api-users → api/users}/services/UserService.ts +0 -0
  304. /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
  305. /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
  306. /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
  307. /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
  308. /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
  309. /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
  310. /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
  311. /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
  312. /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
  313. /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
  314. /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
  315. /package/src/cache/{index.ts → core/index.ts} +0 -0
  316. /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
  317. /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
  318. /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
  319. /package/src/{cache-redis → cache/redis}/index.ts +0 -0
  320. /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
  321. /package/src/lock/{index.ts → core/index.ts} +0 -0
  322. /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
  323. /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
  324. /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
  325. /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
  326. /package/src/{lock-redis → lock/redis}/index.ts +0 -0
  327. /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
  328. /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
  329. /package/src/{queue-redis → queue/redis}/index.ts +0 -0
  330. /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
  331. /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
  332. /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
  333. /package/src/{server-auth → server/auth}/index.ts +0 -0
  334. /package/src/{server-auth → server/auth}/primitives/$auth.ts +0 -0
  335. /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
  336. /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
  337. /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
  338. /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
  339. /package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +0 -0
  340. /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
  341. /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
  342. /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
  343. /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
  344. /package/src/{server-cache → server/cache}/index.ts +0 -0
  345. /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
  346. /package/src/{server-compress → server/compress}/index.ts +0 -0
  347. /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
  348. /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
  349. /package/src/{server-cookies → server/cookies}/index.ts +0 -0
  350. /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
  351. /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
  352. /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
  353. /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
  354. /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
  355. /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
  356. /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
  357. /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
  358. /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
  359. /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
  360. /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
  361. /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
  362. /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
  363. /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
  364. /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
  365. /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
  366. /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
  367. /package/src/server/{primitives → core/primitives}/$action.ts +0 -0
  368. /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
  369. /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
  370. /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
  371. /package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +0 -0
  372. /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
  373. /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
  374. /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
  375. /package/src/server/{providers → core/providers}/ServerRouterProvider.ts +0 -0
  376. /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
  377. /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
  378. /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
  379. /package/src/server/{services → core/services}/HttpClient.ts +0 -0
  380. /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
  381. /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
  382. /package/src/{server-cors → server/cors}/index.ts +0 -0
  383. /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
  384. /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
  385. /package/src/{server-health → server/health}/index.ts +0 -0
  386. /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
  387. /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
  388. /package/src/{server-helmet → server/helmet}/index.ts +0 -0
  389. /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
  390. /package/src/{server-links → server/links}/index.browser.ts +0 -0
  391. /package/src/{server-links → server/links}/index.ts +0 -0
  392. /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
  393. /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
  394. /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
  395. /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
  396. /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
  397. /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
  398. /package/src/{server-metrics → server/metrics}/index.ts +0 -0
  399. /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
  400. /package/src/{server-multipart → server/multipart}/index.ts +0 -0
  401. /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
  402. /package/src/{server-proxy → server/proxy}/index.ts +0 -0
  403. /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
  404. /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
  405. /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
  406. /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
  407. /package/src/{server-security → server/security}/index.browser.ts +0 -0
  408. /package/src/{server-security → server/security}/index.ts +0 -0
  409. /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
  410. /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
  411. /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
  412. /package/src/{server-static → server/static}/index.ts +0 -0
  413. /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
  414. /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
  415. /package/src/{server-swagger → server/swagger}/index.ts +0 -0
  416. /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
  417. /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
  418. /package/src/topic/{index.ts → core/index.ts} +0 -0
  419. /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
  420. /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
  421. /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
  422. /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
  423. /package/src/{topic-redis → topic/redis}/index.ts +0 -0
  424. /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
@@ -37,8 +37,10 @@ export class AlephaPackageBuilderCli {
37
37
  pkgData.exports = {};
38
38
 
39
39
  for (const item of modules) {
40
- const path =
41
- item.name === "core" ? "." : `./${item.name.replace("-", "/")}`;
40
+ let m = `./${item.name.replace("core", "")}`;
41
+ if (m.endsWith("/")) m = m.slice(0, -1);
42
+ const path = m;
43
+
42
44
  pkgData.exports[path] = {};
43
45
  // order is important here for compatibility
44
46
  pkgData.exports[path].types = `./src/${item.name}/index.ts`;
@@ -81,7 +83,8 @@ export class AlephaPackageBuilderCli {
81
83
  "alepha",
82
84
  packageName,
83
85
  ...modules.map(
84
- (item) => `${packageName}/${item.name.replace("-", "/")}`,
86
+ (item) =>
87
+ `${packageName}/${item.name.replace("-", "/").replace("/core", "")}`,
85
88
  ),
86
89
  ];
87
90
 
@@ -124,13 +127,16 @@ export class AlephaPackageBuilderCli {
124
127
  });
125
128
  }
126
129
 
127
- const config = join(tmpDir, `tsdown-${item.name}.config.js`);
130
+ const config = join(
131
+ tmpDir,
132
+ `tsdown-${item.name.replace("/", "-")}.config.js`,
133
+ );
128
134
  await this.fs.writeFile(
129
135
  config,
130
136
  `export default ${JSON.stringify(entries, null, 2)};`,
131
137
  );
132
138
  await run(`npx tsdown -c=${config}`);
133
- await this.fs.rm(config);
139
+ //await this.fs.rm(config);
134
140
  };
135
141
 
136
142
  const concurrency = Math.ceil(os.cpus().length / 2);
@@ -257,57 +263,76 @@ export async function analyzeModules(
257
263
  packageName: string,
258
264
  ): Promise<Module[]> {
259
265
  const modules: Module[] = [];
260
- const entries = await readdir(srcDir, { withFileTypes: true });
261
-
262
- for (const entry of entries) {
263
- if (entry.isDirectory()) {
264
- const moduleName = entry.name;
265
- const modulePath = join(srcDir, moduleName);
266
- const dependencies = new Set<string>();
267
-
268
- // Check for browser/node entry points
269
- const hasBrowser = await fileExists(join(modulePath, "index.browser.ts"));
270
- const hasNative = await fileExists(join(modulePath, "index.native.ts"));
271
- const hasNode = await fileExists(join(modulePath, "index.node.ts"));
272
-
273
- // Get all .ts/.tsx files in this module
274
- const files = await getAllFiles(modulePath);
275
-
276
- for (const file of files) {
277
- const content = await readFile(file, "utf-8");
278
- const deps = extractAlephaDependencies(
279
- content,
280
- packageName,
281
- moduleName,
282
- );
283
- for (const dep of deps) {
284
- if (dep.endsWith(".ts")) {
285
- throw new Error(
286
- `Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`,
287
- );
288
- }
289
- if (dep.includes("-")) {
290
- throw new Error(
291
- `Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`,
266
+
267
+ async function scanDirectory(dir: string, prefix: string): Promise<void> {
268
+ const entries = await readdir(dir, { withFileTypes: true });
269
+
270
+ for (const entry of entries) {
271
+ if (entry.isDirectory()) {
272
+ const moduleName = prefix ? `${prefix}/${entry.name}` : entry.name;
273
+ const modulePath = join(dir, entry.name);
274
+
275
+ // Check if this directory has an index.ts (is a module)
276
+ const hasIndex = await fileExists(join(modulePath, "index.ts"));
277
+
278
+ if (hasIndex) {
279
+ // This is a module
280
+ const dependencies = new Set<string>();
281
+
282
+ // Check for browser/node entry points
283
+ const hasBrowser = await fileExists(
284
+ join(modulePath, "index.browser.ts"),
285
+ );
286
+ const hasNative = await fileExists(
287
+ join(modulePath, "index.native.ts"),
288
+ );
289
+ const hasNode = await fileExists(join(modulePath, "index.node.ts"));
290
+
291
+ // Get all .ts/.tsx files in this module
292
+ const files = await getAllFiles(modulePath);
293
+
294
+ for (const file of files) {
295
+ const content = await readFile(file, "utf-8");
296
+ const deps = extractAlephaDependencies(
297
+ content,
298
+ packageName,
299
+ moduleName,
292
300
  );
301
+ for (const dep of deps) {
302
+ if (dep.endsWith(".ts")) {
303
+ throw new Error(
304
+ `Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`,
305
+ );
306
+ }
307
+ if (dep.includes("-")) {
308
+ throw new Error(
309
+ `Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`,
310
+ );
311
+ }
312
+ dependencies.add(dep);
313
+ }
293
314
  }
294
- dependencies.add(dep);
295
- }
296
- }
297
315
 
298
- const module: Module = {
299
- name: moduleName,
300
- dependencies: Array.from(dependencies),
301
- };
316
+ const module: Module = {
317
+ name: moduleName,
318
+ dependencies: Array.from(dependencies),
319
+ };
302
320
 
303
- if (hasNative) module.native = true;
304
- if (hasBrowser) module.browser = true;
305
- if (hasNode) module.node = true;
321
+ if (hasNative) module.native = true;
322
+ if (hasBrowser) module.browser = true;
323
+ if (hasNode) module.node = true;
306
324
 
307
- modules.push(module);
325
+ modules.push(module);
326
+ } else {
327
+ // No index.ts, check subdirectories for modules
328
+ await scanDirectory(modulePath, moduleName);
329
+ }
330
+ }
308
331
  }
309
332
  }
310
333
 
334
+ await scanDirectory(srcDir, "");
335
+
311
336
  // Check for circular dependencies
312
337
  detectCircularDependencies(modules);
313
338
 
@@ -6,4 +6,4 @@ export class AppRouter {
6
6
  component: () => "Hello World",
7
7
  });
8
8
  }
9
- `.trim()
9
+ `.trim();
@@ -30,4 +30,4 @@ export const biomeJson = `
30
30
  }
31
31
  }
32
32
  }
33
- `.trim()
33
+ `.trim();
@@ -12,4 +12,4 @@ export const indexHtml = (
12
12
  <script type="module" src="${browserEntry}"></script>
13
13
  </body>
14
14
  </html>
15
- `.trim()
15
+ `.trim();
@@ -7,4 +7,4 @@ const alepha = Alepha.create();
7
7
  alepha.with(AppRouter);
8
8
 
9
9
  run(alepha);
10
- `.trim()
10
+ `.trim();
@@ -11,4 +11,4 @@ export default {
11
11
  globals: true,
12
12
  },
13
13
  };
14
- `.trim()
14
+ `.trim();
@@ -51,10 +51,6 @@ export class CoreCommands {
51
51
  name: "init",
52
52
  description: "Add missing Alepha configuration files to the project",
53
53
  flags: t.object({
54
- // TODO:
55
- // force: t.boolean({
56
- // description: "If true, all config files will be overwritten",
57
- // }),
58
54
  // choose package manager
59
55
  yarn: t.optional(t.boolean({ description: "Use Yarn package manager" })),
60
56
  pnpm: t.optional(t.boolean({ description: "Use pnpm package manager" })),
@@ -76,6 +72,8 @@ export class CoreCommands {
76
72
  flags.react = true;
77
73
  }
78
74
 
75
+ const isExpo = await this.utils.hasExpo(root);
76
+
79
77
  await run({
80
78
  name: "ensuring configuration files",
81
79
  handler: async () => {
@@ -83,9 +81,9 @@ export class CoreCommands {
83
81
  tsconfigJson: true,
84
82
  packageJson: flags,
85
83
  biomeJson: true,
86
- viteConfigTs: true,
84
+ viteConfigTs: !isExpo,
87
85
  editorconfig: true,
88
- indexHtml: !!flags.react,
86
+ indexHtml: !!flags.react && !isExpo,
89
87
  });
90
88
 
91
89
  // Create src/main.ts if src directory is empty or doesn't exist
@@ -111,6 +109,12 @@ export class CoreCommands {
111
109
  alias: `installing dependencies with ${pm}`,
112
110
  });
113
111
 
112
+ if (!isExpo) {
113
+ await this.utils.ensureDependency(root, "vite", { run });
114
+ }
115
+
116
+ await this.utils.ensureDependency(root, "@biomejs/biome", { run });
117
+
114
118
  // Install vitest and create test directory if --test flag is set
115
119
  if (flags.test) {
116
120
  await this.utils.ensureTestDir(root);
@@ -37,7 +37,10 @@ export class VerifyCommands {
37
37
  await run("alepha db:check-migrations");
38
38
  }
39
39
 
40
- await run("alepha build");
40
+ const isExpo = await this.utils.hasExpo(root);
41
+ if (!isExpo) {
42
+ await run("alepha build");
43
+ }
41
44
  await run("alepha clean");
42
45
  },
43
46
  });
@@ -29,6 +29,7 @@ export class ViteCommands {
29
29
 
30
30
  public readonly run = $command({
31
31
  name: "run",
32
+ hide: true,
32
33
  description: "Run a TypeScript file directly",
33
34
  flags: t.object({
34
35
  watch: t.optional(
@@ -54,11 +55,18 @@ export class ViteCommands {
54
55
  description: "Run the project in development mode",
55
56
  args: t.optional(t.text({ title: "path", description: "Filepath to run" })),
56
57
  handler: async ({ args, root }) => {
58
+ const expo = await this.utils.hasExpo(root);
59
+
57
60
  await this.utils.ensureConfig(root, {
58
- viteConfigTs: true,
61
+ viteConfigTs: !expo,
59
62
  tsconfigJson: true,
60
63
  });
61
64
 
65
+ if (expo) {
66
+ await this.utils.exec(`expo start`);
67
+ return;
68
+ }
69
+
62
70
  const entry = await boot.getServerEntry(root, args);
63
71
  this.log.trace("Entry file found", { entry });
64
72
 
@@ -123,6 +131,12 @@ export class ViteCommands {
123
131
  // Tell viteAlephaBuild plugin to skip - CLI handles all tasks
124
132
  process.env.ALEPHA_BUILD_MODE = "cli";
125
133
 
134
+ if (await this.utils.hasExpo(root)) {
135
+ // will coming soon
136
+ // 1. ensure "expo prebuild" is run
137
+ return;
138
+ }
139
+
126
140
  await this.utils.ensureConfig(root, {
127
141
  viteConfigTs: true,
128
142
  tsconfigJson: true,
@@ -201,14 +215,11 @@ export class ViteCommands {
201
215
  });
202
216
 
203
217
  // Copy assets
204
- // TODO: only copy if assets are found? Currently will always run
205
- await run({
206
- name: "copy assets",
207
- handler: () =>
208
- copyAssets({
209
- entry: `${distDir}/index.js`,
210
- distDir,
211
- }),
218
+ await copyAssets({
219
+ root,
220
+ entry: `${distDir}/index.js`,
221
+ distDir,
222
+ run,
212
223
  });
213
224
 
214
225
  if (hasClient) {
@@ -196,6 +196,14 @@ export class AlephaCliUtils {
196
196
 
197
197
  const devDependencies: Record<string, string> = {};
198
198
 
199
+ const scripts: Record<string, string> = {
200
+ dev: "alepha dev",
201
+ build: "alepha build",
202
+ lint: "alepha lint",
203
+ typecheck: "alepha typecheck",
204
+ verify: "alepha verify",
205
+ };
206
+
199
207
  if (modes.ui) {
200
208
  dependencies["@alepha/ui"] = `^${version}`;
201
209
  modes.react = true;
@@ -212,11 +220,7 @@ export class AlephaCliUtils {
212
220
  type: "module",
213
221
  dependencies,
214
222
  devDependencies,
215
- scripts: {
216
- dev: "alepha dev",
217
- build: "alepha build",
218
- verify: "alepha verify",
219
- },
223
+ scripts,
220
224
  };
221
225
  }
222
226
 
@@ -234,16 +238,14 @@ export class AlephaCliUtils {
234
238
  public async ensurePackageJson(
235
239
  root: string,
236
240
  modes: DependencyModes,
237
- ): Promise<void> {
241
+ ): Promise<object> {
238
242
  const packageJsonPath = join(root, "package.json");
239
243
  try {
240
244
  await access(packageJsonPath);
241
245
  } catch (error) {
242
- await writeFile(
243
- packageJsonPath,
244
- JSON.stringify(this.generatePackageJsonContent(modes), null, 2),
245
- );
246
- return;
246
+ const obj = this.generatePackageJsonContent(modes);
247
+ await writeFile(packageJsonPath, JSON.stringify(obj, null, 2));
248
+ return obj;
247
249
  }
248
250
 
249
251
  const content = await readFile(packageJsonPath, "utf8");
@@ -261,6 +263,8 @@ export class AlephaCliUtils {
261
263
  Object.assign(packageJson.scripts, newPackageJson.scripts);
262
264
 
263
265
  await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
266
+
267
+ return packageJson;
264
268
  }
265
269
 
266
270
  public async ensureConfig(
@@ -273,8 +277,8 @@ export class AlephaCliUtils {
273
277
  biomeJson?: boolean;
274
278
  editorconfig?: boolean;
275
279
  },
276
- ) {
277
- const tasks: Promise<void>[] = [];
280
+ ): Promise<Array<void | object>> {
281
+ const tasks: Promise<void | object>[] = [];
278
282
 
279
283
  if (opts.packageJson) {
280
284
  tasks.push(
@@ -300,7 +304,7 @@ export class AlephaCliUtils {
300
304
  tasks.push(this.ensureEditorConfig(root));
301
305
  }
302
306
 
303
- await Promise.all(tasks);
307
+ return await Promise.all(tasks);
304
308
  }
305
309
 
306
310
  /**
@@ -789,6 +793,16 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
789
793
  }
790
794
  }
791
795
 
796
+ /**
797
+ * Check if Expo is present in the project.
798
+ *
799
+ * @param root - The root directory of the project
800
+ * @returns True if expo is in dependencies or devDependencies
801
+ */
802
+ async hasExpo(root: string): Promise<boolean> {
803
+ return this.hasDependency(root, "expo");
804
+ }
805
+
792
806
  /**
793
807
  * Install a dependency if it's missing from the project.
794
808
  *
@@ -839,4 +853,5 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
839
853
  export interface DependencyModes {
840
854
  react?: boolean;
841
855
  ui?: boolean;
856
+ expo?: boolean;
842
857
  }
@@ -23,7 +23,7 @@ export class SchemaValidator {
23
23
  });
24
24
 
25
25
  try {
26
- return this.getValidator(schema).Parse(newValue);
26
+ return this.getValidator(schema).Parse(newValue) as Static<T>;
27
27
  } catch (error: any) {
28
28
  if (error.cause?.errors?.[0]) {
29
29
  throw new TypeBoxError(error.cause.errors[0]);
@@ -7,7 +7,6 @@ import { WorkerProvider } from "./providers/WorkerProvider.ts";
7
7
 
8
8
  // ---------------------------------------------------------------------------------------------------------------------
9
9
 
10
- export * from "./interfaces/QueueJob.ts";
11
10
  export * from "./primitives/$consumer.ts";
12
11
  export * from "./primitives/$queue.ts";
13
12
  export * from "./providers/MemoryQueueProvider.ts";
@@ -17,9 +16,9 @@ export * from "./providers/WorkerProvider.ts";
17
16
  // ---------------------------------------------------------------------------------------------------------------------
18
17
 
19
18
  /**
20
- * Provides asynchronous message queuing and processing capabilities through declarative queue primitives.
19
+ * Provides asynchronous message queuing and processing capabilities through declarative queue descriptors.
21
20
  *
22
- * The queue module enables reliable background job processing and message passing using the `$queue` primitive
21
+ * The queue module enables reliable background job processing and message passing using the `$queue` descriptor
23
22
  * on class properties. It supports schema validation, automatic retries, and multiple queue backends for
24
23
  * building scalable, decoupled applications with robust error handling.
25
24
  *
@@ -1,4 +1,5 @@
1
1
  import {
2
+ $inject,
2
3
  createPrimitive,
3
4
  KIND,
4
5
  Primitive,
@@ -7,12 +8,9 @@ import {
7
8
  type TSchema,
8
9
  } from "alepha";
9
10
  import { $logger } from "alepha/logger";
10
- import type {
11
- QueueAddJobOptions,
12
- QueueJobBackoff,
13
- } from "../interfaces/QueueJob.ts";
14
11
  import { MemoryQueueProvider } from "../providers/MemoryQueueProvider.ts";
15
12
  import { QueueProvider } from "../providers/QueueProvider.ts";
13
+ import { WorkerProvider } from "../providers/WorkerProvider.ts";
16
14
 
17
15
  /**
18
16
  * Creates a queue primitive for asynchronous message processing with background workers.
@@ -256,83 +254,6 @@ export interface QueuePrimitiveOptions<T extends TSchema> {
256
254
  * ```
257
255
  */
258
256
  handler?: (message: QueueMessage<T>) => Promise<void>;
259
-
260
- // ===========================================
261
- // Job Options (for crash recovery and retries)
262
- // ===========================================
263
-
264
- /**
265
- * Maximum number of processing attempts before the job is marked as failed.
266
- * Includes the initial attempt.
267
- *
268
- * Set this to enable automatic retries on failure.
269
- *
270
- * @default 1 (no retries)
271
- * @example 3 // Allows 2 retries after initial failure
272
- */
273
- maxAttempts?: number;
274
-
275
- /**
276
- * Backoff configuration for retries.
277
- * Controls the delay between retry attempts.
278
- *
279
- * @example
280
- * ```ts
281
- * backoff: {
282
- * type: "exponential",
283
- * delay: 1000, // Initial delay: 1 second
284
- * maxDelay: 60000 // Maximum delay: 1 minute
285
- * }
286
- * ```
287
- */
288
- backoff?: QueueJobBackoff;
289
-
290
- /**
291
- * Maximum time in milliseconds a job can be processed before it's considered stalled.
292
- * If the worker doesn't complete or extend the lock within this time, the job
293
- * can be picked up by another worker.
294
- *
295
- * Increase this for long-running jobs.
296
- *
297
- * @default 30000 (30 seconds)
298
- */
299
- lockDuration?: number;
300
-
301
- /**
302
- * Automatically remove jobs when they complete successfully.
303
- * - `true`: Remove immediately after completion
304
- * - `false`: Keep in completed list (default)
305
- * - `number`: Keep this many most recent completed jobs, remove older ones
306
- *
307
- * @default false
308
- * @example
309
- * ```ts
310
- * // Remove immediately after completion
311
- * removeOnComplete: true
312
- *
313
- * // Keep only the last 100 completed jobs
314
- * removeOnComplete: 100
315
- * ```
316
- */
317
- removeOnComplete?: boolean | number;
318
-
319
- /**
320
- * Automatically remove jobs when they fail permanently (after all retries exhausted).
321
- * - `true`: Remove immediately after failure
322
- * - `false`: Keep in failed list (default)
323
- * - `number`: Keep this many most recent failed jobs, remove older ones
324
- *
325
- * @default false
326
- * @example
327
- * ```ts
328
- * // Remove immediately after failure
329
- * removeOnFail: true
330
- *
331
- * // Keep only the last 50 failed jobs for debugging
332
- * removeOnFail: 50
333
- * ```
334
- */
335
- removeOnFail?: boolean | number;
336
257
  }
337
258
 
338
259
  // ---------------------------------------------------------------------------------------------------------------------
@@ -341,90 +262,24 @@ export class QueuePrimitive<T extends TSchema> extends Primitive<
341
262
  QueuePrimitiveOptions<T>
342
263
  > {
343
264
  protected readonly log = $logger();
265
+ protected readonly workerProvider = $inject(WorkerProvider);
344
266
  public readonly provider = this.$provider();
345
267
 
346
- /**
347
- * Push one or more payloads to the queue for background processing.
348
- *
349
- * Jobs will be processed with crash recovery, retries (if configured),
350
- * and proper lifecycle management.
351
- *
352
- * @param payloads - One or more payloads to queue
353
- */
354
- public async push(...payloads: Array<Static<T>>): Promise<void>;
355
- /**
356
- * Push a payload to the queue with specific options.
357
- *
358
- * @param payload - The payload to queue
359
- * @param options - Job options (priority, delay)
360
- */
361
- public async push(
362
- payload: Static<T>,
363
- options: QueueAddJobOptions,
364
- ): Promise<void>;
365
-
366
- public async push(
367
- payloadOrFirst: Static<T>,
368
- optionsOrSecond?: QueueAddJobOptions | Static<T>,
369
- ...rest: Array<Static<T>>
370
- ): Promise<void> {
371
- // Check if second argument is options object
372
- const isOptions =
373
- optionsOrSecond != null &&
374
- typeof optionsOrSecond === "object" &&
375
- ("priority" in optionsOrSecond || "delay" in optionsOrSecond);
376
-
377
- if (isOptions) {
378
- // Single payload with options
379
- const payload = this.alepha.codec.decode(
380
- this.options.schema,
381
- payloadOrFirst,
382
- );
383
- await this.provider.addJob(this.name, payload, {
384
- ...this.getDefaultJobOptions(),
385
- priority: (optionsOrSecond as QueueAddJobOptions).priority,
386
- delay: (optionsOrSecond as QueueAddJobOptions).delay,
387
- });
388
- this.log.debug(`Pushed job to queue ${this.name}`, {
389
- payload,
390
- options: optionsOrSecond,
391
- });
392
- } else {
393
- // Multiple payloads without per-job options
394
- const payloads =
395
- optionsOrSecond != null
396
- ? [payloadOrFirst, optionsOrSecond as Static<T>, ...rest]
397
- : [payloadOrFirst, ...rest];
268
+ public async push(...payloads: Array<Static<T>>) {
269
+ await Promise.all(
270
+ payloads.map((payload) =>
271
+ this.provider.push(
272
+ this.name,
273
+ JSON.stringify({
274
+ headers: {},
275
+ payload: this.alepha.codec.decode(this.options.schema, payload),
276
+ }),
277
+ ),
278
+ ),
279
+ );
398
280
 
399
- await Promise.all(
400
- payloads.map((p) => {
401
- const payload = this.alepha.codec.decode(this.options.schema, p);
402
- return this.provider.addJob(
403
- this.name,
404
- payload,
405
- this.getDefaultJobOptions(),
406
- );
407
- }),
408
- );
409
-
410
- this.log.debug(
411
- `Pushed ${payloads.length} job(s) to queue ${this.name}`,
412
- payloads,
413
- );
414
- }
415
- }
416
-
417
- /**
418
- * Get default job options from primitive configuration.
419
- */
420
- protected getDefaultJobOptions() {
421
- return {
422
- maxAttempts: this.options.maxAttempts,
423
- backoff: this.options.backoff,
424
- lockDuration: this.options.lockDuration,
425
- removeOnComplete: this.options.removeOnComplete,
426
- removeOnFail: this.options.removeOnFail,
427
- };
281
+ this.log.debug(`Pushed to queue ${this.name}`, payloads);
282
+ this.workerProvider.wakeUp();
428
283
  }
429
284
 
430
285
  public get name() {
@@ -0,0 +1,19 @@
1
+ import { $logger } from "alepha/logger";
2
+ import type { QueueProvider } from "./QueueProvider.ts";
3
+
4
+ export class MemoryQueueProvider implements QueueProvider {
5
+ protected readonly log = $logger();
6
+ protected queueList: Record<string, string[]> = {};
7
+
8
+ public async push(queue: string, ...messages: string[]): Promise<void> {
9
+ if (this.queueList[queue] == null) {
10
+ this.queueList[queue] = [];
11
+ }
12
+
13
+ this.queueList[queue].push(...messages);
14
+ }
15
+
16
+ public async pop(queue: string): Promise<string | undefined> {
17
+ return this.queueList[queue]?.shift();
18
+ }
19
+ }