alepha 0.14.1 → 0.14.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/README.md +3 -3
  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 +784 -784
  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 +57 -57
  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 +165 -165
  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 +583 -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 +281 -276
  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 +778 -764
  35. package/dist/api/users/index.d.ts.map +1 -1
  36. package/dist/api/users/index.js +831 -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 +125 -125
  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/batch/index.js.map +1 -1
  45. package/dist/bin/index.d.ts +1 -2
  46. package/dist/bin/index.js +0 -1
  47. package/dist/bin/index.js.map +1 -1
  48. package/dist/cache/core/index.js.map +1 -1
  49. package/dist/cli/index.d.ts +249 -218
  50. package/dist/cli/index.d.ts.map +1 -1
  51. package/dist/cli/index.js +951 -821
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/command/index.d.ts +40 -0
  54. package/dist/command/index.d.ts.map +1 -1
  55. package/dist/command/index.js +97 -17
  56. package/dist/command/index.js.map +1 -1
  57. package/dist/core/index.browser.js +14 -18
  58. package/dist/core/index.browser.js.map +1 -1
  59. package/dist/core/index.d.ts +29 -0
  60. package/dist/core/index.d.ts.map +1 -1
  61. package/dist/core/index.js +21 -24
  62. package/dist/core/index.js.map +1 -1
  63. package/dist/core/index.native.js +21 -24
  64. package/dist/core/index.native.js.map +1 -1
  65. package/dist/datetime/index.js.map +1 -1
  66. package/dist/fake/index.js +195 -168
  67. package/dist/fake/index.js.map +1 -1
  68. package/dist/file/index.d.ts +8 -0
  69. package/dist/file/index.d.ts.map +1 -1
  70. package/dist/file/index.js +3 -0
  71. package/dist/file/index.js.map +1 -1
  72. package/dist/lock/redis/index.js.map +1 -1
  73. package/dist/logger/index.js.map +1 -1
  74. package/dist/mcp/index.d.ts.map +1 -1
  75. package/dist/mcp/index.js.map +1 -1
  76. package/dist/orm/index.browser.js +26 -5
  77. package/dist/orm/index.browser.js.map +1 -1
  78. package/dist/orm/index.d.ts +146 -121
  79. package/dist/orm/index.d.ts.map +1 -1
  80. package/dist/orm/index.js +49 -24
  81. package/dist/orm/index.js.map +1 -1
  82. package/dist/redis/index.js.map +1 -1
  83. package/dist/retry/index.js.map +1 -1
  84. package/dist/router/index.js.map +1 -1
  85. package/dist/scheduler/index.d.ts +6 -6
  86. package/dist/scheduler/index.js.map +1 -1
  87. package/dist/security/index.d.ts +29 -29
  88. package/dist/security/index.d.ts.map +1 -1
  89. package/dist/security/index.js +1 -1
  90. package/dist/security/index.js.map +1 -1
  91. package/dist/server/auth/index.d.ts +171 -155
  92. package/dist/server/auth/index.d.ts.map +1 -1
  93. package/dist/server/auth/index.js +0 -1
  94. package/dist/server/auth/index.js.map +1 -1
  95. package/dist/server/cache/index.js.map +1 -1
  96. package/dist/server/compress/index.d.ts.map +1 -1
  97. package/dist/server/compress/index.js +2 -0
  98. package/dist/server/compress/index.js.map +1 -1
  99. package/dist/server/cookies/index.browser.js.map +1 -1
  100. package/dist/server/cookies/index.js.map +1 -1
  101. package/dist/server/core/index.browser.js.map +1 -1
  102. package/dist/server/core/index.d.ts.map +1 -1
  103. package/dist/server/core/index.js +1 -1
  104. package/dist/server/core/index.js.map +1 -1
  105. package/dist/server/health/index.d.ts +17 -17
  106. package/dist/server/helmet/index.js.map +1 -1
  107. package/dist/server/links/index.browser.js +22 -6
  108. package/dist/server/links/index.browser.js.map +1 -1
  109. package/dist/server/links/index.d.ts +46 -44
  110. package/dist/server/links/index.d.ts.map +1 -1
  111. package/dist/server/links/index.js +24 -41
  112. package/dist/server/links/index.js.map +1 -1
  113. package/dist/server/multipart/index.js.map +1 -1
  114. package/dist/server/rate-limit/index.js.map +1 -1
  115. package/dist/server/security/index.js.map +1 -1
  116. package/dist/server/swagger/index.d.ts +2 -1
  117. package/dist/server/swagger/index.d.ts.map +1 -1
  118. package/dist/server/swagger/index.js +8 -3
  119. package/dist/server/swagger/index.js.map +1 -1
  120. package/dist/thread/index.js.map +1 -1
  121. package/dist/topic/core/index.js.map +1 -1
  122. package/dist/vite/index.d.ts.map +1 -1
  123. package/dist/vite/index.js +12 -4
  124. package/dist/vite/index.js.map +1 -1
  125. package/dist/websocket/index.browser.js.map +1 -1
  126. package/dist/websocket/index.js.map +1 -1
  127. package/package.json +7 -7
  128. package/src/api/audits/controllers/{AuditController.ts → AdminAuditController.ts} +5 -6
  129. package/src/api/audits/entities/audits.ts +5 -5
  130. package/src/api/audits/index.browser.ts +1 -1
  131. package/src/api/audits/index.ts +3 -3
  132. package/src/api/audits/primitives/$audit.spec.ts +276 -0
  133. package/src/api/audits/services/AuditService.spec.ts +495 -0
  134. package/src/api/files/__tests__/$bucket.spec.ts +91 -0
  135. package/src/api/files/controllers/AdminFileStatsController.spec.ts +166 -0
  136. package/src/api/files/controllers/{StorageStatsController.ts → AdminFileStatsController.ts} +2 -2
  137. package/src/api/files/controllers/FileController.spec.ts +558 -0
  138. package/src/api/files/controllers/FileController.ts +4 -5
  139. package/src/api/files/entities/files.ts +5 -5
  140. package/src/api/files/index.browser.ts +1 -1
  141. package/src/api/files/index.ts +4 -4
  142. package/src/api/files/jobs/FileJobs.spec.ts +52 -0
  143. package/src/api/files/services/FileService.spec.ts +109 -0
  144. package/src/api/jobs/__tests__/JobController.spec.ts +343 -0
  145. package/src/api/jobs/controllers/{JobController.ts → AdminJobController.ts} +2 -2
  146. package/src/api/jobs/entities/jobExecutions.ts +5 -5
  147. package/src/api/jobs/index.ts +3 -3
  148. package/src/api/jobs/primitives/$job.spec.ts +476 -0
  149. package/src/api/notifications/controllers/{NotificationController.ts → AdminNotificationController.ts} +4 -5
  150. package/src/api/notifications/entities/notifications.ts +5 -5
  151. package/src/api/notifications/index.browser.ts +1 -1
  152. package/src/api/notifications/index.ts +4 -4
  153. package/src/api/parameters/controllers/{ConfigController.ts → AdminConfigController.ts} +46 -107
  154. package/src/api/parameters/entities/parameters.ts +7 -17
  155. package/src/api/parameters/index.ts +3 -3
  156. package/src/api/parameters/primitives/$config.spec.ts +356 -0
  157. package/src/api/parameters/schemas/activateConfigBodySchema.ts +12 -0
  158. package/src/api/parameters/schemas/checkScheduledResponseSchema.ts +8 -0
  159. package/src/api/parameters/schemas/configCurrentResponseSchema.ts +13 -0
  160. package/src/api/parameters/schemas/configHistoryResponseSchema.ts +9 -0
  161. package/src/api/parameters/schemas/configNameParamSchema.ts +10 -0
  162. package/src/api/parameters/schemas/configNamesResponseSchema.ts +8 -0
  163. package/src/api/parameters/schemas/configTreeNodeSchema.ts +13 -0
  164. package/src/api/parameters/schemas/configVersionParamSchema.ts +9 -0
  165. package/src/api/parameters/schemas/configVersionResponseSchema.ts +9 -0
  166. package/src/api/parameters/schemas/configsByStatusResponseSchema.ts +9 -0
  167. package/src/api/parameters/schemas/createConfigVersionBodySchema.ts +24 -0
  168. package/src/api/parameters/schemas/index.ts +15 -0
  169. package/src/api/parameters/schemas/parameterResponseSchema.ts +26 -0
  170. package/src/api/parameters/schemas/parameterStatusSchema.ts +13 -0
  171. package/src/api/parameters/schemas/rollbackConfigBodySchema.ts +15 -0
  172. package/src/api/parameters/schemas/statusParamSchema.ts +9 -0
  173. package/src/api/users/__tests__/EmailVerification.spec.ts +369 -0
  174. package/src/api/users/__tests__/PasswordReset.spec.ts +550 -0
  175. package/src/api/users/controllers/AdminIdentityController.spec.ts +365 -0
  176. package/src/api/users/controllers/{IdentityController.ts → AdminIdentityController.ts} +3 -4
  177. package/src/api/users/controllers/AdminSessionController.spec.ts +274 -0
  178. package/src/api/users/controllers/{SessionController.ts → AdminSessionController.ts} +3 -4
  179. package/src/api/users/controllers/AdminUserController.spec.ts +372 -0
  180. package/src/api/users/controllers/AdminUserController.ts +116 -0
  181. package/src/api/users/controllers/UserController.ts +4 -107
  182. package/src/api/users/controllers/UserRealmController.ts +3 -0
  183. package/src/api/users/entities/identities.ts +6 -6
  184. package/src/api/users/entities/sessions.ts +6 -6
  185. package/src/api/users/entities/users.ts +9 -9
  186. package/src/api/users/index.ts +13 -6
  187. package/src/api/users/primitives/$userRealm.ts +13 -8
  188. package/src/api/users/services/CredentialService.spec.ts +509 -0
  189. package/src/api/users/services/CredentialService.ts +46 -0
  190. package/src/api/users/services/IdentityService.ts +15 -0
  191. package/src/api/users/services/RegistrationService.spec.ts +630 -0
  192. package/src/api/users/services/RegistrationService.ts +18 -0
  193. package/src/api/users/services/SessionService.spec.ts +301 -0
  194. package/src/api/users/services/SessionService.ts +110 -1
  195. package/src/api/users/services/UserService.ts +67 -2
  196. package/src/api/verifications/__tests__/CodeVerification.spec.ts +318 -0
  197. package/src/api/verifications/__tests__/LinkVerification.spec.ts +279 -0
  198. package/src/api/verifications/entities/verifications.ts +6 -6
  199. package/src/api/verifications/jobs/VerificationJobs.spec.ts +50 -0
  200. package/src/batch/__tests__/startup-buffering.spec.ts +458 -0
  201. package/src/batch/primitives/$batch.spec.ts +766 -0
  202. package/src/batch/providers/BatchProvider.spec.ts +786 -0
  203. package/src/bin/index.ts +0 -1
  204. package/src/bucket/__tests__/shared.ts +194 -0
  205. package/src/bucket/primitives/$bucket.spec.ts +104 -0
  206. package/src/bucket/providers/FileStorageProvider.spec.ts +13 -0
  207. package/src/bucket/providers/LocalFileStorageProvider.spec.ts +77 -0
  208. package/src/bucket/providers/MemoryFileStorageProvider.spec.ts +82 -0
  209. package/src/cache/core/__tests__/shared.ts +377 -0
  210. package/src/cache/core/primitives/$cache.spec.ts +111 -0
  211. package/src/cache/redis/__tests__/cache-redis.spec.ts +70 -0
  212. package/src/cli/apps/AlephaCli.ts +54 -16
  213. package/src/cli/apps/AlephaPackageBuilderCli.ts +2 -1
  214. package/src/cli/assets/appRouterTs.ts +1 -1
  215. package/src/cli/commands/{ViteCommands.ts → build.ts} +2 -105
  216. package/src/cli/commands/clean.ts +14 -0
  217. package/src/cli/commands/{DrizzleCommands.ts → db.ts} +10 -117
  218. package/src/cli/commands/{DeployCommands.ts → deploy.ts} +1 -1
  219. package/src/cli/commands/dev.ts +69 -0
  220. package/src/cli/commands/format.ts +17 -0
  221. package/src/cli/commands/gen/changelog.spec.ts +315 -0
  222. package/src/cli/commands/{ChangelogCommands.ts → gen/changelog.ts} +16 -31
  223. package/src/cli/commands/gen/openapi.ts +71 -0
  224. package/src/cli/commands/gen.ts +18 -0
  225. package/src/cli/commands/{CoreCommands.ts → init.ts} +4 -40
  226. package/src/cli/commands/lint.ts +17 -0
  227. package/src/cli/commands/root.ts +41 -0
  228. package/src/cli/commands/run.ts +24 -0
  229. package/src/cli/commands/test.ts +42 -0
  230. package/src/cli/commands/typecheck.ts +24 -0
  231. package/src/cli/commands/{VerifyCommands.ts → verify.ts} +1 -13
  232. package/src/cli/defineConfig.ts +10 -1
  233. package/src/cli/index.ts +17 -7
  234. package/src/cli/services/AlephaCliUtils.ts +71 -32
  235. package/src/cli/services/GitMessageParser.ts +1 -1
  236. package/src/command/helpers/Asker.spec.ts +127 -0
  237. package/src/command/helpers/Runner.spec.ts +126 -0
  238. package/src/command/primitives/$command.spec.ts +1588 -0
  239. package/src/command/providers/CliProvider.ts +74 -24
  240. package/src/core/Alepha.ts +52 -4
  241. package/src/core/__tests__/Alepha-emit.spec.ts +22 -0
  242. package/src/core/__tests__/Alepha-graph.spec.ts +93 -0
  243. package/src/core/__tests__/Alepha-has.spec.ts +41 -0
  244. package/src/core/__tests__/Alepha-inject.spec.ts +93 -0
  245. package/src/core/__tests__/Alepha-register.spec.ts +81 -0
  246. package/src/core/__tests__/Alepha-start.spec.ts +176 -0
  247. package/src/core/__tests__/Alepha-with.spec.ts +14 -0
  248. package/src/core/__tests__/TypeBox-usecases.spec.ts +35 -0
  249. package/src/core/__tests__/TypeBoxLocale.spec.ts +15 -0
  250. package/src/core/__tests__/descriptor.spec.ts +34 -0
  251. package/src/core/__tests__/fixtures/A.ts +5 -0
  252. package/src/core/__tests__/pagination.spec.ts +77 -0
  253. package/src/core/helpers/jsonSchemaToTypeBox.ts +2 -2
  254. package/src/core/primitives/$atom.spec.ts +43 -0
  255. package/src/core/primitives/$hook.spec.ts +130 -0
  256. package/src/core/primitives/$inject.spec.ts +175 -0
  257. package/src/core/primitives/$module.spec.ts +115 -0
  258. package/src/core/providers/CodecManager.spec.ts +740 -0
  259. package/src/core/providers/EventManager.spec.ts +762 -0
  260. package/src/core/providers/EventManager.ts +4 -0
  261. package/src/core/providers/StateManager.spec.ts +365 -0
  262. package/src/core/providers/TypeProvider.spec.ts +1607 -0
  263. package/src/core/providers/TypeProvider.ts +20 -26
  264. package/src/datetime/primitives/$interval.spec.ts +103 -0
  265. package/src/datetime/providers/DateTimeProvider.spec.ts +86 -0
  266. package/src/email/primitives/$email.spec.ts +175 -0
  267. package/src/email/providers/LocalEmailProvider.spec.ts +341 -0
  268. package/src/fake/__tests__/keyName.example.ts +40 -0
  269. package/src/fake/__tests__/keyName.spec.ts +152 -0
  270. package/src/fake/__tests__/module.example.ts +32 -0
  271. package/src/fake/providers/FakeProvider.spec.ts +438 -0
  272. package/src/file/providers/FileSystemProvider.ts +8 -0
  273. package/src/file/providers/NodeFileSystemProvider.spec.ts +418 -0
  274. package/src/file/providers/NodeFileSystemProvider.ts +5 -0
  275. package/src/file/services/FileDetector.spec.ts +591 -0
  276. package/src/lock/core/__tests__/shared.ts +190 -0
  277. package/src/lock/core/providers/MemoryLockProvider.spec.ts +25 -0
  278. package/src/lock/redis/providers/RedisLockProvider.spec.ts +25 -0
  279. package/src/logger/__tests__/SimpleFormatterProvider.spec.ts +109 -0
  280. package/src/logger/primitives/$logger.spec.ts +108 -0
  281. package/src/logger/services/Logger.spec.ts +295 -0
  282. package/src/mcp/__tests__/errors.spec.ts +175 -0
  283. package/src/mcp/__tests__/integration.spec.ts +450 -0
  284. package/src/mcp/helpers/jsonrpc.spec.ts +380 -0
  285. package/src/mcp/primitives/$prompt.spec.ts +468 -0
  286. package/src/mcp/primitives/$resource.spec.ts +390 -0
  287. package/src/mcp/primitives/$tool.spec.ts +406 -0
  288. package/src/mcp/providers/McpServerProvider.spec.ts +797 -0
  289. package/src/orm/__tests__/$repository-crud.spec.ts +276 -0
  290. package/src/orm/__tests__/$repository-hooks.spec.ts +325 -0
  291. package/src/orm/__tests__/$repository-orderBy.spec.ts +128 -0
  292. package/src/orm/__tests__/$repository-pagination-sort.spec.ts +149 -0
  293. package/src/orm/__tests__/$repository-save.spec.ts +37 -0
  294. package/src/orm/__tests__/ModelBuilder-integration.spec.ts +490 -0
  295. package/src/orm/__tests__/ModelBuilder-types.spec.ts +186 -0
  296. package/src/orm/__tests__/PostgresProvider.spec.ts +46 -0
  297. package/src/orm/__tests__/delete-returning.spec.ts +256 -0
  298. package/src/orm/__tests__/deletedAt.spec.ts +80 -0
  299. package/src/orm/__tests__/enums.spec.ts +315 -0
  300. package/src/orm/__tests__/execute.spec.ts +72 -0
  301. package/src/orm/__tests__/fixtures/bigEntitySchema.ts +65 -0
  302. package/src/orm/__tests__/fixtures/userEntitySchema.ts +27 -0
  303. package/src/orm/__tests__/joins.spec.ts +1114 -0
  304. package/src/orm/__tests__/page.spec.ts +287 -0
  305. package/src/orm/__tests__/primaryKey.spec.ts +87 -0
  306. package/src/orm/__tests__/query-date-encoding.spec.ts +402 -0
  307. package/src/orm/__tests__/ref-auto-onDelete.spec.ts +156 -0
  308. package/src/orm/__tests__/references.spec.ts +102 -0
  309. package/src/orm/__tests__/security.spec.ts +710 -0
  310. package/src/orm/__tests__/sqlite.spec.ts +111 -0
  311. package/src/orm/__tests__/string-operators.spec.ts +429 -0
  312. package/src/orm/__tests__/timestamps.spec.ts +388 -0
  313. package/src/orm/__tests__/validation.spec.ts +183 -0
  314. package/src/orm/__tests__/version.spec.ts +64 -0
  315. package/src/orm/helpers/parseQueryString.spec.ts +196 -0
  316. package/src/orm/index.browser.ts +1 -1
  317. package/src/orm/index.ts +10 -6
  318. package/src/orm/primitives/$repository.spec.ts +137 -0
  319. package/src/orm/primitives/$sequence.spec.ts +29 -0
  320. package/src/orm/primitives/$transaction.spec.ts +82 -0
  321. package/src/orm/providers/{PostgresTypeProvider.ts → DatabaseTypeProvider.ts} +25 -3
  322. package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -3
  323. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
  324. package/src/orm/providers/drivers/CloudflareD1Provider.ts +1 -1
  325. package/src/orm/providers/drivers/DatabaseProvider.ts +1 -1
  326. package/src/orm/providers/drivers/NodePostgresProvider.ts +3 -3
  327. package/src/orm/providers/drivers/NodeSqliteProvider.ts +1 -1
  328. package/src/orm/providers/drivers/PglitePostgresProvider.ts +2 -2
  329. package/src/orm/services/ModelBuilder.spec.ts +575 -0
  330. package/src/orm/services/Repository.spec.ts +137 -0
  331. package/src/queue/core/__tests__/shared.ts +143 -0
  332. package/src/queue/core/providers/MemoryQueueProvider.spec.ts +23 -0
  333. package/src/queue/core/providers/WorkerProvider.spec.ts +378 -0
  334. package/src/queue/redis/providers/RedisQueueProvider.spec.ts +23 -0
  335. package/src/redis/__tests__/redis.spec.ts +58 -0
  336. package/src/retry/primitives/$retry.spec.ts +234 -0
  337. package/src/retry/providers/RetryProvider.spec.ts +438 -0
  338. package/src/router/__tests__/match.spec.ts +252 -0
  339. package/src/router/providers/RouterProvider.spec.ts +197 -0
  340. package/src/scheduler/__tests__/$scheduler-cron.spec.ts +25 -0
  341. package/src/scheduler/__tests__/$scheduler-interval.spec.ts +25 -0
  342. package/src/scheduler/__tests__/shared.ts +77 -0
  343. package/src/security/__tests__/bug-1-wildcard-after-start.spec.ts +229 -0
  344. package/src/security/__tests__/bug-2-password-validation.spec.ts +245 -0
  345. package/src/security/__tests__/bug-3-regex-vulnerability.spec.ts +407 -0
  346. package/src/security/__tests__/bug-4-oauth2-validation.spec.ts +439 -0
  347. package/src/security/__tests__/multi-layer-permissions.spec.ts +522 -0
  348. package/src/security/primitives/$permission.spec.ts +30 -0
  349. package/src/security/primitives/$permission.ts +2 -2
  350. package/src/security/primitives/$realm.spec.ts +101 -0
  351. package/src/security/primitives/$role.spec.ts +52 -0
  352. package/src/security/primitives/$serviceAccount.spec.ts +61 -0
  353. package/src/security/providers/SecurityProvider.spec.ts +350 -0
  354. package/src/server/auth/providers/ServerAuthProvider.ts +0 -2
  355. package/src/server/cache/providers/ServerCacheProvider.spec.ts +942 -0
  356. package/src/server/compress/providers/ServerCompressProvider.spec.ts +31 -0
  357. package/src/server/compress/providers/ServerCompressProvider.ts +2 -0
  358. package/src/server/cookies/providers/ServerCookiesProvider.spec.ts +253 -0
  359. package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +334 -0
  360. package/src/server/core/__tests__/ServerRouterProvider-requestId.spec.ts +129 -0
  361. package/src/server/core/primitives/$action.spec.ts +191 -0
  362. package/src/server/core/primitives/$route.spec.ts +65 -0
  363. package/src/server/core/providers/ServerBodyParserProvider.spec.ts +93 -0
  364. package/src/server/core/providers/ServerLoggerProvider.spec.ts +100 -0
  365. package/src/server/core/providers/ServerProvider.ts +3 -1
  366. package/src/server/core/services/HttpClient.spec.ts +123 -0
  367. package/src/server/core/services/UserAgentParser.spec.ts +111 -0
  368. package/src/server/cors/providers/ServerCorsProvider.spec.ts +481 -0
  369. package/src/server/health/providers/ServerHealthProvider.spec.ts +22 -0
  370. package/src/server/helmet/providers/ServerHelmetProvider.spec.ts +105 -0
  371. package/src/server/links/__tests__/$action.spec.ts +238 -0
  372. package/src/server/links/__tests__/fixtures/CrudApp.ts +122 -0
  373. package/src/server/links/__tests__/requestId.spec.ts +120 -0
  374. package/src/server/links/primitives/$remote.spec.ts +228 -0
  375. package/src/server/links/providers/LinkProvider.spec.ts +54 -0
  376. package/src/server/links/providers/LinkProvider.ts +49 -3
  377. package/src/server/links/providers/ServerLinksProvider.ts +1 -53
  378. package/src/server/links/schemas/apiLinksResponseSchema.ts +7 -0
  379. package/src/server/metrics/providers/ServerMetricsProvider.spec.ts +25 -0
  380. package/src/server/multipart/providers/ServerMultipartProvider.spec.ts +528 -0
  381. package/src/server/proxy/primitives/$proxy.spec.ts +87 -0
  382. package/src/server/rate-limit/__tests__/ActionRateLimit.spec.ts +211 -0
  383. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +344 -0
  384. package/src/server/security/__tests__/BasicAuth.spec.ts +684 -0
  385. package/src/server/security/__tests__/ServerSecurityProvider-realm.spec.ts +388 -0
  386. package/src/server/security/providers/ServerSecurityProvider.spec.ts +123 -0
  387. package/src/server/static/primitives/$serve.spec.ts +193 -0
  388. package/src/server/swagger/__tests__/ui.spec.ts +52 -0
  389. package/src/server/swagger/primitives/$swagger.spec.ts +193 -0
  390. package/src/server/swagger/providers/ServerSwaggerProvider.ts +18 -8
  391. package/src/sms/primitives/$sms.spec.ts +165 -0
  392. package/src/sms/providers/LocalSmsProvider.spec.ts +224 -0
  393. package/src/sms/providers/MemorySmsProvider.spec.ts +193 -0
  394. package/src/thread/primitives/$thread.spec.ts +186 -0
  395. package/src/topic/core/__tests__/shared.ts +144 -0
  396. package/src/topic/core/providers/MemoryTopicProvider.spec.ts +23 -0
  397. package/src/topic/redis/providers/RedisTopicProvider.spec.ts +23 -0
  398. package/src/vite/plugins/viteAlephaDev.ts +16 -4
  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/commands/BiomeCommands.ts +0 -29
@@ -1,7 +1,7 @@
1
1
  import { access, readFile, unlink, writeFile } from "node:fs/promises";
2
2
  import { createRequire } from "node:module";
3
3
  import { join } from "node:path";
4
- import { $env, $inject, OPTIONS, t } from "alepha";
4
+ import { $inject, OPTIONS, t } from "alepha";
5
5
  import { $command } from "alepha/command";
6
6
  import { $logger } from "alepha/logger";
7
7
  import {
@@ -18,78 +18,10 @@ import {
18
18
  import type * as Vite from "vite";
19
19
  import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
20
20
 
21
- export class ViteCommands {
21
+ export class BuildCommand {
22
22
  protected readonly log = $logger();
23
23
  protected readonly utils = $inject(AlephaCliUtils);
24
24
 
25
- protected readonly env = $env(
26
- t.object({
27
- VITEST_ARGS: t.string({ default: "" }),
28
- }),
29
- );
30
-
31
- public readonly run = $command({
32
- name: "run",
33
- hide: true,
34
- description: "Run a TypeScript file directly",
35
- flags: t.object({
36
- watch: t.optional(
37
- t.boolean({ description: "Watch file for changes", alias: "w" }),
38
- ),
39
- }),
40
- summary: false,
41
- args: t.text({ title: "path", description: "Filepath to run" }),
42
- handler: async ({ args, flags, root }) => {
43
- await this.utils.ensureTsConfig(root);
44
- await this.utils.exec(`tsx ${flags.watch ? "watch " : ""}${args}`);
45
- },
46
- });
47
-
48
- /**
49
- * Will run the project in watch mode.
50
- *
51
- * - If an index.html file is found in the project root, it will run Vite in dev mode.
52
- * - Otherwise, it will look for a server entry file and run it with tsx in watch mode.
53
- */
54
- public readonly dev = $command({
55
- name: "dev",
56
- description: "Run the project in development mode",
57
- args: t.optional(t.text({ title: "path", description: "Filepath to run" })),
58
- handler: async ({ args, root }) => {
59
- const expo = await this.utils.hasExpo(root);
60
-
61
- await this.utils.ensureConfig(root, {
62
- viteConfigTs: !expo,
63
- tsconfigJson: true,
64
- });
65
-
66
- if (expo) {
67
- await this.utils.exec(`expo start`);
68
- return;
69
- }
70
-
71
- const entry = await boot.getServerEntry(root, args);
72
- this.log.trace("Entry file found", { entry });
73
-
74
- try {
75
- await access(join(root, "index.html"));
76
- } catch {
77
- this.log.trace("No index.html found, running entry file with tsx");
78
- let cmd = "tsx --watch";
79
- if (await this.utils.exists(root, ".env")) {
80
- cmd += ` --env-file=./.env`;
81
- }
82
- cmd += ` ${entry}`;
83
- await this.utils.exec(cmd);
84
- return;
85
- }
86
-
87
- // Ensure vite is installed before running
88
- await this.utils.ensureDependency(root, "vite");
89
- await this.utils.exec(`vite`);
90
- },
91
- });
92
-
93
25
  public readonly build = $command({
94
26
  name: "build",
95
27
  description: "Build the project for production",
@@ -313,39 +245,4 @@ export class ViteCommands {
313
245
  }
314
246
  },
315
247
  });
316
-
317
- public readonly test = $command({
318
- name: "test",
319
- description: "Run tests using Vitest",
320
- flags: t.object({
321
- config: t.optional(
322
- t.string({
323
- description: "Path to Vitest config file",
324
- alias: "c",
325
- }),
326
- ),
327
- }),
328
- env: t.object({
329
- VITEST_ARGS: t.optional(
330
- t.string({
331
- default: "",
332
- description:
333
- "Additional arguments to pass to Vitest. E.g., --coverage",
334
- }),
335
- ),
336
- }),
337
- handler: async ({ root, flags, env }) => {
338
- await this.utils.ensureConfig(root, {
339
- tsconfigJson: true,
340
- viteConfigTs: true,
341
- });
342
-
343
- // Ensure vitest is installed before running
344
- await this.utils.ensureDependency(root, "vitest");
345
-
346
- const config = flags.config ? `--config=${flags.config}` : "";
347
-
348
- await this.utils.exec(`vitest run ${config} ${env.VITEST_ARGS}`);
349
- },
350
- });
351
248
  }
@@ -0,0 +1,14 @@
1
+ import { $command } from "alepha/command";
2
+
3
+ export class CleanCommand {
4
+ /**
5
+ * Clean the project, removing the "dist" directory
6
+ */
7
+ public readonly clean = $command({
8
+ name: "clean",
9
+ description: "Clean the project",
10
+ handler: async ({ run }) => {
11
+ await run.rm("./dist");
12
+ },
13
+ });
14
+ }
@@ -25,14 +25,14 @@ const drizzleCommandFlags = t.object({
25
25
  ),
26
26
  });
27
27
 
28
- export class DrizzleCommands {
29
- log = $logger();
30
- utils = $inject(AlephaCliUtils);
28
+ export class DbCommand {
29
+ protected readonly log = $logger();
30
+ protected readonly utils = $inject(AlephaCliUtils);
31
31
 
32
32
  /**
33
33
  * Check if database migrations are up to date.
34
34
  */
35
- check = $command({
35
+ protected readonly check = $command({
36
36
  name: "check-migrations",
37
37
  description: "Check if database migration files are up to date",
38
38
  args: t.optional(
@@ -74,7 +74,7 @@ export class DrizzleCommands {
74
74
  ).catch(() => null);
75
75
 
76
76
  if (!journalFile) {
77
- this.log.info(`No migration journal found.`);
77
+ this.log.info("No migration journal found.");
78
78
  return;
79
79
  }
80
80
 
@@ -130,14 +130,8 @@ export class DrizzleCommands {
130
130
 
131
131
  /**
132
132
  * Generate database migration files
133
- *
134
- * - Loads the Alepha instance from the specified entry file.
135
- * - Retrieves all repository primitives to gather database models.
136
- * - Creates temporary entity definitions based on the current database schema.
137
- * - Writes these definitions to a temporary schema file. (node_modules/.db/entities.ts)
138
- * - Invokes Drizzle Kit's CLI to generate migration files based on the current schema.
139
133
  */
140
- generate = $command({
134
+ protected readonly generate = $command({
141
135
  name: "generate",
142
136
  description: "Generate migration files based on current database schema",
143
137
  summary: false,
@@ -175,13 +169,8 @@ export class DrizzleCommands {
175
169
 
176
170
  /**
177
171
  * Push database schema changes directly to the database
178
- *
179
- * - Loads the Alepha instance from the specified entry file.
180
- * - Retrieves all repository primitives to gather database models.
181
- * - Creates temporary entity definitions and Drizzle config.
182
- * - Invokes Drizzle Kit's push command to apply schema changes directly.
183
172
  */
184
- push = $command({
173
+ protected readonly push = $command({
185
174
  name: "push",
186
175
  description: "Push database schema changes directly to the database",
187
176
  summary: false,
@@ -207,13 +196,8 @@ export class DrizzleCommands {
207
196
 
208
197
  /**
209
198
  * Apply pending database migrations
210
- *
211
- * - Loads the Alepha instance from the specified entry file.
212
- * - Retrieves all repository primitives to gather database models.
213
- * - Creates temporary entity definitions and Drizzle config.
214
- * - Invokes Drizzle Kit's migrate command to apply pending migrations.
215
199
  */
216
- migrate = $command({
200
+ protected readonly migrate = $command({
217
201
  name: "migrate",
218
202
  description: "Apply pending database migrations",
219
203
  summary: false,
@@ -239,13 +223,8 @@ export class DrizzleCommands {
239
223
 
240
224
  /**
241
225
  * Launch Drizzle Studio database browser
242
- *
243
- * - Loads the Alepha instance from the specified entry file.
244
- * - Retrieves all repository primitives to gather database models.
245
- * - Creates temporary entity definitions and Drizzle config.
246
- * - Invokes Drizzle Kit's studio command to launch the web-based database browser.
247
226
  */
248
- studio = $command({
227
+ protected readonly studio = $command({
249
228
  name: "studio",
250
229
  description: "Launch Drizzle Studio database browser",
251
230
  summary: false,
@@ -272,7 +251,7 @@ export class DrizzleCommands {
272
251
  /**
273
252
  * Parent command for database operations.
274
253
  */
275
- db = $command({
254
+ public readonly db = $command({
276
255
  name: "db",
277
256
  description: "Database management commands",
278
257
  children: [this.check, this.generate, this.push, this.migrate, this.studio],
@@ -283,11 +262,6 @@ export class DrizzleCommands {
283
262
 
284
263
  /**
285
264
  * Run a drizzle-kit command for all database providers in an Alepha instance.
286
- *
287
- * Iterates through all repository providers, prepares Drizzle config for each,
288
- * and executes the specified drizzle-kit command.
289
- *
290
- * @param options - Configuration including command to run, flags, and logging
291
265
  */
292
266
  public async runDrizzleKitCommand(options: {
293
267
  root: string;
@@ -365,12 +339,6 @@ export class DrizzleCommands {
365
339
 
366
340
  /**
367
341
  * Prepare Drizzle configuration files for a database provider.
368
- *
369
- * Creates temporary entities.js and drizzle.config.js files needed
370
- * for Drizzle Kit commands to run properly.
371
- *
372
- * @param options - Configuration options including kit, provider info, and paths
373
- * @returns Path to the generated drizzle.config.js file
374
342
  */
375
343
  public async prepareDrizzleConfig(options: {
376
344
  kit: any;
@@ -473,79 +441,4 @@ export class DrizzleCommands {
473
441
  options.rootDir,
474
442
  );
475
443
  }
476
-
477
- // /**
478
- // * Drop database schema (development only)
479
- // *
480
- // * @experimental
481
- // */
482
- // drop = $command({
483
- // name: "db:drop",
484
- // description: "Drop database schema (development only)",
485
- // summary: false,
486
- // args: t.optional(
487
- // t.text({
488
- // title: "path",
489
- // description: "Path to the Alepha server entry file",
490
- // }),
491
- // ),
492
- // flags: drizzleCommandFlags,
493
- // handler: async ({ flags }) => {
494
- // // TODO: Implement db:drop
495
- // this.log.warn("db:drop is not yet implemented");
496
- // if (flags.provider) {
497
- // this.log.info(`Provider filter: ${flags.provider}`);
498
- // }
499
- // },
500
- // });
501
- //
502
- // /**
503
- // * Seed database with initial data
504
- // *
505
- // * @experimental
506
- // */
507
- // seed = $command({
508
- // name: "db:seed",
509
- // description: "Seed database with initial data",
510
- // summary: false,
511
- // args: t.optional(
512
- // t.text({
513
- // title: "path",
514
- // description: "Path to the Alepha server entry file",
515
- // }),
516
- // ),
517
- // flags: drizzleCommandFlags,
518
- // handler: async ({ flags }) => {
519
- // // TODO: Implement db:seed
520
- // this.log.warn("db:seed is not yet implemented");
521
- // if (flags.provider) {
522
- // this.log.info(`Provider filter: ${flags.provider}`);
523
- // }
524
- // },
525
- // });
526
- //
527
- // /**
528
- // * Show pending database migrations status
529
- // *
530
- // * @experimental
531
- // */
532
- // status = $command({
533
- // name: "db:status",
534
- // description: "Show pending database migrations status",
535
- // summary: false,
536
- // args: t.optional(
537
- // t.text({
538
- // title: "path",
539
- // description: "Path to the Alepha server entry file",
540
- // }),
541
- // ),
542
- // flags: drizzleCommandFlags,
543
- // handler: async ({ flags }) => {
544
- // // TODO: Implement db:status
545
- // this.log.warn("db:status is not yet implemented");
546
- // if (flags.provider) {
547
- // this.log.info(`Provider filter: ${flags.provider}`);
548
- // }
549
- // },
550
- // });
551
444
  }
@@ -4,7 +4,7 @@ import { $command } from "alepha/command";
4
4
  import { $logger } from "alepha/logger";
5
5
  import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
6
6
 
7
- export class DeployCommands {
7
+ export class DeployCommand {
8
8
  protected readonly log = $logger();
9
9
  protected readonly utils = $inject(AlephaCliUtils);
10
10
 
@@ -0,0 +1,69 @@
1
+ import { access } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { $inject, Alepha, t } from "alepha";
4
+ import { $command } from "alepha/command";
5
+ import { $logger } from "alepha/logger";
6
+ import { boot } from "alepha/vite";
7
+ import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
8
+
9
+ export class DevCommand {
10
+ protected readonly log = $logger();
11
+ protected readonly utils = $inject(AlephaCliUtils);
12
+ protected readonly alepha = $inject(Alepha);
13
+
14
+ /**
15
+ * Will run the project in watch mode.
16
+ *
17
+ * - If an index.html file is found in the project root, it will run Vite in dev mode.
18
+ * - Otherwise, it will look for a server entry file and run it with tsx in watch mode.
19
+ */
20
+ public readonly dev = $command({
21
+ name: "dev",
22
+ description: "Run the project in development mode",
23
+ args: t.optional(t.text({ title: "path", description: "Filepath to run" })),
24
+ handler: async ({ args, root }) => {
25
+ const expo = await this.utils.hasExpo(root);
26
+
27
+ await this.utils.ensureConfig(root, {
28
+ viteConfigTs: !expo,
29
+ tsconfigJson: true,
30
+ });
31
+
32
+ if (expo) {
33
+ await this.utils.exec("expo start");
34
+ return;
35
+ }
36
+
37
+ const entry = await boot.getServerEntry(root, args);
38
+ this.log.trace("Entry file found", { entry });
39
+
40
+ const isFullstack = await this.isFullstackProject(root);
41
+
42
+ if (!isFullstack) {
43
+ const exe = this.alepha.isBun() ? "bun" : "tsx";
44
+ let cmd = `${exe} --watch`;
45
+ if (await this.utils.exists(root, ".env")) {
46
+ cmd += " --env-file=./.env";
47
+ }
48
+ cmd += ` ${entry}`;
49
+ await this.utils.exec(cmd, {
50
+ global: exe === "bun",
51
+ });
52
+ return;
53
+ }
54
+
55
+ // Ensure vite is installed before running
56
+ await this.utils.ensureDependency(root, "vite");
57
+ await this.utils.exec("vite");
58
+ },
59
+ });
60
+
61
+ protected async isFullstackProject(root: string): Promise<boolean> {
62
+ try {
63
+ await access(join(root, "index.html"));
64
+ return true;
65
+ } catch {
66
+ return false;
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,17 @@
1
+ import { $inject } from "alepha";
2
+ import { $command } from "alepha/command";
3
+ import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
4
+
5
+ export class FormatCommand {
6
+ protected readonly utils = $inject(AlephaCliUtils);
7
+
8
+ public readonly format = $command({
9
+ name: "format",
10
+ description: "Format the codebase using Biome",
11
+ handler: async ({ root }) => {
12
+ await this.utils.ensureConfig(root, { biomeJson: true });
13
+ await this.utils.ensureDependency(root, "@biomejs/biome");
14
+ await this.utils.exec("biome format --fix");
15
+ },
16
+ });
17
+ }