alepha 0.13.6 → 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 (487) 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/index.browser.js +116 -0
  6. package/dist/api/audits/index.browser.js.map +1 -0
  7. package/dist/api/audits/index.d.ts +1194 -0
  8. package/dist/api/audits/index.js +674 -0
  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/index.browser.js +60 -0
  26. package/dist/api/parameters/index.browser.js.map +1 -0
  27. package/dist/api/parameters/index.d.ts +761 -0
  28. package/dist/api/parameters/index.js +877 -0
  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 +259 -247
  33. package/dist/{api-users → api/users}/index.js +125 -112
  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 +13 -12
  39. package/dist/api/verifications/index.js.map +1 -0
  40. package/dist/bin/index.js +1 -0
  41. package/dist/bin/index.js.map +1 -1
  42. package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
  43. package/dist/cache/{index.js → core/index.js} +5 -5
  44. package/dist/cache/core/index.js.map +1 -0
  45. package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
  46. package/dist/{cache-redis → cache/redis}/index.js +2 -2
  47. package/dist/cache/redis/index.js.map +1 -0
  48. package/dist/cli/index.d.ts +71 -9
  49. package/dist/cli/index.js +280 -79
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/command/index.d.ts +63 -2
  52. package/dist/command/index.js +30 -3
  53. package/dist/command/index.js.map +1 -1
  54. package/dist/core/index.browser.js +241 -61
  55. package/dist/core/index.browser.js.map +1 -1
  56. package/dist/core/index.d.ts +170 -90
  57. package/dist/core/index.js +264 -67
  58. package/dist/core/index.js.map +1 -1
  59. package/dist/core/index.native.js +248 -65
  60. package/dist/core/index.native.js.map +1 -1
  61. package/dist/email/index.js +15 -10554
  62. package/dist/email/index.js.map +1 -1
  63. package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
  64. package/dist/lock/{index.js → core/index.js} +5 -5
  65. package/dist/lock/core/index.js.map +1 -0
  66. package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
  67. package/dist/{lock-redis → lock/redis}/index.js +2 -2
  68. package/dist/lock/redis/index.js.map +1 -0
  69. package/dist/logger/index.d.ts +4 -4
  70. package/dist/logger/index.js +77 -72
  71. package/dist/logger/index.js.map +1 -1
  72. package/dist/orm/index.d.ts +5 -1
  73. package/dist/orm/index.js +24 -7
  74. package/dist/orm/index.js.map +1 -1
  75. package/dist/queue/core/index.d.ts +548 -0
  76. package/dist/queue/core/index.js +391 -0
  77. package/dist/queue/core/index.js.map +1 -0
  78. package/dist/queue/redis/index.d.ts +28 -0
  79. package/dist/queue/redis/index.js +43 -0
  80. package/dist/queue/redis/index.js.map +1 -0
  81. package/dist/scheduler/index.d.ts +7 -7
  82. package/dist/scheduler/index.js +1 -393
  83. package/dist/scheduler/index.js.map +1 -1
  84. package/dist/security/index.d.ts +1 -1
  85. package/dist/security/index.js +2 -1413
  86. package/dist/security/index.js.map +1 -1
  87. package/dist/{server-auth → server/auth}/index.browser.js +6 -6
  88. package/dist/server/auth/index.browser.js.map +1 -0
  89. package/dist/{server-auth → server/auth}/index.d.ts +175 -164
  90. package/dist/server/auth/index.js +742 -0
  91. package/dist/server/auth/index.js.map +1 -0
  92. package/dist/{server-cache → server/cache}/index.d.ts +2 -2
  93. package/dist/{server-cache → server/cache}/index.js +2 -2
  94. package/dist/server/cache/index.js.map +1 -0
  95. package/dist/{server-compress → server/compress}/index.d.ts +2 -2
  96. package/dist/{server-compress → server/compress}/index.js +2 -2
  97. package/dist/server/compress/index.js.map +1 -0
  98. package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
  99. package/dist/server/cookies/index.browser.js.map +1 -0
  100. package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
  101. package/dist/{server-cookies → server/cookies}/index.js +9 -5
  102. package/dist/server/cookies/index.js.map +1 -0
  103. package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
  104. package/dist/server/core/index.browser.js.map +1 -0
  105. package/dist/server/{index.d.ts → core/index.d.ts} +46 -37
  106. package/dist/server/{index.js → core/index.js} +47 -33
  107. package/dist/server/core/index.js.map +1 -0
  108. package/dist/{server-cors → server/cors}/index.d.ts +3 -3
  109. package/dist/{server-cors → server/cors}/index.js +3 -3
  110. package/dist/server/cors/index.js.map +1 -0
  111. package/dist/{server-health → server/health}/index.d.ts +3 -3
  112. package/dist/{server-health → server/health}/index.js +3 -3
  113. package/dist/server/health/index.js.map +1 -0
  114. package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
  115. package/dist/{server-helmet → server/helmet}/index.js +2 -2
  116. package/dist/server/helmet/index.js.map +1 -0
  117. package/dist/{server-links → server/links}/index.browser.js +5 -5
  118. package/dist/server/links/index.browser.js.map +1 -0
  119. package/dist/{server-links → server/links}/index.d.ts +40 -40
  120. package/dist/{server-links → server/links}/index.js +7 -7
  121. package/dist/server/links/index.js.map +1 -0
  122. package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
  123. package/dist/server/metrics/index.js +74 -0
  124. package/dist/server/metrics/index.js.map +1 -0
  125. package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
  126. package/dist/{server-multipart → server/multipart}/index.js +2 -2
  127. package/dist/server/multipart/index.js.map +1 -0
  128. package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
  129. package/dist/{server-proxy → server/proxy}/index.js +3 -3
  130. package/dist/server/proxy/index.js.map +1 -0
  131. package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
  132. package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
  133. package/dist/server/rate-limit/index.js.map +1 -0
  134. package/dist/{server-security → server/security}/index.browser.js +1 -1
  135. package/dist/server/security/index.browser.js.map +1 -0
  136. package/dist/{server-security → server/security}/index.d.ts +4 -4
  137. package/dist/{server-security → server/security}/index.js +4 -4
  138. package/dist/server/security/index.js.map +1 -0
  139. package/dist/{server-static → server/static}/index.d.ts +3 -3
  140. package/dist/{server-static → server/static}/index.js +3 -3
  141. package/dist/server/static/index.js.map +1 -0
  142. package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
  143. package/dist/{server-swagger → server/swagger}/index.js +4 -4
  144. package/dist/server/swagger/index.js.map +1 -0
  145. package/dist/thread/index.js +2 -2
  146. package/dist/thread/index.js.map +1 -1
  147. package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
  148. package/dist/topic/{index.js → core/index.js} +6 -6
  149. package/dist/topic/core/index.js.map +1 -0
  150. package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
  151. package/dist/{topic-redis → topic/redis}/index.js +2 -2
  152. package/dist/topic/redis/index.js.map +1 -0
  153. package/dist/vite/index.d.ts +13 -2
  154. package/dist/vite/index.js +114 -50
  155. package/dist/vite/index.js.map +1 -1
  156. package/dist/websocket/index.browser.js +3 -3
  157. package/dist/websocket/index.browser.js.map +1 -1
  158. package/dist/websocket/index.js +4 -4
  159. package/dist/websocket/index.js.map +1 -1
  160. package/package.json +160 -156
  161. package/src/api/audits/controllers/AuditController.ts +186 -0
  162. package/src/api/audits/entities/audits.ts +132 -0
  163. package/src/api/audits/index.browser.ts +18 -0
  164. package/src/api/audits/index.ts +58 -0
  165. package/src/api/audits/primitives/$audit.ts +159 -0
  166. package/src/api/audits/schemas/auditQuerySchema.ts +23 -0
  167. package/src/api/audits/schemas/auditResourceSchema.ts +9 -0
  168. package/src/api/audits/schemas/createAuditSchema.ts +27 -0
  169. package/src/api/audits/services/AuditService.ts +412 -0
  170. package/src/{api-files → api/files}/index.ts +1 -0
  171. package/src/api/parameters/controllers/ConfigController.ts +324 -0
  172. package/src/api/parameters/entities/parameters.ts +113 -0
  173. package/src/api/parameters/index.ts +60 -0
  174. package/src/api/parameters/primitives/$config.ts +351 -0
  175. package/src/api/parameters/schedulers/ConfigActivationScheduler.ts +30 -0
  176. package/src/api/parameters/services/ConfigStore.ts +491 -0
  177. package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +19 -0
  178. package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -2
  179. package/src/{api-users → api/users}/index.ts +2 -0
  180. package/src/{api-users → api/users}/primitives/$userRealm.ts +18 -3
  181. package/src/{api-users → api/users}/providers/UserRealmProvider.ts +12 -10
  182. package/src/{api-users → api/users}/services/RegistrationService.ts +2 -1
  183. package/src/{api-users → api/users}/services/SessionService.ts +4 -0
  184. package/src/{api-users → api/users}/services/UserService.ts +3 -0
  185. package/src/{api-verifications → api/verifications}/index.ts +9 -1
  186. package/src/bin/index.ts +1 -0
  187. package/src/cli/apps/AlephaPackageBuilderCli.ts +73 -48
  188. package/src/cli/assets/appRouterTs.ts +1 -1
  189. package/src/cli/assets/biomeJson.ts +2 -2
  190. package/src/cli/assets/dummySpecTs.ts +7 -0
  191. package/src/cli/assets/editorconfig.ts +13 -0
  192. package/src/cli/assets/indexHtml.ts +1 -1
  193. package/src/cli/assets/mainBrowserTs.ts +1 -1
  194. package/src/cli/assets/mainTs.ts +14 -0
  195. package/src/cli/assets/viteConfigTs.ts +1 -1
  196. package/src/cli/commands/BiomeCommands.ts +2 -0
  197. package/src/cli/commands/CoreCommands.ts +38 -15
  198. package/src/cli/commands/VerifyCommands.ts +6 -2
  199. package/src/cli/commands/ViteCommands.ts +28 -18
  200. package/src/cli/services/AlephaCliUtils.ts +243 -37
  201. package/src/command/helpers/Asker.ts +0 -1
  202. package/src/command/primitives/$command.ts +67 -0
  203. package/src/command/providers/CliProvider.ts +39 -8
  204. package/src/core/Alepha.ts +40 -30
  205. package/src/core/helpers/jsonSchemaToTypeBox.ts +307 -0
  206. package/src/core/index.shared.ts +1 -0
  207. package/src/core/index.ts +30 -3
  208. package/src/core/providers/EventManager.ts +1 -1
  209. package/src/core/providers/SchemaValidator.ts +1 -1
  210. package/src/core/providers/StateManager.ts +23 -12
  211. package/src/core/providers/TypeProvider.ts +26 -34
  212. package/src/logger/index.ts +8 -6
  213. package/src/logger/primitives/$logger.ts +1 -1
  214. package/src/logger/providers/{SimpleFormatterProvider.ts → PrettyFormatterProvider.ts} +10 -1
  215. package/src/orm/index.ts +6 -0
  216. package/src/orm/services/PgRelationManager.ts +2 -2
  217. package/src/orm/services/PostgresModelBuilder.ts +11 -7
  218. package/src/orm/services/Repository.ts +16 -7
  219. package/src/orm/services/SqliteModelBuilder.ts +10 -0
  220. package/src/queue/{index.ts → core/index.ts} +2 -3
  221. package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
  222. package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
  223. package/src/queue/core/providers/QueueProvider.ts +23 -0
  224. package/src/queue/core/providers/WorkerProvider.ts +244 -0
  225. package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
  226. package/src/{server-auth → server/auth}/primitives/$auth.ts +7 -0
  227. package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +51 -8
  228. package/src/{server-cookies → server/cookies}/index.ts +2 -1
  229. package/src/server/{index.ts → core/index.ts} +7 -0
  230. package/src/server/{primitives → core/primitives}/$action.ts +10 -1
  231. package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +11 -5
  232. package/src/server/{providers → core/providers}/ServerRouterProvider.ts +13 -7
  233. package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
  234. package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
  235. package/src/thread/primitives/$thread.ts +2 -2
  236. package/src/vite/index.ts +0 -2
  237. package/src/vite/tasks/buildServer.ts +3 -4
  238. package/src/vite/tasks/copyAssets.ts +32 -8
  239. package/src/vite/tasks/generateCloudflare.ts +35 -19
  240. package/src/vite/tasks/generateDocker.ts +18 -4
  241. package/src/vite/tasks/generateSitemap.ts +5 -7
  242. package/src/vite/tasks/generateVercel.ts +76 -41
  243. package/src/vite/tasks/runAlepha.ts +16 -1
  244. package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -11
  245. package/src/websocket/services/WebSocketClient.ts +3 -3
  246. package/dist/api-files/index.browser.js.map +0 -1
  247. package/dist/api-files/index.js.map +0 -1
  248. package/dist/api-jobs/index.browser.js.map +0 -1
  249. package/dist/api-jobs/index.js.map +0 -1
  250. package/dist/api-notifications/index.browser.js.map +0 -1
  251. package/dist/api-notifications/index.d.ts +0 -327
  252. package/dist/api-notifications/index.js.map +0 -1
  253. package/dist/api-parameters/index.browser.js +0 -29
  254. package/dist/api-parameters/index.browser.js.map +0 -1
  255. package/dist/api-parameters/index.d.ts +0 -83
  256. package/dist/api-parameters/index.js +0 -63
  257. package/dist/api-parameters/index.js.map +0 -1
  258. package/dist/api-users/index.browser.js.map +0 -1
  259. package/dist/api-users/index.js.map +0 -1
  260. package/dist/api-verifications/index.browser.js.map +0 -1
  261. package/dist/api-verifications/index.d.ts +0 -229
  262. package/dist/api-verifications/index.js.map +0 -1
  263. package/dist/cache/index.js.map +0 -1
  264. package/dist/cache-redis/index.js.map +0 -1
  265. package/dist/cli/dist-BlfFtOk2.js +0 -2770
  266. package/dist/cli/dist-BlfFtOk2.js.map +0 -1
  267. package/dist/lock/index.js.map +0 -1
  268. package/dist/lock-redis/index.js.map +0 -1
  269. package/dist/queue/index.d.ts +0 -1265
  270. package/dist/queue/index.js +0 -1037
  271. package/dist/queue/index.js.map +0 -1
  272. package/dist/queue-redis/index.d.ts +0 -82
  273. package/dist/queue-redis/index.js +0 -872
  274. package/dist/queue-redis/index.js.map +0 -1
  275. package/dist/server/index.browser.js.map +0 -1
  276. package/dist/server/index.js.map +0 -1
  277. package/dist/server-auth/index.browser.js.map +0 -1
  278. package/dist/server-auth/index.js +0 -1943
  279. package/dist/server-auth/index.js.map +0 -1
  280. package/dist/server-cache/index.js.map +0 -1
  281. package/dist/server-compress/index.js.map +0 -1
  282. package/dist/server-cookies/index.browser.js.map +0 -1
  283. package/dist/server-cookies/index.js.map +0 -1
  284. package/dist/server-cors/index.js.map +0 -1
  285. package/dist/server-health/index.js.map +0 -1
  286. package/dist/server-helmet/index.js.map +0 -1
  287. package/dist/server-links/index.browser.js.map +0 -1
  288. package/dist/server-links/index.js.map +0 -1
  289. package/dist/server-metrics/index.js +0 -4532
  290. package/dist/server-metrics/index.js.map +0 -1
  291. package/dist/server-multipart/index.js.map +0 -1
  292. package/dist/server-proxy/index.js.map +0 -1
  293. package/dist/server-rate-limit/index.js.map +0 -1
  294. package/dist/server-security/index.browser.js.map +0 -1
  295. package/dist/server-security/index.js.map +0 -1
  296. package/dist/server-static/index.js.map +0 -1
  297. package/dist/server-swagger/index.js.map +0 -1
  298. package/dist/topic/index.js.map +0 -1
  299. package/dist/topic-redis/index.js.map +0 -1
  300. package/src/api-parameters/controllers/ParameterController.ts +0 -45
  301. package/src/api-parameters/entities/parameters.ts +0 -30
  302. package/src/api-parameters/index.ts +0 -21
  303. package/src/api-parameters/primitives/$config.ts +0 -79
  304. package/src/api-parameters/services/ParameterStore.ts +0 -23
  305. package/src/queue/interfaces/QueueJob.ts +0 -459
  306. package/src/queue/providers/MemoryQueueProvider.ts +0 -850
  307. package/src/queue/providers/QueueProvider.ts +0 -319
  308. package/src/queue/providers/WorkerProvider.ts +0 -344
  309. package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
  310. /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
  311. /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
  312. /package/src/{api-files → api/files}/entities/files.ts +0 -0
  313. /package/src/{api-files → api/files}/index.browser.ts +0 -0
  314. /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
  315. /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
  316. /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
  317. /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
  318. /package/src/{api-files → api/files}/services/FileService.ts +0 -0
  319. /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
  320. /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
  321. /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
  322. /package/src/{api-jobs → api/jobs}/index.ts +0 -0
  323. /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
  324. /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
  325. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
  326. /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
  327. /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
  328. /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
  329. /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
  330. /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
  331. /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
  332. /package/src/{api-notifications → api/notifications}/index.ts +0 -0
  333. /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
  334. /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
  335. /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
  336. /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
  337. /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
  338. /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
  339. /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
  340. /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
  341. /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
  342. /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
  343. /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
  344. /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
  345. /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
  346. /package/src/{api-users → api/users}/entities/identities.ts +0 -0
  347. /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
  348. /package/src/{api-users → api/users}/entities/users.ts +0 -0
  349. /package/src/{api-users → api/users}/index.browser.ts +0 -0
  350. /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
  351. /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
  352. /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
  353. /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
  354. /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
  355. /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
  356. /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
  357. /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
  358. /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
  359. /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
  360. /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
  361. /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
  362. /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
  363. /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
  364. /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
  365. /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
  366. /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
  367. /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
  368. /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
  369. /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
  370. /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
  371. /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
  372. /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
  373. /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
  374. /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
  375. /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
  376. /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
  377. /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
  378. /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
  379. /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
  380. /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
  381. /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
  382. /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
  383. /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
  384. /package/src/cache/{index.ts → core/index.ts} +0 -0
  385. /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
  386. /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
  387. /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
  388. /package/src/{cache-redis → cache/redis}/index.ts +0 -0
  389. /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
  390. /package/src/lock/{index.ts → core/index.ts} +0 -0
  391. /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
  392. /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
  393. /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
  394. /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
  395. /package/src/{lock-redis → lock/redis}/index.ts +0 -0
  396. /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
  397. /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
  398. /package/src/{queue-redis → queue/redis}/index.ts +0 -0
  399. /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
  400. /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
  401. /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
  402. /package/src/{server-auth → server/auth}/index.ts +0 -0
  403. /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
  404. /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
  405. /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
  406. /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
  407. /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
  408. /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
  409. /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
  410. /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
  411. /package/src/{server-cache → server/cache}/index.ts +0 -0
  412. /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
  413. /package/src/{server-compress → server/compress}/index.ts +0 -0
  414. /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
  415. /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
  416. /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
  417. /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
  418. /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
  419. /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
  420. /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
  421. /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
  422. /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
  423. /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
  424. /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
  425. /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
  426. /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
  427. /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
  428. /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
  429. /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
  430. /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
  431. /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
  432. /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
  433. /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
  434. /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
  435. /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
  436. /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
  437. /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
  438. /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
  439. /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
  440. /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
  441. /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
  442. /package/src/server/{services → core/services}/HttpClient.ts +0 -0
  443. /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
  444. /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
  445. /package/src/{server-cors → server/cors}/index.ts +0 -0
  446. /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
  447. /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
  448. /package/src/{server-health → server/health}/index.ts +0 -0
  449. /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
  450. /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
  451. /package/src/{server-helmet → server/helmet}/index.ts +0 -0
  452. /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
  453. /package/src/{server-links → server/links}/index.browser.ts +0 -0
  454. /package/src/{server-links → server/links}/index.ts +0 -0
  455. /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
  456. /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
  457. /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
  458. /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
  459. /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
  460. /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
  461. /package/src/{server-metrics → server/metrics}/index.ts +0 -0
  462. /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
  463. /package/src/{server-multipart → server/multipart}/index.ts +0 -0
  464. /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
  465. /package/src/{server-proxy → server/proxy}/index.ts +0 -0
  466. /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
  467. /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
  468. /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
  469. /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
  470. /package/src/{server-security → server/security}/index.browser.ts +0 -0
  471. /package/src/{server-security → server/security}/index.ts +0 -0
  472. /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
  473. /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
  474. /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
  475. /package/src/{server-static → server/static}/index.ts +0 -0
  476. /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
  477. /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
  478. /package/src/{server-swagger → server/swagger}/index.ts +0 -0
  479. /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
  480. /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
  481. /package/src/topic/{index.ts → core/index.ts} +0 -0
  482. /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
  483. /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
  484. /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
  485. /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
  486. /package/src/{topic-redis → topic/redis}/index.ts +0 -0
  487. /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
@@ -24,29 +24,21 @@ import type {
24
24
  TUnion,
25
25
  TUnsafe,
26
26
  } from "typebox";
27
- import * as TypeBox from "typebox";
28
27
  import { Type } from "typebox";
29
28
  import type {
30
29
  TLocalizedValidationError,
31
30
  TLocalizedValidationMessageCallback,
32
31
  } from "typebox/error";
33
- import TypeBoxFormat from "typebox/format";
32
+ import Format from "typebox/format";
34
33
  import { Locale } from "typebox/system";
35
- import * as TypeBoxValue from "typebox/value";
34
+ import * as Value from "typebox/value";
36
35
  import { OPTIONS } from "../constants/OPTIONS.ts";
37
36
  import { AlephaError } from "../errors/AlephaError.ts";
38
37
  import type { TypeBoxError } from "../errors/TypeBoxError.ts";
39
38
  import { isTypeFile, type TFile, type TStream } from "../helpers/FileLike.ts";
40
39
 
41
- export { TypeBox, TypeBoxValue, TypeBoxFormat };
42
-
43
- export const isUUID = TypeBoxFormat.IsUuid;
44
- export const isEmail = TypeBoxFormat.IsEmail;
45
- export const isURL = TypeBoxFormat.IsUrl;
46
- export const isDateTime = TypeBoxFormat.IsDateTime;
47
- export const isDate = TypeBoxFormat.IsDate;
48
- export const isTime = TypeBoxFormat.IsTime;
49
- export const isDuration = TypeBoxFormat.IsDuration;
40
+ export { Type, Value, Format };
41
+ export const isUUID = Format.IsUuid;
50
42
 
51
43
  export type {
52
44
  StaticDecode,
@@ -82,26 +74,26 @@ export type {
82
74
  export class TypeGuard {
83
75
  // -------------------------------------------------------------------------------------------------------------------
84
76
  isBigInt = (value: TSchema): value is TString =>
85
- TypeBox.IsString(value) && "format" in value && value.format === "bigint";
77
+ Type.IsString(value) && "format" in value && value.format === "bigint";
86
78
  isUUID = (value: TSchema): value is TString =>
87
- TypeBox.IsString(value) && "format" in value && value.format === "uuid";
88
- isObject = TypeBox.IsObject;
89
- isNumber = TypeBox.IsNumber;
90
- isString = TypeBox.IsString;
91
- isBoolean = TypeBox.IsBoolean;
92
- isAny = TypeBox.IsAny;
93
- isArray = TypeBox.IsArray;
94
- isOptional = TypeBox.IsOptional;
95
- isUnion = TypeBox.IsUnion;
96
- isInteger = TypeBox.IsInteger;
97
- isNull = TypeBox.IsNull;
98
- isUndefined = TypeBox.IsUndefined;
99
- isUnsafe = TypeBox.IsUnsafe;
100
- isRecord = TypeBox.IsRecord;
101
- isTuple = TypeBox.IsTuple;
102
- isVoid = TypeBox.IsVoid;
103
- isLiteral = TypeBox.IsLiteral;
104
- isSchema = TypeBox.IsSchema;
79
+ Type.IsString(value) && "format" in value && value.format === "uuid";
80
+ isObject = Type.IsObject;
81
+ isNumber = Type.IsNumber;
82
+ isString = Type.IsString;
83
+ isBoolean = Type.IsBoolean;
84
+ isAny = Type.IsAny;
85
+ isArray = Type.IsArray;
86
+ isOptional = Type.IsOptional;
87
+ isUnion = Type.IsUnion;
88
+ isInteger = Type.IsInteger;
89
+ isNull = Type.IsNull;
90
+ isUndefined = Type.IsUndefined;
91
+ isUnsafe = Type.IsUnsafe;
92
+ isRecord = Type.IsRecord;
93
+ isTuple = Type.IsTuple;
94
+ isVoid = Type.IsVoid;
95
+ isLiteral = Type.IsLiteral;
96
+ isSchema = Type.IsSchema;
105
97
  // -------------------------------------------------------------------------------------------------------------------
106
98
  isFile = isTypeFile;
107
99
  isDateTime = (schema: unknown) => {
@@ -131,10 +123,10 @@ declare module "typebox" {
131
123
  }
132
124
 
133
125
  export class TypeProvider {
134
- static format = TypeBoxFormat;
126
+ static format = Format;
135
127
 
136
128
  static {
137
- TypeBoxFormat.Set("bigint", (value: string | number) =>
129
+ Format.Set("bigint", (value: string | number) =>
138
130
  TypeProvider.isValidBigInt(value),
139
131
  );
140
132
  }
@@ -398,7 +390,7 @@ export class TypeProvider {
398
390
  * Create a schema for a JSON object.
399
391
  * This is a record with string keys and any values.
400
392
  */
401
- public json(options?: TSchemaOptions): TRecord<string, TAny> {
393
+ public json<T = any>(options?: TSchemaOptions): TRecord<string, TAny> {
402
394
  return t.record(t.text(), t.any(), options);
403
395
  }
404
396
 
@@ -1,12 +1,13 @@
1
1
  import { $module, type Static, t } from "alepha";
2
2
  import { $logger } from "./primitives/$logger.ts";
3
+ import { ConsoleColorProvider } from "./providers/ConsoleColorProvider.ts";
3
4
  import { ConsoleDestinationProvider } from "./providers/ConsoleDestinationProvider.ts";
4
5
  import { JsonFormatterProvider } from "./providers/JsonFormatterProvider.ts";
5
6
  import { LogDestinationProvider } from "./providers/LogDestinationProvider.ts";
6
7
  import { LogFormatterProvider } from "./providers/LogFormatterProvider.ts";
7
8
  import { MemoryDestinationProvider } from "./providers/MemoryDestinationProvider.ts";
9
+ import { PrettyFormatterProvider } from "./providers/PrettyFormatterProvider.ts";
8
10
  import { RawFormatterProvider } from "./providers/RawFormatterProvider.ts";
9
- import { SimpleFormatterProvider } from "./providers/SimpleFormatterProvider.ts";
10
11
  import type { LogEntry } from "./schemas/logEntrySchema.ts";
11
12
  import { Logger } from "./services/Logger.ts";
12
13
 
@@ -19,7 +20,7 @@ export * from "./providers/JsonFormatterProvider.ts";
19
20
  export * from "./providers/LogDestinationProvider.ts";
20
21
  export * from "./providers/LogFormatterProvider.ts";
21
22
  export * from "./providers/MemoryDestinationProvider.ts";
22
- export * from "./providers/SimpleFormatterProvider.ts";
23
+ export * from "./providers/PrettyFormatterProvider.ts";
23
24
  export * from "./schemas/logEntrySchema.ts";
24
25
  export * from "./services/Logger.ts";
25
26
 
@@ -101,8 +102,9 @@ export const AlephaLogger = $module({
101
102
  ConsoleDestinationProvider,
102
103
  MemoryDestinationProvider,
103
104
  JsonFormatterProvider,
104
- SimpleFormatterProvider,
105
+ PrettyFormatterProvider,
105
106
  RawFormatterProvider,
107
+ ConsoleColorProvider,
106
108
  ],
107
109
  register: (alepha) => {
108
110
  const env = alepha.parseEnv(envSchema);
@@ -141,14 +143,14 @@ export const AlephaLogger = $module({
141
143
  if (env.LOG_FORMAT === "raw") {
142
144
  return RawFormatterProvider;
143
145
  }
144
- return SimpleFormatterProvider;
146
+ return PrettyFormatterProvider;
145
147
  }
146
148
 
147
149
  if (alepha.isProduction() && !alepha.isBrowser()) {
148
150
  return JsonFormatterProvider;
149
151
  }
150
152
 
151
- return SimpleFormatterProvider;
153
+ return PrettyFormatterProvider;
152
154
  };
153
155
 
154
156
  alepha.with({
@@ -202,7 +204,7 @@ const envSchema = t.object({
202
204
  /**
203
205
  * Built-in log formats.
204
206
  * - "json" - JSON format, useful for structured logging and log aggregation. {@link JsonFormatterProvider}
205
- * - "pretty" - Simple text format, human-readable, with colors. {@link SimpleFormatterProvider}
207
+ * - "pretty" - Simple text format, human-readable, with colors. {@link PrettyFormatterProvider}
206
208
  * - "raw" - Raw format, no formatting, just the message. {@link RawFormatterProvider}
207
209
  */
208
210
  LOG_FORMAT: t.optional(
@@ -26,7 +26,7 @@ export const $logger = (options: LoggerPrimitiveOptions = {}): Logger => {
26
26
  return $inject(Logger, {
27
27
  lifetime: "transient",
28
28
  args: [
29
- options.name ?? service?.name,
29
+ options.name ?? service?.name ?? "Func",
30
30
  module?.name ?? alepha.env.MODULE_NAME ?? "app",
31
31
  ],
32
32
  });
@@ -3,7 +3,7 @@ import type { LogEntry } from "../schemas/logEntrySchema.ts";
3
3
  import { ConsoleColorProvider } from "./ConsoleColorProvider.ts";
4
4
  import { LogFormatterProvider } from "./LogFormatterProvider.ts";
5
5
 
6
- export class SimpleFormatterProvider extends LogFormatterProvider {
6
+ export class PrettyFormatterProvider extends LogFormatterProvider {
7
7
  protected color = $inject(ConsoleColorProvider);
8
8
  protected alepha = $inject(Alepha);
9
9
 
@@ -107,6 +107,15 @@ export class SimpleFormatterProvider extends LogFormatterProvider {
107
107
  return "";
108
108
  }
109
109
 
110
+ if (this.alepha.isViteDev()) {
111
+ // Node.js - try to fix stack trace with Vite SSR helper
112
+ // Actually, it works only because we have a global helper in viteAlephaDev.ts
113
+ const gl = globalThis as Record<string, unknown>;
114
+ if (typeof gl === "object" && typeof gl.ssrFixStacktrace === "function") {
115
+ gl.ssrFixStacktrace(error);
116
+ }
117
+ }
118
+
110
119
  let str = error.stack ?? error.message;
111
120
 
112
121
  const anyError = error as any;
package/src/orm/index.ts CHANGED
@@ -10,7 +10,10 @@ import { NodePostgresProvider } from "./providers/drivers/NodePostgresProvider.t
10
10
  import { NodeSqliteProvider } from "./providers/drivers/NodeSqliteProvider.ts";
11
11
  import { PglitePostgresProvider } from "./providers/drivers/PglitePostgresProvider.ts";
12
12
  import { RepositoryProvider } from "./providers/RepositoryProvider.ts";
13
+ import { PgJsonQueryManager } from "./services/PgJsonQueryManager.ts";
14
+ import { PgRelationManager } from "./services/PgRelationManager.ts";
13
15
  import { PostgresModelBuilder } from "./services/PostgresModelBuilder.ts";
16
+ import { QueryManager } from "./services/QueryManager.ts";
14
17
  import { Repository } from "./services/Repository.ts";
15
18
  import { SqliteModelBuilder } from "./services/SqliteModelBuilder.ts";
16
19
 
@@ -176,6 +179,9 @@ export const AlephaPostgres = $module({
176
179
  DrizzleKitProvider,
177
180
  RepositoryProvider,
178
181
  Repository,
182
+ PgRelationManager,
183
+ PgJsonQueryManager,
184
+ QueryManager,
179
185
  ],
180
186
  register: (alepha: Alepha) => {
181
187
  const env = alepha.parseEnv(
@@ -1,4 +1,4 @@
1
- import { type TObject, TypeBoxValue, t } from "alepha";
1
+ import { type TObject, t, Value } from "alepha";
2
2
  import { getTableName, type SQL, sql } from "drizzle-orm";
3
3
  import type { PgSelectBase, PgTableWithColumns } from "drizzle-orm/pg-core";
4
4
  import { isSQLWrapper } from "drizzle-orm/sql/sql";
@@ -103,7 +103,7 @@ export class PgRelationManager {
103
103
  joins: PgJoin[],
104
104
  parentPath?: string,
105
105
  ): TObject {
106
- const schema = TypeBoxValue.Clone(baseSchema) as TObject;
106
+ const schema = Value.Clone(baseSchema) as TObject;
107
107
 
108
108
  // Group joins by parent
109
109
  const joinsAtThisLevel = joins.filter((j) => j.parent === parentPath);
@@ -279,6 +279,13 @@ export class PostgresModelBuilder extends ModelBuilder {
279
279
  return schema(key, value);
280
280
  }
281
281
 
282
+ const isTypeEnum = (value: any): value is { enum: any[] } =>
283
+ t.schema.isUnsafe(value) &&
284
+ "type" in value &&
285
+ value.type === "string" &&
286
+ "enum" in value &&
287
+ Array.isArray(value.enum);
288
+
282
289
  if (t.schema.isArray(value)) {
283
290
  if (t.schema.isObject(value.items)) {
284
291
  return schema(key, value);
@@ -298,16 +305,13 @@ export class PostgresModelBuilder extends ModelBuilder {
298
305
  if (t.schema.isBoolean(value.items)) {
299
306
  return pg.boolean(key).array();
300
307
  }
308
+ if (isTypeEnum(value.items)) {
309
+ return pg.text(key).array();
310
+ }
301
311
  }
302
312
 
303
313
  // Enum handling
304
- if (
305
- t.schema.isUnsafe(value) &&
306
- "type" in value &&
307
- value.type === "string" &&
308
- "enum" in value &&
309
- Array.isArray(value.enum)
310
- ) {
314
+ if (isTypeEnum(value)) {
311
315
  if (!value.enum.every((it) => typeof it === "string")) {
312
316
  throw new AlephaError(
313
317
  `Enum for ${fieldName} must be an array of strings, got ${JSON.stringify(
@@ -546,13 +546,15 @@ export abstract class Repository<T extends TObject> {
546
546
  /**
547
547
  * Create many entities.
548
548
  *
549
+ * Inserts are batched in chunks of 1000 to avoid hitting database limits.
550
+ *
549
551
  * @param values The entities to create.
550
552
  * @param opts The statement options.
551
553
  * @returns The created entities.
552
554
  */
553
555
  public async createMany(
554
556
  values: Array<Static<TObjectInsert<T>>>,
555
- opts: StatementOptions = {},
557
+ opts: StatementOptions & { batchSize?: number } = {},
556
558
  ): Promise<Static<T>[]> {
557
559
  if (values.length === 0) {
558
560
  return [];
@@ -563,19 +565,26 @@ export abstract class Repository<T extends TObject> {
563
565
  data: values,
564
566
  });
565
567
 
568
+ const batchSize = opts.batchSize ?? 1000;
569
+ const allEntities: Static<T>[] = [];
570
+
566
571
  try {
567
- const entities = await this.rawInsert(opts)
568
- .values(values.map((data) => this.cast(data, true)))
569
- .returning(this.table)
570
- .then((rows) => rows.map((it) => this.clean(it, this.entity.schema)));
572
+ for (let i = 0; i < values.length; i += batchSize) {
573
+ const batch = values.slice(i, i + batchSize);
574
+ const entities = await this.rawInsert(opts)
575
+ .values(batch.map((data) => this.cast(data, true)))
576
+ .returning(this.table)
577
+ .then((rows) => rows.map((it) => this.clean(it, this.entity.schema)));
578
+ allEntities.push(...entities);
579
+ }
571
580
 
572
581
  await this.alepha.events.emit("repository:create:after", {
573
582
  tableName: this.tableName,
574
583
  data: values,
575
- entity: entities,
584
+ entity: allEntities,
576
585
  });
577
586
 
578
- return entities;
587
+ return allEntities;
579
588
  } catch (error) {
580
589
  throw this.handleError(error, "Insert query has failed");
581
590
  }
@@ -190,6 +190,16 @@ export class SqliteModelBuilder extends ModelBuilder {
190
190
  return pg.integer(key);
191
191
  }
192
192
 
193
+ if (t.schema.isBigInt(value)) {
194
+ if (PG_PRIMARY_KEY in value || PG_IDENTITY in value) {
195
+ return pg
196
+ .integer(key, { mode: "number" })
197
+ .primaryKey({ autoIncrement: true });
198
+ }
199
+
200
+ return pg.integer(key, { mode: "number" });
201
+ }
202
+
193
203
  if (t.schema.isNumber(value)) {
194
204
  if (PG_IDENTITY in value) {
195
205
  return pg
@@ -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
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Minimalist Queue interface.
3
+ *
4
+ * Will be probably enhanced in the future to support more advanced features. But for now, it's enough!
5
+ */
6
+ export abstract class QueueProvider {
7
+ /**
8
+ * Push a message to the queue.
9
+ *
10
+ * @param queue Name of the queue to push the message to.
11
+ * @param message String message to be pushed to the queue. Buffer messages are not supported for now.
12
+ */
13
+ public abstract push(queue: string, message: string): Promise<void>;
14
+
15
+ /**
16
+ * Pop a message from the queue.
17
+ *
18
+ * @param queue Name of the queue to pop the message from.
19
+ *
20
+ * @returns The message popped or `undefined` if the queue is empty.
21
+ */
22
+ public abstract pop(queue: string): Promise<string | undefined>;
23
+ }