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
@@ -0,0 +1,295 @@
1
+ import { Alepha } from "alepha";
2
+ import { describe, it } from "vitest";
3
+ import {
4
+ LogDestinationProvider,
5
+ LogFormatterProvider,
6
+ MemoryDestinationProvider,
7
+ PrettyFormatterProvider,
8
+ } from "../index.ts";
9
+ import { Logger } from "../services/Logger.ts";
10
+
11
+ describe("Logger", () => {
12
+ const createLogger = (service = "TestService", module = "test.module") => {
13
+ const alepha = Alepha.create({
14
+ env: { LOG_LEVEL: "info" },
15
+ })
16
+ .with({
17
+ provide: LogDestinationProvider,
18
+ use: MemoryDestinationProvider,
19
+ })
20
+ .with({
21
+ provide: LogFormatterProvider,
22
+ use: PrettyFormatterProvider,
23
+ });
24
+
25
+ return alepha.inject(Logger, {
26
+ lifetime: "transient",
27
+ args: [service, module],
28
+ });
29
+ };
30
+
31
+ describe("parseLevel", () => {
32
+ it("should return global level when no matching module found", ({
33
+ expect,
34
+ }) => {
35
+ const logger = createLogger();
36
+ // When no module-specific config matches, it falls back to global level
37
+ expect(logger.parseLevel("debug", "non.matching.module")).toBe("DEBUG");
38
+ expect(
39
+ logger.parseLevel("specific.module:trace,warn", "non.matching.module"),
40
+ ).toBe("WARN");
41
+ });
42
+
43
+ it("should parse simple global level", ({ expect }) => {
44
+ const logger = createLogger();
45
+ expect(logger.parseLevel("debug", "any.module")).toBe("DEBUG");
46
+ expect(logger.parseLevel("trace", "any.module")).toBe("TRACE");
47
+ expect(logger.parseLevel("warn", "any.module")).toBe("WARN");
48
+ expect(logger.parseLevel("error", "any.module")).toBe("ERROR");
49
+ expect(logger.parseLevel("silent", "any.module")).toBe("SILENT");
50
+ });
51
+
52
+ it("should parse module-specific level with colon separator", ({
53
+ expect,
54
+ }) => {
55
+ const logger = createLogger();
56
+ expect(logger.parseLevel("test:debug,info", "test.module")).toBe("DEBUG");
57
+ expect(logger.parseLevel("alepha:trace,warn", "alepha.core")).toBe(
58
+ "TRACE",
59
+ );
60
+ expect(logger.parseLevel("my.app:error,info", "my.app.service")).toBe(
61
+ "ERROR",
62
+ );
63
+ });
64
+
65
+ it("should parse module-specific level with equals separator", ({
66
+ expect,
67
+ }) => {
68
+ const logger = createLogger();
69
+ expect(logger.parseLevel("test=debug,info", "test.module")).toBe("DEBUG");
70
+ expect(logger.parseLevel("alepha=TRACE,warn", "alepha.core")).toBe(
71
+ "TRACE",
72
+ );
73
+ expect(logger.parseLevel("my.app=error,info", "my.app.service")).toBe(
74
+ "ERROR",
75
+ );
76
+ });
77
+
78
+ it("should handle multiple module configurations", ({ expect }) => {
79
+ const logger = createLogger();
80
+ const config = "alepha.core:trace,alepha.server:debug,my.app:error,info";
81
+
82
+ expect(logger.parseLevel(config, "alepha.core")).toBe("TRACE");
83
+ expect(logger.parseLevel(config, "alepha.server")).toBe("DEBUG");
84
+ expect(logger.parseLevel(config, "my.app")).toBe("ERROR");
85
+ expect(logger.parseLevel(config, "other.module")).toBe("INFO");
86
+ });
87
+
88
+ it("should handle semicolon separators", ({ expect }) => {
89
+ const logger = createLogger();
90
+ const config = "alepha:trace;my.app:error;info";
91
+
92
+ expect(logger.parseLevel(config, "alepha.core")).toBe("TRACE");
93
+ expect(logger.parseLevel(config, "my.app")).toBe("ERROR");
94
+ expect(logger.parseLevel(config, "other.module")).toBe("INFO");
95
+ });
96
+
97
+ it("should use startsWith matching for modules", ({ expect }) => {
98
+ const logger = createLogger();
99
+ const config = "alepha:debug,info";
100
+
101
+ expect(logger.parseLevel(config, "alepha")).toBe("DEBUG");
102
+ expect(logger.parseLevel(config, "alepha.core")).toBe("DEBUG");
103
+ expect(logger.parseLevel(config, "alepha.server.cache")).toBe("DEBUG");
104
+ expect(logger.parseLevel(config, "other.alepha")).toBe("INFO");
105
+ });
106
+
107
+ it("should prioritize first matching module", ({ expect }) => {
108
+ const logger = createLogger();
109
+ const config = "alepha:debug,alepha.core:trace,info";
110
+
111
+ // alepha.core matches both "alepha" and "alepha.core", but first match wins
112
+ expect(logger.parseLevel(config, "alepha.core")).toBe("DEBUG");
113
+ });
114
+
115
+ it("should handle case insensitive levels", ({ expect }) => {
116
+ const logger = createLogger();
117
+ expect(logger.parseLevel("DEBUG", "any.module")).toBe("DEBUG");
118
+ expect(logger.parseLevel("Test:TRACE,INFO", "test.module")).toBe("TRACE");
119
+ });
120
+
121
+ it("should handle whitespace around separators", ({ expect }) => {
122
+ const logger = createLogger();
123
+ const config = " alepha : debug , my.app : error , info ";
124
+
125
+ expect(logger.parseLevel(config, "alepha.core")).toBe("DEBUG");
126
+ expect(logger.parseLevel(config, "my.app")).toBe("ERROR");
127
+ expect(logger.parseLevel(config, "other")).toBe("INFO");
128
+ });
129
+
130
+ it("should fall back to global level when no module match", ({
131
+ expect,
132
+ }) => {
133
+ const logger = createLogger();
134
+ const config = "specific.module:debug,trace";
135
+
136
+ expect(logger.parseLevel(config, "other.module")).toBe("TRACE");
137
+ });
138
+
139
+ it("should handle empty parts gracefully", ({ expect }) => {
140
+ const logger = createLogger();
141
+ // Empty parts are now skipped gracefully
142
+ expect(logger.parseLevel(",,debug,,", "any.module")).toBe("DEBUG");
143
+ expect(logger.parseLevel("alepha:trace,,info", "alepha.core")).toBe(
144
+ "TRACE",
145
+ );
146
+ expect(logger.parseLevel("alepha:trace,,", "other.module")).toBe("INFO");
147
+ expect(logger.parseLevel(" , , debug , ", "any.module")).toBe(
148
+ "DEBUG",
149
+ );
150
+ });
151
+
152
+ it("should provide better error messages", ({ expect }) => {
153
+ const logger = createLogger();
154
+ expect(() =>
155
+ logger.parseLevel("alepha:invalid,info", "alepha.core"),
156
+ ).toThrow("Invalid log level 'invalid' for module pattern 'alepha'");
157
+ expect(() => logger.parseLevel("badlevel", "any.module")).toThrow(
158
+ 'Invalid global log level "badlevel"',
159
+ );
160
+ });
161
+
162
+ it("should support wildcard patterns", ({ expect }) => {
163
+ const logger = createLogger();
164
+
165
+ // Basic wildcard matching
166
+ expect(logger.parseLevel("alepha.*:debug,info", "alepha.core")).toBe(
167
+ "DEBUG",
168
+ );
169
+ expect(logger.parseLevel("alepha.*:debug,info", "alepha.server")).toBe(
170
+ "DEBUG",
171
+ );
172
+ expect(logger.parseLevel("alepha.*:debug,info", "other.module")).toBe(
173
+ "INFO",
174
+ );
175
+
176
+ // More specific patterns
177
+ expect(
178
+ logger.parseLevel("*.test:silent,*.core:trace,info", "alepha.test"),
179
+ ).toBe("SILENT");
180
+ expect(
181
+ logger.parseLevel("*.test:silent,*.core:trace,info", "my.core"),
182
+ ).toBe("TRACE");
183
+ expect(
184
+ logger.parseLevel("*.test:silent,*.core:trace,info", "other.module"),
185
+ ).toBe("INFO");
186
+
187
+ // Exact prefix match still works (existing behavior)
188
+ expect(logger.parseLevel("alepha.core:debug,info", "alepha.core")).toBe(
189
+ "DEBUG",
190
+ );
191
+ expect(
192
+ logger.parseLevel("alepha.core:debug,info", "alepha.core.service"),
193
+ ).toBe("DEBUG"); // startsWith behavior
194
+ });
195
+
196
+ it("should prioritize more specific wildcard matches", ({ expect }) => {
197
+ const logger = createLogger();
198
+ // First match wins, so order matters
199
+ const config = "alepha.*:debug,alepha.core.*:trace,info";
200
+ expect(logger.parseLevel(config, "alepha.core.service")).toBe("DEBUG"); // matches alepha.* first
201
+
202
+ // Reverse order
203
+ const config2 = "alepha.core.*:trace,alepha.*:debug,info";
204
+ expect(logger.parseLevel(config2, "alepha.core.service")).toBe("TRACE"); // matches alepha.core.* first
205
+ });
206
+ });
207
+
208
+ describe("asLogLevel", () => {
209
+ it("should return valid log levels", ({ expect }) => {
210
+ const logger = createLogger();
211
+ expect(logger.asLogLevel("trace")).toBe("TRACE");
212
+ expect(logger.asLogLevel("debug")).toBe("DEBUG");
213
+ expect(logger.asLogLevel("info")).toBe("INFO");
214
+ expect(logger.asLogLevel("warn")).toBe("WARN");
215
+ expect(logger.asLogLevel("error")).toBe("ERROR");
216
+ expect(logger.asLogLevel("silent")).toBe("SILENT");
217
+ });
218
+
219
+ it("should handle whitespace", ({ expect }) => {
220
+ const logger = createLogger();
221
+ expect(logger.asLogLevel(" debug ")).toBe("DEBUG");
222
+ expect(logger.asLogLevel(" trace ")).toBe("TRACE");
223
+ });
224
+
225
+ it("should throw error for invalid levels", ({ expect }) => {
226
+ const logger = createLogger();
227
+ expect(() => logger.asLogLevel("invalid")).toThrow(
228
+ "Invalid log level: invalid",
229
+ );
230
+ expect(() => logger.asLogLevel("")).toThrow("Invalid log level: ");
231
+ expect(() => logger.asLogLevel("DEBUqG")).toThrow(
232
+ "Invalid log level: DEBUqG",
233
+ );
234
+ });
235
+ });
236
+
237
+ describe("level getter", () => {
238
+ it("should update logLevel when state changes", ({ expect }) => {
239
+ const alepha = Alepha.create({
240
+ env: { LOG_LEVEL: "info" },
241
+ })
242
+ .with({
243
+ provide: LogDestinationProvider,
244
+ use: MemoryDestinationProvider,
245
+ })
246
+ .with({
247
+ provide: LogFormatterProvider,
248
+ use: PrettyFormatterProvider,
249
+ });
250
+
251
+ const logger = alepha.inject(Logger, {
252
+ lifetime: "transient",
253
+ args: ["TestService", "test.module"],
254
+ });
255
+
256
+ // Initial state
257
+ expect(logger.level).toBe("INFO");
258
+
259
+ // Change state
260
+ alepha.store.set("alepha.logger.level", "debug");
261
+ expect(logger.level).toBe("DEBUG");
262
+
263
+ // Change to module-specific config
264
+ alepha.store.set("alepha.logger.level", "test:trace,warn");
265
+ expect(logger.level).toBe("TRACE");
266
+ });
267
+
268
+ it("should cache parsed level until state changes", ({ expect }) => {
269
+ const alepha = Alepha.create({
270
+ env: { LOG_LEVEL: "info" },
271
+ })
272
+ .with({
273
+ provide: LogDestinationProvider,
274
+ use: MemoryDestinationProvider,
275
+ })
276
+ .with({
277
+ provide: LogFormatterProvider,
278
+ use: PrettyFormatterProvider,
279
+ });
280
+
281
+ const logger = alepha.inject(Logger, {
282
+ lifetime: "transient",
283
+ args: ["TestService", "test.module"],
284
+ });
285
+
286
+ alepha.store.set("alepha.logger.level", "test:debug,info");
287
+ const level1 = logger.level;
288
+ const level2 = logger.level;
289
+
290
+ expect(level1).toBe("DEBUG");
291
+ expect(level2).toBe("DEBUG");
292
+ expect(level1).toBe(level2); // Should be same instance/value
293
+ });
294
+ });
295
+ });
@@ -0,0 +1,175 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import {
3
+ JsonRpcErrorCodes,
4
+ McpError,
5
+ McpInvalidParamsError,
6
+ McpMethodNotFoundError,
7
+ McpPromptNotFoundError,
8
+ McpResourceNotFoundError,
9
+ McpToolNotFoundError,
10
+ } from "../index.ts";
11
+
12
+ // ---------------------------------------------------------------------------------------------------------------------
13
+
14
+ describe("McpError", () => {
15
+ test("should be an instance of Error", () => {
16
+ const error = new McpError("Test error");
17
+ expect(error).toBeInstanceOf(Error);
18
+ });
19
+
20
+ test("should have correct name", () => {
21
+ const error = new McpError("Test error");
22
+ expect(error.name).toBe("McpError");
23
+ });
24
+
25
+ test("should have correct message", () => {
26
+ const error = new McpError("Test error message");
27
+ expect(error.message).toBe("Test error message");
28
+ });
29
+
30
+ test("should default to INTERNAL_ERROR code", () => {
31
+ const error = new McpError("Test error");
32
+ expect(error.code).toBe(JsonRpcErrorCodes.INTERNAL_ERROR);
33
+ });
34
+
35
+ test("should accept custom error code", () => {
36
+ const error = new McpError("Test error", -32000);
37
+ expect(error.code).toBe(-32000);
38
+ });
39
+ });
40
+
41
+ // ---------------------------------------------------------------------------------------------------------------------
42
+
43
+ describe("McpMethodNotFoundError", () => {
44
+ test("should be an instance of McpError", () => {
45
+ const error = new McpMethodNotFoundError("unknown/method");
46
+ expect(error).toBeInstanceOf(McpError);
47
+ expect(error).toBeInstanceOf(Error);
48
+ });
49
+
50
+ test("should have correct name", () => {
51
+ const error = new McpMethodNotFoundError("unknown/method");
52
+ expect(error.name).toBe("McpMethodNotFoundError");
53
+ });
54
+
55
+ test("should include method name in message", () => {
56
+ const error = new McpMethodNotFoundError("custom/method");
57
+ expect(error.message).toBe("Method not found: custom/method");
58
+ });
59
+
60
+ test("should have METHOD_NOT_FOUND code", () => {
61
+ const error = new McpMethodNotFoundError("test");
62
+ expect(error.code).toBe(JsonRpcErrorCodes.METHOD_NOT_FOUND);
63
+ });
64
+ });
65
+
66
+ // ---------------------------------------------------------------------------------------------------------------------
67
+
68
+ describe("McpToolNotFoundError", () => {
69
+ test("should be an instance of McpError", () => {
70
+ const error = new McpToolNotFoundError("unknown-tool");
71
+ expect(error).toBeInstanceOf(McpError);
72
+ });
73
+
74
+ test("should have correct name", () => {
75
+ const error = new McpToolNotFoundError("test-tool");
76
+ expect(error.name).toBe("McpToolNotFoundError");
77
+ });
78
+
79
+ test("should include tool name in message", () => {
80
+ const error = new McpToolNotFoundError("my-tool");
81
+ expect(error.message).toBe("Tool not found: my-tool");
82
+ });
83
+
84
+ test("should store tool name as property", () => {
85
+ const error = new McpToolNotFoundError("calculator");
86
+ expect(error.tool).toBe("calculator");
87
+ });
88
+
89
+ test("should have METHOD_NOT_FOUND code", () => {
90
+ const error = new McpToolNotFoundError("test");
91
+ expect(error.code).toBe(JsonRpcErrorCodes.METHOD_NOT_FOUND);
92
+ });
93
+ });
94
+
95
+ // ---------------------------------------------------------------------------------------------------------------------
96
+
97
+ describe("McpResourceNotFoundError", () => {
98
+ test("should be an instance of McpError", () => {
99
+ const error = new McpResourceNotFoundError("file:///test");
100
+ expect(error).toBeInstanceOf(McpError);
101
+ });
102
+
103
+ test("should have correct name", () => {
104
+ const error = new McpResourceNotFoundError("file:///test");
105
+ expect(error.name).toBe("McpResourceNotFoundError");
106
+ });
107
+
108
+ test("should include URI in message", () => {
109
+ const error = new McpResourceNotFoundError("config://app");
110
+ expect(error.message).toBe("Resource not found: config://app");
111
+ });
112
+
113
+ test("should store URI as property", () => {
114
+ const error = new McpResourceNotFoundError("db://users/123");
115
+ expect(error.uri).toBe("db://users/123");
116
+ });
117
+
118
+ test("should have METHOD_NOT_FOUND code", () => {
119
+ const error = new McpResourceNotFoundError("test://");
120
+ expect(error.code).toBe(JsonRpcErrorCodes.METHOD_NOT_FOUND);
121
+ });
122
+ });
123
+
124
+ // ---------------------------------------------------------------------------------------------------------------------
125
+
126
+ describe("McpPromptNotFoundError", () => {
127
+ test("should be an instance of McpError", () => {
128
+ const error = new McpPromptNotFoundError("unknown-prompt");
129
+ expect(error).toBeInstanceOf(McpError);
130
+ });
131
+
132
+ test("should have correct name", () => {
133
+ const error = new McpPromptNotFoundError("test-prompt");
134
+ expect(error.name).toBe("McpPromptNotFoundError");
135
+ });
136
+
137
+ test("should include prompt name in message", () => {
138
+ const error = new McpPromptNotFoundError("greeting");
139
+ expect(error.message).toBe("Prompt not found: greeting");
140
+ });
141
+
142
+ test("should store prompt name as property", () => {
143
+ const error = new McpPromptNotFoundError("code-review");
144
+ expect(error.prompt).toBe("code-review");
145
+ });
146
+
147
+ test("should have METHOD_NOT_FOUND code", () => {
148
+ const error = new McpPromptNotFoundError("test");
149
+ expect(error.code).toBe(JsonRpcErrorCodes.METHOD_NOT_FOUND);
150
+ });
151
+ });
152
+
153
+ // ---------------------------------------------------------------------------------------------------------------------
154
+
155
+ describe("McpInvalidParamsError", () => {
156
+ test("should be an instance of McpError", () => {
157
+ const error = new McpInvalidParamsError("Invalid params");
158
+ expect(error).toBeInstanceOf(McpError);
159
+ });
160
+
161
+ test("should have correct name", () => {
162
+ const error = new McpInvalidParamsError("test");
163
+ expect(error.name).toBe("McpInvalidParamsError");
164
+ });
165
+
166
+ test("should have provided message", () => {
167
+ const error = new McpInvalidParamsError("Missing required parameter: name");
168
+ expect(error.message).toBe("Missing required parameter: name");
169
+ });
170
+
171
+ test("should have INVALID_PARAMS code", () => {
172
+ const error = new McpInvalidParamsError("test");
173
+ expect(error.code).toBe(JsonRpcErrorCodes.INVALID_PARAMS);
174
+ });
175
+ });