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
package/dist/orm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as __reExport, t as __exportAll } from "./chunk-DtkW-qnP.js";
1
+ import { n as __reExport, t as __exportAll } from "./chunk-DH6iiROE.js";
2
2
  import { createRequire } from "node:module";
3
3
  import { $atom, $context, $env, $hook, $inject, $module, $use, Alepha, AlephaError, KIND, Primitive, Value, createPagination, createPrimitive, pageQuerySchema, pageSchema, pageSchema as pageSchema$1, t } from "alepha";
4
4
  import { AlephaDateTime, DateTimeProvider } from "alepha/datetime";
@@ -63,14 +63,14 @@ const insertSchema = (obj) => {
63
63
 
64
64
  //#endregion
65
65
  //#region ../../src/orm/schemas/updateSchema.ts
66
- const updateSchema = (schema$1) => {
66
+ const updateSchema = (schema) => {
67
67
  const newProperties = {};
68
- for (const key in schema$1.properties) {
69
- const prop = schema$1.properties[key];
68
+ for (const key in schema.properties) {
69
+ const prop = schema.properties[key];
70
70
  if (t.schema.isOptional(prop)) newProperties[key] = t.optional(t.union([prop, t.raw.Null()]));
71
71
  else newProperties[key] = prop;
72
72
  }
73
- return t.object(newProperties, "options" in schema$1 && typeof schema$1.options === "object" ? { ...schema$1.options } : {});
73
+ return t.object(newProperties, "options" in schema && typeof schema.options === "object" ? { ...schema.options } : {});
74
74
  };
75
75
 
76
76
  //#endregion
@@ -101,10 +101,10 @@ var EntityPrimitive = class EntityPrimitive {
101
101
  constructor(options) {
102
102
  this.options = options;
103
103
  }
104
- alias(alias$1) {
104
+ alias(alias) {
105
105
  const aliased = new EntityPrimitive(this.options);
106
106
  return new Proxy(aliased, { get(target, prop, receiver) {
107
- if (prop === "$alias") return alias$1;
107
+ if (prop === "$alias") return alias;
108
108
  return Reflect.get(target, prop, receiver);
109
109
  } });
110
110
  }
@@ -170,8 +170,8 @@ var DatabaseProvider = class {
170
170
  registerSequence(sequence) {
171
171
  this.builder.buildSequence(sequence, this);
172
172
  }
173
- async run(statement, schema$1) {
174
- return (await this.execute(statement)).map((row) => this.alepha.codec.decode(schema$1, row));
173
+ async run(statement, schema) {
174
+ return (await this.execute(statement)).map((row) => this.alepha.codec.decode(schema, row));
175
175
  }
176
176
  /**
177
177
  * Get migrations folder path - can be overridden
@@ -294,7 +294,7 @@ var DrizzleKitProvider = class {
294
294
  await this.executeStatements(statements, provider, true);
295
295
  await this.saveDevMigrations(provider, snapshot, entry);
296
296
  }
297
- this.log.info(`Db '${provider.name}' synchronization OK [${Date.now() - now}ms]`);
297
+ this.log.info(`Sync with '${provider.name}' OK [${Date.now() - now}ms]`);
298
298
  }
299
299
  /**
300
300
  * Mostly used for testing purposes. You can generate SQL migration statements without executing them.
@@ -304,16 +304,16 @@ var DrizzleKitProvider = class {
304
304
  const models = this.getModels(provider);
305
305
  if (Object.keys(models).length > 0) {
306
306
  if (provider.dialect === "sqlite") {
307
- const prev$1 = prevSnapshot ?? await kit.generateSQLiteDrizzleJson({});
308
- const curr$1 = await kit.generateSQLiteDrizzleJson(models);
307
+ const prev = prevSnapshot ?? await kit.generateSQLiteDrizzleJson({});
308
+ const curr = await kit.generateSQLiteDrizzleJson(models);
309
309
  return {
310
310
  models,
311
- statements: await kit.generateSQLiteMigration(prev$1, curr$1),
312
- snapshot: curr$1
311
+ statements: await kit.generateSQLiteMigration(prev, curr),
312
+ snapshot: curr
313
313
  };
314
314
  }
315
- const prev = prevSnapshot ?? await kit.generateDrizzleJson({});
316
- const curr = await kit.generateDrizzleJson(models);
315
+ const prev = prevSnapshot ?? kit.generateDrizzleJson({});
316
+ const curr = kit.generateDrizzleJson(models);
317
317
  return {
318
318
  models,
319
319
  statements: await kit.generateMigration(prev, curr),
@@ -600,8 +600,8 @@ var PostgresModelBuilder = class extends ModelBuilder {
600
600
  };
601
601
  return this.buildTableConfig(entity, pgBuilders, tableResolver);
602
602
  }
603
- schemaToPgColumns = (tableName, schema$1, nsp, enums, tables) => {
604
- return Object.entries(schema$1.properties).reduce((columns, [key, value]) => {
603
+ schemaToPgColumns = (tableName, schema, nsp, enums, tables) => {
604
+ return Object.entries(schema.properties).reduce((columns, [key, value]) => {
605
605
  let col = this.mapFieldToColumn(tableName, key, value, nsp, enums);
606
606
  if ("default" in value && value.default != null) col = col.default(value.default);
607
607
  if (PG_PRIMARY_KEY in value) col = col.primaryKey();
@@ -616,7 +616,7 @@ var PostgresModelBuilder = class extends ModelBuilder {
616
616
  return target;
617
617
  }, config.actions);
618
618
  }
619
- if (schema$1.required?.includes(key)) col = col.notNull();
619
+ if (schema.required?.includes(key)) col = col.notNull();
620
620
  return {
621
621
  ...columns,
622
622
  [key]: col
@@ -655,7 +655,7 @@ var PostgresModelBuilder = class extends ModelBuilder {
655
655
  if (t.schema.isBoolean(value)) return pg$2.boolean(key);
656
656
  if (t.schema.isObject(value)) return schema(key, value);
657
657
  if (t.schema.isRecord(value)) return schema(key, value);
658
- const isTypeEnum = (value$1) => t.schema.isUnsafe(value$1) && "type" in value$1 && value$1.type === "string" && "enum" in value$1 && Array.isArray(value$1.enum);
658
+ const isTypeEnum = (value) => t.schema.isUnsafe(value) && "type" in value && value.type === "string" && "enum" in value && Array.isArray(value.enum);
659
659
  if (t.schema.isArray(value)) {
660
660
  if (t.schema.isObject(value.items)) return schema(key, value);
661
661
  if (t.schema.isRecord(value.items)) return schema(key, value);
@@ -783,8 +783,8 @@ var BunPostgresProvider = class extends DatabaseProvider {
783
783
  return this.bunDb;
784
784
  }
785
785
  async executeMigrations(migrationsFolder) {
786
- const { migrate: migrate$3 } = await import("drizzle-orm/bun-sql/migrator");
787
- await migrate$3(this.bunDb, { migrationsFolder });
786
+ const { migrate } = await import("drizzle-orm/bun-sql/migrator");
787
+ await migrate(this.bunDb, { migrationsFolder });
788
788
  }
789
789
  onStart = $hook({
790
790
  on: "start",
@@ -812,10 +812,10 @@ var BunPostgresProvider = class extends DatabaseProvider {
812
812
  async connect() {
813
813
  this.log.debug("Connect ..");
814
814
  if (typeof Bun === "undefined") throw new AlephaError("BunPostgresProvider requires the Bun runtime. Use NodePostgresProvider for Node.js.");
815
- const { drizzle: drizzle$3 } = await import("drizzle-orm/bun-sql");
815
+ const { drizzle } = await import("drizzle-orm/bun-sql");
816
816
  this.client = new Bun.SQL(this.url);
817
817
  await this.client.unsafe("SELECT 1");
818
- this.bunDb = drizzle$3({
818
+ this.bunDb = drizzle({
819
819
  client: this.client,
820
820
  logger: { logQuery: (query, params) => {
821
821
  this.log.trace(query, { params });
@@ -868,8 +868,8 @@ var SqliteModelBuilder = class extends ModelBuilder {
868
868
  return Array.isArray(customConfigs) ? customConfigs : [];
869
869
  });
870
870
  }
871
- schemaToSqliteColumns = (tableName, schema$1, enums, tables) => {
872
- return Object.entries(schema$1.properties).reduce((columns, [key, value]) => {
871
+ schemaToSqliteColumns = (tableName, schema, enums, tables) => {
872
+ return Object.entries(schema.properties).reduce((columns, [key, value]) => {
873
873
  let col = this.mapFieldToSqliteColumn(tableName, key, value, enums);
874
874
  if ("default" in value && value.default != null) col = col.default(value.default);
875
875
  if (PG_PRIMARY_KEY in value) col = col.primaryKey();
@@ -884,7 +884,7 @@ var SqliteModelBuilder = class extends ModelBuilder {
884
884
  return target;
885
885
  }, config.actions);
886
886
  }
887
- if (schema$1.required?.includes(key)) col = col.notNull();
887
+ if (schema.required?.includes(key)) col = col.notNull();
888
888
  return {
889
889
  ...columns,
890
890
  [key]: col
@@ -1033,14 +1033,14 @@ var BunSqliteProvider = class extends DatabaseProvider {
1033
1033
  handler: async () => {
1034
1034
  if (typeof Bun === "undefined") throw new AlephaError("BunSqliteProvider requires the Bun runtime. Use NodeSqliteProvider for Node.js.");
1035
1035
  const { Database } = await import("bun:sqlite");
1036
- const { drizzle: drizzle$3 } = await import("drizzle-orm/bun-sqlite");
1036
+ const { drizzle } = await import("drizzle-orm/bun-sqlite");
1037
1037
  const filepath = this.url.replace("sqlite://", "").replace("sqlite:", "");
1038
1038
  if (filepath !== ":memory:" && filepath !== "") {
1039
1039
  const dirname = filepath.split("/").slice(0, -1).join("/");
1040
1040
  if (dirname) await mkdir(dirname, { recursive: true }).catch(() => null);
1041
1041
  }
1042
1042
  this.sqlite = new Database(filepath);
1043
- this.bunDb = drizzle$3({
1043
+ this.bunDb = drizzle({
1044
1044
  client: this.sqlite,
1045
1045
  logger: { logQuery: (query, params) => {
1046
1046
  this.log.trace(query, { params });
@@ -1052,6 +1052,7 @@ var BunSqliteProvider = class extends DatabaseProvider {
1052
1052
  });
1053
1053
  onStop = $hook({
1054
1054
  on: "stop",
1055
+ priority: "last",
1055
1056
  handler: async () => {
1056
1057
  if (this.sqlite) {
1057
1058
  this.log.debug("Closing Bun SQLite connection...");
@@ -1063,8 +1064,8 @@ var BunSqliteProvider = class extends DatabaseProvider {
1063
1064
  }
1064
1065
  });
1065
1066
  async executeMigrations(migrationsFolder) {
1066
- const { migrate: migrate$3 } = await import("drizzle-orm/bun-sqlite/migrator");
1067
- await migrate$3(this.bunDb, { migrationsFolder });
1067
+ const { migrate } = await import("drizzle-orm/bun-sqlite/migrator");
1068
+ await migrate(this.bunDb, { migrationsFolder });
1068
1069
  }
1069
1070
  };
1070
1071
 
@@ -1116,15 +1117,15 @@ var CloudflareD1Provider = class extends DatabaseProvider {
1116
1117
  const binding = cloudflareEnv[bindingName];
1117
1118
  if (!binding) throw new AlephaError(`D1 binding '${bindingName}' not found in Cloudflare Workers environment.`);
1118
1119
  this.d1 = binding;
1119
- const { drizzle: drizzle$3 } = await import("drizzle-orm/d1");
1120
- this.drizzleDb = drizzle$3(this.d1);
1120
+ const { drizzle } = await import("drizzle-orm/d1");
1121
+ this.drizzleDb = drizzle(this.d1);
1121
1122
  await this.migrate();
1122
1123
  this.log.info("Using Cloudflare D1 database");
1123
1124
  }
1124
1125
  });
1125
1126
  async executeMigrations(migrationsFolder) {
1126
- const { migrate: migrate$3 } = await import("drizzle-orm/d1/migrator");
1127
- await migrate$3(this.db, { migrationsFolder });
1127
+ const { migrate } = await import("drizzle-orm/d1/migrator");
1128
+ await migrate(this.db, { migrationsFolder });
1128
1129
  }
1129
1130
  /**
1130
1131
  * Override development migration to skip sync (not supported on D1).
@@ -1310,9 +1311,9 @@ var NodeSqliteProvider = class extends DatabaseProvider {
1310
1311
  else return "node_modules/.alepha/sqlite.db";
1311
1312
  }
1312
1313
  async execute(query) {
1313
- const { sql: sql$2, params, method } = this.db.all(query).getQuery();
1314
- this.log.trace(`${sql$2}`, params);
1315
- const statement = this.sqlite.prepare(sql$2);
1314
+ const { sql, params, method } = this.db.all(query).getQuery();
1315
+ this.log.trace(`${sql}`, params);
1316
+ const statement = this.sqlite.prepare(sql);
1316
1317
  if (method === "run") {
1317
1318
  statement.run(...params);
1318
1319
  return [];
@@ -1323,9 +1324,9 @@ var NodeSqliteProvider = class extends DatabaseProvider {
1323
1324
  }
1324
1325
  return statement.all(...params);
1325
1326
  }
1326
- db = drizzle$2(async (sql$2, params, method) => {
1327
- const statement = this.sqlite.prepare(sql$2);
1328
- this.log.trace(`${sql$2}`, { params });
1327
+ db = drizzle$2(async (sql, params, method) => {
1328
+ const statement = this.sqlite.prepare(sql);
1329
+ this.log.trace(`${sql}`, { params });
1329
1330
  if (method === "get") {
1330
1331
  const data = statement.get(...params);
1331
1332
  return { rows: data ? [{ ...data }] : [] };
@@ -1404,13 +1405,13 @@ var PglitePostgresProvider = class PglitePostgresProvider extends DatabaseProvid
1404
1405
  if (Object.keys(this.kit.getModels(this)).length === 0) return;
1405
1406
  const module = PglitePostgresProvider.importPglite();
1406
1407
  if (!module) throw new AlephaError("@electric-sql/pglite is not installed. Please install it to use the pglite driver.");
1407
- const { drizzle: drizzle$3 } = createRequire(import.meta.url)("drizzle-orm/pglite");
1408
+ const { drizzle } = createRequire(import.meta.url)("drizzle-orm/pglite");
1408
1409
  const path = this.url;
1409
1410
  if (path !== ":memory:") {
1410
1411
  await mkdir(path, { recursive: true }).catch(() => null);
1411
1412
  this.client = new module.PGlite(path);
1412
1413
  } else this.client = new module.PGlite();
1413
- this.pglite = drizzle$3({ client: this.client });
1414
+ this.pglite = drizzle({ client: this.client });
1414
1415
  await this.migrate();
1415
1416
  this.log.info(`Using PGlite database at ${path}`);
1416
1417
  }
@@ -1487,10 +1488,10 @@ const pgAttr = (type, attr, value) => {
1487
1488
  /**
1488
1489
  * Retrieves the fields of a schema that have a specific attribute.
1489
1490
  */
1490
- const getAttrFields = (schema$1, name) => {
1491
+ const getAttrFields = (schema, name) => {
1491
1492
  const fields = [];
1492
- for (const key of Object.keys(schema$1.properties)) {
1493
- const value = schema$1.properties[key];
1493
+ for (const key of Object.keys(schema.properties)) {
1494
+ const value = schema.properties[key];
1494
1495
  if (name in value) fields.push({
1495
1496
  type: value,
1496
1497
  key,
@@ -1526,13 +1527,13 @@ var PgRelationManager = class {
1526
1527
  /**
1527
1528
  * Map a row with its joined relations based on the joins definition
1528
1529
  */
1529
- mapRowWithJoins(record, row, schema$1, joins, parentKey) {
1530
+ mapRowWithJoins(record, row, schema, joins, parentKey) {
1530
1531
  for (const join of joins) if (join.parent === parentKey) {
1531
1532
  const joinedData = row[join.table];
1532
1533
  if (this.isAllNull(joinedData)) record[join.key] = void 0;
1533
1534
  else {
1534
1535
  record[join.key] = joinedData;
1535
- this.mapRowWithJoins(record[join.key], row, schema$1, joins, parentKey ? `${parentKey}.${join.key}` : join.key);
1536
+ this.mapRowWithJoins(record[join.key], row, schema, joins, parentKey ? `${parentKey}.${join.key}` : join.key);
1536
1537
  }
1537
1538
  }
1538
1539
  return record;
@@ -1549,16 +1550,16 @@ var PgRelationManager = class {
1549
1550
  * Build a schema that includes all join properties recursively
1550
1551
  */
1551
1552
  buildSchemaWithJoins(baseSchema, joins, parentPath) {
1552
- const schema$1 = Value.Clone(baseSchema);
1553
+ const schema = Value.Clone(baseSchema);
1553
1554
  const joinsAtThisLevel = joins.filter((j) => j.parent === parentPath);
1554
1555
  for (const join of joinsAtThisLevel) {
1555
1556
  const joinPath = parentPath ? `${parentPath}.${join.key}` : join.key;
1556
1557
  const childJoins = joins.filter((j) => j.parent === joinPath);
1557
1558
  let joinSchema = join.schema;
1558
1559
  if (childJoins.length > 0) joinSchema = this.buildSchemaWithJoins(join.schema, joins, joinPath);
1559
- schema$1.properties[join.key] = t.optional(joinSchema);
1560
+ schema.properties[join.key] = t.optional(joinSchema);
1560
1561
  }
1561
- return schema$1;
1562
+ return schema;
1562
1563
  }
1563
1564
  };
1564
1565
 
@@ -1570,7 +1571,7 @@ var QueryManager = class {
1570
1571
  * Convert a query object to a SQL query.
1571
1572
  */
1572
1573
  toSQL(query, options) {
1573
- const { schema: schema$1, col, joins } = options;
1574
+ const { schema, col, joins } = options;
1574
1575
  const conditions = [];
1575
1576
  if (isSQLWrapper(query)) conditions.push(query);
1576
1577
  else {
@@ -1592,13 +1593,13 @@ var QueryManager = class {
1592
1593
  parent: newParent
1593
1594
  };
1594
1595
  });
1595
- const sql$2 = this.toSQL(query[key], {
1596
+ const sql = this.toSQL(query[key], {
1596
1597
  schema: join.schema,
1597
1598
  col: join.col,
1598
1599
  joins: recursiveJoins.length > 0 ? recursiveJoins : void 0,
1599
1600
  dialect: options.dialect
1600
1601
  });
1601
- if (sql$2) conditions.push(sql$2);
1602
+ if (sql) conditions.push(sql);
1602
1603
  continue;
1603
1604
  }
1604
1605
  }
@@ -1606,7 +1607,7 @@ var QueryManager = class {
1606
1607
  const operations = operator.map((it) => {
1607
1608
  if (isSQLWrapper(it)) return it;
1608
1609
  return this.toSQL(it, {
1609
- schema: schema$1,
1610
+ schema,
1610
1611
  col,
1611
1612
  joins,
1612
1613
  dialect: options.dialect
@@ -1617,7 +1618,7 @@ var QueryManager = class {
1617
1618
  }
1618
1619
  if (key === "not") {
1619
1620
  const where = this.toSQL(operator, {
1620
- schema: schema$1,
1621
+ schema,
1621
1622
  col,
1622
1623
  joins,
1623
1624
  dialect: options.dialect
@@ -1626,8 +1627,8 @@ var QueryManager = class {
1626
1627
  }
1627
1628
  if (operator) {
1628
1629
  const column = col(key);
1629
- const sql$2 = this.mapOperatorToSql(operator, column, schema$1, key, options.dialect);
1630
- if (sql$2) conditions.push(sql$2);
1630
+ const sql = this.mapOperatorToSql(operator, column, schema, key, options.dialect);
1631
+ if (sql) conditions.push(sql);
1631
1632
  }
1632
1633
  }
1633
1634
  }
@@ -1796,7 +1797,7 @@ var QueryManager = class {
1796
1797
 
1797
1798
  //#endregion
1798
1799
  //#region ../../src/orm/services/Repository.ts
1799
- var Repository = class {
1800
+ var Repository = class Repository {
1800
1801
  entity;
1801
1802
  provider;
1802
1803
  log = $logger();
@@ -1804,6 +1805,13 @@ var Repository = class {
1804
1805
  queryManager = $inject(QueryManager);
1805
1806
  dateTimeProvider = $inject(DateTimeProvider);
1806
1807
  alepha = $inject(Alepha);
1808
+ static of(entity, provider = DatabaseProvider) {
1809
+ return class InlineRepository extends Repository {
1810
+ constructor() {
1811
+ super(entity, provider);
1812
+ }
1813
+ };
1814
+ }
1807
1815
  constructor(entity, provider = DatabaseProvider) {
1808
1816
  this.entity = entity;
1809
1817
  this.provider = this.alepha.inject(provider);
@@ -1858,11 +1866,11 @@ var Repository = class {
1858
1866
  * }
1859
1867
  * ```
1860
1868
  */
1861
- async query(query, schema$1) {
1869
+ async query(query, schema) {
1862
1870
  const raw = typeof query === "function" ? query(this.table, this.db) : query;
1863
1871
  if (typeof raw === "string" && raw.includes("[object Object]")) throw new AlephaError("Invalid SQL query. Did you forget to call the 'sql' function?");
1864
1872
  return (await this.provider.execute(raw)).map((it) => {
1865
- return this.clean(this.mapRawFieldsToEntity(it), schema$1 ?? this.entity.schema);
1873
+ return this.clean(this.mapRawFieldsToEntity(it), schema ?? this.entity.schema);
1866
1874
  });
1867
1875
  }
1868
1876
  /**
@@ -1908,11 +1916,11 @@ var Repository = class {
1908
1916
  * Start a SELECT DISTINCT query on the table.
1909
1917
  */
1910
1918
  rawSelectDistinct(opts = {}, columns = []) {
1911
- const db$1 = opts.tx ?? this.db;
1919
+ const db = opts.tx ?? this.db;
1912
1920
  const table = this.table;
1913
1921
  const fields = {};
1914
1922
  for (const column of columns) if (typeof column === "string") fields[column] = this.col(column);
1915
- return db$1.selectDistinct(fields).from(table);
1923
+ return db.selectDistinct(fields).from(table);
1916
1924
  }
1917
1925
  /**
1918
1926
  * Start an INSERT query on the table.
@@ -1964,21 +1972,21 @@ var Repository = class {
1964
1972
  }
1965
1973
  try {
1966
1974
  let rows = await builder.execute();
1967
- let schema$1 = this.entity.schema;
1968
- if (columns) schema$1 = t.pick(schema$1, columns);
1975
+ let schema = this.entity.schema;
1976
+ if (columns) schema = t.pick(schema, columns);
1969
1977
  if (joins.length) rows = rows.map((row) => {
1970
1978
  const rowSchema = {
1971
- ...schema$1,
1972
- properties: { ...schema$1.properties }
1979
+ ...schema,
1980
+ properties: { ...schema.properties }
1973
1981
  };
1974
1982
  return this.relationManager.mapRowWithJoins(row[this.tableName], row, rowSchema, joins);
1975
1983
  });
1976
1984
  rows = rows.map((row) => {
1977
1985
  if (joins.length) {
1978
- const joinedSchema = this.relationManager.buildSchemaWithJoins(schema$1, joins);
1986
+ const joinedSchema = this.relationManager.buildSchemaWithJoins(schema, joins);
1979
1987
  return this.cleanWithJoins(row, joinedSchema, joins);
1980
1988
  }
1981
- return this.clean(row, schema$1);
1989
+ return this.clean(row, schema);
1982
1990
  });
1983
1991
  await this.alepha.events.emit("repository:read:after", {
1984
1992
  tableName: this.tableName,
@@ -2324,27 +2332,27 @@ var Repository = class {
2324
2332
  * Convert something to valid Pg Insert Value.
2325
2333
  */
2326
2334
  cast(data, insert) {
2327
- const schema$1 = insert ? this.entity.insertSchema : t.partial(this.entity.updateSchema);
2328
- return this.alepha.codec.encode(schema$1, data);
2335
+ const schema = insert ? this.entity.insertSchema : t.partial(this.entity.updateSchema);
2336
+ return this.alepha.codec.encode(schema, data);
2329
2337
  }
2330
2338
  /**
2331
2339
  * Transform a row from the database into a clean entity.
2332
2340
  */
2333
- clean(row, schema$1) {
2334
- for (const key of Object.keys(schema$1.properties)) {
2335
- const value = schema$1.properties[key];
2341
+ clean(row, schema) {
2342
+ for (const key of Object.keys(schema.properties)) {
2343
+ const value = schema.properties[key];
2336
2344
  if (typeof row[key] === "string") {
2337
2345
  if (t.schema.isDateTime(value)) row[key] = this.dateTimeProvider.of(row[key]).toISOString();
2338
2346
  else if (t.schema.isDate(value)) row[key] = this.dateTimeProvider.of(`${row[key]}T00:00:00Z`).toISOString().split("T")[0];
2339
2347
  }
2340
2348
  if (typeof row[key] === "bigint" && t.schema.isBigInt(value)) row[key] = row[key].toString();
2341
2349
  }
2342
- return this.alepha.codec.decode(schema$1, row);
2350
+ return this.alepha.codec.decode(schema, row);
2343
2351
  }
2344
2352
  /**
2345
2353
  * Clean a row with joins recursively
2346
2354
  */
2347
- cleanWithJoins(row, schema$1, joins, parentPath) {
2355
+ cleanWithJoins(row, schema, joins, parentPath) {
2348
2356
  const joinsAtThisLevel = joins.filter((j) => j.parent === parentPath);
2349
2357
  const cleanRow = { ...row };
2350
2358
  const joinedData = {};
@@ -2352,7 +2360,7 @@ var Repository = class {
2352
2360
  joinedData[join.key] = cleanRow[join.key];
2353
2361
  delete cleanRow[join.key];
2354
2362
  }
2355
- const entity = this.clean(cleanRow, schema$1);
2363
+ const entity = this.clean(cleanRow, schema);
2356
2364
  for (const join of joinsAtThisLevel) {
2357
2365
  const joinedValue = joinedData[join.key];
2358
2366
  if (joinedValue != null) {
@@ -2388,8 +2396,8 @@ var Repository = class {
2388
2396
  /**
2389
2397
  * Find a primary key in the schema.
2390
2398
  */
2391
- getPrimaryKey(schema$1) {
2392
- const primaryKeys = getAttrFields(schema$1, PG_PRIMARY_KEY);
2399
+ getPrimaryKey(schema) {
2400
+ const primaryKeys = getAttrFields(schema, PG_PRIMARY_KEY);
2393
2401
  if (primaryKeys.length === 0) throw new AlephaError("Primary key not found in schema");
2394
2402
  if (primaryKeys.length > 1) throw new AlephaError(`Multiple primary keys (${primaryKeys.length}) are not supported`);
2395
2403
  return {
@@ -2707,8 +2715,8 @@ function buildQueryString(where) {
2707
2715
  if (!where || typeof where !== "object") return "";
2708
2716
  if ("and" in where && Array.isArray(where.and)) return where.and.map((w) => buildQueryString(w)).join("&");
2709
2717
  if ("or" in where && Array.isArray(where.or)) {
2710
- const parts$1 = where.or.map((w) => buildQueryString(w));
2711
- return parts$1.length > 1 ? `(${parts$1.join("|")})` : parts$1[0];
2718
+ const parts = where.or.map((w) => buildQueryString(w));
2719
+ return parts.length > 1 ? `(${parts.join("|")})` : parts[0];
2712
2720
  }
2713
2721
  if ("not" in where) return "";
2714
2722
  const parts = [];
@@ -2903,7 +2911,7 @@ var orm_exports = /* @__PURE__ */ __exportAll({
2903
2911
  $repository: () => $repository,
2904
2912
  $sequence: () => $sequence,
2905
2913
  $transaction: () => $transaction,
2906
- AlephaPostgres: () => AlephaPostgres,
2914
+ AlephaOrm: () => AlephaOrm,
2907
2915
  BunPostgresProvider: () => BunPostgresProvider,
2908
2916
  BunSqliteProvider: () => BunSqliteProvider,
2909
2917
  CloudflareD1Provider: () => CloudflareD1Provider,
@@ -2931,6 +2939,7 @@ var orm_exports = /* @__PURE__ */ __exportAll({
2931
2939
  Repository: () => Repository,
2932
2940
  RepositoryProvider: () => RepositoryProvider,
2933
2941
  SequencePrimitive: () => SequencePrimitive,
2942
+ SqliteProvider: () => SqliteProvider,
2934
2943
  buildQueryString: () => buildQueryString,
2935
2944
  bunSqliteOptions: () => bunSqliteOptions,
2936
2945
  db: () => db,
@@ -2948,59 +2957,32 @@ var orm_exports = /* @__PURE__ */ __exportAll({
2948
2957
  sql: () => sql,
2949
2958
  updateSchema: () => updateSchema
2950
2959
  });
2960
+ const SqliteProvider = NodeSqliteProvider;
2951
2961
  /**
2952
- * Postgres client based on Drizzle ORM, Alepha type-safe friendly.
2953
- *
2954
- * Automatically selects the appropriate provider based on runtime:
2955
- * - Bun: Uses `BunPostgresProvider` or `BunSqliteProvider`
2956
- * - Node.js: Uses `NodePostgresProvider` or `NodeSqliteProvider`
2957
- *
2958
- * ```ts
2959
- * import { t } from "alepha";
2960
- * import { $entity, $repository, db } from "alepha/postgres";
2961
- *
2962
- * const users = $entity({
2963
- * name: "users",
2964
- * schema: t.object({
2965
- * id: db.primaryKey(),
2966
- * name: t.text(),
2967
- * email: t.text(),
2968
- * }),
2969
- * });
2970
- *
2971
- * class App {
2972
- * users = $repository(users);
2973
- *
2974
- * getUserByName(name: string) {
2975
- * return this.users.findOne({ name: { eq: name } });
2976
- * }
2977
- * }
2978
- * ```
2979
- *
2980
- * This is not a full ORM, but rather a set of tools to work with Postgres databases in a type-safe way.
2962
+ * | type | quality | stability |
2963
+ * |------|---------|-----------|
2964
+ * | backend | epic | stable |
2981
2965
  *
2982
- * It provides:
2983
- * - A type-safe way to define entities and repositories. (via `$entity` and `$repository`)
2984
- * - Custom query builders and filters.
2985
- * - Built-in special columns like `createdAt`, `updatedAt`, `deletedAt`, `version`.
2986
- * - Automatic JSONB support.
2987
- * - Automatic synchronization of entities with the database schema (for testing and development).
2988
- * - Fallback to raw SQL via Drizzle ORM `sql` function.
2966
+ * Full-featured database abstraction built on Drizzle ORM with complete type safety.
2989
2967
  *
2990
- * Migrations are supported via Drizzle ORM, you need to use the `drizzle-kit` CLI tool to generate and run migrations.
2968
+ * **Features:**
2969
+ * - Define database entities with TypeBox schemas
2970
+ * - Automatic timestamps, soft deletes, and versioning columns
2971
+ * - Type-safe CRUD operations with filtering, pagination, sorting, and relationships
2972
+ * - Database transaction support with automatic rollback
2973
+ * - Auto-incrementing sequences for IDs
2974
+ * - PostgreSQL support (Node.js, Bun, Cloudflare Workers via pglite)
2975
+ * - SQLite support (Node.js, Bun, Cloudflare D1)
2976
+ * - Automatic schema sync for development/testing
2977
+ * - Drizzle Kit migrations for production
2978
+ * - Type-safe filters: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `like`, `between`
2979
+ * - JSONB column support
2980
+ * - Relationship joins
2991
2981
  *
2992
- * @see {@link $entity}
2993
- * @see {@link $sequence}
2994
- * @see {@link $repository}
2995
- * @see {@link $transaction}
2996
- * @see {@link NodePostgresProvider} - Node.js Postgres implementation
2997
- * @see {@link NodeSqliteProvider} - Node.js SQLite implementation
2998
- * @see {@link BunPostgresProvider} - Bun Postgres implementation
2999
- * @see {@link BunSqliteProvider} - Bun SQLite implementation
3000
2982
  * @module alepha.postgres
3001
2983
  */
3002
- const AlephaPostgres = $module({
3003
- name: "alepha.postgres",
2984
+ const AlephaOrm = $module({
2985
+ name: "alepha.orm",
3004
2986
  primitives: [$sequence, $entity],
3005
2987
  services: [
3006
2988
  AlephaDateTime,
@@ -3063,5 +3045,5 @@ const AlephaPostgres = $module({
3063
3045
  });
3064
3046
 
3065
3047
  //#endregion
3066
- export { $entity, $repository, $sequence, $transaction, AlephaPostgres, BunPostgresProvider, BunSqliteProvider, CloudflareD1Provider, DatabaseProvider, DatabaseTypeProvider, DbConflictError, DbEntityNotFoundError, DbError, DbMigrationError, DbVersionMismatchError, DrizzleKitProvider, EntityPrimitive, NodePostgresProvider, NodeSqliteProvider, PG_CREATED_AT, PG_DEFAULT, PG_DELETED_AT, PG_ENUM, PG_IDENTITY, PG_PRIMARY_KEY, PG_REF, PG_SERIAL, PG_UPDATED_AT, PG_VERSION, Repository, RepositoryProvider, SequencePrimitive, buildQueryString, bunSqliteOptions, db, drizzle, getAttrFields, insertSchema, legacyIdSchema, nodeSqliteOptions, pageQuerySchema, pageSchema, parseQueryString, pg, pgAttr, schema, sql, updateSchema };
3048
+ export { $entity, $repository, $sequence, $transaction, AlephaOrm, BunPostgresProvider, BunSqliteProvider, CloudflareD1Provider, DatabaseProvider, DatabaseTypeProvider, DbConflictError, DbEntityNotFoundError, DbError, DbMigrationError, DbVersionMismatchError, DrizzleKitProvider, EntityPrimitive, NodePostgresProvider, NodeSqliteProvider, PG_CREATED_AT, PG_DEFAULT, PG_DELETED_AT, PG_ENUM, PG_IDENTITY, PG_PRIMARY_KEY, PG_REF, PG_SERIAL, PG_UPDATED_AT, PG_VERSION, Repository, RepositoryProvider, SequencePrimitive, SqliteProvider, buildQueryString, bunSqliteOptions, db, drizzle, getAttrFields, insertSchema, legacyIdSchema, nodeSqliteOptions, pageQuerySchema, pageSchema, parseQueryString, pg, pgAttr, schema, sql, updateSchema };
3067
3049
  //# sourceMappingURL=index.js.map