alepha 0.15.1 → 0.15.3

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 (523) hide show
  1. package/README.md +68 -80
  2. package/dist/api/audits/index.d.ts +10 -33
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/audits/index.js +10 -33
  5. package/dist/api/audits/index.js.map +1 -1
  6. package/dist/api/files/index.d.ts +10 -3
  7. package/dist/api/files/index.d.ts.map +1 -1
  8. package/dist/api/files/index.js +10 -3
  9. package/dist/api/files/index.js.map +1 -1
  10. package/dist/api/jobs/index.d.ts +162 -155
  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.d.ts +10 -4
  19. package/dist/api/notifications/index.d.ts.map +1 -1
  20. package/dist/api/notifications/index.js +10 -4
  21. package/dist/api/notifications/index.js.map +1 -1
  22. package/dist/api/parameters/index.d.ts +43 -50
  23. package/dist/api/parameters/index.d.ts.map +1 -1
  24. package/dist/api/parameters/index.js +30 -37
  25. package/dist/api/parameters/index.js.map +1 -1
  26. package/dist/api/users/index.d.ts +1081 -760
  27. package/dist/api/users/index.d.ts.map +1 -1
  28. package/dist/api/users/index.js +2539 -218
  29. package/dist/api/users/index.js.map +1 -1
  30. package/dist/api/verifications/index.d.ts +138 -132
  31. package/dist/api/verifications/index.d.ts.map +1 -1
  32. package/dist/api/verifications/index.js +12 -4
  33. package/dist/api/verifications/index.js.map +1 -1
  34. package/dist/batch/index.d.ts +20 -40
  35. package/dist/batch/index.d.ts.map +1 -1
  36. package/dist/batch/index.js +31 -44
  37. package/dist/batch/index.js.map +1 -1
  38. package/dist/bucket/index.d.ts +440 -8
  39. package/dist/bucket/index.d.ts.map +1 -1
  40. package/dist/bucket/index.js +1861 -12
  41. package/dist/bucket/index.js.map +1 -1
  42. package/dist/cache/core/index.d.ts +179 -7
  43. package/dist/cache/core/index.d.ts.map +1 -1
  44. package/dist/cache/core/index.js +213 -7
  45. package/dist/cache/core/index.js.map +1 -1
  46. package/dist/cache/redis/index.d.ts +1 -0
  47. package/dist/cache/redis/index.d.ts.map +1 -1
  48. package/dist/cache/redis/index.js +4 -0
  49. package/dist/cache/redis/index.js.map +1 -1
  50. package/dist/cli/index.d.ts +638 -5645
  51. package/dist/cli/index.d.ts.map +1 -1
  52. package/dist/cli/index.js +2550 -368
  53. package/dist/cli/index.js.map +1 -1
  54. package/dist/command/index.d.ts +203 -45
  55. package/dist/command/index.d.ts.map +1 -1
  56. package/dist/command/index.js +2060 -71
  57. package/dist/command/index.js.map +1 -1
  58. package/dist/core/index.browser.js +70 -40
  59. package/dist/core/index.browser.js.map +1 -1
  60. package/dist/core/index.d.ts +34 -13
  61. package/dist/core/index.d.ts.map +1 -1
  62. package/dist/core/index.js +90 -40
  63. package/dist/core/index.js.map +1 -1
  64. package/dist/core/index.native.js +70 -40
  65. package/dist/core/index.native.js.map +1 -1
  66. package/dist/datetime/index.d.ts +15 -0
  67. package/dist/datetime/index.d.ts.map +1 -1
  68. package/dist/datetime/index.js +15 -0
  69. package/dist/datetime/index.js.map +1 -1
  70. package/dist/email/index.d.ts +323 -20
  71. package/dist/email/index.d.ts.map +1 -1
  72. package/dist/email/index.js +1857 -7
  73. package/dist/email/index.js.map +1 -1
  74. package/dist/fake/index.d.ts +90 -8
  75. package/dist/fake/index.d.ts.map +1 -1
  76. package/dist/fake/index.js +91 -20
  77. package/dist/fake/index.js.map +1 -1
  78. package/dist/lock/core/index.d.ts +11 -4
  79. package/dist/lock/core/index.d.ts.map +1 -1
  80. package/dist/lock/core/index.js +11 -4
  81. package/dist/lock/core/index.js.map +1 -1
  82. package/dist/logger/index.d.ts +17 -66
  83. package/dist/logger/index.d.ts.map +1 -1
  84. package/dist/logger/index.js +14 -63
  85. package/dist/logger/index.js.map +1 -1
  86. package/dist/mcp/index.d.ts +10 -30
  87. package/dist/mcp/index.d.ts.map +1 -1
  88. package/dist/mcp/index.js +12 -35
  89. package/dist/mcp/index.js.map +1 -1
  90. package/dist/orm/index.browser.js +3 -3
  91. package/dist/orm/index.browser.js.map +1 -1
  92. package/dist/orm/index.bun.js +39 -20
  93. package/dist/orm/index.bun.js.map +1 -1
  94. package/dist/orm/index.d.ts +517 -540
  95. package/dist/orm/index.d.ts.map +1 -1
  96. package/dist/orm/index.js +58 -71
  97. package/dist/orm/index.js.map +1 -1
  98. package/dist/queue/core/index.d.ts +18 -10
  99. package/dist/queue/core/index.d.ts.map +1 -1
  100. package/dist/queue/core/index.js +14 -6
  101. package/dist/queue/core/index.js.map +1 -1
  102. package/dist/react/auth/index.browser.js +108 -0
  103. package/dist/react/auth/index.browser.js.map +1 -0
  104. package/dist/react/auth/index.d.ts +100 -0
  105. package/dist/react/auth/index.d.ts.map +1 -0
  106. package/dist/react/auth/index.js +145 -0
  107. package/dist/react/auth/index.js.map +1 -0
  108. package/dist/react/core/index.d.ts +469 -0
  109. package/dist/react/core/index.d.ts.map +1 -0
  110. package/dist/react/core/index.js +464 -0
  111. package/dist/react/core/index.js.map +1 -0
  112. package/dist/react/form/index.d.ts +232 -0
  113. package/dist/react/form/index.d.ts.map +1 -0
  114. package/dist/react/form/index.js +432 -0
  115. package/dist/react/form/index.js.map +1 -0
  116. package/dist/react/head/index.browser.js +423 -0
  117. package/dist/react/head/index.browser.js.map +1 -0
  118. package/dist/react/head/index.d.ts +288 -0
  119. package/dist/react/head/index.d.ts.map +1 -0
  120. package/dist/react/head/index.js +465 -0
  121. package/dist/react/head/index.js.map +1 -0
  122. package/dist/react/i18n/index.d.ts +175 -0
  123. package/dist/react/i18n/index.d.ts.map +1 -0
  124. package/dist/react/i18n/index.js +224 -0
  125. package/dist/react/i18n/index.js.map +1 -0
  126. package/dist/react/router/index.browser.js +1974 -0
  127. package/dist/react/router/index.browser.js.map +1 -0
  128. package/dist/react/router/index.d.ts +1956 -0
  129. package/dist/react/router/index.d.ts.map +1 -0
  130. package/dist/react/router/index.js +4722 -0
  131. package/dist/react/router/index.js.map +1 -0
  132. package/dist/react/websocket/index.d.ts +117 -0
  133. package/dist/react/websocket/index.d.ts.map +1 -0
  134. package/dist/react/websocket/index.js +107 -0
  135. package/dist/react/websocket/index.js.map +1 -0
  136. package/dist/redis/index.bun.js +4 -0
  137. package/dist/redis/index.bun.js.map +1 -1
  138. package/dist/redis/index.d.ts +41 -44
  139. package/dist/redis/index.d.ts.map +1 -1
  140. package/dist/redis/index.js +16 -25
  141. package/dist/redis/index.js.map +1 -1
  142. package/dist/retry/index.d.ts +11 -2
  143. package/dist/retry/index.d.ts.map +1 -1
  144. package/dist/retry/index.js +11 -2
  145. package/dist/retry/index.js.map +1 -1
  146. package/dist/scheduler/index.d.ts +11 -2
  147. package/dist/scheduler/index.d.ts.map +1 -1
  148. package/dist/scheduler/index.js +11 -2
  149. package/dist/scheduler/index.js.map +1 -1
  150. package/dist/security/index.d.ts +140 -49
  151. package/dist/security/index.d.ts.map +1 -1
  152. package/dist/security/index.js +164 -32
  153. package/dist/security/index.js.map +1 -1
  154. package/dist/server/auth/index.d.ts +12 -7
  155. package/dist/server/auth/index.d.ts.map +1 -1
  156. package/dist/server/auth/index.js +12 -7
  157. package/dist/server/auth/index.js.map +1 -1
  158. package/dist/server/cache/index.d.ts +7 -22
  159. package/dist/server/cache/index.d.ts.map +1 -1
  160. package/dist/server/cache/index.js +7 -22
  161. package/dist/server/cache/index.js.map +1 -1
  162. package/dist/server/compress/index.d.ts +10 -2
  163. package/dist/server/compress/index.d.ts.map +1 -1
  164. package/dist/server/compress/index.js +10 -2
  165. package/dist/server/compress/index.js.map +1 -1
  166. package/dist/server/cookies/index.d.ts +40 -16
  167. package/dist/server/cookies/index.d.ts.map +1 -1
  168. package/dist/server/cookies/index.js +7 -5
  169. package/dist/server/cookies/index.js.map +1 -1
  170. package/dist/server/core/index.d.ts +124 -23
  171. package/dist/server/core/index.d.ts.map +1 -1
  172. package/dist/server/core/index.js +231 -14
  173. package/dist/server/core/index.js.map +1 -1
  174. package/dist/server/cors/index.d.ts +13 -23
  175. package/dist/server/cors/index.d.ts.map +1 -1
  176. package/dist/server/cors/index.js +7 -21
  177. package/dist/server/cors/index.js.map +1 -1
  178. package/dist/server/health/index.d.ts +8 -2
  179. package/dist/server/health/index.d.ts.map +1 -1
  180. package/dist/server/health/index.js +8 -2
  181. package/dist/server/health/index.js.map +1 -1
  182. package/dist/server/helmet/index.d.ts +11 -3
  183. package/dist/server/helmet/index.d.ts.map +1 -1
  184. package/dist/server/helmet/index.js +11 -3
  185. package/dist/server/helmet/index.js.map +1 -1
  186. package/dist/server/links/index.d.ts +11 -6
  187. package/dist/server/links/index.d.ts.map +1 -1
  188. package/dist/server/links/index.js +11 -6
  189. package/dist/server/links/index.js.map +1 -1
  190. package/dist/server/metrics/index.d.ts +10 -3
  191. package/dist/server/metrics/index.d.ts.map +1 -1
  192. package/dist/server/metrics/index.js +10 -3
  193. package/dist/server/metrics/index.js.map +1 -1
  194. package/dist/server/multipart/index.d.ts +9 -3
  195. package/dist/server/multipart/index.d.ts.map +1 -1
  196. package/dist/server/multipart/index.js +9 -3
  197. package/dist/server/multipart/index.js.map +1 -1
  198. package/dist/server/proxy/index.d.ts +8 -2
  199. package/dist/server/proxy/index.d.ts.map +1 -1
  200. package/dist/server/proxy/index.js +8 -2
  201. package/dist/server/proxy/index.js.map +1 -1
  202. package/dist/server/rate-limit/index.d.ts +30 -35
  203. package/dist/server/rate-limit/index.d.ts.map +1 -1
  204. package/dist/server/rate-limit/index.js +18 -55
  205. package/dist/server/rate-limit/index.js.map +1 -1
  206. package/dist/server/static/index.d.ts +137 -4
  207. package/dist/server/static/index.d.ts.map +1 -1
  208. package/dist/server/static/index.js +1853 -5
  209. package/dist/server/static/index.js.map +1 -1
  210. package/dist/server/swagger/index.d.ts +309 -6
  211. package/dist/server/swagger/index.d.ts.map +1 -1
  212. package/dist/server/swagger/index.js +1854 -6
  213. package/dist/server/swagger/index.js.map +1 -1
  214. package/dist/sms/index.d.ts +309 -7
  215. package/dist/sms/index.d.ts.map +1 -1
  216. package/dist/sms/index.js +1856 -7
  217. package/dist/sms/index.js.map +1 -1
  218. package/dist/system/index.browser.js +1218 -0
  219. package/dist/system/index.browser.js.map +1 -0
  220. package/dist/{file → system}/index.d.ts +343 -16
  221. package/dist/system/index.d.ts.map +1 -0
  222. package/dist/{file → system}/index.js +419 -22
  223. package/dist/system/index.js.map +1 -0
  224. package/dist/thread/index.d.ts +11 -2
  225. package/dist/thread/index.d.ts.map +1 -1
  226. package/dist/thread/index.js +11 -2
  227. package/dist/thread/index.js.map +1 -1
  228. package/dist/topic/core/index.d.ts +12 -5
  229. package/dist/topic/core/index.d.ts.map +1 -1
  230. package/dist/topic/core/index.js +12 -5
  231. package/dist/topic/core/index.js.map +1 -1
  232. package/dist/vite/index.d.ts +5 -6272
  233. package/dist/vite/index.d.ts.map +1 -1
  234. package/dist/vite/index.js +23 -10
  235. package/dist/vite/index.js.map +1 -1
  236. package/dist/websocket/index.d.ts +12 -8
  237. package/dist/websocket/index.d.ts.map +1 -1
  238. package/dist/websocket/index.js +12 -8
  239. package/dist/websocket/index.js.map +1 -1
  240. package/package.json +82 -11
  241. package/src/api/audits/index.ts +10 -33
  242. package/src/api/files/__tests__/$bucket.spec.ts +1 -1
  243. package/src/api/files/controllers/AdminFileStatsController.spec.ts +1 -1
  244. package/src/api/files/controllers/FileController.spec.ts +1 -1
  245. package/src/api/files/index.ts +10 -3
  246. package/src/api/files/jobs/FileJobs.spec.ts +1 -1
  247. package/src/api/files/services/FileService.spec.ts +1 -1
  248. package/src/api/jobs/index.ts +10 -3
  249. package/src/api/keys/controllers/AdminApiKeyController.ts +75 -0
  250. package/src/api/keys/controllers/ApiKeyController.ts +103 -0
  251. package/src/api/keys/entities/apiKeyEntity.ts +41 -0
  252. package/src/api/keys/index.ts +49 -0
  253. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +7 -0
  254. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +17 -0
  255. package/src/api/keys/schemas/createApiKeyBodySchema.ts +7 -0
  256. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +11 -0
  257. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +15 -0
  258. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +5 -0
  259. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +5 -0
  260. package/src/api/keys/services/ApiKeyService.spec.ts +553 -0
  261. package/src/api/keys/services/ApiKeyService.ts +306 -0
  262. package/src/api/logs/TODO.md +55 -0
  263. package/src/api/notifications/index.ts +10 -4
  264. package/src/api/parameters/index.ts +9 -30
  265. package/src/api/parameters/primitives/$config.ts +12 -4
  266. package/src/api/parameters/services/ConfigStore.ts +9 -3
  267. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1035 -0
  268. package/src/api/users/__tests__/ApiKeys.spec.ts +401 -0
  269. package/src/api/users/index.ts +14 -3
  270. package/src/api/users/primitives/$realm.ts +33 -5
  271. package/src/api/users/providers/RealmProvider.ts +1 -12
  272. package/src/api/users/services/SessionService.ts +1 -1
  273. package/src/api/verifications/controllers/VerificationController.ts +2 -0
  274. package/src/api/verifications/index.ts +10 -4
  275. package/src/batch/index.ts +9 -36
  276. package/src/batch/primitives/$batch.ts +0 -8
  277. package/src/batch/providers/BatchProvider.ts +29 -2
  278. package/src/bucket/__tests__/shared.ts +1 -1
  279. package/src/bucket/index.ts +13 -6
  280. package/src/bucket/primitives/$bucket.ts +1 -1
  281. package/src/bucket/providers/LocalFileStorageProvider.ts +1 -1
  282. package/src/bucket/providers/MemoryFileStorageProvider.ts +1 -1
  283. package/src/cache/core/__tests__/shared.ts +30 -0
  284. package/src/cache/core/index.ts +11 -6
  285. package/src/cache/core/primitives/$cache.spec.ts +5 -0
  286. package/src/cache/core/providers/CacheProvider.ts +17 -0
  287. package/src/cache/core/providers/MemoryCacheProvider.ts +300 -1
  288. package/src/cache/redis/__tests__/cache-redis.spec.ts +5 -0
  289. package/src/cache/redis/providers/RedisCacheProvider.ts +9 -0
  290. package/src/cli/apps/AlephaCli.ts +1 -14
  291. package/src/cli/apps/AlephaPackageBuilderCli.ts +10 -1
  292. package/src/cli/atoms/buildOptions.ts +99 -9
  293. package/src/cli/commands/build.ts +150 -37
  294. package/src/cli/commands/db.ts +22 -18
  295. package/src/cli/commands/deploy.ts +1 -1
  296. package/src/cli/commands/dev.ts +1 -20
  297. package/src/cli/commands/gen/env.ts +5 -2
  298. package/src/cli/commands/gen/openapi.ts +5 -2
  299. package/src/cli/commands/init.spec.ts +588 -0
  300. package/src/cli/commands/init.ts +115 -58
  301. package/src/cli/commands/lint.ts +7 -1
  302. package/src/cli/commands/typecheck.ts +11 -0
  303. package/src/cli/providers/AppEntryProvider.ts +1 -1
  304. package/src/cli/providers/ViteBuildProvider.ts +8 -50
  305. package/src/cli/providers/ViteDevServerProvider.ts +35 -16
  306. package/src/cli/services/AlephaCliUtils.ts +52 -121
  307. package/src/cli/services/PackageManagerUtils.ts +129 -11
  308. package/src/cli/services/ProjectScaffolder.spec.ts +97 -0
  309. package/src/cli/services/ProjectScaffolder.ts +148 -81
  310. package/src/cli/services/ViteUtils.ts +82 -0
  311. package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +37 -24
  312. package/src/cli/templates/apiAppSecurityTs.ts +11 -0
  313. package/src/cli/templates/apiIndexTs.ts +30 -0
  314. package/src/cli/templates/gitignore.ts +39 -0
  315. package/src/cli/{assets → templates}/mainCss.ts +11 -2
  316. package/src/cli/templates/mainServerTs.ts +33 -0
  317. package/src/cli/templates/webAppRouterTs.ts +74 -0
  318. package/src/cli/templates/webHelloComponentTsx.ts +30 -0
  319. package/src/command/helpers/Runner.spec.ts +139 -0
  320. package/src/command/helpers/Runner.ts +7 -22
  321. package/src/command/index.ts +12 -4
  322. package/src/command/providers/CliProvider.spec.ts +1392 -0
  323. package/src/command/providers/CliProvider.ts +320 -47
  324. package/src/core/Alepha.ts +34 -27
  325. package/src/core/__tests__/Alepha-start.spec.ts +4 -4
  326. package/src/core/helpers/jsonSchemaToTypeBox.spec.ts +771 -0
  327. package/src/core/helpers/jsonSchemaToTypeBox.ts +62 -10
  328. package/src/core/index.shared.ts +1 -0
  329. package/src/core/index.ts +20 -0
  330. package/src/core/providers/EventManager.spec.ts +0 -71
  331. package/src/core/providers/EventManager.ts +3 -15
  332. package/src/core/providers/Json.ts +2 -14
  333. package/src/datetime/index.ts +15 -0
  334. package/src/email/index.ts +10 -5
  335. package/src/email/providers/LocalEmailProvider.spec.ts +1 -1
  336. package/src/email/providers/LocalEmailProvider.ts +1 -1
  337. package/src/fake/__tests__/keyName.example.ts +1 -1
  338. package/src/fake/__tests__/keyName.spec.ts +5 -5
  339. package/src/fake/index.ts +9 -6
  340. package/src/fake/providers/FakeProvider.spec.ts +258 -40
  341. package/src/fake/providers/FakeProvider.ts +133 -19
  342. package/src/lock/core/index.ts +11 -4
  343. package/src/logger/index.ts +17 -66
  344. package/src/mcp/index.ts +10 -27
  345. package/src/mcp/transports/SseMcpTransport.ts +0 -11
  346. package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
  347. package/src/orm/index.browser.ts +2 -2
  348. package/src/orm/index.bun.ts +5 -3
  349. package/src/orm/index.ts +23 -53
  350. package/src/orm/providers/drivers/BunSqliteProvider.ts +5 -1
  351. package/src/orm/providers/drivers/CloudflareD1Provider.ts +57 -30
  352. package/src/orm/providers/drivers/DatabaseProvider.ts +9 -1
  353. package/src/orm/providers/drivers/NodeSqliteProvider.ts +4 -1
  354. package/src/orm/services/Repository.ts +7 -3
  355. package/src/queue/core/index.ts +14 -6
  356. package/src/react/auth/__tests__/$auth.spec.ts +202 -0
  357. package/src/react/auth/hooks/useAuth.ts +32 -0
  358. package/src/react/auth/index.browser.ts +13 -0
  359. package/src/react/auth/index.shared.ts +2 -0
  360. package/src/react/auth/index.ts +48 -0
  361. package/src/react/auth/providers/ReactAuthProvider.ts +16 -0
  362. package/src/react/auth/services/ReactAuth.ts +135 -0
  363. package/src/react/core/__tests__/Router.spec.tsx +169 -0
  364. package/src/react/core/components/ClientOnly.tsx +49 -0
  365. package/src/react/core/components/ErrorBoundary.tsx +73 -0
  366. package/src/react/core/contexts/AlephaContext.ts +7 -0
  367. package/src/react/core/contexts/AlephaProvider.tsx +42 -0
  368. package/src/react/core/hooks/useAction.browser.spec.tsx +569 -0
  369. package/src/react/core/hooks/useAction.ts +480 -0
  370. package/src/react/core/hooks/useAlepha.ts +26 -0
  371. package/src/react/core/hooks/useClient.ts +17 -0
  372. package/src/react/core/hooks/useEvents.ts +51 -0
  373. package/src/react/core/hooks/useInject.ts +12 -0
  374. package/src/react/core/hooks/useStore.ts +52 -0
  375. package/src/react/core/index.ts +90 -0
  376. package/src/react/form/components/FormState.tsx +17 -0
  377. package/src/react/form/errors/FormValidationError.ts +18 -0
  378. package/src/react/form/hooks/useForm.browser.spec.tsx +366 -0
  379. package/src/react/form/hooks/useForm.ts +47 -0
  380. package/src/react/form/hooks/useFormState.ts +130 -0
  381. package/src/react/form/index.ts +44 -0
  382. package/src/react/form/services/FormModel.ts +614 -0
  383. package/src/react/head/helpers/SeoExpander.spec.ts +203 -0
  384. package/src/react/head/helpers/SeoExpander.ts +142 -0
  385. package/src/react/head/hooks/useHead.spec.tsx +288 -0
  386. package/src/react/head/hooks/useHead.ts +62 -0
  387. package/src/react/head/index.browser.ts +26 -0
  388. package/src/react/head/index.ts +44 -0
  389. package/src/react/head/interfaces/Head.ts +105 -0
  390. package/src/react/head/primitives/$head.ts +25 -0
  391. package/src/react/head/providers/BrowserHeadProvider.browser.spec.ts +196 -0
  392. package/src/react/head/providers/BrowserHeadProvider.ts +212 -0
  393. package/src/react/head/providers/HeadProvider.ts +168 -0
  394. package/src/react/head/providers/ServerHeadProvider.ts +31 -0
  395. package/src/react/i18n/__tests__/integration.spec.tsx +239 -0
  396. package/src/react/i18n/components/Localize.spec.tsx +357 -0
  397. package/src/react/i18n/components/Localize.tsx +35 -0
  398. package/src/react/i18n/hooks/useI18n.browser.spec.tsx +438 -0
  399. package/src/react/i18n/hooks/useI18n.ts +18 -0
  400. package/src/react/i18n/index.ts +41 -0
  401. package/src/react/i18n/primitives/$dictionary.ts +69 -0
  402. package/src/react/i18n/providers/I18nProvider.spec.ts +389 -0
  403. package/src/react/i18n/providers/I18nProvider.ts +278 -0
  404. package/src/react/router/__tests__/page-head-browser.browser.spec.ts +95 -0
  405. package/src/react/router/__tests__/page-head.spec.ts +48 -0
  406. package/src/react/router/__tests__/seo-head.spec.ts +125 -0
  407. package/src/react/router/atoms/ssrManifestAtom.ts +58 -0
  408. package/src/react/router/components/ErrorViewer.tsx +872 -0
  409. package/src/react/router/components/Link.tsx +23 -0
  410. package/src/react/router/components/NestedView.tsx +223 -0
  411. package/src/react/router/components/NotFound.tsx +30 -0
  412. package/src/react/router/constants/PAGE_PRELOAD_KEY.ts +6 -0
  413. package/src/react/router/contexts/RouterLayerContext.ts +12 -0
  414. package/src/react/router/errors/Redirection.ts +28 -0
  415. package/src/react/router/hooks/useActive.ts +52 -0
  416. package/src/react/router/hooks/useQueryParams.ts +63 -0
  417. package/src/react/router/hooks/useRouter.ts +20 -0
  418. package/src/react/router/hooks/useRouterState.ts +11 -0
  419. package/src/react/router/index.browser.ts +45 -0
  420. package/src/react/router/index.shared.ts +19 -0
  421. package/src/react/router/index.ts +146 -0
  422. package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
  423. package/src/react/router/primitives/$page.spec.tsx +676 -0
  424. package/src/react/router/primitives/$page.ts +489 -0
  425. package/src/react/router/providers/ReactBrowserProvider.ts +312 -0
  426. package/src/react/router/providers/ReactBrowserRendererProvider.ts +25 -0
  427. package/src/react/router/providers/ReactBrowserRouterProvider.ts +168 -0
  428. package/src/react/router/providers/ReactPageProvider.ts +726 -0
  429. package/src/react/router/providers/ReactPreloadProvider.spec.ts +142 -0
  430. package/src/react/router/providers/ReactPreloadProvider.ts +85 -0
  431. package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
  432. package/src/react/router/providers/ReactServerProvider.ts +487 -0
  433. package/src/react/router/providers/ReactServerTemplateProvider.spec.ts +210 -0
  434. package/src/react/router/providers/ReactServerTemplateProvider.ts +542 -0
  435. package/src/react/router/providers/SSRManifestProvider.ts +334 -0
  436. package/src/react/router/services/ReactPageServerService.ts +48 -0
  437. package/src/react/router/services/ReactPageService.ts +27 -0
  438. package/src/react/router/services/ReactRouter.ts +262 -0
  439. package/src/react/websocket/hooks/useRoom.tsx +242 -0
  440. package/src/react/websocket/index.ts +7 -0
  441. package/src/redis/__tests__/redis.spec.ts +13 -0
  442. package/src/redis/index.ts +9 -25
  443. package/src/redis/providers/BunRedisProvider.ts +9 -0
  444. package/src/redis/providers/NodeRedisProvider.ts +8 -0
  445. package/src/redis/providers/RedisProvider.ts +16 -0
  446. package/src/retry/index.ts +11 -2
  447. package/src/router/index.ts +15 -0
  448. package/src/scheduler/index.ts +11 -2
  449. package/src/security/__tests__/BasicAuth.spec.ts +2 -0
  450. package/src/security/__tests__/ServerSecurityProvider.spec.ts +90 -5
  451. package/src/security/index.ts +15 -10
  452. package/src/security/interfaces/IssuerResolver.ts +27 -0
  453. package/src/security/primitives/$issuer.ts +55 -0
  454. package/src/security/providers/SecurityProvider.ts +179 -0
  455. package/src/security/providers/ServerBasicAuthProvider.ts +6 -2
  456. package/src/security/providers/ServerSecurityProvider.ts +63 -41
  457. package/src/server/auth/index.ts +12 -7
  458. package/src/server/cache/index.ts +7 -22
  459. package/src/server/compress/index.ts +10 -2
  460. package/src/server/cookies/index.ts +7 -5
  461. package/src/server/cookies/primitives/$cookie.ts +33 -11
  462. package/src/server/core/index.ts +16 -6
  463. package/src/server/core/interfaces/ServerRequest.ts +83 -1
  464. package/src/server/core/primitives/$action.spec.ts +1 -1
  465. package/src/server/core/primitives/$action.ts +8 -3
  466. package/src/server/core/providers/NodeHttpServerProvider.spec.ts +9 -3
  467. package/src/server/core/providers/NodeHttpServerProvider.ts +9 -3
  468. package/src/server/core/services/ServerRequestParser.spec.ts +520 -0
  469. package/src/server/core/services/ServerRequestParser.ts +306 -13
  470. package/src/server/cors/index.ts +7 -21
  471. package/src/server/cors/primitives/$cors.ts +6 -2
  472. package/src/server/health/index.ts +8 -2
  473. package/src/server/helmet/index.ts +11 -3
  474. package/src/server/links/index.ts +11 -6
  475. package/src/server/metrics/index.ts +10 -3
  476. package/src/server/multipart/index.ts +9 -3
  477. package/src/server/proxy/index.ts +8 -2
  478. package/src/server/rate-limit/index.ts +21 -25
  479. package/src/server/rate-limit/primitives/$rateLimit.ts +6 -2
  480. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +38 -14
  481. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +22 -56
  482. package/src/server/static/index.ts +8 -2
  483. package/src/server/static/providers/ServerStaticProvider.ts +1 -1
  484. package/src/server/swagger/index.ts +9 -4
  485. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  486. package/src/sms/index.ts +9 -5
  487. package/src/sms/providers/LocalSmsProvider.spec.ts +1 -1
  488. package/src/sms/providers/LocalSmsProvider.ts +1 -1
  489. package/src/system/index.browser.ts +36 -0
  490. package/src/system/index.ts +62 -0
  491. package/src/system/index.workerd.ts +1 -0
  492. package/src/{file → system}/providers/FileSystemProvider.ts +24 -0
  493. package/src/{file → system}/providers/MemoryFileSystemProvider.ts +116 -3
  494. package/src/system/providers/MemoryShellProvider.ts +164 -0
  495. package/src/{file → system}/providers/NodeFileSystemProvider.spec.ts +2 -2
  496. package/src/{file → system}/providers/NodeFileSystemProvider.ts +47 -2
  497. package/src/system/providers/NodeShellProvider.ts +184 -0
  498. package/src/system/providers/ShellProvider.ts +74 -0
  499. package/src/{file → system}/services/FileDetector.spec.ts +2 -2
  500. package/src/thread/index.ts +11 -2
  501. package/src/topic/core/index.ts +12 -5
  502. package/src/vite/tasks/buildClient.ts +2 -7
  503. package/src/vite/tasks/buildServer.ts +19 -13
  504. package/src/vite/tasks/generateCloudflare.ts +10 -7
  505. package/src/vite/tasks/generateDocker.ts +4 -0
  506. package/src/websocket/index.ts +12 -8
  507. package/dist/file/index.d.ts.map +0 -1
  508. package/dist/file/index.js.map +0 -1
  509. package/src/cli/assets/apiIndexTs.ts +0 -16
  510. package/src/cli/assets/mainServerTs.ts +0 -24
  511. package/src/cli/assets/webAppRouterTs.ts +0 -16
  512. package/src/cli/assets/webHelloComponentTsx.ts +0 -20
  513. package/src/cli/providers/ViteTemplateProvider.ts +0 -27
  514. package/src/file/index.ts +0 -43
  515. /package/src/cli/{assets → templates}/apiHelloControllerTs.ts +0 -0
  516. /package/src/cli/{assets → templates}/biomeJson.ts +0 -0
  517. /package/src/cli/{assets → templates}/dummySpecTs.ts +0 -0
  518. /package/src/cli/{assets → templates}/editorconfig.ts +0 -0
  519. /package/src/cli/{assets → templates}/mainBrowserTs.ts +0 -0
  520. /package/src/cli/{assets → templates}/tsconfigJson.ts +0 -0
  521. /package/src/cli/{assets → templates}/webIndexTs.ts +0 -0
  522. /package/src/{file → system}/errors/FileError.ts +0 -0
  523. /package/src/{file → system}/services/FileDetector.ts +0 -0
@@ -32,8 +32,11 @@ export interface JsonSchemaObject {
32
32
  minItems?: number;
33
33
  maxItems?: number;
34
34
  uniqueItems?: boolean;
35
- // TypeBox internal markers (pass through)
36
- "~kind"?: string;
35
+ // Alepha text options (trim, lowercase)
36
+ "~options"?: {
37
+ trim?: boolean;
38
+ lowercase?: boolean;
39
+ };
37
40
  // Not supported
38
41
  oneOf?: JsonSchemaObject[];
39
42
  anyOf?: JsonSchemaObject[];
@@ -55,11 +58,13 @@ export interface JsonSchemaObject {
55
58
  * - Nested objects with required/optional properties
56
59
  * - Arrays with item schemas
57
60
  * - Common validation options: minLength, maxLength, minimum, maximum, pattern
61
+ * - anyOf/oneOf/allOf with nullable patterns (e.g., `anyOf: [type, null]` → `t.nullable(type)`)
62
+ * - Alepha ~options (trim, lowercase) pass-through
58
63
  *
59
64
  * **Not supported:**
60
- * - oneOf, anyOf, allOf, not (composition schemas)
61
65
  * - $ref (references)
62
66
  * - additionalProperties, patternProperties
67
+ * - Complex composition schemas (multiple non-null types in anyOf/oneOf/allOf)
63
68
  *
64
69
  * @param schema - JSON Schema object to convert
65
70
  * @returns TypeBox TSchema
@@ -85,12 +90,7 @@ export interface JsonSchemaObject {
85
90
  * // })
86
91
  * ```
87
92
  */
88
- export function jsonSchemaToTypeBox(schema: JsonSchemaObject): TSchema {
89
- // If it already has TypeBox marker, return as-is
90
- if (schema["~kind"]) {
91
- return schema as unknown as TSchema;
92
- }
93
-
93
+ export function jsonSchemaToTypeBox(schema: JsonSchemaObject): any {
94
94
  // Handle const (literal)
95
95
  if (schema.const !== undefined) {
96
96
  return t.const(schema.const as string | number | boolean);
@@ -115,6 +115,53 @@ export function jsonSchemaToTypeBox(schema: JsonSchemaObject): TSchema {
115
115
  );
116
116
  }
117
117
 
118
+ // Handle anyOf (typically used for nullable types: anyOf: [type, null])
119
+ if (schema.anyOf && Array.isArray(schema.anyOf)) {
120
+ const nullSchema = schema.anyOf.find((s) => s.type === "null");
121
+ const nonNullSchemas = schema.anyOf.filter((s) => s.type !== "null");
122
+
123
+ // If anyOf is [someType, null], convert to t.nullable(someType)
124
+ if (nullSchema && nonNullSchemas.length === 1) {
125
+ const converted = jsonSchemaToTypeBox(nonNullSchemas[0]);
126
+ return t.nullable(converted);
127
+ }
128
+
129
+ // For other anyOf cases, create a union
130
+ return t.union(schema.anyOf.map((s) => jsonSchemaToTypeBox(s)));
131
+ }
132
+
133
+ // Handle allOf (merge schemas)
134
+ if (schema.allOf && Array.isArray(schema.allOf)) {
135
+ const nullSchema = schema.allOf.find((s) => s.type === "null");
136
+ const nonNullSchemas = schema.allOf.filter((s) => s.type !== "null");
137
+
138
+ // If allOf includes null, convert to nullable
139
+ if (nullSchema && nonNullSchemas.length === 1) {
140
+ const converted = jsonSchemaToTypeBox(nonNullSchemas[0]);
141
+ return t.nullable(converted);
142
+ }
143
+
144
+ // For other allOf cases, merge the first non-null schema (simplified)
145
+ if (nonNullSchemas.length > 0) {
146
+ return jsonSchemaToTypeBox(nonNullSchemas[0]);
147
+ }
148
+ }
149
+
150
+ // Handle oneOf (similar to anyOf)
151
+ if (schema.oneOf && Array.isArray(schema.oneOf)) {
152
+ const nullSchema = schema.oneOf.find((s) => s.type === "null");
153
+ const nonNullSchemas = schema.oneOf.filter((s) => s.type !== "null");
154
+
155
+ // If oneOf is [someType, null], convert to t.nullable(someType)
156
+ if (nullSchema && nonNullSchemas.length === 1) {
157
+ const converted = jsonSchemaToTypeBox(nonNullSchemas[0]);
158
+ return t.nullable(converted);
159
+ }
160
+
161
+ // For other oneOf cases, create a union
162
+ return t.union(schema.oneOf.map((s) => jsonSchemaToTypeBox(s)));
163
+ }
164
+
118
165
  // Handle type
119
166
  const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;
120
167
 
@@ -158,7 +205,7 @@ function filterUndefined<T extends Record<string, unknown>>(
158
205
  * Convert JSON Schema string type to TypeBox.
159
206
  */
160
207
  function convertString(schema: JsonSchemaObject): TSchema {
161
- const options: TStringOptions = filterUndefined({
208
+ const baseOptions: TStringOptions = filterUndefined({
162
209
  title: schema.title,
163
210
  description: schema.description,
164
211
  default: schema.default as string,
@@ -167,6 +214,11 @@ function convertString(schema: JsonSchemaObject): TSchema {
167
214
  pattern: schema.pattern,
168
215
  });
169
216
 
217
+ // Preserve ~options if present (for t.text() compatibility)
218
+ const options: TStringOptions = schema["~options"]
219
+ ? { ...baseOptions, "~options": schema["~options"] }
220
+ : baseOptions;
221
+
170
222
  switch (schema.format) {
171
223
  case "email":
172
224
  return t.email(options);
@@ -27,6 +27,7 @@ export * from "./primitives/$use.ts";
27
27
  export * from "./providers/AlsProvider.ts";
28
28
  export * from "./providers/CodecManager.ts";
29
29
  export * from "./providers/EventManager.ts";
30
+ export * from "./providers/Json.ts";
30
31
  export * from "./providers/JsonSchemaCodec.ts";
31
32
  export * from "./providers/KeylessJsonSchemaCodec.ts";
32
33
  export * from "./providers/SchemaCodec.ts";
package/src/core/index.ts CHANGED
@@ -22,6 +22,26 @@ export * from "./index.shared.ts";
22
22
 
23
23
  // ---------------------------------------------------------------------------------------------------------------------
24
24
 
25
+ /**
26
+ * | type | quality | stability |
27
+ * |------|---------|-----------|
28
+ * | tooling | epic | stable |
29
+ *
30
+ * Foundation of the entire framework with dependency injection and lifecycle management.
31
+ *
32
+ * **Features:**
33
+ * - Dependency injection for services
34
+ * - Service substitution/mocking
35
+ * - Type-safe environment variable loading with TypeBox schemas
36
+ * - Lifecycle hooks (start, stop, log, etc.)
37
+ * - Module definitions and composition
38
+ * - Request-scoped context access via Async Local Storage (ALS)
39
+ * - Reactive state management with atoms
40
+ * - Cluster mode with automatic worker forking
41
+ * - Full TypeScript generics and type inference
42
+ *
43
+ * @module alepha.core
44
+ */
25
45
  export const AlephaCore = $module({
26
46
  name: "alepha.core",
27
47
  services: [
@@ -285,77 +285,6 @@ describe("EventManager", () => {
285
285
  });
286
286
  });
287
287
 
288
- describe("reverse execution order", () => {
289
- it("should execute hooks in reverse order when reverse option is true", async () => {
290
- const eventManager = new EventManager();
291
- const order: number[] = [];
292
-
293
- eventManager.on("echo", async () => {
294
- order.push(1);
295
- });
296
- eventManager.on("echo", async () => {
297
- order.push(2);
298
- });
299
- eventManager.on("echo", async () => {
300
- order.push(3);
301
- });
302
-
303
- await eventManager.emit("echo", {}, { reverse: true });
304
-
305
- expect(order).toEqual([3, 2, 1]);
306
- });
307
-
308
- it("should reverse priorities correctly", async () => {
309
- const eventManager = new EventManager();
310
- const order: string[] = [];
311
-
312
- eventManager.on("echo", {
313
- callback: async () => {
314
- order.push("first");
315
- },
316
- priority: "first",
317
- });
318
- eventManager.on("echo", async () => {
319
- order.push("normal");
320
- });
321
- eventManager.on("echo", {
322
- callback: async () => {
323
- order.push("last");
324
- },
325
- priority: "last",
326
- });
327
-
328
- await eventManager.emit("echo", {}, { reverse: true });
329
-
330
- // Reversed: last -> normal -> first
331
- expect(order).toEqual(["last", "normal", "first"]);
332
- });
333
-
334
- it("should work with stop lifecycle event", async () => {
335
- const alepha = Alepha.create();
336
- const order: string[] = [];
337
-
338
- alepha.events.on("start", async () => {
339
- order.push("start-1");
340
- });
341
- alepha.events.on("start", async () => {
342
- order.push("start-2");
343
- });
344
- alepha.events.on("stop", async () => {
345
- order.push("stop-1");
346
- });
347
- alepha.events.on("stop", async () => {
348
- order.push("stop-2");
349
- });
350
-
351
- await alepha.start();
352
- await alepha.stop();
353
-
354
- // Start should be in order, stop should be reversed
355
- expect(order).toEqual(["start-1", "start-2", "stop-2", "stop-1"]);
356
- });
357
- });
358
-
359
288
  describe("error handling", () => {
360
289
  it("should throw error when callback throws", async () => {
361
290
  const eventManager = new EventManager();
@@ -189,13 +189,6 @@ export class EventManager {
189
189
  func: T,
190
190
  payload: Hooks[T],
191
191
  options: {
192
- /**
193
- * If true, the hooks will be executed in reverse order.
194
- * This is useful for "stop" hooks that should be executed in reverse order.
195
- *
196
- * @default false
197
- */
198
- reverse?: boolean;
199
192
  /**
200
193
  * If true, the hooks will be logged with their execution time.
201
194
  *
@@ -216,8 +209,8 @@ export class EventManager {
216
209
  return;
217
210
  }
218
211
 
219
- // Fast path: single listener, no logging, no reverse
220
- if (events.length === 1 && !options.log && !options.reverse) {
212
+ // Fast path: single listener, no logging
213
+ if (events.length === 1 && !options.log) {
221
214
  const hook = events[0];
222
215
  try {
223
216
  const result = hook.callback(payload);
@@ -244,12 +237,7 @@ export class EventManager {
244
237
  this.log?.trace(`${String(func)} ...`);
245
238
  }
246
239
 
247
- let eventList = events;
248
- if (options.reverse) {
249
- eventList = events.toReversed();
250
- }
251
-
252
- for (const hook of eventList) {
240
+ for (const hook of events) {
253
241
  const name = hook.caller?.name ?? "unknown";
254
242
  if (options.log) {
255
243
  ctx.now2 = performance.now();
@@ -4,18 +4,6 @@
4
4
  * Used across the codebase via dependency injection.
5
5
  */
6
6
  export class Json {
7
- public stringify(
8
- value: any,
9
- replacer?: (this: any, key: string, value: any) => any,
10
- space?: string | number,
11
- ): string {
12
- return JSON.stringify(value, replacer, space);
13
- }
14
-
15
- public parse(
16
- text: string,
17
- reviver?: (this: any, key: string, value: any) => any,
18
- ) {
19
- return JSON.parse(text, reviver);
20
- }
7
+ stringify = JSON.stringify;
8
+ parse = JSON.parse;
21
9
  }
@@ -7,6 +7,21 @@ export * from "./providers/DateTimeProvider.ts";
7
7
 
8
8
  // ---------------------------------------------------------------------------------------------------------------------
9
9
 
10
+ /**
11
+ * | type | quality | stability |
12
+ * |------|---------|-----------|
13
+ * | tooling | standard | stable |
14
+ *
15
+ * Date and time operations.
16
+ *
17
+ * **Features:**
18
+ * - Recurring interval definitions
19
+ * - Duration parsing (ISO 8601, human-readable)
20
+ * - Timezone support
21
+ * - Dayjs integration
22
+ *
23
+ * @module alepha.datetime
24
+ */
10
25
  export const AlephaDateTime = $module({
11
26
  name: "alepha.datetime",
12
27
  primitives: [$interval],
@@ -36,13 +36,18 @@ declare module "alepha" {
36
36
  // ---------------------------------------------------------------------------------------------------------------------
37
37
 
38
38
  /**
39
- * Provides email sending capabilities for Alepha applications with multiple provider backends.
39
+ * | type | quality | stability |
40
+ * |------|---------|-----------|
41
+ * | backend | rare | stable |
40
42
  *
41
- * The email module enables declarative email sending through the `$email` primitive, allowing you to send
42
- * emails through different providers: memory (for testing), local file system, or SMTP via Nodemailer.
43
- * It supports HTML email content and automatic provider selection based on environment configuration.
43
+ * Email delivery with template support.
44
+ *
45
+ * **Features:**
46
+ * - Send emails with templates
47
+ * - Multiple recipients
48
+ * - SMTP via Nodemailer
49
+ * - Local file provider for development
44
50
  *
45
- * @see {@link EmailProvider}
46
51
  * @module alepha.email
47
52
  */
48
53
  export const AlephaEmail = $module({
@@ -1,5 +1,5 @@
1
1
  import { Alepha } from "alepha";
2
- import { FileSystemProvider, MemoryFileSystemProvider } from "alepha/file";
2
+ import { FileSystemProvider, MemoryFileSystemProvider } from "alepha/system";
3
3
  import { beforeEach, describe, expect, test, vi } from "vitest";
4
4
  import { EmailError } from "../errors/EmailError.ts";
5
5
  import {
@@ -1,6 +1,6 @@
1
1
  import { $atom, $hook, $inject, $use, type Static, t } from "alepha";
2
- import { FileSystemProvider } from "alepha/file";
3
2
  import { $logger } from "alepha/logger";
3
+ import { FileSystemProvider } from "alepha/system";
4
4
  import { EmailError } from "../errors/EmailError.ts";
5
5
  import type { EmailProvider, EmailSendOptions } from "./EmailProvider.ts";
6
6
 
@@ -2,7 +2,7 @@ import { t } from "alepha";
2
2
  import { FakeProvider } from "../providers/FakeProvider.ts";
3
3
 
4
4
  // Example showing how key names influence generated data
5
- const fake = new FakeProvider({ seed: 12345 });
5
+ const fake = new FakeProvider();
6
6
 
7
7
  const userSchema = t.object({
8
8
  id: t.uuid(),
@@ -4,7 +4,7 @@ import { FakeProvider } from "../providers/FakeProvider.ts";
4
4
 
5
5
  describe("FakeProvider - Key Name Intelligence", () => {
6
6
  test("generates contextual data based on key names", ({ expect }) => {
7
- const fake = new FakeProvider({ seed: 12345 });
7
+ const fake = new FakeProvider();
8
8
  const schema = t.object({
9
9
  firstName: t.text(),
10
10
  lastName: t.text(),
@@ -39,7 +39,7 @@ describe("FakeProvider - Key Name Intelligence", () => {
39
39
  });
40
40
 
41
41
  test("format takes precedence over key name", ({ expect }) => {
42
- const fake = new FakeProvider({ seed: 12345 });
42
+ const fake = new FakeProvider();
43
43
  const schema = t.object({
44
44
  // Even though key is "email", format: uuid should generate UUID
45
45
  email: t.uuid(),
@@ -59,7 +59,7 @@ describe("FakeProvider - Key Name Intelligence", () => {
59
59
  });
60
60
 
61
61
  test("enum values ignore key name context", ({ expect }) => {
62
- const fake = new FakeProvider({ seed: 12345 });
62
+ const fake = new FakeProvider();
63
63
  const schema = t.object({
64
64
  // Even though key is "email", enum should pick from values
65
65
  email: t.enum(["user1", "user2", "user3"]),
@@ -73,7 +73,7 @@ describe("FakeProvider - Key Name Intelligence", () => {
73
73
  });
74
74
 
75
75
  test("generates realistic user profiles", ({ expect }) => {
76
- const fake = new FakeProvider({ seed: 67890 });
76
+ const fake = new FakeProvider().configure({ seed: 67890 });
77
77
  const userSchema = t.object({
78
78
  firstName: t.shortText(),
79
79
  lastName: t.shortText(),
@@ -121,7 +121,7 @@ describe("FakeProvider - Key Name Intelligence", () => {
121
121
  });
122
122
 
123
123
  test("numeric key names influence generation", ({ expect }) => {
124
- const fake = new FakeProvider({ seed: 12345 });
124
+ const fake = new FakeProvider();
125
125
  const schema = t.object({
126
126
  age: t.integer(),
127
127
  year: t.integer(),
package/src/fake/index.ts CHANGED
@@ -9,14 +9,17 @@ export * from "./providers/FakeProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * Provides fake data generation capabilities for Alepha applications using faker.js and TypeBox schemas.
12
+ * | type | quality | stability |
13
+ * |------|---------|-----------|
14
+ * | tooling | rare | stable |
13
15
  *
14
- * The fake module enables declarative fake data generation from TypeBox schemas, making it easy to create
15
- * realistic test data, seed databases, or generate mock responses. It intelligently uses property key names
16
- * to generate contextually appropriate data (e.g., "email" generates an email address, "firstName" generates
17
- * a first name).
16
+ * Test data generation with Faker.js.
17
+ *
18
+ * **Features:**
19
+ * - TypeBox schema-based generation
20
+ * - Context-aware field generation (email field -> email address)
21
+ * - Test data seeding
18
22
  *
19
- * @see {@link FakeProvider}
20
23
  * @module alepha.fake
21
24
  */
22
25
  export const AlephaFake = $module({