alepha 0.15.0 → 0.15.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 (551) hide show
  1. package/README.md +43 -98
  2. package/dist/api/audits/index.d.ts +630 -653
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/audits/index.js +12 -35
  5. package/dist/api/audits/index.js.map +1 -1
  6. package/dist/api/files/index.d.ts +365 -358
  7. package/dist/api/files/index.d.ts.map +1 -1
  8. package/dist/api/files/index.js +12 -5
  9. package/dist/api/files/index.js.map +1 -1
  10. package/dist/api/jobs/index.d.ts +255 -248
  11. package/dist/api/jobs/index.d.ts.map +1 -1
  12. package/dist/api/jobs/index.js +10 -3
  13. package/dist/api/jobs/index.js.map +1 -1
  14. package/dist/api/keys/index.d.ts +413 -0
  15. package/dist/api/keys/index.d.ts.map +1 -0
  16. package/dist/api/keys/index.js +476 -0
  17. package/dist/api/keys/index.js.map +1 -0
  18. package/dist/api/notifications/index.browser.js +4 -4
  19. package/dist/api/notifications/index.browser.js.map +1 -1
  20. package/dist/api/notifications/index.d.ts +84 -78
  21. package/dist/api/notifications/index.d.ts.map +1 -1
  22. package/dist/api/notifications/index.js +14 -8
  23. package/dist/api/notifications/index.js.map +1 -1
  24. package/dist/api/parameters/index.d.ts +528 -535
  25. package/dist/api/parameters/index.d.ts.map +1 -1
  26. package/dist/api/parameters/index.js +30 -37
  27. package/dist/api/parameters/index.js.map +1 -1
  28. package/dist/api/users/index.d.ts +1221 -910
  29. package/dist/api/users/index.d.ts.map +1 -1
  30. package/dist/api/users/index.js +2556 -248
  31. package/dist/api/users/index.js.map +1 -1
  32. package/dist/api/verifications/index.d.ts +142 -136
  33. package/dist/api/verifications/index.d.ts.map +1 -1
  34. package/dist/api/verifications/index.js +12 -4
  35. package/dist/api/verifications/index.js.map +1 -1
  36. package/dist/batch/index.d.ts +142 -162
  37. package/dist/batch/index.d.ts.map +1 -1
  38. package/dist/batch/index.js +31 -44
  39. package/dist/batch/index.js.map +1 -1
  40. package/dist/bucket/index.d.ts +595 -171
  41. package/dist/bucket/index.d.ts.map +1 -1
  42. package/dist/bucket/index.js +1856 -12
  43. package/dist/bucket/index.js.map +1 -1
  44. package/dist/cache/core/index.d.ts +225 -53
  45. package/dist/cache/core/index.d.ts.map +1 -1
  46. package/dist/cache/core/index.js +213 -7
  47. package/dist/cache/core/index.js.map +1 -1
  48. package/dist/cache/redis/index.d.ts +1 -0
  49. package/dist/cache/redis/index.d.ts.map +1 -1
  50. package/dist/cache/redis/index.js +6 -2
  51. package/dist/cache/redis/index.js.map +1 -1
  52. package/dist/cli/index.d.ts +834 -226
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +2872 -417
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/command/index.d.ts +458 -310
  57. package/dist/command/index.d.ts.map +1 -1
  58. package/dist/command/index.js +2011 -76
  59. package/dist/command/index.js.map +1 -1
  60. package/dist/core/index.browser.js +309 -97
  61. package/dist/core/index.browser.js.map +1 -1
  62. package/dist/core/index.d.ts +796 -701
  63. package/dist/core/index.d.ts.map +1 -1
  64. package/dist/core/index.js +329 -97
  65. package/dist/core/index.js.map +1 -1
  66. package/dist/core/index.native.js +309 -97
  67. package/dist/core/index.native.js.map +1 -1
  68. package/dist/datetime/index.d.ts +59 -44
  69. package/dist/datetime/index.d.ts.map +1 -1
  70. package/dist/datetime/index.js +15 -0
  71. package/dist/datetime/index.js.map +1 -1
  72. package/dist/email/index.d.ts +314 -19
  73. package/dist/email/index.d.ts.map +1 -1
  74. package/dist/email/index.js +1852 -7
  75. package/dist/email/index.js.map +1 -1
  76. package/dist/fake/index.d.ts +5500 -5418
  77. package/dist/fake/index.d.ts.map +1 -1
  78. package/dist/fake/index.js +113 -42
  79. package/dist/fake/index.js.map +1 -1
  80. package/dist/lock/core/index.d.ts +219 -212
  81. package/dist/lock/core/index.d.ts.map +1 -1
  82. package/dist/lock/core/index.js +11 -4
  83. package/dist/lock/core/index.js.map +1 -1
  84. package/dist/lock/redis/index.d.ts.map +1 -1
  85. package/dist/logger/index.d.ts +41 -90
  86. package/dist/logger/index.d.ts.map +1 -1
  87. package/dist/logger/index.js +15 -68
  88. package/dist/logger/index.js.map +1 -1
  89. package/dist/mcp/index.d.ts +228 -230
  90. package/dist/mcp/index.d.ts.map +1 -1
  91. package/dist/mcp/index.js +32 -31
  92. package/dist/mcp/index.js.map +1 -1
  93. package/dist/orm/index.browser.js +12 -12
  94. package/dist/orm/index.browser.js.map +1 -1
  95. package/dist/orm/index.bun.js +90 -80
  96. package/dist/orm/index.bun.js.map +1 -1
  97. package/dist/orm/index.d.ts +1434 -1459
  98. package/dist/orm/index.d.ts.map +1 -1
  99. package/dist/orm/index.js +112 -130
  100. package/dist/orm/index.js.map +1 -1
  101. package/dist/queue/core/index.d.ts +262 -254
  102. package/dist/queue/core/index.d.ts.map +1 -1
  103. package/dist/queue/core/index.js +14 -6
  104. package/dist/queue/core/index.js.map +1 -1
  105. package/dist/queue/redis/index.d.ts.map +1 -1
  106. package/dist/react/auth/index.browser.js +108 -0
  107. package/dist/react/auth/index.browser.js.map +1 -0
  108. package/dist/react/auth/index.d.ts +100 -0
  109. package/dist/react/auth/index.d.ts.map +1 -0
  110. package/dist/react/auth/index.js +145 -0
  111. package/dist/react/auth/index.js.map +1 -0
  112. package/dist/react/core/index.d.ts +469 -0
  113. package/dist/react/core/index.d.ts.map +1 -0
  114. package/dist/react/core/index.js +464 -0
  115. package/dist/react/core/index.js.map +1 -0
  116. package/dist/react/form/index.d.ts +232 -0
  117. package/dist/react/form/index.d.ts.map +1 -0
  118. package/dist/react/form/index.js +432 -0
  119. package/dist/react/form/index.js.map +1 -0
  120. package/dist/react/head/index.browser.js +423 -0
  121. package/dist/react/head/index.browser.js.map +1 -0
  122. package/dist/react/head/index.d.ts +288 -0
  123. package/dist/react/head/index.d.ts.map +1 -0
  124. package/dist/react/head/index.js +465 -0
  125. package/dist/react/head/index.js.map +1 -0
  126. package/dist/react/i18n/index.d.ts +175 -0
  127. package/dist/react/i18n/index.d.ts.map +1 -0
  128. package/dist/react/i18n/index.js +224 -0
  129. package/dist/react/i18n/index.js.map +1 -0
  130. package/dist/react/router/index.browser.js +1980 -0
  131. package/dist/react/router/index.browser.js.map +1 -0
  132. package/dist/react/router/index.d.ts +2068 -0
  133. package/dist/react/router/index.d.ts.map +1 -0
  134. package/dist/react/router/index.js +4932 -0
  135. package/dist/react/router/index.js.map +1 -0
  136. package/dist/react/websocket/index.d.ts +117 -0
  137. package/dist/react/websocket/index.d.ts.map +1 -0
  138. package/dist/react/websocket/index.js +107 -0
  139. package/dist/react/websocket/index.js.map +1 -0
  140. package/dist/redis/index.bun.js +4 -0
  141. package/dist/redis/index.bun.js.map +1 -1
  142. package/dist/redis/index.d.ts +127 -130
  143. package/dist/redis/index.d.ts.map +1 -1
  144. package/dist/redis/index.js +16 -25
  145. package/dist/redis/index.js.map +1 -1
  146. package/dist/retry/index.d.ts +80 -71
  147. package/dist/retry/index.d.ts.map +1 -1
  148. package/dist/retry/index.js +11 -2
  149. package/dist/retry/index.js.map +1 -1
  150. package/dist/router/index.d.ts +6 -6
  151. package/dist/router/index.d.ts.map +1 -1
  152. package/dist/scheduler/index.d.ts +119 -28
  153. package/dist/scheduler/index.d.ts.map +1 -1
  154. package/dist/scheduler/index.js +404 -3
  155. package/dist/scheduler/index.js.map +1 -1
  156. package/dist/security/index.d.ts +642 -228
  157. package/dist/security/index.d.ts.map +1 -1
  158. package/dist/security/index.js +1579 -37
  159. package/dist/security/index.js.map +1 -1
  160. package/dist/server/auth/index.d.ts +1141 -111
  161. package/dist/server/auth/index.d.ts.map +1 -1
  162. package/dist/server/auth/index.js +1261 -25
  163. package/dist/server/auth/index.js.map +1 -1
  164. package/dist/server/cache/index.d.ts +63 -78
  165. package/dist/server/cache/index.d.ts.map +1 -1
  166. package/dist/server/cache/index.js +7 -22
  167. package/dist/server/cache/index.js.map +1 -1
  168. package/dist/server/compress/index.d.ts +13 -5
  169. package/dist/server/compress/index.d.ts.map +1 -1
  170. package/dist/server/compress/index.js +10 -2
  171. package/dist/server/compress/index.js.map +1 -1
  172. package/dist/server/cookies/index.d.ts +46 -22
  173. package/dist/server/cookies/index.d.ts.map +1 -1
  174. package/dist/server/cookies/index.js +7 -5
  175. package/dist/server/cookies/index.js.map +1 -1
  176. package/dist/server/core/index.d.ts +307 -196
  177. package/dist/server/core/index.d.ts.map +1 -1
  178. package/dist/server/core/index.js +271 -38
  179. package/dist/server/core/index.js.map +1 -1
  180. package/dist/server/cors/index.d.ts +24 -34
  181. package/dist/server/cors/index.d.ts.map +1 -1
  182. package/dist/server/cors/index.js +7 -21
  183. package/dist/server/cors/index.js.map +1 -1
  184. package/dist/server/health/index.d.ts +25 -19
  185. package/dist/server/health/index.d.ts.map +1 -1
  186. package/dist/server/health/index.js +8 -2
  187. package/dist/server/health/index.js.map +1 -1
  188. package/dist/server/helmet/index.d.ts +13 -5
  189. package/dist/server/helmet/index.d.ts.map +1 -1
  190. package/dist/server/helmet/index.js +11 -3
  191. package/dist/server/helmet/index.js.map +1 -1
  192. package/dist/server/links/index.browser.js +9 -1
  193. package/dist/server/links/index.browser.js.map +1 -1
  194. package/dist/server/links/index.d.ts +133 -128
  195. package/dist/server/links/index.d.ts.map +1 -1
  196. package/dist/server/links/index.js +24 -11
  197. package/dist/server/links/index.js.map +1 -1
  198. package/dist/server/metrics/index.d.ts +524 -4
  199. package/dist/server/metrics/index.d.ts.map +1 -1
  200. package/dist/server/metrics/index.js +4472 -7
  201. package/dist/server/metrics/index.js.map +1 -1
  202. package/dist/server/multipart/index.d.ts +15 -9
  203. package/dist/server/multipart/index.d.ts.map +1 -1
  204. package/dist/server/multipart/index.js +9 -3
  205. package/dist/server/multipart/index.js.map +1 -1
  206. package/dist/server/proxy/index.d.ts +110 -104
  207. package/dist/server/proxy/index.d.ts.map +1 -1
  208. package/dist/server/proxy/index.js +8 -2
  209. package/dist/server/proxy/index.js.map +1 -1
  210. package/dist/server/rate-limit/index.d.ts +46 -51
  211. package/dist/server/rate-limit/index.d.ts.map +1 -1
  212. package/dist/server/rate-limit/index.js +18 -55
  213. package/dist/server/rate-limit/index.js.map +1 -1
  214. package/dist/server/static/index.d.ts +181 -48
  215. package/dist/server/static/index.d.ts.map +1 -1
  216. package/dist/server/static/index.js +1848 -5
  217. package/dist/server/static/index.js.map +1 -1
  218. package/dist/server/swagger/index.d.ts +348 -53
  219. package/dist/server/swagger/index.d.ts.map +1 -1
  220. package/dist/server/swagger/index.js +1849 -6
  221. package/dist/server/swagger/index.js.map +1 -1
  222. package/dist/sms/index.d.ts +312 -18
  223. package/dist/sms/index.d.ts.map +1 -1
  224. package/dist/sms/index.js +1854 -10
  225. package/dist/sms/index.js.map +1 -1
  226. package/dist/system/index.browser.js +496 -0
  227. package/dist/system/index.browser.js.map +1 -0
  228. package/dist/system/index.d.ts +1158 -0
  229. package/dist/system/index.d.ts.map +1 -0
  230. package/dist/{file → system}/index.js +412 -20
  231. package/dist/system/index.js.map +1 -0
  232. package/dist/thread/index.d.ts +82 -73
  233. package/dist/thread/index.d.ts.map +1 -1
  234. package/dist/thread/index.js +13 -4
  235. package/dist/thread/index.js.map +1 -1
  236. package/dist/topic/core/index.d.ts +330 -323
  237. package/dist/topic/core/index.d.ts.map +1 -1
  238. package/dist/topic/core/index.js +12 -5
  239. package/dist/topic/core/index.js.map +1 -1
  240. package/dist/topic/redis/index.d.ts +6 -6
  241. package/dist/topic/redis/index.d.ts.map +1 -1
  242. package/dist/vite/index.d.ts +163 -5825
  243. package/dist/vite/index.d.ts.map +1 -1
  244. package/dist/vite/index.js +130 -477
  245. package/dist/vite/index.js.map +1 -1
  246. package/dist/websocket/index.browser.js +3 -3
  247. package/dist/websocket/index.browser.js.map +1 -1
  248. package/dist/websocket/index.d.ts +287 -283
  249. package/dist/websocket/index.d.ts.map +1 -1
  250. package/dist/websocket/index.js +15 -11
  251. package/dist/websocket/index.js.map +1 -1
  252. package/package.json +86 -17
  253. package/src/api/audits/index.ts +10 -33
  254. package/src/api/files/__tests__/$bucket.spec.ts +1 -1
  255. package/src/api/files/controllers/AdminFileStatsController.spec.ts +1 -1
  256. package/src/api/files/controllers/FileController.spec.ts +1 -1
  257. package/src/api/files/index.ts +10 -3
  258. package/src/api/files/jobs/FileJobs.spec.ts +1 -1
  259. package/src/api/files/services/FileService.spec.ts +1 -1
  260. package/src/api/jobs/index.ts +10 -3
  261. package/src/api/keys/controllers/AdminApiKeyController.ts +75 -0
  262. package/src/api/keys/controllers/ApiKeyController.ts +103 -0
  263. package/src/api/keys/entities/apiKeyEntity.ts +41 -0
  264. package/src/api/keys/index.ts +49 -0
  265. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +7 -0
  266. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +17 -0
  267. package/src/api/keys/schemas/createApiKeyBodySchema.ts +7 -0
  268. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +11 -0
  269. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +15 -0
  270. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +5 -0
  271. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +5 -0
  272. package/src/api/keys/services/ApiKeyService.spec.ts +553 -0
  273. package/src/api/keys/services/ApiKeyService.ts +306 -0
  274. package/src/api/logs/TODO.md +52 -0
  275. package/src/api/notifications/index.ts +10 -4
  276. package/src/api/parameters/index.ts +9 -30
  277. package/src/api/parameters/primitives/$config.ts +12 -4
  278. package/src/api/parameters/services/ConfigStore.ts +9 -3
  279. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1035 -0
  280. package/src/api/users/__tests__/ApiKeys.spec.ts +401 -0
  281. package/src/api/users/index.ts +14 -3
  282. package/src/api/users/primitives/$realm.ts +33 -5
  283. package/src/api/users/providers/RealmProvider.ts +1 -12
  284. package/src/api/users/services/SessionService.ts +1 -11
  285. package/src/api/verifications/controllers/VerificationController.ts +2 -0
  286. package/src/api/verifications/index.ts +10 -4
  287. package/src/batch/index.ts +9 -36
  288. package/src/batch/primitives/$batch.ts +0 -8
  289. package/src/batch/providers/BatchProvider.ts +29 -2
  290. package/src/bucket/__tests__/shared.ts +1 -1
  291. package/src/bucket/index.ts +13 -6
  292. package/src/bucket/primitives/$bucket.ts +1 -1
  293. package/src/bucket/providers/LocalFileStorageProvider.ts +1 -1
  294. package/src/bucket/providers/MemoryFileStorageProvider.ts +1 -1
  295. package/src/cache/core/__tests__/shared.ts +30 -0
  296. package/src/cache/core/index.ts +11 -6
  297. package/src/cache/core/primitives/$cache.spec.ts +5 -0
  298. package/src/cache/core/providers/CacheProvider.ts +17 -0
  299. package/src/cache/core/providers/MemoryCacheProvider.ts +300 -1
  300. package/src/cache/redis/__tests__/cache-redis.spec.ts +5 -0
  301. package/src/cache/redis/providers/RedisCacheProvider.ts +9 -0
  302. package/src/cli/apps/AlephaCli.ts +3 -16
  303. package/src/cli/apps/AlephaPackageBuilderCli.ts +10 -2
  304. package/src/cli/atoms/appEntryOptions.ts +13 -0
  305. package/src/cli/atoms/buildOptions.ts +1 -1
  306. package/src/cli/atoms/changelogOptions.ts +1 -1
  307. package/src/cli/commands/build.ts +64 -52
  308. package/src/cli/commands/db.ts +17 -11
  309. package/src/cli/commands/deploy.ts +1 -1
  310. package/src/cli/commands/dev.ts +13 -49
  311. package/src/cli/commands/gen/env.ts +6 -3
  312. package/src/cli/commands/gen/openapi.ts +5 -2
  313. package/src/cli/commands/init.spec.ts +544 -0
  314. package/src/cli/commands/init.ts +101 -58
  315. package/src/cli/commands/lint.ts +8 -2
  316. package/src/cli/commands/typecheck.ts +11 -0
  317. package/src/cli/defineConfig.ts +9 -0
  318. package/src/cli/index.ts +2 -1
  319. package/src/cli/providers/AppEntryProvider.ts +131 -0
  320. package/src/cli/providers/ViteBuildProvider.ts +40 -0
  321. package/src/cli/providers/ViteDevServerProvider.ts +378 -0
  322. package/src/cli/services/AlephaCliUtils.ts +39 -93
  323. package/src/cli/services/PackageManagerUtils.ts +140 -17
  324. package/src/cli/services/ProjectScaffolder.ts +169 -101
  325. package/src/cli/services/ViteUtils.ts +82 -0
  326. package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +41 -28
  327. package/src/cli/{assets → templates}/apiHelloControllerTs.ts +2 -1
  328. package/src/cli/{assets → templates}/biomeJson.ts +2 -1
  329. package/src/cli/{assets → templates}/dummySpecTs.ts +2 -1
  330. package/src/cli/{assets → templates}/editorconfig.ts +2 -1
  331. package/src/cli/templates/gitignore.ts +39 -0
  332. package/src/cli/{assets → templates}/mainBrowserTs.ts +2 -1
  333. package/src/cli/templates/mainCss.ts +33 -0
  334. package/src/cli/templates/mainServerTs.ts +33 -0
  335. package/src/cli/{assets → templates}/tsconfigJson.ts +2 -1
  336. package/src/cli/templates/webAppRouterTs.ts +50 -0
  337. package/src/cli/templates/webHelloComponentTsx.ts +20 -0
  338. package/src/command/helpers/Runner.spec.ts +4 -0
  339. package/src/command/helpers/Runner.ts +3 -21
  340. package/src/command/index.ts +12 -4
  341. package/src/command/providers/CliProvider.spec.ts +1067 -0
  342. package/src/command/providers/CliProvider.ts +203 -40
  343. package/src/core/Alepha.ts +3 -9
  344. package/src/core/__tests__/Alepha-start.spec.ts +4 -4
  345. package/src/core/helpers/jsonSchemaToTypeBox.spec.ts +771 -0
  346. package/src/core/helpers/jsonSchemaToTypeBox.ts +62 -10
  347. package/src/core/index.shared.ts +1 -0
  348. package/src/core/index.ts +20 -0
  349. package/src/core/primitives/$module.ts +12 -0
  350. package/src/core/providers/EventManager.spec.ts +0 -71
  351. package/src/core/providers/EventManager.ts +3 -15
  352. package/src/core/providers/Json.ts +2 -14
  353. package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +257 -0
  354. package/src/core/providers/KeylessJsonSchemaCodec.ts +396 -14
  355. package/src/core/providers/SchemaValidator.spec.ts +236 -0
  356. package/src/datetime/index.ts +15 -0
  357. package/src/email/index.ts +10 -5
  358. package/src/email/providers/LocalEmailProvider.spec.ts +1 -1
  359. package/src/email/providers/LocalEmailProvider.ts +1 -1
  360. package/src/fake/__tests__/keyName.example.ts +1 -1
  361. package/src/fake/__tests__/keyName.spec.ts +5 -5
  362. package/src/fake/index.ts +9 -6
  363. package/src/fake/providers/FakeProvider.spec.ts +258 -40
  364. package/src/fake/providers/FakeProvider.ts +133 -19
  365. package/src/lock/core/index.ts +11 -4
  366. package/src/logger/index.ts +17 -66
  367. package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
  368. package/src/mcp/errors/McpError.ts +30 -0
  369. package/src/mcp/index.ts +13 -27
  370. package/src/mcp/transports/SseMcpTransport.ts +6 -7
  371. package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
  372. package/src/orm/index.browser.ts +2 -2
  373. package/src/orm/index.bun.ts +4 -2
  374. package/src/orm/index.ts +21 -47
  375. package/src/orm/providers/DrizzleKitProvider.ts +3 -5
  376. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -0
  377. package/src/orm/services/Repository.ts +18 -3
  378. package/src/queue/core/index.ts +14 -6
  379. package/src/react/auth/__tests__/$auth.spec.ts +202 -0
  380. package/src/react/auth/hooks/useAuth.ts +32 -0
  381. package/src/react/auth/index.browser.ts +13 -0
  382. package/src/react/auth/index.shared.ts +2 -0
  383. package/src/react/auth/index.ts +48 -0
  384. package/src/react/auth/providers/ReactAuthProvider.ts +16 -0
  385. package/src/react/auth/services/ReactAuth.ts +135 -0
  386. package/src/react/core/__tests__/Router.spec.tsx +169 -0
  387. package/src/react/core/components/ClientOnly.tsx +49 -0
  388. package/src/react/core/components/ErrorBoundary.tsx +73 -0
  389. package/src/react/core/contexts/AlephaContext.ts +7 -0
  390. package/src/react/core/contexts/AlephaProvider.tsx +42 -0
  391. package/src/react/core/hooks/useAction.browser.spec.tsx +569 -0
  392. package/src/react/core/hooks/useAction.ts +480 -0
  393. package/src/react/core/hooks/useAlepha.ts +26 -0
  394. package/src/react/core/hooks/useClient.ts +17 -0
  395. package/src/react/core/hooks/useEvents.ts +51 -0
  396. package/src/react/core/hooks/useInject.ts +12 -0
  397. package/src/react/core/hooks/useStore.ts +52 -0
  398. package/src/react/core/index.ts +90 -0
  399. package/src/react/form/components/FormState.tsx +17 -0
  400. package/src/react/form/errors/FormValidationError.ts +18 -0
  401. package/src/react/form/hooks/useForm.browser.spec.tsx +366 -0
  402. package/src/react/form/hooks/useForm.ts +47 -0
  403. package/src/react/form/hooks/useFormState.ts +130 -0
  404. package/src/react/form/index.ts +44 -0
  405. package/src/react/form/services/FormModel.ts +614 -0
  406. package/src/react/head/helpers/SeoExpander.spec.ts +203 -0
  407. package/src/react/head/helpers/SeoExpander.ts +142 -0
  408. package/src/react/head/hooks/useHead.spec.tsx +288 -0
  409. package/src/react/head/hooks/useHead.ts +62 -0
  410. package/src/react/head/index.browser.ts +26 -0
  411. package/src/react/head/index.ts +44 -0
  412. package/src/react/head/interfaces/Head.ts +105 -0
  413. package/src/react/head/primitives/$head.ts +25 -0
  414. package/src/react/head/providers/BrowserHeadProvider.browser.spec.ts +196 -0
  415. package/src/react/head/providers/BrowserHeadProvider.ts +212 -0
  416. package/src/react/head/providers/HeadProvider.ts +168 -0
  417. package/src/react/head/providers/ServerHeadProvider.ts +31 -0
  418. package/src/react/i18n/__tests__/integration.spec.tsx +239 -0
  419. package/src/react/i18n/components/Localize.spec.tsx +357 -0
  420. package/src/react/i18n/components/Localize.tsx +35 -0
  421. package/src/react/i18n/hooks/useI18n.browser.spec.tsx +438 -0
  422. package/src/react/i18n/hooks/useI18n.ts +18 -0
  423. package/src/react/i18n/index.ts +41 -0
  424. package/src/react/i18n/primitives/$dictionary.ts +69 -0
  425. package/src/react/i18n/providers/I18nProvider.spec.ts +389 -0
  426. package/src/react/i18n/providers/I18nProvider.ts +278 -0
  427. package/src/react/router/__tests__/page-head-browser.browser.spec.ts +95 -0
  428. package/src/react/router/__tests__/page-head.spec.ts +48 -0
  429. package/src/react/router/__tests__/seo-head.spec.ts +125 -0
  430. package/src/react/router/atoms/ssrManifestAtom.ts +58 -0
  431. package/src/react/router/components/ErrorViewer.tsx +872 -0
  432. package/src/react/router/components/Link.tsx +23 -0
  433. package/src/react/router/components/NestedView.tsx +223 -0
  434. package/src/react/router/components/NotFound.tsx +30 -0
  435. package/src/react/router/constants/PAGE_PRELOAD_KEY.ts +6 -0
  436. package/src/react/router/contexts/RouterLayerContext.ts +12 -0
  437. package/src/react/router/errors/Redirection.ts +28 -0
  438. package/src/react/router/hooks/useActive.ts +52 -0
  439. package/src/react/router/hooks/useQueryParams.ts +63 -0
  440. package/src/react/router/hooks/useRouter.ts +20 -0
  441. package/src/react/router/hooks/useRouterState.ts +11 -0
  442. package/src/react/router/index.browser.ts +45 -0
  443. package/src/react/router/index.shared.ts +19 -0
  444. package/src/react/router/index.ts +142 -0
  445. package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
  446. package/src/react/router/primitives/$page.spec.tsx +708 -0
  447. package/src/react/router/primitives/$page.ts +497 -0
  448. package/src/react/router/providers/ReactBrowserProvider.ts +309 -0
  449. package/src/react/router/providers/ReactBrowserRendererProvider.ts +25 -0
  450. package/src/react/router/providers/ReactBrowserRouterProvider.ts +168 -0
  451. package/src/react/router/providers/ReactPageProvider.ts +726 -0
  452. package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
  453. package/src/react/router/providers/ReactServerProvider.ts +558 -0
  454. package/src/react/router/providers/ReactServerTemplateProvider.ts +979 -0
  455. package/src/react/router/providers/SSRManifestProvider.ts +334 -0
  456. package/src/react/router/services/ReactPageServerService.ts +48 -0
  457. package/src/react/router/services/ReactPageService.ts +27 -0
  458. package/src/react/router/services/ReactRouter.ts +262 -0
  459. package/src/react/websocket/hooks/useRoom.tsx +242 -0
  460. package/src/react/websocket/index.ts +7 -0
  461. package/src/redis/__tests__/redis.spec.ts +13 -0
  462. package/src/redis/index.ts +9 -25
  463. package/src/redis/providers/BunRedisProvider.ts +9 -0
  464. package/src/redis/providers/NodeRedisProvider.ts +8 -0
  465. package/src/redis/providers/RedisProvider.ts +16 -0
  466. package/src/retry/index.ts +11 -2
  467. package/src/router/index.ts +15 -0
  468. package/src/scheduler/index.ts +11 -2
  469. package/src/security/__tests__/BasicAuth.spec.ts +2 -0
  470. package/src/security/__tests__/ServerSecurityProvider.spec.ts +13 -5
  471. package/src/security/index.ts +15 -10
  472. package/src/security/interfaces/IssuerResolver.ts +27 -0
  473. package/src/security/primitives/$issuer.ts +55 -0
  474. package/src/security/providers/SecurityProvider.ts +179 -0
  475. package/src/security/providers/ServerBasicAuthProvider.ts +6 -2
  476. package/src/security/providers/ServerSecurityProvider.ts +36 -22
  477. package/src/server/auth/index.ts +12 -7
  478. package/src/server/cache/index.ts +7 -22
  479. package/src/server/compress/index.ts +10 -2
  480. package/src/server/cookies/index.ts +7 -5
  481. package/src/server/cookies/primitives/$cookie.ts +33 -11
  482. package/src/server/core/index.ts +17 -7
  483. package/src/server/core/interfaces/ServerRequest.ts +83 -1
  484. package/src/server/core/primitives/$action.spec.ts +1 -1
  485. package/src/server/core/primitives/$action.ts +8 -3
  486. package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
  487. package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
  488. package/src/server/core/providers/NodeHttpServerProvider.ts +77 -22
  489. package/src/server/core/providers/ServerLoggerProvider.ts +2 -2
  490. package/src/server/core/providers/ServerProvider.ts +9 -12
  491. package/src/server/core/services/ServerRequestParser.spec.ts +520 -0
  492. package/src/server/core/services/ServerRequestParser.ts +306 -13
  493. package/src/server/cors/index.ts +7 -21
  494. package/src/server/cors/primitives/$cors.ts +6 -2
  495. package/src/server/health/index.ts +8 -2
  496. package/src/server/helmet/index.ts +11 -3
  497. package/src/server/links/atoms/apiLinksAtom.ts +7 -0
  498. package/src/server/links/index.browser.ts +2 -0
  499. package/src/server/links/index.ts +13 -6
  500. package/src/server/metrics/index.ts +10 -3
  501. package/src/server/multipart/index.ts +9 -3
  502. package/src/server/proxy/index.ts +8 -2
  503. package/src/server/rate-limit/index.ts +21 -25
  504. package/src/server/rate-limit/primitives/$rateLimit.ts +6 -2
  505. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +38 -14
  506. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +22 -56
  507. package/src/server/static/index.ts +8 -2
  508. package/src/server/static/providers/ServerStaticProvider.ts +1 -1
  509. package/src/server/swagger/index.ts +9 -4
  510. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  511. package/src/sms/index.ts +9 -5
  512. package/src/sms/providers/LocalSmsProvider.spec.ts +1 -1
  513. package/src/sms/providers/LocalSmsProvider.ts +1 -1
  514. package/src/system/index.browser.ts +11 -0
  515. package/src/system/index.ts +62 -0
  516. package/src/{file → system}/providers/FileSystemProvider.ts +16 -0
  517. package/src/{file → system}/providers/MemoryFileSystemProvider.ts +116 -3
  518. package/src/system/providers/MemoryShellProvider.ts +164 -0
  519. package/src/{file → system}/providers/NodeFileSystemProvider.spec.ts +2 -2
  520. package/src/{file → system}/providers/NodeFileSystemProvider.ts +36 -0
  521. package/src/system/providers/NodeShellProvider.ts +184 -0
  522. package/src/system/providers/ShellProvider.ts +74 -0
  523. package/src/{file → system}/services/FileDetector.spec.ts +2 -2
  524. package/src/thread/index.ts +11 -2
  525. package/src/topic/core/index.ts +12 -5
  526. package/src/vite/index.ts +3 -2
  527. package/src/vite/tasks/buildClient.ts +2 -8
  528. package/src/vite/tasks/buildServer.ts +84 -21
  529. package/src/vite/tasks/copyAssets.ts +5 -4
  530. package/src/vite/tasks/generateSitemap.ts +64 -23
  531. package/src/vite/tasks/index.ts +0 -2
  532. package/src/vite/tasks/prerenderPages.ts +49 -24
  533. package/src/websocket/index.ts +12 -8
  534. package/dist/file/index.d.ts +0 -839
  535. package/dist/file/index.d.ts.map +0 -1
  536. package/dist/file/index.js.map +0 -1
  537. package/src/cli/assets/indexHtml.ts +0 -15
  538. package/src/cli/assets/mainServerTs.ts +0 -24
  539. package/src/cli/assets/webAppRouterTs.ts +0 -15
  540. package/src/cli/assets/webHelloComponentTsx.ts +0 -16
  541. package/src/cli/commands/format.ts +0 -23
  542. package/src/file/index.ts +0 -43
  543. package/src/vite/helpers/boot.ts +0 -117
  544. package/src/vite/plugins/viteAlephaDev.ts +0 -177
  545. package/src/vite/tasks/devServer.ts +0 -71
  546. package/src/vite/tasks/runAlepha.ts +0 -270
  547. /package/dist/orm/{chunk-DtkW-qnP.js → chunk-DH6iiROE.js} +0 -0
  548. /package/src/cli/{assets → templates}/apiIndexTs.ts +0 -0
  549. /package/src/cli/{assets → templates}/webIndexTs.ts +0 -0
  550. /package/src/{file → system}/errors/FileError.ts +0 -0
  551. /package/src/{file → system}/services/FileDetector.ts +0 -0
@@ -12,38 +12,50 @@ import * as alepha_logger0 from "alepha/logger";
12
12
  */
13
13
  declare abstract class CacheProvider {
14
14
  /**
15
- * Get the value of a key.
16
- *
17
- * @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
18
- * @param key The key of the value to get.
19
- *
20
- * @return The value of the key, or undefined if the key does not exist.
21
- */
15
+ * Get the value of a key.
16
+ *
17
+ * @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
18
+ * @param key The key of the value to get.
19
+ *
20
+ * @return The value of the key, or undefined if the key does not exist.
21
+ */
22
22
  abstract get(name: string, key: string): Promise<Uint8Array | undefined>;
23
23
  /**
24
- * Set the string value of a key.
25
- *
26
- * @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
27
- * @param key The key of the value to set.
28
- * @param value The value to set.
29
- * @param ttl The time-to-live of the key, in milliseconds.
30
- *
31
- * @return The value of the key.
32
- */
24
+ * Set the string value of a key.
25
+ *
26
+ * @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
27
+ * @param key The key of the value to set.
28
+ * @param value The value to set.
29
+ * @param ttl The time-to-live of the key, in milliseconds.
30
+ *
31
+ * @return The value of the key.
32
+ */
33
33
  abstract set(name: string, key: string, value: Uint8Array, ttl?: number): Promise<Uint8Array>;
34
34
  /**
35
- * Remove the specified keys.
36
- *
37
- * @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
38
- * @param keys The keys to delete.
39
- */
35
+ * Remove the specified keys.
36
+ *
37
+ * @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
38
+ * @param keys The keys to delete.
39
+ */
40
40
  abstract del(name: string, ...keys: string[]): Promise<void>;
41
41
  abstract has(name: string, key: string): Promise<boolean>;
42
42
  abstract keys(name: string, filter?: string): Promise<string[]>;
43
43
  /**
44
- * Remove all keys from all cache names.
45
- */
44
+ * Remove all keys from all cache names.
45
+ */
46
46
  abstract clear(): Promise<void>;
47
+ /**
48
+ * Increment the integer value of a key by the given amount.
49
+ *
50
+ * If the key does not exist, it is set to 0 before performing the operation.
51
+ * This operation is atomic when using Redis.
52
+ *
53
+ * @param name Cache name, used to group keys.
54
+ * @param key The key to increment.
55
+ * @param amount The amount to increment by.
56
+ * @returns The new value after incrementing.
57
+ */
58
+ abstract incr(name: string, key: string, amount: number): Promise<number>;
47
59
  }
48
60
  //#endregion
49
61
  //#region ../../src/cache/core/primitives/$cache.d.ts
@@ -101,37 +113,37 @@ declare const $cache: {
101
113
  };
102
114
  interface CachePrimitiveOptions<TReturn = any, TParameter extends any[] = any[]> {
103
115
  /**
104
- * The cache name. This is useful for invalidating multiple caches at once.
105
- *
106
- * Store key as `cache:$name:$key`.
107
- *
108
- * @default Name of the key of the class.
109
- */
116
+ * The cache name. This is useful for invalidating multiple caches at once.
117
+ *
118
+ * Store key as `cache:$name:$key`.
119
+ *
120
+ * @default Name of the key of the class.
121
+ */
110
122
  name?: string;
111
123
  /**
112
- * Function which returns cached data.
113
- */
124
+ * Function which returns cached data.
125
+ */
114
126
  handler?: (...args: TParameter) => TReturn;
115
127
  /**
116
- * The key generator for the cache.
117
- * If not provided, the arguments will be json.stringify().
118
- */
128
+ * The key generator for the cache.
129
+ * If not provided, the arguments will be json.stringify().
130
+ */
119
131
  key?: (...args: TParameter) => string;
120
132
  /**
121
- * The store provider for the cache.
122
- * If not provided, the default store provider will be used.
123
- */
133
+ * The store provider for the cache.
134
+ * If not provided, the default store provider will be used.
135
+ */
124
136
  provider?: InstantiableClass<CacheProvider> | "memory";
125
137
  /**
126
- * The time-to-live for the cache in seconds.
127
- * Set 0 to skip expiration.
128
- *
129
- * @default 300 (5 minutes).
130
- */
138
+ * The time-to-live for the cache in seconds.
139
+ * Set 0 to skip expiration.
140
+ *
141
+ * @default 300 (5 minutes).
142
+ */
131
143
  ttl?: DurationLike;
132
144
  /**
133
- * If the cache is disabled.
134
- */
145
+ * If the cache is disabled.
146
+ */
135
147
  disabled?: boolean;
136
148
  }
137
149
  declare class CachePrimitive<TReturn = any, TParameter extends any[] = any[]> extends Primitive<CachePrimitiveOptions<TReturn, TParameter>> {
@@ -160,8 +172,8 @@ declare class CachePrimitive<TReturn = any, TParameter extends any[] = any[]> ex
160
172
  }
161
173
  interface CachePrimitiveFn<TReturn = any, TParameter extends any[] = any[]> extends CachePrimitive<TReturn, TParameter> {
162
174
  /**
163
- * Run the cache primitive with the provided arguments.
164
- */
175
+ * Run the cache primitive with the provided arguments.
176
+ */
165
177
  (...args: TParameter): Promise<TReturn>;
166
178
  }
167
179
  //#endregion
@@ -172,31 +184,191 @@ type CacheValue = {
172
184
  data?: Uint8Array;
173
185
  timeout?: Timeout;
174
186
  };
187
+ interface MemoryCacheCall {
188
+ name: string;
189
+ key: string;
190
+ timestamp: number;
191
+ }
192
+ interface MemoryCacheSetCall extends MemoryCacheCall {
193
+ value: Uint8Array;
194
+ ttl?: number;
195
+ }
196
+ interface MemoryCacheDelCall {
197
+ name: string;
198
+ keys: string[];
199
+ timestamp: number;
200
+ }
201
+ interface MemoryCacheStats {
202
+ hits: number;
203
+ misses: number;
204
+ sets: number;
205
+ deletes: number;
206
+ }
207
+ interface MemoryCacheProviderOptions {
208
+ /**
209
+ * Error to throw on get operations (for testing error handling)
210
+ */
211
+ getError?: Error | null;
212
+ /**
213
+ * Error to throw on set operations (for testing error handling)
214
+ */
215
+ setError?: Error | null;
216
+ /**
217
+ * Error to throw on del operations (for testing error handling)
218
+ */
219
+ delError?: Error | null;
220
+ }
221
+ /**
222
+ * In-memory implementation of CacheProvider for testing.
223
+ *
224
+ * This provider stores all cache entries in memory, making it ideal for
225
+ * unit tests that need to verify cache operations without touching Redis or other backends.
226
+ *
227
+ * @example
228
+ * ```typescript
229
+ * // In tests, substitute the real CacheProvider with MemoryCacheProvider
230
+ * const alepha = Alepha.create().with({
231
+ * provide: CacheProvider,
232
+ * use: MemoryCacheProvider,
233
+ * });
234
+ *
235
+ * // Run code that uses caching
236
+ * const service = alepha.inject(MyService);
237
+ * await service.fetchWithCache("key");
238
+ *
239
+ * // Verify cache behavior
240
+ * const cache = alepha.inject(MemoryCacheProvider);
241
+ * expect(cache.stats().misses).toBe(1);
242
+ * await service.fetchWithCache("key");
243
+ * expect(cache.stats().hits).toBe(1);
244
+ * ```
245
+ */
175
246
  declare class MemoryCacheProvider implements CacheProvider {
176
247
  protected readonly dateTimeProvider: DateTimeProvider;
177
248
  protected readonly log: alepha_logger0.Logger;
178
249
  protected store: Record<CacheName, Record<CacheKey, CacheValue>>;
250
+ /**
251
+ * All recorded get calls.
252
+ */
253
+ getCalls: MemoryCacheCall[];
254
+ /**
255
+ * All recorded set calls.
256
+ */
257
+ setCalls: MemoryCacheSetCall[];
258
+ /**
259
+ * All recorded del calls.
260
+ */
261
+ delCalls: MemoryCacheDelCall[];
262
+ /**
263
+ * Cache statistics.
264
+ */
265
+ protected _stats: MemoryCacheStats;
266
+ /**
267
+ * Error to throw on get (for testing error handling)
268
+ */
269
+ getError: Error | null;
270
+ /**
271
+ * Error to throw on set (for testing error handling)
272
+ */
273
+ setError: Error | null;
274
+ /**
275
+ * Error to throw on del (for testing error handling)
276
+ */
277
+ delError: Error | null;
278
+ constructor(options?: MemoryCacheProviderOptions);
179
279
  get(name: string, key: string): Promise<Uint8Array | undefined>;
180
280
  set(name: string, key: string, value: Uint8Array, ttl?: number): Promise<Uint8Array>;
181
281
  del(name: string, ...keys: string[]): Promise<void>;
182
282
  has(name: string, key: string): Promise<boolean>;
183
283
  keys(name: string, filter?: string): Promise<string[]>;
184
284
  clear(): Promise<void>;
285
+ incr(name: string, key: string, amount: number): Promise<number>;
286
+ /**
287
+ * Get cache statistics (hits, misses, sets, deletes).
288
+ *
289
+ * @example
290
+ * ```typescript
291
+ * expect(cache.stats().hits).toBe(1);
292
+ * expect(cache.stats().misses).toBe(0);
293
+ * ```
294
+ */
295
+ stats(): MemoryCacheStats;
296
+ /**
297
+ * Check if a key was set during the test.
298
+ *
299
+ * @example
300
+ * ```typescript
301
+ * expect(cache.wasSet("my-cache", "user:123")).toBe(true);
302
+ * ```
303
+ */
304
+ wasSet(name: string, key?: string): boolean;
305
+ /**
306
+ * Check if a key was retrieved during the test.
307
+ *
308
+ * @example
309
+ * ```typescript
310
+ * expect(cache.wasGet("my-cache", "user:123")).toBe(true);
311
+ * ```
312
+ */
313
+ wasGet(name: string, key?: string): boolean;
314
+ /**
315
+ * Check if a key was deleted during the test.
316
+ *
317
+ * @example
318
+ * ```typescript
319
+ * expect(cache.wasDeleted("my-cache", "user:123")).toBe(true);
320
+ * ```
321
+ */
322
+ wasDeleted(name: string, key?: string): boolean;
323
+ /**
324
+ * Get the number of cached entries for a specific cache name.
325
+ *
326
+ * @example
327
+ * ```typescript
328
+ * expect(cache.size("my-cache")).toBe(5);
329
+ * ```
330
+ */
331
+ size(name?: string): number;
332
+ /**
333
+ * Get all cache names.
334
+ *
335
+ * @example
336
+ * ```typescript
337
+ * expect(cache.names()).toContain("my-cache");
338
+ * ```
339
+ */
340
+ names(): string[];
341
+ /**
342
+ * Reset all in-memory state (useful between tests).
343
+ *
344
+ * @example
345
+ * ```typescript
346
+ * beforeEach(() => {
347
+ * cache.reset();
348
+ * });
349
+ * ```
350
+ */
351
+ reset(): void;
185
352
  }
186
353
  //#endregion
187
354
  //#region ../../src/cache/core/index.d.ts
188
355
  /**
189
- * Provides high-performance caching capabilities for Alepha applications with configurable TTL and multiple storage backends.
356
+ * | type | quality | stability |
357
+ * |------|---------|-----------|
358
+ * | backend | rare | stable |
359
+ *
360
+ * Type-safe caching with TTL support.
190
361
  *
191
- * The cache module enables declarative caching through the `$cache` primitive, allowing you to cache method results,
192
- * API responses, or computed values with automatic invalidation and type safety. It supports both in-memory and
193
- * persistent storage backends for different performance and durability requirements.
362
+ * **Features:**
363
+ * - Cached computations with type-safe keys and values
364
+ * - Configurable TTL
365
+ * - Cache invalidation
366
+ * - Automatic cache population
367
+ * - Providers: Memory (default), Redis
194
368
  *
195
- * @see {@link $cache}
196
- * @see {@link CacheProvider}
197
369
  * @module alepha.cache
198
370
  */
199
371
  declare const AlephaCache: alepha0.Service<alepha0.Module>;
200
372
  //#endregion
201
- export { $cache, AlephaCache, CachePrimitive, CachePrimitiveFn, CachePrimitiveOptions, CacheProvider, MemoryCacheProvider };
373
+ export { $cache, AlephaCache, CachePrimitive, CachePrimitiveFn, CachePrimitiveOptions, CacheProvider, MemoryCacheCall, MemoryCacheDelCall, MemoryCacheProvider, MemoryCacheProviderOptions, MemoryCacheSetCall, MemoryCacheStats };
202
374
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cache/core/providers/CacheProvider.ts","../../../src/cache/core/primitives/$cache.ts","../../../src/cache/core/providers/MemoryCacheProvider.ts","../../../src/cache/core/index.ts"],"mappings":";;;;;;;AAMA;;;;;uBAAsB,aAAA;EAAA;;;;;;;;EAAA,SAAA,IAAA,IAAA,UAAA,GAAA,WAYjB,OAAA,CAAQ,UAAA;EAAA;;;;;;;;;;EAAA,SAAA,IAAA,IAAA,UAAA,GAAA,UAAA,KAAA,EAeF,UAAA,EAAA,GAAA,YAEN,OAAA,CAAQ,UAAA;EAAA;;;;;;EAAA,SAAA,IAAA,IAAA,aAAA,IAAA,aAQ2C,OAAA;EAAA,SAAA,IAAA,IAAA,UAAA,GAAA,WAEN,OAAA;EAAA,SAAA,KAAA,IAAA,UAAA,MAAA,YAEK,OAAA;EAAA;;;EAAA,SAAA,MAAA,GAK5B,OAAA;AAAA;;;;ACU3B;;;;;;;;;;AAgBA;;;;;;;;AAsDA;;;;;;;;;;;;;;;;;;;;;;;;;;AAmJA;;;cAzNa,MAAA;EAAA,qDAAA,OAAA,GACF,qBAAA,CAAsB,OAAA,EAAS,UAAA,IACvC,gBAAA,CAAiB,OAAA,EAAS,UAAA;EAAA;;UAcZ,qBAAA;EAAA;;;;;;;EAAA,IAAA;EAAA;;;EAAA,OAAA,OAAA,IAAA,EAgBK,UAAA,KAAe,OAAA;EAAA;;;;EAAA,GAAA,OAAA,IAAA,EAMnB,UAAA;EAAA;;;;EAAA,QAAA,GAML,iBAAA,CAAkB,aAAA;EAAA;;;;AA0B/B;;EA1B+B,GAAA,GAQvB,YAAA;EAAA;;AAkBR;EAlBQ,QAAA;AAAA;AAAA,cAkBK,cAAA,0DAGH,SAAA,CAAU,qBAAA,CAAsB,OAAA,EAAS,UAAA;EAAA,mBAAA,GAAA;IAAA,aAAA;IAAA,iBAAA;EAAA;EAAA,mBAAA,gBAAA,EAEd,gBAAA;EAAA,mBAAA,QAAA,EACR,aAAA;EAAA,UAAA,OAAA,EACR,WAAA;EAAA,UAAA,OAAA,EACA,WAAA;EAAA,UAAA,KAAA;IAAA,MAAA;IAAA,IAAA;IAAA,MAAA;EAAA;EAAA,IAAA,UAAA;EAAA,IAAA,GAAA,IAAA,EAcO,UAAA,GAAa,OAAA,CAAQ,OAAA;EAAA,IAAA,GAAA,IAAA,EAoB3B,UAAA;EAAA,WAAA,GAAA,IAAA,aAIwB,OAAA;EAAA,IAAA,GAAA,UAAA,KAAA,EAoBnC,OAAA,EAAA,GAAA,GACD,YAAA,GACL,OAAA;EAAA,IAAA,GAAA,WAe4B,OAAA,CAAQ,OAAA;EAAA,UAAA,SAAA,SAAA,CAAA,KAAA,EAiBH,OAAA,GAAU,UAAA;EAAA,UAAA,WAAA,SAAA,CAAA,UAAA,EAgBhC,UAAA,GACX,OAAA,CAAQ,OAAA;EAAA,UAAA,UAAA,GAiBY,aAAA;AAAA;AAAA,UAaR,gBAAA,0DAGP,cAAA,CAAe,OAAA,EAAS,UAAA;EAAA;;;EAAA,IAAA,IAAA,EAItB,UAAA,GAAa,OAAA,CAAQ,OAAA;AAAA;;;KCzR5B,SAAA;AAAA,KACA,QAAA;AAAA,KACA,UAAA;EAAA,IAAA,GACI,UAAA;EAAA,OAAA,GACG,OAAA;AAAA;AAAA,cAGC,mBAAA,YAA+B,aAAA;EAAA,mBAAA,gBAAA,EACP,gBAAA;EAAA,mBAAA,GAAA,EAAA,cAAA,CACb,MAAA;EAAA,UAAA,KAAA,EAEL,MAAA,CAAO,SAAA,EAAW,MAAA,CAAO,QAAA,EAAU,UAAA;EAAA,IAAA,IAAA,UAAA,GAAA,WAEP,OAAA,CAAQ,UAAA;EAAA,IAAA,IAAA,UAAA,GAAA,UAAA,KAAA,EAO5C,UAAA,EAAA,GAAA,YAEN,OAAA,CAAQ,UAAA;EAAA,IAAA,IAAA,aAAA,IAAA,aA0BwC,OAAA;EAAA,IAAA,IAAA,UAAA,GAAA,WAqCN,OAAA;EAAA,KAAA,IAAA,UAAA,MAAA,YAIK,OAAA;EAAA,MAAA,GAS5B,OAAA;AAAA;;;;AC/ExB;;;;;;;;;;cAAa,WAAA,EAAW,OAAA,CAAA,OAAA,CAUtB,OAAA,CAVsB,MAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cache/core/providers/CacheProvider.ts","../../../src/cache/core/primitives/$cache.ts","../../../src/cache/core/providers/MemoryCacheProvider.ts","../../../src/cache/core/index.ts"],"mappings":"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"}
@@ -17,14 +17,95 @@ var CacheProvider = class {};
17
17
 
18
18
  //#endregion
19
19
  //#region ../../src/cache/core/providers/MemoryCacheProvider.ts
20
+ /**
21
+ * In-memory implementation of CacheProvider for testing.
22
+ *
23
+ * This provider stores all cache entries in memory, making it ideal for
24
+ * unit tests that need to verify cache operations without touching Redis or other backends.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // In tests, substitute the real CacheProvider with MemoryCacheProvider
29
+ * const alepha = Alepha.create().with({
30
+ * provide: CacheProvider,
31
+ * use: MemoryCacheProvider,
32
+ * });
33
+ *
34
+ * // Run code that uses caching
35
+ * const service = alepha.inject(MyService);
36
+ * await service.fetchWithCache("key");
37
+ *
38
+ * // Verify cache behavior
39
+ * const cache = alepha.inject(MemoryCacheProvider);
40
+ * expect(cache.stats().misses).toBe(1);
41
+ * await service.fetchWithCache("key");
42
+ * expect(cache.stats().hits).toBe(1);
43
+ * ```
44
+ */
20
45
  var MemoryCacheProvider = class {
21
46
  dateTimeProvider = $inject(DateTimeProvider);
22
47
  log = $logger();
23
48
  store = {};
49
+ /**
50
+ * All recorded get calls.
51
+ */
52
+ getCalls = [];
53
+ /**
54
+ * All recorded set calls.
55
+ */
56
+ setCalls = [];
57
+ /**
58
+ * All recorded del calls.
59
+ */
60
+ delCalls = [];
61
+ /**
62
+ * Cache statistics.
63
+ */
64
+ _stats = {
65
+ hits: 0,
66
+ misses: 0,
67
+ sets: 0,
68
+ deletes: 0
69
+ };
70
+ /**
71
+ * Error to throw on get (for testing error handling)
72
+ */
73
+ getError = null;
74
+ /**
75
+ * Error to throw on set (for testing error handling)
76
+ */
77
+ setError = null;
78
+ /**
79
+ * Error to throw on del (for testing error handling)
80
+ */
81
+ delError = null;
82
+ constructor(options = {}) {
83
+ this.getError = options.getError ?? null;
84
+ this.setError = options.setError ?? null;
85
+ this.delError = options.delError ?? null;
86
+ }
24
87
  async get(name, key) {
25
- return this.store[name]?.[key]?.data;
88
+ this.getCalls.push({
89
+ name,
90
+ key,
91
+ timestamp: Date.now()
92
+ });
93
+ if (this.getError) throw this.getError;
94
+ const data = this.store[name]?.[key]?.data;
95
+ if (data !== void 0) this._stats.hits++;
96
+ else this._stats.misses++;
97
+ return data;
26
98
  }
27
99
  async set(name, key, value, ttl) {
100
+ this.setCalls.push({
101
+ name,
102
+ key,
103
+ value,
104
+ ttl,
105
+ timestamp: Date.now()
106
+ });
107
+ this._stats.sets++;
108
+ if (this.setError) throw this.setError;
28
109
  if (this.store[name] == null) this.store[name] = {};
29
110
  this.store[name][key] ??= {};
30
111
  this.store[name][key].data = value;
@@ -41,6 +122,13 @@ var MemoryCacheProvider = class {
41
122
  return this.store[name][key].data;
42
123
  }
43
124
  async del(name, ...keys) {
125
+ this.delCalls.push({
126
+ name,
127
+ keys,
128
+ timestamp: Date.now()
129
+ });
130
+ this._stats.deletes++;
131
+ if (this.delError) throw this.delError;
44
132
  if (keys.length === 0) {
45
133
  this.log.debug(`Deleting all cache for name`, { name });
46
134
  if (this.store[name]) for (const key of Object.keys(this.store[name])) {
@@ -79,6 +167,119 @@ var MemoryCacheProvider = class {
79
167
  }
80
168
  this.store = {};
81
169
  }
170
+ async incr(name, key, amount) {
171
+ if (this.store[name] == null) this.store[name] = {};
172
+ const existing = this.store[name][key]?.data;
173
+ let current = 0;
174
+ if (existing) {
175
+ const str = new TextDecoder().decode(existing);
176
+ current = Number.parseInt(str, 10) || 0;
177
+ }
178
+ const newValue = current + amount;
179
+ this.store[name][key] ??= {};
180
+ this.store[name][key].data = new TextEncoder().encode(String(newValue));
181
+ return newValue;
182
+ }
183
+ /**
184
+ * Get cache statistics (hits, misses, sets, deletes).
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * expect(cache.stats().hits).toBe(1);
189
+ * expect(cache.stats().misses).toBe(0);
190
+ * ```
191
+ */
192
+ stats() {
193
+ return { ...this._stats };
194
+ }
195
+ /**
196
+ * Check if a key was set during the test.
197
+ *
198
+ * @example
199
+ * ```typescript
200
+ * expect(cache.wasSet("my-cache", "user:123")).toBe(true);
201
+ * ```
202
+ */
203
+ wasSet(name, key) {
204
+ if (key === void 0) return this.setCalls.some((call) => call.name === name);
205
+ return this.setCalls.some((call) => call.name === name && call.key === key);
206
+ }
207
+ /**
208
+ * Check if a key was retrieved during the test.
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * expect(cache.wasGet("my-cache", "user:123")).toBe(true);
213
+ * ```
214
+ */
215
+ wasGet(name, key) {
216
+ if (key === void 0) return this.getCalls.some((call) => call.name === name);
217
+ return this.getCalls.some((call) => call.name === name && call.key === key);
218
+ }
219
+ /**
220
+ * Check if a key was deleted during the test.
221
+ *
222
+ * @example
223
+ * ```typescript
224
+ * expect(cache.wasDeleted("my-cache", "user:123")).toBe(true);
225
+ * ```
226
+ */
227
+ wasDeleted(name, key) {
228
+ if (key === void 0) return this.delCalls.some((call) => call.name === name);
229
+ return this.delCalls.some((call) => call.name === name && call.keys.includes(key));
230
+ }
231
+ /**
232
+ * Get the number of cached entries for a specific cache name.
233
+ *
234
+ * @example
235
+ * ```typescript
236
+ * expect(cache.size("my-cache")).toBe(5);
237
+ * ```
238
+ */
239
+ size(name) {
240
+ if (name === void 0) return Object.values(this.store).reduce((total, entries) => total + Object.keys(entries).length, 0);
241
+ return Object.keys(this.store[name] ?? {}).length;
242
+ }
243
+ /**
244
+ * Get all cache names.
245
+ *
246
+ * @example
247
+ * ```typescript
248
+ * expect(cache.names()).toContain("my-cache");
249
+ * ```
250
+ */
251
+ names() {
252
+ return Object.keys(this.store);
253
+ }
254
+ /**
255
+ * Reset all in-memory state (useful between tests).
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * beforeEach(() => {
260
+ * cache.reset();
261
+ * });
262
+ * ```
263
+ */
264
+ reset() {
265
+ for (const name of Object.keys(this.store)) for (const key of Object.keys(this.store[name])) {
266
+ const timeout = this.store[name][key]?.timeout;
267
+ if (timeout) this.dateTimeProvider.clearTimeout(timeout);
268
+ }
269
+ this.store = {};
270
+ this.getCalls = [];
271
+ this.setCalls = [];
272
+ this.delCalls = [];
273
+ this._stats = {
274
+ hits: 0,
275
+ misses: 0,
276
+ sets: 0,
277
+ deletes: 0
278
+ };
279
+ this.getError = null;
280
+ this.setError = null;
281
+ this.delError = null;
282
+ }
82
283
  };
83
284
 
84
285
  //#endregion
@@ -211,14 +412,19 @@ $cache[KIND] = CachePrimitive;
211
412
  //#endregion
212
413
  //#region ../../src/cache/core/index.ts
213
414
  /**
214
- * Provides high-performance caching capabilities for Alepha applications with configurable TTL and multiple storage backends.
415
+ * | type | quality | stability |
416
+ * |------|---------|-----------|
417
+ * | backend | rare | stable |
418
+ *
419
+ * Type-safe caching with TTL support.
215
420
  *
216
- * The cache module enables declarative caching through the `$cache` primitive, allowing you to cache method results,
217
- * API responses, or computed values with automatic invalidation and type safety. It supports both in-memory and
218
- * persistent storage backends for different performance and durability requirements.
421
+ * **Features:**
422
+ * - Cached computations with type-safe keys and values
423
+ * - Configurable TTL
424
+ * - Cache invalidation
425
+ * - Automatic cache population
426
+ * - Providers: Memory (default), Redis
219
427
  *
220
- * @see {@link $cache}
221
- * @see {@link CacheProvider}
222
428
  * @module alepha.cache
223
429
  */
224
430
  const AlephaCache = $module({