alepha 0.14.2 → 0.14.4

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 (405) hide show
  1. package/README.md +1 -1
  2. package/dist/api/audits/index.browser.js +5 -5
  3. package/dist/api/audits/index.browser.js.map +1 -1
  4. package/dist/api/audits/index.d.ts +706 -785
  5. package/dist/api/audits/index.d.ts.map +1 -1
  6. package/dist/api/audits/index.js +13 -13
  7. package/dist/api/audits/index.js.map +1 -1
  8. package/dist/api/files/index.browser.js +5 -5
  9. package/dist/api/files/index.browser.js.map +1 -1
  10. package/dist/api/files/index.d.ts +58 -137
  11. package/dist/api/files/index.d.ts.map +1 -1
  12. package/dist/api/files/index.js +71 -71
  13. package/dist/api/files/index.js.map +1 -1
  14. package/dist/api/jobs/index.browser.js +5 -5
  15. package/dist/api/jobs/index.browser.js.map +1 -1
  16. package/dist/api/jobs/index.d.ts +29 -108
  17. package/dist/api/jobs/index.d.ts.map +1 -1
  18. package/dist/api/jobs/index.js +10 -10
  19. package/dist/api/jobs/index.js.map +1 -1
  20. package/dist/api/notifications/index.browser.js +10 -10
  21. package/dist/api/notifications/index.browser.js.map +1 -1
  22. package/dist/api/notifications/index.d.ts +504 -171
  23. package/dist/api/notifications/index.d.ts.map +1 -1
  24. package/dist/api/notifications/index.js +12 -12
  25. package/dist/api/notifications/index.js.map +1 -1
  26. package/dist/api/parameters/index.browser.js +163 -10
  27. package/dist/api/parameters/index.browser.js.map +1 -1
  28. package/dist/api/parameters/index.d.ts +277 -351
  29. package/dist/api/parameters/index.d.ts.map +1 -1
  30. package/dist/api/parameters/index.js +196 -91
  31. package/dist/api/parameters/index.js.map +1 -1
  32. package/dist/api/users/index.browser.js +19 -19
  33. package/dist/api/users/index.browser.js.map +1 -1
  34. package/dist/api/users/index.d.ts +787 -852
  35. package/dist/api/users/index.d.ts.map +1 -1
  36. package/dist/api/users/index.js +827 -596
  37. package/dist/api/users/index.js.map +1 -1
  38. package/dist/api/verifications/index.browser.js +6 -6
  39. package/dist/api/verifications/index.browser.js.map +1 -1
  40. package/dist/api/verifications/index.d.ts +128 -128
  41. package/dist/api/verifications/index.d.ts.map +1 -1
  42. package/dist/api/verifications/index.js +6 -6
  43. package/dist/api/verifications/index.js.map +1 -1
  44. package/dist/bin/index.d.ts +1 -2
  45. package/dist/bin/index.js +0 -1
  46. package/dist/bin/index.js.map +1 -1
  47. package/dist/cli/index.d.ts +252 -131
  48. package/dist/cli/index.d.ts.map +1 -1
  49. package/dist/cli/index.js +595 -395
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/command/index.d.ts +46 -11
  52. package/dist/command/index.d.ts.map +1 -1
  53. package/dist/command/index.js +99 -19
  54. package/dist/command/index.js.map +1 -1
  55. package/dist/core/index.browser.js +40 -22
  56. package/dist/core/index.browser.js.map +1 -1
  57. package/dist/core/index.d.ts +45 -1
  58. package/dist/core/index.d.ts.map +1 -1
  59. package/dist/core/index.js +40 -22
  60. package/dist/core/index.js.map +1 -1
  61. package/dist/core/index.native.js +40 -22
  62. package/dist/core/index.native.js.map +1 -1
  63. package/dist/fake/index.js +195 -168
  64. package/dist/fake/index.js.map +1 -1
  65. package/dist/file/index.d.ts +8 -0
  66. package/dist/file/index.d.ts.map +1 -1
  67. package/dist/file/index.js +3 -0
  68. package/dist/file/index.js.map +1 -1
  69. package/dist/logger/index.d.ts +1 -1
  70. package/dist/logger/index.d.ts.map +1 -1
  71. package/dist/logger/index.js +12 -2
  72. package/dist/logger/index.js.map +1 -1
  73. package/dist/mcp/index.js +1 -1
  74. package/dist/mcp/index.js.map +1 -1
  75. package/dist/orm/index.d.ts +59 -195
  76. package/dist/orm/index.d.ts.map +1 -1
  77. package/dist/orm/index.js +201 -430
  78. package/dist/orm/index.js.map +1 -1
  79. package/dist/security/index.d.ts +1 -1
  80. package/dist/security/index.d.ts.map +1 -1
  81. package/dist/security/index.js +1 -1
  82. package/dist/security/index.js.map +1 -1
  83. package/dist/server/auth/index.d.ts +171 -155
  84. package/dist/server/auth/index.d.ts.map +1 -1
  85. package/dist/server/auth/index.js +0 -1
  86. package/dist/server/auth/index.js.map +1 -1
  87. package/dist/server/cache/index.d.ts +12 -0
  88. package/dist/server/cache/index.d.ts.map +1 -1
  89. package/dist/server/cache/index.js +55 -2
  90. package/dist/server/cache/index.js.map +1 -1
  91. package/dist/server/compress/index.d.ts +6 -0
  92. package/dist/server/compress/index.d.ts.map +1 -1
  93. package/dist/server/compress/index.js +38 -1
  94. package/dist/server/compress/index.js.map +1 -1
  95. package/dist/server/core/index.browser.js +2 -2
  96. package/dist/server/core/index.browser.js.map +1 -1
  97. package/dist/server/core/index.d.ts +10 -10
  98. package/dist/server/core/index.d.ts.map +1 -1
  99. package/dist/server/core/index.js +7 -4
  100. package/dist/server/core/index.js.map +1 -1
  101. package/dist/server/links/index.browser.js +22 -6
  102. package/dist/server/links/index.browser.js.map +1 -1
  103. package/dist/server/links/index.d.ts +46 -44
  104. package/dist/server/links/index.d.ts.map +1 -1
  105. package/dist/server/links/index.js +24 -41
  106. package/dist/server/links/index.js.map +1 -1
  107. package/dist/server/static/index.d.ts.map +1 -1
  108. package/dist/server/static/index.js +4 -0
  109. package/dist/server/static/index.js.map +1 -1
  110. package/dist/server/swagger/index.d.ts +2 -1
  111. package/dist/server/swagger/index.d.ts.map +1 -1
  112. package/dist/server/swagger/index.js +9 -5
  113. package/dist/server/swagger/index.js.map +1 -1
  114. package/dist/vite/index.d.ts +101 -106
  115. package/dist/vite/index.d.ts.map +1 -1
  116. package/dist/vite/index.js +574 -503
  117. package/dist/vite/index.js.map +1 -1
  118. package/dist/websocket/index.d.ts +7 -7
  119. package/package.json +7 -7
  120. package/src/api/audits/controllers/{AuditController.ts → AdminAuditController.ts} +5 -6
  121. package/src/api/audits/entities/audits.ts +5 -5
  122. package/src/api/audits/index.browser.ts +1 -1
  123. package/src/api/audits/index.ts +3 -3
  124. package/src/api/audits/primitives/$audit.spec.ts +276 -0
  125. package/src/api/audits/services/AuditService.spec.ts +495 -0
  126. package/src/api/files/__tests__/$bucket.spec.ts +91 -0
  127. package/src/api/files/controllers/AdminFileStatsController.spec.ts +166 -0
  128. package/src/api/files/controllers/{StorageStatsController.ts → AdminFileStatsController.ts} +2 -2
  129. package/src/api/files/controllers/FileController.spec.ts +558 -0
  130. package/src/api/files/controllers/FileController.ts +4 -5
  131. package/src/api/files/entities/files.ts +5 -5
  132. package/src/api/files/index.browser.ts +1 -1
  133. package/src/api/files/index.ts +4 -4
  134. package/src/api/files/jobs/FileJobs.spec.ts +52 -0
  135. package/src/api/files/services/FileService.spec.ts +109 -0
  136. package/src/api/jobs/__tests__/JobController.spec.ts +343 -0
  137. package/src/api/jobs/controllers/{JobController.ts → AdminJobController.ts} +2 -2
  138. package/src/api/jobs/entities/jobExecutions.ts +5 -5
  139. package/src/api/jobs/index.ts +3 -3
  140. package/src/api/jobs/primitives/$job.spec.ts +476 -0
  141. package/src/api/notifications/controllers/{NotificationController.ts → AdminNotificationController.ts} +4 -5
  142. package/src/api/notifications/entities/notifications.ts +5 -5
  143. package/src/api/notifications/index.browser.ts +1 -1
  144. package/src/api/notifications/index.ts +4 -4
  145. package/src/api/parameters/controllers/{ConfigController.ts → AdminConfigController.ts} +46 -107
  146. package/src/api/parameters/entities/parameters.ts +7 -17
  147. package/src/api/parameters/index.ts +3 -3
  148. package/src/api/parameters/primitives/$config.spec.ts +356 -0
  149. package/src/api/parameters/schemas/activateConfigBodySchema.ts +12 -0
  150. package/src/api/parameters/schemas/checkScheduledResponseSchema.ts +8 -0
  151. package/src/api/parameters/schemas/configCurrentResponseSchema.ts +13 -0
  152. package/src/api/parameters/schemas/configHistoryResponseSchema.ts +9 -0
  153. package/src/api/parameters/schemas/configNameParamSchema.ts +10 -0
  154. package/src/api/parameters/schemas/configNamesResponseSchema.ts +8 -0
  155. package/src/api/parameters/schemas/configTreeNodeSchema.ts +13 -0
  156. package/src/api/parameters/schemas/configVersionParamSchema.ts +9 -0
  157. package/src/api/parameters/schemas/configVersionResponseSchema.ts +9 -0
  158. package/src/api/parameters/schemas/configsByStatusResponseSchema.ts +9 -0
  159. package/src/api/parameters/schemas/createConfigVersionBodySchema.ts +24 -0
  160. package/src/api/parameters/schemas/index.ts +15 -0
  161. package/src/api/parameters/schemas/parameterResponseSchema.ts +26 -0
  162. package/src/api/parameters/schemas/parameterStatusSchema.ts +13 -0
  163. package/src/api/parameters/schemas/rollbackConfigBodySchema.ts +15 -0
  164. package/src/api/parameters/schemas/statusParamSchema.ts +9 -0
  165. package/src/api/users/__tests__/EmailVerification.spec.ts +369 -0
  166. package/src/api/users/__tests__/PasswordReset.spec.ts +550 -0
  167. package/src/api/users/controllers/AdminIdentityController.spec.ts +365 -0
  168. package/src/api/users/controllers/{IdentityController.ts → AdminIdentityController.ts} +3 -4
  169. package/src/api/users/controllers/AdminSessionController.spec.ts +274 -0
  170. package/src/api/users/controllers/{SessionController.ts → AdminSessionController.ts} +3 -4
  171. package/src/api/users/controllers/AdminUserController.spec.ts +372 -0
  172. package/src/api/users/controllers/AdminUserController.ts +116 -0
  173. package/src/api/users/controllers/UserController.ts +4 -107
  174. package/src/api/users/controllers/UserRealmController.ts +3 -0
  175. package/src/api/users/entities/identities.ts +6 -6
  176. package/src/api/users/entities/sessions.ts +6 -6
  177. package/src/api/users/entities/users.ts +9 -9
  178. package/src/api/users/index.ts +9 -6
  179. package/src/api/users/primitives/$userRealm.ts +13 -8
  180. package/src/api/users/services/CredentialService.spec.ts +509 -0
  181. package/src/api/users/services/CredentialService.ts +46 -0
  182. package/src/api/users/services/IdentityService.ts +15 -0
  183. package/src/api/users/services/RegistrationService.spec.ts +630 -0
  184. package/src/api/users/services/RegistrationService.ts +18 -0
  185. package/src/api/users/services/SessionService.spec.ts +301 -0
  186. package/src/api/users/services/SessionService.ts +110 -1
  187. package/src/api/users/services/UserService.ts +67 -2
  188. package/src/api/verifications/__tests__/CodeVerification.spec.ts +318 -0
  189. package/src/api/verifications/__tests__/LinkVerification.spec.ts +279 -0
  190. package/src/api/verifications/entities/verifications.ts +6 -6
  191. package/src/api/verifications/jobs/VerificationJobs.spec.ts +50 -0
  192. package/src/batch/__tests__/startup-buffering.spec.ts +458 -0
  193. package/src/batch/primitives/$batch.spec.ts +766 -0
  194. package/src/batch/providers/BatchProvider.spec.ts +786 -0
  195. package/src/bin/index.ts +0 -1
  196. package/src/bucket/__tests__/shared.ts +194 -0
  197. package/src/bucket/primitives/$bucket.spec.ts +104 -0
  198. package/src/bucket/providers/FileStorageProvider.spec.ts +13 -0
  199. package/src/bucket/providers/LocalFileStorageProvider.spec.ts +77 -0
  200. package/src/bucket/providers/MemoryFileStorageProvider.spec.ts +82 -0
  201. package/src/cache/core/__tests__/shared.ts +377 -0
  202. package/src/cache/core/primitives/$cache.spec.ts +111 -0
  203. package/src/cache/redis/__tests__/cache-redis.spec.ts +70 -0
  204. package/src/cli/apps/AlephaCli.ts +25 -6
  205. package/src/cli/atoms/buildOptions.ts +88 -0
  206. package/src/cli/commands/build.ts +32 -69
  207. package/src/cli/commands/db.ts +0 -4
  208. package/src/cli/commands/dev.ts +34 -10
  209. package/src/cli/commands/gen/changelog.spec.ts +315 -0
  210. package/src/cli/commands/{changelog.ts → gen/changelog.ts} +9 -9
  211. package/src/cli/commands/gen/env.ts +53 -0
  212. package/src/cli/commands/gen/openapi.ts +71 -0
  213. package/src/cli/commands/gen/resource.ts +15 -0
  214. package/src/cli/commands/gen.ts +24 -0
  215. package/src/cli/commands/init.ts +2 -1
  216. package/src/cli/commands/root.ts +12 -3
  217. package/src/cli/commands/test.ts +0 -1
  218. package/src/cli/commands/typecheck.ts +5 -0
  219. package/src/cli/commands/verify.ts +1 -1
  220. package/src/cli/defineConfig.ts +49 -7
  221. package/src/cli/index.ts +2 -2
  222. package/src/cli/services/AlephaCliUtils.ts +105 -55
  223. package/src/cli/services/GitMessageParser.ts +1 -1
  224. package/src/command/helpers/Asker.spec.ts +127 -0
  225. package/src/command/helpers/Runner.spec.ts +126 -0
  226. package/src/command/helpers/Runner.ts +1 -1
  227. package/src/command/primitives/$command.spec.ts +1588 -0
  228. package/src/command/primitives/$command.ts +0 -6
  229. package/src/command/providers/CliProvider.ts +75 -27
  230. package/src/core/Alepha.ts +87 -0
  231. package/src/core/__tests__/Alepha-emit.spec.ts +22 -0
  232. package/src/core/__tests__/Alepha-graph.spec.ts +93 -0
  233. package/src/core/__tests__/Alepha-has.spec.ts +41 -0
  234. package/src/core/__tests__/Alepha-inject.spec.ts +93 -0
  235. package/src/core/__tests__/Alepha-register.spec.ts +81 -0
  236. package/src/core/__tests__/Alepha-start.spec.ts +176 -0
  237. package/src/core/__tests__/Alepha-with.spec.ts +14 -0
  238. package/src/core/__tests__/TypeBox-usecases.spec.ts +35 -0
  239. package/src/core/__tests__/TypeBoxLocale.spec.ts +15 -0
  240. package/src/core/__tests__/descriptor.spec.ts +34 -0
  241. package/src/core/__tests__/fixtures/A.ts +5 -0
  242. package/src/core/__tests__/pagination.spec.ts +77 -0
  243. package/src/core/helpers/jsonSchemaToTypeBox.ts +2 -2
  244. package/src/core/primitives/$atom.spec.ts +43 -0
  245. package/src/core/primitives/$hook.spec.ts +130 -0
  246. package/src/core/primitives/$inject.spec.ts +175 -0
  247. package/src/core/primitives/$module.spec.ts +115 -0
  248. package/src/core/providers/CodecManager.spec.ts +740 -0
  249. package/src/core/providers/EventManager.spec.ts +762 -0
  250. package/src/core/providers/EventManager.ts +4 -0
  251. package/src/core/providers/StateManager.spec.ts +365 -0
  252. package/src/core/providers/TypeProvider.spec.ts +1607 -0
  253. package/src/core/providers/TypeProvider.ts +20 -26
  254. package/src/datetime/primitives/$interval.spec.ts +103 -0
  255. package/src/datetime/providers/DateTimeProvider.spec.ts +86 -0
  256. package/src/email/primitives/$email.spec.ts +175 -0
  257. package/src/email/providers/LocalEmailProvider.spec.ts +341 -0
  258. package/src/fake/__tests__/keyName.example.ts +40 -0
  259. package/src/fake/__tests__/keyName.spec.ts +152 -0
  260. package/src/fake/__tests__/module.example.ts +32 -0
  261. package/src/fake/providers/FakeProvider.spec.ts +438 -0
  262. package/src/file/providers/FileSystemProvider.ts +8 -0
  263. package/src/file/providers/NodeFileSystemProvider.spec.ts +418 -0
  264. package/src/file/providers/NodeFileSystemProvider.ts +5 -0
  265. package/src/file/services/FileDetector.spec.ts +591 -0
  266. package/src/lock/core/__tests__/shared.ts +190 -0
  267. package/src/lock/core/providers/MemoryLockProvider.spec.ts +25 -0
  268. package/src/lock/redis/providers/RedisLockProvider.spec.ts +25 -0
  269. package/src/logger/__tests__/SimpleFormatterProvider.spec.ts +109 -0
  270. package/src/logger/index.ts +15 -3
  271. package/src/logger/primitives/$logger.spec.ts +108 -0
  272. package/src/logger/services/Logger.spec.ts +295 -0
  273. package/src/mcp/__tests__/errors.spec.ts +175 -0
  274. package/src/mcp/__tests__/integration.spec.ts +450 -0
  275. package/src/mcp/helpers/jsonrpc.spec.ts +380 -0
  276. package/src/mcp/primitives/$prompt.spec.ts +468 -0
  277. package/src/mcp/primitives/$resource.spec.ts +390 -0
  278. package/src/mcp/primitives/$tool.spec.ts +406 -0
  279. package/src/mcp/providers/McpServerProvider.spec.ts +797 -0
  280. package/src/mcp/transports/StdioMcpTransport.ts +1 -1
  281. package/src/orm/__tests__/$repository-crud.spec.ts +276 -0
  282. package/src/orm/__tests__/$repository-hooks.spec.ts +325 -0
  283. package/src/orm/__tests__/$repository-orderBy.spec.ts +128 -0
  284. package/src/orm/__tests__/$repository-pagination-sort.spec.ts +149 -0
  285. package/src/orm/__tests__/$repository-save.spec.ts +37 -0
  286. package/src/orm/__tests__/ModelBuilder-integration.spec.ts +490 -0
  287. package/src/orm/__tests__/ModelBuilder-types.spec.ts +186 -0
  288. package/src/orm/__tests__/PostgresProvider.spec.ts +46 -0
  289. package/src/orm/__tests__/delete-returning.spec.ts +256 -0
  290. package/src/orm/__tests__/deletedAt.spec.ts +80 -0
  291. package/src/orm/__tests__/enums.spec.ts +315 -0
  292. package/src/orm/__tests__/execute.spec.ts +72 -0
  293. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +65 -0
  294. package/src/orm/__tests__/fixtures/userEntitySchema.ts +27 -0
  295. package/src/orm/__tests__/joins.spec.ts +1114 -0
  296. package/src/orm/__tests__/page.spec.ts +287 -0
  297. package/src/orm/__tests__/primaryKey.spec.ts +87 -0
  298. package/src/orm/__tests__/query-date-encoding.spec.ts +402 -0
  299. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +156 -0
  300. package/src/orm/__tests__/references.spec.ts +102 -0
  301. package/src/orm/__tests__/security.spec.ts +710 -0
  302. package/src/orm/__tests__/sqlite.spec.ts +111 -0
  303. package/src/orm/__tests__/string-operators.spec.ts +429 -0
  304. package/src/orm/__tests__/timestamps.spec.ts +388 -0
  305. package/src/orm/__tests__/validation.spec.ts +183 -0
  306. package/src/orm/__tests__/version.spec.ts +64 -0
  307. package/src/orm/helpers/parseQueryString.spec.ts +196 -0
  308. package/src/orm/index.ts +2 -8
  309. package/src/orm/primitives/$repository.spec.ts +137 -0
  310. package/src/orm/primitives/$sequence.spec.ts +29 -0
  311. package/src/orm/primitives/$transaction.spec.ts +82 -0
  312. package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -3
  313. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
  314. package/src/orm/providers/drivers/CloudflareD1Provider.ts +1 -1
  315. package/src/orm/providers/drivers/DatabaseProvider.ts +1 -1
  316. package/src/orm/providers/drivers/NodePostgresProvider.ts +3 -3
  317. package/src/orm/providers/drivers/NodeSqliteProvider.ts +1 -1
  318. package/src/orm/providers/drivers/PglitePostgresProvider.ts +2 -2
  319. package/src/orm/services/ModelBuilder.spec.ts +575 -0
  320. package/src/orm/services/Repository.spec.ts +137 -0
  321. package/src/queue/core/__tests__/shared.ts +143 -0
  322. package/src/queue/core/providers/MemoryQueueProvider.spec.ts +23 -0
  323. package/src/queue/core/providers/WorkerProvider.spec.ts +394 -0
  324. package/src/queue/redis/providers/RedisQueueProvider.spec.ts +23 -0
  325. package/src/redis/__tests__/redis.spec.ts +58 -0
  326. package/src/retry/primitives/$retry.spec.ts +234 -0
  327. package/src/retry/providers/RetryProvider.spec.ts +438 -0
  328. package/src/router/__tests__/match.spec.ts +252 -0
  329. package/src/router/providers/RouterProvider.spec.ts +197 -0
  330. package/src/scheduler/__tests__/$scheduler-cron.spec.ts +25 -0
  331. package/src/scheduler/__tests__/$scheduler-interval.spec.ts +25 -0
  332. package/src/scheduler/__tests__/shared.ts +77 -0
  333. package/src/security/__tests__/bug-1-wildcard-after-start.spec.ts +229 -0
  334. package/src/security/__tests__/bug-2-password-validation.spec.ts +245 -0
  335. package/src/security/__tests__/bug-3-regex-vulnerability.spec.ts +407 -0
  336. package/src/security/__tests__/bug-4-oauth2-validation.spec.ts +439 -0
  337. package/src/security/__tests__/multi-layer-permissions.spec.ts +522 -0
  338. package/src/security/primitives/$permission.spec.ts +30 -0
  339. package/src/security/primitives/$permission.ts +2 -2
  340. package/src/security/primitives/$realm.spec.ts +101 -0
  341. package/src/security/primitives/$role.spec.ts +52 -0
  342. package/src/security/primitives/$serviceAccount.spec.ts +61 -0
  343. package/src/security/providers/SecurityProvider.spec.ts +350 -0
  344. package/src/server/auth/providers/ServerAuthProvider.ts +0 -2
  345. package/src/server/cache/providers/ServerCacheProvider.spec.ts +1125 -0
  346. package/src/server/cache/providers/ServerCacheProvider.ts +94 -9
  347. package/src/server/compress/providers/ServerCompressProvider.spec.ts +31 -0
  348. package/src/server/compress/providers/ServerCompressProvider.ts +63 -2
  349. package/src/server/cookies/providers/ServerCookiesProvider.spec.ts +253 -0
  350. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +334 -0
  351. package/src/server/core/__tests__/ServerRouterProvider-requestId.spec.ts +129 -0
  352. package/src/server/core/helpers/ServerReply.ts +2 -2
  353. package/src/server/core/primitives/$action.spec.ts +191 -0
  354. package/src/server/core/primitives/$route.spec.ts +65 -0
  355. package/src/server/core/providers/ServerBodyParserProvider.spec.ts +93 -0
  356. package/src/server/core/providers/ServerLoggerProvider.spec.ts +100 -0
  357. package/src/server/core/providers/ServerProvider.ts +14 -2
  358. package/src/server/core/services/HttpClient.spec.ts +123 -0
  359. package/src/server/core/services/UserAgentParser.spec.ts +111 -0
  360. package/src/server/cors/providers/ServerCorsProvider.spec.ts +481 -0
  361. package/src/server/health/providers/ServerHealthProvider.spec.ts +22 -0
  362. package/src/server/helmet/providers/ServerHelmetProvider.spec.ts +105 -0
  363. package/src/server/links/__tests__/$action.spec.ts +238 -0
  364. package/src/server/links/__tests__/fixtures/CrudApp.ts +122 -0
  365. package/src/server/links/__tests__/requestId.spec.ts +120 -0
  366. package/src/server/links/primitives/$remote.spec.ts +228 -0
  367. package/src/server/links/providers/LinkProvider.spec.ts +54 -0
  368. package/src/server/links/providers/LinkProvider.ts +49 -3
  369. package/src/server/links/providers/ServerLinksProvider.ts +1 -53
  370. package/src/server/links/schemas/apiLinksResponseSchema.ts +7 -0
  371. package/src/server/metrics/providers/ServerMetricsProvider.spec.ts +25 -0
  372. package/src/server/multipart/providers/ServerMultipartProvider.spec.ts +528 -0
  373. package/src/server/proxy/primitives/$proxy.spec.ts +87 -0
  374. package/src/server/rate-limit/__tests__/ActionRateLimit.spec.ts +211 -0
  375. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +344 -0
  376. package/src/server/security/__tests__/BasicAuth.spec.ts +684 -0
  377. package/src/server/security/__tests__/ServerSecurityProvider-realm.spec.ts +388 -0
  378. package/src/server/security/providers/ServerSecurityProvider.spec.ts +123 -0
  379. package/src/server/static/primitives/$serve.spec.ts +193 -0
  380. package/src/server/static/providers/ServerStaticProvider.ts +10 -0
  381. package/src/server/swagger/__tests__/ui.spec.ts +52 -0
  382. package/src/server/swagger/primitives/$swagger.spec.ts +193 -0
  383. package/src/server/swagger/providers/ServerSwaggerProvider.ts +19 -12
  384. package/src/sms/primitives/$sms.spec.ts +165 -0
  385. package/src/sms/providers/LocalSmsProvider.spec.ts +224 -0
  386. package/src/sms/providers/MemorySmsProvider.spec.ts +193 -0
  387. package/src/thread/primitives/$thread.spec.ts +186 -0
  388. package/src/topic/core/__tests__/shared.ts +144 -0
  389. package/src/topic/core/providers/MemoryTopicProvider.spec.ts +23 -0
  390. package/src/topic/redis/providers/RedisTopicProvider.spec.ts +23 -0
  391. package/src/vite/helpers/importViteReact.ts +13 -0
  392. package/src/vite/index.ts +1 -21
  393. package/src/vite/plugins/viteAlephaDev.ts +32 -5
  394. package/src/vite/plugins/viteAlephaSsrPreload.ts +222 -0
  395. package/src/vite/tasks/buildClient.ts +11 -0
  396. package/src/vite/tasks/buildServer.ts +47 -3
  397. package/src/vite/tasks/devServer.ts +69 -0
  398. package/src/vite/tasks/index.ts +2 -1
  399. package/src/vite/tasks/runAlepha.ts +7 -1
  400. package/src/websocket/__tests__/$websocket-new.spec.ts +195 -0
  401. package/src/websocket/primitives/$channel.spec.ts +30 -0
  402. package/src/cli/assets/viteConfigTs.ts +0 -14
  403. package/src/cli/commands/run.ts +0 -24
  404. package/src/vite/plugins/viteAlepha.ts +0 -37
  405. package/src/vite/plugins/viteAlephaBuild.ts +0 -281
@@ -0,0 +1,88 @@
1
+ import { type Static, t } from "alepha";
2
+ import { $atom } from "../../core/primitives/$atom.ts";
3
+
4
+ /**
5
+ * Build options atom for CLI build command.
6
+ *
7
+ * Defines the available build configuration options with their defaults.
8
+ * Options can be overridden via vite.config.ts or CLI flags.
9
+ */
10
+ export const buildOptions = $atom({
11
+ name: "alepha.build.options",
12
+ description: "Build configuration options",
13
+ schema: t.object({
14
+ /**
15
+ * Generate build stats report.
16
+ */
17
+ stats: t.optional(t.boolean({ default: false })),
18
+
19
+ /**
20
+ * Vercel deployment configuration.
21
+ */
22
+ vercel: t.optional(
23
+ t.object({
24
+ projectName: t.optional(t.string()),
25
+ orgId: t.optional(t.string()),
26
+ projectId: t.optional(t.string()),
27
+ config: t.optional(
28
+ t.object({
29
+ crons: t.optional(
30
+ t.array(
31
+ t.object({
32
+ path: t.string(),
33
+ schedule: t.string(),
34
+ }),
35
+ ),
36
+ ),
37
+ }),
38
+ ),
39
+ }),
40
+ ),
41
+
42
+ /**
43
+ * Cloudflare Workers deployment configuration.
44
+ */
45
+ cloudflare: t.optional(
46
+ t.object({
47
+ config: t.optional(t.json()),
48
+ }),
49
+ ),
50
+
51
+ /**
52
+ * Docker deployment configuration.
53
+ */
54
+ docker: t.optional(
55
+ t.object({
56
+ /**
57
+ * Docker image name to use in the Dockerfile.
58
+ * @default "node:24-alpine"
59
+ */
60
+ image: t.optional(t.string({ default: "node:24-alpine" })),
61
+
62
+ /**
63
+ * Command to run in the Docker container.
64
+ * @default "node"
65
+ */
66
+ command: t.optional(t.string({ default: "node" })),
67
+ }),
68
+ ),
69
+
70
+ /**
71
+ * Sitemap generation configuration.
72
+ */
73
+ sitemap: t.optional(
74
+ t.object({
75
+ /**
76
+ * Base URL for sitemap entries.
77
+ */
78
+ hostname: t.string(),
79
+ }),
80
+ ),
81
+ }),
82
+ default: {},
83
+ });
84
+
85
+ /**
86
+ * Type for build options.
87
+ */
88
+ export type BuildOptions = Static<typeof buildOptions.schema>;
@@ -1,7 +1,6 @@
1
1
  import { access, readFile, unlink, writeFile } from "node:fs/promises";
2
- import { createRequire } from "node:module";
3
2
  import { join } from "node:path";
4
- import { $inject, OPTIONS, t } from "alepha";
3
+ import { $inject, $use, t } from "alepha";
5
4
  import { $command } from "alepha/command";
6
5
  import { $logger } from "alepha/logger";
7
6
  import {
@@ -15,15 +14,17 @@ import {
15
14
  generateVercel,
16
15
  prerenderPages,
17
16
  } from "alepha/vite";
18
- import type * as Vite from "vite";
17
+ import { buildOptions } from "../atoms/buildOptions.ts";
19
18
  import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
20
19
 
21
20
  export class BuildCommand {
22
21
  protected readonly log = $logger();
23
22
  protected readonly utils = $inject(AlephaCliUtils);
23
+ protected readonly options = $use(buildOptions);
24
24
 
25
25
  public readonly build = $command({
26
26
  name: "build",
27
+ mode: "production",
27
28
  description: "Build the project for production",
28
29
  args: t.optional(
29
30
  t.text({ title: "path", description: "Filepath to build" }),
@@ -61,13 +62,11 @@ export class BuildCommand {
61
62
  process.env.NODE_ENV = "production";
62
63
 
63
64
  if (await this.utils.hasExpo(root)) {
64
- // will coming soon
65
- // 1. ensure "expo prebuild" is run
65
+ // will come soon
66
66
  return;
67
67
  }
68
68
 
69
69
  await this.utils.ensureConfig(root, {
70
- viteConfigTs: true,
71
70
  tsconfigJson: true,
72
71
  });
73
72
 
@@ -77,25 +76,13 @@ export class BuildCommand {
77
76
  const distDir = "dist";
78
77
  const clientDir = "public";
79
78
 
80
- await this.utils.ensureDependency(root, "vite", {
81
- run,
82
- });
83
-
84
- await run.rm("dist", {
85
- alias: "clean dist",
86
- });
87
-
88
- const vite: typeof Vite = createRequire(import.meta.url)("vite");
89
- const config = await vite.resolveConfig({}, "build", "production");
90
- const alephaPlugin: any = config.plugins.find(
91
- (it) => it.name === "alepha:build",
92
- );
93
- const viteAlephaBuildOptions = alephaPlugin?.[OPTIONS] || {};
79
+ await this.utils.ensureDependency(root, "vite", { run });
80
+ await run.rm("dist", { alias: "clean dist" });
94
81
 
82
+ const options = this.options;
95
83
  await this.utils.loadEnv(root, [".env", ".env.production"]);
96
84
 
97
- const stats = flags.stats ?? viteAlephaBuildOptions.stats ?? false;
98
- const hasServer = viteAlephaBuildOptions.serverEntry !== false;
85
+ const stats = flags.stats ?? options.stats ?? false;
99
86
 
100
87
  let hasClient = false;
101
88
  try {
@@ -105,13 +92,7 @@ export class BuildCommand {
105
92
  // No index.html
106
93
  }
107
94
 
108
- // Extract client options
109
- const clientOptions =
110
- typeof viteAlephaBuildOptions.client === "object"
111
- ? viteAlephaBuildOptions.client
112
- : {};
113
-
114
- // Build client
95
+ // Build client (precompress always enabled)
115
96
  if (hasClient) {
116
97
  await run({
117
98
  name: "vite build client",
@@ -120,7 +101,7 @@ export class BuildCommand {
120
101
  silent: true,
121
102
  dist: `${distDir}/${clientDir}`,
122
103
  stats,
123
- precompress: clientOptions.precompress,
104
+ precompress: true,
124
105
  }),
125
106
  });
126
107
  }
@@ -129,7 +110,6 @@ export class BuildCommand {
129
110
  await run({
130
111
  name: "vite build server",
131
112
  handler: async () => {
132
- // Check if client template exists
133
113
  let clientBuilt = false;
134
114
  try {
135
115
  await readFile(`${distDir}/${clientDir}/index.html`, "utf-8");
@@ -147,7 +127,7 @@ export class BuildCommand {
147
127
  });
148
128
 
149
129
  // Server will handle index.html if both client & server are built
150
- if (clientBuilt && hasServer) {
130
+ if (clientBuilt) {
151
131
  await unlink(`${distDir}/${clientDir}/index.html`);
152
132
  }
153
133
  },
@@ -163,9 +143,8 @@ export class BuildCommand {
163
143
 
164
144
  if (hasClient) {
165
145
  // Generate sitemap
166
- const sitemapBaseUrl = flags.sitemap ?? clientOptions.sitemap?.hostname;
167
-
168
- if (sitemapBaseUrl) {
146
+ const sitemapHostname = flags.sitemap ?? options.sitemap?.hostname;
147
+ if (sitemapHostname) {
169
148
  await run({
170
149
  name: "add sitemap",
171
150
  handler: async () => {
@@ -173,73 +152,57 @@ export class BuildCommand {
173
152
  `${distDir}/${clientDir}/sitemap.xml`,
174
153
  await generateSitemap({
175
154
  entry: `${distDir}/index.js`,
176
- baseUrl: sitemapBaseUrl,
155
+ baseUrl: sitemapHostname,
177
156
  }),
178
157
  );
179
158
  },
180
159
  });
181
160
  }
182
161
 
183
- // Pre-render static pages
184
- const shouldPrerender = clientOptions.prerender;
185
-
186
- if (shouldPrerender) {
187
- await run({
188
- name: "pre-render pages",
189
- handler: async () => {
190
- await prerenderPages({
191
- dist: `${distDir}/${clientDir}`,
192
- entry: `${distDir}/index.js`,
193
- compress: clientOptions.precompress,
194
- });
195
- },
196
- });
197
- }
162
+ // Pre-render static pages (always enabled)
163
+ await run({
164
+ name: "pre-render pages",
165
+ handler: async () => {
166
+ await prerenderPages({
167
+ dist: `${distDir}/${clientDir}`,
168
+ entry: `${distDir}/index.js`,
169
+ compress: true,
170
+ });
171
+ },
172
+ });
198
173
  }
199
174
 
200
175
  // Generate deployment configurations
201
- if (flags.vercel || viteAlephaBuildOptions.vercel) {
202
- const config =
203
- typeof viteAlephaBuildOptions.vercel === "object"
204
- ? viteAlephaBuildOptions.vercel
205
- : {};
176
+ if (flags.vercel || options.vercel) {
206
177
  await run({
207
178
  name: "add Vercel config",
208
179
  handler: () =>
209
180
  generateVercel({
210
181
  distDir,
211
182
  clientDir,
212
- config,
183
+ config: options.vercel,
213
184
  }),
214
185
  });
215
186
  }
216
187
 
217
- if (flags.cloudflare || viteAlephaBuildOptions.cloudflare) {
218
- const config =
219
- typeof viteAlephaBuildOptions.cloudflare === "boolean"
220
- ? {}
221
- : viteAlephaBuildOptions.cloudflare;
188
+ if (flags.cloudflare || options.cloudflare) {
222
189
  await run({
223
190
  name: "add Cloudflare config",
224
191
  handler: () =>
225
192
  generateCloudflare({
226
193
  distDir,
227
- config,
194
+ config: options.cloudflare?.config,
228
195
  }),
229
196
  });
230
197
  }
231
198
 
232
- if (flags.docker || viteAlephaBuildOptions.docker) {
233
- const dockerConfig =
234
- typeof viteAlephaBuildOptions.docker === "object"
235
- ? viteAlephaBuildOptions.docker
236
- : {};
199
+ if (flags.docker || options.docker) {
237
200
  await run({
238
201
  name: "add Docker config",
239
202
  handler: () =>
240
203
  generateDocker({
241
204
  distDir,
242
- ...dockerConfig,
205
+ ...options.docker,
243
206
  }),
244
207
  });
245
208
  }
@@ -134,7 +134,6 @@ export class DbCommand {
134
134
  protected readonly generate = $command({
135
135
  name: "generate",
136
136
  description: "Generate migration files based on current database schema",
137
- summary: false,
138
137
  args: t.optional(
139
138
  t.text({
140
139
  title: "path",
@@ -173,7 +172,6 @@ export class DbCommand {
173
172
  protected readonly push = $command({
174
173
  name: "push",
175
174
  description: "Push database schema changes directly to the database",
176
- summary: false,
177
175
  args: t.optional(
178
176
  t.text({
179
177
  title: "path",
@@ -200,7 +198,6 @@ export class DbCommand {
200
198
  protected readonly migrate = $command({
201
199
  name: "migrate",
202
200
  description: "Apply pending database migrations",
203
- summary: false,
204
201
  args: t.optional(
205
202
  t.text({
206
203
  title: "path",
@@ -227,7 +224,6 @@ export class DbCommand {
227
224
  protected readonly studio = $command({
228
225
  name: "studio",
229
226
  description: "Launch Drizzle Studio database browser",
230
- summary: false,
231
227
  args: t.optional(
232
228
  t.text({
233
229
  title: "path",
@@ -1,14 +1,15 @@
1
1
  import { access } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
- import { $inject, t } from "alepha";
3
+ import { $inject, Alepha, t } from "alepha";
4
4
  import { $command } from "alepha/command";
5
5
  import { $logger } from "alepha/logger";
6
- import { boot } from "alepha/vite";
6
+ import { boot, devServer } from "alepha/vite";
7
7
  import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
8
8
 
9
9
  export class DevCommand {
10
10
  protected readonly log = $logger();
11
11
  protected readonly utils = $inject(AlephaCliUtils);
12
+ protected readonly alepha = $inject(Alepha);
12
13
 
13
14
  /**
14
15
  * Will run the project in watch mode.
@@ -24,7 +25,6 @@ export class DevCommand {
24
25
  const expo = await this.utils.hasExpo(root);
25
26
 
26
27
  await this.utils.ensureConfig(root, {
27
- viteConfigTs: !expo,
28
28
  tsconfigJson: true,
29
29
  });
30
30
 
@@ -36,22 +36,46 @@ export class DevCommand {
36
36
  const entry = await boot.getServerEntry(root, args);
37
37
  this.log.trace("Entry file found", { entry });
38
38
 
39
- try {
40
- await access(join(root, "index.html"));
41
- } catch {
42
- this.log.trace("No index.html found, running entry file with tsx");
43
- let cmd = "tsx --watch";
39
+ const isFullstack = await this.isFullstackProject(root);
40
+
41
+ if (!isFullstack) {
42
+ const exe = (await this.isBunProject(root)) ? "bun" : "tsx";
43
+ let cmd = `${exe} --watch`;
44
44
  if (await this.utils.exists(root, ".env")) {
45
45
  cmd += " --env-file=./.env";
46
46
  }
47
47
  cmd += ` ${entry}`;
48
- await this.utils.exec(cmd);
48
+ await this.utils.exec(cmd, {
49
+ global: exe === "bun",
50
+ });
49
51
  return;
50
52
  }
51
53
 
52
54
  // Ensure vite is installed before running
53
55
  await this.utils.ensureDependency(root, "vite");
54
- await this.utils.exec("vite");
56
+
57
+ await devServer();
55
58
  },
56
59
  });
60
+
61
+ protected async isBunProject(root: string): Promise<boolean> {
62
+ if (this.alepha.isBun()) {
63
+ return true;
64
+ }
65
+ try {
66
+ await access(join(root, "bun.lock"));
67
+ return true;
68
+ } catch {
69
+ return false;
70
+ }
71
+ }
72
+
73
+ protected async isFullstackProject(root: string): Promise<boolean> {
74
+ try {
75
+ await access(join(root, "index.html"));
76
+ return true;
77
+ } catch {
78
+ return false;
79
+ }
80
+ }
57
81
  }