alepha 0.13.0 → 0.13.2

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 (461) hide show
  1. package/README.md +1 -1
  2. package/dist/api-files/index.d.ts +28 -91
  3. package/dist/api-files/index.js +10 -755
  4. package/dist/api-files/index.js.map +1 -1
  5. package/dist/api-jobs/index.d.ts +67 -67
  6. package/dist/api-jobs/index.js +13 -13
  7. package/dist/api-jobs/index.js.map +1 -1
  8. package/dist/api-notifications/index.d.ts +129 -146
  9. package/dist/api-notifications/index.js +17 -39
  10. package/dist/api-notifications/index.js.map +1 -1
  11. package/dist/api-parameters/index.d.ts +21 -22
  12. package/dist/api-parameters/index.js +22 -22
  13. package/dist/api-parameters/index.js.map +1 -1
  14. package/dist/api-users/index.d.ts +224 -2001
  15. package/dist/api-users/index.js +914 -4787
  16. package/dist/api-users/index.js.map +1 -1
  17. package/dist/api-verifications/index.d.ts +96 -96
  18. package/dist/batch/index.d.ts +13 -13
  19. package/dist/batch/index.js +8 -8
  20. package/dist/batch/index.js.map +1 -1
  21. package/dist/bucket/index.d.ts +14 -14
  22. package/dist/bucket/index.js +12 -12
  23. package/dist/bucket/index.js.map +1 -1
  24. package/dist/cache/index.d.ts +11 -11
  25. package/dist/cache/index.js +9 -9
  26. package/dist/cache/index.js.map +1 -1
  27. package/dist/cli/{dist-Sz2EXvQX.cjs → dist-Dl9Vl7Ur.js} +17 -13
  28. package/dist/cli/{dist-BBPjuQ56.js.map → dist-Dl9Vl7Ur.js.map} +1 -1
  29. package/dist/cli/index.d.ts +31 -37
  30. package/dist/cli/index.js +152 -83
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/command/index.d.ts +19 -19
  33. package/dist/command/index.js +25 -25
  34. package/dist/command/index.js.map +1 -1
  35. package/dist/core/index.browser.js +218 -218
  36. package/dist/core/index.browser.js.map +1 -1
  37. package/dist/core/index.d.ts +232 -232
  38. package/dist/core/index.js +218 -218
  39. package/dist/core/index.js.map +1 -1
  40. package/dist/core/{index.cjs → index.native.js} +304 -455
  41. package/dist/core/index.native.js.map +1 -0
  42. package/dist/datetime/index.d.ts +9 -9
  43. package/dist/datetime/index.js +7 -7
  44. package/dist/datetime/index.js.map +1 -1
  45. package/dist/email/index.d.ts +16 -16
  46. package/dist/email/index.js +80 -82
  47. package/dist/email/index.js.map +1 -1
  48. package/dist/file/index.js +1 -1
  49. package/dist/file/index.js.map +1 -1
  50. package/dist/lock/index.d.ts +9 -9
  51. package/dist/lock/index.js +8 -8
  52. package/dist/lock/index.js.map +1 -1
  53. package/dist/lock-redis/index.js +3 -66
  54. package/dist/lock-redis/index.js.map +1 -1
  55. package/dist/logger/index.d.ts +5 -5
  56. package/dist/logger/index.js +8 -8
  57. package/dist/logger/index.js.map +1 -1
  58. package/dist/orm/index.browser.js +114 -114
  59. package/dist/orm/index.browser.js.map +1 -1
  60. package/dist/orm/index.d.ts +219 -219
  61. package/dist/orm/index.js +46 -46
  62. package/dist/orm/index.js.map +1 -1
  63. package/dist/queue/index.d.ts +25 -25
  64. package/dist/queue/index.js +20 -20
  65. package/dist/queue/index.js.map +1 -1
  66. package/dist/queue-redis/index.d.ts +2 -2
  67. package/dist/redis/index.d.ts +10 -10
  68. package/dist/retry/index.d.ts +20 -20
  69. package/dist/retry/index.js +9 -9
  70. package/dist/retry/index.js.map +1 -1
  71. package/dist/scheduler/index.d.ts +12 -12
  72. package/dist/scheduler/index.js +9 -9
  73. package/dist/scheduler/index.js.map +1 -1
  74. package/dist/security/index.d.ts +53 -53
  75. package/dist/security/index.js +32 -32
  76. package/dist/security/index.js.map +1 -1
  77. package/dist/server/index.browser.js +1 -1
  78. package/dist/server/index.browser.js.map +1 -1
  79. package/dist/server/index.d.ts +101 -101
  80. package/dist/server/index.js +17 -17
  81. package/dist/server/index.js.map +1 -1
  82. package/dist/server-auth/index.browser.js +4 -982
  83. package/dist/server-auth/index.browser.js.map +1 -1
  84. package/dist/server-auth/index.d.ts +204 -785
  85. package/dist/server-auth/index.js +47 -1239
  86. package/dist/server-auth/index.js.map +1 -1
  87. package/dist/server-cache/index.d.ts +10 -10
  88. package/dist/server-cache/index.js +2 -2
  89. package/dist/server-cache/index.js.map +1 -1
  90. package/dist/server-compress/index.d.ts +4 -4
  91. package/dist/server-compress/index.js +1 -1
  92. package/dist/server-compress/index.js.map +1 -1
  93. package/dist/server-cookies/index.browser.js +8 -8
  94. package/dist/server-cookies/index.browser.js.map +1 -1
  95. package/dist/server-cookies/index.d.ts +17 -17
  96. package/dist/server-cookies/index.js +10 -10
  97. package/dist/server-cookies/index.js.map +1 -1
  98. package/dist/server-cors/index.d.ts +17 -17
  99. package/dist/server-cors/index.js +9 -9
  100. package/dist/server-cors/index.js.map +1 -1
  101. package/dist/server-health/index.d.ts +2 -2
  102. package/dist/server-helmet/index.d.ts +1 -1
  103. package/dist/server-links/index.browser.js +12 -12
  104. package/dist/server-links/index.browser.js.map +1 -1
  105. package/dist/server-links/index.d.ts +59 -251
  106. package/dist/server-links/index.js +23 -502
  107. package/dist/server-links/index.js.map +1 -1
  108. package/dist/server-metrics/index.d.ts +4 -4
  109. package/dist/server-metrics/index.js +170 -174
  110. package/dist/server-metrics/index.js.map +1 -1
  111. package/dist/server-multipart/index.d.ts +2 -2
  112. package/dist/server-proxy/index.d.ts +12 -12
  113. package/dist/server-proxy/index.js +10 -10
  114. package/dist/server-proxy/index.js.map +1 -1
  115. package/dist/server-rate-limit/index.d.ts +22 -22
  116. package/dist/server-rate-limit/index.js +12 -12
  117. package/dist/server-rate-limit/index.js.map +1 -1
  118. package/dist/server-security/index.d.ts +24 -24
  119. package/dist/server-security/index.js +15 -15
  120. package/dist/server-security/index.js.map +1 -1
  121. package/dist/server-static/index.d.ts +14 -14
  122. package/dist/server-static/index.js +8 -8
  123. package/dist/server-static/index.js.map +1 -1
  124. package/dist/server-swagger/index.d.ts +25 -184
  125. package/dist/server-swagger/index.js +21 -724
  126. package/dist/server-swagger/index.js.map +1 -1
  127. package/dist/sms/index.d.ts +14 -14
  128. package/dist/sms/index.js +9 -9
  129. package/dist/sms/index.js.map +1 -1
  130. package/dist/thread/index.d.ts +11 -11
  131. package/dist/thread/index.js +17 -17
  132. package/dist/thread/index.js.map +1 -1
  133. package/dist/topic/index.d.ts +26 -26
  134. package/dist/topic/index.js +16 -16
  135. package/dist/topic/index.js.map +1 -1
  136. package/dist/topic-redis/index.d.ts +1 -1
  137. package/dist/vite/index.d.ts +3 -3
  138. package/dist/vite/index.js +12 -13
  139. package/dist/vite/index.js.map +1 -1
  140. package/dist/websocket/index.browser.js +11 -11
  141. package/dist/websocket/index.browser.js.map +1 -1
  142. package/dist/websocket/index.d.ts +51 -51
  143. package/dist/websocket/index.js +13 -13
  144. package/dist/websocket/index.js.map +1 -1
  145. package/package.json +62 -52
  146. package/src/api-files/services/FileService.ts +5 -7
  147. package/src/api-jobs/index.ts +1 -1
  148. package/src/api-jobs/{descriptors → primitives}/$job.ts +8 -8
  149. package/src/api-jobs/providers/JobProvider.ts +9 -9
  150. package/src/api-jobs/services/JobService.ts +5 -5
  151. package/src/api-notifications/index.ts +5 -15
  152. package/src/api-notifications/{descriptors → primitives}/$notification.ts +10 -10
  153. package/src/api-notifications/services/NotificationSenderService.ts +3 -3
  154. package/src/api-parameters/index.ts +1 -1
  155. package/src/api-parameters/{descriptors → primitives}/$config.ts +7 -12
  156. package/src/api-users/index.ts +1 -1
  157. package/src/api-users/{descriptors → primitives}/$userRealm.ts +8 -8
  158. package/src/api-users/providers/UserRealmProvider.ts +1 -1
  159. package/src/batch/index.ts +3 -3
  160. package/src/batch/{descriptors → primitives}/$batch.ts +13 -16
  161. package/src/bucket/index.ts +8 -8
  162. package/src/bucket/{descriptors → primitives}/$bucket.ts +8 -8
  163. package/src/bucket/providers/LocalFileStorageProvider.ts +3 -3
  164. package/src/cache/index.ts +4 -4
  165. package/src/cache/{descriptors → primitives}/$cache.ts +15 -15
  166. package/src/cli/apps/AlephaPackageBuilderCli.ts +30 -3
  167. package/src/cli/assets/appRouterTs.ts +9 -0
  168. package/src/cli/assets/indexHtml.ts +2 -1
  169. package/src/cli/assets/mainBrowserTs.ts +10 -0
  170. package/src/cli/commands/CoreCommands.ts +6 -5
  171. package/src/cli/commands/DrizzleCommands.ts +69 -61
  172. package/src/cli/commands/VerifyCommands.ts +2 -2
  173. package/src/cli/commands/ViteCommands.ts +6 -1
  174. package/src/cli/services/ProjectUtils.ts +78 -41
  175. package/src/command/index.ts +5 -5
  176. package/src/command/{descriptors → primitives}/$command.ts +9 -12
  177. package/src/command/providers/CliProvider.ts +10 -10
  178. package/src/core/Alepha.ts +30 -33
  179. package/src/core/constants/KIND.ts +1 -1
  180. package/src/core/constants/OPTIONS.ts +1 -1
  181. package/src/core/helpers/{descriptor.ts → primitive.ts} +18 -18
  182. package/src/core/helpers/ref.ts +1 -1
  183. package/src/core/index.shared.ts +8 -8
  184. package/src/core/{descriptors → primitives}/$context.ts +5 -5
  185. package/src/core/{descriptors → primitives}/$hook.ts +4 -4
  186. package/src/core/{descriptors → primitives}/$inject.ts +2 -2
  187. package/src/core/{descriptors → primitives}/$module.ts +9 -9
  188. package/src/core/{descriptors → primitives}/$use.ts +2 -2
  189. package/src/core/providers/CodecManager.ts +1 -1
  190. package/src/core/providers/JsonSchemaCodec.ts +1 -1
  191. package/src/core/providers/StateManager.ts +2 -2
  192. package/src/datetime/index.ts +3 -3
  193. package/src/datetime/{descriptors → primitives}/$interval.ts +6 -6
  194. package/src/email/index.ts +4 -4
  195. package/src/email/{descriptors → primitives}/$email.ts +8 -8
  196. package/src/file/index.ts +1 -1
  197. package/src/lock/index.ts +3 -3
  198. package/src/lock/{descriptors → primitives}/$lock.ts +10 -10
  199. package/src/logger/index.ts +8 -8
  200. package/src/logger/{descriptors → primitives}/$logger.ts +2 -2
  201. package/src/logger/services/Logger.ts +1 -1
  202. package/src/orm/constants/PG_SYMBOLS.ts +2 -2
  203. package/src/orm/index.browser.ts +2 -2
  204. package/src/orm/index.ts +8 -8
  205. package/src/orm/{descriptors → primitives}/$entity.ts +11 -11
  206. package/src/orm/{descriptors → primitives}/$repository.ts +2 -2
  207. package/src/orm/{descriptors → primitives}/$sequence.ts +8 -8
  208. package/src/orm/{descriptors → primitives}/$transaction.ts +4 -4
  209. package/src/orm/providers/DrizzleKitProvider.ts +1 -1
  210. package/src/orm/providers/PostgresTypeProvider.ts +3 -3
  211. package/src/orm/providers/RepositoryProvider.ts +4 -4
  212. package/src/orm/providers/drivers/DatabaseProvider.ts +7 -7
  213. package/src/orm/services/ModelBuilder.ts +9 -9
  214. package/src/orm/services/PgRelationManager.ts +2 -2
  215. package/src/orm/services/PostgresModelBuilder.ts +5 -5
  216. package/src/orm/services/Repository.ts +7 -7
  217. package/src/orm/services/SqliteModelBuilder.ts +5 -5
  218. package/src/queue/index.ts +7 -7
  219. package/src/queue/{descriptors → primitives}/$consumer.ts +15 -15
  220. package/src/queue/{descriptors → primitives}/$queue.ts +12 -12
  221. package/src/queue/providers/WorkerProvider.ts +7 -7
  222. package/src/retry/index.ts +3 -3
  223. package/src/retry/{descriptors → primitives}/$retry.ts +19 -17
  224. package/src/scheduler/index.ts +3 -3
  225. package/src/scheduler/{descriptors → primitives}/$scheduler.ts +9 -9
  226. package/src/scheduler/providers/CronProvider.ts +1 -1
  227. package/src/security/index.ts +9 -9
  228. package/src/security/{descriptors → primitives}/$permission.ts +7 -7
  229. package/src/security/{descriptors → primitives}/$realm.ts +6 -12
  230. package/src/security/{descriptors → primitives}/$role.ts +12 -12
  231. package/src/security/{descriptors → primitives}/$serviceAccount.ts +8 -8
  232. package/src/server/index.browser.ts +1 -1
  233. package/src/server/index.ts +14 -14
  234. package/src/server/{descriptors → primitives}/$action.ts +13 -13
  235. package/src/server/{descriptors → primitives}/$route.ts +9 -9
  236. package/src/server/providers/NodeHttpServerProvider.ts +2 -2
  237. package/src/server/services/HttpClient.ts +1 -1
  238. package/src/server-auth/index.browser.ts +1 -1
  239. package/src/server-auth/index.ts +6 -6
  240. package/src/server-auth/{descriptors → primitives}/$auth.ts +10 -10
  241. package/src/server-auth/{descriptors → primitives}/$authCredentials.ts +4 -4
  242. package/src/server-auth/{descriptors → primitives}/$authGithub.ts +4 -4
  243. package/src/server-auth/{descriptors → primitives}/$authGoogle.ts +4 -4
  244. package/src/server-auth/providers/ServerAuthProvider.ts +4 -4
  245. package/src/server-cache/providers/ServerCacheProvider.ts +7 -7
  246. package/src/server-compress/providers/ServerCompressProvider.ts +3 -3
  247. package/src/server-cookies/index.browser.ts +2 -2
  248. package/src/server-cookies/index.ts +5 -5
  249. package/src/server-cookies/{descriptors → primitives}/$cookie.browser.ts +12 -12
  250. package/src/server-cookies/{descriptors → primitives}/$cookie.ts +13 -13
  251. package/src/server-cookies/providers/ServerCookiesProvider.ts +4 -4
  252. package/src/server-cookies/services/CookieParser.ts +1 -1
  253. package/src/server-cors/index.ts +3 -3
  254. package/src/server-cors/{descriptors → primitives}/$cors.ts +11 -13
  255. package/src/server-cors/providers/ServerCorsProvider.ts +5 -5
  256. package/src/server-links/index.browser.ts +5 -5
  257. package/src/server-links/index.ts +9 -9
  258. package/src/server-links/{descriptors → primitives}/$remote.ts +11 -11
  259. package/src/server-links/providers/LinkProvider.ts +7 -7
  260. package/src/server-links/providers/{RemoteDescriptorProvider.ts → RemotePrimitiveProvider.ts} +6 -6
  261. package/src/server-links/providers/ServerLinksProvider.ts +3 -3
  262. package/src/server-proxy/index.ts +3 -3
  263. package/src/server-proxy/{descriptors → primitives}/$proxy.ts +8 -8
  264. package/src/server-proxy/providers/ServerProxyProvider.ts +4 -4
  265. package/src/server-rate-limit/index.ts +6 -6
  266. package/src/server-rate-limit/{descriptors → primitives}/$rateLimit.ts +13 -13
  267. package/src/server-rate-limit/providers/ServerRateLimitProvider.ts +5 -5
  268. package/src/server-security/index.ts +3 -3
  269. package/src/server-security/{descriptors → primitives}/$basicAuth.ts +13 -13
  270. package/src/server-security/providers/ServerBasicAuthProvider.ts +5 -5
  271. package/src/server-security/providers/ServerSecurityProvider.ts +4 -4
  272. package/src/server-static/index.ts +3 -3
  273. package/src/server-static/{descriptors → primitives}/$serve.ts +8 -10
  274. package/src/server-static/providers/ServerStaticProvider.ts +6 -6
  275. package/src/server-swagger/index.ts +5 -5
  276. package/src/server-swagger/{descriptors → primitives}/$swagger.ts +9 -9
  277. package/src/server-swagger/providers/ServerSwaggerProvider.ts +11 -10
  278. package/src/sms/index.ts +4 -4
  279. package/src/sms/{descriptors → primitives}/$sms.ts +8 -8
  280. package/src/thread/index.ts +3 -3
  281. package/src/thread/{descriptors → primitives}/$thread.ts +13 -13
  282. package/src/thread/providers/ThreadProvider.ts +7 -9
  283. package/src/topic/index.ts +5 -5
  284. package/src/topic/{descriptors → primitives}/$subscriber.ts +14 -14
  285. package/src/topic/{descriptors → primitives}/$topic.ts +10 -10
  286. package/src/topic/providers/TopicProvider.ts +4 -4
  287. package/src/vite/helpers/boot.ts +3 -3
  288. package/src/vite/tasks/copyAssets.ts +1 -1
  289. package/src/vite/tasks/generateSitemap.ts +3 -3
  290. package/src/vite/tasks/prerenderPages.ts +2 -2
  291. package/src/vite/tasks/runAlepha.ts +2 -2
  292. package/src/websocket/index.browser.ts +3 -3
  293. package/src/websocket/index.shared.ts +2 -2
  294. package/src/websocket/index.ts +4 -4
  295. package/src/websocket/interfaces/WebSocketInterfaces.ts +3 -3
  296. package/src/websocket/{descriptors → primitives}/$channel.ts +10 -10
  297. package/src/websocket/{descriptors → primitives}/$websocket.ts +8 -8
  298. package/src/websocket/providers/NodeWebSocketServerProvider.ts +7 -7
  299. package/src/websocket/providers/WebSocketServerProvider.ts +3 -3
  300. package/src/websocket/services/WebSocketClient.ts +5 -5
  301. package/dist/api-files/index.cjs +0 -1293
  302. package/dist/api-files/index.cjs.map +0 -1
  303. package/dist/api-files/index.d.cts +0 -829
  304. package/dist/api-jobs/index.cjs +0 -274
  305. package/dist/api-jobs/index.cjs.map +0 -1
  306. package/dist/api-jobs/index.d.cts +0 -654
  307. package/dist/api-notifications/index.cjs +0 -380
  308. package/dist/api-notifications/index.cjs.map +0 -1
  309. package/dist/api-notifications/index.d.cts +0 -289
  310. package/dist/api-parameters/index.cjs +0 -66
  311. package/dist/api-parameters/index.cjs.map +0 -1
  312. package/dist/api-parameters/index.d.cts +0 -84
  313. package/dist/api-users/index.cjs +0 -6009
  314. package/dist/api-users/index.cjs.map +0 -1
  315. package/dist/api-users/index.d.cts +0 -4740
  316. package/dist/api-verifications/index.cjs +0 -407
  317. package/dist/api-verifications/index.cjs.map +0 -1
  318. package/dist/api-verifications/index.d.cts +0 -207
  319. package/dist/batch/index.cjs +0 -408
  320. package/dist/batch/index.cjs.map +0 -1
  321. package/dist/batch/index.d.cts +0 -330
  322. package/dist/bin/index.cjs +0 -17
  323. package/dist/bin/index.cjs.map +0 -1
  324. package/dist/bin/index.d.cts +0 -1
  325. package/dist/bucket/index.cjs +0 -303
  326. package/dist/bucket/index.cjs.map +0 -1
  327. package/dist/bucket/index.d.cts +0 -355
  328. package/dist/cache/index.cjs +0 -241
  329. package/dist/cache/index.cjs.map +0 -1
  330. package/dist/cache/index.d.cts +0 -202
  331. package/dist/cache-redis/index.cjs +0 -84
  332. package/dist/cache-redis/index.cjs.map +0 -1
  333. package/dist/cache-redis/index.d.cts +0 -40
  334. package/dist/cli/chunk-DSlc6foC.cjs +0 -43
  335. package/dist/cli/dist-BBPjuQ56.js +0 -2778
  336. package/dist/cli/dist-Sz2EXvQX.cjs.map +0 -1
  337. package/dist/cli/index.cjs +0 -1241
  338. package/dist/cli/index.cjs.map +0 -1
  339. package/dist/cli/index.d.cts +0 -422
  340. package/dist/command/index.cjs +0 -693
  341. package/dist/command/index.cjs.map +0 -1
  342. package/dist/command/index.d.cts +0 -340
  343. package/dist/core/index.cjs.map +0 -1
  344. package/dist/core/index.d.cts +0 -1927
  345. package/dist/datetime/index.cjs +0 -318
  346. package/dist/datetime/index.cjs.map +0 -1
  347. package/dist/datetime/index.d.cts +0 -145
  348. package/dist/email/index.cjs +0 -10874
  349. package/dist/email/index.cjs.map +0 -1
  350. package/dist/email/index.d.cts +0 -186
  351. package/dist/fake/index.cjs +0 -34641
  352. package/dist/fake/index.cjs.map +0 -1
  353. package/dist/fake/index.d.cts +0 -74
  354. package/dist/file/index.cjs +0 -1212
  355. package/dist/file/index.cjs.map +0 -1
  356. package/dist/file/index.d.cts +0 -698
  357. package/dist/lock/index.cjs +0 -226
  358. package/dist/lock/index.cjs.map +0 -1
  359. package/dist/lock/index.d.cts +0 -361
  360. package/dist/lock-redis/index.cjs +0 -113
  361. package/dist/lock-redis/index.cjs.map +0 -1
  362. package/dist/lock-redis/index.d.cts +0 -24
  363. package/dist/logger/index.cjs +0 -521
  364. package/dist/logger/index.cjs.map +0 -1
  365. package/dist/logger/index.d.cts +0 -281
  366. package/dist/orm/index.cjs +0 -2986
  367. package/dist/orm/index.cjs.map +0 -1
  368. package/dist/orm/index.d.cts +0 -2213
  369. package/dist/queue/index.cjs +0 -1044
  370. package/dist/queue/index.cjs.map +0 -1
  371. package/dist/queue/index.d.cts +0 -1265
  372. package/dist/queue-redis/index.cjs +0 -873
  373. package/dist/queue-redis/index.cjs.map +0 -1
  374. package/dist/queue-redis/index.d.cts +0 -82
  375. package/dist/redis/index.cjs +0 -153
  376. package/dist/redis/index.cjs.map +0 -1
  377. package/dist/redis/index.d.cts +0 -82
  378. package/dist/retry/index.cjs +0 -146
  379. package/dist/retry/index.cjs.map +0 -1
  380. package/dist/retry/index.d.cts +0 -172
  381. package/dist/router/index.cjs +0 -111
  382. package/dist/router/index.cjs.map +0 -1
  383. package/dist/router/index.d.cts +0 -46
  384. package/dist/scheduler/index.cjs +0 -576
  385. package/dist/scheduler/index.cjs.map +0 -1
  386. package/dist/scheduler/index.d.cts +0 -145
  387. package/dist/security/index.cjs +0 -2402
  388. package/dist/security/index.cjs.map +0 -1
  389. package/dist/security/index.d.cts +0 -598
  390. package/dist/server/index.cjs +0 -1680
  391. package/dist/server/index.cjs.map +0 -1
  392. package/dist/server/index.d.cts +0 -810
  393. package/dist/server-auth/index.cjs +0 -3146
  394. package/dist/server-auth/index.cjs.map +0 -1
  395. package/dist/server-auth/index.d.cts +0 -1164
  396. package/dist/server-cache/index.cjs +0 -252
  397. package/dist/server-cache/index.cjs.map +0 -1
  398. package/dist/server-cache/index.d.cts +0 -164
  399. package/dist/server-compress/index.cjs +0 -141
  400. package/dist/server-compress/index.cjs.map +0 -1
  401. package/dist/server-compress/index.d.cts +0 -38
  402. package/dist/server-cookies/index.cjs +0 -234
  403. package/dist/server-cookies/index.cjs.map +0 -1
  404. package/dist/server-cookies/index.d.cts +0 -144
  405. package/dist/server-cors/index.cjs +0 -201
  406. package/dist/server-cors/index.cjs.map +0 -1
  407. package/dist/server-cors/index.d.cts +0 -140
  408. package/dist/server-health/index.cjs +0 -62
  409. package/dist/server-health/index.cjs.map +0 -1
  410. package/dist/server-health/index.d.cts +0 -58
  411. package/dist/server-helmet/index.cjs +0 -131
  412. package/dist/server-helmet/index.cjs.map +0 -1
  413. package/dist/server-helmet/index.d.cts +0 -97
  414. package/dist/server-links/index.cjs +0 -992
  415. package/dist/server-links/index.cjs.map +0 -1
  416. package/dist/server-links/index.d.cts +0 -513
  417. package/dist/server-metrics/index.cjs +0 -4535
  418. package/dist/server-metrics/index.cjs.map +0 -1
  419. package/dist/server-metrics/index.d.cts +0 -35
  420. package/dist/server-multipart/index.cjs +0 -237
  421. package/dist/server-multipart/index.cjs.map +0 -1
  422. package/dist/server-multipart/index.d.cts +0 -50
  423. package/dist/server-proxy/index.cjs +0 -186
  424. package/dist/server-proxy/index.cjs.map +0 -1
  425. package/dist/server-proxy/index.d.cts +0 -234
  426. package/dist/server-rate-limit/index.cjs +0 -241
  427. package/dist/server-rate-limit/index.cjs.map +0 -1
  428. package/dist/server-rate-limit/index.d.cts +0 -183
  429. package/dist/server-security/index.cjs +0 -316
  430. package/dist/server-security/index.cjs.map +0 -1
  431. package/dist/server-security/index.d.cts +0 -173
  432. package/dist/server-static/index.cjs +0 -170
  433. package/dist/server-static/index.cjs.map +0 -1
  434. package/dist/server-static/index.d.cts +0 -121
  435. package/dist/server-swagger/index.cjs +0 -1021
  436. package/dist/server-swagger/index.cjs.map +0 -1
  437. package/dist/server-swagger/index.d.cts +0 -382
  438. package/dist/sms/index.cjs +0 -221
  439. package/dist/sms/index.cjs.map +0 -1
  440. package/dist/sms/index.d.cts +0 -130
  441. package/dist/thread/index.cjs +0 -350
  442. package/dist/thread/index.cjs.map +0 -1
  443. package/dist/thread/index.d.cts +0 -260
  444. package/dist/topic/index.cjs +0 -282
  445. package/dist/topic/index.cjs.map +0 -1
  446. package/dist/topic/index.d.cts +0 -523
  447. package/dist/topic-redis/index.cjs +0 -71
  448. package/dist/topic-redis/index.cjs.map +0 -1
  449. package/dist/topic-redis/index.d.cts +0 -42
  450. package/dist/vite/index.cjs +0 -1077
  451. package/dist/vite/index.cjs.map +0 -1
  452. package/dist/vite/index.d.cts +0 -542
  453. package/dist/websocket/index.cjs +0 -1117
  454. package/dist/websocket/index.cjs.map +0 -1
  455. package/dist/websocket/index.d.cts +0 -861
  456. package/src/api-notifications/providers/MemorySmsProvider.ts +0 -20
  457. package/src/api-notifications/providers/SmsProvider.ts +0 -8
  458. /package/src/core/{descriptors → primitives}/$atom.ts +0 -0
  459. /package/src/core/{descriptors → primitives}/$env.ts +0 -0
  460. /package/src/server-auth/{descriptors → primitives}/$authApple.ts +0 -0
  461. /package/src/server-links/{descriptors → primitives}/$client.ts +0 -0
@@ -1,330 +0,0 @@
1
- import * as alepha1 from "alepha";
2
- import { Alepha, Descriptor, KIND, Static, TSchema } from "alepha";
3
- import { DateTimeProvider, DurationLike } from "alepha/datetime";
4
- import { RetryBackoffOptions, RetryDescriptorOptions, RetryProvider } from "alepha/retry";
5
- import * as alepha_logger0 from "alepha/logger";
6
-
7
- //#region src/batch/providers/BatchProvider.d.ts
8
- interface BatchOptions<TItem, TResponse = any> {
9
- /**
10
- * The batch processing handler function that processes arrays of validated items.
11
- */
12
- handler: (items: TItem[]) => TResponse;
13
- /**
14
- * Maximum number of items to collect before automatically flushing the batch.
15
- *
16
- * @default 10
17
- */
18
- maxSize?: number;
19
- /**
20
- * Maximum number of items that can be queued in a single partition.
21
- * If exceeded, push() will throw an error.
22
- */
23
- maxQueueSize?: number;
24
- /**
25
- * Maximum time to wait before flushing a batch, even if it hasn't reached maxSize.
26
- *
27
- * @default [1, "second"]
28
- */
29
- maxDuration?: DurationLike;
30
- /**
31
- * Function to determine partition keys for grouping items into separate batches.
32
- */
33
- partitionBy?: (item: TItem) => string;
34
- /**
35
- * Maximum number of batch handlers that can execute simultaneously.
36
- *
37
- * @default 1
38
- */
39
- concurrency?: number;
40
- /**
41
- * Retry configuration for failed batch processing operations.
42
- */
43
- retry?: {
44
- /**
45
- * The maximum number of attempts.
46
- *
47
- * @default 3
48
- */
49
- max?: number;
50
- /**
51
- * The backoff strategy for delays between retries.
52
- * Can be a fixed number (in ms) or a configuration object for exponential backoff.
53
- *
54
- * @default { initial: 200, factor: 2, jitter: true }
55
- */
56
- backoff?: number | RetryBackoffOptions;
57
- /**
58
- * An overall time limit for all retry attempts combined.
59
- *
60
- * e.g., `[5, 'seconds']`
61
- */
62
- maxDuration?: DurationLike;
63
- /**
64
- * A function that determines if a retry should be attempted based on the error.
65
- *
66
- * @default (error) => true (retries on any error)
67
- */
68
- when?: (error: Error) => boolean;
69
- /**
70
- * A custom callback for when a retry attempt fails.
71
- * This is called before the delay.
72
- */
73
- onError?: (error: Error, attempt: number) => void;
74
- };
75
- }
76
- type BatchItemStatus = "pending" | "processing" | "completed" | "failed";
77
- interface BatchItemState<TItem, TResponse> {
78
- id: string;
79
- item: TItem;
80
- partitionKey: string;
81
- status: BatchItemStatus;
82
- result?: TResponse;
83
- error?: Error;
84
- promise?: Promise<TResponse>;
85
- resolve?: (value: TResponse) => void;
86
- reject?: (error: Error) => void;
87
- }
88
- interface PartitionState {
89
- itemIds: string[];
90
- timeout?: {
91
- clear: () => void;
92
- };
93
- flushing: boolean;
94
- }
95
- /**
96
- * Context object that holds all state for a batch processor instance.
97
- */
98
- interface BatchContext<TItem, TResponse> {
99
- options: BatchOptions<TItem, TResponse>;
100
- itemStates: Map<string, BatchItemState<TItem, TResponse>>;
101
- partitions: Map<string, PartitionState>;
102
- activeHandlers: PromiseWithResolvers<void>[];
103
- isShuttingDown: boolean;
104
- isReady: boolean;
105
- alepha: Alepha;
106
- }
107
- /**
108
- * Service for batch processing operations.
109
- * Provides methods to manage batches of items with automatic flushing based on size or time.
110
- */
111
- declare class BatchProvider {
112
- protected readonly log: alepha_logger0.Logger;
113
- protected readonly dateTime: DateTimeProvider;
114
- protected readonly retryProvider: RetryProvider;
115
- /**
116
- * Creates a new batch context with the given options.
117
- */
118
- createContext<TItem, TResponse>(alepha: Alepha, options: BatchOptions<TItem, TResponse>): BatchContext<TItem, TResponse>;
119
- /**
120
- * Get the effective maxSize for a context.
121
- */
122
- protected getMaxSize<TItem, TResponse>(context: BatchContext<TItem, TResponse>): number;
123
- /**
124
- * Get the effective concurrency for a context.
125
- */
126
- protected getConcurrency<TItem, TResponse>(context: BatchContext<TItem, TResponse>): number;
127
- /**
128
- * Get the effective maxDuration for a context.
129
- */
130
- protected getMaxDuration<TItem, TResponse>(context: BatchContext<TItem, TResponse>): DurationLike;
131
- /**
132
- * Pushes an item into the batch and returns immediately with a unique ID.
133
- * The item will be processed asynchronously with other items when the batch is flushed.
134
- * Use wait(id) to get the processing result.
135
- *
136
- * @throws Error if maxQueueSize is exceeded
137
- */
138
- push<TItem, TResponse>(context: BatchContext<TItem, TResponse>, item: TItem): string;
139
- /**
140
- * Wait for a specific item to be processed and get its result.
141
- * @param id The item ID returned from push()
142
- * @returns The processing result
143
- * @throws If the item doesn't exist or processing failed
144
- */
145
- wait<TItem, TResponse>(context: BatchContext<TItem, TResponse>, id: string): Promise<TResponse>;
146
- /**
147
- * Get the current status of an item.
148
- * @param id The item ID returned from push()
149
- * @returns Status information or undefined if item doesn't exist
150
- */
151
- status<TItem, TResponse>(context: BatchContext<TItem, TResponse>, id: string): {
152
- status: "pending" | "processing";
153
- } | {
154
- status: "completed";
155
- result: TResponse;
156
- } | {
157
- status: "failed";
158
- error: Error;
159
- } | undefined;
160
- /**
161
- * Clears completed and failed items from the context to free memory.
162
- * Returns the number of items cleared.
163
- *
164
- * @param context The batch context
165
- * @param status Optional: only clear items with this specific status ('completed' or 'failed')
166
- * @returns The number of items cleared
167
- */
168
- clearCompleted<TItem, TResponse>(context: BatchContext<TItem, TResponse>, status?: "completed" | "failed"): number;
169
- /**
170
- * Flush all partitions or a specific partition.
171
- */
172
- flush<TItem, TResponse>(context: BatchContext<TItem, TResponse>, partitionKey?: string): Promise<void>;
173
- /**
174
- * Flush a specific partition.
175
- */
176
- protected flushPartition<TItem, TResponse>(context: BatchContext<TItem, TResponse>, partitionKey: string, limit?: number): Promise<void>;
177
- /**
178
- * Mark the context as ready and start processing buffered items.
179
- * Called after the "ready" hook.
180
- */
181
- markReady<TItem, TResponse>(context: BatchContext<TItem, TResponse>): Promise<void>;
182
- /**
183
- * Mark the context as shutting down and flush all remaining items.
184
- */
185
- shutdown<TItem, TResponse>(context: BatchContext<TItem, TResponse>): Promise<void>;
186
- /**
187
- * Called after the "ready" hook to start processing buffered items that were
188
- * pushed during startup. This checks all partitions and starts timeouts/flushes
189
- * for items that were accumulated before the app was ready.
190
- */
191
- protected startProcessing<TItem, TResponse>(context: BatchContext<TItem, TResponse>): Promise<void>;
192
- }
193
- //#endregion
194
- //#region src/batch/descriptors/$batch.d.ts
195
- /**
196
- * Creates a batch processing descriptor for efficient grouping and processing of multiple operations.
197
- */
198
- declare const $batch: {
199
- <TItem extends TSchema, TResponse>(options: BatchDescriptorOptions<TItem, TResponse>): BatchDescriptor<TItem, TResponse>;
200
- [KIND]: typeof BatchDescriptor;
201
- };
202
- interface BatchDescriptorOptions<TItem extends TSchema, TResponse = any> {
203
- /**
204
- * TypeBox schema for validating each item added to the batch.
205
- */
206
- schema: TItem;
207
- /**
208
- * The batch processing handler function that processes arrays of validated items.
209
- */
210
- handler: (items: Static<TItem>[]) => TResponse;
211
- /**
212
- * Maximum number of items to collect before automatically flushing the batch.
213
- */
214
- maxSize?: number;
215
- /**
216
- * Maximum number of items that can be queued in a single partition.
217
- * If exceeded, push() will throw an error.
218
- */
219
- maxQueueSize?: number;
220
- /**
221
- * Maximum time to wait before flushing a batch, even if it hasn't reached maxSize.
222
- */
223
- maxDuration?: DurationLike;
224
- /**
225
- * Function to determine partition keys for grouping items into separate batches.
226
- */
227
- partitionBy?: (item: Static<TItem>) => string;
228
- /**
229
- * Maximum number of batch handlers that can execute simultaneously.
230
- */
231
- concurrency?: number;
232
- /**
233
- * Retry configuration for failed batch processing operations.
234
- */
235
- retry?: Omit<RetryDescriptorOptions<() => Array<Static<TItem>>>, "handler">;
236
- }
237
- declare class BatchDescriptor<TItem extends TSchema, TResponse = any> extends Descriptor<BatchDescriptorOptions<TItem, TResponse>> {
238
- protected readonly batchProvider: BatchProvider;
239
- protected readonly context: BatchContext<Static<TItem>, TResponse>;
240
- constructor(...args: ConstructorParameters<typeof Descriptor<BatchDescriptorOptions<TItem, TResponse>>>);
241
- /**
242
- * Pushes an item into the batch and returns immediately with a unique ID.
243
- * The item will be processed asynchronously with other items when the batch is flushed.
244
- * Use wait(id) to get the processing result.
245
- */
246
- push(item: Static<TItem>): Promise<string>;
247
- /**
248
- * Wait for a specific item to be processed and get its result.
249
- * @param id The item ID returned from push()
250
- * @returns The processing result
251
- * @throws If the item doesn't exist or processing failed
252
- */
253
- wait(id: string): Promise<TResponse>;
254
- /**
255
- * Get the current status of an item.
256
- * @param id The item ID returned from push()
257
- * @returns Status information or undefined if item doesn't exist
258
- */
259
- status(id: string): {
260
- status: "pending" | "processing";
261
- } | {
262
- status: "completed";
263
- result: TResponse;
264
- } | {
265
- status: "failed";
266
- error: Error;
267
- } | undefined;
268
- /**
269
- * Flush all partitions or a specific partition.
270
- */
271
- flush(partitionKey?: string): Promise<void>;
272
- /**
273
- * Clears completed and failed items from memory.
274
- * Call this periodically in long-running applications to prevent memory leaks.
275
- *
276
- * @param status Optional: only clear items with this specific status ('completed' or 'failed')
277
- * @returns The number of items cleared
278
- */
279
- clearCompleted(status?: "completed" | "failed"): number;
280
- protected readonly onReady: alepha1.HookDescriptor<"ready">;
281
- protected readonly dispose: alepha1.HookDescriptor<"stop">;
282
- }
283
- //#endregion
284
- //#region src/batch/index.d.ts
285
- /**
286
- * This module allows you to group multiple asynchronous operations into a single "batch," which is then processed together.
287
- * This is an essential pattern for improving performance, reducing I/O, and interacting efficiently with rate-limited APIs or databases.
288
- *
289
- * ```ts
290
- * import { Alepha, $hook, run, t } from "alepha";
291
- * import { $batch } from "alepha/batch";
292
- *
293
- * class LoggingService {
294
- * // define the batch processor
295
- * logBatch = $batch({
296
- * schema: t.text(),
297
- * maxSize: 10,
298
- * maxDuration: [5, "seconds"],
299
- * handler: async (items) => {
300
- * console.log(`[BATCH LOG] Processing ${items.length} events:`, items);
301
- * },
302
- * });
303
- *
304
- * // example of how to use it
305
- * onReady = $hook({
306
- * on: "ready",
307
- * handler: async () => {
308
- * // push() returns an ID immediately
309
- * const id1 = await this.logBatch.push("Application started.");
310
- * const id2 = await this.logBatch.push("User authenticated.");
311
- *
312
- * // optionally wait for processing to complete
313
- * await this.logBatch.wait(id1);
314
- *
315
- * // or check the status
316
- * const status = this.logBatch.status(id2);
317
- * console.log(status?.status); // "pending" | "processing" | "completed" | "failed"
318
- * },
319
- * });
320
- * }
321
- * ```
322
- *
323
- * @see {@link $batch}
324
- * @see {@link BatchProvider}
325
- * @module alepha.batch
326
- */
327
- declare const AlephaBatch: alepha1.Service<alepha1.Module>;
328
- //#endregion
329
- export { $batch, AlephaBatch, BatchContext, BatchDescriptor, BatchDescriptorOptions, type BatchItemState, type BatchItemStatus, BatchOptions, BatchProvider, PartitionState };
330
- //# sourceMappingURL=index.d.cts.map
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env node
2
- require("tsx");
3
- let alepha = require("alepha");
4
- let alepha_cli = require("alepha/cli");
5
-
6
- //#region src/bin/index.ts
7
- const alepha$1 = alepha.Alepha.create({ env: {
8
- LOG_LEVEL: "alepha.core:warn,info",
9
- LOG_FORMAT: "raw",
10
- CLI_NAME: "alepha",
11
- CLI_DESCRIPTION: `Alepha CLI v${alepha_cli.version} - Create and manage Alepha projects.`
12
- } });
13
- alepha$1.with(alepha_cli.AlephaCli);
14
- (0, alepha.run)(alepha$1);
15
-
16
- //#endregion
17
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":["alepha","Alepha","version","AlephaCli"],"sources":["../../src/bin/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport \"tsx\";\nimport { Alepha, run } from \"alepha\";\nimport { AlephaCli, version } from \"alepha/cli\";\n\nconst alepha = Alepha.create({\n env: {\n LOG_LEVEL: \"alepha.core:warn,info\",\n LOG_FORMAT: \"raw\",\n CLI_NAME: \"alepha\",\n CLI_DESCRIPTION: `Alepha CLI v${version} - Create and manage Alepha projects.`,\n },\n});\n\nalepha.with(AlephaCli);\n\nrun(alepha);\n"],"mappings":";;;;;;AAKA,MAAMA,WAASC,cAAO,OAAO,EAC3B,KAAK;CACH,WAAW;CACX,YAAY;CACZ,UAAU;CACV,iBAAiB,eAAeC,mBAAQ;CACzC,EACF,CAAC;AAEFF,SAAO,KAAKG,qBAAU;gBAElBH,SAAO"}
@@ -1 +0,0 @@
1
- export { };
@@ -1,303 +0,0 @@
1
- let alepha = require("alepha");
2
- let alepha_file = require("alepha/file");
3
- let node_crypto = require("node:crypto");
4
- let node_fs = require("node:fs");
5
- let node_fs_promises = require("node:fs/promises");
6
- let node_os = require("node:os");
7
- let node_path = require("node:path");
8
- let alepha_logger = require("alepha/logger");
9
-
10
- //#region src/bucket/errors/InvalidFileError.ts
11
- var InvalidFileError = class extends Error {
12
- status = 400;
13
- };
14
-
15
- //#endregion
16
- //#region src/bucket/providers/FileStorageProvider.ts
17
- var FileStorageProvider = class {};
18
-
19
- //#endregion
20
- //#region src/bucket/errors/FileNotFoundError.ts
21
- var FileNotFoundError = class extends alepha.AlephaError {
22
- status = 404;
23
- };
24
-
25
- //#endregion
26
- //#region src/bucket/providers/MemoryFileStorageProvider.ts
27
- var MemoryFileStorageProvider = class {
28
- files = {};
29
- fileSystem = (0, alepha.$inject)(alepha_file.FileSystemProvider);
30
- fileDetector = (0, alepha.$inject)(alepha_file.FileDetector);
31
- async upload(bucketName, file, fileId) {
32
- fileId ??= this.createId();
33
- this.files[`${bucketName}/${fileId}`] = this.fileSystem.createFile({
34
- stream: file.stream(),
35
- name: file.name,
36
- type: file.type,
37
- size: file.size
38
- });
39
- return fileId;
40
- }
41
- async download(bucketName, fileId) {
42
- const fileKey = `${bucketName}/${fileId}`;
43
- const file = this.files[fileKey];
44
- if (!file) throw new FileNotFoundError(`File with ID ${fileId} not found.`);
45
- return file;
46
- }
47
- async exists(bucketName, fileId) {
48
- return `${bucketName}/${fileId}` in this.files;
49
- }
50
- async delete(bucketName, fileId) {
51
- const fileKey = `${bucketName}/${fileId}`;
52
- if (!(fileKey in this.files)) throw new FileNotFoundError(`File with ID ${fileId} not found.`);
53
- delete this.files[fileKey];
54
- }
55
- createId() {
56
- return (0, node_crypto.randomUUID)();
57
- }
58
- };
59
-
60
- //#endregion
61
- //#region src/bucket/descriptors/$bucket.ts
62
- /**
63
- * Creates a bucket descriptor for file storage and management with configurable validation.
64
- *
65
- * Provides a comprehensive file storage system that handles uploads, downloads, validation,
66
- * and management across multiple storage backends with MIME type and size limit controls.
67
- *
68
- * **Key Features**
69
- * - Multi-provider support (filesystem, cloud storage, in-memory)
70
- * - Automatic MIME type and file size validation
71
- * - Event integration for file operations monitoring
72
- * - Flexible per-bucket and per-operation configuration
73
- * - Smart file type and size detection
74
- *
75
- * **Common Use Cases**
76
- * - User profile pictures and document uploads
77
- * - Product images and media management
78
- * - Document storage and retrieval systems
79
- *
80
- * @example
81
- * ```ts
82
- * class MediaService {
83
- * images = $bucket({
84
- * name: "user-images",
85
- * mimeTypes: ["image/jpeg", "image/png", "image/gif"],
86
- * maxSize: 5 // 5MB limit
87
- * });
88
- *
89
- * documents = $bucket({
90
- * name: "documents",
91
- * mimeTypes: ["application/pdf", "text/plain"],
92
- * maxSize: 50 // 50MB limit
93
- * });
94
- *
95
- * async uploadProfileImage(file: FileLike, userId: string): Promise<string> {
96
- * const fileId = await this.images.upload(file);
97
- * await this.userService.updateProfileImage(userId, fileId);
98
- * return fileId;
99
- * }
100
- *
101
- * async downloadDocument(documentId: string): Promise<FileLike> {
102
- * return await this.documents.download(documentId);
103
- * }
104
- *
105
- * async deleteDocument(documentId: string): Promise<void> {
106
- * await this.documents.delete(documentId);
107
- * }
108
- * }
109
- * ```
110
- */
111
- const $bucket = (options) => (0, alepha.createDescriptor)(BucketDescriptor, options);
112
- var BucketDescriptor = class extends alepha.Descriptor {
113
- provider = this.$provider();
114
- fileSystem = (0, alepha.$inject)(alepha_file.FileSystemProvider);
115
- get name() {
116
- return this.options.name ?? `${this.config.propertyKey}`;
117
- }
118
- /**
119
- * Uploads a file to the bucket.
120
- */
121
- async upload(file, options) {
122
- if (file instanceof File) file = this.fileSystem.createFile({ file });
123
- options = {
124
- ...this.options,
125
- ...options
126
- };
127
- const mimeTypes = options.mimeTypes ?? void 0;
128
- const maxSize = options.maxSize ?? 10;
129
- if (mimeTypes) {
130
- const mimeType = file.type || "application/octet-stream";
131
- if (!mimeTypes.includes(mimeType)) throw new InvalidFileError(`MIME type ${mimeType} is not allowed in bucket ${this.name}`);
132
- }
133
- if (file.size > maxSize * 1024 * 1024) throw new InvalidFileError(`File size ${file.size} exceeds the maximum size of ${this.options.maxSize} MB in bucket ${this.name}`);
134
- const id = await this.provider.upload(this.name, file);
135
- await this.alepha.events.emit("bucket:file:uploaded", {
136
- id,
137
- bucket: this,
138
- file,
139
- options
140
- });
141
- return id;
142
- }
143
- /**
144
- * Delete permanently a file from the bucket.
145
- */
146
- async delete(fileId, skipHook = false) {
147
- await this.provider.delete(this.name, fileId);
148
- if (skipHook) return;
149
- await this.alepha.events.emit("bucket:file:deleted", {
150
- id: fileId,
151
- bucket: this
152
- });
153
- }
154
- /**
155
- * Checks if a file exists in the bucket.
156
- */
157
- async exists(fileId) {
158
- return this.provider.exists(this.name, fileId);
159
- }
160
- /**
161
- * Downloads a file from the bucket.
162
- */
163
- async download(fileId) {
164
- return this.provider.download(this.name, fileId);
165
- }
166
- $provider() {
167
- if (!this.options.provider) return this.alepha.inject(FileStorageProvider);
168
- if (this.options.provider === "memory") return this.alepha.inject(MemoryFileStorageProvider);
169
- return this.alepha.inject(this.options.provider);
170
- }
171
- };
172
- $bucket[alepha.KIND] = BucketDescriptor;
173
-
174
- //#endregion
175
- //#region src/bucket/providers/LocalFileStorageProvider.ts
176
- /**
177
- * Local file storage configuration atom
178
- */
179
- const localFileStorageOptions = (0, alepha.$atom)({
180
- name: "alepha.bucket.local.options",
181
- schema: alepha.t.object({ storagePath: alepha.t.string({ description: "Directory path where files will be stored" }) }),
182
- default: { storagePath: "node_modules/.alepha/buckets" }
183
- });
184
- var LocalFileStorageProvider = class {
185
- alepha = (0, alepha.$inject)(alepha.Alepha);
186
- log = (0, alepha_logger.$logger)();
187
- fileDetector = (0, alepha.$inject)(alepha_file.FileDetector);
188
- fileSystemProvider = (0, alepha.$inject)(alepha_file.FileSystemProvider);
189
- options = (0, alepha.$use)(localFileStorageOptions);
190
- get storagePath() {
191
- return this.options.storagePath;
192
- }
193
- onConfigure = (0, alepha.$hook)({
194
- on: "configure",
195
- handler: async () => {
196
- if (this.alepha.isTest() && this.storagePath === localFileStorageOptions.options.default.storagePath) this.alepha.state.set(localFileStorageOptions, { storagePath: (0, node_path.join)((0, node_os.tmpdir)(), `alepha-test-${Date.now()}`) });
197
- }
198
- });
199
- onStart = (0, alepha.$hook)({
200
- on: "start",
201
- handler: async () => {
202
- try {
203
- await (0, node_fs_promises.mkdir)(this.storagePath, { recursive: true });
204
- } catch {}
205
- for (const bucket of this.alepha.descriptors($bucket)) {
206
- if (bucket.provider !== this) continue;
207
- await (0, node_fs_promises.mkdir)((0, node_path.join)(this.storagePath, bucket.name), { recursive: true });
208
- this.log.debug(`Bucket '${bucket.name}' at ${this.storagePath} OK`);
209
- }
210
- }
211
- });
212
- async upload(bucketName, file, fileId) {
213
- fileId ??= this.createId(file.type);
214
- this.log.trace(`Uploading file to ${bucketName}`);
215
- await this.fileSystemProvider.writeFile(this.path(bucketName, fileId), file);
216
- return fileId;
217
- }
218
- async download(bucketName, fileId) {
219
- const filePath = this.path(bucketName, fileId);
220
- try {
221
- const stats = await (0, node_fs_promises.stat)(filePath);
222
- const mimeType = this.fileDetector.getContentType(fileId);
223
- return this.fileSystemProvider.createFile({
224
- stream: (0, node_fs.createReadStream)(filePath),
225
- name: fileId,
226
- type: mimeType,
227
- size: stats.size
228
- });
229
- } catch (error) {
230
- if (this.isErrorNoEntry(error)) throw new FileNotFoundError(`File with ID ${fileId} not found.`);
231
- throw new alepha.AlephaError("Invalid file operation", { cause: error });
232
- }
233
- }
234
- async exists(bucketName, fileId) {
235
- try {
236
- await (0, node_fs_promises.stat)(this.path(bucketName, fileId));
237
- return true;
238
- } catch (error) {
239
- if (this.isErrorNoEntry(error)) return false;
240
- throw new alepha.AlephaError("Error checking file existence", { cause: error });
241
- }
242
- }
243
- async delete(bucketName, fileId) {
244
- try {
245
- return await (0, node_fs_promises.unlink)(this.path(bucketName, fileId));
246
- } catch (error) {
247
- if (this.isErrorNoEntry(error)) throw new FileNotFoundError(`File with ID ${fileId} not found.`);
248
- throw new alepha.AlephaError("Error deleting file", { cause: error });
249
- }
250
- }
251
- stat(bucket, fileId) {
252
- return (0, node_fs_promises.stat)(this.path(bucket, fileId));
253
- }
254
- createId(mimeType) {
255
- const ext = this.fileDetector.getExtensionFromMimeType(mimeType);
256
- return `${(0, node_crypto.randomUUID)()}.${ext}`;
257
- }
258
- path(bucket, fileId = "") {
259
- return (0, node_path.join)(this.storagePath, bucket, fileId);
260
- }
261
- isErrorNoEntry(error) {
262
- return error instanceof Error && "code" in error && error.code === "ENOENT";
263
- }
264
- };
265
-
266
- //#endregion
267
- //#region src/bucket/index.ts
268
- /**
269
- * Provides file storage capabilities through declarative bucket descriptors with support for multiple storage backends.
270
- *
271
- * The bucket module enables unified file operations across different storage systems using the `$bucket` descriptor
272
- * on class properties. It abstracts storage provider differences, offering consistent APIs for local filesystem,
273
- * cloud storage, or in-memory storage for testing environments.
274
- *
275
- * @see {@link $bucket}
276
- * @see {@link FileStorageProvider}
277
- * @module alepha.bucket
278
- */
279
- const AlephaBucket = (0, alepha.$module)({
280
- name: "alepha.bucket",
281
- descriptors: [$bucket],
282
- services: [
283
- FileStorageProvider,
284
- MemoryFileStorageProvider,
285
- LocalFileStorageProvider
286
- ],
287
- register: (alepha$1) => alepha$1.with({
288
- optional: true,
289
- provide: FileStorageProvider,
290
- use: alepha$1.isTest() ? MemoryFileStorageProvider : LocalFileStorageProvider
291
- })
292
- });
293
-
294
- //#endregion
295
- exports.$bucket = $bucket;
296
- exports.AlephaBucket = AlephaBucket;
297
- exports.BucketDescriptor = BucketDescriptor;
298
- exports.FileNotFoundError = FileNotFoundError;
299
- exports.FileStorageProvider = FileStorageProvider;
300
- exports.LocalFileStorageProvider = LocalFileStorageProvider;
301
- exports.MemoryFileStorageProvider = MemoryFileStorageProvider;
302
- exports.localFileStorageOptions = localFileStorageOptions;
303
- //# sourceMappingURL=index.cjs.map